@react-magma/dropzone 12.0.2-next.0 → 12.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/fileuploader.js +1 -1
- package/dist/fileuploader.js.map +1 -1
- package/dist/fileuploader.modern.js +15 -12
- package/dist/fileuploader.modern.js.map +1 -1
- package/dist/fileuploader.modern.module.js +1 -1
- package/dist/fileuploader.modern.module.js.map +1 -1
- package/dist/fileuploader.umd.js +1 -1
- package/dist/fileuploader.umd.js.map +1 -1
- package/package.json +13 -8
- package/src/components/dropzone/Dropzone.test.js +23 -12
- package/src/components/dropzone/Dropzone.tsx +176 -79
- package/src/components/dropzone/Preview.tsx +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileuploader.modern.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\n\nimport { magma } from 'react-magma-dom';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint = 2,\n bytesLabel = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger300\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.removeFile}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.deleteFile}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger300 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\n\nimport { transparentize } from 'polished';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport { CloudUploadIcon } from 'react-magma-icons';\n\nimport { FilePreview, FileError } from './FilePreview';\nimport { Preview } from './Preview';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger300}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n setFiles((files: FilePreview[]) => [\n ...files,\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ]);\n },\n []\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n ...dropzoneOptions,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n const dragState: DragState = errorMessage\n ? 'error'\n : isDragAccept\n ? 'dragAccept'\n : isDragReject\n ? 'dragReject'\n : isDragActive\n ? 'dragActive'\n : 'default';\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onRemoveFile &&\n typeof onRemoveFile === 'function' &&\n onRemoveFile(removedFile);\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onDeleteFile &&\n typeof onDeleteFile === 'function' &&\n onDeleteFile(removedFile);\n };\n\n const setProgress = (props: { percent: number; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${props.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n };\n\n const setFinished = (props: { file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n };\n\n const setError = (props: { errors: FileError[]; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n errors: props.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n setErrorMessage(\n formatError(\n maxFileError\n ? 'too-many-files'\n : minFileError\n ? 'too-few-files'\n : null,\n { minFiles, maxFiles }\n )\n );\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((files: FilePreview[]) => {\n return files.map((file: FilePreview) => {\n !file.errors &&\n !file.processor &&\n onSendFile &&\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n return file;\n });\n });\n }\n }, [sendFiles, files.length, onSendFile]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage theme={theme} isInverse={isInverse}>\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n {files.map((file: FilePreview) => (\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n key={file.name}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n ))}\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","file","isInverse","path","type","category","split","extension","pop","_jsx","size","iconSizes","medium","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_","t","Thumb","styled","div","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral300","typeScale","size02","fontSize","lineHeight","StyledFlex","Flex","FileName","StyledCard","Card","errors","danger300","danger","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","actions","setActions","useState","CloseIcon","handleRemoveFile","handleDeleteFile","FinishedActions","status","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","name","marginLeft","percent","slice","map","_ref","code","header","message","formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","Fragment","danger200","Container","noDrag","dragState","neutral400","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","spaceScale","spacing01","Dropzone","containerStyle","disabled","dropzoneOptions","multiple","helperMessage","id","defaultId","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","onSendFile","sendFiles","files","setFiles","errorMessage","setErrorMessage","useGenerateId","onDrop","useCallback","acceptedFiles","rejectedFiles","Object","assign","URL","createObjectURL","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useDropzone","noClick","useImperativeHandle","current","inputProps","removedFile","filter","setProgress","setFinished","setError","forEach","revokeObjectURL","minFileError","maxFileError","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fileuploader.modern.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\n\nimport { magma } from 'react-magma-dom';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint = 2,\n bytesLabel = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger300\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={`${i18n.dropzone.removeFile} ${file.name}`}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={`${i18n.dropzone.deleteFile} ${file.name}`}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger300 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\n\nimport { transparentize } from 'polished';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n Announce,\n VisuallyHidden,\n} from 'react-magma-dom';\nimport { CloudUploadIcon } from 'react-magma-icons';\n\nimport { FilePreview, FileError } from './FilePreview';\nimport { Preview } from './Preview';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger300}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\n\nconst PreviewList = styled.ul`\n list-style: none;\n padding: 0;\n`;\n\nconst PreviewItem = styled.li``;\n\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n const [announcement, setAnnouncement] = React.useState<string>('');\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n const helperMessageId = useGenerateId(`${id}-helper`);\n\n const browseFileButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n const newFiles = [\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ];\n\n setFiles((prevFiles: FilePreview[]) => [...prevFiles, ...newFiles]);\n\n if (acceptedFiles.length > 0) {\n const fileNames = acceptedFiles.map(file => file.name).join(', ');\n const message =\n acceptedFiles.length === 1\n ? i18n.dropzone.fileAdded.replace(/\\{fileName\\}/g, fileNames)\n : i18n.dropzone.filesAdded\n .replace(/\\{count\\}/g, acceptedFiles.length.toString())\n .replace(/\\{fileNames\\}/g, fileNames);\n\n setAnnouncement(message);\n }\n\n browseFileButtonRef.current && browseFileButtonRef.current.focus();\n },\n [i18n]\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n ...dropzoneOptions,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n let dragState: DragState = 'default';\n\n if (errorMessage) {\n dragState = 'error';\n } else if (isDragAccept) {\n dragState = 'dragAccept';\n } else if (isDragReject) {\n dragState = 'dragReject';\n } else if (isDragActive) {\n dragState = 'dragActive';\n }\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(prevFiles => prevFiles.filter(file => file !== removedFile));\n\n if (onRemoveFile && typeof onRemoveFile === 'function') {\n onRemoveFile(removedFile);\n }\n\n const message = i18n.dropzone.fileRemoved.replace(\n /\\{fileName\\}/g,\n removedFile.name\n );\n\n setAnnouncement(message);\n\n browseFileButtonRef.current && browseFileButtonRef.current.focus();\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(prevFiles => prevFiles.filter(file => file !== removedFile));\n\n if (onDeleteFile && typeof onDeleteFile === 'function') {\n onDeleteFile(removedFile);\n }\n\n const message = i18n.dropzone.fileDeleted.replace(\n /\\{fileName\\}/g,\n removedFile.name\n );\n\n setAnnouncement(message);\n\n browseFileButtonRef.current && browseFileButtonRef.current.focus();\n };\n\n const setProgress = (progressProps: {\n percent: number;\n file: FilePreview;\n }) => {\n setFiles(prevFiles =>\n prevFiles.map(file =>\n file === progressProps.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${progressProps.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n\n // Announce progress every 25% to avoid too many announcements\n if (progressProps.percent > 0 && progressProps.percent % 25 === 0) {\n const message = i18n.dropzone.fileUploading\n .replace(/\\{fileName\\}/g, progressProps.file.name)\n .replace(/\\{percent\\}/g, progressProps.percent.toString());\n\n setAnnouncement(message);\n }\n };\n\n const setFinished = (finishedProps: { file: FilePreview }) => {\n setFiles(prevFiles =>\n prevFiles.map(file =>\n file === finishedProps.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n\n // Announce successful upload\n const message = i18n.dropzone.fileUploaded.replace(\n /\\{fileName\\}/g,\n finishedProps.file.name\n );\n\n setAnnouncement(message);\n };\n\n const setError = (errorProps: {\n errors: FileError[];\n file: FilePreview;\n }) => {\n setFiles(prevFiles =>\n prevFiles.map(file =>\n file === errorProps.file\n ? Object.assign(file, {\n errors: errorProps.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n let errorCode: string | null = null;\n\n if (maxFileError) {\n errorCode = 'too-many-files';\n } else if (minFileError) {\n errorCode = 'too-few-files';\n }\n\n setErrorMessage(formatError(errorCode, { minFiles, maxFiles }));\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((prevFiles: FilePreview[]) => {\n return prevFiles.map((file: FilePreview) => {\n if (!file.errors && !file.processor && onSendFile) {\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n }\n\n return file;\n });\n });\n }\n }, [\n sendFiles,\n files.length,\n onSendFile,\n maxFiles,\n minFiles,\n i18n.dropzone.errors,\n i18n.dropzone.files,\n ]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage\n id={helperMessageId}\n theme={theme}\n isInverse={isInverse}\n >\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n ref={browseFileButtonRef}\n aria-describedby={helperMessage ? helperMessageId : undefined}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n ref={browseFileButtonRef}\n aria-describedby={helperMessage ? helperMessageId : undefined}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n <PreviewList>\n {files.map((file: FilePreview) => (\n <PreviewItem key={file.name}>\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n </PreviewItem>\n ))}\n </PreviewList>\n\n <VisuallyHidden>\n <Announce>{announcement}</Announce>\n </VisuallyHidden>\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","file","isInverse","path","type","category","split","extension","pop","_jsx","size","iconSizes","medium","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_","t","Thumb","styled","div","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral300","typeScale","size02","fontSize","lineHeight","StyledFlex","Flex","FileName","StyledCard","Card","errors","danger300","danger","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","actions","setActions","useState","CloseIcon","handleRemoveFile","handleDeleteFile","FinishedActions","status","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","name","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref","code","header","message","formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","Fragment","danger200","Container","noDrag","dragState","neutral400","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","spaceScale","spacing01","PreviewList","ul","PreviewItem","li","Dropzone","containerStyle","disabled","dropzoneOptions","multiple","helperMessage","id","defaultId","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","onSendFile","sendFiles","files","setFiles","errorMessage","setErrorMessage","announcement","setAnnouncement","useGenerateId","helperMessageId","browseFileButtonRef","useRef","onDrop","useCallback","acceptedFiles","rejectedFiles","newFiles","Object","assign","URL","createObjectURL","prevFiles","fileNames","fileAdded","replace","filesAdded","toString","current","focus","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useDropzone","noClick","useImperativeHandle","inputProps","removedFile","filter","fileRemoved","fileDeleted","setProgress","progressProps","fileUploading","setFinished","finishedProps","fileUploaded","setError","errorProps","forEach","revokeObjectURL","minFileError","maxFileError","errorCode","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid","VisuallyHidden","Announce"],"mappings":"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"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{magma as e,styled as n,Flex as r,Card as i,ThemeContext as t,I18nContext as o,useIsInverse as l,InverseContext as a,FlexBehavior as s,FlexAlignItems as c,IconButton as u,ButtonVariant as d,ButtonColor as p,Spinner as f,Transition as m,useGenerateId as g,FormFieldContainer as h,Button as v}from"react-magma-dom";import{InsertDriveFileIcon as x,FileWordIcon as y,FileExcelIcon as b,FilePowerpointIcon as z,FilePdfIcon as S,ImageIcon as I,VideocamIcon as w,AudiotrackIcon as F,FileZipIcon as k,CloseIcon as D,ErrorIcon as O,CheckCircleIcon as R,DeleteIcon as j,CloudUploadIcon as C}from"react-magma-icons";import{jsx as A,jsxs as B}from"react/jsx-runtime";import M,{forwardRef as H,useContext as L,useState as P,useEffect as E,useImperativeHandle as T}from"react";import{transparentize as U}from"polished";import{useDropzone as V}from"react-dropzone";var G={default:{Icon:x,style:{color:e.colors.neutral500}},word:{Icon:y,style:{color:e.colors.info500}},excel:{Icon:b,style:{color:e.colors.success500}},powerpoint:{Icon:z,style:{color:e.colors.warning500}},pdf:{Icon:S,style:{color:e.colors.danger500}},image:{Icon:I,style:{color:e.colors.neutral500}},video:{Icon:w,style:{color:e.colors.neutral500}},audio:{Icon:F,style:{color:e.colors.neutral500}},archive:{Icon:k,style:{color:e.colors.neutral500}}},K={default:G.default,xlsx:G.excel,xlsm:G.excel,xlsb:G.excel,xltx:G.excel,xls:G.excel,xlt:G.excel,doc:G.word,docx:G.word,docm:G.word,dotx:G.word,dotm:G.word,docb:G.word,pptx:G.powerpoint,pptm:G.powerpoint,ppt:G.powerpoint,pdf:G.pdf,png:G.image,svg:G.image,image:G.image,audio:G.audio,video:G.video,zip:G.archive},W=function(n){var r=n.file,i=n.isInverse,t=r.path,o=void 0===t?"":t,l=r.type,a=(void 0===l?"":l).split("/")[0],s=o.split(".").pop()||"default",c=K[s]||K[a]||K.default;/*#__PURE__*/return A(c.Icon,{size:e.iconSizes.medium,style:i?{}:c.style})};function Y(){return Y=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var i in r)({}).hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},Y.apply(null,arguments)}function Z(e,n){if(null==e)return{};var r={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==n.indexOf(i))continue;r[i]=e[i]}return r}function q(e,n){return n||(n=e.slice(0)),e.raw=n,e}var J,N,Q,X,$,_,ee,ne,re,ie,te,oe=function(e,n,r){if(void 0===n&&(n=2),void 0===r&&(r="Bytes"),void 0!==e){if(0==e)return"0 "+r;var i=[r,"KB","MB","GB","TB","PB","EB","ZB","YB"],t=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,t)).toFixed(n))+" "+i[t]}},le=["accept","file","isInverse","maxSize","minSize","onDeleteFile","onRemoveFile","testId","thumbnails"],ae=["code"],se=n.div(J||(J=q(["\n background-image: ",";\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n"])),function(e){var n=e.file;return"url('"+("preview"in n&&n.preview)+"')"}),ce=n.div(N||(N=q(["\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n"]))),ue={marginRight:"12px",display:"flex"},de=n.div(Q||(Q=q(["\n border-top: 1px solid ",";\n padding: 16px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.colors.neutral300},function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),pe=n(r)(X||(X=q(["\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),fe=n(r)($||($=q(["\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),me=n(i)(_||(_=q(["\n background-color: none;\n border-color: ",";\n border-width: 1px;\n margin: 10px 0;\n"])),function(e){var n=e.theme;return e.file.errors?e.isInverse?n.colors.danger300:n.colors.danger:n.colors.neutral300}),ge=n.span(ee||(ee=q(["\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n"]))),he=n.span(ne||(ne=q(["\n display: block;\n"]))),ve=/*#__PURE__*/H(function(e,n){var i,g=e.accept,h=e.file,v=e.isInverse,x=e.maxSize,y=e.minSize,b=e.onDeleteFile,z=e.onRemoveFile,S=e.thumbnails,I=Z(e,le),w=L(t),F=M.useContext(o),k=l(v),C=P(/*#__PURE__*/A(D,{})),H=C[0],T=C[1],U=function(){z&&"function"==typeof z&&z(h)},V=function(){b&&"function"==typeof b&&b(h)},G=function(e){var n=e.status,r=void 0===n?"ready":n,i=P(!1),t=i[0],o=i[1];return E(function(){var e=!0;return setTimeout(function(){e&&o(!0)},1e3),function(){e=!1}},[r]),"error"===r||"ready"===r?/*#__PURE__*/A(ce,{children:/*#__PURE__*/A(u,{onClick:U,variant:d.link,color:p.secondary,"aria-label":F.dropzone.removeFile,icon:/*#__PURE__*/A(D,{})})}):"pending"===r?/*#__PURE__*/A(ce,{children:/*#__PURE__*/A(f,{color:k?w.colors.neutral100:w.colors.primary})}):/*#__PURE__*/B(ce,{children:[/*#__PURE__*/A(m,{isOpen:!t,unmountOnExit:!0,fade:!0,children:/*#__PURE__*/A(R,{color:k?w.colors.success200:w.colors.success,style:{marginTop:"4px"}})}),/*#__PURE__*/A(m,{isOpen:t,unmountOnExit:!0,fade:!0,children:/*#__PURE__*/A(u,{onClick:V,variant:d.link,color:p.secondary,"aria-label":F.dropzone.deleteFile,icon:/*#__PURE__*/A(j,{})})})]})};return E(function(){var e;T(/*#__PURE__*/A(G,{status:null==h||null==(e=h.processor)?void 0:e.status}))},[null==h||null==(i=h.processor)?void 0:i.status]),/*#__PURE__*/A(a.Provider,{value:{isInverse:k},children:/*#__PURE__*/B(me,{isInverse:k,theme:w,file:h,"data-testid":e.testId,ref:n,role:h.errors?"alert":"",children:[/*#__PURE__*/B(pe,Y({theme:w,behavior:s.container,alignItems:c.center},I,{children:[/*#__PURE__*/A(r,{behavior:s.item,alignItems:c.center,style:ue,children:h.errors?/*#__PURE__*/A(O,{color:k?w.colors.danger300:w.colors.danger,size:24}):h.preview&&S&&h.type&&h.type.startsWith("image")?/*#__PURE__*/A(se,{role:"img",file:h}):/*#__PURE__*/A(W,{isInverse:k,file:h})}),/*#__PURE__*/A(fe,{xs:!0,behavior:s.item,theme:w,children:h.name}),h.processor&&"pending"===h.processor.status&&/*#__PURE__*/A(r,{role:"progressbar",style:{marginLeft:"auto"},behavior:s.item,children:h.processor.percent}),/*#__PURE__*/A(r,{behavior:s.item,children:H})]})),h.errors&&/*#__PURE__*/A(de,{theme:w,children:h.errors.slice(0,1).map(function(e){var n=e.code,r=function(e,n,r){var i=Array.isArray(n.accept)&&1===n.accept.length?n.accept[0]:n.accept,t=Array.isArray(i)?"one of "+i.join(", "):i;switch(e.code){case"file-too-large":return Y({},e,{message:e.message+" "+oe(n.maxSize,2,r)+"."});case"file-too-small":return Y({},e,{message:e.message+" "+oe(n.minSize,2,r)+"."});case"file-invalid-type":return Y({},e,{message:e.message+": "+t});default:return e}}(Y({code:n},Z(e,ae),F.dropzone.errors[n]),{accept:g,minSize:y,maxSize:x},F.dropzone.bytes),i=r.header,t=r.message;/*#__PURE__*/return B(M.Fragment,{children:[/*#__PURE__*/A(ge,{style:{color:k?w.colors.danger200:w.colors.danger},children:void 0===i?"":i}),/*#__PURE__*/A(he,{children:t})]},n)})})]})})}),xe=["accept","containerStyle","disabled","dropzoneOptions","helperMessage","id","inputSize","isInverse","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","maxSize","minSize","multiple","noDrag","onSendFile","onDeleteFile","onRemoveFile","sendFiles","testId","thumbnails"],ye=n(r)(re||(re=q(["\n flex-direction: column;\n align-items: ",";\n justify-content: ",";\n text-align: ",";\n padding: ",";\n border-radius: ",";\n border: ",";\n\n border-style: ",";\n background-color: ",";\n outline: none;\n transition: ",";\n"])),function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"0px":"24px"},function(e){return e.noDrag?"0px":"4px"},function(e){var n=e.dragState,r=void 0===n?"default":n,i=e.theme;return e.noDrag?"0px":"dragReject"===r||"error"===r?e.isInverse?"1px dashed "+i.colors.danger300:"1px dashed "+i.colors.danger:"dragActive"===r?"1px dashed "+i.colors.primary:"dragAccept"===r?"1px dashed "+i.colors.success:"1px dashed "+i.colors.neutral400},function(e){var n=e.dragState;return"error"===(void 0===n?"default":n)?"solid":"dashed"},function(e){var n=e.theme;return e.noDrag?"transparent":e.isInverse?U(.75,n.colors.neutral900):n.colors.neutral200},function(e){return"border "+(e.noDrag?0:".24s")+" ease-in-out"}),be=n.span(ie||(ie=q(["\n color: ",";\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n"])),function(e){var n=e.theme;return e.isInverse?n.colors.neutral100:n.colors.neutral700}),ze=n.div(te||(te=q(["\n color: ",";\n margin: 0 0 24px 0;\n font-size: ",";\n line-height: ",";\n font-weight: 500;\n padding: ",";\n"])),function(e){var n=e.theme;return e.isInverse?n.colors.neutral100:n.colors.neutral700},function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight},function(e){return e.theme.spaceScale.spacing01}),Se=/*#__PURE__*/M.forwardRef(function(e,n){var i=e.accept,c=e.containerStyle,u=e.disabled,f=e.dropzoneOptions,m=void 0===f?{multiple:!0}:f,x=e.helperMessage,y=e.id,b=e.inputSize,z=e.isInverse,S=e.isLabelVisuallyHidden,I=e.labelStyle,w=e.labelText,F=e.maxFiles,k=e.minFiles,D=e.maxSize,O=e.minSize,R=e.multiple,j=void 0===R||R,H=e.noDrag,L=void 0!==H&&H,P=e.onSendFile,E=e.onDeleteFile,U=e.onRemoveFile,G=e.sendFiles,K=void 0!==G&&G,W=e.testId,q=e.thumbnails,J=void 0===q||q,N=Z(e,xe),Q=M.useState([]),X=Q[0],$=Q[1],_=M.useState(null),ee=_[0],ne=_[1],re=l(z),ie=M.useContext(t),te=M.useContext(o),oe=g(y),le=M.useCallback(function(e,n){$(function(r){return[].concat(r,e.map(function(e){return Object.assign(e,{preview:URL.createObjectURL(e)})}),n.map(function(e){return Object.assign(e.file,{errors:e.errors})}))})},[]),ae=V(Y({noClick:!0,disabled:u,multiple:j,maxSize:D,minSize:O,accept:i,onDrop:le,noDrag:L},m)),se=ae.getInputProps,ce=ae.getRootProps,ue=ae.isDragAccept,de=ae.isDragActive,pe=ae.isDragReject,fe=ae.open,me=ae.inputRef;T(n,function(){return me.current});var ge=se({id:oe}),he=ee?"error":ue?"dragAccept":pe?"dragReject":de?"dragActive":"default",Se=function(e){$(function(n){return n.filter(function(n){return n!==e})}),U&&"function"==typeof U&&U(e)},Ie=function(e){$(function(n){return n.filter(function(n){return n!==e})}),E&&"function"==typeof E&&E(e)},we=function(e){$(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{processor:Y({},n.processor,{percent:e.percent+"%",status:"pending"})}):n})})},Fe=function(e){$(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{processor:Y({},n.processor,{percent:"",status:"finished"})}):n})})},ke=function(e){$(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{errors:e.errors,processor:Y({},n.processor,{status:"error"})}):n})})};return M.useEffect(function(){return function(){X.forEach(function(e){return e.preview&&URL.revokeObjectURL(e.preview)})}},[X]),M.useEffect(function(){var e=k&&X.length<k,n=F&&X.length>F;ne(function(e,n){if(null===e)return null;var r=te.dropzone.errors[e];switch(e){case"too-many-files":return r.message+" "+n.maxFiles+" "+te.dropzone.files+".";case"too-few-files":return r.message+" "+n.minFiles+" "+te.dropzone.files+".";default:return r.message}}(n?"too-many-files":e?"too-few-files":null,{minFiles:k,maxFiles:F})),K&&X.length>0&&!n&&!e&&$(function(e){return e.map(function(e){return!e.errors&&!e.processor&&P&&P({file:e,onError:ke,onFinish:Fe,onProgress:we}),e})})},[K,X.length,P]),/*#__PURE__*/B(a.Provider,{value:{isInverse:re},children:[/*#__PURE__*/B(h,{actionable:!1,containerStyle:c,errorMessage:ee,fieldId:oe,inputSize:b,isInverse:re,isLabelVisuallyHidden:S,labelStyle:I,labelText:w,messageStyle:{minHeight:0},"data-testid":W,children:[/*#__PURE__*/A(be,{theme:ie,isInverse:re,children:x}),/*#__PURE__*/B(ye,Y({behavior:s.container,dragState:he,isInverse:re,noDrag:L,theme:ie},ce(),N,{testId:W,tabIndex:-1,children:[/*#__PURE__*/A("input",{ref:me,type:ge.type,accept:ge.accept,autoComplete:ge.autoComplete,id:ge.id,multiple:ge.multiple,onChange:ge.onChange,onClick:ge.onClick,style:ge.style,tabIndex:ge.tabIndex,"data-testid":"file-input"}),L?/*#__PURE__*/A(r,{xs:!0,behavior:s.item,children:/*#__PURE__*/A(v,{color:p.primary,disabled:u,isInverse:re,onClick:fe,style:{margin:0},children:te.dropzone.browseFiles})}):/*#__PURE__*/B(r,{behavior:s.item,children:[/*#__PURE__*/A(C,{"aria-hidden":"true",color:re?ie.colors.neutral100:ie.colors.neutral500,size:48}),/*#__PURE__*/A(ze,{isInverse:re,theme:ie,children:te.dropzone.dragMessage}),/*#__PURE__*/A(v,{color:p.primary,disabled:u,isInverse:re,onClick:fe,style:{margin:0},variant:d.solid,children:te.dropzone.browseFiles})]})]}))]}),X.map(function(e){/*#__PURE__*/return A(ve,{accept:i,file:e,isInverse:re,maxSize:D,minSize:O,onDeleteFile:Ie,onRemoveFile:Se,thumbnails:J},e.name)})]})});export{Se as Dropzone,W as FileIcon};
|
|
1
|
+
import{magma as e,styled as n,Flex as r,Card as i,ThemeContext as o,I18nContext as t,useIsInverse as l,InverseContext as a,FlexBehavior as s,FlexAlignItems as c,IconButton as d,ButtonVariant as u,ButtonColor as p,Spinner as f,Transition as m,useGenerateId as g,FormFieldContainer as h,Button as v,VisuallyHidden as x,Announce as y}from"react-magma-dom";import{InsertDriveFileIcon as b,FileWordIcon as z,FileExcelIcon as S,FilePowerpointIcon as I,FilePdfIcon as w,ImageIcon as F,VideocamIcon as k,AudiotrackIcon as D,FileZipIcon as O,CloseIcon as R,ErrorIcon as j,CheckCircleIcon as C,DeleteIcon as A,CloudUploadIcon as B}from"react-magma-icons";import{jsx as M,jsxs as H}from"react/jsx-runtime";import L,{forwardRef as P,useContext as E,useState as N,useEffect as T,useImperativeHandle as U}from"react";import{transparentize as V}from"polished";import{useDropzone as G}from"react-dropzone";var K={default:{Icon:b,style:{color:e.colors.neutral500}},word:{Icon:z,style:{color:e.colors.info500}},excel:{Icon:S,style:{color:e.colors.success500}},powerpoint:{Icon:I,style:{color:e.colors.warning500}},pdf:{Icon:w,style:{color:e.colors.danger500}},image:{Icon:F,style:{color:e.colors.neutral500}},video:{Icon:k,style:{color:e.colors.neutral500}},audio:{Icon:D,style:{color:e.colors.neutral500}},archive:{Icon:O,style:{color:e.colors.neutral500}}},W={default:K.default,xlsx:K.excel,xlsm:K.excel,xlsb:K.excel,xltx:K.excel,xls:K.excel,xlt:K.excel,doc:K.word,docx:K.word,docm:K.word,dotx:K.word,dotm:K.word,docb:K.word,pptx:K.powerpoint,pptm:K.powerpoint,ppt:K.powerpoint,pdf:K.pdf,png:K.image,svg:K.image,image:K.image,audio:K.audio,video:K.video,zip:K.archive},Y=function(n){var r=n.file,i=n.isInverse,o=r.path,t=void 0===o?"":o,l=r.type,a=(void 0===l?"":l).split("/")[0],s=t.split(".").pop()||"default",c=W[s]||W[a]||W.default;/*#__PURE__*/return M(c.Icon,{size:e.iconSizes.medium,style:i?{}:c.style})};function Z(){return Z=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var r=arguments[n];for(var i in r)({}).hasOwnProperty.call(r,i)&&(e[i]=r[i])}return e},Z.apply(null,arguments)}function q(e,n){if(null==e)return{};var r={};for(var i in e)if({}.hasOwnProperty.call(e,i)){if(-1!==n.indexOf(i))continue;r[i]=e[i]}return r}function J(e,n){return n||(n=e.slice(0)),e.raw=n,e}var Q,X,$,_,ee,ne,re,ie,oe,te,le,ae,se,ce=function(e,n,r){if(void 0===n&&(n=2),void 0===r&&(r="Bytes"),void 0!==e){if(0==e)return"0 "+r;var i=[r,"KB","MB","GB","TB","PB","EB","ZB","YB"],o=Math.floor(Math.log(e)/Math.log(1024));return parseFloat((e/Math.pow(1024,o)).toFixed(n))+" "+i[o]}},de=["accept","file","isInverse","maxSize","minSize","onDeleteFile","onRemoveFile","testId","thumbnails"],ue=["code"],pe=n.div(Q||(Q=J(["\n background-image: ",";\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n"])),function(e){var n=e.file;return"url('"+("preview"in n&&n.preview)+"')"}),fe=n.div(X||(X=J(["\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n"]))),me={marginRight:"12px",display:"flex"},ge=n.div($||($=J(["\n border-top: 1px solid ",";\n padding: 16px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.colors.neutral300},function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),he=n(r)(_||(_=J(["\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),ve=n(r)(ee||(ee=J(["\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ",";\n line-height: ",";\n"])),function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight}),xe=n(i)(ne||(ne=J(["\n background-color: none;\n border-color: ",";\n border-width: 1px;\n margin: 10px 0;\n"])),function(e){var n=e.theme;return e.file.errors?e.isInverse?n.colors.danger300:n.colors.danger:n.colors.neutral300}),ye=n.span(re||(re=J(["\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n"]))),be=n.span(ie||(ie=J(["\n display: block;\n"]))),ze=/*#__PURE__*/P(function(e,n){var i,g=e.accept,h=e.file,v=e.isInverse,x=e.maxSize,y=e.minSize,b=e.onDeleteFile,z=e.onRemoveFile,S=e.thumbnails,I=q(e,de),w=E(o),F=L.useContext(t),k=l(v),D=N(/*#__PURE__*/M(R,{})),O=D[0],B=D[1],P=function(){z&&"function"==typeof z&&z(h)},U=function(){b&&"function"==typeof b&&b(h)},V=function(e){var n=e.status,r=void 0===n?"ready":n,i=N(!1),o=i[0],t=i[1];return T(function(){var e=!0;return setTimeout(function(){e&&t(!0)},1e3),function(){e=!1}},[r]),"error"===r||"ready"===r?/*#__PURE__*/M(fe,{children:/*#__PURE__*/M(d,{onClick:P,variant:u.link,color:p.secondary,"aria-label":F.dropzone.removeFile+" "+h.name,icon:/*#__PURE__*/M(R,{})})}):"pending"===r?/*#__PURE__*/M(fe,{children:/*#__PURE__*/M(f,{color:k?w.colors.neutral100:w.colors.primary})}):/*#__PURE__*/H(fe,{children:[/*#__PURE__*/M(m,{isOpen:!o,unmountOnExit:!0,fade:!0,children:/*#__PURE__*/M(C,{color:k?w.colors.success200:w.colors.success,style:{marginTop:"4px"}})}),/*#__PURE__*/M(m,{isOpen:o,unmountOnExit:!0,fade:!0,children:/*#__PURE__*/M(d,{onClick:U,variant:u.link,color:p.secondary,"aria-label":F.dropzone.deleteFile+" "+h.name,icon:/*#__PURE__*/M(A,{})})})]})};return T(function(){var e;B(/*#__PURE__*/M(V,{status:null==h||null==(e=h.processor)?void 0:e.status}))},[null==h||null==(i=h.processor)?void 0:i.status]),/*#__PURE__*/M(a.Provider,{value:{isInverse:k},children:/*#__PURE__*/H(xe,{isInverse:k,theme:w,file:h,"data-testid":e.testId,ref:n,role:h.errors?"alert":"",children:[/*#__PURE__*/H(he,Z({theme:w,behavior:s.container,alignItems:c.center},I,{children:[/*#__PURE__*/M(r,{behavior:s.item,alignItems:c.center,style:me,children:h.errors?/*#__PURE__*/M(j,{color:k?w.colors.danger300:w.colors.danger,size:24}):h.preview&&S&&h.type&&h.type.startsWith("image")?/*#__PURE__*/M(pe,{role:"img",file:h}):/*#__PURE__*/M(Y,{isInverse:k,file:h})}),/*#__PURE__*/M(ve,{xs:!0,behavior:s.item,theme:w,children:h.name}),h.processor&&"pending"===h.processor.status&&/*#__PURE__*/M(r,{role:"progressbar",style:{marginLeft:"auto"},behavior:s.item,children:h.processor.percent}),/*#__PURE__*/M(r,{behavior:s.item,children:O})]})),h.errors&&/*#__PURE__*/M(ge,{theme:w,children:h.errors.slice(0,1).map(function(e){var n=e.code,r=function(e,n,r){var i=Array.isArray(n.accept)&&1===n.accept.length?n.accept[0]:n.accept,o=Array.isArray(i)?"one of "+i.join(", "):i;switch(e.code){case"file-too-large":return Z({},e,{message:e.message+" "+ce(n.maxSize,2,r)+"."});case"file-too-small":return Z({},e,{message:e.message+" "+ce(n.minSize,2,r)+"."});case"file-invalid-type":return Z({},e,{message:e.message+": "+o});default:return e}}(Z({code:n},q(e,ue),F.dropzone.errors[n]),{accept:g,minSize:y,maxSize:x},F.dropzone.bytes),i=r.header,o=r.message;/*#__PURE__*/return H(L.Fragment,{children:[/*#__PURE__*/M(ye,{style:{color:k?w.colors.danger200:w.colors.danger},children:void 0===i?"":i}),/*#__PURE__*/M(be,{children:o})]},n)})})]})})}),Se=["accept","containerStyle","disabled","dropzoneOptions","helperMessage","id","inputSize","isInverse","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","maxSize","minSize","multiple","noDrag","onSendFile","onDeleteFile","onRemoveFile","sendFiles","testId","thumbnails"],Ie=n(r)(oe||(oe=J(["\n flex-direction: column;\n align-items: ",";\n justify-content: ",";\n text-align: ",";\n padding: ",";\n border-radius: ",";\n border: ",";\n\n border-style: ",";\n background-color: ",";\n outline: none;\n transition: ",";\n"])),function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"left":"center"},function(e){return e.noDrag?"0px":"24px"},function(e){return e.noDrag?"0px":"4px"},function(e){var n=e.dragState,r=void 0===n?"default":n,i=e.theme;return e.noDrag?"0px":"dragReject"===r||"error"===r?e.isInverse?"1px dashed "+i.colors.danger300:"1px dashed "+i.colors.danger:"dragActive"===r?"1px dashed "+i.colors.primary:"dragAccept"===r?"1px dashed "+i.colors.success:"1px dashed "+i.colors.neutral400},function(e){var n=e.dragState;return"error"===(void 0===n?"default":n)?"solid":"dashed"},function(e){var n=e.theme;return e.noDrag?"transparent":e.isInverse?V(.75,n.colors.neutral900):n.colors.neutral200},function(e){return"border "+(e.noDrag?0:".24s")+" ease-in-out"}),we=n.span(te||(te=J(["\n color: ",";\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n"])),function(e){var n=e.theme;return e.isInverse?n.colors.neutral100:n.colors.neutral700}),Fe=n.div(le||(le=J(["\n color: ",";\n margin: 0 0 24px 0;\n font-size: ",";\n line-height: ",";\n font-weight: 500;\n padding: ",";\n"])),function(e){var n=e.theme;return e.isInverse?n.colors.neutral100:n.colors.neutral700},function(e){return e.theme.typeScale.size02.fontSize},function(e){return e.theme.typeScale.size02.lineHeight},function(e){return e.theme.spaceScale.spacing01}),ke=n.ul(ae||(ae=J(["\n list-style: none;\n padding: 0;\n"]))),De=n.li(se||(se=J([""]))),Oe=/*#__PURE__*/L.forwardRef(function(e,n){var i=e.accept,c=e.containerStyle,d=e.disabled,f=e.dropzoneOptions,m=void 0===f?{multiple:!0}:f,b=e.helperMessage,z=e.id,S=e.inputSize,I=e.isInverse,w=e.isLabelVisuallyHidden,F=e.labelStyle,k=e.labelText,D=e.maxFiles,O=e.minFiles,R=e.maxSize,j=e.minSize,C=e.multiple,A=void 0===C||C,P=e.noDrag,E=void 0!==P&&P,N=e.onSendFile,T=e.onDeleteFile,V=e.onRemoveFile,K=e.sendFiles,W=void 0!==K&&K,Y=e.testId,J=e.thumbnails,Q=void 0===J||J,X=q(e,Se),$=L.useState([]),_=$[0],ee=$[1],ne=L.useState(null),re=ne[0],ie=ne[1],oe=L.useState(""),te=oe[0],le=oe[1],ae=l(I),se=L.useContext(o),ce=L.useContext(t),de=g(z),ue=g(de+"-helper"),pe=L.useRef(null),fe=L.useCallback(function(e,n){var r=[].concat(e.map(function(e){return Object.assign(e,{preview:URL.createObjectURL(e)})}),n.map(function(e){return Object.assign(e.file,{errors:e.errors})}));if(ee(function(e){return[].concat(e,r)}),e.length>0){var i=e.map(function(e){return e.name}).join(", "),o=1===e.length?ce.dropzone.fileAdded.replace(/\{fileName\}/g,i):ce.dropzone.filesAdded.replace(/\{count\}/g,e.length.toString()).replace(/\{fileNames\}/g,i);le(o)}pe.current&&pe.current.focus()},[ce]),me=G(Z({noClick:!0,disabled:d,multiple:A,maxSize:R,minSize:j,accept:i,onDrop:fe,noDrag:E},m)),ge=me.getInputProps,he=me.getRootProps,ve=me.isDragAccept,xe=me.isDragActive,ye=me.isDragReject,be=me.open,Oe=me.inputRef;U(n,function(){return Oe.current});var Re=ge({id:de}),je="default";re?je="error":ve?je="dragAccept":ye?je="dragReject":xe&&(je="dragActive");var Ce=function(e){ee(function(n){return n.filter(function(n){return n!==e})}),V&&"function"==typeof V&&V(e);var n=ce.dropzone.fileRemoved.replace(/\{fileName\}/g,e.name);le(n),pe.current&&pe.current.focus()},Ae=function(e){ee(function(n){return n.filter(function(n){return n!==e})}),T&&"function"==typeof T&&T(e);var n=ce.dropzone.fileDeleted.replace(/\{fileName\}/g,e.name);le(n),pe.current&&pe.current.focus()},Be=function(e){if(ee(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{processor:Z({},n.processor,{percent:e.percent+"%",status:"pending"})}):n})}),e.percent>0&&e.percent%25==0){var n=ce.dropzone.fileUploading.replace(/\{fileName\}/g,e.file.name).replace(/\{percent\}/g,e.percent.toString());le(n)}},Me=function(e){ee(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{processor:Z({},n.processor,{percent:"",status:"finished"})}):n})});var n=ce.dropzone.fileUploaded.replace(/\{fileName\}/g,e.file.name);le(n)},He=function(e){ee(function(n){return n.map(function(n){return n===e.file?Object.assign(n,{errors:e.errors,processor:Z({},n.processor,{status:"error"})}):n})})};return L.useEffect(function(){return function(){_.forEach(function(e){return e.preview&&URL.revokeObjectURL(e.preview)})}},[_]),L.useEffect(function(){var e=O&&_.length<O,n=D&&_.length>D,r=null;n?r="too-many-files":e&&(r="too-few-files"),ie(function(e,n){if(null===e)return null;var r=ce.dropzone.errors[e];switch(e){case"too-many-files":return r.message+" "+n.maxFiles+" "+ce.dropzone.files+".";case"too-few-files":return r.message+" "+n.minFiles+" "+ce.dropzone.files+".";default:return r.message}}(r,{minFiles:O,maxFiles:D})),W&&_.length>0&&!n&&!e&&ee(function(e){return e.map(function(e){return e.errors||e.processor||!N||N({file:e,onError:He,onFinish:Me,onProgress:Be}),e})})},[W,_.length,N,D,O,ce.dropzone.errors,ce.dropzone.files]),/*#__PURE__*/H(a.Provider,{value:{isInverse:ae},children:[/*#__PURE__*/H(h,{actionable:!1,containerStyle:c,errorMessage:re,fieldId:de,inputSize:S,isInverse:ae,isLabelVisuallyHidden:w,labelStyle:F,labelText:k,messageStyle:{minHeight:0},"data-testid":Y,children:[/*#__PURE__*/M(we,{id:ue,theme:se,isInverse:ae,children:b}),/*#__PURE__*/H(Ie,Z({behavior:s.container,dragState:je,isInverse:ae,noDrag:E,theme:se},he(),X,{testId:Y,tabIndex:-1,children:[/*#__PURE__*/M("input",{ref:Oe,type:Re.type,accept:Re.accept,autoComplete:Re.autoComplete,id:Re.id,multiple:Re.multiple,onChange:Re.onChange,onClick:Re.onClick,style:Re.style,tabIndex:Re.tabIndex,"data-testid":"file-input"}),E?/*#__PURE__*/M(r,{xs:!0,behavior:s.item,children:/*#__PURE__*/M(v,{color:p.primary,disabled:d,isInverse:ae,onClick:be,style:{margin:0},ref:pe,"aria-describedby":b?ue:void 0,children:ce.dropzone.browseFiles})}):/*#__PURE__*/H(r,{behavior:s.item,children:[/*#__PURE__*/M(B,{"aria-hidden":"true",color:ae?se.colors.neutral100:se.colors.neutral500,size:48}),/*#__PURE__*/M(Fe,{isInverse:ae,theme:se,children:ce.dropzone.dragMessage}),/*#__PURE__*/M(v,{color:p.primary,disabled:d,isInverse:ae,onClick:be,style:{margin:0},variant:u.solid,ref:pe,"aria-describedby":b?ue:void 0,children:ce.dropzone.browseFiles})]})]}))]}),/*#__PURE__*/M(ke,{children:_.map(function(e){/*#__PURE__*/return M(De,{children:/*#__PURE__*/M(ze,{accept:i,file:e,isInverse:ae,maxSize:R,minSize:j,onDeleteFile:Ae,onRemoveFile:Ce,thumbnails:Q})},e.name)})}),/*#__PURE__*/M(x,{children:/*#__PURE__*/M(y,{children:te})})]})});export{Oe as Dropzone,Y as FileIcon};
|
|
2
2
|
//# sourceMappingURL=fileuploader.modern.module.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileuploader.modern.module.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\n\nimport { magma } from 'react-magma-dom';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint = 2,\n bytesLabel = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger300\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.removeFile}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.deleteFile}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger300 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\n\nimport { transparentize } from 'polished';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport { CloudUploadIcon } from 'react-magma-icons';\n\nimport { FilePreview, FileError } from './FilePreview';\nimport { Preview } from './Preview';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger300}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n setFiles((files: FilePreview[]) => [\n ...files,\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ]);\n },\n []\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n ...dropzoneOptions,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n const dragState: DragState = errorMessage\n ? 'error'\n : isDragAccept\n ? 'dragAccept'\n : isDragReject\n ? 'dragReject'\n : isDragActive\n ? 'dragActive'\n : 'default';\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onRemoveFile &&\n typeof onRemoveFile === 'function' &&\n onRemoveFile(removedFile);\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onDeleteFile &&\n typeof onDeleteFile === 'function' &&\n onDeleteFile(removedFile);\n };\n\n const setProgress = (props: { percent: number; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${props.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n };\n\n const setFinished = (props: { file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n };\n\n const setError = (props: { errors: FileError[]; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n errors: props.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n setErrorMessage(\n formatError(\n maxFileError\n ? 'too-many-files'\n : minFileError\n ? 'too-few-files'\n : null,\n { minFiles, maxFiles }\n )\n );\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((files: FilePreview[]) => {\n return files.map((file: FilePreview) => {\n !file.errors &&\n !file.processor &&\n onSendFile &&\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n return file;\n });\n });\n }\n }, [sendFiles, files.length, onSendFile]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage theme={theme} isInverse={isInverse}>\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n {files.map((file: FilePreview) => (\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n key={file.name}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n ))}\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","_ref","file","isInverse","_file$path","path","_file$type","type","category","split","extension","pop","_ref2","_jsx","size","iconSizes","medium","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral300","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_ref9","errors","danger300","danger","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref0","_ref0$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","name","marginLeft","percent","slice","map","_ref1","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_formatError$header","header","Fragment","danger200","Container","noDrag","_ref6$dragState","dragState","neutral400","_ref7$dragState","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","_ref10","_ref11","_ref12","spaceScale","spacing01","Dropzone","containerStyle","disabled","_props$dropzoneOption","dropzoneOptions","multiple","helperMessage","defaultId","id","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","_props$multiple","_props$noDrag","onSendFile","_props$sendFiles","sendFiles","_props$thumbnails","_React$useState","files","setFiles","_React$useState2","errorMessage","setErrorMessage","useGenerateId","onDrop","useCallback","acceptedFiles","rejectedFiles","concat","Object","assign","URL","createObjectURL","_ref13","_useDropzone","useDropzone","noClick","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useImperativeHandle","current","inputProps","removedFile","filter","setProgress","setFinished","setError","forEach","revokeObjectURL","minFileError","maxFileError","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fileuploader.modern.module.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\n\nimport { magma } from 'react-magma-dom';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint = 2,\n bytesLabel = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger300\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={`${i18n.dropzone.removeFile} ${file.name}`}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={`${i18n.dropzone.deleteFile} ${file.name}`}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger300 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\n\nimport { transparentize } from 'polished';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n Announce,\n VisuallyHidden,\n} from 'react-magma-dom';\nimport { CloudUploadIcon } from 'react-magma-icons';\n\nimport { FilePreview, FileError } from './FilePreview';\nimport { Preview } from './Preview';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger300}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\n\nconst PreviewList = styled.ul`\n list-style: none;\n padding: 0;\n`;\n\nconst PreviewItem = styled.li``;\n\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n const [announcement, setAnnouncement] = React.useState<string>('');\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n const helperMessageId = useGenerateId(`${id}-helper`);\n\n const browseFileButtonRef = React.useRef<HTMLButtonElement>(null);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n const newFiles = [\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ];\n\n setFiles((prevFiles: FilePreview[]) => [...prevFiles, ...newFiles]);\n\n if (acceptedFiles.length > 0) {\n const fileNames = acceptedFiles.map(file => file.name).join(', ');\n const message =\n acceptedFiles.length === 1\n ? i18n.dropzone.fileAdded.replace(/\\{fileName\\}/g, fileNames)\n : i18n.dropzone.filesAdded\n .replace(/\\{count\\}/g, acceptedFiles.length.toString())\n .replace(/\\{fileNames\\}/g, fileNames);\n\n setAnnouncement(message);\n }\n\n browseFileButtonRef.current && browseFileButtonRef.current.focus();\n },\n [i18n]\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n ...dropzoneOptions,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n let dragState: DragState = 'default';\n\n if (errorMessage) {\n dragState = 'error';\n } else if (isDragAccept) {\n dragState = 'dragAccept';\n } else if (isDragReject) {\n dragState = 'dragReject';\n } else if (isDragActive) {\n dragState = 'dragActive';\n }\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(prevFiles => prevFiles.filter(file => file !== removedFile));\n\n if (onRemoveFile && typeof onRemoveFile === 'function') {\n onRemoveFile(removedFile);\n }\n\n const message = i18n.dropzone.fileRemoved.replace(\n /\\{fileName\\}/g,\n removedFile.name\n );\n\n setAnnouncement(message);\n\n browseFileButtonRef.current && browseFileButtonRef.current.focus();\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(prevFiles => prevFiles.filter(file => file !== removedFile));\n\n if (onDeleteFile && typeof onDeleteFile === 'function') {\n onDeleteFile(removedFile);\n }\n\n const message = i18n.dropzone.fileDeleted.replace(\n /\\{fileName\\}/g,\n removedFile.name\n );\n\n setAnnouncement(message);\n\n browseFileButtonRef.current && browseFileButtonRef.current.focus();\n };\n\n const setProgress = (progressProps: {\n percent: number;\n file: FilePreview;\n }) => {\n setFiles(prevFiles =>\n prevFiles.map(file =>\n file === progressProps.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${progressProps.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n\n // Announce progress every 25% to avoid too many announcements\n if (progressProps.percent > 0 && progressProps.percent % 25 === 0) {\n const message = i18n.dropzone.fileUploading\n .replace(/\\{fileName\\}/g, progressProps.file.name)\n .replace(/\\{percent\\}/g, progressProps.percent.toString());\n\n setAnnouncement(message);\n }\n };\n\n const setFinished = (finishedProps: { file: FilePreview }) => {\n setFiles(prevFiles =>\n prevFiles.map(file =>\n file === finishedProps.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n\n // Announce successful upload\n const message = i18n.dropzone.fileUploaded.replace(\n /\\{fileName\\}/g,\n finishedProps.file.name\n );\n\n setAnnouncement(message);\n };\n\n const setError = (errorProps: {\n errors: FileError[];\n file: FilePreview;\n }) => {\n setFiles(prevFiles =>\n prevFiles.map(file =>\n file === errorProps.file\n ? Object.assign(file, {\n errors: errorProps.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n let errorCode: string | null = null;\n\n if (maxFileError) {\n errorCode = 'too-many-files';\n } else if (minFileError) {\n errorCode = 'too-few-files';\n }\n\n setErrorMessage(formatError(errorCode, { minFiles, maxFiles }));\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((prevFiles: FilePreview[]) => {\n return prevFiles.map((file: FilePreview) => {\n if (!file.errors && !file.processor && onSendFile) {\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n }\n\n return file;\n });\n });\n }\n }, [\n sendFiles,\n files.length,\n onSendFile,\n maxFiles,\n minFiles,\n i18n.dropzone.errors,\n i18n.dropzone.files,\n ]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage\n id={helperMessageId}\n theme={theme}\n isInverse={isInverse}\n >\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n ref={browseFileButtonRef}\n aria-describedby={helperMessage ? helperMessageId : undefined}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n ref={browseFileButtonRef}\n aria-describedby={helperMessage ? helperMessageId : undefined}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n <PreviewList>\n {files.map((file: FilePreview) => (\n <PreviewItem key={file.name}>\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n </PreviewItem>\n ))}\n </PreviewList>\n\n <VisuallyHidden>\n <Announce>{announcement}</Announce>\n </VisuallyHidden>\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","_ref","file","isInverse","_file$path","path","_file$type","type","category","split","extension","pop","_ref2","_jsx","size","iconSizes","medium","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral300","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_ref9","errors","danger300","danger","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref0","_ref0$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","name","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref1","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_formatError$header","header","Fragment","danger200","Container","noDrag","_ref6$dragState","dragState","neutral400","_ref7$dragState","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","_ref10","_ref11","_ref12","spaceScale","spacing01","PreviewList","ul","PreviewItem","li","Dropzone","containerStyle","disabled","_props$dropzoneOption","dropzoneOptions","multiple","helperMessage","defaultId","id","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","_props$multiple","_props$noDrag","onSendFile","_props$sendFiles","sendFiles","_props$thumbnails","_React$useState","files","setFiles","_React$useState2","errorMessage","setErrorMessage","_React$useState3","announcement","setAnnouncement","useGenerateId","helperMessageId","browseFileButtonRef","useRef","onDrop","useCallback","acceptedFiles","rejectedFiles","newFiles","concat","Object","assign","URL","createObjectURL","_ref13","prevFiles","fileNames","fileAdded","replace","filesAdded","toString","current","focus","_useDropzone","useDropzone","noClick","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useImperativeHandle","inputProps","removedFile","filter","fileRemoved","fileDeleted","setProgress","progressProps","fileUploading","setFinished","finishedProps","fileUploaded","setError","errorProps","forEach","revokeObjectURL","minFileError","maxFileError","errorCode","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid","VisuallyHidden","Announce"],"mappings":"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"}
|