@oneplatformdev/ui 0.1.99-beta.272 → 0.1.99-beta.273
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/Dropzone/Dropzone.js +91 -91
- package/Dropzone/Dropzone.js.map +1 -1
- package/Dropzone/Dropzone.stories.js +103 -65
- package/Dropzone/Dropzone.stories.js.map +1 -1
- package/Dropzone/Dropzone.types.d.ts.map +1 -1
- package/Dropzone/Dropzone.types.js +2 -1
- package/Dropzone/Dropzone.types.js.map +1 -1
- package/Dropzone/DropzoneSinglePickPreview.js +63 -60
- package/Dropzone/DropzoneSinglePickPreview.js.map +1 -1
- package/Dropzone/DropzoneUtils.d.ts +1 -0
- package/Dropzone/DropzoneUtils.d.ts.map +1 -1
- package/Dropzone/DropzoneUtils.js +17 -6
- package/Dropzone/DropzoneUtils.js.map +1 -1
- package/package.json +4 -4
package/Dropzone/Dropzone.js
CHANGED
|
@@ -1,52 +1,52 @@
|
|
|
1
1
|
import { jsxs as l, jsx as e, Fragment as Y } from "react/jsx-runtime";
|
|
2
|
-
import { X as
|
|
3
|
-
import { forwardRef as
|
|
2
|
+
import { X as k, UploadIcon as Fe, FileTextIcon as Z, InfoIcon as ve } from "lucide-react";
|
|
3
|
+
import { forwardRef as ye, useState as G, useEffect as Ie, useImperativeHandle as be } from "react";
|
|
4
4
|
import { useDropzone as Ce } from "react-dropzone";
|
|
5
5
|
import { cn as p } from "@oneplatformdev/utils";
|
|
6
6
|
import { Card as ze } from "../Card/Card.js";
|
|
7
7
|
import { DEFAULT_FILE_TYPES as Ee } from "./Dropzone.types.js";
|
|
8
8
|
import { FilePreview as De } from "./DropzoneFilePreview.js";
|
|
9
9
|
import { DropzoneSinglePickPreview as je } from "./DropzoneSinglePickPreview.js";
|
|
10
|
-
import { isFile as
|
|
11
|
-
import
|
|
10
|
+
import { isFile as v, isVideoUrl as Me, extractName as Se } from "./DropzoneUtils.js";
|
|
11
|
+
import Be from "./icons/file-csv.svg.js";
|
|
12
12
|
import ke from "./icons/file-doc.svg.js";
|
|
13
|
-
import
|
|
13
|
+
import Re from "./icons/file-docx.svg.js";
|
|
14
14
|
import K from "./icons/file-jpg.svg.js";
|
|
15
|
-
import
|
|
16
|
-
import
|
|
17
|
-
import
|
|
18
|
-
import
|
|
19
|
-
import
|
|
20
|
-
import
|
|
21
|
-
import
|
|
22
|
-
import
|
|
23
|
-
import
|
|
24
|
-
import
|
|
25
|
-
import { Button as
|
|
26
|
-
const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`,
|
|
27
|
-
csv:
|
|
15
|
+
import Ae from "./icons/file-pdf.svg.js";
|
|
16
|
+
import We from "./icons/file-png.svg.js";
|
|
17
|
+
import _e from "./icons/file-ppt.svg.js";
|
|
18
|
+
import Pe from "./icons/file-pptx.svg.js";
|
|
19
|
+
import Te from "./icons/file-rar.svg.js";
|
|
20
|
+
import Xe from "./icons/file-svg.svg.js";
|
|
21
|
+
import $e from "./icons/file-webp.svg.js";
|
|
22
|
+
import Le from "./icons/file-xls.svg.js";
|
|
23
|
+
import Oe from "./icons/file-xlsx.svg.js";
|
|
24
|
+
import qe from "./icons/file-zip.svg.js";
|
|
25
|
+
import { Button as He } from "../Button/Button.js";
|
|
26
|
+
const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, Je = {
|
|
27
|
+
csv: Be,
|
|
28
28
|
doc: ke,
|
|
29
|
-
docx:
|
|
29
|
+
docx: Re,
|
|
30
30
|
jpg: K,
|
|
31
31
|
jpeg: K,
|
|
32
|
-
pdf:
|
|
33
|
-
png:
|
|
34
|
-
ppt:
|
|
35
|
-
pptx:
|
|
36
|
-
rar:
|
|
37
|
-
svg:
|
|
38
|
-
webp:
|
|
39
|
-
xls:
|
|
40
|
-
xlsx:
|
|
41
|
-
zip:
|
|
42
|
-
},
|
|
32
|
+
pdf: Ae,
|
|
33
|
+
png: We,
|
|
34
|
+
ppt: _e,
|
|
35
|
+
pptx: Pe,
|
|
36
|
+
rar: Te,
|
|
37
|
+
svg: Xe,
|
|
38
|
+
webp: $e,
|
|
39
|
+
xls: Le,
|
|
40
|
+
xlsx: Oe,
|
|
41
|
+
zip: qe
|
|
42
|
+
}, Ye = (r) => {
|
|
43
43
|
if (!r) return "";
|
|
44
44
|
const s = r.toLowerCase().split(".");
|
|
45
45
|
return s.length > 1 ? s[s.length - 1] : "";
|
|
46
|
-
},
|
|
47
|
-
const s =
|
|
48
|
-
return
|
|
49
|
-
},
|
|
46
|
+
}, Ze = (r) => {
|
|
47
|
+
const s = Ye(r);
|
|
48
|
+
return Je[s] ?? null;
|
|
49
|
+
}, Ge = (r, s) => {
|
|
50
50
|
if (r === s) return !0;
|
|
51
51
|
if (r.length !== s.length) return !1;
|
|
52
52
|
for (let x = 0; x < r.length; x++) {
|
|
@@ -56,7 +56,7 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
56
56
|
if (a !== m) return !1;
|
|
57
57
|
continue;
|
|
58
58
|
}
|
|
59
|
-
if (
|
|
59
|
+
if (v(a) && v(m)) {
|
|
60
60
|
if (a.name !== m.name || a.size !== m.size || a.type !== m.type || a.lastModified !== m.lastModified)
|
|
61
61
|
return !1;
|
|
62
62
|
continue;
|
|
@@ -65,7 +65,7 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
65
65
|
}
|
|
66
66
|
}
|
|
67
67
|
return !0;
|
|
68
|
-
},
|
|
68
|
+
}, Ke = ye(
|
|
69
69
|
({
|
|
70
70
|
acceptTypes: r = Ee,
|
|
71
71
|
maxSizeMB: s,
|
|
@@ -73,8 +73,8 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
73
73
|
onErrors: a,
|
|
74
74
|
hideErrors: m = !1,
|
|
75
75
|
disabled: d = !1,
|
|
76
|
-
classNames:
|
|
77
|
-
value:
|
|
76
|
+
classNames: y,
|
|
77
|
+
value: w,
|
|
78
78
|
onChangeValue: R,
|
|
79
79
|
className: U,
|
|
80
80
|
labelDropzonePrompt: C = "Drop files here or click to select",
|
|
@@ -83,50 +83,50 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
83
83
|
labelSelectedFiles: te = "Selected Files",
|
|
84
84
|
labelUploadErrors: le = "Upload Errors",
|
|
85
85
|
labelFileTooLarge: A = "File is too large",
|
|
86
|
-
labelInvalidFileType:
|
|
86
|
+
labelInvalidFileType: W = "Invalid file type",
|
|
87
87
|
labelVideoUploaded: ie = "Uploaded",
|
|
88
88
|
labelVideoReplace: re = "Replace",
|
|
89
|
-
singlePick:
|
|
89
|
+
singlePick: n = !1,
|
|
90
90
|
labelDropzoneClassname: ne,
|
|
91
91
|
labelDropzoneSubClassname: oe,
|
|
92
92
|
isUploading: f = !1,
|
|
93
|
-
uploadProgress:
|
|
93
|
+
uploadProgress: _ = 0,
|
|
94
94
|
uploadLoadedBytes: se = 0,
|
|
95
95
|
uploadTotalBytes: ce = 0,
|
|
96
|
-
onCancelUpload:
|
|
96
|
+
onCancelUpload: P,
|
|
97
97
|
labelUploadingTitle: ae = "Uploading video...",
|
|
98
98
|
labelUploadingHint: me = "Please do not close this page",
|
|
99
99
|
labelUploadingActionCancel: de = "Cancel",
|
|
100
100
|
persistentDropzone: T = !1,
|
|
101
|
-
previewVariant:
|
|
101
|
+
previewVariant: N = "default",
|
|
102
102
|
...z
|
|
103
103
|
}, fe) => {
|
|
104
|
-
const [i, I] = G(
|
|
104
|
+
const [i, I] = G(w ?? []), [h, X] = G([]), g = i[0], E = h[0]?.file, pe = !!E?.type?.includes("image"), D = n && i.length > 0 && v(g), xe = D && g.type.includes("image"), $ = D && g.type.includes("video") || n && i.length > 0 && typeof g == "string" && Me(g), L = D && !xe && !$, O = n && !i.length && !!E && !pe, u = L ? g : E, b = Ze(u?.name), j = n && $, he = j, M = n && i.length > 0, ue = (t, c) => {
|
|
105
105
|
X(c), a?.(c);
|
|
106
|
-
const
|
|
107
|
-
I(
|
|
106
|
+
const o = n ? t.slice(0, 1) : [...i, ...t].slice(0, x);
|
|
107
|
+
I(o), R?.(o);
|
|
108
108
|
};
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}, [i,
|
|
109
|
+
Ie(() => {
|
|
110
|
+
w && !Ge(i, w) && I(w);
|
|
111
|
+
}, [i, w]);
|
|
112
112
|
const S = (t, c) => {
|
|
113
113
|
if (d) return;
|
|
114
114
|
t.stopPropagation();
|
|
115
|
-
const
|
|
116
|
-
I(
|
|
115
|
+
const o = i.filter((F, B) => B !== c);
|
|
116
|
+
I(o), R?.(o);
|
|
117
117
|
}, { getRootProps: ge, getInputProps: we, isDragActive: Ne, open: q } = Ce({
|
|
118
118
|
onDrop: ue,
|
|
119
119
|
accept: r.reduce((t, c) => (t[c] = [], t), {}),
|
|
120
120
|
maxSize: s * 1024 * 1024,
|
|
121
|
-
maxFiles:
|
|
121
|
+
maxFiles: n ? 1 : x,
|
|
122
122
|
disabled: d || f,
|
|
123
123
|
noClick: !0
|
|
124
124
|
});
|
|
125
|
-
|
|
125
|
+
be(fe, () => ({
|
|
126
126
|
setItems: I
|
|
127
127
|
}), []);
|
|
128
|
-
const H = !f && !
|
|
129
|
-
|
|
128
|
+
const H = !f && !n && T && i.length > 0, J = !f && !n && i.length > 0 && /* @__PURE__ */ l("div", { className: p("w-full mt-2", y?.previewWrapper), children: [
|
|
129
|
+
N === "default" && /* @__PURE__ */ l("pre", { className: "font-semibold text-gray-600", children: [
|
|
130
130
|
te,
|
|
131
131
|
":"
|
|
132
132
|
] }),
|
|
@@ -135,37 +135,37 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
135
135
|
{
|
|
136
136
|
className: p(
|
|
137
137
|
"mt-2 text-sm text-gray-500 flex flex-wrap items-start",
|
|
138
|
-
|
|
138
|
+
N === "image-grid" ? "gap-2 justify-start" : "gap-4 justify-center"
|
|
139
139
|
),
|
|
140
140
|
children: i.map((t, c) => {
|
|
141
|
-
const
|
|
141
|
+
const o = v(t) ? t.name : Se(t), F = v(t) ? (t.size / (1024 * 1024)).toFixed(2) + " MB" : "";
|
|
142
142
|
return /* @__PURE__ */ l(
|
|
143
143
|
"li",
|
|
144
144
|
{
|
|
145
145
|
className: p(
|
|
146
146
|
"relative",
|
|
147
|
-
|
|
147
|
+
N === "image-grid" ? "w-[75px] h-[75px]" : "flex flex-col items-center gap-2"
|
|
148
148
|
),
|
|
149
149
|
children: [
|
|
150
150
|
/* @__PURE__ */ l("div", { className: "relative w-full h-full", children: [
|
|
151
|
-
/* @__PURE__ */ e(De, { item: t, styles:
|
|
151
|
+
/* @__PURE__ */ e(De, { item: t, styles: y }),
|
|
152
152
|
/* @__PURE__ */ e(
|
|
153
153
|
"div",
|
|
154
154
|
{
|
|
155
155
|
className: p(
|
|
156
156
|
"absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm",
|
|
157
|
-
|
|
157
|
+
N === "image-grid" && "top-1 right-1 bg-white/90 rounded-full p-0.5"
|
|
158
158
|
),
|
|
159
|
-
onClick: (
|
|
160
|
-
children: /* @__PURE__ */ e(
|
|
159
|
+
onClick: (B) => S(B, c),
|
|
160
|
+
children: /* @__PURE__ */ e(k, { size: 16, strokeWidth: 1, color: "black" })
|
|
161
161
|
}
|
|
162
162
|
)
|
|
163
163
|
] }),
|
|
164
|
-
|
|
165
|
-
/* @__PURE__ */ e("span", { className: "max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap", children:
|
|
166
|
-
|
|
164
|
+
N === "default" && /* @__PURE__ */ l("span", { className: "inline-flex flex-col items-center", children: [
|
|
165
|
+
/* @__PURE__ */ e("span", { className: "max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap", children: o }),
|
|
166
|
+
F && /* @__PURE__ */ l("span", { children: [
|
|
167
167
|
"(",
|
|
168
|
-
|
|
168
|
+
F,
|
|
169
169
|
")"
|
|
170
170
|
] })
|
|
171
171
|
] })
|
|
@@ -200,8 +200,8 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
200
200
|
d && "border-[#E4E4E7] pointer-events-none",
|
|
201
201
|
h.length > 0 && !M && "border-red-500",
|
|
202
202
|
Ne && "bg-gray-100",
|
|
203
|
-
|
|
204
|
-
|
|
203
|
+
n && "shadow-none!",
|
|
204
|
+
n && i.length > 0 && !j && "p-0! shadow-none!",
|
|
205
205
|
j && "h-auto! max-h-none! min-h-0! p-2!",
|
|
206
206
|
U
|
|
207
207
|
),
|
|
@@ -216,7 +216,7 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
216
216
|
/* @__PURE__ */ l("div", { className: "relative h-24 w-24", children: [
|
|
217
217
|
/* @__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" }) }),
|
|
218
218
|
/* @__PURE__ */ l("span", { className: "absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground", children: [
|
|
219
|
-
Math.max(0, Math.min(100, Math.round(
|
|
219
|
+
Math.max(0, Math.min(100, Math.round(_))),
|
|
220
220
|
"%"
|
|
221
221
|
] })
|
|
222
222
|
] }),
|
|
@@ -233,16 +233,16 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
233
233
|
"div",
|
|
234
234
|
{
|
|
235
235
|
className: "h-full bg-[#9368FF] transition-[width] duration-150 ease-linear",
|
|
236
|
-
style: { width: `${Math.max(0, Math.min(100,
|
|
236
|
+
style: { width: `${Math.max(0, Math.min(100, _))}%` }
|
|
237
237
|
}
|
|
238
238
|
) }),
|
|
239
|
-
|
|
239
|
+
P && /* @__PURE__ */ e(
|
|
240
240
|
"button",
|
|
241
241
|
{
|
|
242
242
|
type: "button",
|
|
243
243
|
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",
|
|
244
244
|
onClick: (t) => {
|
|
245
|
-
t.stopPropagation(),
|
|
245
|
+
t.stopPropagation(), P();
|
|
246
246
|
},
|
|
247
247
|
children: de
|
|
248
248
|
}
|
|
@@ -250,12 +250,12 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
250
250
|
]
|
|
251
251
|
}
|
|
252
252
|
),
|
|
253
|
-
!f && (i.length === 0 || !
|
|
253
|
+
!f && (i.length === 0 || !n && T) && h.length === 0 && /* @__PURE__ */ l(
|
|
254
254
|
"div",
|
|
255
255
|
{
|
|
256
256
|
className: p(
|
|
257
257
|
"flex flex-col items-center gap-2 w-full",
|
|
258
|
-
|
|
258
|
+
y?.idleWrapper
|
|
259
259
|
),
|
|
260
260
|
children: [
|
|
261
261
|
/* @__PURE__ */ e("div", { className: "flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(Fe, { className: "size-6 text-[#9368FF]" }) }),
|
|
@@ -282,7 +282,7 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
282
282
|
)
|
|
283
283
|
] }) }),
|
|
284
284
|
!d && /* @__PURE__ */ e(
|
|
285
|
-
|
|
285
|
+
He,
|
|
286
286
|
{
|
|
287
287
|
type: "button",
|
|
288
288
|
size: "md",
|
|
@@ -292,7 +292,7 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
292
292
|
]
|
|
293
293
|
}
|
|
294
294
|
),
|
|
295
|
-
!f && h.length > 0 && !O && /* @__PURE__ */ l("div", { className: p("w-full mt-4",
|
|
295
|
+
!f && h.length > 0 && !O && /* @__PURE__ */ l("div", { className: p("w-full mt-4", y?.errorWrapper), children: [
|
|
296
296
|
/* @__PURE__ */ l("span", { className: "font-semibold text-red-500", children: [
|
|
297
297
|
le,
|
|
298
298
|
":"
|
|
@@ -302,14 +302,14 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
302
302
|
" (",
|
|
303
303
|
(t.file.size / (1024 * 1024)).toFixed(2),
|
|
304
304
|
" MB)",
|
|
305
|
-
!m && /* @__PURE__ */ e("ul", { className: "ml-4 list-disc list-inside", children: t.errors.map((
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
] },
|
|
305
|
+
!m && /* @__PURE__ */ e("ul", { className: "ml-4 list-disc list-inside", children: t.errors.map((o, F) => /* @__PURE__ */ l("li", { children: [
|
|
306
|
+
o.code === "file-too-large" && A,
|
|
307
|
+
o.code === "file-invalid-type" && W,
|
|
308
|
+
o.code !== "file-too-large" && o.code !== "file-invalid-type" && o.message
|
|
309
|
+
] }, F)) })
|
|
310
310
|
] }, c)) })
|
|
311
311
|
] }),
|
|
312
|
-
!f && !!(
|
|
312
|
+
!f && !!(n && i.length) && /* @__PURE__ */ e(Y, { children: L ? /* @__PURE__ */ l(
|
|
313
313
|
"div",
|
|
314
314
|
{
|
|
315
315
|
className: "w-full max-w-[502px] flex flex-col items-center gap-4",
|
|
@@ -317,10 +317,10 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
317
317
|
children: [
|
|
318
318
|
/* @__PURE__ */ e("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: C }),
|
|
319
319
|
/* @__PURE__ */ l("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
|
|
320
|
-
|
|
320
|
+
b ? /* @__PURE__ */ e(
|
|
321
321
|
"img",
|
|
322
322
|
{
|
|
323
|
-
src:
|
|
323
|
+
src: b,
|
|
324
324
|
alt: "",
|
|
325
325
|
className: "size-10 shrink-0"
|
|
326
326
|
}
|
|
@@ -334,7 +334,7 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
334
334
|
{
|
|
335
335
|
className: "size-6 flex items-center justify-center cursor-pointer",
|
|
336
336
|
onClick: (t) => S(t, 0),
|
|
337
|
-
children: /* @__PURE__ */ e(
|
|
337
|
+
children: /* @__PURE__ */ e(k, { size: 24, color: "#06080D" })
|
|
338
338
|
}
|
|
339
339
|
)
|
|
340
340
|
] })
|
|
@@ -361,10 +361,10 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
361
361
|
children: [
|
|
362
362
|
/* @__PURE__ */ e("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: C }),
|
|
363
363
|
/* @__PURE__ */ l("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
|
|
364
|
-
|
|
364
|
+
b ? /* @__PURE__ */ e(
|
|
365
365
|
"img",
|
|
366
366
|
{
|
|
367
|
-
src:
|
|
367
|
+
src: b,
|
|
368
368
|
alt: "",
|
|
369
369
|
className: "size-10 shrink-0"
|
|
370
370
|
}
|
|
@@ -380,13 +380,13 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
380
380
|
onClick: (t) => {
|
|
381
381
|
t.stopPropagation(), X([]);
|
|
382
382
|
},
|
|
383
|
-
children: /* @__PURE__ */ e(
|
|
383
|
+
children: /* @__PURE__ */ e(k, { size: 24, color: "#06080D" })
|
|
384
384
|
}
|
|
385
385
|
)
|
|
386
386
|
] }),
|
|
387
387
|
/* @__PURE__ */ l("div", { className: "w-full bg-[#DC26260F] p-4 flex items-start gap-4", children: [
|
|
388
388
|
/* @__PURE__ */ e(ve, { size: 20, color: "#DC2626" }),
|
|
389
|
-
/* @__PURE__ */ e("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: h[0]?.errors?.[0]?.code === "file-too-large" ? A : h[0]?.errors?.[0]?.message ||
|
|
389
|
+
/* @__PURE__ */ e("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: h[0]?.errors?.[0]?.code === "file-too-large" ? A : h[0]?.errors?.[0]?.message || W })
|
|
390
390
|
] })
|
|
391
391
|
]
|
|
392
392
|
}
|
|
@@ -399,8 +399,8 @@ const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
|
|
|
399
399
|
] });
|
|
400
400
|
}
|
|
401
401
|
);
|
|
402
|
-
|
|
402
|
+
Ke.displayName = "Dropzone";
|
|
403
403
|
export {
|
|
404
|
-
|
|
404
|
+
Ke as Dropzone
|
|
405
405
|
};
|
|
406
406
|
//# 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 { FileTextIcon, InfoIcon, UploadIcon, X } from 'lucide-react';\nimport { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\nimport { FileRejection, useDropzone } from 'react-dropzone';\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';\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\nimport { extractName, isFile } 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\r\nconst formatBytesToMb = (bytes = 0) => `${(bytes / (1024 * 1024)).toFixed(0)} MB`;\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[]) => {\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 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];\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');\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);\n const hasRejectedSingleDocumentFile = hasRejectedSingleFile && !isRejectedImage;\n const singleFileCard = isSingleDocument ? firstItem : firstRejectedFile;\n const singleFileCardIcon = getFileTypeIconByName(singleFileCard?.name);\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 && !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,\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 whitespace-pre-line\",\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 >\r\n {labelOrClickToSelect}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && 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>\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\">\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\">\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 )}\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>}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nDropzone.displayName = 'Dropzone';\r\n\r\n"],"names":["formatBytesToMb","bytes","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","persistentDropzone","previewVariant","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","firstItem","firstRejectedFile","isRejectedImage","isSingleFile","isSingleImage","isSingleVideo","isSingleDocument","hasRejectedSingleDocumentFile","singleFileCard","singleFileCardIcon","hasSingleVideoPreview","shouldBlockRootOpen","isContentPreviewMode","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","shouldRenderDetachedPreview","previewBlock","jsxs","cn","jsx","item","extractName","fileSize","FilePreview","X","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","e","InfoIcon"],"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, 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 formatBytesToMb = (bytes = 0) => `${(bytes / (1024 * 1024)).toFixed(0)} MB`;\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 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 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\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,\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 whitespace-pre-line\",\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 >\r\n {labelOrClickToSelect}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && 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 {(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 {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) => 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 && 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 </div>\r\n );\r\n }\r\n);\r\n\r\nDropzone.displayName = 'Dropzone';\r\n\r\n"],"names":["formatBytesToMb","bytes","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","persistentDropzone","previewVariant","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","firstItem","firstRejectedFile","isRejectedImage","isSingleFile","isSingleImage","isSingleVideo","isVideoUrl","isSingleDocument","hasRejectedSingleDocumentFile","singleFileCard","singleFileCardIcon","hasSingleVideoPreview","shouldBlockRootOpen","isContentPreviewMode","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","shouldRenderDetachedPreview","previewBlock","jsxs","cn","jsx","item","extractName","fileSize","FilePreview","X","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","e","InfoIcon"],"mappings":"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"}
|