@zayne-labs/ui-react 0.10.48 → 0.10.50

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.
Files changed (47) hide show
  1. package/dist/esm/{chunk-BN_g-Awi.js → chunk-BYypO7fO.js} +3 -3
  2. package/dist/esm/common/await/index.d.ts +8 -6
  3. package/dist/esm/common/await/index.js +3 -3
  4. package/dist/esm/common/client-gate/index.d.ts +2 -2
  5. package/dist/esm/common/error-boundary/index.d.ts +2 -2
  6. package/dist/esm/common/error-boundary/index.js +1 -1
  7. package/dist/esm/common/for/index.d.ts +4 -4
  8. package/dist/esm/common/for/index.js +1 -1
  9. package/dist/esm/common/presence/index.d.ts +2 -2
  10. package/dist/esm/common/presence/index.js +1 -1
  11. package/dist/esm/common/show/index.d.ts +4 -4
  12. package/dist/esm/common/show/index.js +1 -1
  13. package/dist/esm/common/slot/index.d.ts +4 -4
  14. package/dist/esm/common/slot/index.js +1 -1
  15. package/dist/esm/common/suspense-with-boundary/index.d.ts +2 -2
  16. package/dist/esm/common/suspense-with-boundary/index.js +1 -1
  17. package/dist/esm/common/switch/index.d.ts +4 -4
  18. package/dist/esm/common/switch/index.js +1 -1
  19. package/dist/esm/common/teleport/index.d.ts +2 -2
  20. package/dist/esm/{for-DAM4xYij.js → getElementList-DwKrmXP0.js} +1 -1
  21. package/dist/esm/getElementList-DwKrmXP0.js.map +1 -0
  22. package/dist/esm/{presence-DpApdmSc.js → presence-Bk5WMQXn.js} +2 -2
  23. package/dist/esm/{presence-DpApdmSc.js.map → presence-Bk5WMQXn.js.map} +1 -1
  24. package/dist/esm/{show-CtivYwYS.js → show-parts-BsJLZhNL.js} +2 -2
  25. package/dist/esm/show-parts-BsJLZhNL.js.map +1 -0
  26. package/dist/esm/{slot-C7TE8pEK.js → slot-parts-Da1BsS7u.js} +2 -2
  27. package/dist/esm/slot-parts-Da1BsS7u.js.map +1 -0
  28. package/dist/esm/{index-CgqbRWLA.d.ts → suspense-with-boundary-CAT0Jm5m.d.ts} +2 -2
  29. package/dist/esm/ui/card/index.d.ts +12 -8
  30. package/dist/esm/ui/card/index.js +6 -6
  31. package/dist/esm/ui/card/index.js.map +1 -1
  32. package/dist/esm/ui/carousel/index.d.ts +9 -9
  33. package/dist/esm/ui/carousel/index.js +3 -3
  34. package/dist/esm/ui/drag-scroll/index.d.ts +6 -6
  35. package/dist/esm/ui/drop-zone/index.d.ts +28 -25
  36. package/dist/esm/ui/drop-zone/index.js +26 -12
  37. package/dist/esm/ui/drop-zone/index.js.map +1 -1
  38. package/dist/esm/ui/form/index.d.ts +22 -22
  39. package/dist/esm/ui/form/index.js +3 -3
  40. package/dist/esm/{error-boundary-BwGXKuLC.js → useErrorBoundary-CIUZVY-G.js} +1 -1
  41. package/dist/esm/useErrorBoundary-CIUZVY-G.js.map +1 -0
  42. package/dist/esm/{index-C-H0yigJ.d.ts → useErrorBoundary-DhOgXZDB.d.ts} +5 -5
  43. package/package.json +8 -8
  44. package/dist/esm/error-boundary-BwGXKuLC.js.map +0 -1
  45. package/dist/esm/for-DAM4xYij.js.map +0 -1
  46. package/dist/esm/show-CtivYwYS.js.map +0 -1
  47. package/dist/esm/slot-C7TE8pEK.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["generateFileID","generateFileIDPrimitive","generateFileID","Slot.Root"],"sources":["../../../../src/components/ui/drop-zone/drop-zone-context.ts","../../../../src/components/ui/drop-zone/icons.tsx","../../../../src/components/ui/drop-zone/utils.ts","../../../../src/components/ui/drop-zone/drop-zone-store.ts","../../../../src/components/ui/drop-zone/use-drop-zone.ts","../../../../src/components/ui/drop-zone/drop-zone.tsx","../../../../src/components/ui/drop-zone/drop-zone-parts.ts"],"sourcesContent":["import { createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport { createReactStoreContext } from \"@zayne-labs/toolkit-react/zustand\";\nimport type { DropZoneStore, FileState, UseDropZoneResult } from \"./types\";\n\nconst [DropZoneStoreContextProvider, useDropZoneStoreContext] = createReactStoreContext<DropZoneStore>({\n\thookName: \"useDropZoneStoreContext\",\n\tname: \"DropZoneStoreContext\",\n\tproviderName: \"DropZoneRoot\",\n});\n\nexport type DropZoneRootContextType = Pick<\n\tUseDropZoneResult,\n\t\"disabled\" | \"disableInternalStateSubscription\" | \"inputRef\" | \"propGetters\"\n>;\n\nconst [DropZoneRootContextProvider, useDropZoneRootContext] = createCustomContext<DropZoneRootContextType>(\n\t{\n\t\thookName: \"useDropZoneRootContext\",\n\t\tname: \"DropZoneRootContext\",\n\t\tproviderName: \"DropZoneRoot\",\n\t}\n);\n\nexport type FileItemContextType = {\n\tfileState: FileState;\n};\n\nconst [FileItemContextProvider, useFileItemContext] = createCustomContext({\n\tdefaultValue: null as unknown as FileItemContextType,\n\thookName: \"useFileItemContext\",\n\tname: \"FileItemContext\",\n\tproviderName: \"FileItem\",\n\tstrict: false,\n});\n\nexport {\n\tDropZoneRootContextProvider,\n\tDropZoneStoreContextProvider,\n\tFileItemContextProvider,\n\tuseDropZoneRootContext,\n\tuseDropZoneStoreContext,\n\tuseFileItemContext,\n};\n","export const FileVideoIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4m-10 3l5 3l-5 3z\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileAudioIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M17.5 22h.5a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3\" />\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4M2 19a2 2 0 1 1 4 0v1a2 2 0 1 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 1 1-4 0v-1a2 2 0 1 1 4 0\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileTextIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4M10 9H8m8 4H8m8 4H8\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileCodeIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M10 12.5L8 15l2 2.5m4-5l2 2.5l-2 2.5M14 2v4a2 2 0 0 0 2 2h4\" />\n\t\t\t<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileArchiveIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M10 12v-1m0 7v-2m0-9V6m4-4v4a2 2 0 0 0 2 2h4\" />\n\t\t\t<path d=\"M15.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v16a2 2 0 0 0 .274 1.01\" />\n\t\t\t<circle cx=\"10\" cy=\"20\" r=\"2\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileCogIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4M3.2 12.9l-.9-.4m.9 2.6l-.9.4\" />\n\t\t\t<path d=\"M4.677 21.5a2 2 0 0 0 1.313.5H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v2.5m.9 4.7l-.4-.9m.4 6.5l-.4.9m3-7.4l-.4.9m.4 6.5l-.4-.9m2.6-4.3l-.9.4m.9 2.6l-.9-.4\" />\n\t\t\t<circle cx=\"6\" cy=\"14\" r=\"3\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n\t\t</g>\n\t</svg>\n);\n","import {\n\tcreateFileURL,\n\tgenerateFileID as generateFileIDPrimitive,\n\ttype FileOrFileMeta,\n\ttype FileValidationErrorContextEach,\n} from \"@zayne-labs/toolkit-core\";\nimport { isFile, isObject, isString } from \"@zayne-labs/toolkit-type-helpers\";\nimport type { FileState, FileStateOrIDProp, PartProps } from \"./types\";\n\nexport const generateFileID = generateFileIDPrimitive;\n\nexport const createObjectURL = (\n\tfile: FileOrFileMeta,\n\tdisallowPreviewForNonImageFiles: boolean | undefined\n) => {\n\tif (disallowPreviewForNonImageFiles && !file.type?.startsWith(\"image/\")) return;\n\n\treturn createFileURL(file);\n};\n\nexport const clearObjectURL = (\n\tfileState: FileState | undefined,\n\tdisallowPreviewForNonImageFiles: boolean | undefined\n) => {\n\tif (!isFile(fileState?.file)) return;\n\n\tif (disallowPreviewForNonImageFiles && !fileState.file.type.startsWith(\"image/\")) return;\n\n\tif (!fileState.preview) return;\n\n\tURL.revokeObjectURL(fileState.preview);\n};\n\nexport const isMatchingFile = (\n\toptions: FileStateOrIDProp & {\n\t\tfileState: FileOrFileMeta | FileState;\n\t}\n) => {\n\tconst { fileState, fileStateOrID } = options;\n\n\tconst fileID = isFile(fileState) ? generateFileID(fileState) : fileState.id;\n\n\tif (isString(fileStateOrID)) {\n\t\treturn fileID === fileStateOrID;\n\t}\n\n\tif (isFile(fileStateOrID)) {\n\t\tconst generatedFileID = generateFileID(fileStateOrID);\n\t\treturn fileID === generatedFileID;\n\t}\n\n\treturn fileID === fileStateOrID.id;\n};\n\ntype FromCamelToKebabCase<TString extends string> =\n\tTString extends `${infer First}${infer Rest}` ?\n\t\tFirst extends Uppercase<First> ?\n\t\t\t`-${Lowercase<First>}${FromCamelToKebabCase<Rest>}`\n\t\t:\t`${First}${FromCamelToKebabCase<Rest>}`\n\t:\t\"\";\n\nexport const getScopeAttrs = (part: FromCamelToKebabCase<keyof PartProps>) => {\n\treturn {\n\t\t/* eslint-disable perfectionist/sort-objects -- I need this order to be maintained */\n\t\t\"data-slot\": `dropzone-${part}`,\n\t\t\"data-scope\": \"dropzone\",\n\t\t\"data-part\": part,\n\t\t/* eslint-enable perfectionist/sort-objects -- I need this order to be maintained */\n\t} as const;\n};\n\nconst dropZoneErrorSymbol = Symbol(\"DropZoneError\");\n\nexport class DropZoneError extends Error {\n\treadonly dropZoneErrorSymbol = dropZoneErrorSymbol;\n\tfile?: FileValidationErrorContextEach[\"file\"];\n\toverride name = \"DropZoneError\" as const;\n\n\tconstructor(\n\t\tctx: Pick<FileValidationErrorContextEach, \"message\"> & {\n\t\t\tfile?: FileValidationErrorContextEach[\"file\"];\n\t\t},\n\t\terrorOptions?: ErrorOptions\n\t) {\n\t\tconst { file, message } = ctx;\n\n\t\tsuper(message, errorOptions);\n\n\t\tthis.file = file;\n\t}\n\n\tstatic override isError(error: unknown): error is DropZoneError {\n\t\tif (!isObject<DropZoneError>(error)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (error instanceof DropZoneError) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst actualError = error as DropZoneError;\n\n\t\treturn (\n\t\t\tactualError.dropZoneErrorSymbol === dropZoneErrorSymbol\n\t\t\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\t\t\t&& actualError.name === \"DropZoneError\"\n\t\t);\n\t}\n}\n\nexport const getErrorContext = (error: DropZoneError | Error): NonNullable<FileState[\"error\"]> => {\n\tif (DropZoneError.isError(error)) {\n\t\treturn {\n\t\t\tcause: \"custom-error\",\n\t\t\tcode: \"upload-error\",\n\t\t\tfile: error.file ?? ({} as never),\n\t\t\tmessage: error.message,\n\t\t\toriginalError: error.cause ?? error,\n\t\t};\n\t}\n\n\tconst actualError = Error.isError(error) ? error : new Error(\"File upload failed\", { cause: error });\n\n\treturn {\n\t\tcause: \"custom-error\",\n\t\tcode: \"upload-error\",\n\t\tfile: isFile(actualError.cause) ? actualError.cause : ({} as never),\n\t\tmessage: Error.isError(error) ? actualError.message : String(actualError),\n\t\toriginalError: actualError,\n\t};\n};\n","import { createStore, handleFileValidationAsync, toArray } from \"@zayne-labs/toolkit-core\";\nimport type { DropZoneState, DropZoneStore, UseDropZoneProps } from \"./types\";\nimport { clearObjectURL, createObjectURL, generateFileID, getErrorContext, isMatchingFile } from \"./utils\";\n\ntype RequiredUseDropZoneProps = {\n\t[Key in keyof Required<UseDropZoneProps>]: UseDropZoneProps[Key] | undefined;\n};\n\ntype StoreContext = Pick<\n\tRequiredUseDropZoneProps,\n\t| \"allowedFileTypes\"\n\t| \"disablePreviewGenForNonImageFiles\"\n\t| \"initialFiles\"\n\t| \"maxFileCount\"\n\t| \"maxFileSize\"\n\t| \"multiple\"\n\t| \"onFilesChange\"\n\t| \"onUpload\"\n\t| \"onValidationError\"\n\t| \"onValidationSuccess\"\n\t| \"rejectDuplicateFiles\"\n\t| \"validator\"\n>;\n\nexport const createDropZoneStore = (storeContext: StoreContext) => {\n\tconst {\n\t\tallowedFileTypes,\n\t\tdisablePreviewGenForNonImageFiles,\n\t\tinitialFiles,\n\t\tmaxFileCount,\n\t\tmaxFileSize,\n\t\tmultiple,\n\t\tonFilesChange,\n\t\tonUpload,\n\t\tonValidationError,\n\t\tonValidationSuccess,\n\t\trejectDuplicateFiles,\n\t\tvalidator,\n\t} = storeContext;\n\n\tconst inputRef: React.RefObject<HTMLInputElement | null> = { current: null };\n\n\tconst initialFileArray = toArray(initialFiles).filter(Boolean);\n\n\tconst clearInputValue = () => {\n\t\tif (!inputRef.current) return;\n\n\t\tinputRef.current.value = \"\";\n\t};\n\n\tconst initFileStateArray: DropZoneState[\"fileStateArray\"] = initialFileArray.map((fileMeta) => ({\n\t\tfile: fileMeta,\n\t\tid: fileMeta.id,\n\t\tpreview: fileMeta.url,\n\t\tprogress: 0,\n\t\tstatus: \"idle\",\n\t}));\n\n\tconst store = createStore<DropZoneStore>((set, get) => ({\n\t\tdisabled: false,\n\t\terrors: [],\n\t\tfileStateArray: initFileStateArray,\n\t\tisDraggingOver: false,\n\t\tisInvalid: false,\n\n\t\t// eslint-disable-next-line perfectionist/sort-objects -- ignore\n\t\tactions: {\n\t\t\taddFiles: async (files) => {\n\t\t\t\tif (!files || files.length === 0) {\n\t\t\t\t\tconsole.warn(\"No file selected!\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { actions, fileStateArray: existingFileStateArray } = get();\n\n\t\t\t\t// == In single file mode, only use the first file\n\t\t\t\tconst resolvedNewFiles = !multiple ? [files[0]] : files;\n\n\t\t\t\tconst { errors, validFiles } = await handleFileValidationAsync({\n\t\t\t\t\texistingFiles: existingFileStateArray.map((fileWithPreview) => fileWithPreview.file),\n\t\t\t\t\thooks: {\n\t\t\t\t\t\tonErrorEach: onValidationError,\n\t\t\t\t\t\tonSuccessBatch: onValidationSuccess,\n\t\t\t\t\t},\n\t\t\t\t\tnewFiles: resolvedNewFiles,\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tallowedFileTypes,\n\t\t\t\t\t\tmaxFileCount,\n\t\t\t\t\t\tmaxFileSize,\n\t\t\t\t\t\trejectDuplicateFiles,\n\t\t\t\t\t\tvalidator,\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (validFiles.length === 0) {\n\t\t\t\t\tset({ errors, isDraggingOver: false });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst newFileStateArray: DropZoneState[\"fileStateArray\"] = validFiles.map((file) => ({\n\t\t\t\t\tfile,\n\t\t\t\t\tid: generateFileID(file),\n\t\t\t\t\tpreview: createObjectURL(file, disablePreviewGenForNonImageFiles),\n\t\t\t\t\tprogress: 0,\n\t\t\t\t\tstatus: \"idle\",\n\t\t\t\t}));\n\n\t\t\t\tconst resolvedFileStateArray =\n\t\t\t\t\t!multiple ? newFileStateArray : [...existingFileStateArray, ...newFileStateArray];\n\n\t\t\t\tset(\n\t\t\t\t\t{\n\t\t\t\t\t\terrors,\n\t\t\t\t\t\tfileStateArray: resolvedFileStateArray,\n\t\t\t\t\t\tisDraggingOver: false,\n\t\t\t\t\t},\n\t\t\t\t\t{ shouldNotifySync: true }\n\t\t\t\t);\n\n\t\t\t\tawait actions.handleFileUpload({ newFileStateArray });\n\t\t\t},\n\t\t\tclearErrors: () => {\n\t\t\t\tset({ errors: [], isInvalid: false });\n\t\t\t},\n\n\t\t\tclearFiles: () => {\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tactions.clearObjectURLs();\n\n\t\t\t\tset({ errors: [], fileStateArray: [], isInvalid: false });\n\t\t\t},\n\n\t\t\tclearObjectURLs: () => {\n\t\t\t\tconst { fileStateArray } = get();\n\n\t\t\t\tfor (const fileState of fileStateArray) {\n\t\t\t\t\tclearObjectURL(fileState, disablePreviewGenForNonImageFiles);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\thandleChange: async (event) => {\n\t\t\t\tconst fileList = event.target.files;\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tawait actions.addFiles(fileList);\n\n\t\t\t\tclearInputValue();\n\t\t\t},\n\n\t\t\thandleDragEnter: (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tset({ isDraggingOver: true });\n\t\t\t},\n\n\t\t\thandleDragLeave: (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tset({ isDraggingOver: false });\n\t\t\t},\n\n\t\t\thandleDragOver: (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t},\n\n\t\t\thandleDrop: async (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tconst fileList = event.dataTransfer.files;\n\n\t\t\t\tawait actions.addFiles(fileList);\n\t\t\t},\n\n\t\t\thandleFileUpload: async (context) => {\n\t\t\t\tconst { newFileStateArray } = context;\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tif (!onUpload) {\n\t\t\t\t\tfor (const fileState of newFileStateArray) {\n\t\t\t\t\t\tactions.updateFileState({ fileStateOrID: fileState, progress: 100, status: \"success\" });\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait onUpload({\n\t\t\t\t\t\tfileStateArray: newFileStateArray,\n\t\t\t\t\t\tonError: (ctx) => {\n\t\t\t\t\t\t\tconst { error, fileStateOrID } = ctx;\n\n\t\t\t\t\t\t\tconst errorContext = getErrorContext(error);\n\n\t\t\t\t\t\t\tactions.updateFileState({ error: errorContext, fileStateOrID, status: \"error\" });\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonProgress: (ctx) => {\n\t\t\t\t\t\t\tconst { fileStateOrID, progress } = ctx;\n\n\t\t\t\t\t\t\tactions.updateFileState({ fileStateOrID, progress });\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonSuccess: (ctx) => {\n\t\t\t\t\t\t\tconst { fileStateOrID } = ctx;\n\n\t\t\t\t\t\t\tactions.updateFileState({ fileStateOrID, progress: 100, status: \"success\" });\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\t// == Handle Errors ==\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst errorContext = getErrorContext(error as Error);\n\n\t\t\t\t\tfor (const fileState of newFileStateArray) {\n\t\t\t\t\t\tactions.updateFileState({\n\t\t\t\t\t\t\terror: errorContext,\n\t\t\t\t\t\t\tfileStateOrID: fileState,\n\t\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\thandleKeyDown: (event) => {\n\t\t\t\tconst isEnterKey = event.key === \"Enter\";\n\t\t\t\tconst isSpaceKey = event.key === \" \";\n\n\t\t\t\tconst isAllowedKey = isEnterKey || isSpaceKey;\n\n\t\t\t\tif (!isAllowedKey) return;\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tactions.openFilePicker();\n\t\t\t},\n\n\t\t\thandlePaste: async (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tconst fileList = event.clipboardData.files;\n\n\t\t\t\tawait actions.addFiles(fileList);\n\t\t\t},\n\n\t\t\topenFilePicker: () => {\n\t\t\t\tinputRef.current?.click();\n\t\t\t},\n\n\t\t\tremoveFile: (ctx) => {\n\t\t\t\tconst { fileStateOrID } = ctx;\n\n\t\t\t\tconst { fileStateArray } = get();\n\n\t\t\t\tconst updatedFileStateArray = fileStateArray.filter((fileState) => {\n\t\t\t\t\tif (!isMatchingFile({ fileState, fileStateOrID })) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tclearObjectURL(fileState, disablePreviewGenForNonImageFiles);\n\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t\tset({ errors: [], fileStateArray: updatedFileStateArray });\n\t\t\t},\n\n\t\t\tsetInputRef: (element) => {\n\t\t\t\tinputRef.current = element;\n\t\t\t},\n\n\t\t\tupdateFileState: (ctx) => {\n\t\t\t\tconst { fileStateOrID, ...updatedFileState } = ctx;\n\n\t\t\t\tconst { fileStateArray } = get();\n\n\t\t\t\tconst updatedFileStateArray: DropZoneState[\"fileStateArray\"] = fileStateArray.map(\n\t\t\t\t\t(fileState) => {\n\t\t\t\t\t\tif (!isMatchingFile({ fileState, fileStateOrID })) {\n\t\t\t\t\t\t\treturn fileState;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...fileState,\n\t\t\t\t\t\t\t...updatedFileState,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tset({ fileStateArray: updatedFileStateArray }, { shouldNotifySync: true });\n\t\t\t},\n\t\t},\n\t}));\n\n\t// == File change subscription\n\tstore.subscribe.withSelector(\n\t\t(state) => state.fileStateArray,\n\t\t(fileStateArray) => {\n\t\t\tonFilesChange?.({ fileStateArray });\n\t\t}\n\t);\n\n\t// == Set `isInvalid` to true if there are errors\n\tstore.subscribe.withSelector(\n\t\t(state) => state.errors,\n\t\t(errors) => {\n\t\t\tif (errors.length === 0) return;\n\n\t\t\tstore.setState({ isInvalid: true });\n\n\t\t\t// == Reset to false after 1.5 seconds\n\t\t\tsetTimeout(() => store.setState({ isInvalid: false }), 1500);\n\t\t}\n\t);\n\n\treturn store;\n};\n","import { dataAttr } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useCompareValue, useStore, useUnmountEffect } from \"@zayne-labs/toolkit-react\";\nimport { composeRefs, composeTwoEventHandlers } from \"@zayne-labs/toolkit-react/utils\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport { createDropZoneStore } from \"./drop-zone-store\";\nimport type { DropZonePropGetters, UseDropZoneProps, UseDropZoneResult } from \"./types\";\nimport { getScopeAttrs } from \"./utils\";\n\nexport const useDropZone = (props?: UseDropZoneProps): UseDropZoneResult => {\n\tconst {\n\t\tallowedFileTypes,\n\t\tdisabled = false,\n\t\tdisableFilePickerOpenOnAreaClick = false,\n\t\tdisableInternalStateSubscription = false,\n\t\tdisablePreviewGenForNonImageFiles = true,\n\t\tinitialFiles,\n\t\tmaxFileCount,\n\t\tmaxFileSize,\n\t\tmultiple,\n\t\tonFilesChange,\n\t\tonUpload,\n\t\tonValidationError,\n\t\tonValidationSuccess,\n\t\trejectDuplicateFiles = true,\n\t\tunstyled: globalUnstyled = false,\n\t\tvalidator,\n\t} = props ?? {};\n\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\n\tconst stableOnFilesChange = useCallbackRef(onFilesChange);\n\tconst stableOnUpload = useCallbackRef(onUpload);\n\tconst stableOnUploadError = useCallbackRef(onValidationError);\n\tconst stableOnUploadSuccess = useCallbackRef(onValidationSuccess);\n\tconst stableValidator = useCallbackRef(validator);\n\n\tconst shallowComparedInitialFiles = useCompareValue(initialFiles);\n\tconst shallowComparedMaxFileSize = useCompareValue(maxFileSize);\n\tconst shallowComparedAllowedFileTypes = useCompareValue(allowedFileTypes);\n\n\tconst storeApi = useMemo(() => {\n\t\treturn createDropZoneStore({\n\t\t\tallowedFileTypes: shallowComparedAllowedFileTypes,\n\t\t\tdisablePreviewGenForNonImageFiles,\n\t\t\tinitialFiles: shallowComparedInitialFiles,\n\t\t\tmaxFileCount,\n\t\t\tmaxFileSize: shallowComparedMaxFileSize,\n\t\t\tmultiple,\n\t\t\tonFilesChange: stableOnFilesChange,\n\t\t\tonUpload: stableOnUpload,\n\t\t\tonValidationError: stableOnUploadError,\n\t\t\tonValidationSuccess: stableOnUploadSuccess,\n\t\t\trejectDuplicateFiles,\n\t\t\tvalidator: stableValidator,\n\t\t});\n\t}, [\n\t\tshallowComparedAllowedFileTypes,\n\t\tdisablePreviewGenForNonImageFiles,\n\t\tshallowComparedInitialFiles,\n\t\tmaxFileCount,\n\t\tshallowComparedMaxFileSize,\n\t\tmultiple,\n\t\tstableOnFilesChange,\n\t\tstableOnUpload,\n\t\tstableOnUploadError,\n\t\tstableOnUploadSuccess,\n\t\trejectDuplicateFiles,\n\t\tstableValidator,\n\t]);\n\n\tconst actions = storeApi.getState().actions;\n\n\tuseUnmountEffect(() => {\n\t\tactions.clearObjectURLs();\n\t});\n\n\t/* eslint-disable react-hooks/hooks -- ignore */\n\tconst useDropZoneStore: UseDropZoneResult[\"useDropZoneStore\"] = (selector) => {\n\t\treturn useStore(storeApi as never, selector);\n\t};\n\n\tconst isDraggingOver = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isDraggingOver : null\n\t);\n\n\tconst isInvalid = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isInvalid : null\n\t);\n\t/* eslint-enable react-hooks/hooks -- ignore */\n\n\tconst getContainerProps: UseDropZoneResult[\"propGetters\"][\"getContainerProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst { unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\tconst isDisabled = disabled;\n\t\t\tconst onFileDrop = !isDisabled ? actions.handleDrop : undefined;\n\t\t\tconst onFilePaste = !isDisabled ? actions.handlePaste : undefined;\n\t\t\tconst tabIndex = !isDisabled ? 0 : undefined;\n\t\t\tconst onAreaClick =\n\t\t\t\t!isDisabled && !disableFilePickerOpenOnAreaClick ? actions.openFilePicker : undefined;\n\t\t\tconst onKeyDown =\n\t\t\t\t!isDisabled && !disableFilePickerOpenOnAreaClick ? actions.handleKeyDown : undefined;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"container\"),\n\t\t\t\trole: \"region\",\n\t\t\t\t...(!disableInternalStateSubscription && {\n\t\t\t\t\t\"data-drag-over\": dataAttr(isDraggingOver),\n\t\t\t\t\t\"data-invalid\": dataAttr(isInvalid),\n\t\t\t\t}),\n\t\t\t\t...restOfInnerProps,\n\t\t\t\t...(!unstyled && {\n\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t`relative flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 transition-colors duration-250 ease-out outline-none select-none focus-visible:border-zu-ring/50`,\n\t\t\t\t\t\t`data-disabled:pointer-events-none data-drag-over:opacity-60 data-invalid:border-zu-destructive data-invalid:ring-zu-destructive/20`,\n\t\t\t\t\t\tinnerProps.className\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tonClick: composeTwoEventHandlers(onAreaClick, innerProps.onClick),\n\t\t\t\tonDragEnter: composeTwoEventHandlers(actions.handleDragEnter, innerProps.onDragEnter),\n\t\t\t\tonDragLeave: composeTwoEventHandlers(actions.handleDragLeave, innerProps.onDragLeave),\n\t\t\t\tonDragOver: composeTwoEventHandlers(actions.handleDragOver, innerProps.onDragOver),\n\t\t\t\tonDrop: composeTwoEventHandlers(onFileDrop, innerProps.onDrop),\n\t\t\t\tonKeyDown: composeTwoEventHandlers(onKeyDown, innerProps.onKeyDown),\n\t\t\t\tonPaste: composeTwoEventHandlers(onFilePaste, innerProps.onPaste),\n\t\t\t\ttabIndex,\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tglobalUnstyled,\n\t\t\tdisabled,\n\t\t\tactions.handleDrop,\n\t\t\tactions.handlePaste,\n\t\t\tactions.openFilePicker,\n\t\t\tactions.handleKeyDown,\n\t\t\tactions.handleDragEnter,\n\t\t\tactions.handleDragLeave,\n\t\t\tactions.handleDragOver,\n\t\t\tdisableFilePickerOpenOnAreaClick,\n\t\t\tdisableInternalStateSubscription,\n\t\t\tisDraggingOver,\n\t\t\tisInvalid,\n\t\t]\n\t);\n\n\tconst refCallback: React.RefCallback<HTMLInputElement> = useCallbackRef((node) => {\n\t\tinputRef.current = node;\n\t\tactions.setInputRef(node);\n\t});\n\n\tconst getInputProps: UseDropZoneResult[\"propGetters\"][\"getInputProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps.disabled ?? disabled;\n\n\t\t\tconst onFileChange = !isDisabled ? actions.handleChange : undefined;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"input\"),\n\t\t\t\t...(!disableInternalStateSubscription && { \"data-drag-over\": dataAttr(isDraggingOver) }),\n\t\t\t\t...innerProps,\n\t\t\t\taccept: allowedFileTypes ? allowedFileTypes.join(\", \") : innerProps.accept,\n\t\t\t\tclassName: cnMerge(\"hidden\", innerProps.className),\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tmultiple: multiple ?? innerProps.multiple,\n\t\t\t\tonChange: composeTwoEventHandlers(onFileChange, innerProps.onChange),\n\t\t\t\tref: composeRefs(refCallback, innerProps.ref),\n\t\t\t\ttype: \"file\",\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tactions.handleChange,\n\t\t\tallowedFileTypes,\n\t\t\tdisableInternalStateSubscription,\n\t\t\tdisabled,\n\t\t\tisDraggingOver,\n\t\t\tmultiple,\n\t\t\trefCallback,\n\t\t]\n\t);\n\n\tconst getTriggerProps: UseDropZoneResult[\"propGetters\"][\"getTriggerProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps.disabled ?? disabled;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"trigger\"),\n\t\t\t\ttype: \"button\",\n\t\t\t\t...innerProps,\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(actions.openFilePicker, innerProps.onClick),\n\t\t\t};\n\t\t},\n\t\t[actions.openFilePicker, disabled]\n\t);\n\n\tconst getFileListProps: UseDropZoneResult[\"propGetters\"][\"getFileListProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst { orientation = \"vertical\", unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-list\"),\n\t\t\t\t\"data-orientation\": orientation,\n\t\t\t\t...restOfInnerProps,\n\t\t\t\t...(!unstyled && {\n\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t\"flex flex-col gap-2\",\n\t\t\t\t\t\torientation === \"horizontal\" && \"flex-row overflow-x-auto p-1.5\",\n\t\t\t\t\t\tinnerProps.className\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t};\n\t\t},\n\t\t[globalUnstyled]\n\t);\n\n\tconst getFileItemProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst { unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item\"),\n\t\t\t\t...restOfInnerProps,\n\t\t\t\t...(!unstyled && {\n\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t\"relative flex animate-files-in items-center gap-2.5 rounded-md border p-2\",\n\t\t\t\t\t\tinnerProps.className\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t};\n\t\t},\n\t\t[globalUnstyled]\n\t);\n\n\tconst getFileItemProgressProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProgressProps\"] =\n\t\tuseCallback(\n\t\t\t(innerProps) => {\n\t\t\t\tconst { unstyled = globalUnstyled, variant = \"linear\", ...restOfInnerProps } = innerProps;\n\n\t\t\t\treturn {\n\t\t\t\t\t...getScopeAttrs(\"file-item-progress\"),\n\t\t\t\t\trole: \"progressbar\",\n\t\t\t\t\t...restOfInnerProps,\n\t\t\t\t\t...(!unstyled && {\n\t\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t\t\"inline-flex\",\n\t\t\t\t\t\t\tvariant === \"circular\"\n\t\t\t\t\t\t\t\t&& \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n\t\t\t\t\t\t\tvariant === \"fill\"\n\t\t\t\t\t\t\t\t&& `absolute inset-0 bg-zu-primary/50 transition-[clip-path] duration-300 ease-linear [clip-path:var(--clip-path)]`,\n\t\t\t\t\t\t\tvariant === \"linear\"\n\t\t\t\t\t\t\t\t&& \"relative h-1.5 w-full overflow-hidden rounded-full bg-zu-primary/20\",\n\t\t\t\t\t\t\trestOfInnerProps.className\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[globalUnstyled]\n\t\t);\n\n\tconst getFileItemDeleteProps: UseDropZoneResult[\"propGetters\"][\"getFileItemDeleteProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst { fileStateOrID, ...restOfInnerProps } = innerProps;\n\n\t\t\tconst isDisabled = innerProps.disabled ?? disabled;\n\n\t\t\tconst onRemoveFile = () => fileStateOrID && actions.removeFile({ fileStateOrID });\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-delete\"),\n\t\t\t\ttype: \"button\",\n\t\t\t\t...restOfInnerProps,\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(onRemoveFile, restOfInnerProps.onClick),\n\t\t\t};\n\t\t},\n\t\t[actions, disabled]\n\t);\n\n\tconst getFileItemPreviewProps: UseDropZoneResult[\"propGetters\"][\"getFileItemPreviewProps\"] =\n\t\tuseCallback(\n\t\t\t(innerProps) => {\n\t\t\t\tconst { unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\t\treturn {\n\t\t\t\t\t...getScopeAttrs(\"file-item-preview\"),\n\t\t\t\t\t...restOfInnerProps,\n\t\t\t\t\t...(!unstyled && {\n\t\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t\t`relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-md bg-zu-accent/50 [&>svg]:size-10`,\n\t\t\t\t\t\t\tinnerProps.className\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[globalUnstyled]\n\t\t);\n\n\tconst getFileItemMetadataProps: UseDropZoneResult[\"propGetters\"][\"getFileItemMetadataProps\"] =\n\t\tuseCallback(\n\t\t\t(innerProps) => {\n\t\t\t\tconst { unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\t\treturn {\n\t\t\t\t\t...getScopeAttrs(\"file-item-metadata\"),\n\t\t\t\t\t...restOfInnerProps,\n\t\t\t\t\t...(!unstyled && {\n\t\t\t\t\t\tclassName: cnMerge(\"flex min-w-0 grow flex-col\", innerProps.className),\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[globalUnstyled]\n\t\t);\n\n\tconst getFileItemClearProps: UseDropZoneResult[\"propGetters\"][\"getFileItemClearProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps.disabled ?? disabled;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-clear\"),\n\t\t\t\ttype: \"button\",\n\t\t\t\t...innerProps,\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(actions.clearFiles, innerProps.onClick),\n\t\t\t};\n\t\t},\n\t\t[actions.clearFiles, disabled]\n\t);\n\n\tconst propGetters = useMemo<DropZonePropGetters>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tgetContainerProps,\n\t\t\t\tgetFileItemClearProps,\n\t\t\t\tgetFileItemDeleteProps,\n\t\t\t\tgetFileItemMetadataProps,\n\t\t\t\tgetFileItemPreviewProps,\n\t\t\t\tgetFileItemProgressProps,\n\t\t\t\tgetFileItemProps,\n\t\t\t\tgetFileListProps,\n\t\t\t\tgetInputProps,\n\t\t\t\tgetTriggerProps,\n\t\t\t}) satisfies DropZonePropGetters,\n\t\t[\n\t\t\tgetContainerProps,\n\t\t\tgetFileListProps,\n\t\t\tgetFileItemClearProps,\n\t\t\tgetFileItemDeleteProps,\n\t\t\tgetFileItemMetadataProps,\n\t\t\tgetFileItemPreviewProps,\n\t\t\tgetFileItemProgressProps,\n\t\t\tgetFileItemProps,\n\t\t\tgetInputProps,\n\t\t\tgetTriggerProps,\n\t\t]\n\t);\n\n\tconst stableUseDropZoneStore = useCallbackRef(useDropZoneStore);\n\n\tconst result = useMemo<UseDropZoneResult>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tdisabled,\n\t\t\t\tdisableInternalStateSubscription,\n\t\t\t\tinputRef,\n\t\t\t\tpropGetters,\n\t\t\t\tstoreApi,\n\t\t\t\tuseDropZoneStore: stableUseDropZoneStore,\n\t\t\t}) satisfies UseDropZoneResult,\n\t\t[disabled, disableInternalStateSubscription, propGetters, storeApi, stableUseDropZoneStore]\n\t);\n\n\treturn result;\n};\n","\"use client\";\n\nimport { dataAttr, formatBytes } from \"@zayne-labs/toolkit-core\";\nimport { useCompareSelector } from \"@zayne-labs/toolkit-react\";\nimport type {\n\tCssWithCustomProperties,\n\tInferProps,\n\tPolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport {\n\tisBoolean,\n\tisFunction,\n\tisNumber,\n\ttype AnyFunction,\n\ttype SelectorFn,\n} from \"@zayne-labs/toolkit-type-helpers\";\nimport { useMemo } from \"react\";\nimport { For } from \"@/components/common/for\";\nimport { Presence } from \"@/components/common/presence\";\nimport { Slot } from \"@/components/common/slot\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport {\n\tDropZoneRootContextProvider,\n\tDropZoneStoreContextProvider,\n\tFileItemContextProvider,\n\tuseDropZoneRootContext,\n\tuseDropZoneStoreContext,\n\tuseFileItemContext,\n\ttype DropZoneRootContextType,\n\ttype FileItemContextType,\n} from \"./drop-zone-context\";\nimport {\n\tFileArchiveIcon,\n\tFileAudioIcon,\n\tFileCodeIcon,\n\tFileCogIcon,\n\tFileIcon,\n\tFileTextIcon,\n\tFileVideoIcon,\n} from \"./icons\";\nimport type { DropZoneStore, PartInputProps, UseDropZoneProps } from \"./types\";\nimport { useDropZone } from \"./use-drop-zone\";\n\ntype DropZoneRootProps = UseDropZoneProps & { children: React.ReactNode };\n\nexport function DropZoneRoot(props: DropZoneRootProps) {\n\tconst { children, ...restOfProps } = props;\n\n\tconst { disabled, disableInternalStateSubscription, inputRef, propGetters, storeApi } =\n\t\tuseDropZone(restOfProps);\n\n\tconst rootContextValue = useMemo<DropZoneRootContextType>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tdisabled,\n\t\t\t\tdisableInternalStateSubscription,\n\t\t\t\tinputRef,\n\t\t\t\tpropGetters,\n\t\t\t}) satisfies DropZoneRootContextType,\n\t\t[disableInternalStateSubscription, disabled, inputRef, propGetters]\n\t);\n\n\treturn (\n\t\t<DropZoneStoreContextProvider store={storeApi}>\n\t\t\t<DropZoneRootContextProvider value={rootContextValue}>{children}</DropZoneRootContextProvider>\n\t\t</DropZoneStoreContextProvider>\n\t);\n}\n\ntype DropZoneContextProps<TSlice> = {\n\tchildren: React.ReactNode | ((context: TSlice) => React.ReactNode);\n\tselector?: SelectorFn<DropZoneStore, TSlice>;\n};\n\nexport function DropZoneContext<TSlice = DropZoneStore>(props: DropZoneContextProps<TSlice>) {\n\tconst { children, selector } = props;\n\n\tconst dropZoneCtx = useDropZoneStoreContext(useCompareSelector(selector));\n\n\tconst resolvedChildren = isFunction(children) ? children(dropZoneCtx) : children;\n\n\treturn resolvedChildren;\n}\n\ntype DropZoneContainerProps = PartInputProps[\"container\"] & { asChild?: boolean };\n\nexport function DropZoneContainer<TElement extends React.ElementType = \"div\">(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneContainerProps>\n) {\n\tconst { as: Element = \"div\", asChild, ...restOfProps } = props;\n\n\tconst { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();\n\n\tconst isDraggingOver = useDropZoneStoreContext((store) =>\n\t\tdisableInternalStateSubscription ? store.isDraggingOver : null\n\t);\n\n\tconst isInvalid = useDropZoneStoreContext((store) =>\n\t\tdisableInternalStateSubscription ? store.isInvalid : null\n\t);\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component\n\t\t\t{...propGetters.getContainerProps({\n\t\t\t\t...(disableInternalStateSubscription && {\n\t\t\t\t\t\"data-drag-over\": dataAttr(isDraggingOver),\n\t\t\t\t\t\"data-invalid\": dataAttr(isInvalid),\n\t\t\t\t}),\n\t\t\t\t...restOfProps,\n\t\t\t})}\n\t\t/>\n\t);\n}\n\ntype DropZoneInputProps = PartInputProps[\"input\"] & { asChild?: boolean };\n\nexport function DropZoneInput(props: DropZoneInputProps) {\n\tconst { asChild, ...restOfProps } = props;\n\n\tconst { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();\n\n\tconst isDraggingOver = useDropZoneStoreContext((store) =>\n\t\tdisableInternalStateSubscription ? store.isDraggingOver : null\n\t);\n\n\tconst Component = asChild ? Slot.Root : \"input\";\n\n\treturn (\n\t\t<Component\n\t\t\t{...propGetters.getInputProps({\n\t\t\t\t...(disableInternalStateSubscription && { \"data-drag-over\": dataAttr(isDraggingOver) }),\n\t\t\t\t...restOfProps,\n\t\t\t})}\n\t\t/>\n\t);\n}\n\ntype DropZoneAreaProps<TSlice> = DropZoneContextProps<TSlice>\n\t& PartInputProps[\"container\"] & {\n\t\tclassNames?: Partial<Record<Extract<keyof PartInputProps, \"container\" | \"input\">, string>>;\n\t\textraProps?: Partial<Pick<PartInputProps, \"container\" | \"input\">>;\n\t};\n\nexport function DropZoneArea<TSlice = DropZoneStore>(props: DropZoneAreaProps<TSlice>) {\n\tconst { children, className, classNames, extraProps, selector, ...restOfProps } = props;\n\n\treturn (\n\t\t<DropZoneContainer\n\t\t\t{...extraProps?.container}\n\t\t\t{...restOfProps}\n\t\t\tclassName={cnMerge(extraProps?.container?.className, className, classNames?.container)}\n\t\t>\n\t\t\t<DropZoneInput\n\t\t\t\t{...extraProps?.input}\n\t\t\t\tclassName={cnMerge(extraProps?.input?.className, classNames?.input)}\n\t\t\t/>\n\n\t\t\t<DropZoneContext selector={selector}>{children}</DropZoneContext>\n\t\t</DropZoneContainer>\n\t);\n}\n\ntype DropZoneTriggerProps = PartInputProps[\"trigger\"] & { asChild?: boolean };\n\nexport function DropZoneTrigger(props: DropZoneTriggerProps) {\n\tconst { asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\treturn <Component {...propGetters.getTriggerProps(restOfProps)} />;\n}\n\ntype ListPerItemContext = Pick<DropZoneStore, \"actions\"> & {\n\tarray: DropZoneStore[\"fileStateArray\"];\n\tfileState: DropZoneStore[\"fileStateArray\"][number];\n\tindex: number;\n};\n\ntype FileListPerItemVariant = {\n\tchildren: React.ReactNode | ((context: ListPerItemContext) => React.ReactNode);\n\trenderMode?: \"per-item\";\n};\n\ntype ListManualListContext = Pick<DropZoneStore, \"actions\" | \"fileStateArray\">;\n\ntype FileListManualListVariant = {\n\tchildren: React.ReactNode | ((context: ListManualListContext) => React.ReactNode);\n\trenderMode: \"manual-list\";\n};\n\ntype DropZoneFileListProps = Omit<PartInputProps[\"fileList\"], \"children\"> & {\n\tasChild?: boolean;\n\tforceMount?: boolean;\n} & (FileListManualListVariant | FileListPerItemVariant);\n\nexport function DropZoneFileList<TElement extends React.ElementType = \"ul\">(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneFileListProps>\n) {\n\tconst {\n\t\tas: Element = \"ul\",\n\t\tasChild,\n\t\tchildren,\n\t\tforceMount = false,\n\t\trenderMode = \"per-item\",\n\t\t...restOfProps\n\t} = props;\n\n\tconst fileStateArray = useDropZoneStoreContext((store) => store.fileStateArray);\n\tconst actions = useDropZoneStoreContext((store) => store.actions);\n\n\tconst { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();\n\n\tconst childrenMap = {\n\t\t\"manual-list\": () => {\n\t\t\tconst childrenFn = children as Extract<FileListManualListVariant[\"children\"], AnyFunction>;\n\t\t\treturn childrenFn({ actions, fileStateArray });\n\t\t},\n\t\t\"per-item\": () => {\n\t\t\tconst childrenFn = children as Extract<FileListPerItemVariant[\"children\"], AnyFunction>;\n\n\t\t\treturn (\n\t\t\t\t<For\n\t\t\t\t\teach={fileStateArray}\n\t\t\t\t\trenderItem={(fileState, index, array) => childrenFn({ actions, array, fileState, index })}\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t} satisfies Record<typeof renderMode, () => React.ReactNode>;\n\n\tconst hasFiles = fileStateArray.length > 0;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Presence present={hasFiles} forceMount={forceMount}>\n\t\t\t<Component\n\t\t\t\t{...propGetters.getFileListProps({\n\t\t\t\t\t...(disableInternalStateSubscription && { \"data-state\": hasFiles ? \"active\" : \"inactive\" }),\n\t\t\t\t\t...restOfProps,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{isFunction(children) ? childrenMap[renderMode]() : children}\n\t\t\t</Component>\n\t\t</Presence>\n\t);\n}\n\ntype DropZoneFileItemProps = FileItemContextType & PartInputProps[\"fileItem\"] & { asChild?: boolean };\n\nexport function DropZoneFileItem<TElement extends React.ElementType = \"li\">(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneFileItemProps>\n) {\n\tconst { as: Element = \"li\", asChild, fileState, ...restOfProps } = props;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\tconst contextValue = useMemo<FileItemContextType>(\n\t\t() => ({ fileState }) satisfies FileItemContextType,\n\t\t[fileState]\n\t);\n\n\treturn (\n\t\t<FileItemContextProvider value={contextValue}>\n\t\t\t<Component {...propGetters.getFileItemProps(restOfProps)} />\n\t\t</FileItemContextProvider>\n\t);\n}\n\ntype DropZoneFileItemDeleteProps = PartInputProps[\"fileItemDelete\"] & { asChild?: boolean };\n\nexport function DropZoneFileItemDelete(props: DropZoneFileItemDeleteProps) {\n\tconst { asChild, fileStateOrID, ...restOfProps } = props;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst fileItemContextValue = useFileItemContext();\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\tconst resolvedFileStateOrID = fileStateOrID ?? fileItemContextValue?.fileState;\n\n\treturn (\n\t\t<Component\n\t\t\t{...propGetters.getFileItemDeleteProps({ fileStateOrID: resolvedFileStateOrID, ...restOfProps })}\n\t\t/>\n\t);\n}\n\ntype DropZoneFileItemProgressProps = PartInputProps[\"fileItemProgress\"] & {\n\tasChild?: boolean;\n\tforceMount?: boolean;\n\tsize?: number;\n};\n\nexport function DropZoneFileItemProgress<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneFileItemProgressProps>\n) {\n\tconst {\n\t\tas: Element = \"span\",\n\t\tasChild,\n\t\tforceMount = false,\n\t\tsize = 40,\n\t\tvariant = \"linear\",\n\t\t...restOfProps\n\t} = props;\n\n\tconst fileItemContextValue = useFileItemContext();\n\n\tconst fileState = fileItemContextValue?.fileState;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tif (!fileState) {\n\t\treturn null;\n\t}\n\n\tconst currentProgress = fileState.progress;\n\n\tconst shouldRender = forceMount || fileState.progress !== 100;\n\n\tif (!shouldRender) {\n\t\treturn null;\n\t}\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\tconst componentProps = propGetters.getFileItemProgressProps({ variant, ...restOfProps });\n\n\tswitch (variant) {\n\t\tcase \"circular\": {\n\t\t\tconst circumference = 2 * Math.PI * ((size - 4) / 2);\n\t\t\tconst strokeDashoffset = circumference - (currentProgress / 100) * circumference;\n\n\t\t\treturn (\n\t\t\t\t<Component {...componentProps}>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclassName=\"-rotate-90\"\n\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\theight={size}\n\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tclassName=\"text-zu-primary/20\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tcx={size / 2}\n\t\t\t\t\t\t\tcy={size / 2}\n\t\t\t\t\t\t\tr={(size - 4) / 2}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tclassName=\"text-zu-primary transition-[stroke-dashoffset] duration-300 ease-linear\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeDasharray={circumference}\n\t\t\t\t\t\t\tstrokeDashoffset={strokeDashoffset}\n\t\t\t\t\t\t\tcx={size / 2}\n\t\t\t\t\t\t\tcy={size / 2}\n\t\t\t\t\t\t\tr={(size - 4) / 2}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</Component>\n\t\t\t);\n\t\t}\n\n\t\tcase \"fill\": {\n\t\t\tconst topInset = 100 - currentProgress;\n\n\t\t\treturn (\n\t\t\t\t<Component\n\t\t\t\t\t{...componentProps}\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"--clip-path\": `inset(${topInset}% 0% 0% 0%)`,\n\t\t\t\t\t\t} satisfies CssWithCustomProperties as CssWithCustomProperties\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tcase \"linear\": {\n\t\t\treturn (\n\t\t\t\t<Component {...componentProps}>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"inline-block size-full grow translate-x-(--translate-distance) bg-zu-primary transition-transform duration-300 ease-linear\"\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"--translate-distance\": `-${100 - currentProgress}%`,\n\t\t\t\t\t\t\t} satisfies CssWithCustomProperties as CssWithCustomProperties\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Component>\n\t\t\t);\n\t\t}\n\n\t\tdefault: {\n\t\t\tvariant satisfies never;\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\ntype RenderPreviewDetails<TElement extends React.ElementType = \"svg\"> = { node?: React.ReactNode } & {\n\tprops?: InferProps<TElement>;\n};\n\ntype RenderPropContext = Pick<FileItemContextType, \"fileState\"> & {\n\tfileExtension: string;\n\tfileType: string;\n};\n\ntype RenderPreviewObject = {\n\tarchive?: RenderPreviewDetails;\n\taudio?: RenderPreviewDetails;\n\tcode?: RenderPreviewDetails;\n\tdefault?: RenderPreviewDetails;\n\texecutable?: RenderPreviewDetails;\n\timage?: RenderPreviewDetails<\"img\">;\n\ttext?: RenderPreviewDetails;\n\tvideo?: RenderPreviewDetails;\n};\ntype RenderPreviewFn = (context: RenderPropContext) => RenderPreviewObject;\n\ntype RenderPreview = RenderPreviewFn | RenderPreviewObject;\n\ntype DropZoneFileItemPreviewProps = Omit<PartInputProps[\"fileItemPreview\"], \"children\">\n\t& Partial<Pick<FileItemContextType, \"fileState\">> & {\n\t\tasChild?: boolean;\n\t\tchildren?:\n\t\t\t| React.ReactNode\n\t\t\t| ((context: RenderPropContext & { fallbackPreview: () => React.ReactNode }) => React.ReactNode);\n\t\trenderPreview?: boolean | RenderPreview;\n\t};\n\nexport function DropZoneFileItemPreview<TElement extends React.ElementType>(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneFileItemPreviewProps>\n) {\n\tconst {\n\t\tas: Element = \"span\",\n\t\tasChild,\n\t\tchildren,\n\t\tfileState: fileStateProp,\n\t\trenderPreview = true,\n\t\t...restOfProps\n\t} = props;\n\n\tconst fileItemContextValue = useFileItemContext();\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst fileState = fileStateProp ?? fileItemContextValue?.fileState;\n\n\tif (!fileState) {\n\t\treturn null;\n\t}\n\n\tconst fileType = fileState.file.type ?? \"\";\n\n\tconst fileExtension = fileState.file.name?.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\tconst fallbackPreview = () =>\n\t\tgetFilePreviewOrIcon({ fileExtension, fileState, fileType, renderPreview });\n\n\tconst resolvedChildren =\n\t\tisFunction(children) ? children({ fallbackPreview, fileExtension, fileState, fileType }) : children;\n\n\treturn (\n\t\t<Component {...propGetters.getFileItemPreviewProps(restOfProps)}>\n\t\t\t{renderPreview && fallbackPreview()}\n\t\t\t{resolvedChildren}\n\t\t</Component>\n\t);\n}\n\nconst getFilePreviewOrIcon = (\n\tcontext: Pick<Required<DropZoneFileItemPreviewProps>, \"renderPreview\"> & Required<RenderPropContext>\n) => {\n\tconst { fileExtension, fileState, fileType, renderPreview } = context;\n\n\tconst renderPreviewValue = isBoolean(renderPreview) ? {} : renderPreview;\n\n\tconst resolvedRenderPreviewObject =\n\t\tisFunction(renderPreviewValue) ?\n\t\t\trenderPreviewValue({ fileExtension, fileState, fileType })\n\t\t:\trenderPreviewValue;\n\n\tswitch (true) {\n\t\tcase fileType.startsWith(\"image/\"): {\n\t\t\treturn (\n\t\t\t\tresolvedRenderPreviewObject.image?.node ?? (\n\t\t\t\t\t<img\n\t\t\t\t\t\t{...resolvedRenderPreviewObject.image?.props}\n\t\t\t\t\t\tsrc={fileState.preview}\n\t\t\t\t\t\talt={fileState.file.name ?? \"\"}\n\t\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\t\"size-full object-cover\",\n\t\t\t\t\t\t\tresolvedRenderPreviewObject.image?.props?.className\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase fileType.startsWith(\"video/\"): {\n\t\t\treturn (\n\t\t\t\tresolvedRenderPreviewObject.video?.node ?? (\n\t\t\t\t\t<FileVideoIcon\n\t\t\t\t\t\t{...resolvedRenderPreviewObject.video?.props}\n\t\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\t\"size-full object-cover\",\n\t\t\t\t\t\t\tresolvedRenderPreviewObject.video?.props?.className\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase fileType.startsWith(\"audio/\"): {\n\t\t\treturn (\n\t\t\t\tresolvedRenderPreviewObject.audio?.node ?? (\n\t\t\t\t\t<FileAudioIcon\n\t\t\t\t\t\t{...resolvedRenderPreviewObject.audio?.props}\n\t\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\t\"size-full object-cover\",\n\t\t\t\t\t\t\tresolvedRenderPreviewObject.audio?.props?.className\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase fileType.startsWith(\"text/\") || [\"md\", \"pdf\", \"rtf\", \"txt\"].includes(fileExtension): {\n\t\t\treturn (\n\t\t\t\tresolvedRenderPreviewObject.text?.node ?? (\n\t\t\t\t\t<FileTextIcon {...resolvedRenderPreviewObject.text?.props} />\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase [\n\t\t\t\"c\",\n\t\t\t\"cpp\",\n\t\t\t\"cs\",\n\t\t\t\"css\",\n\t\t\t\"html\",\n\t\t\t\"java\",\n\t\t\t\"js\",\n\t\t\t\"json\",\n\t\t\t\"jsx\",\n\t\t\t\"php\",\n\t\t\t\"py\",\n\t\t\t\"rb\",\n\t\t\t\"ts\",\n\t\t\t\"tsx\",\n\t\t\t\"xml\",\n\t\t].includes(fileExtension): {\n\t\t\treturn (\n\t\t\t\tresolvedRenderPreviewObject.code?.node ?? (\n\t\t\t\t\t<FileCodeIcon {...resolvedRenderPreviewObject.code?.props} />\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase [\"7z\", \"bz2\", \"gz\", \"rar\", \"tar\", \"zip\"].includes(fileExtension): {\n\t\t\treturn (\n\t\t\t\tresolvedRenderPreviewObject.archive?.node ?? (\n\t\t\t\t\t<FileArchiveIcon {...resolvedRenderPreviewObject.archive?.props} />\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase [\"apk\", \"app\", \"deb\", \"exe\", \"msi\", \"rpm\"].includes(fileExtension): {\n\t\t\treturn (\n\t\t\t\tresolvedRenderPreviewObject.executable?.node ?? (\n\t\t\t\t\t<FileCogIcon {...resolvedRenderPreviewObject.executable?.props} />\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tdefault: {\n\t\t\treturn (\n\t\t\t\tresolvedRenderPreviewObject.default?.node ?? (\n\t\t\t\t\t<FileIcon {...resolvedRenderPreviewObject.default?.props} />\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\t}\n};\n\ntype DropZoneFileItemMetadataProps = Omit<PartInputProps[\"fileItemMetadata\"], \"children\">\n\t& Partial<Pick<FileItemContextType, \"fileState\">> & {\n\t\tasChild?: boolean;\n\t\tchildren?: React.ReactNode | ((context: Pick<FileItemContextType, \"fileState\">) => React.ReactNode);\n\t\tclassNames?: {\n\t\t\tname?: string;\n\t\t\tsize?: string;\n\t\t};\n\t\tsize?: \"default\" | \"sm\";\n\t};\n\nexport function DropZoneFileItemMetadata(props: DropZoneFileItemMetadataProps) {\n\tconst {\n\t\tasChild,\n\t\tchildren,\n\t\tclassNames,\n\t\tfileState: fileStateProp,\n\t\tsize = \"default\",\n\t\t...restOfProps\n\t} = props;\n\n\tconst fileItemContextValue = useFileItemContext();\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst fileState = fileStateProp ?? fileItemContextValue?.fileState;\n\n\tif (!fileState) {\n\t\treturn null;\n\t}\n\n\tconst Component = asChild ? Slot.Root : \"div\";\n\n\tconst resolvedChildren = isFunction(children) ? children({ fileState }) : children;\n\n\tconst getDefaultMetadataChildren = () => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<p\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"truncate\",\n\t\t\t\t\t\tsize === \"default\" && \"text-[14px] font-medium\",\n\t\t\t\t\t\tsize === \"sm\" && \"text-[13px] leading-snug\",\n\t\t\t\t\t\tclassNames?.name\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{fileState.file.name}\n\t\t\t\t</p>\n\t\t\t\t<p\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"truncate text-zu-muted-foreground\",\n\t\t\t\t\t\tsize === \"default\" && \"text-[12px]\",\n\t\t\t\t\t\tsize === \"sm\" && \"text-[11px] leading-snug\",\n\t\t\t\t\t\tclassNames?.size\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{isNumber(fileState.file.size) && formatBytes(fileState.file.size)}\n\t\t\t\t</p>\n\t\t\t\t{fileState.error && (\n\t\t\t\t\t<p className=\"text-[12px] text-zu-destructive\">{fileState.error.message}</p>\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\t};\n\n\treturn (\n\t\t<Component {...propGetters.getFileItemMetadataProps(restOfProps)}>\n\t\t\t{resolvedChildren ?? getDefaultMetadataChildren()}\n\t\t</Component>\n\t);\n}\n\ntype DropZoneFileClearProps = PartInputProps[\"fileItemClear\"] & {\n\tasChild?: boolean;\n\tforceMount?: boolean;\n};\n\nexport function DropZoneFileClear(props: DropZoneFileClearProps) {\n\tconst { asChild, forceMount = false, ...restOfProps } = props;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst fileCount = useDropZoneStoreContext((state) => state.fileStateArray.length);\n\n\tconst shouldRender = forceMount || fileCount > 0;\n\n\tif (!shouldRender) {\n\t\treturn null;\n\t}\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\treturn <Component {...propGetters.getFileItemClearProps(restOfProps)} />;\n}\n","export {\n\tDropZoneArea as Area,\n\tDropZoneContainer as Container,\n\tDropZoneContext as Context,\n\tDropZoneFileClear as FileClear,\n\tDropZoneFileItem as FileItem,\n\tDropZoneFileItemDelete as FileItemDelete,\n\tDropZoneFileItemMetadata as FileItemMetadata,\n\tDropZoneFileItemPreview as FileItemPreview,\n\tDropZoneFileItemProgress as FileItemProgress,\n\tDropZoneFileList as FileList,\n\tDropZoneInput as Input,\n\tDropZoneRoot as Root,\n\tDropZoneTrigger as Trigger,\n} from \"./drop-zone\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["generateFileID","generateFileIDPrimitive","generateFileID","Slot.Root"],"sources":["../../../../src/components/ui/drop-zone/drop-zone-context.ts","../../../../src/components/ui/drop-zone/icons.tsx","../../../../src/components/ui/drop-zone/utils.ts","../../../../src/components/ui/drop-zone/drop-zone-store.ts","../../../../src/components/ui/drop-zone/use-drop-zone.ts","../../../../src/components/ui/drop-zone/drop-zone.tsx","../../../../src/components/ui/drop-zone/drop-zone-parts.ts"],"sourcesContent":["import { createCustomContext } from \"@zayne-labs/toolkit-react\";\nimport { createReactStoreContext } from \"@zayne-labs/toolkit-react/zustand\";\nimport type { DropZoneStore, FileState, UseDropZoneResult } from \"./types\";\n\nconst [DropZoneStoreContextProvider, useDropZoneStoreContext] = createReactStoreContext<DropZoneStore>({\n\thookName: \"useDropZoneStoreContext\",\n\tname: \"DropZoneStoreContext\",\n\tproviderName: \"DropZoneRoot\",\n});\n\nexport type DropZoneRootContextType = Pick<\n\tUseDropZoneResult,\n\t\"disabled\" | \"disableInternalStateSubscription\" | \"inputRef\" | \"propGetters\"\n>;\n\nconst [DropZoneRootContextProvider, useDropZoneRootContext] = createCustomContext<DropZoneRootContextType>(\n\t{\n\t\thookName: \"useDropZoneRootContext\",\n\t\tname: \"DropZoneRootContext\",\n\t\tproviderName: \"DropZoneRoot\",\n\t}\n);\n\nexport type FileItemContextType = {\n\tfileState: FileState;\n};\n\nconst [FileItemContextProvider, useFileItemContext] = createCustomContext({\n\tdefaultValue: null as unknown as FileItemContextType,\n\thookName: \"useFileItemContext\",\n\tname: \"FileItemContext\",\n\tproviderName: \"FileItem\",\n\tstrict: false,\n});\n\nexport {\n\tDropZoneRootContextProvider,\n\tDropZoneStoreContextProvider,\n\tFileItemContextProvider,\n\tuseDropZoneRootContext,\n\tuseDropZoneStoreContext,\n\tuseFileItemContext,\n};\n","export const FileVideoIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4m-10 3l5 3l-5 3z\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileAudioIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M17.5 22h.5a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v3\" />\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4M2 19a2 2 0 1 1 4 0v1a2 2 0 1 1-4 0v-4a6 6 0 0 1 12 0v4a2 2 0 1 1-4 0v-1a2 2 0 1 1 4 0\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileTextIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4M10 9H8m8 4H8m8 4H8\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileCodeIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M10 12.5L8 15l2 2.5m4-5l2 2.5l-2 2.5M14 2v4a2 2 0 0 0 2 2h4\" />\n\t\t\t<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7z\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileArchiveIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M10 12v-1m0 7v-2m0-9V6m4-4v4a2 2 0 0 0 2 2h4\" />\n\t\t\t<path d=\"M15.5 22H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v16a2 2 0 0 0 .274 1.01\" />\n\t\t\t<circle cx=\"10\" cy=\"20\" r=\"2\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileCogIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4M3.2 12.9l-.9-.4m.9 2.6l-.9.4\" />\n\t\t\t<path d=\"M4.677 21.5a2 2 0 0 0 1.313.5H18a2 2 0 0 0 2-2V7l-5-5H6a2 2 0 0 0-2 2v2.5m.9 4.7l-.4-.9m.4 6.5l-.4.9m3-7.4l-.4.9m.4 6.5l-.4-.9m2.6-4.3l-.9.4m.9 2.6l-.9-.4\" />\n\t\t\t<circle cx=\"6\" cy=\"14\" r=\"3\" />\n\t\t</g>\n\t</svg>\n);\n\nexport const FileIcon = (props: React.SVGProps<SVGSVGElement>) => (\n\t<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"1em\" height=\"1em\" viewBox=\"0 0 24 24\" {...props}>\n\t\t{/* Icon from Lucide by Lucide Contributors - https://github.com/lucide-icons/lucide/blob/main/LICENSE */}\n\t\t<g fill=\"none\" stroke=\"currentColor\" strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\">\n\t\t\t<path d=\"M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z\" />\n\t\t\t<path d=\"M14 2v4a2 2 0 0 0 2 2h4\" />\n\t\t</g>\n\t</svg>\n);\n","import {\n\tcreateFileURL,\n\tgenerateFileID as generateFileIDPrimitive,\n\ttype FileOrFileMeta,\n\ttype FileValidationErrorContextEach,\n} from \"@zayne-labs/toolkit-core\";\nimport { isFile, isObject, isString } from \"@zayne-labs/toolkit-type-helpers\";\nimport type { FileState, FileStateOrIDProp, PartProps } from \"./types\";\n\nexport const generateFileID = generateFileIDPrimitive;\n\nexport const createObjectURL = (\n\tfile: FileOrFileMeta,\n\tdisallowPreviewForNonImageFiles: boolean | undefined\n) => {\n\tif (disallowPreviewForNonImageFiles && !file.type?.startsWith(\"image/\")) return;\n\n\treturn createFileURL(file);\n};\n\nexport const clearObjectURL = (\n\tfileState: FileState | undefined,\n\tdisallowPreviewForNonImageFiles: boolean | undefined\n) => {\n\tif (!isFile(fileState?.file)) return;\n\n\tif (disallowPreviewForNonImageFiles && !fileState.file.type.startsWith(\"image/\")) return;\n\n\tif (!fileState.preview) return;\n\n\tURL.revokeObjectURL(fileState.preview);\n};\n\nexport const isMatchingFile = (\n\toptions: FileStateOrIDProp & {\n\t\tfileState: FileOrFileMeta | FileState;\n\t}\n) => {\n\tconst { fileState, fileStateOrID } = options;\n\n\tconst fileID = isFile(fileState) ? generateFileID(fileState) : fileState.id;\n\n\tif (isString(fileStateOrID)) {\n\t\treturn fileID === fileStateOrID;\n\t}\n\n\tif (isFile(fileStateOrID)) {\n\t\tconst generatedFileID = generateFileID(fileStateOrID);\n\t\treturn fileID === generatedFileID;\n\t}\n\n\treturn fileID === fileStateOrID.id;\n};\n\ntype FromCamelToKebabCase<TString extends string> =\n\tTString extends `${infer First}${infer Rest}` ?\n\t\tFirst extends Uppercase<First> ?\n\t\t\t`-${Lowercase<First>}${FromCamelToKebabCase<Rest>}`\n\t\t:\t`${First}${FromCamelToKebabCase<Rest>}`\n\t:\t\"\";\n\nexport const getScopeAttrs = (part: FromCamelToKebabCase<keyof PartProps>) => {\n\treturn {\n\t\t/* eslint-disable perfectionist/sort-objects -- I need this order to be maintained */\n\t\t\"data-slot\": `dropzone-${part}`,\n\t\t\"data-scope\": \"dropzone\",\n\t\t\"data-part\": part,\n\t\t/* eslint-enable perfectionist/sort-objects -- I need this order to be maintained */\n\t} as const;\n};\n\nconst dropZoneErrorSymbol = Symbol(\"DropZoneError\");\n\nexport class DropZoneError extends Error {\n\treadonly dropZoneErrorSymbol = dropZoneErrorSymbol;\n\tfile?: FileValidationErrorContextEach[\"file\"];\n\toverride name = \"DropZoneError\" as const;\n\n\tconstructor(\n\t\tctx: Pick<FileValidationErrorContextEach, \"message\"> & {\n\t\t\tfile?: FileValidationErrorContextEach[\"file\"];\n\t\t},\n\t\terrorOptions?: ErrorOptions\n\t) {\n\t\tconst { file, message } = ctx;\n\n\t\tsuper(message, errorOptions);\n\n\t\tthis.file = file;\n\t}\n\n\tstatic override isError(error: unknown): error is DropZoneError {\n\t\tif (!isObject<DropZoneError>(error)) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (error instanceof DropZoneError) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst actualError = error as DropZoneError;\n\n\t\treturn (\n\t\t\tactualError.dropZoneErrorSymbol === dropZoneErrorSymbol\n\t\t\t// eslint-disable-next-line ts-eslint/no-unnecessary-condition -- Allow\n\t\t\t&& actualError.name === \"DropZoneError\"\n\t\t);\n\t}\n}\n\nexport const getErrorContext = (error: DropZoneError | Error): NonNullable<FileState[\"error\"]> => {\n\tif (DropZoneError.isError(error)) {\n\t\treturn {\n\t\t\tcause: \"custom-error\",\n\t\t\tcode: \"upload-error\",\n\t\t\tfile: error.file ?? ({} as never),\n\t\t\tmessage: error.message,\n\t\t\toriginalError: error.cause ?? error,\n\t\t};\n\t}\n\n\tconst actualError = Error.isError(error) ? error : new Error(\"File upload failed\", { cause: error });\n\n\treturn {\n\t\tcause: \"custom-error\",\n\t\tcode: \"upload-error\",\n\t\tfile: isFile(actualError.cause) ? actualError.cause : ({} as never),\n\t\tmessage: Error.isError(error) ? actualError.message : String(actualError),\n\t\toriginalError: actualError,\n\t};\n};\n","import { createStore, handleFileValidationAsync, toArray } from \"@zayne-labs/toolkit-core\";\nimport type { DropZoneState, DropZoneStore, UseDropZoneProps } from \"./types\";\nimport { clearObjectURL, createObjectURL, generateFileID, getErrorContext, isMatchingFile } from \"./utils\";\n\ntype RequiredUseDropZoneProps = {\n\t[Key in keyof Required<UseDropZoneProps>]: UseDropZoneProps[Key] | undefined;\n};\n\ntype StoreContext = Pick<\n\tRequiredUseDropZoneProps,\n\t| \"allowedFileTypes\"\n\t| \"disablePreviewGenForNonImageFiles\"\n\t| \"initialFiles\"\n\t| \"maxFileCount\"\n\t| \"maxFileSize\"\n\t| \"multiple\"\n\t| \"onFilesChange\"\n\t| \"onUpload\"\n\t| \"onValidationError\"\n\t| \"onValidationSuccess\"\n\t| \"rejectDuplicateFiles\"\n\t| \"validator\"\n>;\n\nexport const createDropZoneStore = (storeContext: StoreContext) => {\n\tconst {\n\t\tallowedFileTypes,\n\t\tdisablePreviewGenForNonImageFiles,\n\t\tinitialFiles,\n\t\tmaxFileCount,\n\t\tmaxFileSize,\n\t\tmultiple,\n\t\tonFilesChange,\n\t\tonUpload,\n\t\tonValidationError,\n\t\tonValidationSuccess,\n\t\trejectDuplicateFiles,\n\t\tvalidator,\n\t} = storeContext;\n\n\tconst inputRef: React.RefObject<HTMLInputElement | null> = { current: null };\n\n\tconst initialFileArray = toArray(initialFiles).filter(Boolean);\n\n\tconst clearInputValue = () => {\n\t\tif (!inputRef.current) return;\n\n\t\tinputRef.current.value = \"\";\n\t};\n\n\tconst initFileStateArray: DropZoneState[\"fileStateArray\"] = initialFileArray.map((fileMeta) => ({\n\t\tfile: fileMeta,\n\t\tid: fileMeta.id,\n\t\tpreview: fileMeta.url,\n\t\tprogress: 0,\n\t\tstatus: \"idle\",\n\t}));\n\n\tconst store = createStore<DropZoneStore>((set, get) => ({\n\t\tdisabled: false,\n\t\terrors: [],\n\t\tfileStateArray: initFileStateArray,\n\t\tisDraggingOver: false,\n\t\tisInvalid: false,\n\n\t\t// eslint-disable-next-line perfectionist/sort-objects -- ignore\n\t\tactions: {\n\t\t\taddFiles: async (files) => {\n\t\t\t\tif (!files || files.length === 0) {\n\t\t\t\t\tconsole.warn(\"No file selected!\");\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst { actions, fileStateArray: existingFileStateArray } = get();\n\n\t\t\t\t// == In single file mode, only use the first file\n\t\t\t\tconst resolvedNewFiles = !multiple ? [files[0]] : files;\n\n\t\t\t\tconst { errors, validFiles } = await handleFileValidationAsync({\n\t\t\t\t\texistingFiles: existingFileStateArray.map((fileWithPreview) => fileWithPreview.file),\n\t\t\t\t\thooks: {\n\t\t\t\t\t\tonErrorEach: onValidationError,\n\t\t\t\t\t\tonSuccessBatch: onValidationSuccess,\n\t\t\t\t\t},\n\t\t\t\t\tnewFiles: resolvedNewFiles,\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tallowedFileTypes,\n\t\t\t\t\t\tmaxFileCount,\n\t\t\t\t\t\tmaxFileSize,\n\t\t\t\t\t\trejectDuplicateFiles,\n\t\t\t\t\t\tvalidator,\n\t\t\t\t\t},\n\t\t\t\t});\n\n\t\t\t\tif (validFiles.length === 0) {\n\t\t\t\t\tset({ errors, isDraggingOver: false });\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tconst newFileStateArray: DropZoneState[\"fileStateArray\"] = validFiles.map((file) => ({\n\t\t\t\t\tfile,\n\t\t\t\t\tid: generateFileID(file),\n\t\t\t\t\tpreview: createObjectURL(file, disablePreviewGenForNonImageFiles),\n\t\t\t\t\tprogress: 0,\n\t\t\t\t\tstatus: \"idle\",\n\t\t\t\t}));\n\n\t\t\t\tconst resolvedFileStateArray =\n\t\t\t\t\t!multiple ? newFileStateArray : [...existingFileStateArray, ...newFileStateArray];\n\n\t\t\t\tset(\n\t\t\t\t\t{\n\t\t\t\t\t\terrors,\n\t\t\t\t\t\tfileStateArray: resolvedFileStateArray,\n\t\t\t\t\t\tisDraggingOver: false,\n\t\t\t\t\t},\n\t\t\t\t\t{ shouldNotifySync: true }\n\t\t\t\t);\n\n\t\t\t\tawait actions.handleFileUpload({ newFileStateArray });\n\t\t\t},\n\t\t\tclearErrors: () => {\n\t\t\t\tset({ errors: [], isInvalid: false });\n\t\t\t},\n\n\t\t\tclearFiles: () => {\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tactions.clearObjectURLs();\n\n\t\t\t\tset({ errors: [], fileStateArray: [], isInvalid: false });\n\t\t\t},\n\n\t\t\tclearObjectURLs: () => {\n\t\t\t\tconst { fileStateArray } = get();\n\n\t\t\t\tfor (const fileState of fileStateArray) {\n\t\t\t\t\tclearObjectURL(fileState, disablePreviewGenForNonImageFiles);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\thandleChange: async (event) => {\n\t\t\t\tconst fileList = event.target.files;\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tawait actions.addFiles(fileList);\n\n\t\t\t\tclearInputValue();\n\t\t\t},\n\n\t\t\thandleDragEnter: (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tset({ isDraggingOver: true });\n\t\t\t},\n\n\t\t\thandleDragLeave: (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tset({ isDraggingOver: false });\n\t\t\t},\n\n\t\t\thandleDragOver: (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\t\t\t},\n\n\t\t\thandleDrop: async (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tconst fileList = event.dataTransfer.files;\n\n\t\t\t\tawait actions.addFiles(fileList);\n\t\t\t},\n\n\t\t\thandleFileUpload: async (context) => {\n\t\t\t\tconst { newFileStateArray } = context;\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tif (!onUpload) {\n\t\t\t\t\tfor (const fileState of newFileStateArray) {\n\t\t\t\t\t\tactions.updateFileState({ fileStateOrID: fileState, progress: 100, status: \"success\" });\n\t\t\t\t\t}\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\ttry {\n\t\t\t\t\tawait onUpload({\n\t\t\t\t\t\tfileStateArray: newFileStateArray,\n\t\t\t\t\t\tonError: (ctx) => {\n\t\t\t\t\t\t\tconst { error, fileStateOrID } = ctx;\n\n\t\t\t\t\t\t\tconst errorContext = getErrorContext(error);\n\n\t\t\t\t\t\t\tactions.updateFileState({ error: errorContext, fileStateOrID, status: \"error\" });\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonProgress: (ctx) => {\n\t\t\t\t\t\t\tconst { fileStateOrID, progress } = ctx;\n\n\t\t\t\t\t\t\tactions.updateFileState({ fileStateOrID, progress });\n\t\t\t\t\t\t},\n\t\t\t\t\t\tonSuccess: (ctx) => {\n\t\t\t\t\t\t\tconst { fileStateOrID } = ctx;\n\n\t\t\t\t\t\t\tactions.updateFileState({ fileStateOrID, progress: 100, status: \"success\" });\n\t\t\t\t\t\t},\n\t\t\t\t\t});\n\n\t\t\t\t\t// == Handle Errors ==\n\t\t\t\t} catch (error) {\n\t\t\t\t\tconst errorContext = getErrorContext(error as Error);\n\n\t\t\t\t\tfor (const fileState of newFileStateArray) {\n\t\t\t\t\t\tactions.updateFileState({\n\t\t\t\t\t\t\terror: errorContext,\n\t\t\t\t\t\t\tfileStateOrID: fileState,\n\t\t\t\t\t\t\tstatus: \"error\",\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\thandleKeyDown: (event) => {\n\t\t\t\tconst isEnterKey = event.key === \"Enter\";\n\t\t\t\tconst isSpaceKey = event.key === \" \";\n\n\t\t\t\tconst isAllowedKey = isEnterKey || isSpaceKey;\n\n\t\t\t\tif (!isAllowedKey) return;\n\n\t\t\t\tevent.preventDefault();\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tactions.openFilePicker();\n\t\t\t},\n\n\t\t\thandlePaste: async (event) => {\n\t\t\t\tevent.preventDefault();\n\t\t\t\tevent.stopPropagation();\n\n\t\t\t\tconst { actions } = get();\n\n\t\t\t\tconst fileList = event.clipboardData.files;\n\n\t\t\t\tawait actions.addFiles(fileList);\n\t\t\t},\n\n\t\t\topenFilePicker: () => {\n\t\t\t\tinputRef.current?.click();\n\t\t\t},\n\n\t\t\tremoveFile: (ctx) => {\n\t\t\t\tconst { fileStateOrID } = ctx;\n\n\t\t\t\tconst { fileStateArray } = get();\n\n\t\t\t\tconst updatedFileStateArray = fileStateArray.filter((fileState) => {\n\t\t\t\t\tif (!isMatchingFile({ fileState, fileStateOrID })) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tclearObjectURL(fileState, disablePreviewGenForNonImageFiles);\n\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\n\t\t\t\tset({ errors: [], fileStateArray: updatedFileStateArray });\n\t\t\t},\n\n\t\t\tsetInputRef: (element) => {\n\t\t\t\tinputRef.current = element;\n\t\t\t},\n\n\t\t\tupdateFileState: (ctx) => {\n\t\t\t\tconst { fileStateOrID, ...updatedFileState } = ctx;\n\n\t\t\t\tconst { fileStateArray } = get();\n\n\t\t\t\tconst updatedFileStateArray: DropZoneState[\"fileStateArray\"] = fileStateArray.map(\n\t\t\t\t\t(fileState) => {\n\t\t\t\t\t\tif (!isMatchingFile({ fileState, fileStateOrID })) {\n\t\t\t\t\t\t\treturn fileState;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...fileState,\n\t\t\t\t\t\t\t...updatedFileState,\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\tset({ fileStateArray: updatedFileStateArray }, { shouldNotifySync: true });\n\t\t\t},\n\t\t},\n\t}));\n\n\t// == File change subscription\n\tstore.subscribe.withSelector(\n\t\t(state) => state.fileStateArray,\n\t\t(fileStateArray) => {\n\t\t\tonFilesChange?.({ fileStateArray });\n\t\t}\n\t);\n\n\t// == Set `isInvalid` to true if there are errors\n\tstore.subscribe.withSelector(\n\t\t(state) => state.errors,\n\t\t(errors) => {\n\t\t\tif (errors.length === 0) return;\n\n\t\t\tstore.setState({ isInvalid: true });\n\n\t\t\t// == Reset to false after 1.5 seconds\n\t\t\tsetTimeout(() => store.setState({ isInvalid: false }), 1500);\n\t\t}\n\t);\n\n\treturn store;\n};\n","import { dataAttr } from \"@zayne-labs/toolkit-core\";\nimport { useCallbackRef, useCompareValue, useStore, useUnmountEffect } from \"@zayne-labs/toolkit-react\";\nimport { composeRefs, composeTwoEventHandlers } from \"@zayne-labs/toolkit-react/utils\";\nimport { useCallback, useMemo, useRef } from \"react\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport { createDropZoneStore } from \"./drop-zone-store\";\nimport type { DropZonePropGetters, UseDropZoneProps, UseDropZoneResult } from \"./types\";\nimport { getScopeAttrs } from \"./utils\";\n\nexport const useDropZone = (props?: UseDropZoneProps): UseDropZoneResult => {\n\tconst {\n\t\tallowedFileTypes,\n\t\tdisabled = false,\n\t\tdisableFilePickerOpenOnAreaClick = false,\n\t\tdisableInternalStateSubscription = false,\n\t\tdisablePreviewGenForNonImageFiles = true,\n\t\tinitialFiles,\n\t\tmaxFileCount,\n\t\tmaxFileSize,\n\t\tmultiple,\n\t\tonFilesChange,\n\t\tonUpload,\n\t\tonValidationError,\n\t\tonValidationSuccess,\n\t\trejectDuplicateFiles = true,\n\t\tunstyled: globalUnstyled = false,\n\t\tvalidator,\n\t} = props ?? {};\n\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\n\tconst stableOnFilesChange = useCallbackRef(onFilesChange);\n\tconst stableOnUpload = useCallbackRef(onUpload);\n\tconst stableOnUploadError = useCallbackRef(onValidationError);\n\tconst stableOnUploadSuccess = useCallbackRef(onValidationSuccess);\n\tconst stableValidator = useCallbackRef(validator);\n\n\tconst shallowComparedInitialFiles = useCompareValue(initialFiles);\n\tconst shallowComparedMaxFileSize = useCompareValue(maxFileSize);\n\tconst shallowComparedAllowedFileTypes = useCompareValue(allowedFileTypes);\n\n\tconst storeApi = useMemo(() => {\n\t\treturn createDropZoneStore({\n\t\t\tallowedFileTypes: shallowComparedAllowedFileTypes,\n\t\t\tdisablePreviewGenForNonImageFiles,\n\t\t\tinitialFiles: shallowComparedInitialFiles,\n\t\t\tmaxFileCount,\n\t\t\tmaxFileSize: shallowComparedMaxFileSize,\n\t\t\tmultiple,\n\t\t\tonFilesChange: stableOnFilesChange,\n\t\t\tonUpload: stableOnUpload,\n\t\t\tonValidationError: stableOnUploadError,\n\t\t\tonValidationSuccess: stableOnUploadSuccess,\n\t\t\trejectDuplicateFiles,\n\t\t\tvalidator: stableValidator,\n\t\t});\n\t}, [\n\t\tshallowComparedAllowedFileTypes,\n\t\tdisablePreviewGenForNonImageFiles,\n\t\tshallowComparedInitialFiles,\n\t\tmaxFileCount,\n\t\tshallowComparedMaxFileSize,\n\t\tmultiple,\n\t\tstableOnFilesChange,\n\t\tstableOnUpload,\n\t\tstableOnUploadError,\n\t\tstableOnUploadSuccess,\n\t\trejectDuplicateFiles,\n\t\tstableValidator,\n\t]);\n\n\tconst actions = storeApi.getState().actions;\n\n\tuseUnmountEffect(() => {\n\t\tactions.clearObjectURLs();\n\t});\n\n\t/* eslint-disable react-hooks/hooks -- ignore */\n\tconst useDropZoneStore: UseDropZoneResult[\"useDropZoneStore\"] = (selector) => {\n\t\treturn useStore(storeApi as never, selector);\n\t};\n\n\tconst isDraggingOver = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isDraggingOver : null\n\t);\n\n\tconst isInvalid = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isInvalid : null\n\t);\n\t/* eslint-enable react-hooks/hooks -- ignore */\n\n\tconst getContainerProps: UseDropZoneResult[\"propGetters\"][\"getContainerProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst { unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\tconst isDisabled = disabled;\n\t\t\tconst onFileDrop = !isDisabled ? actions.handleDrop : undefined;\n\t\t\tconst onFilePaste = !isDisabled ? actions.handlePaste : undefined;\n\t\t\tconst tabIndex = !isDisabled ? 0 : undefined;\n\t\t\tconst onAreaClick =\n\t\t\t\t!isDisabled && !disableFilePickerOpenOnAreaClick ? actions.openFilePicker : undefined;\n\t\t\tconst onKeyDown =\n\t\t\t\t!isDisabled && !disableFilePickerOpenOnAreaClick ? actions.handleKeyDown : undefined;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"container\"),\n\t\t\t\trole: \"region\",\n\t\t\t\t...(!disableInternalStateSubscription && {\n\t\t\t\t\t\"data-drag-over\": dataAttr(isDraggingOver),\n\t\t\t\t\t\"data-invalid\": dataAttr(isInvalid),\n\t\t\t\t}),\n\t\t\t\t...restOfInnerProps,\n\t\t\t\t...(!unstyled && {\n\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t`relative flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed p-6 transition-colors duration-250 ease-out outline-none select-none focus-visible:border-zu-ring/50`,\n\t\t\t\t\t\t`data-disabled:pointer-events-none data-drag-over:opacity-60 data-invalid:border-zu-destructive data-invalid:ring-zu-destructive/20`,\n\t\t\t\t\t\tinnerProps.className\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tonClick: composeTwoEventHandlers(onAreaClick, innerProps.onClick),\n\t\t\t\tonDragEnter: composeTwoEventHandlers(actions.handleDragEnter, innerProps.onDragEnter),\n\t\t\t\tonDragLeave: composeTwoEventHandlers(actions.handleDragLeave, innerProps.onDragLeave),\n\t\t\t\tonDragOver: composeTwoEventHandlers(actions.handleDragOver, innerProps.onDragOver),\n\t\t\t\tonDrop: composeTwoEventHandlers(onFileDrop, innerProps.onDrop),\n\t\t\t\tonKeyDown: composeTwoEventHandlers(onKeyDown, innerProps.onKeyDown),\n\t\t\t\tonPaste: composeTwoEventHandlers(onFilePaste, innerProps.onPaste),\n\t\t\t\ttabIndex,\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tglobalUnstyled,\n\t\t\tdisabled,\n\t\t\tactions.handleDrop,\n\t\t\tactions.handlePaste,\n\t\t\tactions.openFilePicker,\n\t\t\tactions.handleKeyDown,\n\t\t\tactions.handleDragEnter,\n\t\t\tactions.handleDragLeave,\n\t\t\tactions.handleDragOver,\n\t\t\tdisableFilePickerOpenOnAreaClick,\n\t\t\tdisableInternalStateSubscription,\n\t\t\tisDraggingOver,\n\t\t\tisInvalid,\n\t\t]\n\t);\n\n\tconst refCallback: React.RefCallback<HTMLInputElement> = useCallbackRef((node) => {\n\t\tinputRef.current = node;\n\t\tactions.setInputRef(node);\n\t});\n\n\tconst getInputProps: UseDropZoneResult[\"propGetters\"][\"getInputProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps.disabled ?? disabled;\n\n\t\t\tconst onFileChange = !isDisabled ? actions.handleChange : undefined;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"input\"),\n\t\t\t\t...(!disableInternalStateSubscription && { \"data-drag-over\": dataAttr(isDraggingOver) }),\n\t\t\t\t...innerProps,\n\t\t\t\taccept: allowedFileTypes ? allowedFileTypes.join(\", \") : innerProps.accept,\n\t\t\t\tclassName: cnMerge(\"hidden\", innerProps.className),\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tmultiple: multiple ?? innerProps.multiple,\n\t\t\t\tonChange: composeTwoEventHandlers(onFileChange, innerProps.onChange),\n\t\t\t\tref: composeRefs(refCallback, innerProps.ref),\n\t\t\t\ttype: \"file\",\n\t\t\t};\n\t\t},\n\t\t[\n\t\t\tactions.handleChange,\n\t\t\tallowedFileTypes,\n\t\t\tdisableInternalStateSubscription,\n\t\t\tdisabled,\n\t\t\tisDraggingOver,\n\t\t\tmultiple,\n\t\t\trefCallback,\n\t\t]\n\t);\n\n\tconst getTriggerProps: UseDropZoneResult[\"propGetters\"][\"getTriggerProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps.disabled ?? disabled;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"trigger\"),\n\t\t\t\ttype: \"button\",\n\t\t\t\t...innerProps,\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(actions.openFilePicker, innerProps.onClick),\n\t\t\t};\n\t\t},\n\t\t[actions.openFilePicker, disabled]\n\t);\n\n\tconst getFileListProps: UseDropZoneResult[\"propGetters\"][\"getFileListProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst { orientation = \"vertical\", unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-list\"),\n\t\t\t\t\"data-orientation\": orientation,\n\t\t\t\t...restOfInnerProps,\n\t\t\t\t...(!unstyled && {\n\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t\"flex flex-col gap-2\",\n\t\t\t\t\t\torientation === \"horizontal\" && \"flex-row overflow-x-auto p-1.5\",\n\t\t\t\t\t\tinnerProps.className\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t};\n\t\t},\n\t\t[globalUnstyled]\n\t);\n\n\tconst getFileItemProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst { unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item\"),\n\t\t\t\t...restOfInnerProps,\n\t\t\t\t...(!unstyled && {\n\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t\"relative flex animate-files-in items-center gap-2.5 rounded-md border p-2\",\n\t\t\t\t\t\tinnerProps.className\n\t\t\t\t\t),\n\t\t\t\t}),\n\t\t\t};\n\t\t},\n\t\t[globalUnstyled]\n\t);\n\n\tconst getFileItemProgressProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProgressProps\"] =\n\t\tuseCallback(\n\t\t\t(innerProps) => {\n\t\t\t\tconst { unstyled = globalUnstyled, variant = \"linear\", ...restOfInnerProps } = innerProps;\n\n\t\t\t\treturn {\n\t\t\t\t\t...getScopeAttrs(\"file-item-progress\"),\n\t\t\t\t\trole: \"progressbar\",\n\t\t\t\t\t...restOfInnerProps,\n\t\t\t\t\t...(!unstyled && {\n\t\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t\t\"inline-flex\",\n\t\t\t\t\t\t\tvariant === \"circular\"\n\t\t\t\t\t\t\t\t&& \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n\t\t\t\t\t\t\tvariant === \"fill\"\n\t\t\t\t\t\t\t\t&& `absolute inset-0 bg-zu-primary/50 transition-[clip-path] duration-300 ease-linear [clip-path:var(--clip-path)]`,\n\t\t\t\t\t\t\tvariant === \"linear\"\n\t\t\t\t\t\t\t\t&& \"relative h-1.5 w-full overflow-hidden rounded-full bg-zu-primary/20\",\n\t\t\t\t\t\t\trestOfInnerProps.className\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[globalUnstyled]\n\t\t);\n\n\tconst getFileItemDeleteProps: UseDropZoneResult[\"propGetters\"][\"getFileItemDeleteProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst { fileStateOrID, ...restOfInnerProps } = innerProps;\n\n\t\t\tconst isDisabled = innerProps.disabled ?? disabled;\n\n\t\t\tconst onRemoveFile = () => fileStateOrID && actions.removeFile({ fileStateOrID });\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-delete\"),\n\t\t\t\ttype: \"button\",\n\t\t\t\t...restOfInnerProps,\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(onRemoveFile, restOfInnerProps.onClick),\n\t\t\t};\n\t\t},\n\t\t[actions, disabled]\n\t);\n\n\tconst getFileItemPreviewProps: UseDropZoneResult[\"propGetters\"][\"getFileItemPreviewProps\"] =\n\t\tuseCallback(\n\t\t\t(innerProps) => {\n\t\t\t\tconst { unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\t\treturn {\n\t\t\t\t\t...getScopeAttrs(\"file-item-preview\"),\n\t\t\t\t\t...restOfInnerProps,\n\t\t\t\t\t...(!unstyled && {\n\t\t\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\t\t`relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-md bg-zu-accent/50 [&>svg]:size-10`,\n\t\t\t\t\t\t\tinnerProps.className\n\t\t\t\t\t\t),\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[globalUnstyled]\n\t\t);\n\n\tconst getFileItemMetadataProps: UseDropZoneResult[\"propGetters\"][\"getFileItemMetadataProps\"] =\n\t\tuseCallback(\n\t\t\t(innerProps) => {\n\t\t\t\tconst { unstyled = globalUnstyled, ...restOfInnerProps } = innerProps;\n\n\t\t\t\treturn {\n\t\t\t\t\t...getScopeAttrs(\"file-item-metadata\"),\n\t\t\t\t\t...restOfInnerProps,\n\t\t\t\t\t...(!unstyled && {\n\t\t\t\t\t\tclassName: cnMerge(\"flex min-w-0 grow flex-col\", innerProps.className),\n\t\t\t\t\t}),\n\t\t\t\t};\n\t\t\t},\n\t\t\t[globalUnstyled]\n\t\t);\n\n\tconst getFileItemClearProps: UseDropZoneResult[\"propGetters\"][\"getFileItemClearProps\"] = useCallback(\n\t\t(innerProps) => {\n\t\t\tconst isDisabled = innerProps.disabled ?? disabled;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-clear\"),\n\t\t\t\ttype: \"button\",\n\t\t\t\t...innerProps,\n\t\t\t\t\"data-disabled\": dataAttr(isDisabled),\n\t\t\t\tdisabled: isDisabled,\n\t\t\t\tonClick: composeTwoEventHandlers(actions.clearFiles, innerProps.onClick),\n\t\t\t};\n\t\t},\n\t\t[actions.clearFiles, disabled]\n\t);\n\n\tconst propGetters = useMemo<DropZonePropGetters>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tgetContainerProps,\n\t\t\t\tgetFileItemClearProps,\n\t\t\t\tgetFileItemDeleteProps,\n\t\t\t\tgetFileItemMetadataProps,\n\t\t\t\tgetFileItemPreviewProps,\n\t\t\t\tgetFileItemProgressProps,\n\t\t\t\tgetFileItemProps,\n\t\t\t\tgetFileListProps,\n\t\t\t\tgetInputProps,\n\t\t\t\tgetTriggerProps,\n\t\t\t}) satisfies DropZonePropGetters,\n\t\t[\n\t\t\tgetContainerProps,\n\t\t\tgetFileListProps,\n\t\t\tgetFileItemClearProps,\n\t\t\tgetFileItemDeleteProps,\n\t\t\tgetFileItemMetadataProps,\n\t\t\tgetFileItemPreviewProps,\n\t\t\tgetFileItemProgressProps,\n\t\t\tgetFileItemProps,\n\t\t\tgetInputProps,\n\t\t\tgetTriggerProps,\n\t\t]\n\t);\n\n\tconst stableUseDropZoneStore = useCallbackRef(useDropZoneStore);\n\n\tconst result = useMemo<UseDropZoneResult>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tdisabled,\n\t\t\t\tdisableInternalStateSubscription,\n\t\t\t\tinputRef,\n\t\t\t\tpropGetters,\n\t\t\t\tstoreApi,\n\t\t\t\tuseDropZoneStore: stableUseDropZoneStore,\n\t\t\t}) satisfies UseDropZoneResult,\n\t\t[disabled, disableInternalStateSubscription, propGetters, storeApi, stableUseDropZoneStore]\n\t);\n\n\treturn result;\n};\n","\"use client\";\n\nimport { dataAttr, formatBytes } from \"@zayne-labs/toolkit-core\";\nimport { useCompareSelector } from \"@zayne-labs/toolkit-react\";\nimport type {\n\tCssWithCustomProperties,\n\tInferProps,\n\tPolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport {\n\tisBoolean,\n\tisFunction,\n\tisNumber,\n\ttype AnyFunction,\n\ttype SelectorFn,\n\ttype UnionDiscriminator,\n} from \"@zayne-labs/toolkit-type-helpers\";\nimport { useMemo } from \"react\";\nimport { For } from \"@/components/common/for\";\nimport { Presence } from \"@/components/common/presence\";\nimport { Slot } from \"@/components/common/slot\";\nimport { cnMerge } from \"@/lib/utils/cn\";\nimport {\n\tDropZoneRootContextProvider,\n\tDropZoneStoreContextProvider,\n\tFileItemContextProvider,\n\tuseDropZoneRootContext,\n\tuseDropZoneStoreContext,\n\tuseFileItemContext,\n\ttype DropZoneRootContextType,\n\ttype FileItemContextType,\n} from \"./drop-zone-context\";\nimport {\n\tFileArchiveIcon,\n\tFileAudioIcon,\n\tFileCodeIcon,\n\tFileCogIcon,\n\tFileIcon,\n\tFileTextIcon,\n\tFileVideoIcon,\n} from \"./icons\";\nimport type { DropZoneStore, PartInputProps, UseDropZoneProps } from \"./types\";\nimport { useDropZone } from \"./use-drop-zone\";\n\ntype DropZoneRootProps = UseDropZoneProps & { children: React.ReactNode };\n\nexport function DropZoneRoot(props: DropZoneRootProps) {\n\tconst { children, ...restOfProps } = props;\n\n\tconst { disabled, disableInternalStateSubscription, inputRef, propGetters, storeApi } =\n\t\tuseDropZone(restOfProps);\n\n\tconst rootContextValue = useMemo<DropZoneRootContextType>(\n\t\t() =>\n\t\t\t({\n\t\t\t\tdisabled,\n\t\t\t\tdisableInternalStateSubscription,\n\t\t\t\tinputRef,\n\t\t\t\tpropGetters,\n\t\t\t}) satisfies DropZoneRootContextType,\n\t\t[disableInternalStateSubscription, disabled, inputRef, propGetters]\n\t);\n\n\treturn (\n\t\t<DropZoneStoreContextProvider store={storeApi}>\n\t\t\t<DropZoneRootContextProvider value={rootContextValue}>{children}</DropZoneRootContextProvider>\n\t\t</DropZoneStoreContextProvider>\n\t);\n}\n\ntype DropZoneContextProps<TSlice> = {\n\tchildren: React.ReactNode | ((context: TSlice) => React.ReactNode);\n\tselector?: SelectorFn<DropZoneStore, TSlice>;\n};\n\nexport function DropZoneContext<TSlice = DropZoneStore>(props: DropZoneContextProps<TSlice>) {\n\tconst { children, selector } = props;\n\n\tconst dropZoneCtx = useDropZoneStoreContext(useCompareSelector(selector));\n\n\tconst resolvedChildren = isFunction(children) ? children(dropZoneCtx) : children;\n\n\treturn resolvedChildren;\n}\n\ntype DropZoneContainerProps = PartInputProps[\"container\"] & { asChild?: boolean };\n\nexport function DropZoneContainer<TElement extends React.ElementType = \"div\">(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneContainerProps>\n) {\n\tconst { as: Element = \"div\", asChild, ...restOfProps } = props;\n\n\tconst { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();\n\n\tconst isDraggingOver = useDropZoneStoreContext((store) =>\n\t\tdisableInternalStateSubscription ? store.isDraggingOver : null\n\t);\n\n\tconst isInvalid = useDropZoneStoreContext((store) =>\n\t\tdisableInternalStateSubscription ? store.isInvalid : null\n\t);\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Component\n\t\t\t{...propGetters.getContainerProps({\n\t\t\t\t...(disableInternalStateSubscription && {\n\t\t\t\t\t\"data-drag-over\": dataAttr(isDraggingOver),\n\t\t\t\t\t\"data-invalid\": dataAttr(isInvalid),\n\t\t\t\t}),\n\t\t\t\t...restOfProps,\n\t\t\t})}\n\t\t/>\n\t);\n}\n\ntype DropZoneInputProps = PartInputProps[\"input\"] & { asChild?: boolean };\n\nexport function DropZoneInput(props: DropZoneInputProps) {\n\tconst { asChild, ...restOfProps } = props;\n\n\tconst { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();\n\n\tconst isDraggingOver = useDropZoneStoreContext((store) =>\n\t\tdisableInternalStateSubscription ? store.isDraggingOver : null\n\t);\n\n\tconst Component = asChild ? Slot.Root : \"input\";\n\n\treturn (\n\t\t<Component\n\t\t\t{...propGetters.getInputProps({\n\t\t\t\t...(disableInternalStateSubscription && { \"data-drag-over\": dataAttr(isDraggingOver) }),\n\t\t\t\t...restOfProps,\n\t\t\t})}\n\t\t/>\n\t);\n}\n\ntype DropZoneAreaProps<TSlice> = DropZoneContextProps<TSlice>\n\t& PartInputProps[\"container\"] & {\n\t\tclassNames?: Partial<Record<Extract<keyof PartInputProps, \"container\" | \"input\">, string>>;\n\t\textraProps?: Partial<Pick<PartInputProps, \"container\" | \"input\">>;\n\t};\n\nexport function DropZoneArea<TSlice = DropZoneStore>(props: DropZoneAreaProps<TSlice>) {\n\tconst { children, className, classNames, extraProps, selector, ...restOfProps } = props;\n\n\treturn (\n\t\t<DropZoneContainer\n\t\t\t{...extraProps?.container}\n\t\t\t{...restOfProps}\n\t\t\tclassName={cnMerge(extraProps?.container?.className, className, classNames?.container)}\n\t\t>\n\t\t\t<DropZoneInput\n\t\t\t\t{...extraProps?.input}\n\t\t\t\tclassName={cnMerge(extraProps?.input?.className, classNames?.input)}\n\t\t\t/>\n\n\t\t\t<DropZoneContext selector={selector}>{children}</DropZoneContext>\n\t\t</DropZoneContainer>\n\t);\n}\n\ntype DropZoneTriggerProps = PartInputProps[\"trigger\"] & { asChild?: boolean };\n\nexport function DropZoneTrigger(props: DropZoneTriggerProps) {\n\tconst { asChild, ...restOfProps } = props;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\treturn <Component {...propGetters.getTriggerProps(restOfProps)} />;\n}\n\ntype ListPerItemContext = Pick<DropZoneStore, \"actions\"> & {\n\tarray: DropZoneStore[\"fileStateArray\"];\n\tfileState: DropZoneStore[\"fileStateArray\"][number];\n\tindex: number;\n};\n\ntype FileListPerItemVariant = {\n\tchildren: React.ReactNode | ((context: ListPerItemContext) => React.ReactNode);\n\trenderMode?: \"per-item\";\n};\n\ntype ListManualListContext = Pick<DropZoneStore, \"actions\" | \"fileStateArray\">;\n\ntype FileListManualListVariant = {\n\tchildren: React.ReactNode | ((context: ListManualListContext) => React.ReactNode);\n\trenderMode: \"manual-list\";\n};\n\ntype DropZoneFileListProps = Omit<PartInputProps[\"fileList\"], \"children\"> & {\n\tasChild?: boolean;\n\tforceMount?: boolean;\n} & (FileListManualListVariant | FileListPerItemVariant);\n\nexport function DropZoneFileList<TElement extends React.ElementType = \"ul\">(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneFileListProps>\n) {\n\tconst {\n\t\tas: Element = \"ul\",\n\t\tasChild,\n\t\tchildren,\n\t\tforceMount = false,\n\t\trenderMode = \"per-item\",\n\t\t...restOfProps\n\t} = props;\n\n\tconst fileStateArray = useDropZoneStoreContext((store) => store.fileStateArray);\n\tconst actions = useDropZoneStoreContext((store) => store.actions);\n\n\tconst { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();\n\n\tconst childrenMap = {\n\t\t\"manual-list\": () => {\n\t\t\tconst childrenFn = children as Extract<FileListManualListVariant[\"children\"], AnyFunction>;\n\t\t\treturn childrenFn({ actions, fileStateArray });\n\t\t},\n\t\t\"per-item\": () => {\n\t\t\tconst childrenFn = children as Extract<FileListPerItemVariant[\"children\"], AnyFunction>;\n\n\t\t\treturn (\n\t\t\t\t<For\n\t\t\t\t\teach={fileStateArray}\n\t\t\t\t\trenderItem={(fileState, index, array) => childrenFn({ actions, array, fileState, index })}\n\t\t\t\t/>\n\t\t\t);\n\t\t},\n\t} satisfies Record<typeof renderMode, () => React.ReactNode>;\n\n\tconst hasFiles = fileStateArray.length > 0;\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\treturn (\n\t\t<Presence present={hasFiles} forceMount={forceMount}>\n\t\t\t<Component\n\t\t\t\t{...propGetters.getFileListProps({\n\t\t\t\t\t...(disableInternalStateSubscription && { \"data-state\": hasFiles ? \"active\" : \"inactive\" }),\n\t\t\t\t\t...restOfProps,\n\t\t\t\t})}\n\t\t\t>\n\t\t\t\t{isFunction(children) ? childrenMap[renderMode]() : children}\n\t\t\t</Component>\n\t\t</Presence>\n\t);\n}\n\ntype DropZoneFileItemProps = FileItemContextType & PartInputProps[\"fileItem\"] & { asChild?: boolean };\n\nexport function DropZoneFileItem<TElement extends React.ElementType = \"li\">(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneFileItemProps>\n) {\n\tconst { as: Element = \"li\", asChild, fileState, ...restOfProps } = props;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\tconst contextValue = useMemo<FileItemContextType>(\n\t\t() => ({ fileState }) satisfies FileItemContextType,\n\t\t[fileState]\n\t);\n\n\treturn (\n\t\t<FileItemContextProvider value={contextValue}>\n\t\t\t<Component {...propGetters.getFileItemProps(restOfProps)} />\n\t\t</FileItemContextProvider>\n\t);\n}\n\ntype DropZoneFileItemDeleteProps = PartInputProps[\"fileItemDelete\"] & { asChild?: boolean };\n\nexport function DropZoneFileItemDelete(props: DropZoneFileItemDeleteProps) {\n\tconst { asChild, fileStateOrID, ...restOfProps } = props;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst fileItemContextValue = useFileItemContext();\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\tconst resolvedFileStateOrID = fileStateOrID ?? fileItemContextValue?.fileState;\n\n\treturn (\n\t\t<Component\n\t\t\t{...propGetters.getFileItemDeleteProps({ fileStateOrID: resolvedFileStateOrID, ...restOfProps })}\n\t\t/>\n\t);\n}\n\ntype DropZoneFileItemProgressProps = PartInputProps[\"fileItemProgress\"] & {\n\tasChild?: boolean;\n\tforceMount?: boolean;\n\tsize?: number;\n};\n\nexport function DropZoneFileItemProgress<TElement extends React.ElementType = \"span\">(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneFileItemProgressProps>\n) {\n\tconst {\n\t\tas: Element = \"span\",\n\t\tasChild,\n\t\tforceMount = false,\n\t\tsize = 40,\n\t\tvariant = \"linear\",\n\t\t...restOfProps\n\t} = props;\n\n\tconst fileItemContextValue = useFileItemContext();\n\n\tconst fileState = fileItemContextValue?.fileState;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tif (!fileState) {\n\t\treturn null;\n\t}\n\n\tconst currentProgress = fileState.progress;\n\n\tconst shouldRender = forceMount || fileState.progress !== 100;\n\n\tif (!shouldRender) {\n\t\treturn null;\n\t}\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\tconst componentProps = propGetters.getFileItemProgressProps({ variant, ...restOfProps });\n\n\tswitch (variant) {\n\t\tcase \"circular\": {\n\t\t\tconst circumference = 2 * Math.PI * ((size - 4) / 2);\n\t\t\tconst strokeDashoffset = circumference - (currentProgress / 100) * circumference;\n\n\t\t\treturn (\n\t\t\t\t<Component {...componentProps}>\n\t\t\t\t\t<svg\n\t\t\t\t\t\tclassName=\"-rotate-90\"\n\t\t\t\t\t\twidth={size}\n\t\t\t\t\t\theight={size}\n\t\t\t\t\t\tviewBox={`0 0 ${size} ${size}`}\n\t\t\t\t\t\tfill=\"none\"\n\t\t\t\t\t\tstroke=\"currentColor\"\n\t\t\t\t\t>\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tclassName=\"text-zu-primary/20\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tcx={size / 2}\n\t\t\t\t\t\t\tcy={size / 2}\n\t\t\t\t\t\t\tr={(size - 4) / 2}\n\t\t\t\t\t\t/>\n\t\t\t\t\t\t<circle\n\t\t\t\t\t\t\tclassName=\"text-zu-primary transition-[stroke-dashoffset] duration-300 ease-linear\"\n\t\t\t\t\t\t\tstrokeWidth=\"2\"\n\t\t\t\t\t\t\tstrokeLinecap=\"round\"\n\t\t\t\t\t\t\tstrokeDasharray={circumference}\n\t\t\t\t\t\t\tstrokeDashoffset={strokeDashoffset}\n\t\t\t\t\t\t\tcx={size / 2}\n\t\t\t\t\t\t\tcy={size / 2}\n\t\t\t\t\t\t\tr={(size - 4) / 2}\n\t\t\t\t\t\t/>\n\t\t\t\t\t</svg>\n\t\t\t\t</Component>\n\t\t\t);\n\t\t}\n\n\t\tcase \"fill\": {\n\t\t\tconst topInset = 100 - currentProgress;\n\n\t\t\treturn (\n\t\t\t\t<Component\n\t\t\t\t\t{...componentProps}\n\t\t\t\t\tstyle={\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\"--clip-path\": `inset(${topInset}% 0% 0% 0%)`,\n\t\t\t\t\t\t} satisfies CssWithCustomProperties as CssWithCustomProperties\n\t\t\t\t\t}\n\t\t\t\t/>\n\t\t\t);\n\t\t}\n\n\t\tcase \"linear\": {\n\t\t\treturn (\n\t\t\t\t<Component {...componentProps}>\n\t\t\t\t\t<span\n\t\t\t\t\t\tclassName=\"inline-block size-full grow translate-x-(--translate-distance) bg-zu-primary transition-transform duration-300 ease-linear\"\n\t\t\t\t\t\tstyle={\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\"--translate-distance\": `-${100 - currentProgress}%`,\n\t\t\t\t\t\t\t} satisfies CssWithCustomProperties as CssWithCustomProperties\n\t\t\t\t\t\t}\n\t\t\t\t\t/>\n\t\t\t\t</Component>\n\t\t\t);\n\t\t}\n\n\t\tdefault: {\n\t\t\tvariant satisfies never;\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\ntype NodeCtx<TElement extends React.ElementType> = {\n\tgetProps: (innerProps: Partial<InferProps<TElement>>) => InferProps<TElement>;\n};\n\ntype RenderPreviewDetails<TElement extends React.ElementType = \"svg\"> = UnionDiscriminator<\n\t[\n\t\t{ props: InferProps<TElement> },\n\t\t{ node: React.ReactNode | ((ctx: NodeCtx<TElement>) => React.ReactNode) },\n\t]\n>;\n\ntype RenderPropContext = Pick<FileItemContextType, \"fileState\"> & {\n\tfileExtension: string;\n\tfileType: string;\n};\n\ntype RenderPreviewObject = {\n\tarchive?: RenderPreviewDetails;\n\taudio?: RenderPreviewDetails;\n\tcode?: RenderPreviewDetails;\n\tdefault?: RenderPreviewDetails;\n\texecutable?: RenderPreviewDetails;\n\timage?: RenderPreviewDetails<\"img\">;\n\ttext?: RenderPreviewDetails;\n\tvideo?: RenderPreviewDetails;\n};\ntype RenderPreviewFn = (context: RenderPropContext) => RenderPreviewObject;\n\ntype RenderPreview = RenderPreviewFn | RenderPreviewObject;\n\ntype DropZoneFileItemPreviewProps = Omit<PartInputProps[\"fileItemPreview\"], \"children\">\n\t& Partial<Pick<FileItemContextType, \"fileState\">> & {\n\t\tasChild?: boolean;\n\t\tchildren?:\n\t\t\t| React.ReactNode\n\t\t\t| ((context: RenderPropContext & { fallbackPreview: () => React.ReactNode }) => React.ReactNode);\n\t\trenderPreview?: boolean | RenderPreview;\n\t};\n\nexport function DropZoneFileItemPreview<TElement extends React.ElementType>(\n\tprops: PolymorphicPropsStrict<TElement, DropZoneFileItemPreviewProps>\n) {\n\tconst {\n\t\tas: Element = \"span\",\n\t\tasChild,\n\t\tchildren,\n\t\tfileState: fileStateProp,\n\t\trenderPreview = true,\n\t\t...restOfProps\n\t} = props;\n\n\tconst fileItemContextValue = useFileItemContext();\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst fileState = fileStateProp ?? fileItemContextValue?.fileState;\n\n\tif (!fileState) {\n\t\treturn null;\n\t}\n\n\tconst fileType = fileState.file.type ?? \"\";\n\n\tconst fileExtension = fileState.file.name?.split(\".\").pop()?.toLowerCase() ?? \"\";\n\n\tconst Component = asChild ? Slot.Root : Element;\n\n\tconst fallbackPreview = () =>\n\t\tgetFilePreviewOrIcon({ fileExtension, fileState, fileType, renderPreview });\n\n\tconst resolvedChildren =\n\t\tisFunction(children) ? children({ fallbackPreview, fileExtension, fileState, fileType }) : children;\n\n\treturn (\n\t\t<Component {...propGetters.getFileItemPreviewProps(restOfProps)}>\n\t\t\t{renderPreview && fallbackPreview()}\n\t\t\t{resolvedChildren}\n\t\t</Component>\n\t);\n}\n\nconst resolvePreviewNode = <\n\tTPreviewDetail extends NonNullable<RenderPreviewObject[keyof RenderPreviewObject]>,\n\tTNodeFn extends Extract<TPreviewDetail[\"node\"], AnyFunction>,\n>(\n\tdetails: TPreviewDetail | undefined,\n\tgetProps: Parameters<TNodeFn>[0][\"getProps\"] = ((props: unknown) => props) as never\n) => {\n\tconst resolvedNode =\n\t\tisFunction(details?.node) ? details.node({ getProps: getProps as never }) : details?.node;\n\n\treturn resolvedNode;\n};\n\nconst getFilePreviewOrIcon = (\n\tcontext: Pick<Required<DropZoneFileItemPreviewProps>, \"renderPreview\"> & Required<RenderPropContext>\n): React.ReactNode => {\n\tconst { fileExtension, fileState, fileType, renderPreview } = context;\n\n\tconst renderPreviewValue = isBoolean(renderPreview) ? {} : renderPreview;\n\n\tconst resolvedRenderPreviewObject =\n\t\tisFunction(renderPreviewValue) ?\n\t\t\trenderPreviewValue({ fileExtension, fileState, fileType })\n\t\t:\trenderPreviewValue;\n\n\tswitch (true) {\n\t\tcase fileType.startsWith(\"image/\"): {\n\t\t\tconst resolvedNode = resolvePreviewNode(resolvedRenderPreviewObject.image, (innerProps) => ({\n\t\t\t\t...innerProps,\n\t\t\t\talt: innerProps.alt ?? fileState.file.name ?? \"\",\n\t\t\t\tclassName: cnMerge(\"size-full object-cover\", innerProps.className),\n\t\t\t\tsrc: innerProps.src ?? fileState.preview,\n\t\t\t}));\n\n\t\t\treturn (\n\t\t\t\tresolvedNode ?? (\n\t\t\t\t\t<img\n\t\t\t\t\t\t{...resolvedRenderPreviewObject.image?.props}\n\t\t\t\t\t\tsrc={fileState.preview}\n\t\t\t\t\t\talt={fileState.file.name ?? \"\"}\n\t\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\t\"size-full object-cover\",\n\t\t\t\t\t\t\tresolvedRenderPreviewObject.image?.props?.className\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase fileType.startsWith(\"video/\"): {\n\t\t\tconst resolvedNode = resolvePreviewNode(resolvedRenderPreviewObject.video, (innerProps) => ({\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: cnMerge(\"size-full object-cover\", innerProps.className),\n\t\t\t}));\n\n\t\t\treturn (\n\t\t\t\tresolvedNode ?? (\n\t\t\t\t\t<FileVideoIcon\n\t\t\t\t\t\t{...resolvedRenderPreviewObject.video?.props}\n\t\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\t\"size-full object-cover\",\n\t\t\t\t\t\t\tresolvedRenderPreviewObject.video?.props?.className\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase fileType.startsWith(\"audio/\"): {\n\t\t\tconst resolvedNode = resolvePreviewNode(resolvedRenderPreviewObject.audio, (innerProps) => ({\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: cnMerge(\"size-full object-cover\", innerProps.className),\n\t\t\t}));\n\n\t\t\treturn (\n\t\t\t\tresolvedNode ?? (\n\t\t\t\t\t<FileAudioIcon\n\t\t\t\t\t\t{...resolvedRenderPreviewObject.audio?.props}\n\t\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\t\"size-full object-cover\",\n\t\t\t\t\t\t\tresolvedRenderPreviewObject.audio?.props?.className\n\t\t\t\t\t\t)}\n\t\t\t\t\t/>\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tcase fileType.startsWith(\"text/\") || [\"md\", \"pdf\", \"rtf\", \"txt\"].includes(fileExtension): {\n\t\t\tconst resolvedNode = resolvePreviewNode(resolvedRenderPreviewObject.text);\n\n\t\t\treturn resolvedNode ?? <FileTextIcon {...resolvedRenderPreviewObject.text?.props} />;\n\t\t}\n\n\t\tcase [\n\t\t\t\"c\",\n\t\t\t\"cpp\",\n\t\t\t\"cs\",\n\t\t\t\"css\",\n\t\t\t\"html\",\n\t\t\t\"java\",\n\t\t\t\"js\",\n\t\t\t\"json\",\n\t\t\t\"jsx\",\n\t\t\t\"php\",\n\t\t\t\"py\",\n\t\t\t\"rb\",\n\t\t\t\"ts\",\n\t\t\t\"tsx\",\n\t\t\t\"xml\",\n\t\t].includes(fileExtension): {\n\t\t\tconst resolvedNode = resolvePreviewNode(resolvedRenderPreviewObject.code);\n\n\t\t\treturn resolvedNode ?? <FileCodeIcon {...resolvedRenderPreviewObject.code?.props} />;\n\t\t}\n\n\t\tcase [\"7z\", \"bz2\", \"gz\", \"rar\", \"tar\", \"zip\"].includes(fileExtension): {\n\t\t\tconst resolvedNode = resolvePreviewNode(resolvedRenderPreviewObject.archive);\n\n\t\t\treturn resolvedNode ?? <FileArchiveIcon {...resolvedRenderPreviewObject.archive?.props} />;\n\t\t}\n\n\t\tcase [\"apk\", \"app\", \"deb\", \"exe\", \"msi\", \"rpm\"].includes(fileExtension): {\n\t\t\tconst resolvedNode = resolvePreviewNode(resolvedRenderPreviewObject.executable);\n\n\t\t\treturn resolvedNode ?? <FileCogIcon {...resolvedRenderPreviewObject.executable?.props} />;\n\t\t}\n\n\t\tdefault: {\n\t\t\tconst resolvedNode = resolvePreviewNode(resolvedRenderPreviewObject.default);\n\n\t\t\treturn resolvedNode ?? <FileIcon {...resolvedRenderPreviewObject.default?.props} />;\n\t\t}\n\t}\n};\n\ntype DropZoneFileItemMetadataProps = Omit<PartInputProps[\"fileItemMetadata\"], \"children\">\n\t& Partial<Pick<FileItemContextType, \"fileState\">> & {\n\t\tasChild?: boolean;\n\t\tchildren?: React.ReactNode | ((context: Pick<FileItemContextType, \"fileState\">) => React.ReactNode);\n\t\tclassNames?: {\n\t\t\tname?: string;\n\t\t\tsize?: string;\n\t\t};\n\t\tsize?: \"default\" | \"sm\";\n\t};\n\nexport function DropZoneFileItemMetadata(props: DropZoneFileItemMetadataProps) {\n\tconst {\n\t\tasChild,\n\t\tchildren,\n\t\tclassNames,\n\t\tfileState: fileStateProp,\n\t\tsize = \"default\",\n\t\t...restOfProps\n\t} = props;\n\n\tconst fileItemContextValue = useFileItemContext();\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst fileState = fileStateProp ?? fileItemContextValue?.fileState;\n\n\tif (!fileState) {\n\t\treturn null;\n\t}\n\n\tconst Component = asChild ? Slot.Root : \"div\";\n\n\tconst resolvedChildren = isFunction(children) ? children({ fileState }) : children;\n\n\tconst getDefaultMetadataChildren = () => {\n\t\treturn (\n\t\t\t<>\n\t\t\t\t<p\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"truncate\",\n\t\t\t\t\t\tsize === \"default\" && \"text-[14px] font-medium\",\n\t\t\t\t\t\tsize === \"sm\" && \"text-[13px] leading-snug\",\n\t\t\t\t\t\tclassNames?.name\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{fileState.file.name}\n\t\t\t\t</p>\n\t\t\t\t<p\n\t\t\t\t\tclassName={cnMerge(\n\t\t\t\t\t\t\"truncate text-zu-muted-foreground\",\n\t\t\t\t\t\tsize === \"default\" && \"text-[12px]\",\n\t\t\t\t\t\tsize === \"sm\" && \"text-[11px] leading-snug\",\n\t\t\t\t\t\tclassNames?.size\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t{isNumber(fileState.file.size) && formatBytes(fileState.file.size)}\n\t\t\t\t</p>\n\t\t\t\t{fileState.error && (\n\t\t\t\t\t<p className=\"text-[12px] text-zu-destructive\">{fileState.error.message}</p>\n\t\t\t\t)}\n\t\t\t</>\n\t\t);\n\t};\n\n\treturn (\n\t\t<Component {...propGetters.getFileItemMetadataProps(restOfProps)}>\n\t\t\t{resolvedChildren ?? getDefaultMetadataChildren()}\n\t\t</Component>\n\t);\n}\n\ntype DropZoneFileClearProps = PartInputProps[\"fileItemClear\"] & {\n\tasChild?: boolean;\n\tforceMount?: boolean;\n};\n\nexport function DropZoneFileClear(props: DropZoneFileClearProps) {\n\tconst { asChild, forceMount = false, ...restOfProps } = props;\n\n\tconst { propGetters } = useDropZoneRootContext();\n\n\tconst fileCount = useDropZoneStoreContext((state) => state.fileStateArray.length);\n\n\tconst shouldRender = forceMount || fileCount > 0;\n\n\tif (!shouldRender) {\n\t\treturn null;\n\t}\n\n\tconst Component = asChild ? Slot.Root : \"button\";\n\n\treturn <Component {...propGetters.getFileItemClearProps(restOfProps)} />;\n}\n","export {\n\tDropZoneArea as Area,\n\tDropZoneContainer as Container,\n\tDropZoneContext as Context,\n\tDropZoneFileClear as FileClear,\n\tDropZoneFileItem as FileItem,\n\tDropZoneFileItemDelete as FileItemDelete,\n\tDropZoneFileItemMetadata as FileItemMetadata,\n\tDropZoneFileItemPreview as FileItemPreview,\n\tDropZoneFileItemProgress as FileItemProgress,\n\tDropZoneFileList as FileList,\n\tDropZoneInput as Input,\n\tDropZoneRoot as Root,\n\tDropZoneTrigger as Trigger,\n} from \"./drop-zone\";\n"],"mappings":";;;;;;;;;;;;;;;;AAIA,MAAM,CAAC,8BAA8B,2BAA2B,wBAAuC;CACtG,UAAU;CACV,MAAM;CACN,cAAc;CACd,CAAC;AAOF,MAAM,CAAC,6BAA6B,0BAA0B,oBAC7D;CACC,UAAU;CACV,MAAM;CACN,cAAc;CACd,CACD;AAMD,MAAM,CAAC,yBAAyB,sBAAsB,oBAAoB;CACzE,cAAc;CACd,UAAU;CACV,MAAM;CACN,cAAc;CACd,QAAQ;CACR,CAAC;;;;ACjCF,MAAa,iBAAiB,UAC7B,oBAAC;CAAI,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WAExF,qBAAC;EAAE,MAAK;EAAO,QAAO;EAAe,eAAc;EAAQ,gBAAe;EAAQ,aAAY;aAC7F,oBAAC,UAAK,GAAE,+DAA+D,EACvE,oBAAC,UAAK,GAAE,4CAA4C;GACjD;EACC;AAGP,MAAa,iBAAiB,UAC7B,oBAAC;CAAI,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WAExF,qBAAC;EAAE,MAAK;EAAO,QAAO;EAAe,eAAc;EAAQ,gBAAe;EAAQ,aAAY;aAC7F,oBAAC,UAAK,GAAE,uDAAuD,EAC/D,oBAAC,UAAK,GAAE,kHAAkH;GACvH;EACC;AAGP,MAAa,gBAAgB,UAC5B,oBAAC;CAAI,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WAExF,qBAAC;EAAE,MAAK;EAAO,QAAO;EAAe,eAAc;EAAQ,gBAAe;EAAQ,aAAY;aAC7F,oBAAC,UAAK,GAAE,+DAA+D,EACvE,oBAAC,UAAK,GAAE,+CAA+C;GACpD;EACC;AAGP,MAAa,gBAAgB,UAC5B,oBAAC;CAAI,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WAExF,qBAAC;EAAE,MAAK;EAAO,QAAO;EAAe,eAAc;EAAQ,gBAAe;EAAQ,aAAY;aAC7F,oBAAC,UAAK,GAAE,gEAAgE,EACxE,oBAAC,UAAK,GAAE,+DAA+D;GACpE;EACC;AAGP,MAAa,mBAAmB,UAC/B,oBAAC;CAAI,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WAExF,qBAAC;EAAE,MAAK;EAAO,QAAO;EAAe,eAAc;EAAQ,gBAAe;EAAQ,aAAY;;GAC7F,oBAAC,UAAK,GAAE,iDAAiD;GACzD,oBAAC,UAAK,GAAE,4EAA4E;GACpF,oBAAC;IAAO,IAAG;IAAK,IAAG;IAAK,GAAE;KAAM;;GAC7B;EACC;AAGP,MAAa,eAAe,UAC3B,oBAAC;CAAI,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WAExF,qBAAC;EAAE,MAAK;EAAO,QAAO;EAAe,eAAc;EAAQ,gBAAe;EAAQ,aAAY;;GAC7F,oBAAC,UAAK,GAAE,yDAAyD;GACjE,oBAAC,UAAK,GAAE,+JAA+J;GACvK,oBAAC;IAAO,IAAG;IAAI,IAAG;IAAK,GAAE;KAAM;;GAC5B;EACC;AAGP,MAAa,YAAY,UACxB,oBAAC;CAAI,OAAM;CAA6B,OAAM;CAAM,QAAO;CAAM,SAAQ;CAAY,GAAI;WAExF,qBAAC;EAAE,MAAK;EAAO,QAAO;EAAe,eAAc;EAAQ,gBAAe;EAAQ,aAAY;aAC7F,oBAAC,UAAK,GAAE,+DAA+D,EACvE,oBAAC,UAAK,GAAE,4BAA4B;GACjC;EACC;;;;AC5DP,MAAaA,mBAAiBC;AAE9B,MAAa,mBACZ,MACA,oCACI;AACJ,KAAI,mCAAmC,CAAC,KAAK,MAAM,WAAW,SAAS,CAAE;AAEzE,QAAO,cAAc,KAAK;;AAG3B,MAAa,kBACZ,WACA,oCACI;AACJ,KAAI,CAAC,OAAO,WAAW,KAAK,CAAE;AAE9B,KAAI,mCAAmC,CAAC,UAAU,KAAK,KAAK,WAAW,SAAS,CAAE;AAElF,KAAI,CAAC,UAAU,QAAS;AAExB,KAAI,gBAAgB,UAAU,QAAQ;;AAGvC,MAAa,kBACZ,YAGI;CACJ,MAAM,EAAE,WAAW,kBAAkB;CAErC,MAAM,SAAS,OAAO,UAAU,GAAGD,iBAAe,UAAU,GAAG,UAAU;AAEzE,KAAI,SAAS,cAAc,CAC1B,QAAO,WAAW;AAGnB,KAAI,OAAO,cAAc,CAExB,QAAO,WADiBA,iBAAe,cAAc;AAItD,QAAO,WAAW,cAAc;;AAUjC,MAAa,iBAAiB,SAAgD;AAC7E,QAAO;EAEN,aAAa,YAAY;EACzB,cAAc;EACd,aAAa;EAEb;;AAGF,MAAM,sBAAsB,OAAO,gBAAgB;AAEnD,IAAa,gBAAb,MAAa,sBAAsB,MAAM;CACxC,AAAS,sBAAsB;CAC/B;CACA,AAAS,OAAO;CAEhB,YACC,KAGA,cACC;EACD,MAAM,EAAE,MAAM,YAAY;AAE1B,QAAM,SAAS,aAAa;AAE5B,OAAK,OAAO;;CAGb,OAAgB,QAAQ,OAAwC;AAC/D,MAAI,CAAC,SAAwB,MAAM,CAClC,QAAO;AAGR,MAAI,iBAAiB,cACpB,QAAO;EAGR,MAAM,cAAc;AAEpB,SACC,YAAY,wBAAwB,uBAEjC,YAAY,SAAS;;;AAK3B,MAAa,mBAAmB,UAAkE;AACjG,KAAI,cAAc,QAAQ,MAAM,CAC/B,QAAO;EACN,OAAO;EACP,MAAM;EACN,MAAM,MAAM,QAAS,EAAE;EACvB,SAAS,MAAM;EACf,eAAe,MAAM,SAAS;EAC9B;CAGF,MAAM,cAAc,MAAM,QAAQ,MAAM,GAAG,QAAQ,IAAI,MAAM,sBAAsB,EAAE,OAAO,OAAO,CAAC;AAEpG,QAAO;EACN,OAAO;EACP,MAAM;EACN,MAAM,OAAO,YAAY,MAAM,GAAG,YAAY,QAAS,EAAE;EACzD,SAAS,MAAM,QAAQ,MAAM,GAAG,YAAY,UAAU,OAAO,YAAY;EACzE,eAAe;EACf;;;;;ACzGF,MAAa,uBAAuB,iBAA+B;CAClE,MAAM,EACL,kBACA,mCACA,cACA,cACA,aACA,UACA,eACA,UACA,mBACA,qBACA,sBACA,cACG;CAEJ,MAAM,WAAqD,EAAE,SAAS,MAAM;CAE5E,MAAM,mBAAmB,QAAQ,aAAa,CAAC,OAAO,QAAQ;CAE9D,MAAM,wBAAwB;AAC7B,MAAI,CAAC,SAAS,QAAS;AAEvB,WAAS,QAAQ,QAAQ;;CAG1B,MAAM,qBAAsD,iBAAiB,KAAK,cAAc;EAC/F,MAAM;EACN,IAAI,SAAS;EACb,SAAS,SAAS;EAClB,UAAU;EACV,QAAQ;EACR,EAAE;CAEH,MAAM,QAAQ,aAA4B,KAAK,SAAS;EACvD,UAAU;EACV,QAAQ,EAAE;EACV,gBAAgB;EAChB,gBAAgB;EAChB,WAAW;EAGX,SAAS;GACR,UAAU,OAAO,UAAU;AAC1B,QAAI,CAAC,SAAS,MAAM,WAAW,GAAG;AACjC,aAAQ,KAAK,oBAAoB;AACjC;;IAGD,MAAM,EAAE,SAAS,gBAAgB,2BAA2B,KAAK;IAGjE,MAAM,mBAAmB,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG;IAElD,MAAM,EAAE,QAAQ,eAAe,MAAM,0BAA0B;KAC9D,eAAe,uBAAuB,KAAK,oBAAoB,gBAAgB,KAAK;KACpF,OAAO;MACN,aAAa;MACb,gBAAgB;MAChB;KACD,UAAU;KACV,UAAU;MACT;MACA;MACA;MACA;MACA;MACA;KACD,CAAC;AAEF,QAAI,WAAW,WAAW,GAAG;AAC5B,SAAI;MAAE;MAAQ,gBAAgB;MAAO,CAAC;AACtC;;IAGD,MAAM,oBAAqD,WAAW,KAAK,UAAU;KACpF;KACA,IAAIE,iBAAe,KAAK;KACxB,SAAS,gBAAgB,MAAM,kCAAkC;KACjE,UAAU;KACV,QAAQ;KACR,EAAE;AAKH,QACC;KACC;KACA,gBALD,CAAC,WAAW,oBAAoB,CAAC,GAAG,wBAAwB,GAAG,kBAAkB;KAMhF,gBAAgB;KAChB,EACD,EAAE,kBAAkB,MAAM,CAC1B;AAED,UAAM,QAAQ,iBAAiB,EAAE,mBAAmB,CAAC;;GAEtD,mBAAmB;AAClB,QAAI;KAAE,QAAQ,EAAE;KAAE,WAAW;KAAO,CAAC;;GAGtC,kBAAkB;IACjB,MAAM,EAAE,YAAY,KAAK;AAEzB,YAAQ,iBAAiB;AAEzB,QAAI;KAAE,QAAQ,EAAE;KAAE,gBAAgB,EAAE;KAAE,WAAW;KAAO,CAAC;;GAG1D,uBAAuB;IACtB,MAAM,EAAE,mBAAmB,KAAK;AAEhC,SAAK,MAAM,aAAa,eACvB,gBAAe,WAAW,kCAAkC;;GAI9D,cAAc,OAAO,UAAU;IAC9B,MAAM,WAAW,MAAM,OAAO;IAE9B,MAAM,EAAE,YAAY,KAAK;AAEzB,UAAM,QAAQ,SAAS,SAAS;AAEhC,qBAAiB;;GAGlB,kBAAkB,UAAU;AAC3B,UAAM,gBAAgB;AACtB,UAAM,iBAAiB;AAEvB,QAAI,EAAE,gBAAgB,MAAM,CAAC;;GAG9B,kBAAkB,UAAU;AAC3B,UAAM,gBAAgB;AACtB,UAAM,iBAAiB;AAEvB,QAAI,EAAE,gBAAgB,OAAO,CAAC;;GAG/B,iBAAiB,UAAU;AAC1B,UAAM,gBAAgB;AACtB,UAAM,iBAAiB;;GAGxB,YAAY,OAAO,UAAU;AAC5B,UAAM,gBAAgB;AACtB,UAAM,iBAAiB;IAEvB,MAAM,EAAE,YAAY,KAAK;IAEzB,MAAM,WAAW,MAAM,aAAa;AAEpC,UAAM,QAAQ,SAAS,SAAS;;GAGjC,kBAAkB,OAAO,YAAY;IACpC,MAAM,EAAE,sBAAsB;IAE9B,MAAM,EAAE,YAAY,KAAK;AAEzB,QAAI,CAAC,UAAU;AACd,UAAK,MAAM,aAAa,kBACvB,SAAQ,gBAAgB;MAAE,eAAe;MAAW,UAAU;MAAK,QAAQ;MAAW,CAAC;AAExF;;AAGD,QAAI;AACH,WAAM,SAAS;MACd,gBAAgB;MAChB,UAAU,QAAQ;OACjB,MAAM,EAAE,OAAO,kBAAkB;OAEjC,MAAM,eAAe,gBAAgB,MAAM;AAE3C,eAAQ,gBAAgB;QAAE,OAAO;QAAc;QAAe,QAAQ;QAAS,CAAC;;MAEjF,aAAa,QAAQ;OACpB,MAAM,EAAE,eAAe,aAAa;AAEpC,eAAQ,gBAAgB;QAAE;QAAe;QAAU,CAAC;;MAErD,YAAY,QAAQ;OACnB,MAAM,EAAE,kBAAkB;AAE1B,eAAQ,gBAAgB;QAAE;QAAe,UAAU;QAAK,QAAQ;QAAW,CAAC;;MAE7E,CAAC;aAGM,OAAO;KACf,MAAM,eAAe,gBAAgB,MAAe;AAEpD,UAAK,MAAM,aAAa,kBACvB,SAAQ,gBAAgB;MACvB,OAAO;MACP,eAAe;MACf,QAAQ;MACR,CAAC;;;GAKL,gBAAgB,UAAU;IACzB,MAAM,aAAa,MAAM,QAAQ;IACjC,MAAM,aAAa,MAAM,QAAQ;AAIjC,QAAI,EAFiB,cAAc,YAEhB;AAEnB,UAAM,gBAAgB;IAEtB,MAAM,EAAE,YAAY,KAAK;AAEzB,YAAQ,gBAAgB;;GAGzB,aAAa,OAAO,UAAU;AAC7B,UAAM,gBAAgB;AACtB,UAAM,iBAAiB;IAEvB,MAAM,EAAE,YAAY,KAAK;IAEzB,MAAM,WAAW,MAAM,cAAc;AAErC,UAAM,QAAQ,SAAS,SAAS;;GAGjC,sBAAsB;AACrB,aAAS,SAAS,OAAO;;GAG1B,aAAa,QAAQ;IACpB,MAAM,EAAE,kBAAkB;IAE1B,MAAM,EAAE,mBAAmB,KAAK;AAYhC,QAAI;KAAE,QAAQ,EAAE;KAAE,gBAVY,eAAe,QAAQ,cAAc;AAClE,UAAI,CAAC,eAAe;OAAE;OAAW;OAAe,CAAC,CAChD,QAAO;AAGR,qBAAe,WAAW,kCAAkC;AAE5D,aAAO;OACN;KAEuD,CAAC;;GAG3D,cAAc,YAAY;AACzB,aAAS,UAAU;;GAGpB,kBAAkB,QAAQ;IACzB,MAAM,EAAE,eAAe,GAAG,qBAAqB;IAE/C,MAAM,EAAE,mBAAmB,KAAK;AAehC,QAAI,EAAE,gBAbyD,eAAe,KAC5E,cAAc;AACd,SAAI,CAAC,eAAe;MAAE;MAAW;MAAe,CAAC,CAChD,QAAO;AAGR,YAAO;MACN,GAAG;MACH,GAAG;MACH;MAEF,EAE4C,EAAE,EAAE,kBAAkB,MAAM,CAAC;;GAE3E;EACD,EAAE;AAGH,OAAM,UAAU,cACd,UAAU,MAAM,iBAChB,mBAAmB;AACnB,kBAAgB,EAAE,gBAAgB,CAAC;GAEpC;AAGD,OAAM,UAAU,cACd,UAAU,MAAM,SAChB,WAAW;AACX,MAAI,OAAO,WAAW,EAAG;AAEzB,QAAM,SAAS,EAAE,WAAW,MAAM,CAAC;AAGnC,mBAAiB,MAAM,SAAS,EAAE,WAAW,OAAO,CAAC,EAAE,KAAK;GAE7D;AAED,QAAO;;;;;AC5TR,MAAa,eAAe,UAAgD;CAC3E,MAAM,EACL,kBACA,WAAW,OACX,mCAAmC,OACnC,mCAAmC,OACnC,oCAAoC,MACpC,cACA,cACA,aACA,UACA,eACA,UACA,mBACA,qBACA,uBAAuB,MACvB,UAAU,iBAAiB,OAC3B,cACG,SAAS,EAAE;CAEf,MAAM,WAAW,OAAyB,KAAK;CAE/C,MAAM,sBAAsB,eAAe,cAAc;CACzD,MAAM,iBAAiB,eAAe,SAAS;CAC/C,MAAM,sBAAsB,eAAe,kBAAkB;CAC7D,MAAM,wBAAwB,eAAe,oBAAoB;CACjE,MAAM,kBAAkB,eAAe,UAAU;CAEjD,MAAM,8BAA8B,gBAAgB,aAAa;CACjE,MAAM,6BAA6B,gBAAgB,YAAY;CAC/D,MAAM,kCAAkC,gBAAgB,iBAAiB;CAEzE,MAAM,WAAW,cAAc;AAC9B,SAAO,oBAAoB;GAC1B,kBAAkB;GAClB;GACA,cAAc;GACd;GACA,aAAa;GACb;GACA,eAAe;GACf,UAAU;GACV,mBAAmB;GACnB,qBAAqB;GACrB;GACA,WAAW;GACX,CAAC;IACA;EACF;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CAAC;CAEF,MAAM,UAAU,SAAS,UAAU,CAAC;AAEpC,wBAAuB;AACtB,UAAQ,iBAAiB;GACxB;CAGF,MAAM,oBAA2D,aAAa;AAC7E,SAAO,SAAS,UAAmB,SAAS;;CAG7C,MAAM,iBAAiB,kBAAkB,UACxC,CAAC,mCAAmC,MAAM,iBAAiB,KAC3D;CAED,MAAM,YAAY,kBAAkB,UACnC,CAAC,mCAAmC,MAAM,YAAY,KACtD;CAGD,MAAM,oBAA2E,aAC/E,eAAe;EACf,MAAM,EAAE,WAAW,gBAAgB,GAAG,qBAAqB;EAE3D,MAAM,aAAa;EACnB,MAAM,aAAa,CAAC,aAAa,QAAQ,aAAa;EACtD,MAAM,cAAc,CAAC,aAAa,QAAQ,cAAc;EACxD,MAAM,WAAW,CAAC,aAAa,IAAI;EACnC,MAAM,cACL,CAAC,cAAc,CAAC,mCAAmC,QAAQ,iBAAiB;EAC7E,MAAM,YACL,CAAC,cAAc,CAAC,mCAAmC,QAAQ,gBAAgB;AAE5E,SAAO;GACN,GAAG,cAAc,YAAY;GAC7B,MAAM;GACN,GAAI,CAAC,oCAAoC;IACxC,kBAAkB,SAAS,eAAe;IAC1C,gBAAgB,SAAS,UAAU;IACnC;GACD,GAAG;GACH,GAAI,CAAC,YAAY,EAChB,WAAW,QACV,mMACA,sIACA,WAAW,UACX,EACD;GACD,iBAAiB,SAAS,WAAW;GACrC,SAAS,wBAAwB,aAAa,WAAW,QAAQ;GACjE,aAAa,wBAAwB,QAAQ,iBAAiB,WAAW,YAAY;GACrF,aAAa,wBAAwB,QAAQ,iBAAiB,WAAW,YAAY;GACrF,YAAY,wBAAwB,QAAQ,gBAAgB,WAAW,WAAW;GAClF,QAAQ,wBAAwB,YAAY,WAAW,OAAO;GAC9D,WAAW,wBAAwB,WAAW,WAAW,UAAU;GACnE,SAAS,wBAAwB,aAAa,WAAW,QAAQ;GACjE;GACA;IAEF;EACC;EACA;EACA,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR;EACA;EACA;EACA;EACA,CACD;CAED,MAAM,cAAmD,gBAAgB,SAAS;AACjF,WAAS,UAAU;AACnB,UAAQ,YAAY,KAAK;GACxB;CAEF,MAAM,gBAAmE,aACvE,eAAe;EACf,MAAM,aAAa,WAAW,YAAY;EAE1C,MAAM,eAAe,CAAC,aAAa,QAAQ,eAAe;AAE1D,SAAO;GACN,GAAG,cAAc,QAAQ;GACzB,GAAI,CAAC,oCAAoC,EAAE,kBAAkB,SAAS,eAAe,EAAE;GACvF,GAAG;GACH,QAAQ,mBAAmB,iBAAiB,KAAK,KAAK,GAAG,WAAW;GACpE,WAAW,QAAQ,UAAU,WAAW,UAAU;GAClD,iBAAiB,SAAS,WAAW;GACrC,UAAU;GACV,UAAU,YAAY,WAAW;GACjC,UAAU,wBAAwB,cAAc,WAAW,SAAS;GACpE,KAAK,YAAY,aAAa,WAAW,IAAI;GAC7C,MAAM;GACN;IAEF;EACC,QAAQ;EACR;EACA;EACA;EACA;EACA;EACA;EACA,CACD;CAED,MAAM,kBAAuE,aAC3E,eAAe;EACf,MAAM,aAAa,WAAW,YAAY;AAE1C,SAAO;GACN,GAAG,cAAc,UAAU;GAC3B,MAAM;GACN,GAAG;GACH,iBAAiB,SAAS,WAAW;GACrC,UAAU;GACV,SAAS,wBAAwB,QAAQ,gBAAgB,WAAW,QAAQ;GAC5E;IAEF,CAAC,QAAQ,gBAAgB,SAAS,CAClC;CAED,MAAM,mBAAyE,aAC7E,eAAe;EACf,MAAM,EAAE,cAAc,YAAY,WAAW,gBAAgB,GAAG,qBAAqB;AAErF,SAAO;GACN,GAAG,cAAc,YAAY;GAC7B,oBAAoB;GACpB,GAAG;GACH,GAAI,CAAC,YAAY,EAChB,WAAW,QACV,uBACA,gBAAgB,gBAAgB,kCAChC,WAAW,UACX,EACD;GACD;IAEF,CAAC,eAAe,CAChB;CAED,MAAM,mBAAyE,aAC7E,eAAe;EACf,MAAM,EAAE,WAAW,gBAAgB,GAAG,qBAAqB;AAE3D,SAAO;GACN,GAAG,cAAc,YAAY;GAC7B,GAAG;GACH,GAAI,CAAC,YAAY,EAChB,WAAW,QACV,6EACA,WAAW,UACX,EACD;GACD;IAEF,CAAC,eAAe,CAChB;CAED,MAAM,2BACL,aACE,eAAe;EACf,MAAM,EAAE,WAAW,gBAAgB,UAAU,UAAU,GAAG,qBAAqB;AAE/E,SAAO;GACN,GAAG,cAAc,qBAAqB;GACtC,MAAM;GACN,GAAG;GACH,GAAI,CAAC,YAAY,EAChB,WAAW,QACV,eACA,YAAY,cACR,+DACJ,YAAY,UACR,kHACJ,YAAY,YACR,uEACJ,iBAAiB,UACjB,EACD;GACD;IAEF,CAAC,eAAe,CAChB;CAEF,MAAM,yBAAqF,aACzF,eAAe;EACf,MAAM,EAAE,eAAe,GAAG,qBAAqB;EAE/C,MAAM,aAAa,WAAW,YAAY;EAE1C,MAAM,qBAAqB,iBAAiB,QAAQ,WAAW,EAAE,eAAe,CAAC;AAEjF,SAAO;GACN,GAAG,cAAc,mBAAmB;GACpC,MAAM;GACN,GAAG;GACH,iBAAiB,SAAS,WAAW;GACrC,UAAU;GACV,SAAS,wBAAwB,cAAc,iBAAiB,QAAQ;GACxE;IAEF,CAAC,SAAS,SAAS,CACnB;CAED,MAAM,0BACL,aACE,eAAe;EACf,MAAM,EAAE,WAAW,gBAAgB,GAAG,qBAAqB;AAE3D,SAAO;GACN,GAAG,cAAc,oBAAoB;GACrC,GAAG;GACH,GAAI,CAAC,YAAY,EAChB,WAAW,QACV,yHACA,WAAW,UACX,EACD;GACD;IAEF,CAAC,eAAe,CAChB;CAEF,MAAM,2BACL,aACE,eAAe;EACf,MAAM,EAAE,WAAW,gBAAgB,GAAG,qBAAqB;AAE3D,SAAO;GACN,GAAG,cAAc,qBAAqB;GACtC,GAAG;GACH,GAAI,CAAC,YAAY,EAChB,WAAW,QAAQ,8BAA8B,WAAW,UAAU,EACtE;GACD;IAEF,CAAC,eAAe,CAChB;CAEF,MAAM,wBAAmF,aACvF,eAAe;EACf,MAAM,aAAa,WAAW,YAAY;AAE1C,SAAO;GACN,GAAG,cAAc,kBAAkB;GACnC,MAAM;GACN,GAAG;GACH,iBAAiB,SAAS,WAAW;GACrC,UAAU;GACV,SAAS,wBAAwB,QAAQ,YAAY,WAAW,QAAQ;GACxE;IAEF,CAAC,QAAQ,YAAY,SAAS,CAC9B;CAED,MAAM,cAAc,eAEjB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,GACF;EACC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,CACD;CAED,MAAM,yBAAyB,eAAe,iBAAiB;AAe/D,QAbe,eAEZ;EACA;EACA;EACA;EACA;EACA;EACA,kBAAkB;EAClB,GACF;EAAC;EAAU;EAAkC;EAAa;EAAU;EAAuB,CAC3F;;;;;ACzUF,SAAgB,aAAa,OAA0B;CACtD,MAAM,EAAE,UAAU,GAAG,gBAAgB;CAErC,MAAM,EAAE,UAAU,kCAAkC,UAAU,aAAa,aAC1E,YAAY,YAAY;AAazB,QACC,oBAAC;EAA6B,OAAO;YACpC,oBAAC;GAA4B,OAbN,eAEtB;IACA;IACA;IACA;IACA;IACA,GACF;IAAC;IAAkC;IAAU;IAAU;IAAY,CACnE;GAIwD;IAAuC;GAChE;;AASjC,SAAgB,gBAAwC,OAAqC;CAC5F,MAAM,EAAE,UAAU,aAAa;CAE/B,MAAM,cAAc,wBAAwB,mBAAmB,SAAS,CAAC;AAIzE,QAFyB,WAAW,SAAS,GAAG,SAAS,YAAY,GAAG;;AAOzE,SAAgB,kBACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,OAAO,SAAS,GAAG,gBAAgB;CAEzD,MAAM,EAAE,kCAAkC,gBAAgB,wBAAwB;CAElF,MAAM,iBAAiB,yBAAyB,UAC/C,mCAAmC,MAAM,iBAAiB,KAC1D;CAED,MAAM,YAAY,yBAAyB,UAC1C,mCAAmC,MAAM,YAAY,KACrD;AAID,QACC,oBAHiB,UAAUC,WAAY,WAItC,GAAI,YAAY,kBAAkB;EACjC,GAAI,oCAAoC;GACvC,kBAAkB,SAAS,eAAe;GAC1C,gBAAgB,SAAS,UAAU;GACnC;EACD,GAAG;EACH,CAAC,GACD;;AAMJ,SAAgB,cAAc,OAA2B;CACxD,MAAM,EAAE,SAAS,GAAG,gBAAgB;CAEpC,MAAM,EAAE,kCAAkC,gBAAgB,wBAAwB;CAElF,MAAM,iBAAiB,yBAAyB,UAC/C,mCAAmC,MAAM,iBAAiB,KAC1D;AAID,QACC,oBAHiB,UAAUA,WAAY,WAItC,GAAI,YAAY,cAAc;EAC7B,GAAI,oCAAoC,EAAE,kBAAkB,SAAS,eAAe,EAAE;EACtF,GAAG;EACH,CAAC,GACD;;AAUJ,SAAgB,aAAqC,OAAkC;CACtF,MAAM,EAAE,UAAU,WAAW,YAAY,YAAY,UAAU,GAAG,gBAAgB;AAElF,QACC,qBAAC;EACA,GAAI,YAAY;EAChB,GAAI;EACJ,WAAW,QAAQ,YAAY,WAAW,WAAW,WAAW,YAAY,UAAU;aAEtF,oBAAC;GACA,GAAI,YAAY;GAChB,WAAW,QAAQ,YAAY,OAAO,WAAW,YAAY,MAAM;IAClE,EAEF,oBAAC;GAA0B;GAAW;IAA2B;GAC9C;;AAMtB,SAAgB,gBAAgB,OAA6B;CAC5D,MAAM,EAAE,SAAS,GAAG,gBAAgB;CAEpC,MAAM,EAAE,gBAAgB,wBAAwB;AAIhD,QAAO,oBAFW,UAAUA,WAAY,YAEtB,GAAI,YAAY,gBAAgB,YAAY,GAAI;;AA0BnE,SAAgB,iBACf,OACC;CACD,MAAM,EACL,IAAI,UAAU,MACd,SACA,UACA,aAAa,OACb,aAAa,YACb,GAAG,gBACA;CAEJ,MAAM,iBAAiB,yBAAyB,UAAU,MAAM,eAAe;CAC/E,MAAM,UAAU,yBAAyB,UAAU,MAAM,QAAQ;CAEjE,MAAM,EAAE,kCAAkC,gBAAgB,wBAAwB;CAElF,MAAM,cAAc;EACnB,qBAAqB;AAEpB,UADmB,SACD;IAAE;IAAS;IAAgB,CAAC;;EAE/C,kBAAkB;GACjB,MAAM,aAAa;AAEnB,UACC,oBAAC;IACA,MAAM;IACN,aAAa,WAAW,OAAO,UAAU,WAAW;KAAE;KAAS;KAAO;KAAW;KAAO,CAAC;KACxF;;EAGJ;CAED,MAAM,WAAW,eAAe,SAAS;AAIzC,QACC,oBAAC;EAAS,SAAS;EAAsB;YACxC,oBAJgB,UAAUA,WAAY;GAKrC,GAAI,YAAY,iBAAiB;IAChC,GAAI,oCAAoC,EAAE,cAAc,WAAW,WAAW,YAAY;IAC1F,GAAG;IACH,CAAC;aAED,WAAW,SAAS,GAAG,YAAY,aAAa,GAAG;IACzC;GACF;;AAMb,SAAgB,iBACf,OACC;CACD,MAAM,EAAE,IAAI,UAAU,MAAM,SAAS,WAAW,GAAG,gBAAgB;CAEnE,MAAM,EAAE,gBAAgB,wBAAwB;CAEhD,MAAM,YAAY,UAAUA,WAAY;AAOxC,QACC,oBAAC;EAAwB,OANL,eACb,EAAE,WAAW,GACpB,CAAC,UAAU,CACX;YAIC,oBAAC,aAAU,GAAI,YAAY,iBAAiB,YAAY,GAAI;GACnC;;AAM5B,SAAgB,uBAAuB,OAAoC;CAC1E,MAAM,EAAE,SAAS,eAAe,GAAG,gBAAgB;CAEnD,MAAM,EAAE,gBAAgB,wBAAwB;CAEhD,MAAM,uBAAuB,oBAAoB;CAEjD,MAAM,YAAY,UAAUA,WAAY;CAExC,MAAM,wBAAwB,iBAAiB,sBAAsB;AAErE,QACC,oBAAC,aACA,GAAI,YAAY,uBAAuB;EAAE,eAAe;EAAuB,GAAG;EAAa,CAAC,GAC/F;;AAUJ,SAAgB,yBACf,OACC;CACD,MAAM,EACL,IAAI,UAAU,QACd,SACA,aAAa,OACb,OAAO,IACP,UAAU,UACV,GAAG,gBACA;CAIJ,MAAM,YAFuB,oBAAoB,EAET;CAExC,MAAM,EAAE,gBAAgB,wBAAwB;AAEhD,KAAI,CAAC,UACJ,QAAO;CAGR,MAAM,kBAAkB,UAAU;AAIlC,KAAI,EAFiB,cAAc,UAAU,aAAa,KAGzD,QAAO;CAGR,MAAM,YAAY,UAAUA,WAAY;CAExC,MAAM,iBAAiB,YAAY,yBAAyB;EAAE;EAAS,GAAG;EAAa,CAAC;AAExF,SAAQ,SAAR;EACC,KAAK,YAAY;GAChB,MAAM,gBAAgB,IAAI,KAAK,OAAO,OAAO,KAAK;GAClD,MAAM,mBAAmB,gBAAiB,kBAAkB,MAAO;AAEnE,UACC,oBAAC;IAAU,GAAI;cACd,qBAAC;KACA,WAAU;KACV,OAAO;KACP,QAAQ;KACR,SAAS,OAAO,KAAK,GAAG;KACxB,MAAK;KACL,QAAO;gBAEP,oBAAC;MACA,WAAU;MACV,aAAY;MACZ,IAAI,OAAO;MACX,IAAI,OAAO;MACX,IAAI,OAAO,KAAK;OACf,EACF,oBAAC;MACA,WAAU;MACV,aAAY;MACZ,eAAc;MACd,iBAAiB;MACC;MAClB,IAAI,OAAO;MACX,IAAI,OAAO;MACX,IAAI,OAAO,KAAK;OACf;MACG;KACK;;EAId,KAAK,QAAQ;GACZ,MAAM,WAAW,MAAM;AAEvB,UACC,oBAAC;IACA,GAAI;IACJ,OACC,EACC,eAAe,SAAS,SAAS,cACjC;KAED;;EAIJ,KAAK,SACJ,QACC,oBAAC;GAAU,GAAI;aACd,oBAAC;IACA,WAAU;IACV,OACC,EACC,wBAAwB,IAAI,MAAM,gBAAgB,IAClD;KAED;IACS;EAId,QAEC,QAAO;;;AA4CV,SAAgB,wBACf,OACC;CACD,MAAM,EACL,IAAI,UAAU,QACd,SACA,UACA,WAAW,eACX,gBAAgB,MAChB,GAAG,gBACA;CAEJ,MAAM,uBAAuB,oBAAoB;CAEjD,MAAM,EAAE,gBAAgB,wBAAwB;CAEhD,MAAM,YAAY,iBAAiB,sBAAsB;AAEzD,KAAI,CAAC,UACJ,QAAO;CAGR,MAAM,WAAW,UAAU,KAAK,QAAQ;CAExC,MAAM,gBAAgB,UAAU,KAAK,MAAM,MAAM,IAAI,CAAC,KAAK,EAAE,aAAa,IAAI;CAE9E,MAAM,YAAY,UAAUA,WAAY;CAExC,MAAM,wBACL,qBAAqB;EAAE;EAAe;EAAW;EAAU;EAAe,CAAC;CAE5E,MAAM,mBACL,WAAW,SAAS,GAAG,SAAS;EAAE;EAAiB;EAAe;EAAW;EAAU,CAAC,GAAG;AAE5F,QACC,qBAAC;EAAU,GAAI,YAAY,wBAAwB,YAAY;aAC7D,iBAAiB,iBAAiB,EAClC;GACU;;AAId,MAAM,sBAIL,SACA,aAAiD,UAAmB,WAChE;AAIJ,QAFC,WAAW,SAAS,KAAK,GAAG,QAAQ,KAAK,EAAY,UAAmB,CAAC,GAAG,SAAS;;AAKvF,MAAM,wBACL,YACqB;CACrB,MAAM,EAAE,eAAe,WAAW,UAAU,kBAAkB;CAE9D,MAAM,qBAAqB,UAAU,cAAc,GAAG,EAAE,GAAG;CAE3D,MAAM,8BACL,WAAW,mBAAmB,GAC7B,mBAAmB;EAAE;EAAe;EAAW;EAAU,CAAC,GACzD;AAEH,SAAQ,MAAR;EACC,KAAK,SAAS,WAAW,SAAS,CAQjC,QAPqB,mBAAmB,4BAA4B,QAAQ,gBAAgB;GAC3F,GAAG;GACH,KAAK,WAAW,OAAO,UAAU,KAAK,QAAQ;GAC9C,WAAW,QAAQ,0BAA0B,WAAW,UAAU;GAClE,KAAK,WAAW,OAAO,UAAU;GACjC,EAAE,IAID,oBAAC;GACA,GAAI,4BAA4B,OAAO;GACvC,KAAK,UAAU;GACf,KAAK,UAAU,KAAK,QAAQ;GAC5B,WAAW,QACV,0BACA,4BAA4B,OAAO,OAAO,UAC1C;IACA;EAKL,KAAK,SAAS,WAAW,SAAS,CAMjC,QALqB,mBAAmB,4BAA4B,QAAQ,gBAAgB;GAC3F,GAAG;GACH,WAAW,QAAQ,0BAA0B,WAAW,UAAU;GAClE,EAAE,IAID,oBAAC;GACA,GAAI,4BAA4B,OAAO;GACvC,WAAW,QACV,0BACA,4BAA4B,OAAO,OAAO,UAC1C;IACA;EAKL,KAAK,SAAS,WAAW,SAAS,CAMjC,QALqB,mBAAmB,4BAA4B,QAAQ,gBAAgB;GAC3F,GAAG;GACH,WAAW,QAAQ,0BAA0B,WAAW,UAAU;GAClE,EAAE,IAID,oBAAC;GACA,GAAI,4BAA4B,OAAO;GACvC,WAAW,QACV,0BACA,4BAA4B,OAAO,OAAO,UAC1C;IACA;EAKL,KAAK,SAAS,WAAW,QAAQ,IAAI;GAAC;GAAM;GAAO;GAAO;GAAM,CAAC,SAAS,cAAc,CAGvF,QAFqB,mBAAmB,4BAA4B,KAAK,IAElD,oBAAC,gBAAa,GAAI,4BAA4B,MAAM,QAAS;EAGrF,KAAK;GACJ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,CAAC,SAAS,cAAc,CAGxB,QAFqB,mBAAmB,4BAA4B,KAAK,IAElD,oBAAC,gBAAa,GAAI,4BAA4B,MAAM,QAAS;EAGrF,KAAK;GAAC;GAAM;GAAO;GAAM;GAAO;GAAO;GAAM,CAAC,SAAS,cAAc,CAGpE,QAFqB,mBAAmB,4BAA4B,QAAQ,IAErD,oBAAC,mBAAgB,GAAI,4BAA4B,SAAS,QAAS;EAG3F,KAAK;GAAC;GAAO;GAAO;GAAO;GAAO;GAAO;GAAM,CAAC,SAAS,cAAc,CAGtE,QAFqB,mBAAmB,4BAA4B,WAAW,IAExD,oBAAC,eAAY,GAAI,4BAA4B,YAAY,QAAS;EAG1F,QAGC,QAFqB,mBAAmB,4BAA4B,QAAQ,IAErD,oBAAC,YAAS,GAAI,4BAA4B,SAAS,QAAS;;;AAgBtF,SAAgB,yBAAyB,OAAsC;CAC9E,MAAM,EACL,SACA,UACA,YACA,WAAW,eACX,OAAO,WACP,GAAG,gBACA;CAEJ,MAAM,uBAAuB,oBAAoB;CAEjD,MAAM,EAAE,gBAAgB,wBAAwB;CAEhD,MAAM,YAAY,iBAAiB,sBAAsB;AAEzD,KAAI,CAAC,UACJ,QAAO;CAGR,MAAM,YAAY,UAAUA,WAAY;CAExC,MAAM,mBAAmB,WAAW,SAAS,GAAG,SAAS,EAAE,WAAW,CAAC,GAAG;CAE1E,MAAM,mCAAmC;AACxC,SACC;GACC,oBAAC;IACA,WAAW,QACV,YACA,SAAS,aAAa,2BACtB,SAAS,QAAQ,4BACjB,YAAY,KACZ;cAEA,UAAU,KAAK;KACb;GACJ,oBAAC;IACA,WAAW,QACV,qCACA,SAAS,aAAa,eACtB,SAAS,QAAQ,4BACjB,YAAY,KACZ;cAEA,SAAS,UAAU,KAAK,KAAK,IAAI,YAAY,UAAU,KAAK,KAAK;KAC/D;GACH,UAAU,SACV,oBAAC;IAAE,WAAU;cAAmC,UAAU,MAAM;KAAY;MAE3E;;AAIL,QACC,oBAAC;EAAU,GAAI,YAAY,yBAAyB,YAAY;YAC9D,oBAAoB,4BAA4B;GACtC;;AASd,SAAgB,kBAAkB,OAA+B;CAChE,MAAM,EAAE,SAAS,aAAa,OAAO,GAAG,gBAAgB;CAExD,MAAM,EAAE,gBAAgB,wBAAwB;CAEhD,MAAM,YAAY,yBAAyB,UAAU,MAAM,eAAe,OAAO;AAIjF,KAAI,EAFiB,cAAc,YAAY,GAG9C,QAAO;AAKR,QAAO,oBAFW,UAAUA,WAAY,YAEtB,GAAI,YAAY,sBAAsB,YAAY,GAAI"}
@@ -1,8 +1,8 @@
1
1
  import { DiscriminatedRenderItemProps, DiscriminatedRenderProps, InferProps, PolymorphicPropsStrict } from "@zayne-labs/toolkit-react/utils";
2
2
  import { UnionDiscriminator } from "@zayne-labs/toolkit-type-helpers";
3
- import * as react22 from "react";
3
+ import * as react from "react";
4
4
  import "@zayne-labs/toolkit-react";
5
- import * as react_jsx_runtime21 from "react/jsx-runtime";
5
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
6
6
  import { Control, ControllerProps, FieldPath, FormStateSubscribeProps, RegisterOptions, UseFormReturn, UseFormStateReturn, WatchProps, useFormContext as useFormRootContext } from "react-hook-form";
7
7
 
8
8
  //#region src/components/ui/form/form-context.d.ts
@@ -37,7 +37,7 @@ type FormRootProps<TFieldValues extends FieldValues, TTransformedValues> = Infer
37
37
  children: React.ReactNode;
38
38
  form: UseFormReturn<TFieldValues, unknown, TTransformedValues>;
39
39
  };
40
- declare function FormRoot<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(props: FormRootProps<TFieldValues, TTransformedValues>): react_jsx_runtime21.JSX.Element;
40
+ declare function FormRoot<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(props: FormRootProps<TFieldValues, TTransformedValues>): react_jsx_runtime0.JSX.Element;
41
41
  type FormFieldProps<TControl, TFieldValues extends FieldValues, TTransformedValues> = (TControl extends (Control<infer TValues>) ? {
42
42
  control?: never;
43
43
  name: FieldPath<TValues>;
@@ -51,23 +51,23 @@ type FormFieldProps<TControl, TFieldValues extends FieldValues, TTransformedValu
51
51
  className?: never;
52
52
  withWrapper: false;
53
53
  });
54
- declare function FormField<TControl, TFieldValues extends FieldValues = FieldValues, TTransformedValues = TFieldValues>(props: FormFieldProps<TControl, TFieldValues, TTransformedValues>): react_jsx_runtime21.JSX.Element;
54
+ declare function FormField<TControl, TFieldValues extends FieldValues = FieldValues, TTransformedValues = TFieldValues>(props: FormFieldProps<TControl, TFieldValues, TTransformedValues>): react_jsx_runtime0.JSX.Element;
55
55
  type FormFieldControlledFieldProps<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues>, TTransformedValues = TFieldValues> = ControllerProps<TFieldValues, TName, TTransformedValues>;
56
- declare function FormFieldWithController<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues>, TTransformedValues = TFieldValues>(props: FormFieldControlledFieldProps<TFieldValues, TName, TTransformedValues>): react_jsx_runtime21.JSX.Element;
56
+ declare function FormFieldWithController<TFieldValues extends FieldValues, TName extends FieldPath<TFieldValues>, TTransformedValues = TFieldValues>(props: FormFieldControlledFieldProps<TFieldValues, TName, TTransformedValues>): react_jsx_runtime0.JSX.Element;
57
57
  type FormFieldBoundControllerProps<TFieldValues extends FieldValues, TTransformedValues> = Omit<ControllerProps<TFieldValues, never, TTransformedValues>, "control" | "name">;
58
- declare function FormFieldBoundController<TFieldValues extends FieldValues = Record<string, never>, TTransformedValues = TFieldValues>(props: FormFieldBoundControllerProps<TFieldValues, TTransformedValues>): react_jsx_runtime21.JSX.Element;
59
- declare function FormFieldContext(props: FormFieldContextProps): react22.ReactNode;
60
- declare function FormLabel(props: InferProps<"label">): react_jsx_runtime21.JSX.Element;
61
- declare function FormInputGroup(props: InferProps<"div">): react_jsx_runtime21.JSX.Element;
58
+ declare function FormFieldBoundController<TFieldValues extends FieldValues = Record<string, never>, TTransformedValues = TFieldValues>(props: FormFieldBoundControllerProps<TFieldValues, TTransformedValues>): react_jsx_runtime0.JSX.Element;
59
+ declare function FormFieldContext(props: FormFieldContextProps): react.ReactNode;
60
+ declare function FormLabel(props: InferProps<"label">): react_jsx_runtime0.JSX.Element;
61
+ declare function FormInputGroup(props: InferProps<"div">): react_jsx_runtime0.JSX.Element;
62
62
  type FormSideItemProps = {
63
63
  children?: React.ReactNode;
64
64
  className?: string;
65
65
  };
66
- declare function FormInputLeftItem<TElement extends React.ElementType = "span">(props: PolymorphicPropsStrict<TElement, FormSideItemProps>): react_jsx_runtime21.JSX.Element;
66
+ declare function FormInputLeftItem<TElement extends React.ElementType = "span">(props: PolymorphicPropsStrict<TElement, FormSideItemProps>): react_jsx_runtime0.JSX.Element;
67
67
  declare namespace FormInputLeftItem {
68
68
  var slotSymbol: symbol;
69
69
  }
70
- declare function FormInputRightItem<TElement extends React.ElementType = "span">(props: PolymorphicPropsStrict<TElement, FormSideItemProps>): react_jsx_runtime21.JSX.Element;
70
+ declare function FormInputRightItem<TElement extends React.ElementType = "span">(props: PolymorphicPropsStrict<TElement, FormSideItemProps>): react_jsx_runtime0.JSX.Element;
71
71
  declare namespace FormInputRightItem {
72
72
  var slotSymbol: symbol;
73
73
  }
@@ -103,13 +103,13 @@ type FormSelectPrimitiveProps<TFieldValues extends FieldValues> = React.Componen
103
103
  };
104
104
  declare function FormInputPrimitive<TFieldValues extends FieldValues>(props: FormInputPrimitiveProps<TFieldValues> & {
105
105
  rules?: RegisterOptions;
106
- }): react_jsx_runtime21.JSX.Element;
106
+ }): react_jsx_runtime0.JSX.Element;
107
107
  declare function FormTextAreaPrimitive<TFieldValues extends FieldValues>(props: FormTextAreaPrimitiveProps<TFieldValues> & {
108
108
  rules?: RegisterOptions;
109
- }): react_jsx_runtime21.JSX.Element;
109
+ }): react_jsx_runtime0.JSX.Element;
110
110
  declare function FormSelectPrimitive<TFieldValues extends FieldValues>(props: FormSelectPrimitiveProps<TFieldValues> & {
111
111
  rules?: RegisterOptions;
112
- }): react_jsx_runtime21.JSX.Element;
112
+ }): react_jsx_runtime0.JSX.Element;
113
113
  type PrimitivePropsToOmit = "control" | "formState" | "name";
114
114
  type FormInputProps = Omit<FormInputPrimitiveProps<FieldValues>, PrimitivePropsToOmit> & {
115
115
  rules?: RegisterOptions;
@@ -127,10 +127,10 @@ type CombinedFormInputProps = (FormSelectProps & {
127
127
  }) | FormInputProps;
128
128
  declare function FormInput(props: CombinedFormInputProps & {
129
129
  rules?: RegisterOptions;
130
- }): react_jsx_runtime21.JSX.Element;
131
- declare function FormTextArea(props: FormTextAreaProps): react_jsx_runtime21.JSX.Element;
132
- declare function FormSelect(props: FormSelectProps): react_jsx_runtime21.JSX.Element;
133
- declare function FormDescription(props: InferProps<"p">): react_jsx_runtime21.JSX.Element;
130
+ }): react_jsx_runtime0.JSX.Element;
131
+ declare function FormTextArea(props: FormTextAreaProps): react_jsx_runtime0.JSX.Element;
132
+ declare function FormSelect(props: FormSelectProps): react_jsx_runtime0.JSX.Element;
133
+ declare function FormDescription(props: InferProps<"p">): react_jsx_runtime0.JSX.Element;
134
134
  type ErrorMessageRenderProps = {
135
135
  className: string;
136
136
  "data-index": number;
@@ -189,15 +189,15 @@ type FormErrorMessageProps<TControl, TFieldValues extends FieldValues, TTransfor
189
189
  errorField: string;
190
190
  type: "root";
191
191
  };
192
- declare function FormErrorMessage<TControl, TFieldValues extends FieldValues = FieldValues, TTransformedValues = TFieldValues>(props: FormErrorMessageProps<TControl, TFieldValues, TTransformedValues>): react_jsx_runtime21.JSX.Element;
192
+ declare function FormErrorMessage<TControl, TFieldValues extends FieldValues = FieldValues, TTransformedValues = TFieldValues>(props: FormErrorMessageProps<TControl, TFieldValues, TTransformedValues>): react_jsx_runtime0.JSX.Element;
193
193
  type FormSubmitProps = InferProps<"button"> & {
194
194
  asChild?: boolean;
195
195
  };
196
- declare function FormSubmit<TElement extends React.ElementType = "button">(props: PolymorphicPropsStrict<TElement, FormSubmitProps>): react_jsx_runtime21.JSX.Element;
196
+ declare function FormSubmit<TElement extends React.ElementType = "button">(props: PolymorphicPropsStrict<TElement, FormSubmitProps>): react_jsx_runtime0.JSX.Element;
197
197
  type FormWatchProps<TFieldValues extends FieldValues, TFieldName extends Array<FieldPath<TFieldValues>> | FieldPath<TFieldValues> | ReadonlyArray<FieldPath<TFieldValues>> | undefined, TTransformedValues, TComputeValue, TComputedProps extends Omit<WatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>, "names"> = Omit<WatchProps<TFieldName, TFieldValues, unknown, TTransformedValues, TComputeValue>, "names">> = DiscriminatedRenderProps<TComputedProps["render"]> & Omit<TComputedProps, "render">;
198
- declare function FormWatch<TFieldValues extends FieldValues = FieldValues, const TFieldName extends Array<FieldPath<TFieldValues>> | FieldPath<TFieldValues> | ReadonlyArray<FieldPath<TFieldValues>> | undefined = undefined, TTransformedValues = TFieldValues, TComputeValue = undefined>(props: FormWatchProps<TFieldValues, TFieldName, TTransformedValues, TComputeValue>): react22.ReactNode | react22.ReactNode[];
198
+ declare function FormWatch<TFieldValues extends FieldValues = FieldValues, const TFieldName extends Array<FieldPath<TFieldValues>> | FieldPath<TFieldValues> | ReadonlyArray<FieldPath<TFieldValues>> | undefined = undefined, TTransformedValues = TFieldValues, TComputeValue = undefined>(props: FormWatchProps<TFieldValues, TFieldName, TTransformedValues, TComputeValue>): react.ReactNode | react.ReactNode[];
199
199
  type FormStateSubscribeProps$1<TFieldValues extends FieldValues, TTransformedValues, TComputedProps extends FormStateSubscribeProps<TFieldValues, TTransformedValues> = FormStateSubscribeProps<TFieldValues, TTransformedValues>> = DiscriminatedRenderProps<TComputedProps["render"]> & Omit<TComputedProps, "render">;
200
- declare function FormStateSubscribe<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(props: FormStateSubscribeProps$1<TFieldValues, TTransformedValues>): react22.ReactNode;
200
+ declare function FormStateSubscribe<TFieldValues extends FieldValues, TTransformedValues = TFieldValues>(props: FormStateSubscribeProps$1<TFieldValues, TTransformedValues>): react.ReactNode;
201
201
  declare namespace form_parts_d_exports {
202
202
  export { FormDescription as Description, FormErrorMessage as ErrorMessage, FormErrorMessagePrimitive as ErrorMessagePrimitive, FormField as Field, FormFieldBoundController as FieldBoundController, FormFieldContext as FieldContext, FormFieldWithController as FieldWithController, FormInput as Input, FormInputGroup as InputGroup, FormInputLeftItem as InputLeftItem, FormInputPrimitive as InputPrimitive, FormInputRightItem as InputRightItem, FormLabel as Label, FormRoot as Root, FormSelect as Select, FormStateSubscribe as StateSubscribe, FormSubmit as Submit, FormTextArea as TextArea, FormTextAreaPrimitive as TextAreaPrimitive, FormWatch as Watch };
203
203
  }
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
 
3
- import { t as __exportAll } from "../../chunk-BN_g-Awi.js";
4
- import { n as SlotRoot } from "../../slot-C7TE8pEK.js";
5
- import { r as ForWithWrapper } from "../../for-DAM4xYij.js";
3
+ import { t as __exportAll } from "../../chunk-BYypO7fO.js";
4
+ import { n as SlotRoot } from "../../slot-parts-Da1BsS7u.js";
5
+ import { r as ForWithWrapper } from "../../getElementList-DwKrmXP0.js";
6
6
  import { t as cnMerge } from "../../cn-2hIN1AQ7.js";
7
7
  import { composeRefs, composeTwoEventHandlers, getMultipleSlots } from "@zayne-labs/toolkit-react/utils";
8
8
  import { defineEnum, isObject } from "@zayne-labs/toolkit-type-helpers";
@@ -117,4 +117,4 @@ const useErrorBoundary = () => {
117
117
 
118
118
  //#endregion
119
119
  export { ErrorBoundary as n, useErrorBoundaryContext as r, useErrorBoundary as t };
120
- //# sourceMappingURL=error-boundary-BwGXKuLC.js.map
120
+ //# sourceMappingURL=useErrorBoundary-CIUZVY-G.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useErrorBoundary-CIUZVY-G.js","names":["#resetErrorBoundary"],"sources":["../../src/components/common/error-boundary/error-boundary-context.ts","../../src/components/common/error-boundary/error-boundary.tsx","../../src/components/common/error-boundary/useErrorBoundary.ts"],"sourcesContent":["import { createCustomContext } from \"@zayne-labs/toolkit-react\";\n\nexport type ErrorBoundaryContextType = {\n\terror: unknown;\n\thasError: boolean;\n\tresetErrorBoundary: (...args: unknown[]) => void;\n};\n\nconst [ErrorBoundaryContext, useErrorBoundaryContext] = createCustomContext<ErrorBoundaryContextType>({\n\thookName: \"useErrorBoundaryContext\",\n\tname: \"ErrorBoundaryContext\",\n\tproviderName: \"ErrorBoundaryContextProvider\",\n});\n\nexport { ErrorBoundaryContext, useErrorBoundaryContext };\n","\"use client\";\n\nimport { isFunction } from \"@zayne-labs/toolkit-type-helpers\";\nimport { Component } from \"react\";\nimport { ErrorBoundaryContext, type ErrorBoundaryContextType } from \"./error-boundary-context\";\nimport type { ErrorBoundaryProps, ErrorFallbackProps } from \"./types\";\n\ntype ErrorBoundaryState =\n\t| {\n\t\t\terror: Error;\n\t\t\thasError: true;\n\t }\n\t| {\n\t\t\terror: null;\n\t\t\thasError: false;\n\t };\n\nconst initialState: ErrorBoundaryState = {\n\terror: null,\n\thasError: false,\n};\n\nconst hasArrayChanged = (arrayOne: unknown[] = [], arrayTwo: unknown[] = []) => {\n\treturn (\n\t\tarrayOne.length !== arrayTwo.length\n\t\t|| arrayOne.some((item, index) => !Object.is(item, arrayTwo[index]))\n\t);\n};\n\n/**\n * Copied from react-error-boundary package\n * @see https://github.com/bvaughn/react-error-boundary\n */\n\nexport class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryState> {\n\tconstructor(props: ErrorBoundaryProps) {\n\t\tsuper(props);\n\n\t\tthis.state = initialState;\n\t}\n\n\tstatic getDerivedStateFromError(error: Error) {\n\t\treturn { error, hasError: true };\n\t}\n\n\toverride componentDidCatch(error: Error, info: React.ErrorInfo) {\n\t\tthis.props.onError?.({ error, info });\n\t}\n\n\toverride componentDidUpdate(prevProps: ErrorBoundaryProps, prevState: ErrorBoundaryState) {\n\t\tconst { hasError } = this.state;\n\t\tconst { resetKeys } = this.props;\n\n\t\t// == There's an edge case where if the thing that triggered the error happens to *also* be in the resetKeys array, we'd end up resetting the error boundary immediately.\n\t\t// == This would likely trigger a second error to be thrown.\n\t\t// == So we make sure that we don't check the resetKeys on the first call of cDU after the error is set.\n\n\t\tif (hasError && prevState.error !== null && hasArrayChanged(prevProps.resetKeys, resetKeys)) {\n\t\t\tthis.props.onReset?.({\n\t\t\t\tnext: resetKeys,\n\t\t\t\tprev: prevProps.resetKeys,\n\t\t\t\treason: \"keys\",\n\t\t\t});\n\n\t\t\tthis.setState(initialState);\n\t\t}\n\t}\n\n\toverride render() {\n\t\tconst { children, fallback } = this.props;\n\t\tconst { error, hasError } = this.state;\n\n\t\tlet childToRender = children;\n\n\t\tif (hasError) {\n\t\t\tswitch (true) {\n\t\t\t\tcase isFunction(fallback): {\n\t\t\t\t\tconst fallbackRenderProps = {\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tresetErrorBoundary: this.#resetErrorBoundary,\n\t\t\t\t\t} satisfies ErrorFallbackProps;\n\n\t\t\t\t\tchildToRender = fallback(fallbackRenderProps);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tcase Boolean(fallback): {\n\t\t\t\t\tchildToRender = fallback;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tdefault: {\n\t\t\t\t\tconsole.warn(\"No fallback provided to error boundary\");\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst contextValue = {\n\t\t\terror,\n\t\t\thasError,\n\t\t\tresetErrorBoundary: this.#resetErrorBoundary,\n\t\t} satisfies ErrorBoundaryContextType;\n\n\t\treturn <ErrorBoundaryContext value={contextValue}>{childToRender}</ErrorBoundaryContext>;\n\t}\n\n\t#resetErrorBoundary = (...parameters: unknown[]) => {\n\t\tconst { error } = this.state;\n\n\t\tif (error !== null) {\n\t\t\tthis.props.onReset?.({\n\t\t\t\targs: parameters,\n\t\t\t\treason: \"imperative-api\",\n\t\t\t});\n\n\t\t\tthis.setState(initialState);\n\t\t}\n\t};\n}\n","import { useCallbackRef } from \"@zayne-labs/toolkit-react\";\nimport { useState } from \"react\";\nimport { useErrorBoundaryContext } from \"./error-boundary-context\";\n\ntype UseErrorBoundaryState<TError extends Error> =\n\t| {\n\t\t\terror: null;\n\t\t\thasError: false;\n\t }\n\t| {\n\t\t\terror: TError;\n\t\t\thasError: true;\n\t };\n\nexport const useErrorBoundary = <TError extends Error>() => {\n\tconst { resetErrorBoundary } = useErrorBoundaryContext();\n\n\tconst [state, setState] = useState<UseErrorBoundaryState<TError>>({\n\t\terror: null,\n\t\thasError: false,\n\t});\n\n\tif (state.hasError) {\n\t\tthrow state.error;\n\t}\n\n\tconst resetBoundary = useCallbackRef(() => {\n\t\tresetErrorBoundary();\n\n\t\tsetState({\n\t\t\terror: null,\n\t\t\thasError: false,\n\t\t});\n\t});\n\n\tconst showBoundary = useCallbackRef((error: TError) => {\n\t\tsetState({\n\t\t\terror,\n\t\t\thasError: true,\n\t\t});\n\t});\n\n\treturn { resetBoundary, showBoundary };\n};\n"],"mappings":";;;;;;AAQA,MAAM,CAAC,sBAAsB,2BAA2B,oBAA8C;CACrG,UAAU;CACV,MAAM;CACN,cAAc;CACd,CAAC;;;;ACKF,MAAM,eAAmC;CACxC,OAAO;CACP,UAAU;CACV;AAED,MAAM,mBAAmB,WAAsB,EAAE,EAAE,WAAsB,EAAE,KAAK;AAC/E,QACC,SAAS,WAAW,SAAS,UAC1B,SAAS,MAAM,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,SAAS,OAAO,CAAC;;;;;;AAStE,IAAa,gBAAb,cAAmC,UAAkD;CACpF,YAAY,OAA2B;AACtC,QAAM,MAAM;AAEZ,OAAK,QAAQ;;CAGd,OAAO,yBAAyB,OAAc;AAC7C,SAAO;GAAE;GAAO,UAAU;GAAM;;CAGjC,AAAS,kBAAkB,OAAc,MAAuB;AAC/D,OAAK,MAAM,UAAU;GAAE;GAAO;GAAM,CAAC;;CAGtC,AAAS,mBAAmB,WAA+B,WAA+B;EACzF,MAAM,EAAE,aAAa,KAAK;EAC1B,MAAM,EAAE,cAAc,KAAK;AAM3B,MAAI,YAAY,UAAU,UAAU,QAAQ,gBAAgB,UAAU,WAAW,UAAU,EAAE;AAC5F,QAAK,MAAM,UAAU;IACpB,MAAM;IACN,MAAM,UAAU;IAChB,QAAQ;IACR,CAAC;AAEF,QAAK,SAAS,aAAa;;;CAI7B,AAAS,SAAS;EACjB,MAAM,EAAE,UAAU,aAAa,KAAK;EACpC,MAAM,EAAE,OAAO,aAAa,KAAK;EAEjC,IAAI,gBAAgB;AAEpB,MAAI,SACH,SAAQ,MAAR;GACC,KAAK,WAAW,SAAS;AAMxB,oBAAgB,SALY;KAC3B;KACA,oBAAoB,MAAKA;KACzB,CAE4C;AAC7C;GAGD,KAAK,QAAQ,SAAS;AACrB,oBAAgB;AAChB;GAGD,QACC,SAAQ,KAAK,yCAAyC;;AAWzD,SAAO,oBAAC;GAAqB,OANR;IACpB;IACA;IACA,oBAAoB,MAAKA;IACzB;aAEkD;IAAqC;;CAGzF,uBAAuB,GAAG,eAA0B;EACnD,MAAM,EAAE,UAAU,KAAK;AAEvB,MAAI,UAAU,MAAM;AACnB,QAAK,MAAM,UAAU;IACpB,MAAM;IACN,QAAQ;IACR,CAAC;AAEF,QAAK,SAAS,aAAa;;;;;;;ACrG9B,MAAa,yBAA+C;CAC3D,MAAM,EAAE,uBAAuB,yBAAyB;CAExD,MAAM,CAAC,OAAO,YAAY,SAAwC;EACjE,OAAO;EACP,UAAU;EACV,CAAC;AAEF,KAAI,MAAM,SACT,OAAM,MAAM;AAmBb,QAAO;EAAE,eAhBa,qBAAqB;AAC1C,uBAAoB;AAEpB,YAAS;IACR,OAAO;IACP,UAAU;IACV,CAAC;IACD;EASsB,cAPH,gBAAgB,UAAkB;AACtD,YAAS;IACR;IACA,UAAU;IACV,CAAC;IACD;EAEoC"}
@@ -1,7 +1,7 @@
1
- import * as react2 from "react";
1
+ import * as react from "react";
2
2
  import { Component } from "react";
3
3
  import * as _zayne_labs_toolkit_react0 from "@zayne-labs/toolkit-react";
4
- import * as react_jsx_runtime7 from "react/jsx-runtime";
4
+ import * as react_jsx_runtime0 from "react/jsx-runtime";
5
5
 
6
6
  //#region src/components/common/error-boundary/types.d.ts
7
7
  type ErrorFallbackProps = {
@@ -49,7 +49,7 @@ declare class ErrorBoundary extends Component<ErrorBoundaryProps, ErrorBoundaryS
49
49
  };
50
50
  componentDidCatch(error: Error, info: React.ErrorInfo): void;
51
51
  componentDidUpdate(prevProps: ErrorBoundaryProps, prevState: ErrorBoundaryState): void;
52
- render(): react_jsx_runtime7.JSX.Element;
52
+ render(): react_jsx_runtime0.JSX.Element;
53
53
  }
54
54
  //#endregion
55
55
  //#region src/components/common/error-boundary/error-boundary-context.d.ts
@@ -58,7 +58,7 @@ type ErrorBoundaryContextType = {
58
58
  hasError: boolean;
59
59
  resetErrorBoundary: (...args: unknown[]) => void;
60
60
  };
61
- declare const ErrorBoundaryContext: react2.Context<ErrorBoundaryContextType>, useErrorBoundaryContext: _zayne_labs_toolkit_react0.UseCustomContext<ErrorBoundaryContextType, true>;
61
+ declare const ErrorBoundaryContext: react.Context<ErrorBoundaryContextType>, useErrorBoundaryContext: _zayne_labs_toolkit_react0.UseCustomContext<ErrorBoundaryContextType, true>;
62
62
  //#endregion
63
63
  //#region src/components/common/error-boundary/useErrorBoundary.d.ts
64
64
  declare const useErrorBoundary: <TError extends Error>() => {
@@ -67,4 +67,4 @@ declare const useErrorBoundary: <TError extends Error>() => {
67
67
  };
68
68
  //#endregion
69
69
  export { ErrorBoundaryProps as a, ErrorBoundary as i, ErrorBoundaryContextType as n, ErrorFallbackProps as o, useErrorBoundaryContext as r, useErrorBoundary as t };
70
- //# sourceMappingURL=index-C-H0yigJ.d.ts.map
70
+ //# sourceMappingURL=useErrorBoundary-DhOgXZDB.d.ts.map
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@zayne-labs/ui-react",
3
3
  "type": "module",
4
- "version": "0.10.48",
4
+ "version": "0.10.50",
5
5
  "description": "A composable UI/UI-utilities components library. ",
6
6
  "author": "Ryan Zayne",
7
7
  "license": "MIT",
@@ -45,9 +45,9 @@
45
45
  }
46
46
  },
47
47
  "dependencies": {
48
- "@zayne-labs/toolkit-core": "0.12.30",
49
- "@zayne-labs/toolkit-react": "0.12.30",
50
- "@zayne-labs/toolkit-type-helpers": "0.12.30"
48
+ "@zayne-labs/toolkit-core": "0.12.35",
49
+ "@zayne-labs/toolkit-react": "0.12.35",
50
+ "@zayne-labs/toolkit-type-helpers": "0.12.35"
51
51
  },
52
52
  "devDependencies": {
53
53
  "@arethetypeswrong/cli": "0.18.2",
@@ -55,10 +55,10 @@
55
55
  "@size-limit/preset-small-lib": "12.0.0",
56
56
  "@tailwindcss/cli": "4.1.18",
57
57
  "@total-typescript/ts-reset": "0.6.1",
58
- "@types/react": "19.2.10",
58
+ "@types/react": "19.2.13",
59
59
  "@types/react-dom": "19.2.3",
60
- "@zayne-labs/prettier-config": "0.11.21",
61
- "@zayne-labs/tsconfig": "0.11.21",
60
+ "@zayne-labs/prettier-config": "0.11.27",
61
+ "@zayne-labs/tsconfig": "0.11.27",
62
62
  "concurrently": "9.2.1",
63
63
  "cross-env": "10.1.0",
64
64
  "prettier": "3.8.1",
@@ -73,7 +73,7 @@
73
73
  "size-limit": "12.0.0",
74
74
  "tailwind-merge": "3.4.0",
75
75
  "tailwindcss": "4.1.18",
76
- "tsdown": "0.20.1",
76
+ "tsdown": "0.20.3",
77
77
  "typescript": "5.9.3"
78
78
  },
79
79
  "publishConfig": {