@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.
@@ -1,52 +1,52 @@
1
1
  import { jsxs as l, jsx as e, Fragment as Y } from "react/jsx-runtime";
2
- import { X as B, UploadIcon as Fe, FileTextIcon as Z, InfoIcon as ve } from "lucide-react";
3
- import { forwardRef as Ie, useState as G, useEffect as be, useImperativeHandle as ye } from "react";
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 F, extractName as Me } from "./DropzoneUtils.js";
11
- import Se from "./icons/file-csv.svg.js";
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 Be from "./icons/file-docx.svg.js";
13
+ import Re from "./icons/file-docx.svg.js";
14
14
  import K from "./icons/file-jpg.svg.js";
15
- import Re from "./icons/file-pdf.svg.js";
16
- import Ae from "./icons/file-png.svg.js";
17
- import Pe from "./icons/file-ppt.svg.js";
18
- import We from "./icons/file-pptx.svg.js";
19
- import _e from "./icons/file-rar.svg.js";
20
- import Te from "./icons/file-svg.svg.js";
21
- import Xe from "./icons/file-webp.svg.js";
22
- import $e from "./icons/file-xls.svg.js";
23
- import Le from "./icons/file-xlsx.svg.js";
24
- import Oe from "./icons/file-zip.svg.js";
25
- import { Button as qe } from "../Button/Button.js";
26
- const Q = (r = 0) => `${(r / (1024 * 1024)).toFixed(0)} MB`, He = {
27
- csv: Se,
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: Be,
29
+ docx: Re,
30
30
  jpg: K,
31
31
  jpeg: K,
32
- pdf: Re,
33
- png: Ae,
34
- ppt: Pe,
35
- pptx: We,
36
- rar: _e,
37
- svg: Te,
38
- webp: Xe,
39
- xls: $e,
40
- xlsx: Le,
41
- zip: Oe
42
- }, Je = (r) => {
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
- }, Ye = (r) => {
47
- const s = Je(r);
48
- return He[s] ?? null;
49
- }, Ze = (r, s) => {
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 (F(a) && F(m)) {
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
- }, Ge = Ie(
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: v,
77
- value: g,
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: P = "Invalid file type",
86
+ labelInvalidFileType: W = "Invalid file type",
87
87
  labelVideoUploaded: ie = "Uploaded",
88
88
  labelVideoReplace: re = "Replace",
89
- singlePick: o = !1,
89
+ singlePick: n = !1,
90
90
  labelDropzoneClassname: ne,
91
91
  labelDropzoneSubClassname: oe,
92
92
  isUploading: f = !1,
93
- uploadProgress: W = 0,
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: w = "default",
101
+ previewVariant: N = "default",
102
102
  ...z
103
103
  }, fe) => {
104
- const [i, I] = G(g ?? []), [h, X] = G([]), b = i[0], E = h[0]?.file, pe = !!E?.type?.includes("image"), D = o && i.length > 0 && F(b), xe = D && b.type.includes("image"), $ = D && b.type.includes("video"), L = D && !xe && !$, O = o && !i.length && !!E && !pe, u = L ? b : E, y = Ye(u?.name), j = o && $, he = j, M = o && i.length > 0, ue = (t, c) => {
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 n = o ? t.slice(0, 1) : [...i, ...t].slice(0, x);
107
- I(n), R?.(n);
106
+ const o = n ? t.slice(0, 1) : [...i, ...t].slice(0, x);
107
+ I(o), R?.(o);
108
108
  };
109
- be(() => {
110
- g && !Ze(i, g) && I(g);
111
- }, [i, g]);
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 n = i.filter((N, k) => k !== c);
116
- I(n), R?.(n);
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: o ? 1 : x,
121
+ maxFiles: n ? 1 : x,
122
122
  disabled: d || f,
123
123
  noClick: !0
124
124
  });
125
- ye(fe, () => ({
125
+ be(fe, () => ({
126
126
  setItems: I
127
127
  }), []);
128
- const H = !f && !o && T && i.length > 0, J = !f && !o && i.length > 0 && /* @__PURE__ */ l("div", { className: p("w-full mt-2", v?.previewWrapper), children: [
129
- w === "default" && /* @__PURE__ */ l("pre", { className: "font-semibold text-gray-600", children: [
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
- w === "image-grid" ? "gap-2 justify-start" : "gap-4 justify-center"
138
+ N === "image-grid" ? "gap-2 justify-start" : "gap-4 justify-center"
139
139
  ),
140
140
  children: i.map((t, c) => {
141
- const n = F(t) ? t.name : Me(t), N = F(t) ? (t.size / (1024 * 1024)).toFixed(2) + " MB" : "";
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
- w === "image-grid" ? "w-[75px] h-[75px]" : "flex flex-col items-center gap-2"
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: v }),
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
- w === "image-grid" && "top-1 right-1 bg-white/90 rounded-full p-0.5"
157
+ N === "image-grid" && "top-1 right-1 bg-white/90 rounded-full p-0.5"
158
158
  ),
159
- onClick: (k) => S(k, c),
160
- children: /* @__PURE__ */ e(B, { size: 16, strokeWidth: 1, color: "black" })
159
+ onClick: (B) => S(B, c),
160
+ children: /* @__PURE__ */ e(k, { size: 16, strokeWidth: 1, color: "black" })
161
161
  }
162
162
  )
163
163
  ] }),
164
- w === "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: n }),
166
- N && /* @__PURE__ */ l("span", { children: [
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
- N,
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
- o && "shadow-none!",
204
- o && i.length > 0 && !j && "p-0! shadow-none!",
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(W))),
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, W))}%` }
236
+ style: { width: `${Math.max(0, Math.min(100, _))}%` }
237
237
  }
238
238
  ) }),
239
- _ && /* @__PURE__ */ e(
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 || !o && T) && h.length === 0 && /* @__PURE__ */ l(
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
- v?.idleWrapper
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
- qe,
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", v?.errorWrapper), children: [
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((n, N) => /* @__PURE__ */ l("li", { children: [
306
- n.code === "file-too-large" && A,
307
- n.code === "file-invalid-type" && P,
308
- n.code !== "file-too-large" && n.code !== "file-invalid-type" && n.message
309
- ] }, N)) })
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 && !!(o && i.length) && /* @__PURE__ */ e(Y, { children: L ? /* @__PURE__ */ l(
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
- y ? /* @__PURE__ */ e(
320
+ b ? /* @__PURE__ */ e(
321
321
  "img",
322
322
  {
323
- src: y,
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(B, { size: 24, color: "#06080D" })
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
- y ? /* @__PURE__ */ e(
364
+ b ? /* @__PURE__ */ e(
365
365
  "img",
366
366
  {
367
- src: y,
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(B, { size: 24, color: "#06080D" })
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 || P })
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
- Ge.displayName = "Dropzone";
402
+ Ke.displayName = "Dropzone";
403
403
  export {
404
- Ge as Dropzone
404
+ Ke as Dropzone
405
405
  };
406
406
  //# sourceMappingURL=Dropzone.js.map
@@ -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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"}