@oneplatformdev/ui 0.1.99-beta.302 → 0.1.99-beta.304
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/.storybook/Wrappers.js.map +1 -1
- 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 +4 -2
- package/AlertDialog/AlertDialog.stories.js.map +1 -1
- package/AlertDialog/AlertDialogRoot.js +20 -18
- 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 +11 -10
- package/Button/Button.js.map +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 +22 -19
- package/ButtonIcon/ButtonIcon.js.map +1 -1
- package/ButtonIcon/ButtonIcon.stories.js.map +1 -1
- package/ButtonIcon/buttonIconVariants.js.map +1 -1
- package/CHANGELOG.md +3487 -3487
- package/Calendar/Calendar.js +6 -4
- package/Calendar/Calendar.js.map +1 -1
- package/Card/Card.js.map +1 -1
- package/Carousel/Carousel.js +7 -6
- package/Carousel/Carousel.js.map +1 -1
- package/Chart/Chart.js.map +1 -1
- package/Checkbox/Checkbox.js +1 -0
- 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 +19 -18
- package/Combobox/ComboboxOptionItem.js.map +1 -1
- package/Combobox/ComboboxRenderContent.d.ts.map +1 -1
- package/Combobox/ComboboxRenderContent.js +47 -43
- package/Combobox/ComboboxRenderContent.js.map +1 -1
- package/Combobox/ComboboxRenderOptions.js +5 -5
- package/Combobox/ComboboxRenderOptions.js.map +1 -1
- package/Combobox/ComboboxRenderTrigger.js +20 -18
- package/Combobox/ComboboxRenderTrigger.js.map +1 -1
- package/Command/Command.js +22 -21
- 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 +26 -24
- package/DataTable/DataTable.js.map +1 -1
- package/DataTable/DataTableColumnFilter.js +7 -6
- package/DataTable/DataTableColumnFilter.js.map +1 -1
- package/DataTable/useDataTable.js.map +1 -1
- package/DatePicker/DatePicker.js +2 -1
- package/DatePicker/DatePicker.js.map +1 -1
- package/Dialog/Dialog.js +21 -20
- package/Dialog/Dialog.js.map +1 -1
- package/Dialog/Dialog.stories.js +15 -14
- 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.js +81 -80
- package/Dropzone/Dropzone.js.map +1 -1
- package/Dropzone/Dropzone.stories.js.map +1 -1
- package/Dropzone/Dropzone.types.js.map +1 -1
- package/Dropzone/DropzoneCoverPreview.js.map +1 -1
- package/Dropzone/DropzoneFilePreview.js.map +1 -1
- package/Dropzone/DropzoneSinglePickPreview.js +3 -2
- package/Dropzone/DropzoneSinglePickPreview.js.map +1 -1
- package/Dropzone/DropzoneUtils.js.map +1 -1
- package/Form/Form.js +15 -14
- package/Form/Form.js.map +1 -1
- package/Form/FormRenderControl.js +7 -6
- package/Form/FormRenderControl.js.map +1 -1
- package/Form/Form_old.js +5 -4
- 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/FormCombobox/FormCombobox.stories.js +19 -17
- package/FormCombobox/FormCombobox.stories.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 +13 -12
- package/FormInput/FormInput.stories.js.map +1 -1
- package/FormRadio/FormRadio.js.map +1 -1
- package/FormSelect/FormSelect.js +15 -12
- 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.js.map +1 -1
- package/Input/Input.stories.js.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 +5 -4
- 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 +1 -0
- 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 +7 -6
- 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 +21 -20
- 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 +26 -21
- 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 +4 -3
- 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 +289 -289
- package/package.json +4 -4
- package/vite-env.d.ts +7 -7
package/Dropzone/Dropzone.js
CHANGED
|
@@ -1,67 +1,68 @@
|
|
|
1
|
-
import { jsxs as
|
|
1
|
+
import { jsxs as r, jsx as t, Fragment as V } from "react/jsx-runtime";
|
|
2
2
|
import { X as M, Plus as ke, UploadIcon as We, FileTextIcon as ee, InfoIcon as te } from "lucide-react";
|
|
3
|
-
import { forwardRef as _e, useState as
|
|
3
|
+
import { forwardRef as _e, useState as re, useEffect as $e, useImperativeHandle as Le } from "react";
|
|
4
4
|
import { useDropzone as Ge } from "react-dropzone";
|
|
5
5
|
import { cn as x } from "@oneplatformdev/utils";
|
|
6
6
|
import { Card as Xe } from "../Card/Card.js";
|
|
7
7
|
import { DEFAULT_FILE_TYPES as Ke } from "./Dropzone.types.js";
|
|
8
|
-
import { DropzoneCoverPreview as
|
|
8
|
+
import { DropzoneCoverPreview as le } from "./DropzoneCoverPreview.js";
|
|
9
9
|
import { DropzoneFileCard as Oe } from "./DropzoneFileCard.js";
|
|
10
10
|
import { FilePreview as Te } from "./DropzoneFilePreview.js";
|
|
11
11
|
import { DropzoneSinglePickPreview as qe } from "./DropzoneSinglePickPreview.js";
|
|
12
12
|
import { isFile as F, isVideoUrl as He, extractName as oe } from "./DropzoneUtils.js";
|
|
13
|
-
import Je from "
|
|
14
|
-
import
|
|
15
|
-
import
|
|
13
|
+
import { Button as Je } from "../Button/Button.js";
|
|
14
|
+
import "../Button/buttonVariants.js";
|
|
15
|
+
import Pe from "./icons/file-csv.svg.js";
|
|
16
|
+
import Ye from "./icons/file-doc.svg.js";
|
|
17
|
+
import Ze from "./icons/file-docx.svg.js";
|
|
16
18
|
import ie from "./icons/file-jpg.svg.js";
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import
|
|
19
|
+
import Qe from "./icons/file-pdf.svg.js";
|
|
20
|
+
import Ue from "./icons/file-png.svg.js";
|
|
21
|
+
import Ve from "./icons/file-ppt.svg.js";
|
|
22
|
+
import et from "./icons/file-pptx.svg.js";
|
|
23
|
+
import tt from "./icons/file-rar.svg.js";
|
|
24
|
+
import rt from "./icons/file-svg.svg.js";
|
|
23
25
|
import lt from "./icons/file-webp.svg.js";
|
|
24
|
-
import
|
|
25
|
-
import
|
|
26
|
-
import
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
if (!r || r < 0) return "0 KB";
|
|
26
|
+
import ot from "./icons/file-xls.svg.js";
|
|
27
|
+
import it from "./icons/file-xlsx.svg.js";
|
|
28
|
+
import nt from "./icons/file-zip.svg.js";
|
|
29
|
+
const z = (l = 0) => {
|
|
30
|
+
if (!l || l < 0) return "0 KB";
|
|
30
31
|
const s = 1024, d = s * 1024, m = d * 1024;
|
|
31
|
-
if (
|
|
32
|
-
if (
|
|
33
|
-
const a =
|
|
32
|
+
if (l >= m) return `${(l / m).toFixed(2)} GB`;
|
|
33
|
+
if (l >= d) {
|
|
34
|
+
const a = l / d;
|
|
34
35
|
return `${a >= 100 ? a.toFixed(0) : a.toFixed(2)} MB`;
|
|
35
36
|
}
|
|
36
|
-
return
|
|
37
|
+
return l >= s ? `${(l / s).toFixed(l / s >= 100 ? 0 : 1)} KB` : `${l} B`;
|
|
37
38
|
}, st = {
|
|
38
|
-
csv:
|
|
39
|
-
doc:
|
|
40
|
-
docx:
|
|
39
|
+
csv: Pe,
|
|
40
|
+
doc: Ye,
|
|
41
|
+
docx: Ze,
|
|
41
42
|
jpg: ie,
|
|
42
43
|
jpeg: ie,
|
|
43
|
-
pdf:
|
|
44
|
-
png:
|
|
45
|
-
ppt:
|
|
46
|
-
pptx:
|
|
47
|
-
rar:
|
|
48
|
-
svg:
|
|
44
|
+
pdf: Qe,
|
|
45
|
+
png: Ue,
|
|
46
|
+
ppt: Ve,
|
|
47
|
+
pptx: et,
|
|
48
|
+
rar: tt,
|
|
49
|
+
svg: rt,
|
|
49
50
|
webp: lt,
|
|
50
|
-
xls:
|
|
51
|
-
xlsx:
|
|
52
|
-
zip:
|
|
53
|
-
}, ct = (
|
|
54
|
-
if (!
|
|
55
|
-
const s =
|
|
51
|
+
xls: ot,
|
|
52
|
+
xlsx: it,
|
|
53
|
+
zip: nt
|
|
54
|
+
}, ct = (l) => {
|
|
55
|
+
if (!l) return "";
|
|
56
|
+
const s = l.toLowerCase().split(".");
|
|
56
57
|
return s.length > 1 ? s[s.length - 1] : "";
|
|
57
|
-
}, ne = (
|
|
58
|
-
const s = ct(
|
|
58
|
+
}, ne = (l) => {
|
|
59
|
+
const s = ct(l);
|
|
59
60
|
return st[s] ?? null;
|
|
60
|
-
}, at = (
|
|
61
|
-
if (
|
|
62
|
-
if (
|
|
63
|
-
for (let d = 0; d <
|
|
64
|
-
const m =
|
|
61
|
+
}, at = (l, s) => {
|
|
62
|
+
if (l === s) return !0;
|
|
63
|
+
if (l.length !== s.length) return !1;
|
|
64
|
+
for (let d = 0; d < l.length; d++) {
|
|
65
|
+
const m = l[d], a = s[d];
|
|
65
66
|
if (m !== a) {
|
|
66
67
|
if (typeof m == "string" && typeof a == "string") {
|
|
67
68
|
if (m !== a) return !1;
|
|
@@ -78,7 +79,7 @@ const z = (r = 0) => {
|
|
|
78
79
|
return !0;
|
|
79
80
|
}, dt = _e(
|
|
80
81
|
({
|
|
81
|
-
acceptTypes:
|
|
82
|
+
acceptTypes: l = Ke,
|
|
82
83
|
maxSizeMB: s,
|
|
83
84
|
maxFiles: d = 1,
|
|
84
85
|
onErrors: m,
|
|
@@ -116,7 +117,7 @@ const z = (r = 0) => {
|
|
|
116
117
|
coverFirstItem: ze = !1,
|
|
117
118
|
...$
|
|
118
119
|
}, be) => {
|
|
119
|
-
const [o, A] =
|
|
120
|
+
const [o, A] = re(I ?? []), [u, P] = re([]), w = o[0], L = u[0]?.file, Ie = !!L?.type?.includes("image"), G = n && o.length > 0 && F(w), Ee = G && w.type.includes("image"), Y = G && w.type.includes("video") || n && o.length > 0 && typeof w == "string" && He(w), X = G && !Ee && !Y, Z = n && !o.length && !!L && !Ie, v = X ? w : L, S = ne(v?.name), j = n && Y, De = j, B = n && o.length > 0, ye = B && !X && !j, N = h === "file-list" && !n && o.length >= d, Ae = (e, c) => {
|
|
120
121
|
P(c), m?.(c);
|
|
121
122
|
const i = n ? e.slice(0, 1) : [...o, ...e].slice(0, d);
|
|
122
123
|
A(i), q?.(i);
|
|
@@ -131,7 +132,7 @@ const z = (r = 0) => {
|
|
|
131
132
|
A(i), q?.(i);
|
|
132
133
|
}, { getRootProps: Se, getInputProps: je, isDragActive: Be, open: K } = Ge({
|
|
133
134
|
onDrop: Ae,
|
|
134
|
-
accept:
|
|
135
|
+
accept: l.reduce((e, c) => (e[c] = [], e), {}),
|
|
135
136
|
maxSize: s * 1024 * 1024,
|
|
136
137
|
maxFiles: n ? 1 : d,
|
|
137
138
|
disabled: f || p || N,
|
|
@@ -140,8 +141,8 @@ const z = (r = 0) => {
|
|
|
140
141
|
Le(be, () => ({
|
|
141
142
|
setItems: A
|
|
142
143
|
}), []);
|
|
143
|
-
const D = ze && h === "image-grid" && !n && o.length > 0, O = !p && !n && _ && o.length > 0, T = D ? o.slice(1) : o, Q = !f && !n && h === "image-grid" && o.length > 0 && o.length < d, Me = !n && h === "image-grid" && (_ || o.length === 0), U = !p && !n && (T.length > 0 || Q) && /* @__PURE__ */
|
|
144
|
-
h === "default" && /* @__PURE__ */
|
|
144
|
+
const D = ze && h === "image-grid" && !n && o.length > 0, O = !p && !n && _ && o.length > 0, T = D ? o.slice(1) : o, Q = !f && !n && h === "image-grid" && o.length > 0 && o.length < d, Me = !n && h === "image-grid" && (_ || o.length === 0), U = !p && !n && (T.length > 0 || Q) && /* @__PURE__ */ r("div", { className: x("w-full mt-2", b?.previewWrapper), children: [
|
|
145
|
+
h === "default" && /* @__PURE__ */ r("pre", { className: "font-semibold text-gray-600", children: [
|
|
145
146
|
de,
|
|
146
147
|
":"
|
|
147
148
|
] }),
|
|
@@ -158,7 +159,7 @@ const z = (r = 0) => {
|
|
|
158
159
|
},
|
|
159
160
|
c
|
|
160
161
|
);
|
|
161
|
-
}) }) : /* @__PURE__ */
|
|
162
|
+
}) }) : /* @__PURE__ */ r(
|
|
162
163
|
"ul",
|
|
163
164
|
{
|
|
164
165
|
className: x(
|
|
@@ -168,7 +169,7 @@ const z = (r = 0) => {
|
|
|
168
169
|
children: [
|
|
169
170
|
T.map((e, c) => {
|
|
170
171
|
const i = D ? c + 1 : c, g = F(e) ? e.name : oe(e), C = F(e) ? z(e.size) : "";
|
|
171
|
-
return /* @__PURE__ */
|
|
172
|
+
return /* @__PURE__ */ r(
|
|
172
173
|
"li",
|
|
173
174
|
{
|
|
174
175
|
className: x(
|
|
@@ -176,8 +177,8 @@ const z = (r = 0) => {
|
|
|
176
177
|
h === "image-grid" ? "w-[75px] h-[75px]" : "flex flex-col items-center gap-2"
|
|
177
178
|
),
|
|
178
179
|
children: [
|
|
179
|
-
/* @__PURE__ */
|
|
180
|
-
h === "image-grid" ? /* @__PURE__ */ t(
|
|
180
|
+
/* @__PURE__ */ r("div", { className: "relative w-full h-full", children: [
|
|
181
|
+
h === "image-grid" ? /* @__PURE__ */ t(le, { item: e, className: "rounded-[8px]" }) : /* @__PURE__ */ t(Te, { item: e, styles: b }),
|
|
181
182
|
/* @__PURE__ */ t(
|
|
182
183
|
"div",
|
|
183
184
|
{
|
|
@@ -190,9 +191,9 @@ const z = (r = 0) => {
|
|
|
190
191
|
}
|
|
191
192
|
)
|
|
192
193
|
] }),
|
|
193
|
-
h === "default" && /* @__PURE__ */
|
|
194
|
+
h === "default" && /* @__PURE__ */ r("span", { className: "inline-flex flex-col items-center", children: [
|
|
194
195
|
/* @__PURE__ */ t("span", { className: "max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap", children: g }),
|
|
195
|
-
C && /* @__PURE__ */
|
|
196
|
+
C && /* @__PURE__ */ r("span", { children: [
|
|
196
197
|
"(",
|
|
197
198
|
C,
|
|
198
199
|
")"
|
|
@@ -218,8 +219,8 @@ const z = (r = 0) => {
|
|
|
218
219
|
}
|
|
219
220
|
)
|
|
220
221
|
] });
|
|
221
|
-
return /* @__PURE__ */
|
|
222
|
-
/* @__PURE__ */
|
|
222
|
+
return /* @__PURE__ */ r("div", { className: "w-full select-none", children: [
|
|
223
|
+
/* @__PURE__ */ r(
|
|
223
224
|
Xe,
|
|
224
225
|
{
|
|
225
226
|
...$,
|
|
@@ -252,22 +253,22 @@ const z = (r = 0) => {
|
|
|
252
253
|
),
|
|
253
254
|
children: [
|
|
254
255
|
/* @__PURE__ */ t("input", { ...je() }),
|
|
255
|
-
p && /* @__PURE__ */
|
|
256
|
+
p && /* @__PURE__ */ r(
|
|
256
257
|
"div",
|
|
257
258
|
{
|
|
258
259
|
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",
|
|
259
260
|
onClick: (e) => e.stopPropagation(),
|
|
260
261
|
children: [
|
|
261
|
-
/* @__PURE__ */
|
|
262
|
+
/* @__PURE__ */ r("div", { className: "relative h-24 w-24", children: [
|
|
262
263
|
/* @__PURE__ */ t("svg", { className: "h-24 w-24", viewBox: "0 0 100 100", children: /* @__PURE__ */ t("circle", { cx: "50", cy: "50", r: "42", stroke: "#E6E1F5", strokeWidth: "8", fill: "none" }) }),
|
|
263
|
-
/* @__PURE__ */
|
|
264
|
+
/* @__PURE__ */ r("span", { className: "absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground", children: [
|
|
264
265
|
Math.max(0, Math.min(100, Math.round(H))),
|
|
265
266
|
"%"
|
|
266
267
|
] })
|
|
267
268
|
] }),
|
|
268
|
-
/* @__PURE__ */
|
|
269
|
+
/* @__PURE__ */ r("div", { className: "text-center", children: [
|
|
269
270
|
/* @__PURE__ */ t("p", { className: "text-xl font-semibold text-foreground", children: Ne }),
|
|
270
|
-
/* @__PURE__ */
|
|
271
|
+
/* @__PURE__ */ r("p", { className: "text-sm text-[#666A78]", children: [
|
|
271
272
|
z(ue),
|
|
272
273
|
" ",
|
|
273
274
|
ve,
|
|
@@ -297,13 +298,13 @@ const z = (r = 0) => {
|
|
|
297
298
|
]
|
|
298
299
|
}
|
|
299
300
|
),
|
|
300
|
-
!p && D && /* @__PURE__ */
|
|
301
|
+
!p && D && /* @__PURE__ */ r(
|
|
301
302
|
"div",
|
|
302
303
|
{
|
|
303
304
|
className: "absolute inset-0 rounded-[8px] overflow-hidden",
|
|
304
305
|
onClick: (e) => e.stopPropagation(),
|
|
305
306
|
children: [
|
|
306
|
-
/* @__PURE__ */ t(
|
|
307
|
+
/* @__PURE__ */ t(le, { item: o[0], className: "rounded-[8px]" }),
|
|
307
308
|
/* @__PURE__ */ t(
|
|
308
309
|
"div",
|
|
309
310
|
{
|
|
@@ -315,7 +316,7 @@ const z = (r = 0) => {
|
|
|
315
316
|
]
|
|
316
317
|
}
|
|
317
318
|
),
|
|
318
|
-
!p && (o.length === 0 || !n && _) && (u.length === 0 || !n) && /* @__PURE__ */
|
|
319
|
+
!p && (o.length === 0 || !n && _) && (u.length === 0 || !n) && /* @__PURE__ */ r(
|
|
319
320
|
"div",
|
|
320
321
|
{
|
|
321
322
|
className: x(
|
|
@@ -342,7 +343,7 @@ const z = (r = 0) => {
|
|
|
342
343
|
)
|
|
343
344
|
}
|
|
344
345
|
),
|
|
345
|
-
/* @__PURE__ */ t("div", { className: "flex flex-col items-center gap-1 w-full", children: !f && /* @__PURE__ */
|
|
346
|
+
/* @__PURE__ */ t("div", { className: "flex flex-col items-center gap-1 w-full", children: !f && /* @__PURE__ */ r(V, { children: [
|
|
346
347
|
/* @__PURE__ */ t(
|
|
347
348
|
"span",
|
|
348
349
|
{
|
|
@@ -366,7 +367,7 @@ const z = (r = 0) => {
|
|
|
366
367
|
)
|
|
367
368
|
] }) }),
|
|
368
369
|
!f && /* @__PURE__ */ t(
|
|
369
|
-
|
|
370
|
+
Je,
|
|
370
371
|
{
|
|
371
372
|
type: "button",
|
|
372
373
|
size: "md",
|
|
@@ -377,31 +378,31 @@ const z = (r = 0) => {
|
|
|
377
378
|
]
|
|
378
379
|
}
|
|
379
380
|
),
|
|
380
|
-
!p && n && u.length > 0 && !Z && /* @__PURE__ */
|
|
381
|
-
/* @__PURE__ */
|
|
381
|
+
!p && n && u.length > 0 && !Z && /* @__PURE__ */ r("div", { className: x("w-full mt-4", b?.errorWrapper), children: [
|
|
382
|
+
/* @__PURE__ */ r("span", { className: "font-semibold text-red-500", children: [
|
|
382
383
|
me,
|
|
383
384
|
":"
|
|
384
385
|
] }),
|
|
385
|
-
/* @__PURE__ */ t("ul", { className: "mt-2 text-sm text-red-500 list-disc list-inside", children: u.map((e, c) => /* @__PURE__ */
|
|
386
|
+
/* @__PURE__ */ t("ul", { className: "mt-2 text-sm text-red-500 list-disc list-inside", children: u.map((e, c) => /* @__PURE__ */ r("li", { children: [
|
|
386
387
|
e.file.name,
|
|
387
388
|
" (",
|
|
388
389
|
z(e.file.size),
|
|
389
390
|
")",
|
|
390
|
-
!a && /* @__PURE__ */ t("ul", { className: "ml-4 list-disc list-inside", children: e.errors.map((i, g) => /* @__PURE__ */
|
|
391
|
+
!a && /* @__PURE__ */ t("ul", { className: "ml-4 list-disc list-inside", children: e.errors.map((i, g) => /* @__PURE__ */ r("li", { children: [
|
|
391
392
|
i.code === "file-too-large" && k,
|
|
392
393
|
i.code === "file-invalid-type" && y,
|
|
393
394
|
i.code !== "file-too-large" && i.code !== "file-invalid-type" && i.message
|
|
394
395
|
] }, g)) })
|
|
395
396
|
] }, c)) })
|
|
396
397
|
] }),
|
|
397
|
-
!p && !!(n && o.length) && /* @__PURE__ */ t(V, { children: X ? /* @__PURE__ */
|
|
398
|
+
!p && !!(n && o.length) && /* @__PURE__ */ t(V, { children: X ? /* @__PURE__ */ r(
|
|
398
399
|
"div",
|
|
399
400
|
{
|
|
400
401
|
className: "w-full max-w-[502px] flex flex-col items-center gap-4",
|
|
401
402
|
onClick: (e) => e.stopPropagation(),
|
|
402
403
|
children: [
|
|
403
404
|
/* @__PURE__ */ t("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: R }),
|
|
404
|
-
/* @__PURE__ */
|
|
405
|
+
/* @__PURE__ */ r("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
|
|
405
406
|
S ? /* @__PURE__ */ t(
|
|
406
407
|
"img",
|
|
407
408
|
{
|
|
@@ -410,7 +411,7 @@ const z = (r = 0) => {
|
|
|
410
411
|
className: "size-10 shrink-0"
|
|
411
412
|
}
|
|
412
413
|
) : /* @__PURE__ */ t("div", { className: "size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0", children: /* @__PURE__ */ t(ee, { size: 20 }) }),
|
|
413
|
-
/* @__PURE__ */
|
|
414
|
+
/* @__PURE__ */ r("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
|
|
414
415
|
/* @__PURE__ */ t("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children: W?.name || v?.name }),
|
|
415
416
|
/* @__PURE__ */ t("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: z(W?.size || v?.size) })
|
|
416
417
|
] }),
|
|
@@ -440,14 +441,14 @@ const z = (r = 0) => {
|
|
|
440
441
|
playerTranslations: Ce
|
|
441
442
|
}
|
|
442
443
|
) }),
|
|
443
|
-
!p && Z && /* @__PURE__ */
|
|
444
|
+
!p && Z && /* @__PURE__ */ r(
|
|
444
445
|
"div",
|
|
445
446
|
{
|
|
446
447
|
className: "w-full max-w-[502px] flex flex-col items-center gap-4",
|
|
447
448
|
onClick: (e) => e.stopPropagation(),
|
|
448
449
|
children: [
|
|
449
450
|
/* @__PURE__ */ t("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: R }),
|
|
450
|
-
/* @__PURE__ */
|
|
451
|
+
/* @__PURE__ */ r("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
|
|
451
452
|
S ? /* @__PURE__ */ t(
|
|
452
453
|
"img",
|
|
453
454
|
{
|
|
@@ -456,7 +457,7 @@ const z = (r = 0) => {
|
|
|
456
457
|
className: "size-10 shrink-0"
|
|
457
458
|
}
|
|
458
459
|
) : /* @__PURE__ */ t("div", { className: "size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0", children: /* @__PURE__ */ t(ee, { size: 20 }) }),
|
|
459
|
-
/* @__PURE__ */
|
|
460
|
+
/* @__PURE__ */ r("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
|
|
460
461
|
/* @__PURE__ */ t("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children: v?.name }),
|
|
461
462
|
/* @__PURE__ */ t("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: v ? `${(v.size / (1024 * 1024)).toFixed(0)} MB` : "" })
|
|
462
463
|
] }),
|
|
@@ -471,7 +472,7 @@ const z = (r = 0) => {
|
|
|
471
472
|
}
|
|
472
473
|
)
|
|
473
474
|
] }),
|
|
474
|
-
/* @__PURE__ */
|
|
475
|
+
/* @__PURE__ */ r("div", { className: "w-full bg-[#DC26260F] p-4 flex items-start gap-4", children: [
|
|
475
476
|
/* @__PURE__ */ t(te, { size: 20, color: "#DC2626" }),
|
|
476
477
|
/* @__PURE__ */ t("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: u[0]?.errors?.[0]?.code === "file-too-large" ? k : u[0]?.errors?.[0]?.message || y })
|
|
477
478
|
] })
|
|
@@ -489,13 +490,13 @@ const z = (r = 0) => {
|
|
|
489
490
|
className: x("w-full mt-4 flex flex-col gap-2", b?.errorWrapper),
|
|
490
491
|
children: u.map((e, c) => {
|
|
491
492
|
const i = e.errors[0], g = i?.code === "file-too-large" ? k : i?.code === "file-invalid-type" ? y : i?.message || y;
|
|
492
|
-
return /* @__PURE__ */
|
|
493
|
+
return /* @__PURE__ */ r(
|
|
493
494
|
"div",
|
|
494
495
|
{
|
|
495
496
|
className: "w-full bg-[#DC26260F] p-4 flex items-start gap-4 rounded-[8px]",
|
|
496
497
|
children: [
|
|
497
498
|
/* @__PURE__ */ t(te, { size: 20, color: "#DC2626", className: "shrink-0" }),
|
|
498
|
-
/* @__PURE__ */
|
|
499
|
+
/* @__PURE__ */ r("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: [
|
|
499
500
|
/* @__PURE__ */ t("span", { className: "font-semibold", children: e.file.name }),
|
|
500
501
|
" — ",
|
|
501
502
|
g
|
package/Dropzone/Dropzone.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropzone.js","sources":["../../src/Dropzone/Dropzone.tsx"],"sourcesContent":["import { FileTextIcon, InfoIcon, Plus, 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 { DropzoneCoverPreview } from './DropzoneCoverPreview';\r\nimport { DropzoneFileCard } from './DropzoneFileCard';\r\nimport { FilePreview } from './DropzoneFilePreview';\r\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\r\nimport { extractName, isFile, isVideoUrl } from './DropzoneUtils';\r\nimport { Button } from \"../Button\";\r\nimport fileCsvIcon from './icons/file-csv.svg';\r\nimport fileDocIcon from './icons/file-doc.svg';\r\nimport fileDocxIcon from './icons/file-docx.svg';\r\nimport fileJpgIcon from './icons/file-jpg.svg';\r\nimport filePdfIcon from './icons/file-pdf.svg';\r\nimport filePngIcon from './icons/file-png.svg';\r\nimport filePptIcon from './icons/file-ppt.svg';\r\nimport filePptxIcon from './icons/file-pptx.svg';\r\nimport fileRarIcon from './icons/file-rar.svg';\r\nimport fileSvgIcon from './icons/file-svg.svg';\r\nimport fileWebpIcon from './icons/file-webp.svg';\r\nimport fileXlsIcon from './icons/file-xls.svg';\r\nimport fileXlsxIcon from './icons/file-xlsx.svg';\r\nimport fileZipIcon from './icons/file-zip.svg';\r\n\r\nconst formatFileSize = (bytes = 0): string => {\r\n if (!bytes || bytes < 0) return '0 KB';\r\n const KB = 1024;\r\n const MB = KB * 1024;\r\n const GB = MB * 1024;\r\n if (bytes >= GB) return `${(bytes / GB).toFixed(2)} GB`;\r\n if (bytes >= MB) {\r\n const mb = bytes / MB;\r\n return `${mb >= 100 ? mb.toFixed(0) : mb.toFixed(2)} MB`;\r\n }\r\n if (bytes >= KB) return `${(bytes / KB).toFixed(bytes / KB >= 100 ? 0 : 1)} KB`;\r\n return `${bytes} B`;\r\n};\r\nconst FILE_EXT_ICON_MAP: Record<string, string> = {\r\n csv: fileCsvIcon,\r\n doc: fileDocIcon,\r\n docx: fileDocxIcon,\r\n jpg: fileJpgIcon,\r\n jpeg: fileJpgIcon,\r\n pdf: filePdfIcon,\r\n png: filePngIcon,\r\n ppt: filePptIcon,\r\n pptx: filePptxIcon,\r\n rar: fileRarIcon,\r\n svg: fileSvgIcon,\r\n webp: fileWebpIcon,\r\n xls: fileXlsIcon,\r\n xlsx: fileXlsxIcon,\r\n zip: fileZipIcon,\r\n};\r\n\r\nconst getFileExtension = (fileName?: string) => {\r\n if (!fileName) return '';\r\n const parts = fileName.toLowerCase().split('.');\r\n return parts.length > 1 ? parts[parts.length - 1] : '';\r\n};\r\n\r\nconst getFileTypeIconByName = (fileName?: string) => {\r\n const extension = getFileExtension(fileName);\r\n return FILE_EXT_ICON_MAP[extension] ?? null;\r\n};\r\nconst areItemsEqual = (a: DropzoneValueItem[], b: DropzoneValueItem[]) => {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n const left = a[i];\r\n const right = b[i];\r\n\r\n if (left === right) continue;\r\n\r\n if (typeof left === 'string' && typeof right === 'string') {\r\n if (left !== right) return false;\r\n continue;\r\n }\r\n\r\n if (isFile(left) && isFile(right)) {\r\n if (\r\n left.name !== right.name ||\r\n left.size !== right.size ||\r\n left.type !== right.type ||\r\n left.lastModified !== right.lastModified\r\n ) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n};\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 labelUploadingOf = 'of',\r\n playerTranslations,\r\n singlePickFileInfo,\r\n persistentDropzone = false,\r\n previewVariant = 'default',\r\n coverFirstItem = false,\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 isRejectedImage = Boolean(firstRejectedFile?.type?.includes('image'));\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 && firstItem.type.includes('video')) ||\r\n (singlePick && items.length > 0 && typeof firstItem === 'string' && isVideoUrl(firstItem));\r\n const isSingleDocument = isSingleFile && !isSingleImage && !isSingleVideo;\r\n const hasRejectedSingleFile = singlePick && !items.length && Boolean(firstRejectedFile);\r\n const hasRejectedSingleDocumentFile = hasRejectedSingleFile && !isRejectedImage;\r\n const singleFileCard = isSingleDocument ? firstItem : firstRejectedFile;\r\n const singleFileCardIcon = getFileTypeIconByName(singleFileCard?.name);\r\n const hasSingleVideoPreview =\r\n singlePick && isSingleVideo;\r\n const shouldBlockRootOpen = hasSingleVideoPreview;\r\n const isContentPreviewMode = singlePick && items.length > 0;\r\n const isSingleImagePreview =\r\n isContentPreviewMode && !isSingleDocument && !hasSingleVideoPreview;\r\n\r\n // Тільки для мультизавантаження списком (file-list): коли набрали ліміт —\r\n // робимо зону неактивною й сірою (картки нижче лишаються інтерактивними).\r\n const isFileListLimitReached =\r\n previewVariant === 'file-list' && !singlePick && items.length >= maxFiles;\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 && !areItemsEqual(items, value)) {\r\n setItems(value);\r\n }\r\n }, [items, 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 || isFileListLimitReached,\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 isCoverMode =\r\n coverFirstItem && previewVariant === 'image-grid' && !singlePick && items.length > 0;\r\n\r\n const shouldRenderDetachedPreview =\r\n !isUploading && !singlePick && persistentDropzone && items.length > 0;\r\n\r\n const restItemsForGrid = isCoverMode ? items.slice(1) : items;\r\n\r\n const showAddMoreTile =\r\n !disabled &&\r\n !singlePick &&\r\n previewVariant === 'image-grid' &&\r\n items.length > 0 &&\r\n items.length < maxFiles;\r\n\r\n // For multi image selection (image-grid) keep the drop area at a 16:9 ratio.\r\n // Use aspect-ratio (not a fixed height) so it follows whatever width the\r\n // consumer sets via className. Skipped when previews fill the card.\r\n const isImageGridDropArea =\r\n !singlePick &&\r\n previewVariant === 'image-grid' &&\r\n (persistentDropzone || items.length === 0);\r\n\r\n const previewBlock =\r\n !isUploading &&\r\n !singlePick &&\r\n (restItemsForGrid.length > 0 || showAddMoreTile) && (\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 {previewVariant === 'file-list' ? (\r\n <div className=\"mt-2 flex flex-col gap-2\">\r\n {restItemsForGrid.map((item, index) => {\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const sizeLabel = isFile(item) ? formatFileSize(item.size) : '';\r\n return (\r\n <DropzoneFileCard\r\n key={index}\r\n name={fileName}\r\n sizeLabel={sizeLabel}\r\n iconSrc={getFileTypeIconByName(fileName)}\r\n disabled={disabled}\r\n onRemove={(event) => removeItem(event, index)}\r\n />\r\n );\r\n })}\r\n </div>\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 {restItemsForGrid.map((item, gridIndex) => {\r\n const index = isCoverMode ? gridIndex + 1 : gridIndex;\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const fileSize = isFile(item) ? formatFileSize(item.size) : '';\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 {previewVariant === 'image-grid' ? (\r\n <DropzoneCoverPreview item={item} className=\"rounded-[8px]\" />\r\n ) : (\r\n <FilePreview item={item} styles={classNames} />\r\n )}\r\n <div\r\n className={cn(\r\n 'absolute top-0 right-0 z-20 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 {showAddMoreTile && (\r\n <li\r\n key=\"add-more\"\r\n className=\"relative w-[75px] h-[75px] flex items-center justify-center rounded-[8px] border border-dashed border-[#9368FF80] bg-[#FCFCFC] cursor-pointer hover:bg-[#9368FF0F]\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n if (disabled || isUploading) return;\r\n open();\r\n }}\r\n >\r\n <div className=\"flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]\">\r\n <Plus size={16} className=\"text-[#9368FF]\" />\r\n </div>\r\n </li>\r\n )}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"w-full select-none\">\r\n <Card\r\n {...restProps}\r\n {...getRootProps({\r\n onClick: (event) => {\r\n if (disabled || isUploading || isFileListLimitReached) 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 isImageGridDropArea && 'aspect-video h-auto',\r\n isCoverMode && 'relative',\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 isSingleImagePreview && 'h-64',\r\n isFileListLimitReached &&\r\n shouldRenderDetachedPreview &&\r\n 'border-[#E4E4E7] bg-[#F5F5F5] cursor-default pointer-events-none',\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 {formatFileSize(uploadLoadedBytes)} {labelUploadingOf} {formatFileSize(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 && isCoverMode && (\r\n <div\r\n className=\"absolute inset-0 rounded-[8px] overflow-hidden\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <DropzoneCoverPreview item={items[0]} className=\"rounded-[8px]\" />\r\n <div\r\n className=\"absolute top-2 right-2 z-20 cursor-pointer bg-white/90 rounded-full p-1\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={16} strokeWidth={1} color=\"black\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!isUploading &&\r\n (items.length === 0 || (!singlePick && persistentDropzone)) &&\r\n (fileErrors.length === 0 || !singlePick) && (\r\n <div\r\n className={cn(\r\n 'flex flex-col items-center gap-2 w-full',\r\n classNames?.idleWrapper,\r\n isCoverMode && 'invisible',\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n 'flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]',\r\n isFileListLimitReached && 'bg-[#EDEDF0]'\r\n )}\r\n >\r\n <UploadIcon\r\n className={cn(\r\n 'size-6 text-[#9368FF]',\r\n isFileListLimitReached && 'text-[#A1A1AA]'\r\n )}\r\n />\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 whitespace-pre-line\",\r\n isFileListLimitReached && 'text-[#A1A1AA]',\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 whitespace-pre-line\",\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 disabled={isFileListLimitReached}\r\n >\r\n {labelOrClickToSelect}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && singlePick && fileErrors.length > 0 && !hasRejectedSingleDocumentFile && (\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 {formatFileSize(fileRejection.file.size)})\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 {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\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 )}\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 {singlePickFileInfo?.name || singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {formatFileSize(singlePickFileInfo?.size || singleFileCard?.size)}\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 fileInfo={singlePickFileInfo}\r\n disabled={disabled}\r\n playerTranslations={playerTranslations}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {!isUploading && hasRejectedSingleDocumentFile && (\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 {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\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 )}\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 {!isUploading && !singlePick && fileErrors.length > 0 && (\r\n <div\r\n className={cn('w-full mt-4 flex flex-col gap-2', classNames?.errorWrapper)}\r\n >\r\n {fileErrors.map((fileRejection, index) => {\r\n const firstError = fileRejection.errors[0];\r\n const errorText =\r\n firstError?.code === 'file-too-large'\r\n ? labelFileTooLarge\r\n : firstError?.code === 'file-invalid-type'\r\n ? labelInvalidFileType\r\n : firstError?.message || labelInvalidFileType;\r\n\r\n return (\r\n <div\r\n key={index}\r\n className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4 rounded-[8px]\"\r\n >\r\n <InfoIcon size={20} color=\"#DC2626\" className=\"shrink-0\" />\r\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\r\n <span className=\"font-semibold\">{fileRejection.file.name}</span>\r\n {' — '}\r\n {errorText}\r\n </p>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nDropzone.displayName = 'Dropzone';\r\n\r\n"],"names":["formatFileSize","bytes","KB","MB","GB","mb","FILE_EXT_ICON_MAP","fileCsvIcon","fileDocIcon","fileDocxIcon","fileJpgIcon","filePdfIcon","filePngIcon","filePptIcon","filePptxIcon","fileRarIcon","fileSvgIcon","fileWebpIcon","fileXlsIcon","fileXlsxIcon","fileZipIcon","getFileExtension","fileName","parts","getFileTypeIconByName","extension","areItemsEqual","a","b","i","left","right","isFile","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","labelUploadingOf","playerTranslations","singlePickFileInfo","persistentDropzone","previewVariant","coverFirstItem","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","firstItem","firstRejectedFile","isRejectedImage","isSingleFile","isSingleImage","isSingleVideo","isVideoUrl","isSingleDocument","hasRejectedSingleDocumentFile","singleFileCard","singleFileCardIcon","hasSingleVideoPreview","shouldBlockRootOpen","isContentPreviewMode","isSingleImagePreview","isFileListLimitReached","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","isCoverMode","shouldRenderDetachedPreview","restItemsForGrid","showAddMoreTile","isImageGridDropArea","previewBlock","jsxs","cn","jsx","item","extractName","sizeLabel","DropzoneFileCard","gridIndex","fileSize","DropzoneCoverPreview","FilePreview","X","Plus","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","InfoIcon","firstError","errorText"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Dropzone.js","sources":["../../src/Dropzone/Dropzone.tsx"],"sourcesContent":["import { FileTextIcon, InfoIcon, Plus, UploadIcon, X } from 'lucide-react';\nimport { forwardRef, useEffect, 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 { DropzoneCoverPreview } from './DropzoneCoverPreview';\nimport { DropzoneFileCard } from './DropzoneFileCard';\nimport { FilePreview } from './DropzoneFilePreview';\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\nimport { extractName, isFile, isVideoUrl } from './DropzoneUtils';\nimport { Button } from \"../Button\";\nimport fileCsvIcon from './icons/file-csv.svg';\nimport fileDocIcon from './icons/file-doc.svg';\nimport fileDocxIcon from './icons/file-docx.svg';\nimport fileJpgIcon from './icons/file-jpg.svg';\nimport filePdfIcon from './icons/file-pdf.svg';\nimport filePngIcon from './icons/file-png.svg';\nimport filePptIcon from './icons/file-ppt.svg';\nimport filePptxIcon from './icons/file-pptx.svg';\nimport fileRarIcon from './icons/file-rar.svg';\nimport fileSvgIcon from './icons/file-svg.svg';\nimport fileWebpIcon from './icons/file-webp.svg';\nimport fileXlsIcon from './icons/file-xls.svg';\nimport fileXlsxIcon from './icons/file-xlsx.svg';\nimport fileZipIcon from './icons/file-zip.svg';\n\nconst formatFileSize = (bytes = 0): string => {\n if (!bytes || bytes < 0) return '0 KB';\n const KB = 1024;\n const MB = KB * 1024;\n const GB = MB * 1024;\n if (bytes >= GB) return `${(bytes / GB).toFixed(2)} GB`;\n if (bytes >= MB) {\n const mb = bytes / MB;\n return `${mb >= 100 ? mb.toFixed(0) : mb.toFixed(2)} MB`;\n }\n if (bytes >= KB) return `${(bytes / KB).toFixed(bytes / KB >= 100 ? 0 : 1)} KB`;\n return `${bytes} B`;\n};\nconst FILE_EXT_ICON_MAP: Record<string, string> = {\n csv: fileCsvIcon,\n doc: fileDocIcon,\n docx: fileDocxIcon,\n jpg: fileJpgIcon,\n jpeg: fileJpgIcon,\n pdf: filePdfIcon,\n png: filePngIcon,\n ppt: filePptIcon,\n pptx: filePptxIcon,\n rar: fileRarIcon,\n svg: fileSvgIcon,\n webp: fileWebpIcon,\n xls: fileXlsIcon,\n xlsx: fileXlsxIcon,\n zip: fileZipIcon,\n};\n\nconst getFileExtension = (fileName?: string) => {\n if (!fileName) return '';\n const parts = fileName.toLowerCase().split('.');\n return parts.length > 1 ? parts[parts.length - 1] : '';\n};\n\nconst getFileTypeIconByName = (fileName?: string) => {\n const extension = getFileExtension(fileName);\n return FILE_EXT_ICON_MAP[extension] ?? null;\n};\nconst areItemsEqual = (a: DropzoneValueItem[], b: DropzoneValueItem[]) => {\n if (a === b) return true;\n if (a.length !== b.length) return false;\n\n for (let i = 0; i < a.length; i++) {\n const left = a[i];\n const right = b[i];\n\n if (left === right) continue;\n\n if (typeof left === 'string' && typeof right === 'string') {\n if (left !== right) return false;\n continue;\n }\n\n if (isFile(left) && isFile(right)) {\n if (\n left.name !== right.name ||\n left.size !== right.size ||\n left.type !== right.type ||\n left.lastModified !== right.lastModified\n ) {\n return false;\n }\n continue;\n }\n\n return false;\n }\n\n return true;\n};\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 = 'Upload file',\n labelSelectedFiles = 'Selected Files',\n labelUploadErrors = 'Upload Errors',\n labelFileTooLarge = 'File is too large',\n labelInvalidFileType = 'Invalid file type',\n labelVideoUploaded = 'Uploaded',\n labelVideoReplace = 'Replace',\n singlePick = false,\n labelDropzoneClassname,\n labelDropzoneSubClassname,\n isUploading = false,\n uploadProgress = 0,\n uploadLoadedBytes = 0,\n uploadTotalBytes = 0,\n onCancelUpload,\n labelUploadingTitle = 'Uploading video...',\n labelUploadingHint = 'Please do not close this page',\n labelUploadingActionCancel = 'Cancel',\n labelUploadingOf = 'of',\n playerTranslations,\n singlePickFileInfo,\n persistentDropzone = false,\n previewVariant = 'default',\n coverFirstItem = false,\n ...restProps\n },\n ref\n ) => {\n const [items, setItems] = useState<DropzoneValueItem[]>(value ?? []);\n const [fileErrors, setFileErrors] = useState<FileRejection[]>([]);\n const firstItem = items[0];\n const firstRejectedFile = fileErrors[0]?.file;\n const isRejectedImage = Boolean(firstRejectedFile?.type?.includes('image'));\n const isSingleFile = singlePick && items.length > 0 && isFile(firstItem);\n const isSingleImage = isSingleFile && firstItem.type.includes('image');\n const isSingleVideo =\n (isSingleFile && firstItem.type.includes('video')) ||\n (singlePick && items.length > 0 && typeof firstItem === 'string' && isVideoUrl(firstItem));\n const isSingleDocument = isSingleFile && !isSingleImage && !isSingleVideo;\n const hasRejectedSingleFile = singlePick && !items.length && Boolean(firstRejectedFile);\n const hasRejectedSingleDocumentFile = hasRejectedSingleFile && !isRejectedImage;\n const singleFileCard = isSingleDocument ? firstItem : firstRejectedFile;\n const singleFileCardIcon = getFileTypeIconByName(singleFileCard?.name);\n const hasSingleVideoPreview =\n singlePick && isSingleVideo;\n const shouldBlockRootOpen = hasSingleVideoPreview;\n const isContentPreviewMode = singlePick && items.length > 0;\n const isSingleImagePreview =\n isContentPreviewMode && !isSingleDocument && !hasSingleVideoPreview;\n\n // Тільки для мультизавантаження списком (file-list): коли набрали ліміт —\n // робимо зону неактивною й сірою (картки нижче лишаються інтерактивними).\n const isFileListLimitReached =\n previewVariant === 'file-list' && !singlePick && items.length >= maxFiles;\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 useEffect(() => {\n if (value && !areItemsEqual(items, value)) {\n setItems(value);\n }\n }, [items, value]);\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, open } = 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: disabled || isUploading || isFileListLimitReached,\n noClick: true,\n });\n\n useImperativeHandle(ref, () => {\n return {\n setItems,\n };\n }, []);\n\n const isCoverMode =\n coverFirstItem && previewVariant === 'image-grid' && !singlePick && items.length > 0;\n\n const shouldRenderDetachedPreview =\n !isUploading && !singlePick && persistentDropzone && items.length > 0;\n\n const restItemsForGrid = isCoverMode ? items.slice(1) : items;\n\n const showAddMoreTile =\n !disabled &&\n !singlePick &&\n previewVariant === 'image-grid' &&\n items.length > 0 &&\n items.length < maxFiles;\n\n // For multi image selection (image-grid) keep the drop area at a 16:9 ratio.\n // Use aspect-ratio (not a fixed height) so it follows whatever width the\n // consumer sets via className. Skipped when previews fill the card.\n const isImageGridDropArea =\n !singlePick &&\n previewVariant === 'image-grid' &&\n (persistentDropzone || items.length === 0);\n\n const previewBlock =\n !isUploading &&\n !singlePick &&\n (restItemsForGrid.length > 0 || showAddMoreTile) && (\n <div className={cn('w-full mt-2', classNames?.previewWrapper)}>\n {previewVariant === 'default' && (\n <pre className=\"font-semibold text-gray-600\">\n {labelSelectedFiles}:\n </pre>\n )}\n {previewVariant === 'file-list' ? (\n <div className=\"mt-2 flex flex-col gap-2\">\n {restItemsForGrid.map((item, index) => {\n const fileName = isFile(item) ? item.name : extractName(item);\n const sizeLabel = isFile(item) ? formatFileSize(item.size) : '';\n return (\n <DropzoneFileCard\n key={index}\n name={fileName}\n sizeLabel={sizeLabel}\n iconSrc={getFileTypeIconByName(fileName)}\n disabled={disabled}\n onRemove={(event) => removeItem(event, index)}\n />\n );\n })}\n </div>\n ) : (\n <ul\n className={cn(\n 'mt-2 text-sm text-gray-500 flex flex-wrap items-start',\n previewVariant === 'image-grid'\n ? 'gap-2 justify-start'\n : 'gap-4 justify-center'\n )}\n >\n {restItemsForGrid.map((item, gridIndex) => {\n const index = isCoverMode ? gridIndex + 1 : gridIndex;\n const fileName = isFile(item) ? item.name : extractName(item);\n const fileSize = isFile(item) ? formatFileSize(item.size) : '';\n\n return (\n <li\n key={index}\n className={cn(\n 'relative',\n previewVariant === 'image-grid'\n ? 'w-[75px] h-[75px]'\n : 'flex flex-col items-center gap-2'\n )}\n >\n <div className=\"relative w-full h-full\">\n {previewVariant === 'image-grid' ? (\n <DropzoneCoverPreview item={item} className=\"rounded-[8px]\" />\n ) : (\n <FilePreview item={item} styles={classNames} />\n )}\n <div\n className={cn(\n 'absolute top-0 right-0 z-20 cursor-pointer bg-gray-300 rounded-sm',\n previewVariant === 'image-grid' && 'top-1 right-1 bg-white/90 rounded-full p-0.5'\n )}\n onClick={(event) => removeItem(event, index)}\n >\n <X size={16} strokeWidth={1} color=\"black\" />\n </div>\n </div>\n {previewVariant === 'default' && (\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 )}\n </li>\n );\n })}\n {showAddMoreTile && (\n <li\n key=\"add-more\"\n className=\"relative w-[75px] h-[75px] flex items-center justify-center rounded-[8px] border border-dashed border-[#9368FF80] bg-[#FCFCFC] cursor-pointer hover:bg-[#9368FF0F]\"\n onClick={(event) => {\n event.stopPropagation();\n if (disabled || isUploading) return;\n open();\n }}\n >\n <div className=\"flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]\">\n <Plus size={16} className=\"text-[#9368FF]\" />\n </div>\n </li>\n )}\n </ul>\n )}\n </div>\n );\n\n return (\n <div className=\"w-full select-none\">\n <Card\n {...restProps}\n {...getRootProps({\n onClick: (event) => {\n if (disabled || isUploading || isFileListLimitReached) return;\n if (shouldBlockRootOpen) {\n restProps.onClick?.(event);\n return;\n }\n open();\n restProps.onClick?.(event);\n },\n })}\n className={cn(\n `w-full text-center flex flex-col items-center justify-center gap-6 cursor-pointer`,\n !isContentPreviewMode &&\n 'border border-dashed border-[#9368FF80] rounded-[8px] bg-[#FCFCFC] p-4',\n isContentPreviewMode && 'min-h-0 border-0 bg-transparent p-0',\n isImageGridDropArea && 'aspect-video h-auto',\n isCoverMode && 'relative',\n disabled && 'border-[#E4E4E7] pointer-events-none',\n fileErrors.length > 0 && !isContentPreviewMode && 'border-red-500',\n isDragActive && 'bg-gray-100',\n singlePick && 'shadow-none!',\n singlePick && items.length > 0 && !hasSingleVideoPreview && 'p-0! shadow-none!',\n hasSingleVideoPreview && 'h-auto! max-h-none! min-h-0! p-2!',\n isSingleImagePreview && 'h-64',\n isFileListLimitReached &&\n shouldRenderDetachedPreview &&\n 'border-[#E4E4E7] bg-[#F5F5F5] cursor-default pointer-events-none',\n className\n )}\n >\n <input {...getInputProps()} />\n\n {isUploading && (\n <div\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\"\n onClick={(event) => event.stopPropagation()}\n >\n <div className=\"relative h-24 w-24\">\n <svg className=\"h-24 w-24\" viewBox=\"0 0 100 100\">\n <circle cx=\"50\" cy=\"50\" r=\"42\" stroke=\"#E6E1F5\" strokeWidth=\"8\" fill=\"none\" />\n </svg>\n <span className=\"absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground\">\n {Math.max(0, Math.min(100, Math.round(uploadProgress)))}%\n </span>\n </div>\n\n <div className=\"text-center\">\n <p className=\"text-xl font-semibold text-foreground\">{labelUploadingTitle}</p>\n <p className=\"text-sm text-[#666A78]\">\n {formatFileSize(uploadLoadedBytes)} {labelUploadingOf} {formatFileSize(uploadTotalBytes)}\n </p>\n <p className=\"mt-2 text-sm text-[#666A78]\">{labelUploadingHint}</p>\n </div>\n\n <div className=\"w-full max-w-[520px] h-2 rounded-full bg-[#E6E1F5] overflow-hidden\">\n <div\n className=\"h-full bg-[#9368FF] transition-[width] duration-150 ease-linear\"\n style={{ width: `${Math.max(0, Math.min(100, uploadProgress))}%` }}\n />\n </div>\n\n {onCancelUpload && (\n <button\n type=\"button\"\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\"\n onClick={(event) => {\n event.stopPropagation();\n onCancelUpload();\n }}\n >\n {labelUploadingActionCancel}\n </button>\n )}\n </div>\n )}\n\n {!isUploading && isCoverMode && (\n <div\n className=\"absolute inset-0 rounded-[8px] overflow-hidden\"\n onClick={(event) => event.stopPropagation()}\n >\n <DropzoneCoverPreview item={items[0]} className=\"rounded-[8px]\" />\n <div\n className=\"absolute top-2 right-2 z-20 cursor-pointer bg-white/90 rounded-full p-1\"\n onClick={(event) => removeItem(event, 0)}\n >\n <X size={16} strokeWidth={1} color=\"black\" />\n </div>\n </div>\n )}\n\n {!isUploading &&\n (items.length === 0 || (!singlePick && persistentDropzone)) &&\n (fileErrors.length === 0 || !singlePick) && (\n <div\n className={cn(\n 'flex flex-col items-center gap-2 w-full',\n classNames?.idleWrapper,\n isCoverMode && 'invisible',\n )}\n >\n <div\n className={cn(\n 'flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]',\n isFileListLimitReached && 'bg-[#EDEDF0]'\n )}\n >\n <UploadIcon\n className={cn(\n 'size-6 text-[#9368FF]',\n isFileListLimitReached && 'text-[#A1A1AA]'\n )}\n />\n </div>\n\n <div className=\"flex flex-col items-center gap-1 w-full\">\n {!disabled && (\n <>\n <span\n className={cn(\n \"font-semibold text-[14px] leading-[125%] text-[#06080D] text-center w-full whitespace-pre-line\",\n isFileListLimitReached && 'text-[#A1A1AA]',\n labelDropzoneClassname\n )}\n >\n {labelDropzonePrompt}\n </span>\n\n <span\n className={cn(\n \"font-medium text-[12px] leading-[120%] text-[#666A78] text-center w-full whitespace-pre-line\",\n labelDropzoneSubClassname\n )}\n >\n {labelDropzoneSubPrompt}\n </span>\n </>\n )}\n </div>\n\n {!disabled && (\n <Button\n type=\"button\"\n size=\"md\"\n disabled={isFileListLimitReached}\n >\n {labelOrClickToSelect}\n </Button>\n )}\n </div>\n )}\n\n {!isUploading && singlePick && fileErrors.length > 0 && !hasRejectedSingleDocumentFile && (\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 {formatFileSize(fileRejection.file.size)})\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 {!isUploading && Boolean(singlePick && items.length) && (\n <>\n {isSingleDocument ? (\n <div\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\n onClick={(event) => event.stopPropagation()}\n >\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\n {labelDropzonePrompt}\n </p>\n\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\n {singleFileCardIcon ? (\n <img\n src={singleFileCardIcon}\n alt=\"\"\n className=\"size-10 shrink-0\"\n />\n ) : (\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\n <FileTextIcon size={20} />\n </div>\n )}\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\n {singlePickFileInfo?.name || singleFileCard?.name}\n </span>\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\n {formatFileSize(singlePickFileInfo?.size || singleFileCard?.size)}\n </span>\n </div>\n {!disabled && (\n <div\n className=\"size-6 flex items-center justify-center cursor-pointer\"\n onClick={(event) => removeItem(event, 0)}\n >\n <X size={24} color=\"#06080D\" />\n </div>\n )}\n </div>\n </div>\n ) : (\n <DropzoneSinglePickPreview\n item={items[0]}\n onRemoveClick={(e) => removeItem(e, 0)}\n onReplaceClick={(e) => {\n e.stopPropagation();\n if (disabled) return;\n open();\n }}\n labelUploaded={labelVideoUploaded}\n labelReplace={labelVideoReplace}\n fileInfo={singlePickFileInfo}\n disabled={disabled}\n playerTranslations={playerTranslations}\n />\n )}\n </>\n )}\n\n {!isUploading && hasRejectedSingleDocumentFile && (\n <div\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\n onClick={(event) => event.stopPropagation()}\n >\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\n {labelDropzonePrompt}\n </p>\n\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\n {singleFileCardIcon ? (\n <img\n src={singleFileCardIcon}\n alt=\"\"\n className=\"size-10 shrink-0\"\n />\n ) : (\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\n <FileTextIcon size={20} />\n </div>\n )}\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\n {singleFileCard?.name}\n </span>\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\n {singleFileCard\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\n : ''}\n </span>\n </div>\n {!disabled && (\n <div\n className=\"size-6 flex items-center justify-center cursor-pointer\"\n onClick={(event) => {\n event.stopPropagation();\n setFileErrors([]);\n }}\n >\n <X size={24} color=\"#06080D\" />\n </div>\n )}\n </div>\n\n <div className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4\">\n <InfoIcon size={20} color=\"#DC2626\" />\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\n {fileErrors[0]?.errors?.[0]?.code === 'file-too-large'\n ? labelFileTooLarge\n : fileErrors[0]?.errors?.[0]?.message || labelInvalidFileType}\n </p>\n </div>\n </div>\n )}\n\n {!shouldRenderDetachedPreview && previewBlock}\n </Card>\n {shouldRenderDetachedPreview && <div className=\"w-full\">{previewBlock}</div>}\n {!isUploading && !singlePick && fileErrors.length > 0 && (\n <div\n className={cn('w-full mt-4 flex flex-col gap-2', classNames?.errorWrapper)}\n >\n {fileErrors.map((fileRejection, index) => {\n const firstError = fileRejection.errors[0];\n const errorText =\n firstError?.code === 'file-too-large'\n ? labelFileTooLarge\n : firstError?.code === 'file-invalid-type'\n ? labelInvalidFileType\n : firstError?.message || labelInvalidFileType;\n\n return (\n <div\n key={index}\n className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4 rounded-[8px]\"\n >\n <InfoIcon size={20} color=\"#DC2626\" className=\"shrink-0\" />\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\n <span className=\"font-semibold\">{fileRejection.file.name}</span>\n {' — '}\n {errorText}\n </p>\n </div>\n );\n })}\n </div>\n )}\n </div>\n );\n }\n);\n\nDropzone.displayName = 'Dropzone';\n\n"],"names":["formatFileSize","bytes","KB","MB","GB","mb","FILE_EXT_ICON_MAP","fileCsvIcon","fileDocIcon","fileDocxIcon","fileJpgIcon","filePdfIcon","filePngIcon","filePptIcon","filePptxIcon","fileRarIcon","fileSvgIcon","fileWebpIcon","fileXlsIcon","fileXlsxIcon","fileZipIcon","getFileExtension","fileName","parts","getFileTypeIconByName","extension","areItemsEqual","a","b","i","left","right","isFile","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","labelUploadingOf","playerTranslations","singlePickFileInfo","persistentDropzone","previewVariant","coverFirstItem","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","firstItem","firstRejectedFile","isRejectedImage","isSingleFile","isSingleImage","isSingleVideo","isVideoUrl","isSingleDocument","hasRejectedSingleDocumentFile","singleFileCard","singleFileCardIcon","hasSingleVideoPreview","shouldBlockRootOpen","isContentPreviewMode","isSingleImagePreview","isFileListLimitReached","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","isCoverMode","shouldRenderDetachedPreview","restItemsForGrid","showAddMoreTile","isImageGridDropArea","previewBlock","jsxs","cn","jsx","item","extractName","sizeLabel","DropzoneFileCard","gridIndex","fileSize","DropzoneCoverPreview","FilePreview","X","Plus","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","InfoIcon","firstError","errorText"],"mappings":"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"}
|