@react-magma/dropzone 14.0.1 → 15.0.0-next.0
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.map +1 -1
- package/dist/{fileuploader.modern.mjs → fileuploader.modern.js} +1 -1
- package/dist/fileuploader.modern.js.map +1 -0
- package/dist/fileuploader.modern.module.js.map +1 -1
- package/dist/fileuploader.umd.js.map +1 -1
- package/dist/src/src/components/dropzone/Dropzone.d.ts +101 -101
- package/dist/src/src/components/dropzone/Dropzone.stories.d.ts +48 -0
- package/dist/src/src/components/dropzone/Dropzone.test.d.ts +1 -1
- package/dist/src/src/components/dropzone/FileIcon.d.ts +8 -7
- package/dist/src/src/components/dropzone/FilePreview.d.ts +15 -15
- package/dist/src/src/components/dropzone/Preview.d.ts +18 -18
- package/dist/src/src/components/dropzone/index.d.ts +4 -4
- package/dist/src/src/components/dropzone/utils.d.ts +1 -1
- package/dist/src/src/index.d.ts +1 -1
- package/package.json +13 -16
- package/src/components/dropzone/Dropzone.stories.tsx +0 -4
- package/src/components/dropzone/Dropzone.test.js +117 -187
- package/src/components/dropzone/Dropzone.tsx +1 -1
- package/src/components/dropzone/Preview.tsx +150 -152
- package/src/components/dropzone/utils.ts +0 -1
- package/dist/fileuploader.modern.mjs.map +0 -1
|
@@ -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\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\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<\n HTMLDivElement,\n Omit<PreviewProps, 'children'>\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\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n\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={isInverse ? theme.colors.danger300 : theme.colors.danger}\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\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","/* 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\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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"}
|
|
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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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileuploader.umd.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\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\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<\n HTMLDivElement,\n Omit<PreviewProps, 'children'>\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\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n\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={isInverse ? theme.colors.danger300 : theme.colors.danger}\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\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","/* 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\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","jsx","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","name","icon","Spinner","neutral100","primary","_jsxs","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","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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"}
|
|
1
|
+
{"version":3,"file":"fileuploader.umd.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","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","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","jsxs","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid","VisuallyHidden","Announce"],"mappings":"2oBAuBMA,EAAQ,CACZC,QAAS,CACPC,KAAMC,EAAmBA,oBACzBC,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOC,aAGxBC,KAAM,CACJP,KAAMQ,EAAYA,aAClBN,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOI,UAGxBC,MAAO,CACLV,KAAMW,EAAaA,cACnBT,MAAO,CACLC,MAAOC,EAAAA,MAAMC,OAAOO,aAGxBC,WAAY,CACVb,KAAMc,EAAkBA,mBACxBZ,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOU,aAGxBC,IAAK,CACHhB,KAAMiB,EAAWA,YACjBf,MAAO,CACLC,MAAOC,EAAAA,MAAMC,OAAOa,YAGxBC,MAAO,CACLnB,KAAMoB,EAAAA,UACNlB,MAAO,CACLC,MAAOC,QAAMC,OAAOC,aAGxBe,MAAO,CACLrB,KAAMsB,EAAAA,aACNpB,MAAO,CACLC,MAAOC,EAAAA,MAAMC,OAAOC,aAGxBiB,MAAO,CACLvB,KAAMwB,EAAAA,eACNtB,MAAO,CACLC,MAAOC,EAAAA,MAAMC,OAAOC,aAGxBmB,QAAS,CACPzB,KAAM0B,EAAAA,YACNxB,MAAO,CACLC,MAAOC,EAAAA,MAAMC,OAAOC,cAKpBqB,EAEF,CACF5B,QAASD,EAAa,QACtB8B,KAAM9B,EAAMY,MACZmB,KAAM/B,EAAMY,MACZoB,KAAMhC,EAAMY,MACZqB,KAAMjC,EAAMY,MACZsB,IAAKlC,EAAMY,MACXuB,IAAKnC,EAAMY,MACXwB,IAAKpC,EAAMS,KACX4B,KAAMrC,EAAMS,KACZ6B,KAAMtC,EAAMS,KACZ8B,KAAMvC,EAAMS,KACZ+B,KAAMxC,EAAMS,KACZgC,KAAMzC,EAAMS,KACZiC,KAAM1C,EAAMe,WACZ4B,KAAM3C,EAAMe,WACZ6B,IAAK5C,EAAMe,WACXG,IAAKlB,EAAMkB,IACX2B,IAAK7C,EAAMqB,MACXyB,IAAK9C,EAAMqB,MACXA,MAAOrB,EAAMqB,MACbI,MAAOzB,EAAMyB,MACbF,MAAOvB,EAAMuB,MACbwB,IAAK/C,EAAM2B,SAGAqB,EAAW,SAAHC,GAAM,IAAAC,EAAID,EAAJC,KAAMC,EAASF,EAATE,UAC/BC,EAAiCF,EAAzBG,KAAAA,OAAI,IAAAD,EAAG,GAAEA,EAAAE,EAAgBJ,EAAdK,KACbC,QADoB,IAAHF,EAAG,GAAEA,GACNG,MAAM,KAAK,GAC3BC,EAAYL,EAAKI,MAAM,KAAKE,OAAS,UAC3CC,EACE/B,EAAY6B,IAAc7B,EAAY2B,IAAa3B,EAAW,qBAEhE,OAAOgC,EAAAC,IAHKF,EAAJ1D,KAGI,CAAC6D,KAAMzD,EAAAA,MAAM0D,UAAUC,OAAQ7D,MAAO+C,EAAY,CAAE,EAH7CS,EAALxD,OAIhB,0ZCpHO,ICAP8D,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,ECOAP,EAAAC,EAAAC,EAAAC,EAAAC,EFPaI,EAAiB,SAC5BC,EACAC,EACAC,GAEA,QAHY,IAAZD,IAAAA,EAAe,QACL,IAAVC,IAAAA,EAAa,cAECC,IAAVH,EAAJ,CACA,GAAa,GAATA,EAAY,MAAA,KAAYE,EAC5B,IACME,EAAQ,CAACF,EAAY,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAC/DG,EAAIC,KAAKC,MAAMD,KAAKE,IAAIR,GAASM,KAAKE,IAFlC,OAGV,OACEC,YAAYT,EAAQM,KAAKI,IAJjB,KAIwBL,IAAIM,QAAQV,IAAiB,IAAMG,EAAMC,EANlD,CAQ3B,ECbAO,EAAA,CAAA,SAAA,OAAA,YAAA,UAAA,UAAA,eAAA,eAAA,SAAA,cAAAC,EAAA,CAAA,QA+CMC,EAAQC,EAAAA,OAAOC,IAAGzB,IAAAA,EAAA0B,EACF,CAAA,yBAAA,2JAAA,SAAA3C,GAAG,IAAAC,EAAID,EAAJC,oBACb,YAAaA,GAAQA,EAAK2C,gBAShCC,EAAcJ,EAAAA,OAAOC,IAAGxB,IAAAA,EAAAyB,EAW7B,CAAA,iNAEKG,EAAa,CACjBC,YAAa,OACbC,QAAS,QAGLC,EAASR,SAAOC,IAAGvB,IAAAA,EAAAwB,EACC,CAAA,6BAAA,qCAAA,qBAAA,SAAA,SAAAhC,GAAQ,OAAAA,EAALuC,MAAkB5F,OAAO6F,UAAU,EAEjD,SAAAC,GAAe,OAAPA,EAALF,MAAkBG,UAAUC,OAAOC,QAAQ,EAC5C,SAAAC,UAAQA,EAALN,MAAkBG,UAAUC,OAAOG,UAAU,GAG3DC,EAAajB,SAAOkB,EAAAA,KAAPlB,CAAYrB,IAAAA,EAAAuB,EAGhB,CAAA,6DAAA,qBAAA,SAAA,SAAAiB,GAAQ,OAAAA,EAALV,MAAkBG,UAAUC,OAAOC,QAAQ,EAC5C,SAAAM,GAAe,OAAPA,EAALX,MAAkBG,UAAUC,OAAOG,UAAU,GAG3DK,EAAWrB,EAAAA,OAAOkB,EAAIA,KAAXlB,CAAYpB,IAAAA,EAAAsB,EAAA,CAAA,6JAAA,qBAAA,SAOd,SAAAoB,GAAe,OAAPA,EAALb,MAAkBG,UAAUC,OAAOC,QAAQ,EAC5C,SAAAS,GAAQ,OAAAA,EAALd,MAAkBG,UAAUC,OAAOG,UAAU,GAG3DQ,EAAaxB,EAAMA,OAACyB,OAAPzB,CAAYnB,IAAAA,EAAAqB,qGAEb,SAAAwB,OAASjB,EAAKiB,EAALjB,MACvB,OADqBiB,EAAJlE,KACZmE,OADkCD,EAATjE,UAGxBgD,EAAM5F,OAAO+G,UACbnB,EAAM5F,OAAOgH,OACfpB,EAAM5F,OAAO6F,UAAU,GAKzBoB,EAAc9B,EAAAA,OAAO+B,KAAIjD,IAAAA,EAAAoB,uHAUzB8B,EAAehC,SAAO+B,KAAIhD,IAAAA,EAAAmB,+BA8CnB+B,eAAUC,EAAAA,WAErB,SAACC,EAAOC,GAAO,IAAAC,EAEXC,EAUEH,EAVFG,OACA9E,EASE2E,EATF3E,KACW+E,EAQTJ,EARF1E,UACA+E,EAOEL,EAPFK,QACAC,EAMEN,EANFM,QACAC,EAKEP,EALFO,aACAC,EAIER,EAJFQ,aAEAC,EAEET,EAFFS,WACGC,EAAIC,EACLX,EAAKtC,GAEHY,EAAwBsC,EAAAA,WAAWC,EAAYA,cAC/CC,EAAsBC,UAAMH,WAAWI,EAAWA,aAClD1F,EAAY2F,EAAAA,aAAab,GAC/Bc,EAA8BC,EAAAA,sBAASnF,EAAAC,IAACmF,EAASA,WAAA,IAA1CC,EAAOH,EAAEI,GAAAA,EAAUJ,EAAA,GAEpBK,EAAmB,WACvBf,GAAwC,mBAAjBA,GAA+BA,EAAanF,EACrE,EAEMmG,EAAmB,WACvBjB,GAAwC,mBAAjBA,GAA+BA,EAAalF,EACrE,EAEMoG,EAAkB,SAAHC,GAAiDC,IAAAA,EAAAD,EAA3CE,OAAAA,OAAM,IAAAD,EAAG,QAAOA,EACzCE,EAAwBV,EAAAA,UAAkB,GAAnCW,EAAID,EAAEE,GAAAA,EAAOF,EAAA,GAcpB,OAZAG,EAAAA,UAAU,WACR,IAAIC,GAAU,EAMd,OALAC,WAAW,WACLD,GACFF,GAAQ,EAEZ,EAAG,gBAEDE,GAAU,CACZ,CACF,EAAG,CAACL,IAEW,UAAXA,GAAiC,UAAXA,eAEtB5F,EAAAA,IAACiC,GAAWkE,sBACVnG,EAAAC,IAACmG,EAAUA,YACTC,QAASd,EACTe,QAASC,EAAaA,cAACC,KACvBhK,MAAOiK,cAAYC,UACnB,aAAe5B,EAAK6B,SAASC,eAAcvH,EAAKwH,KAChDC,kBAAM9G,EAAAC,IAACmF,EAASA,UAAG,CAAA,OAMZ,YAAXQ,eAEA5F,EAAAA,IAACiC,GAAWkE,sBACVnG,MAAC+G,EAAAA,SACCvK,MAAO8C,EAAYgD,EAAM5F,OAAOsK,WAAa1E,EAAM5F,OAAOuK,yBAOhEC,OAACjF,EAAWkE,CAAAA,uBACVnG,EAAAC,IAACkH,aAAWC,CAAAA,QAAStB,EAAMuB,eAAa,EAACC,MAAInB,EAAAA,sBAC3CnG,EAAAA,IAACuH,EAAAA,gBACC/K,CAAAA,MAAO8C,EAAYgD,EAAM5F,OAAO8K,WAAalF,EAAM5F,OAAO+K,QAC1DlL,MAAO,CAAEmL,UAAW,wBAGxB1H,MAACmH,EAAAA,WAAWC,CAAAA,OAAQtB,EAAMuB,eAAcC,EAAAA,QAAInB,sBAC1CnG,EAAAC,IAACmG,EAAUA,YACTC,QAASb,EACTc,QAASC,EAAaA,cAACC,KACvBhK,MAAOiK,cAAYC,UACnB,aAAe5B,EAAK6B,SAASgB,eAActI,EAAKwH,KAChDC,kBAAM9G,EAAAC,IAAC2H,EAAUA,WAAG,CAAA,SAK9B,EAMA,OAJA5B,EAASA,UAAC,WAAK,IAAA6B,EACbvC,eAAWtF,EAAAA,IAACyF,EAAe,CAACG,aAAQvG,UAAIwI,EAAJxI,EAAMyI,kBAAND,EAAiBjC,SACvD,EAAG,CAAK,MAAJvG,GAAe,OAAX6E,EAAJ7E,EAAMyI,gBAAS,EAAf5D,EAAiB0B,sBAGnB5F,EAAAA,IAAC+H,EAAAA,eAAeC,UAASC,MAAO,CAAE3I,UAAAA,GAAY6G,sBAC5Ce,EAAAA,KAAC7D,EAAU,CACT/D,UAAWA,EACXgD,MAAOA,EACPjD,KAAMA,EACN,cAAa2E,EAAMkE,OACnBjE,IAAKA,EACLkE,KAAM9I,EAAKmE,OAAS,QAAU,GAAG2C,SAAA,cAEjCe,OAACpE,EAAUsF,EAAA,CACT9F,MAAOA,EACP+F,SAAUC,EAAYA,aAACC,UACvBC,WAAYC,EAAcA,eAACC,QACvBhE,GAAIyB,SAAA,cAERnG,EAAAA,IAAC+C,EAAIA,MACHsF,SAAUC,EAAAA,aAAaK,KACvBH,WAAYC,EAAAA,eAAeC,OAC3BnM,MAAO2F,EAAWiE,SAEjB9G,EAAKmE,oBACJxD,MAAC4I,EAAAA,WACCpM,MACE8C,EAAYgD,EAAM5F,OAAO+G,UAAYnB,EAAM5F,OAAOgH,OAEpDxD,KAAM,KAENb,EAAK2C,SACPyC,GACApF,EAAKK,MACLL,EAAKK,KAAKmJ,WAAW,sBACrB7I,MAAC4B,EAAMuG,CAAAA,KAAK,MAAM9I,KAAMA,iBAExBW,EAAAA,IAACb,GAASG,UAAWA,EAAWD,KAAMA,mBAG1CW,MAACkD,EAAS4F,CAAAA,MAAGT,SAAUC,EAAYA,aAACK,KAAMrG,MAAOA,EAAM6D,SACpD9G,EAAKwH,OAEPxH,EAAKyI,WAAuC,YAA1BzI,EAAKyI,UAAUlC,qBAChC5F,MAAC+C,EAAAA,KACCoF,CAAAA,KAAK,cACL5L,MAAO,CAAEwM,WAAY,QACrBV,SAAUC,EAAAA,aAAaK,KAAKxC,SAE3B9G,EAAKyI,UAAUkB,uBAGpBhJ,MAAC+C,EAAAA,KAAKsF,CAAAA,SAAUC,EAAYA,aAACK,KAAKxC,SAAEd,QAErChG,EAAKmE,qBACJxD,MAACqC,EAAM,CAACC,MAAOA,EAAM6D,SAClB9G,EAAKmE,OAAOyF,MAAM,EAAG,GAAGC,IAAI,SAAAC,GAAsB,IAAnBC,EAAID,EAAJC,KAC9BC,EA7LI,SAClBC,EACAC,EAKAC,GAEA,IAAMrF,EACJsF,MAAMC,QAAQH,EAAYpF,SAAyC,IAA9BoF,EAAYpF,OAAOwF,OACpDJ,EAAYpF,OAAO,GACnBoF,EAAYpF,OACZyF,EAAgBH,MAAMC,QAAQvF,aACtBA,EAAO0F,KAAK,MACtB1F,EACJ,OAAQmF,EAAMF,MACZ,IAAK,iBACH,OAAAhB,KACKkB,EAAK,CACRQ,QAAYR,EAAMQ,QAAO,IAAIjJ,EAC3B0I,EAAYlF,QACZ,EACAmF,GACE,MAER,IAAK,iBACH,OAAApB,EAAA,GACKkB,EACHQ,CAAAA,QAAYR,EAAMQ,QAAWjJ,IAAAA,EAC3B0I,EAAYjF,QACZ,EACAkF,SAGN,IAAK,oBACH,OAAApB,EAAYkB,CAAAA,EAAAA,GAAOQ,QAAYR,EAAMQ,aAAYF,IACnD,QACE,OAAON,EAEb,CAqJiDS,CAAW3B,GACxCgB,KAAAA,GAFuCzE,EAAAwE,EAAAxH,GAErBmD,EAAK6B,SAASnD,OAAO4F,IACzC,CAAEjF,OAAAA,EAAQG,QAAAA,EAASD,QAAAA,GACnBS,EAAK6B,SAAS7F,OACfkJ,EAAAX,EAJOY,OAAaH,EAAOT,EAAPS,qBAKrB,OACE5C,EAAAA,KAACnC,EAAAA,QAAMmF,SAAQ/D,CAAAA,uBACbnG,EAAAC,IAAC0D,EACCpH,CAAAA,MAAO,CACLC,MAAO8C,EACHgD,EAAM5F,OAAOyN,UACb7H,EAAM5F,OAAOgH,QACjByC,cAZM,IAAA6D,EAAG,GAAEA,iBAgBfhK,EAAAA,IAAC6D,EAAYsC,CAAAA,SAAE2D,MAVIV,EAazB,SAMZ,GC9UF1H,EAAA,CAAA,SAAA,iBAAA,WAAA,kBAAA,gBAAA,KAAA,YAAA,YAAA,wBAAA,aAAA,YAAA,WAAA,WAAA,UAAA,UAAA,WAAA,SAAA,aAAA,eAAA,eAAA,YAAA,SAAA,cAgIM0I,EAAYvI,EAAAA,OAAOkB,EAAIA,KAAXlB,CAAYxB,IAAAA,EAAA0B,EAAA,CAAA,+CAAA,yBAAA,oBAAA,iBAAA,uBAAA,gBAAA,wBAAA,0BAAA,sCAAA,SASb,SAAA3C,GAAiB,OAARA,EAANiL,OAAuB,OAAS,QAAQ,EACvC,SAAAtK,GAAS,OAAAA,EAANsK,OAAuB,OAAS,QAAQ,EAChD,SAAA7H,GAAiB,OAARA,EAAN6H,OAAuB,OAAS,QAAQ,EAC9C,SAAAzH,UAASA,EAANyH,OAAuB,MAAQ,MAAM,EAClC,SAAArH,UAASA,EAANqH,OAAuB,MAAQ,KAAK,EAC9C,SAAApH,GAAA,IAAAqH,EAAArH,EAAGsH,UAAAA,OAAS,IAAAD,EAAG,UAASA,EAAUhI,EAAKW,EAALX,MAC1C,OADwCW,EAANoH,OAC5B,MAEY,eAAdE,GAA4C,UAAdA,EAHwBtH,EAAT3D,UAIlC,cACOgD,EAAM5F,OAAO+G,UACbnB,cAAAA,EAAM5F,OAAOgH,OACf,eAAd6G,EACgBjI,cAAAA,EAAM5F,OAAOuK,QACb,eAAdsD,EAA0B,cACVjI,EAAM5F,OAAO+K,QACbnF,cAAAA,EAAM5F,OAAO8N,UAAY,EAEnC,SAAArH,GAAA,IAAAsH,EAAAtH,EAAGoH,UAAqB,MACxB,gBADe,IAAHE,EAAG,UAASA,GACd,QAAU,QAAQ,EACxB,SAAArH,OAAGd,EAAKc,EAALd,aAAac,EAANiH,OAExB,cAFyCjH,EAAT9D,UAI9BoL,iBAAe,IAAMpI,EAAM5F,OAAOiO,YAClCrI,EAAM5F,OAAOkO,UAAU,EAEjB,SAAArH,GAAS,MAAA,WAAAA,EAAN8G,OAAgC,EAAI,QAAoB,cAAA,GAGrEQ,EAAgBhJ,SAAO+B,KAAItD,IAAAA,EAAAyB,2FACtB,SAAA2D,GAAG,IAAApD,EAAKoD,EAALpD,MAAgB,OAAAoD,EAATpG,UACLgD,EAAM5F,OAAOsK,WAAa1E,EAAM5F,OAAOoO,UAAU,GAM3DC,EAAUlJ,SAAOC,IAAGvB,IAAAA,EAAAwB,EACf,CAAA,cAAA,0CAAA,qBAAA,sCAAA,SAAA,SAAAoH,GAAG,IAAA7G,EAAK6G,EAAL7G,aAAgB6G,EAAT7J,UACLgD,EAAM5F,OAAOsK,WAAa1E,EAAM5F,OAAOoO,UAAU,EAElD,SAAAE,GAAe,OAAPA,EAAL1I,MAAkBG,UAAUC,OAAOC,QAAQ,EAC5C,SAAAsI,GAAQ,OAAAA,EAAL3I,MAAkBG,UAAUC,OAAOG,UAAU,EAEpD,SAAAqI,GAAQ,OAAAA,EAAL5I,MAAkB6I,WAAWC,SAAS,GAGhDC,EAAcxJ,SAAOyJ,GAAE9K,IAAAA,EAAAuB,EAG5B,CAAA,6CAEKwJ,EAAc1J,EAAAA,OAAO2J,GAAE/K,IAAAA,EAAAsB,EAAE,CAAA,+BAEPgD,EAAAA,QAAMhB,WAC5B,SAACC,EAAOC,GACN,IACEE,EA2BEH,EA3BFG,OACAsH,EA0BEzH,EA1BFyH,eACAC,EAyBE1H,EAzBF0H,SAAQC,EAyBN3H,EAvBF4H,gBAAAA,WAAeD,EAAG,CAChBE,UAAU,GACXF,EACDG,EAoBE9H,EApBF8H,cACIC,EAmBF/H,EAnBFgI,GACAC,EAkBEjI,EAlBFiI,UACW7H,EAiBTJ,EAjBF1E,UACA4M,EAgBElI,EAhBFkI,sBACAC,EAeEnI,EAfFmI,WACAC,EAcEpI,EAdFoI,UACAC,EAaErI,EAbFqI,SACAC,EAYEtI,EAZFsI,SACAjI,EAWEL,EAXFK,QACAC,EAUEN,EAVFM,QAAOiI,EAULvI,EATF6H,SAAAA,OAAQ,IAAAU,GAAOA,EAAAC,EASbxI,EARFqG,OAAAA,OAAM,IAAAmC,GAAQA,EACdC,EAOEzI,EAPFyI,WACAlI,EAMEP,EANFO,aACAC,EAKER,EALFQ,aAAYkI,EAKV1I,EAJF2I,UAAAA,OAAY,IAAHD,GAAQA,EACjBxE,EAGElE,EAHFkE,OAAM0E,EAGJ5I,EAFFS,WAAAA,OAAU,IAAAmI,GAAOA,EACdlI,EAAIC,EACLX,EAAKtC,GAETmL,EAA0B9H,EAAK,QAACI,SAAwB,IAAjD2H,EAAKD,EAAEE,GAAAA,EAAQF,KACtBG,EAAwCjI,UAAMI,SAAwB,MAA/D8H,EAAYD,EAAEE,GAAAA,EAAeF,KACpCG,EAAwCpI,EAAK,QAACI,SAAiB,IAAxDiI,EAAYD,KAAEE,GAAeF,EAAA,GAE9B7N,GAAY2F,EAAAA,aAAab,GACzB9B,GAAwByC,UAAMH,WAAWC,EAAYA,cACrDC,GAAsBC,EAAAA,QAAMH,WAAWI,EAAWA,aAClDgH,GAAKsB,EAAAA,cAAcvB,GACnBwB,GAAkBD,EAAAA,cAAiBtB,cAEnCwB,GAAsBzI,EAAAA,QAAM0I,OAA0B,MAEtDC,GAAS3I,EAAK,QAAC4I,YACnB,SAACC,EAA8BC,GAC7B,IAAMC,EAAQ,GAAAC,OACTH,EAAc1E,IAAI,SAAC7J,GAAiB,OACrC2O,OAAOC,OAAO5O,EAAM,CAClB2C,QAASkM,IAAIC,gBAAgB9O,IAC7B,GAEDwO,EAAc3E,IACf,SAAAkF,GAAe,OACbJ,OAAOC,OADFG,EAAJ/O,KACmB,CAClBmE,OAFW4K,EAAN5K,QAGL,IAMR,GAFAuJ,EAAS,SAACsB,GAAwB,MAAA,GAAAN,OAASM,EAAcP,EAAS,GAE9DF,EAAcjE,OAAS,EAAG,CAC5B,IAAM2E,EAAYV,EAAc1E,IAAI,SAAA7J,GAAQ,OAAAA,EAAKwH,IAAI,GAAEgD,KAAK,MACtDC,EACqB,IAAzB8D,EAAcjE,OACV7E,GAAK6B,SAAS4H,UAAUC,QAAQ,gBAAiBF,GACjDxJ,GAAK6B,SAAS8H,WACXD,QAAQ,aAAcZ,EAAcjE,OAAO+E,YAC3CF,QAAQ,iBAAkBF,GAEnCjB,GAAgBvD,EACjB,CAED0D,GAAoBmB,SAAWnB,GAAoBmB,QAAQC,OAC7D,EACA,CAAC9J,KAGH+J,GAQIC,EAAWA,YAAA1G,GACb2G,SAAS,EACTrD,SAAAA,EACAG,SAAAA,EACAxH,QAAAA,EACAC,QAAAA,EACAH,OAAAA,EACAuJ,OAAAA,GACArD,OAAAA,GACGuB,IAhBHoD,GAAaH,GAAbG,cACAC,GAAYJ,GAAZI,aACAC,GAAYL,GAAZK,aACAC,GAAYN,GAAZM,aACAC,GAAYP,GAAZO,aACAC,GAAIR,GAAJQ,KACAC,GAAQT,GAARS,SAaFC,sBACEtL,EACA,WAAA,OAAMqL,GAASX,OAAO,GAGxB,IAAMa,GAAaR,GAAc,CAAEhD,GAAAA,KAE/BzB,GAAuB,UAEvB0C,EACF1C,GAAY,QACH2E,GACT3E,GAAY,aACH6E,GACT7E,GAAY,aACH4E,KACT5E,GAAY,cAGd,IAAMhF,GAAmB,SAACkK,GACxB1C,EAAS,SAAAsB,GAAS,OAAIA,EAAUqB,OAAO,SAAArQ,GAAQ,OAAAA,IAASoQ,CAAW,EAAC,GAEhEjL,GAAwC,mBAAjBA,GACzBA,EAAaiL,GAGf,IAAM3F,EAAUhF,GAAK6B,SAASgJ,YAAYnB,QACxC,gBACAiB,EAAY5I,MAGdwG,GAAgBvD,GAEhB0D,GAAoBmB,SAAWnB,GAAoBmB,QAAQC,OAC7D,EAEMpJ,GAAmB,SAACiK,GACxB1C,EAAS,SAAAsB,GAAS,OAAIA,EAAUqB,OAAO,SAAArQ,GAAQ,OAAAA,IAASoQ,CAAW,EAAC,GAEhElL,GAAwC,mBAAjBA,GACzBA,EAAakL,GAGf,IAAM3F,EAAUhF,GAAK6B,SAASiJ,YAAYpB,QACxC,gBACAiB,EAAY5I,MAGdwG,GAAgBvD,GAEhB0D,GAAoBmB,SAAWnB,GAAoBmB,QAAQC,OAC7D,EAEMiB,GAAc,SAACC,GAmBnB,GAfA/C,EAAS,SAAAsB,GACP,OAAAA,EAAUnF,IAAI,SAAA7J,GAAI,OAChBA,IAASyQ,EAAczQ,KACnB2O,OAAOC,OAAO5O,EAAM,CAClByI,UAASM,EACJ/I,CAAAA,EAAAA,EAAKyI,UAAS,CACjBkB,QAAY8G,EAAc9G,QAAU,IACpCpD,OAAQ,cAGZvG,CAAI,EACT,GAICyQ,EAAc9G,QAAU,GAAK8G,EAAc9G,QAAU,IAAO,EAAG,CACjE,IAAMc,EAAUhF,GAAK6B,SAASoJ,cAC3BvB,QAAQ,gBAAiBsB,EAAczQ,KAAKwH,MAC5C2H,QAAQ,eAAgBsB,EAAc9G,QAAQ0F,YAEjDrB,GAAgBvD,EACjB,CACH,EAEMkG,GAAc,SAACC,GACnBlD,EAAS,SAAAsB,GACP,OAAAA,EAAUnF,IAAI,SAAA7J,GACZ,OAAAA,IAAS4Q,EAAc5Q,KACnB2O,OAAOC,OAAO5O,EAAM,CAClByI,UAASM,EACJ/I,CAAAA,EAAAA,EAAKyI,UACRkB,CAAAA,QAAS,GACTpD,OAAQ,eAGZvG,CAAI,EACT,GAIH,IAAMyK,EAAUhF,GAAK6B,SAASuJ,aAAa1B,QACzC,gBACAyB,EAAc5Q,KAAKwH,MAGrBwG,GAAgBvD,EAClB,EAEMqG,GAAW,SAACC,GAIhBrD,EAAS,SAAAsB,GAAS,OAChBA,EAAUnF,IAAI,SAAA7J,UACZA,IAAS+Q,EAAW/Q,KAChB2O,OAAOC,OAAO5O,EAAM,CAClBmE,OAAQ4M,EAAW5M,OACnBsE,UAASM,KAAO/I,EAAKyI,UAAS,CAAElC,OAAQ,YAE1CvG,CAAI,EACT,EAEL,EAoEA,OAlEA0F,EAAK,QAACiB,UACJ,WAAA,OAAW,WACT8G,EAAMuD,QACJ,SAAAhR,GAAI,OAAIA,EAAK2C,SAAWkM,IAAIoC,gBAAgBjR,EAAK2C,QAAQ,EAE7D,CAAC,EACD,CAAC8K,IAGH/H,UAAMiB,UAAU,WACd,IAiBMuK,EAAejE,GAAYQ,EAAMnD,OAAS2C,EAC1CkE,EAAenE,GAAYS,EAAMnD,OAAS0C,EAE5CoE,EAA2B,KAE3BD,EACFC,EAAY,iBACHF,IACTE,EAAY,iBAGdvD,EA5BoB,SAClB9D,EACAG,GAEA,GAAa,OAATH,EAAe,OAAO,KAC1B,IAAME,EAAQxE,GAAK6B,SAASnD,OAAO4F,GAEnC,OAAQA,GACN,IAAK,iBACH,OAAUE,EAAMQ,YAAWP,EAAY8C,SAAQ,IAAIvH,GAAK6B,SAASmG,UACnE,IAAK,gBACH,OAAUxD,EAAMQ,YAAWP,EAAY+C,SAAQ,IAAIxH,GAAK6B,SAASmG,UACnE,QACE,OAAOxD,EAAMQ,QAEnB,CAagBC,CAAY0G,EAAW,CAAEnE,SAAAA,EAAUD,SAAAA,KAE/CM,GAAaG,EAAMnD,OAAS,IAAM6G,IAAiBD,GACrDxD,EAAS,SAACsB,GACR,OAAOA,EAAUnF,IAAI,SAAC7J,GAUpB,OATKA,EAAKmE,QAAWnE,EAAKyI,YAAa2E,GACrCA,EAAW,CACTpN,KAAAA,EACAqR,QAASP,GACTQ,SAAUX,GACVY,WAAYf,KAITxQ,CACT,EACF,EAEJ,EAAG,CACDsN,EACAG,EAAMnD,OACN8C,EACAJ,EACAC,EACAxH,GAAK6B,SAASnD,OACdsB,GAAK6B,SAASmG,qBAId5F,EAAAA,KAACa,EAAAA,eAAeC,SAASC,CAAAA,MAAO,CAAE3I,UAAAA,IAAY6G,SAAA,cAC5Ce,OAAC2J,EAAAA,mBACCC,CAAAA,YAAY,EACZrF,eAAgBA,EAChBwB,aAAcA,EACd8D,QAAS/E,GACTC,UAAWA,EACX3M,UAAWA,GACX4M,sBAAuBA,EACvBC,WAAYA,EACZC,UAAWA,EACX4E,aAAc,CAAEC,UAAW,GAC3B,cAAa/I,EAAO/B,SAEpBnG,cAAAA,MAAC6K,EACCmB,CAAAA,GAAIuB,GACJjL,MAAOA,GACPhD,UAAWA,GAAU6G,SAEpB2F,iBAEH5E,EAAAgK,KAAC9G,EAAShC,EACRC,CAAAA,SAAUC,EAAAA,aAAaC,UACvBgC,UAAWA,GACXjL,UAAWA,GACX+K,OAAQA,EACR/H,MAAOA,IACH2M,KACAvK,EAAI,CACRwD,OAAQA,EACRiJ,UAAW,EAAEhL,SAAA,cAEbnG,MACEiE,QAAAA,CAAAA,IAAKqL,GACL5P,KAAM8P,GAAW9P,KACjByE,OAAQqL,GAAWrL,OACnBiN,aAAc5B,GAAW4B,aACzBpF,GAAIwD,GAAWxD,GACfH,SAAU2D,GAAW3D,SACrBwF,SAAU7B,GAAW6B,SACrBhL,QAASmJ,GAAWnJ,QACpB9J,MAAOiT,GAAWjT,MAClB4U,SAAU3B,GAAW2B,SACrB,cAAY,eAEb9G,eACCrK,EAAAA,IAAC+C,EAAIA,MAAC+F,IAAE,EAACT,SAAUC,eAAaK,KAAKxC,sBACnCnG,EAAAC,IAACqR,EAAMA,OAAA,CACL9U,MAAOiK,EAAWA,YAACQ,QACnByE,SAAUA,EACVpM,UAAWA,GACX+G,QAASgJ,GACT9S,MAAO,CAAEgV,OAAQ,GACjBtN,IAAKuJ,GACL,mBAAkB1B,EAAgByB,QAAkBtM,EAAUkF,SAE7DrB,GAAK6B,SAAS6K,6BAInBtK,OAACnE,EAAAA,MAAKsF,SAAUC,EAAAA,aAAaK,KAAKxC,SAAA,cAChCnG,EAAAA,IAACyR,EAAeA,gBACd,CAAA,cAAY,OACZjV,MACE8C,GACIgD,GAAM5F,OAAOsK,WACb1E,GAAM5F,OAAOC,WAEnBuD,KAAM,kBAERF,EAAAA,IAAC+K,EAAQzL,CAAAA,UAAWA,GAAWgD,MAAOA,GAAM6D,SACzCrB,GAAK6B,SAAS+K,2BAEjB1R,EAAAC,IAACqR,EAAMA,OAAA,CACL9U,MAAOiK,EAAWA,YAACQ,QACnByE,SAAUA,EACVpM,UAAWA,GACX+G,QAASgJ,GACT9S,MAAO,CAAEgV,OAAQ,GACjBjL,QAASC,EAAAA,cAAcoL,MACvB1N,IAAKuJ,GACL,mBAAkB1B,EAAgByB,QAAkBtM,EAAUkF,SAE7DrB,GAAK6B,SAAS6K,qCAMzBxR,MAACqL,EAAW,CAAAlF,SACT2G,EAAM5D,IAAI,SAAC7J,gBACVW,OAAAA,MAACuL,EAAWpF,CAAAA,sBACVnG,EAAAA,IAAC8D,EAAO,CACNK,OAAQA,EACR9E,KAAMA,EACNC,UAAWA,GACX+E,QAASA,EACTC,QAASA,EACTC,aAAciB,GACdhB,aAAce,GACdd,WAAYA,KATEpF,EAAKwH,KAWT,kBAIlB7G,MAAC4R,EAAAA,eAAczL,CAAAA,sBACbnG,EAAAA,IAAC6R,EAAAA,UAAQ1L,SAAEiH,QAInB"}
|