@zayne-labs/ui-react 0.10.36 → 0.10.38
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/esm/chunk-BL-4obUL.js +18 -0
- package/dist/esm/{cn-BFKOHS_9.js → cn-Ba8kxuby.js} +1 -1
- package/dist/esm/{cn-BFKOHS_9.js.map → cn-Ba8kxuby.js.map} +1 -1
- package/dist/esm/common/await/index.d.ts +6 -6
- package/dist/esm/common/await/index.js +4 -5
- package/dist/esm/common/await/index.js.map +1 -1
- package/dist/esm/common/client-gate/index.d.ts +2 -2
- package/dist/esm/common/client-gate/index.js +0 -2
- package/dist/esm/common/client-gate/index.js.map +1 -1
- package/dist/esm/common/error-boundary/index.d.ts +1 -1
- package/dist/esm/common/error-boundary/index.js +1 -2
- package/dist/esm/common/for/index.d.ts +4 -4
- package/dist/esm/common/for/index.js +1 -1
- package/dist/esm/common/presence/index.d.ts +4 -5
- package/dist/esm/common/presence/index.js +2 -3
- package/dist/esm/common/show/index.d.ts +4 -4
- package/dist/esm/common/show/index.js +1 -2
- package/dist/esm/common/slot/index.d.ts +4 -4
- package/dist/esm/common/slot/index.js +1 -1
- package/dist/esm/common/suspense-with-boundary/index.d.ts +2 -2
- package/dist/esm/common/suspense-with-boundary/index.js +1 -1
- package/dist/esm/common/suspense-with-boundary/index.js.map +1 -1
- package/dist/esm/common/switch/index.d.ts +4 -4
- package/dist/esm/common/switch/index.js +1 -3
- package/dist/esm/common/switch/index.js.map +1 -1
- package/dist/esm/common/teleport/index.d.ts +2 -2
- package/dist/esm/common/teleport/index.js.map +1 -1
- package/dist/esm/{error-boundary-BwGXKuLC.js → error-boundary-TM4xzQfq.js} +1 -1
- package/dist/esm/error-boundary-TM4xzQfq.js.map +1 -0
- package/dist/esm/{for-CzHe2tKt.js → for-DsdwXl8s.js} +2 -3
- package/dist/esm/for-DsdwXl8s.js.map +1 -0
- package/dist/esm/{index-BmqkAK24.d.ts → index-6DfF1UEM.d.ts} +7 -7
- package/dist/esm/{index-Cg17PiIf.d.ts → index-CSxj6Lp1.d.ts} +2 -3
- package/dist/esm/{presence-D1o4HPFU.js → presence-C2VQITU0.js} +2 -2
- package/dist/esm/{presence-D1o4HPFU.js.map → presence-C2VQITU0.js.map} +1 -1
- package/dist/esm/{show-CoTEBp0b.js → show-C99TZhow.js} +2 -3
- package/dist/esm/show-C99TZhow.js.map +1 -0
- package/dist/esm/{slot-BqX64R24.js → slot--lEkrAQf.js} +4 -4
- package/dist/esm/slot--lEkrAQf.js.map +1 -0
- package/dist/esm/ui/card/index.d.ts +8 -9
- package/dist/esm/ui/card/index.js +10 -11
- package/dist/esm/ui/card/index.js.map +1 -1
- package/dist/esm/ui/carousel/index.d.ts +9 -10
- package/dist/esm/ui/carousel/index.js +9 -10
- package/dist/esm/ui/carousel/index.js.map +1 -1
- package/dist/esm/ui/drag-scroll/index.js +1 -1
- package/dist/esm/ui/drop-zone/index.d.ts +26 -26
- package/dist/esm/ui/drop-zone/index.js +28 -31
- package/dist/esm/ui/drop-zone/index.js.map +1 -1
- package/dist/esm/ui/form/index.d.ts +19 -19
- package/dist/esm/ui/form/index.js +16 -17
- package/dist/esm/ui/form/index.js.map +1 -1
- package/dist/style.css +8 -8
- package/package.json +16 -16
- package/dist/esm/chunk-Bp6m_JJh.js +0 -13
- package/dist/esm/error-boundary-BwGXKuLC.js.map +0 -1
- package/dist/esm/for-CzHe2tKt.js.map +0 -1
- package/dist/esm/show-CoTEBp0b.js.map +0 -1
- package/dist/esm/slot-BqX64R24.js.map +0 -1
|
@@ -1,21 +1,20 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
import {
|
|
5
|
-
import { n as
|
|
6
|
-
import {
|
|
7
|
-
import { t as
|
|
8
|
-
import { t as cnMerge } from "../../cn-BFKOHS_9.js";
|
|
3
|
+
import { t as __export } from "../../chunk-BL-4obUL.js";
|
|
4
|
+
import { n as SlotRoot } from "../../slot--lEkrAQf.js";
|
|
5
|
+
import { n as For } from "../../for-DsdwXl8s.js";
|
|
6
|
+
import { t as Presence } from "../../presence-C2VQITU0.js";
|
|
7
|
+
import { t as cnMerge } from "../../cn-Ba8kxuby.js";
|
|
9
8
|
import { composeRefs, composeTwoEventHandlers } from "@zayne-labs/toolkit-react/utils";
|
|
10
9
|
import { isBoolean, isFile, isFunction, isNumber, isObject, isString } from "@zayne-labs/toolkit-type-helpers";
|
|
11
10
|
import { useCallback, useMemo, useRef } from "react";
|
|
12
11
|
import { createCustomContext, useCallbackRef, useConstant, useShallowCompSelector, useShallowCompValue, useStore, useUnmountEffect } from "@zayne-labs/toolkit-react";
|
|
13
12
|
import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
|
|
14
13
|
import { createFileURL, createStore, dataAttr, formatBytes, generateFileID, handleFileValidationAsync, toArray } from "@zayne-labs/toolkit-core";
|
|
15
|
-
import {
|
|
14
|
+
import { createReactStoreContext } from "@zayne-labs/toolkit-react/zustand";
|
|
16
15
|
|
|
17
16
|
//#region src/components/ui/drop-zone/drop-zone-context.ts
|
|
18
|
-
const [DropZoneStoreContextProvider, useDropZoneStoreContext] =
|
|
17
|
+
const [DropZoneStoreContextProvider, useDropZoneStoreContext] = createReactStoreContext({
|
|
19
18
|
hookName: "useDropZoneStoreContext",
|
|
20
19
|
name: "DropZoneStoreContext",
|
|
21
20
|
providerName: "DropZoneRoot"
|
|
@@ -402,20 +401,18 @@ const createDropZoneStore = (initStoreValues) => {
|
|
|
402
401
|
const { fileStateArray } = get();
|
|
403
402
|
set({
|
|
404
403
|
errors: [],
|
|
405
|
-
fileStateArray: fileStateArray.
|
|
406
|
-
if (isMatchingFile({
|
|
404
|
+
fileStateArray: fileStateArray.filter((fileState) => {
|
|
405
|
+
if (!isMatchingFile({
|
|
407
406
|
fileState,
|
|
408
407
|
fileStateOrID
|
|
409
|
-
}))
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
}
|
|
413
|
-
return fileState;
|
|
408
|
+
})) return true;
|
|
409
|
+
clearObjectURL(fileState, disablePreviewGenForNonImageFiles);
|
|
410
|
+
return false;
|
|
414
411
|
})
|
|
415
412
|
});
|
|
416
413
|
},
|
|
417
414
|
updateFileState: (ctx) => {
|
|
418
|
-
const { fileStateOrID
|
|
415
|
+
const { fileStateOrID, ...updatedFileState } = ctx;
|
|
419
416
|
const { fileStateArray } = get();
|
|
420
417
|
set({ fileStateArray: fileStateArray.map((fileState) => {
|
|
421
418
|
if (isMatchingFile({
|
|
@@ -573,7 +570,7 @@ const useDropZone = (props) => {
|
|
|
573
570
|
};
|
|
574
571
|
}, [actions.openFilePicker, disabled]);
|
|
575
572
|
const getFileListProps = useCallback((innerProps) => {
|
|
576
|
-
const { orientation = "vertical"
|
|
573
|
+
const { orientation = "vertical", ...restOfInnerProps } = innerProps;
|
|
577
574
|
return {
|
|
578
575
|
...getScopeAttrs("file-list"),
|
|
579
576
|
"data-orientation": orientation,
|
|
@@ -590,7 +587,7 @@ const useDropZone = (props) => {
|
|
|
590
587
|
};
|
|
591
588
|
});
|
|
592
589
|
const getFileItemProgressProps = useCallbackRef((innerProps) => {
|
|
593
|
-
const { variant = "linear"
|
|
590
|
+
const { variant = "linear", ...restOfInnerProps } = innerProps;
|
|
594
591
|
return {
|
|
595
592
|
...getScopeAttrs("file-item-progress"),
|
|
596
593
|
role: "progressbar",
|
|
@@ -600,7 +597,7 @@ const useDropZone = (props) => {
|
|
|
600
597
|
};
|
|
601
598
|
});
|
|
602
599
|
const getFileItemDeleteProps = useCallback((innerProps) => {
|
|
603
|
-
const { fileStateOrID
|
|
600
|
+
const { fileStateOrID, ...restOfInnerProps } = innerProps;
|
|
604
601
|
const isDisabled = innerProps.disabled ?? disabled;
|
|
605
602
|
const onRemoveFile = () => fileStateOrID && actions.removeFile({ fileStateOrID });
|
|
606
603
|
return {
|
|
@@ -681,7 +678,7 @@ const useDropZone = (props) => {
|
|
|
681
678
|
//#endregion
|
|
682
679
|
//#region src/components/ui/drop-zone/drop-zone.tsx
|
|
683
680
|
function DropZoneRoot(props) {
|
|
684
|
-
const { children
|
|
681
|
+
const { children, ...restOfProps } = props;
|
|
685
682
|
const { disabled, disableInternalStateSubscription, inputRef, propGetters, storeApi } = useDropZone(restOfProps);
|
|
686
683
|
return /* @__PURE__ */ jsx(DropZoneStoreContextProvider, {
|
|
687
684
|
store: storeApi,
|
|
@@ -707,7 +704,7 @@ function DropZoneContext(props) {
|
|
|
707
704
|
return isFunction(children) ? children(dropZoneCtx) : children;
|
|
708
705
|
}
|
|
709
706
|
function DropZoneContainer(props) {
|
|
710
|
-
const { as: Element = "div", asChild
|
|
707
|
+
const { as: Element = "div", asChild, ...restOfProps } = props;
|
|
711
708
|
const { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();
|
|
712
709
|
const isDraggingOver = useDropZoneStoreContext((store) => disableInternalStateSubscription ? store.isDraggingOver : null);
|
|
713
710
|
const isInvalid = useDropZoneStoreContext((store) => disableInternalStateSubscription ? store.isInvalid : null);
|
|
@@ -720,7 +717,7 @@ function DropZoneContainer(props) {
|
|
|
720
717
|
}) });
|
|
721
718
|
}
|
|
722
719
|
function DropZoneInput(props) {
|
|
723
|
-
const { asChild
|
|
720
|
+
const { asChild, ...restOfProps } = props;
|
|
724
721
|
const { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();
|
|
725
722
|
const isDraggingOver = useDropZoneStoreContext((store) => disableInternalStateSubscription ? store.isDraggingOver : null);
|
|
726
723
|
return /* @__PURE__ */ jsx(asChild ? SlotRoot : "input", { ...propGetters.getInputProps({
|
|
@@ -729,7 +726,7 @@ function DropZoneInput(props) {
|
|
|
729
726
|
}) });
|
|
730
727
|
}
|
|
731
728
|
function DropZoneArea(props) {
|
|
732
|
-
const { children, className, classNames, extraProps, selector
|
|
729
|
+
const { children, className, classNames, extraProps, selector, ...restOfProps } = props;
|
|
733
730
|
return /* @__PURE__ */ jsxs(DropZoneContainer, {
|
|
734
731
|
...extraProps?.container,
|
|
735
732
|
...restOfProps,
|
|
@@ -744,12 +741,12 @@ function DropZoneArea(props) {
|
|
|
744
741
|
});
|
|
745
742
|
}
|
|
746
743
|
function DropZoneTrigger(props) {
|
|
747
|
-
const { asChild
|
|
744
|
+
const { asChild, ...restOfProps } = props;
|
|
748
745
|
const { propGetters } = useDropZoneRootContext();
|
|
749
746
|
return /* @__PURE__ */ jsx(asChild ? SlotRoot : "button", { ...propGetters.getTriggerProps(restOfProps) });
|
|
750
747
|
}
|
|
751
748
|
function DropZoneFileList(props) {
|
|
752
|
-
const { as: Element = "ul", asChild, children, forceMount = false, renderMode = "per-item"
|
|
749
|
+
const { as: Element = "ul", asChild, children, forceMount = false, renderMode = "per-item", ...restOfProps } = props;
|
|
753
750
|
const fileStateArray = useDropZoneStoreContext((store) => store.fileStateArray);
|
|
754
751
|
const actions = useDropZoneStoreContext((store) => store.actions);
|
|
755
752
|
const { disableInternalStateSubscription, propGetters } = useDropZoneRootContext();
|
|
@@ -787,7 +784,7 @@ function DropZoneFileList(props) {
|
|
|
787
784
|
});
|
|
788
785
|
}
|
|
789
786
|
function DropZoneFileItem(props) {
|
|
790
|
-
const { as: Element = "li", asChild, fileState
|
|
787
|
+
const { as: Element = "li", asChild, fileState, ...restOfProps } = props;
|
|
791
788
|
const { propGetters } = useDropZoneRootContext();
|
|
792
789
|
const Component$1 = asChild ? SlotRoot : Element;
|
|
793
790
|
return /* @__PURE__ */ jsx(FileItemContextProvider, {
|
|
@@ -796,7 +793,7 @@ function DropZoneFileItem(props) {
|
|
|
796
793
|
});
|
|
797
794
|
}
|
|
798
795
|
function DropZoneFileItemDelete(props) {
|
|
799
|
-
const { asChild, fileStateOrID
|
|
796
|
+
const { asChild, fileStateOrID, ...restOfProps } = props;
|
|
800
797
|
const { propGetters } = useDropZoneRootContext();
|
|
801
798
|
const fileItemContextValue = useFileItemContext();
|
|
802
799
|
const Component$1 = asChild ? SlotRoot : "button";
|
|
@@ -807,7 +804,7 @@ function DropZoneFileItemDelete(props) {
|
|
|
807
804
|
}) });
|
|
808
805
|
}
|
|
809
806
|
function DropZoneFileItemProgress(props) {
|
|
810
|
-
const { as: Element = "span", asChild, forceMount = false, size = 40, variant = "linear"
|
|
807
|
+
const { as: Element = "span", asChild, forceMount = false, size = 40, variant = "linear", ...restOfProps } = props;
|
|
811
808
|
const fileState = useFileItemContext()?.fileState;
|
|
812
809
|
const { propGetters } = useDropZoneRootContext();
|
|
813
810
|
if (!fileState) return null;
|
|
@@ -868,7 +865,7 @@ function DropZoneFileItemProgress(props) {
|
|
|
868
865
|
}
|
|
869
866
|
}
|
|
870
867
|
function DropZoneFileItemPreview(props) {
|
|
871
|
-
const { as: Element = "span", asChild, children, fileState: fileStateProp, renderPreview = true
|
|
868
|
+
const { as: Element = "span", asChild, children, fileState: fileStateProp, renderPreview = true, ...restOfProps } = props;
|
|
872
869
|
const fileItemContextValue = useFileItemContext();
|
|
873
870
|
const { propGetters } = useDropZoneRootContext();
|
|
874
871
|
const fileState = fileStateProp ?? fileItemContextValue?.fileState;
|
|
@@ -959,7 +956,7 @@ const getFilePreviewOrIcon = (context) => {
|
|
|
959
956
|
}
|
|
960
957
|
};
|
|
961
958
|
function DropZoneFileItemMetadata(props) {
|
|
962
|
-
const { asChild, children, classNames, fileState: fileStateProp, size = "default"
|
|
959
|
+
const { asChild, children, classNames, fileState: fileStateProp, size = "default", ...restOfProps } = props;
|
|
963
960
|
const fileItemContextValue = useFileItemContext();
|
|
964
961
|
const { propGetters } = useDropZoneRootContext();
|
|
965
962
|
const fileState = fileStateProp ?? fileItemContextValue?.fileState;
|
|
@@ -988,7 +985,7 @@ function DropZoneFileItemMetadata(props) {
|
|
|
988
985
|
});
|
|
989
986
|
}
|
|
990
987
|
function DropZoneFileClear(props) {
|
|
991
|
-
const { asChild, forceMount = false
|
|
988
|
+
const { asChild, forceMount = false, ...restOfProps } = props;
|
|
992
989
|
const { propGetters } = useDropZoneRootContext();
|
|
993
990
|
const fileCount = useDropZoneStoreContext((state) => state.fileStateArray.length);
|
|
994
991
|
if (!(forceMount || fileCount > 0)) return null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":["generateFileID","generateFileIDPrimitive","initFileStateArray: DropZoneState[\"fileStateArray\"]","newFileStateArray: DropZoneState[\"fileStateArray\"]","generateFileID","useDropZoneStore: UseDropZoneResult[\"useDropZoneStore\"]","getContainerProps: UseDropZoneResult[\"propGetters\"][\"getContainerProps\"]","getInputProps: UseDropZoneResult[\"propGetters\"][\"getInputProps\"]","getTriggerProps: UseDropZoneResult[\"propGetters\"][\"getTriggerProps\"]","getFileListProps: UseDropZoneResult[\"propGetters\"][\"getFileListProps\"]","getFileItemProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProps\"]","getFileItemProgressProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProgressProps\"]","getFileItemDeleteProps: UseDropZoneResult[\"propGetters\"][\"getFileItemDeleteProps\"]","getFileItemPreviewProps: UseDropZoneResult[\"propGetters\"][\"getFileItemPreviewProps\"]","getFileItemMetadataProps: UseDropZoneResult[\"propGetters\"][\"getFileItemMetadataProps\"]","getFileItemClearProps: UseDropZoneResult[\"propGetters\"][\"getFileItemClearProps\"]","Slot.Root","Component"],"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 { createZustandContext } from \"@zayne-labs/toolkit-react/zustand\";\nimport type { DropZoneStore, FileState, UseDropZoneResult } from \"./types\";\n\nconst [DropZoneStoreContextProvider, useDropZoneStoreContext] = createZustandContext<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","import * as React from \"react\";\n\nexport 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\ttype FileOrFileMeta,\n\ttype FileValidationErrorContextEach,\n\tgenerateFileID as generateFileIDPrimitive,\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 InitStoreValues = Omit<\n\tRequiredUseDropZoneProps,\n\t\"disabled\" | \"disableFilePickerOpenOnAreaClick\" | \"disableInternalStateSubscription\" | \"extraProps\"\n> & { inputRef: React.RefObject<HTMLInputElement | null> };\n\nexport const createDropZoneStore = (initStoreValues: InitStoreValues) => {\n\tconst {\n\t\tallowedFileTypes,\n\t\tdisablePreviewGenForNonImageFiles,\n\t\tinitialFiles,\n\t\tinputRef,\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} = initStoreValues;\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 } = 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: fileStateArray.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\tset(\n\t\t\t\t\t{\n\t\t\t\t\t\terrors,\n\t\t\t\t\t\tfileStateArray:\n\t\t\t\t\t\t\t!multiple ? newFileStateArray : [...fileStateArray, ...newFileStateArray],\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\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\n\t\t\t\t\t// set((prevState) => ({ errors: [...prevState.errors, errorContext] }));\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.flatMap((fileState) => {\n\t\t\t\t\tif (isMatchingFile({ fileState, fileStateOrID })) {\n\t\t\t\t\t\tclearObjectURL(fileState, disablePreviewGenForNonImageFiles);\n\n\t\t\t\t\t\treturn [];\n\t\t\t\t\t}\n\n\t\t\t\t\treturn fileState;\n\t\t\t\t});\n\n\t\t\t\tset({ errors: [], fileStateArray: updatedFileStateArray });\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, ...updatedFileState };\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn fileState;\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// const updatedErrorsState =\n\t\t\t\t// \tupdatedFileState.error ?\n\t\t\t\t// \t\t{ errors: [...errors, updatedFileState.error] satisfies DropZoneState[\"errors\"] }\n\t\t\t\t// \t:\tnull;\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) => onFilesChange?.({ fileStateArray })\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 {\n\tuseCallbackRef,\n\tuseConstant,\n\tuseShallowCompValue,\n\tuseStore,\n\tuseUnmountEffect,\n} 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\tvalidator,\n\t} = props ?? {};\n\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\n\tconst isOnUploadFnProvided = onUpload !== undefined;\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 constantInitialFiles = useConstant(() => initialFiles);\n\tconst shallowComparedMaxFileSize = useShallowCompValue(maxFileSize);\n\tconst shallowComparedAllowedFileTypes = useShallowCompValue(allowedFileTypes);\n\n\tconst storeApi = useMemo(() => {\n\t\treturn createDropZoneStore({\n\t\t\tallowedFileTypes: shallowComparedAllowedFileTypes,\n\t\t\tdisablePreviewGenForNonImageFiles,\n\t\t\tinitialFiles: constantInitialFiles,\n\t\t\tinputRef,\n\t\t\tmaxFileCount,\n\t\t\tmaxFileSize: shallowComparedMaxFileSize,\n\t\t\tmultiple,\n\t\t\tonFilesChange: stableOnFilesChange,\n\t\t\tonUpload: isOnUploadFnProvided ? stableOnUpload : undefined,\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\tconstantInitialFiles,\n\t\tmaxFileCount,\n\t\tshallowComparedMaxFileSize,\n\t\tmultiple,\n\t\tstableOnFilesChange,\n\t\tisOnUploadFnProvided,\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\tconst useDropZoneStore: UseDropZoneResult[\"useDropZoneStore\"] = (selector) => {\n\t\treturn useStore(storeApi, selector);\n\t};\n\n\tconst isDraggingOver = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isDraggingOver : null\n\t);\n\n\tconst hasFiles = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.fileStateArray.length > 0 : null\n\t);\n\n\tconst isInvalid = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isInvalid : null\n\t);\n\n\tconst getContainerProps: UseDropZoneResult[\"propGetters\"][\"getContainerProps\"] = useCallback(\n\t\t(innerProps) => {\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...innerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t`relative flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed\n\t\t\t\t\tp-6 transition-colors duration-250 ease-out outline-none select-none\n\t\t\t\t\tfocus-visible:border-zu-ring/50`,\n\t\t\t\t\t`data-[disabled]:pointer-events-none data-[drag-over]:opacity-60\n\t\t\t\t\tdata-[invalid]:border-zu-destructive data-[invalid]:ring-zu-destructive/20`,\n\t\t\t\t\tinnerProps.className\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\tactions.handleDragEnter,\n\t\t\tactions.handleDragLeave,\n\t\t\tactions.handleDragOver,\n\t\t\tactions.handleDrop,\n\t\t\tactions.handleKeyDown,\n\t\t\tactions.handlePaste,\n\t\t\tactions.openFilePicker,\n\t\t\tdisableInternalStateSubscription,\n\t\t\tdisabled,\n\t\t\tisDraggingOver,\n\t\t\tisInvalid,\n\t\t\tdisableFilePickerOpenOnAreaClick,\n\t\t]\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(inputRef, 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]\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\", ...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...(!disableInternalStateSubscription && { \"data-state\": hasFiles ? \"active\" : \"inactive\" }),\n\t\t\t\t...restOfInnerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\"flex flex-col gap-2 data-[state=active]:animate-files-in\",\n\t\t\t\t\torientation === \"horizontal\" && \"flex-row overflow-x-auto p-1.5\",\n\t\t\t\t\tinnerProps.className\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[disableInternalStateSubscription, hasFiles]\n\t);\n\n\tconst getFileItemProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProps\"] = useCallbackRef(\n\t\t(innerProps) => {\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item\"),\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\"relative flex items-center gap-2.5 rounded-md border p-2\",\n\t\t\t\t\tinnerProps.className\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t);\n\n\tconst getFileItemProgressProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProgressProps\"] =\n\t\tuseCallbackRef((innerProps) => {\n\t\t\tconst { variant = \"linear\", ...restOfInnerProps } = innerProps;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-progress\"),\n\t\t\t\trole: \"progressbar\",\n\t\t\t\t...restOfInnerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\"inline-flex\",\n\t\t\t\t\tvariant === \"circular\" && \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n\t\t\t\t\tvariant === \"fill\"\n\t\t\t\t\t\t&& `absolute inset-0 bg-zu-primary/50 transition-[clip-path] duration-300 ease-linear\n\t\t\t\t\t\t[clip-path:var(--clip-path)]`,\n\t\t\t\t\tvariant === \"linear\"\n\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\trestOfInnerProps.className\n\t\t\t\t),\n\t\t\t};\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\tuseCallbackRef((innerProps) => {\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-preview\"),\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t`relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-md\n\t\t\t\t\tbg-zu-accent/50 [&>svg]:size-10`,\n\t\t\t\t\tinnerProps.className\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\n\tconst getFileItemMetadataProps: UseDropZoneResult[\"propGetters\"][\"getFileItemMetadataProps\"] =\n\t\tuseCallbackRef((innerProps) => {\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-metadata\"),\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: cnMerge(\"flex min-w-0 grow flex-col\", innerProps.className),\n\t\t\t};\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 savedUseDropZoneStore = 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: savedUseDropZoneStore,\n\t\t\t}) satisfies UseDropZoneResult,\n\t\t[disabled, disableInternalStateSubscription, propGetters, storeApi, savedUseDropZoneStore]\n\t);\n\n\treturn result;\n};\n","\"use client\";\n\nimport { dataAttr, formatBytes } from \"@zayne-labs/toolkit-core\";\nimport { useShallowCompSelector } from \"@zayne-labs/toolkit-react\";\nimport type {\n\tCssWithCustomProperties,\n\tInferProps,\n\tPolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport {\n\ttype AnyFunction,\n\tisBoolean,\n\tisFunction,\n\tisNumber,\n\ttype SelectorFn,\n} from \"@zayne-labs/toolkit-type-helpers\";\nimport * as React from \"react\";\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\ttype DropZoneRootContextType,\n\tDropZoneStoreContextProvider,\n\tFileItemContextProvider,\n\ttype FileItemContextType,\n\tuseDropZoneRootContext,\n\tuseDropZoneStoreContext,\n\tuseFileItemContext,\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(useShallowCompSelector(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","initFileStateArray: DropZoneState[\"fileStateArray\"]","newFileStateArray: DropZoneState[\"fileStateArray\"]","generateFileID","useDropZoneStore: UseDropZoneResult[\"useDropZoneStore\"]","getContainerProps: UseDropZoneResult[\"propGetters\"][\"getContainerProps\"]","getInputProps: UseDropZoneResult[\"propGetters\"][\"getInputProps\"]","getTriggerProps: UseDropZoneResult[\"propGetters\"][\"getTriggerProps\"]","getFileListProps: UseDropZoneResult[\"propGetters\"][\"getFileListProps\"]","getFileItemProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProps\"]","getFileItemProgressProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProgressProps\"]","getFileItemDeleteProps: UseDropZoneResult[\"propGetters\"][\"getFileItemDeleteProps\"]","getFileItemPreviewProps: UseDropZoneResult[\"propGetters\"][\"getFileItemPreviewProps\"]","getFileItemMetadataProps: UseDropZoneResult[\"propGetters\"][\"getFileItemMetadataProps\"]","getFileItemClearProps: UseDropZoneResult[\"propGetters\"][\"getFileItemClearProps\"]","Slot.Root","Component"],"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\ttype FileOrFileMeta,\n\ttype FileValidationErrorContextEach,\n\tgenerateFileID as generateFileIDPrimitive,\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 InitStoreValues = Omit<\n\tRequiredUseDropZoneProps,\n\t\"disabled\" | \"disableFilePickerOpenOnAreaClick\" | \"disableInternalStateSubscription\" | \"extraProps\"\n> & { inputRef: React.RefObject<HTMLInputElement | null> };\n\nexport const createDropZoneStore = (initStoreValues: InitStoreValues) => {\n\tconst {\n\t\tallowedFileTypes,\n\t\tdisablePreviewGenForNonImageFiles,\n\t\tinitialFiles,\n\t\tinputRef,\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} = initStoreValues;\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 } = 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: fileStateArray.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\tset(\n\t\t\t\t\t{\n\t\t\t\t\t\terrors,\n\t\t\t\t\t\tfileStateArray:\n\t\t\t\t\t\t\t!multiple ? newFileStateArray : [...fileStateArray, ...newFileStateArray],\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\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\n\t\t\t\t\t// set((prevState) => ({ errors: [...prevState.errors, errorContext] }));\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\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, ...updatedFileState };\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn fileState;\n\t\t\t\t\t}\n\t\t\t\t);\n\n\t\t\t\t// const updatedErrorsState =\n\t\t\t\t// \tupdatedFileState.error ?\n\t\t\t\t// \t\t{ errors: [...errors, updatedFileState.error] satisfies DropZoneState[\"errors\"] }\n\t\t\t\t// \t:\tnull;\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) => onFilesChange?.({ fileStateArray })\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 {\n\tuseCallbackRef,\n\tuseConstant,\n\tuseShallowCompValue,\n\tuseStore,\n\tuseUnmountEffect,\n} 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\tvalidator,\n\t} = props ?? {};\n\n\tconst inputRef = useRef<HTMLInputElement>(null);\n\n\tconst isOnUploadFnProvided = onUpload !== undefined;\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 constantInitialFiles = useConstant(() => initialFiles);\n\tconst shallowComparedMaxFileSize = useShallowCompValue(maxFileSize);\n\tconst shallowComparedAllowedFileTypes = useShallowCompValue(allowedFileTypes);\n\n\tconst storeApi = useMemo(() => {\n\t\treturn createDropZoneStore({\n\t\t\tallowedFileTypes: shallowComparedAllowedFileTypes,\n\t\t\tdisablePreviewGenForNonImageFiles,\n\t\t\tinitialFiles: constantInitialFiles,\n\t\t\tinputRef,\n\t\t\tmaxFileCount,\n\t\t\tmaxFileSize: shallowComparedMaxFileSize,\n\t\t\tmultiple,\n\t\t\tonFilesChange: stableOnFilesChange,\n\t\t\tonUpload: isOnUploadFnProvided ? stableOnUpload : undefined,\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\tconstantInitialFiles,\n\t\tmaxFileCount,\n\t\tshallowComparedMaxFileSize,\n\t\tmultiple,\n\t\tstableOnFilesChange,\n\t\tisOnUploadFnProvided,\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\tconst useDropZoneStore: UseDropZoneResult[\"useDropZoneStore\"] = (selector) => {\n\t\treturn useStore(storeApi, selector);\n\t};\n\n\tconst isDraggingOver = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isDraggingOver : null\n\t);\n\n\tconst hasFiles = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.fileStateArray.length > 0 : null\n\t);\n\n\tconst isInvalid = useDropZoneStore((state) =>\n\t\t!disableInternalStateSubscription ? state.isInvalid : null\n\t);\n\n\tconst getContainerProps: UseDropZoneResult[\"propGetters\"][\"getContainerProps\"] = useCallback(\n\t\t(innerProps) => {\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...innerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t`relative flex flex-col items-center justify-center gap-2 rounded-lg border-2 border-dashed\n\t\t\t\t\tp-6 transition-colors duration-250 ease-out outline-none select-none\n\t\t\t\t\tfocus-visible:border-zu-ring/50`,\n\t\t\t\t\t`data-[disabled]:pointer-events-none data-[drag-over]:opacity-60\n\t\t\t\t\tdata-[invalid]:border-zu-destructive data-[invalid]:ring-zu-destructive/20`,\n\t\t\t\t\tinnerProps.className\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\tactions.handleDragEnter,\n\t\t\tactions.handleDragLeave,\n\t\t\tactions.handleDragOver,\n\t\t\tactions.handleDrop,\n\t\t\tactions.handleKeyDown,\n\t\t\tactions.handlePaste,\n\t\t\tactions.openFilePicker,\n\t\t\tdisableInternalStateSubscription,\n\t\t\tdisabled,\n\t\t\tisDraggingOver,\n\t\t\tisInvalid,\n\t\t\tdisableFilePickerOpenOnAreaClick,\n\t\t]\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(inputRef, 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]\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\", ...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...(!disableInternalStateSubscription && { \"data-state\": hasFiles ? \"active\" : \"inactive\" }),\n\t\t\t\t...restOfInnerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\"flex flex-col gap-2 data-[state=active]:animate-files-in\",\n\t\t\t\t\torientation === \"horizontal\" && \"flex-row overflow-x-auto p-1.5\",\n\t\t\t\t\tinnerProps.className\n\t\t\t\t),\n\t\t\t};\n\t\t},\n\t\t[disableInternalStateSubscription, hasFiles]\n\t);\n\n\tconst getFileItemProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProps\"] = useCallbackRef(\n\t\t(innerProps) => {\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item\"),\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\"relative flex items-center gap-2.5 rounded-md border p-2\",\n\t\t\t\t\tinnerProps.className\n\t\t\t\t),\n\t\t\t};\n\t\t}\n\t);\n\n\tconst getFileItemProgressProps: UseDropZoneResult[\"propGetters\"][\"getFileItemProgressProps\"] =\n\t\tuseCallbackRef((innerProps) => {\n\t\t\tconst { variant = \"linear\", ...restOfInnerProps } = innerProps;\n\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-progress\"),\n\t\t\t\trole: \"progressbar\",\n\t\t\t\t...restOfInnerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t\"inline-flex\",\n\t\t\t\t\tvariant === \"circular\" && \"absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2\",\n\t\t\t\t\tvariant === \"fill\"\n\t\t\t\t\t\t&& `absolute inset-0 bg-zu-primary/50 transition-[clip-path] duration-300 ease-linear\n\t\t\t\t\t\t[clip-path:var(--clip-path)]`,\n\t\t\t\t\tvariant === \"linear\"\n\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\trestOfInnerProps.className\n\t\t\t\t),\n\t\t\t};\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\tuseCallbackRef((innerProps) => {\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-preview\"),\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: cnMerge(\n\t\t\t\t\t`relative flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-md\n\t\t\t\t\tbg-zu-accent/50 [&>svg]:size-10`,\n\t\t\t\t\tinnerProps.className\n\t\t\t\t),\n\t\t\t};\n\t\t});\n\n\tconst getFileItemMetadataProps: UseDropZoneResult[\"propGetters\"][\"getFileItemMetadataProps\"] =\n\t\tuseCallbackRef((innerProps) => {\n\t\t\treturn {\n\t\t\t\t...getScopeAttrs(\"file-item-metadata\"),\n\t\t\t\t...innerProps,\n\t\t\t\tclassName: cnMerge(\"flex min-w-0 grow flex-col\", innerProps.className),\n\t\t\t};\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 savedUseDropZoneStore = 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: savedUseDropZoneStore,\n\t\t\t}) satisfies UseDropZoneResult,\n\t\t[disabled, disableInternalStateSubscription, propGetters, storeApi, savedUseDropZoneStore]\n\t);\n\n\treturn result;\n};\n","\"use client\";\n\nimport { dataAttr, formatBytes } from \"@zayne-labs/toolkit-core\";\nimport { useShallowCompSelector } from \"@zayne-labs/toolkit-react\";\nimport type {\n\tCssWithCustomProperties,\n\tInferProps,\n\tPolymorphicPropsStrict,\n} from \"@zayne-labs/toolkit-react/utils\";\nimport {\n\ttype AnyFunction,\n\tisBoolean,\n\tisFunction,\n\tisNumber,\n\ttype SelectorFn,\n} from \"@zayne-labs/toolkit-type-helpers\";\n\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 { useMemo } from \"react\";\nimport {\n\tDropZoneRootContextProvider,\n\ttype DropZoneRootContextType,\n\tDropZoneStoreContextProvider,\n\tFileItemContextProvider,\n\ttype FileItemContextType,\n\tuseDropZoneRootContext,\n\tuseDropZoneStoreContext,\n\tuseFileItemContext,\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(useShallowCompSelector(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":";;;;;;;;;;;;;;;;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;;;;;ACpHF,MAAa,uBAAuB,oBAAqC;CACxE,MAAM,EACL,kBACA,mCACA,cACA,UACA,cACA,aACA,UACA,eACA,UACA,mBACA,qBACA,sBACA,cACG;CAEJ,MAAM,mBAAmB,QAAQ,aAAa,CAAC,OAAO,QAAQ;CAE9D,MAAM,wBAAwB;AAC7B,MAAI,CAAC,SAAS,QAAS;AAEvB,WAAS,QAAQ,QAAQ;;CAG1B,MAAME,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,mBAAmB,KAAK;IAGzC,MAAM,mBAAmB,CAAC,WAAW,CAAC,MAAM,GAAG,GAAG;IAElD,MAAM,EAAE,QAAQ,eAAe,MAAM,0BAA0B;KAC9D,eAAe,eAAe,KAAK,oBAAoB,gBAAgB,KAAK;KAC5E,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,MAAMC,oBAAqD,WAAW,KAAK,UAAU;KACpF;KACA,IAAIC,iBAAe,KAAK;KACxB,SAAS,gBAAgB,MAAM,kCAAkC;KACjE,UAAU;KACV,QAAQ;KACR,EAAE;AAEH,QACC;KACC;KACA,gBACC,CAAC,WAAW,oBAAoB,CAAC,GAAG,gBAAgB,GAAG,kBAAkB;KAC1E,gBAAgB;KAChB,EACD,EAAE,kBAAkB,MAAM,CAC1B;AAED,UAAM,QAAQ,iBAAiB,EAAE,mBAAmB,CAAC;;GAGtD,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;;;GAOL,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,kBAAkB,QAAQ;IACzB,MAAM,EAAE,eAAe,GAAG,qBAAqB;IAE/C,MAAM,EAAE,mBAAmB,KAAK;AAiBhC,QAAI,EAAE,gBAfyD,eAAe,KAC5E,cAAc;AACd,SAAI,eAAe;MAAE;MAAW;MAAe,CAAC,CAC/C,QAAO;MAAE,GAAG;MAAW,GAAG;MAAkB;AAG7C,YAAO;MAER,EAO4C,EAAE,EAAE,kBAAkB,MAAM,CAAC;;GAE3E;EACD,EAAE;AAGH,OAAM,UAAU,cACd,UAAU,MAAM,iBAChB,mBAAmB,gBAAgB,EAAE,gBAAgB,CAAC,CACvD;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;;;;;ACvSR,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,cACG,SAAS,EAAE;CAEf,MAAM,WAAW,OAAyB,KAAK;CAE/C,MAAM,uBAAuB,aAAa;CAC1C,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,uBAAuB,kBAAkB,aAAa;CAC5D,MAAM,6BAA6B,oBAAoB,YAAY;CACnE,MAAM,kCAAkC,oBAAoB,iBAAiB;CAE7E,MAAM,WAAW,cAAc;AAC9B,SAAO,oBAAoB;GAC1B,kBAAkB;GAClB;GACA,cAAc;GACd;GACA;GACA,aAAa;GACb;GACA,eAAe;GACf,UAAU,uBAAuB,iBAAiB;GAClD,mBAAmB;GACnB,qBAAqB;GACrB;GACA,WAAW;GACX,CAAC;IACA;EACF;EACA;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;CAEF,MAAMC,oBAA2D,aAAa;AAC7E,SAAO,SAAS,UAAU,SAAS;;CAGpC,MAAM,iBAAiB,kBAAkB,UACxC,CAAC,mCAAmC,MAAM,iBAAiB,KAC3D;CAED,MAAM,WAAW,kBAAkB,UAClC,CAAC,mCAAmC,MAAM,eAAe,SAAS,IAAI,KACtE;CAED,MAAM,YAAY,kBAAkB,UACnC,CAAC,mCAAmC,MAAM,YAAY,KACtD;CAED,MAAMC,oBAA2E,aAC/E,eAAe;EACf,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,WAAW,QACV;;uCAGA;kFAEA,WAAW,UACX;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,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR;EACA;EACA;EACA;EACA;EACA,CACD;CAED,MAAMC,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,UAAU,WAAW,IAAI;GAC1C,MAAM;GACN;IAEF;EACC,QAAQ;EACR;EACA;EACA;EACA;EACA;EACA,CACD;CAED,MAAMC,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,MAAMC,mBAAyE,aAC7E,eAAe;EACf,MAAM,EAAE,cAAc,YAAY,GAAG,qBAAqB;AAE1D,SAAO;GACN,GAAG,cAAc,YAAY;GAC7B,oBAAoB;GACpB,GAAI,CAAC,oCAAoC,EAAE,cAAc,WAAW,WAAW,YAAY;GAC3F,GAAG;GACH,WAAW,QACV,4DACA,gBAAgB,gBAAgB,kCAChC,WAAW,UACX;GACD;IAEF,CAAC,kCAAkC,SAAS,CAC5C;CAED,MAAMC,mBAAyE,gBAC7E,eAAe;AACf,SAAO;GACN,GAAG,cAAc,YAAY;GAC7B,GAAG;GACH,WAAW,QACV,4DACA,WAAW,UACX;GACD;GAEF;CAED,MAAMC,2BACL,gBAAgB,eAAe;EAC9B,MAAM,EAAE,UAAU,UAAU,GAAG,qBAAqB;AAEpD,SAAO;GACN,GAAG,cAAc,qBAAqB;GACtC,MAAM;GACN,GAAG;GACH,WAAW,QACV,eACA,YAAY,cAAc,+DAC1B,YAAY,UACR;qCAEJ,YAAY,YACR,uEACJ,iBAAiB,UACjB;GACD;GACA;CAEH,MAAMC,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,MAAMC,0BACL,gBAAgB,eAAe;AAC9B,SAAO;GACN,GAAG,cAAc,oBAAoB;GACrC,GAAG;GACH,WAAW,QACV;uCAEA,WAAW,UACX;GACD;GACA;CAEH,MAAMC,2BACL,gBAAgB,eAAe;AAC9B,SAAO;GACN,GAAG,cAAc,qBAAqB;GACtC,GAAG;GACH,WAAW,QAAQ,8BAA8B,WAAW,UAAU;GACtE;GACA;CAEH,MAAMC,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,wBAAwB,eAAe,iBAAiB;AAe9D,QAbe,eAEZ;EACA;EACA;EACA;EACA;EACA;EACA,kBAAkB;EAClB,GACF;EAAC;EAAU;EAAkC;EAAa;EAAU;EAAsB,CAC1F;;;;;ACnTF,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,uBAAuB,SAAS,CAAC;AAI7E,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,MAAMC,cAAY,UAAUD,WAAY;AAOxC,QACC,oBAAC;EAAwB,OANL,eACb,EAAE,WAAW,GACpB,CAAC,UAAU,CACX;YAIC,oBAACC,eAAU,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,MAAMA,cAAY,UAAUD,WAAY;CAExC,MAAM,wBAAwB,iBAAiB,sBAAsB;AAErE,QACC,oBAACC,eACA,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,MAAMA,cAAY,UAAUD,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,oBAACC;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,oBAACA;IACA,GAAI;IACJ,OACC,EACC,eAAe,SAAS,SAAS,cACjC;KAED;;EAIJ,KAAK,SACJ,QACC,oBAACA;GAAU,GAAI;aACd,oBAAC;IACA,WAAU;IACV,OACC,EACC,wBAAwB,IAAI,MAAM,gBAAgB,IAClD;KAED;IACS;EAId,QAEC,QAAO;;;AAqCV,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,MAAMA,cAAY,UAAUD,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,qBAACC;EAAU,GAAI,YAAY,wBAAwB,YAAY;aAC7D,iBAAiB,iBAAiB,EAClC;GACU;;AAId,MAAM,wBACL,YACI;CACJ,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,CACjC,QACC,4BAA4B,OAAO,QAClC,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,CACjC,QACC,4BAA4B,OAAO,QAClC,oBAAC;GACA,GAAI,4BAA4B,OAAO;GACvC,WAAW,QACV,0BACA,4BAA4B,OAAO,OAAO,UAC1C;IACA;EAKL,KAAK,SAAS,WAAW,SAAS,CACjC,QACC,4BAA4B,OAAO,QAClC,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,CACvF,QACC,4BAA4B,MAAM,QACjC,oBAAC,gBAAa,GAAI,4BAA4B,MAAM,QAAS;EAKhE,KAAK;GACJ;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,CAAC,SAAS,cAAc,CACxB,QACC,4BAA4B,MAAM,QACjC,oBAAC,gBAAa,GAAI,4BAA4B,MAAM,QAAS;EAKhE,KAAK;GAAC;GAAM;GAAO;GAAM;GAAO;GAAO;GAAM,CAAC,SAAS,cAAc,CACpE,QACC,4BAA4B,SAAS,QACpC,oBAAC,mBAAgB,GAAI,4BAA4B,SAAS,QAAS;EAKtE,KAAK;GAAC;GAAO;GAAO;GAAO;GAAO;GAAO;GAAM,CAAC,SAAS,cAAc,CACtE,QACC,4BAA4B,YAAY,QACvC,oBAAC,eAAY,GAAI,4BAA4B,YAAY,QAAS;EAKrE,QACC,QACC,4BAA4B,SAAS,QACpC,oBAAC,YAAS,GAAI,4BAA4B,SAAS,QAAS;;;AAkBjE,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,MAAMA,cAAY,UAAUD,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,oBAACC;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,UAAUD,WAAY,YAEtB,GAAI,YAAY,sBAAsB,YAAY,GAAI"}
|