{"version":3,"file":"Dropzone.cjs","sources":["../../../../../src/components/file-input/internal/Dropzone.tsx"],"sourcesContent":["import clsx from \"clsx\";\nimport React, { forwardRef, useState } from \"react\";\nimport type { WithChildren } from \"../../../core/types.js\";\nimport type { UploadedFile } from \"../types.js\";\nimport { useFileInputContext } from \"./fileInputContext.js\";\nimport { validateFileInputFiles } from \"./validateFileInputFiles.js\";\n\ninterface DropzoneProps extends WithChildren {}\n\nexport const Dropzone = forwardRef<HTMLDivElement, DropzoneProps>(\n    (props, ref) => {\n        const { children, ...rest } = props;\n        const [onDragClassName, setOnDragClassName] = useState<string>(\"\");\n\n        const context = useFileInputContext();\n        if (!context) {\n            return (\n                <p>\n                    Dropzone must be placed inside a FileInputContextProvider.\n                </p>\n            );\n        }\n        const { maxSizeBytes, accept, onChange } = context;\n\n        return (\n            <div\n                {...rest}\n                ref={ref}\n                className={clsx(\"jkl-file-input__dropzone\", onDragClassName)}\n                onDragEnter={(e) => {\n                    setOnDragClassName(\"jkl-file-input__dropzone--enter\");\n                    e.preventDefault();\n                }}\n                onDragOver={(e) => {\n                    /* Prevent browser from opening file in a new tab */\n                    setOnDragClassName(\"jkl-file-input__dropzone--enter\");\n                    e.preventDefault();\n                }}\n                onDrop={(e) => {\n                    e.preventDefault();\n                    setOnDragClassName(\"\");\n\n                    if (e.dataTransfer.files) {\n                        onChange(\n                            e,\n                            [...e.dataTransfer.files].map<UploadedFile>(\n                                (file) => ({\n                                    file,\n                                    state: undefined,\n                                    validation: validateFileInputFiles(\n                                        file,\n                                        accept,\n                                        maxSizeBytes,\n                                    ),\n                                    uploadProgress: 0,\n                                }),\n                            ),\n                        );\n                    }\n                }}\n                onDragLeave={(e) => {\n                    setOnDragClassName(\"\");\n                    e.preventDefault();\n                }}\n            >\n                {children}\n            </div>\n        );\n    },\n);\n\nDropzone.displayName = \"Dropzone\";\n"],"names":["Dropzone","forwardRef","props","ref","children","rest","onDragClassName","setOnDragClassName","useState","context","useFileInputContext","jsx","maxSizeBytes","accept","onChange","className","clsx","onDragEnter","e","preventDefault","onDragOver","onDrop","dataTransfer","files","map","file","state","validation","validateFileInputFiles","uploadProgress","onDragLeave","displayName"],"mappings":"iQASaA,EAAWC,EAAAA,WACpB,CAACC,EAAOC,KACJ,MAAQC,SAAAA,KAAaC,GAASH,GACvBI,EAAiBC,GAAsBC,EAAAA,SAAiB,IAEzDC,EAAUC,EAAAA,sBAChB,IAAKD,EACD,OACIE,EAAAA,IAAC,KAAEP,SAAA,+DAKX,MAAQQ,aAAAA,EAAcC,OAAAA,EAAQC,SAAAA,GAAaL,EAE3C,OACIE,EAAAA,IAAC,MAAA,IACON,EACJF,IAAAA,EACAY,UAAWC,EAAAA,KAAK,2BAA4BV,GAC5CW,YAAcC,IACVX,EAAmB,mCACnBW,EAAEC,kBAENC,WAAaF,IAETX,EAAmB,mCACnBW,EAAEC,kBAENE,OAASH,IACLA,EAAEC,iBACFZ,EAAmB,IAEfW,EAAEI,aAAaC,OACfT,EACII,EACA,IAAIA,EAAEI,aAAaC,OAAOC,IACrBC,IAAAA,CACGA,KAAAA,EACAC,WAAO,EACPC,WAAYC,EAAAA,uBACRH,EACAZ,EACAD,GAEJiB,eAAgB,OAMpCC,YAAcZ,IACVX,EAAmB,IACnBW,EAAEC,kBAGLf,SAAAA,MAMjBJ,EAAS+B,YAAc"}