@oneplatformdev/ui 0.1.99-beta.285 → 0.1.99-beta.286
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.d.ts.map +1 -1
- package/Dropzone/Dropzone.js +144 -154
- package/Dropzone/Dropzone.js.map +1 -1
- package/Dropzone/DropzoneCoverPreview.d.ts +14 -0
- package/Dropzone/DropzoneCoverPreview.d.ts.map +1 -0
- package/Dropzone/DropzoneCoverPreview.js +56 -0
- package/Dropzone/DropzoneCoverPreview.js.map +1 -0
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Dropzone.d.ts","sourceRoot":"","sources":["../../src/Dropzone/Dropzone.tsx"],"names":[],"mappings":"AAQA,OAAO,EAEL,eAAe,EACf,aAAa,EAEd,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Dropzone.d.ts","sourceRoot":"","sources":["../../src/Dropzone/Dropzone.tsx"],"names":[],"mappings":"AAQA,OAAO,EAEL,eAAe,EACf,aAAa,EAEd,MAAM,kBAAkB,CAAC;AA+F1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,2GAyhBpB,CAAC"}
|
package/Dropzone/Dropzone.js
CHANGED
|
@@ -1,29 +1,30 @@
|
|
|
1
1
|
import { jsxs as r, jsx as e, Fragment as U } from "react/jsx-runtime";
|
|
2
|
-
import { X as M, Plus as
|
|
3
|
-
import { forwardRef as
|
|
4
|
-
import { useDropzone as
|
|
2
|
+
import { X as M, Plus as Me, UploadIcon as ke, FileTextIcon as V, InfoIcon as ee } from "lucide-react";
|
|
3
|
+
import { forwardRef as Ae, useState as te, useEffect as Re, useImperativeHandle as We } from "react";
|
|
4
|
+
import { useDropzone as _e } from "react-dropzone";
|
|
5
5
|
import { cn as x } from "@oneplatformdev/utils";
|
|
6
|
-
import { Card as
|
|
7
|
-
import { DEFAULT_FILE_TYPES as
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
10
|
-
import {
|
|
11
|
-
import Le from "./
|
|
12
|
-
import
|
|
13
|
-
import
|
|
6
|
+
import { Card as $e } from "../Card/Card.js";
|
|
7
|
+
import { DEFAULT_FILE_TYPES as Ge } from "./Dropzone.types.js";
|
|
8
|
+
import { DropzoneCoverPreview as re } from "./DropzoneCoverPreview.js";
|
|
9
|
+
import { FilePreview as Xe } from "./DropzoneFilePreview.js";
|
|
10
|
+
import { DropzoneSinglePickPreview as Ke } from "./DropzoneSinglePickPreview.js";
|
|
11
|
+
import { isFile as I, isVideoUrl as Le, extractName as Oe } from "./DropzoneUtils.js";
|
|
12
|
+
import Pe from "./icons/file-csv.svg.js";
|
|
13
|
+
import Te from "./icons/file-doc.svg.js";
|
|
14
|
+
import qe from "./icons/file-docx.svg.js";
|
|
14
15
|
import le 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
|
|
16
|
+
import He from "./icons/file-pdf.svg.js";
|
|
17
|
+
import Je from "./icons/file-png.svg.js";
|
|
18
|
+
import Ye from "./icons/file-ppt.svg.js";
|
|
19
|
+
import Ze from "./icons/file-pptx.svg.js";
|
|
20
|
+
import Qe from "./icons/file-rar.svg.js";
|
|
21
|
+
import Ue from "./icons/file-svg.svg.js";
|
|
22
|
+
import Ve from "./icons/file-webp.svg.js";
|
|
23
|
+
import et from "./icons/file-xls.svg.js";
|
|
24
|
+
import tt from "./icons/file-xlsx.svg.js";
|
|
25
|
+
import rt from "./icons/file-zip.svg.js";
|
|
26
|
+
import { Button as lt } from "../Button/Button.js";
|
|
27
|
+
const z = (l = 0) => {
|
|
27
28
|
if (!l || l < 0) return "0 KB";
|
|
28
29
|
const s = 1024, m = s * 1024, a = m * 1024;
|
|
29
30
|
if (l >= a) return `${(l / a).toFixed(2)} GB`;
|
|
@@ -32,30 +33,30 @@ const b = (l = 0) => {
|
|
|
32
33
|
return `${c >= 100 ? c.toFixed(0) : c.toFixed(2)} MB`;
|
|
33
34
|
}
|
|
34
35
|
return l >= s ? `${(l / s).toFixed(l / s >= 100 ? 0 : 1)} KB` : `${l} B`;
|
|
35
|
-
},
|
|
36
|
-
csv:
|
|
37
|
-
doc:
|
|
38
|
-
docx:
|
|
36
|
+
}, ot = {
|
|
37
|
+
csv: Pe,
|
|
38
|
+
doc: Te,
|
|
39
|
+
docx: qe,
|
|
39
40
|
jpg: le,
|
|
40
41
|
jpeg: le,
|
|
41
|
-
pdf:
|
|
42
|
-
png:
|
|
43
|
-
ppt:
|
|
44
|
-
pptx:
|
|
45
|
-
rar:
|
|
46
|
-
svg:
|
|
47
|
-
webp:
|
|
48
|
-
xls:
|
|
49
|
-
xlsx:
|
|
50
|
-
zip:
|
|
51
|
-
},
|
|
42
|
+
pdf: He,
|
|
43
|
+
png: Je,
|
|
44
|
+
ppt: Ye,
|
|
45
|
+
pptx: Ze,
|
|
46
|
+
rar: Qe,
|
|
47
|
+
svg: Ue,
|
|
48
|
+
webp: Ve,
|
|
49
|
+
xls: et,
|
|
50
|
+
xlsx: tt,
|
|
51
|
+
zip: rt
|
|
52
|
+
}, it = (l) => {
|
|
52
53
|
if (!l) return "";
|
|
53
54
|
const s = l.toLowerCase().split(".");
|
|
54
55
|
return s.length > 1 ? s[s.length - 1] : "";
|
|
55
|
-
},
|
|
56
|
-
const s =
|
|
57
|
-
return
|
|
58
|
-
},
|
|
56
|
+
}, nt = (l) => {
|
|
57
|
+
const s = it(l);
|
|
58
|
+
return ot[s] ?? null;
|
|
59
|
+
}, st = (l, s) => {
|
|
59
60
|
if (l === s) return !0;
|
|
60
61
|
if (l.length !== s.length) return !1;
|
|
61
62
|
for (let m = 0; m < l.length; m++) {
|
|
@@ -65,7 +66,7 @@ const b = (l = 0) => {
|
|
|
65
66
|
if (a !== c) return !1;
|
|
66
67
|
continue;
|
|
67
68
|
}
|
|
68
|
-
if (
|
|
69
|
+
if (I(a) && I(c)) {
|
|
69
70
|
if (a.name !== c.name || a.size !== c.size || a.type !== c.type || a.lastModified !== c.lastModified)
|
|
70
71
|
return !1;
|
|
71
72
|
continue;
|
|
@@ -74,72 +75,72 @@ const b = (l = 0) => {
|
|
|
74
75
|
}
|
|
75
76
|
}
|
|
76
77
|
return !0;
|
|
77
|
-
},
|
|
78
|
+
}, ct = Ae(
|
|
78
79
|
({
|
|
79
|
-
acceptTypes: l =
|
|
80
|
+
acceptTypes: l = Ge,
|
|
80
81
|
maxSizeMB: s,
|
|
81
82
|
maxFiles: m = 1,
|
|
82
83
|
onErrors: a,
|
|
83
84
|
hideErrors: c = !1,
|
|
84
85
|
disabled: f = !1,
|
|
85
|
-
classNames:
|
|
86
|
+
classNames: F,
|
|
86
87
|
value: v,
|
|
87
|
-
onChangeValue:
|
|
88
|
-
className:
|
|
88
|
+
onChangeValue: L,
|
|
89
|
+
className: oe,
|
|
89
90
|
labelDropzonePrompt: k = "Drop files here or click to select",
|
|
90
|
-
labelDropzoneSubPrompt:
|
|
91
|
-
labelOrClickToSelect:
|
|
91
|
+
labelDropzoneSubPrompt: ie = "",
|
|
92
|
+
labelOrClickToSelect: ne = "Upload file",
|
|
92
93
|
labelSelectedFiles: se = "Selected Files",
|
|
93
94
|
labelUploadErrors: ce = "Upload Errors",
|
|
94
|
-
labelFileTooLarge:
|
|
95
|
-
labelInvalidFileType:
|
|
95
|
+
labelFileTooLarge: A = "File is too large",
|
|
96
|
+
labelInvalidFileType: b = "Invalid file type",
|
|
96
97
|
labelVideoUploaded: ae = "Uploaded",
|
|
97
98
|
labelVideoReplace: de = "Replace",
|
|
98
|
-
singlePick:
|
|
99
|
+
singlePick: i = !1,
|
|
99
100
|
labelDropzoneClassname: me,
|
|
100
101
|
labelDropzoneSubClassname: fe,
|
|
101
102
|
isUploading: p = !1,
|
|
102
|
-
uploadProgress:
|
|
103
|
+
uploadProgress: O = 0,
|
|
103
104
|
uploadLoadedBytes: pe = 0,
|
|
104
105
|
uploadTotalBytes: xe = 0,
|
|
105
|
-
onCancelUpload:
|
|
106
|
+
onCancelUpload: P,
|
|
106
107
|
labelUploadingTitle: he = "Uploading video...",
|
|
107
108
|
labelUploadingHint: ue = "Please do not close this page",
|
|
108
109
|
labelUploadingActionCancel: ge = "Cancel",
|
|
109
|
-
labelUploadingOf:
|
|
110
|
-
playerTranslations:
|
|
111
|
-
singlePickFileInfo:
|
|
112
|
-
persistentDropzone:
|
|
113
|
-
previewVariant:
|
|
110
|
+
labelUploadingOf: Ne = "of",
|
|
111
|
+
playerTranslations: we,
|
|
112
|
+
singlePickFileInfo: R,
|
|
113
|
+
persistentDropzone: W = !1,
|
|
114
|
+
previewVariant: h = "default",
|
|
114
115
|
coverFirstItem: Fe = !1,
|
|
115
|
-
...
|
|
116
|
+
..._
|
|
116
117
|
}, ve) => {
|
|
117
|
-
const [
|
|
118
|
+
const [o, D] = te(v ?? []), [u, T] = te([]), g = o[0], $ = u[0]?.file, Ce = !!$?.type?.includes("image"), G = i && o.length > 0 && I(g), ze = G && g.type.includes("image"), q = G && g.type.includes("video") || i && o.length > 0 && typeof g == "string" && Le(g), X = G && !ze && !q, H = i && !o.length && !!$ && !Ce, N = X ? g : $, E = nt(N?.name), y = i && q, Ie = y, j = i && o.length > 0, be = j && !X && !y, De = (t, d) => {
|
|
118
119
|
T(d), a?.(d);
|
|
119
|
-
const
|
|
120
|
-
|
|
120
|
+
const n = i ? t.slice(0, 1) : [...o, ...t].slice(0, m);
|
|
121
|
+
D(n), L?.(n);
|
|
121
122
|
};
|
|
122
123
|
Re(() => {
|
|
123
|
-
v && !
|
|
124
|
-
}, [
|
|
124
|
+
v && !st(o, v) && D(v);
|
|
125
|
+
}, [o, v]);
|
|
125
126
|
const B = (t, d) => {
|
|
126
127
|
if (f) return;
|
|
127
128
|
t.stopPropagation();
|
|
128
|
-
const
|
|
129
|
-
|
|
130
|
-
}, { getRootProps:
|
|
131
|
-
onDrop:
|
|
129
|
+
const n = o.filter((w, S) => S !== d);
|
|
130
|
+
D(n), L?.(n);
|
|
131
|
+
}, { getRootProps: Ee, getInputProps: ye, isDragActive: je, open: K } = _e({
|
|
132
|
+
onDrop: De,
|
|
132
133
|
accept: l.reduce((t, d) => (t[d] = [], t), {}),
|
|
133
134
|
maxSize: s * 1024 * 1024,
|
|
134
|
-
maxFiles:
|
|
135
|
+
maxFiles: i ? 1 : m,
|
|
135
136
|
disabled: f || p,
|
|
136
137
|
noClick: !0
|
|
137
138
|
});
|
|
138
139
|
We(ve, () => ({
|
|
139
|
-
setItems:
|
|
140
|
+
setItems: D
|
|
140
141
|
}), []);
|
|
141
|
-
const C = Fe &&
|
|
142
|
-
|
|
142
|
+
const C = Fe && h === "image-grid" && !i && o.length > 0, J = !p && !i && W && o.length > 0, Y = C ? o.slice(1) : o, Z = !f && !i && h === "image-grid" && o.length > 0 && o.length < m, Be = !i && h === "image-grid" && (W || o.length === 0), Q = !p && !i && (Y.length > 0 || Z) && /* @__PURE__ */ r("div", { className: x("w-full mt-2", F?.previewWrapper), children: [
|
|
143
|
+
h === "default" && /* @__PURE__ */ r("pre", { className: "font-semibold text-gray-600", children: [
|
|
143
144
|
se,
|
|
144
145
|
":"
|
|
145
146
|
] }),
|
|
@@ -148,35 +149,35 @@ const b = (l = 0) => {
|
|
|
148
149
|
{
|
|
149
150
|
className: x(
|
|
150
151
|
"mt-2 text-sm text-gray-500 flex flex-wrap items-start",
|
|
151
|
-
|
|
152
|
+
h === "image-grid" ? "gap-2 justify-start" : "gap-4 justify-center"
|
|
152
153
|
),
|
|
153
154
|
children: [
|
|
154
155
|
Y.map((t, d) => {
|
|
155
|
-
const
|
|
156
|
+
const n = C ? d + 1 : d, w = I(t) ? t.name : Oe(t), S = I(t) ? z(t.size) : "";
|
|
156
157
|
return /* @__PURE__ */ r(
|
|
157
158
|
"li",
|
|
158
159
|
{
|
|
159
160
|
className: x(
|
|
160
161
|
"relative",
|
|
161
|
-
|
|
162
|
+
h === "image-grid" ? "w-[75px] h-[75px]" : "flex flex-col items-center gap-2"
|
|
162
163
|
),
|
|
163
164
|
children: [
|
|
164
165
|
/* @__PURE__ */ r("div", { className: "relative w-full h-full", children: [
|
|
165
|
-
/* @__PURE__ */ e(re, { item: t, styles:
|
|
166
|
+
h === "image-grid" ? /* @__PURE__ */ e(re, { item: t, className: "rounded-[8px]" }) : /* @__PURE__ */ e(Xe, { item: t, styles: F }),
|
|
166
167
|
/* @__PURE__ */ e(
|
|
167
168
|
"div",
|
|
168
169
|
{
|
|
169
170
|
className: x(
|
|
170
|
-
"absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm",
|
|
171
|
-
|
|
171
|
+
"absolute top-0 right-0 z-20 cursor-pointer bg-gray-300 rounded-sm",
|
|
172
|
+
h === "image-grid" && "top-1 right-1 bg-white/90 rounded-full p-0.5"
|
|
172
173
|
),
|
|
173
|
-
onClick: (
|
|
174
|
+
onClick: (Se) => B(Se, n),
|
|
174
175
|
children: /* @__PURE__ */ e(M, { size: 16, strokeWidth: 1, color: "black" })
|
|
175
176
|
}
|
|
176
177
|
)
|
|
177
178
|
] }),
|
|
178
|
-
|
|
179
|
-
/* @__PURE__ */ e("span", { className: "max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap", children:
|
|
179
|
+
h === "default" && /* @__PURE__ */ r("span", { className: "inline-flex flex-col items-center", children: [
|
|
180
|
+
/* @__PURE__ */ e("span", { className: "max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap", children: w }),
|
|
180
181
|
S && /* @__PURE__ */ r("span", { children: [
|
|
181
182
|
"(",
|
|
182
183
|
S,
|
|
@@ -185,7 +186,7 @@ const b = (l = 0) => {
|
|
|
185
186
|
] })
|
|
186
187
|
]
|
|
187
188
|
},
|
|
188
|
-
|
|
189
|
+
n
|
|
189
190
|
);
|
|
190
191
|
}),
|
|
191
192
|
Z && /* @__PURE__ */ e(
|
|
@@ -193,9 +194,9 @@ const b = (l = 0) => {
|
|
|
193
194
|
{
|
|
194
195
|
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]",
|
|
195
196
|
onClick: (t) => {
|
|
196
|
-
t.stopPropagation(), !(f || p) &&
|
|
197
|
+
t.stopPropagation(), !(f || p) && K();
|
|
197
198
|
},
|
|
198
|
-
children: /* @__PURE__ */ e("div", { className: "flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(
|
|
199
|
+
children: /* @__PURE__ */ e("div", { className: "flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(Me, { size: 16, className: "text-[#9368FF]" }) })
|
|
199
200
|
},
|
|
200
201
|
"add-more"
|
|
201
202
|
)
|
|
@@ -205,17 +206,17 @@ const b = (l = 0) => {
|
|
|
205
206
|
] });
|
|
206
207
|
return /* @__PURE__ */ r("div", { className: "w-full select-none", children: [
|
|
207
208
|
/* @__PURE__ */ r(
|
|
208
|
-
|
|
209
|
+
$e,
|
|
209
210
|
{
|
|
210
|
-
...
|
|
211
|
-
...
|
|
211
|
+
..._,
|
|
212
|
+
...Ee({
|
|
212
213
|
onClick: (t) => {
|
|
213
214
|
if (!(f || p)) {
|
|
214
|
-
if (
|
|
215
|
-
|
|
215
|
+
if (Ie) {
|
|
216
|
+
_.onClick?.(t);
|
|
216
217
|
return;
|
|
217
218
|
}
|
|
218
|
-
|
|
219
|
+
K(), _.onClick?.(t);
|
|
219
220
|
}
|
|
220
221
|
}
|
|
221
222
|
}),
|
|
@@ -223,18 +224,19 @@ const b = (l = 0) => {
|
|
|
223
224
|
"w-full text-center flex flex-col items-center justify-center gap-6 cursor-pointer",
|
|
224
225
|
!j && "border border-dashed border-[#9368FF80] rounded-[8px] bg-[#FCFCFC] p-4",
|
|
225
226
|
j && "min-h-0 border-0 bg-transparent p-0",
|
|
227
|
+
Be && "aspect-video h-auto",
|
|
226
228
|
C && "relative",
|
|
227
229
|
f && "border-[#E4E4E7] pointer-events-none",
|
|
228
|
-
|
|
230
|
+
u.length > 0 && !j && "border-red-500",
|
|
229
231
|
je && "bg-gray-100",
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
232
|
+
i && "shadow-none!",
|
|
233
|
+
i && o.length > 0 && !y && "p-0! shadow-none!",
|
|
234
|
+
y && "h-auto! max-h-none! min-h-0! p-2!",
|
|
235
|
+
be && "h-64",
|
|
236
|
+
oe
|
|
235
237
|
),
|
|
236
238
|
children: [
|
|
237
|
-
/* @__PURE__ */ e("input", { ...
|
|
239
|
+
/* @__PURE__ */ e("input", { ...ye() }),
|
|
238
240
|
p && /* @__PURE__ */ r(
|
|
239
241
|
"div",
|
|
240
242
|
{
|
|
@@ -244,18 +246,18 @@ const b = (l = 0) => {
|
|
|
244
246
|
/* @__PURE__ */ r("div", { className: "relative h-24 w-24", children: [
|
|
245
247
|
/* @__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" }) }),
|
|
246
248
|
/* @__PURE__ */ r("span", { className: "absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground", children: [
|
|
247
|
-
Math.max(0, Math.min(100, Math.round(
|
|
249
|
+
Math.max(0, Math.min(100, Math.round(O))),
|
|
248
250
|
"%"
|
|
249
251
|
] })
|
|
250
252
|
] }),
|
|
251
253
|
/* @__PURE__ */ r("div", { className: "text-center", children: [
|
|
252
254
|
/* @__PURE__ */ e("p", { className: "text-xl font-semibold text-foreground", children: he }),
|
|
253
255
|
/* @__PURE__ */ r("p", { className: "text-sm text-[#666A78]", children: [
|
|
254
|
-
|
|
256
|
+
z(pe),
|
|
255
257
|
" ",
|
|
256
|
-
|
|
258
|
+
Ne,
|
|
257
259
|
" ",
|
|
258
|
-
|
|
260
|
+
z(xe)
|
|
259
261
|
] }),
|
|
260
262
|
/* @__PURE__ */ e("p", { className: "mt-2 text-sm text-[#666A78]", children: ue })
|
|
261
263
|
] }),
|
|
@@ -263,16 +265,16 @@ const b = (l = 0) => {
|
|
|
263
265
|
"div",
|
|
264
266
|
{
|
|
265
267
|
className: "h-full bg-[#9368FF] transition-[width] duration-150 ease-linear",
|
|
266
|
-
style: { width: `${Math.max(0, Math.min(100,
|
|
268
|
+
style: { width: `${Math.max(0, Math.min(100, O))}%` }
|
|
267
269
|
}
|
|
268
270
|
) }),
|
|
269
|
-
|
|
271
|
+
P && /* @__PURE__ */ e(
|
|
270
272
|
"button",
|
|
271
273
|
{
|
|
272
274
|
type: "button",
|
|
273
275
|
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",
|
|
274
276
|
onClick: (t) => {
|
|
275
|
-
t.stopPropagation(),
|
|
277
|
+
t.stopPropagation(), P();
|
|
276
278
|
},
|
|
277
279
|
children: ge
|
|
278
280
|
}
|
|
@@ -286,23 +288,11 @@ const b = (l = 0) => {
|
|
|
286
288
|
className: "absolute inset-0 rounded-[8px] overflow-hidden",
|
|
287
289
|
onClick: (t) => t.stopPropagation(),
|
|
288
290
|
children: [
|
|
289
|
-
/* @__PURE__ */ e(
|
|
290
|
-
re,
|
|
291
|
-
{
|
|
292
|
-
item: i[0],
|
|
293
|
-
styles: {
|
|
294
|
-
...u,
|
|
295
|
-
previewWraper: x(
|
|
296
|
-
"w-full h-full rounded-[8px] border-0",
|
|
297
|
-
u?.previewWraper?.replace(/w-\[[^\]]+\]|h-\[[^\]]+\]/g, "")
|
|
298
|
-
)
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
),
|
|
291
|
+
/* @__PURE__ */ e(re, { item: o[0], className: "rounded-[8px]" }),
|
|
302
292
|
/* @__PURE__ */ e(
|
|
303
293
|
"div",
|
|
304
294
|
{
|
|
305
|
-
className: "absolute top-2 right-2 cursor-pointer bg-white/90 rounded-full p-1",
|
|
295
|
+
className: "absolute top-2 right-2 z-20 cursor-pointer bg-white/90 rounded-full p-1",
|
|
306
296
|
onClick: (t) => B(t, 0),
|
|
307
297
|
children: /* @__PURE__ */ e(M, { size: 16, strokeWidth: 1, color: "black" })
|
|
308
298
|
}
|
|
@@ -310,16 +300,16 @@ const b = (l = 0) => {
|
|
|
310
300
|
]
|
|
311
301
|
}
|
|
312
302
|
),
|
|
313
|
-
!p && (
|
|
303
|
+
!p && (o.length === 0 || !i && W) && (u.length === 0 || !i) && /* @__PURE__ */ r(
|
|
314
304
|
"div",
|
|
315
305
|
{
|
|
316
306
|
className: x(
|
|
317
307
|
"flex flex-col items-center gap-2 w-full",
|
|
318
|
-
|
|
308
|
+
F?.idleWrapper,
|
|
319
309
|
C && "invisible"
|
|
320
310
|
),
|
|
321
311
|
children: [
|
|
322
|
-
/* @__PURE__ */ e("div", { className: "flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(
|
|
312
|
+
/* @__PURE__ */ e("div", { className: "flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(ke, { className: "size-6 text-[#9368FF]" }) }),
|
|
323
313
|
/* @__PURE__ */ e("div", { className: "flex flex-col items-center gap-1 w-full", children: !f && /* @__PURE__ */ r(U, { children: [
|
|
324
314
|
/* @__PURE__ */ e(
|
|
325
315
|
"span",
|
|
@@ -338,39 +328,39 @@ const b = (l = 0) => {
|
|
|
338
328
|
"font-medium text-[12px] leading-[120%] text-[#666A78] text-center w-full whitespace-pre-line",
|
|
339
329
|
fe
|
|
340
330
|
),
|
|
341
|
-
children:
|
|
331
|
+
children: ie
|
|
342
332
|
}
|
|
343
333
|
)
|
|
344
334
|
] }) }),
|
|
345
335
|
!f && /* @__PURE__ */ e(
|
|
346
|
-
|
|
336
|
+
lt,
|
|
347
337
|
{
|
|
348
338
|
type: "button",
|
|
349
339
|
size: "md",
|
|
350
|
-
children:
|
|
340
|
+
children: ne
|
|
351
341
|
}
|
|
352
342
|
)
|
|
353
343
|
]
|
|
354
344
|
}
|
|
355
345
|
),
|
|
356
|
-
!p &&
|
|
346
|
+
!p && i && u.length > 0 && !H && /* @__PURE__ */ r("div", { className: x("w-full mt-4", F?.errorWrapper), children: [
|
|
357
347
|
/* @__PURE__ */ r("span", { className: "font-semibold text-red-500", children: [
|
|
358
348
|
ce,
|
|
359
349
|
":"
|
|
360
350
|
] }),
|
|
361
|
-
/* @__PURE__ */ e("ul", { className: "mt-2 text-sm text-red-500 list-disc list-inside", children:
|
|
351
|
+
/* @__PURE__ */ e("ul", { className: "mt-2 text-sm text-red-500 list-disc list-inside", children: u.map((t, d) => /* @__PURE__ */ r("li", { children: [
|
|
362
352
|
t.file.name,
|
|
363
353
|
" (",
|
|
364
|
-
|
|
354
|
+
z(t.file.size),
|
|
365
355
|
")",
|
|
366
|
-
!c && /* @__PURE__ */ e("ul", { className: "ml-4 list-disc list-inside", children: t.errors.map((
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
] },
|
|
356
|
+
!c && /* @__PURE__ */ e("ul", { className: "ml-4 list-disc list-inside", children: t.errors.map((n, w) => /* @__PURE__ */ r("li", { children: [
|
|
357
|
+
n.code === "file-too-large" && A,
|
|
358
|
+
n.code === "file-invalid-type" && b,
|
|
359
|
+
n.code !== "file-too-large" && n.code !== "file-invalid-type" && n.message
|
|
360
|
+
] }, w)) })
|
|
371
361
|
] }, d)) })
|
|
372
362
|
] }),
|
|
373
|
-
!p && !!(
|
|
363
|
+
!p && !!(i && o.length) && /* @__PURE__ */ e(U, { children: X ? /* @__PURE__ */ r(
|
|
374
364
|
"div",
|
|
375
365
|
{
|
|
376
366
|
className: "w-full max-w-[502px] flex flex-col items-center gap-4",
|
|
@@ -378,17 +368,17 @@ const b = (l = 0) => {
|
|
|
378
368
|
children: [
|
|
379
369
|
/* @__PURE__ */ e("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: k }),
|
|
380
370
|
/* @__PURE__ */ r("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
|
|
381
|
-
|
|
371
|
+
E ? /* @__PURE__ */ e(
|
|
382
372
|
"img",
|
|
383
373
|
{
|
|
384
|
-
src:
|
|
374
|
+
src: E,
|
|
385
375
|
alt: "",
|
|
386
376
|
className: "size-10 shrink-0"
|
|
387
377
|
}
|
|
388
378
|
) : /* @__PURE__ */ e("div", { className: "size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0", children: /* @__PURE__ */ e(V, { size: 20 }) }),
|
|
389
379
|
/* @__PURE__ */ r("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
|
|
390
|
-
/* @__PURE__ */ e("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children:
|
|
391
|
-
/* @__PURE__ */ e("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children:
|
|
380
|
+
/* @__PURE__ */ e("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children: R?.name || N?.name }),
|
|
381
|
+
/* @__PURE__ */ e("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: z(R?.size || N?.size) })
|
|
392
382
|
] }),
|
|
393
383
|
!f && /* @__PURE__ */ e(
|
|
394
384
|
"div",
|
|
@@ -402,18 +392,18 @@ const b = (l = 0) => {
|
|
|
402
392
|
]
|
|
403
393
|
}
|
|
404
394
|
) : /* @__PURE__ */ e(
|
|
405
|
-
|
|
395
|
+
Ke,
|
|
406
396
|
{
|
|
407
|
-
item:
|
|
397
|
+
item: o[0],
|
|
408
398
|
onRemoveClick: (t) => B(t, 0),
|
|
409
399
|
onReplaceClick: (t) => {
|
|
410
|
-
t.stopPropagation(), !f &&
|
|
400
|
+
t.stopPropagation(), !f && K();
|
|
411
401
|
},
|
|
412
402
|
labelUploaded: ae,
|
|
413
403
|
labelReplace: de,
|
|
414
|
-
fileInfo:
|
|
404
|
+
fileInfo: R,
|
|
415
405
|
disabled: f,
|
|
416
|
-
playerTranslations:
|
|
406
|
+
playerTranslations: we
|
|
417
407
|
}
|
|
418
408
|
) }),
|
|
419
409
|
!p && H && /* @__PURE__ */ r(
|
|
@@ -424,10 +414,10 @@ const b = (l = 0) => {
|
|
|
424
414
|
children: [
|
|
425
415
|
/* @__PURE__ */ e("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: k }),
|
|
426
416
|
/* @__PURE__ */ r("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
|
|
427
|
-
|
|
417
|
+
E ? /* @__PURE__ */ e(
|
|
428
418
|
"img",
|
|
429
419
|
{
|
|
430
|
-
src:
|
|
420
|
+
src: E,
|
|
431
421
|
alt: "",
|
|
432
422
|
className: "size-10 shrink-0"
|
|
433
423
|
}
|
|
@@ -449,7 +439,7 @@ const b = (l = 0) => {
|
|
|
449
439
|
] }),
|
|
450
440
|
/* @__PURE__ */ r("div", { className: "w-full bg-[#DC26260F] p-4 flex items-start gap-4", children: [
|
|
451
441
|
/* @__PURE__ */ e(ee, { size: 20, color: "#DC2626" }),
|
|
452
|
-
/* @__PURE__ */ e("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children:
|
|
442
|
+
/* @__PURE__ */ e("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: u[0]?.errors?.[0]?.code === "file-too-large" ? A : u[0]?.errors?.[0]?.message || b })
|
|
453
443
|
] })
|
|
454
444
|
]
|
|
455
445
|
}
|
|
@@ -459,12 +449,12 @@ const b = (l = 0) => {
|
|
|
459
449
|
}
|
|
460
450
|
),
|
|
461
451
|
J && /* @__PURE__ */ e("div", { className: "w-full", children: Q }),
|
|
462
|
-
!p && !
|
|
452
|
+
!p && !i && u.length > 0 && /* @__PURE__ */ e(
|
|
463
453
|
"div",
|
|
464
454
|
{
|
|
465
|
-
className: x("w-full mt-4 flex flex-col gap-2",
|
|
466
|
-
children:
|
|
467
|
-
const
|
|
455
|
+
className: x("w-full mt-4 flex flex-col gap-2", F?.errorWrapper),
|
|
456
|
+
children: u.map((t, d) => {
|
|
457
|
+
const n = t.errors[0], w = n?.code === "file-too-large" ? A : n?.code === "file-invalid-type" ? b : n?.message || b;
|
|
468
458
|
return /* @__PURE__ */ r(
|
|
469
459
|
"div",
|
|
470
460
|
{
|
|
@@ -474,7 +464,7 @@ const b = (l = 0) => {
|
|
|
474
464
|
/* @__PURE__ */ r("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: [
|
|
475
465
|
/* @__PURE__ */ e("span", { className: "font-semibold", children: t.file.name }),
|
|
476
466
|
" — ",
|
|
477
|
-
|
|
467
|
+
w
|
|
478
468
|
] })
|
|
479
469
|
]
|
|
480
470
|
},
|
|
@@ -486,8 +476,8 @@ const b = (l = 0) => {
|
|
|
486
476
|
] });
|
|
487
477
|
}
|
|
488
478
|
);
|
|
489
|
-
|
|
479
|
+
ct.displayName = "Dropzone";
|
|
490
480
|
export {
|
|
491
|
-
|
|
481
|
+
ct as Dropzone
|
|
492
482
|
};
|
|
493
483
|
//# 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, 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 { 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 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 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 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 <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 <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 {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 </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) 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 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 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 <FilePreview\r\n item={items[0]}\r\n styles={{\r\n ...classNames,\r\n previewWraper: cn(\r\n 'w-full h-full rounded-[8px] border-0',\r\n classNames?.previewWraper?.replace(/w-\\[[^\\]]+\\]|h-\\[[^\\]]+\\]/g, ''),\r\n ),\r\n }}\r\n />\r\n <div\r\n className=\"absolute top-2 right-2 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 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 && 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","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","isCoverMode","shouldRenderDetachedPreview","restItemsForGrid","showAddMoreTile","previewBlock","jsxs","cn","item","gridIndex","extractName","fileSize","jsx","FilePreview","X","Plus","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","e","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';\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 { 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 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 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 <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 </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) 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 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 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 && 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","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","isCoverMode","shouldRenderDetachedPreview","restItemsForGrid","showAddMoreTile","isImageGridDropArea","previewBlock","jsxs","cn","item","gridIndex","extractName","fileSize","jsx","DropzoneCoverPreview","FilePreview","X","Plus","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","e","InfoIcon","firstError","errorText"],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { DropzoneValueItem } from './Dropzone.types';
|
|
2
|
+
interface DropzoneCoverPreviewProps {
|
|
3
|
+
item: DropzoneValueItem;
|
|
4
|
+
className?: string;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Cover preview for the image-grid (multi select) drop area.
|
|
8
|
+
* Mirrors the single image preview: wide images fill the frame (object-cover),
|
|
9
|
+
* portrait images are shown in full (object-contain) over a blurred backdrop,
|
|
10
|
+
* so the cover is never cropped awkwardly.
|
|
11
|
+
*/
|
|
12
|
+
export declare const DropzoneCoverPreview: ({ item, className }: DropzoneCoverPreviewProps) => import("react/jsx-runtime").JSX.Element | null;
|
|
13
|
+
export {};
|
|
14
|
+
//# sourceMappingURL=DropzoneCoverPreview.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropzoneCoverPreview.d.ts","sourceRoot":"","sources":["../../src/Dropzone/DropzoneCoverPreview.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAGrD,UAAU,yBAAyB;IACjC,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,GAAI,qBAAqB,yBAAyB,mDAmDlF,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { jsxs as m, jsx as a } from "react/jsx-runtime";
|
|
2
|
+
import { useState as n, useEffect as d } from "react";
|
|
3
|
+
import { cn as i } from "@oneplatformdev/utils";
|
|
4
|
+
import { isFile as v } from "./DropzoneUtils.js";
|
|
5
|
+
const h = ({ item: e, className: u }) => {
|
|
6
|
+
const [t, o] = n(""), [l, f] = n(!1);
|
|
7
|
+
return d(() => {
|
|
8
|
+
if (v(e)) {
|
|
9
|
+
const r = URL.createObjectURL(e);
|
|
10
|
+
return o(r), () => URL.revokeObjectURL(r);
|
|
11
|
+
}
|
|
12
|
+
if (typeof e == "string") {
|
|
13
|
+
o(e);
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
o("");
|
|
17
|
+
}, [e]), t ? /* @__PURE__ */ m(
|
|
18
|
+
"div",
|
|
19
|
+
{
|
|
20
|
+
className: i(
|
|
21
|
+
"relative flex w-full h-full items-center justify-center overflow-hidden",
|
|
22
|
+
u
|
|
23
|
+
),
|
|
24
|
+
children: [
|
|
25
|
+
!l && /* @__PURE__ */ a(
|
|
26
|
+
"div",
|
|
27
|
+
{
|
|
28
|
+
className: "absolute inset-0 scale-110 bg-cover bg-center opacity-80 blur-xl",
|
|
29
|
+
style: { backgroundImage: `url(${t})` }
|
|
30
|
+
}
|
|
31
|
+
),
|
|
32
|
+
/* @__PURE__ */ a(
|
|
33
|
+
"img",
|
|
34
|
+
{
|
|
35
|
+
src: t,
|
|
36
|
+
alt: "",
|
|
37
|
+
onLoad: (r) => {
|
|
38
|
+
const { naturalWidth: s, naturalHeight: c } = r.currentTarget;
|
|
39
|
+
f(
|
|
40
|
+
!!s && !!c && s > c
|
|
41
|
+
);
|
|
42
|
+
},
|
|
43
|
+
className: i(
|
|
44
|
+
"relative h-full",
|
|
45
|
+
l ? "w-full object-cover" : "z-10 max-w-full object-contain"
|
|
46
|
+
)
|
|
47
|
+
}
|
|
48
|
+
)
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
) : null;
|
|
52
|
+
};
|
|
53
|
+
export {
|
|
54
|
+
h as DropzoneCoverPreview
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=DropzoneCoverPreview.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DropzoneCoverPreview.js","sources":["../../src/Dropzone/DropzoneCoverPreview.tsx"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { cn } from '@oneplatformdev/utils';\n\nimport { DropzoneValueItem } from './Dropzone.types';\nimport { isFile } from './DropzoneUtils';\n\ninterface DropzoneCoverPreviewProps {\n item: DropzoneValueItem;\n className?: string;\n}\n\n/**\n * Cover preview for the image-grid (multi select) drop area.\n * Mirrors the single image preview: wide images fill the frame (object-cover),\n * portrait images are shown in full (object-contain) over a blurred backdrop,\n * so the cover is never cropped awkwardly.\n */\nexport const DropzoneCoverPreview = ({ item, className }: DropzoneCoverPreviewProps) => {\n const [src, setSrc] = useState('');\n const [isWideImage, setIsWideImage] = useState(false);\n\n useEffect(() => {\n if (isFile(item)) {\n const objectUrl = URL.createObjectURL(item);\n setSrc(objectUrl);\n return () => URL.revokeObjectURL(objectUrl);\n }\n\n if (typeof item === 'string') {\n setSrc(item);\n return undefined;\n }\n\n setSrc('');\n return undefined;\n }, [item]);\n\n if (!src) return null;\n\n return (\n <div\n className={cn(\n 'relative flex w-full h-full items-center justify-center overflow-hidden',\n className,\n )}\n >\n {!isWideImage && (\n <div\n className=\"absolute inset-0 scale-110 bg-cover bg-center opacity-80 blur-xl\"\n style={{ backgroundImage: `url(${src})` }}\n />\n )}\n <img\n src={src}\n alt=\"\"\n onLoad={(event) => {\n const { naturalWidth, naturalHeight } = event.currentTarget;\n setIsWideImage(\n !!naturalWidth && !!naturalHeight && naturalWidth > naturalHeight,\n );\n }}\n className={cn(\n 'relative h-full',\n isWideImage ? 'w-full object-cover' : 'z-10 max-w-full object-contain',\n )}\n />\n </div>\n );\n};\n"],"names":["DropzoneCoverPreview","item","className","src","setSrc","useState","isWideImage","setIsWideImage","useEffect","isFile","objectUrl","jsxs","cn","jsx","event","naturalWidth","naturalHeight"],"mappings":";;;;AAkBO,MAAMA,IAAuB,CAAC,EAAE,MAAAC,GAAM,WAAAC,QAA2C;AACtF,QAAM,CAACC,GAAKC,CAAM,IAAIC,EAAS,EAAE,GAC3B,CAACC,GAAaC,CAAc,IAAIF,EAAS,EAAK;AAkBpD,SAhBAG,EAAU,MAAM;AACd,QAAIC,EAAOR,CAAI,GAAG;AAChB,YAAMS,IAAY,IAAI,gBAAgBT,CAAI;AAC1C,aAAAG,EAAOM,CAAS,GACT,MAAM,IAAI,gBAAgBA,CAAS;AAAA,IAC5C;AAEA,QAAI,OAAOT,KAAS,UAAU;AAC5B,MAAAG,EAAOH,CAAI;AACX;AAAA,IACF;AAEA,IAAAG,EAAO,EAAE;AAAA,EAEX,GAAG,CAACH,CAAI,CAAC,GAEJE,IAGH,gBAAAQ;AAAA,IAAC;AAAA,IAAA;AAAA,MACC,WAAWC;AAAA,QACT;AAAA,QACAV;AAAA,MAAA;AAAA,MAGD,UAAA;AAAA,QAAA,CAACI,KACA,gBAAAO;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,WAAU;AAAA,YACV,OAAO,EAAE,iBAAiB,OAAOV,CAAG,IAAA;AAAA,UAAI;AAAA,QAAA;AAAA,QAG5C,gBAAAU;AAAA,UAAC;AAAA,UAAA;AAAA,YACC,KAAAV;AAAA,YACA,KAAI;AAAA,YACJ,QAAQ,CAACW,MAAU;AACjB,oBAAM,EAAE,cAAAC,GAAc,eAAAC,EAAA,IAAkBF,EAAM;AAC9C,cAAAP;AAAA,gBACE,CAAC,CAACQ,KAAgB,CAAC,CAACC,KAAiBD,IAAeC;AAAA,cAAA;AAAA,YAExD;AAAA,YACA,WAAWJ;AAAA,cACT;AAAA,cACAN,IAAc,wBAAwB;AAAA,YAAA;AAAA,UACxC;AAAA,QAAA;AAAA,MACF;AAAA,IAAA;AAAA,EAAA,IA5Ba;AA+BnB;"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oneplatformdev/ui",
|
|
3
|
-
"version": "0.1.99-beta.
|
|
3
|
+
"version": "0.1.99-beta.286",
|
|
4
4
|
"description": "UI component library for OnePlatform",
|
|
5
5
|
"author": "One Platform Development Team",
|
|
6
6
|
"keywords": [
|
|
@@ -109,9 +109,9 @@
|
|
|
109
109
|
"recharts": "^3.2.0",
|
|
110
110
|
"sonner": "^2.0.7",
|
|
111
111
|
"vaul": "^1.1.2",
|
|
112
|
-
"@oneplatformdev/tokens": "^0.1.99-beta.
|
|
113
|
-
"@oneplatformdev/
|
|
114
|
-
"@oneplatformdev/
|
|
112
|
+
"@oneplatformdev/tokens": "^0.1.99-beta.286",
|
|
113
|
+
"@oneplatformdev/utils": "^0.1.99-beta.286",
|
|
114
|
+
"@oneplatformdev/hooks": "^0.1.99-beta.286"
|
|
115
115
|
},
|
|
116
116
|
"scripts": {
|
|
117
117
|
"chromatic": "chromatic"
|