@react-magma/dropzone 12.0.0-next.2 → 12.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.
@@ -1 +1 @@
1
- {"version":3,"file":"fileuploader.umd.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\n\nimport { magma } from 'react-magma-dom';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint = 2,\n bytesLabel = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger300\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.removeFile}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.deleteFile}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger300 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\n\nimport { transparentize } from 'polished';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport { CloudUploadIcon } from 'react-magma-icons';\n\nimport { FilePreview, FileError } from './FilePreview';\nimport { Preview } from './Preview';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger300}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n setFiles((files: FilePreview[]) => [\n ...files,\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ]);\n },\n []\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n const dragState: DragState = errorMessage\n ? 'error'\n : isDragAccept\n ? 'dragAccept'\n : isDragReject\n ? 'dragReject'\n : isDragActive\n ? 'dragActive'\n : 'default';\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onRemoveFile &&\n typeof onRemoveFile === 'function' &&\n onRemoveFile(removedFile);\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onDeleteFile &&\n typeof onDeleteFile === 'function' &&\n onDeleteFile(removedFile);\n };\n\n const setProgress = (props: { percent: number; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${props.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n };\n\n const setFinished = (props: { file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n };\n\n const setError = (props: { errors: FileError[]; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n errors: props.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n setErrorMessage(\n formatError(\n maxFileError\n ? 'too-many-files'\n : minFileError\n ? 'too-few-files'\n : null,\n { minFiles, maxFiles }\n )\n );\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((files: FilePreview[]) => {\n return files.map((file: FilePreview) => {\n !file.errors &&\n !file.processor &&\n onSendFile &&\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n return file;\n });\n });\n }\n }, [sendFiles, files.length, onSendFile]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage theme={theme} isInverse={isInverse}>\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n {files.map((file: FilePreview) => (\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n key={file.name}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n ))}\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","_ref","file","isInverse","_file$path","path","_file$type","type","category","split","extension","pop","_ref2","_jsx","jsx","size","iconSizes","medium","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral300","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_ref9","errors","danger300","danger","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref0","_ref0$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","jsxs","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","name","marginLeft","percent","slice","map","_ref1","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_formatError$header","header","Fragment","danger200","Container","noDrag","_ref6$dragState","dragState","neutral400","_ref7$dragState","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","_ref10","_ref11","_ref12","spaceScale","spacing01","containerStyle","disabled","helperMessage","defaultId","id","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","_props$multiple","multiple","_props$noDrag","onSendFile","_props$sendFiles","sendFiles","_props$thumbnails","_React$useState","files","setFiles","_React$useState2","errorMessage","setErrorMessage","useGenerateId","onDrop","useCallback","acceptedFiles","rejectedFiles","concat","Object","assign","URL","createObjectURL","_ref13","_useDropzone","useDropzone","noClick","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useImperativeHandle","current","inputProps","removedFile","filter","setProgress","setFinished","setError","forEach","revokeObjectURL","minFileError","maxFileError","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid"],"mappings":"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"}
1
+ {"version":3,"file":"fileuploader.umd.js","sources":["../src/components/dropzone/FileIcon.tsx","../src/components/dropzone/utils.ts","../src/components/dropzone/Preview.tsx","../src/components/dropzone/Dropzone.tsx"],"sourcesContent":["import React from 'react';\n\nimport { magma } from 'react-magma-dom';\nimport {\n InsertDriveFileIcon,\n ImageIcon,\n AudiotrackIcon,\n VideocamIcon,\n FileExcelIcon,\n FilePdfIcon,\n FilePowerpointIcon,\n FileWordIcon,\n FileZipIcon,\n IconProps,\n} from 'react-magma-icons';\n\nimport { FilePreview } from './FilePreview';\n\nexport interface FileIconProps extends IconProps {\n file: FilePreview;\n isInverse?: boolean;\n}\n\nconst icons = {\n default: {\n Icon: InsertDriveFileIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n word: {\n Icon: FileWordIcon,\n style: {\n color: magma.colors.info500,\n },\n },\n excel: {\n Icon: FileExcelIcon,\n style: {\n color: magma.colors.success500,\n },\n },\n powerpoint: {\n Icon: FilePowerpointIcon,\n style: {\n color: magma.colors.warning500,\n },\n },\n pdf: {\n Icon: FilePdfIcon,\n style: {\n color: magma.colors.danger500,\n },\n },\n image: {\n Icon: ImageIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n video: {\n Icon: VideocamIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n audio: {\n Icon: AudiotrackIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n archive: {\n Icon: FileZipIcon,\n style: {\n color: magma.colors.neutral500,\n },\n },\n};\n\nconst iconMapping: {\n [key: string]: { Icon: any; style: React.CSSProperties };\n} = {\n default: icons.default,\n xlsx: icons.excel,\n xlsm: icons.excel,\n xlsb: icons.excel,\n xltx: icons.excel,\n xls: icons.excel,\n xlt: icons.excel,\n doc: icons.word,\n docx: icons.word,\n docm: icons.word,\n dotx: icons.word,\n dotm: icons.word,\n docb: icons.word,\n pptx: icons.powerpoint,\n pptm: icons.powerpoint,\n ppt: icons.powerpoint,\n pdf: icons.pdf,\n png: icons.image,\n svg: icons.image,\n image: icons.image,\n audio: icons.audio,\n video: icons.video,\n zip: icons.archive,\n};\n\nexport const FileIcon = ({ file, isInverse }: FileIconProps) => {\n const { path = '', type = '' } = file;\n const category = type.split('/')[0];\n const extension = path.split('.').pop() || 'default';\n const { Icon, style } =\n iconMapping[extension] || iconMapping[category] || iconMapping.default;\n\n return <Icon size={magma.iconSizes.medium} style={isInverse ? {} : style} />;\n};\n","export const formatFileSize = (\n bytes: number | undefined,\n decimalPoint = 2,\n bytesLabel = 'Bytes'\n) => {\n if (bytes === undefined) return;\n if (bytes == 0) return `0 ${bytesLabel}`;\n const k = 1024;\n const sizes = [bytesLabel, 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return (\n parseFloat((bytes / Math.pow(k, i)).toFixed(decimalPoint)) + ' ' + sizes[i]\n );\n};\n","import React, { forwardRef, useContext, useEffect, useState } from 'react';\n\nimport {\n ButtonColor,\n ButtonVariant,\n Card,\n Flex,\n FlexAlignItems,\n FlexBehavior,\n FlexProps,\n I18nContext,\n I18nInterface,\n IconButton,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n Transition,\n Spinner,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport {\n CheckCircleIcon,\n CloseIcon,\n DeleteIcon,\n ErrorIcon,\n} from 'react-magma-icons';\n\nimport { FileIcon } from './FileIcon';\nimport { FilePreview } from './FilePreview';\nimport { formatFileSize } from './utils';\n\nexport interface PreviewProps extends Omit<FlexProps, 'behavior'> {\n accept?: string | string[];\n file: FilePreview;\n isInverse?: boolean;\n maxSize?: number;\n minSize?: number;\n onDeleteFile?: (file: FilePreview) => void;\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * @internal\n */\n testId?: string;\n thumbnails: boolean;\n}\n\nconst Thumb = styled.div<{ file: FilePreview }>`\n background-image: ${({ file }) =>\n `url('${'preview' in file && file.preview}')`};\n background-repeat: no-repeat;\n background-size: cover;\n display: inline-block;\n vertical-align: middle;\n height: 40px;\n width: 40px;\n`;\n\nconst StatusIcons = styled.div`\n display: grid;\n grid-template-areas: 'inner-div';\n height: auto;\n place-items: center;\n width: 46px;\n & > div {\n display: inline-block;\n right: 0;\n grid-area: inner-div;\n }\n`;\n\nconst IconStyles = {\n marginRight: '12px',\n display: 'flex',\n};\n\nconst Errors = styled.div`\n border-top: 1px solid ${({ theme }) => theme.colors.neutral300};\n padding: 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledFlex = styled(Flex)`\n height: 56px;\n padding: 0 8px 0 16px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst FileName = styled(Flex)`\n overflow: hidden;\n white-space: nowrap;\n align-items: center;\n text-overflow: ellipsis;\n display: block;\n margin-right: 24px;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n`;\n\nconst StyledCard = styled(Card)<{ file: FilePreview; isInverse: boolean }>`\n background-color: none;\n border-color: ${({ file, theme, isInverse }) =>\n file.errors\n ? isInverse\n ? theme.colors.danger300\n : theme.colors.danger\n : theme.colors.neutral300};\n border-width: 1px;\n margin: 10px 0;\n`;\n\nconst ErrorHeader = styled.span`\n display: block;\n\n > div {\n display: flex;\n align-self: center;\n margin-right: 12px;\n }\n`;\n\nconst ErrorMessage = styled.span`\n display: block;\n`;\n\nconst formatError = (\n error: { header?: string; message: string; code: string },\n constraints: {\n maxSize?: number;\n minSize?: number;\n accept?: string | string[];\n },\n byteLabel: string\n) => {\n const accept =\n Array.isArray(constraints.accept) && constraints.accept.length === 1\n ? constraints.accept[0]\n : constraints.accept;\n const messageSuffix = Array.isArray(accept)\n ? `one of ${accept.join(', ')}`\n : accept;\n switch (error.code) {\n case 'file-too-large':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.maxSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-too-small':\n return {\n ...error,\n message: `${error.message} ${formatFileSize(\n constraints.minSize,\n 2,\n byteLabel\n )}.`,\n };\n case 'file-invalid-type':\n return { ...error, message: `${error.message}: ${messageSuffix}` };\n default:\n return error;\n }\n};\n\nexport const Preview = forwardRef<HTMLDivElement, PreviewProps>(\n // eslint-disable-next-line complexity\n (props, ref) => {\n const {\n accept,\n file,\n isInverse: isInverseProp,\n maxSize,\n minSize,\n onDeleteFile,\n onRemoveFile,\n testId,\n thumbnails,\n ...rest\n } = props;\n\n const theme: ThemeInterface = useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const isInverse = useIsInverse(isInverseProp);\n const [actions, setActions] = useState(<CloseIcon />);\n\n const handleRemoveFile = () => {\n onRemoveFile && typeof onRemoveFile === 'function' && onRemoveFile(file);\n };\n\n const handleDeleteFile = () => {\n onDeleteFile && typeof onDeleteFile === 'function' && onDeleteFile(file);\n };\n\n const FinishedActions = ({ status = 'ready' }: { status?: string }) => {\n const [done, setDone] = useState<boolean>(false);\n\n useEffect(() => {\n let mounted = true;\n setTimeout(() => {\n if (mounted) {\n setDone(true);\n }\n }, 1000);\n return () => {\n mounted = false;\n };\n }, [status]);\n\n if (status === 'error' || status === 'ready') {\n return (\n <StatusIcons>\n <IconButton\n onClick={handleRemoveFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.removeFile}\n icon={<CloseIcon />}\n />\n </StatusIcons>\n );\n }\n\n if (status === 'pending') {\n return (\n <StatusIcons>\n <Spinner\n color={isInverse ? theme.colors.neutral100 : theme.colors.primary}\n />\n </StatusIcons>\n );\n }\n\n return (\n <StatusIcons>\n <Transition isOpen={!done} unmountOnExit fade>\n <CheckCircleIcon\n color={isInverse ? theme.colors.success200 : theme.colors.success}\n style={{ marginTop: '4px' }}\n />\n </Transition>\n <Transition isOpen={done} unmountOnExit fade>\n <IconButton\n onClick={handleDeleteFile}\n variant={ButtonVariant.link}\n color={ButtonColor.secondary}\n aria-label={i18n.dropzone.deleteFile}\n icon={<DeleteIcon />}\n />\n </Transition>\n </StatusIcons>\n );\n };\n\n useEffect(() => {\n setActions(<FinishedActions status={file?.processor?.status} />);\n }, [file?.processor?.status]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <StyledCard\n isInverse={isInverse}\n theme={theme}\n file={file}\n data-testid={props.testId}\n ref={ref}\n role={file.errors ? 'alert' : ''}\n >\n <StyledFlex\n theme={theme}\n behavior={FlexBehavior.container}\n alignItems={FlexAlignItems.center}\n {...rest}\n >\n <Flex\n behavior={FlexBehavior.item}\n alignItems={FlexAlignItems.center}\n style={IconStyles}\n >\n {file.errors ? (\n <ErrorIcon\n color={\n isInverse ? theme.colors.danger300 : theme.colors.danger\n }\n size={24}\n />\n ) : file.preview &&\n thumbnails &&\n file.type &&\n file.type.startsWith('image') ? (\n <Thumb role=\"img\" file={file} />\n ) : (\n <FileIcon isInverse={isInverse} file={file} />\n )}\n </Flex>\n <FileName xs behavior={FlexBehavior.item} theme={theme}>\n {file.name}\n </FileName>\n {file.processor && file.processor.status === 'pending' && (\n <Flex\n role=\"progressbar\"\n style={{ marginLeft: 'auto' }}\n behavior={FlexBehavior.item}\n >\n {file.processor.percent}\n </Flex>\n )}\n <Flex behavior={FlexBehavior.item}>{actions}</Flex>\n </StyledFlex>\n {file.errors && (\n <Errors theme={theme}>\n {file.errors.slice(0, 1).map(({ code, ...rest }) => {\n const { header = '', message } = formatError(\n { code, ...rest, ...i18n.dropzone.errors[code] },\n { accept, minSize, maxSize },\n i18n.dropzone.bytes\n );\n return (\n <React.Fragment key={code}>\n <ErrorHeader\n style={{\n color: isInverse\n ? theme.colors.danger200\n : theme.colors.danger,\n }}\n >\n {header}\n </ErrorHeader>\n <ErrorMessage>{message}</ErrorMessage>\n </React.Fragment>\n );\n })}\n </Errors>\n )}\n </StyledCard>\n </InverseContext.Provider>\n );\n }\n);\n","/* eslint-disable no-empty-pattern */\n/**\n * HELPFUL NOTE!\n * SINCE THIS PACKAGE USES `FILE` WE MUST USE `Object.assign` IN LIEU OF SPREADING\n * `{...file}` WILL NOT COPY ALL OF THE FILE PROPERTIES\n */\n\nimport React, { useImperativeHandle } from 'react';\n\nimport { transparentize } from 'polished';\nimport {\n useDropzone,\n DropzoneOptions,\n DropzoneRootProps,\n FileRejection,\n} from 'react-dropzone';\nimport {\n Button,\n ButtonColor,\n ButtonVariant,\n Flex,\n FlexBehavior,\n FlexProps,\n FormFieldContainer,\n FormFieldContainerBaseProps,\n I18nContext,\n I18nInterface,\n InverseContext,\n ThemeContext,\n ThemeInterface,\n useGenerateId,\n useIsInverse,\n styled,\n} from 'react-magma-dom';\nimport { CloudUploadIcon } from 'react-magma-icons';\n\nimport { FilePreview, FileError } from './FilePreview';\nimport { Preview } from './Preview';\n\nexport interface OnSendFileProps {\n file: FilePreview;\n onError?: ({}: { errors: FileError[]; file: FilePreview }) => void;\n onFinish?: ({}: { file: FilePreview }) => void;\n onProgress?: ({}: { percent: number; file: FilePreview }) => void;\n}\n\ntype DragState =\n | 'error'\n | 'dragAccept'\n | 'dragReject'\n | 'dragActive'\n | 'default';\n\n// NOTE: These props are manually copied to dropzone.mdx\nexport interface DropzoneProps\n extends Omit<FormFieldContainerBaseProps, 'fieldId' | 'errorMessage'> {\n /**\n * Set accepted file types. See https://github.com/okonet/attr-accept for more information. Keep in mind that mime type determination is not reliable across platforms. CSV files, for example, are reported as text/plain under macOS but as application/vnd.ms-excel under Windows. In some cases there might not be a mime type set at all. See: https://github.com/react-dropzone/react-dropzone/issues/276\n */\n accept?: string | string[];\n /**\n * Enable/Disable the input\n */\n disabled?: boolean;\n /**\n * Additional props to pass to the dropzone, see https://react-dropzone.js.org/#src\n */\n dropzoneOptions?: Partial<Omit<DropzoneOptions, 'onDrop'>>;\n /**\n * Content of the helper message.\n */\n helperMessage?: string;\n /**\n * @internal\n */\n id?: string;\n /**\n * Maximum accepted number of files The default value is 0 which means there is no limitation to how many files are accepted.\n * @default 0\n */\n maxFiles?: number;\n /**\n * Minimum accepted number of files.\n */\n minFiles?: number;\n /**\n * Maximum file size (in bytes)\n * @default Infinity\n */\n maxSize?: number;\n /**\n * Minimum file size (in bytes)\n * @default 0\n */\n minSize?: number;\n /**\n * Allow drag 'n' drop (or selection from the file dialog) of multiple files.\n * @default true\n */\n multiple?: boolean;\n /**\n * If true, disables drag 'n' drop\n * @default false\n */\n noDrag?: boolean;\n /**\n * Callback for when a file is deleted\n */\n onDeleteFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is deleted\n */\n onRemoveFile?: (file: FilePreview) => void;\n /**\n * Callback for when a file is added to the preview list via dropping or selecting. Will be ran on new files when `sendFiles` is true.\n */\n onSendFile?: (props: OnSendFileProps) => void;\n /**\n * Run `onSendFile` on any new files. Delay processing by setting to `false` until processing is desired.\n * @default false\n */\n sendFiles?: boolean;\n /**\n * @internal\n */\n testId?: string;\n /**\n * Show thumbnails for images in lieu of the file icon.\n * @default true\n */\n thumbnails?: boolean;\n}\n\nconst Container = styled(Flex)<\n DropzoneRootProps &\n FlexProps & {\n dragState?: DragState;\n noDrag?: boolean;\n isInverse?: boolean;\n }\n>`\n flex-direction: column;\n align-items: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n justify-content: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n text-align: ${({ noDrag }) => (noDrag ? 'left' : 'center')};\n padding: ${({ noDrag }) => (noDrag ? '0px' : '24px')};\n border-radius: ${({ noDrag }) => (noDrag ? '0px' : '4px')};\n border: ${({ dragState = 'default', noDrag, theme, isInverse }) =>\n noDrag\n ? `0px`\n : dragState === 'dragReject' || dragState === 'error'\n ? isInverse\n ? `1px dashed ${theme.colors.danger300}`\n : `1px dashed ${theme.colors.danger}`\n : dragState === 'dragActive'\n ? `1px dashed ${theme.colors.primary}`\n : dragState === 'dragAccept'\n ? `1px dashed ${theme.colors.success}`\n : `1px dashed ${theme.colors.neutral400}`};\n\n border-style: ${({ dragState = 'default' }) =>\n dragState === 'error' ? 'solid' : 'dashed'};\n background-color: ${({ theme, noDrag, isInverse }) =>\n noDrag\n ? 'transparent'\n : isInverse\n ? transparentize(0.75, theme.colors.neutral900)\n : theme.colors.neutral200};\n outline: none;\n transition: ${({ noDrag }) => `border ${noDrag ? 0 : '.24s'} ease-in-out`};\n`;\n\nconst HelperMessage = styled.span<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n display: block;\n font-size: 14px;\n margin: -8px 0 16px 0;\n`;\n\nconst Wrapper = styled.div<{ isInverse?: boolean }>`\n color: ${({ theme, isInverse }) =>\n isInverse ? theme.colors.neutral100 : theme.colors.neutral700};\n margin: 0 0 24px 0;\n font-size: ${({ theme }) => theme.typeScale.size02.fontSize};\n line-height: ${({ theme }) => theme.typeScale.size02.lineHeight};\n font-weight: 500;\n padding: ${({ theme }) => theme.spaceScale.spacing01};\n`;\nexport const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(\n (props, ref) => {\n const {\n accept,\n containerStyle,\n disabled,\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n dropzoneOptions = {\n multiple: true,\n },\n helperMessage,\n id: defaultId,\n inputSize,\n isInverse: isInverseProp,\n isLabelVisuallyHidden,\n labelStyle,\n labelText,\n maxFiles,\n minFiles,\n maxSize,\n minSize,\n multiple = true,\n noDrag = false,\n onSendFile,\n onDeleteFile,\n onRemoveFile,\n sendFiles = false,\n testId,\n thumbnails = true,\n ...rest\n } = props;\n\n const [files, setFiles] = React.useState<FilePreview[]>([]);\n const [errorMessage, setErrorMessage] = React.useState<string | null>(null);\n\n const isInverse = useIsInverse(isInverseProp);\n const theme: ThemeInterface = React.useContext(ThemeContext);\n const i18n: I18nInterface = React.useContext(I18nContext);\n const id = useGenerateId(defaultId);\n\n const onDrop = React.useCallback(\n (acceptedFiles: FilePreview[], rejectedFiles: FileRejection[]) => {\n setFiles((files: FilePreview[]) => [\n ...files,\n ...acceptedFiles.map((file: FilePreview) =>\n Object.assign(file, {\n preview: URL.createObjectURL(file),\n })\n ),\n ...rejectedFiles.map(\n ({ file, errors }: { file: FilePreview; errors: FileError[] }) =>\n Object.assign(file, {\n errors,\n })\n ),\n ]);\n },\n []\n );\n\n const {\n getInputProps,\n getRootProps,\n isDragAccept,\n isDragActive,\n isDragReject,\n open,\n inputRef,\n } = useDropzone({\n noClick: true,\n disabled,\n multiple,\n maxSize,\n minSize,\n accept,\n onDrop,\n noDrag,\n ...dropzoneOptions,\n });\n\n useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(\n ref,\n () => inputRef.current\n );\n\n const inputProps = getInputProps({ id });\n\n const dragState: DragState = errorMessage\n ? 'error'\n : isDragAccept\n ? 'dragAccept'\n : isDragReject\n ? 'dragReject'\n : isDragActive\n ? 'dragActive'\n : 'default';\n\n const handleRemoveFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onRemoveFile &&\n typeof onRemoveFile === 'function' &&\n onRemoveFile(removedFile);\n };\n\n const handleDeleteFile = (removedFile: FilePreview) => {\n setFiles(files => files.filter(file => file !== removedFile));\n onDeleteFile &&\n typeof onDeleteFile === 'function' &&\n onDeleteFile(removedFile);\n };\n\n const setProgress = (props: { percent: number; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: `${props.percent}%`,\n status: 'pending',\n },\n })\n : file\n )\n );\n };\n\n const setFinished = (props: { file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n processor: {\n ...file.processor,\n percent: '',\n status: 'finished',\n },\n })\n : file\n )\n );\n };\n\n const setError = (props: { errors: FileError[]; file: FilePreview }) => {\n setFiles(files =>\n files.map(file =>\n file === props.file\n ? Object.assign(file, {\n errors: props.errors,\n processor: { ...file.processor, status: 'error' },\n })\n : file\n )\n );\n };\n\n const formatError = (\n code: string | null,\n constraints: { maxFiles?: number; minFiles?: number }\n ) => {\n if (code === null) return null;\n const error = i18n.dropzone.errors[code];\n switch (code) {\n case 'too-many-files':\n return `${error.message} ${constraints.maxFiles} ${i18n.dropzone.files}.`;\n case 'too-few-files':\n return `${error.message} ${constraints.minFiles} ${i18n.dropzone.files}.`;\n default:\n return error.message;\n }\n };\n\n React.useEffect(\n () => () => {\n files.forEach(\n file => file.preview && URL.revokeObjectURL(file.preview)\n );\n },\n [files]\n );\n\n React.useEffect(() => {\n const minFileError = minFiles && files.length < minFiles;\n const maxFileError = maxFiles && files.length > maxFiles;\n\n setErrorMessage(\n formatError(\n maxFileError\n ? 'too-many-files'\n : minFileError\n ? 'too-few-files'\n : null,\n { minFiles, maxFiles }\n )\n );\n\n if (sendFiles && files.length > 0 && !maxFileError && !minFileError) {\n setFiles((files: FilePreview[]) => {\n return files.map((file: FilePreview) => {\n !file.errors &&\n !file.processor &&\n onSendFile &&\n onSendFile({\n file,\n onError: setError,\n onFinish: setFinished,\n onProgress: setProgress,\n });\n return file;\n });\n });\n }\n }, [sendFiles, files.length, onSendFile]);\n\n return (\n <InverseContext.Provider value={{ isInverse }}>\n <FormFieldContainer\n actionable={false}\n containerStyle={containerStyle}\n errorMessage={errorMessage}\n fieldId={id}\n inputSize={inputSize}\n isInverse={isInverse}\n isLabelVisuallyHidden={isLabelVisuallyHidden}\n labelStyle={labelStyle}\n labelText={labelText}\n messageStyle={{ minHeight: 0 }}\n data-testid={testId}\n >\n <HelperMessage theme={theme} isInverse={isInverse}>\n {helperMessage}\n </HelperMessage>\n <Container\n behavior={FlexBehavior.container}\n dragState={dragState}\n isInverse={isInverse}\n noDrag={noDrag}\n theme={theme}\n {...getRootProps()}\n {...rest}\n testId={testId}\n tabIndex={-1}\n >\n <input\n ref={inputRef}\n type={inputProps.type}\n accept={inputProps.accept}\n autoComplete={inputProps.autoComplete}\n id={inputProps.id}\n multiple={inputProps.multiple}\n onChange={inputProps.onChange}\n onClick={inputProps.onClick}\n style={inputProps.style}\n tabIndex={inputProps.tabIndex}\n data-testid=\"file-input\"\n />\n {noDrag ? (\n <Flex xs behavior={FlexBehavior.item}>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n ) : (\n <Flex behavior={FlexBehavior.item}>\n <CloudUploadIcon\n aria-hidden=\"true\"\n color={\n isInverse\n ? theme.colors.neutral100\n : theme.colors.neutral500\n }\n size={48}\n />\n <Wrapper isInverse={isInverse} theme={theme}>\n {i18n.dropzone.dragMessage}\n </Wrapper>\n <Button\n color={ButtonColor.primary}\n disabled={disabled}\n isInverse={isInverse}\n onClick={open}\n style={{ margin: 0 }}\n variant={ButtonVariant.solid}\n >\n {i18n.dropzone.browseFiles}\n </Button>\n </Flex>\n )}\n </Container>\n </FormFieldContainer>\n {files.map((file: FilePreview) => (\n <Preview\n accept={accept}\n file={file}\n isInverse={isInverse}\n key={file.name}\n maxSize={maxSize}\n minSize={minSize}\n onDeleteFile={handleDeleteFile}\n onRemoveFile={handleRemoveFile}\n thumbnails={thumbnails}\n />\n ))}\n </InverseContext.Provider>\n );\n }\n);\n"],"names":["icons","default","Icon","InsertDriveFileIcon","style","color","magma","colors","neutral500","word","FileWordIcon","info500","excel","FileExcelIcon","success500","powerpoint","FilePowerpointIcon","warning500","pdf","FilePdfIcon","danger500","image","ImageIcon","video","VideocamIcon","audio","AudiotrackIcon","archive","FileZipIcon","iconMapping","xlsx","xlsm","xlsb","xltx","xls","xlt","doc","docx","docm","dotx","dotm","docb","pptx","pptm","ppt","png","svg","zip","FileIcon","_ref","file","isInverse","_file$path","path","_file$type","type","category","split","extension","pop","_ref2","_jsx","jsx","size","iconSizes","medium","_templateObject","_templateObject2","_templateObject3","_templateObject4","_templateObject5","_templateObject6","_templateObject7","_templateObject8","formatFileSize","bytes","decimalPoint","bytesLabel","undefined","sizes","i","Math","floor","log","parseFloat","pow","toFixed","_excluded","_excluded2","Thumb","styled","div","_taggedTemplateLiteralLoose","preview","StatusIcons","IconStyles","marginRight","display","Errors","theme","neutral300","_ref3","typeScale","size02","fontSize","_ref4","lineHeight","StyledFlex","Flex","_ref5","_ref6","FileName","_ref7","_ref8","StyledCard","Card","_ref9","errors","danger300","danger","ErrorHeader","span","ErrorMessage","Preview","forwardRef","props","ref","_file$processor2","accept","isInverseProp","maxSize","minSize","onDeleteFile","onRemoveFile","thumbnails","rest","_objectWithoutPropertiesLoose","useContext","ThemeContext","i18n","React","I18nContext","useIsInverse","_useState","useState","CloseIcon","actions","setActions","handleRemoveFile","handleDeleteFile","FinishedActions","_ref0","_ref0$status","status","_useState2","done","setDone","useEffect","mounted","setTimeout","children","IconButton","onClick","variant","ButtonVariant","link","ButtonColor","secondary","dropzone","removeFile","icon","Spinner","neutral100","primary","_jsxs","Transition","isOpen","unmountOnExit","fade","CheckCircleIcon","success200","success","marginTop","deleteFile","DeleteIcon","_file$processor","processor","InverseContext","Provider","value","jsxs","testId","role","_extends","behavior","FlexBehavior","container","alignItems","FlexAlignItems","center","item","ErrorIcon","startsWith","xs","name","marginLeft","percent","slice","map","_ref1","code","_formatError","error","constraints","byteLabel","Array","isArray","length","messageSuffix","join","message","formatError","_formatError$header","header","Fragment","danger200","Container","noDrag","_ref6$dragState","dragState","neutral400","_ref7$dragState","transparentize","neutral900","neutral200","HelperMessage","neutral700","Wrapper","_ref10","_ref11","_ref12","spaceScale","spacing01","containerStyle","disabled","_props$dropzoneOption","dropzoneOptions","multiple","helperMessage","defaultId","id","inputSize","isLabelVisuallyHidden","labelStyle","labelText","maxFiles","minFiles","_props$multiple","_props$noDrag","onSendFile","_props$sendFiles","sendFiles","_props$thumbnails","_React$useState","files","setFiles","_React$useState2","errorMessage","setErrorMessage","useGenerateId","onDrop","useCallback","acceptedFiles","rejectedFiles","concat","Object","assign","URL","createObjectURL","_ref13","_useDropzone","useDropzone","noClick","getInputProps","getRootProps","isDragAccept","isDragActive","isDragReject","open","inputRef","useImperativeHandle","current","inputProps","removedFile","filter","setProgress","setFinished","setError","forEach","revokeObjectURL","minFileError","maxFileError","onError","onFinish","onProgress","FormFieldContainer","actionable","fieldId","messageStyle","minHeight","tabIndex","autoComplete","onChange","Button","margin","browseFiles","CloudUploadIcon","dragMessage","solid"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@react-magma/dropzone",
3
- "version": "12.0.0-next.2",
3
+ "version": "12.0.0",
4
4
  "license": "MIT",
5
5
  "main": "dist/fileuploader.js",
6
6
  "umd:main": "dist/fileuploader.umd.js",
@@ -27,7 +27,7 @@
27
27
  "@emotion/styled": "^11.13.0",
28
28
  "react": "^17.0.2",
29
29
  "react-dom": "^17.0.2",
30
- "react-magma-dom": "^4.10.0-next.3",
30
+ "react-magma-dom": "^4.10.0",
31
31
  "react-magma-icons": "^3.2.0"
32
32
  },
33
33
  "peerDependencies": {
@@ -98,6 +98,12 @@ export const Default = (args: DropzoneProps) => {
98
98
  sendFiles
99
99
  labelText="Upload files"
100
100
  helperMessage="Only PNG, JPG, and SVG files with a max size of 1MB"
101
+ dropzoneOptions={{
102
+ onDropAccepted: files => {
103
+ // eslint-disable-next-line no-console
104
+ console.log('Accepted files:', files);
105
+ },
106
+ }}
101
107
  />
102
108
  </div>
103
109
  );
@@ -587,6 +587,24 @@ describe('File Uploader', () => {
587
587
  await flushPromises(rerender, ui);
588
588
  expect(onRemoveFileSpy).toHaveBeenCalledTimes(1);
589
589
  });
590
+
591
+ it('dropzoneOptions should be passed to Dropzone', async () => {
592
+ const data = createDtWithFiles(images);
593
+ const testId = 'testId';
594
+
595
+ const ui = <Dropzone testId={testId} dropzoneOptions={{ maxFiles: 1 }} />;
596
+
597
+ const { getByTestId, getAllByText, rerender } = render(ui);
598
+
599
+ const dropzone = getByTestId(testId);
600
+ fireDrop(dropzone, data);
601
+
602
+ await flushPromises(rerender, ui);
603
+
604
+ expect(
605
+ getAllByText(/You must upload a maximum of/i)[0]
606
+ ).toBeInTheDocument();
607
+ });
590
608
  });
591
609
 
592
610
  async function flushPromises(rerender, ui) {
@@ -264,6 +264,7 @@ export const Dropzone = React.forwardRef<HTMLInputElement, DropzoneProps>(
264
264
  accept,
265
265
  onDrop,
266
266
  noDrag,
267
+ ...dropzoneOptions,
267
268
  });
268
269
 
269
270
  useImperativeHandle<HTMLInputElement | null, HTMLInputElement | null>(