@startdownnotez404/ui 1.3.5 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/AutocompleteField-653233JU.mjs +203 -0
- package/dist/AutocompleteField-653233JU.mjs.map +1 -0
- package/dist/AvatarField-KFASMVZU.mjs +378 -0
- package/dist/AvatarField-KFASMVZU.mjs.map +1 -0
- package/dist/{DateField-ZYMZFHL4.mjs → DateField-CDJ6W6XF.mjs} +19 -7
- package/dist/DateField-CDJ6W6XF.mjs.map +1 -0
- package/dist/DateRangeField-ZWSFT5KV.mjs +118 -0
- package/dist/DateRangeField-ZWSFT5KV.mjs.map +1 -0
- package/dist/{DateTimeField-TPTJ7YIZ.mjs → DateTimeField-SFAF4I6A.mjs} +36 -11
- package/dist/DateTimeField-SFAF4I6A.mjs.map +1 -0
- package/dist/FileUploadField-TSNCSLXX.mjs +101 -0
- package/dist/FileUploadField-TSNCSLXX.mjs.map +1 -0
- package/dist/{JSONEditorField-TMRWGXVR.mjs → JSONEditorField-3KXC2GOG.mjs} +7 -6
- package/dist/{JSONEditorField-TMRWGXVR.mjs.map → JSONEditorField-3KXC2GOG.mjs.map} +1 -1
- package/dist/{PopperMenu-LJ36RPBW.mjs → PopperMenu-PSHLKIEZ.mjs} +26 -12
- package/dist/{PopperMenu-LJ36RPBW.mjs.map → PopperMenu-PSHLKIEZ.mjs.map} +1 -1
- package/dist/{TelField-LOGRVZ4I.mjs → TelField-FRQT2UBJ.mjs} +8 -7
- package/dist/{TelField-LOGRVZ4I.mjs.map → TelField-FRQT2UBJ.mjs.map} +1 -1
- package/dist/TimeField-XVWXBJID.mjs +94 -0
- package/dist/TimeField-XVWXBJID.mjs.map +1 -0
- package/dist/alert.d.mts +148 -18
- package/dist/alert.d.ts +148 -18
- package/dist/alert.js +698 -254
- package/dist/alert.js.map +1 -1
- package/dist/alert.mjs +46 -10
- package/dist/autocomplete.d.mts +438 -4
- package/dist/autocomplete.d.ts +438 -4
- package/dist/autocomplete.js +632 -21
- package/dist/autocomplete.js.map +1 -1
- package/dist/autocomplete.mjs +26 -7
- package/dist/avatar.js +2 -1
- package/dist/avatar.js.map +1 -1
- package/dist/avatar.mjs +12 -11
- package/dist/box.mjs +2 -1
- package/dist/button.mjs +3 -2
- package/dist/chart.mjs +3 -2
- package/dist/checkbox.mjs +3 -2
- package/dist/chunk-2FK24ZPJ.mjs +78 -0
- package/dist/chunk-2FK24ZPJ.mjs.map +1 -0
- package/dist/{chunk-V26V2S3W.mjs → chunk-3O3N6X6D.mjs} +3 -3
- package/dist/{chunk-Y74ALKBL.mjs → chunk-4MSPA7U7.mjs} +11 -9
- package/dist/{chunk-Y74ALKBL.mjs.map → chunk-4MSPA7U7.mjs.map} +1 -1
- package/dist/{chunk-24XDGNJ6.mjs → chunk-4P45Z5LR.mjs} +63 -41
- package/dist/chunk-4P45Z5LR.mjs.map +1 -0
- package/dist/chunk-4SSJY32J.mjs +1182 -0
- package/dist/chunk-4SSJY32J.mjs.map +1 -0
- package/dist/{chunk-XJ2SXC2Q.mjs → chunk-6B6I27TT.mjs} +18 -16
- package/dist/{chunk-XJ2SXC2Q.mjs.map → chunk-6B6I27TT.mjs.map} +1 -1
- package/dist/chunk-6JKMEH2L.mjs +205 -0
- package/dist/chunk-6JKMEH2L.mjs.map +1 -0
- package/dist/{chunk-IN3O4R7Q.mjs → chunk-7O526A2D.mjs} +6 -4
- package/dist/{chunk-IN3O4R7Q.mjs.map → chunk-7O526A2D.mjs.map} +1 -1
- package/dist/chunk-AFLEG5ZC.mjs +28 -0
- package/dist/chunk-AFLEG5ZC.mjs.map +1 -0
- package/dist/{chunk-UGMRJMFZ.mjs → chunk-BO5CU4ZM.mjs} +4 -4
- package/dist/{chunk-JIU5GVM7.mjs → chunk-D4XPNSSI.mjs} +5 -3
- package/dist/{chunk-JIU5GVM7.mjs.map → chunk-D4XPNSSI.mjs.map} +1 -1
- package/dist/chunk-DPIMA5IO.mjs +72 -0
- package/dist/chunk-DPIMA5IO.mjs.map +1 -0
- package/dist/chunk-F2CGFVIZ.mjs +83 -0
- package/dist/chunk-F2CGFVIZ.mjs.map +1 -0
- package/dist/{chunk-R5MKQN6D.mjs → chunk-FBLSJQWK.mjs} +3 -3
- package/dist/{chunk-BGB7JHIU.mjs → chunk-FMGZCOJC.mjs} +5 -3
- package/dist/{chunk-BGB7JHIU.mjs.map → chunk-FMGZCOJC.mjs.map} +1 -1
- package/dist/{chunk-UTVSYS6S.mjs → chunk-FNSIQ2B7.mjs} +18 -6
- package/dist/chunk-FNSIQ2B7.mjs.map +1 -0
- package/dist/{chunk-JWANK42G.mjs → chunk-FUZ2JNTZ.mjs} +3 -3
- package/dist/{chunk-CRYIEYZZ.mjs → chunk-HAJWE62X.mjs} +66 -42
- package/dist/chunk-HAJWE62X.mjs.map +1 -0
- package/dist/{chunk-CWFWRZWU.mjs → chunk-KSN33A6I.mjs} +3 -2
- package/dist/{chunk-CWFWRZWU.mjs.map → chunk-KSN33A6I.mjs.map} +1 -1
- package/dist/chunk-KYTHGFFY.mjs +866 -0
- package/dist/chunk-KYTHGFFY.mjs.map +1 -0
- package/dist/{chunk-QKGCW37O.mjs → chunk-LDFM46LV.mjs} +5 -3
- package/dist/{chunk-QKGCW37O.mjs.map → chunk-LDFM46LV.mjs.map} +1 -1
- package/dist/chunk-LQNDBPHU.mjs +142 -0
- package/dist/chunk-LQNDBPHU.mjs.map +1 -0
- package/dist/{chunk-E3I2VDHZ.mjs → chunk-M2PYXSAF.mjs} +6 -4
- package/dist/{chunk-E3I2VDHZ.mjs.map → chunk-M2PYXSAF.mjs.map} +1 -1
- package/dist/{chunk-DELCADNF.mjs → chunk-ODVKRIVN.mjs} +30 -30
- package/dist/{chunk-HR3A4H4E.mjs → chunk-PEJL2T2K.mjs} +13 -11
- package/dist/{chunk-HR3A4H4E.mjs.map → chunk-PEJL2T2K.mjs.map} +1 -1
- package/dist/{chunk-OGNGPI3M.mjs → chunk-PL55YKT4.mjs} +2 -2
- package/dist/{chunk-S6EZVRZC.mjs → chunk-PNSJC6PC.mjs} +5 -28
- package/dist/chunk-PNSJC6PC.mjs.map +1 -0
- package/dist/{chunk-TDRA5EZI.mjs → chunk-PUREEN2J.mjs} +7 -7
- package/dist/chunk-QFS5CENY.mjs +659 -0
- package/dist/chunk-QFS5CENY.mjs.map +1 -0
- package/dist/chunk-RSN7NH2J.mjs +250 -0
- package/dist/chunk-RSN7NH2J.mjs.map +1 -0
- package/dist/{chunk-UDREPVEY.mjs → chunk-RVSMEZE3.mjs} +12 -78
- package/dist/chunk-RVSMEZE3.mjs.map +1 -0
- package/dist/{chunk-SRWPHN2N.mjs → chunk-S64IYJ6Y.mjs} +2 -2
- package/dist/{chunk-ZG3NQI77.mjs → chunk-SMD7OEUW.mjs} +6 -4
- package/dist/{chunk-ZG3NQI77.mjs.map → chunk-SMD7OEUW.mjs.map} +1 -1
- package/dist/{chunk-NJYNJLT7.mjs → chunk-SWFB3A3G.mjs} +2 -2
- package/dist/{chunk-RXBQ7KXF.mjs → chunk-USXGNKWJ.mjs} +98 -44
- package/dist/chunk-USXGNKWJ.mjs.map +1 -0
- package/dist/{chunk-OJV6V7YZ.mjs → chunk-VL7V52YD.mjs} +27 -20
- package/dist/chunk-VL7V52YD.mjs.map +1 -0
- package/dist/{chunk-2ZZJTBTE.mjs → chunk-WJZ3IYET.mjs} +2 -2
- package/dist/chunk-XAJAMVAG.mjs +1720 -0
- package/dist/chunk-XAJAMVAG.mjs.map +1 -0
- package/dist/chunk-YIJ5QVJ6.mjs +277 -0
- package/dist/chunk-YIJ5QVJ6.mjs.map +1 -0
- package/dist/{chunk-T6AMRENK.mjs → chunk-YRW5NKD7.mjs} +148 -112
- package/dist/chunk-YRW5NKD7.mjs.map +1 -0
- package/dist/chunk-ZMJKG2UI.mjs +71 -0
- package/dist/chunk-ZMJKG2UI.mjs.map +1 -0
- package/dist/confirm.d.mts +48 -0
- package/dist/confirm.d.ts +48 -0
- package/dist/confirm.js +334 -0
- package/dist/confirm.js.map +1 -0
- package/dist/confirm.mjs +20 -0
- package/dist/datePicker.d.mts +256 -14
- package/dist/datePicker.d.ts +256 -14
- package/dist/datePicker.js +1624 -145
- package/dist/datePicker.js.map +1 -1
- package/dist/datePicker.mjs +19 -6
- package/dist/dialog.d.mts +166 -0
- package/dist/dialog.d.ts +166 -0
- package/dist/dialog.js +362 -0
- package/dist/dialog.js.map +1 -0
- package/dist/dialog.mjs +45 -0
- package/dist/emptyState.d.mts +17 -0
- package/dist/emptyState.d.ts +17 -0
- package/dist/emptyState.js +253 -0
- package/dist/emptyState.js.map +1 -0
- package/dist/emptyState.mjs +12 -0
- package/dist/emptyState.mjs.map +1 -0
- package/dist/errorState.d.mts +18 -0
- package/dist/errorState.d.ts +18 -0
- package/dist/{displayFile.js → errorState.js} +107 -156
- package/dist/errorState.js.map +1 -0
- package/dist/errorState.mjs +15 -0
- package/dist/errorState.mjs.map +1 -0
- package/dist/fileUpload.d.mts +197 -0
- package/dist/fileUpload.d.ts +197 -0
- package/dist/fileUpload.js +1483 -0
- package/dist/fileUpload.js.map +1 -0
- package/dist/fileUpload.mjs +65 -0
- package/dist/fileUpload.mjs.map +1 -0
- package/dist/flowMap.mjs +7 -6
- package/dist/flowMap.mjs.map +1 -1
- package/dist/image.js +1195 -429
- package/dist/image.js.map +1 -1
- package/dist/image.mjs +8 -6
- package/dist/index.d.ts +7 -2
- package/dist/index.js +8606 -4087
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +314 -152
- package/dist/inlineError.d.mts +16 -0
- package/dist/inlineError.d.ts +16 -0
- package/dist/inlineError.js +297 -0
- package/dist/inlineError.js.map +1 -0
- package/dist/inlineError.mjs +15 -0
- package/dist/inlineError.mjs.map +1 -0
- package/dist/input.mjs +8 -7
- package/dist/jsonEditor.mjs +3 -2
- package/dist/list.mjs +7 -6
- package/dist/loading.mjs +8 -6
- package/dist/markdown.mjs +7 -6
- package/dist/markdown.mjs.map +1 -1
- package/dist/menu.mjs +9 -8
- package/dist/modal.js +2 -1
- package/dist/modal.js.map +1 -1
- package/dist/modal.mjs +7 -5
- package/dist/process.d.mts +33 -75
- package/dist/process.d.ts +33 -75
- package/dist/process.js +1275 -203
- package/dist/process.js.map +1 -1
- package/dist/process.mjs +12 -9
- package/dist/scrollToLoad.mjs +4 -3
- package/dist/select.mjs +10 -9
- package/dist/skeleton.d.mts +15 -1
- package/dist/skeleton.d.ts +15 -1
- package/dist/skeleton.js +114 -2
- package/dist/skeleton.js.map +1 -1
- package/dist/skeleton.mjs +6 -3
- package/dist/stepper.mjs +4 -3
- package/dist/tab.mjs +10 -9
- package/dist/table.d.mts +269 -85
- package/dist/table.d.ts +269 -85
- package/dist/table.js +5102 -3153
- package/dist/table.js.map +1 -1
- package/dist/table.mjs +21 -19
- package/dist/theme.js +1766 -432
- package/dist/theme.js.map +1 -1
- package/dist/theme.mjs +32 -25
- package/dist/timeline.mjs +4 -3
- package/dist/toast.d.mts +49 -0
- package/dist/toast.d.ts +49 -0
- package/dist/toast.js +175 -0
- package/dist/toast.js.map +1 -0
- package/dist/toast.mjs +9 -0
- package/dist/toast.mjs.map +1 -0
- package/dist/toggleButtonGroup.mjs +3 -2
- package/dist/useForm.d.mts +270 -86
- package/dist/useForm.d.ts +270 -86
- package/dist/useForm.js +4672 -2727
- package/dist/useForm.js.map +1 -1
- package/dist/useForm.mjs +18 -16
- package/dist/useSearch.mjs +13 -12
- package/dist/variablesRenderer.mjs +8 -7
- package/package.json +3 -3
- package/dist/AutocompleteField-ZKNU2IRR.mjs +0 -181
- package/dist/AutocompleteField-ZKNU2IRR.mjs.map +0 -1
- package/dist/AvatarField-SAODT3CZ.mjs +0 -275
- package/dist/AvatarField-SAODT3CZ.mjs.map +0 -1
- package/dist/DateField-ZYMZFHL4.mjs.map +0 -1
- package/dist/DateTimeField-TPTJ7YIZ.mjs.map +0 -1
- package/dist/FileUploadField-NTMWBJER.mjs +0 -78
- package/dist/FileUploadField-NTMWBJER.mjs.map +0 -1
- package/dist/chunk-24XDGNJ6.mjs.map +0 -1
- package/dist/chunk-27KYFU7R.mjs +0 -30
- package/dist/chunk-27KYFU7R.mjs.map +0 -1
- package/dist/chunk-AAH2O24U.mjs +0 -325
- package/dist/chunk-AAH2O24U.mjs.map +0 -1
- package/dist/chunk-CRYIEYZZ.mjs.map +0 -1
- package/dist/chunk-EEH7HACG.mjs +0 -249
- package/dist/chunk-EEH7HACG.mjs.map +0 -1
- package/dist/chunk-EKPULYPU.mjs +0 -497
- package/dist/chunk-EKPULYPU.mjs.map +0 -1
- package/dist/chunk-OJV6V7YZ.mjs.map +0 -1
- package/dist/chunk-RXBQ7KXF.mjs.map +0 -1
- package/dist/chunk-S6EZVRZC.mjs.map +0 -1
- package/dist/chunk-SGCUDWO3.mjs +0 -396
- package/dist/chunk-SGCUDWO3.mjs.map +0 -1
- package/dist/chunk-T6AMRENK.mjs.map +0 -1
- package/dist/chunk-UDREPVEY.mjs.map +0 -1
- package/dist/chunk-UTVSYS6S.mjs.map +0 -1
- package/dist/chunk-XIMFP6RB.mjs +0 -161
- package/dist/chunk-XIMFP6RB.mjs.map +0 -1
- package/dist/displayFile.d.mts +0 -95
- package/dist/displayFile.d.ts +0 -95
- package/dist/displayFile.js.map +0 -1
- package/dist/displayFile.mjs +0 -19
- package/dist/fileUploader.d.mts +0 -86
- package/dist/fileUploader.d.ts +0 -86
- package/dist/fileUploader.js +0 -722
- package/dist/fileUploader.js.map +0 -1
- package/dist/fileUploader.mjs +0 -16
- /package/dist/{chunk-V26V2S3W.mjs.map → chunk-3O3N6X6D.mjs.map} +0 -0
- /package/dist/{chunk-UGMRJMFZ.mjs.map → chunk-BO5CU4ZM.mjs.map} +0 -0
- /package/dist/{chunk-R5MKQN6D.mjs.map → chunk-FBLSJQWK.mjs.map} +0 -0
- /package/dist/{chunk-JWANK42G.mjs.map → chunk-FUZ2JNTZ.mjs.map} +0 -0
- /package/dist/{chunk-DELCADNF.mjs.map → chunk-ODVKRIVN.mjs.map} +0 -0
- /package/dist/{chunk-OGNGPI3M.mjs.map → chunk-PL55YKT4.mjs.map} +0 -0
- /package/dist/{chunk-TDRA5EZI.mjs.map → chunk-PUREEN2J.mjs.map} +0 -0
- /package/dist/{chunk-SRWPHN2N.mjs.map → chunk-S64IYJ6Y.mjs.map} +0 -0
- /package/dist/{chunk-NJYNJLT7.mjs.map → chunk-SWFB3A3G.mjs.map} +0 -0
- /package/dist/{chunk-2ZZJTBTE.mjs.map → chunk-WJZ3IYET.mjs.map} +0 -0
- /package/dist/{displayFile.mjs.map → confirm.mjs.map} +0 -0
- /package/dist/{fileUploader.mjs.map → dialog.mjs.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/components/elemental/FileUpload/index.ts","../src/components/elemental/FileUpload/src/FileUpload.tsx","../src/_utils/_func/sx.ts","../src/components/elemental/Box/src/index.ts","../src/components/elemental/Typography/src/Typography.ts","../src/components/elemental/Button/src/Button/Button.tsx","../src/components/elemental/Button/src/IconButton/IconButton.tsx","../src/components/elemental/Tooltip/src/Tooltip/index.ts","../src/components/elemental/Form/src/FormLabel/FormLabel.tsx","../src/components/elemental/Form/src/index.ts","../src/components/elemental/Progress/src/LinearProgress.tsx","../src/components/Icons/MuiIcon/index.ts","../src/components/elemental/FileUpload/src/theme.ts","../src/components/elemental/FileUpload/src/utils.ts"],"sourcesContent":["export * from './src'\n","'use client'\nimport React, {\n forwardRef,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { Box, Stack } from '@/ele/Box'\nimport { Typography } from '@/ele/Typography'\nimport { Button, IconButton } from '@/ele/Button'\nimport { FormHelperText, FormLabel } from '@/ele/Form'\nimport { LinearProgress } from '@/ele/Progress'\nimport { CloseIcon, CloudUploadIcon } from '@/icons/MuiIcon'\nimport { FileIcon, defaultStyles, type FileIconProps } from 'react-file-icon'\nimport {\n fileUploadButtonSx,\n fileUploadDropzoneSx,\n fileUploadIconWellSx,\n fileUploadItemSx,\n fileUploadLibIconSx,\n fileUploadRootSx,\n fileUploadThumbSx,\n fileUploadTileIconWellSx,\n fileUploadTileLibIconSx,\n fileUploadTileListSx,\n fileUploadTileMediaSx,\n fileUploadTileProgressSx,\n fileUploadTileRemoveSx,\n fileUploadTileSx,\n} from './theme'\nimport type { FileUploadItem, FileUploadProps } from './types'\nimport {\n createFileUploadItem,\n formatFileSize,\n isImageFile,\n resolveFileIconStyle,\n validateFiles,\n} from './utils'\n\nfunction mergeSx(\n ...parts: Array<FileUploadProps['sx'] | false | null | undefined>\n): FileUploadProps['sx'] {\n const out: unknown[] = []\n for (const p of parts) {\n if (!p) continue\n if (Array.isArray(p)) out.push(...p)\n else out.push(p)\n }\n return out as FileUploadProps['sx']\n}\n\n/**\n * Soft FileUpload dropzone + file list.\n *\n * **UseForm API:** controlled `value: FileUploadItem[]` / `onChange`.\n * Submit blobs with `value.map((i) => i.file)`. Drive progress from outside\n * by updating `progress` / `status` / `error` on the same items (stable `id`).\n *\n * Soft quiet 1px dashed border + elevated fill (EmptyState / Autocomplete glass).\n * `variant=\"button\"` = compact soft upload button (compound DropZoneButton parity).\n */\nexport const FileUpload = forwardRef<HTMLDivElement, FileUploadProps>(\n function FileUpload(props, ref) {\n const {\n value: valueProp,\n defaultValue,\n onChange,\n onRemove,\n onReject,\n multiple = true,\n accept,\n maxSize,\n maxFiles,\n disabled = false,\n hideDropzone = false,\n disableRemove = false,\n readOnly = false,\n label,\n name,\n helperText,\n error = false,\n required = false,\n variant = 'dropzone',\n itemVariant = 'row',\n buttonLabel = 'Upload file',\n dropzoneTitle = 'Drag & drop files here',\n dropzoneDescription = 'or click to browse',\n id: idProp,\n className,\n sx,\n 'data-testid': dataTestId = 'file-upload',\n } = props\n\n const reactId = useId()\n const inputId = idProp ?? `file-upload-${reactId}`\n const helperId = `${inputId}-helper`\n const inputRef = useRef<HTMLInputElement>(null)\n\n const isControlled = valueProp !== undefined\n const [uncontrolled, setUncontrolled] = useState<FileUploadItem[]>(\n () => defaultValue ?? [],\n )\n const items = useMemo(\n () => (isControlled ? (valueProp ?? []) : uncontrolled),\n [isControlled, valueProp, uncontrolled],\n )\n\n const [active, setActive] = useState(false)\n const dragDepth = useRef(0)\n\n const atCapacity = useMemo(() => {\n if (!multiple) return items.length >= 1\n if (maxFiles != null && maxFiles > 0) return items.length >= maxFiles\n return false\n }, [items.length, maxFiles, multiple])\n\n const commit = useCallback(\n (next: FileUploadItem[]) => {\n if (!isControlled) setUncontrolled(next)\n onChange?.(next)\n },\n [isControlled, onChange],\n )\n\n const ingest = useCallback(\n (fileList: FileList | File[]) => {\n if (disabled) return\n const incoming = Array.from(fileList)\n if (incoming.length === 0) return\n\n const { accepted, rejections } = validateFiles(incoming, {\n accept,\n maxSize,\n maxFiles,\n currentCount: items.length,\n multiple,\n })\n\n if (rejections.length > 0) {\n onReject?.(rejections)\n }\n\n if (accepted.length === 0) return\n\n const nextItems = accepted.map(createFileUploadItem)\n if (!multiple) {\n commit(nextItems.slice(0, 1))\n return\n }\n commit([...items, ...nextItems])\n },\n [\n accept,\n disabled,\n items,\n maxFiles,\n maxSize,\n multiple,\n onReject,\n commit,\n ],\n )\n\n const handleRemove = useCallback(\n (item: FileUploadItem) => {\n if (disabled) return\n const next = items.filter((i) => i.id !== item.id)\n commit(next)\n onRemove?.(item, next)\n if (inputRef.current) inputRef.current.value = ''\n },\n [commit, disabled, items, onRemove],\n )\n\n const openPicker = useCallback(() => {\n if (disabled || atCapacity) return\n inputRef.current?.click()\n }, [atCapacity, disabled])\n\n const onInputChange = useCallback(\n (e: React.ChangeEvent<HTMLInputElement>) => {\n if (e.target.files) ingest(e.target.files)\n // Allow re-selecting the same file name.\n e.target.value = ''\n },\n [ingest],\n )\n\n const onDragEnter = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n if (disabled || atCapacity) return\n dragDepth.current += 1\n setActive(true)\n },\n [atCapacity, disabled],\n )\n\n const onDragLeave = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n dragDepth.current = Math.max(0, dragDepth.current - 1)\n if (dragDepth.current === 0) setActive(false)\n }, [])\n\n const onDragOver = useCallback((e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n }, [])\n\n const onDrop = useCallback(\n (e: React.DragEvent) => {\n e.preventDefault()\n e.stopPropagation()\n dragDepth.current = 0\n setActive(false)\n if (disabled || atCapacity) return\n if (e.dataTransfer.files?.length) {\n ingest(e.dataTransfer.files)\n }\n },\n [atCapacity, disabled, ingest],\n )\n\n const queueOnly = readOnly || hideDropzone\n const removeDisabled = readOnly || disableRemove || disabled\n const showTrigger = !queueOnly && !atCapacity\n const isButton = variant === 'button'\n\n const fileInput = (\n <input\n ref={inputRef}\n id={inputId}\n name={name}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n onChange={onInputChange}\n style={{ display: 'none' }}\n aria-hidden\n tabIndex={-1}\n />\n )\n\n const dragHandlers = {\n onDragEnter,\n onDragLeave,\n onDragOver,\n onDrop,\n } as const\n\n return (\n <Box\n ref={ref}\n className={className}\n data-testid={dataTestId}\n data-variant={variant}\n data-readonly={readOnly || queueOnly ? 'true' : undefined}\n sx={mergeSx(fileUploadRootSx, sx) as never}\n >\n {label ? (\n <FormLabel\n htmlFor={showTrigger ? inputId : undefined}\n required={required}\n error={error}\n sx={{\n mb: 0.25,\n color: error ? 'error.main' : 'text.secondary',\n fontSize: '0.8rem',\n fontWeight: 600,\n }}\n >\n {label}\n </FormLabel>\n ) : null}\n\n {fileInput}\n\n {showTrigger ? (\n isButton ? (\n <Button\n type=\"button\"\n disableElevation\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={helperText ? helperId : undefined}\n data-active={active ? 'true' : 'false'}\n data-error={error ? 'true' : 'false'}\n data-testid={`${dataTestId}-button`}\n startIcon={<CloudUploadIcon sx={{ fontSize: '1.15rem' }} />}\n onClick={openPicker}\n sx={fileUploadButtonSx}\n {...dragHandlers}\n >\n {buttonLabel}\n </Button>\n ) : (\n <Box\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-disabled={disabled || undefined}\n aria-invalid={error || undefined}\n aria-describedby={helperText ? helperId : undefined}\n data-active={active ? 'true' : 'false'}\n data-error={error ? 'true' : 'false'}\n data-disabled={disabled ? 'true' : 'false'}\n data-testid={`${dataTestId}-dropzone`}\n sx={fileUploadDropzoneSx}\n onClick={openPicker}\n onKeyDown={(e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault()\n openPicker()\n }\n }}\n {...dragHandlers}\n >\n <CloudUploadIcon\n aria-hidden\n sx={{ fontSize: 36, color: 'var(--fu-icon)', opacity: 0.9 }}\n />\n {typeof dropzoneTitle === 'string' ? (\n <Typography\n variant=\"subtitle2\"\n sx={{ m: 0, color: 'var(--fu-text)', fontWeight: 600 }}\n >\n {dropzoneTitle}\n </Typography>\n ) : (\n dropzoneTitle\n )}\n {dropzoneDescription ? (\n typeof dropzoneDescription === 'string' ? (\n <Typography\n variant=\"caption\"\n sx={{ m: 0, color: 'var(--fu-text-secondary)' }}\n >\n {dropzoneDescription}\n </Typography>\n ) : (\n dropzoneDescription\n )\n ) : null}\n </Box>\n )\n ) : null}\n\n {items.length > 0 ? (\n itemVariant === 'tile' ? (\n <Box\n component=\"ul\"\n data-testid={`${dataTestId}-list`}\n data-item-variant=\"tile\"\n sx={fileUploadTileListSx}\n >\n {items.map((item) => (\n <FileUploadListItem\n key={item.id}\n item={item}\n disabled={disabled}\n disableRemove={removeDisabled}\n onRemove={handleRemove}\n testId={`${dataTestId}-item`}\n itemVariant=\"tile\"\n />\n ))}\n </Box>\n ) : (\n <Stack\n component=\"ul\"\n spacing={1}\n data-testid={`${dataTestId}-list`}\n data-item-variant=\"row\"\n sx={{ m: 0, p: 0, listStyle: 'none' }}\n >\n {items.map((item) => (\n <FileUploadListItem\n key={item.id}\n item={item}\n disabled={disabled}\n disableRemove={removeDisabled}\n onRemove={handleRemove}\n testId={`${dataTestId}-item`}\n itemVariant=\"row\"\n />\n ))}\n </Stack>\n )\n ) : null}\n\n {helperText ? (\n <FormHelperText\n id={helperId}\n error={error}\n sx={{ mx: 0.5, mt: 0 }}\n >\n {helperText}\n </FormHelperText>\n ) : null}\n </Box>\n )\n },\n)\n\nfunction FileUploadTypeIcon({\n file,\n tile = false,\n}: {\n file: File\n tile?: boolean\n}) {\n const resolved = resolveFileIconStyle(\n file,\n defaultStyles as Record<string, Partial<FileIconProps> | undefined>,\n )\n const { extension, styleKey } = resolved\n const iconStyle = resolved.style as Partial<FileIconProps>\n\n return (\n <Box\n aria-hidden\n data-testid=\"file-upload-icon\"\n data-ext={extension || undefined}\n data-style-key={styleKey || undefined}\n sx={tile ? fileUploadTileIconWellSx : fileUploadIconWellSx}\n >\n <Box sx={tile ? fileUploadTileLibIconSx : fileUploadLibIconSx}>\n <FileIcon\n fold\n radius={3}\n extension={extension}\n {...iconStyle}\n />\n </Box>\n </Box>\n )\n}\n\n/**\n * Image/* → soft object-URL thumbnail; onError falls back to react-file-icon.\n * Non-images use react-file-icon + defaultStyles (extension / mime).\n * Object URLs revoked on file change / unmount.\n */\nfunction FileUploadThumb({\n file,\n tile = false,\n}: {\n file: File\n tile?: boolean\n}) {\n const [url, setUrl] = useState<string | null>(null)\n const [previewFailed, setPreviewFailed] = useState(false)\n\n useEffect(() => {\n setPreviewFailed(false)\n if (!isImageFile(file)) {\n setUrl(null)\n return\n }\n const objectUrl = URL.createObjectURL(file)\n setUrl(objectUrl)\n return () => {\n URL.revokeObjectURL(objectUrl)\n }\n }, [file])\n\n if (url && !previewFailed) {\n return (\n <Box\n component=\"img\"\n src={url}\n alt=\"\"\n data-testid=\"file-upload-thumb\"\n sx={tile ? fileUploadTileMediaSx : fileUploadThumbSx}\n onError={() => setPreviewFailed(true)}\n />\n )\n }\n\n return <FileUploadTypeIcon file={file} tile={tile} />\n}\n\ntype ListItemProps = {\n item: FileUploadItem\n disabled: boolean\n disableRemove?: boolean\n onRemove: (item: FileUploadItem) => void\n testId: string\n itemVariant: 'row' | 'tile'\n}\n\nfunction FileUploadListItem({\n item,\n disabled,\n disableRemove = false,\n onRemove,\n testId,\n itemVariant,\n}: ListItemProps) {\n if (itemVariant === 'tile') {\n return (\n <FileUploadTileItem\n item={item}\n disabled={disabled}\n disableRemove={disableRemove}\n onRemove={onRemove}\n testId={testId}\n />\n )\n }\n\n const status = item.status ?? (item.error ? 'error' : 'idle')\n const showProgress =\n status === 'uploading' ||\n (typeof item.progress === 'number' &&\n item.progress > 0 &&\n item.progress < 100 &&\n status !== 'error' &&\n status !== 'success')\n\n return (\n <Box\n component=\"li\"\n data-testid={testId}\n data-status={status}\n data-item-variant=\"row\"\n sx={fileUploadItemSx}\n >\n <FileUploadThumb file={item.file} />\n <Box sx={{ flex: 1, minWidth: 0 }}>\n <Typography\n variant=\"body2\"\n noWrap\n title={item.file.name}\n sx={{ m: 0, fontWeight: 500, color: 'var(--fu-text)' }}\n >\n {item.file.name}\n </Typography>\n <Typography\n variant=\"caption\"\n sx={{ m: 0, color: 'var(--fu-text-secondary)' }}\n >\n {formatFileSize(item.file.size)}\n {item.error ? ` · ${item.error}` : null}\n {status === 'success' && !item.error ? ' · Done' : null}\n </Typography>\n {showProgress ? (\n <LinearProgress\n variant=\"determinate\"\n value={Math.max(0, Math.min(100, item.progress ?? 0))}\n aria-label={`Upload progress ${item.progress ?? 0}%`}\n sx={{ mt: 0.75, height: 4, borderRadius: 2 }}\n />\n ) : null}\n {status === 'uploading' && item.progress == null ? (\n <LinearProgress\n aria-label=\"Uploading\"\n sx={{ mt: 0.75, height: 4, borderRadius: 2 }}\n />\n ) : null}\n </Box>\n {disableRemove ? null : (\n <IconButton\n size=\"small\"\n aria-label={`Remove ${item.file.name}`}\n disabled={disabled}\n onClick={() => onRemove(item)}\n sx={{\n flexShrink: 0,\n color: 'var(--fu-text-secondary)',\n p: 0.35,\n }}\n >\n <CloseIcon sx={{ fontSize: '1rem' }} />\n </IconButton>\n )}\n </Box>\n )\n}\n\n/** Square preview tile — hover shows circular white X at top-right. */\nfunction FileUploadTileItem({\n item,\n disabled,\n disableRemove = false,\n onRemove,\n testId,\n}: Omit<ListItemProps, 'itemVariant'>) {\n const status = item.status ?? (item.error ? 'error' : 'idle')\n const showProgress =\n status === 'uploading' ||\n (typeof item.progress === 'number' &&\n item.progress > 0 &&\n item.progress < 100 &&\n status !== 'error' &&\n status !== 'success')\n const indeterminate = status === 'uploading' && item.progress == null\n\n return (\n <Box\n component=\"li\"\n data-testid={testId}\n data-status={status}\n data-item-variant=\"tile\"\n title={item.file.name}\n sx={fileUploadTileSx}\n >\n <FileUploadThumb file={item.file} tile />\n {showProgress ? (\n <LinearProgress\n variant=\"determinate\"\n value={Math.max(0, Math.min(100, item.progress ?? 0))}\n aria-label={`Upload progress ${item.progress ?? 0}%`}\n sx={fileUploadTileProgressSx}\n />\n ) : null}\n {indeterminate ? (\n <LinearProgress\n aria-label=\"Uploading\"\n sx={fileUploadTileProgressSx}\n />\n ) : null}\n {disableRemove ? null : (\n <IconButton\n className=\"fu-tile-remove\"\n size=\"small\"\n aria-label={`Remove ${item.file.name}`}\n disabled={disabled}\n onClick={(e) => {\n e.stopPropagation()\n onRemove(item)\n }}\n sx={fileUploadTileRemoveSx}\n >\n <CloseIcon sx={{ fontSize: '0.85rem' }} />\n </IconButton>\n )}\n </Box>\n )\n}\n\nexport default FileUpload\n","import type { SxProps, Theme } from '@mui/material/styles'\n\n/** Values accepted by {@link mergeSx}: objects, callbacks, arrays (nested ok), or omitted. */\nexport type SxMergePart =\n | SxProps<Theme>\n | Record<string, unknown>\n | ReadonlyArray<SxMergePart>\n | false\n | null\n | undefined\n\nfunction flattenSx(part: unknown): unknown[] {\n if (part == null || typeof part === 'boolean') {\n return []\n }\n if (Array.isArray(part)) {\n return part.flatMap(flattenSx)\n }\n if (typeof part === 'function' || typeof part === 'object') {\n return [part]\n }\n return []\n}\n\n/**\n * Combine MUI `sx` values into one prop.\n *\n * Nested arrays are flattened (`[base, [a, b]]` → `[base, a, b]`).\n * `null` / `undefined` / `false` entries are dropped. Later parts win,\n * same as MUI's `sx` array merge.\n */\nexport function mergeSx(...parts: SxMergePart[]): SxProps<Theme> | undefined {\n const list = parts.flatMap(flattenSx)\n if (list.length === 0) {\n return undefined\n }\n if (list.length === 1) {\n return list[0] as SxProps<Theme>\n }\n return list as SxProps<Theme>\n}\n","export * from './BorderBox'\nexport {default as Box} from '@mui/material/Box'\nexport {default as Stack} from '@mui/material/Stack'\nexport {default as Grid} from '@mui/material/Grid'\n","export { default } from '@mui/material/Typography'","import React from 'react';\n\nimport MuiButton from '@mui/material/Button';\nimport { Box } from '@/ele/Box';\nimport { mergeSx } from '@/_utils/_func';\n\n/**\n * A modified MUI Button that truncates long text with ellipsis.\n * \n * [Doc](https://mui.com/material-ui/react-button/)\n * [API](https://mui.com/material-ui/api/button/)\n */\nexport default function Button(p:\n React.ComponentProps<typeof MuiButton> & {\n slotProps?: {\n innerBox?: React.ComponentProps<typeof Box>\n }\n }) {\n const {children, slotProps, ...rest} = p\n const {sx, ...boxRest} = slotProps?.innerBox ?? {}\n return <MuiButton {...rest}>\n <Box \n {...boxRest}\n sx={mergeSx(\n {\n textOverflow: 'ellipsis',\n overflow: 'hidden',\n whiteSpace: 'pre',\n },\n sx,\n )}>\n {children}\n </Box>\n </MuiButton>\n}","'use client'\nimport {forwardRef} from 'react'\nimport MuiIconButton from '@mui/material/IconButton'\nimport { Tooltip } from '@/ele/Tooltip'\nimport { type TooltipProps } from '@mui/material/Tooltip'\nimport { Box } from '@/ele/Box'\n\ntype IconButtonProps = React.ComponentProps<typeof MuiIconButton>\ntype Props = {\n /** The Icon to render */\n children: React.ReactNode;\n /** The title of the tooltip */\n title?: string;\n /** \n * The color theme of the entire component.\n * @default 'secondary' (from theme)\n */\n color?: IconButtonProps['color'];\n /**\n * The size of the component.\n * @default 'small' (from theme)\n */\n size?: IconButtonProps['size'];\n \n selected?: boolean;\n \n slotProps?: {\n tooltip?: Omit<TooltipProps, \"children\">\n };\n} & Omit<IconButtonProps, \"color\" | \"size\">;\n\n/**\n * A MuiIconButton wrapped in a MuiTooltip.\n * Default props like `size` and `color` are handled by the theme.\n */\nconst IconButton = forwardRef<HTMLButtonElement, Props>(({\n title = \"\",\n children,\n color,\n size,\n slotProps,\n selected,\n className,\n ...props\n}, ref) => {\n return (\n <Tooltip \n title={title} \n slotProps={{\n popper: {\n sx: {\n textTransform: \"capitalize\",\n }\n },\n ...slotProps?.tooltip\n }}\n >\n <Box component=\"span\" sx={{width: \"fit-content\"}}>\n <MuiIconButton\n ref={ref}\n color={color}\n size={size}\n className={[className, selected ? 'Mui-selected' : ''].filter(Boolean).join(' ')}\n {...props}\n >\n {children}\n </MuiIconButton>\n </Box>\n </Tooltip>\n )\n})\n\nexport default IconButton","export {default as Tooltip} from '@mui/material/Tooltip'\nexport * from './theme'\n","import FormLabel, { type FormLabelProps } from '@mui/material/FormLabel'\n\n/**\n * A wrapper for Mui FormLabel\n */\nexport default function MuiFormLabel(props: FormLabelProps) {\n return <FormLabel {...props} />\n}\n","export * from './FormLabel'\n\nexport * from './FormControlLabel'\n\nexport {default as FormControl} from '@mui/material/FormControl'\nexport {default as FormHelperText} from '@mui/material/FormHelperText'\nexport {default as InputAdornment} from '@mui/material/InputAdornment'\nexport {default as InputLabel} from '@mui/material/InputLabel'\nexport * from './themes'","import React from 'react';\nimport MuiLinearProgress, { LinearProgressProps as MuiLinearProgressProps } from '@mui/material/LinearProgress';\n\nexport type LinearProgressProps = MuiLinearProgressProps;\n\nexport const LinearProgress: React.FC<LinearProgressProps> = (props) => {\n return <MuiLinearProgress {...props} />;\n};\n","// display\nexport {default as ArrowIcon} from '@mui/icons-material/ArrowRightAlt'\nexport {default as FileIcon} from '@mui/icons-material/DescriptionOutlined'\nexport {default as DescriptionIcon} from '@mui/icons-material/Description'\nexport {default as PictureAsPdfIcon} from '@mui/icons-material/PictureAsPdf'\nexport {default as AudioFileIcon} from '@mui/icons-material/AudioFile'\nexport {default as VideoFileIcon} from '@mui/icons-material/VideoFile'\nexport {default as TableChartIcon} from '@mui/icons-material/TableChart'\nexport {default as FolderZipIcon} from '@mui/icons-material/FolderZip'\nexport {default as InsertDriveFileIcon} from '@mui/icons-material/InsertDriveFile'\nexport {default as ImageIcon} from '@mui/icons-material/ImageOutlined'\nexport {default as LayersIcon} from '@mui/icons-material/LayersOutlined'\nexport {default as TextIcon} from '@mui/icons-material/TextFormat'\nexport {default as RemoveIcon} from '@mui/icons-material/Remove'\nexport {default as AddFileIcon} from '@mui/icons-material/PostAdd'\nexport {default as ErrorIcon} from '@mui/icons-material/ErrorOutline'\nexport {default as QuestionIcon} from '@mui/icons-material/QuestionMarkOutlined'\nexport {default as RoomIcon} from '@mui/icons-material/MeetingRoomOutlined'\nexport {default as BlacklistIcon} from '@mui/icons-material/PlaylistRemove'\nexport {default as WhitelistIcon} from '@mui/icons-material/ChecklistRtl'\nexport {default as NoImageIcon} from '@mui/icons-material/HideImageOutlined'\nexport {default as EyeIcon} from '@mui/icons-material/RemoveRedEyeTwoTone'\nexport {default as CropSizeIcon} from '@mui/icons-material/PhotoSizeSelectLarge'\nexport {default as AdminIcon} from '@mui/icons-material/LockPersonOutlined'\nexport {default as UserIcon} from '@mui/icons-material/Person'\nexport {default as EmoticonIcon} from '@mui/icons-material/InsertEmoticon'\nexport {default as DisabledSelectionIcon} from '@mui/icons-material/RemoveDoneOutlined'\nexport {default as TagIcon} from '@mui/icons-material/Tag'\nexport {default as AudioIcon} from '@mui/icons-material/Audiotrack'\nexport {default as VideoIcon} from '@mui/icons-material/Videocam'\nexport {default as CodeIcon} from '@mui/icons-material/Code'\nexport {default as ChartIcon} from '@mui/icons-material/Equalizer'\nexport {default as TableIcon} from '@mui/icons-material/PivotTableChart'\nexport {default as SearchIcon} from '@mui/icons-material/Search'\nexport {default as DataObjectIcon} from '@mui/icons-material/DataObject'\nexport {default as A2ZIcon} from '@mui/icons-material/SortByAlpha'\nexport {default as ThumbUpIcon} from '@mui/icons-material/ThumbUp'\nexport {default as MoneyIcon} from '@mui/icons-material/AttachMoneyOutlined'\nexport {default as ServerIcon} from '@mui/icons-material/Storage'\nexport {default as CerticateIcon} from '@mui/icons-material/WorkspacePremium'\nexport {default as NumberIcon} from '@mui/icons-material/Numbers'\nexport {default as SumIcon} from '@mui/icons-material/Functions'\nexport {default as LightBulbIcon} from '@mui/icons-material/Lightbulb'\nexport {default as RotateIcon} from '@mui/icons-material/CropRotate'\nexport {default as ImageSzieScaleIcon} from '@mui/icons-material/PhotoSizeSelectLarge'\nexport {default as CollectionIcon} from '@mui/icons-material/CollectionsBookmark'\nexport {default as HistoryIcon} from '@mui/icons-material/Schedule'\nexport {default as StyleIcon} from '@mui/icons-material/Style'\nexport {default as ARHorizontalIcon} from '@mui/icons-material/Crop169'\nexport {default as ARSquareIcon} from '@mui/icons-material/CropSquare'\nexport {default as VoiceIcon} from '@mui/icons-material/GraphicEqRounded'\nexport {default as MemoryIcon} from '@mui/icons-material/MemoryRounded'\n\n// button\nexport {default as AddCircleIcon} from '@mui/icons-material/AddCircleOutlineRounded'\nexport {default as AddIcon} from '@mui/icons-material/Add'\nexport {default as CloseIcon} from '@mui/icons-material/Close'\nexport {default as ExpandMoreIcon} from '@mui/icons-material/ExpandMore'\nexport {default as AutorenewIcon} from '@mui/icons-material/Autorenew'\nexport {default as CheckCircleIcon} from '@mui/icons-material/CheckCircle'\nexport {default as MenuIcon} from '@mui/icons-material/Menu'\nexport {default as MoreIcon} from '@mui/icons-material/MoreVert'\nexport {default as MoreHorizIcon} from '@mui/icons-material/MoreHoriz'\nexport {default as CopyIcon} from '@mui/icons-material/ContentCopy'\nexport {default as PasteIcon} from '@mui/icons-material/ContentPaste'\nexport {default as CloudIcon} from '@mui/icons-material/Cloud'\nexport {default as DownloadIcon} from '@mui/icons-material/DownloadOutlined'\nexport {default as DownloadDoneIcon} from '@mui/icons-material/DownloadDoneOutlined'\nexport {default as StartIcon} from '@mui/icons-material/StarBorderOutlined'\nexport {default as DeleteIcon} from '@mui/icons-material/DeleteForever'\nexport {default as LayerClearIcon } from '@mui/icons-material/LayersClear'\nexport {default as CheckIcon } from '@mui/icons-material/Check'\nexport {default as CheckAllIcon } from '@mui/icons-material/DoneAll'\nexport {default as PowerIcon } from '@mui/icons-material/PowerSettingsNew'\nexport {default as SendIcon } from '@mui/icons-material/Send'\nexport {default as ZoomInIcon } from '@mui/icons-material/ZoomInMap'\nexport {default as ZoomOutIcon } from '@mui/icons-material/ZoomOutMap'\nexport {default as ToolIcon } from '@mui/icons-material/HomeRepairService'\nexport {default as ConstructionIcon } from '@mui/icons-material/Construction'\nexport {default as HelpIcon } from '@mui/icons-material/Help'\nexport {default as ReportIcon } from '@mui/icons-material/EmojiFlags'\nexport {default as EditIcon } from '@mui/icons-material/Edit'\nexport {default as ForkIcon } from '@mui/icons-material/ForkRight'\nexport {default as SettingIcon } from '@mui/icons-material/Settings'\nexport {default as RestoreIcon } from '@mui/icons-material/Restore'\nexport {default as EditListIcon } from '@mui/icons-material/EditNote'\nexport {default as HomeIcon } from '@mui/icons-material/HomeOutlined'\nexport {default as EnterRoomIcon } from '@mui/icons-material/ExitToAppOutlined'\nexport {default as SunIcon} from '@mui/icons-material/WbSunnyOutlined'\nexport {default as MoonIcon} from '@mui/icons-material/DarkModeOutlined'\nexport {default as AttachFileIcon} from '@mui/icons-material/AttachFileOutlined'\nexport {default as NoteAddIcon} from '@mui/icons-material/NoteAdd'\nexport {default as CloudUploadIcon} from '@mui/icons-material/CloudUpload'\nexport {default as DoubleRightArrowIcon} from '@mui/icons-material/KeyboardDoubleArrowRight'\nexport {default as DoubleLeftArrowIcon} from '@mui/icons-material/KeyboardDoubleArrowLeft'\nexport {default as DoubleArrowIcon} from '@mui/icons-material/KeyboardDoubleArrowRightRounded'\nexport {default as FitScreenIcon} from '@mui/icons-material/FitScreen'\nexport {default as FullscreenIcon} from '@mui/icons-material/Fullscreen'\nexport {default as TestIcon} from '@mui/icons-material/Biotech'\nexport {default as ShareIcon} from '@mui/icons-material/Share'\nexport {default as FilterIcon} from '@mui/icons-material/FilterAlt'\nexport {default as SyncIcon} from '@mui/icons-material/Sync'\nexport {default as PlayIcon} from '@mui/icons-material/PlayArrow'\nexport {default as PauseIcon} from '@mui/icons-material/PauseOutlined'\nexport {default as RandomIcon} from '@mui/icons-material/Casino'\nexport {default as CoinIcon} from '@mui/icons-material/Paid'\nexport {default as SaveChangesIcon} from '@mui/icons-material/Save'\nexport {default as StopIcon} from '@mui/icons-material/StopRounded'\nexport {default as ReplayIcon} from '@mui/icons-material/Replay'\nexport {default as TreeIcon} from '@mui/icons-material/AccountTree'\nexport {default as ClearIcon} from '@mui/icons-material/Close'\nexport {default as KeyboardArrowDownIcon} from '@mui/icons-material/KeyboardArrowDown'\nexport {default as KeyboardArrowRightIcon} from '@mui/icons-material/KeyboardArrowRight'\nexport {default as SearchRoundedIcon} from '@mui/icons-material/SearchRounded'\nexport {default as CloseRoundedIcon} from '@mui/icons-material/CloseRounded'\nexport {default as SortByAlphaRoundedIcon} from '@mui/icons-material/SortByAlphaRounded'\nexport {default as FilterAltOutlinedIcon} from '@mui/icons-material/FilterAltOutlined'\nexport {default as InboxOutlinedIcon} from '@mui/icons-material/InboxOutlined'\nexport {default as SearchOffIcon} from '@mui/icons-material/SearchOff'\nexport {default as ClearRoundedIcon} from '@mui/icons-material/ClearRounded'\nexport {default as ArrowDropDownRoundedIcon} from '@mui/icons-material/ArrowDropDownRounded'\n\n// login\nexport {default as AccountIcon} from '@mui/icons-material/AccountBox'\nexport {default as LogoutIcon} from '@mui/icons-material/Logout'\nexport {default as LoginIcon} from '@mui/icons-material/Login'\nexport {default as DashboardIcon} from '@mui/icons-material/Dashboard'\n\n//logo\nexport {default as WorkFlowIcon} from '@mui/icons-material/AccountTreeOutlined'\nexport {default as HelpOutlineIcon} from '@mui/icons-material/HelpOutline'\nexport {default as NavigateBeforeIcon} from '@mui/icons-material/NavigateBefore'\nexport {default as NavigateNextIcon} from '@mui/icons-material/NavigateNext'\nexport {default as PersonIcon} from '@mui/icons-material/Person'\nexport {default as CalendarTodayIcon} from '@mui/icons-material/CalendarToday'\nexport {default as ChatIcon} from '@mui/icons-material/QuestionAnswerOutlined'\nexport {default as TodayIcon} from '@mui/icons-material/Today'\nexport {default as DeleteForeverIcon} from '@mui/icons-material/DeleteForever'\n\nexport {default as AdsClickIcon} from '@mui/icons-material/AdsClick'\nexport {default as FingerprintIcon} from '@mui/icons-material/Fingerprint'\nexport {default as SportsEsportsOutlinedIcon} from '@mui/icons-material/SportsEsportsOutlined'\nexport {default as HelpOutlineRoundedIcon} from '@mui/icons-material/HelpOutlineRounded'\nexport {default as AccountTreeOutlinedIcon} from '@mui/icons-material/AccountTreeOutlined'\nexport {default as SmartToyOutlinedIcon} from '@mui/icons-material/SmartToyOutlined'\nexport {default as AcUnitIcon} from '@mui/icons-material/AcUnit'\nexport {default as LoopIcon} from '@mui/icons-material/Loop'\nexport {default as PendingIcon} from '@mui/icons-material/Pending'\nexport {default as AllInclusiveIcon} from '@mui/icons-material/AllInclusive'\nexport {default as WarningOutlinedIcon} from '@mui/icons-material/WarningOutlined'\nexport {default as InfoOutlinedIcon} from '@mui/icons-material/InfoOutlined'\nexport {default as AutoAwesomeRoundedIcon} from '@mui/icons-material/AutoAwesomeRounded'\nexport {default as ErrorOutlineOutlinedIcon} from '@mui/icons-material/ErrorOutlineOutlined'\nexport {default as DownloadFilledIcon} from '@mui/icons-material/Download'","import type { SxProps, Theme } from '@mui/material/styles'\n\n/**\n * Soft / quiet FileUpload chrome — Google-style dark:\n * darker canvas, lighter elevated surfaces, 1px borders (not thick outlines).\n * Mirrors EmptyState dashed soft fill + Autocomplete glass vars language.\n */\nexport const fileUploadRootSx: SxProps<Theme> = {\n '--fu-border': 'var(--mui-palette-border-1)',\n '--fu-border-hover': 'var(--mui-palette-border-hover-1, var(--mui-palette-text-secondary))',\n '--fu-border-active': 'color-mix(in srgb, var(--mui-palette-text-secondary) 65%, transparent)',\n '--fu-border-error': 'var(--mui-palette-error-main)',\n '--fu-surface':\n 'color-mix(in srgb, var(--mui-palette-background-paper) 78%, transparent)',\n '--fu-surface-hover':\n 'color-mix(in srgb, var(--mui-palette-background-paper) 92%, transparent)',\n '--fu-surface-active':\n 'color-mix(in srgb, var(--mui-palette-primary-main) 8%, var(--mui-palette-background-paper))',\n '--fu-item-bg':\n 'color-mix(in srgb, var(--mui-palette-background-paper) 88%, transparent)',\n '--fu-icon': 'var(--mui-palette-text-secondary)',\n '--fu-text': 'var(--mui-palette-text-primary)',\n '--fu-text-secondary': 'var(--mui-palette-text-secondary)',\n '--fu-shadow':\n 'inset 0 1px 0 color-mix(in srgb, var(--mui-palette-common-white) 6%, transparent)',\n '--fu-radius': '16px',\n '--fu-item-radius': '12px',\n\n display: 'flex',\n flexDirection: 'column',\n gap: 1,\n width: '100%',\n boxSizing: 'border-box',\n\n '[color-scheme=\"dark\"] &': {\n '--fu-surface':\n 'color-mix(in srgb, var(--mui-palette-background-paper) 70%, transparent)',\n '--fu-surface-hover':\n 'color-mix(in srgb, var(--mui-palette-background-paper) 88%, transparent)',\n '--fu-item-bg':\n 'color-mix(in srgb, var(--mui-palette-background-paper) 82%, transparent)',\n '--fu-shadow':\n 'inset 0 1px 0 color-mix(in srgb, var(--mui-palette-common-white) 8%, transparent), 0 1px 2px rgba(0,0,0,0.18)',\n },\n}\n\nexport const fileUploadDropzoneSx: SxProps<Theme> = {\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n justifyContent: 'center',\n textAlign: 'center',\n gap: 0.75,\n px: 3,\n py: 3.5,\n minHeight: 140,\n borderRadius: 'var(--fu-radius)',\n border: '1px dashed var(--fu-drop-border, var(--fu-border))',\n backgroundColor: 'var(--fu-drop-bg, var(--fu-surface))',\n boxShadow: 'var(--fu-shadow)',\n color: 'var(--fu-text-secondary)',\n cursor: 'pointer',\n outline: 'none',\n boxSizing: 'border-box',\n transition: 'border-color 160ms ease, background-color 160ms ease, box-shadow 160ms ease',\n '&:hover': {\n borderColor: 'var(--fu-border-hover)',\n backgroundColor: 'var(--fu-surface-hover)',\n },\n '&:focus-visible': {\n borderColor: 'var(--fu-border-active)',\n borderStyle: 'solid',\n },\n '&[data-active=\"true\"]': {\n borderColor: 'var(--fu-border-active)',\n borderStyle: 'solid',\n backgroundColor: 'var(--fu-surface-active)',\n },\n '&[data-error=\"true\"]': {\n '--fu-drop-border': 'var(--fu-border-error)',\n },\n '&[data-disabled=\"true\"]': {\n opacity: 0.58,\n cursor: 'default',\n pointerEvents: 'none',\n },\n}\n\nexport const fileUploadItemSx: SxProps<Theme> = {\n display: 'flex',\n alignItems: 'center',\n gap: 1.25,\n px: 1.25,\n py: 1,\n borderRadius: 'var(--fu-item-radius)',\n border: '1px solid var(--fu-border)',\n backgroundColor: 'var(--fu-item-bg)',\n boxShadow: 'var(--fu-shadow)',\n boxSizing: 'border-box',\n minWidth: 0,\n '&[data-status=\"error\"]': {\n borderColor: 'color-mix(in srgb, var(--mui-palette-error-main) 55%, var(--fu-border))',\n backgroundColor:\n 'color-mix(in srgb, var(--mui-palette-error-main) 8%, var(--fu-item-bg))',\n },\n}\n\n\nexport const fileUploadThumbSx: SxProps<Theme> = {\n width: 36,\n height: 36,\n minWidth: 36,\n borderRadius: '8px',\n objectFit: 'cover',\n flexShrink: 0,\n border: '1px solid var(--fu-border)',\n backgroundColor: 'var(--fu-item-bg)',\n display: 'block',\n boxSizing: 'border-box',\n}\n\nexport const fileUploadIconWellSx: SxProps<Theme> = {\n width: 36,\n height: 36,\n minWidth: 36,\n borderRadius: '8px',\n flexShrink: 0,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n border: '1px solid var(--fu-border)',\n backgroundColor:\n 'color-mix(in srgb, var(--mui-palette-background-paper) 55%, transparent)',\n boxSizing: 'border-box',\n overflow: 'hidden',\n}\n\n/** Scale react-file-icon SVG into the soft well — do not gray/desaturate. */\nexport const fileUploadLibIconSx: SxProps<Theme> = {\n width: 24,\n height: 30,\n lineHeight: 0,\n flexShrink: 0,\n // Keep library colors vivid (no opacity / filter / color overrides).\n color: 'unset',\n filter: 'none',\n opacity: 1,\n '& svg': {\n width: '100%',\n height: '100%',\n display: 'block',\n // Prevent inherited MUI text color from washing glyph/label fills.\n color: 'unset',\n },\n}\n\n/** Compact soft upload button — quiet 1px border, elevated dark surface. */\nexport const fileUploadButtonSx: SxProps<Theme> = {\n alignSelf: 'flex-start',\n textTransform: 'none',\n fontWeight: 600,\n fontSize: '0.8125rem',\n lineHeight: 1.25,\n borderRadius: '10px',\n px: 1.5,\n py: 0.75,\n minHeight: 36,\n border: '1px solid var(--fu-border)',\n backgroundColor: 'var(--fu-surface)',\n color: 'var(--fu-text)',\n boxShadow: 'var(--fu-shadow)',\n transition: 'border-color 160ms ease, background-color 160ms ease, box-shadow 160ms ease',\n '&:hover': {\n borderColor: 'var(--fu-border-hover)',\n backgroundColor: 'var(--fu-surface-hover)',\n },\n '&:focus-visible': {\n borderColor: 'var(--fu-border-active)',\n outline: 'none',\n },\n '&[data-active=\"true\"]': {\n borderColor: 'var(--fu-border-active)',\n backgroundColor: 'var(--fu-surface-active)',\n },\n '&[data-error=\"true\"]': {\n borderColor: 'var(--fu-border-error)',\n color: 'var(--fu-border-error)',\n },\n '&.Mui-disabled': {\n opacity: 0.58,\n borderColor: 'var(--fu-border)',\n color: 'var(--fu-text-secondary)',\n },\n '& .MuiButton-startIcon': {\n marginRight: '8px',\n marginLeft: 0,\n color: 'var(--fu-icon)',\n },\n}\n\n/** Flex wrap grid for tile items. */\nexport const fileUploadTileListSx: SxProps<Theme> = {\n display: 'flex',\n flexWrap: 'wrap',\n gap: 1.25,\n m: 0,\n p: 0,\n listStyle: 'none',\n}\n\n/** Soft square preview tile (~80px). */\nexport const fileUploadTileSx: SxProps<Theme> = {\n '--fu-tile-size': '80px',\n position: 'relative',\n width: 'var(--fu-tile-size)',\n height: 'var(--fu-tile-size)',\n minWidth: 'var(--fu-tile-size)',\n borderRadius: '12px',\n border: '1px solid var(--fu-border)',\n backgroundColor: 'var(--fu-item-bg)',\n boxShadow: 'var(--fu-shadow)',\n boxSizing: 'border-box',\n overflow: 'hidden',\n flexShrink: 0,\n '&[data-status=\"error\"]': {\n borderColor: 'color-mix(in srgb, var(--mui-palette-error-main) 55%, var(--fu-border))',\n },\n '&:hover .fu-tile-remove, &:focus-within .fu-tile-remove': {\n opacity: 1,\n pointerEvents: 'auto',\n },\n}\n\n/** Fill tile with image cover. */\nexport const fileUploadTileMediaSx: SxProps<Theme> = {\n width: '100%',\n height: '100%',\n objectFit: 'cover',\n display: 'block',\n borderRadius: 'inherit',\n}\n\n/** Centered type-icon well inside a tile (non-images). */\nexport const fileUploadTileIconWellSx: SxProps<Theme> = {\n width: '100%',\n height: '100%',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n backgroundColor:\n 'color-mix(in srgb, var(--mui-palette-background-paper) 55%, transparent)',\n border: 'none',\n borderRadius: 0,\n boxSizing: 'border-box',\n overflow: 'hidden',\n}\n\nexport const fileUploadTileLibIconSx: SxProps<Theme> = {\n width: 36,\n height: 44,\n lineHeight: 0,\n flexShrink: 0,\n color: 'unset',\n filter: 'none',\n opacity: 1,\n '& svg': {\n width: '100%',\n height: '100%',\n display: 'block',\n color: 'unset',\n },\n}\n\n/** Circular white X — top-right overlap; visible on hover/focus. */\nexport const fileUploadTileRemoveSx: SxProps<Theme> = {\n position: 'absolute',\n top: 4,\n right: 4,\n zIndex: 2,\n width: 22,\n height: 22,\n p: 0,\n opacity: 0,\n pointerEvents: 'none',\n backgroundColor: '#fff',\n color: 'rgba(15, 23, 42, 0.72)',\n boxShadow: '0 1px 3px rgba(0,0,0,0.22)',\n border: '1px solid color-mix(in srgb, var(--mui-palette-common-black) 8%, transparent)',\n transition: 'opacity 140ms ease, background-color 140ms ease',\n '&:hover': {\n backgroundColor: '#fff',\n color: 'rgba(15, 23, 42, 0.92)',\n },\n '&.Mui-disabled': {\n opacity: 0,\n },\n}\n\n/** Thin progress strip along tile bottom. */\nexport const fileUploadTileProgressSx: SxProps<Theme> = {\n position: 'absolute',\n left: 0,\n right: 0,\n bottom: 0,\n zIndex: 1,\n height: 3,\n borderRadius: 0,\n backgroundColor: 'color-mix(in srgb, var(--mui-palette-common-black) 25%, transparent)',\n '& .MuiLinearProgress-bar': {\n borderRadius: 0,\n },\n}\n","import type { FileRejectCode, FileRejection, FileUploadItem } from './types'\n\nlet idSeq = 0\n\n/** Stable id for a new upload item (browser crypto when available). */\nexport function createFileUploadId(): string {\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID()\n }\n idSeq += 1\n return `fu-${Date.now()}-${idSeq}`\n}\n\nexport function createFileUploadItem(file: File): FileUploadItem {\n return {\n id: createFileUploadId(),\n file,\n status: 'idle',\n progress: 0,\n }\n}\n\nexport function formatFileSize(bytes: number): string {\n if (!Number.isFinite(bytes) || bytes < 0) return '—'\n if (bytes < 1024) return `${bytes} B`\n if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`\n if (bytes < 1024 * 1024 * 1024) {\n return `${(bytes / (1024 * 1024)).toFixed(1)} MB`\n }\n return `${(bytes / (1024 * 1024 * 1024)).toFixed(1)} GB`\n}\n\ntype AcceptRule = { type: 'ext'; value: string } | { type: 'mime'; value: string }\n\nfunction parseAccept(accept?: string): AcceptRule[] {\n if (!accept || !accept.trim()) return []\n return accept\n .split(',')\n .map((p) => p.trim())\n .filter(Boolean)\n .map((token) => {\n if (token.startsWith('.')) {\n return { type: 'ext' as const, value: token.toLowerCase() }\n }\n return { type: 'mime' as const, value: token.toLowerCase() }\n })\n}\n\nfunction matchesAccept(file: File, rules: AcceptRule[]): boolean {\n if (rules.length === 0) return true\n const name = file.name.toLowerCase()\n const mime = (file.type || '').toLowerCase()\n return rules.some((rule) => {\n if (rule.type === 'ext') {\n return name.endsWith(rule.value)\n }\n if (rule.value.endsWith('/*')) {\n const prefix = rule.value.slice(0, -1)\n return mime.startsWith(prefix)\n }\n return mime === rule.value\n })\n}\n\nexport type ValidateFilesOptions = {\n accept?: string\n maxSize?: number\n maxFiles?: number\n currentCount: number\n multiple: boolean\n}\n\n/**\n * Validate incoming FileList / File[] against accept, maxSize, maxFiles, multiple.\n * Accepted files are those that pass; capacity is applied in order.\n */\nexport function validateFiles(\n incoming: File[],\n opts: ValidateFilesOptions,\n): { accepted: File[]; rejections: FileRejection[] } {\n const rules = parseAccept(opts.accept)\n const accepted: File[] = []\n const rejections: FileRejection[] = []\n\n const hardCap = opts.multiple\n ? opts.maxFiles != null && opts.maxFiles > 0\n ? opts.maxFiles\n : Infinity\n : 1\n\n for (const file of incoming) {\n const errors: FileRejectCode[] = []\n\n if (!matchesAccept(file, rules)) {\n errors.push('file-invalid-type')\n }\n if (opts.maxSize != null && opts.maxSize > 0 && file.size > opts.maxSize) {\n errors.push('file-too-large')\n }\n if (opts.currentCount + accepted.length >= hardCap) {\n errors.push('too-many-files')\n }\n\n if (errors.length > 0) {\n rejections.push({ file, errors })\n } else {\n accepted.push(file)\n }\n }\n\n return { accepted, rejections }\n}\n\n\n/** Common mime → extension when File.name has no suffix. */\nconst MIME_TO_EXT: Record<string, string> = {\n 'application/pdf': 'pdf',\n 'application/zip': 'zip',\n 'application/x-zip-compressed': 'zip',\n 'application/gzip': 'gz',\n 'application/x-gzip': 'gz',\n 'application/x-rar-compressed': 'rar',\n 'application/vnd.rar': 'rar',\n 'application/x-7z-compressed': '7z',\n 'application/x-tar': 'tar',\n 'application/json': 'json',\n 'application/msword': 'doc',\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': 'docx',\n 'application/vnd.ms-excel': 'xls',\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': 'xlsx',\n 'application/vnd.ms-powerpoint': 'ppt',\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation': 'pptx',\n 'text/plain': 'txt',\n 'text/csv': 'csv',\n 'text/markdown': 'md',\n 'image/jpeg': 'jpg',\n 'image/png': 'png',\n 'image/gif': 'gif',\n 'image/webp': 'webp',\n 'image/svg+xml': 'svg',\n 'audio/mpeg': 'mp3',\n 'audio/wav': 'wav',\n 'video/mp4': 'mp4',\n 'video/webm': 'webm',\n}\n\n/**\n * Extension for react-file-icon / defaultStyles lookup.\n * Prefers File.name; falls back to a small mime map (not an icon map).\n */\nexport function getFileExtension(file: File): string {\n const name = file.name || ''\n const dot = name.lastIndexOf('.')\n if (dot > 0 && dot < name.length - 1) {\n return name.slice(dot + 1).toLowerCase()\n }\n const mime = (file.type || '').toLowerCase()\n return MIME_TO_EXT[mime] ?? ''\n}\n\nexport function isImageFile(file: File): boolean {\n return typeof file.type === 'string' && file.type.startsWith('image/')\n}\n\nexport type FileIconStyleBag = Record<string, unknown> & {\n type?: string\n labelColor?: string\n labelTextColor?: string\n labelUppercase?: boolean\n foldColor?: string\n color?: string\n glyphColor?: string\n gradientOpacity?: number\n}\n\n/** Alias odd archive suffixes onto react-file-icon defaultStyles keys. */\nconst EXT_ALIASES: Record<string, string> = {\n '7z': '7zip',\n tgz: 'gz',\n tbz: 'gz',\n tbz2: 'gz',\n}\n\n/**\n * defaultStyles.zip/rar/gz only set `type: \"compressed\"` — no labelColor.\n * Amber badge so archives read like pdf's red chip.\n */\nexport const ARCHIVE_FILE_ICON_STYLE = {\n type: 'compressed' as const,\n labelColor: '#E2A903',\n labelTextColor: '#1A1A1A',\n labelUppercase: true,\n foldColor: '#C48E02',\n color: '#F6E7A8',\n glyphColor: 'rgba(40, 30, 0, 0.35)',\n}\n\nconst ARCHIVE_EXTS = new Set([\n 'zip',\n 'zipx',\n 'rar',\n '7z',\n '7zip',\n 'gz',\n 'tar',\n 'tgz',\n 'sitx',\n 'bz2',\n])\n\n/**\n * Many defaultStyles entries are type-only (no labelColor/color) and render as\n * mono whitesmoke. Colorize by glyph `type` so every icon stays vivid.\n * Keys match react-file-icon `type` enum.\n */\nexport const TYPE_COLOR_FALLBACKS: Record<string, FileIconStyleBag> = {\n '3d': {\n type: '3d',\n labelColor: '#5FB9AD',\n foldColor: '#4A9E94',\n color: '#E5F6F4',\n },\n acrobat: {\n type: 'acrobat',\n labelColor: '#D93831',\n foldColor: '#B82E28',\n color: '#FCE8E7',\n },\n android: {\n type: 'android',\n labelColor: '#3DDC84',\n foldColor: '#2BB86A',\n color: '#E6FBF0',\n },\n audio: {\n type: 'audio',\n labelColor: '#9B59B6',\n foldColor: '#7E3F9A',\n color: '#F3E9F8',\n },\n binary: {\n type: 'binary',\n labelColor: '#E67E22',\n foldColor: '#C86A1A',\n color: '#FDF0E4',\n },\n code: {\n type: 'code',\n labelColor: '#3498DB',\n foldColor: '#2A7AB0',\n color: '#E7F3FB',\n },\n compressed: { ...ARCHIVE_FILE_ICON_STYLE },\n document: {\n type: 'document',\n labelColor: '#5B8DEF',\n labelUppercase: true,\n foldColor: '#4A75C9',\n color: '#E8EEF9',\n glyphColor: 'rgba(40, 60, 120, 0.35)',\n },\n drive: {\n type: 'drive',\n labelColor: '#27AE60',\n foldColor: '#1E8A4B',\n color: '#E5F7ED',\n },\n font: {\n type: 'font',\n labelColor: '#8E44AD',\n foldColor: '#71368A',\n color: '#F2E8F7',\n },\n image: {\n type: 'image',\n labelColor: '#1ABC9C',\n foldColor: '#14967C',\n color: '#E4F8F3',\n },\n presentation: {\n type: 'presentation',\n labelColor: '#D35400',\n labelUppercase: true,\n foldColor: '#A84300',\n color: '#FCEADE',\n glyphColor: 'rgba(120, 50, 0, 0.35)',\n },\n settings: {\n type: 'settings',\n labelColor: '#16A085',\n foldColor: '#117A65',\n color: '#E4F6F2',\n },\n spreadsheet: {\n type: 'spreadsheet',\n labelColor: '#2D7D46',\n labelUppercase: true,\n foldColor: '#246338',\n color: '#E5F2EA',\n glyphColor: 'rgba(20, 60, 30, 0.35)',\n },\n vector: {\n type: 'vector',\n labelColor: '#FF7F18',\n foldColor: '#D96A12',\n color: '#FFF0E4',\n },\n video: {\n type: 'video',\n labelColor: '#E74C3C',\n foldColor: '#C0392B',\n color: '#FCE9E7',\n },\n}\n\n/** Unknown / empty ext — never mono whitesmoke. */\nexport const UNKNOWN_FILE_ICON_STYLE: FileIconStyleBag = {\n type: 'document',\n labelColor: '#5B8DEF',\n labelTextColor: '#FFFFFF',\n labelUppercase: true,\n foldColor: '#4A75C9',\n color: '#E8EEF9',\n glyphColor: 'rgba(40, 60, 120, 0.35)',\n}\n\nexport type FileIconStyleProps = {\n /** Label text on the icon (original ext when possible). */\n extension?: string\n /** Key used for defaultStyles lookup (after aliases). */\n styleKey: string\n /** Props to spread onto <FileIcon /> (full defaultStyles + enrichments). */\n style: FileIconStyleBag\n}\n\nconst MONO_PAGE_COLORS = new Set([\n '',\n 'whitesmoke',\n '#fff',\n '#ffffff',\n 'white',\n '#f5f5f5',\n '#fafafa',\n])\n\nfunction hasVividColor(style: FileIconStyleBag): boolean {\n if (typeof style.labelColor === 'string' && style.labelColor.trim()) {\n return true\n }\n if (typeof style.color === 'string') {\n const c = style.color.trim().toLowerCase()\n if (c && !MONO_PAGE_COLORS.has(c)) return true\n }\n return false\n}\n\nfunction mergeColorEnrichment(\n lib: FileIconStyleBag,\n enrichment: FileIconStyleBag,\n): FileIconStyleBag {\n // Spread library defaults fully, then fill only missing color fields —\n // never clobber a rich defaultStyles entry (e.g. pdf/doc/ai).\n return {\n ...enrichment,\n ...lib,\n labelColor: lib.labelColor ?? enrichment.labelColor,\n labelTextColor: lib.labelTextColor ?? enrichment.labelTextColor,\n foldColor: lib.foldColor ?? enrichment.foldColor,\n color: lib.color ?? enrichment.color,\n glyphColor: lib.glyphColor ?? enrichment.glyphColor,\n labelUppercase: lib.labelUppercase ?? enrichment.labelUppercase,\n type: lib.type ?? enrichment.type,\n }\n}\n\n/**\n * Resolve extension + style for react-file-icon.\n * Always spreads `defaultStyles[key]` fully; enriches type-only / unknown\n * entries so icons are never forced grayscale.\n */\nexport function resolveFileIconStyle(\n file: File,\n defaultStyles: Record<string, FileIconStyleBag | undefined>,\n): FileIconStyleProps {\n const rawExt = getFileExtension(file)\n const styleKey = (EXT_ALIASES[rawExt] ?? rawExt).toLowerCase()\n const displayExt = rawExt || styleKey || undefined\n\n // Full library defaults (labelColor, glyphColor, foldColor, type, …).\n const lib: FileIconStyleBag = {\n ...((styleKey ? defaultStyles[styleKey] : undefined) ?? {}),\n }\n\n const isArchive =\n ARCHIVE_EXTS.has(rawExt) ||\n ARCHIVE_EXTS.has(styleKey) ||\n lib.type === 'compressed'\n\n let style: FileIconStyleBag\n if (isArchive) {\n style = { ...lib, ...ARCHIVE_FILE_ICON_STYLE }\n } else if (hasVividColor(lib)) {\n style = { ...lib }\n } else if (lib.type && TYPE_COLOR_FALLBACKS[lib.type]) {\n style = mergeColorEnrichment(lib, TYPE_COLOR_FALLBACKS[lib.type])\n } else {\n style = mergeColorEnrichment(lib, UNKNOWN_FILE_ICON_STYLE)\n }\n\n return {\n extension: displayExt,\n styleKey,\n style,\n }\n}\n"],"mappings":"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","names":["import_react","MuiButton","import_jsx_runtime","MuiIconButton","import_jsx_runtime","FormLabel","import_jsx_runtime","MuiLinearProgress","import_PhotoSizeSelectLarge","import_Close","import_Person","import_DeleteForever","import_AccountTreeOutlined","defaultStyles","import_jsx_runtime","mergeSx","FileUpload"]}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {
|
|
2
|
+
ARCHIVE_FILE_ICON_STYLE,
|
|
3
|
+
FileUpload,
|
|
4
|
+
TYPE_COLOR_FALLBACKS,
|
|
5
|
+
UNKNOWN_FILE_ICON_STYLE,
|
|
6
|
+
createFileUploadId,
|
|
7
|
+
createFileUploadItem,
|
|
8
|
+
fileUploadButtonSx,
|
|
9
|
+
fileUploadDropzoneSx,
|
|
10
|
+
fileUploadIconWellSx,
|
|
11
|
+
fileUploadItemSx,
|
|
12
|
+
fileUploadLibIconSx,
|
|
13
|
+
fileUploadRootSx,
|
|
14
|
+
fileUploadThumbSx,
|
|
15
|
+
fileUploadTileIconWellSx,
|
|
16
|
+
fileUploadTileLibIconSx,
|
|
17
|
+
fileUploadTileListSx,
|
|
18
|
+
fileUploadTileMediaSx,
|
|
19
|
+
fileUploadTileProgressSx,
|
|
20
|
+
fileUploadTileRemoveSx,
|
|
21
|
+
fileUploadTileSx,
|
|
22
|
+
formatFileSize,
|
|
23
|
+
getFileExtension,
|
|
24
|
+
isImageFile,
|
|
25
|
+
resolveFileIconStyle,
|
|
26
|
+
validateFiles
|
|
27
|
+
} from "./chunk-4SSJY32J.mjs";
|
|
28
|
+
import "./chunk-T4X375IG.mjs";
|
|
29
|
+
import "./chunk-WYYP3Y34.mjs";
|
|
30
|
+
import "./chunk-ZVFYOXDE.mjs";
|
|
31
|
+
import "./chunk-D4XPNSSI.mjs";
|
|
32
|
+
import "./chunk-4Q54P737.mjs";
|
|
33
|
+
import "./chunk-OP6LKXPA.mjs";
|
|
34
|
+
import "./chunk-4RPFRNXG.mjs";
|
|
35
|
+
import "./chunk-PNSJC6PC.mjs";
|
|
36
|
+
import "./chunk-AFLEG5ZC.mjs";
|
|
37
|
+
import "./chunk-FJ6ZGZIA.mjs";
|
|
38
|
+
export {
|
|
39
|
+
ARCHIVE_FILE_ICON_STYLE,
|
|
40
|
+
FileUpload,
|
|
41
|
+
TYPE_COLOR_FALLBACKS,
|
|
42
|
+
UNKNOWN_FILE_ICON_STYLE,
|
|
43
|
+
createFileUploadId,
|
|
44
|
+
createFileUploadItem,
|
|
45
|
+
fileUploadButtonSx,
|
|
46
|
+
fileUploadDropzoneSx,
|
|
47
|
+
fileUploadIconWellSx,
|
|
48
|
+
fileUploadItemSx,
|
|
49
|
+
fileUploadLibIconSx,
|
|
50
|
+
fileUploadRootSx,
|
|
51
|
+
fileUploadThumbSx,
|
|
52
|
+
fileUploadTileIconWellSx,
|
|
53
|
+
fileUploadTileLibIconSx,
|
|
54
|
+
fileUploadTileListSx,
|
|
55
|
+
fileUploadTileMediaSx,
|
|
56
|
+
fileUploadTileProgressSx,
|
|
57
|
+
fileUploadTileRemoveSx,
|
|
58
|
+
fileUploadTileSx,
|
|
59
|
+
formatFileSize,
|
|
60
|
+
getFileExtension,
|
|
61
|
+
isImageFile,
|
|
62
|
+
resolveFileIconStyle,
|
|
63
|
+
validateFiles
|
|
64
|
+
};
|
|
65
|
+
//# sourceMappingURL=fileUpload.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
|
package/dist/flowMap.mjs
CHANGED
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
IconButton_default
|
|
3
|
-
} from "./chunk-JIU5GVM7.mjs";
|
|
4
|
-
import "./chunk-4Q54P737.mjs";
|
|
5
|
-
import "./chunk-OP6LKXPA.mjs";
|
|
6
1
|
import {
|
|
7
2
|
default109 as default6,
|
|
8
3
|
default110 as default7,
|
|
9
4
|
default61 as default4,
|
|
10
5
|
default64 as default5
|
|
11
6
|
} from "./chunk-ZVFYOXDE.mjs";
|
|
7
|
+
import {
|
|
8
|
+
IconButton_default
|
|
9
|
+
} from "./chunk-D4XPNSSI.mjs";
|
|
10
|
+
import "./chunk-4Q54P737.mjs";
|
|
11
|
+
import "./chunk-OP6LKXPA.mjs";
|
|
12
12
|
import {
|
|
13
13
|
default as default3
|
|
14
14
|
} from "./chunk-4RPFRNXG.mjs";
|
|
15
15
|
import {
|
|
16
16
|
default as default2
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-PNSJC6PC.mjs";
|
|
18
|
+
import "./chunk-AFLEG5ZC.mjs";
|
|
18
19
|
import {
|
|
19
20
|
__commonJS,
|
|
20
21
|
__require,
|