@mantine-vue/dropzone 3.4.0 → 3.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/index.cjs +2 -4
- package/cjs/index.cjs.map +1 -1
- package/esm/index.mjs +2 -4
- package/esm/index.mjs.map +1 -1
- package/package.json +3 -3
package/cjs/index.cjs
CHANGED
|
@@ -537,8 +537,7 @@ var Dropzone_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
537
537
|
name: "Dropzone",
|
|
538
538
|
classes: Dropzone_module_default,
|
|
539
539
|
props,
|
|
540
|
-
|
|
541
|
-
style: attrs.style,
|
|
540
|
+
attrs,
|
|
542
541
|
classNames: props.classNames,
|
|
543
542
|
styles: props.styles,
|
|
544
543
|
vars: props.vars,
|
|
@@ -828,8 +827,7 @@ var DropzoneFullScreen_default = /* @__PURE__ */ (0, vue.defineComponent)({
|
|
|
828
827
|
name: "DropzoneFullScreen",
|
|
829
828
|
classes: Dropzone_module_default,
|
|
830
829
|
props,
|
|
831
|
-
|
|
832
|
-
style: attrs.style,
|
|
830
|
+
attrs,
|
|
833
831
|
classNames: props.classNames,
|
|
834
832
|
styles: props.styles,
|
|
835
833
|
unstyled: props.unstyled,
|
package/cjs/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","names":["$props","$attrs","$props","$attrs","$props","$attrs"],"sources":["../src/Dropzone.context.ts","../src/get-files-from-event.ts","../src/utils.ts","../src/use-dropzone.ts","../src/Dropzone.module.css","../src/components/Dropzone/Dropzone.vue","../src/components/Dropzone/Dropzone.vue","../src/components/DropzoneStatus/DropzoneStatus.vue","../src/components/DropzoneStatus/DropzoneStatus.vue","../src/components/DropzoneStatus/DropzoneAccept.vue","../src/components/DropzoneStatus/DropzoneAccept.vue","../src/components/DropzoneStatus/DropzoneReject.vue","../src/components/DropzoneStatus/DropzoneReject.vue","../src/components/DropzoneStatus/DropzoneIdle.vue","../src/components/DropzoneStatus/DropzoneIdle.vue","../src/components/Dropzone/index.ts","../src/components/DropzoneFullScreen/DropzoneFullScreen.vue","../src/components/DropzoneFullScreen/DropzoneFullScreen.vue","../src/components/DropzoneFullScreen/index.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 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","<script lang=\"ts\">\nimport { createVarsResolver, getRadius } from '@mantine-vue/core'\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 const rejectColors = theme.variantColorResolver({ color: rejectColor || 'red', theme, variant })\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)\nexport { varsResolver }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch } from 'vue'\nimport { Box, LoadingOverlay, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef } from '@mantine-vue/hooks'\nimport { provideDropzoneContext } from '../../Dropzone.context'\nimport { useDropzone } from '../../use-dropzone'\nimport type { Accept } from '../../types'\nimport type { DropzoneEmits, DropzoneProps } from './Dropzone.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'Dropzone', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneProps>(), {\n disabled: false,\n loading: false,\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 enablePointerEvents: false,\n variant: 'light',\n rejectColor: 'red',\n})\nconst emit = defineEmits<DropzoneEmits>()\nconst props = useProps('Dropzone', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames,\n styles: props.styles,\n vars: props.vars,\n varsResolver,\n unstyled: props.unstyled,\n})\nconst dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((result: Accept, key: string) => ({ ...result, [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, rejected) => emit('drop-any', files, rejected),\n onDropAccepted: (files) => emit('drop', files),\n onDropRejected: (rejected) => emit('reject', rejected),\n onDragEnter: (event) => emit('drag-enter', event),\n onDragLeave: (event) => emit('drag-leave', event),\n onDragOver: (event) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n})\nwatch(\n () => props.openRef,\n (value) => assignRef(value, dz.open),\n { immediate: true },\n)\nconst accepted = computed(() => dz.isDragActive.value && dz.isDragAccept.value)\nconst rejected = computed(() => dz.isDragActive.value && dz.isDragReject.value)\nconst idle = computed(() => !accepted.value && !rejected.value)\nprovideDropzoneContext({\n get accept() {\n return accepted.value\n },\n get reject() {\n return rejected.value\n },\n get idle() {\n return idle.value\n },\n})\nconst rootAttrs = (): any => ({\n ...dz.getRootProps(),\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: accepted.value,\n reject: rejected.value,\n idle: idle.value,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n attrs.mod,\n ],\n})\nconst inputAttrs = (): any => ({ ...dz.getInputProps(props.inputProps), name: props.name })\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | null) => {\n rootElement.value = node\n assignRef(props.rootRef, node)\n}\n\ndefineExpose({ rootElement })\n</script>\n\n<template>\n <Box :rootRef=\"setRootRef\" v-bind=\"rootAttrs()\">\n <LoadingOverlay\n :visible=\"props.loading\"\n :overlay-props=\"{ radius: props.radius }\"\n :unstyled=\"props.unstyled\"\n :loader-props=\"props.loaderProps\"\n />\n <input v-bind=\"inputAttrs()\" />\n <div\n v-bind=\"getStyles('inner')\"\n :data-enable-pointer-events=\"props.enablePointerEvents || undefined\"\n >\n <slot />\n </div>\n </Box>\n</template>\n","<script lang=\"ts\">\nimport { createVarsResolver, getRadius } from '@mantine-vue/core'\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 const rejectColors = theme.variantColorResolver({ color: rejectColor || 'red', theme, variant })\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)\nexport { varsResolver }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch } from 'vue'\nimport { Box, LoadingOverlay, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef } from '@mantine-vue/hooks'\nimport { provideDropzoneContext } from '../../Dropzone.context'\nimport { useDropzone } from '../../use-dropzone'\nimport type { Accept } from '../../types'\nimport type { DropzoneEmits, DropzoneProps } from './Dropzone.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'Dropzone', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneProps>(), {\n disabled: false,\n loading: false,\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 enablePointerEvents: false,\n variant: 'light',\n rejectColor: 'red',\n})\nconst emit = defineEmits<DropzoneEmits>()\nconst props = useProps('Dropzone', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames,\n styles: props.styles,\n vars: props.vars,\n varsResolver,\n unstyled: props.unstyled,\n})\nconst dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((result: Accept, key: string) => ({ ...result, [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, rejected) => emit('drop-any', files, rejected),\n onDropAccepted: (files) => emit('drop', files),\n onDropRejected: (rejected) => emit('reject', rejected),\n onDragEnter: (event) => emit('drag-enter', event),\n onDragLeave: (event) => emit('drag-leave', event),\n onDragOver: (event) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n})\nwatch(\n () => props.openRef,\n (value) => assignRef(value, dz.open),\n { immediate: true },\n)\nconst accepted = computed(() => dz.isDragActive.value && dz.isDragAccept.value)\nconst rejected = computed(() => dz.isDragActive.value && dz.isDragReject.value)\nconst idle = computed(() => !accepted.value && !rejected.value)\nprovideDropzoneContext({\n get accept() {\n return accepted.value\n },\n get reject() {\n return rejected.value\n },\n get idle() {\n return idle.value\n },\n})\nconst rootAttrs = (): any => ({\n ...dz.getRootProps(),\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: accepted.value,\n reject: rejected.value,\n idle: idle.value,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n attrs.mod,\n ],\n})\nconst inputAttrs = (): any => ({ ...dz.getInputProps(props.inputProps), name: props.name })\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | null) => {\n rootElement.value = node\n assignRef(props.rootRef, node)\n}\n\ndefineExpose({ rootElement })\n</script>\n\n<template>\n <Box :rootRef=\"setRootRef\" v-bind=\"rootAttrs()\">\n <LoadingOverlay\n :visible=\"props.loading\"\n :overlay-props=\"{ radius: props.radius }\"\n :unstyled=\"props.unstyled\"\n :loader-props=\"props.loaderProps\"\n />\n <input v-bind=\"inputAttrs()\" />\n <div\n v-bind=\"getStyles('inner')\"\n :data-enable-pointer-events=\"props.enablePointerEvents || undefined\"\n >\n <slot />\n </div>\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, isVNode, useAttrs, useSlots, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from '../../Dropzone.context'\nimport type { DropzoneStatusProps } from './DropzoneStatus.types'\n\ndefineOptions({ name: 'DropzoneStatus', inheritAttrs: false })\nconst props = defineProps<DropzoneStatusProps & { status: keyof DropzoneContextValue }>()\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst ctx = useDropzoneContext()\nconst renderContent = () => {\n const slotChildren = slots.default?.()\n const children = props.children !== undefined ? props.children : slotChildren\n const child: VNodeChild =\n Array.isArray(children) && children.length === 1 ? children[0] : children\n return isVNode(child) && !Array.isArray(child) ? cloneVNode(child, attrs) : child\n}\n</script>\n\n<template>\n <component v-if=\"ctx[props.status] && isVNode(renderContent())\" :is=\"renderContent\" />\n <span v-else-if=\"ctx[props.status]\" v-bind=\"attrs\"><component :is=\"renderContent\" /></span>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, isVNode, useAttrs, useSlots, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from '../../Dropzone.context'\nimport type { DropzoneStatusProps } from './DropzoneStatus.types'\n\ndefineOptions({ name: 'DropzoneStatus', inheritAttrs: false })\nconst props = defineProps<DropzoneStatusProps & { status: keyof DropzoneContextValue }>()\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst ctx = useDropzoneContext()\nconst renderContent = () => {\n const slotChildren = slots.default?.()\n const children = props.children !== undefined ? props.children : slotChildren\n const child: VNodeChild =\n Array.isArray(children) && children.length === 1 ? children[0] : children\n return isVNode(child) && !Array.isArray(child) ? cloneVNode(child, attrs) : child\n}\n</script>\n\n<template>\n <component v-if=\"ctx[props.status] && isVNode(renderContent())\" :is=\"renderContent\" />\n <span v-else-if=\"ctx[props.status]\" v-bind=\"attrs\"><component :is=\"renderContent\" /></span>\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneAcceptProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneAccept', inheritAttrs: false })\ndefineProps<DropzoneAcceptProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"accept\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneAcceptProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneAccept', inheritAttrs: false })\ndefineProps<DropzoneAcceptProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"accept\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneRejectProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneReject', inheritAttrs: false })\ndefineProps<DropzoneRejectProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"reject\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneRejectProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneReject', inheritAttrs: false })\ndefineProps<DropzoneRejectProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"reject\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneIdleProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneIdle', inheritAttrs: false })\ndefineProps<DropzoneIdleProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"idle\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneIdleProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneIdle', inheritAttrs: false })\ndefineProps<DropzoneIdleProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"idle\" :children=\"slots.default?.()\" />\n</template>\n","import { factory } from '@mantine-vue/core'\nimport DropzoneComponent, { varsResolver } from './Dropzone.vue'\nimport type { DropzoneFactory } from './Dropzone.types'\nimport { DropzoneAccept, DropzoneIdle, DropzoneReject } from '../DropzoneStatus'\nimport classes from '../../Dropzone.module.css'\nexport const Dropzone = factory<DropzoneFactory>(DropzoneComponent, {\n classes,\n varsResolver,\n Accept: DropzoneAccept,\n Idle: DropzoneIdle,\n Reject: DropzoneReject,\n})\nexport type * from './Dropzone.types'\n","<script setup lang=\"ts\">\nimport { onUnmounted, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue'\nimport { getDefaultZIndex, OptionalPortal, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef, useDisclosure } from '@mantine-vue/hooks'\nimport DropzoneComponent from '../Dropzone/Dropzone.vue'\nimport type { DropzoneFullScreenEmits, DropzoneFullScreenProps } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'DropzoneFullScreen', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneFullScreenProps>(), {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n})\nconst emit = defineEmits<DropzoneFullScreenEmits>()\nconst props = useProps('DropzoneFullScreen', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n})\nconst counter = ref(0)\nconst [visible, { open, close }] = useDisclosure(false)\nfunction reset() {\n close()\n counter.value = 0\n}\nfunction handleDragEnter(event: DragEvent) {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n}\nfunction handleDragLeave() {\n counter.value = Math.max(0, counter.value - 1)\n}\nwatch(counter, (value) => {\n if (value === 0) close()\n})\nlet attached = false\nfunction attach() {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n}\nfunction detach() {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n}\nwatch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n else reset()\n },\n { immediate: true },\n)\nonUnmounted(detach)\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | ComponentPublicInstance | null) => {\n const element = (node && '$el' in node ? node.$el : node) as Element | null\n rootElement.value = element\n assignRef(props.rootRef, element)\n}\n\ndefineExpose({ rootElement })\nconst dropzoneAttrs = () => {\n const rest = Object.fromEntries(\n Object.entries(props).filter(\n ([key]) =>\n !['active', 'zIndex', 'withinPortal', 'portalProps', 'classNames', 'styles'].includes(key),\n ),\n )\n const { classNames, styles } = props\n return {\n ...rest,\n ...attrs,\n activateOnClick: false,\n classNames,\n styles,\n class: classes.dropzone,\n onDrop: (files: any[]) => {\n emit('drop', files)\n reset()\n },\n onReject: (rejections: any[]) => {\n emit('reject', rejections)\n reset()\n },\n onDropAny: (files: any[], rejections: any[]) => emit('drop-any', files, rejections),\n onDragEnter: (event: DragEvent) => emit('drag-enter', event),\n onDragLeave: (event: DragEvent) => emit('drag-leave', event),\n onDragOver: (event: DragEvent) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n }\n}\n</script>\n\n<template>\n <OptionalPortal v-bind=\"props.portalProps\" :within-portal=\"props.withinPortal\">\n <div\n :ref=\"setRootRef\"\n v-bind=\"\n getStyles('fullScreen', {\n style: {\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n })\n \"\n >\n <DropzoneComponent v-bind=\"dropzoneAttrs()\"><slot /></DropzoneComponent>\n </div>\n </OptionalPortal>\n</template>\n","<script setup lang=\"ts\">\nimport { onUnmounted, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue'\nimport { getDefaultZIndex, OptionalPortal, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef, useDisclosure } from '@mantine-vue/hooks'\nimport DropzoneComponent from '../Dropzone/Dropzone.vue'\nimport type { DropzoneFullScreenEmits, DropzoneFullScreenProps } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'DropzoneFullScreen', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneFullScreenProps>(), {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n})\nconst emit = defineEmits<DropzoneFullScreenEmits>()\nconst props = useProps('DropzoneFullScreen', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n})\nconst counter = ref(0)\nconst [visible, { open, close }] = useDisclosure(false)\nfunction reset() {\n close()\n counter.value = 0\n}\nfunction handleDragEnter(event: DragEvent) {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n}\nfunction handleDragLeave() {\n counter.value = Math.max(0, counter.value - 1)\n}\nwatch(counter, (value) => {\n if (value === 0) close()\n})\nlet attached = false\nfunction attach() {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n}\nfunction detach() {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n}\nwatch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n else reset()\n },\n { immediate: true },\n)\nonUnmounted(detach)\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | ComponentPublicInstance | null) => {\n const element = (node && '$el' in node ? node.$el : node) as Element | null\n rootElement.value = element\n assignRef(props.rootRef, element)\n}\n\ndefineExpose({ rootElement })\nconst dropzoneAttrs = () => {\n const rest = Object.fromEntries(\n Object.entries(props).filter(\n ([key]) =>\n !['active', 'zIndex', 'withinPortal', 'portalProps', 'classNames', 'styles'].includes(key),\n ),\n )\n const { classNames, styles } = props\n return {\n ...rest,\n ...attrs,\n activateOnClick: false,\n classNames,\n styles,\n class: classes.dropzone,\n onDrop: (files: any[]) => {\n emit('drop', files)\n reset()\n },\n onReject: (rejections: any[]) => {\n emit('reject', rejections)\n reset()\n },\n onDropAny: (files: any[], rejections: any[]) => emit('drop-any', files, rejections),\n onDragEnter: (event: DragEvent) => emit('drag-enter', event),\n onDragLeave: (event: DragEvent) => emit('drag-leave', event),\n onDragOver: (event: DragEvent) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n }\n}\n</script>\n\n<template>\n <OptionalPortal v-bind=\"props.portalProps\" :within-portal=\"props.withinPortal\">\n <div\n :ref=\"setRootRef\"\n v-bind=\"\n getStyles('fullScreen', {\n style: {\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n })\n \"\n >\n <DropzoneComponent v-bind=\"dropzoneAttrs()\"><slot /></DropzoneComponent>\n </div>\n </OptionalPortal>\n</template>\n","import { factory } from '@mantine-vue/core'\nimport DropzoneFullScreenComponent from './DropzoneFullScreen.vue'\nimport type { DropzoneFullScreenFactory } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\nexport const DropzoneFullScreen = factory<DropzoneFullScreenFactory>(DropzoneFullScreenComponent, {\n classes,\n})\nexport type * from './DropzoneFullScreen.types'\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 './components/Dropzone'\nimport { DropzoneFullScreen } from './components/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 './components/DropzoneStatus'\nexport { useDropzone } from './use-dropzone'\nexport * from './mime-types'\nexport * from './utils'\n\nexport type {\n DropzoneFullScreenEmits,\n DropzoneFullScreenProps,\n DropzoneFullScreenStylesNames,\n} from './components/DropzoneFullScreen'\nexport type {\n DropzoneCssVariables,\n DropzoneEmits,\n DropzoneProps,\n DropzoneStylesNames,\n DropzoneVariant,\n} from './components/Dropzone'\nexport type {\n DropzoneAcceptProps,\n DropzoneIdleProps,\n DropzoneRejectProps,\n} from './components/DropzoneStatus'\nexport type { DropzoneContextValue } from './Dropzone.context'\nexport type { UseDropzoneOptions } from './use-dropzone'\nexport type { Accept, DropEvent, FileError, FileRejection, FileWithPath } from './types'\n"],"mappings":";;;;;AAQA,IAAa,CAAC,wBAAwB,uBAAA,GAAA,kBAAA,mBACpC,0CACF;;;ACRA,SAAS,eAAe,MAAY,MAA6B;CAC/D,MAAM,eAAe;CACrB,MAAM,eAAe,QAAS,KAAa,sBAAsB,KAAK;CAEtE,IAAI,aAAa,SAAS,KAAA,GACxB,IAAI;EACF,OAAO,eAAe,cAAc,QAAQ;GAC1C,OAAO;GACP,UAAU;GACV,cAAc;GACd,YAAY;EACd,CAAC;CACH,QAAQ,CAGR;CAGF,OAAO;AACT;AAEA,eAAe,qBAAqB,MAAiD;CAGnF,MAAM,QAAS,KAAa,mBAAmB;CAE/C,IAAI,OAAO,aACT,OAAO,mBAAmB,KAAK;CAGjC,MAAM,OAAO,KAAK,UAAU;CAC5B,OAAO,OAAO,CAAC,eAAe,IAAI,CAAC,IAAI,CAAC;AAC1C;AAEA,SAAS,mBAAmB,UAAe,OAAO,IAA6B;CAC7E,MAAM,SAAS,SAAS,aAAa;CAErC,OAAO,IAAI,SAAS,YAAY;EAC9B,MAAM,UAAiB,CAAC;EAExB,MAAM,oBAAoB;GACxB,OAAO,YACL,OAAO,UAAiB;IACtB,IAAI,MAAM,WAAW,GAAG;KAYtB,SAAQ,MAXY,QAAQ,IAC1B,QAAQ,KAAK,UACX,MAAM,cACF,mBAAmB,OAAO,GAAG,OAAO,SAAS,KAAK,EAAE,IACpD,IAAI,SAAyB,QAAQ;MACnC,MAAM,MAAM,SACV,IAAI,CAAC,eAAe,MAAM,GAAG,OAAO,SAAS,KAAK,GAAG,KAAK,MAAM,CAAC,CAAC,CACpE;KACF,CAAC,CACP,CACF,GACc,KAAK,CAAC;KACpB;IACF;IAEA,QAAQ,KAAK,GAAG,KAAK;IACrB,YAAY;GACd,SACM,QAAQ,CAAC,CAAC,CAClB;EACF;EAEA,YAAY;CACd,CAAC;AACH;AAEA,eAAe,iBAAiB,cAAqD;CACnF,IAAI,aAAa,SAAS,aAAa,MAAM,SAAS,GAAG;EACvD,MAAM,QAAQ,MAAM,KAAK,aAAa,KAAK,EAAE,QAAQ,SAAS,KAAK,SAAS,MAAM;EAElF,QAAO,MADa,QAAQ,IAAI,MAAM,IAAI,oBAAoB,CAAC,GAClD,KAAK;CACpB;CAEA,OAAO,MAAM,KAAK,aAAa,SAAS,CAAC,CAAC,EAAE,KAAK,SAAS,eAAe,IAAI,CAAC;AAChF;AAEA,eAAsB,kBAAkB,OAA2C;CACjF,IAAI,MAAM,QAAQ,KAAK,GAGrB,QAAO,MADa,QAAQ,IAAI,MAAM,KAAK,WAAY,OAAe,QAAQ,CAAC,CAAC,GACnE,KAAK,SAAS,eAAe,IAAI,CAAC;CAGjD,MAAM,YAAY;CAClB,IAAI,UAAU,cACZ,OAAO,iBAAiB,UAAU,YAAY;CAGhD,MAAM,SAAS,MAAM;CACrB,IAAI,QAAQ,OACV,OAAO,MAAM,KAAK,OAAO,KAAK,EAAE,KAAK,SAAS,eAAe,IAAI,CAAC;CAGpE,OAAO,CAAC;AACV;;;AClGA,IAAa,oBAAoB;AACjC,IAAa,iBAAiB;AAC9B,IAAa,iBAAiB;AAC9B,IAAa,iBAAiB;AAE9B,IAAa,YAAY;CACvB,iBAAiB;CACjB,cAAc;CACd,cAAc;CACd,cAAc;AAChB;AAEA,IAAa,8BAA8B,SAAS,OAAkB;CACpE,MAAM,YAAY,OAAO,MAAM,GAAG;CAElC,OAAO;EAAE,MAAM;EAAmB,SAAS,qBAD/B,UAAU,SAAS,IAAI,UAAU,UAAU,KAAK,IAAI,MAAM,UAAU;CACV;AACxE;AAEA,IAAa,2BAA2B,aAAgC;CACtE,MAAM;CACN,SAAS,uBAAuB,QAAQ,GAAG,YAAY,IAAI,SAAS;AACtE;AAEA,IAAa,2BAA2B,aAAgC;CACtE,MAAM;CACN,SAAS,wBAAwB,QAAQ,GAAG,YAAY,IAAI,SAAS;AACvE;AAEA,IAAa,2BAAsC;CACjD,MAAM;CACN,SAAS;AACX;AAEA,SAAS,UAAU,OAAyB;CAC1C,OAAO,UAAU,KAAA,KAAa,UAAU;AAC1C;AAEA,SAAS,WAAW,MAAwC,eAAiC;CAC3F,IAAI,CAAC,eACH,OAAO;CAGT,MAAM,WAAW,KAAK,QAAQ;CAC9B,MAAM,YAAY,KAAK,QAAQ,IAAI,YAAY;CAC/C,MAAM,eAAe,SAAS,QAAQ,SAAS,EAAE;CAEjD,OAAO,cACJ,MAAM,GAAG,EACT,KAAK,SAAS,KAAK,KAAK,EAAE,YAAY,CAAC,EACvC,MAAM,SAAS;EACd,IAAI,KAAK,WAAW,GAAG,GACrB,OAAO,SAAS,YAAY,EAAE,SAAS,IAAI;EAE7C,IAAI,KAAK,SAAS,IAAI,GACpB,OAAO,iBAAiB,KAAK,QAAQ,SAAS,EAAE;EAElD,OAAO,aAAa;CACtB,CAAC;AACL;;;;;;AAOA,SAAgB,gCAAgC,MAAoB;CAClE,OAAO,KAAK,SAAS,MAAM,OAAO,KAAK,cAAc;AACvD;AAEA,SAAgB,aACd,MACA,QAC6B;CAC7B,MAAM,eACH,KAAa,SAAS,4BACvB,WAAW,MAAa,MAAM,KAC9B,gCAAgC,IAAI;CAEtC,OAAO,CAAC,cAAc,eAAe,OAAO,2BAA2B,MAAM,CAAC;AAChF;AAEA,SAAgB,cACd,MACA,SACA,SAC6B;CAC7B,IAAI,UAAU,KAAK,IAAI;MACjB,UAAU,OAAO,KAAK,UAAU,OAAO,GAAG;GAC5C,IAAI,KAAK,OAAO,SAAU,OAAO,CAAC,OAAO,wBAAwB,OAAQ,CAAC;GAC1E,IAAI,KAAK,OAAO,SAAU,OAAO,CAAC,OAAO,wBAAwB,OAAQ,CAAC;EAC5E,OAAO,IAAI,UAAU,OAAO,KAAK,KAAK,OAAO,SAC3C,OAAO,CAAC,OAAO,wBAAwB,OAAQ,CAAC;OAC3C,IAAI,UAAU,OAAO,KAAK,KAAK,OAAO,SAC3C,OAAO,CAAC,OAAO,wBAAwB,OAAQ,CAAC;CAAA;CAGpD,OAAO,CAAC,MAAM,IAAI;AACpB;AAYA,SAAgB,iBAAiB,EAC/B,OACA,QACA,SACA,SACA,UACA,UACA,aACmC;CACnC,IACG,CAAC,YAAY,MAAM,SAAS,KAC5B,aAAa,YAAY,MAAM,KAAK,MAAM,SAAS,UAEpD,OAAO;CAGT,OAAO,MAAM,OAAO,SAAS;EAC3B,MAAM,CAAC,YAAY,aAAa,MAAM,MAAM;EAC5C,MAAM,CAAC,aAAa,cAAc,MAAM,SAAS,OAAO;EACxD,MAAM,eAAe,YAAY,UAAU,IAAI,IAAI;EACnD,OAAO,YAAY,aAAa,CAAC;CACnC,CAAC;AACH;AAEA,SAAgB,eAAe,OAAmC;CAChE,MAAM,eAAgB,MAAoB;CAC1C,IAAI,CAAC,cAAc;EACjB,MAAM,SAAS,MAAM;EACrB,OAAO,CAAC,CAAC,UAAU,CAAC,CAAC,OAAO;CAC9B;CACA,OAAO,MAAM,UAAU,KAAK,KAC1B,aAAa,SAAS,CAAC,IACtB,SAAiB,SAAS,WAAW,SAAS,wBACjD;AACF;AAEA,SAAgB,4BAAqC;CACnD,OAAO,OAAO,WAAW,eAAe,wBAAwB;AAClE;;AAGA,SAAgB,wBACd,QACuD;CACvD,IAAI,CAAC,UAAU,MAAM,GACnB;CAOF,OAAO,CAAC;EAAE,aAAa;EAAS,QAJR,OAAO,QAAQ,MAAO,EAC3C,QAAQ,CAAC,UAAU,SAAS,WAAW,QAAQ,KAAK,MAAM,QAAQ,GAAG,KAAK,IAAI,MAAM,KAAK,CAAC,EAC1F,QAAgB,KAAK,CAAC,UAAU,UAAU;GAAE,GAAG;IAAM,WAAW;EAAI,IAAI,CAAC,CAEpC;CAAgB,CAAC;AAC3D;;AAGA,SAAgB,uBAAuB,QAAqC;CAC1E,IAAI,CAAC,UAAU,MAAM,GACnB;CAGF,OAAO,OAAO,QAAQ,MAAO,EAC1B,QAAkB,KAAK,CAAC,UAAU,SAAS;EAAC,GAAG;EAAK;EAAU,GAAG;CAAG,GAAG,CAAC,CAAC,EACzE,QAAQ,MAAM,WAAW,CAAC,KAAK,MAAM,CAAC,CAAC,EACvC,KAAK,GAAG;AACb;AAEA,SAAgB,QAAQ,GAAqB;CAC3C,OACE,aAAa,iBACZ,EAAE,SAAS,gBAAiB,EAAU,SAAU,EAAU;AAE/D;AAEA,SAAgB,gBAAgB,GAAqB;CACnD,OACE,aAAa,iBACZ,EAAE,SAAS,mBAAoB,EAAU,SAAU,EAAU;AAElE;AAEA,SAAgB,WAAW,GAAoB;CAC7C,OACE,MAAM,aACN,MAAM,aACN,MAAM,aACN,MAAM,YACN,MAAM,mBACN,iBAAiB,KAAK,CAAC;AAE3B;AAEA,SAAgB,MAAM,GAAoB;CACxC,OAAO,cAAc,KAAK,CAAC;AAC7B;;;ACpIA,SAAgB,YAAY,SAA6B;CACvD,MAAM,WAAA,GAAA,IAAA,KAAkC,IAAI;CAC5C,MAAM,YAAA,GAAA,IAAA,KAAwC,IAAI;CAElD,MAAM,SAAA,GAAA,IAAA,UAAiB;EACrB,WAAW;EACX,oBAAoB;EACpB,cAAc;EACd,cAAc;EACd,cAAc;CAChB,CAAC;CAED,IAAI,cAA6B,CAAC;CAElC,MAAM,mBACJ,OAAO,WAAW,eAClB,OAAO,mBACP,CAAC,CAAC,QAAQ,iBAAiB,KAC3B,0BAA0B;CAE5B,MAAM,cAAA,GAAA,IAAA,gBAA4B,uBAAuB,QAAQ,SAAS,CAAC,CAAC;CAC5E,MAAM,eAAA,GAAA,IAAA,gBAA6B,wBAAwB,QAAQ,SAAS,CAAC,CAAC;CAE9E,MAAM,uBAAqB,WACxB,QAAQ,oBAAoB,KAAK,mBAA0B,KAAK;CAEnE,MAAM,SAAS,UAAmB;EAChC,IAAI,QAAQ,SAAS,QAAQ,QAAQ,KAAK;OACrC,QAAQ,MAAM,KAAK;CAC1B;CAEA,MAAM,mBAAmB,UAAiB;EACxC,IAAI,QAAQ,uBAAuB,GAAG,MAAM,gBAAgB;CAC9D;CAIA,MAAM,sBAAsB;EAC1B,IAAI,CAAC,oBAAoB,MAAM,oBAC7B,iBAAiB;GACf,IAAI,SAAS,SAAS,CAAC,SAAS,MAAM,OAAO,QAAQ;IACnD,MAAM,qBAAqB;IAC3B,QAAQ,qBAAqB;GAC/B;EACF,GAAG,GAAG;CAEV;CAEA,MAAM,sBAAsB,UAAqB,MAAM,eAAe;CACtE,MAAM,kBAAkB,UAAqB;EAC3C,IAAI,QAAQ,SAAS,MAAM,UAAU,QAAQ,MAAM,SAAS,MAAM,MAAc,GAC9E;EAEF,MAAM,eAAe;EACrB,cAAc,CAAC;CACjB;CAEA,CAAA,GAAA,IAAA,iBAAgB;EACd,OAAO,iBAAiB,SAAS,eAAe,KAAK;EACrD,IAAI,QAAQ,wBAAwB,KAAK,MAAM;GAC7C,SAAS,iBAAiB,YAAY,oBAAoB,KAAK;GAC/D,SAAS,iBAAiB,QAAQ,gBAAgB,KAAK;EACzD;EACA,KAAK,QAAQ,YAAY,KAAK,UAAU,CAAC,QAAQ,WAAW,GAC1D,QAAQ,OAAO,MAAM;CAEzB,CAAC;CAED,CAAA,GAAA,IAAA,mBAAkB;EAChB,OAAO,oBAAoB,SAAS,eAAe,KAAK;EACxD,SAAS,oBAAoB,YAAY,kBAAkB;EAC3D,SAAS,oBAAoB,QAAQ,cAAc;CACrD,CAAC;CAED,MAAM,YAAY,OAAuB,UAA4B;EACnE,MAAM,gBAAgC,CAAC;EACvC,MAAM,iBAAkC,CAAC;EACzC,MAAM,UAAU,QAAQ,UAAU;EAClC,MAAM,UAAU,QAAQ,UAAU;EAClC,MAAM,WAAW,QAAQ,WAAW,KAAK;EACzC,MAAM,WAAW,QAAQ,WAAW;EACpC,MAAM,YAAY,QAAQ,YAAY;EAEtC,MAAM,SAAS,SAAS;GACtB,MAAM,CAAC,UAAU,eAAe,aAAa,MAAM,WAAW,KAAK;GACnE,MAAM,CAAC,WAAW,aAAa,cAAc,MAAM,SAAS,OAAO;GACnE,MAAM,eAAe,YAAY,UAAU,IAAI,IAAI;GAEnD,IAAI,YAAY,aAAa,CAAC,cAC5B,cAAc,KAAK,IAAI;QAClB;IACL,MAAM,SAAS,CAAC,aAAa,SAAS,EAAE,QAAQ,MAAsB,CAAC,CAAC,CAAC;IACzE,IAAI,cACF,OAAO,KAAK,GAAI,MAAM,QAAQ,YAAY,IAAI,eAAe,CAAC,YAAY,CAAE;IAC9E,eAAe,KAAK;KAAE;KAAM;IAAO,CAAC;GACtC;EACF,CAAC;EAED,IACG,CAAC,YAAY,cAAc,SAAS,KACpC,aAAa,YAAY,MAAM,KAAK,cAAc,SAAS,UAC5D;GACA,cAAc,SAAS,SACrB,eAAe,KAAK;IAAE;IAAM,QAAQ,CAAC,wBAAwB;GAAE,CAAC,CAClE;GACA,cAAc,SAAS;EACzB;EAEA,QAAQ,SAAS,eAAe,gBAAgB,KAAK;EACrD,IAAI,eAAe,SAAS,GAAG,QAAQ,iBAAiB,gBAAgB,KAAK;EAC7E,IAAI,cAAc,SAAS,GAAG,QAAQ,iBAAiB,eAAe,KAAK;CAC7E;CAEA,MAAM,iBAAiB,UAAqB;EAC1C,MAAM,eAAe;EACrB,gBAAgB,KAAK;EACrB,cAAc,CAAC,GAAG,aAAa,MAAM,MAAqB;EAE1D,IAAI,eAAe,KAAK,GACtB,QAAQ,QAAQ,oBAAkB,KAAK,CAAC,EACrC,MAAM,UAAU;GACf,MAAM,eACJ,MAAM,SAAS,KACf,iBAAiB;IACf;IACA,QAAQ,WAAW;IACnB,SAAS,QAAQ,UAAU;IAC3B,SAAS,QAAQ,UAAU;IAC3B,UAAU,QAAQ,WAAW,KAAK;IAClC,UAAU,QAAQ,WAAW;IAC7B,WAAW,QAAQ,YAAY;GACjC,CAAC;GACH,MAAM,eAAe,MAAM,SAAS,KAAK,CAAC;GAE1C,MAAM,eAAe;GACrB,MAAM,eAAe;GACrB,MAAM,eAAe;GAErB,QAAQ,cAAc,KAAK;EAC7B,CAAC,EACA,MAAM,KAAK;CAElB;CAEA,MAAM,gBAAgB,UAAqB;EACzC,MAAM,eAAe;EACrB,gBAAgB,KAAK;EAErB,MAAM,WAAW,eAAe,KAAK;EACrC,IAAI,YAAY,MAAM,cACpB,IAAI;GACF,MAAM,aAAa,aAAa;EAClC,QAAQ,CAER;EAEF,IAAI,UAAU,QAAQ,aAAa,KAAK;CAC1C;CAEA,MAAM,iBAAiB,UAAqB;EAC1C,MAAM,eAAe;EACrB,gBAAgB,KAAK;EAErB,MAAM,UAAU,YAAY,QACzB,WAAW,QAAQ,SAAS,QAAQ,MAAM,SAAS,MAAc,CACpE;EACA,MAAM,YAAY,QAAQ,QAAQ,MAAM,MAAqB;EAC7D,IAAI,cAAc,IAAI,QAAQ,OAAO,WAAW,CAAC;EACjD,cAAc;EAEd,IAAI,QAAQ,SAAS,GAAG;EAExB,MAAM,eAAe;EACrB,MAAM,eAAe;EACrB,MAAM,eAAe;EAErB,IAAI,eAAe,KAAK,GAAG,QAAQ,cAAc,KAAK;CACxD;CAEA,MAAM,YAAY,UAA6B;EAC7C,MAAM,eAAe;EACrB,gBAAgB,KAAK;EACrB,cAAc,CAAC;EAEf,IAAI,eAAe,KAAkB,GACnC,QAAQ,QAAQ,oBAAkB,KAAkB,CAAC,EAClD,MAAM,UAAU,SAAS,OAAO,KAAkB,CAAC,EACnD,MAAM,KAAK;EAGhB,MAAM,eAAe;EACrB,MAAM,eAAe;EACrB,MAAM,eAAe;CACvB;CAEA,MAAM,uBAAuB;EAC3B,IAAI,QAAQ,WAAW,GAAG;EAE1B,IAAI,kBAAkB;GACpB,MAAM,qBAAqB;GAC3B,QAAQ,mBAAmB;GAC3B,MAAM,OAAO;IAAE,UAAU,QAAQ,WAAW,KAAK;IAAM,OAAO,YAAY;GAAM;GAC/E,OACE,mBAAmB,IAAI,EACvB,MAAM,YAAiB,oBAAkB,OAAO,CAAC,EACjD,MAAM,UAA0B;IAC/B,SAAS,OAAO,IAAI;IACpB,MAAM,qBAAqB;GAC7B,CAAC,EACA,OAAO,MAAe;IACrB,IAAI,QAAQ,CAAC,GAAG;KACd,QAAQ,qBAAqB;KAC7B,MAAM,qBAAqB;IAC7B,OAAO,IAAI,gBAAgB,CAAC,GAC1B,IAAI,SAAS,OAAO;KAClB,SAAS,MAAM,QAAQ;KACvB,SAAS,MAAM,MAAM;IACvB,OACE,sBACE,IAAI,MAAM,qEAAqE,CACjF;SAGF,MAAM,CAAC;GAEX,CAAC;GACH;EACF;EAEA,IAAI,SAAS,OAAO;GAClB,MAAM,qBAAqB;GAC3B,QAAQ,mBAAmB;GAC3B,SAAS,MAAM,QAAQ;GACvB,SAAS,MAAM,MAAM;EACvB;CACF;CAEA,MAAM,eAAe,UAAyB;EAC5C,IAAI,CAAC,QAAQ,SAAS,QAAQ,UAAU,MAAM,QAAQ;EACtD,IAAI,MAAM,QAAQ,OAAO,MAAM,QAAQ,SAAS;GAC9C,MAAM,eAAe;GACrB,eAAe;EACjB;CACF;CAEA,MAAM,kBAAkB;EACtB,MAAM,YAAY;CACpB;CACA,MAAM,iBAAiB;EACrB,MAAM,YAAY;CACpB;CACA,MAAM,kBAAkB;EACtB,IAAI,CAAC,QAAQ,UAAU,GAAG,eAAe;CAC3C;CACA,MAAM,kBAAkB,UAAiB;EACvC,MAAM,gBAAgB;CACxB;CACA,MAAM,mBAAmB,UAAiB;EACxC,SAAS,KAAK;CAChB;CAEA,MAAM,kBAAsD,OAC1D,QAAQ,WAAW,IAAI,OAAO;CAChC,MAAM,0BAA8D,OAClE,QAAQ,aAAa,IAAI,OAAO,eAAe,EAAE;CACnD,MAAM,sBAA0D,OAC9D,QAAQ,SAAS,IAAI,OAAO,eAAe,EAAE;CAE/C,MAAM,gBAAgB,YAAiC,CAAC,OAA0B;EAChF,WAAW,uBAAuB,WAAW;EAC7C,SAAS,uBAAuB,SAAS;EACzC,QAAQ,uBAAuB,QAAQ;EACvC,SAAS,eAAe,SAAS;EACjC,aAAa,mBAAmB,aAAa;EAC7C,YAAY,mBAAmB,YAAY;EAC3C,aAAa,mBAAmB,aAAa;EAC7C,QAAQ,mBAAmB,QAAe;EAC1C,MAAM;EACN,MAAM,OAAY;GAChB,QAAQ,QAAQ,IAAI,OAAO,MAAM;EACnC;EACA,GAAI,CAAC,QAAQ,WAAW,KAAK,CAAC,QAAQ,aAAa,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC;EAC1E,GAAG;CACL;CAEA,MAAM,iBAAiB,YAAiC,CAAC,OAA2B;EAClF,MAAM;EACN,QAAQ,WAAW;EACnB,UAAU,QAAQ,WAAW,KAAK;EAClC,OAAO;GACL,QAAQ;GACR,MAAM;GACN,UAAU;GACV,QAAQ;GACR,QAAQ;GACR,UAAU;GACV,SAAS;GACT,UAAU;GACV,OAAO;GACP,YAAY;EACd;EACA,UAAU,eAAe,eAAe;EACxC,SAAS,eAAe,cAAc;EACtC,UAAU;EACV,MAAM,OAAY;GAChB,SAAS,QAAQ,IAAI,OAAO,MAAM;EACpC;EACA,GAAG;CACL;CAEA,OAAO;EACL;EACA;EACA;EACA,YAAA,GAAA,IAAA,gBAA0B,MAAM,aAAa,CAAC,QAAQ,WAAW,CAAC;EAClE,eAAA,GAAA,IAAA,gBAA6B,MAAM,YAAY;EAC/C,eAAA,GAAA,IAAA,gBAA6B,MAAM,YAAY;EAC/C,eAAA,GAAA,IAAA,gBAA6B,MAAM,YAAY;EAC/C;EACA;EACA,YAAY,eAAe,cAAc,IAAI;CAC/C;AACF;;;;;;;;;;AEzYA,IAAM,gBAAA,GAAA,kBAAA,qBACH,OAAO,EAAE,QAAQ,SAAS,aAAa,kBAAkB;CACxD,MAAM,eAAe,MAAM,qBAAqB;EAC9C,OAAO,eAAe,MAAM;EAC5B;EACA;CACF,CAAC;CACD,MAAM,eAAe,MAAM,qBAAqB;EAAE,OAAO,eAAe;EAAO;EAAO;CAAQ,CAAC;CAC/F,OAAO,EACL,MAAM;EACJ,sBAAA,GAAA,kBAAA,WAA+B,MAAM;EACrC,2BAA2B,aAAa;EACxC,wBAAwB,aAAa;EACrC,2BAA2B,aAAa;EACxC,wBAAwB,aAAa;CACvC,EACF;AACF,CACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAeA,MAAM,WAAW;EAejB,MAAM,OAAO;EACb,MAAM,SAAA,GAAA,kBAAA,UAAiB,YAAY,MAAM,QAAQ;EACjD,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,aAAA,GAAA,kBAAA,WAAsB;GAC1B,MAAM;GACN,SAAA;GACA;GACA,WAAW,MAAM;GACjB,OAAO,MAAM;GACb,YAAY,MAAM;GAClB,QAAQ,MAAM;GACd,MAAM,MAAM;GACZ;GACA,UAAU,MAAM;EAClB,CAAC;EACD,MAAM,KAAK,YAAY;GACrB,cACE,MAAM,QAAQ,MAAM,MAAM,IACtB,MAAM,OAAO,QAAQ,QAAgB,SAAiB;IAAE,GAAG;KAAS,MAAM,CAAC;GAAE,IAAI,CAAC,CAAC,IAClF,MAAM;GACb,gBAAgB,MAAM,YAAY,MAAM;GACxC,gBAAgB,MAAM;GACtB,eAAe,MAAM;GACrB,gBAAgB,MAAM;GACtB,iBAAiB,MAAM;GACvB,eAAe,CAAC,MAAM;GACtB,cAAc,CAAC,MAAM;GACrB,4BAA4B,CAAC,MAAM;GACnC,kBAAkB,CAAC,MAAM;GACzB,6BAA6B,MAAM;GACnC,sBAAsB,MAAM;GAC5B,iBAAiB,MAAM;GACvB,yBAAyB,MAAM;GAC/B,SAAS,OAAO,aAAa,KAAK,YAAY,OAAO,QAAQ;GAC7D,iBAAiB,UAAU,KAAK,QAAQ,KAAK;GAC7C,iBAAiB,aAAa,KAAK,UAAU,QAAQ;GACrD,cAAc,UAAU,KAAK,cAAc,KAAK;GAChD,cAAc,UAAU,KAAK,cAAc,KAAK;GAChD,aAAa,UAAU,KAAK,aAAa,KAAK;GAC9C,0BAA0B,KAAK,oBAAoB;GACnD,wBAAwB,KAAK,kBAAkB;EACjD,CAAC;EACD,CAAA,GAAA,IAAA,aACQ,MAAM,UACX,WAAA,GAAA,mBAAA,WAAoB,OAAO,GAAG,IAAI,GACnC,EAAE,WAAW,KAAK,CACpB;EACA,MAAM,YAAA,GAAA,IAAA,gBAA0B,GAAG,aAAa,SAAS,GAAG,aAAa,KAAK;EAC9E,MAAM,YAAA,GAAA,IAAA,gBAA0B,GAAG,aAAa,SAAS,GAAG,aAAa,KAAK;EAC9E,MAAM,QAAA,GAAA,IAAA,gBAAsB,CAAC,SAAS,SAAS,CAAC,SAAS,KAAK;EAC9D,uBAAuB;GACrB,IAAI,SAAS;IACX,OAAO,SAAS;GAClB;GACA,IAAI,SAAS;IACX,OAAO,SAAS;GAClB;GACA,IAAI,OAAO;IACT,OAAO,KAAK;GACd;EACF,CAAC;EACD,MAAM,mBAAwB;GAC5B,GAAG,GAAG,aAAa;GACnB,GAAG,UAAU,MAAM;GACnB,GAAG;GACH,KAAK,CACH;IACE,QAAQ,SAAS;IACjB,QAAQ,SAAS;IACjB,MAAM,KAAK;IACX,UAAU,MAAM;IAChB,SAAS,MAAM;IACf,qBAAqB,MAAM;GAC7B,GACA,MAAM,GACR;EACF;EACA,MAAM,oBAAyB;GAAE,GAAG,GAAG,cAAc,MAAM,UAAU;GAAG,MAAM,MAAM;EAAK;EAEzF,MAAM,eAAA,GAAA,IAAA,KAAkC,IAAI;EAE5C,MAAM,cAAc,SAAyB;GAC3C,YAAY,QAAQ;GACpB,CAAA,GAAA,mBAAA,WAAU,MAAM,SAAS,IAAI;EAC/B;EAEA,SAAa,EAAE,YAAY,CAAC;;oEAkBpB,kBAAA,GAAA,IAAA,GAAA,IAAA,YAAA,EAdA,SAAS,WAAU,GAAU,UAAS,CAAA,GAAA;oCAMxC;yCAAA,kBAAA,cAAA,GAAA;MAJC,UAAA,GAAA,IAAA,OAAS,KAAA,EAAM;MACf,iBAAa,EAAA,SAAA,GAAA,IAAA,OAAY,KAAA,EAAM,OAAM;MACrC,WAAA,GAAA,IAAA,OAAU,KAAA,EAAM;MAChB,iBAAA,GAAA,IAAA,OAAc,KAAA,EAAM;;;;;;;iCAEQ,UAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,oBAAhB,WAAU,CAAA,CAAA,GAAA,MAAA,EAAA;iCAMnB,QAAA,GAAA,IAAA,aAAA,GAAA,IAAA,OAAA,SAAA,EAJa,OAAA,GAAA,EAChB,+BAAA,GAAA,IAAA,OAA4B,KAAA,EAAM,uBAAuB,KAAA,EAAA,CAAA,GAAA,EAAA,GAAA,IAAA,YAElD,KAAA,QAAA,SAAA,CAAA,GAAA,IAAA,UAAA;;;;;;;;;;;;;;;;;;;;;;;;;EElJd,MAAM,QAAQ;EACd,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,MAAM,mBAAmB;EAC/B,MAAM,sBAAsB;GAC1B,MAAM,eAAe,MAAM,UAAU;GACrC,MAAM,WAAW,MAAM,aAAa,KAAA,IAAY,MAAM,WAAW;GACjE,MAAM,QACJ,MAAM,QAAQ,QAAQ,KAAK,SAAS,WAAW,IAAI,SAAS,KAAK;GACnE,QAAA,GAAA,IAAA,SAAe,KAAK,KAAK,CAAC,MAAM,QAAQ,KAAK,KAAA,GAAA,IAAA,YAAe,OAAO,KAAK,IAAI;EAC9E;;yBAImB,GAAA,EAAI,MAAM,YAAA,GAAA,IAAA,SAAmB,cAAa,CAAA,MAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,yBAAU,aAAa,GAAA,EAAA,KAAA,EAAA,CAAA,MAAA,GAAA,IAAA,OACjE,GAAA,EAAI,MAAM,YAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,oBAAgE,SAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,YAAA,EAAA,KAAA,EAAA,IAAA,GAAA,IAAA,OAA/C,KAAA,CAAK,CAAA,GAAA,GAAA,GAAA,IAAA,WAAA,IAAA,GAAA,IAAA,cAAA,GAAA,IAAA,yBAAkB,aAAa,CAAA,EAAA,GAAA,EAAA,MAAA,GAAA,IAAA,oBAAA,IAAA,IAAA;;;;;;;;;;;;;;;;;;;EEflF,MAAM,SAAA,GAAA,IAAA,UAAiB;;qDAG6E,yBAAA,GAAA,IAAA,YAAA;IAAA,GAArEA,KAAAA;IAAM,GAAKC,KAAAA;GAAM,GAAA;IAAI,QAAO;IAAU,WAAA,GAAA,IAAA,OAAU,KAAA,EAAM,UAAO;;;;;;;;;;;;;;;;;;;;EEH5F,MAAM,SAAA,GAAA,IAAA,UAAiB;;qDAG6E,yBAAA,GAAA,IAAA,YAAA;IAAA,GAArEC,KAAAA;IAAM,GAAKC,KAAAA;GAAM,GAAA;IAAI,QAAO;IAAU,WAAA,GAAA,IAAA,OAAU,KAAA,EAAM,UAAO;;;;;;;;;;;;;;;;;;;;EEH5F,MAAM,SAAA,GAAA,IAAA,UAAiB;;qDAG2E,yBAAA,GAAA,IAAA,YAAA;IAAA,GAAnEC,KAAAA;IAAM,GAAKC,KAAAA;GAAM,GAAA;IAAI,QAAO;IAAQ,WAAA,GAAA,IAAA,OAAU,KAAA,EAAM,UAAO;;;;;;;AEJ1F,IAAa,cAAA,GAAA,kBAAA,SAAoC,kBAAmB;CAClE,SAAA;CACA;CACA,QAAQ;CACR,MAAM;CACN,QAAQ;AACV,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ECFD,MAAM,WAAW;EASjB,MAAM,OAAO;EACb,MAAM,SAAA,GAAA,kBAAA,UAAiB,sBAAsB,MAAM,QAAQ;EAC3D,MAAM,SAAA,GAAA,IAAA,UAAiB;EACvB,MAAM,aAAA,GAAA,kBAAA,WAAsB;GAC1B,MAAM;GACN,SAAA;GACA;GACA,WAAW,MAAM;GACjB,OAAO,MAAM;GACb,YAAY,MAAM;GAClB,QAAQ,MAAM;GACd,UAAU,MAAM;GAChB,cAAc;EAChB,CAAC;EACD,MAAM,WAAA,GAAA,IAAA,KAAc,CAAC;EACrB,MAAM,CAAC,SAAS,EAAE,MAAM,YAAA,GAAA,mBAAA,eAAyB,KAAK;EACtD,SAAS,QAAQ;GACf,MAAM;GACN,QAAQ,QAAQ;EAClB;EACA,SAAS,gBAAgB,OAAkB;GACzC,IAAI,MAAM,cAAc,MAAM,SAAS,OAAO,GAAG;IAC/C,QAAQ,SAAS;IACjB,KAAK;GACP;EACF;EACA,SAAS,kBAAkB;GACzB,QAAQ,QAAQ,KAAK,IAAI,GAAG,QAAQ,QAAQ,CAAC;EAC/C;EACA,CAAA,GAAA,IAAA,OAAM,UAAU,UAAU;GACxB,IAAI,UAAU,GAAG,MAAM;EACzB,CAAC;EACD,IAAI,WAAW;EACf,SAAS,SAAS;GAChB,IAAI,UAAU;GACd,SAAS,iBAAiB,aAAa,iBAAiB,KAAK;GAC7D,SAAS,iBAAiB,aAAa,iBAAiB,KAAK;GAC7D,WAAW;EACb;EACA,SAAS,SAAS;GAChB,IAAI,CAAC,UAAU;GACf,SAAS,oBAAoB,aAAa,iBAAiB,KAAK;GAChE,SAAS,oBAAoB,aAAa,iBAAiB,KAAK;GAChE,WAAW;EACb;EACA,CAAA,GAAA,IAAA,aACQ,MAAM,SACX,WAAW;GACV,OAAO;GACP,IAAI,QAAQ,OAAO;QACd,MAAM;EACb,GACA,EAAE,WAAW,KAAK,CACpB;EACA,CAAA,GAAA,IAAA,aAAY,MAAM;EAElB,MAAM,eAAA,GAAA,IAAA,KAAkC,IAAI;EAE5C,MAAM,cAAc,SAAmD;GACrE,MAAM,UAAW,QAAQ,SAAS,OAAO,KAAK,MAAM;GACpD,YAAY,QAAQ;GACpB,CAAA,GAAA,mBAAA,WAAU,MAAM,SAAS,OAAO;EAClC;EAEA,SAAa,EAAE,YAAY,CAAC;EAC5B,MAAM,sBAAsB;GAC1B,MAAM,OAAO,OAAO,YAClB,OAAO,QAAQ,KAAK,EAAE,QACnB,CAAC,SACA,CAAC;IAAC;IAAU;IAAU;IAAgB;IAAe;IAAc;GAAQ,EAAE,SAAS,GAAG,CAC7F,CACF;GACA,MAAM,EAAE,YAAY,WAAW;GAC/B,OAAO;IACL,GAAG;IACH,GAAG;IACH,iBAAiB;IACjB;IACA;IACA,OAAO,wBAAQ;IACf,SAAS,UAAiB;KACxB,KAAK,QAAQ,KAAK;KAClB,MAAM;IACR;IACA,WAAW,eAAsB;KAC/B,KAAK,UAAU,UAAU;KACzB,MAAM;IACR;IACA,YAAY,OAAc,eAAsB,KAAK,YAAY,OAAO,UAAU;IAClF,cAAc,UAAqB,KAAK,cAAc,KAAK;IAC3D,cAAc,UAAqB,KAAK,cAAc,KAAK;IAC3D,aAAa,UAAqB,KAAK,aAAa,KAAK;IACzD,0BAA0B,KAAK,oBAAoB;IACnD,wBAAwB,KAAK,kBAAkB;GACjD;EACF;;oEAmBmB,kBAAA,cAAA,IAAA,GAAA,IAAA,aAAA,GAAA,IAAA,OAAA,KAAA,EAfa,aAAW,EAAG,kBAAA,GAAA,IAAA,OAAe,KAAA,EAAM,aAAA,CAAA,GAAA;oCAczD,EAAA,GAAA,IAAA,oBAAA,QAAA,GAAA,IAAA,YAAA,EAZH,KAAK,WAAU,IAAA,GAAA,IAAA,OACC,SAAA,EAAS,cAAA,EAAA,OAAA;6BAAyD,OAAA,IAAO,IAAA;mCAAqC,OAAA,IAAO,QAAA;4BAAuC,KAAA,EAAM;iCAU3G,mBAAA,GAAA,IAAA,iBAAA,GAAA,IAAA,oBAA7C,cAAa,CAAA,CAAA,GAAA;qCAAY,EAAA,GAAA,IAAA,YAAA,KAAA,QAAA,SAAA,CAAA,CAAA;;;;;;;;;;AE9H1D,IAAa,sBAAA,GAAA,kBAAA,SAAwD,4BAA6B,EAChG,SAAA,wBACF,CAAC;;;ACLD,IAAa,aAAa;CAExB,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACL,MAAM;CACN,MAAM;CACN,MAAM;CACN,MAAM;CAGN,KAAK;CACL,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACL,KAAK;CACL,KAAK;CACL,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;CACL,MAAM;CACN,KAAK;AACP;AAEA,IAAa,kBAAkB;CAC7B,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;CACX,WAAW;AACb;AAEA,IAAa,gBAAgB,CAAC,WAAW,GAAG;AAC5C,IAAa,oBAAoB,CAAC,WAAW,KAAK,WAAW,IAAI;AACjE,IAAa,qBAAqB,CAAC,WAAW,KAAK,WAAW,IAAI;AAClE,IAAa,0BAA0B,CAAC,WAAW,KAAK,WAAW,IAAI;AACvE,IAAa,gBAAgB,CAAC,WAAW,GAAG;;;ACxC5C,OAAO,OAAO,YAAW,EAAE,YAAY,mBAAmB,CAAC;AAE3D,IAAa,WAAW"}
|
|
1
|
+
{"version":3,"file":"index.cjs","names":["$props","$attrs","$props","$attrs","$props","$attrs"],"sources":["../src/Dropzone.context.ts","../src/get-files-from-event.ts","../src/utils.ts","../src/use-dropzone.ts","../src/Dropzone.module.css","../src/components/Dropzone/Dropzone.vue","../src/components/Dropzone/Dropzone.vue","../src/components/DropzoneStatus/DropzoneStatus.vue","../src/components/DropzoneStatus/DropzoneStatus.vue","../src/components/DropzoneStatus/DropzoneAccept.vue","../src/components/DropzoneStatus/DropzoneAccept.vue","../src/components/DropzoneStatus/DropzoneReject.vue","../src/components/DropzoneStatus/DropzoneReject.vue","../src/components/DropzoneStatus/DropzoneIdle.vue","../src/components/DropzoneStatus/DropzoneIdle.vue","../src/components/Dropzone/index.ts","../src/components/DropzoneFullScreen/DropzoneFullScreen.vue","../src/components/DropzoneFullScreen/DropzoneFullScreen.vue","../src/components/DropzoneFullScreen/index.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 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","<script lang=\"ts\">\nimport { createVarsResolver, getRadius } from '@mantine-vue/core'\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 const rejectColors = theme.variantColorResolver({ color: rejectColor || 'red', theme, variant })\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)\nexport { varsResolver }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch } from 'vue'\nimport { Box, LoadingOverlay, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef } from '@mantine-vue/hooks'\nimport { provideDropzoneContext } from '../../Dropzone.context'\nimport { useDropzone } from '../../use-dropzone'\nimport type { Accept } from '../../types'\nimport type { DropzoneEmits, DropzoneProps } from './Dropzone.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'Dropzone', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneProps>(), {\n disabled: false,\n loading: false,\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 enablePointerEvents: false,\n variant: 'light',\n rejectColor: 'red',\n})\nconst emit = defineEmits<DropzoneEmits>()\nconst props = useProps('Dropzone', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n attrs,\n classNames: props.classNames,\n styles: props.styles,\n vars: props.vars,\n varsResolver,\n unstyled: props.unstyled,\n})\nconst dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((result: Accept, key: string) => ({ ...result, [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, rejected) => emit('drop-any', files, rejected),\n onDropAccepted: (files) => emit('drop', files),\n onDropRejected: (rejected) => emit('reject', rejected),\n onDragEnter: (event) => emit('drag-enter', event),\n onDragLeave: (event) => emit('drag-leave', event),\n onDragOver: (event) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n})\nwatch(\n () => props.openRef,\n (value) => assignRef(value, dz.open),\n { immediate: true },\n)\nconst accepted = computed(() => dz.isDragActive.value && dz.isDragAccept.value)\nconst rejected = computed(() => dz.isDragActive.value && dz.isDragReject.value)\nconst idle = computed(() => !accepted.value && !rejected.value)\nprovideDropzoneContext({\n get accept() {\n return accepted.value\n },\n get reject() {\n return rejected.value\n },\n get idle() {\n return idle.value\n },\n})\nconst rootAttrs = (): any => ({\n ...dz.getRootProps(),\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: accepted.value,\n reject: rejected.value,\n idle: idle.value,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n attrs.mod,\n ],\n})\nconst inputAttrs = (): any => ({ ...dz.getInputProps(props.inputProps), name: props.name })\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | null) => {\n rootElement.value = node\n assignRef(props.rootRef, node)\n}\n\ndefineExpose({ rootElement })\n</script>\n\n<template>\n <Box :rootRef=\"setRootRef\" v-bind=\"rootAttrs()\">\n <LoadingOverlay\n :visible=\"props.loading\"\n :overlay-props=\"{ radius: props.radius }\"\n :unstyled=\"props.unstyled\"\n :loader-props=\"props.loaderProps\"\n />\n <input v-bind=\"inputAttrs()\" />\n <div\n v-bind=\"getStyles('inner')\"\n :data-enable-pointer-events=\"props.enablePointerEvents || undefined\"\n >\n <slot />\n </div>\n </Box>\n</template>\n","<script lang=\"ts\">\nimport { createVarsResolver, getRadius } from '@mantine-vue/core'\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 const rejectColors = theme.variantColorResolver({ color: rejectColor || 'red', theme, variant })\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)\nexport { varsResolver }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch } from 'vue'\nimport { Box, LoadingOverlay, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef } from '@mantine-vue/hooks'\nimport { provideDropzoneContext } from '../../Dropzone.context'\nimport { useDropzone } from '../../use-dropzone'\nimport type { Accept } from '../../types'\nimport type { DropzoneEmits, DropzoneProps } from './Dropzone.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'Dropzone', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneProps>(), {\n disabled: false,\n loading: false,\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 enablePointerEvents: false,\n variant: 'light',\n rejectColor: 'red',\n})\nconst emit = defineEmits<DropzoneEmits>()\nconst props = useProps('Dropzone', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n attrs,\n classNames: props.classNames,\n styles: props.styles,\n vars: props.vars,\n varsResolver,\n unstyled: props.unstyled,\n})\nconst dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((result: Accept, key: string) => ({ ...result, [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, rejected) => emit('drop-any', files, rejected),\n onDropAccepted: (files) => emit('drop', files),\n onDropRejected: (rejected) => emit('reject', rejected),\n onDragEnter: (event) => emit('drag-enter', event),\n onDragLeave: (event) => emit('drag-leave', event),\n onDragOver: (event) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n})\nwatch(\n () => props.openRef,\n (value) => assignRef(value, dz.open),\n { immediate: true },\n)\nconst accepted = computed(() => dz.isDragActive.value && dz.isDragAccept.value)\nconst rejected = computed(() => dz.isDragActive.value && dz.isDragReject.value)\nconst idle = computed(() => !accepted.value && !rejected.value)\nprovideDropzoneContext({\n get accept() {\n return accepted.value\n },\n get reject() {\n return rejected.value\n },\n get idle() {\n return idle.value\n },\n})\nconst rootAttrs = (): any => ({\n ...dz.getRootProps(),\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: accepted.value,\n reject: rejected.value,\n idle: idle.value,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n attrs.mod,\n ],\n})\nconst inputAttrs = (): any => ({ ...dz.getInputProps(props.inputProps), name: props.name })\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | null) => {\n rootElement.value = node\n assignRef(props.rootRef, node)\n}\n\ndefineExpose({ rootElement })\n</script>\n\n<template>\n <Box :rootRef=\"setRootRef\" v-bind=\"rootAttrs()\">\n <LoadingOverlay\n :visible=\"props.loading\"\n :overlay-props=\"{ radius: props.radius }\"\n :unstyled=\"props.unstyled\"\n :loader-props=\"props.loaderProps\"\n />\n <input v-bind=\"inputAttrs()\" />\n <div\n v-bind=\"getStyles('inner')\"\n :data-enable-pointer-events=\"props.enablePointerEvents || undefined\"\n >\n <slot />\n </div>\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, isVNode, useAttrs, useSlots, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from '../../Dropzone.context'\nimport type { DropzoneStatusProps } from './DropzoneStatus.types'\n\ndefineOptions({ name: 'DropzoneStatus', inheritAttrs: false })\nconst props = defineProps<DropzoneStatusProps & { status: keyof DropzoneContextValue }>()\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst ctx = useDropzoneContext()\nconst renderContent = () => {\n const slotChildren = slots.default?.()\n const children = props.children !== undefined ? props.children : slotChildren\n const child: VNodeChild =\n Array.isArray(children) && children.length === 1 ? children[0] : children\n return isVNode(child) && !Array.isArray(child) ? cloneVNode(child, attrs) : child\n}\n</script>\n\n<template>\n <component v-if=\"ctx[props.status] && isVNode(renderContent())\" :is=\"renderContent\" />\n <span v-else-if=\"ctx[props.status]\" v-bind=\"attrs\"><component :is=\"renderContent\" /></span>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, isVNode, useAttrs, useSlots, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from '../../Dropzone.context'\nimport type { DropzoneStatusProps } from './DropzoneStatus.types'\n\ndefineOptions({ name: 'DropzoneStatus', inheritAttrs: false })\nconst props = defineProps<DropzoneStatusProps & { status: keyof DropzoneContextValue }>()\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst ctx = useDropzoneContext()\nconst renderContent = () => {\n const slotChildren = slots.default?.()\n const children = props.children !== undefined ? props.children : slotChildren\n const child: VNodeChild =\n Array.isArray(children) && children.length === 1 ? children[0] : children\n return isVNode(child) && !Array.isArray(child) ? cloneVNode(child, attrs) : child\n}\n</script>\n\n<template>\n <component v-if=\"ctx[props.status] && isVNode(renderContent())\" :is=\"renderContent\" />\n <span v-else-if=\"ctx[props.status]\" v-bind=\"attrs\"><component :is=\"renderContent\" /></span>\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneAcceptProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneAccept', inheritAttrs: false })\ndefineProps<DropzoneAcceptProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"accept\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneAcceptProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneAccept', inheritAttrs: false })\ndefineProps<DropzoneAcceptProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"accept\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneRejectProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneReject', inheritAttrs: false })\ndefineProps<DropzoneRejectProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"reject\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneRejectProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneReject', inheritAttrs: false })\ndefineProps<DropzoneRejectProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"reject\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneIdleProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneIdle', inheritAttrs: false })\ndefineProps<DropzoneIdleProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"idle\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneIdleProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneIdle', inheritAttrs: false })\ndefineProps<DropzoneIdleProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"idle\" :children=\"slots.default?.()\" />\n</template>\n","import { factory } from '@mantine-vue/core'\nimport DropzoneComponent, { varsResolver } from './Dropzone.vue'\nimport type { DropzoneFactory } from './Dropzone.types'\nimport { DropzoneAccept, DropzoneIdle, DropzoneReject } from '../DropzoneStatus'\nimport classes from '../../Dropzone.module.css'\nexport const Dropzone = factory<DropzoneFactory>(DropzoneComponent, {\n classes,\n varsResolver,\n Accept: DropzoneAccept,\n Idle: DropzoneIdle,\n Reject: DropzoneReject,\n})\nexport type * from './Dropzone.types'\n","<script setup lang=\"ts\">\nimport { onUnmounted, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue'\nimport { getDefaultZIndex, OptionalPortal, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef, useDisclosure } from '@mantine-vue/hooks'\nimport DropzoneComponent from '../Dropzone/Dropzone.vue'\nimport type { DropzoneFullScreenEmits, DropzoneFullScreenProps } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'DropzoneFullScreen', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneFullScreenProps>(), {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n})\nconst emit = defineEmits<DropzoneFullScreenEmits>()\nconst props = useProps('DropzoneFullScreen', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n attrs,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n})\nconst counter = ref(0)\nconst [visible, { open, close }] = useDisclosure(false)\nfunction reset() {\n close()\n counter.value = 0\n}\nfunction handleDragEnter(event: DragEvent) {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n}\nfunction handleDragLeave() {\n counter.value = Math.max(0, counter.value - 1)\n}\nwatch(counter, (value) => {\n if (value === 0) close()\n})\nlet attached = false\nfunction attach() {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n}\nfunction detach() {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n}\nwatch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n else reset()\n },\n { immediate: true },\n)\nonUnmounted(detach)\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | ComponentPublicInstance | null) => {\n const element = (node && '$el' in node ? node.$el : node) as Element | null\n rootElement.value = element\n assignRef(props.rootRef, element)\n}\n\ndefineExpose({ rootElement })\nconst dropzoneAttrs = () => {\n const rest = Object.fromEntries(\n Object.entries(props).filter(\n ([key]) =>\n !['active', 'zIndex', 'withinPortal', 'portalProps', 'classNames', 'styles'].includes(key),\n ),\n )\n const { classNames, styles } = props\n return {\n ...rest,\n ...attrs,\n activateOnClick: false,\n classNames,\n styles,\n class: classes.dropzone,\n onDrop: (files: any[]) => {\n emit('drop', files)\n reset()\n },\n onReject: (rejections: any[]) => {\n emit('reject', rejections)\n reset()\n },\n onDropAny: (files: any[], rejections: any[]) => emit('drop-any', files, rejections),\n onDragEnter: (event: DragEvent) => emit('drag-enter', event),\n onDragLeave: (event: DragEvent) => emit('drag-leave', event),\n onDragOver: (event: DragEvent) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n }\n}\n</script>\n\n<template>\n <OptionalPortal v-bind=\"props.portalProps\" :within-portal=\"props.withinPortal\">\n <div\n :ref=\"setRootRef\"\n v-bind=\"\n getStyles('fullScreen', {\n style: {\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n })\n \"\n >\n <DropzoneComponent v-bind=\"dropzoneAttrs()\"><slot /></DropzoneComponent>\n </div>\n </OptionalPortal>\n</template>\n","<script setup lang=\"ts\">\nimport { onUnmounted, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue'\nimport { getDefaultZIndex, OptionalPortal, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef, useDisclosure } from '@mantine-vue/hooks'\nimport DropzoneComponent from '../Dropzone/Dropzone.vue'\nimport type { DropzoneFullScreenEmits, DropzoneFullScreenProps } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'DropzoneFullScreen', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneFullScreenProps>(), {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n})\nconst emit = defineEmits<DropzoneFullScreenEmits>()\nconst props = useProps('DropzoneFullScreen', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n attrs,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n})\nconst counter = ref(0)\nconst [visible, { open, close }] = useDisclosure(false)\nfunction reset() {\n close()\n counter.value = 0\n}\nfunction handleDragEnter(event: DragEvent) {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n}\nfunction handleDragLeave() {\n counter.value = Math.max(0, counter.value - 1)\n}\nwatch(counter, (value) => {\n if (value === 0) close()\n})\nlet attached = false\nfunction attach() {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n}\nfunction detach() {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n}\nwatch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n else reset()\n },\n { immediate: true },\n)\nonUnmounted(detach)\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | ComponentPublicInstance | null) => {\n const element = (node && '$el' in node ? node.$el : node) as Element | null\n rootElement.value = element\n assignRef(props.rootRef, element)\n}\n\ndefineExpose({ rootElement })\nconst dropzoneAttrs = () => {\n const rest = Object.fromEntries(\n Object.entries(props).filter(\n ([key]) =>\n !['active', 'zIndex', 'withinPortal', 'portalProps', 'classNames', 'styles'].includes(key),\n ),\n )\n const { classNames, styles } = props\n return {\n ...rest,\n ...attrs,\n activateOnClick: false,\n classNames,\n styles,\n class: classes.dropzone,\n onDrop: (files: any[]) => {\n emit('drop', files)\n reset()\n },\n onReject: (rejections: any[]) => {\n emit('reject', rejections)\n reset()\n },\n onDropAny: (files: any[], rejections: any[]) => emit('drop-any', files, rejections),\n onDragEnter: (event: DragEvent) => emit('drag-enter', event),\n onDragLeave: (event: DragEvent) => emit('drag-leave', event),\n onDragOver: (event: DragEvent) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n }\n}\n</script>\n\n<template>\n <OptionalPortal v-bind=\"props.portalProps\" :within-portal=\"props.withinPortal\">\n <div\n :ref=\"setRootRef\"\n v-bind=\"\n getStyles('fullScreen', {\n style: {\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n })\n \"\n >\n <DropzoneComponent v-bind=\"dropzoneAttrs()\"><slot /></DropzoneComponent>\n </div>\n </OptionalPortal>\n</template>\n","import { factory } from '@mantine-vue/core'\nimport DropzoneFullScreenComponent from './DropzoneFullScreen.vue'\nimport type { DropzoneFullScreenFactory } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\nexport const DropzoneFullScreen = factory<DropzoneFullScreenFactory>(DropzoneFullScreenComponent, {\n classes,\n})\nexport type * from './DropzoneFullScreen.types'\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 './components/Dropzone'\nimport { DropzoneFullScreen } from './components/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 './components/DropzoneStatus'\nexport { useDropzone } from './use-dropzone'\nexport * from './mime-types'\nexport * from './utils'\n\nexport type {\n DropzoneFullScreenEmits,\n DropzoneFullScreenProps,\n DropzoneFullScreenStylesNames,\n} from './components/DropzoneFullScreen'\nexport type {\n DropzoneCssVariables,\n DropzoneEmits,\n DropzoneProps,\n DropzoneStylesNames,\n DropzoneVariant,\n} from './components/Dropzone'\nexport type {\n DropzoneAcceptProps,\n DropzoneIdleProps,\n DropzoneRejectProps,\n} from './components/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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"}
|
package/esm/index.mjs
CHANGED
|
@@ -536,8 +536,7 @@ var Dropzone_default = /* @__PURE__ */ defineComponent({
|
|
|
536
536
|
name: "Dropzone",
|
|
537
537
|
classes: Dropzone_module_default,
|
|
538
538
|
props,
|
|
539
|
-
|
|
540
|
-
style: attrs.style,
|
|
539
|
+
attrs,
|
|
541
540
|
classNames: props.classNames,
|
|
542
541
|
styles: props.styles,
|
|
543
542
|
vars: props.vars,
|
|
@@ -827,8 +826,7 @@ var DropzoneFullScreen = factory(/* @__PURE__ */ defineComponent({
|
|
|
827
826
|
name: "DropzoneFullScreen",
|
|
828
827
|
classes: Dropzone_module_default,
|
|
829
828
|
props,
|
|
830
|
-
|
|
831
|
-
style: attrs.style,
|
|
829
|
+
attrs,
|
|
832
830
|
classNames: props.classNames,
|
|
833
831
|
styles: props.styles,
|
|
834
832
|
unstyled: props.unstyled,
|
package/esm/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["$props","$attrs","$props","$attrs","$props","$attrs"],"sources":["../src/Dropzone.context.ts","../src/get-files-from-event.ts","../src/utils.ts","../src/use-dropzone.ts","../src/Dropzone.module.css","../src/components/Dropzone/Dropzone.vue","../src/components/Dropzone/Dropzone.vue","../src/components/DropzoneStatus/DropzoneStatus.vue","../src/components/DropzoneStatus/DropzoneStatus.vue","../src/components/DropzoneStatus/DropzoneAccept.vue","../src/components/DropzoneStatus/DropzoneAccept.vue","../src/components/DropzoneStatus/DropzoneReject.vue","../src/components/DropzoneStatus/DropzoneReject.vue","../src/components/DropzoneStatus/DropzoneIdle.vue","../src/components/DropzoneStatus/DropzoneIdle.vue","../src/components/Dropzone/index.ts","../src/components/DropzoneFullScreen/DropzoneFullScreen.vue","../src/components/DropzoneFullScreen/DropzoneFullScreen.vue","../src/components/DropzoneFullScreen/index.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 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","<script lang=\"ts\">\nimport { createVarsResolver, getRadius } from '@mantine-vue/core'\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 const rejectColors = theme.variantColorResolver({ color: rejectColor || 'red', theme, variant })\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)\nexport { varsResolver }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch } from 'vue'\nimport { Box, LoadingOverlay, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef } from '@mantine-vue/hooks'\nimport { provideDropzoneContext } from '../../Dropzone.context'\nimport { useDropzone } from '../../use-dropzone'\nimport type { Accept } from '../../types'\nimport type { DropzoneEmits, DropzoneProps } from './Dropzone.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'Dropzone', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneProps>(), {\n disabled: false,\n loading: false,\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 enablePointerEvents: false,\n variant: 'light',\n rejectColor: 'red',\n})\nconst emit = defineEmits<DropzoneEmits>()\nconst props = useProps('Dropzone', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames,\n styles: props.styles,\n vars: props.vars,\n varsResolver,\n unstyled: props.unstyled,\n})\nconst dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((result: Accept, key: string) => ({ ...result, [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, rejected) => emit('drop-any', files, rejected),\n onDropAccepted: (files) => emit('drop', files),\n onDropRejected: (rejected) => emit('reject', rejected),\n onDragEnter: (event) => emit('drag-enter', event),\n onDragLeave: (event) => emit('drag-leave', event),\n onDragOver: (event) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n})\nwatch(\n () => props.openRef,\n (value) => assignRef(value, dz.open),\n { immediate: true },\n)\nconst accepted = computed(() => dz.isDragActive.value && dz.isDragAccept.value)\nconst rejected = computed(() => dz.isDragActive.value && dz.isDragReject.value)\nconst idle = computed(() => !accepted.value && !rejected.value)\nprovideDropzoneContext({\n get accept() {\n return accepted.value\n },\n get reject() {\n return rejected.value\n },\n get idle() {\n return idle.value\n },\n})\nconst rootAttrs = (): any => ({\n ...dz.getRootProps(),\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: accepted.value,\n reject: rejected.value,\n idle: idle.value,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n attrs.mod,\n ],\n})\nconst inputAttrs = (): any => ({ ...dz.getInputProps(props.inputProps), name: props.name })\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | null) => {\n rootElement.value = node\n assignRef(props.rootRef, node)\n}\n\ndefineExpose({ rootElement })\n</script>\n\n<template>\n <Box :rootRef=\"setRootRef\" v-bind=\"rootAttrs()\">\n <LoadingOverlay\n :visible=\"props.loading\"\n :overlay-props=\"{ radius: props.radius }\"\n :unstyled=\"props.unstyled\"\n :loader-props=\"props.loaderProps\"\n />\n <input v-bind=\"inputAttrs()\" />\n <div\n v-bind=\"getStyles('inner')\"\n :data-enable-pointer-events=\"props.enablePointerEvents || undefined\"\n >\n <slot />\n </div>\n </Box>\n</template>\n","<script lang=\"ts\">\nimport { createVarsResolver, getRadius } from '@mantine-vue/core'\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 const rejectColors = theme.variantColorResolver({ color: rejectColor || 'red', theme, variant })\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)\nexport { varsResolver }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch } from 'vue'\nimport { Box, LoadingOverlay, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef } from '@mantine-vue/hooks'\nimport { provideDropzoneContext } from '../../Dropzone.context'\nimport { useDropzone } from '../../use-dropzone'\nimport type { Accept } from '../../types'\nimport type { DropzoneEmits, DropzoneProps } from './Dropzone.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'Dropzone', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneProps>(), {\n disabled: false,\n loading: false,\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 enablePointerEvents: false,\n variant: 'light',\n rejectColor: 'red',\n})\nconst emit = defineEmits<DropzoneEmits>()\nconst props = useProps('Dropzone', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames,\n styles: props.styles,\n vars: props.vars,\n varsResolver,\n unstyled: props.unstyled,\n})\nconst dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((result: Accept, key: string) => ({ ...result, [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, rejected) => emit('drop-any', files, rejected),\n onDropAccepted: (files) => emit('drop', files),\n onDropRejected: (rejected) => emit('reject', rejected),\n onDragEnter: (event) => emit('drag-enter', event),\n onDragLeave: (event) => emit('drag-leave', event),\n onDragOver: (event) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n})\nwatch(\n () => props.openRef,\n (value) => assignRef(value, dz.open),\n { immediate: true },\n)\nconst accepted = computed(() => dz.isDragActive.value && dz.isDragAccept.value)\nconst rejected = computed(() => dz.isDragActive.value && dz.isDragReject.value)\nconst idle = computed(() => !accepted.value && !rejected.value)\nprovideDropzoneContext({\n get accept() {\n return accepted.value\n },\n get reject() {\n return rejected.value\n },\n get idle() {\n return idle.value\n },\n})\nconst rootAttrs = (): any => ({\n ...dz.getRootProps(),\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: accepted.value,\n reject: rejected.value,\n idle: idle.value,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n attrs.mod,\n ],\n})\nconst inputAttrs = (): any => ({ ...dz.getInputProps(props.inputProps), name: props.name })\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | null) => {\n rootElement.value = node\n assignRef(props.rootRef, node)\n}\n\ndefineExpose({ rootElement })\n</script>\n\n<template>\n <Box :rootRef=\"setRootRef\" v-bind=\"rootAttrs()\">\n <LoadingOverlay\n :visible=\"props.loading\"\n :overlay-props=\"{ radius: props.radius }\"\n :unstyled=\"props.unstyled\"\n :loader-props=\"props.loaderProps\"\n />\n <input v-bind=\"inputAttrs()\" />\n <div\n v-bind=\"getStyles('inner')\"\n :data-enable-pointer-events=\"props.enablePointerEvents || undefined\"\n >\n <slot />\n </div>\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, isVNode, useAttrs, useSlots, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from '../../Dropzone.context'\nimport type { DropzoneStatusProps } from './DropzoneStatus.types'\n\ndefineOptions({ name: 'DropzoneStatus', inheritAttrs: false })\nconst props = defineProps<DropzoneStatusProps & { status: keyof DropzoneContextValue }>()\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst ctx = useDropzoneContext()\nconst renderContent = () => {\n const slotChildren = slots.default?.()\n const children = props.children !== undefined ? props.children : slotChildren\n const child: VNodeChild =\n Array.isArray(children) && children.length === 1 ? children[0] : children\n return isVNode(child) && !Array.isArray(child) ? cloneVNode(child, attrs) : child\n}\n</script>\n\n<template>\n <component v-if=\"ctx[props.status] && isVNode(renderContent())\" :is=\"renderContent\" />\n <span v-else-if=\"ctx[props.status]\" v-bind=\"attrs\"><component :is=\"renderContent\" /></span>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, isVNode, useAttrs, useSlots, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from '../../Dropzone.context'\nimport type { DropzoneStatusProps } from './DropzoneStatus.types'\n\ndefineOptions({ name: 'DropzoneStatus', inheritAttrs: false })\nconst props = defineProps<DropzoneStatusProps & { status: keyof DropzoneContextValue }>()\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst ctx = useDropzoneContext()\nconst renderContent = () => {\n const slotChildren = slots.default?.()\n const children = props.children !== undefined ? props.children : slotChildren\n const child: VNodeChild =\n Array.isArray(children) && children.length === 1 ? children[0] : children\n return isVNode(child) && !Array.isArray(child) ? cloneVNode(child, attrs) : child\n}\n</script>\n\n<template>\n <component v-if=\"ctx[props.status] && isVNode(renderContent())\" :is=\"renderContent\" />\n <span v-else-if=\"ctx[props.status]\" v-bind=\"attrs\"><component :is=\"renderContent\" /></span>\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneAcceptProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneAccept', inheritAttrs: false })\ndefineProps<DropzoneAcceptProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"accept\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneAcceptProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneAccept', inheritAttrs: false })\ndefineProps<DropzoneAcceptProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"accept\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneRejectProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneReject', inheritAttrs: false })\ndefineProps<DropzoneRejectProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"reject\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneRejectProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneReject', inheritAttrs: false })\ndefineProps<DropzoneRejectProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"reject\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneIdleProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneIdle', inheritAttrs: false })\ndefineProps<DropzoneIdleProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"idle\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneIdleProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneIdle', inheritAttrs: false })\ndefineProps<DropzoneIdleProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"idle\" :children=\"slots.default?.()\" />\n</template>\n","import { factory } from '@mantine-vue/core'\nimport DropzoneComponent, { varsResolver } from './Dropzone.vue'\nimport type { DropzoneFactory } from './Dropzone.types'\nimport { DropzoneAccept, DropzoneIdle, DropzoneReject } from '../DropzoneStatus'\nimport classes from '../../Dropzone.module.css'\nexport const Dropzone = factory<DropzoneFactory>(DropzoneComponent, {\n classes,\n varsResolver,\n Accept: DropzoneAccept,\n Idle: DropzoneIdle,\n Reject: DropzoneReject,\n})\nexport type * from './Dropzone.types'\n","<script setup lang=\"ts\">\nimport { onUnmounted, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue'\nimport { getDefaultZIndex, OptionalPortal, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef, useDisclosure } from '@mantine-vue/hooks'\nimport DropzoneComponent from '../Dropzone/Dropzone.vue'\nimport type { DropzoneFullScreenEmits, DropzoneFullScreenProps } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'DropzoneFullScreen', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneFullScreenProps>(), {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n})\nconst emit = defineEmits<DropzoneFullScreenEmits>()\nconst props = useProps('DropzoneFullScreen', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n})\nconst counter = ref(0)\nconst [visible, { open, close }] = useDisclosure(false)\nfunction reset() {\n close()\n counter.value = 0\n}\nfunction handleDragEnter(event: DragEvent) {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n}\nfunction handleDragLeave() {\n counter.value = Math.max(0, counter.value - 1)\n}\nwatch(counter, (value) => {\n if (value === 0) close()\n})\nlet attached = false\nfunction attach() {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n}\nfunction detach() {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n}\nwatch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n else reset()\n },\n { immediate: true },\n)\nonUnmounted(detach)\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | ComponentPublicInstance | null) => {\n const element = (node && '$el' in node ? node.$el : node) as Element | null\n rootElement.value = element\n assignRef(props.rootRef, element)\n}\n\ndefineExpose({ rootElement })\nconst dropzoneAttrs = () => {\n const rest = Object.fromEntries(\n Object.entries(props).filter(\n ([key]) =>\n !['active', 'zIndex', 'withinPortal', 'portalProps', 'classNames', 'styles'].includes(key),\n ),\n )\n const { classNames, styles } = props\n return {\n ...rest,\n ...attrs,\n activateOnClick: false,\n classNames,\n styles,\n class: classes.dropzone,\n onDrop: (files: any[]) => {\n emit('drop', files)\n reset()\n },\n onReject: (rejections: any[]) => {\n emit('reject', rejections)\n reset()\n },\n onDropAny: (files: any[], rejections: any[]) => emit('drop-any', files, rejections),\n onDragEnter: (event: DragEvent) => emit('drag-enter', event),\n onDragLeave: (event: DragEvent) => emit('drag-leave', event),\n onDragOver: (event: DragEvent) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n }\n}\n</script>\n\n<template>\n <OptionalPortal v-bind=\"props.portalProps\" :within-portal=\"props.withinPortal\">\n <div\n :ref=\"setRootRef\"\n v-bind=\"\n getStyles('fullScreen', {\n style: {\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n })\n \"\n >\n <DropzoneComponent v-bind=\"dropzoneAttrs()\"><slot /></DropzoneComponent>\n </div>\n </OptionalPortal>\n</template>\n","<script setup lang=\"ts\">\nimport { onUnmounted, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue'\nimport { getDefaultZIndex, OptionalPortal, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef, useDisclosure } from '@mantine-vue/hooks'\nimport DropzoneComponent from '../Dropzone/Dropzone.vue'\nimport type { DropzoneFullScreenEmits, DropzoneFullScreenProps } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'DropzoneFullScreen', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneFullScreenProps>(), {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n})\nconst emit = defineEmits<DropzoneFullScreenEmits>()\nconst props = useProps('DropzoneFullScreen', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n className: attrs.class,\n style: attrs.style as any,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n})\nconst counter = ref(0)\nconst [visible, { open, close }] = useDisclosure(false)\nfunction reset() {\n close()\n counter.value = 0\n}\nfunction handleDragEnter(event: DragEvent) {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n}\nfunction handleDragLeave() {\n counter.value = Math.max(0, counter.value - 1)\n}\nwatch(counter, (value) => {\n if (value === 0) close()\n})\nlet attached = false\nfunction attach() {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n}\nfunction detach() {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n}\nwatch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n else reset()\n },\n { immediate: true },\n)\nonUnmounted(detach)\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | ComponentPublicInstance | null) => {\n const element = (node && '$el' in node ? node.$el : node) as Element | null\n rootElement.value = element\n assignRef(props.rootRef, element)\n}\n\ndefineExpose({ rootElement })\nconst dropzoneAttrs = () => {\n const rest = Object.fromEntries(\n Object.entries(props).filter(\n ([key]) =>\n !['active', 'zIndex', 'withinPortal', 'portalProps', 'classNames', 'styles'].includes(key),\n ),\n )\n const { classNames, styles } = props\n return {\n ...rest,\n ...attrs,\n activateOnClick: false,\n classNames,\n styles,\n class: classes.dropzone,\n onDrop: (files: any[]) => {\n emit('drop', files)\n reset()\n },\n onReject: (rejections: any[]) => {\n emit('reject', rejections)\n reset()\n },\n onDropAny: (files: any[], rejections: any[]) => emit('drop-any', files, rejections),\n onDragEnter: (event: DragEvent) => emit('drag-enter', event),\n onDragLeave: (event: DragEvent) => emit('drag-leave', event),\n onDragOver: (event: DragEvent) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n }\n}\n</script>\n\n<template>\n <OptionalPortal v-bind=\"props.portalProps\" :within-portal=\"props.withinPortal\">\n <div\n :ref=\"setRootRef\"\n v-bind=\"\n getStyles('fullScreen', {\n style: {\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n })\n \"\n >\n <DropzoneComponent v-bind=\"dropzoneAttrs()\"><slot /></DropzoneComponent>\n </div>\n </OptionalPortal>\n</template>\n","import { factory } from '@mantine-vue/core'\nimport DropzoneFullScreenComponent from './DropzoneFullScreen.vue'\nimport type { DropzoneFullScreenFactory } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\nexport const DropzoneFullScreen = factory<DropzoneFullScreenFactory>(DropzoneFullScreenComponent, {\n classes,\n})\nexport type * from './DropzoneFullScreen.types'\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 './components/Dropzone'\nimport { DropzoneFullScreen } from './components/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 './components/DropzoneStatus'\nexport { useDropzone } from './use-dropzone'\nexport * from './mime-types'\nexport * from './utils'\n\nexport type {\n DropzoneFullScreenEmits,\n DropzoneFullScreenProps,\n DropzoneFullScreenStylesNames,\n} from './components/DropzoneFullScreen'\nexport type {\n DropzoneCssVariables,\n DropzoneEmits,\n DropzoneProps,\n DropzoneStylesNames,\n DropzoneVariant,\n} from './components/Dropzone'\nexport type {\n DropzoneAcceptProps,\n DropzoneIdleProps,\n DropzoneRejectProps,\n} from './components/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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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["$props","$attrs","$props","$attrs","$props","$attrs"],"sources":["../src/Dropzone.context.ts","../src/get-files-from-event.ts","../src/utils.ts","../src/use-dropzone.ts","../src/Dropzone.module.css","../src/components/Dropzone/Dropzone.vue","../src/components/Dropzone/Dropzone.vue","../src/components/DropzoneStatus/DropzoneStatus.vue","../src/components/DropzoneStatus/DropzoneStatus.vue","../src/components/DropzoneStatus/DropzoneAccept.vue","../src/components/DropzoneStatus/DropzoneAccept.vue","../src/components/DropzoneStatus/DropzoneReject.vue","../src/components/DropzoneStatus/DropzoneReject.vue","../src/components/DropzoneStatus/DropzoneIdle.vue","../src/components/DropzoneStatus/DropzoneIdle.vue","../src/components/Dropzone/index.ts","../src/components/DropzoneFullScreen/DropzoneFullScreen.vue","../src/components/DropzoneFullScreen/DropzoneFullScreen.vue","../src/components/DropzoneFullScreen/index.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 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","<script lang=\"ts\">\nimport { createVarsResolver, getRadius } from '@mantine-vue/core'\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 const rejectColors = theme.variantColorResolver({ color: rejectColor || 'red', theme, variant })\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)\nexport { varsResolver }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch } from 'vue'\nimport { Box, LoadingOverlay, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef } from '@mantine-vue/hooks'\nimport { provideDropzoneContext } from '../../Dropzone.context'\nimport { useDropzone } from '../../use-dropzone'\nimport type { Accept } from '../../types'\nimport type { DropzoneEmits, DropzoneProps } from './Dropzone.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'Dropzone', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneProps>(), {\n disabled: false,\n loading: false,\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 enablePointerEvents: false,\n variant: 'light',\n rejectColor: 'red',\n})\nconst emit = defineEmits<DropzoneEmits>()\nconst props = useProps('Dropzone', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n attrs,\n classNames: props.classNames,\n styles: props.styles,\n vars: props.vars,\n varsResolver,\n unstyled: props.unstyled,\n})\nconst dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((result: Accept, key: string) => ({ ...result, [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, rejected) => emit('drop-any', files, rejected),\n onDropAccepted: (files) => emit('drop', files),\n onDropRejected: (rejected) => emit('reject', rejected),\n onDragEnter: (event) => emit('drag-enter', event),\n onDragLeave: (event) => emit('drag-leave', event),\n onDragOver: (event) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n})\nwatch(\n () => props.openRef,\n (value) => assignRef(value, dz.open),\n { immediate: true },\n)\nconst accepted = computed(() => dz.isDragActive.value && dz.isDragAccept.value)\nconst rejected = computed(() => dz.isDragActive.value && dz.isDragReject.value)\nconst idle = computed(() => !accepted.value && !rejected.value)\nprovideDropzoneContext({\n get accept() {\n return accepted.value\n },\n get reject() {\n return rejected.value\n },\n get idle() {\n return idle.value\n },\n})\nconst rootAttrs = (): any => ({\n ...dz.getRootProps(),\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: accepted.value,\n reject: rejected.value,\n idle: idle.value,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n attrs.mod,\n ],\n})\nconst inputAttrs = (): any => ({ ...dz.getInputProps(props.inputProps), name: props.name })\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | null) => {\n rootElement.value = node\n assignRef(props.rootRef, node)\n}\n\ndefineExpose({ rootElement })\n</script>\n\n<template>\n <Box :rootRef=\"setRootRef\" v-bind=\"rootAttrs()\">\n <LoadingOverlay\n :visible=\"props.loading\"\n :overlay-props=\"{ radius: props.radius }\"\n :unstyled=\"props.unstyled\"\n :loader-props=\"props.loaderProps\"\n />\n <input v-bind=\"inputAttrs()\" />\n <div\n v-bind=\"getStyles('inner')\"\n :data-enable-pointer-events=\"props.enablePointerEvents || undefined\"\n >\n <slot />\n </div>\n </Box>\n</template>\n","<script lang=\"ts\">\nimport { createVarsResolver, getRadius } from '@mantine-vue/core'\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 const rejectColors = theme.variantColorResolver({ color: rejectColor || 'red', theme, variant })\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)\nexport { varsResolver }\n</script>\n\n<script setup lang=\"ts\">\nimport { ref, computed, useAttrs, watch } from 'vue'\nimport { Box, LoadingOverlay, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef } from '@mantine-vue/hooks'\nimport { provideDropzoneContext } from '../../Dropzone.context'\nimport { useDropzone } from '../../use-dropzone'\nimport type { Accept } from '../../types'\nimport type { DropzoneEmits, DropzoneProps } from './Dropzone.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'Dropzone', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneProps>(), {\n disabled: false,\n loading: false,\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 enablePointerEvents: false,\n variant: 'light',\n rejectColor: 'red',\n})\nconst emit = defineEmits<DropzoneEmits>()\nconst props = useProps('Dropzone', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'Dropzone',\n classes,\n props,\n attrs,\n classNames: props.classNames,\n styles: props.styles,\n vars: props.vars,\n varsResolver,\n unstyled: props.unstyled,\n})\nconst dz = useDropzone({\n accept: () =>\n Array.isArray(props.accept)\n ? props.accept.reduce((result: Accept, key: string) => ({ ...result, [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, rejected) => emit('drop-any', files, rejected),\n onDropAccepted: (files) => emit('drop', files),\n onDropRejected: (rejected) => emit('reject', rejected),\n onDragEnter: (event) => emit('drag-enter', event),\n onDragLeave: (event) => emit('drag-leave', event),\n onDragOver: (event) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n})\nwatch(\n () => props.openRef,\n (value) => assignRef(value, dz.open),\n { immediate: true },\n)\nconst accepted = computed(() => dz.isDragActive.value && dz.isDragAccept.value)\nconst rejected = computed(() => dz.isDragActive.value && dz.isDragReject.value)\nconst idle = computed(() => !accepted.value && !rejected.value)\nprovideDropzoneContext({\n get accept() {\n return accepted.value\n },\n get reject() {\n return rejected.value\n },\n get idle() {\n return idle.value\n },\n})\nconst rootAttrs = (): any => ({\n ...dz.getRootProps(),\n ...getStyles('root'),\n ...attrs,\n mod: [\n {\n accept: accepted.value,\n reject: rejected.value,\n idle: idle.value,\n disabled: props.disabled,\n loading: props.loading,\n 'activate-on-click': props.activateOnClick,\n },\n attrs.mod,\n ],\n})\nconst inputAttrs = (): any => ({ ...dz.getInputProps(props.inputProps), name: props.name })\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | null) => {\n rootElement.value = node\n assignRef(props.rootRef, node)\n}\n\ndefineExpose({ rootElement })\n</script>\n\n<template>\n <Box :rootRef=\"setRootRef\" v-bind=\"rootAttrs()\">\n <LoadingOverlay\n :visible=\"props.loading\"\n :overlay-props=\"{ radius: props.radius }\"\n :unstyled=\"props.unstyled\"\n :loader-props=\"props.loaderProps\"\n />\n <input v-bind=\"inputAttrs()\" />\n <div\n v-bind=\"getStyles('inner')\"\n :data-enable-pointer-events=\"props.enablePointerEvents || undefined\"\n >\n <slot />\n </div>\n </Box>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, isVNode, useAttrs, useSlots, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from '../../Dropzone.context'\nimport type { DropzoneStatusProps } from './DropzoneStatus.types'\n\ndefineOptions({ name: 'DropzoneStatus', inheritAttrs: false })\nconst props = defineProps<DropzoneStatusProps & { status: keyof DropzoneContextValue }>()\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst ctx = useDropzoneContext()\nconst renderContent = () => {\n const slotChildren = slots.default?.()\n const children = props.children !== undefined ? props.children : slotChildren\n const child: VNodeChild =\n Array.isArray(children) && children.length === 1 ? children[0] : children\n return isVNode(child) && !Array.isArray(child) ? cloneVNode(child, attrs) : child\n}\n</script>\n\n<template>\n <component v-if=\"ctx[props.status] && isVNode(renderContent())\" :is=\"renderContent\" />\n <span v-else-if=\"ctx[props.status]\" v-bind=\"attrs\"><component :is=\"renderContent\" /></span>\n</template>\n","<script setup lang=\"ts\">\nimport { cloneVNode, isVNode, useAttrs, useSlots, type VNodeChild } from 'vue'\nimport { useDropzoneContext, type DropzoneContextValue } from '../../Dropzone.context'\nimport type { DropzoneStatusProps } from './DropzoneStatus.types'\n\ndefineOptions({ name: 'DropzoneStatus', inheritAttrs: false })\nconst props = defineProps<DropzoneStatusProps & { status: keyof DropzoneContextValue }>()\nconst slots = useSlots()\nconst attrs = useAttrs()\nconst ctx = useDropzoneContext()\nconst renderContent = () => {\n const slotChildren = slots.default?.()\n const children = props.children !== undefined ? props.children : slotChildren\n const child: VNodeChild =\n Array.isArray(children) && children.length === 1 ? children[0] : children\n return isVNode(child) && !Array.isArray(child) ? cloneVNode(child, attrs) : child\n}\n</script>\n\n<template>\n <component v-if=\"ctx[props.status] && isVNode(renderContent())\" :is=\"renderContent\" />\n <span v-else-if=\"ctx[props.status]\" v-bind=\"attrs\"><component :is=\"renderContent\" /></span>\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneAcceptProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneAccept', inheritAttrs: false })\ndefineProps<DropzoneAcceptProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"accept\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneAcceptProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneAccept', inheritAttrs: false })\ndefineProps<DropzoneAcceptProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"accept\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneRejectProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneReject', inheritAttrs: false })\ndefineProps<DropzoneRejectProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"reject\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneRejectProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneReject', inheritAttrs: false })\ndefineProps<DropzoneRejectProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"reject\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneIdleProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneIdle', inheritAttrs: false })\ndefineProps<DropzoneIdleProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"idle\" :children=\"slots.default?.()\" />\n</template>\n","<script setup lang=\"ts\">\nimport { useSlots } from 'vue'\nimport DropzoneStatus from './DropzoneStatus.vue'\nimport type { DropzoneIdleProps } from './DropzoneStatus.types'\ndefineOptions({ name: 'DropzoneIdle', inheritAttrs: false })\ndefineProps<DropzoneIdleProps>()\nconst slots = useSlots()\n</script>\n<template>\n <DropzoneStatus v-bind=\"{ ...$props, ...$attrs }\" status=\"idle\" :children=\"slots.default?.()\" />\n</template>\n","import { factory } from '@mantine-vue/core'\nimport DropzoneComponent, { varsResolver } from './Dropzone.vue'\nimport type { DropzoneFactory } from './Dropzone.types'\nimport { DropzoneAccept, DropzoneIdle, DropzoneReject } from '../DropzoneStatus'\nimport classes from '../../Dropzone.module.css'\nexport const Dropzone = factory<DropzoneFactory>(DropzoneComponent, {\n classes,\n varsResolver,\n Accept: DropzoneAccept,\n Idle: DropzoneIdle,\n Reject: DropzoneReject,\n})\nexport type * from './Dropzone.types'\n","<script setup lang=\"ts\">\nimport { onUnmounted, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue'\nimport { getDefaultZIndex, OptionalPortal, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef, useDisclosure } from '@mantine-vue/hooks'\nimport DropzoneComponent from '../Dropzone/Dropzone.vue'\nimport type { DropzoneFullScreenEmits, DropzoneFullScreenProps } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'DropzoneFullScreen', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneFullScreenProps>(), {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n})\nconst emit = defineEmits<DropzoneFullScreenEmits>()\nconst props = useProps('DropzoneFullScreen', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n attrs,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n})\nconst counter = ref(0)\nconst [visible, { open, close }] = useDisclosure(false)\nfunction reset() {\n close()\n counter.value = 0\n}\nfunction handleDragEnter(event: DragEvent) {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n}\nfunction handleDragLeave() {\n counter.value = Math.max(0, counter.value - 1)\n}\nwatch(counter, (value) => {\n if (value === 0) close()\n})\nlet attached = false\nfunction attach() {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n}\nfunction detach() {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n}\nwatch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n else reset()\n },\n { immediate: true },\n)\nonUnmounted(detach)\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | ComponentPublicInstance | null) => {\n const element = (node && '$el' in node ? node.$el : node) as Element | null\n rootElement.value = element\n assignRef(props.rootRef, element)\n}\n\ndefineExpose({ rootElement })\nconst dropzoneAttrs = () => {\n const rest = Object.fromEntries(\n Object.entries(props).filter(\n ([key]) =>\n !['active', 'zIndex', 'withinPortal', 'portalProps', 'classNames', 'styles'].includes(key),\n ),\n )\n const { classNames, styles } = props\n return {\n ...rest,\n ...attrs,\n activateOnClick: false,\n classNames,\n styles,\n class: classes.dropzone,\n onDrop: (files: any[]) => {\n emit('drop', files)\n reset()\n },\n onReject: (rejections: any[]) => {\n emit('reject', rejections)\n reset()\n },\n onDropAny: (files: any[], rejections: any[]) => emit('drop-any', files, rejections),\n onDragEnter: (event: DragEvent) => emit('drag-enter', event),\n onDragLeave: (event: DragEvent) => emit('drag-leave', event),\n onDragOver: (event: DragEvent) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n }\n}\n</script>\n\n<template>\n <OptionalPortal v-bind=\"props.portalProps\" :within-portal=\"props.withinPortal\">\n <div\n :ref=\"setRootRef\"\n v-bind=\"\n getStyles('fullScreen', {\n style: {\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n })\n \"\n >\n <DropzoneComponent v-bind=\"dropzoneAttrs()\"><slot /></DropzoneComponent>\n </div>\n </OptionalPortal>\n</template>\n","<script setup lang=\"ts\">\nimport { onUnmounted, ref, useAttrs, watch, type ComponentPublicInstance } from 'vue'\nimport { getDefaultZIndex, OptionalPortal, useProps, useStyles } from '@mantine-vue/core'\nimport { assignRef, useDisclosure } from '@mantine-vue/hooks'\nimport DropzoneComponent from '../Dropzone/Dropzone.vue'\nimport type { DropzoneFullScreenEmits, DropzoneFullScreenProps } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\n\ndefineOptions({ name: 'DropzoneFullScreen', inheritAttrs: false })\nconst rawProps = withDefaults(defineProps<DropzoneFullScreenProps>(), {\n maxSize: Infinity,\n activateOnDrag: true,\n dragEventsBubbling: true,\n activateOnKeyboard: true,\n active: true,\n zIndex: getDefaultZIndex('max'),\n withinPortal: true,\n})\nconst emit = defineEmits<DropzoneFullScreenEmits>()\nconst props = useProps('DropzoneFullScreen', null, rawProps)\nconst attrs = useAttrs()\nconst getStyles = useStyles({\n name: 'DropzoneFullScreen',\n classes,\n props,\n attrs,\n classNames: props.classNames,\n styles: props.styles,\n unstyled: props.unstyled,\n rootSelector: 'fullScreen',\n})\nconst counter = ref(0)\nconst [visible, { open, close }] = useDisclosure(false)\nfunction reset() {\n close()\n counter.value = 0\n}\nfunction handleDragEnter(event: DragEvent) {\n if (event.dataTransfer?.types.includes('Files')) {\n counter.value += 1\n open()\n }\n}\nfunction handleDragLeave() {\n counter.value = Math.max(0, counter.value - 1)\n}\nwatch(counter, (value) => {\n if (value === 0) close()\n})\nlet attached = false\nfunction attach() {\n if (attached) return\n document.addEventListener('dragenter', handleDragEnter, false)\n document.addEventListener('dragleave', handleDragLeave, false)\n attached = true\n}\nfunction detach() {\n if (!attached) return\n document.removeEventListener('dragenter', handleDragEnter, false)\n document.removeEventListener('dragleave', handleDragLeave, false)\n attached = false\n}\nwatch(\n () => props.active,\n (active) => {\n detach()\n if (active) attach()\n else reset()\n },\n { immediate: true },\n)\nonUnmounted(detach)\n\nconst rootElement = ref<Element | null>(null)\n\nconst setRootRef = (node: Element | ComponentPublicInstance | null) => {\n const element = (node && '$el' in node ? node.$el : node) as Element | null\n rootElement.value = element\n assignRef(props.rootRef, element)\n}\n\ndefineExpose({ rootElement })\nconst dropzoneAttrs = () => {\n const rest = Object.fromEntries(\n Object.entries(props).filter(\n ([key]) =>\n !['active', 'zIndex', 'withinPortal', 'portalProps', 'classNames', 'styles'].includes(key),\n ),\n )\n const { classNames, styles } = props\n return {\n ...rest,\n ...attrs,\n activateOnClick: false,\n classNames,\n styles,\n class: classes.dropzone,\n onDrop: (files: any[]) => {\n emit('drop', files)\n reset()\n },\n onReject: (rejections: any[]) => {\n emit('reject', rejections)\n reset()\n },\n onDropAny: (files: any[], rejections: any[]) => emit('drop-any', files, rejections),\n onDragEnter: (event: DragEvent) => emit('drag-enter', event),\n onDragLeave: (event: DragEvent) => emit('drag-leave', event),\n onDragOver: (event: DragEvent) => emit('drag-over', event),\n onFileDialogCancel: () => emit('file-dialog-cancel'),\n onFileDialogOpen: () => emit('file-dialog-open'),\n }\n}\n</script>\n\n<template>\n <OptionalPortal v-bind=\"props.portalProps\" :within-portal=\"props.withinPortal\">\n <div\n :ref=\"setRootRef\"\n v-bind=\"\n getStyles('fullScreen', {\n style: {\n opacity: visible ? 1 : 0,\n pointerEvents: visible ? 'all' : 'none',\n zIndex: props.zIndex,\n },\n })\n \"\n >\n <DropzoneComponent v-bind=\"dropzoneAttrs()\"><slot /></DropzoneComponent>\n </div>\n </OptionalPortal>\n</template>\n","import { factory } from '@mantine-vue/core'\nimport DropzoneFullScreenComponent from './DropzoneFullScreen.vue'\nimport type { DropzoneFullScreenFactory } from './DropzoneFullScreen.types'\nimport classes from '../../Dropzone.module.css'\nexport const DropzoneFullScreen = factory<DropzoneFullScreenFactory>(DropzoneFullScreenComponent, {\n classes,\n})\nexport type * from './DropzoneFullScreen.types'\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 './components/Dropzone'\nimport { DropzoneFullScreen } from './components/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 './components/DropzoneStatus'\nexport { useDropzone } from './use-dropzone'\nexport * from './mime-types'\nexport * from './utils'\n\nexport type {\n DropzoneFullScreenEmits,\n DropzoneFullScreenProps,\n DropzoneFullScreenStylesNames,\n} from './components/DropzoneFullScreen'\nexport type {\n DropzoneCssVariables,\n DropzoneEmits,\n DropzoneProps,\n DropzoneStylesNames,\n DropzoneVariant,\n} from './components/Dropzone'\nexport type {\n DropzoneAcceptProps,\n DropzoneIdleProps,\n DropzoneRejectProps,\n} from './components/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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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mantine-vue/dropzone",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.6.0",
|
|
4
4
|
"description": "Vue file drag & drop zone component equivalent to @mantine/dropzone",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"files": [
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"vue": "^3.5.0"
|
|
38
38
|
},
|
|
39
39
|
"peerDependencies": {
|
|
40
|
-
"@mantine-vue/core": "3.
|
|
41
|
-
"@mantine-vue/hooks": "3.
|
|
40
|
+
"@mantine-vue/core": "3.6.0",
|
|
41
|
+
"@mantine-vue/hooks": "3.6.0",
|
|
42
42
|
"vue": "^3.5.0"
|
|
43
43
|
}
|
|
44
44
|
}
|