@mantine-vue/dropzone 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.cjs +941 -0
- package/cjs/index.cjs.map +1 -0
- package/esm/index.mjs +906 -0
- package/esm/index.mjs.map +1 -0
- package/lib/Dropzone.context.d.ts +6 -0
- package/lib/Dropzone.d.ts +1125 -0
- package/lib/DropzoneFullScreen.d.ts +101 -0
- package/lib/DropzoneStatus.d.ts +16 -0
- package/lib/get-files-from-event.d.ts +2 -0
- package/lib/index.d.mts +16 -0
- package/lib/index.d.ts +16 -0
- package/lib/mime-types.d.ts +29 -0
- package/lib/types.d.ts +14 -0
- package/lib/use-dropzone.d.ts +72 -0
- package/lib/utils.d.ts +46 -0
- package/package.json +44 -0
- package/styles.css +83 -0
- package/styles.layer.css +85 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.cjs","names":[],"sources":["../src/Dropzone.context.ts","../src/DropzoneStatus.ts","../src/get-files-from-event.ts","../src/utils.ts","../src/use-dropzone.ts","../src/Dropzone.module.css","../src/Dropzone.ts","../src/DropzoneFullScreen.ts","../src/mime-types.ts","../src/index.ts"],"sourcesContent":["import { createSafeContext } from '@mantine-vue/core'\n\nexport interface DropzoneContextValue {\n idle: boolean\n accept: boolean\n reject: boolean\n}\n\nexport const [provideDropzoneContext, useDropzoneContext] = createSafeContext<DropzoneContextValue>(\n 'Dropzone component was not found in tree',\n)\n","import { cloneVNode, defineComponent, h, isVNode, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from './Dropzone.context'\n\nfunction upperFirst(value: string) {\n return value.charAt(0).toUpperCase() + value.slice(1)\n}\n\nfunction createDropzoneStatus(status: keyof DropzoneContextValue) {\n return defineComponent({\n name: `Dropzone${upperFirst(status)}`,\n setup(_, { slots, attrs }) {\n const ctx = useDropzoneContext()\n\n return () => {\n if (!ctx[status]) return null\n\n const children = slots.default?.()\n const child: VNodeChild = children && children.length === 1 ? children[0] : children\n\n if (isVNode(child) && !Array.isArray(child)) {\n return cloneVNode(child, attrs)\n }\n\n return h('span', attrs, children as any)\n }\n },\n })\n}\n\nexport const DropzoneAccept = createDropzoneStatus('accept')\nexport const DropzoneReject = createDropzoneStatus('reject')\nexport const DropzoneIdle = createDropzoneStatus('idle')\n\nexport interface DropzoneStatusProps {\n children?: VNodeChild\n}\n\nexport type DropzoneAcceptProps = DropzoneStatusProps\nexport type DropzoneRejectProps = DropzoneStatusProps\nexport type DropzoneIdleProps = DropzoneStatusProps\n","import type { DropEvent, FileWithPath } from './types'\n\nfunction toFileWithPath(file: File, path?: string): FileWithPath {\n const fileWithPath = file as FileWithPath\n const relativePath = path || (file as any).webkitRelativePath || file.name\n\n if (fileWithPath.path === undefined) {\n try {\n Object.defineProperty(fileWithPath, 'path', {\n value: relativePath,\n writable: false,\n configurable: true,\n enumerable: true,\n })\n } catch {\n // Some environments (e.g. jsdom) may disallow redefining File properties – safe to ignore,\n // `path` is a convenience addition, not required for accept/size validation.\n }\n }\n\n return fileWithPath\n}\n\nasync function fromDataTransferItem(item: DataTransferItem): Promise<FileWithPath[]> {\n // `webkitGetAsEntry` enables (shallow) directory traversal when a folder is dropped; fall back\n // to `getAsFile` for browsers/items that don't support it.\n const entry = (item as any).webkitGetAsEntry?.()\n\n if (entry?.isDirectory) {\n return fromDirectoryEntry(entry)\n }\n\n const file = item.getAsFile()\n return file ? [toFileWithPath(file)] : []\n}\n\nfunction fromDirectoryEntry(dirEntry: any, path = ''): Promise<FileWithPath[]> {\n const reader = dirEntry.createReader()\n\n return new Promise((resolve) => {\n const entries: any[] = []\n\n const readEntries = () => {\n reader.readEntries(\n async (batch: any[]) => {\n if (batch.length === 0) {\n const files = await Promise.all(\n entries.map((entry) =>\n entry.isDirectory\n ? fromDirectoryEntry(entry, `${path}${dirEntry.name}/`)\n : new Promise<FileWithPath[]>((res) => {\n entry.file((file: File) =>\n res([toFileWithPath(file, `${path}${dirEntry.name}/${file.name}`)]),\n )\n }),\n ),\n )\n resolve(files.flat())\n return\n }\n\n entries.push(...batch)\n readEntries()\n },\n () => resolve([]),\n )\n }\n\n readEntries()\n })\n}\n\nasync function fromDataTransfer(dataTransfer: DataTransfer): Promise<FileWithPath[]> {\n if (dataTransfer.items && dataTransfer.items.length > 0) {\n const items = Array.from(dataTransfer.items).filter((item) => item.kind === 'file')\n const files = await Promise.all(items.map(fromDataTransferItem))\n return files.flat()\n }\n\n return Array.from(dataTransfer.files || []).map((file) => toFileWithPath(file))\n}\n\nexport async function getFilesFromEvent(event: DropEvent): Promise<FileWithPath[]> {\n if (Array.isArray(event)) {\n // FileSystemFileHandle[] returned by `window.showOpenFilePicker`.\n const files = await Promise.all(event.map((handle) => (handle as any).getFile()))\n return files.map((file) => toFileWithPath(file))\n }\n\n const dragEvent = event as DragEvent\n if (dragEvent.dataTransfer) {\n return fromDataTransfer(dragEvent.dataTransfer)\n }\n\n const target = event.target as HTMLInputElement | null\n if (target?.files) {\n return Array.from(target.files).map((file) => toFileWithPath(file))\n }\n\n return []\n}\n","import type { Accept, FileError, FileWithPath } from './types'\n\nexport const FILE_INVALID_TYPE = 'file-invalid-type'\nexport const FILE_TOO_LARGE = 'file-too-large'\nexport const FILE_TOO_SMALL = 'file-too-small'\nexport const TOO_MANY_FILES = 'too-many-files'\n\nexport const ErrorCode = {\n FileInvalidType: FILE_INVALID_TYPE,\n FileTooLarge: FILE_TOO_LARGE,\n FileTooSmall: FILE_TOO_SMALL,\n TooManyFiles: TOO_MANY_FILES,\n} as const\n\nexport const getInvalidTypeRejectionErr = (accept = ''): FileError => {\n const acceptArr = accept.split(',')\n const msg = acceptArr.length > 1 ? `one of ${acceptArr.join(', ')}` : acceptArr[0]\n return { code: FILE_INVALID_TYPE, message: `File type must be ${msg}` }\n}\n\nexport const getTooLargeRejectionErr = (maxSize: number): FileError => ({\n code: FILE_TOO_LARGE,\n message: `File is larger than ${maxSize} ${maxSize === 1 ? 'byte' : 'bytes'}`,\n})\n\nexport const getTooSmallRejectionErr = (minSize: number): FileError => ({\n code: FILE_TOO_SMALL,\n message: `File is smaller than ${minSize} ${minSize === 1 ? 'byte' : 'bytes'}`,\n})\n\nexport const TOO_MANY_FILES_REJECTION: FileError = {\n code: TOO_MANY_FILES,\n message: 'Too many files',\n}\n\nfunction isDefined(value: unknown): boolean {\n return value !== undefined && value !== null\n}\n\nfunction attrAccept(file: { name?: string; type?: string }, acceptedFiles?: string): boolean {\n if (!acceptedFiles) {\n return true\n }\n\n const fileName = file.name || ''\n const mimeType = (file.type || '').toLowerCase()\n const baseMimeType = mimeType.replace(/\\/.*$/, '')\n\n return acceptedFiles\n .split(',')\n .map((type) => type.trim().toLowerCase())\n .some((type) => {\n if (type.startsWith('.')) {\n return fileName.toLowerCase().endsWith(type)\n }\n if (type.endsWith('/*')) {\n return baseMimeType === type.replace(/\\/.*$/, '')\n }\n return mimeType === type\n })\n}\n\n/**\n * Check if the given file is a DataTransferItem with an empty type. During drag events some\n * browsers report an empty MIME type on DataTransferItem for certain file extensions even though\n * the type is correctly set once the file is actually dropped, so we accept those provisionally.\n */\nexport function isDataTransferItemWithEmptyType(file: any): boolean {\n return file.type === '' && typeof file.getAsFile === 'function'\n}\n\nexport function fileAccepted(\n file: FileWithPath | DataTransferItem,\n accept?: string,\n): [boolean, FileError | null] {\n const isAcceptable =\n (file as any).type === 'application/x-moz-file' ||\n attrAccept(file as any, accept) ||\n isDataTransferItemWithEmptyType(file)\n\n return [isAcceptable, isAcceptable ? null : getInvalidTypeRejectionErr(accept)]\n}\n\nexport function fileMatchSize(\n file: FileWithPath,\n minSize?: number,\n maxSize?: number,\n): [boolean, FileError | null] {\n if (isDefined(file.size)) {\n if (isDefined(minSize) && isDefined(maxSize)) {\n if (file.size > maxSize!) return [false, getTooLargeRejectionErr(maxSize!)]\n if (file.size < minSize!) return [false, getTooSmallRejectionErr(minSize!)]\n } else if (isDefined(minSize) && file.size < minSize!) {\n return [false, getTooSmallRejectionErr(minSize!)]\n } else if (isDefined(maxSize) && file.size > maxSize!) {\n return [false, getTooLargeRejectionErr(maxSize!)]\n }\n }\n return [true, null]\n}\n\nexport interface AllFilesAcceptedOptions {\n files: FileWithPath[]\n accept?: string\n minSize?: number\n maxSize?: number\n multiple?: boolean\n maxFiles?: number\n validator?: (file: FileWithPath) => FileError | FileError[] | null\n}\n\nexport function allFilesAccepted({\n files,\n accept,\n minSize,\n maxSize,\n multiple,\n maxFiles,\n validator,\n}: AllFilesAcceptedOptions): boolean {\n if (\n (!multiple && files.length > 1) ||\n (multiple && (maxFiles ?? 0) >= 1 && files.length > maxFiles!)\n ) {\n return false\n }\n\n return files.every((file) => {\n const [accepted] = fileAccepted(file, accept)\n const [sizeMatch] = fileMatchSize(file, minSize, maxSize)\n const customErrors = validator ? validator(file) : null\n return accepted && sizeMatch && !customErrors\n })\n}\n\nexport function isEvtWithFiles(event: DragEvent | Event): boolean {\n const dataTransfer = (event as DragEvent).dataTransfer\n if (!dataTransfer) {\n const target = event.target as HTMLInputElement | null\n return !!target && !!target.files\n }\n return Array.prototype.some.call(\n dataTransfer.types || [],\n (type: string) => type === 'Files' || type === 'application/x-moz-file',\n )\n}\n\nexport function canUseFileSystemAccessAPI(): boolean {\n return typeof window !== 'undefined' && 'showOpenFilePicker' in window\n}\n\n/** Convert the `accept` prop into the `{types}` option for `window.showOpenFilePicker`. */\nexport function pickerOptionsFromAccept(\n accept?: Accept,\n): { description: string; accept: Accept }[] | undefined {\n if (!isDefined(accept)) {\n return undefined\n }\n\n const acceptForPicker = Object.entries(accept!)\n .filter(([mimeType, ext]) => isMIMEType(mimeType) && Array.isArray(ext) && ext.every(isExt))\n .reduce<Accept>((agg, [mimeType, ext]) => ({ ...agg, [mimeType]: ext }), {})\n\n return [{ description: 'Files', accept: acceptForPicker }]\n}\n\n/** Convert the `accept` prop into a comma-separated string suitable for `<input accept>`. */\nexport function acceptPropAsAcceptAttr(accept?: Accept): string | undefined {\n if (!isDefined(accept)) {\n return undefined\n }\n\n return Object.entries(accept!)\n .reduce<string[]>((acc, [mimeType, ext]) => [...acc, mimeType, ...ext], [])\n .filter((v) => isMIMEType(v) || isExt(v))\n .join(',')\n}\n\nexport function isAbort(v: unknown): boolean {\n return (\n v instanceof DOMException &&\n (v.name === 'AbortError' || (v as any).code === (v as any).ABORT_ERR)\n )\n}\n\nexport function isSecurityError(v: unknown): boolean {\n return (\n v instanceof DOMException &&\n (v.name === 'SecurityError' || (v as any).code === (v as any).SECURITY_ERR)\n )\n}\n\nexport function isMIMEType(v: string): boolean {\n return (\n v === 'audio/*' ||\n v === 'video/*' ||\n v === 'image/*' ||\n v === 'text/*' ||\n v === 'application/*' ||\n /\\w+\\/[-+.\\w]+/g.test(v)\n )\n}\n\nexport function isExt(v: string): boolean {\n return /^.*\\.[\\w]+$/.test(v)\n}\n","/* oxlint-disable no-console */\nimport { computed, onMounted, onUnmounted, reactive, ref } from 'vue'\nimport { getFilesFromEvent as defaultGetFilesFromEvent } from './get-files-from-event'\nimport type { Accept, DropEvent, FileError, FileRejection, FileWithPath } from './types'\nimport {\n acceptPropAsAcceptAttr,\n allFilesAccepted,\n canUseFileSystemAccessAPI,\n fileAccepted,\n fileMatchSize,\n isAbort,\n isEvtWithFiles,\n isSecurityError,\n pickerOptionsFromAccept,\n TOO_MANY_FILES_REJECTION,\n} from './utils'\n\nexport interface UseDropzoneOptions {\n accept?: () => Accept | undefined\n disabled?: () => boolean | undefined\n multiple?: () => boolean | undefined\n maxSize?: () => number | undefined\n minSize?: () => number | undefined\n maxFiles?: () => number | undefined\n autoFocus?: () => boolean | undefined\n noClick?: () => boolean | undefined\n noDrag?: () => boolean | undefined\n noDragEventsBubbling?: () => boolean | undefined\n noKeyboard?: () => boolean | undefined\n preventDropOnDocument?: () => boolean | undefined\n useFsAccessApi?: () => boolean | undefined\n validator?: () => ((file: FileWithPath) => FileError | FileError[] | null) | undefined\n getFilesFromEvent?: () => ((event: DropEvent) => Promise<FileWithPath[]>) | undefined\n onDrop?: (files: FileWithPath[], fileRejections: FileRejection[], event: DropEvent | null) => void\n onDropAccepted?: (files: FileWithPath[], event: DropEvent | null) => void\n onDropRejected?: (fileRejections: FileRejection[], event: DropEvent | null) => void\n onDragEnter?: (event: DragEvent) => void\n onDragLeave?: (event: DragEvent) => void\n onDragOver?: (event: DragEvent) => void\n onFileDialogCancel?: () => void\n onFileDialogOpen?: () => void\n onError?: (error: unknown) => void\n}\n\nexport interface DropzoneRootProps {\n onKeydown: ((event: KeyboardEvent) => void) | null\n onFocus: (() => void) | null\n onBlur: (() => void) | null\n onClick: (() => void) | null\n onDragenter: ((event: DragEvent) => void) | null\n onDragover: ((event: DragEvent) => void) | null\n onDragleave: ((event: DragEvent) => void) | null\n onDrop: ((event: DragEvent) => void) | null\n role: string\n ref: (el: any) => void\n tabindex?: number\n [key: string]: any\n}\n\nexport interface DropzoneInputProps {\n type: 'file'\n accept?: string\n multiple: boolean\n style: Record<string, string | number>\n tabindex: number\n ref: (el: any) => void\n onChange: ((event: Event) => void) | null\n onClick: ((event: Event) => void) | null\n [key: string]: any\n}\n\nfunction noop() {}\n\nexport function useDropzone(options: UseDropzoneOptions) {\n const rootRef = ref<HTMLElement | null>(null)\n const inputRef = ref<HTMLInputElement | null>(null)\n\n const state = reactive({\n isFocused: false,\n isFileDialogActive: false,\n isDragActive: false,\n isDragAccept: false,\n isDragReject: false,\n })\n\n let dragTargets: EventTarget[] = []\n\n const fsAccessApiWorks =\n typeof window !== 'undefined' &&\n window.isSecureContext &&\n !!options.useFsAccessApi?.() &&\n canUseFileSystemAccessAPI()\n\n const acceptAttr = computed(() => acceptPropAsAcceptAttr(options.accept?.()))\n const pickerTypes = computed(() => pickerOptionsFromAccept(options.accept?.()))\n\n const getFilesFromEvent = (event: DropEvent) =>\n (options.getFilesFromEvent?.() ?? defaultGetFilesFromEvent)(event)\n\n const onErr = (error: unknown) => {\n if (options.onError) options.onError(error)\n else console.error(error)\n }\n\n const stopPropagation = (event: Event) => {\n if (options.noDragEventsBubbling?.()) event.stopPropagation()\n }\n\n // Detect the file dialog being dismissed with no selection: the OS dialog blocks focus, so we\n // treat the window regaining focus with an empty input as a cancellation.\n const onWindowFocus = () => {\n if (!fsAccessApiWorks && state.isFileDialogActive) {\n setTimeout(() => {\n if (inputRef.value && !inputRef.value.files?.length) {\n state.isFileDialogActive = false\n options.onFileDialogCancel?.()\n }\n }, 300)\n }\n }\n\n const onDocumentDragOver = (event: DragEvent) => event.preventDefault()\n const onDocumentDrop = (event: DragEvent) => {\n if (rootRef.value && event.target && rootRef.value.contains(event.target as Node)) {\n return\n }\n event.preventDefault()\n dragTargets = []\n }\n\n onMounted(() => {\n window.addEventListener('focus', onWindowFocus, false)\n if (options.preventDropOnDocument?.() ?? true) {\n document.addEventListener('dragover', onDocumentDragOver, false)\n document.addEventListener('drop', onDocumentDrop, false)\n }\n if ((options.autoFocus?.() ?? false) && !options.disabled?.()) {\n rootRef.value?.focus()\n }\n })\n\n onUnmounted(() => {\n window.removeEventListener('focus', onWindowFocus, false)\n document.removeEventListener('dragover', onDocumentDragOver)\n document.removeEventListener('drop', onDocumentDrop)\n })\n\n const setFiles = (files: FileWithPath[], event: DropEvent | null) => {\n const acceptedFiles: FileWithPath[] = []\n const fileRejections: FileRejection[] = []\n const minSize = options.minSize?.()\n const maxSize = options.maxSize?.()\n const multiple = options.multiple?.() ?? true\n const maxFiles = options.maxFiles?.()\n const validator = options.validator?.()\n\n files.forEach((file) => {\n const [accepted, acceptError] = fileAccepted(file, acceptAttr.value)\n const [sizeMatch, sizeError] = fileMatchSize(file, minSize, maxSize)\n const customErrors = validator ? validator(file) : null\n\n if (accepted && sizeMatch && !customErrors) {\n acceptedFiles.push(file)\n } else {\n const errors = [acceptError, sizeError].filter((e): e is FileError => !!e)\n if (customErrors)\n errors.push(...(Array.isArray(customErrors) ? customErrors : [customErrors]))\n fileRejections.push({ file, errors })\n }\n })\n\n if (\n (!multiple && acceptedFiles.length > 1) ||\n (multiple && (maxFiles ?? 0) >= 1 && acceptedFiles.length > maxFiles!)\n ) {\n acceptedFiles.forEach((file) =>\n fileRejections.push({ file, errors: [TOO_MANY_FILES_REJECTION] }),\n )\n acceptedFiles.length = 0\n }\n\n options.onDrop?.(acceptedFiles, fileRejections, event)\n if (fileRejections.length > 0) options.onDropRejected?.(fileRejections, event)\n if (acceptedFiles.length > 0) options.onDropAccepted?.(acceptedFiles, event)\n }\n\n const onDragEnterCb = (event: DragEvent) => {\n event.preventDefault()\n stopPropagation(event)\n dragTargets = [...dragTargets, event.target as EventTarget]\n\n if (isEvtWithFiles(event)) {\n Promise.resolve(getFilesFromEvent(event))\n .then((files) => {\n const isDragAccept =\n files.length > 0 &&\n allFilesAccepted({\n files,\n accept: acceptAttr.value,\n minSize: options.minSize?.(),\n maxSize: options.maxSize?.(),\n multiple: options.multiple?.() ?? true,\n maxFiles: options.maxFiles?.(),\n validator: options.validator?.(),\n })\n const isDragReject = files.length > 0 && !isDragAccept\n\n state.isDragActive = true\n state.isDragAccept = isDragAccept\n state.isDragReject = isDragReject\n\n options.onDragEnter?.(event)\n })\n .catch(onErr)\n }\n }\n\n const onDragOverCb = (event: DragEvent) => {\n event.preventDefault()\n stopPropagation(event)\n\n const hasFiles = isEvtWithFiles(event)\n if (hasFiles && event.dataTransfer) {\n try {\n event.dataTransfer.dropEffect = 'copy'\n } catch {\n // dropEffect is not settable in every browser – safe to ignore.\n }\n }\n if (hasFiles) options.onDragOver?.(event)\n }\n\n const onDragLeaveCb = (event: DragEvent) => {\n event.preventDefault()\n stopPropagation(event)\n\n const targets = dragTargets.filter(\n (target) => rootRef.value && rootRef.value.contains(target as Node),\n )\n const targetIdx = targets.indexOf(event.target as EventTarget)\n if (targetIdx !== -1) targets.splice(targetIdx, 1)\n dragTargets = targets\n\n if (targets.length > 0) return\n\n state.isDragActive = false\n state.isDragAccept = false\n state.isDragReject = false\n\n if (isEvtWithFiles(event)) options.onDragLeave?.(event)\n }\n\n const onDropCb = (event: DragEvent | Event) => {\n event.preventDefault()\n stopPropagation(event)\n dragTargets = []\n\n if (isEvtWithFiles(event as DragEvent)) {\n Promise.resolve(getFilesFromEvent(event as DragEvent))\n .then((files) => setFiles(files, event as DropEvent))\n .catch(onErr)\n }\n\n state.isDragActive = false\n state.isDragAccept = false\n state.isDragReject = false\n }\n\n const openFileDialog = () => {\n if (options.disabled?.()) return\n\n if (fsAccessApiWorks) {\n state.isFileDialogActive = true\n options.onFileDialogOpen?.()\n const opts = { multiple: options.multiple?.() ?? true, types: pickerTypes.value }\n ;(window as any)\n .showOpenFilePicker(opts)\n .then((handles: any) => getFilesFromEvent(handles))\n .then((files: FileWithPath[]) => {\n setFiles(files, null)\n state.isFileDialogActive = false\n })\n .catch((e: unknown) => {\n if (isAbort(e)) {\n options.onFileDialogCancel?.()\n state.isFileDialogActive = false\n } else if (isSecurityError(e)) {\n if (inputRef.value) {\n inputRef.value.value = ''\n inputRef.value.click()\n } else {\n onErr(\n new Error('Cannot open the file picker: no <input> was rendered as a fallback.'),\n )\n }\n } else {\n onErr(e)\n }\n })\n return\n }\n\n if (inputRef.value) {\n state.isFileDialogActive = true\n options.onFileDialogOpen?.()\n inputRef.value.value = ''\n inputRef.value.click()\n }\n }\n\n const onKeyDownCb = (event: KeyboardEvent) => {\n if (!rootRef.value || rootRef.value !== event.target) return\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault()\n openFileDialog()\n }\n }\n\n const onFocusCb = () => {\n state.isFocused = true\n }\n const onBlurCb = () => {\n state.isFocused = false\n }\n const onClickCb = () => {\n if (!options.noClick?.()) openFileDialog()\n }\n const onInputClickCb = (event: Event) => {\n event.stopPropagation()\n }\n const onInputChangeCb = (event: Event) => {\n onDropCb(event)\n }\n\n const composeHandler = <T extends (...args: any[]) => void>(fn: T): T | null =>\n options.disabled?.() ? null : fn\n const composeKeyboardHandler = <T extends (...args: any[]) => void>(fn: T): T | null =>\n options.noKeyboard?.() ? null : composeHandler(fn)\n const composeDragHandler = <T extends (...args: any[]) => void>(fn: T): T | null =>\n options.noDrag?.() ? null : composeHandler(fn)\n\n const getRootProps = (overrides: Record<string, any> = {}): DropzoneRootProps => ({\n onKeydown: composeKeyboardHandler(onKeyDownCb),\n onFocus: composeKeyboardHandler(onFocusCb),\n onBlur: composeKeyboardHandler(onBlurCb),\n onClick: composeHandler(onClickCb),\n onDragenter: composeDragHandler(onDragEnterCb),\n onDragover: composeDragHandler(onDragOverCb),\n onDragleave: composeDragHandler(onDragLeaveCb),\n onDrop: composeDragHandler(onDropCb as any),\n role: 'presentation',\n ref: (el: any) => {\n rootRef.value = el?.$el ?? el ?? null\n },\n ...(!options.disabled?.() && !options.noKeyboard?.() ? { tabindex: 0 } : {}),\n ...overrides,\n })\n\n const getInputProps = (overrides: Record<string, any> = {}): DropzoneInputProps => ({\n type: 'file',\n accept: acceptAttr.value,\n multiple: options.multiple?.() ?? true,\n style: {\n border: 0,\n clip: 'rect(0, 0, 0, 0)',\n clipPath: 'inset(50%)',\n height: '1px',\n margin: '0 -1px -1px 0',\n overflow: 'hidden',\n padding: 0,\n position: 'absolute',\n width: '1px',\n whiteSpace: 'nowrap',\n },\n onChange: composeHandler(onInputChangeCb),\n onClick: composeHandler(onInputClickCb),\n tabindex: -1,\n ref: (el: any) => {\n inputRef.value = el?.$el ?? el ?? null\n },\n ...overrides,\n })\n\n return {\n state,\n rootRef,\n inputRef,\n isFocused: computed(() => state.isFocused && !options.disabled?.()),\n isDragActive: computed(() => state.isDragActive),\n isDragAccept: computed(() => state.isDragAccept),\n isDragReject: computed(() => state.isDragReject),\n getRootProps,\n getInputProps,\n open: () => composeHandler(openFileDialog)?.(),\n }\n}\n\nexport { noop }\n",".root {\n position: relative;\n border: 1px dashed;\n color: var(--mantine-color-text);\n padding: var(--mantine-spacing-md);\n border-radius: var(--dropzone-radius);\n cursor: pointer;\n user-select: none;\n transition:\n background-color 100ms ease,\n border-color 100ms ease;\n\n &:where([data-loading]),\n &:where(:not([data-activate-on-click])) {\n cursor: default;\n }\n\n @mixin where-light {\n background-color: var(--mantine-color-white);\n border-color: var(--mantine-color-gray-4);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-6);\n border-color: var(--mantine-color-dark-4);\n }\n\n @mixin hover {\n &:where([data-activate-on-click]:not([data-loading])) {\n @mixin where-light {\n background-color: var(--mantine-color-gray-0);\n }\n\n @mixin where-dark {\n background-color: var(--mantine-color-dark-5);\n }\n }\n }\n\n &:where([data-accept]) {\n background-color: var(--dropzone-accept-bg);\n border-color: var(--dropzone-accept-bg);\n color: var(--dropzone-accept-color);\n }\n\n &:where([data-reject]) {\n background-color: var(--dropzone-reject-bg);\n border-color: var(--dropzone-reject-bg);\n color: var(--dropzone-reject-color);\n }\n}\n\n.inner {\n pointer-events: none;\n user-select: none;\n\n &:where([data-enable-pointer-events]) {\n pointer-events: all;\n }\n}\n\n.fullScreen {\n position: fixed;\n inset: 0;\n background-color: var(--mantine-color-body);\n display: flex;\n flex-direction: column;\n padding: var(--mantine-spacing-xs);\n transition: opacity 100ms ease;\n\n & .dropzone {\n flex: 1;\n }\n}\n","import { defineComponent, h, type PropType } from 'vue'\nimport { assignRef } from '@mantine-vue/hooks'\nimport {\n Box,\n createVarsResolver,\n getRadius,\n LoadingOverlay,\n useProps,\n useStyles,\n withBoxProps,\n} from '@mantine-vue/core'\nimport { provideDropzoneContext } from './Dropzone.context'\nimport { DropzoneAccept, DropzoneIdle, DropzoneReject } from './DropzoneStatus'\nimport { useDropzone } from './use-dropzone'\nimport type { Accept, DropEvent, FileError, FileRejection, FileWithPath } from './types'\nimport classes from './Dropzone.module.css'\n\nexport type DropzoneStylesNames = 'root' | 'inner'\nexport type DropzoneVariant = 'filled' | 'light'\nexport type DropzoneCssVariables = {\n root:\n | '--dropzone-radius'\n | '--dropzone-accept-color'\n | '--dropzone-accept-bg'\n | '--dropzone-reject-color'\n | '--dropzone-reject-bg'\n}\n\nexport interface DropzoneProps {\n /** Key of `theme.colors` or any valid CSS color to set colors of `Dropzone.Accept` @default theme.primaryColor */\n acceptColor?: string\n /** Key of `theme.colors` or any valid CSS color to set colors of `Dropzone.Reject` @default 'red' */\n rejectColor?: string\n /** Key of `theme.radius` or any valid CSS value to set `border-radius`, numbers are converted to rem @default theme.defaultRadius */\n radius?: string | number\n /** Determines whether files capturing should be disabled @default false */\n disabled?: boolean\n /** Called when any files are dropped to the dropzone */\n onDropAny?: (files: FileWithPath[], fileRejections: FileRejection[]) => void\n /** Called when valid files are dropped to the dropzone */\n onDrop: (files: FileWithPath[]) => void\n /** Called when dropped files do not meet file restrictions */\n onReject?: (fileRejections: FileRejection[]) => void\n /** Determines whether a loading overlay should be displayed over the dropzone @default false */\n loading?: boolean\n /** Mime types of the files that dropzone can accept. By default, dropzone accepts all file types. */\n accept?: Accept | string[]\n /** A ref which, when assigned, receives a function that opens the file system file picker */\n openRef?: any\n /** Determines whether multiple files can be dropped to the dropzone or selected from file system picker @default true */\n multiple?: boolean\n /** Maximum file size in bytes */\n maxSize?: number\n /** Name of the form control. Submitted with the form as part of a name/value pair. */\n name?: string\n /** Maximum number of files that can be picked at once */\n maxFiles?: number\n /** Set to autofocus the root element */\n autoFocus?: boolean\n /** If `false`, disables click to open the native file selection dialog @default true */\n activateOnClick?: boolean\n /** If `false`, disables drag 'n' drop @default true */\n activateOnDrag?: boolean\n /** If `false`, disables Space/Enter to open the native file selection dialog @default true */\n activateOnKeyboard?: boolean\n /** If `false`, stops drag event propagation to parents @default true */\n dragEventsBubbling?: boolean\n /** Called when the `dragenter` event occurs */\n onDragEnter?: (event: DragEvent) => void\n /** Called when the `dragleave` event occurs */\n onDragLeave?: (event: DragEvent) => void\n /** Called when the `dragover` event occurs */\n onDragOver?: (event: DragEvent) => void\n /** Called when user closes the file selection dialog with no selection */\n onFileDialogCancel?: () => void\n /** Called when user opens the file selection dialog */\n onFileDialogOpen?: () => void\n /** If `false`, allow dropped items to take over the current browser window @default true */\n preventDropOnDocument?: boolean\n /** Set to true to use the File System Access API to open the file picker instead of an `input type=\"file\"` click event @default false */\n useFsAccessApi?: boolean\n /** Use this to provide a custom file aggregator */\n getFilesFromEvent?: (event: DropEvent) => Promise<FileWithPath[]>\n /** Custom validation function. It must return null if there's no errors. */\n validator?: (file: FileWithPath) => FileError | FileError[] | null\n /** Determines whether pointer events should be enabled on the inner element @default false */\n enablePointerEvents?: boolean\n /** Props passed down to the Loader component */\n loaderProps?: Record<string, any>\n /** Props passed down to the internal input element */\n inputProps?: Record<string, any>\n variant?: DropzoneVariant\n classNames?: any\n styles?: any\n vars?: any\n unstyled?: boolean\n}\n\nconst defaultProps: Record<string, any> = {\n multiple: true,\n maxSize: Infinity,\n activateOnClick: true,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n useFsAccessApi: false,\n preventDropOnDocument: true,\n variant: 'light',\n rejectColor: 'red',\n}\n\nconst varsResolver = createVarsResolver<any>(\n (theme, { radius, variant, acceptColor, rejectColor }) => {\n const acceptColors = theme.variantColorResolver({\n color: acceptColor || theme.primaryColor,\n theme,\n variant,\n })\n\n const rejectColors = theme.variantColorResolver({\n color: rejectColor || 'red',\n theme,\n variant,\n })\n\n return {\n root: {\n '--dropzone-radius': getRadius(radius),\n '--dropzone-accept-color': acceptColors.color,\n '--dropzone-accept-bg': acceptColors.background,\n '--dropzone-reject-color': rejectColors.color,\n '--dropzone-reject-bg': rejectColors.background,\n },\n }\n },\n)\n\nconst DropzoneBaseComponent = defineComponent({\n name: 'Dropzone',\n inheritAttrs: false,\n props: {\n acceptColor: { type: String, default: undefined },\n rejectColor: { type: String, default: undefined },\n radius: { type: [String, Number], default: undefined },\n disabled: { type: Boolean, default: false },\n loading: { type: Boolean, default: false },\n accept: { type: [Object, Array] as PropType<Accept | string[]>, default: undefined },\n multiple: { type: Boolean, default: undefined },\n maxSize: { type: Number, default: undefined },\n name: { type: String, default: undefined },\n maxFiles: { type: Number, default: undefined },\n autoFocus: { type: Boolean, default: false },\n activateOnClick: { type: Boolean, default: undefined },\n activateOnDrag: { type: Boolean, default: undefined },\n activateOnKeyboard: { type: Boolean, default: undefined },\n dragEventsBubbling: { type: Boolean, default: undefined },\n preventDropOnDocument: { type: Boolean, default: undefined },\n useFsAccessApi: { type: Boolean, default: undefined },\n enablePointerEvents: { type: Boolean, default: false },\n variant: { type: String as PropType<DropzoneVariant>, default: undefined },\n loaderProps: { type: Object as PropType<Record<string, any>>, default: undefined },\n inputProps: { type: Object as PropType<Record<string, any>>, default: undefined },\n validator: {\n type: Function as PropType<(file: FileWithPath) => FileError | FileError[] | null>,\n default: undefined,\n },\n getFilesFromEvent: {\n type: Function as PropType<(event: DropEvent) => Promise<FileWithPath[]>>,\n default: undefined,\n },\n openRef: { type: [Object, Function] as PropType<any>, default: undefined },\n onDrop: { type: Function as PropType<(files: FileWithPath[]) => void>, required: true },\n onDropAny: {\n type: Function as PropType<(files: FileWithPath[], fileRejections: FileRejection[]) => void>,\n default: undefined,\n },\n onReject: {\n type: Function as PropType<(fileRejections: FileRejection[]) => void>,\n default: undefined,\n },\n onDragEnter: { type: Function as PropType<(event: DragEvent) => void>, default: undefined },\n onDragLeave: { type: Function as PropType<(event: DragEvent) => void>, default: undefined },\n onDragOver: { type: Function as PropType<(event: DragEvent) => void>, default: undefined },\n onFileDialogCancel: { type: Function as PropType<() => void>, default: undefined },\n onFileDialogOpen: { type: Function as PropType<() => void>, default: undefined },\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n vars: { type: [Object, Function], default: undefined },\n unstyled: { type: Boolean, default: false },\n },\n setup(rawProps, { attrs, slots }) {\n const props = useProps('Dropzone', defaultProps, rawProps as any)\n\n const getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames as any,\n styles: props.styles as any,\n vars: props.vars as any,\n varsResolver,\n unstyled: props.unstyled,\n })\n\n const dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((r: Accept, key: string) => ({ ...r, [key]: [] }), {})\n : (props.accept as Accept | undefined),\n disabled: () => props.disabled || props.loading,\n multiple: () => props.multiple,\n maxSize: () => props.maxSize,\n maxFiles: () => props.maxFiles,\n autoFocus: () => props.autoFocus,\n noClick: () => !props.activateOnClick,\n noDrag: () => !props.activateOnDrag,\n noDragEventsBubbling: () => !props.dragEventsBubbling,\n noKeyboard: () => !props.activateOnKeyboard,\n preventDropOnDocument: () => props.preventDropOnDocument,\n useFsAccessApi: () => props.useFsAccessApi,\n validator: () => props.validator,\n getFilesFromEvent: () => props.getFilesFromEvent,\n onDrop: (files, fileRejections) => props.onDropAny?.(files, fileRejections),\n onDropAccepted: (files) => props.onDrop(files),\n onDropRejected: (fileRejections) => props.onReject?.(fileRejections),\n onDragEnter: (event) => props.onDragEnter?.(event),\n onDragLeave: (event) => props.onDragLeave?.(event),\n onDragOver: (event) => props.onDragOver?.(event),\n onFileDialogCancel: () => props.onFileDialogCancel?.(),\n onFileDialogOpen: () => props.onFileDialogOpen?.(),\n })\n\n assignRef(props.openRef, dz.open)\n\n provideDropzoneContext({\n get accept() {\n return dz.isDragActive.value && dz.isDragAccept.value\n },\n get reject() {\n return dz.isDragActive.value && dz.isDragReject.value\n },\n get idle() {\n const accepted = dz.isDragActive.value && dz.isDragAccept.value\n const rejected = dz.isDragActive.value && dz.isDragReject.value\n return !accepted && !rejected\n },\n })\n\n return () => {\n const isAccepted = dz.isDragActive.value && dz.isDragAccept.value\n const isRejected = dz.isDragActive.value && dz.isDragReject.value\n const isIdle = !isAccepted && !isRejected\n\n const rootProps = dz.getRootProps()\n const inputProps = dz.getInputProps(props.inputProps)\n\n return h(\n Box,\n {\n ...rootProps,\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: isAccepted,\n reject: isRejected,\n idle: isIdle,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n (attrs as any).mod,\n ],\n },\n () => [\n h(LoadingOverlay, {\n visible: props.loading,\n overlayProps: { radius: props.radius },\n unstyled: props.unstyled,\n loaderProps: props.loaderProps,\n }),\n h('input', { ...inputProps, name: props.name }),\n h(\n 'div',\n {\n ...getStyles('inner'),\n 'data-enable-pointer-events': props.enablePointerEvents || undefined,\n },\n slots.default?.(),\n ),\n ],\n )\n }\n },\n})\n\nexport const Dropzone = Object.assign(withBoxProps(DropzoneBaseComponent), {\n classes,\n varsResolver,\n Accept: DropzoneAccept,\n Idle: DropzoneIdle,\n Reject: DropzoneReject,\n})\n","import { defineComponent, h, onUnmounted, ref, watch, type PropType } from 'vue'\nimport {\n getDefaultZIndex,\n OptionalPortal,\n useProps,\n useStyles,\n withBoxProps,\n} from '@mantine-vue/core'\nimport { useDisclosure } from '@mantine-vue/hooks'\nimport { Dropzone, type DropzoneProps, type DropzoneStylesNames } from './Dropzone'\nimport classes from './Dropzone.module.css'\n\nexport type DropzoneFullScreenStylesNames = DropzoneStylesNames | 'fullScreen'\n\nexport interface DropzoneFullScreenProps extends Omit<\n DropzoneProps,\n 'variant' | 'classNames' | 'styles' | 'vars'\n> {\n /** Determines whether user can drop files to browser window @default true */\n active?: boolean\n /** Z-index value @default 9999 (theme \"max\" z-index) */\n zIndex?: string | number\n /** Determines whether component should be rendered within `Portal` @default true */\n withinPortal?: boolean\n /** Props to pass down to the portal when withinPortal is `true` */\n portalProps?: Record<string, any>\n classNames?: any\n styles?: any\n}\n\nconst defaultProps: Record<string, any> = {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n}\n\nconst DropzoneFullScreenBaseComponent = defineComponent({\n name: 'DropzoneFullScreen',\n inheritAttrs: false,\n props: {\n active: { type: Boolean, default: undefined },\n onDrop: { type: Function as PropType<(files: any[]) => void>, required: true },\n onReject: { type: Function as PropType<(fileRejections: any[]) => void>, default: undefined },\n zIndex: { type: [String, Number], default: undefined },\n withinPortal: { type: Boolean, default: undefined },\n portalProps: { type: Object as PropType<Record<string, any>>, default: undefined },\n classNames: { type: [Object, Function], default: undefined },\n styles: { type: [Object, Function], default: undefined },\n unstyled: { type: Boolean, default: false },\n },\n setup(rawProps, { attrs, slots }) {\n const props = useProps('DropzoneFullScreen', defaultProps, rawProps as any)\n\n const getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames as any,\n styles: props.styles as any,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n })\n\n const counter = ref(0)\n const [visible, { open, close }] = useDisclosure(false)\n\n const handleDragEnter = (event: DragEvent) => {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n }\n const handleDragLeave = () => {\n counter.value -= 1\n }\n\n watch(counter, (value) => {\n if (value === 0) close()\n })\n\n let attached = false\n const attach = () => {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n }\n const detach = () => {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n }\n\n watch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n },\n { immediate: true },\n )\n\n onUnmounted(detach)\n\n return () =>\n h(OptionalPortal, { ...props.portalProps, withinPortal: props.withinPortal }, () =>\n h(\n 'div',\n {\n ...getStyles('fullScreen', {\n style: {\n opacity: visible.value ? 1 : 0,\n pointerEvents: visible.value ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n }),\n },\n [\n h(\n Dropzone,\n {\n activateOnClick: false,\n ...attrs,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n class: classes.dropzone,\n onDrop: (files: any) => {\n props.onDrop(files)\n close()\n counter.value = 0\n },\n onReject: (fileRejections: any) => {\n props.onReject?.(fileRejections)\n close()\n counter.value = 0\n },\n },\n slots,\n ),\n ],\n ),\n )\n },\n})\n\nexport const DropzoneFullScreen = withBoxProps(DropzoneFullScreenBaseComponent)\n","// Ported verbatim from @mantine/dropzone/src/mime-types.ts – plain data, no React/Vue specifics.\nexport const MIME_TYPES = {\n // Images\n png: 'image/png',\n gif: 'image/gif',\n jpeg: 'image/jpeg',\n svg: 'image/svg+xml',\n webp: 'image/webp',\n avif: 'image/avif',\n heic: 'image/heic',\n heif: 'image/heif',\n\n // Documents\n mp4: 'video/mp4',\n zip: 'application/zip',\n rar: 'application/x-rar',\n '7z': 'application/x-7z-compressed',\n csv: 'text/csv',\n pdf: 'application/pdf',\n doc: 'application/msword',\n docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\n xls: 'application/vnd.ms-excel',\n xlsx: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\n ppt: 'application/vnd.ms-powerpoint',\n pptx: 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\n exe: 'application/vnd.microsoft.portable-executable',\n} as const\n\nexport const IMAGE_MIME_TYPE = [\n MIME_TYPES.png,\n MIME_TYPES.gif,\n MIME_TYPES.jpeg,\n MIME_TYPES.svg,\n MIME_TYPES.webp,\n MIME_TYPES.avif,\n MIME_TYPES.heic,\n MIME_TYPES.heif,\n]\n\nexport const PDF_MIME_TYPE = [MIME_TYPES.pdf]\nexport const MS_WORD_MIME_TYPE = [MIME_TYPES.doc, MIME_TYPES.docx]\nexport const MS_EXCEL_MIME_TYPE = [MIME_TYPES.xls, MIME_TYPES.xlsx]\nexport const MS_POWERPOINT_MIME_TYPE = [MIME_TYPES.ppt, MIME_TYPES.pptx]\nexport const EXE_MIME_TYPE = [MIME_TYPES.exe]\n","import { Dropzone as _Dropzone } from './Dropzone'\nimport { DropzoneFullScreen } from './DropzoneFullScreen'\n\nObject.assign(_Dropzone, { FullScreen: DropzoneFullScreen })\n\nexport const Dropzone = _Dropzone as typeof _Dropzone & { FullScreen: typeof DropzoneFullScreen }\n\nexport { DropzoneFullScreen }\nexport { DropzoneAccept, DropzoneIdle, DropzoneReject } from './DropzoneStatus'\nexport { useDropzone } from './use-dropzone'\nexport * from './mime-types'\nexport * from './utils'\n\nexport type { DropzoneFullScreenProps, DropzoneFullScreenStylesNames } from './DropzoneFullScreen'\nexport type {\n DropzoneCssVariables,\n DropzoneProps,\n DropzoneStylesNames,\n DropzoneVariant,\n} from './Dropzone'\nexport type { DropzoneAcceptProps, DropzoneIdleProps, DropzoneRejectProps } from './DropzoneStatus'\nexport type { DropzoneContextValue } from './Dropzone.context'\nexport type { UseDropzoneOptions } from './use-dropzone'\nexport type { Accept, DropEvent, FileError, FileRejection, FileWithPath } from './types'\n"],"mappings":"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"}
|