@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.
@@ -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;AA8F1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,2GAqhBpB,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"}
@@ -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 Se, UploadIcon as Me, FileTextIcon as V, InfoIcon as ee } from "lucide-react";
3
- import { forwardRef as ke, useState as te, useEffect as Re, useImperativeHandle as We } from "react";
4
- import { useDropzone as Ae } from "react-dropzone";
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 _e } from "../Card/Card.js";
7
- import { DEFAULT_FILE_TYPES as $e } from "./Dropzone.types.js";
8
- import { FilePreview as re } from "./DropzoneFilePreview.js";
9
- import { DropzoneSinglePickPreview as Xe } from "./DropzoneSinglePickPreview.js";
10
- import { isFile as z, isVideoUrl as Ge, extractName as Ke } from "./DropzoneUtils.js";
11
- import Le from "./icons/file-csv.svg.js";
12
- import Oe from "./icons/file-doc.svg.js";
13
- import Pe from "./icons/file-docx.svg.js";
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 Te from "./icons/file-pdf.svg.js";
16
- import qe from "./icons/file-png.svg.js";
17
- import He from "./icons/file-ppt.svg.js";
18
- import Je from "./icons/file-pptx.svg.js";
19
- import Ye from "./icons/file-rar.svg.js";
20
- import Ze from "./icons/file-svg.svg.js";
21
- import Qe from "./icons/file-webp.svg.js";
22
- import Ue from "./icons/file-xls.svg.js";
23
- import Ve from "./icons/file-xlsx.svg.js";
24
- import et from "./icons/file-zip.svg.js";
25
- import { Button as tt } from "../Button/Button.js";
26
- const b = (l = 0) => {
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
- }, rt = {
36
- csv: Le,
37
- doc: Oe,
38
- docx: Pe,
36
+ }, ot = {
37
+ csv: Pe,
38
+ doc: Te,
39
+ docx: qe,
39
40
  jpg: le,
40
41
  jpeg: le,
41
- pdf: Te,
42
- png: qe,
43
- ppt: He,
44
- pptx: Je,
45
- rar: Ye,
46
- svg: Ze,
47
- webp: Qe,
48
- xls: Ue,
49
- xlsx: Ve,
50
- zip: et
51
- }, lt = (l) => {
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
- }, it = (l) => {
56
- const s = lt(l);
57
- return rt[s] ?? null;
58
- }, nt = (l, s) => {
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 (z(a) && z(c)) {
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
- }, ot = ke(
78
+ }, ct = Ae(
78
79
  ({
79
- acceptTypes: l = $e,
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: u,
86
+ classNames: F,
86
87
  value: v,
87
- onChangeValue: K,
88
- className: ie,
88
+ onChangeValue: L,
89
+ className: oe,
89
90
  labelDropzonePrompt: k = "Drop files here or click to select",
90
- labelDropzoneSubPrompt: ne = "",
91
- labelOrClickToSelect: oe = "Upload file",
91
+ labelDropzoneSubPrompt: ie = "",
92
+ labelOrClickToSelect: ne = "Upload file",
92
93
  labelSelectedFiles: se = "Selected Files",
93
94
  labelUploadErrors: ce = "Upload Errors",
94
- labelFileTooLarge: R = "File is too large",
95
- labelInvalidFileType: I = "Invalid file type",
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: n = !1,
99
+ singlePick: i = !1,
99
100
  labelDropzoneClassname: me,
100
101
  labelDropzoneSubClassname: fe,
101
102
  isUploading: p = !1,
102
- uploadProgress: L = 0,
103
+ uploadProgress: O = 0,
103
104
  uploadLoadedBytes: pe = 0,
104
105
  uploadTotalBytes: xe = 0,
105
- onCancelUpload: O,
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: we = "of",
110
- playerTranslations: Ne,
111
- singlePickFileInfo: W,
112
- persistentDropzone: P = !1,
113
- previewVariant: g = "default",
110
+ labelUploadingOf: Ne = "of",
111
+ playerTranslations: we,
112
+ singlePickFileInfo: R,
113
+ persistentDropzone: W = !1,
114
+ previewVariant: h = "default",
114
115
  coverFirstItem: Fe = !1,
115
- ...A
116
+ ..._
116
117
  }, ve) => {
117
- const [i, y] = te(v ?? []), [h, T] = te([]), w = i[0], _ = h[0]?.file, Ce = !!_?.type?.includes("image"), $ = n && i.length > 0 && z(w), be = $ && w.type.includes("image"), q = $ && w.type.includes("video") || n && i.length > 0 && typeof w == "string" && Ge(w), X = $ && !be && !q, H = n && !i.length && !!_ && !Ce, N = X ? w : _, D = it(N?.name), E = n && q, ze = E, j = n && i.length > 0, Ie = j && !X && !E, ye = (t, d) => {
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 o = n ? t.slice(0, 1) : [...i, ...t].slice(0, m);
120
- y(o), K?.(o);
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 && !nt(i, v) && y(v);
124
- }, [i, v]);
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 o = i.filter((F, S) => S !== d);
129
- y(o), K?.(o);
130
- }, { getRootProps: De, getInputProps: Ee, isDragActive: je, open: G } = Ae({
131
- onDrop: ye,
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: n ? 1 : m,
135
+ maxFiles: i ? 1 : m,
135
136
  disabled: f || p,
136
137
  noClick: !0
137
138
  });
138
139
  We(ve, () => ({
139
- setItems: y
140
+ setItems: D
140
141
  }), []);
141
- const C = Fe && g === "image-grid" && !n && i.length > 0, J = !p && !n && P && i.length > 0, Y = C ? i.slice(1) : i, Z = !f && !n && g === "image-grid" && i.length > 0 && i.length < m, Q = !p && !n && (Y.length > 0 || Z) && /* @__PURE__ */ r("div", { className: x("w-full mt-2", u?.previewWrapper), children: [
142
- g === "default" && /* @__PURE__ */ r("pre", { className: "font-semibold text-gray-600", children: [
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
- g === "image-grid" ? "gap-2 justify-start" : "gap-4 justify-center"
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 o = C ? d + 1 : d, F = z(t) ? t.name : Ke(t), S = z(t) ? b(t.size) : "";
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
- g === "image-grid" ? "w-[75px] h-[75px]" : "flex flex-col items-center gap-2"
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: u }),
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
- g === "image-grid" && "top-1 right-1 bg-white/90 rounded-full p-0.5"
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: (Be) => B(Be, o),
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
- g === "default" && /* @__PURE__ */ r("span", { className: "inline-flex flex-col items-center", children: [
179
- /* @__PURE__ */ e("span", { className: "max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap", children: F }),
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
- o
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) && G();
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(Se, { size: 16, className: "text-[#9368FF]" }) })
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
- _e,
209
+ $e,
209
210
  {
210
- ...A,
211
- ...De({
211
+ ..._,
212
+ ...Ee({
212
213
  onClick: (t) => {
213
214
  if (!(f || p)) {
214
- if (ze) {
215
- A.onClick?.(t);
215
+ if (Ie) {
216
+ _.onClick?.(t);
216
217
  return;
217
218
  }
218
- G(), A.onClick?.(t);
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
- h.length > 0 && !j && "border-red-500",
230
+ u.length > 0 && !j && "border-red-500",
229
231
  je && "bg-gray-100",
230
- n && "shadow-none!",
231
- n && i.length > 0 && !E && "p-0! shadow-none!",
232
- E && "h-auto! max-h-none! min-h-0! p-2!",
233
- Ie && "h-64",
234
- ie
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", { ...Ee() }),
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(L))),
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
- b(pe),
256
+ z(pe),
255
257
  " ",
256
- we,
258
+ Ne,
257
259
  " ",
258
- b(xe)
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, L))}%` }
268
+ style: { width: `${Math.max(0, Math.min(100, O))}%` }
267
269
  }
268
270
  ) }),
269
- O && /* @__PURE__ */ e(
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(), O();
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 && (i.length === 0 || !n && P) && (h.length === 0 || !n) && /* @__PURE__ */ r(
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
- u?.idleWrapper,
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(Me, { className: "size-6 text-[#9368FF]" }) }),
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: ne
331
+ children: ie
342
332
  }
343
333
  )
344
334
  ] }) }),
345
335
  !f && /* @__PURE__ */ e(
346
- tt,
336
+ lt,
347
337
  {
348
338
  type: "button",
349
339
  size: "md",
350
- children: oe
340
+ children: ne
351
341
  }
352
342
  )
353
343
  ]
354
344
  }
355
345
  ),
356
- !p && n && h.length > 0 && !H && /* @__PURE__ */ r("div", { className: x("w-full mt-4", u?.errorWrapper), children: [
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: h.map((t, d) => /* @__PURE__ */ r("li", { 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
- b(t.file.size),
354
+ z(t.file.size),
365
355
  ")",
366
- !c && /* @__PURE__ */ e("ul", { className: "ml-4 list-disc list-inside", children: t.errors.map((o, F) => /* @__PURE__ */ r("li", { children: [
367
- o.code === "file-too-large" && R,
368
- o.code === "file-invalid-type" && I,
369
- o.code !== "file-too-large" && o.code !== "file-invalid-type" && o.message
370
- ] }, F)) })
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 && !!(n && i.length) && /* @__PURE__ */ e(U, { children: X ? /* @__PURE__ */ r(
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
- D ? /* @__PURE__ */ e(
371
+ E ? /* @__PURE__ */ e(
382
372
  "img",
383
373
  {
384
- src: D,
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: W?.name || N?.name }),
391
- /* @__PURE__ */ e("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: b(W?.size || N?.size) })
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
- Xe,
395
+ Ke,
406
396
  {
407
- item: i[0],
397
+ item: o[0],
408
398
  onRemoveClick: (t) => B(t, 0),
409
399
  onReplaceClick: (t) => {
410
- t.stopPropagation(), !f && G();
400
+ t.stopPropagation(), !f && K();
411
401
  },
412
402
  labelUploaded: ae,
413
403
  labelReplace: de,
414
- fileInfo: W,
404
+ fileInfo: R,
415
405
  disabled: f,
416
- playerTranslations: Ne
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
- D ? /* @__PURE__ */ e(
417
+ E ? /* @__PURE__ */ e(
428
418
  "img",
429
419
  {
430
- src: D,
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: h[0]?.errors?.[0]?.code === "file-too-large" ? R : h[0]?.errors?.[0]?.message || I })
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 && !n && h.length > 0 && /* @__PURE__ */ e(
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", u?.errorWrapper),
466
- children: h.map((t, d) => {
467
- const o = t.errors[0], F = o?.code === "file-too-large" ? R : o?.code === "file-invalid-type" ? I : o?.message || I;
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
- F
467
+ w
478
468
  ] })
479
469
  ]
480
470
  },
@@ -486,8 +476,8 @@ const b = (l = 0) => {
486
476
  ] });
487
477
  }
488
478
  );
489
- ot.displayName = "Dropzone";
479
+ ct.displayName = "Dropzone";
490
480
  export {
491
- ot as Dropzone
481
+ ct as Dropzone
492
482
  };
493
483
  //# sourceMappingURL=Dropzone.js.map
@@ -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.285",
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.285",
113
- "@oneplatformdev/hooks": "^0.1.99-beta.285",
114
- "@oneplatformdev/utils": "^0.1.99-beta.285"
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"