@react-magma/dropzone 16.0.0-next.1 → 16.0.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
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileuploader.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Dropzone.tsx","../src/components/dropzone/Preview.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.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.blue500,\n },\n inverseStyle: {\n color: magma.colors.blue500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.green500,\n },\n inverseStyle: {\n color: magma.colors.green500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.tangerine600,\n },\n inverseStyle: {\n color: magma.colors.tangerine500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.red600,\n },\n inverseStyle: {\n color: magma.colors.red500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: {\n Icon: any;\n style: React.CSSProperties;\n inverseStyle: React.CSSProperties;\n };\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, inverseStyle } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return (\n <Icon\n size={magma.iconSizes.medium}\n style={isInverse ? inverseStyle : style}\n />\n );\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","/* 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\nenum DragState {\n error = 'error',\n dragAccept = 'dragAccept',\n dragReject = 'dragReject',\n dragActive = 'dragActive',\n default = 'default',\n}\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, theme }) =>\n noDrag ? theme.borderRadiusNone : theme.borderRadiusSmall};\n border: ${({ dragState = DragState.default, noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === DragState.dragReject || dragState === DragState.error\n ? isInverse\n ? `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n dragState === DragState.error\n ? theme.colors.red500\n : theme.colors.red400\n }`\n : `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n theme.colors.danger\n }`\n : dragState === DragState.dragActive\n ? `2px dashed ${theme.colors.blue500}`\n : dragState === DragState.dragAccept\n ? `2px dashed ${theme.colors.green500}`\n : `2px dashed ${\n isInverse ? theme.colors.neutral800 : theme.colors.neutral300\n }`};\n\n border-style: ${({ dragState = DragState.default }) =>\n dragState === DragState.error ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.6, theme.colors.neutral1200)\n : theme.colors.neutral100};\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.neutral500 : 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.neutral0 : theme.colors.brand.navy};\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 = DragState.error;\n } else if (isDragAccept) {\n dragState = DragState.dragAccept;\n } else if (isDragReject) {\n dragState = DragState.dragReject;\n } else if (isDragActive) {\n dragState = 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={{\n color: isInverse ? theme.colors.neutral0 : theme.colors.brand.navy,\n ...labelStyle,\n }}\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 ? theme.colors.neutral0 : theme.colors.neutral700\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","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n CardBorderRadius,\n CardCornerTreatment,\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<{ isInverse: boolean }>`\n border-top: 1px solid\n ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral500 : 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.red500\n : theme.colors.danger\n : isInverse\n ? theme.colors.neutral800\n : theme.colors.neutral200};\n border-width: 1px;\n color: ${({ file, theme, isInverse }) =>\n isInverse\n ? theme.colors.neutral0\n : file.errors\n ? theme.colors.neutral700\n : theme.colors.brand.navy};\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.subtle}\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.brand.skyBlue : 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.green500 : 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.subtle}\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 borderRadius={CardBorderRadius.small}\n cornerTreatment={CardCornerTreatment.all}\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.red500 : 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} isInverse={isInverse}>\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.red500\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"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral700","inverseStyle","neutral300","word","FileWordIcon","blue500","excel","FileExcelIcon","green500","powerpoint","FilePowerpointIcon","tangerine600","tangerine500","pdf","FilePdfIcon","red600","red500","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","DragState","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral500","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_templateObject6","_ref9","errors","danger","neutral800","neutral200","_ref0","neutral0","brand","navy","ErrorHeader","span","_templateObject7","ErrorMessage","_templateObject8","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","_excluded","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref1","_ref1$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","subtle","dropzone","removeFile","name","icon","Spinner","skyBlue","primary","_jsxs","jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","borderRadius","CardBorderRadius","small","cornerTreatment","CardCornerTreatment","all","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref10","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_excluded2","_formatError$header","header","Fragment","Container","noDrag","borderRadiusNone","borderRadiusSmall","_ref6$dragState","dragState","dragReject","red400","dragActive","dragAccept","_ref7$dragState","transparentize","neutral1200","neutral100","HelperMessage","Wrapper","_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":"oQAuBMA,EAAQ,CACZC,QAAS,CACPC,KAAMC,EAAAA,oBACNC,MAAO,CACLC,MAAOC,EAAAA,MAAMC,OAAOC,YAEtBC,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOG,aAGxBC,KAAM,CACJT,KAAMU,eACNR,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOM,SAEtBJ,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOM,UAGxBC,MAAO,CACLZ,KAAMa,EAAAA,cACNX,MAAO,CACLC,MAAOC,EAAAA,MAAMC,OAAOS,UAEtBP,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOS,WAGxBC,WAAY,CACVf,KAAMgB,qBACNd,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOY,cAEtBV,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOa,eAGxBC,IAAK,CACHnB,KAAMoB,cACNlB,MAAO,CACLC,MAAOC,EAAAA,MAAMC,OAAOgB,QAEtBd,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOiB,SAGxBC,MAAO,CACLvB,KAAMwB,YACNtB,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOC,YAEtBC,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOG,aAGxBiB,MAAO,CACLzB,KAAM0B,EAAYA,aAClBxB,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOC,YAEtBC,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOG,aAGxBmB,MAAO,CACL3B,KAAM4B,iBACN1B,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOC,YAEtBC,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOG,aAGxBqB,QAAS,CACP7B,KAAM8B,EAAWA,YACjB5B,MAAO,CACLC,MAAOC,EAAKA,MAACC,OAAOC,YAEtBC,aAAc,CACZJ,MAAOC,EAAKA,MAACC,OAAOG,cAKpBuB,EAMF,CACFhC,QAASD,EAAK,QACdkC,KAAMlC,EAAMc,MACZqB,KAAMnC,EAAMc,MACZsB,KAAMpC,EAAMc,MACZuB,KAAMrC,EAAMc,MACZwB,IAAKtC,EAAMc,MACXyB,IAAKvC,EAAMc,MACX0B,IAAKxC,EAAMW,KACX8B,KAAMzC,EAAMW,KACZ+B,KAAM1C,EAAMW,KACZgC,KAAM3C,EAAMW,KACZiC,KAAM5C,EAAMW,KACZkC,KAAM7C,EAAMW,KACZmC,KAAM9C,EAAMiB,WACZ8B,KAAM/C,EAAMiB,WACZ+B,IAAKhD,EAAMiB,WACXI,IAAKrB,EAAMqB,IACX4B,IAAKjD,EAAMyB,MACXyB,IAAKlD,EAAMyB,MACXA,MAAOzB,EAAMyB,MACbI,MAAO7B,EAAM6B,MACbF,MAAO3B,EAAM2B,MACbwB,IAAKnD,EAAM+B,SAGAqB,EAAW,SAAHC,GAA0C,IAApCC,EAAID,EAAJC,KAAMC,EAASF,EAATE,UAC/BC,EAAiCF,EAAzBG,KAAAA,WAAID,EAAG,GAAEA,EAAAE,EAAgBJ,EAAdK,KACbC,QADiB,IAAAF,EAAG,GAAEA,GACNG,MAAM,KAAK,GAC3BC,EAAYL,EAAKI,MAAM,KAAKE,OAAS,UAC3CC,EACE/B,EAAY6B,IAAc7B,EAAY2B,IAAa3B,EAAW,qBAEhE,OACEgC,EAAAC,IAJUF,EAAJ9D,KAID,CACHiE,KAAM7D,EAAKA,MAAC8D,UAAUC,OACtBjE,MAAOmD,EANsBS,EAAZvD,aAAFuD,EAAL5D,OAShB,0ZCxJO,oBCOPkE,EAAAC,EAAAC,EAAAC,EAAAC,EAyCKC,EDhDQC,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,OAIV,OACEC,YAAYT,EAAQM,KAAKI,IALjB,KAKwBL,IAAIM,QAAQV,IAAiB,IAAMG,EAAMC,EAN3E,CAQF,qHEmCMO,EAAQC,EAAAA,OAAOC,IAAGrB,IAAAA,EAAAsB,EAAA,CAAA,yBAAA,2JACF,SAAAvC,GAAA,IAAGC,EAAID,EAAJC,KAAI,MAAA,SACjB,YAAaA,GAAQA,EAAKuC,SAAO,IAAA,GASvCC,EAAcJ,EAAAA,OAAOC,IAAGpB,IAAAA,EAAAqB,EAAA,CAAA,iNAaxBG,EAAa,CACjBC,YAAa,OACbC,QAAS,QAGLC,EAASR,EAAMA,OAACC,IAAGnB,IAAAA,EAAAoB,wGAEnB,SAAA5B,OAAGmC,EAAKnC,EAALmC,MAAgB,OAAAnC,EAATT,UACE4C,EAAM5F,OAAO6F,WAAaD,EAAM5F,OAAOG,UAAU,EAEpD,SAAA2F,GAAe,OAAPA,EAALF,MAAkBG,UAAUC,OAAOC,QAAQ,EAC5C,SAAAC,UAAQA,EAALN,MAAkBG,UAAUC,OAAOG,UAAU,GAG3DC,EAAajB,EAAAA,OAAOkB,EAAIA,KAAXlB,CAAYjB,IAAAA,EAAAmB,8FAGhB,SAAAiB,UAAQA,EAALV,MAAkBG,UAAUC,OAAOC,QAAQ,EAC5C,SAAAM,GAAe,OAAPA,EAALX,MAAkBG,UAAUC,OAAOG,UAAU,GAG3DK,EAAWrB,EAAAA,OAAOkB,EAAAA,KAAPlB,CAAYhB,IAAAA,EAAAkB,8LAOd,SAAAoB,UAAQA,EAALb,MAAkBG,UAAUC,OAAOC,QAAQ,EAC5C,SAAAS,GAAQ,OAAAA,EAALd,MAAkBG,UAAUC,OAAOG,UAAU,GAG3DQ,EAAaxB,EAAAA,OAAOyB,EAAAA,KAAPzB,CAAY0B,IAAAA,EAAAxB,EAAA,CAAA,gDAAA,qCAAA,4BAEb,SAAAyB,OAASlB,EAAKkB,EAALlB,MAAO5C,EAAS8D,EAAT9D,UAC9B,OADqB8D,EAAJ/D,KACZgE,OACD/D,EACE4C,EAAM5F,OAAOiB,OACb2E,EAAM5F,OAAOgH,OACfhE,EACE4C,EAAM5F,OAAOiH,WACbrB,EAAM5F,OAAOkH,UAAU,EAEtB,SAAAC,GAAG,IAAMvB,EAAKuB,EAALvB,MAChB,OADgCuB,EAATnE,UAEnB4C,EAAM5F,OAAOoH,SAFHD,EAAJpE,KAGDgE,OACHnB,EAAM5F,OAAOC,WACb2F,EAAM5F,OAAOqH,MAAMC,IAAI,GAI3BC,EAAcpC,EAAMA,OAACqC,KAAIC,IAAAA,EAAApC,uHAUzBqC,EAAevC,EAAAA,OAAOqC,KAAIG,IAAAA,EAAAtC,EAAA,CAAA,4BA+CnBuC,eAAUC,EAAAA,WAGrB,SAACC,EAAOC,OAAOC,EAEbC,EAUEH,EAVFG,OACAlF,EASE+E,EATF/E,KACWmF,EAQTJ,EARF9E,UACAmF,EAOEL,EAPFK,QACAC,EAMEN,EANFM,QACAC,EAKEP,EALFO,aACAC,EAIER,EAJFQ,aAEAC,EAEET,EAFFS,WACGC,EAAIC,EACLX,EAAKY,GAEH9C,EAAwB+C,EAAAA,WAAWC,EAAAA,cACnCC,EAAsBC,EAAK,QAACH,WAAWI,eACvC/F,EAAYgG,EAAAA,aAAad,GAC/Be,EAA8BC,wBAASxF,EAAAA,IAACyF,EAAAA,eAAjCC,EAAOH,KAAEI,EAAUJ,EAE1B,GAAMK,EAAmB,WACvBhB,GAAwC,mBAAjBA,GAA+BA,EAAavF,EACrE,EAEMwG,EAAmB,WACvBlB,GAAwC,mBAAjBA,GAA+BA,EAAatF,EACrE,EAEMyG,EAAkB,SAAHC,GAAiD,IAAAC,EAAAD,EAA3CE,OAAAA,OAAM,IAAAD,EAAG,QAAOA,EACzCE,EAAwBV,YAAkB,GAAnCW,EAAID,KAAEE,EAAOF,EAEpBG,GAcA,OAdAA,EAASA,UAAC,WACR,IAAIC,GAAU,EAQd,OANAC,WAAW,WACLD,GACFF,GAAQ,EAEZ,EAAG,gBAGDE,GAAU,CACZ,CACF,EAAG,CAACL,IAEW,UAAXA,GAAiC,UAAXA,eAEtBjG,EAAAC,IAAC4B,GAAW2E,sBACVxG,EAAAC,IAACwG,cACCC,QAASd,EACTe,QAASC,EAAAA,cAAcC,KACvBzK,MAAO0K,EAAAA,YAAYC,OACnB,aAAe5B,EAAK6B,SAASC,WAAc5H,IAAAA,EAAK6H,KAChDC,kBAAMnH,EAAAC,IAACwF,EAASA,UAAA,CAAG,OAMZ,YAAXQ,eAEAjG,EAAAA,IAAC6B,EAAW2E,CAAAA,sBACVxG,EAAAA,IAACoH,EAAOA,QACNhL,CAAAA,MAAOkD,EAAY4C,EAAM5F,OAAOqH,MAAM0D,QAAUnF,EAAM5F,OAAOgL,yBAOnEC,EAAAC,KAAC3F,GAAW2E,SAAA,cACVxG,EAAAA,IAACyH,EAAAA,WAAU,CAACC,QAASvB,EAAMwB,iBAAcC,MAAI,EAAApB,sBAC3CxG,EAAAC,IAAC4H,kBAAe,CACdzL,MAAOkD,EAAY4C,EAAM5F,OAAOS,SAAWmF,EAAM5F,OAAOwL,QACxD3L,MAAO,CAAE4L,UAAW,wBAGxB/H,MAACyH,EAAAA,WAAWC,CAAAA,OAAQvB,EAAMwB,eAAa,EAACC,MAAIpB,EAAAA,sBAC1CxG,EAAAC,IAACwG,aACCC,CAAAA,QAASb,EACTc,QAASC,EAAaA,cAACC,KACvBzK,MAAO0K,EAAAA,YAAYC,OACnB,aAAe5B,EAAK6B,SAASgB,WAAU,IAAI3I,EAAK6H,KAChDC,kBAAMnH,EAAAC,IAACgI,EAAUA,WAAA,CAAG,SAK9B,EAMA,OAJA5B,EAASA,UAAC,eAAK6B,EACbvC,eAAW3F,EAAAA,IAAC8F,EAAe,CAACG,aAAQ5G,GAAe,OAAX6I,EAAJ7I,EAAM8I,gBAAS,EAAfD,EAAiBjC,SACvD,EAAG,CAAK,MAAJ5G,GAAe,OAAXiF,EAAJjF,EAAM8I,gBAAS,EAAf7D,EAAiB2B,sBAGnBjG,MAACoI,EAAAA,eAAeC,SAAQ,CAACC,MAAO,CAAEhJ,UAAAA,GAAYkH,sBAC5Ce,EAAAC,KAACvE,EACCsF,CAAAA,aAAcC,EAAgBA,iBAACC,MAC/BC,gBAAiBC,EAAAA,oBAAoBC,IACrCtJ,UAAWA,EACX4C,MAAOA,EACP7C,KAAMA,EACN,cAAa+E,EAAMyE,OACnBxE,IAAKA,EACLyE,KAAMzJ,EAAKgE,OAAS,QAAU,GAAGmD,SAEjCe,cAAAA,OAAC7E,EAAUqG,EACT7G,CAAAA,MAAOA,EACP8G,SAAUC,EAAAA,aAAaC,UACvBC,WAAYC,EAAcA,eAACC,QACvBvE,GAAI0B,SAAA,cAERxG,EAAAA,IAAC2C,EAAAA,MACCqG,SAAUC,EAAAA,aAAaK,KACvBH,WAAYC,EAAAA,eAAeC,OAC3BlN,MAAO2F,EAAW0E,SAEjBnH,EAAKgE,oBACJrD,EAAAA,IAACuJ,EAAAA,UACCnN,CAAAA,MAAOkD,EAAY4C,EAAM5F,OAAOiB,OAAS2E,EAAM5F,OAAOgH,OACtDpD,KAAM,KAENb,EAAKuC,SACPiD,GACAxF,EAAKK,MACLL,EAAKK,KAAK8J,WAAW,sBACrBxJ,MAACwB,EAAMsH,CAAAA,KAAK,MAAMzJ,KAAMA,iBAExBW,EAAAC,IAACd,EAAQ,CAACG,UAAWA,EAAWD,KAAMA,mBAG1CW,EAAAA,IAAC8C,GAAS2G,IAAE,EAACT,SAAUC,EAAYA,aAACK,KAAMpH,MAAOA,EAAMsE,SACpDnH,EAAK6H,OAEP7H,EAAK8I,WAAuC,YAA1B9I,EAAK8I,UAAUlC,qBAChCjG,EAAAA,IAAC2C,EAAAA,KACCmG,CAAAA,KAAK,cACL3M,MAAO,CAAEuN,WAAY,QACrBV,SAAUC,eAAaK,KAAK9C,SAE3BnH,EAAK8I,UAAUwB,uBAGpB3J,EAAAC,IAAC0C,EAAIA,KAACqG,CAAAA,SAAUC,EAAYA,aAACK,KAAK9C,SAAEd,QAErCrG,EAAKgE,qBACJrD,EAAAC,IAACgC,EAAOC,CAAAA,MAAOA,EAAO5C,UAAWA,EAAUkH,SACxCnH,EAAKgE,OAAOuG,MAAM,EAAG,GAAGC,IAAI,SAAAC,OAAGC,EAAID,EAAJC,KAC9BC,EAjMM,SAClBC,EACAC,EAKAC,GAEA,IAAM5F,EACJ6F,MAAMC,QAAQH,EAAY3F,SAAyC,IAA9B2F,EAAY3F,OAAO+F,OACpDJ,EAAY3F,OAAO,GACnB2F,EAAY3F,OACZgG,EAAgBH,MAAMC,QAAQ9F,GACtBA,UAAAA,EAAOiG,KAAK,MACtBjG,EAEJ,OAAQ0F,EAAMF,MACZ,IAAK,iBACH,OAAAhB,EAAA,CAAA,EACKkB,EACHQ,CAAAA,QAAYR,EAAMQ,QAAW9J,IAAAA,EAC3BuJ,EAAYzF,QACZ,EACA0F,GACD,MAEL,IAAK,iBACH,OAAApB,EACKkB,GAAAA,EACHQ,CAAAA,QAAYR,EAAMQ,QAAW9J,IAAAA,EAC3BuJ,EAAYxF,QACZ,EACAyF,GACD,MAEL,IAAK,oBACH,OAAApB,KAAYkB,EAAK,CAAEQ,QAAYR,EAAMQ,QAAO,KAAKF,IACnD,QACE,OAAON,EAEb,CAwJ+CS,CAAW3B,GACxCgB,KAAAA,GAFuChF,EAAA+E,EAAAa,GAErBxF,EAAK6B,SAAS3D,OAAO0G,IACzC,CAAExF,OAAAA,EAAQG,QAAAA,EAASD,QAAAA,GACnBU,EAAK6B,SAASpG,OACfgK,EAAAZ,EAJOa,OAAaJ,EAAOT,EAAPS,qBAMrB,OACElD,EAAAA,KAACnC,EAAK,QAAC0F,UAAQtE,SAAA,cACbxG,EAAAA,IAAC6D,EAAW,CACV1H,MAAO,CACLC,MAAOkD,EACH4C,EAAM5F,OAAOiB,OACb2E,EAAM5F,OAAOgH,QACjBkD,cAbS,IAAHoE,EAAG,GAAEA,iBAiBf5K,EAAAA,IAACgE,EAAYwC,CAAAA,SAAEiE,MAVIV,EAazB,SAMZ,GD/VA/E,EAAA,CAAA,SAAA,iBAAA,WAAA,kBAAA,gBAAA,KAAA,YAAA,YAAA,wBAAA,aAAA,YAAA,WAAA,WAAA,UAAA,UAAA,WAAA,SAAA,aAAA,eAAA,eAAA,YAAA,SAAA,eAyCA,SAAKtE,GACHA,EAAA,MAAA,QACAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,WAAA,aACAA,EAAA,QAAA,SACD,CAND,CAAKA,IAAAA,EAMJ,KAkFD,IAAMqK,EAAYtJ,EAAAA,OAAOkB,EAAIA,KAAXlB,CAAYpB,IAAAA,EAAAsB,EASb,CAAA,+CAAA,yBAAA,oBAAA,iBAAA,uBAAA,gBAAA,wBAAA,0BAAA,sCAAA,SAAA,SAAAvC,GAAiB,OAARA,EAAN4L,OAAuB,OAAS,QAAQ,EACvC,SAAAjL,GAAiB,OAARA,EAANiL,OAAuB,OAAS,QAAQ,EAChD,SAAA5I,GAAiB,OAARA,EAAN4I,OAAuB,OAAS,QAAQ,EAC9C,SAAAxI,GAAS,OAAAA,EAANwI,OAAuB,MAAQ,MAAM,EAClC,SAAApI,OAAWV,EAAKU,EAALV,MAC1B,OADwBU,EAANoI,OACT9I,EAAM+I,iBAAmB/I,EAAMgJ,iBAAiB,EACjD,SAAArI,GAAAsI,IAAAA,EAAAtI,EAAGuI,UAAAA,OAAY1K,IAAHyK,EAAGzK,EAAiB,QAAAyK,EAAUjJ,EAAKW,EAALX,MAAO5C,EAASuD,EAATvD,UAAS,OAAlBuD,EAANmI,OACpC,MAEFI,IAAc1K,EAAU2K,YAAcD,IAAc1K,EAAUuJ,MAC5D3K,GACK8L,IAAc1K,EAAUuJ,MAAQ,MAAQ,OACzCmB,YAAAA,IAAc1K,EAAUuJ,MACpB/H,EAAM5F,OAAOiB,OACb2E,EAAM5F,OAAOgP,SAEhBF,IAAc1K,EAAUuJ,MAAQ,MAAQ,OACzC/H,WAAAA,EAAM5F,OAAOgH,OAEjB8H,IAAc1K,EAAU6K,yBACRrJ,EAAM5F,OAAOM,QAC3BwO,IAAc1K,EAAU8K,WAAU,cAClBtJ,EAAM5F,OAAOS,SAEzBuC,eAAAA,EAAY4C,EAAM5F,OAAOiH,WAAarB,EAAM5F,OAAOG,WACnD,EAEE,SAAAsG,GAAA0I,IAAAA,EAAA1I,EAAGqI,UACjB,YAD6B1K,IAAH+K,EAAG/K,EAAiB,QAAA+K,KAChC/K,EAAUuJ,MAAQ,QAAU,QAAQ,EAChC,SAAAjH,OAAGd,EAAKc,EAALd,MAAwB,OAAXc,EAANgI,OAExB,cAFyChI,EAAT1D,UAI9BoM,iBAAe,GAAKxJ,EAAM5F,OAAOqP,aACjCzJ,EAAM5F,OAAOsP,UAAU,EAEjB,SAAAxI,GAA0B4H,MAAAA,WAAjB5H,EAAN4H,OAAgC,EAAI,QAAM,cAAA,GAGvDa,EAAgBpK,EAAMA,OAACqC,KAAIxD,IAAAA,EAAAqB,EAAA,CAAA,cAAA,0EACtB,SAAA8B,GAAA,IAAGvB,EAAKuB,EAALvB,aAAgBuB,EAATnE,UACL4C,EAAM5F,OAAO6F,WAAaD,EAAM5F,OAAOC,UAAU,GAM3DuP,EAAUrK,EAAMA,OAACC,IAAGnB,IAAAA,EAAAoB,+HACf,SAAAoE,GAAG,IAAA7D,EAAK6D,EAAL7D,MACV,OAD0B6D,EAATzG,UACL4C,EAAM5F,OAAOoH,SAAWxB,EAAM5F,OAAOqH,MAAMC,IAAI,EAEhD,SAAAkG,GAAQ,OAAAA,EAAL5H,MAAkBG,UAAUC,OAAOC,QAAQ,EAC5C,SAAAwJ,GAAe,OAAPA,EAAL7J,MAAkBG,UAAUC,OAAOG,UAAU,EAEpD,SAAAuJ,UAAQA,EAAL9J,MAAkB+J,WAAWC,SAAS,GAGhDC,EAAc1K,SAAO2K,GAAE5L,IAAAA,EAAAmB,EAAA,CAAA,6CAKvB0K,EAAc5K,EAAMA,OAAC6K,GAAE7L,IAAAA,EAAAkB,EAAE,CAAA,qCAEPyD,EAAAA,QAAMjB,WAC5B,SAACC,EAAOC,GACN,IACEE,EA2BEH,EA3BFG,OACAgI,EA0BEnI,EA1BFmI,eACAC,EAyBEpI,EAzBFoI,SAAQC,EAyBNrI,EAvBFsI,gBAAAA,OAAe,IAAAD,EAAG,CAChBE,UAAU,GACXF,EACDG,EAoBExI,EApBFwI,cACIC,EAmBFzI,EAnBF0I,GACAC,EAkBE3I,EAlBF2I,UACWvI,EAiBTJ,EAjBF9E,UACA0N,EAgBE5I,EAhBF4I,sBACAC,EAeE7I,EAfF6I,WACAC,EAcE9I,EAdF8I,UACAC,EAaE/I,EAbF+I,SACAC,EAYEhJ,EAZFgJ,SACA3I,EAWEL,EAXFK,QACAC,EAUEN,EAVFM,QAAO2I,EAULjJ,EATFuI,SAAAA,OAAW,IAAHU,GAAOA,EAAAC,EASblJ,EARF4G,OAAAA,WAAMsC,GAAQA,EACdC,EAOEnJ,EAPFmJ,WACA5I,EAMEP,EANFO,aACAC,EAKER,EALFQ,aAAY4I,EAKVpJ,EAJFqJ,UAAAA,OAAY,IAAHD,GAAQA,EACjB3E,EAGEzE,EAHFyE,OAAM6E,EAGJtJ,EAFFS,WAAAA,OAAa,IAAH6I,GAAOA,EACd5I,EAAIC,EACLX,EAAKY,GAET2I,EAA0BvI,EAAAA,QAAMI,SAAwB,IAAjDoI,EAAKD,EAAA,GAAEE,EAAQF,EACtB,GAAAG,EAAwC1I,EAAK,QAACI,SAAwB,MAA/DuI,EAAYD,EAAA,GAAEE,EAAeF,EACpC,GAAAG,EAAwC7I,UAAMI,SAAiB,IAAxD0I,GAAYD,EAAA,GAAEE,GAAeF,EAEpC,GAAM3O,GAAYgG,EAAAA,aAAad,GACzBtC,GAAwBkD,UAAMH,WAAWC,EAAAA,cACzCC,GAAsBC,EAAAA,QAAMH,WAAWI,EAAWA,aAClDyH,GAAKsB,EAAaA,cAACvB,GACnBwB,GAAkBD,EAAaA,cAAItB,GAAE,WAErCwB,GAAsBlJ,UAAMmJ,OAA0B,MAEtDC,GAASpJ,EAAAA,QAAMqJ,YACnB,SAACC,EAA8BC,GAC7B,IAAMC,EAAQ,GAAAC,OACTH,EAAc7E,IAAI,SAACxK,GACpB,OAAAyP,OAAOC,OAAO1P,EAAM,CAClBuC,QAASoN,IAAIC,gBAAgB5P,IAC7B,GAEDsP,EAAc9E,IACf,SAAAqF,GACE,OAAAJ,OAAOC,OADFG,EAAJ7P,KACmB,CAClBgE,OAFW6L,EAAN7L,QAGL,IAMR,GAFAwK,EAAS,SAACsB,GAAwBN,MAAAA,GAAAA,OAASM,EAAcP,EAAQ,GAE7DF,EAAcpE,OAAS,EAAG,CAC5B,IAAM8E,EAAYV,EAAc7E,IAAI,SAAAxK,UAAQA,EAAK6H,IAAI,GAAEsD,KAAK,MACtDC,EACqB,IAAzBiE,EAAcpE,OACVnF,GAAK6B,SAASqI,UAAUC,QAAQ,gBAAiBF,GACjDjK,GAAK6B,SAASuI,WACXD,QAAQ,aAAcZ,EAAcpE,OAAOkF,YAC3CF,QAAQ,iBAAkBF,GAEnCjB,GAAgB1D,EAClB,CAEA6D,GAAoBmB,SAAWnB,GAAoBmB,QAAQC,OAC7D,EACA,CAACvK,KAGHwK,GAQIC,EAAAA,YAAW7G,EACb8G,CAAAA,SAAS,EACTrD,SAAAA,EACAG,SAAAA,EACAlI,QAAAA,EACAC,QAAAA,EACAH,OAAAA,EACAiK,OAAAA,GACAxD,OAAAA,GACG0B,IAhBHoD,GAAaH,GAAbG,cACAC,GAAYJ,GAAZI,aACAC,GAAYL,GAAZK,aACAC,GAAYN,GAAZM,aACAC,GAAYP,GAAZO,aACAC,GAAIR,GAAJQ,KACAC,GAAQT,GAARS,SAaFC,EAAmBA,oBACjBhM,EACA,WAAM,OAAA+L,GAASX,OAAO,GAGxB,IAAMa,GAAaR,GAAc,CAAEhD,GAAAA,KAE/B1B,GAAY1K,EAAiB,QAE7BqN,EACF3C,GAAY1K,EAAUuJ,MACb+F,GACT5E,GAAY1K,EAAU8K,WACb0E,GACT9E,GAAY1K,EAAU2K,WACb4E,KACT7E,GAAY1K,EAAU6K,YAGxB,IAAM3F,GAAmB,SAAC2K,GACxB1C,EAAS,SAAAsB,GAAa,OAAAA,EAAUqB,OAAO,SAAAnR,GAAI,OAAIA,IAASkR,CAAW,EAAC,GAEhE3L,GAAwC,mBAAjBA,GACzBA,EAAa2L,GAGf,IAAM9F,EAAUtF,GAAK6B,SAASyJ,YAAYnB,QACxC,gBACAiB,EAAYrJ,MAGdiH,GAAgB1D,GAEhB6D,GAAoBmB,SAAWnB,GAAoBmB,QAAQC,OAC7D,EAEM7J,GAAmB,SAAC0K,GACxB1C,EAAS,SAAAsB,GAAa,OAAAA,EAAUqB,OAAO,SAAAnR,GAAI,OAAIA,IAASkR,CAAW,EAAC,GAEhE5L,GAAwC,mBAAjBA,GACzBA,EAAa4L,GAGf,IAAM9F,EAAUtF,GAAK6B,SAAS0J,YAAYpB,QACxC,gBACAiB,EAAYrJ,MAGdiH,GAAgB1D,GAEhB6D,GAAoBmB,SAAWnB,GAAoBmB,QAAQC,OAC7D,EAEMiB,GAAc,SAACC,GAmBnB,GAfA/C,EAAS,SAAAsB,UACPA,EAAUtF,IAAI,SAAAxK,GACZ,OAAAA,IAASuR,EAAcvR,KACnByP,OAAOC,OAAO1P,EAAM,CAClB8I,UAASY,KACJ1J,EAAK8I,UAAS,CACjBwB,QAAYiH,EAAcjH,YAC1B1D,OAAQ,cAGZ5G,CAAI,EACT,GAICuR,EAAcjH,QAAU,GAAKiH,EAAcjH,QAAU,IAAO,EAAG,CACjE,IAAMc,EAAUtF,GAAK6B,SAAS6J,cAC3BvB,QAAQ,gBAAiBsB,EAAcvR,KAAK6H,MAC5CoI,QAAQ,eAAgBsB,EAAcjH,QAAQ6F,YAEjDrB,GAAgB1D,EAClB,CACF,EAEMqG,GAAc,SAACC,GACnBlD,EAAS,SAAAsB,UACPA,EAAUtF,IAAI,SAAAxK,GACZ,OAAAA,IAAS0R,EAAc1R,KACnByP,OAAOC,OAAO1P,EAAM,CAClB8I,UAASY,EACJ1J,GAAAA,EAAK8I,WACRwB,QAAS,GACT1D,OAAQ,eAGZ5G,CAAI,EACT,GAIH,IAAMoL,EAAUtF,GAAK6B,SAASgK,aAAa1B,QACzC,gBACAyB,EAAc1R,KAAK6H,MAGrBiH,GAAgB1D,EAClB,EAEMwG,GAAW,SAACC,GAIhBrD,EAAS,SAAAsB,GAAS,OAChBA,EAAUtF,IAAI,SAAAxK,GAAI,OAChBA,IAAS6R,EAAW7R,KAChByP,OAAOC,OAAO1P,EAAM,CAClBgE,OAAQ6N,EAAW7N,OACnB8E,UAASY,EAAO1J,CAAAA,EAAAA,EAAK8I,WAAWlC,OAAQ,YAE1C5G,CAAI,EACT,EAEL,EAoEA,OAlEA+F,EAAK,QAACiB,UACJ,WAAA,OAAW,WACTuH,EAAMuD,QACJ,SAAA9R,GAAQ,OAAAA,EAAKuC,SAAWoN,IAAIoC,gBAAgB/R,EAAKuC,QAAQ,EAE7D,CAAC,EACD,CAACgM,IAGHxI,EAAK,QAACiB,UAAU,WACd,IAiBMgL,EAAejE,GAAYQ,EAAMtD,OAAS8C,EAC1CkE,EAAenE,GAAYS,EAAMtD,OAAS6C,EAE5CoE,EAA2B,KAE3BD,EACFC,EAAY,iBACHF,IACTE,EAAY,iBAGdvD,EA5BoB,SAClBjE,EACAG,GAEA,GAAa,OAATH,EAAe,OAAO,KAC1B,IAAME,EAAQ9E,GAAK6B,SAAS3D,OAAO0G,GAEnC,OAAQA,GACN,IAAK,iBACH,OAAUE,EAAMQ,QAAO,IAAIP,EAAYiD,SAAYhI,IAAAA,GAAK6B,SAAS4G,MAAK,IACxE,IAAK,gBACH,OAAU3D,EAAMQ,QAAWP,IAAAA,EAAYkD,SAAQ,IAAIjI,GAAK6B,SAAS4G,MACnE,IAAA,QACE,OAAO3D,EAAMQ,QAEnB,CAagBC,CAAY6G,EAAW,CAAEnE,SAAAA,EAAUD,SAAAA,KAE/CM,GAAaG,EAAMtD,OAAS,IAAMgH,IAAiBD,GACrDxD,EAAS,SAACsB,GACR,OAAOA,EAAUtF,IAAI,SAACxK,GAUpB,OATKA,EAAKgE,QAAWhE,EAAK8I,YAAaoF,GACrCA,EAAW,CACTlO,KAAAA,EACAmS,QAASP,GACTQ,SAAUX,GACVY,WAAYf,KAITtR,CACT,EACF,EAEJ,EAAG,CACDoO,EACAG,EAAMtD,OACNiD,EACAJ,EACAC,EACAjI,GAAK6B,SAAS3D,OACd8B,GAAK6B,SAAS4G,qBAIdrG,EAAAA,KAACa,EAAAA,eAAeC,SAAQ,CAACC,MAAO,CAAEhJ,UAAAA,IAAYkH,SAC5Ce,cAAAA,EAAAC,KAACmK,qBAAkB,CACjBC,YAAY,EACZrF,eAAgBA,EAChBwB,aAAcA,EACd8D,QAAS/E,GACTC,UAAWA,EACXzN,UAAWA,GACX0N,sBAAuBA,EACvBC,WAAUlE,EAAA,CACR3M,MAAOkD,GAAY4C,GAAM5F,OAAOoH,SAAWxB,GAAM5F,OAAOqH,MAAMC,MAC3DqJ,GAELC,UAAWA,EACX4E,aAAc,CAAEC,UAAW,GAC3B,cAAalJ,EAAOrC,SAAA,cAEpBxG,EAAAC,IAAC4L,EACCiB,CAAAA,GAAIuB,GACJnM,MAAOA,GACP5C,UAAWA,GAAUkH,SAEpBoG,iBAEHrF,EAAAC,KAACuD,EAAShC,EAAA,CACRC,SAAUC,EAAYA,aAACC,UACvBkC,UAAWA,GACX9L,UAAWA,GACX0L,OAAQA,EACR9I,MAAOA,IACH6N,KACAjL,EAAI,CACR+D,OAAQA,EACRmJ,UAAW,EAAExL,SAEbxG,cAAAA,EAAAA,aACEqE,IAAK+L,GACL1Q,KAAM4Q,GAAW5Q,KACjB6E,OAAQ+L,GAAW/L,OACnB0N,aAAc3B,GAAW2B,aACzBnF,GAAIwD,GAAWxD,GACfH,SAAU2D,GAAW3D,SACrBuF,SAAU5B,GAAW4B,SACrBxL,QAAS4J,GAAW5J,QACpBvK,MAAOmU,GAAWnU,MAClB6V,SAAU1B,GAAW0B,SACrB,cAAY,eAEbhH,eACChL,EAAAA,IAAC2C,EAAAA,KAAK8G,CAAAA,MAAGT,SAAUC,EAAAA,aAAaK,KAAK9C,sBACnCxG,MAACmS,EAAAA,OAAM,CACL/V,MAAO0K,EAAAA,YAAYQ,QACnBkF,SAAUA,EACVlN,UAAWA,GACXoH,QAASyJ,GACThU,MAAO,CAAEiW,OAAQ,GACjB/N,IAAKiK,GACL,mBAAkB1B,EAAgByB,QAAkBtN,EAAUyF,SAE7DrB,GAAK6B,SAASqL,6BAInB9K,EAAAC,KAAC7E,OAAI,CAACqG,SAAUC,eAAaK,KAAK9C,SAAA,cAChCxG,EAAAC,IAACqS,EAAeA,gBACd,CAAA,cAAY,OACZlW,MACEkD,GAAY4C,GAAM5F,OAAOoH,SAAWxB,GAAM5F,OAAOC,WAEnD2D,KAAM,kBAERF,EAAAA,IAAC8L,GAAQxM,UAAWA,GAAW4C,MAAOA,GAAMsE,SACzCrB,GAAK6B,SAASuL,2BAEjBvS,EAAAC,IAACkS,EAAMA,OACL/V,CAAAA,MAAO0K,cAAYQ,QACnBkF,SAAUA,EACVlN,UAAWA,GACXoH,QAASyJ,GACThU,MAAO,CAAEiW,OAAQ,GACjBzL,QAASC,EAAaA,cAAC4L,MACvBnO,IAAKiK,GACL,mBAAkB1B,EAAgByB,QAAkBtN,EAAUyF,SAE7DrB,GAAK6B,SAASqL,qCAMzBrS,EAAAA,IAACmM,EAAW3F,CAAAA,SACToH,EAAM/D,IAAI,SAACxK,gBAAiB,OAC3BW,EAAAA,IAACqM,EAAW7F,CAAAA,sBACVxG,EAAAC,IAACiE,EAAO,CACNK,OAAQA,EACRlF,KAAMA,EACNC,UAAWA,GACXmF,QAASA,EACTC,QAASA,EACTC,aAAckB,GACdjB,aAAcgB,GACdf,WAAYA,KATExF,EAAK6H,KAWT,kBAIlBlH,MAACyS,EAAAA,eAAc,CAAAjM,sBACbxG,EAAAA,IAAC0S,EAAQA,UAAAlM,SAAE0H,SAInB"}
|
|
1
|
+
{"version":3,"file":"fileuploader.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Dropzone.tsx","../src/components/dropzone/Preview.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.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.blue500,\n },\n inverseStyle: {\n color: magma.colors.blue500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.green500,\n },\n inverseStyle: {\n color: magma.colors.green500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.tangerine600,\n },\n inverseStyle: {\n color: magma.colors.tangerine500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.red600,\n },\n inverseStyle: {\n color: magma.colors.red500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: {\n Icon: any;\n style: React.CSSProperties;\n inverseStyle: React.CSSProperties;\n };\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, inverseStyle } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return (\n <Icon\n size={magma.iconSizes.medium}\n style={isInverse ? inverseStyle : style}\n />\n );\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","/* 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\nenum DragState {\n error = 'error',\n dragAccept = 'dragAccept',\n dragReject = 'dragReject',\n dragActive = 'dragActive',\n default = 'default',\n}\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, theme }) =>\n noDrag ? theme.borderRadiusNone : theme.borderRadiusSmall};\n border: ${({ dragState = DragState.default, noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === DragState.dragReject || dragState === DragState.error\n ? isInverse\n ? `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n dragState === DragState.error\n ? theme.colors.red500\n : theme.colors.red400\n }`\n : `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n theme.colors.danger\n }`\n : dragState === DragState.dragActive\n ? `2px dashed ${theme.colors.blue500}`\n : dragState === DragState.dragAccept\n ? `2px dashed ${theme.colors.green500}`\n : `2px dashed ${\n isInverse ? theme.colors.neutral800 : theme.colors.neutral300\n }`};\n\n border-style: ${({ dragState = DragState.default }) =>\n dragState === DragState.error ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.6, theme.colors.neutral1200)\n : theme.colors.neutral100};\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.neutral500 : 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.neutral0 : theme.colors.brand.navy};\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 = DragState.error;\n } else if (isDragAccept) {\n dragState = DragState.dragAccept;\n } else if (isDragReject) {\n dragState = DragState.dragReject;\n } else if (isDragActive) {\n dragState = 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={{\n color: isInverse ? theme.colors.neutral0 : theme.colors.brand.navy,\n ...labelStyle,\n }}\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 ? theme.colors.neutral0 : theme.colors.neutral700\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","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n CardBorderRadius,\n CardCornerTreatment,\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<{ isInverse: boolean }>`\n border-top: 1px solid\n ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral500 : 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.red500\n : theme.colors.danger\n : isInverse\n ? theme.colors.neutral800\n : theme.colors.neutral200};\n border-width: 1px;\n color: ${({ file, theme, isInverse }) =>\n isInverse\n ? theme.colors.neutral0\n : file.errors\n ? theme.colors.neutral700\n : theme.colors.brand.navy};\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.subtle}\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={\n isInverse ? theme.colors.brand.skyBlue : theme.colors.primary\n }\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.green500 : 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.subtle}\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 borderRadius={CardBorderRadius.small}\n cornerTreatment={CardCornerTreatment.all}\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.red500 : 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} isInverse={isInverse}>\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.red500\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"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral700","inverseStyle","neutral300","word","FileWordIcon","blue500","excel","FileExcelIcon","green500","powerpoint","FilePowerpointIcon","tangerine600","tangerine500","pdf","FilePdfIcon","red600","red500","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","DragState","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral500","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_templateObject6","_ref9","errors","danger","neutral800","neutral200","_ref0","neutral0","brand","navy","ErrorHeader","span","_templateObject7","ErrorMessage","_templateObject8","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","_excluded","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref1","_ref1$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","subtle","dropzone","removeFile","name","icon","Spinner","skyBlue","primary","_jsxs","jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","borderRadius","CardBorderRadius","small","cornerTreatment","CardCornerTreatment","all","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref10","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_excluded2","_formatError$header","header","Fragment","Container","noDrag","borderRadiusNone","borderRadiusSmall","_ref6$dragState","dragState","dragReject","red400","dragActive","dragAccept","_ref7$dragState","transparentize","neutral1200","neutral100","HelperMessage","Wrapper","_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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileuploader.modern.mjs","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.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.blue500,\n },\n inverseStyle: {\n color: magma.colors.blue500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.green500,\n },\n inverseStyle: {\n color: magma.colors.green500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.tangerine600,\n },\n inverseStyle: {\n color: magma.colors.tangerine500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.red600,\n },\n inverseStyle: {\n color: magma.colors.red500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: {\n Icon: any;\n style: React.CSSProperties;\n inverseStyle: React.CSSProperties;\n };\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, inverseStyle } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return (\n <Icon\n size={magma.iconSizes.medium}\n style={isInverse ? inverseStyle : style}\n />\n );\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 CardBorderRadius,\n CardCornerTreatment,\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<{ isInverse: boolean }>`\n border-top: 1px solid\n ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral500 : 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.red500\n : theme.colors.danger\n : isInverse\n ? theme.colors.neutral800\n : theme.colors.neutral200};\n border-width: 1px;\n color: ${({ file, theme, isInverse }) =>\n isInverse\n ? theme.colors.neutral0\n : file.errors\n ? theme.colors.neutral700\n : theme.colors.brand.navy};\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.subtle}\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.brand.skyBlue : 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.green500 : 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.subtle}\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 borderRadius={CardBorderRadius.small}\n cornerTreatment={CardCornerTreatment.all}\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.red500 : 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} isInverse={isInverse}>\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.red500\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\nenum DragState {\n error = 'error',\n dragAccept = 'dragAccept',\n dragReject = 'dragReject',\n dragActive = 'dragActive',\n default = 'default',\n}\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, theme }) =>\n noDrag ? theme.borderRadiusNone : theme.borderRadiusSmall};\n border: ${({ dragState = DragState.default, noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === DragState.dragReject || dragState === DragState.error\n ? isInverse\n ? `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n dragState === DragState.error\n ? theme.colors.red500\n : theme.colors.red400\n }`\n : `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n theme.colors.danger\n }`\n : dragState === DragState.dragActive\n ? `2px dashed ${theme.colors.blue500}`\n : dragState === DragState.dragAccept\n ? `2px dashed ${theme.colors.green500}`\n : `2px dashed ${\n isInverse ? theme.colors.neutral800 : theme.colors.neutral300\n }`};\n\n border-style: ${({ dragState = DragState.default }) =>\n dragState === DragState.error ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.6, theme.colors.neutral1200)\n : theme.colors.neutral100};\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.neutral500 : 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.neutral0 : theme.colors.brand.navy};\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 = DragState.error;\n } else if (isDragAccept) {\n dragState = DragState.dragAccept;\n } else if (isDragReject) {\n dragState = DragState.dragReject;\n } else if (isDragActive) {\n dragState = 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={{\n color: isInverse ? theme.colors.neutral0 : theme.colors.brand.navy,\n ...labelStyle,\n }}\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 ? theme.colors.neutral0 : theme.colors.neutral700\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","neutral700","inverseStyle","neutral300","word","FileWordIcon","blue500","excel","FileExcelIcon","green500","powerpoint","FilePowerpointIcon","tangerine600","tangerine500","pdf","FilePdfIcon","red600","red500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","file","isInverse","path","type","category","split","extension","pop","_jsx","size","iconSizes","medium","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_","t","Thumb","styled","div","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral500","typeScale","size02","fontSize","lineHeight","StyledFlex","Flex","FileName","StyledCard","Card","errors","danger","neutral800","neutral200","neutral0","brand","navy","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","actions","setActions","useState","CloseIcon","handleRemoveFile","handleDeleteFile","FinishedActions","status","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","subtle","dropzone","removeFile","name","icon","Spinner","skyBlue","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","borderRadius","CardBorderRadius","small","cornerTreatment","CardCornerTreatment","all","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref","code","header","message","formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","Fragment","DragState","Container","noDrag","borderRadiusNone","borderRadiusSmall","dragState","dragReject","red400","dragActive","dragAccept","transparentize","neutral1200","neutral100","HelperMessage","Wrapper","spaceScale","spacing01","PreviewList","ul","PreviewItem","li","Dropzone","containerStyle","disabled","dropzoneOptions","multiple","helperMessage","id","defaultId","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","onSendFile","sendFiles","files","setFiles","errorMessage","setErrorMessage","announcement","setAnnouncement","useGenerateId","helperMessageId","browseFileButtonRef","useRef","onDrop","useCallback","acceptedFiles","rejectedFiles","newFiles","Object","assign","URL","createObjectURL","prevFiles","fileNames","fileAdded","replace","filesAdded","toString","current","focus","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useDropzone","noClick","useImperativeHandle","inputProps","removedFile","filter","fileRemoved","fileDeleted","setProgress","progressProps","fileUploading","setFinished","finishedProps","fileUploaded","setError","errorProps","forEach","revokeObjectURL","minFileError","maxFileError","errorCode","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid","VisuallyHidden","Announce"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fileuploader.modern.mjs","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.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.blue500,\n },\n inverseStyle: {\n color: magma.colors.blue500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.green500,\n },\n inverseStyle: {\n color: magma.colors.green500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.tangerine600,\n },\n inverseStyle: {\n color: magma.colors.tangerine500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.red600,\n },\n inverseStyle: {\n color: magma.colors.red500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: {\n Icon: any;\n style: React.CSSProperties;\n inverseStyle: React.CSSProperties;\n };\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, inverseStyle } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return (\n <Icon\n size={magma.iconSizes.medium}\n style={isInverse ? inverseStyle : style}\n />\n );\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 CardBorderRadius,\n CardCornerTreatment,\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<{ isInverse: boolean }>`\n border-top: 1px solid\n ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral500 : 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.red500\n : theme.colors.danger\n : isInverse\n ? theme.colors.neutral800\n : theme.colors.neutral200};\n border-width: 1px;\n color: ${({ file, theme, isInverse }) =>\n isInverse\n ? theme.colors.neutral0\n : file.errors\n ? theme.colors.neutral700\n : theme.colors.brand.navy};\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.subtle}\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={\n isInverse ? theme.colors.brand.skyBlue : theme.colors.primary\n }\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.green500 : 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.subtle}\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 borderRadius={CardBorderRadius.small}\n cornerTreatment={CardCornerTreatment.all}\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.red500 : 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} isInverse={isInverse}>\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.red500\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\nenum DragState {\n error = 'error',\n dragAccept = 'dragAccept',\n dragReject = 'dragReject',\n dragActive = 'dragActive',\n default = 'default',\n}\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, theme }) =>\n noDrag ? theme.borderRadiusNone : theme.borderRadiusSmall};\n border: ${({ dragState = DragState.default, noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === DragState.dragReject || dragState === DragState.error\n ? isInverse\n ? `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n dragState === DragState.error\n ? theme.colors.red500\n : theme.colors.red400\n }`\n : `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n theme.colors.danger\n }`\n : dragState === DragState.dragActive\n ? `2px dashed ${theme.colors.blue500}`\n : dragState === DragState.dragAccept\n ? `2px dashed ${theme.colors.green500}`\n : `2px dashed ${\n isInverse ? theme.colors.neutral800 : theme.colors.neutral300\n }`};\n\n border-style: ${({ dragState = DragState.default }) =>\n dragState === DragState.error ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.6, theme.colors.neutral1200)\n : theme.colors.neutral100};\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.neutral500 : 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.neutral0 : theme.colors.brand.navy};\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 = DragState.error;\n } else if (isDragAccept) {\n dragState = DragState.dragAccept;\n } else if (isDragReject) {\n dragState = DragState.dragReject;\n } else if (isDragActive) {\n dragState = 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={{\n color: isInverse ? theme.colors.neutral0 : theme.colors.brand.navy,\n ...labelStyle,\n }}\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 ? theme.colors.neutral0 : theme.colors.neutral700\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","neutral700","inverseStyle","neutral300","word","FileWordIcon","blue500","excel","FileExcelIcon","green500","powerpoint","FilePowerpointIcon","tangerine600","tangerine500","pdf","FilePdfIcon","red600","red500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","file","isInverse","path","type","category","split","extension","pop","_jsx","size","iconSizes","medium","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","_t","_t2","_t3","_t4","_t5","_t6","_t7","_t8","_","t","Thumb","styled","div","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral500","typeScale","size02","fontSize","lineHeight","StyledFlex","Flex","FileName","StyledCard","Card","errors","danger","neutral800","neutral200","neutral0","brand","navy","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","actions","setActions","useState","CloseIcon","handleRemoveFile","handleDeleteFile","FinishedActions","status","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","subtle","dropzone","removeFile","name","icon","Spinner","skyBlue","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","borderRadius","CardBorderRadius","small","cornerTreatment","CardCornerTreatment","all","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref","code","header","message","formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","Fragment","DragState","Container","noDrag","borderRadiusNone","borderRadiusSmall","dragState","dragReject","red400","dragActive","dragAccept","transparentize","neutral1200","neutral100","HelperMessage","Wrapper","spaceScale","spacing01","PreviewList","ul","PreviewItem","li","Dropzone","containerStyle","disabled","dropzoneOptions","multiple","helperMessage","id","defaultId","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","onSendFile","sendFiles","files","setFiles","errorMessage","setErrorMessage","announcement","setAnnouncement","useGenerateId","helperMessageId","browseFileButtonRef","useRef","onDrop","useCallback","acceptedFiles","rejectedFiles","newFiles","Object","assign","URL","createObjectURL","prevFiles","fileNames","fileAdded","replace","filesAdded","toString","current","focus","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useDropzone","noClick","useImperativeHandle","inputProps","removedFile","filter","fileRemoved","fileDeleted","setProgress","progressProps","fileUploading","setFinished","finishedProps","fileUploaded","setError","errorProps","forEach","revokeObjectURL","minFileError","maxFileError","errorCode","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid","VisuallyHidden","Announce"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fileuploader.modern.module.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Dropzone.tsx","../src/components/dropzone/Preview.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.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.blue500,\n },\n inverseStyle: {\n color: magma.colors.blue500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.green500,\n },\n inverseStyle: {\n color: magma.colors.green500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.tangerine600,\n },\n inverseStyle: {\n color: magma.colors.tangerine500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.red600,\n },\n inverseStyle: {\n color: magma.colors.red500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: {\n Icon: any;\n style: React.CSSProperties;\n inverseStyle: React.CSSProperties;\n };\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, inverseStyle } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return (\n <Icon\n size={magma.iconSizes.medium}\n style={isInverse ? inverseStyle : style}\n />\n );\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","/* 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\nenum DragState {\n error = 'error',\n dragAccept = 'dragAccept',\n dragReject = 'dragReject',\n dragActive = 'dragActive',\n default = 'default',\n}\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, theme }) =>\n noDrag ? theme.borderRadiusNone : theme.borderRadiusSmall};\n border: ${({ dragState = DragState.default, noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === DragState.dragReject || dragState === DragState.error\n ? isInverse\n ? `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n dragState === DragState.error\n ? theme.colors.red500\n : theme.colors.red400\n }`\n : `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n theme.colors.danger\n }`\n : dragState === DragState.dragActive\n ? `2px dashed ${theme.colors.blue500}`\n : dragState === DragState.dragAccept\n ? `2px dashed ${theme.colors.green500}`\n : `2px dashed ${\n isInverse ? theme.colors.neutral800 : theme.colors.neutral300\n }`};\n\n border-style: ${({ dragState = DragState.default }) =>\n dragState === DragState.error ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.6, theme.colors.neutral1200)\n : theme.colors.neutral100};\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.neutral500 : 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.neutral0 : theme.colors.brand.navy};\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 = DragState.error;\n } else if (isDragAccept) {\n dragState = DragState.dragAccept;\n } else if (isDragReject) {\n dragState = DragState.dragReject;\n } else if (isDragActive) {\n dragState = 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={{\n color: isInverse ? theme.colors.neutral0 : theme.colors.brand.navy,\n ...labelStyle,\n }}\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 ? theme.colors.neutral0 : theme.colors.neutral700\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","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n CardBorderRadius,\n CardCornerTreatment,\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<{ isInverse: boolean }>`\n border-top: 1px solid\n ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral500 : 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.red500\n : theme.colors.danger\n : isInverse\n ? theme.colors.neutral800\n : theme.colors.neutral200};\n border-width: 1px;\n color: ${({ file, theme, isInverse }) =>\n isInverse\n ? theme.colors.neutral0\n : file.errors\n ? theme.colors.neutral700\n : theme.colors.brand.navy};\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.subtle}\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.brand.skyBlue : 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.green500 : 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.subtle}\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 borderRadius={CardBorderRadius.small}\n cornerTreatment={CardCornerTreatment.all}\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.red500 : 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} isInverse={isInverse}>\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.red500\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"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral700","inverseStyle","neutral300","word","FileWordIcon","blue500","excel","FileExcelIcon","green500","powerpoint","FilePowerpointIcon","tangerine600","tangerine500","pdf","FilePdfIcon","red600","red500","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","DragState","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral500","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_templateObject6","_ref9","errors","danger","neutral800","neutral200","_ref0","neutral0","brand","navy","ErrorHeader","span","_templateObject7","ErrorMessage","_templateObject8","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","_excluded","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref1","_ref1$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","subtle","dropzone","removeFile","name","icon","Spinner","skyBlue","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","borderRadius","CardBorderRadius","small","cornerTreatment","CardCornerTreatment","all","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref10","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_excluded2","_formatError$header","header","Fragment","Container","noDrag","borderRadiusNone","borderRadiusSmall","_ref6$dragState","dragState","dragReject","red400","dragActive","dragAccept","_ref7$dragState","transparentize","neutral1200","neutral100","HelperMessage","Wrapper","_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/Dropzone.tsx","../src/components/dropzone/Preview.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.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.blue500,\n },\n inverseStyle: {\n color: magma.colors.blue500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.green500,\n },\n inverseStyle: {\n color: magma.colors.green500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.tangerine600,\n },\n inverseStyle: {\n color: magma.colors.tangerine500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.red600,\n },\n inverseStyle: {\n color: magma.colors.red500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: {\n Icon: any;\n style: React.CSSProperties;\n inverseStyle: React.CSSProperties;\n };\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, inverseStyle } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return (\n <Icon\n size={magma.iconSizes.medium}\n style={isInverse ? inverseStyle : style}\n />\n );\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","/* 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\nenum DragState {\n error = 'error',\n dragAccept = 'dragAccept',\n dragReject = 'dragReject',\n dragActive = 'dragActive',\n default = 'default',\n}\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, theme }) =>\n noDrag ? theme.borderRadiusNone : theme.borderRadiusSmall};\n border: ${({ dragState = DragState.default, noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === DragState.dragReject || dragState === DragState.error\n ? isInverse\n ? `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n dragState === DragState.error\n ? theme.colors.red500\n : theme.colors.red400\n }`\n : `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n theme.colors.danger\n }`\n : dragState === DragState.dragActive\n ? `2px dashed ${theme.colors.blue500}`\n : dragState === DragState.dragAccept\n ? `2px dashed ${theme.colors.green500}`\n : `2px dashed ${\n isInverse ? theme.colors.neutral800 : theme.colors.neutral300\n }`};\n\n border-style: ${({ dragState = DragState.default }) =>\n dragState === DragState.error ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.6, theme.colors.neutral1200)\n : theme.colors.neutral100};\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.neutral500 : 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.neutral0 : theme.colors.brand.navy};\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 = DragState.error;\n } else if (isDragAccept) {\n dragState = DragState.dragAccept;\n } else if (isDragReject) {\n dragState = DragState.dragReject;\n } else if (isDragActive) {\n dragState = 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={{\n color: isInverse ? theme.colors.neutral0 : theme.colors.brand.navy,\n ...labelStyle,\n }}\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 ? theme.colors.neutral0 : theme.colors.neutral700\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","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n CardBorderRadius,\n CardCornerTreatment,\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<{ isInverse: boolean }>`\n border-top: 1px solid\n ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral500 : 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.red500\n : theme.colors.danger\n : isInverse\n ? theme.colors.neutral800\n : theme.colors.neutral200};\n border-width: 1px;\n color: ${({ file, theme, isInverse }) =>\n isInverse\n ? theme.colors.neutral0\n : file.errors\n ? theme.colors.neutral700\n : theme.colors.brand.navy};\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.subtle}\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={\n isInverse ? theme.colors.brand.skyBlue : theme.colors.primary\n }\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.green500 : 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.subtle}\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 borderRadius={CardBorderRadius.small}\n cornerTreatment={CardCornerTreatment.all}\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.red500 : 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} isInverse={isInverse}>\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.red500\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"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral700","inverseStyle","neutral300","word","FileWordIcon","blue500","excel","FileExcelIcon","green500","powerpoint","FilePowerpointIcon","tangerine600","tangerine500","pdf","FilePdfIcon","red600","red500","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","DragState","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral500","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_templateObject6","_ref9","errors","danger","neutral800","neutral200","_ref0","neutral0","brand","navy","ErrorHeader","span","_templateObject7","ErrorMessage","_templateObject8","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","_excluded","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref1","_ref1$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","subtle","dropzone","removeFile","name","icon","Spinner","skyBlue","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","borderRadius","CardBorderRadius","small","cornerTreatment","CardCornerTreatment","all","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref10","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_excluded2","_formatError$header","header","Fragment","Container","noDrag","borderRadiusNone","borderRadiusSmall","_ref6$dragState","dragState","dragReject","red400","dragActive","dragAccept","_ref7$dragState","transparentize","neutral1200","neutral100","HelperMessage","Wrapper","_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/Dropzone.tsx","../src/components/dropzone/Preview.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.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.blue500,\n },\n inverseStyle: {\n color: magma.colors.blue500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.green500,\n },\n inverseStyle: {\n color: magma.colors.green500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.tangerine600,\n },\n inverseStyle: {\n color: magma.colors.tangerine500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.red600,\n },\n inverseStyle: {\n color: magma.colors.red500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: {\n Icon: any;\n style: React.CSSProperties;\n inverseStyle: React.CSSProperties;\n };\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, inverseStyle } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return (\n <Icon\n size={magma.iconSizes.medium}\n style={isInverse ? inverseStyle : style}\n />\n );\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","/* 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\nenum DragState {\n error = 'error',\n dragAccept = 'dragAccept',\n dragReject = 'dragReject',\n dragActive = 'dragActive',\n default = 'default',\n}\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, theme }) =>\n noDrag ? theme.borderRadiusNone : theme.borderRadiusSmall};\n border: ${({ dragState = DragState.default, noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === DragState.dragReject || dragState === DragState.error\n ? isInverse\n ? `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n dragState === DragState.error\n ? theme.colors.red500\n : theme.colors.red400\n }`\n : `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n theme.colors.danger\n }`\n : dragState === DragState.dragActive\n ? `2px dashed ${theme.colors.blue500}`\n : dragState === DragState.dragAccept\n ? `2px dashed ${theme.colors.green500}`\n : `2px dashed ${\n isInverse ? theme.colors.neutral800 : theme.colors.neutral300\n }`};\n\n border-style: ${({ dragState = DragState.default }) =>\n dragState === DragState.error ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.6, theme.colors.neutral1200)\n : theme.colors.neutral100};\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.neutral500 : 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.neutral0 : theme.colors.brand.navy};\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 = DragState.error;\n } else if (isDragAccept) {\n dragState = DragState.dragAccept;\n } else if (isDragReject) {\n dragState = DragState.dragReject;\n } else if (isDragActive) {\n dragState = 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={{\n color: isInverse ? theme.colors.neutral0 : theme.colors.brand.navy,\n ...labelStyle,\n }}\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 ? theme.colors.neutral0 : theme.colors.neutral700\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","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n CardBorderRadius,\n CardCornerTreatment,\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<{ isInverse: boolean }>`\n border-top: 1px solid\n ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral500 : 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.red500\n : theme.colors.danger\n : isInverse\n ? theme.colors.neutral800\n : theme.colors.neutral200};\n border-width: 1px;\n color: ${({ file, theme, isInverse }) =>\n isInverse\n ? theme.colors.neutral0\n : file.errors\n ? theme.colors.neutral700\n : theme.colors.brand.navy};\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.subtle}\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.brand.skyBlue : 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.green500 : 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.subtle}\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 borderRadius={CardBorderRadius.small}\n cornerTreatment={CardCornerTreatment.all}\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.red500 : 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} isInverse={isInverse}>\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.red500\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"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral700","inverseStyle","neutral300","word","FileWordIcon","blue500","excel","FileExcelIcon","green500","powerpoint","FilePowerpointIcon","tangerine600","tangerine500","pdf","FilePdfIcon","red600","red500","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","DragState","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral500","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_templateObject6","_ref9","errors","danger","neutral800","neutral200","_ref0","neutral0","brand","navy","ErrorHeader","span","_templateObject7","ErrorMessage","_templateObject8","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","_excluded","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref1","_ref1$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","subtle","dropzone","removeFile","name","icon","Spinner","skyBlue","primary","_jsxs","jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","borderRadius","CardBorderRadius","small","cornerTreatment","CardCornerTreatment","all","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref10","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_excluded2","_formatError$header","header","Fragment","Container","noDrag","borderRadiusNone","borderRadiusSmall","_ref6$dragState","dragState","dragReject","red400","dragActive","dragAccept","_ref7$dragState","transparentize","neutral1200","neutral100","HelperMessage","Wrapper","_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/Dropzone.tsx","../src/components/dropzone/Preview.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.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.blue500,\n },\n inverseStyle: {\n color: magma.colors.blue500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.green500,\n },\n inverseStyle: {\n color: magma.colors.green500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.tangerine600,\n },\n inverseStyle: {\n color: magma.colors.tangerine500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.red600,\n },\n inverseStyle: {\n color: magma.colors.red500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral700,\n },\n inverseStyle: {\n color: magma.colors.neutral300,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: {\n Icon: any;\n style: React.CSSProperties;\n inverseStyle: React.CSSProperties;\n };\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, inverseStyle } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return (\n <Icon\n size={magma.iconSizes.medium}\n style={isInverse ? inverseStyle : style}\n />\n );\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","/* 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\nenum DragState {\n error = 'error',\n dragAccept = 'dragAccept',\n dragReject = 'dragReject',\n dragActive = 'dragActive',\n default = 'default',\n}\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, theme }) =>\n noDrag ? theme.borderRadiusNone : theme.borderRadiusSmall};\n border: ${({ dragState = DragState.default, noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === DragState.dragReject || dragState === DragState.error\n ? isInverse\n ? `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n dragState === DragState.error\n ? theme.colors.red500\n : theme.colors.red400\n }`\n : `${dragState === DragState.error ? '1px' : '2px'} dashed ${\n theme.colors.danger\n }`\n : dragState === DragState.dragActive\n ? `2px dashed ${theme.colors.blue500}`\n : dragState === DragState.dragAccept\n ? `2px dashed ${theme.colors.green500}`\n : `2px dashed ${\n isInverse ? theme.colors.neutral800 : theme.colors.neutral300\n }`};\n\n border-style: ${({ dragState = DragState.default }) =>\n dragState === DragState.error ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.6, theme.colors.neutral1200)\n : theme.colors.neutral100};\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.neutral500 : 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.neutral0 : theme.colors.brand.navy};\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 = DragState.error;\n } else if (isDragAccept) {\n dragState = DragState.dragAccept;\n } else if (isDragReject) {\n dragState = DragState.dragReject;\n } else if (isDragActive) {\n dragState = 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={{\n color: isInverse ? theme.colors.neutral0 : theme.colors.brand.navy,\n ...labelStyle,\n }}\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 ? theme.colors.neutral0 : theme.colors.neutral700\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","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n CardBorderRadius,\n CardCornerTreatment,\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<{ isInverse: boolean }>`\n border-top: 1px solid\n ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral500 : 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.red500\n : theme.colors.danger\n : isInverse\n ? theme.colors.neutral800\n : theme.colors.neutral200};\n border-width: 1px;\n color: ${({ file, theme, isInverse }) =>\n isInverse\n ? theme.colors.neutral0\n : file.errors\n ? theme.colors.neutral700\n : theme.colors.brand.navy};\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.subtle}\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={\n isInverse ? theme.colors.brand.skyBlue : theme.colors.primary\n }\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.green500 : 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.subtle}\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 borderRadius={CardBorderRadius.small}\n cornerTreatment={CardCornerTreatment.all}\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.red500 : 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} isInverse={isInverse}>\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.red500\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"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral700","inverseStyle","neutral300","word","FileWordIcon","blue500","excel","FileExcelIcon","green500","powerpoint","FilePowerpointIcon","tangerine600","tangerine500","pdf","FilePdfIcon","red600","red500","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","DragState","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral500","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_templateObject6","_ref9","errors","danger","neutral800","neutral200","_ref0","neutral0","brand","navy","ErrorHeader","span","_templateObject7","ErrorMessage","_templateObject8","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","_excluded","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref1","_ref1$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","subtle","dropzone","removeFile","name","icon","Spinner","skyBlue","primary","_jsxs","jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","borderRadius","CardBorderRadius","small","cornerTreatment","CardCornerTreatment","all","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","marginLeft","percent","slice","map","_ref10","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_excluded2","_formatError$header","header","Fragment","Container","noDrag","borderRadiusNone","borderRadiusSmall","_ref6$dragState","dragState","dragReject","red400","dragActive","dragAccept","_ref7$dragState","transparentize","neutral1200","neutral100","HelperMessage","Wrapper","_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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@react-magma/dropzone",
|
|
3
|
-
"version": "16.0.0
|
|
3
|
+
"version": "16.0.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -35,7 +35,7 @@
|
|
|
35
35
|
"@emotion/styled": "11.14.0",
|
|
36
36
|
"react": "18.3.1",
|
|
37
37
|
"react-dom": "18.3.1",
|
|
38
|
-
"react-magma-dom": "^7.0.0
|
|
38
|
+
"react-magma-dom": "^7.0.0",
|
|
39
39
|
"react-magma-icons": "^3.2.5"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@emotion/styled": "11.14.0",
|
|
44
44
|
"react": "18.3.1",
|
|
45
45
|
"react-dom": "18.3.1",
|
|
46
|
-
"react-magma-dom": "^7.0.0
|
|
46
|
+
"react-magma-dom": "^7.0.0",
|
|
47
47
|
"react-magma-icons": "^3.2.5"
|
|
48
48
|
},
|
|
49
49
|
"engines": {
|
|
@@ -245,7 +245,9 @@ export const Preview = forwardRef<
|
|
|
245
245
|
return (
|
|
246
246
|
<StatusIcons>
|
|
247
247
|
<Spinner
|
|
248
|
-
color={
|
|
248
|
+
color={
|
|
249
|
+
isInverse ? theme.colors.brand.skyBlue : theme.colors.primary
|
|
250
|
+
}
|
|
249
251
|
/>
|
|
250
252
|
</StatusIcons>
|
|
251
253
|
);
|