@oneplatformdev/ui 0.1.99-beta.305 → 0.1.99-beta.306

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":"useSavedColors.js","sources":["../../src/ColorInput/useSavedColors.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nexport const DEFAULT_SAVED_COLORS_STORAGE_KEY = 'op-color-input-saved-colors';\n\nconst read = (key: string): string[] => {\n if (typeof window === 'undefined') return [];\n try {\n const raw = window.localStorage.getItem(key);\n if (!raw) return [];\n const parsed = JSON.parse(raw);\n return Array.isArray(parsed) ? parsed : [];\n } catch {\n return [];\n }\n};\n\nconst write = (key: string, next: string[]) => {\n if (typeof window === 'undefined') return;\n try {\n window.localStorage.setItem(key, JSON.stringify(next));\n } catch {\n /* ignore quota / privacy-mode failures */\n }\n};\n\n/**\n * Saved-colors palette persisted to localStorage (empty by default). Used by\n * `ColorInput` when the consumer doesn't pass a controlled\n * `savedColors`/`onAddSavedColor` pair.\n */\nexport const useSavedColors = (\n storageKey: string = DEFAULT_SAVED_COLORS_STORAGE_KEY,\n) => {\n const [colors, setColors] = useState<string[]>(() => read(storageKey));\n\n useEffect(() => {\n setColors(read(storageKey));\n }, [storageKey]);\n\n const setSavedColors = useCallback(\n (next: string[]) => {\n setColors(next);\n write(storageKey, next);\n },\n [storageKey],\n );\n\n const addColor = useCallback(\n (hex: string) => {\n setColors((prev) => {\n const lower = hex.toLowerCase();\n if (prev.some((c) => c.toLowerCase() === lower)) return prev;\n const next = [...prev, hex];\n write(storageKey, next);\n return next;\n });\n },\n [storageKey],\n );\n\n const removeColor = useCallback(\n (hex: string) => {\n setColors((prev) => {\n const lower = hex.toLowerCase();\n const next = prev.filter((c) => c.toLowerCase() !== lower);\n write(storageKey, next);\n return next;\n });\n },\n [storageKey],\n );\n\n return { savedColors: colors, addColor, removeColor, setSavedColors };\n};\n"],"names":["DEFAULT_SAVED_COLORS_STORAGE_KEY","read","key","raw","parsed","write","next","useSavedColors","storageKey","colors","setColors","useState","useEffect","setSavedColors","useCallback","addColor","hex","prev","lower","c","removeColor"],"mappings":";AAEO,MAAMA,IAAmC,+BAE1CC,IAAO,CAACC,MAA0B;AACtC,MAAI,OAAO,SAAW,IAAa,QAAO,CAAA;AAC1C,MAAI;AACF,UAAMC,IAAM,OAAO,aAAa,QAAQD,CAAG;AAC3C,QAAI,CAACC,EAAK,QAAO,CAAA;AACjB,UAAMC,IAAS,KAAK,MAAMD,CAAG;AAC7B,WAAO,MAAM,QAAQC,CAAM,IAAIA,IAAS,CAAA;AAAA,EAC1C,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF,GAEMC,IAAQ,CAACH,GAAaI,MAAmB;AAC7C,MAAI,SAAO,SAAW;AACtB,QAAI;AACF,aAAO,aAAa,QAAQJ,GAAK,KAAK,UAAUI,CAAI,CAAC;AAAA,IACvD,QAAQ;AAAA,IAER;AACF,GAOaC,IAAiB,CAC5BC,IAAqBR,MAClB;AACH,QAAM,CAACS,GAAQC,CAAS,IAAIC,EAAmB,MAAMV,EAAKO,CAAU,CAAC;AAErE,EAAAI,EAAU,MAAM;AACd,IAAAF,EAAUT,EAAKO,CAAU,CAAC;AAAA,EAC5B,GAAG,CAACA,CAAU,CAAC;AAEf,QAAMK,IAAiBC;AAAA,IACrB,CAACR,MAAmB;AAClB,MAAAI,EAAUJ,CAAI,GACdD,EAAMG,GAAYF,CAAI;AAAA,IACxB;AAAA,IACA,CAACE,CAAU;AAAA,EAAA,GAGPO,IAAWD;AAAA,IACf,CAACE,MAAgB;AACf,MAAAN,EAAU,CAACO,MAAS;AAClB,cAAMC,IAAQF,EAAI,YAAA;AAClB,YAAIC,EAAK,KAAK,CAACE,MAAMA,EAAE,YAAA,MAAkBD,CAAK,EAAG,QAAOD;AACxD,cAAMX,IAAO,CAAC,GAAGW,GAAMD,CAAG;AAC1B,eAAAX,EAAMG,GAAYF,CAAI,GACfA;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAACE,CAAU;AAAA,EAAA,GAGPY,IAAcN;AAAA,IAClB,CAACE,MAAgB;AACf,MAAAN,EAAU,CAACO,MAAS;AAClB,cAAMC,IAAQF,EAAI,YAAA,GACZV,IAAOW,EAAK,OAAO,CAACE,MAAMA,EAAE,YAAA,MAAkBD,CAAK;AACzD,eAAAb,EAAMG,GAAYF,CAAI,GACfA;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAACE,CAAU;AAAA,EAAA;AAGb,SAAO,EAAE,aAAaC,GAAQ,UAAAM,GAAU,aAAAK,GAAa,gBAAAP,EAAA;AACvD;"}
1
+ {"version":3,"file":"useSavedColors.js","sources":["../../src/ColorInput/useSavedColors.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\r\n\r\nexport const DEFAULT_SAVED_COLORS_STORAGE_KEY = 'op-color-input-saved-colors';\r\n\r\nconst read = (key: string): string[] => {\r\n if (typeof window === 'undefined') return [];\r\n try {\r\n const raw = window.localStorage.getItem(key);\r\n if (!raw) return [];\r\n const parsed = JSON.parse(raw);\r\n return Array.isArray(parsed) ? parsed : [];\r\n } catch {\r\n return [];\r\n }\r\n};\r\n\r\nconst write = (key: string, next: string[]) => {\r\n if (typeof window === 'undefined') return;\r\n try {\r\n window.localStorage.setItem(key, JSON.stringify(next));\r\n } catch {\r\n /* ignore quota / privacy-mode failures */\r\n }\r\n};\r\n\r\n/**\r\n * Saved-colors palette persisted to localStorage (empty by default). Used by\r\n * `ColorInput` when the consumer doesn't pass a controlled\r\n * `savedColors`/`onAddSavedColor` pair.\r\n */\r\nexport const useSavedColors = (\r\n storageKey: string = DEFAULT_SAVED_COLORS_STORAGE_KEY,\r\n) => {\r\n const [colors, setColors] = useState<string[]>(() => read(storageKey));\r\n\r\n useEffect(() => {\r\n setColors(read(storageKey));\r\n }, [storageKey]);\r\n\r\n const setSavedColors = useCallback(\r\n (next: string[]) => {\r\n setColors(next);\r\n write(storageKey, next);\r\n },\r\n [storageKey],\r\n );\r\n\r\n const addColor = useCallback(\r\n (hex: string) => {\r\n setColors((prev) => {\r\n const lower = hex.toLowerCase();\r\n if (prev.some((c) => c.toLowerCase() === lower)) return prev;\r\n const next = [...prev, hex];\r\n write(storageKey, next);\r\n return next;\r\n });\r\n },\r\n [storageKey],\r\n );\r\n\r\n const removeColor = useCallback(\r\n (hex: string) => {\r\n setColors((prev) => {\r\n const lower = hex.toLowerCase();\r\n const next = prev.filter((c) => c.toLowerCase() !== lower);\r\n write(storageKey, next);\r\n return next;\r\n });\r\n },\r\n [storageKey],\r\n );\r\n\r\n return { savedColors: colors, addColor, removeColor, setSavedColors };\r\n};\r\n"],"names":["DEFAULT_SAVED_COLORS_STORAGE_KEY","read","key","raw","parsed","write","next","useSavedColors","storageKey","colors","setColors","useState","useEffect","setSavedColors","useCallback","addColor","hex","prev","lower","c","removeColor"],"mappings":";AAEO,MAAMA,IAAmC,+BAE1CC,IAAO,CAACC,MAA0B;AACtC,MAAI,OAAO,SAAW,IAAa,QAAO,CAAA;AAC1C,MAAI;AACF,UAAMC,IAAM,OAAO,aAAa,QAAQD,CAAG;AAC3C,QAAI,CAACC,EAAK,QAAO,CAAA;AACjB,UAAMC,IAAS,KAAK,MAAMD,CAAG;AAC7B,WAAO,MAAM,QAAQC,CAAM,IAAIA,IAAS,CAAA;AAAA,EAC1C,QAAQ;AACN,WAAO,CAAA;AAAA,EACT;AACF,GAEMC,IAAQ,CAACH,GAAaI,MAAmB;AAC7C,MAAI,SAAO,SAAW;AACtB,QAAI;AACF,aAAO,aAAa,QAAQJ,GAAK,KAAK,UAAUI,CAAI,CAAC;AAAA,IACvD,QAAQ;AAAA,IAER;AACF,GAOaC,IAAiB,CAC5BC,IAAqBR,MAClB;AACH,QAAM,CAACS,GAAQC,CAAS,IAAIC,EAAmB,MAAMV,EAAKO,CAAU,CAAC;AAErE,EAAAI,EAAU,MAAM;AACd,IAAAF,EAAUT,EAAKO,CAAU,CAAC;AAAA,EAC5B,GAAG,CAACA,CAAU,CAAC;AAEf,QAAMK,IAAiBC;AAAA,IACrB,CAACR,MAAmB;AAClB,MAAAI,EAAUJ,CAAI,GACdD,EAAMG,GAAYF,CAAI;AAAA,IACxB;AAAA,IACA,CAACE,CAAU;AAAA,EAAA,GAGPO,IAAWD;AAAA,IACf,CAACE,MAAgB;AACf,MAAAN,EAAU,CAACO,MAAS;AAClB,cAAMC,IAAQF,EAAI,YAAA;AAClB,YAAIC,EAAK,KAAK,CAACE,MAAMA,EAAE,YAAA,MAAkBD,CAAK,EAAG,QAAOD;AACxD,cAAMX,IAAO,CAAC,GAAGW,GAAMD,CAAG;AAC1B,eAAAX,EAAMG,GAAYF,CAAI,GACfA;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAACE,CAAU;AAAA,EAAA,GAGPY,IAAcN;AAAA,IAClB,CAACE,MAAgB;AACf,MAAAN,EAAU,CAACO,MAAS;AAClB,cAAMC,IAAQF,EAAI,YAAA,GACZV,IAAOW,EAAK,OAAO,CAACE,MAAMA,EAAE,YAAA,MAAkBD,CAAK;AACzD,eAAAb,EAAMG,GAAYF,CAAI,GACfA;AAAA,MACT,CAAC;AAAA,IACH;AAAA,IACA,CAACE,CAAU;AAAA,EAAA;AAGb,SAAO,EAAE,aAAaC,GAAQ,UAAAM,GAAU,aAAAK,GAAa,gBAAAP,EAAA;AACvD;"}
@@ -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;AAgG1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,2GAgkBpB,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;AAgG1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,2GAokBpB,CAAC"}
@@ -1,11 +1,11 @@
1
- import { jsxs as l, jsx as t, Fragment as V } from "react/jsx-runtime";
1
+ import { jsxs as r, jsx as t, Fragment as V } from "react/jsx-runtime";
2
2
  import { X as M, Plus as ke, UploadIcon as We, FileTextIcon as ee, InfoIcon as te } from "lucide-react";
3
- import { forwardRef as _e, useState as le, useEffect as $e, useImperativeHandle as Le } from "react";
3
+ import { forwardRef as _e, useState as re, useEffect as $e, useImperativeHandle as Le } from "react";
4
4
  import { useDropzone as Ge } from "react-dropzone";
5
5
  import { cn as x } from "@oneplatformdev/utils";
6
6
  import { Card as Xe } from "../Card/Card.js";
7
7
  import { DEFAULT_FILE_TYPES as Ke } from "./Dropzone.types.js";
8
- import { DropzoneCoverPreview as re } from "./DropzoneCoverPreview.js";
8
+ import { DropzoneCoverPreview as le } from "./DropzoneCoverPreview.js";
9
9
  import { DropzoneFileCard as Oe } from "./DropzoneFileCard.js";
10
10
  import { FilePreview as Te } from "./DropzoneFilePreview.js";
11
11
  import { DropzoneSinglePickPreview as qe } from "./DropzoneSinglePickPreview.js";
@@ -13,62 +13,62 @@ import { isFile as F, isVideoUrl as He, extractName as oe } from "./DropzoneUtil
13
13
  import Je from "./icons/file-csv.svg.js";
14
14
  import Pe from "./icons/file-doc.svg.js";
15
15
  import Ye from "./icons/file-docx.svg.js";
16
- import ie from "./icons/file-jpg.svg.js";
16
+ import ne from "./icons/file-jpg.svg.js";
17
17
  import Ze from "./icons/file-pdf.svg.js";
18
18
  import Qe from "./icons/file-png.svg.js";
19
19
  import Ue from "./icons/file-ppt.svg.js";
20
20
  import Ve from "./icons/file-pptx.svg.js";
21
21
  import et from "./icons/file-rar.svg.js";
22
22
  import tt from "./icons/file-svg.svg.js";
23
- import lt from "./icons/file-webp.svg.js";
24
- import rt from "./icons/file-xls.svg.js";
23
+ import rt from "./icons/file-webp.svg.js";
24
+ import lt from "./icons/file-xls.svg.js";
25
25
  import ot from "./icons/file-xlsx.svg.js";
26
- import it from "./icons/file-zip.svg.js";
27
- import { Button as nt } from "../Button/Button.js";
28
- const z = (r = 0) => {
29
- if (!r || r < 0) return "0 KB";
30
- const s = 1024, d = s * 1024, m = d * 1024;
31
- if (r >= m) return `${(r / m).toFixed(2)} GB`;
32
- if (r >= d) {
33
- const a = r / d;
34
- return `${a >= 100 ? a.toFixed(0) : a.toFixed(2)} MB`;
26
+ import nt from "./icons/file-zip.svg.js";
27
+ import { Button as it } from "../Button/Button.js";
28
+ const z = (l = 0) => {
29
+ if (!l || l < 0) return "0 KB";
30
+ const c = 1024, d = c * 1024, f = d * 1024;
31
+ if (l >= f) return `${(l / f).toFixed(2)} GB`;
32
+ if (l >= d) {
33
+ const m = l / d;
34
+ return `${m >= 100 ? m.toFixed(0) : m.toFixed(2)} MB`;
35
35
  }
36
- return r >= s ? `${(r / s).toFixed(r / s >= 100 ? 0 : 1)} KB` : `${r} B`;
36
+ return l >= c ? `${(l / c).toFixed(l / c >= 100 ? 0 : 1)} KB` : `${l} B`;
37
37
  }, st = {
38
38
  csv: Je,
39
39
  doc: Pe,
40
40
  docx: Ye,
41
- jpg: ie,
42
- jpeg: ie,
41
+ jpg: ne,
42
+ jpeg: ne,
43
43
  pdf: Ze,
44
44
  png: Qe,
45
45
  ppt: Ue,
46
46
  pptx: Ve,
47
47
  rar: et,
48
48
  svg: tt,
49
- webp: lt,
50
- xls: rt,
49
+ webp: rt,
50
+ xls: lt,
51
51
  xlsx: ot,
52
- zip: it
53
- }, ct = (r) => {
54
- if (!r) return "";
55
- const s = r.toLowerCase().split(".");
56
- return s.length > 1 ? s[s.length - 1] : "";
57
- }, ne = (r) => {
58
- const s = ct(r);
59
- return st[s] ?? null;
60
- }, at = (r, s) => {
61
- if (r === s) return !0;
62
- if (r.length !== s.length) return !1;
63
- for (let d = 0; d < r.length; d++) {
64
- const m = r[d], a = s[d];
65
- if (m !== a) {
66
- if (typeof m == "string" && typeof a == "string") {
67
- if (m !== a) return !1;
52
+ zip: nt
53
+ }, ct = (l) => {
54
+ if (!l) return "";
55
+ const c = l.toLowerCase().split(".");
56
+ return c.length > 1 ? c[c.length - 1] : "";
57
+ }, ie = (l) => {
58
+ const c = ct(l);
59
+ return st[c] ?? null;
60
+ }, at = (l, c) => {
61
+ if (l === c) return !0;
62
+ if (l.length !== c.length) return !1;
63
+ for (let d = 0; d < l.length; d++) {
64
+ const f = l[d], m = c[d];
65
+ if (f !== m) {
66
+ if (typeof f == "string" && typeof m == "string") {
67
+ if (f !== m) return !1;
68
68
  continue;
69
69
  }
70
- if (F(m) && F(a)) {
71
- if (m.name !== a.name || m.size !== a.size || m.type !== a.type || m.lastModified !== a.lastModified)
70
+ if (F(f) && F(m)) {
71
+ if (f.name !== m.name || f.size !== m.size || f.type !== m.type || f.lastModified !== m.lastModified)
72
72
  return !1;
73
73
  continue;
74
74
  }
@@ -76,28 +76,28 @@ const z = (r = 0) => {
76
76
  }
77
77
  }
78
78
  return !0;
79
- }, dt = _e(
79
+ }, mt = _e(
80
80
  ({
81
- acceptTypes: r = Ke,
82
- maxSizeMB: s,
81
+ acceptTypes: l = Ke,
82
+ maxSizeMB: c,
83
83
  maxFiles: d = 1,
84
- onErrors: m,
85
- hideErrors: a = !1,
86
- disabled: f = !1,
87
- classNames: b,
88
- value: I,
84
+ onErrors: f,
85
+ hideErrors: m = !1,
86
+ disabled: s = !1,
87
+ classNames: I,
88
+ value: b,
89
89
  onChangeValue: q,
90
90
  className: se,
91
91
  labelDropzonePrompt: R = "Drop files here or click to select",
92
92
  labelDropzoneSubPrompt: ce = "",
93
93
  labelOrClickToSelect: ae = "Upload file",
94
- labelSelectedFiles: de = "Selected Files",
95
- labelUploadErrors: me = "Upload Errors",
94
+ labelSelectedFiles: me = "Selected Files",
95
+ labelUploadErrors: de = "Upload Errors",
96
96
  labelFileTooLarge: k = "File is too large",
97
97
  labelInvalidFileType: y = "Invalid file type",
98
98
  labelVideoUploaded: fe = "Uploaded",
99
99
  labelVideoReplace: pe = "Replace",
100
- singlePick: n = !1,
100
+ singlePick: i = !1,
101
101
  labelDropzoneClassname: xe,
102
102
  labelDropzoneSubClassname: he,
103
103
  isUploading: p = !1,
@@ -115,50 +115,50 @@ const z = (r = 0) => {
115
115
  previewVariant: h = "default",
116
116
  coverFirstItem: ze = !1,
117
117
  ...$
118
- }, be) => {
119
- const [o, A] = le(I ?? []), [u, P] = le([]), w = o[0], L = u[0]?.file, Ie = !!L?.type?.includes("image"), G = n && o.length > 0 && F(w), Ee = G && w.type.includes("image"), Y = G && w.type.includes("video") || n && o.length > 0 && typeof w == "string" && He(w), X = G && !Ee && !Y, Z = n && !o.length && !!L && !Ie, v = X ? w : L, S = ne(v?.name), j = n && Y, De = j, B = n && o.length > 0, ye = B && !X && !j, N = h === "file-list" && !n && o.length >= d, Ae = (e, c) => {
120
- P(c), m?.(c);
121
- const i = n ? e.slice(0, 1) : [...o, ...e].slice(0, d);
122
- A(i), q?.(i);
118
+ }, Ie) => {
119
+ const [o, A] = re(b ?? []), [u, P] = re([]), w = o[0], L = u[0]?.file, be = !!L?.type?.includes("image"), G = i && o.length > 0 && F(w), Ee = G && w.type.includes("image"), Y = G && w.type.includes("video") || i && o.length > 0 && typeof w == "string" && He(w), X = G && !Ee && !Y, Z = i && !o.length && !!L && !be, v = X ? w : L, S = ie(v?.name), j = i && Y, De = j, B = i && o.length > 0, ye = B && !X && !j, N = h === "file-list" && !i && o.length >= d, Ae = (e, a) => {
120
+ P(a), f?.(a);
121
+ const n = i ? e.slice(0, 1) : [...o, ...e].slice(0, d);
122
+ A(n), q?.(n);
123
123
  };
124
124
  $e(() => {
125
- I && !at(o, I) && A(I);
126
- }, [o, I]);
127
- const E = (e, c) => {
128
- if (f) return;
125
+ b && !at(o, b) && A(b);
126
+ }, [o, b]);
127
+ const E = (e, a) => {
128
+ if (s) return;
129
129
  e.stopPropagation();
130
- const i = o.filter((g, C) => C !== c);
131
- A(i), q?.(i);
130
+ const n = o.filter((g, C) => C !== a);
131
+ A(n), q?.(n);
132
132
  }, { getRootProps: Se, getInputProps: je, isDragActive: Be, open: K } = Ge({
133
133
  onDrop: Ae,
134
- accept: r.reduce((e, c) => (e[c] = [], e), {}),
135
- maxSize: s * 1024 * 1024,
136
- maxFiles: n ? 1 : d,
137
- disabled: f || p || N,
134
+ accept: l.reduce((e, a) => (e[a] = [], e), {}),
135
+ maxSize: c * 1024 * 1024,
136
+ maxFiles: i ? 1 : d,
137
+ disabled: s || p || N,
138
138
  noClick: !0
139
139
  });
140
- Le(be, () => ({
140
+ Le(Ie, () => ({
141
141
  setItems: A
142
142
  }), []);
143
- const D = ze && h === "image-grid" && !n && o.length > 0, O = !p && !n && _ && o.length > 0, T = D ? o.slice(1) : o, Q = !f && !n && h === "image-grid" && o.length > 0 && o.length < d, Me = !n && h === "image-grid" && (_ || o.length === 0), U = !p && !n && (T.length > 0 || Q) && /* @__PURE__ */ l("div", { className: x("w-full mt-2", b?.previewWrapper), children: [
144
- h === "default" && /* @__PURE__ */ l("pre", { className: "font-semibold text-gray-600", children: [
145
- de,
143
+ const D = ze && h === "image-grid" && !i && o.length > 0, O = !p && !i && _ && o.length > 0, T = D ? o.slice(1) : o, Q = !s && !i && h === "image-grid" && o.length > 0 && o.length < d, Me = !i && h === "image-grid" && (_ || o.length === 0), U = !p && !i && (T.length > 0 || Q) && /* @__PURE__ */ r("div", { className: x("w-full mt-2", I?.previewWrapper), children: [
144
+ h === "default" && /* @__PURE__ */ r("pre", { className: "font-semibold text-gray-600", children: [
145
+ me,
146
146
  ":"
147
147
  ] }),
148
- h === "file-list" ? /* @__PURE__ */ t("div", { className: "mt-2 flex flex-col gap-2", children: T.map((e, c) => {
149
- const i = F(e) ? e.name : oe(e), g = F(e) ? z(e.size) : "";
148
+ h === "file-list" ? /* @__PURE__ */ t("div", { className: "mt-2 flex flex-col gap-2", children: T.map((e, a) => {
149
+ const n = F(e) ? e.name : oe(e), g = F(e) ? z(e.size) : "";
150
150
  return /* @__PURE__ */ t(
151
151
  Oe,
152
152
  {
153
- name: i,
153
+ name: n,
154
154
  sizeLabel: g,
155
- iconSrc: ne(i),
156
- disabled: f,
157
- onRemove: (C) => E(C, c)
155
+ iconSrc: ie(n),
156
+ disabled: s,
157
+ onRemove: (C) => E(C, a)
158
158
  },
159
- c
159
+ a
160
160
  );
161
- }) }) : /* @__PURE__ */ l(
161
+ }) }) : /* @__PURE__ */ r(
162
162
  "ul",
163
163
  {
164
164
  className: x(
@@ -166,9 +166,9 @@ const z = (r = 0) => {
166
166
  h === "image-grid" ? "gap-2 justify-start" : "gap-4 justify-center"
167
167
  ),
168
168
  children: [
169
- T.map((e, c) => {
170
- const i = D ? c + 1 : c, g = F(e) ? e.name : oe(e), C = F(e) ? z(e.size) : "";
171
- return /* @__PURE__ */ l(
169
+ T.map((e, a) => {
170
+ const n = D ? a + 1 : a, g = F(e) ? e.name : oe(e), C = F(e) ? z(e.size) : "";
171
+ return /* @__PURE__ */ r(
172
172
  "li",
173
173
  {
174
174
  className: x(
@@ -176,23 +176,23 @@ const z = (r = 0) => {
176
176
  h === "image-grid" ? "w-[75px] h-[75px]" : "flex flex-col items-center gap-2"
177
177
  ),
178
178
  children: [
179
- /* @__PURE__ */ l("div", { className: "relative w-full h-full", children: [
180
- h === "image-grid" ? /* @__PURE__ */ t(re, { item: e, className: "rounded-[8px]" }) : /* @__PURE__ */ t(Te, { item: e, styles: b }),
181
- /* @__PURE__ */ t(
179
+ /* @__PURE__ */ r("div", { className: "relative w-full h-full", children: [
180
+ h === "image-grid" ? /* @__PURE__ */ t(le, { item: e, className: "rounded-[8px]" }) : /* @__PURE__ */ t(Te, { item: e, styles: I }),
181
+ !s && /* @__PURE__ */ t(
182
182
  "div",
183
183
  {
184
184
  className: x(
185
185
  "absolute top-0 right-0 z-20 cursor-pointer bg-gray-300 rounded-sm",
186
186
  h === "image-grid" && "top-1 right-1 bg-white/90 rounded-full p-0.5"
187
187
  ),
188
- onClick: (Re) => E(Re, i),
188
+ onClick: (Re) => E(Re, n),
189
189
  children: /* @__PURE__ */ t(M, { size: 16, strokeWidth: 1, color: "black" })
190
190
  }
191
191
  )
192
192
  ] }),
193
- h === "default" && /* @__PURE__ */ l("span", { className: "inline-flex flex-col items-center", children: [
193
+ h === "default" && /* @__PURE__ */ r("span", { className: "inline-flex flex-col items-center", children: [
194
194
  /* @__PURE__ */ t("span", { className: "max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap", children: g }),
195
- C && /* @__PURE__ */ l("span", { children: [
195
+ C && /* @__PURE__ */ r("span", { children: [
196
196
  "(",
197
197
  C,
198
198
  ")"
@@ -200,7 +200,7 @@ const z = (r = 0) => {
200
200
  ] })
201
201
  ]
202
202
  },
203
- i
203
+ n
204
204
  );
205
205
  }),
206
206
  Q && /* @__PURE__ */ t(
@@ -208,7 +208,7 @@ const z = (r = 0) => {
208
208
  {
209
209
  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]",
210
210
  onClick: (e) => {
211
- e.stopPropagation(), !(f || p) && K();
211
+ e.stopPropagation(), !(s || p) && K();
212
212
  },
213
213
  children: /* @__PURE__ */ t("div", { className: "flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ t(ke, { size: 16, className: "text-[#9368FF]" }) })
214
214
  },
@@ -218,14 +218,14 @@ const z = (r = 0) => {
218
218
  }
219
219
  )
220
220
  ] });
221
- return /* @__PURE__ */ l("div", { className: "w-full select-none", children: [
222
- /* @__PURE__ */ l(
221
+ return /* @__PURE__ */ r("div", { className: "w-full select-none", children: [
222
+ /* @__PURE__ */ r(
223
223
  Xe,
224
224
  {
225
225
  ...$,
226
226
  ...Se({
227
227
  onClick: (e) => {
228
- if (!(f || p || N)) {
228
+ if (!(s || p || N)) {
229
229
  if (De) {
230
230
  $.onClick?.(e);
231
231
  return;
@@ -240,11 +240,11 @@ const z = (r = 0) => {
240
240
  B && "min-h-0 border-0 bg-transparent p-0",
241
241
  Me && "aspect-video h-auto",
242
242
  D && "relative",
243
- f && "border-[#E4E4E7] pointer-events-none",
243
+ s && "border-[#E4E4E7] pointer-events-none",
244
244
  u.length > 0 && !B && "border-red-500",
245
245
  Be && "bg-gray-100",
246
- n && "shadow-none!",
247
- n && o.length > 0 && !j && "p-0! shadow-none!",
246
+ i && "shadow-none!",
247
+ i && o.length > 0 && !j && "p-0! shadow-none!",
248
248
  j && "h-auto! max-h-none! min-h-0! p-2!",
249
249
  ye && "h-64",
250
250
  N && O && "border-[#E4E4E7] bg-[#F5F5F5] cursor-default pointer-events-none",
@@ -252,22 +252,22 @@ const z = (r = 0) => {
252
252
  ),
253
253
  children: [
254
254
  /* @__PURE__ */ t("input", { ...je() }),
255
- p && /* @__PURE__ */ l(
255
+ p && /* @__PURE__ */ r(
256
256
  "div",
257
257
  {
258
258
  className: "w-full h-full min-h-46 rounded-lg border border-[#E4E4E7] bg-[#FCFCFC] flex flex-col items-center justify-center gap-4 p-4",
259
259
  onClick: (e) => e.stopPropagation(),
260
260
  children: [
261
- /* @__PURE__ */ l("div", { className: "relative h-24 w-24", children: [
261
+ /* @__PURE__ */ r("div", { className: "relative h-24 w-24", children: [
262
262
  /* @__PURE__ */ t("svg", { className: "h-24 w-24", viewBox: "0 0 100 100", children: /* @__PURE__ */ t("circle", { cx: "50", cy: "50", r: "42", stroke: "#E6E1F5", strokeWidth: "8", fill: "none" }) }),
263
- /* @__PURE__ */ l("span", { className: "absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground", children: [
263
+ /* @__PURE__ */ r("span", { className: "absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground", children: [
264
264
  Math.max(0, Math.min(100, Math.round(H))),
265
265
  "%"
266
266
  ] })
267
267
  ] }),
268
- /* @__PURE__ */ l("div", { className: "text-center", children: [
268
+ /* @__PURE__ */ r("div", { className: "text-center", children: [
269
269
  /* @__PURE__ */ t("p", { className: "text-xl font-semibold text-foreground", children: Ne }),
270
- /* @__PURE__ */ l("p", { className: "text-sm text-[#666A78]", children: [
270
+ /* @__PURE__ */ r("p", { className: "text-sm text-[#666A78]", children: [
271
271
  z(ue),
272
272
  " ",
273
273
  ve,
@@ -297,14 +297,14 @@ const z = (r = 0) => {
297
297
  ]
298
298
  }
299
299
  ),
300
- !p && D && /* @__PURE__ */ l(
300
+ !p && D && /* @__PURE__ */ r(
301
301
  "div",
302
302
  {
303
303
  className: "absolute inset-0 rounded-[8px] overflow-hidden",
304
304
  onClick: (e) => e.stopPropagation(),
305
305
  children: [
306
- /* @__PURE__ */ t(re, { item: o[0], className: "rounded-[8px]" }),
307
- /* @__PURE__ */ t(
306
+ /* @__PURE__ */ t(le, { item: o[0], className: "rounded-[8px]" }),
307
+ !s && /* @__PURE__ */ t(
308
308
  "div",
309
309
  {
310
310
  className: "absolute top-2 right-2 z-20 cursor-pointer bg-white/90 rounded-full p-1",
@@ -315,12 +315,12 @@ const z = (r = 0) => {
315
315
  ]
316
316
  }
317
317
  ),
318
- !p && (o.length === 0 || !n && _) && (u.length === 0 || !n) && /* @__PURE__ */ l(
318
+ !p && (o.length === 0 || !i && _) && (u.length === 0 || !i) && /* @__PURE__ */ r(
319
319
  "div",
320
320
  {
321
321
  className: x(
322
322
  "flex flex-col items-center gap-2 w-full",
323
- b?.idleWrapper,
323
+ I?.idleWrapper,
324
324
  D && "invisible"
325
325
  ),
326
326
  children: [
@@ -329,20 +329,20 @@ const z = (r = 0) => {
329
329
  {
330
330
  className: x(
331
331
  "flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]",
332
- N && "bg-[#EDEDF0]"
332
+ (N || s) && "bg-[#EDEDF0]"
333
333
  ),
334
334
  children: /* @__PURE__ */ t(
335
335
  We,
336
336
  {
337
337
  className: x(
338
338
  "size-6 text-[#9368FF]",
339
- N && "text-[#A1A1AA]"
339
+ (N || s) && "text-[#A1A1AA]"
340
340
  )
341
341
  }
342
342
  )
343
343
  }
344
344
  ),
345
- /* @__PURE__ */ t("div", { className: "flex flex-col items-center gap-1 w-full", children: !f && /* @__PURE__ */ l(V, { children: [
345
+ /* @__PURE__ */ t("div", { className: "flex flex-col items-center gap-1 w-full", children: !s && /* @__PURE__ */ r(V, { children: [
346
346
  /* @__PURE__ */ t(
347
347
  "span",
348
348
  {
@@ -365,8 +365,8 @@ const z = (r = 0) => {
365
365
  }
366
366
  )
367
367
  ] }) }),
368
- !f && /* @__PURE__ */ t(
369
- nt,
368
+ !s && /* @__PURE__ */ t(
369
+ it,
370
370
  {
371
371
  type: "button",
372
372
  size: "md",
@@ -377,31 +377,31 @@ const z = (r = 0) => {
377
377
  ]
378
378
  }
379
379
  ),
380
- !p && n && u.length > 0 && !Z && /* @__PURE__ */ l("div", { className: x("w-full mt-4", b?.errorWrapper), children: [
381
- /* @__PURE__ */ l("span", { className: "font-semibold text-red-500", children: [
382
- me,
380
+ !p && i && u.length > 0 && !Z && /* @__PURE__ */ r("div", { className: x("w-full mt-4", I?.errorWrapper), children: [
381
+ /* @__PURE__ */ r("span", { className: "font-semibold text-red-500", children: [
382
+ de,
383
383
  ":"
384
384
  ] }),
385
- /* @__PURE__ */ t("ul", { className: "mt-2 text-sm text-red-500 list-disc list-inside", children: u.map((e, c) => /* @__PURE__ */ l("li", { children: [
385
+ /* @__PURE__ */ t("ul", { className: "mt-2 text-sm text-red-500 list-disc list-inside", children: u.map((e, a) => /* @__PURE__ */ r("li", { children: [
386
386
  e.file.name,
387
387
  " (",
388
388
  z(e.file.size),
389
389
  ")",
390
- !a && /* @__PURE__ */ t("ul", { className: "ml-4 list-disc list-inside", children: e.errors.map((i, g) => /* @__PURE__ */ l("li", { children: [
391
- i.code === "file-too-large" && k,
392
- i.code === "file-invalid-type" && y,
393
- i.code !== "file-too-large" && i.code !== "file-invalid-type" && i.message
390
+ !m && /* @__PURE__ */ t("ul", { className: "ml-4 list-disc list-inside", children: e.errors.map((n, g) => /* @__PURE__ */ r("li", { children: [
391
+ n.code === "file-too-large" && k,
392
+ n.code === "file-invalid-type" && y,
393
+ n.code !== "file-too-large" && n.code !== "file-invalid-type" && n.message
394
394
  ] }, g)) })
395
- ] }, c)) })
395
+ ] }, a)) })
396
396
  ] }),
397
- !p && !!(n && o.length) && /* @__PURE__ */ t(V, { children: X ? /* @__PURE__ */ l(
397
+ !p && !!(i && o.length) && /* @__PURE__ */ t(V, { children: X ? /* @__PURE__ */ r(
398
398
  "div",
399
399
  {
400
400
  className: "w-full max-w-[502px] flex flex-col items-center gap-4",
401
401
  onClick: (e) => e.stopPropagation(),
402
402
  children: [
403
403
  /* @__PURE__ */ t("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: R }),
404
- /* @__PURE__ */ l("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
404
+ /* @__PURE__ */ r("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
405
405
  S ? /* @__PURE__ */ t(
406
406
  "img",
407
407
  {
@@ -410,11 +410,11 @@ const z = (r = 0) => {
410
410
  className: "size-10 shrink-0"
411
411
  }
412
412
  ) : /* @__PURE__ */ t("div", { className: "size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0", children: /* @__PURE__ */ t(ee, { size: 20 }) }),
413
- /* @__PURE__ */ l("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
413
+ /* @__PURE__ */ r("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
414
414
  /* @__PURE__ */ t("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children: W?.name || v?.name }),
415
415
  /* @__PURE__ */ t("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: z(W?.size || v?.size) })
416
416
  ] }),
417
- !f && /* @__PURE__ */ t(
417
+ !s && /* @__PURE__ */ t(
418
418
  "div",
419
419
  {
420
420
  className: "size-6 flex items-center justify-center cursor-pointer",
@@ -431,23 +431,23 @@ const z = (r = 0) => {
431
431
  item: o[0],
432
432
  onRemoveClick: (e) => E(e, 0),
433
433
  onReplaceClick: (e) => {
434
- e.stopPropagation(), !f && K();
434
+ e.stopPropagation(), !s && K();
435
435
  },
436
436
  labelUploaded: fe,
437
437
  labelReplace: pe,
438
438
  fileInfo: W,
439
- disabled: f,
439
+ disabled: s,
440
440
  playerTranslations: Ce
441
441
  }
442
442
  ) }),
443
- !p && Z && /* @__PURE__ */ l(
443
+ !p && Z && /* @__PURE__ */ r(
444
444
  "div",
445
445
  {
446
446
  className: "w-full max-w-[502px] flex flex-col items-center gap-4",
447
447
  onClick: (e) => e.stopPropagation(),
448
448
  children: [
449
449
  /* @__PURE__ */ t("p", { className: "w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]", children: R }),
450
- /* @__PURE__ */ l("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
450
+ /* @__PURE__ */ r("div", { className: "w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4", children: [
451
451
  S ? /* @__PURE__ */ t(
452
452
  "img",
453
453
  {
@@ -456,11 +456,11 @@ const z = (r = 0) => {
456
456
  className: "size-10 shrink-0"
457
457
  }
458
458
  ) : /* @__PURE__ */ t("div", { className: "size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0", children: /* @__PURE__ */ t(ee, { size: 20 }) }),
459
- /* @__PURE__ */ l("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
459
+ /* @__PURE__ */ r("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1", children: [
460
460
  /* @__PURE__ */ t("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate", children: v?.name }),
461
461
  /* @__PURE__ */ t("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#666A78]", children: v ? `${(v.size / (1024 * 1024)).toFixed(0)} MB` : "" })
462
462
  ] }),
463
- !f && /* @__PURE__ */ t(
463
+ !s && /* @__PURE__ */ t(
464
464
  "div",
465
465
  {
466
466
  className: "size-6 flex items-center justify-center cursor-pointer",
@@ -471,7 +471,7 @@ const z = (r = 0) => {
471
471
  }
472
472
  )
473
473
  ] }),
474
- /* @__PURE__ */ l("div", { className: "w-full bg-[#DC26260F] p-4 flex items-start gap-4", children: [
474
+ /* @__PURE__ */ r("div", { className: "w-full bg-[#DC26260F] p-4 flex items-start gap-4", children: [
475
475
  /* @__PURE__ */ t(te, { size: 20, color: "#DC2626" }),
476
476
  /* @__PURE__ */ t("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: u[0]?.errors?.[0]?.code === "file-too-large" ? k : u[0]?.errors?.[0]?.message || y })
477
477
  ] })
@@ -483,26 +483,26 @@ const z = (r = 0) => {
483
483
  }
484
484
  ),
485
485
  O && /* @__PURE__ */ t("div", { className: "w-full", children: U }),
486
- !p && !n && u.length > 0 && /* @__PURE__ */ t(
486
+ !p && !i && u.length > 0 && /* @__PURE__ */ t(
487
487
  "div",
488
488
  {
489
- className: x("w-full mt-4 flex flex-col gap-2", b?.errorWrapper),
490
- children: u.map((e, c) => {
491
- const i = e.errors[0], g = i?.code === "file-too-large" ? k : i?.code === "file-invalid-type" ? y : i?.message || y;
492
- return /* @__PURE__ */ l(
489
+ className: x("w-full mt-4 flex flex-col gap-2", I?.errorWrapper),
490
+ children: u.map((e, a) => {
491
+ const n = e.errors[0], g = n?.code === "file-too-large" ? k : n?.code === "file-invalid-type" ? y : n?.message || y;
492
+ return /* @__PURE__ */ r(
493
493
  "div",
494
494
  {
495
495
  className: "w-full bg-[#DC26260F] p-4 flex items-start gap-4 rounded-[8px]",
496
496
  children: [
497
497
  /* @__PURE__ */ t(te, { size: 20, color: "#DC2626", className: "shrink-0" }),
498
- /* @__PURE__ */ l("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: [
498
+ /* @__PURE__ */ r("p", { className: "text-[12px] leading-[120%] font-medium text-[#DC2626] text-left", children: [
499
499
  /* @__PURE__ */ t("span", { className: "font-semibold", children: e.file.name }),
500
500
  " — ",
501
501
  g
502
502
  ] })
503
503
  ]
504
504
  },
505
- c
505
+ a
506
506
  );
507
507
  })
508
508
  }
@@ -510,8 +510,8 @@ const z = (r = 0) => {
510
510
  ] });
511
511
  }
512
512
  );
513
- dt.displayName = "Dropzone";
513
+ mt.displayName = "Dropzone";
514
514
  export {
515
- dt as Dropzone
515
+ mt as Dropzone
516
516
  };
517
517
  //# 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 { DropzoneCoverPreview } from './DropzoneCoverPreview';\r\nimport { DropzoneFileCard } from './DropzoneFileCard';\r\nimport { FilePreview } from './DropzoneFilePreview';\r\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\r\nimport { extractName, isFile, isVideoUrl } from './DropzoneUtils';\r\nimport { Button } from \"../Button\";\r\nimport fileCsvIcon from './icons/file-csv.svg';\r\nimport fileDocIcon from './icons/file-doc.svg';\r\nimport fileDocxIcon from './icons/file-docx.svg';\r\nimport fileJpgIcon from './icons/file-jpg.svg';\r\nimport filePdfIcon from './icons/file-pdf.svg';\r\nimport filePngIcon from './icons/file-png.svg';\r\nimport filePptIcon from './icons/file-ppt.svg';\r\nimport filePptxIcon from './icons/file-pptx.svg';\r\nimport fileRarIcon from './icons/file-rar.svg';\r\nimport fileSvgIcon from './icons/file-svg.svg';\r\nimport fileWebpIcon from './icons/file-webp.svg';\r\nimport fileXlsIcon from './icons/file-xls.svg';\r\nimport fileXlsxIcon from './icons/file-xlsx.svg';\r\nimport fileZipIcon from './icons/file-zip.svg';\r\n\r\nconst formatFileSize = (bytes = 0): string => {\r\n if (!bytes || bytes < 0) return '0 KB';\r\n const KB = 1024;\r\n const MB = KB * 1024;\r\n const GB = MB * 1024;\r\n if (bytes >= GB) return `${(bytes / GB).toFixed(2)} GB`;\r\n if (bytes >= MB) {\r\n const mb = bytes / MB;\r\n return `${mb >= 100 ? mb.toFixed(0) : mb.toFixed(2)} MB`;\r\n }\r\n if (bytes >= KB) return `${(bytes / KB).toFixed(bytes / KB >= 100 ? 0 : 1)} KB`;\r\n return `${bytes} B`;\r\n};\r\nconst FILE_EXT_ICON_MAP: Record<string, string> = {\r\n csv: fileCsvIcon,\r\n doc: fileDocIcon,\r\n docx: fileDocxIcon,\r\n jpg: fileJpgIcon,\r\n jpeg: fileJpgIcon,\r\n pdf: filePdfIcon,\r\n png: filePngIcon,\r\n ppt: filePptIcon,\r\n pptx: filePptxIcon,\r\n rar: fileRarIcon,\r\n svg: fileSvgIcon,\r\n webp: fileWebpIcon,\r\n xls: fileXlsIcon,\r\n xlsx: fileXlsxIcon,\r\n zip: fileZipIcon,\r\n};\r\n\r\nconst getFileExtension = (fileName?: string) => {\r\n if (!fileName) return '';\r\n const parts = fileName.toLowerCase().split('.');\r\n return parts.length > 1 ? parts[parts.length - 1] : '';\r\n};\r\n\r\nconst getFileTypeIconByName = (fileName?: string) => {\r\n const extension = getFileExtension(fileName);\r\n return FILE_EXT_ICON_MAP[extension] ?? null;\r\n};\r\nconst areItemsEqual = (a: DropzoneValueItem[], b: DropzoneValueItem[]) => {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n const left = a[i];\r\n const right = b[i];\r\n\r\n if (left === right) continue;\r\n\r\n if (typeof left === 'string' && typeof right === 'string') {\r\n if (left !== right) return false;\r\n continue;\r\n }\r\n\r\n if (isFile(left) && isFile(right)) {\r\n if (\r\n left.name !== right.name ||\r\n left.size !== right.size ||\r\n left.type !== right.type ||\r\n left.lastModified !== right.lastModified\r\n ) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Dropzone component - A drag-and-drop file upload area with image previews, error handling, and localization.\r\n *\r\n * @component\r\n * @param {DropzoneProps} props - The props for the Dropzone component.\r\n * @param {string[]} [props.acceptTypes=DEFAULT_FILE_TYPES] - Allowed file MIME types.\r\n * @param {number} props.maxSizeMB - Maximum allowed file size in megabytes.\r\n * @param {number} [props.maxFiles=1] - Maximum number of files that can be uploaded.\r\n * @param {DropzoneTranslations} props.translations - Translations for text labels.\r\n * @param {(errors: FileRejection[]) => void} [props.onErrors] - Callback triggered when file errors occur.\r\n * @param {boolean} [props.hideErrors=false] - Whether to hide error messages.\r\n * @param {boolean} [props.disabled=false] - Whether the dropzone is disabled.\r\n * @param {DropzoneStyles} [props.classNames] - Custom classNames for different dropzone states.\r\n * @param {DropzoneValueItem[]} [props.value=[]] - Current selected files or URLs.\r\n * @param {(items: DropzoneValueItem[]) => void} [props.onChangeValue] - Callback triggered when file selection changes.\r\n * @param {string} [props.className] - Additional class names for styling.\r\n * @param {React.Ref<HTMLDivElement>} ref - Ref for the root dropzone container.\r\n * @returns {JSX.Element} The rendered Dropzone component.\r\n */\r\nexport const Dropzone = forwardRef<DropzoneControl, DropzoneProps>(\r\n (\r\n {\r\n acceptTypes = DEFAULT_FILE_TYPES,\r\n maxSizeMB,\r\n maxFiles = 1,\r\n onErrors,\r\n hideErrors = false,\r\n disabled = false,\r\n classNames,\r\n value,\r\n onChangeValue,\r\n className,\r\n labelDropzonePrompt = 'Drop files here or click to select',\r\n labelDropzoneSubPrompt = '',\r\n labelOrClickToSelect = 'Upload file',\r\n labelSelectedFiles = 'Selected Files',\r\n labelUploadErrors = 'Upload Errors',\r\n labelFileTooLarge = 'File is too large',\r\n labelInvalidFileType = 'Invalid file type',\r\n labelVideoUploaded = 'Uploaded',\r\n labelVideoReplace = 'Replace',\r\n singlePick = false,\r\n labelDropzoneClassname,\r\n labelDropzoneSubClassname,\r\n isUploading = false,\r\n uploadProgress = 0,\r\n uploadLoadedBytes = 0,\r\n uploadTotalBytes = 0,\r\n onCancelUpload,\r\n labelUploadingTitle = 'Uploading video...',\r\n labelUploadingHint = 'Please do not close this page',\r\n labelUploadingActionCancel = 'Cancel',\r\n labelUploadingOf = 'of',\r\n playerTranslations,\r\n singlePickFileInfo,\r\n persistentDropzone = false,\r\n previewVariant = 'default',\r\n coverFirstItem = false,\r\n ...restProps\r\n },\r\n ref\r\n ) => {\r\n const [items, setItems] = useState<DropzoneValueItem[]>(value ?? []);\r\n const [fileErrors, setFileErrors] = useState<FileRejection[]>([]);\r\n const firstItem = items[0];\r\n const firstRejectedFile = fileErrors[0]?.file;\r\n const isRejectedImage = Boolean(firstRejectedFile?.type?.includes('image'));\r\n const isSingleFile = singlePick && items.length > 0 && isFile(firstItem);\r\n const isSingleImage = isSingleFile && firstItem.type.includes('image');\r\n const isSingleVideo =\r\n (isSingleFile && firstItem.type.includes('video')) ||\r\n (singlePick && items.length > 0 && typeof firstItem === 'string' && isVideoUrl(firstItem));\r\n const isSingleDocument = isSingleFile && !isSingleImage && !isSingleVideo;\r\n const hasRejectedSingleFile = singlePick && !items.length && Boolean(firstRejectedFile);\r\n const hasRejectedSingleDocumentFile = hasRejectedSingleFile && !isRejectedImage;\r\n const singleFileCard = isSingleDocument ? firstItem : firstRejectedFile;\r\n const singleFileCardIcon = getFileTypeIconByName(singleFileCard?.name);\r\n const hasSingleVideoPreview =\r\n singlePick && isSingleVideo;\r\n const shouldBlockRootOpen = hasSingleVideoPreview;\r\n const isContentPreviewMode = singlePick && items.length > 0;\r\n const isSingleImagePreview =\r\n isContentPreviewMode && !isSingleDocument && !hasSingleVideoPreview;\r\n\r\n // Тільки для мультизавантаження списком (file-list): коли набрали ліміт —\r\n // робимо зону неактивною й сірою (картки нижче лишаються інтерактивними).\r\n const isFileListLimitReached =\r\n previewVariant === 'file-list' && !singlePick && items.length >= maxFiles;\r\n\r\n const onDrop = (acceptedFiles: File[], fileRejections: FileRejection[]) => {\r\n setFileErrors(fileRejections);\r\n onErrors?.(fileRejections);\r\n\r\n const newItems = singlePick\r\n ? acceptedFiles.slice(0, 1)\r\n : [...items, ...acceptedFiles].slice(0, maxFiles);\r\n\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n useEffect(() => {\r\n if (value && !areItemsEqual(items, value)) {\r\n setItems(value);\r\n }\r\n }, [items, value]);\r\n\r\n const removeItem = (\r\n event: React.MouseEvent<HTMLDivElement>,\r\n index: number\r\n ) => {\r\n if (disabled) return;\r\n event.stopPropagation();\r\n\r\n const newItems = items.filter((_, i) => i !== index);\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n const { getRootProps, getInputProps, isDragActive, open } = useDropzone({\r\n onDrop,\r\n accept: acceptTypes.reduce((acc, fileType) => {\r\n acc[fileType] = [];\r\n return acc;\r\n }, {} as Record<string, string[]>),\r\n maxSize: maxSizeMB * 1024 * 1024,\r\n maxFiles: singlePick ? 1 : maxFiles,\r\n disabled: disabled || isUploading || isFileListLimitReached,\r\n noClick: true,\r\n });\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n setItems,\r\n };\r\n }, []);\r\n\r\n const isCoverMode =\r\n coverFirstItem && previewVariant === 'image-grid' && !singlePick && items.length > 0;\r\n\r\n const shouldRenderDetachedPreview =\r\n !isUploading && !singlePick && persistentDropzone && items.length > 0;\r\n\r\n const restItemsForGrid = isCoverMode ? items.slice(1) : items;\r\n\r\n const showAddMoreTile =\r\n !disabled &&\r\n !singlePick &&\r\n previewVariant === 'image-grid' &&\r\n items.length > 0 &&\r\n items.length < maxFiles;\r\n\r\n // For multi image selection (image-grid) keep the drop area at a 16:9 ratio.\r\n // Use aspect-ratio (not a fixed height) so it follows whatever width the\r\n // consumer sets via className. Skipped when previews fill the card.\r\n const isImageGridDropArea =\r\n !singlePick &&\r\n previewVariant === 'image-grid' &&\r\n (persistentDropzone || items.length === 0);\r\n\r\n const previewBlock =\r\n !isUploading &&\r\n !singlePick &&\r\n (restItemsForGrid.length > 0 || showAddMoreTile) && (\r\n <div className={cn('w-full mt-2', classNames?.previewWrapper)}>\r\n {previewVariant === 'default' && (\r\n <pre className=\"font-semibold text-gray-600\">\r\n {labelSelectedFiles}:\r\n </pre>\r\n )}\r\n {previewVariant === 'file-list' ? (\r\n <div className=\"mt-2 flex flex-col gap-2\">\r\n {restItemsForGrid.map((item, index) => {\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const sizeLabel = isFile(item) ? formatFileSize(item.size) : '';\r\n return (\r\n <DropzoneFileCard\r\n key={index}\r\n name={fileName}\r\n sizeLabel={sizeLabel}\r\n iconSrc={getFileTypeIconByName(fileName)}\r\n disabled={disabled}\r\n onRemove={(event) => removeItem(event, index)}\r\n />\r\n );\r\n })}\r\n </div>\r\n ) : (\r\n <ul\r\n className={cn(\r\n 'mt-2 text-sm text-gray-500 flex flex-wrap items-start',\r\n previewVariant === 'image-grid'\r\n ? 'gap-2 justify-start'\r\n : 'gap-4 justify-center'\r\n )}\r\n >\r\n {restItemsForGrid.map((item, gridIndex) => {\r\n const index = isCoverMode ? gridIndex + 1 : gridIndex;\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const fileSize = isFile(item) ? formatFileSize(item.size) : '';\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={cn(\r\n 'relative',\r\n previewVariant === 'image-grid'\r\n ? 'w-[75px] h-[75px]'\r\n : 'flex flex-col items-center gap-2'\r\n )}\r\n >\r\n <div className=\"relative w-full h-full\">\r\n {previewVariant === 'image-grid' ? (\r\n <DropzoneCoverPreview item={item} className=\"rounded-[8px]\" />\r\n ) : (\r\n <FilePreview item={item} styles={classNames} />\r\n )}\r\n <div\r\n className={cn(\r\n 'absolute top-0 right-0 z-20 cursor-pointer bg-gray-300 rounded-sm',\r\n previewVariant === 'image-grid' && 'top-1 right-1 bg-white/90 rounded-full p-0.5'\r\n )}\r\n onClick={(event) => removeItem(event, index)}\r\n >\r\n <X size={16} strokeWidth={1} color=\"black\" />\r\n </div>\r\n </div>\r\n {previewVariant === 'default' && (\r\n <span className=\"inline-flex flex-col items-center\">\r\n <span className=\"max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap\">\r\n {fileName}\r\n </span>\r\n {fileSize && <span>({fileSize})</span>}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n {showAddMoreTile && (\r\n <li\r\n key=\"add-more\"\r\n className=\"relative w-[75px] h-[75px] flex items-center justify-center rounded-[8px] border border-dashed border-[#9368FF80] bg-[#FCFCFC] cursor-pointer hover:bg-[#9368FF0F]\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n if (disabled || isUploading) return;\r\n open();\r\n }}\r\n >\r\n <div className=\"flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]\">\r\n <Plus size={16} className=\"text-[#9368FF]\" />\r\n </div>\r\n </li>\r\n )}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"w-full select-none\">\r\n <Card\r\n {...restProps}\r\n {...getRootProps({\r\n onClick: (event) => {\r\n if (disabled || isUploading || isFileListLimitReached) return;\r\n if (shouldBlockRootOpen) {\r\n restProps.onClick?.(event);\r\n return;\r\n }\r\n open();\r\n restProps.onClick?.(event);\r\n },\r\n })}\r\n className={cn(\r\n `w-full text-center flex flex-col items-center justify-center gap-6 cursor-pointer`,\r\n !isContentPreviewMode &&\r\n 'border border-dashed border-[#9368FF80] rounded-[8px] bg-[#FCFCFC] p-4',\r\n isContentPreviewMode && 'min-h-0 border-0 bg-transparent p-0',\r\n isImageGridDropArea && 'aspect-video h-auto',\r\n isCoverMode && 'relative',\r\n disabled && 'border-[#E4E4E7] pointer-events-none',\r\n fileErrors.length > 0 && !isContentPreviewMode && 'border-red-500',\r\n isDragActive && 'bg-gray-100',\r\n singlePick && 'shadow-none!',\r\n singlePick && items.length > 0 && !hasSingleVideoPreview && 'p-0! shadow-none!',\r\n hasSingleVideoPreview && 'h-auto! max-h-none! min-h-0! p-2!',\r\n isSingleImagePreview && 'h-64',\r\n isFileListLimitReached &&\r\n shouldRenderDetachedPreview &&\r\n 'border-[#E4E4E7] bg-[#F5F5F5] cursor-default pointer-events-none',\r\n className\r\n )}\r\n >\r\n <input {...getInputProps()} />\r\n\r\n {isUploading && (\r\n <div\r\n className=\"w-full h-full min-h-46 rounded-lg border border-[#E4E4E7] bg-[#FCFCFC] flex flex-col items-center justify-center gap-4 p-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"relative h-24 w-24\">\r\n <svg className=\"h-24 w-24\" viewBox=\"0 0 100 100\">\r\n <circle cx=\"50\" cy=\"50\" r=\"42\" stroke=\"#E6E1F5\" strokeWidth=\"8\" fill=\"none\" />\r\n </svg>\r\n <span className=\"absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground\">\r\n {Math.max(0, Math.min(100, Math.round(uploadProgress)))}%\r\n </span>\r\n </div>\r\n\r\n <div className=\"text-center\">\r\n <p className=\"text-xl font-semibold text-foreground\">{labelUploadingTitle}</p>\r\n <p className=\"text-sm text-[#666A78]\">\r\n {formatFileSize(uploadLoadedBytes)} {labelUploadingOf} {formatFileSize(uploadTotalBytes)}\r\n </p>\r\n <p className=\"mt-2 text-sm text-[#666A78]\">{labelUploadingHint}</p>\r\n </div>\r\n\r\n <div className=\"w-full max-w-[520px] h-2 rounded-full bg-[#E6E1F5] overflow-hidden\">\r\n <div\r\n className=\"h-full bg-[#9368FF] transition-[width] duration-150 ease-linear\"\r\n style={{ width: `${Math.max(0, Math.min(100, uploadProgress))}%` }}\r\n />\r\n </div>\r\n\r\n {onCancelUpload && (\r\n <button\r\n type=\"button\"\r\n className=\"mt-1 h-10 min-w-36 rounded-md border border-[#E4E4E7] bg-white px-6 text-base font-medium text-foreground cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n onCancelUpload();\r\n }}\r\n >\r\n {labelUploadingActionCancel}\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && isCoverMode && (\r\n <div\r\n className=\"absolute inset-0 rounded-[8px] overflow-hidden\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <DropzoneCoverPreview item={items[0]} className=\"rounded-[8px]\" />\r\n <div\r\n className=\"absolute top-2 right-2 z-20 cursor-pointer bg-white/90 rounded-full p-1\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={16} strokeWidth={1} color=\"black\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!isUploading &&\r\n (items.length === 0 || (!singlePick && persistentDropzone)) &&\r\n (fileErrors.length === 0 || !singlePick) && (\r\n <div\r\n className={cn(\r\n 'flex flex-col items-center gap-2 w-full',\r\n classNames?.idleWrapper,\r\n isCoverMode && 'invisible',\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n 'flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]',\r\n isFileListLimitReached && 'bg-[#EDEDF0]'\r\n )}\r\n >\r\n <UploadIcon\r\n className={cn(\r\n 'size-6 text-[#9368FF]',\r\n isFileListLimitReached && 'text-[#A1A1AA]'\r\n )}\r\n />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-center gap-1 w-full\">\r\n {!disabled && (\r\n <>\r\n <span\r\n className={cn(\r\n \"font-semibold text-[14px] leading-[125%] text-[#06080D] text-center w-full whitespace-pre-line\",\r\n isFileListLimitReached && 'text-[#A1A1AA]',\r\n labelDropzoneClassname\r\n )}\r\n >\r\n {labelDropzonePrompt}\r\n </span>\r\n\r\n <span\r\n className={cn(\r\n \"font-medium text-[12px] leading-[120%] text-[#666A78] text-center w-full whitespace-pre-line\",\r\n labelDropzoneSubClassname\r\n )}\r\n >\r\n {labelDropzoneSubPrompt}\r\n </span>\r\n </>\r\n )}\r\n </div>\r\n\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n size=\"md\"\r\n disabled={isFileListLimitReached}\r\n >\r\n {labelOrClickToSelect}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && singlePick && fileErrors.length > 0 && !hasRejectedSingleDocumentFile && (\r\n <div className={cn('w-full mt-4', classNames?.errorWrapper)}>\r\n <span className=\"font-semibold text-red-500\">\r\n {labelUploadErrors}:\r\n </span>\r\n <ul className=\"mt-2 text-sm text-red-500 list-disc list-inside\">\r\n {fileErrors.map((fileRejection, index) => (\r\n <li key={index}>\r\n {fileRejection.file.name} (\r\n {formatFileSize(fileRejection.file.size)})\r\n {!hideErrors && (\r\n <ul className=\"ml-4 list-disc list-inside\">\r\n {fileRejection.errors.map((error, errorIndex) => (\r\n <li key={errorIndex}>\r\n {error.code === 'file-too-large' && labelFileTooLarge}\r\n {error.code === 'file-invalid-type' &&\r\n labelInvalidFileType}\r\n {error.code !== 'file-too-large' &&\r\n error.code !== 'file-invalid-type' &&\r\n error.message}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {!isUploading && Boolean(singlePick && items.length) && (\r\n <>\r\n {isSingleDocument ? (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n )}\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singlePickFileInfo?.name || singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {formatFileSize(singlePickFileInfo?.size || singleFileCard?.size)}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <DropzoneSinglePickPreview\r\n item={items[0]}\r\n onRemoveClick={(e) => removeItem(e, 0)}\r\n onReplaceClick={(e) => {\r\n e.stopPropagation();\r\n if (disabled) return;\r\n open();\r\n }}\r\n labelUploaded={labelVideoUploaded}\r\n labelReplace={labelVideoReplace}\r\n fileInfo={singlePickFileInfo}\r\n disabled={disabled}\r\n playerTranslations={playerTranslations}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {!isUploading && hasRejectedSingleDocumentFile && (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n )}\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {singleFileCard\r\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\r\n : ''}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setFileErrors([]);\r\n }}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4\">\r\n <InfoIcon size={20} color=\"#DC2626\" />\r\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\r\n {fileErrors[0]?.errors?.[0]?.code === 'file-too-large'\r\n ? labelFileTooLarge\r\n : fileErrors[0]?.errors?.[0]?.message || labelInvalidFileType}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!shouldRenderDetachedPreview && previewBlock}\r\n </Card>\r\n {shouldRenderDetachedPreview && <div className=\"w-full\">{previewBlock}</div>}\r\n {!isUploading && !singlePick && fileErrors.length > 0 && (\r\n <div\r\n className={cn('w-full mt-4 flex flex-col gap-2', classNames?.errorWrapper)}\r\n >\r\n {fileErrors.map((fileRejection, index) => {\r\n const firstError = fileRejection.errors[0];\r\n const errorText =\r\n firstError?.code === 'file-too-large'\r\n ? labelFileTooLarge\r\n : firstError?.code === 'file-invalid-type'\r\n ? labelInvalidFileType\r\n : firstError?.message || labelInvalidFileType;\r\n\r\n return (\r\n <div\r\n key={index}\r\n className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4 rounded-[8px]\"\r\n >\r\n <InfoIcon size={20} color=\"#DC2626\" className=\"shrink-0\" />\r\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\r\n <span className=\"font-semibold\">{fileRejection.file.name}</span>\r\n {' — '}\r\n {errorText}\r\n </p>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nDropzone.displayName = 'Dropzone';\r\n\r\n"],"names":["formatFileSize","bytes","KB","MB","GB","mb","FILE_EXT_ICON_MAP","fileCsvIcon","fileDocIcon","fileDocxIcon","fileJpgIcon","filePdfIcon","filePngIcon","filePptIcon","filePptxIcon","fileRarIcon","fileSvgIcon","fileWebpIcon","fileXlsIcon","fileXlsxIcon","fileZipIcon","getFileExtension","fileName","parts","getFileTypeIconByName","extension","areItemsEqual","a","b","i","left","right","isFile","Dropzone","forwardRef","acceptTypes","DEFAULT_FILE_TYPES","maxSizeMB","maxFiles","onErrors","hideErrors","disabled","classNames","value","onChangeValue","className","labelDropzonePrompt","labelDropzoneSubPrompt","labelOrClickToSelect","labelSelectedFiles","labelUploadErrors","labelFileTooLarge","labelInvalidFileType","labelVideoUploaded","labelVideoReplace","singlePick","labelDropzoneClassname","labelDropzoneSubClassname","isUploading","uploadProgress","uploadLoadedBytes","uploadTotalBytes","onCancelUpload","labelUploadingTitle","labelUploadingHint","labelUploadingActionCancel","labelUploadingOf","playerTranslations","singlePickFileInfo","persistentDropzone","previewVariant","coverFirstItem","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","firstItem","firstRejectedFile","isRejectedImage","isSingleFile","isSingleImage","isSingleVideo","isVideoUrl","isSingleDocument","hasRejectedSingleDocumentFile","singleFileCard","singleFileCardIcon","hasSingleVideoPreview","shouldBlockRootOpen","isContentPreviewMode","isSingleImagePreview","isFileListLimitReached","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","isCoverMode","shouldRenderDetachedPreview","restItemsForGrid","showAddMoreTile","isImageGridDropArea","previewBlock","jsxs","cn","jsx","item","extractName","sizeLabel","DropzoneFileCard","gridIndex","fileSize","DropzoneCoverPreview","FilePreview","X","Plus","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","InfoIcon","firstError","errorText"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,MAAMA,IAAiB,CAACC,IAAQ,MAAc;AAC5C,MAAI,CAACA,KAASA,IAAQ,EAAG,QAAO;AAChC,QAAMC,IAAK,MACLC,IAAKD,IAAK,MACVE,IAAKD,IAAK;AAChB,MAAIF,KAASG,EAAI,QAAO,IAAIH,IAAQG,GAAI,QAAQ,CAAC,CAAC;AAClD,MAAIH,KAASE,GAAI;AACf,UAAME,IAAKJ,IAAQE;AACnB,WAAO,GAAGE,KAAM,MAAMA,EAAG,QAAQ,CAAC,IAAIA,EAAG,QAAQ,CAAC,CAAC;AAAA,EACrD;AACA,SAAIJ,KAASC,IAAW,IAAID,IAAQC,GAAI,QAAQD,IAAQC,KAAM,MAAM,IAAI,CAAC,CAAC,QACnE,GAAGD,CAAK;AACjB,GACMK,KAA4C;AAAA,EAChD,KAAKC;AAAA,EACL,KAAKC;AAAA,EACL,MAAMC;AAAA,EACN,KAAKC;AAAA,EACL,MAAMA;AAAA,EACN,KAAKC;AAAA,EACL,KAAKC;AAAA,EACL,KAAKC;AAAA,EACL,MAAMC;AAAA,EACN,KAAKC;AAAA,EACL,KAAKC;AAAA,EACL,MAAMC;AAAA,EACN,KAAKC;AAAA,EACL,MAAMC;AAAA,EACN,KAAKC;AACP,GAEMC,KAAmB,CAACC,MAAsB;AAC9C,MAAI,CAACA,EAAU,QAAO;AACtB,QAAMC,IAAQD,EAAS,YAAA,EAAc,MAAM,GAAG;AAC9C,SAAOC,EAAM,SAAS,IAAIA,EAAMA,EAAM,SAAS,CAAC,IAAI;AACtD,GAEMC,KAAwB,CAACF,MAAsB;AACnD,QAAMG,IAAYJ,GAAiBC,CAAQ;AAC3C,SAAOhB,GAAkBmB,CAAS,KAAK;AACzC,GACMC,KAAgB,CAACC,GAAwBC,MAA2B;AACxE,MAAID,MAAMC,EAAG,QAAO;AACpB,MAAID,EAAE,WAAWC,EAAE,OAAQ,QAAO;AAElC,WAASC,IAAI,GAAGA,IAAIF,EAAE,QAAQE,KAAK;AACjC,UAAMC,IAAOH,EAAEE,CAAC,GACVE,IAAQH,EAAEC,CAAC;AAEjB,QAAIC,MAASC,GAEb;AAAA,UAAI,OAAOD,KAAS,YAAY,OAAOC,KAAU,UAAU;AACzD,YAAID,MAASC,EAAO,QAAO;AAC3B;AAAA,MACF;AAEA,UAAIC,EAAOF,CAAI,KAAKE,EAAOD,CAAK,GAAG;AACjC,YACED,EAAK,SAASC,EAAM,QACpBD,EAAK,SAASC,EAAM,QACpBD,EAAK,SAASC,EAAM,QACpBD,EAAK,iBAAiBC,EAAM;AAE5B,iBAAO;AAET;AAAA,MACF;AAEA,aAAO;AAAA;AAAA,EACT;AAEA,SAAO;AACT,GAqBaE,KAAWC;AAAA,EACtB,CACE;AAAA,IACE,aAAAC,IAAcC;AAAA,IACd,WAAAC;AAAA,IACA,UAAAC,IAAW;AAAA,IACX,UAAAC;AAAA,IACA,YAAAC,IAAa;AAAA,IACb,UAAAC,IAAW;AAAA,IACX,YAAAC;AAAA,IACA,OAAAC;AAAA,IACA,eAAAC;AAAA,IACA,WAAAC;AAAA,IACA,qBAAAC,IAAsB;AAAA,IACtB,wBAAAC,KAAyB;AAAA,IACzB,sBAAAC,KAAuB;AAAA,IACvB,oBAAAC,KAAqB;AAAA,IACrB,mBAAAC,KAAoB;AAAA,IACpB,mBAAAC,IAAoB;AAAA,IACpB,sBAAAC,IAAuB;AAAA,IACvB,oBAAAC,KAAqB;AAAA,IACrB,mBAAAC,KAAoB;AAAA,IACpB,YAAAC,IAAa;AAAA,IACb,wBAAAC;AAAA,IACA,2BAAAC;AAAA,IACA,aAAAC,IAAc;AAAA,IACd,gBAAAC,IAAiB;AAAA,IACjB,mBAAAC,KAAoB;AAAA,IACpB,kBAAAC,KAAmB;AAAA,IACnB,gBAAAC;AAAA,IACA,qBAAAC,KAAsB;AAAA,IACtB,oBAAAC,KAAqB;AAAA,IACrB,4BAAAC,KAA6B;AAAA,IAC7B,kBAAAC,KAAmB;AAAA,IACnB,oBAAAC;AAAA,IACA,oBAAAC;AAAA,IACA,oBAAAC,IAAqB;AAAA,IACrB,gBAAAC,IAAiB;AAAA,IACjB,gBAAAC,KAAiB;AAAA,IACjB,GAAGC;AAAA,EAAA,GAELC,OACG;AACH,UAAM,CAACC,GAAOC,CAAQ,IAAIC,GAA8BjC,KAAS,CAAA,CAAE,GAC7D,CAACkC,GAAYC,CAAa,IAAIF,GAA0B,CAAA,CAAE,GAC1DG,IAAYL,EAAM,CAAC,GACnBM,IAAoBH,EAAW,CAAC,GAAG,MACnCI,KAAkB,EAAQD,GAAmB,MAAM,SAAS,OAAO,GACnEE,IAAe3B,KAAcmB,EAAM,SAAS,KAAK1C,EAAO+C,CAAS,GACjEI,KAAgBD,KAAgBH,EAAU,KAAK,SAAS,OAAO,GAC/DK,IACHF,KAAgBH,EAAU,KAAK,SAAS,OAAO,KAC/CxB,KAAcmB,EAAM,SAAS,KAAK,OAAOK,KAAc,YAAYM,GAAWN,CAAS,GACpFO,IAAmBJ,KAAgB,CAACC,MAAiB,CAACC,GAEtDG,IADwBhC,KAAc,CAACmB,EAAM,UAAU,EAAQM,KACN,CAACC,IAC1DO,IAAiBF,IAAmBP,IAAYC,GAChDS,IAAqBjE,GAAsBgE,GAAgB,IAAI,GAC/DE,IACJnC,KAAc6B,GACVO,KAAsBD,GACtBE,IAAuBrC,KAAcmB,EAAM,SAAS,GACpDmB,KACJD,KAAwB,CAACN,KAAoB,CAACI,GAI1CI,IACJxB,MAAmB,eAAe,CAACf,KAAcmB,EAAM,UAAUpC,GAE7DyD,KAAS,CAACC,GAAuBC,MAAoC;AACzE,MAAAnB,EAAcmB,CAAc,GAC5B1D,IAAW0D,CAAc;AAEzB,YAAMC,IAAW3C,IACbyC,EAAc,MAAM,GAAG,CAAC,IACxB,CAAC,GAAGtB,GAAO,GAAGsB,CAAa,EAAE,MAAM,GAAG1D,CAAQ;AAElD,MAAAqC,EAASuB,CAAQ,GACjBtD,IAAgBsD,CAAQ;AAAA,IAC1B;AAEA,IAAAC,GAAU,MAAM;AACd,MAAIxD,KAAS,CAACjB,GAAcgD,GAAO/B,CAAK,KACtCgC,EAAShC,CAAK;AAAA,IAElB,GAAG,CAAC+B,GAAO/B,CAAK,CAAC;AAEjB,UAAMyD,IAAa,CACjBC,GACAC,MACG;AACH,UAAI7D,EAAU;AACd,MAAA4D,EAAM,gBAAA;AAEN,YAAMH,IAAWxB,EAAM,OAAO,CAAC6B,GAAG1E,MAAMA,MAAMyE,CAAK;AACnD,MAAA3B,EAASuB,CAAQ,GACjBtD,IAAgBsD,CAAQ;AAAA,IAC1B,GAEM,EAAE,cAAAM,IAAc,eAAAC,IAAe,cAAAC,IAAc,MAAAC,EAAA,IAASC,GAAY;AAAA,MACtE,QAAAb;AAAA,MACA,QAAQ5D,EAAY,OAAO,CAAC0E,GAAKC,OAC/BD,EAAIC,CAAQ,IAAI,CAAA,GACTD,IACN,CAAA,CAA8B;AAAA,MACjC,SAASxE,IAAY,OAAO;AAAA,MAC5B,UAAUkB,IAAa,IAAIjB;AAAA,MAC3B,UAAUG,KAAYiB,KAAeoC;AAAA,MACrC,SAAS;AAAA,IAAA,CACV;AAED,IAAAiB,GAAoBtC,IAAK,OAChB;AAAA,MACL,UAAAE;AAAA,IAAA,IAED,CAAA,CAAE;AAEL,UAAMqC,IACJzC,MAAkBD,MAAmB,gBAAgB,CAACf,KAAcmB,EAAM,SAAS,GAE/EuC,IACJ,CAACvD,KAAe,CAACH,KAAcc,KAAsBK,EAAM,SAAS,GAEhEwC,IAAmBF,IAActC,EAAM,MAAM,CAAC,IAAIA,GAElDyC,IACJ,CAAC1E,KACD,CAACc,KACDe,MAAmB,gBACnBI,EAAM,SAAS,KACfA,EAAM,SAASpC,GAKX8E,KACJ,CAAC7D,KACDe,MAAmB,iBAClBD,KAAsBK,EAAM,WAAW,IAEpC2C,IACJ,CAAC3D,KACD,CAACH,MACA2D,EAAiB,SAAS,KAAKC,MAChC,gBAAAG,EAAC,SAAI,WAAWC,EAAG,eAAe7E,GAAY,cAAc,GACzD,UAAA;AAAA,MAAA4B,MAAmB,aAClB,gBAAAgD,EAAC,OAAA,EAAI,WAAU,+BACZ,UAAA;AAAA,QAAArE;AAAA,QAAmB;AAAA,MAAA,GACtB;AAAA,MAEDqB,MAAmB,cAClB,gBAAAkD,EAAC,OAAA,EAAI,WAAU,4BACZ,UAAAN,EAAiB,IAAI,CAACO,GAAMnB,MAAU;AACrC,cAAMhF,IAAWU,EAAOyF,CAAI,IAAIA,EAAK,OAAOC,GAAYD,CAAI,GACtDE,IAAY3F,EAAOyF,CAAI,IAAIzH,EAAeyH,EAAK,IAAI,IAAI;AAC7D,eACE,gBAAAD;AAAA,UAACI;AAAA,UAAA;AAAA,YAEC,MAAMtG;AAAA,YACN,WAAAqG;AAAA,YACA,SAASnG,GAAsBF,CAAQ;AAAA,YACvC,UAAAmB;AAAA,YACA,UAAU,CAAC4D,MAAUD,EAAWC,GAAOC,CAAK;AAAA,UAAA;AAAA,UALvCA;AAAA,QAAA;AAAA,MAQX,CAAC,GACH,IAEF,gBAAAgB;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC;AAAA,YACT;AAAA,YACAjD,MAAmB,eACf,wBACA;AAAA,UAAA;AAAA,UAGL,UAAA;AAAA,YAAA4C,EAAiB,IAAI,CAACO,GAAMI,MAAc;AACzC,oBAAMvB,IAAQU,IAAca,IAAY,IAAIA,GACtCvG,IAAWU,EAAOyF,CAAI,IAAIA,EAAK,OAAOC,GAAYD,CAAI,GACtDK,IAAW9F,EAAOyF,CAAI,IAAIzH,EAAeyH,EAAK,IAAI,IAAI;AAE5D,qBACE,gBAAAH;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAWC;AAAA,oBACT;AAAA,oBACAjD,MAAmB,eACf,sBACA;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,gBAAAgD,EAAC,OAAA,EAAI,WAAU,0BACZ,UAAA;AAAA,sBAAAhD,MAAmB,eAClB,gBAAAkD,EAACO,IAAA,EAAqB,MAAAN,GAAY,WAAU,gBAAA,CAAgB,IAE5D,gBAAAD,EAACQ,IAAA,EAAY,MAAAP,GAAY,QAAQ/E,EAAA,CAAY;AAAA,sBAE/C,gBAAA8E;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAWD;AAAA,4BACT;AAAA,4BACAjD,MAAmB,gBAAgB;AAAA,0BAAA;AAAA,0BAErC,SAAS,CAAC+B,OAAUD,EAAWC,IAAOC,CAAK;AAAA,0BAE3C,4BAAC2B,GAAA,EAAE,MAAM,IAAI,aAAa,GAAG,OAAM,QAAA,CAAQ;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAC7C,GACF;AAAA,oBACC3D,MAAmB,aAClB,gBAAAgD,EAAC,QAAA,EAAK,WAAU,qCACd,UAAA;AAAA,sBAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,gEACb,UAAAlG,GACH;AAAA,sBACCwG,uBAAa,QAAA,EAAK,UAAA;AAAA,wBAAA;AAAA,wBAAEA;AAAA,wBAAS;AAAA,sBAAA,EAAA,CAAC;AAAA,oBAAA,EAAA,CACjC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBA9BGxB;AAAA,cAAA;AAAA,YAkCX,CAAC;AAAA,YACAa,KACC,gBAAAK;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBACV,SAAS,CAACnB,MAAU;AAElB,kBADAA,EAAM,gBAAA,GACF,EAAA5D,KAAYiB,MAChBiD,EAAA;AAAA,gBACF;AAAA,gBAEA,UAAA,gBAAAa,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA,gBAAAA,EAACU,MAAK,MAAM,IAAI,WAAU,iBAAA,CAAiB,EAAA,CAC7C;AAAA,cAAA;AAAA,cAVI;AAAA,YAAA;AAAA,UAWN;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,GAEF;AAGF,WACE,gBAAAZ,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAACa;AAAA,QAAA;AAAA,UACE,GAAG3D;AAAA,UACH,GAAGgC,GAAa;AAAA,YACf,SAAS,CAACH,MAAU;AAClB,kBAAI,EAAA5D,KAAYiB,KAAeoC,IAC/B;AAAA,oBAAIH,IAAqB;AACvB,kBAAAnB,EAAU,UAAU6B,CAAK;AACzB;AAAA,gBACF;AACA,gBAAAM,EAAA,GACAnC,EAAU,UAAU6B,CAAK;AAAA;AAAA,YAC3B;AAAA,UAAA,CACD;AAAA,UACD,WAAWkB;AAAA,YACT;AAAA,YACA,CAAC3B,KACC;AAAA,YACFA,KAAwB;AAAA,YACxBwB,MAAuB;AAAA,YACvBJ,KAAe;AAAA,YACfvE,KAAY;AAAA,YACZoC,EAAW,SAAS,KAAK,CAACe,KAAwB;AAAA,YAClDc,MAAgB;AAAA,YAChBnD,KAAc;AAAA,YACdA,KAAcmB,EAAM,SAAS,KAAK,CAACgB,KAAyB;AAAA,YAC5DA,KAAyB;AAAA,YACzBG,MAAwB;AAAA,YACxBC,KACEmB,KACA;AAAA,YACFpE;AAAA,UAAA;AAAA,UAGF,UAAA;AAAA,YAAA,gBAAA2E,EAAC,SAAA,EAAO,GAAGf,GAAA,EAAc,CAAG;AAAA,YAE7B/C,KACC,gBAAA4D;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAACjB,MAAUA,EAAM,gBAAA;AAAA,gBAE1B,UAAA;AAAA,kBAAA,gBAAAiB,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,oBAAA,gBAAAE,EAAC,SAAI,WAAU,aAAY,SAAQ,eACjC,UAAA,gBAAAA,EAAC,YAAO,IAAG,MAAK,IAAG,MAAK,GAAE,MAAK,QAAO,WAAU,aAAY,KAAI,MAAK,QAAO,EAAA,CAC9E;AAAA,oBACA,gBAAAF,EAAC,QAAA,EAAK,WAAU,2FACb,UAAA;AAAA,sBAAA,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAM3D,CAAc,CAAC,CAAC;AAAA,sBAAE;AAAA,oBAAA,EAAA,CAC1D;AAAA,kBAAA,GACF;AAAA,kBAEA,gBAAA2D,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,oBAAA,gBAAAE,EAAC,KAAA,EAAE,WAAU,yCAAyC,UAAAzD,IAAoB;AAAA,oBAC1E,gBAAAuD,EAAC,KAAA,EAAE,WAAU,0BACV,UAAA;AAAA,sBAAAtH,EAAe4D,EAAiB;AAAA,sBAAE;AAAA,sBAAEM;AAAA,sBAAiB;AAAA,sBAAElE,EAAe6D,EAAgB;AAAA,oBAAA,GACzF;AAAA,oBACA,gBAAA2D,EAAC,KAAA,EAAE,WAAU,+BAA+B,UAAAxD,GAAA,CAAmB;AAAA,kBAAA,GACjE;AAAA,kBAEA,gBAAAwD,EAAC,OAAA,EAAI,WAAU,sEACb,UAAA,gBAAAA;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,OAAO,EAAE,OAAO,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK7D,CAAc,CAAC,CAAC,IAAA;AAAA,oBAAI;AAAA,kBAAA,GAErE;AAAA,kBAECG,KACC,gBAAA0D;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,WAAU;AAAA,sBACV,SAAS,CAACnB,MAAU;AAClB,wBAAAA,EAAM,gBAAA,GACNvC,EAAA;AAAA,sBACF;AAAA,sBAEC,UAAAG;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACH;AAAA,cAAA;AAAA,YAAA;AAAA,YAKL,CAACP,KAAesD,KACf,gBAAAM;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAACjB,MAAUA,EAAM,gBAAA;AAAA,gBAE1B,UAAA;AAAA,kBAAA,gBAAAmB,EAACO,MAAqB,MAAMrD,EAAM,CAAC,GAAG,WAAU,iBAAgB;AAAA,kBAChE,gBAAA8C;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS,CAACnB,MAAUD,EAAWC,GAAO,CAAC;AAAA,sBAEvC,4BAAC4B,GAAA,EAAE,MAAM,IAAI,aAAa,GAAG,OAAM,QAAA,CAAQ;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAC7C;AAAA,cAAA;AAAA,YAAA;AAAA,YAIH,CAACvE,MACCgB,EAAM,WAAW,KAAM,CAACnB,KAAcc,OACtCQ,EAAW,WAAW,KAAK,CAACtB,MAC7B,gBAAA+D;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWC;AAAA,kBACT;AAAA,kBACA7E,GAAY;AAAA,kBACZsE,KAAe;AAAA,gBAAA;AAAA,gBAGjB,UAAA;AAAA,kBAAA,gBAAAQ;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAWD;AAAA,wBACT;AAAA,wBACAzB,KAA0B;AAAA,sBAAA;AAAA,sBAG5B,UAAA,gBAAA0B;AAAA,wBAACY;AAAA,wBAAA;AAAA,0BACC,WAAWb;AAAA,4BACT;AAAA,4BACAzB,KAA0B;AAAA,0BAAA;AAAA,wBAC5B;AAAA,sBAAA;AAAA,oBACF;AAAA,kBAAA;AAAA,oCAGD,OAAA,EAAI,WAAU,2CACZ,UAAA,CAACrD,KACA,gBAAA6E,EAAAe,GAAA,EACE,UAAA;AAAA,oBAAA,gBAAAb;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWD;AAAA,0BACT;AAAA,0BACAzB,KAA0B;AAAA,0BAC1BtC;AAAA,wBAAA;AAAA,wBAGD,UAAAV;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGH,gBAAA0E;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWD;AAAA,0BACT;AAAA,0BACA9D;AAAA,wBAAA;AAAA,wBAGD,UAAAV;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH,EAAA,CACF,EAAA,CAEJ;AAAA,kBAEC,CAACN,KACA,gBAAA+E;AAAA,oBAACc;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,MAAK;AAAA,sBACL,UAAUxC;AAAA,sBAET,UAAA9C;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACH;AAAA,cAAA;AAAA,YAAA;AAAA,YAKL,CAACU,KAAeH,KAAcsB,EAAW,SAAS,KAAK,CAACU,KACvD,gBAAA+B,EAAC,SAAI,WAAWC,EAAG,eAAe7E,GAAY,YAAY,GACxD,UAAA;AAAA,cAAA,gBAAA4E,EAAC,QAAA,EAAK,WAAU,8BACb,UAAA;AAAA,gBAAApE;AAAA,gBAAkB;AAAA,cAAA,GACrB;AAAA,cACA,gBAAAsE,EAAC,MAAA,EAAG,WAAU,mDACX,UAAA3C,EAAW,IAAI,CAAC0D,GAAejC,MAC9B,gBAAAgB,EAAC,MAAA,EACE,UAAA;AAAA,gBAAAiB,EAAc,KAAK;AAAA,gBAAK;AAAA,gBACxBvI,EAAeuI,EAAc,KAAK,IAAI;AAAA,gBAAE;AAAA,gBACxC,CAAC/F,KACA,gBAAAgF,EAAC,MAAA,EAAG,WAAU,8BACX,UAAAe,EAAc,OAAO,IAAI,CAACC,GAAOC,wBAC/B,MAAA,EACE,UAAA;AAAA,kBAAAD,EAAM,SAAS,oBAAoBrF;AAAA,kBACnCqF,EAAM,SAAS,uBACdpF;AAAA,kBACDoF,EAAM,SAAS,oBACdA,EAAM,SAAS,uBACfA,EAAM;AAAA,gBAAA,EAAA,GANDC,CAOT,CACD,EAAA,CACH;AAAA,cAAA,EAAA,GAfKnC,CAiBT,CACD,EAAA,CACH;AAAA,YAAA,GACF;AAAA,YAGD,CAAC5C,KAAe,GAAQH,KAAcmB,EAAM,kCAExC,UAAAY,IACC,gBAAAgC;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAACjB,MAAUA,EAAM,gBAAA;AAAA,gBAE1B,UAAA;AAAA,kBAAA,gBAAAmB,EAAC,KAAA,EAAE,WAAU,8EACV,UAAA1E,GACH;AAAA,kBAEA,gBAAAwE,EAAC,OAAA,EAAI,WAAU,8EACZ,UAAA;AAAA,oBAAA7B,IACC,gBAAA+B;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,KAAK/B;AAAA,wBACL,KAAI;AAAA,wBACJ,WAAU;AAAA,sBAAA;AAAA,oBAAA,sBAGX,OAAA,EAAI,WAAU,2FACb,UAAA,gBAAA+B,EAACkB,IAAA,EAAa,MAAM,GAAA,CAAI,EAAA,CAC1B;AAAA,oBAEF,gBAAApB,EAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,sBAAA,gBAAAE,EAAC,UAAK,WAAU,2EACb,UAAApD,GAAoB,QAAQoB,GAAgB,MAC/C;AAAA,sBACA,gBAAAgC,EAAC,UAAK,WAAU,gEACb,YAAepD,GAAoB,QAAQoB,GAAgB,IAAI,EAAA,CAClE;AAAA,oBAAA,GACF;AAAA,oBACC,CAAC/C,KACA,gBAAA+E;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAS,CAACnB,MAAUD,EAAWC,GAAO,CAAC;AAAA,wBAEvC,UAAA,gBAAAmB,EAACS,GAAA,EAAE,MAAM,IAAI,OAAM,UAAA,CAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC/B,EAAA,CAEJ;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,IAGF,gBAAAT;AAAA,cAACmB;AAAA,cAAA;AAAA,gBACC,MAAMjE,EAAM,CAAC;AAAA,gBACb,eAAe,CAAC,MAAM0B,EAAW,GAAG,CAAC;AAAA,gBACrC,gBAAgB,CAAC,MAAM;AAErB,kBADA,EAAE,gBAAA,GACE,CAAA3D,KACJkE,EAAA;AAAA,gBACF;AAAA,gBACA,eAAetD;AAAA,gBACf,cAAcC;AAAA,gBACd,UAAUc;AAAA,gBACV,UAAA3B;AAAA,gBACA,oBAAA0B;AAAA,cAAA;AAAA,YAAA,GAGN;AAAA,YAGD,CAACT,KAAe6B,KACf,gBAAA+B;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAACjB,MAAUA,EAAM,gBAAA;AAAA,gBAE1B,UAAA;AAAA,kBAAA,gBAAAmB,EAAC,KAAA,EAAE,WAAU,8EACV,UAAA1E,GACH;AAAA,kBAEA,gBAAAwE,EAAC,OAAA,EAAI,WAAU,8EACZ,UAAA;AAAA,oBAAA7B,IACC,gBAAA+B;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,KAAK/B;AAAA,wBACL,KAAI;AAAA,wBACJ,WAAU;AAAA,sBAAA;AAAA,oBAAA,sBAGX,OAAA,EAAI,WAAU,2FACb,UAAA,gBAAA+B,EAACkB,IAAA,EAAa,MAAM,GAAA,CAAI,EAAA,CAC1B;AAAA,oBAEF,gBAAApB,EAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,sBAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,2EACb,UAAAhC,GAAgB,MACnB;AAAA,sBACA,gBAAAgC,EAAC,QAAA,EAAK,WAAU,gEACb,cACG,IAAIhC,EAAe,QAAQ,OAAO,OAAO,QAAQ,CAAC,CAAC,QACnD,GAAA,CACN;AAAA,oBAAA,GACF;AAAA,oBACC,CAAC/C,KACA,gBAAA+E;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAS,CAACnB,MAAU;AAClB,0BAAAA,EAAM,gBAAA,GACNvB,EAAc,CAAA,CAAE;AAAA,wBAClB;AAAA,wBAEA,UAAA,gBAAA0C,EAACS,GAAA,EAAE,MAAM,IAAI,OAAM,UAAA,CAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC/B,GAEJ;AAAA,kBAEA,gBAAAX,EAAC,OAAA,EAAI,WAAU,oDACb,UAAA;AAAA,oBAAA,gBAAAE,EAACoB,IAAA,EAAS,MAAM,IAAI,OAAM,WAAU;AAAA,oBACpC,gBAAApB,EAAC,OAAE,WAAU,mEACV,YAAW,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,mBAClCrE,IACA0B,EAAW,CAAC,GAAG,SAAS,CAAC,GAAG,WAAWzB,EAAA,CAC7C;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAID,CAAC6D,KAA+BI;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAElCJ,KAA+B,gBAAAO,EAAC,OAAA,EAAI,WAAU,UAAU,UAAAH,GAAa;AAAA,MACrE,CAAC3D,KAAe,CAACH,KAAcsB,EAAW,SAAS,KAClD,gBAAA2C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWD,EAAG,mCAAmC7E,GAAY,YAAY;AAAA,UAExE,UAAAmC,EAAW,IAAI,CAAC0D,GAAejC,MAAU;AACxC,kBAAMuC,IAAaN,EAAc,OAAO,CAAC,GACnCO,IACJD,GAAY,SAAS,mBACjB1F,IACA0F,GAAY,SAAS,sBACnBzF,IACAyF,GAAY,WAAWzF;AAE/B,mBACE,gBAAAkE;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAA,gBAAAE,EAACoB,MAAS,MAAM,IAAI,OAAM,WAAU,WAAU,YAAW;AAAA,kBACzD,gBAAAtB,EAAC,KAAA,EAAE,WAAU,mEACX,UAAA;AAAA,oBAAA,gBAAAE,EAAC,QAAA,EAAK,WAAU,iBAAiB,UAAAe,EAAc,KAAK,MAAK;AAAA,oBACxD;AAAA,oBACAO;AAAA,kBAAA,EAAA,CACH;AAAA,gBAAA;AAAA,cAAA;AAAA,cARKxC;AAAA,YAAA;AAAA,UAWX,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,EAEJ;AACF;AAEArE,GAAS,cAAc;"}
1
+ {"version":3,"file":"Dropzone.js","sources":["../../src/Dropzone/Dropzone.tsx"],"sourcesContent":["import { FileTextIcon, InfoIcon, Plus, UploadIcon, X } from 'lucide-react';\r\nimport { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\r\nimport { FileRejection, useDropzone } from 'react-dropzone';\r\n\r\nimport { cn } from '@oneplatformdev/utils';\r\n\r\nimport { Card } from '../Card/Card';\r\n\r\nimport {\r\n DEFAULT_FILE_TYPES,\r\n DropzoneControl,\r\n DropzoneProps,\r\n DropzoneValueItem\r\n} from './Dropzone.types';\r\nimport { DropzoneCoverPreview } from './DropzoneCoverPreview';\r\nimport { DropzoneFileCard } from './DropzoneFileCard';\r\nimport { FilePreview } from './DropzoneFilePreview';\r\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\r\nimport { extractName, isFile, isVideoUrl } from './DropzoneUtils';\r\nimport { Button } from \"../Button\";\r\nimport fileCsvIcon from './icons/file-csv.svg';\r\nimport fileDocIcon from './icons/file-doc.svg';\r\nimport fileDocxIcon from './icons/file-docx.svg';\r\nimport fileJpgIcon from './icons/file-jpg.svg';\r\nimport filePdfIcon from './icons/file-pdf.svg';\r\nimport filePngIcon from './icons/file-png.svg';\r\nimport filePptIcon from './icons/file-ppt.svg';\r\nimport filePptxIcon from './icons/file-pptx.svg';\r\nimport fileRarIcon from './icons/file-rar.svg';\r\nimport fileSvgIcon from './icons/file-svg.svg';\r\nimport fileWebpIcon from './icons/file-webp.svg';\r\nimport fileXlsIcon from './icons/file-xls.svg';\r\nimport fileXlsxIcon from './icons/file-xlsx.svg';\r\nimport fileZipIcon from './icons/file-zip.svg';\r\n\r\nconst formatFileSize = (bytes = 0): string => {\r\n if (!bytes || bytes < 0) return '0 KB';\r\n const KB = 1024;\r\n const MB = KB * 1024;\r\n const GB = MB * 1024;\r\n if (bytes >= GB) return `${(bytes / GB).toFixed(2)} GB`;\r\n if (bytes >= MB) {\r\n const mb = bytes / MB;\r\n return `${mb >= 100 ? mb.toFixed(0) : mb.toFixed(2)} MB`;\r\n }\r\n if (bytes >= KB) return `${(bytes / KB).toFixed(bytes / KB >= 100 ? 0 : 1)} KB`;\r\n return `${bytes} B`;\r\n};\r\nconst FILE_EXT_ICON_MAP: Record<string, string> = {\r\n csv: fileCsvIcon,\r\n doc: fileDocIcon,\r\n docx: fileDocxIcon,\r\n jpg: fileJpgIcon,\r\n jpeg: fileJpgIcon,\r\n pdf: filePdfIcon,\r\n png: filePngIcon,\r\n ppt: filePptIcon,\r\n pptx: filePptxIcon,\r\n rar: fileRarIcon,\r\n svg: fileSvgIcon,\r\n webp: fileWebpIcon,\r\n xls: fileXlsIcon,\r\n xlsx: fileXlsxIcon,\r\n zip: fileZipIcon,\r\n};\r\n\r\nconst getFileExtension = (fileName?: string) => {\r\n if (!fileName) return '';\r\n const parts = fileName.toLowerCase().split('.');\r\n return parts.length > 1 ? parts[parts.length - 1] : '';\r\n};\r\n\r\nconst getFileTypeIconByName = (fileName?: string) => {\r\n const extension = getFileExtension(fileName);\r\n return FILE_EXT_ICON_MAP[extension] ?? null;\r\n};\r\nconst areItemsEqual = (a: DropzoneValueItem[], b: DropzoneValueItem[]) => {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n const left = a[i];\r\n const right = b[i];\r\n\r\n if (left === right) continue;\r\n\r\n if (typeof left === 'string' && typeof right === 'string') {\r\n if (left !== right) return false;\r\n continue;\r\n }\r\n\r\n if (isFile(left) && isFile(right)) {\r\n if (\r\n left.name !== right.name ||\r\n left.size !== right.size ||\r\n left.type !== right.type ||\r\n left.lastModified !== right.lastModified\r\n ) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Dropzone component - A drag-and-drop file upload area with image previews, error handling, and localization.\r\n *\r\n * @component\r\n * @param {DropzoneProps} props - The props for the Dropzone component.\r\n * @param {string[]} [props.acceptTypes=DEFAULT_FILE_TYPES] - Allowed file MIME types.\r\n * @param {number} props.maxSizeMB - Maximum allowed file size in megabytes.\r\n * @param {number} [props.maxFiles=1] - Maximum number of files that can be uploaded.\r\n * @param {DropzoneTranslations} props.translations - Translations for text labels.\r\n * @param {(errors: FileRejection[]) => void} [props.onErrors] - Callback triggered when file errors occur.\r\n * @param {boolean} [props.hideErrors=false] - Whether to hide error messages.\r\n * @param {boolean} [props.disabled=false] - Whether the dropzone is disabled.\r\n * @param {DropzoneStyles} [props.classNames] - Custom classNames for different dropzone states.\r\n * @param {DropzoneValueItem[]} [props.value=[]] - Current selected files or URLs.\r\n * @param {(items: DropzoneValueItem[]) => void} [props.onChangeValue] - Callback triggered when file selection changes.\r\n * @param {string} [props.className] - Additional class names for styling.\r\n * @param {React.Ref<HTMLDivElement>} ref - Ref for the root dropzone container.\r\n * @returns {JSX.Element} The rendered Dropzone component.\r\n */\r\nexport const Dropzone = forwardRef<DropzoneControl, DropzoneProps>(\r\n (\r\n {\r\n acceptTypes = DEFAULT_FILE_TYPES,\r\n maxSizeMB,\r\n maxFiles = 1,\r\n onErrors,\r\n hideErrors = false,\r\n disabled = false,\r\n classNames,\r\n value,\r\n onChangeValue,\r\n className,\r\n labelDropzonePrompt = 'Drop files here or click to select',\r\n labelDropzoneSubPrompt = '',\r\n labelOrClickToSelect = 'Upload file',\r\n labelSelectedFiles = 'Selected Files',\r\n labelUploadErrors = 'Upload Errors',\r\n labelFileTooLarge = 'File is too large',\r\n labelInvalidFileType = 'Invalid file type',\r\n labelVideoUploaded = 'Uploaded',\r\n labelVideoReplace = 'Replace',\r\n singlePick = false,\r\n labelDropzoneClassname,\r\n labelDropzoneSubClassname,\r\n isUploading = false,\r\n uploadProgress = 0,\r\n uploadLoadedBytes = 0,\r\n uploadTotalBytes = 0,\r\n onCancelUpload,\r\n labelUploadingTitle = 'Uploading video...',\r\n labelUploadingHint = 'Please do not close this page',\r\n labelUploadingActionCancel = 'Cancel',\r\n labelUploadingOf = 'of',\r\n playerTranslations,\r\n singlePickFileInfo,\r\n persistentDropzone = false,\r\n previewVariant = 'default',\r\n coverFirstItem = false,\r\n ...restProps\r\n },\r\n ref\r\n ) => {\r\n const [items, setItems] = useState<DropzoneValueItem[]>(value ?? []);\r\n const [fileErrors, setFileErrors] = useState<FileRejection[]>([]);\r\n const firstItem = items[0];\r\n const firstRejectedFile = fileErrors[0]?.file;\r\n const isRejectedImage = Boolean(firstRejectedFile?.type?.includes('image'));\r\n const isSingleFile = singlePick && items.length > 0 && isFile(firstItem);\r\n const isSingleImage = isSingleFile && firstItem.type.includes('image');\r\n const isSingleVideo =\r\n (isSingleFile && firstItem.type.includes('video')) ||\r\n (singlePick && items.length > 0 && typeof firstItem === 'string' && isVideoUrl(firstItem));\r\n const isSingleDocument = isSingleFile && !isSingleImage && !isSingleVideo;\r\n const hasRejectedSingleFile = singlePick && !items.length && Boolean(firstRejectedFile);\r\n const hasRejectedSingleDocumentFile = hasRejectedSingleFile && !isRejectedImage;\r\n const singleFileCard = isSingleDocument ? firstItem : firstRejectedFile;\r\n const singleFileCardIcon = getFileTypeIconByName(singleFileCard?.name);\r\n const hasSingleVideoPreview =\r\n singlePick && isSingleVideo;\r\n const shouldBlockRootOpen = hasSingleVideoPreview;\r\n const isContentPreviewMode = singlePick && items.length > 0;\r\n const isSingleImagePreview =\r\n isContentPreviewMode && !isSingleDocument && !hasSingleVideoPreview;\r\n\r\n // Тільки для мультизавантаження списком (file-list): коли набрали ліміт —\r\n // робимо зону неактивною й сірою (картки нижче лишаються інтерактивними).\r\n const isFileListLimitReached =\r\n previewVariant === 'file-list' && !singlePick && items.length >= maxFiles;\r\n\r\n const onDrop = (acceptedFiles: File[], fileRejections: FileRejection[]) => {\r\n setFileErrors(fileRejections);\r\n onErrors?.(fileRejections);\r\n\r\n const newItems = singlePick\r\n ? acceptedFiles.slice(0, 1)\r\n : [...items, ...acceptedFiles].slice(0, maxFiles);\r\n\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n useEffect(() => {\r\n if (value && !areItemsEqual(items, value)) {\r\n setItems(value);\r\n }\r\n }, [items, value]);\r\n\r\n const removeItem = (\r\n event: React.MouseEvent<HTMLDivElement>,\r\n index: number\r\n ) => {\r\n if (disabled) return;\r\n event.stopPropagation();\r\n\r\n const newItems = items.filter((_, i) => i !== index);\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n const { getRootProps, getInputProps, isDragActive, open } = useDropzone({\r\n onDrop,\r\n accept: acceptTypes.reduce((acc, fileType) => {\r\n acc[fileType] = [];\r\n return acc;\r\n }, {} as Record<string, string[]>),\r\n maxSize: maxSizeMB * 1024 * 1024,\r\n maxFiles: singlePick ? 1 : maxFiles,\r\n disabled: disabled || isUploading || isFileListLimitReached,\r\n noClick: true,\r\n });\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n setItems,\r\n };\r\n }, []);\r\n\r\n const isCoverMode =\r\n coverFirstItem && previewVariant === 'image-grid' && !singlePick && items.length > 0;\r\n\r\n const shouldRenderDetachedPreview =\r\n !isUploading && !singlePick && persistentDropzone && items.length > 0;\r\n\r\n const restItemsForGrid = isCoverMode ? items.slice(1) : items;\r\n\r\n const showAddMoreTile =\r\n !disabled &&\r\n !singlePick &&\r\n previewVariant === 'image-grid' &&\r\n items.length > 0 &&\r\n items.length < maxFiles;\r\n\r\n // For multi image selection (image-grid) keep the drop area at a 16:9 ratio.\r\n // Use aspect-ratio (not a fixed height) so it follows whatever width the\r\n // consumer sets via className. Skipped when previews fill the card.\r\n const isImageGridDropArea =\r\n !singlePick &&\r\n previewVariant === 'image-grid' &&\r\n (persistentDropzone || items.length === 0);\r\n\r\n const previewBlock =\r\n !isUploading &&\r\n !singlePick &&\r\n (restItemsForGrid.length > 0 || showAddMoreTile) && (\r\n <div className={cn('w-full mt-2', classNames?.previewWrapper)}>\r\n {previewVariant === 'default' && (\r\n <pre className=\"font-semibold text-gray-600\">\r\n {labelSelectedFiles}:\r\n </pre>\r\n )}\r\n {previewVariant === 'file-list' ? (\r\n <div className=\"mt-2 flex flex-col gap-2\">\r\n {restItemsForGrid.map((item, index) => {\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const sizeLabel = isFile(item) ? formatFileSize(item.size) : '';\r\n return (\r\n <DropzoneFileCard\r\n key={index}\r\n name={fileName}\r\n sizeLabel={sizeLabel}\r\n iconSrc={getFileTypeIconByName(fileName)}\r\n disabled={disabled}\r\n onRemove={(event) => removeItem(event, index)}\r\n />\r\n );\r\n })}\r\n </div>\r\n ) : (\r\n <ul\r\n className={cn(\r\n 'mt-2 text-sm text-gray-500 flex flex-wrap items-start',\r\n previewVariant === 'image-grid'\r\n ? 'gap-2 justify-start'\r\n : 'gap-4 justify-center'\r\n )}\r\n >\r\n {restItemsForGrid.map((item, gridIndex) => {\r\n const index = isCoverMode ? gridIndex + 1 : gridIndex;\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const fileSize = isFile(item) ? formatFileSize(item.size) : '';\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={cn(\r\n 'relative',\r\n previewVariant === 'image-grid'\r\n ? 'w-[75px] h-[75px]'\r\n : 'flex flex-col items-center gap-2'\r\n )}\r\n >\r\n <div className=\"relative w-full h-full\">\r\n {previewVariant === 'image-grid' ? (\r\n <DropzoneCoverPreview item={item} className=\"rounded-[8px]\" />\r\n ) : (\r\n <FilePreview item={item} styles={classNames} />\r\n )}\r\n {!disabled && (\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 )}\r\n </div>\r\n {previewVariant === 'default' && (\r\n <span className=\"inline-flex flex-col items-center\">\r\n <span className=\"max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap\">\r\n {fileName}\r\n </span>\r\n {fileSize && <span>({fileSize})</span>}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n {showAddMoreTile && (\r\n <li\r\n key=\"add-more\"\r\n className=\"relative w-[75px] h-[75px] flex items-center justify-center rounded-[8px] border border-dashed border-[#9368FF80] bg-[#FCFCFC] cursor-pointer hover:bg-[#9368FF0F]\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n if (disabled || isUploading) return;\r\n open();\r\n }}\r\n >\r\n <div className=\"flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]\">\r\n <Plus size={16} className=\"text-[#9368FF]\" />\r\n </div>\r\n </li>\r\n )}\r\n </ul>\r\n )}\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"w-full select-none\">\r\n <Card\r\n {...restProps}\r\n {...getRootProps({\r\n onClick: (event) => {\r\n if (disabled || isUploading || isFileListLimitReached) return;\r\n if (shouldBlockRootOpen) {\r\n restProps.onClick?.(event);\r\n return;\r\n }\r\n open();\r\n restProps.onClick?.(event);\r\n },\r\n })}\r\n className={cn(\r\n `w-full text-center flex flex-col items-center justify-center gap-6 cursor-pointer`,\r\n !isContentPreviewMode &&\r\n 'border border-dashed border-[#9368FF80] rounded-[8px] bg-[#FCFCFC] p-4',\r\n isContentPreviewMode && 'min-h-0 border-0 bg-transparent p-0',\r\n isImageGridDropArea && 'aspect-video h-auto',\r\n isCoverMode && 'relative',\r\n disabled && 'border-[#E4E4E7] pointer-events-none',\r\n fileErrors.length > 0 && !isContentPreviewMode && 'border-red-500',\r\n isDragActive && 'bg-gray-100',\r\n singlePick && 'shadow-none!',\r\n singlePick && items.length > 0 && !hasSingleVideoPreview && 'p-0! shadow-none!',\r\n hasSingleVideoPreview && 'h-auto! max-h-none! min-h-0! p-2!',\r\n isSingleImagePreview && 'h-64',\r\n isFileListLimitReached &&\r\n shouldRenderDetachedPreview &&\r\n 'border-[#E4E4E7] bg-[#F5F5F5] cursor-default pointer-events-none',\r\n className\r\n )}\r\n >\r\n <input {...getInputProps()} />\r\n\r\n {isUploading && (\r\n <div\r\n className=\"w-full h-full min-h-46 rounded-lg border border-[#E4E4E7] bg-[#FCFCFC] flex flex-col items-center justify-center gap-4 p-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"relative h-24 w-24\">\r\n <svg className=\"h-24 w-24\" viewBox=\"0 0 100 100\">\r\n <circle cx=\"50\" cy=\"50\" r=\"42\" stroke=\"#E6E1F5\" strokeWidth=\"8\" fill=\"none\" />\r\n </svg>\r\n <span className=\"absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground\">\r\n {Math.max(0, Math.min(100, Math.round(uploadProgress)))}%\r\n </span>\r\n </div>\r\n\r\n <div className=\"text-center\">\r\n <p className=\"text-xl font-semibold text-foreground\">{labelUploadingTitle}</p>\r\n <p className=\"text-sm text-[#666A78]\">\r\n {formatFileSize(uploadLoadedBytes)} {labelUploadingOf} {formatFileSize(uploadTotalBytes)}\r\n </p>\r\n <p className=\"mt-2 text-sm text-[#666A78]\">{labelUploadingHint}</p>\r\n </div>\r\n\r\n <div className=\"w-full max-w-[520px] h-2 rounded-full bg-[#E6E1F5] overflow-hidden\">\r\n <div\r\n className=\"h-full bg-[#9368FF] transition-[width] duration-150 ease-linear\"\r\n style={{ width: `${Math.max(0, Math.min(100, uploadProgress))}%` }}\r\n />\r\n </div>\r\n\r\n {onCancelUpload && (\r\n <button\r\n type=\"button\"\r\n className=\"mt-1 h-10 min-w-36 rounded-md border border-[#E4E4E7] bg-white px-6 text-base font-medium text-foreground cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n onCancelUpload();\r\n }}\r\n >\r\n {labelUploadingActionCancel}\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && isCoverMode && (\r\n <div\r\n className=\"absolute inset-0 rounded-[8px] overflow-hidden\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <DropzoneCoverPreview item={items[0]} className=\"rounded-[8px]\" />\r\n {!disabled && (\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 )}\r\n </div>\r\n )}\r\n\r\n {!isUploading &&\r\n (items.length === 0 || (!singlePick && persistentDropzone)) &&\r\n (fileErrors.length === 0 || !singlePick) && (\r\n <div\r\n className={cn(\r\n 'flex flex-col items-center gap-2 w-full',\r\n classNames?.idleWrapper,\r\n isCoverMode && 'invisible',\r\n )}\r\n >\r\n <div\r\n className={cn(\r\n 'flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]',\r\n (isFileListLimitReached || disabled) && 'bg-[#EDEDF0]'\r\n )}\r\n >\r\n <UploadIcon\r\n className={cn(\r\n 'size-6 text-[#9368FF]',\r\n (isFileListLimitReached || disabled) && 'text-[#A1A1AA]'\r\n )}\r\n />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-center gap-1 w-full\">\r\n {!disabled && (\r\n <>\r\n <span\r\n className={cn(\r\n \"font-semibold text-[14px] leading-[125%] text-[#06080D] text-center w-full whitespace-pre-line\",\r\n isFileListLimitReached && 'text-[#A1A1AA]',\r\n labelDropzoneClassname\r\n )}\r\n >\r\n {labelDropzonePrompt}\r\n </span>\r\n\r\n <span\r\n className={cn(\r\n \"font-medium text-[12px] leading-[120%] text-[#666A78] text-center w-full whitespace-pre-line\",\r\n labelDropzoneSubClassname\r\n )}\r\n >\r\n {labelDropzoneSubPrompt}\r\n </span>\r\n </>\r\n )}\r\n </div>\r\n\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n size=\"md\"\r\n disabled={isFileListLimitReached}\r\n >\r\n {labelOrClickToSelect}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && singlePick && fileErrors.length > 0 && !hasRejectedSingleDocumentFile && (\r\n <div className={cn('w-full mt-4', classNames?.errorWrapper)}>\r\n <span className=\"font-semibold text-red-500\">\r\n {labelUploadErrors}:\r\n </span>\r\n <ul className=\"mt-2 text-sm text-red-500 list-disc list-inside\">\r\n {fileErrors.map((fileRejection, index) => (\r\n <li key={index}>\r\n {fileRejection.file.name} (\r\n {formatFileSize(fileRejection.file.size)})\r\n {!hideErrors && (\r\n <ul className=\"ml-4 list-disc list-inside\">\r\n {fileRejection.errors.map((error, errorIndex) => (\r\n <li key={errorIndex}>\r\n {error.code === 'file-too-large' && labelFileTooLarge}\r\n {error.code === 'file-invalid-type' &&\r\n labelInvalidFileType}\r\n {error.code !== 'file-too-large' &&\r\n error.code !== 'file-invalid-type' &&\r\n error.message}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {!isUploading && Boolean(singlePick && items.length) && (\r\n <>\r\n {isSingleDocument ? (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n )}\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singlePickFileInfo?.name || singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {formatFileSize(singlePickFileInfo?.size || singleFileCard?.size)}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <DropzoneSinglePickPreview\r\n item={items[0]}\r\n onRemoveClick={(e) => removeItem(e, 0)}\r\n onReplaceClick={(e) => {\r\n e.stopPropagation();\r\n if (disabled) return;\r\n open();\r\n }}\r\n labelUploaded={labelVideoUploaded}\r\n labelReplace={labelVideoReplace}\r\n fileInfo={singlePickFileInfo}\r\n disabled={disabled}\r\n playerTranslations={playerTranslations}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {!isUploading && hasRejectedSingleDocumentFile && (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n )}\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {singleFileCard\r\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\r\n : ''}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setFileErrors([]);\r\n }}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4\">\r\n <InfoIcon size={20} color=\"#DC2626\" />\r\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\r\n {fileErrors[0]?.errors?.[0]?.code === 'file-too-large'\r\n ? labelFileTooLarge\r\n : fileErrors[0]?.errors?.[0]?.message || labelInvalidFileType}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!shouldRenderDetachedPreview && previewBlock}\r\n </Card>\r\n {shouldRenderDetachedPreview && <div className=\"w-full\">{previewBlock}</div>}\r\n {!isUploading && !singlePick && fileErrors.length > 0 && (\r\n <div\r\n className={cn('w-full mt-4 flex flex-col gap-2', classNames?.errorWrapper)}\r\n >\r\n {fileErrors.map((fileRejection, index) => {\r\n const firstError = fileRejection.errors[0];\r\n const errorText =\r\n firstError?.code === 'file-too-large'\r\n ? labelFileTooLarge\r\n : firstError?.code === 'file-invalid-type'\r\n ? labelInvalidFileType\r\n : firstError?.message || labelInvalidFileType;\r\n\r\n return (\r\n <div\r\n key={index}\r\n className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4 rounded-[8px]\"\r\n >\r\n <InfoIcon size={20} color=\"#DC2626\" className=\"shrink-0\" />\r\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\r\n <span className=\"font-semibold\">{fileRejection.file.name}</span>\r\n {' — '}\r\n {errorText}\r\n </p>\r\n </div>\r\n );\r\n })}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nDropzone.displayName = 'Dropzone';\r\n\r\n"],"names":["formatFileSize","bytes","KB","MB","GB","mb","FILE_EXT_ICON_MAP","fileCsvIcon","fileDocIcon","fileDocxIcon","fileJpgIcon","filePdfIcon","filePngIcon","filePptIcon","filePptxIcon","fileRarIcon","fileSvgIcon","fileWebpIcon","fileXlsIcon","fileXlsxIcon","fileZipIcon","getFileExtension","fileName","parts","getFileTypeIconByName","extension","areItemsEqual","a","b","i","left","right","isFile","Dropzone","forwardRef","acceptTypes","DEFAULT_FILE_TYPES","maxSizeMB","maxFiles","onErrors","hideErrors","disabled","classNames","value","onChangeValue","className","labelDropzonePrompt","labelDropzoneSubPrompt","labelOrClickToSelect","labelSelectedFiles","labelUploadErrors","labelFileTooLarge","labelInvalidFileType","labelVideoUploaded","labelVideoReplace","singlePick","labelDropzoneClassname","labelDropzoneSubClassname","isUploading","uploadProgress","uploadLoadedBytes","uploadTotalBytes","onCancelUpload","labelUploadingTitle","labelUploadingHint","labelUploadingActionCancel","labelUploadingOf","playerTranslations","singlePickFileInfo","persistentDropzone","previewVariant","coverFirstItem","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","firstItem","firstRejectedFile","isRejectedImage","isSingleFile","isSingleImage","isSingleVideo","isVideoUrl","isSingleDocument","hasRejectedSingleDocumentFile","singleFileCard","singleFileCardIcon","hasSingleVideoPreview","shouldBlockRootOpen","isContentPreviewMode","isSingleImagePreview","isFileListLimitReached","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","isCoverMode","shouldRenderDetachedPreview","restItemsForGrid","showAddMoreTile","isImageGridDropArea","previewBlock","jsxs","cn","jsx","item","extractName","sizeLabel","DropzoneFileCard","gridIndex","fileSize","DropzoneCoverPreview","FilePreview","X","Plus","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","InfoIcon","firstError","errorText"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormColorInput.js","sources":["../../src/FormColorInput/FormColorInput.tsx"],"sourcesContent":["import { forwardRef, ReactElement, Ref, RefObject } from 'react';\nimport { FieldValues } from 'react-hook-form';\n\nimport { ColorInput } from '../ColorInput';\nimport { FormControl, FormRenderControl } from '../Form';\nimport { FormColorInputProps } from './FormColorInput.types';\n\nfunction FormColorInputInner<Data extends FieldValues>(\n props: FormColorInputProps<Data>,\n ref: Ref<HTMLInputElement>,\n) {\n const { form, tooltip, tooltipProps, label, name, onBlur, ...rest } = props;\n return (\n <FormRenderControl\n form={form}\n name={name}\n tooltip={tooltip}\n tooltipProps={tooltipProps}\n label={label}\n render={({ field, fieldState }) => (\n <FormControl>\n <ColorInput\n {...rest}\n ref={(el) => {\n field.ref(el);\n if (typeof ref === 'function') {\n ref(el);\n } else if (ref) {\n (ref as RefObject<HTMLInputElement | null>).current = el;\n }\n }}\n error={!!fieldState.error}\n value={field.value || ''}\n onChange={(hex) => field.onChange(hex)}\n onBlur={(...args) => {\n field.onBlur?.();\n onBlur?.(...args);\n }}\n />\n </FormControl>\n )}\n />\n );\n}\n\nexport const FormColorInput = forwardRef(FormColorInputInner) as <\n Data extends FieldValues,\n>(\n props: FormColorInputProps<Data> & { ref?: Ref<HTMLInputElement> },\n) => ReactElement;\n"],"names":["FormColorInputInner","props","ref","form","tooltip","tooltipProps","label","name","onBlur","rest","jsx","FormRenderControl","field","fieldState","FormControl","ColorInput","el","hex","args","FormColorInput","forwardRef"],"mappings":";;;;;AAOA,SAASA,EACPC,GACAC,GACA;AACA,QAAM,EAAE,MAAAC,GAAM,SAAAC,GAAS,cAAAC,GAAc,OAAAC,GAAO,MAAAC,GAAM,QAAAC,GAAQ,GAAGC,EAAA,IAASR;AACtE,SACE,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAR;AAAA,MACA,MAAAI;AAAA,MACA,SAAAH;AAAA,MACA,cAAAC;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAM,GAAO,YAAAC,EAAA,wBACfC,GAAA,EACC,UAAA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACE,GAAGN;AAAA,UACJ,KAAK,CAACO,MAAO;AACX,YAAAJ,EAAM,IAAII,CAAE,GACR,OAAOd,KAAQ,aACjBA,EAAIc,CAAE,IACGd,MACRA,EAA2C,UAAUc;AAAA,UAE1D;AAAA,UACA,OAAO,CAAC,CAACH,EAAW;AAAA,UACpB,OAAOD,EAAM,SAAS;AAAA,UACtB,UAAU,CAACK,MAAQL,EAAM,SAASK,CAAG;AAAA,UACrC,QAAQ,IAAIC,MAAS;AACnB,YAAAN,EAAM,SAAA,GACNJ,IAAS,GAAGU,CAAI;AAAA,UAClB;AAAA,QAAA;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;AAEO,MAAMC,IAAiBC,EAAWpB,CAAmB;"}
1
+ {"version":3,"file":"FormColorInput.js","sources":["../../src/FormColorInput/FormColorInput.tsx"],"sourcesContent":["import { forwardRef, ReactElement, Ref, RefObject } from 'react';\r\nimport { FieldValues } from 'react-hook-form';\r\n\r\nimport { ColorInput } from '../ColorInput';\r\nimport { FormControl, FormRenderControl } from '../Form';\r\nimport { FormColorInputProps } from './FormColorInput.types';\r\n\r\nfunction FormColorInputInner<Data extends FieldValues>(\r\n props: FormColorInputProps<Data>,\r\n ref: Ref<HTMLInputElement>,\r\n) {\r\n const { form, tooltip, tooltipProps, label, name, onBlur, ...rest } = props;\r\n return (\r\n <FormRenderControl\r\n form={form}\r\n name={name}\r\n tooltip={tooltip}\r\n tooltipProps={tooltipProps}\r\n label={label}\r\n render={({ field, fieldState }) => (\r\n <FormControl>\r\n <ColorInput\r\n {...rest}\r\n ref={(el) => {\r\n field.ref(el);\r\n if (typeof ref === 'function') {\r\n ref(el);\r\n } else if (ref) {\r\n (ref as RefObject<HTMLInputElement | null>).current = el;\r\n }\r\n }}\r\n error={!!fieldState.error}\r\n value={field.value || ''}\r\n onChange={(hex) => field.onChange(hex)}\r\n onBlur={(...args) => {\r\n field.onBlur?.();\r\n onBlur?.(...args);\r\n }}\r\n />\r\n </FormControl>\r\n )}\r\n />\r\n );\r\n}\r\n\r\nexport const FormColorInput = forwardRef(FormColorInputInner) as <\r\n Data extends FieldValues,\r\n>(\r\n props: FormColorInputProps<Data> & { ref?: Ref<HTMLInputElement> },\r\n) => ReactElement;\r\n"],"names":["FormColorInputInner","props","ref","form","tooltip","tooltipProps","label","name","onBlur","rest","jsx","FormRenderControl","field","fieldState","FormControl","ColorInput","el","hex","args","FormColorInput","forwardRef"],"mappings":";;;;;AAOA,SAASA,EACPC,GACAC,GACA;AACA,QAAM,EAAE,MAAAC,GAAM,SAAAC,GAAS,cAAAC,GAAc,OAAAC,GAAO,MAAAC,GAAM,QAAAC,GAAQ,GAAGC,EAAA,IAASR;AACtE,SACE,gBAAAS;AAAA,IAACC;AAAA,IAAA;AAAA,MACC,MAAAR;AAAA,MACA,MAAAI;AAAA,MACA,SAAAH;AAAA,MACA,cAAAC;AAAA,MACA,OAAAC;AAAA,MACA,QAAQ,CAAC,EAAE,OAAAM,GAAO,YAAAC,EAAA,wBACfC,GAAA,EACC,UAAA,gBAAAJ;AAAA,QAACK;AAAA,QAAA;AAAA,UACE,GAAGN;AAAA,UACJ,KAAK,CAACO,MAAO;AACX,YAAAJ,EAAM,IAAII,CAAE,GACR,OAAOd,KAAQ,aACjBA,EAAIc,CAAE,IACGd,MACRA,EAA2C,UAAUc;AAAA,UAE1D;AAAA,UACA,OAAO,CAAC,CAACH,EAAW;AAAA,UACpB,OAAOD,EAAM,SAAS;AAAA,UACtB,UAAU,CAACK,MAAQL,EAAM,SAASK,CAAG;AAAA,UACrC,QAAQ,IAAIC,MAAS;AACnB,YAAAN,EAAM,SAAA,GACNJ,IAAS,GAAGU,CAAI;AAAA,UAClB;AAAA,QAAA;AAAA,MAAA,EACF,CACF;AAAA,IAAA;AAAA,EAAA;AAIR;AAEO,MAAMC,IAAiBC,EAAWpB,CAAmB;"}
@@ -1 +1 @@
1
- {"version":3,"file":"FormColorInput.stories.js","sources":["../../src/FormColorInput/FormColorInput.stories.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\nimport type { Meta, StoryObj } from '@storybook/react';\nimport { FormProvider, useForm } from 'react-hook-form';\n\nimport { FormColorInput } from './FormColorInput';\nimport { Button } from '../Button';\n\ntype FormValues = {\n color: string;\n};\n\ntype ControlledProps = Omit<\n React.ComponentProps<typeof FormColorInput<FormValues>>,\n 'form' | 'name'\n> & {\n initialValue?: string;\n};\n\nfunction ControlledFormColorInput({ initialValue = '#9368FF', ...args }: ControlledProps) {\n const form = useForm<FormValues>({ defaultValues: { color: initialValue } });\n const value = form.watch('color');\n\n return (\n <FormProvider {...form}>\n <div className=\"max-w-sm space-y-3\">\n <FormColorInput<FormValues>\n form={form}\n name=\"color\"\n label=\"Колір бокової панелі\"\n {...args}\n />\n <div className=\"text-xs text-muted-foreground\">\n value: <span className=\"font-mono\">{value}</span>\n </div>\n </div>\n </FormProvider>\n );\n}\n\nconst meta = {\n title: 'FormColorInput',\n component: FormColorInput,\n parameters: { layout: 'centered' },\n args: {\n label: 'Колір',\n withAlpha: false,\n },\n argTypes: {\n form: { control: false },\n name: { control: false },\n onChange: { control: false },\n onBlur: { control: false },\n },\n decorators: [\n (Story) => (\n <div className=\"p-6 w-[420px]\">\n <Story />\n </div>\n ),\n ],\n} satisfies Meta<typeof FormColorInput>;\n\nexport default meta;\n\ntype Story = StoryObj<typeof meta>;\n\nexport const Default: Story = {\n render: (args) => <ControlledFormColorInput {...args} />,\n};\n\nexport const WithAlpha: Story = {\n args: { withAlpha: true },\n render: (args) => <ControlledFormColorInput {...args} initialValue=\"#9368FFcc\" />,\n};\n\nfunction FormColorInputWithError(args: ControlledProps) {\n const form = useForm<FormValues>({ defaultValues: { color: '' } });\n\n useEffect(() => {\n form.setError('color', { message: 'Оберіть колір' });\n }, []);\n\n return (\n <FormProvider {...form}>\n <div className=\"max-w-sm\">\n <FormColorInput<FormValues>\n form={form}\n name=\"color\"\n label=\"Колір\"\n {...args}\n />\n </div>\n </FormProvider>\n );\n}\n\nexport const WithError: Story = {\n render: (args) => <FormColorInputWithError {...args} />,\n};\n\n// Валідація onTouched + disabled submit (стандарт feat/1856).\nconst resolver = (values: FormValues) => {\n const errors: Record<string, { type: string; message: string }> = {};\n if (!values.color?.trim()) {\n errors.color = { type: 'required', message: 'Обовʼязкове поле' };\n } else if (!/^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(values.color.trim())) {\n errors.color = { type: 'pattern', message: 'Невірний формат кольору' };\n }\n return { values: Object.keys(errors).length ? {} : values, errors };\n};\n\nfunction HybridForm() {\n const form = useForm<FormValues>({\n mode: 'onTouched',\n resolver,\n defaultValues: { color: '' },\n });\n const { isValid, isSubmitting } = form.formState;\n\n return (\n <FormProvider {...form}>\n <form\n className=\"max-w-sm space-y-4\"\n onSubmit={form.handleSubmit(() => alert('Збережено ✅'))}\n >\n <FormColorInput<FormValues> form={form} name=\"color\" label=\"Колір\" />\n <Button type=\"submit\" disabled={!isValid || isSubmitting} className=\"w-full\">\n Зберегти\n </Button>\n </form>\n </FormProvider>\n );\n}\n\nexport const HybridValidation: Story = {\n render: () => <HybridForm />,\n};\n"],"names":["ControlledFormColorInput","initialValue","args","form","useForm","value","FormProvider","jsxs","jsx","FormColorInput","meta","Story","Default","WithAlpha","FormColorInputWithError","useEffect","WithError","resolver","values","errors","HybridForm","isValid","isSubmitting","Button","HybridValidation"],"mappings":"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"}
1
+ {"version":3,"file":"FormColorInput.stories.js","sources":["../../src/FormColorInput/FormColorInput.stories.tsx"],"sourcesContent":["import React, { useEffect } from 'react';\r\nimport type { Meta, StoryObj } from '@storybook/react';\r\nimport { FormProvider, useForm } from 'react-hook-form';\r\n\r\nimport { FormColorInput } from './FormColorInput';\r\nimport { Button } from '../Button';\r\n\r\ntype FormValues = {\r\n color: string;\r\n};\r\n\r\ntype ControlledProps = Omit<\r\n React.ComponentProps<typeof FormColorInput<FormValues>>,\r\n 'form' | 'name'\r\n> & {\r\n initialValue?: string;\r\n};\r\n\r\nfunction ControlledFormColorInput({ initialValue = '#9368FF', ...args }: ControlledProps) {\r\n const form = useForm<FormValues>({ defaultValues: { color: initialValue } });\r\n const value = form.watch('color');\r\n\r\n return (\r\n <FormProvider {...form}>\r\n <div className=\"max-w-sm space-y-3\">\r\n <FormColorInput<FormValues>\r\n form={form}\r\n name=\"color\"\r\n label=\"Колір бокової панелі\"\r\n {...args}\r\n />\r\n <div className=\"text-xs text-muted-foreground\">\r\n value: <span className=\"font-mono\">{value}</span>\r\n </div>\r\n </div>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nconst meta = {\r\n title: 'FormColorInput',\r\n component: FormColorInput,\r\n parameters: { layout: 'centered' },\r\n args: {\r\n label: 'Колір',\r\n withAlpha: false,\r\n },\r\n argTypes: {\r\n form: { control: false },\r\n name: { control: false },\r\n onChange: { control: false },\r\n onBlur: { control: false },\r\n },\r\n decorators: [\r\n (Story) => (\r\n <div className=\"p-6 w-[420px]\">\r\n <Story />\r\n </div>\r\n ),\r\n ],\r\n} satisfies Meta<typeof FormColorInput>;\r\n\r\nexport default meta;\r\n\r\ntype Story = StoryObj<typeof meta>;\r\n\r\nexport const Default: Story = {\r\n render: (args) => <ControlledFormColorInput {...args} />,\r\n};\r\n\r\nexport const WithAlpha: Story = {\r\n args: { withAlpha: true },\r\n render: (args) => <ControlledFormColorInput {...args} initialValue=\"#9368FFcc\" />,\r\n};\r\n\r\nfunction FormColorInputWithError(args: ControlledProps) {\r\n const form = useForm<FormValues>({ defaultValues: { color: '' } });\r\n\r\n useEffect(() => {\r\n form.setError('color', { message: 'Оберіть колір' });\r\n }, []);\r\n\r\n return (\r\n <FormProvider {...form}>\r\n <div className=\"max-w-sm\">\r\n <FormColorInput<FormValues>\r\n form={form}\r\n name=\"color\"\r\n label=\"Колір\"\r\n {...args}\r\n />\r\n </div>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nexport const WithError: Story = {\r\n render: (args) => <FormColorInputWithError {...args} />,\r\n};\r\n\r\n// Валідація onTouched + disabled submit (стандарт feat/1856).\r\nconst resolver = (values: FormValues) => {\r\n const errors: Record<string, { type: string; message: string }> = {};\r\n if (!values.color?.trim()) {\r\n errors.color = { type: 'required', message: 'Обовʼязкове поле' };\r\n } else if (!/^#([0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i.test(values.color.trim())) {\r\n errors.color = { type: 'pattern', message: 'Невірний формат кольору' };\r\n }\r\n return { values: Object.keys(errors).length ? {} : values, errors };\r\n};\r\n\r\nfunction HybridForm() {\r\n const form = useForm<FormValues>({\r\n mode: 'onTouched',\r\n resolver,\r\n defaultValues: { color: '' },\r\n });\r\n const { isValid, isSubmitting } = form.formState;\r\n\r\n return (\r\n <FormProvider {...form}>\r\n <form\r\n className=\"max-w-sm space-y-4\"\r\n onSubmit={form.handleSubmit(() => alert('Збережено ✅'))}\r\n >\r\n <FormColorInput<FormValues> form={form} name=\"color\" label=\"Колір\" />\r\n <Button type=\"submit\" disabled={!isValid || isSubmitting} className=\"w-full\">\r\n Зберегти\r\n </Button>\r\n </form>\r\n </FormProvider>\r\n );\r\n}\r\n\r\nexport const HybridValidation: Story = {\r\n render: () => <HybridForm />,\r\n};\r\n"],"names":["ControlledFormColorInput","initialValue","args","form","useForm","value","FormProvider","jsxs","jsx","FormColorInput","meta","Story","Default","WithAlpha","FormColorInputWithError","useEffect","WithError","resolver","values","errors","HybridForm","isValid","isSubmitting","Button","HybridValidation"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oneplatformdev/ui",
3
- "version": "0.1.99-beta.305",
3
+ "version": "0.1.99-beta.306",
4
4
  "description": "UI component library for OnePlatform",
5
5
  "author": "One Platform Development Team",
6
6
  "keywords": [
@@ -110,8 +110,8 @@
110
110
  "sonner": "^2.0.7",
111
111
  "vaul": "^1.1.2",
112
112
  "@oneplatformdev/tokens": "^0.1.99-beta.304",
113
- "@oneplatformdev/utils": "^0.1.99-beta.304",
114
- "@oneplatformdev/hooks": "^0.1.99-beta.304"
113
+ "@oneplatformdev/hooks": "^0.1.99-beta.304",
114
+ "@oneplatformdev/utils": "^0.1.99-beta.304"
115
115
  },
116
116
  "scripts": {
117
117
  "chromatic": "chromatic"