@oneplatformdev/ui 0.1.99-beta.262 → 0.1.99-beta.265
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/Accordion/Accordion.js.map +1 -1
- package/Alert/Alert.js.map +1 -1
- package/Alert/alertVariants.js.map +1 -1
- package/AlertDialog/AlertDialog.js.map +1 -1
- package/AlertDialog/AlertDialog.stories.js +2 -4
- package/AlertDialog/AlertDialog.stories.js.map +1 -1
- package/AlertDialog/AlertDialogRoot.js +18 -20
- package/AlertDialog/AlertDialogRoot.js.map +1 -1
- package/AreaChart/AreaChart.js.map +1 -1
- package/Aside/Aside.js.map +1 -1
- package/Aside/AsideSidebar.js.map +1 -1
- package/AspectRatio/AspectRatio.js.map +1 -1
- package/Avatar/Avatar.js.map +1 -1
- package/Badge/Badge.js.map +1 -1
- package/Badge/badgeVariants.js.map +1 -1
- package/Breadcrumb/Breadcrumb.js.map +1 -1
- package/Button/Button.js +10 -11
- package/Button/Button.js.map +1 -1
- package/Button/Button.stories.js +1 -1
- package/Button/Button.stories.js.map +1 -1
- package/Button/Button.utils.js.map +1 -1
- package/Button/ButtonCounterBadge.js.map +1 -1
- package/Button/buttonVariants.js.map +1 -1
- package/ButtonIcon/ButtonIcon.js +19 -22
- package/ButtonIcon/ButtonIcon.js.map +1 -1
- package/ButtonIcon/ButtonIcon.stories.js +1 -1
- package/ButtonIcon/ButtonIcon.stories.js.map +1 -1
- package/ButtonIcon/buttonIconVariants.js.map +1 -1
- package/CHANGELOG.md +3401 -3385
- package/Calendar/Calendar.js +4 -6
- package/Calendar/Calendar.js.map +1 -1
- package/Card/Card.js.map +1 -1
- package/Carousel/Carousel.js +6 -7
- package/Carousel/Carousel.js.map +1 -1
- package/Chart/Chart.js.map +1 -1
- package/Checkbox/Checkbox.js +0 -1
- package/Checkbox/Checkbox.js.map +1 -1
- package/Checkbox/Checkbox.stories.js.map +1 -1
- package/Collapsible/Collapsible.js.map +1 -1
- package/Combobox/Combobox.js +10 -10
- package/Combobox/Combobox.js.map +1 -1
- package/Combobox/Combobox.stories.js.map +1 -1
- package/Combobox/Combobox.types.js.map +1 -1
- package/Combobox/ComboboxOptionItem.js +18 -19
- package/Combobox/ComboboxOptionItem.js.map +1 -1
- package/Combobox/ComboboxRenderContent.js +26 -27
- package/Combobox/ComboboxRenderContent.js.map +1 -1
- package/Combobox/ComboboxRenderOptions.js +5 -5
- package/Combobox/ComboboxRenderOptions.js.map +1 -1
- package/Combobox/ComboboxRenderTrigger.js +28 -30
- package/Combobox/ComboboxRenderTrigger.js.map +1 -1
- package/Command/Command.js +21 -22
- package/Command/Command.js.map +1 -1
- package/ContextPopover/ContextDropdownMenu.js.map +1 -1
- package/ContextPopover/ContextPopover.js.map +1 -1
- package/ContextPopover/useContextPopoverHandler.js.map +1 -1
- package/DataTable/DataTable.js +24 -26
- package/DataTable/DataTable.js.map +1 -1
- package/DataTable/DataTableColumnFilter.js +6 -7
- package/DataTable/DataTableColumnFilter.js.map +1 -1
- package/DataTable/useDataTable.js.map +1 -1
- package/DatePicker/DatePicker.js +12 -13
- package/DatePicker/DatePicker.js.map +1 -1
- package/Dialog/Dialog.js +20 -21
- package/Dialog/Dialog.js.map +1 -1
- package/Dialog/Dialog.stories.js +14 -15
- package/Dialog/Dialog.stories.js.map +1 -1
- package/Dialog/DialogOverlayScope.js.map +1 -1
- package/Dialog/useDialogClosePosition.js.map +1 -1
- package/Drawer/Drawer.js.map +1 -1
- package/DropdownMenu/DropdownMenu.js.map +1 -1
- package/Dropzone/Dropzone.d.ts.map +1 -1
- package/Dropzone/Dropzone.js +321 -159
- package/Dropzone/Dropzone.js.map +1 -1
- package/Dropzone/Dropzone.stories.js +257 -63
- package/Dropzone/Dropzone.stories.js.map +1 -1
- package/Dropzone/Dropzone.types.d.ts +17 -1
- package/Dropzone/Dropzone.types.d.ts.map +1 -1
- package/Dropzone/Dropzone.types.js +18 -7
- package/Dropzone/Dropzone.types.js.map +1 -1
- package/Dropzone/DropzoneFilePreview.d.ts.map +1 -1
- package/Dropzone/DropzoneFilePreview.js +45 -24
- package/Dropzone/DropzoneFilePreview.js.map +1 -1
- package/Dropzone/DropzoneSinglePickPreview.d.ts +5 -2
- package/Dropzone/DropzoneSinglePickPreview.d.ts.map +1 -1
- package/Dropzone/DropzoneSinglePickPreview.js +120 -22
- package/Dropzone/DropzoneSinglePickPreview.js.map +1 -1
- package/Dropzone/DropzoneUtils.js.map +1 -1
- package/Dropzone/index.js +7 -5
- package/Form/Form.js +14 -15
- package/Form/Form.js.map +1 -1
- package/Form/FormRenderControl.js +6 -7
- package/Form/FormRenderControl.js.map +1 -1
- package/Form/Form_old.js +4 -5
- package/Form/Form_old.js.map +1 -1
- package/FormCheckbox/FormCheckbox.js +4 -4
- package/FormCheckbox/FormCheckbox.js.map +1 -1
- package/FormCombobox/FormCombobox.js +4 -4
- package/FormCombobox/FormCombobox.js.map +1 -1
- package/FormDatePicker/FormDatePicker.js +4 -4
- package/FormDatePicker/FormDatePicker.js.map +1 -1
- package/FormDropzone/FormDropzone.js +3 -3
- package/FormDropzone/FormDropzone.js.map +1 -1
- package/FormInput/FormInput.js +6 -6
- package/FormInput/FormInput.js.map +1 -1
- package/FormInput/FormInput.stories.js.map +1 -1
- package/FormRadio/FormRadio.js.map +1 -1
- package/FormSelect/FormSelect.js +6 -9
- package/FormSelect/FormSelect.js.map +1 -1
- package/FormTextarea/FormTextarea.js +4 -4
- package/FormTextarea/FormTextarea.js.map +1 -1
- package/Header/Header.js.map +1 -1
- package/HoverCard/HoverCard.js.map +1 -1
- package/InfoBlock/InfoBlock.js.map +1 -1
- package/InfoBlock/InfoBlock.stories.js.map +1 -1
- package/InfoBlock/infoBlockVariants.js.map +1 -1
- package/Input/Input.d.ts.map +1 -1
- package/Input/Input.js +95 -58
- package/Input/Input.js.map +1 -1
- package/Input/Input.stories.js +112 -41
- package/Input/Input.stories.js.map +1 -1
- package/Input/Input.types.d.ts +4 -0
- package/Input/Input.types.d.ts.map +1 -1
- package/Input/inputVariants.js.map +1 -1
- package/InputOTP/InputOTP.d.ts.map +1 -1
- package/InputOTP/InputOTP.js.map +1 -1
- package/LICENSE +21 -21
- package/Label/Label.js.map +1 -1
- package/Label/labelVariants.js.map +1 -1
- package/LazyLoader/LazyLoader.js +4 -5
- package/LazyLoader/LazyLoader.js.map +1 -1
- package/LoadedIcon/LoadedIcon.js.map +1 -1
- package/LoadingMask/LoadingMask.js.map +1 -1
- package/LoadingMask/RenderLoadingMask.js.map +1 -1
- package/LoadingProgress/LoadingProgress.js.map +1 -1
- package/LoadingProgress/loadingProgressVariants.js.map +1 -1
- package/Menubar/Menubar.js.map +1 -1
- package/NavigationMenu/NavigationMenu.js.map +1 -1
- package/NavigationMenu/navigationMenuVariants.js.map +1 -1
- package/Pagination/Pagination.js +0 -1
- package/Pagination/Pagination.js.map +1 -1
- package/Popover/Popover.js.map +1 -1
- package/Progress/Progress.js.map +1 -1
- package/README.md +7 -7
- package/Radio/Radio.js.map +1 -1
- package/RadioGroup/RadioGroup.js.map +1 -1
- package/Resizable/Resizable.js.map +1 -1
- package/Resizable/Resizable.stories.js.map +1 -1
- package/ScrollArea/ScrollArea.js.map +1 -1
- package/Search/Search.js +9 -9
- package/Search/Search.js.map +1 -1
- package/Search/Search.stories.js.map +1 -1
- package/Select/Select.js +6 -7
- package/Select/Select.js.map +1 -1
- package/Select/Select.stories.js.map +1 -1
- package/Select/SelectRoot.js.map +1 -1
- package/Separator/Separator.js.map +1 -1
- package/Sheet/Sheet.js.map +1 -1
- package/Sidebar/Sidebar.js +20 -21
- package/Sidebar/Sidebar.js.map +1 -1
- package/Skeleton/Skeleton.js.map +1 -1
- package/Slider/Slider.js.map +1 -1
- package/Sonner/Sonner.js.map +1 -1
- package/Switch/Switch.js.map +1 -1
- package/Switch/Switch.stories.js.map +1 -1
- package/Table/Table.js.map +1 -1
- package/TablePagination/TablePagination.js +21 -26
- package/TablePagination/TablePagination.js.map +1 -1
- package/Tabs/Tabs.js.map +1 -1
- package/Tabs/TabsRoot.js.map +1 -1
- package/Textarea/Textarea.js.map +1 -1
- package/Textarea/Textarea.stories.js.map +1 -1
- package/Textarea/useAutosizeTextArea.js.map +1 -1
- package/Theme/ThemeModeToggle.js +3 -4
- package/Theme/ThemeModeToggle.js.map +1 -1
- package/Theme/ThemeProvider.js.map +1 -1
- package/Toast/Toast.js.map +1 -1
- package/Toast/toast.constants.js.map +1 -1
- package/Toast/toastVariants.js.map +1 -1
- package/Toast/useToast.js.map +1 -1
- package/Toaster/Toaster.js.map +1 -1
- package/Toggle/Toggle.js.map +1 -1
- package/ToggleGroup/ToggleGroup.js.map +1 -1
- package/Tooltip/Tooltip.js.map +1 -1
- package/Tooltip/TooltipRoot.js.map +1 -1
- package/Tooltip/tooltipVariants.js.map +1 -1
- package/index.js +298 -296
- package/package.json +7 -5
- package/packages/ui/.storybook/Wrappers.js.map +1 -0
- package/styles.css +1 -0
- package/vite-env.d.ts +7 -7
- package/.storybook/Wrappers.js.map +0 -1
- /package/{.storybook → packages/ui/.storybook}/Wrappers.js +0 -0
package/Dropzone/Dropzone.js
CHANGED
|
@@ -1,174 +1,336 @@
|
|
|
1
|
-
import { jsxs as
|
|
2
|
-
import {
|
|
3
|
-
import { forwardRef as
|
|
4
|
-
import { useDropzone as
|
|
5
|
-
import { cn as
|
|
6
|
-
import { Card as
|
|
7
|
-
import { DEFAULT_FILE_TYPES as
|
|
8
|
-
import { FilePreview as
|
|
9
|
-
import { DropzoneSinglePickPreview as
|
|
10
|
-
import { isFile as
|
|
11
|
-
|
|
1
|
+
import { jsxs as l, jsx as e, Fragment as P } from "react/jsx-runtime";
|
|
2
|
+
import { X as E, UploadIcon as ge, FileTextIcon as X, InfoIcon as we } from "lucide-react";
|
|
3
|
+
import { forwardRef as Ne, useState as Y, useEffect as ve, useImperativeHandle as Fe } from "react";
|
|
4
|
+
import { useDropzone as be } from "react-dropzone";
|
|
5
|
+
import { cn as a } from "@oneplatformdev/utils";
|
|
6
|
+
import { Card as Ce } from "../Card/Card.js";
|
|
7
|
+
import { DEFAULT_FILE_TYPES as ye } from "./Dropzone.types.js";
|
|
8
|
+
import { FilePreview as ze } from "./DropzoneFilePreview.js";
|
|
9
|
+
import { DropzoneSinglePickPreview as Ee } from "./DropzoneSinglePickPreview.js";
|
|
10
|
+
import { isFile as D, extractName as De } from "./DropzoneUtils.js";
|
|
11
|
+
import { Button as Ie } from "../Button/Button.js";
|
|
12
|
+
const q = (w = 0) => `${(w / (1024 * 1024)).toFixed(0)} MB`, ke = Ne(
|
|
12
13
|
({
|
|
13
|
-
acceptTypes: w =
|
|
14
|
-
maxSizeMB:
|
|
15
|
-
maxFiles:
|
|
16
|
-
onErrors:
|
|
17
|
-
hideErrors:
|
|
18
|
-
disabled:
|
|
19
|
-
classNames:
|
|
20
|
-
value:
|
|
21
|
-
onChangeValue:
|
|
22
|
-
className:
|
|
23
|
-
labelDropzonePrompt:
|
|
24
|
-
labelDropzoneSubPrompt:
|
|
25
|
-
labelOrClickToSelect:
|
|
26
|
-
labelSelectedFiles:
|
|
27
|
-
labelUploadErrors:
|
|
28
|
-
labelFileTooLarge:
|
|
29
|
-
labelInvalidFileType:
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
14
|
+
acceptTypes: w = ye,
|
|
15
|
+
maxSizeMB: G,
|
|
16
|
+
maxFiles: I = 1,
|
|
17
|
+
onErrors: J,
|
|
18
|
+
hideErrors: K = !1,
|
|
19
|
+
disabled: o = !1,
|
|
20
|
+
classNames: p,
|
|
21
|
+
value: h,
|
|
22
|
+
onChangeValue: k,
|
|
23
|
+
className: Q,
|
|
24
|
+
labelDropzonePrompt: N = "Drop files here or click to select",
|
|
25
|
+
labelDropzoneSubPrompt: Z = "",
|
|
26
|
+
labelOrClickToSelect: U = "Upload file",
|
|
27
|
+
labelSelectedFiles: V = "Selected Files",
|
|
28
|
+
labelUploadErrors: ee = "Upload Errors",
|
|
29
|
+
labelFileTooLarge: B = "File is too large",
|
|
30
|
+
labelInvalidFileType: M = "Invalid file type",
|
|
31
|
+
labelVideoUploaded: te = "Uploaded",
|
|
32
|
+
labelVideoReplace: le = "Replace",
|
|
33
|
+
singlePick: s = !1,
|
|
34
|
+
labelDropzoneClassname: ie,
|
|
35
|
+
labelDropzoneSubClassname: re,
|
|
36
|
+
isUploading: c = !1,
|
|
37
|
+
uploadProgress: S = 0,
|
|
38
|
+
uploadLoadedBytes: se = 0,
|
|
39
|
+
uploadTotalBytes: ne = 0,
|
|
40
|
+
onCancelUpload: j,
|
|
41
|
+
labelUploadingTitle: oe = "Uploading video...",
|
|
42
|
+
labelUploadingHint: ce = "Please do not close this page",
|
|
43
|
+
labelUploadingActionCancel: ae = "Cancel",
|
|
44
|
+
persistentDropzone: A = !1,
|
|
45
|
+
previewVariant: f = "default",
|
|
46
|
+
...v
|
|
47
|
+
}, de) => {
|
|
48
|
+
const [i, u] = Y(h ?? []), [d, R] = Y([]), g = i[0], W = d[0]?.file, F = s && i.length > 0 && D(g), me = F && g.type.includes("image"), $ = F && g.type.includes("video"), _ = F && !me && !$, T = s && !i.length && !!W, m = _ ? g : W, b = s && $, fe = b, C = s && i.length > 0, xe = (t, n) => {
|
|
49
|
+
R(n), J?.(n);
|
|
50
|
+
const r = s ? t.slice(0, 1) : [...i, ...t].slice(0, I);
|
|
51
|
+
u(r), k?.(r);
|
|
52
|
+
};
|
|
53
|
+
ve(() => {
|
|
54
|
+
h && u(h);
|
|
55
|
+
}, [h]);
|
|
56
|
+
const y = (t, n) => {
|
|
57
|
+
if (o) return;
|
|
58
|
+
t.stopPropagation();
|
|
59
|
+
const r = i.filter((x, z) => z !== n);
|
|
60
|
+
u(r), k?.(r);
|
|
61
|
+
}, { getRootProps: pe, getInputProps: he, isDragActive: ue, open: H } = be({
|
|
62
|
+
onDrop: xe,
|
|
63
|
+
accept: w.reduce((t, n) => (t[n] = [], t), {}),
|
|
64
|
+
maxSize: G * 1024 * 1024,
|
|
65
|
+
maxFiles: s ? 1 : I,
|
|
66
|
+
disabled: o || c,
|
|
67
|
+
noClick: !0
|
|
50
68
|
});
|
|
51
|
-
|
|
52
|
-
setItems:
|
|
53
|
-
}), [])
|
|
54
|
-
|
|
55
|
-
{
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
69
|
+
Fe(de, () => ({
|
|
70
|
+
setItems: u
|
|
71
|
+
}), []);
|
|
72
|
+
const L = !c && !s && A && i.length > 0, O = !c && !s && i.length > 0 && /* @__PURE__ */ l("div", { className: a("w-full mt-2", p?.previewWrapper), children: [
|
|
73
|
+
f === "default" && /* @__PURE__ */ l("pre", { className: "font-semibold text-gray-600", children: [
|
|
74
|
+
V,
|
|
75
|
+
":"
|
|
76
|
+
] }),
|
|
77
|
+
/* @__PURE__ */ e(
|
|
78
|
+
"ul",
|
|
79
|
+
{
|
|
80
|
+
className: a(
|
|
81
|
+
"mt-2 text-sm text-gray-500 flex flex-wrap items-start",
|
|
82
|
+
f === "image-grid" ? "gap-2 justify-start" : "gap-4 justify-center"
|
|
83
|
+
),
|
|
84
|
+
children: i.map((t, n) => {
|
|
85
|
+
const r = D(t) ? t.name : De(t), x = D(t) ? (t.size / (1024 * 1024)).toFixed(2) + " MB" : "";
|
|
86
|
+
return /* @__PURE__ */ l(
|
|
87
|
+
"li",
|
|
88
|
+
{
|
|
89
|
+
className: a(
|
|
90
|
+
"relative",
|
|
91
|
+
f === "image-grid" ? "w-[75px] h-[75px]" : "flex flex-col items-center gap-2"
|
|
92
|
+
),
|
|
93
|
+
children: [
|
|
94
|
+
/* @__PURE__ */ l("div", { className: "relative w-full h-full", children: [
|
|
95
|
+
/* @__PURE__ */ e(ze, { item: t, styles: p }),
|
|
96
|
+
/* @__PURE__ */ e(
|
|
97
|
+
"div",
|
|
98
|
+
{
|
|
99
|
+
className: a(
|
|
100
|
+
"absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm",
|
|
101
|
+
f === "image-grid" && "top-1 right-1 bg-white/90 rounded-full p-0.5"
|
|
102
|
+
),
|
|
103
|
+
onClick: (z) => y(z, n),
|
|
104
|
+
children: /* @__PURE__ */ e(E, { size: 16, strokeWidth: 1, color: "black" })
|
|
105
|
+
}
|
|
106
|
+
)
|
|
107
|
+
] }),
|
|
108
|
+
f === "default" && /* @__PURE__ */ l("span", { className: "inline-flex flex-col items-center", children: [
|
|
109
|
+
/* @__PURE__ */ e("span", { className: "max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap", children: r }),
|
|
110
|
+
x && /* @__PURE__ */ l("span", { children: [
|
|
111
|
+
"(",
|
|
112
|
+
x,
|
|
113
|
+
")"
|
|
114
|
+
] })
|
|
115
|
+
] })
|
|
116
|
+
]
|
|
117
|
+
},
|
|
118
|
+
n
|
|
119
|
+
);
|
|
120
|
+
})
|
|
121
|
+
}
|
|
122
|
+
)
|
|
123
|
+
] });
|
|
124
|
+
return /* @__PURE__ */ l("div", { className: "w-full", children: [
|
|
125
|
+
/* @__PURE__ */ l(
|
|
126
|
+
Ce,
|
|
127
|
+
{
|
|
128
|
+
...v,
|
|
129
|
+
...pe({
|
|
130
|
+
onClick: (t) => {
|
|
131
|
+
if (!(o || c)) {
|
|
132
|
+
if (fe) {
|
|
133
|
+
v.onClick?.(t);
|
|
134
|
+
return;
|
|
135
|
+
}
|
|
136
|
+
H(), v.onClick?.(t);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}),
|
|
140
|
+
className: a(
|
|
141
|
+
"w-full text-center flex flex-col items-center justify-center gap-6 cursor-pointer",
|
|
142
|
+
!C && "border border-dashed border-[#9368FF80] rounded-[8px] bg-[#FCFCFC] p-4",
|
|
143
|
+
C && "min-h-0 border-0 bg-transparent p-0",
|
|
144
|
+
o && "border-[#E4E4E7] pointer-events-none",
|
|
145
|
+
d.length > 0 && !C && "border-red-500",
|
|
146
|
+
ue && "bg-gray-100",
|
|
147
|
+
s && "shadow-none!",
|
|
148
|
+
s && i.length > 0 && !b && "p-0! shadow-none!",
|
|
149
|
+
b && "h-auto! max-h-none! min-h-0! p-2!",
|
|
150
|
+
Q
|
|
151
|
+
),
|
|
152
|
+
children: [
|
|
153
|
+
/* @__PURE__ */ e("input", { ...he() }),
|
|
154
|
+
c && /* @__PURE__ */ l(
|
|
155
|
+
"div",
|
|
156
|
+
{
|
|
157
|
+
className: "w-full h-full min-h-46 rounded-lg border border-[#E4E4E7] bg-[#FCFCFC] flex flex-col items-center justify-center gap-4 p-4",
|
|
158
|
+
onClick: (t) => t.stopPropagation(),
|
|
159
|
+
children: [
|
|
160
|
+
/* @__PURE__ */ l("div", { className: "relative h-24 w-24", children: [
|
|
161
|
+
/* @__PURE__ */ e("svg", { className: "h-24 w-24", viewBox: "0 0 100 100", children: /* @__PURE__ */ e("circle", { cx: "50", cy: "50", r: "42", stroke: "#E6E1F5", strokeWidth: "8", fill: "none" }) }),
|
|
162
|
+
/* @__PURE__ */ l("span", { className: "absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground", children: [
|
|
163
|
+
Math.max(0, Math.min(100, Math.round(S))),
|
|
164
|
+
"%"
|
|
165
|
+
] })
|
|
166
|
+
] }),
|
|
167
|
+
/* @__PURE__ */ l("div", { className: "text-center", children: [
|
|
168
|
+
/* @__PURE__ */ e("p", { className: "text-xl font-semibold text-foreground", children: oe }),
|
|
169
|
+
/* @__PURE__ */ l("p", { className: "text-sm text-[#666A78]", children: [
|
|
170
|
+
q(se),
|
|
171
|
+
" of ",
|
|
172
|
+
q(ne)
|
|
173
|
+
] }),
|
|
174
|
+
/* @__PURE__ */ e("p", { className: "mt-2 text-sm text-[#666A78]", children: ce })
|
|
175
|
+
] }),
|
|
176
|
+
/* @__PURE__ */ e("div", { className: "w-full max-w-[520px] h-2 rounded-full bg-[#E6E1F5] overflow-hidden", children: /* @__PURE__ */ e(
|
|
177
|
+
"div",
|
|
81
178
|
{
|
|
82
|
-
className:
|
|
83
|
-
|
|
84
|
-
k
|
|
85
|
-
),
|
|
86
|
-
children: z
|
|
179
|
+
className: "h-full bg-[#9368FF] transition-[width] duration-150 ease-linear",
|
|
180
|
+
style: { width: `${Math.max(0, Math.min(100, S))}%` }
|
|
87
181
|
}
|
|
88
|
-
),
|
|
89
|
-
/* @__PURE__ */
|
|
90
|
-
"
|
|
182
|
+
) }),
|
|
183
|
+
j && /* @__PURE__ */ e(
|
|
184
|
+
"button",
|
|
91
185
|
{
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
186
|
+
type: "button",
|
|
187
|
+
className: "mt-1 h-10 min-w-36 rounded-md border border-[#E4E4E7] bg-white px-6 text-base font-medium text-foreground cursor-pointer",
|
|
188
|
+
onClick: (t) => {
|
|
189
|
+
t.stopPropagation(), j();
|
|
190
|
+
},
|
|
191
|
+
children: ae
|
|
97
192
|
}
|
|
98
193
|
)
|
|
99
|
-
]
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
194
|
+
]
|
|
195
|
+
}
|
|
196
|
+
),
|
|
197
|
+
!c && (i.length === 0 || !s && A) && d.length === 0 && /* @__PURE__ */ l(
|
|
198
|
+
"div",
|
|
199
|
+
{
|
|
200
|
+
className: a(
|
|
201
|
+
"flex flex-col items-center gap-2 w-full",
|
|
202
|
+
p?.idleWrapper
|
|
203
|
+
),
|
|
204
|
+
children: [
|
|
205
|
+
/* @__PURE__ */ e("div", { className: "flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(ge, { className: "size-6 text-[#9368FF]" }) }),
|
|
206
|
+
/* @__PURE__ */ e("div", { className: "flex flex-col items-center gap-1 w-full", children: !o && /* @__PURE__ */ l(P, { children: [
|
|
207
|
+
/* @__PURE__ */ e(
|
|
208
|
+
"span",
|
|
209
|
+
{
|
|
210
|
+
className: a(
|
|
211
|
+
"font-semibold text-[14px] leading-[125%] text-[#06080D] text-center w-full",
|
|
212
|
+
ie
|
|
213
|
+
),
|
|
214
|
+
children: N
|
|
215
|
+
}
|
|
216
|
+
),
|
|
217
|
+
/* @__PURE__ */ e(
|
|
218
|
+
"span",
|
|
219
|
+
{
|
|
220
|
+
className: a(
|
|
221
|
+
"font-medium text-[12px] leading-[120%] text-[#666A78] text-center w-full",
|
|
222
|
+
re
|
|
223
|
+
),
|
|
224
|
+
children: Z
|
|
225
|
+
}
|
|
226
|
+
)
|
|
227
|
+
] }) }),
|
|
228
|
+
!o && /* @__PURE__ */ e(
|
|
229
|
+
Ie,
|
|
230
|
+
{
|
|
231
|
+
type: "button",
|
|
232
|
+
size: "md",
|
|
233
|
+
children: U
|
|
234
|
+
}
|
|
235
|
+
)
|
|
236
|
+
]
|
|
237
|
+
}
|
|
238
|
+
),
|
|
239
|
+
!c && d.length > 0 && !T && /* @__PURE__ */ l("div", { className: a("w-full mt-4", p?.errorWrapper), children: [
|
|
240
|
+
/* @__PURE__ */ l("span", { className: "font-semibold text-red-500", children: [
|
|
241
|
+
ee,
|
|
242
|
+
":"
|
|
243
|
+
] }),
|
|
244
|
+
/* @__PURE__ */ e("ul", { className: "mt-2 text-sm text-red-500 list-disc list-inside", children: d.map((t, n) => /* @__PURE__ */ l("li", { children: [
|
|
245
|
+
t.file.name,
|
|
246
|
+
" (",
|
|
247
|
+
(t.file.size / (1024 * 1024)).toFixed(2),
|
|
248
|
+
" MB)",
|
|
249
|
+
!K && /* @__PURE__ */ e("ul", { className: "ml-4 list-disc list-inside", children: t.errors.map((r, x) => /* @__PURE__ */ l("li", { children: [
|
|
250
|
+
r.code === "file-too-large" && B,
|
|
251
|
+
r.code === "file-invalid-type" && M,
|
|
252
|
+
r.code !== "file-too-large" && r.code !== "file-invalid-type" && r.message
|
|
253
|
+
] }, x)) })
|
|
254
|
+
] }, n)) })
|
|
132
255
|
] }),
|
|
133
|
-
/* @__PURE__ */
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
"
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
children:
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
className: "absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm",
|
|
146
|
-
onClick: (f) => u(f, o),
|
|
147
|
-
children: /* @__PURE__ */ l(O, { size: 16, strokeWidth: 1, color: "black" })
|
|
148
|
-
}
|
|
149
|
-
)
|
|
256
|
+
!c && !!(s && i.length) && /* @__PURE__ */ e(P, { children: _ ? /* @__PURE__ */ l(
|
|
257
|
+
"div",
|
|
258
|
+
{
|
|
259
|
+
className: "w-full max-w-[502px] flex flex-col items-center gap-4",
|
|
260
|
+
onClick: (t) => t.stopPropagation(),
|
|
261
|
+
children: [
|
|
262
|
+
/* @__PURE__ */ e("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: N }),
|
|
263
|
+
/* @__PURE__ */ l("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
|
|
264
|
+
/* @__PURE__ */ e("div", { className: "size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0", children: /* @__PURE__ */ e(X, { size: 20 }) }),
|
|
265
|
+
/* @__PURE__ */ l("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
|
|
266
|
+
/* @__PURE__ */ e("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children: m?.name }),
|
|
267
|
+
/* @__PURE__ */ e("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: m ? `${(m.size / (1024 * 1024)).toFixed(0)} MB` : "" })
|
|
150
268
|
] }),
|
|
151
|
-
/* @__PURE__ */
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
"
|
|
155
|
-
|
|
156
|
-
")
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
]
|
|
269
|
+
!o && /* @__PURE__ */ e(
|
|
270
|
+
"div",
|
|
271
|
+
{
|
|
272
|
+
className: "size-6 flex items-center justify-center cursor-pointer",
|
|
273
|
+
onClick: (t) => y(t, 0),
|
|
274
|
+
children: /* @__PURE__ */ e(E, { size: 24, color: "#06080D" })
|
|
275
|
+
}
|
|
276
|
+
)
|
|
277
|
+
] })
|
|
278
|
+
]
|
|
279
|
+
}
|
|
280
|
+
) : /* @__PURE__ */ e(
|
|
281
|
+
Ee,
|
|
282
|
+
{
|
|
283
|
+
item: i[0],
|
|
284
|
+
onRemoveClick: (t) => y(t, 0),
|
|
285
|
+
onReplaceClick: (t) => {
|
|
286
|
+
t.stopPropagation(), !o && H();
|
|
160
287
|
},
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
288
|
+
labelUploaded: te,
|
|
289
|
+
labelReplace: le,
|
|
290
|
+
disabled: o
|
|
291
|
+
}
|
|
292
|
+
) }),
|
|
293
|
+
!c && T && /* @__PURE__ */ l(
|
|
294
|
+
"div",
|
|
295
|
+
{
|
|
296
|
+
className: "w-full max-w-[502px] flex flex-col items-center gap-4",
|
|
297
|
+
onClick: (t) => t.stopPropagation(),
|
|
298
|
+
children: [
|
|
299
|
+
/* @__PURE__ */ e("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: N }),
|
|
300
|
+
/* @__PURE__ */ l("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
|
|
301
|
+
/* @__PURE__ */ e("div", { className: "size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0", children: /* @__PURE__ */ e(X, { size: 20 }) }),
|
|
302
|
+
/* @__PURE__ */ l("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
|
|
303
|
+
/* @__PURE__ */ e("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children: m?.name }),
|
|
304
|
+
/* @__PURE__ */ e("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: m ? `${(m.size / (1024 * 1024)).toFixed(0)} MB` : "" })
|
|
305
|
+
] }),
|
|
306
|
+
!o && /* @__PURE__ */ e(
|
|
307
|
+
"div",
|
|
308
|
+
{
|
|
309
|
+
className: "size-6 flex items-center justify-center cursor-pointer",
|
|
310
|
+
onClick: (t) => {
|
|
311
|
+
t.stopPropagation(), R([]);
|
|
312
|
+
},
|
|
313
|
+
children: /* @__PURE__ */ e(E, { size: 24, color: "#06080D" })
|
|
314
|
+
}
|
|
315
|
+
)
|
|
316
|
+
] }),
|
|
317
|
+
/* @__PURE__ */ l("div", { className: "w-full bg-[#DC26260F] p-4 flex items-start gap-4", children: [
|
|
318
|
+
/* @__PURE__ */ e(we, { size: 20, color: "#DC2626" }),
|
|
319
|
+
/* @__PURE__ */ e("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: d[0]?.errors?.[0]?.code === "file-too-large" ? B : d[0]?.errors?.[0]?.message || M })
|
|
320
|
+
] })
|
|
321
|
+
]
|
|
322
|
+
}
|
|
323
|
+
),
|
|
324
|
+
!L && O
|
|
325
|
+
]
|
|
326
|
+
}
|
|
327
|
+
),
|
|
328
|
+
L && /* @__PURE__ */ e("div", { className: "w-full", children: O })
|
|
329
|
+
] });
|
|
168
330
|
}
|
|
169
331
|
);
|
|
170
|
-
|
|
332
|
+
ke.displayName = "Dropzone";
|
|
171
333
|
export {
|
|
172
|
-
|
|
334
|
+
ke as Dropzone
|
|
173
335
|
};
|
|
174
336
|
//# sourceMappingURL=Dropzone.js.map
|
package/Dropzone/Dropzone.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropzone.js","sources":["../../src/Dropzone/Dropzone.tsx"],"sourcesContent":["import { FileDownIcon, X } from 'lucide-react';\nimport { forwardRef, useImperativeHandle, useState } from 'react';\nimport { FileRejection, useDropzone } from 'react-dropzone';\n\nimport { cn } from '@oneplatformdev/utils';\n\nimport { Card } from '../Card/Card';\n\nimport {\n DEFAULT_FILE_TYPES,\n DropzoneControl,\n DropzoneProps,\n DropzoneValueItem\n} from './Dropzone.types';\nimport { FilePreview } from './DropzoneFilePreview';\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\nimport { DefaultFileIcon, extractName, isFile } from './DropzoneUtils';\n\n/**\n * Dropzone component - A drag-and-drop file upload area with image previews, error handling, and localization.\n *\n * @component\n * @param {DropzoneProps} props - The props for the Dropzone component.\n * @param {string[]} [props.acceptTypes=DEFAULT_FILE_TYPES] - Allowed file MIME types.\n * @param {number} props.maxSizeMB - Maximum allowed file size in megabytes.\n * @param {number} [props.maxFiles=1] - Maximum number of files that can be uploaded.\n * @param {DropzoneTranslations} props.translations - Translations for text labels.\n * @param {(errors: FileRejection[]) => void} [props.onErrors] - Callback triggered when file errors occur.\n * @param {boolean} [props.hideErrors=false] - Whether to hide error messages.\n * @param {boolean} [props.disabled=false] - Whether the dropzone is disabled.\n * @param {DropzoneStyles} [props.classNames] - Custom classNames for different dropzone states.\n * @param {DropzoneValueItem[]} [props.value=[]] - Current selected files or URLs.\n * @param {(items: DropzoneValueItem[]) => void} [props.onChangeValue] - Callback triggered when file selection changes.\n * @param {string} [props.className] - Additional class names for styling.\n * @param {React.Ref<HTMLDivElement>} ref - Ref for the root dropzone container.\n * @returns {JSX.Element} The rendered Dropzone component.\n */\nexport const Dropzone = forwardRef<DropzoneControl, DropzoneProps>(\n (\n {\n acceptTypes = DEFAULT_FILE_TYPES,\n maxSizeMB,\n maxFiles = 1,\n onErrors,\n hideErrors = false,\n disabled = false,\n classNames,\n value = [],\n onChangeValue,\n className,\n labelDropzonePrompt = 'Drop files here or click to select',\n labelDropzoneSubPrompt = '',\n labelOrClickToSelect = 'Click to select files',\n labelSelectedFiles = 'Selected Files',\n labelUploadErrors = 'Upload Errors',\n labelFileTooLarge = 'File is too large',\n labelInvalidFileType = 'Invalid file type',\n singlePick = false,\n labelDropzoneClassname,\n labelDropzoneSubClassname,\n ...restProps\n },\n ref\n ) => {\n const [items, setItems] = useState<DropzoneValueItem[]>(value);\n const [fileErrors, setFileErrors] = useState<FileRejection[]>([]);\n\n const onDrop = (acceptedFiles: File[], fileRejections: FileRejection[]) => {\n setFileErrors(fileRejections);\n onErrors?.(fileRejections);\n\n const newItems = singlePick\n ? acceptedFiles.slice(0, 1)\n : [...items, ...acceptedFiles].slice(0, maxFiles);\n\n setItems(newItems);\n onChangeValue?.(newItems);\n };\n\n const removeItem = (\n event: React.MouseEvent<HTMLDivElement>,\n index: number\n ) => {\n if (disabled) return;\n event.stopPropagation();\n\n const newItems = items.filter((_, i) => i !== index);\n setItems(newItems);\n onChangeValue?.(newItems);\n };\n\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop,\n accept: acceptTypes.reduce((acc, fileType) => {\n acc[fileType] = [];\n return acc;\n }, {} as Record<string, string[]>),\n maxSize: maxSizeMB * 1024 * 1024,\n maxFiles: singlePick ? 1 : maxFiles,\n disabled,\n });\n\n useImperativeHandle(ref, () => {\n return {\n setItems,\n };\n }, []);\n\n\n return (\n <Card\n {...getRootProps()}\n {...restProps}\n className={cn(\n `border-dashed p-2 text-center flex flex-col items-center justify-center cursor-pointer`,\n disabled && 'border-[#E4E4E7] pointer-events-none',\n fileErrors.length > 0 ? 'border-red-500' : 'border-[#E4E4E7]!',\n isDragActive && 'bg-gray-100',\n singlePick && 'shadow-none!',\n singlePick && items.length > 0 && 'p-0! shadow-none!',\n className\n )}\n >\n <input {...getInputProps()} />\n\n {items.length === 0 && fileErrors.length === 0 && (\n <div\n className={cn(\n 'flex flex-col items-center',\n classNames?.idleWrapper\n )}\n >\n <FileDownIcon className=\"mb-4\" />\n\n <div className=\"flex flex-col items-center gap-1\">\n {!disabled && (\n <>\n <span\n className={cn(\n \"font-medium text-base text-foreground max-w-[264px]\",\n labelDropzoneClassname\n )}\n >\n {labelDropzonePrompt}\n </span>\n\n <span\n className={cn(\n \"font-normal text-sm text-foreground max-w-[264px]\",\n labelDropzoneSubClassname\n )}\n >\n {labelDropzoneSubPrompt}\n </span>\n </>\n )}\n </div>\n </div>\n )}\n\n {fileErrors.length > 0 && (\n <div className={cn('w-full mt-4', classNames?.errorWrapper)}>\n <span className=\"font-semibold text-red-500\">\n {labelUploadErrors}:\n </span>\n <ul className=\"mt-2 text-sm text-red-500 list-disc list-inside\">\n {fileErrors.map((fileRejection, index) => (\n <li key={index}>\n {fileRejection.file.name} (\n {(fileRejection.file.size / (1024 * 1024)).toFixed(2)} MB)\n {!hideErrors && (\n <ul className=\"ml-4 list-disc list-inside\">\n {fileRejection.errors.map((error, errorIndex) => (\n <li key={errorIndex}>\n {error.code === 'file-too-large' && labelFileTooLarge}\n {error.code === 'file-invalid-type' &&\n labelInvalidFileType}\n {error.code !== 'file-too-large' &&\n error.code !== 'file-invalid-type' &&\n error.message}\n </li>\n ))}\n </ul>\n )}\n </li>\n ))}\n </ul>\n </div>\n )}\n\n {Boolean(singlePick && items.length) && (\n <DropzoneSinglePickPreview\n item={items[0]}\n onRemoveClick={(e) => removeItem(e, 0)}\n disabled={disabled}\n />\n )}\n\n {!singlePick && items.length > 0 && (\n <div className={cn('w-full mt-2', classNames?.previewWrapper)}>\n <pre className=\"font-semibold text-gray-600\">\n {labelSelectedFiles}:\n </pre>\n <ul className=\"mt-2 text-sm text-gray-500 flex flex-wrap gap-4 items-start justify-center\">\n {items.map((item, index) => {\n const fileName = isFile(item) ? item.name : extractName(item);\n const fileSize = isFile(item)\n ? (item.size / (1024 * 1024)).toFixed(2) + ' MB'\n : '';\n\n return (\n <li\n key={index}\n className=\"flex flex-col items-center gap-2 relative\"\n >\n <div className=\"relative\">\n <FilePreview item={item} styles={classNames} />\n <div\n className=\"absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm\"\n onClick={(event) => removeItem(event, index)}\n >\n <X size={16} strokeWidth={1} color=\"black\" />\n </div>\n </div>\n <span className=\"inline-flex flex-col items-center\">\n <span className=\"max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap\">\n {fileName}\n </span>\n {fileSize && <span>({fileSize})</span>}\n </span>\n </li>\n );\n })}\n </ul>\n </div>\n )}\n </Card>\n );\n }\n);\n\nDropzone.displayName = 'Dropzone';\n"],"names":["Dropzone","forwardRef","acceptTypes","DEFAULT_FILE_TYPES","maxSizeMB","maxFiles","onErrors","hideErrors","disabled","classNames","value","onChangeValue","className","labelDropzonePrompt","labelDropzoneSubPrompt","labelOrClickToSelect","labelSelectedFiles","labelUploadErrors","labelFileTooLarge","labelInvalidFileType","singlePick","labelDropzoneClassname","labelDropzoneSubClassname","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","onDrop","acceptedFiles","fileRejections","newItems","removeItem","event","index","_","i","getRootProps","getInputProps","isDragActive","useDropzone","acc","fileType","useImperativeHandle","jsxs","Card","cn","jsx","FileDownIcon","Fragment","fileRejection","error","errorIndex","DropzoneSinglePickPreview","item","fileName","isFile","extractName","fileSize","FilePreview","X"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropzone.js","sources":["../../src/Dropzone/Dropzone.tsx"],"sourcesContent":["import { FileTextIcon, InfoIcon, UploadIcon, X } from 'lucide-react';\r\nimport { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\r\nimport { FileRejection, useDropzone } from 'react-dropzone';\r\n\r\nimport { cn } from '@oneplatformdev/utils';\r\n\r\nimport { Card } from '../Card/Card';\r\n\r\nimport {\r\n DEFAULT_FILE_TYPES,\r\n DropzoneControl,\r\n DropzoneProps,\r\n DropzoneValueItem\r\n} from './Dropzone.types';\r\nimport { FilePreview } from './DropzoneFilePreview';\r\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\r\nimport { extractName, isFile } from './DropzoneUtils';\r\nimport { Button } from \"../Button\";\r\n\r\nconst formatBytesToMb = (bytes = 0) => `${(bytes / (1024 * 1024)).toFixed(0)} MB`;\r\n\r\n/**\r\n * Dropzone component - A drag-and-drop file upload area with image previews, error handling, and localization.\r\n *\r\n * @component\r\n * @param {DropzoneProps} props - The props for the Dropzone component.\r\n * @param {string[]} [props.acceptTypes=DEFAULT_FILE_TYPES] - Allowed file MIME types.\r\n * @param {number} props.maxSizeMB - Maximum allowed file size in megabytes.\r\n * @param {number} [props.maxFiles=1] - Maximum number of files that can be uploaded.\r\n * @param {DropzoneTranslations} props.translations - Translations for text labels.\r\n * @param {(errors: FileRejection[]) => void} [props.onErrors] - Callback triggered when file errors occur.\r\n * @param {boolean} [props.hideErrors=false] - Whether to hide error messages.\r\n * @param {boolean} [props.disabled=false] - Whether the dropzone is disabled.\r\n * @param {DropzoneStyles} [props.classNames] - Custom classNames for different dropzone states.\r\n * @param {DropzoneValueItem[]} [props.value=[]] - Current selected files or URLs.\r\n * @param {(items: DropzoneValueItem[]) => void} [props.onChangeValue] - Callback triggered when file selection changes.\r\n * @param {string} [props.className] - Additional class names for styling.\r\n * @param {React.Ref<HTMLDivElement>} ref - Ref for the root dropzone container.\r\n * @returns {JSX.Element} The rendered Dropzone component.\r\n */\r\nexport const Dropzone = forwardRef<DropzoneControl, DropzoneProps>(\r\n (\r\n {\r\n acceptTypes = DEFAULT_FILE_TYPES,\r\n maxSizeMB,\r\n maxFiles = 1,\r\n onErrors,\r\n hideErrors = false,\r\n disabled = false,\r\n classNames,\r\n value,\r\n onChangeValue,\r\n className,\r\n labelDropzonePrompt = 'Drop files here or click to select',\r\n labelDropzoneSubPrompt = '',\r\n labelOrClickToSelect = 'Upload file',\r\n labelSelectedFiles = 'Selected Files',\r\n labelUploadErrors = 'Upload Errors',\r\n labelFileTooLarge = 'File is too large',\r\n labelInvalidFileType = 'Invalid file type',\r\n labelVideoUploaded = 'Uploaded',\r\n labelVideoReplace = 'Replace',\r\n singlePick = false,\r\n labelDropzoneClassname,\r\n labelDropzoneSubClassname,\r\n isUploading = false,\r\n uploadProgress = 0,\r\n uploadLoadedBytes = 0,\r\n uploadTotalBytes = 0,\r\n onCancelUpload,\r\n labelUploadingTitle = 'Uploading video...',\r\n labelUploadingHint = 'Please do not close this page',\r\n labelUploadingActionCancel = 'Cancel',\r\n persistentDropzone = false,\r\n previewVariant = 'default',\r\n ...restProps\r\n },\r\n ref\r\n ) => {\r\n const [items, setItems] = useState<DropzoneValueItem[]>(value ?? []);\r\n const [fileErrors, setFileErrors] = useState<FileRejection[]>([]);\r\n const firstItem = items[0];\r\n const firstRejectedFile = fileErrors[0]?.file;\r\n const isSingleFile = singlePick && items.length > 0 && isFile(firstItem);\r\n const isSingleImage = isSingleFile && firstItem.type.includes('image');\r\n const isSingleVideo =\r\n isSingleFile &&\r\n firstItem.type.includes('video');\r\n const isSingleDocument = isSingleFile && !isSingleImage && !isSingleVideo;\r\n const hasRejectedSingleFile = singlePick && !items.length && Boolean(firstRejectedFile);\r\n const singleFileCard = isSingleDocument ? firstItem : firstRejectedFile;\r\n const hasSingleVideoPreview =\r\n singlePick && isSingleVideo;\r\n const shouldBlockRootOpen = hasSingleVideoPreview;\r\n const isContentPreviewMode = singlePick && items.length > 0;\r\n\r\n const onDrop = (acceptedFiles: File[], fileRejections: FileRejection[]) => {\r\n setFileErrors(fileRejections);\r\n onErrors?.(fileRejections);\r\n\r\n const newItems = singlePick\r\n ? acceptedFiles.slice(0, 1)\r\n : [...items, ...acceptedFiles].slice(0, maxFiles);\r\n\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n useEffect(() => {\r\n if (value) {\r\n setItems(value);\r\n }\r\n }, [value]);\r\n\r\n const removeItem = (\r\n event: React.MouseEvent<HTMLDivElement>,\r\n index: number\r\n ) => {\r\n if (disabled) return;\r\n event.stopPropagation();\r\n\r\n const newItems = items.filter((_, i) => i !== index);\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n const { getRootProps, getInputProps, isDragActive, open } = useDropzone({\r\n onDrop,\r\n accept: acceptTypes.reduce((acc, fileType) => {\r\n acc[fileType] = [];\r\n return acc;\r\n }, {} as Record<string, string[]>),\r\n maxSize: maxSizeMB * 1024 * 1024,\r\n maxFiles: singlePick ? 1 : maxFiles,\r\n disabled: disabled || isUploading,\r\n noClick: true,\r\n });\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n setItems,\r\n };\r\n }, []);\r\n\r\n const shouldRenderDetachedPreview =\r\n !isUploading && !singlePick && persistentDropzone && items.length > 0;\r\n\r\n const previewBlock = !isUploading && !singlePick && items.length > 0 && (\r\n <div className={cn('w-full mt-2', classNames?.previewWrapper)}>\r\n {previewVariant === 'default' && (\r\n <pre className=\"font-semibold text-gray-600\">\r\n {labelSelectedFiles}:\r\n </pre>\r\n )}\r\n <ul\r\n className={cn(\r\n 'mt-2 text-sm text-gray-500 flex flex-wrap items-start',\r\n previewVariant === 'image-grid'\r\n ? 'gap-2 justify-start'\r\n : 'gap-4 justify-center'\r\n )}\r\n >\r\n {items.map((item, index) => {\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const fileSize = isFile(item)\r\n ? (item.size / (1024 * 1024)).toFixed(2) + ' MB'\r\n : '';\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={cn(\r\n 'relative',\r\n previewVariant === 'image-grid'\r\n ? 'w-[75px] h-[75px]'\r\n : 'flex flex-col items-center gap-2'\r\n )}\r\n >\r\n <div className=\"relative w-full h-full\">\r\n <FilePreview item={item} styles={classNames} />\r\n <div\r\n className={cn(\r\n 'absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm',\r\n previewVariant === 'image-grid' && 'top-1 right-1 bg-white/90 rounded-full p-0.5'\r\n )}\r\n onClick={(event) => removeItem(event, index)}\r\n >\r\n <X size={16} strokeWidth={1} color=\"black\" />\r\n </div>\r\n </div>\r\n {previewVariant === 'default' && (\r\n <span className=\"inline-flex flex-col items-center\">\r\n <span className=\"max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap\">\r\n {fileName}\r\n </span>\r\n {fileSize && <span>({fileSize})</span>}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n </ul>\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"w-full\">\r\n <Card\r\n {...restProps}\r\n {...getRootProps({\r\n onClick: (event) => {\r\n if (disabled || isUploading) return;\r\n if (shouldBlockRootOpen) {\r\n restProps.onClick?.(event);\r\n return;\r\n }\r\n open();\r\n restProps.onClick?.(event);\r\n },\r\n })}\r\n className={cn(\r\n `w-full text-center flex flex-col items-center justify-center gap-6 cursor-pointer`,\r\n !isContentPreviewMode &&\r\n 'border border-dashed border-[#9368FF80] rounded-[8px] bg-[#FCFCFC] p-4',\r\n isContentPreviewMode && 'min-h-0 border-0 bg-transparent p-0',\r\n disabled && 'border-[#E4E4E7] pointer-events-none',\r\n fileErrors.length > 0 && !isContentPreviewMode && 'border-red-500',\r\n isDragActive && 'bg-gray-100',\r\n singlePick && 'shadow-none!',\r\n singlePick && items.length > 0 && !hasSingleVideoPreview && 'p-0! shadow-none!',\r\n hasSingleVideoPreview && 'h-auto! max-h-none! min-h-0! p-2!',\r\n className\r\n )}\r\n >\r\n <input {...getInputProps()} />\r\n\r\n {isUploading && (\r\n <div\r\n className=\"w-full h-full min-h-46 rounded-lg border border-[#E4E4E7] bg-[#FCFCFC] flex flex-col items-center justify-center gap-4 p-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"relative h-24 w-24\">\r\n <svg className=\"h-24 w-24\" viewBox=\"0 0 100 100\">\r\n <circle cx=\"50\" cy=\"50\" r=\"42\" stroke=\"#E6E1F5\" strokeWidth=\"8\" fill=\"none\" />\r\n </svg>\r\n <span className=\"absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground\">\r\n {Math.max(0, Math.min(100, Math.round(uploadProgress)))}%\r\n </span>\r\n </div>\r\n\r\n <div className=\"text-center\">\r\n <p className=\"text-xl font-semibold text-foreground\">{labelUploadingTitle}</p>\r\n <p className=\"text-sm text-[#666A78]\">\r\n {formatBytesToMb(uploadLoadedBytes)} of {formatBytesToMb(uploadTotalBytes)}\r\n </p>\r\n <p className=\"mt-2 text-sm text-[#666A78]\">{labelUploadingHint}</p>\r\n </div>\r\n\r\n <div className=\"w-full max-w-[520px] h-2 rounded-full bg-[#E6E1F5] overflow-hidden\">\r\n <div\r\n className=\"h-full bg-[#9368FF] transition-[width] duration-150 ease-linear\"\r\n style={{ width: `${Math.max(0, Math.min(100, uploadProgress))}%` }}\r\n />\r\n </div>\r\n\r\n {onCancelUpload && (\r\n <button\r\n type=\"button\"\r\n className=\"mt-1 h-10 min-w-36 rounded-md border border-[#E4E4E7] bg-white px-6 text-base font-medium text-foreground cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n onCancelUpload();\r\n }}\r\n >\r\n {labelUploadingActionCancel}\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading &&\r\n (items.length === 0 || (!singlePick && persistentDropzone)) &&\r\n fileErrors.length === 0 && (\r\n <div\r\n className={cn(\r\n 'flex flex-col items-center gap-2 w-full',\r\n classNames?.idleWrapper\r\n )}\r\n >\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]\">\r\n <UploadIcon className=\"size-6 text-[#9368FF]\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-center gap-1 w-full\">\r\n {!disabled && (\r\n <>\r\n <span\r\n className={cn(\r\n \"font-semibold text-[14px] leading-[125%] text-[#06080D] text-center w-full\",\r\n labelDropzoneClassname\r\n )}\r\n >\r\n {labelDropzonePrompt}\r\n </span>\r\n\r\n <span\r\n className={cn(\r\n \"font-medium text-[12px] leading-[120%] text-[#666A78] text-center w-full\",\r\n labelDropzoneSubClassname\r\n )}\r\n >\r\n {labelDropzoneSubPrompt}\r\n </span>\r\n </>\r\n )}\r\n </div>\r\n\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n size=\"md\"\r\n >\r\n {labelOrClickToSelect}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && fileErrors.length > 0 && !hasRejectedSingleFile && (\r\n <div className={cn('w-full mt-4', classNames?.errorWrapper)}>\r\n <span className=\"font-semibold text-red-500\">\r\n {labelUploadErrors}:\r\n </span>\r\n <ul className=\"mt-2 text-sm text-red-500 list-disc list-inside\">\r\n {fileErrors.map((fileRejection, index) => (\r\n <li key={index}>\r\n {fileRejection.file.name} (\r\n {(fileRejection.file.size / (1024 * 1024)).toFixed(2)} MB)\r\n {!hideErrors && (\r\n <ul className=\"ml-4 list-disc list-inside\">\r\n {fileRejection.errors.map((error, errorIndex) => (\r\n <li key={errorIndex}>\r\n {error.code === 'file-too-large' && labelFileTooLarge}\r\n {error.code === 'file-invalid-type' &&\r\n labelInvalidFileType}\r\n {error.code !== 'file-too-large' &&\r\n error.code !== 'file-invalid-type' &&\r\n error.message}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {!isUploading && Boolean(singlePick && items.length) && (\r\n <>\r\n {isSingleDocument ? (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {singleFileCard\r\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\r\n : ''}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <DropzoneSinglePickPreview\r\n item={items[0]}\r\n onRemoveClick={(e) => removeItem(e, 0)}\r\n onReplaceClick={(e) => {\r\n e.stopPropagation();\r\n if (disabled) return;\r\n open();\r\n }}\r\n labelUploaded={labelVideoUploaded}\r\n labelReplace={labelVideoReplace}\r\n disabled={disabled}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {!isUploading && hasRejectedSingleFile && (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {singleFileCard\r\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\r\n : ''}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setFileErrors([]);\r\n }}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4\">\r\n <InfoIcon size={20} color=\"#DC2626\" />\r\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\r\n {fileErrors[0]?.errors?.[0]?.code === 'file-too-large'\r\n ? labelFileTooLarge\r\n : fileErrors[0]?.errors?.[0]?.message || labelInvalidFileType}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!shouldRenderDetachedPreview && previewBlock}\r\n </Card>\r\n {shouldRenderDetachedPreview && <div className=\"w-full\">{previewBlock}</div>}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nDropzone.displayName = 'Dropzone';\r\n\r\n"],"names":["formatBytesToMb","bytes","Dropzone","forwardRef","acceptTypes","DEFAULT_FILE_TYPES","maxSizeMB","maxFiles","onErrors","hideErrors","disabled","classNames","value","onChangeValue","className","labelDropzonePrompt","labelDropzoneSubPrompt","labelOrClickToSelect","labelSelectedFiles","labelUploadErrors","labelFileTooLarge","labelInvalidFileType","labelVideoUploaded","labelVideoReplace","singlePick","labelDropzoneClassname","labelDropzoneSubClassname","isUploading","uploadProgress","uploadLoadedBytes","uploadTotalBytes","onCancelUpload","labelUploadingTitle","labelUploadingHint","labelUploadingActionCancel","persistentDropzone","previewVariant","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","firstItem","firstRejectedFile","isSingleFile","isFile","isSingleImage","isSingleVideo","isSingleDocument","hasRejectedSingleFile","singleFileCard","hasSingleVideoPreview","shouldBlockRootOpen","isContentPreviewMode","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","i","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","shouldRenderDetachedPreview","previewBlock","jsxs","cn","jsx","item","fileName","extractName","fileSize","FilePreview","X","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","e","InfoIcon"],"mappings":"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"}
|