@oneplatformdev/ui 0.1.99-beta.280 → 0.1.99-beta.282

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.d.ts","sourceRoot":"","sources":["../../src/Dropzone/Dropzone.tsx"],"names":[],"mappings":"AAQA,OAAO,EAEL,eAAe,EACf,aAAa,EAEd,MAAM,kBAAkB,CAAC;AAkF1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,2GAihBpB,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;AAkF1B;;;;;;;;;;;;;;;;;;GAkBG;AACH,eAAO,MAAM,QAAQ,2GAohBpB,CAAC"}
@@ -1,52 +1,52 @@
1
1
  import { jsxs as l, jsx as e, Fragment as K } from "react/jsx-runtime";
2
- import { X as j, Plus as De, UploadIcon as Ee, FileTextIcon as Q, InfoIcon as U } from "lucide-react";
3
- import { forwardRef as je, useState as V, useEffect as Me, useImperativeHandle as Se } from "react";
4
- import { useDropzone as ke } from "react-dropzone";
2
+ import { X as j, Plus as je, UploadIcon as Me, FileTextIcon as Q, InfoIcon as U } from "lucide-react";
3
+ import { forwardRef as Se, useState as V, useEffect as ke, useImperativeHandle as Be } from "react";
4
+ import { useDropzone as Re } from "react-dropzone";
5
5
  import { cn as m } from "@oneplatformdev/utils";
6
- import { Card as Be } from "../Card/Card.js";
7
- import { DEFAULT_FILE_TYPES as Re } from "./Dropzone.types.js";
6
+ import { Card as We } from "../Card/Card.js";
7
+ import { DEFAULT_FILE_TYPES as Ae } from "./Dropzone.types.js";
8
8
  import { FilePreview as ee } from "./DropzoneFilePreview.js";
9
- import { DropzoneSinglePickPreview as We } from "./DropzoneSinglePickPreview.js";
10
- import { isFile as C, isVideoUrl as Ae, extractName as _e } from "./DropzoneUtils.js";
11
- import Xe from "./icons/file-csv.svg.js";
12
- import $e from "./icons/file-doc.svg.js";
13
- import Pe from "./icons/file-docx.svg.js";
9
+ import { DropzoneSinglePickPreview as _e } from "./DropzoneSinglePickPreview.js";
10
+ import { isFile as C, isVideoUrl as Xe, extractName as $e } from "./DropzoneUtils.js";
11
+ import Pe from "./icons/file-csv.svg.js";
12
+ import Te from "./icons/file-doc.svg.js";
13
+ import Le from "./icons/file-docx.svg.js";
14
14
  import te from "./icons/file-jpg.svg.js";
15
- import Te from "./icons/file-pdf.svg.js";
16
- import Le from "./icons/file-png.svg.js";
17
- import Oe from "./icons/file-ppt.svg.js";
18
- import qe from "./icons/file-pptx.svg.js";
19
- import Ge from "./icons/file-rar.svg.js";
20
- import He from "./icons/file-svg.svg.js";
21
- import Je from "./icons/file-webp.svg.js";
22
- import Ye from "./icons/file-xls.svg.js";
23
- import Ze from "./icons/file-xlsx.svg.js";
24
- import Ke from "./icons/file-zip.svg.js";
25
- import { Button as Qe } from "../Button/Button.js";
26
- const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
27
- csv: Xe,
28
- doc: $e,
29
- docx: Pe,
15
+ import Oe from "./icons/file-pdf.svg.js";
16
+ import qe from "./icons/file-png.svg.js";
17
+ import Ge from "./icons/file-ppt.svg.js";
18
+ import He from "./icons/file-pptx.svg.js";
19
+ import Je from "./icons/file-rar.svg.js";
20
+ import Ye from "./icons/file-svg.svg.js";
21
+ import Ze from "./icons/file-webp.svg.js";
22
+ import Ke from "./icons/file-xls.svg.js";
23
+ import Qe from "./icons/file-xlsx.svg.js";
24
+ import Ue from "./icons/file-zip.svg.js";
25
+ import { Button as Ve } from "../Button/Button.js";
26
+ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, et = {
27
+ csv: Pe,
28
+ doc: Te,
29
+ docx: Le,
30
30
  jpg: te,
31
31
  jpeg: te,
32
- pdf: Te,
33
- png: Le,
34
- ppt: Oe,
35
- pptx: qe,
36
- rar: Ge,
37
- svg: He,
38
- webp: Je,
39
- xls: Ye,
40
- xlsx: Ze,
41
- zip: Ke
42
- }, Ve = (n) => {
32
+ pdf: Oe,
33
+ png: qe,
34
+ ppt: Ge,
35
+ pptx: He,
36
+ rar: Je,
37
+ svg: Ye,
38
+ webp: Ze,
39
+ xls: Ke,
40
+ xlsx: Qe,
41
+ zip: Ue
42
+ }, tt = (n) => {
43
43
  if (!n) return "";
44
44
  const d = n.toLowerCase().split(".");
45
45
  return d.length > 1 ? d[d.length - 1] : "";
46
- }, et = (n) => {
47
- const d = Ve(n);
48
- return Ue[d] ?? null;
49
- }, tt = (n, d) => {
46
+ }, lt = (n) => {
47
+ const d = tt(n);
48
+ return et[d] ?? null;
49
+ }, rt = (n, d) => {
50
50
  if (n === d) return !0;
51
51
  if (n.length !== d.length) return !1;
52
52
  for (let h = 0; h < n.length; h++) {
@@ -65,9 +65,9 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
65
65
  }
66
66
  }
67
67
  return !0;
68
- }, lt = je(
68
+ }, it = Se(
69
69
  ({
70
- acceptTypes: n = Re,
70
+ acceptTypes: n = Ae,
71
71
  maxSizeMB: d,
72
72
  maxFiles: h = 1,
73
73
  onErrors: f,
@@ -97,36 +97,38 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
97
97
  labelUploadingTitle: xe = "Uploading video...",
98
98
  labelUploadingHint: he = "Please do not close this page",
99
99
  labelUploadingActionCancel: ue = "Cancel",
100
+ labelUploadingOf: ge = "of",
101
+ singlePickFileInfo: we,
100
102
  persistentDropzone: T = !1,
101
103
  previewVariant: g = "default",
102
- coverFirstItem: ge = !1,
104
+ coverFirstItem: Ne = !1,
103
105
  ...k
104
- }, we) => {
105
- const [r, I] = V(v ?? []), [x, L] = V([]), N = r[0], B = x[0]?.file, Ne = !!B?.type?.includes("image"), R = i && r.length > 0 && C(N), Fe = R && N.type.includes("image"), O = R && N.type.includes("video") || i && r.length > 0 && typeof N == "string" && Ae(N), q = R && !Fe && !O, G = i && !r.length && !!B && !Ne, w = q ? N : B, z = et(w?.name), W = i && O, ve = W, A = i && r.length > 0, be = (t, s) => {
106
+ }, Fe) => {
107
+ const [r, I] = V(v ?? []), [x, L] = V([]), N = r[0], B = x[0]?.file, ve = !!B?.type?.includes("image"), R = i && r.length > 0 && C(N), be = R && N.type.includes("image"), O = R && N.type.includes("video") || i && r.length > 0 && typeof N == "string" && Xe(N), q = R && !be && !O, G = i && !r.length && !!B && !ve, w = q ? N : B, z = lt(w?.name), W = i && O, Ce = W, A = i && r.length > 0, ye = (t, s) => {
106
108
  L(s), f?.(s);
107
109
  const o = i ? t.slice(0, 1) : [...r, ...t].slice(0, h);
108
110
  I(o), X?.(o);
109
111
  };
110
- Me(() => {
111
- v && !tt(r, v) && I(v);
112
+ ke(() => {
113
+ v && !rt(r, v) && I(v);
112
114
  }, [r, v]);
113
115
  const D = (t, s) => {
114
116
  if (c) return;
115
117
  t.stopPropagation();
116
118
  const o = r.filter((F, E) => E !== s);
117
119
  I(o), X?.(o);
118
- }, { getRootProps: Ce, getInputProps: ye, isDragActive: Ie, open: _ } = ke({
119
- onDrop: be,
120
+ }, { getRootProps: Ie, getInputProps: ze, isDragActive: De, open: _ } = Re({
121
+ onDrop: ye,
120
122
  accept: n.reduce((t, s) => (t[s] = [], t), {}),
121
123
  maxSize: d * 1024 * 1024,
122
124
  maxFiles: i ? 1 : h,
123
125
  disabled: c || a,
124
126
  noClick: !0
125
127
  });
126
- Se(we, () => ({
128
+ Be(Fe, () => ({
127
129
  setItems: I
128
130
  }), []);
129
- const b = ge && g === "image-grid" && !i && r.length > 0, H = !a && !i && T && r.length > 0, J = b ? r.slice(1) : r, Y = !c && !i && g === "image-grid" && r.length > 0 && r.length < h, Z = !a && !i && (J.length > 0 || Y) && /* @__PURE__ */ l("div", { className: m("w-full mt-2", u?.previewWrapper), children: [
131
+ const b = Ne && g === "image-grid" && !i && r.length > 0, H = !a && !i && T && r.length > 0, J = b ? r.slice(1) : r, Y = !c && !i && g === "image-grid" && r.length > 0 && r.length < h, Z = !a && !i && (J.length > 0 || Y) && /* @__PURE__ */ l("div", { className: m("w-full mt-2", u?.previewWrapper), children: [
130
132
  g === "default" && /* @__PURE__ */ l("pre", { className: "font-semibold text-gray-600", children: [
131
133
  ne,
132
134
  ":"
@@ -140,7 +142,7 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
140
142
  ),
141
143
  children: [
142
144
  J.map((t, s) => {
143
- const o = b ? s + 1 : s, F = C(t) ? t.name : _e(t), E = C(t) ? (t.size / (1024 * 1024)).toFixed(2) + " MB" : "";
145
+ const o = b ? s + 1 : s, F = C(t) ? t.name : $e(t), E = C(t) ? (t.size / (1024 * 1024)).toFixed(2) + " MB" : "";
144
146
  return /* @__PURE__ */ l(
145
147
  "li",
146
148
  {
@@ -158,7 +160,7 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
158
160
  "absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm",
159
161
  g === "image-grid" && "top-1 right-1 bg-white/90 rounded-full p-0.5"
160
162
  ),
161
- onClick: (ze) => D(ze, o),
163
+ onClick: (Ee) => D(Ee, o),
162
164
  children: /* @__PURE__ */ e(j, { size: 16, strokeWidth: 1, color: "black" })
163
165
  }
164
166
  )
@@ -183,7 +185,7 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
183
185
  onClick: (t) => {
184
186
  t.stopPropagation(), !(c || a) && _();
185
187
  },
186
- children: /* @__PURE__ */ e("div", { className: "flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(De, { size: 16, className: "text-[#9368FF]" }) })
188
+ children: /* @__PURE__ */ e("div", { className: "flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(je, { size: 16, className: "text-[#9368FF]" }) })
187
189
  },
188
190
  "add-more"
189
191
  )
@@ -193,13 +195,13 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
193
195
  ] });
194
196
  return /* @__PURE__ */ l("div", { className: "w-full select-none", children: [
195
197
  /* @__PURE__ */ l(
196
- Be,
198
+ We,
197
199
  {
198
200
  ...k,
199
- ...Ce({
201
+ ...Ie({
200
202
  onClick: (t) => {
201
203
  if (!(c || a)) {
202
- if (ve) {
204
+ if (Ce) {
203
205
  k.onClick?.(t);
204
206
  return;
205
207
  }
@@ -214,14 +216,14 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
214
216
  b && "relative",
215
217
  c && "border-[#E4E4E7] pointer-events-none",
216
218
  x.length > 0 && !A && "border-red-500",
217
- Ie && "bg-gray-100",
219
+ De && "bg-gray-100",
218
220
  i && "shadow-none!",
219
221
  i && r.length > 0 && !W && "p-0! shadow-none!",
220
222
  W && "h-auto! max-h-none! min-h-0! p-2!",
221
223
  re
222
224
  ),
223
225
  children: [
224
- /* @__PURE__ */ e("input", { ...ye() }),
226
+ /* @__PURE__ */ e("input", { ...ze() }),
225
227
  a && /* @__PURE__ */ l(
226
228
  "div",
227
229
  {
@@ -239,7 +241,9 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
239
241
  /* @__PURE__ */ e("p", { className: "text-xl font-semibold text-foreground", children: xe }),
240
242
  /* @__PURE__ */ l("p", { className: "text-sm text-[#666A78]", children: [
241
243
  le(fe),
242
- " of ",
244
+ " ",
245
+ ge,
246
+ " ",
243
247
  le(pe)
244
248
  ] }),
245
249
  /* @__PURE__ */ e("p", { className: "mt-2 text-sm text-[#666A78]", children: he })
@@ -304,7 +308,7 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
304
308
  b && "invisible"
305
309
  ),
306
310
  children: [
307
- /* @__PURE__ */ e("div", { className: "flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(Ee, { className: "size-6 text-[#9368FF]" }) }),
311
+ /* @__PURE__ */ e("div", { className: "flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]", children: /* @__PURE__ */ e(Me, { className: "size-6 text-[#9368FF]" }) }),
308
312
  /* @__PURE__ */ e("div", { className: "flex flex-col items-center gap-1 w-full", children: !c && /* @__PURE__ */ l(K, { children: [
309
313
  /* @__PURE__ */ e(
310
314
  "span",
@@ -328,7 +332,7 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
328
332
  )
329
333
  ] }) }),
330
334
  !c && /* @__PURE__ */ e(
331
- Qe,
335
+ Ve,
332
336
  {
333
337
  type: "button",
334
338
  size: "md",
@@ -387,7 +391,7 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
387
391
  ]
388
392
  }
389
393
  ) : /* @__PURE__ */ e(
390
- We,
394
+ _e,
391
395
  {
392
396
  item: r[0],
393
397
  onRemoveClick: (t) => D(t, 0),
@@ -396,6 +400,7 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
396
400
  },
397
401
  labelUploaded: ce,
398
402
  labelReplace: ae,
403
+ fileInfo: we,
399
404
  disabled: c
400
405
  }
401
406
  ) }),
@@ -469,8 +474,8 @@ const le = (n = 0) => `${(n / (1024 * 1024)).toFixed(0)} MB`, Ue = {
469
474
  ] });
470
475
  }
471
476
  );
472
- lt.displayName = "Dropzone";
477
+ it.displayName = "Dropzone";
473
478
  export {
474
- lt as Dropzone
479
+ it as Dropzone
475
480
  };
476
481
  //# sourceMappingURL=Dropzone.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.js","sources":["../../src/Dropzone/Dropzone.tsx"],"sourcesContent":["import { FileTextIcon, InfoIcon, Plus, UploadIcon, X } from 'lucide-react';\r\nimport { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\r\nimport { FileRejection, useDropzone } from 'react-dropzone';\r\n\r\nimport { cn } from '@oneplatformdev/utils';\r\n\r\nimport { Card } from '../Card/Card';\r\n\r\nimport {\r\n DEFAULT_FILE_TYPES,\r\n DropzoneControl,\r\n DropzoneProps,\r\n DropzoneValueItem\r\n} from './Dropzone.types';\r\nimport { FilePreview } from './DropzoneFilePreview';\r\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\r\nimport { extractName, isFile, isVideoUrl } from './DropzoneUtils';\r\nimport { Button } from \"../Button\";\r\nimport fileCsvIcon from './icons/file-csv.svg';\r\nimport fileDocIcon from './icons/file-doc.svg';\r\nimport fileDocxIcon from './icons/file-docx.svg';\r\nimport fileJpgIcon from './icons/file-jpg.svg';\r\nimport filePdfIcon from './icons/file-pdf.svg';\r\nimport filePngIcon from './icons/file-png.svg';\r\nimport filePptIcon from './icons/file-ppt.svg';\r\nimport filePptxIcon from './icons/file-pptx.svg';\r\nimport fileRarIcon from './icons/file-rar.svg';\r\nimport fileSvgIcon from './icons/file-svg.svg';\r\nimport fileWebpIcon from './icons/file-webp.svg';\r\nimport fileXlsIcon from './icons/file-xls.svg';\r\nimport fileXlsxIcon from './icons/file-xlsx.svg';\r\nimport fileZipIcon from './icons/file-zip.svg';\r\n\r\nconst formatBytesToMb = (bytes = 0) => `${(bytes / (1024 * 1024)).toFixed(0)} MB`;\r\nconst FILE_EXT_ICON_MAP: Record<string, string> = {\r\n csv: fileCsvIcon,\r\n doc: fileDocIcon,\r\n docx: fileDocxIcon,\r\n jpg: fileJpgIcon,\r\n jpeg: fileJpgIcon,\r\n pdf: filePdfIcon,\r\n png: filePngIcon,\r\n ppt: filePptIcon,\r\n pptx: filePptxIcon,\r\n rar: fileRarIcon,\r\n svg: fileSvgIcon,\r\n webp: fileWebpIcon,\r\n xls: fileXlsIcon,\r\n xlsx: fileXlsxIcon,\r\n zip: fileZipIcon,\r\n};\r\n\r\nconst getFileExtension = (fileName?: string) => {\r\n if (!fileName) return '';\r\n const parts = fileName.toLowerCase().split('.');\r\n return parts.length > 1 ? parts[parts.length - 1] : '';\r\n};\r\n\r\nconst getFileTypeIconByName = (fileName?: string) => {\r\n const extension = getFileExtension(fileName);\r\n return FILE_EXT_ICON_MAP[extension] ?? null;\r\n};\r\nconst areItemsEqual = (a: DropzoneValueItem[], b: DropzoneValueItem[]) => {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n const left = a[i];\r\n const right = b[i];\r\n\r\n if (left === right) continue;\r\n\r\n if (typeof left === 'string' && typeof right === 'string') {\r\n if (left !== right) return false;\r\n continue;\r\n }\r\n\r\n if (isFile(left) && isFile(right)) {\r\n if (\r\n left.name !== right.name ||\r\n left.size !== right.size ||\r\n left.type !== right.type ||\r\n left.lastModified !== right.lastModified\r\n ) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Dropzone component - A drag-and-drop file upload area with image previews, error handling, and localization.\r\n *\r\n * @component\r\n * @param {DropzoneProps} props - The props for the Dropzone component.\r\n * @param {string[]} [props.acceptTypes=DEFAULT_FILE_TYPES] - Allowed file MIME types.\r\n * @param {number} props.maxSizeMB - Maximum allowed file size in megabytes.\r\n * @param {number} [props.maxFiles=1] - Maximum number of files that can be uploaded.\r\n * @param {DropzoneTranslations} props.translations - Translations for text labels.\r\n * @param {(errors: FileRejection[]) => void} [props.onErrors] - Callback triggered when file errors occur.\r\n * @param {boolean} [props.hideErrors=false] - Whether to hide error messages.\r\n * @param {boolean} [props.disabled=false] - Whether the dropzone is disabled.\r\n * @param {DropzoneStyles} [props.classNames] - Custom classNames for different dropzone states.\r\n * @param {DropzoneValueItem[]} [props.value=[]] - Current selected files or URLs.\r\n * @param {(items: DropzoneValueItem[]) => void} [props.onChangeValue] - Callback triggered when file selection changes.\r\n * @param {string} [props.className] - Additional class names for styling.\r\n * @param {React.Ref<HTMLDivElement>} ref - Ref for the root dropzone container.\r\n * @returns {JSX.Element} The rendered Dropzone component.\r\n */\r\nexport const Dropzone = forwardRef<DropzoneControl, DropzoneProps>(\r\n (\r\n {\r\n acceptTypes = DEFAULT_FILE_TYPES,\r\n maxSizeMB,\r\n maxFiles = 1,\r\n onErrors,\r\n hideErrors = false,\r\n disabled = false,\r\n classNames,\r\n value,\r\n onChangeValue,\r\n className,\r\n labelDropzonePrompt = 'Drop files here or click to select',\r\n labelDropzoneSubPrompt = '',\r\n labelOrClickToSelect = 'Upload file',\r\n labelSelectedFiles = 'Selected Files',\r\n labelUploadErrors = 'Upload Errors',\r\n labelFileTooLarge = 'File is too large',\r\n labelInvalidFileType = 'Invalid file type',\r\n labelVideoUploaded = 'Uploaded',\r\n labelVideoReplace = 'Replace',\r\n singlePick = false,\r\n labelDropzoneClassname,\r\n labelDropzoneSubClassname,\r\n isUploading = false,\r\n uploadProgress = 0,\r\n uploadLoadedBytes = 0,\r\n uploadTotalBytes = 0,\r\n onCancelUpload,\r\n labelUploadingTitle = 'Uploading video...',\r\n labelUploadingHint = 'Please do not close this page',\r\n labelUploadingActionCancel = 'Cancel',\r\n persistentDropzone = false,\r\n previewVariant = 'default',\r\n 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\r\n const onDrop = (acceptedFiles: File[], fileRejections: FileRejection[]) => {\r\n setFileErrors(fileRejections);\r\n onErrors?.(fileRejections);\r\n\r\n const newItems = singlePick\r\n ? acceptedFiles.slice(0, 1)\r\n : [...items, ...acceptedFiles].slice(0, maxFiles);\r\n\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n useEffect(() => {\r\n if (value && !areItemsEqual(items, value)) {\r\n setItems(value);\r\n }\r\n }, [items, value]);\r\n\r\n const removeItem = (\r\n event: React.MouseEvent<HTMLDivElement>,\r\n index: number\r\n ) => {\r\n if (disabled) return;\r\n event.stopPropagation();\r\n\r\n const newItems = items.filter((_, i) => i !== index);\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n const { getRootProps, getInputProps, isDragActive, open } = useDropzone({\r\n onDrop,\r\n accept: acceptTypes.reduce((acc, fileType) => {\r\n acc[fileType] = [];\r\n return acc;\r\n }, {} as Record<string, string[]>),\r\n maxSize: maxSizeMB * 1024 * 1024,\r\n maxFiles: singlePick ? 1 : maxFiles,\r\n disabled: disabled || isUploading,\r\n noClick: true,\r\n });\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n setItems,\r\n };\r\n }, []);\r\n\r\n const isCoverMode =\r\n coverFirstItem && previewVariant === 'image-grid' && !singlePick && items.length > 0;\r\n\r\n const shouldRenderDetachedPreview =\r\n !isUploading && !singlePick && persistentDropzone && items.length > 0;\r\n\r\n const restItemsForGrid = isCoverMode ? items.slice(1) : items;\r\n\r\n const showAddMoreTile =\r\n !disabled &&\r\n !singlePick &&\r\n previewVariant === 'image-grid' &&\r\n items.length > 0 &&\r\n items.length < maxFiles;\r\n\r\n const previewBlock =\r\n !isUploading &&\r\n !singlePick &&\r\n (restItemsForGrid.length > 0 || showAddMoreTile) && (\r\n <div className={cn('w-full mt-2', classNames?.previewWrapper)}>\r\n {previewVariant === 'default' && (\r\n <pre className=\"font-semibold text-gray-600\">\r\n {labelSelectedFiles}:\r\n </pre>\r\n )}\r\n <ul\r\n className={cn(\r\n 'mt-2 text-sm text-gray-500 flex flex-wrap items-start',\r\n previewVariant === 'image-grid'\r\n ? 'gap-2 justify-start'\r\n : 'gap-4 justify-center'\r\n )}\r\n >\r\n {restItemsForGrid.map((item, gridIndex) => {\r\n const index = isCoverMode ? gridIndex + 1 : gridIndex;\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const fileSize = isFile(item)\r\n ? (item.size / (1024 * 1024)).toFixed(2) + ' MB'\r\n : '';\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={cn(\r\n 'relative',\r\n previewVariant === 'image-grid'\r\n ? 'w-[75px] h-[75px]'\r\n : 'flex flex-col items-center gap-2'\r\n )}\r\n >\r\n <div className=\"relative w-full h-full\">\r\n <FilePreview item={item} styles={classNames} />\r\n <div\r\n className={cn(\r\n 'absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm',\r\n previewVariant === 'image-grid' && 'top-1 right-1 bg-white/90 rounded-full p-0.5'\r\n )}\r\n onClick={(event) => removeItem(event, index)}\r\n >\r\n <X size={16} strokeWidth={1} color=\"black\" />\r\n </div>\r\n </div>\r\n {previewVariant === 'default' && (\r\n <span className=\"inline-flex flex-col items-center\">\r\n <span className=\"max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap\">\r\n {fileName}\r\n </span>\r\n {fileSize && <span>({fileSize})</span>}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n {showAddMoreTile && (\r\n <li\r\n key=\"add-more\"\r\n className=\"relative w-[75px] h-[75px] flex items-center justify-center rounded-[8px] border border-dashed border-[#9368FF80] bg-[#FCFCFC] cursor-pointer hover:bg-[#9368FF0F]\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n if (disabled || isUploading) return;\r\n open();\r\n }}\r\n >\r\n <div className=\"flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]\">\r\n <Plus size={16} className=\"text-[#9368FF]\" />\r\n </div>\r\n </li>\r\n )}\r\n </ul>\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"w-full select-none\">\r\n <Card\r\n {...restProps}\r\n {...getRootProps({\r\n onClick: (event) => {\r\n if (disabled || isUploading) return;\r\n if (shouldBlockRootOpen) {\r\n restProps.onClick?.(event);\r\n return;\r\n }\r\n open();\r\n restProps.onClick?.(event);\r\n },\r\n })}\r\n className={cn(\r\n `w-full text-center flex flex-col items-center justify-center gap-6 cursor-pointer`,\r\n !isContentPreviewMode &&\r\n 'border border-dashed border-[#9368FF80] rounded-[8px] bg-[#FCFCFC] p-4',\r\n isContentPreviewMode && 'min-h-0 border-0 bg-transparent p-0',\r\n isCoverMode && 'relative',\r\n disabled && 'border-[#E4E4E7] pointer-events-none',\r\n fileErrors.length > 0 && !isContentPreviewMode && 'border-red-500',\r\n isDragActive && 'bg-gray-100',\r\n singlePick && 'shadow-none!',\r\n singlePick && items.length > 0 && !hasSingleVideoPreview && 'p-0! shadow-none!',\r\n hasSingleVideoPreview && 'h-auto! max-h-none! min-h-0! p-2!',\r\n className\r\n )}\r\n >\r\n <input {...getInputProps()} />\r\n\r\n {isUploading && (\r\n <div\r\n className=\"w-full h-full min-h-46 rounded-lg border border-[#E4E4E7] bg-[#FCFCFC] flex flex-col items-center justify-center gap-4 p-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"relative h-24 w-24\">\r\n <svg className=\"h-24 w-24\" viewBox=\"0 0 100 100\">\r\n <circle cx=\"50\" cy=\"50\" r=\"42\" stroke=\"#E6E1F5\" strokeWidth=\"8\" fill=\"none\" />\r\n </svg>\r\n <span className=\"absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground\">\r\n {Math.max(0, Math.min(100, Math.round(uploadProgress)))}%\r\n </span>\r\n </div>\r\n\r\n <div className=\"text-center\">\r\n <p className=\"text-xl font-semibold text-foreground\">{labelUploadingTitle}</p>\r\n <p className=\"text-sm text-[#666A78]\">\r\n {formatBytesToMb(uploadLoadedBytes)} of {formatBytesToMb(uploadTotalBytes)}\r\n </p>\r\n <p className=\"mt-2 text-sm text-[#666A78]\">{labelUploadingHint}</p>\r\n </div>\r\n\r\n <div className=\"w-full max-w-[520px] h-2 rounded-full bg-[#E6E1F5] overflow-hidden\">\r\n <div\r\n className=\"h-full bg-[#9368FF] transition-[width] duration-150 ease-linear\"\r\n style={{ width: `${Math.max(0, Math.min(100, uploadProgress))}%` }}\r\n />\r\n </div>\r\n\r\n {onCancelUpload && (\r\n <button\r\n type=\"button\"\r\n className=\"mt-1 h-10 min-w-36 rounded-md border border-[#E4E4E7] bg-white px-6 text-base font-medium text-foreground cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n onCancelUpload();\r\n }}\r\n >\r\n {labelUploadingActionCancel}\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && isCoverMode && (\r\n <div\r\n className=\"absolute inset-0 rounded-[8px] overflow-hidden\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <FilePreview\r\n item={items[0]}\r\n styles={{\r\n ...classNames,\r\n previewWraper: cn(\r\n 'w-full h-full rounded-[8px] border-0',\r\n classNames?.previewWraper?.replace(/w-\\[[^\\]]+\\]|h-\\[[^\\]]+\\]/g, ''),\r\n ),\r\n }}\r\n />\r\n <div\r\n className=\"absolute top-2 right-2 cursor-pointer bg-white/90 rounded-full p-1\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={16} strokeWidth={1} color=\"black\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!isUploading &&\r\n (items.length === 0 || (!singlePick && persistentDropzone)) &&\r\n (fileErrors.length === 0 || !singlePick) && (\r\n <div\r\n className={cn(\r\n 'flex flex-col items-center gap-2 w-full',\r\n classNames?.idleWrapper,\r\n isCoverMode && 'invisible',\r\n )}\r\n >\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]\">\r\n <UploadIcon className=\"size-6 text-[#9368FF]\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-center gap-1 w-full\">\r\n {!disabled && (\r\n <>\r\n <span\r\n className={cn(\r\n \"font-semibold text-[14px] leading-[125%] text-[#06080D] text-center w-full whitespace-pre-line\",\r\n labelDropzoneClassname\r\n )}\r\n >\r\n {labelDropzonePrompt}\r\n </span>\r\n\r\n <span\r\n className={cn(\r\n \"font-medium text-[12px] leading-[120%] text-[#666A78] text-center w-full whitespace-pre-line\",\r\n labelDropzoneSubClassname\r\n )}\r\n >\r\n {labelDropzoneSubPrompt}\r\n </span>\r\n </>\r\n )}\r\n </div>\r\n\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n size=\"md\"\r\n >\r\n {labelOrClickToSelect}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && singlePick && fileErrors.length > 0 && !hasRejectedSingleDocumentFile && (\r\n <div className={cn('w-full mt-4', classNames?.errorWrapper)}>\r\n <span className=\"font-semibold text-red-500\">\r\n {labelUploadErrors}:\r\n </span>\r\n <ul className=\"mt-2 text-sm text-red-500 list-disc list-inside\">\r\n {fileErrors.map((fileRejection, index) => (\r\n <li key={index}>\r\n {fileRejection.file.name} (\r\n {(fileRejection.file.size / (1024 * 1024)).toFixed(2)} MB)\r\n {!hideErrors && (\r\n <ul className=\"ml-4 list-disc list-inside\">\r\n {fileRejection.errors.map((error, errorIndex) => (\r\n <li key={errorIndex}>\r\n {error.code === 'file-too-large' && labelFileTooLarge}\r\n {error.code === 'file-invalid-type' &&\r\n labelInvalidFileType}\r\n {error.code !== 'file-too-large' &&\r\n error.code !== 'file-invalid-type' &&\r\n error.message}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {!isUploading && Boolean(singlePick && items.length) && (\r\n <>\r\n {isSingleDocument ? (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n )}\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {singleFileCard\r\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\r\n : ''}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <DropzoneSinglePickPreview\r\n item={items[0]}\r\n onRemoveClick={(e) => removeItem(e, 0)}\r\n onReplaceClick={(e) => {\r\n e.stopPropagation();\r\n if (disabled) return;\r\n open();\r\n }}\r\n labelUploaded={labelVideoUploaded}\r\n labelReplace={labelVideoReplace}\r\n disabled={disabled}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {!isUploading && hasRejectedSingleDocumentFile && (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n )}\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {singleFileCard\r\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\r\n : ''}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setFileErrors([]);\r\n }}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4\">\r\n <InfoIcon size={20} color=\"#DC2626\" />\r\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\r\n {fileErrors[0]?.errors?.[0]?.code === 'file-too-large'\r\n ? labelFileTooLarge\r\n : fileErrors[0]?.errors?.[0]?.message || labelInvalidFileType}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!shouldRenderDetachedPreview && previewBlock}\r\n </Card>\r\n {shouldRenderDetachedPreview && <div className=\"w-full\">{previewBlock}</div>}\r\n {!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":["formatBytesToMb","bytes","FILE_EXT_ICON_MAP","fileCsvIcon","fileDocIcon","fileDocxIcon","fileJpgIcon","filePdfIcon","filePngIcon","filePptIcon","filePptxIcon","fileRarIcon","fileSvgIcon","fileWebpIcon","fileXlsIcon","fileXlsxIcon","fileZipIcon","getFileExtension","fileName","parts","getFileTypeIconByName","extension","areItemsEqual","a","b","i","left","right","isFile","Dropzone","forwardRef","acceptTypes","DEFAULT_FILE_TYPES","maxSizeMB","maxFiles","onErrors","hideErrors","disabled","classNames","value","onChangeValue","className","labelDropzonePrompt","labelDropzoneSubPrompt","labelOrClickToSelect","labelSelectedFiles","labelUploadErrors","labelFileTooLarge","labelInvalidFileType","labelVideoUploaded","labelVideoReplace","singlePick","labelDropzoneClassname","labelDropzoneSubClassname","isUploading","uploadProgress","uploadLoadedBytes","uploadTotalBytes","onCancelUpload","labelUploadingTitle","labelUploadingHint","labelUploadingActionCancel","persistentDropzone","previewVariant","coverFirstItem","restProps","ref","items","setItems","useState","fileErrors","setFileErrors","firstItem","firstRejectedFile","isRejectedImage","isSingleFile","isSingleImage","isSingleVideo","isVideoUrl","isSingleDocument","hasRejectedSingleDocumentFile","singleFileCard","singleFileCardIcon","hasSingleVideoPreview","shouldBlockRootOpen","isContentPreviewMode","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","isCoverMode","shouldRenderDetachedPreview","restItemsForGrid","showAddMoreTile","previewBlock","jsxs","cn","item","gridIndex","extractName","fileSize","jsx","FilePreview","X","Plus","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","e","InfoIcon","firstError","errorText"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAiCA,MAAMA,KAAkB,CAACC,IAAQ,MAAM,IAAIA,KAAS,OAAO,OAAO,QAAQ,CAAC,CAAC,OACtEC,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,oBAAAC,IAAqB;AAAA,IACrB,gBAAAC,IAAiB;AAAA,IACjB,gBAAAC,KAAiB;AAAA,IACjB,GAAGC;AAAA,EAAA,GAELC,OACG;AACH,UAAM,CAACC,GAAOC,CAAQ,IAAIC,EAA8B9B,KAAS,CAAA,CAAE,GAC7D,CAAC+B,GAAYC,CAAa,IAAIF,EAA0B,CAAA,CAAE,GAC1DG,IAAYL,EAAM,CAAC,GACnBM,IAAoBH,EAAW,CAAC,GAAG,MACnCI,KAAkB,EAAQD,GAAmB,MAAM,SAAS,OAAO,GACnEE,IAAexB,KAAcgB,EAAM,SAAS,KAAKvC,EAAO4C,CAAS,GACjEI,KAAgBD,KAAgBH,EAAU,KAAK,SAAS,OAAO,GAC/DK,IACHF,KAAgBH,EAAU,KAAK,SAAS,OAAO,KAC/CrB,KAAcgB,EAAM,SAAS,KAAK,OAAOK,KAAc,YAAYM,GAAWN,CAAS,GACpFO,IAAmBJ,KAAgB,CAACC,MAAiB,CAACC,GAEtDG,IADwB7B,KAAc,CAACgB,EAAM,UAAU,EAAQM,KACN,CAACC,IAC1DO,IAAiBF,IAAmBP,IAAYC,GAChDS,IAAqB9D,GAAsB6D,GAAgB,IAAI,GAC/DE,IACJhC,KAAc0B,GACVO,KAAsBD,GACtBE,IAAuBlC,KAAcgB,EAAM,SAAS,GAEpDmB,KAAS,CAACC,GAAuBC,MAAoC;AACzE,MAAAjB,EAAciB,CAAc,GAC5BrD,IAAWqD,CAAc;AAEzB,YAAMC,IAAWtC,IACboC,EAAc,MAAM,GAAG,CAAC,IACxB,CAAC,GAAGpB,GAAO,GAAGoB,CAAa,EAAE,MAAM,GAAGrD,CAAQ;AAElD,MAAAkC,EAASqB,CAAQ,GACjBjD,IAAgBiD,CAAQ;AAAA,IAC1B;AAEA,IAAAC,GAAU,MAAM;AACd,MAAInD,KAAS,CAACjB,GAAc6C,GAAO5B,CAAK,KACtC6B,EAAS7B,CAAK;AAAA,IAElB,GAAG,CAAC4B,GAAO5B,CAAK,CAAC;AAEjB,UAAMoD,IAAa,CACjBC,GACAC,MACG;AACH,UAAIxD,EAAU;AACd,MAAAuD,EAAM,gBAAA;AAEN,YAAMH,IAAWtB,EAAM,OAAO,CAAC2B,GAAGrE,MAAMA,MAAMoE,CAAK;AACnD,MAAAzB,EAASqB,CAAQ,GACjBjD,IAAgBiD,CAAQ;AAAA,IAC1B,GAEM,EAAE,cAAAM,IAAc,eAAAC,IAAe,cAAAC,IAAc,MAAAC,EAAA,IAASC,GAAY;AAAA,MACtE,QAAAb;AAAA,MACA,QAAQvD,EAAY,OAAO,CAACqE,GAAKC,OAC/BD,EAAIC,CAAQ,IAAI,CAAA,GACTD,IACN,CAAA,CAA8B;AAAA,MACjC,SAASnE,IAAY,OAAO;AAAA,MAC5B,UAAUkB,IAAa,IAAIjB;AAAA,MAC3B,UAAUG,KAAYiB;AAAA,MACtB,SAAS;AAAA,IAAA,CACV;AAED,IAAAgD,GAAoBpC,IAAK,OAChB;AAAA,MACL,UAAAE;AAAA,IAAA,IAED,CAAA,CAAE;AAEL,UAAMmC,IACJvC,MAAkBD,MAAmB,gBAAgB,CAACZ,KAAcgB,EAAM,SAAS,GAE/EqC,IACJ,CAAClD,KAAe,CAACH,KAAcW,KAAsBK,EAAM,SAAS,GAEhEsC,IAAmBF,IAAcpC,EAAM,MAAM,CAAC,IAAIA,GAElDuC,IACJ,CAACrE,KACD,CAACc,KACDY,MAAmB,gBACnBI,EAAM,SAAS,KACfA,EAAM,SAASjC,GAEXyE,IACJ,CAACrD,KACD,CAACH,MACAsD,EAAiB,SAAS,KAAKC,MAChC,gBAAAE,EAAC,SAAI,WAAWC,EAAG,eAAevE,GAAY,cAAc,GACzD,UAAA;AAAA,MAAAyB,MAAmB,aAClB,gBAAA6C,EAAC,OAAA,EAAI,WAAU,+BACZ,UAAA;AAAA,QAAA/D;AAAA,QAAmB;AAAA,MAAA,GACtB;AAAA,MAEF,gBAAA+D;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWC;AAAA,YACT;AAAA,YACA9C,MAAmB,eACf,wBACA;AAAA,UAAA;AAAA,UAGL,UAAA;AAAA,YAAA0C,EAAiB,IAAI,CAACK,GAAMC,MAAc;AACzC,oBAAMlB,IAAQU,IAAcQ,IAAY,IAAIA,GACtC7F,IAAWU,EAAOkF,CAAI,IAAIA,EAAK,OAAOE,GAAYF,CAAI,GACtDG,IAAWrF,EAAOkF,CAAI,KACvBA,EAAK,QAAQ,OAAO,OAAO,QAAQ,CAAC,IAAI,QACzC;AAEJ,qBACE,gBAAAF;AAAA,gBAAC;AAAA,gBAAA;AAAA,kBAEC,WAAWC;AAAA,oBACT;AAAA,oBACA9C,MAAmB,eACf,sBACA;AAAA,kBAAA;AAAA,kBAGN,UAAA;AAAA,oBAAA,gBAAA6C,EAAC,OAAA,EAAI,WAAU,0BACb,UAAA;AAAA,sBAAA,gBAAAM,EAACC,IAAA,EAAY,MAAAL,GAAY,QAAQxE,EAAA,CAAY;AAAA,sBAC7C,gBAAA4E;AAAA,wBAAC;AAAA,wBAAA;AAAA,0BACC,WAAWL;AAAA,4BACT;AAAA,4BACA9C,MAAmB,gBAAgB;AAAA,0BAAA;AAAA,0BAErC,SAAS,CAAC6B,OAAUD,EAAWC,IAAOC,CAAK;AAAA,0BAE3C,4BAACuB,GAAA,EAAE,MAAM,IAAI,aAAa,GAAG,OAAM,QAAA,CAAQ;AAAA,wBAAA;AAAA,sBAAA;AAAA,oBAC7C,GACF;AAAA,oBACCrD,MAAmB,aAClB,gBAAA6C,EAAC,QAAA,EAAK,WAAU,qCACd,UAAA;AAAA,sBAAA,gBAAAM,EAAC,QAAA,EAAK,WAAU,gEACb,UAAAhG,GACH;AAAA,sBACC+F,uBAAa,QAAA,EAAK,UAAA;AAAA,wBAAA;AAAA,wBAAEA;AAAA,wBAAS;AAAA,sBAAA,EAAA,CAAC;AAAA,oBAAA,EAAA,CACjC;AAAA,kBAAA;AAAA,gBAAA;AAAA,gBA1BGpB;AAAA,cAAA;AAAA,YA8BX,CAAC;AAAA,YACAa,KACC,gBAAAQ;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBACV,SAAS,CAACtB,MAAU;AAElB,kBADAA,EAAM,gBAAA,GACF,EAAAvD,KAAYiB,MAChB4C,EAAA;AAAA,gBACF;AAAA,gBAEA,UAAA,gBAAAgB,EAAC,OAAA,EAAI,WAAU,uEACb,UAAA,gBAAAA,EAACG,MAAK,MAAM,IAAI,WAAU,iBAAA,CAAiB,EAAA,CAC7C;AAAA,cAAA;AAAA,cAVI;AAAA,YAAA;AAAA,UAWN;AAAA,QAAA;AAAA,MAAA;AAAA,IAEJ,GACF;AAGF,WACE,gBAAAT,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,MAAA,gBAAAA;AAAA,QAACU;AAAA,QAAA;AAAA,UACE,GAAGrD;AAAA,UACH,GAAG8B,GAAa;AAAA,YACf,SAAS,CAACH,MAAU;AAClB,kBAAI,EAAAvD,KAAYiB,IAChB;AAAA,oBAAI8B,IAAqB;AACvB,kBAAAnB,EAAU,UAAU2B,CAAK;AACzB;AAAA,gBACF;AACA,gBAAAM,EAAA,GACAjC,EAAU,UAAU2B,CAAK;AAAA;AAAA,YAC3B;AAAA,UAAA,CACD;AAAA,UACD,WAAWiB;AAAA,YACT;AAAA,YACA,CAACxB,KACC;AAAA,YACFA,KAAwB;AAAA,YACxBkB,KAAe;AAAA,YACflE,KAAY;AAAA,YACZiC,EAAW,SAAS,KAAK,CAACe,KAAwB;AAAA,YAClDY,MAAgB;AAAA,YAChB9C,KAAc;AAAA,YACdA,KAAcgB,EAAM,SAAS,KAAK,CAACgB,KAAyB;AAAA,YAC5DA,KAAyB;AAAA,YACzB1C;AAAA,UAAA;AAAA,UAGF,UAAA;AAAA,YAAA,gBAAAyE,EAAC,SAAA,EAAO,GAAGlB,GAAA,EAAc,CAAG;AAAA,YAE7B1C,KACC,gBAAAsD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAAChB,MAAUA,EAAM,gBAAA;AAAA,gBAE1B,UAAA;AAAA,kBAAA,gBAAAgB,EAAC,OAAA,EAAI,WAAU,sBACb,UAAA;AAAA,oBAAA,gBAAAM,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,gBAAAN,EAAC,QAAA,EAAK,WAAU,2FACb,UAAA;AAAA,sBAAA,KAAK,IAAI,GAAG,KAAK,IAAI,KAAK,KAAK,MAAMrD,CAAc,CAAC,CAAC;AAAA,sBAAE;AAAA,oBAAA,EAAA,CAC1D;AAAA,kBAAA,GACF;AAAA,kBAEA,gBAAAqD,EAAC,OAAA,EAAI,WAAU,eACb,UAAA;AAAA,oBAAA,gBAAAM,EAAC,KAAA,EAAE,WAAU,yCAAyC,UAAAvD,IAAoB;AAAA,oBAC1E,gBAAAiD,EAAC,KAAA,EAAE,WAAU,0BACV,UAAA;AAAA,sBAAA5G,GAAgBwD,EAAiB;AAAA,sBAAE;AAAA,sBAAKxD,GAAgByD,EAAgB;AAAA,oBAAA,GAC3E;AAAA,oBACA,gBAAAyD,EAAC,KAAA,EAAE,WAAU,+BAA+B,UAAAtD,GAAA,CAAmB;AAAA,kBAAA,GACjE;AAAA,kBAEA,gBAAAsD,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,KAAK3D,CAAc,CAAC,CAAC,IAAA;AAAA,oBAAI;AAAA,kBAAA,GAErE;AAAA,kBAECG,KACC,gBAAAwD;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,WAAU;AAAA,sBACV,SAAS,CAACtB,MAAU;AAClB,wBAAAA,EAAM,gBAAA,GACNlC,EAAA;AAAA,sBACF;AAAA,sBAEC,UAAAG;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACH;AAAA,cAAA;AAAA,YAAA;AAAA,YAKL,CAACP,KAAeiD,KACf,gBAAAK;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAAChB,MAAUA,EAAM,gBAAA;AAAA,gBAE1B,UAAA;AAAA,kBAAA,gBAAAsB;AAAA,oBAACC;AAAA,oBAAA;AAAA,sBACC,MAAMhD,EAAM,CAAC;AAAA,sBACb,QAAQ;AAAA,wBACN,GAAG7B;AAAA,wBACH,eAAeuE;AAAA,0BACb;AAAA,0BACAvE,GAAY,eAAe,QAAQ,8BAA8B,EAAE;AAAA,wBAAA;AAAA,sBACrE;AAAA,oBACF;AAAA,kBAAA;AAAA,kBAEF,gBAAA4E;AAAA,oBAAC;AAAA,oBAAA;AAAA,sBACC,WAAU;AAAA,sBACV,SAAS,CAACtB,MAAUD,EAAWC,GAAO,CAAC;AAAA,sBAEvC,4BAACwB,GAAA,EAAE,MAAM,IAAI,aAAa,GAAG,OAAM,QAAA,CAAQ;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBAC7C;AAAA,cAAA;AAAA,YAAA;AAAA,YAIH,CAAC9D,MACCa,EAAM,WAAW,KAAM,CAAChB,KAAcW,OACtCQ,EAAW,WAAW,KAAK,CAACnB,MAC7B,gBAAAyD;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAWC;AAAA,kBACT;AAAA,kBACAvE,GAAY;AAAA,kBACZiE,KAAe;AAAA,gBAAA;AAAA,gBAGjB,UAAA;AAAA,kBAAA,gBAAAW,EAAC,SAAI,WAAU,wEACb,4BAACK,IAAA,EAAW,WAAU,yBAAwB,EAAA,CAChD;AAAA,oCAEC,OAAA,EAAI,WAAU,2CACZ,UAAA,CAAClF,KACA,gBAAAuE,EAAAY,GAAA,EACE,UAAA;AAAA,oBAAA,gBAAAN;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWL;AAAA,0BACT;AAAA,0BACAzD;AAAA,wBAAA;AAAA,wBAGD,UAAAV;AAAA,sBAAA;AAAA,oBAAA;AAAA,oBAGH,gBAAAwE;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAWL;AAAA,0BACT;AAAA,0BACAxD;AAAA,wBAAA;AAAA,wBAGD,UAAAV;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBACH,EAAA,CACF,EAAA,CAEJ;AAAA,kBAEC,CAACN,KACA,gBAAA6E;AAAA,oBAACO;AAAA,oBAAA;AAAA,sBACC,MAAK;AAAA,sBACL,MAAK;AAAA,sBAEJ,UAAA7E;AAAA,oBAAA;AAAA,kBAAA;AAAA,gBACH;AAAA,cAAA;AAAA,YAAA;AAAA,YAKL,CAACU,KAAeH,KAAcmB,EAAW,SAAS,KAAK,CAACU,KACvD,gBAAA4B,EAAC,SAAI,WAAWC,EAAG,eAAevE,GAAY,YAAY,GACxD,UAAA;AAAA,cAAA,gBAAAsE,EAAC,QAAA,EAAK,WAAU,8BACb,UAAA;AAAA,gBAAA9D;AAAA,gBAAkB;AAAA,cAAA,GACrB;AAAA,cACA,gBAAAoE,EAAC,MAAA,EAAG,WAAU,mDACX,UAAA5C,EAAW,IAAI,CAACoD,GAAe7B,MAC9B,gBAAAe,EAAC,MAAA,EACE,UAAA;AAAA,gBAAAc,EAAc,KAAK;AAAA,gBAAK;AAAA,iBACvBA,EAAc,KAAK,QAAQ,OAAO,OAAO,QAAQ,CAAC;AAAA,gBAAE;AAAA,gBACrD,CAACtF,KACA,gBAAA8E,EAAC,MAAA,EAAG,WAAU,8BACX,UAAAQ,EAAc,OAAO,IAAI,CAACC,GAAOC,wBAC/B,MAAA,EACE,UAAA;AAAA,kBAAAD,EAAM,SAAS,oBAAoB5E;AAAA,kBACnC4E,EAAM,SAAS,uBACd3E;AAAA,kBACD2E,EAAM,SAAS,oBACdA,EAAM,SAAS,uBACfA,EAAM;AAAA,gBAAA,EAAA,GANDC,CAOT,CACD,EAAA,CACH;AAAA,cAAA,EAAA,GAfK/B,CAiBT,CACD,EAAA,CACH;AAAA,YAAA,GACF;AAAA,YAGD,CAACvC,KAAe,GAAQH,KAAcgB,EAAM,kCAExC,UAAAY,IACC,gBAAA6B;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAAChB,MAAUA,EAAM,gBAAA;AAAA,gBAE1B,UAAA;AAAA,kBAAA,gBAAAsB,EAAC,KAAA,EAAE,WAAU,8EACV,UAAAxE,GACH;AAAA,kBAEA,gBAAAkE,EAAC,OAAA,EAAI,WAAU,8EACZ,UAAA;AAAA,oBAAA1B,IACC,gBAAAgC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,KAAKhC;AAAA,wBACL,KAAI;AAAA,wBACJ,WAAU;AAAA,sBAAA;AAAA,oBAAA,sBAGX,OAAA,EAAI,WAAU,2FACb,UAAA,gBAAAgC,EAACW,GAAA,EAAa,MAAM,GAAA,CAAI,EAAA,CAC1B;AAAA,oBAEF,gBAAAjB,EAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,sBAAA,gBAAAM,EAAC,QAAA,EAAK,WAAU,2EACb,UAAAjC,GAAgB,MACnB;AAAA,sBACA,gBAAAiC,EAAC,QAAA,EAAK,WAAU,gEACb,cACG,IAAIjC,EAAe,QAAQ,OAAO,OAAO,QAAQ,CAAC,CAAC,QACnD,GAAA,CACN;AAAA,oBAAA,GACF;AAAA,oBACC,CAAC5C,KACA,gBAAA6E;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAS,CAACtB,MAAUD,EAAWC,GAAO,CAAC;AAAA,wBAEvC,UAAA,gBAAAsB,EAACE,GAAA,EAAE,MAAM,IAAI,OAAM,UAAA,CAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC/B,EAAA,CAEJ;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA,IAGF,gBAAAF;AAAA,cAACY;AAAA,cAAA;AAAA,gBACC,MAAM3D,EAAM,CAAC;AAAA,gBACb,eAAe,CAAC4D,MAAMpC,EAAWoC,GAAG,CAAC;AAAA,gBACrC,gBAAgB,CAACA,MAAM;AAErB,kBADAA,EAAE,gBAAA,GACE,CAAA1F,KACJ6D,EAAA;AAAA,gBACF;AAAA,gBACA,eAAejD;AAAA,gBACf,cAAcC;AAAA,gBACd,UAAAb;AAAA,cAAA;AAAA,YAAA,GAGN;AAAA,YAGD,CAACiB,KAAe0B,KACf,gBAAA4B;AAAA,cAAC;AAAA,cAAA;AAAA,gBACC,WAAU;AAAA,gBACV,SAAS,CAAChB,MAAUA,EAAM,gBAAA;AAAA,gBAE1B,UAAA;AAAA,kBAAA,gBAAAsB,EAAC,KAAA,EAAE,WAAU,8EACV,UAAAxE,GACH;AAAA,kBAEA,gBAAAkE,EAAC,OAAA,EAAI,WAAU,8EACZ,UAAA;AAAA,oBAAA1B,IACC,gBAAAgC;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,KAAKhC;AAAA,wBACL,KAAI;AAAA,wBACJ,WAAU;AAAA,sBAAA;AAAA,oBAAA,sBAGX,OAAA,EAAI,WAAU,2FACb,UAAA,gBAAAgC,EAACW,GAAA,EAAa,MAAM,GAAA,CAAI,EAAA,CAC1B;AAAA,oBAEF,gBAAAjB,EAAC,OAAA,EAAI,WAAU,4DACb,UAAA;AAAA,sBAAA,gBAAAM,EAAC,QAAA,EAAK,WAAU,2EACb,UAAAjC,GAAgB,MACnB;AAAA,sBACA,gBAAAiC,EAAC,QAAA,EAAK,WAAU,gEACb,cACG,IAAIjC,EAAe,QAAQ,OAAO,OAAO,QAAQ,CAAC,CAAC,QACnD,GAAA,CACN;AAAA,oBAAA,GACF;AAAA,oBACC,CAAC5C,KACA,gBAAA6E;AAAA,sBAAC;AAAA,sBAAA;AAAA,wBACC,WAAU;AAAA,wBACV,SAAS,CAACtB,MAAU;AAClB,0BAAAA,EAAM,gBAAA,GACNrB,EAAc,CAAA,CAAE;AAAA,wBAClB;AAAA,wBAEA,UAAA,gBAAA2C,EAACE,GAAA,EAAE,MAAM,IAAI,OAAM,UAAA,CAAU;AAAA,sBAAA;AAAA,oBAAA;AAAA,kBAC/B,GAEJ;AAAA,kBAEA,gBAAAR,EAAC,OAAA,EAAI,WAAU,oDACb,UAAA;AAAA,oBAAA,gBAAAM,EAACc,GAAA,EAAS,MAAM,IAAI,OAAM,WAAU;AAAA,oBACpC,gBAAAd,EAAC,OAAE,WAAU,mEACV,YAAW,CAAC,GAAG,SAAS,CAAC,GAAG,SAAS,mBAClCnE,IACAuB,EAAW,CAAC,GAAG,SAAS,CAAC,GAAG,WAAWtB,EAAA,CAC7C;AAAA,kBAAA,EAAA,CACF;AAAA,gBAAA;AAAA,cAAA;AAAA,YAAA;AAAA,YAID,CAACwD,KAA+BG;AAAA,UAAA;AAAA,QAAA;AAAA,MAAA;AAAA,MAElCH,KAA+B,gBAAAU,EAAC,OAAA,EAAI,WAAU,UAAU,UAAAP,GAAa;AAAA,MACrE,CAACrD,KAAe,CAACH,KAAcmB,EAAW,SAAS,KAClD,gBAAA4C;AAAA,QAAC;AAAA,QAAA;AAAA,UACC,WAAWL,EAAG,mCAAmCvE,GAAY,YAAY;AAAA,UAExE,UAAAgC,EAAW,IAAI,CAACoD,GAAe7B,MAAU;AACxC,kBAAMoC,IAAaP,EAAc,OAAO,CAAC,GACnCQ,IACJD,GAAY,SAAS,mBACjBlF,IACAkF,GAAY,SAAS,sBACnBjF,IACAiF,GAAY,WAAWjF;AAE/B,mBACE,gBAAA4D;AAAA,cAAC;AAAA,cAAA;AAAA,gBAEC,WAAU;AAAA,gBAEV,UAAA;AAAA,kBAAA,gBAAAM,EAACc,KAAS,MAAM,IAAI,OAAM,WAAU,WAAU,YAAW;AAAA,kBACzD,gBAAApB,EAAC,KAAA,EAAE,WAAU,mEACX,UAAA;AAAA,oBAAA,gBAAAM,EAAC,QAAA,EAAK,WAAU,iBAAiB,UAAAQ,EAAc,KAAK,MAAK;AAAA,oBACxD;AAAA,oBACAQ;AAAA,kBAAA,EAAA,CACH;AAAA,gBAAA;AAAA,cAAA;AAAA,cARKrC;AAAA,YAAA;AAAA,UAWX,CAAC;AAAA,QAAA;AAAA,MAAA;AAAA,IACH,GAEJ;AAAA,EAEJ;AACF;AAEAhE,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 { FilePreview } from './DropzoneFilePreview';\r\nimport { DropzoneSinglePickPreview } from './DropzoneSinglePickPreview';\r\nimport { extractName, isFile, isVideoUrl } from './DropzoneUtils';\r\nimport { Button } from \"../Button\";\r\nimport fileCsvIcon from './icons/file-csv.svg';\r\nimport fileDocIcon from './icons/file-doc.svg';\r\nimport fileDocxIcon from './icons/file-docx.svg';\r\nimport fileJpgIcon from './icons/file-jpg.svg';\r\nimport filePdfIcon from './icons/file-pdf.svg';\r\nimport filePngIcon from './icons/file-png.svg';\r\nimport filePptIcon from './icons/file-ppt.svg';\r\nimport filePptxIcon from './icons/file-pptx.svg';\r\nimport fileRarIcon from './icons/file-rar.svg';\r\nimport fileSvgIcon from './icons/file-svg.svg';\r\nimport fileWebpIcon from './icons/file-webp.svg';\r\nimport fileXlsIcon from './icons/file-xls.svg';\r\nimport fileXlsxIcon from './icons/file-xlsx.svg';\r\nimport fileZipIcon from './icons/file-zip.svg';\r\n\r\nconst formatBytesToMb = (bytes = 0) => `${(bytes / (1024 * 1024)).toFixed(0)} MB`;\r\nconst FILE_EXT_ICON_MAP: Record<string, string> = {\r\n csv: fileCsvIcon,\r\n doc: fileDocIcon,\r\n docx: fileDocxIcon,\r\n jpg: fileJpgIcon,\r\n jpeg: fileJpgIcon,\r\n pdf: filePdfIcon,\r\n png: filePngIcon,\r\n ppt: filePptIcon,\r\n pptx: filePptxIcon,\r\n rar: fileRarIcon,\r\n svg: fileSvgIcon,\r\n webp: fileWebpIcon,\r\n xls: fileXlsIcon,\r\n xlsx: fileXlsxIcon,\r\n zip: fileZipIcon,\r\n};\r\n\r\nconst getFileExtension = (fileName?: string) => {\r\n if (!fileName) return '';\r\n const parts = fileName.toLowerCase().split('.');\r\n return parts.length > 1 ? parts[parts.length - 1] : '';\r\n};\r\n\r\nconst getFileTypeIconByName = (fileName?: string) => {\r\n const extension = getFileExtension(fileName);\r\n return FILE_EXT_ICON_MAP[extension] ?? null;\r\n};\r\nconst areItemsEqual = (a: DropzoneValueItem[], b: DropzoneValueItem[]) => {\r\n if (a === b) return true;\r\n if (a.length !== b.length) return false;\r\n\r\n for (let i = 0; i < a.length; i++) {\r\n const left = a[i];\r\n const right = b[i];\r\n\r\n if (left === right) continue;\r\n\r\n if (typeof left === 'string' && typeof right === 'string') {\r\n if (left !== right) return false;\r\n continue;\r\n }\r\n\r\n if (isFile(left) && isFile(right)) {\r\n if (\r\n left.name !== right.name ||\r\n left.size !== right.size ||\r\n left.type !== right.type ||\r\n left.lastModified !== right.lastModified\r\n ) {\r\n return false;\r\n }\r\n continue;\r\n }\r\n\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\n/**\r\n * Dropzone component - A drag-and-drop file upload area with image previews, error handling, and localization.\r\n *\r\n * @component\r\n * @param {DropzoneProps} props - The props for the Dropzone component.\r\n * @param {string[]} [props.acceptTypes=DEFAULT_FILE_TYPES] - Allowed file MIME types.\r\n * @param {number} props.maxSizeMB - Maximum allowed file size in megabytes.\r\n * @param {number} [props.maxFiles=1] - Maximum number of files that can be uploaded.\r\n * @param {DropzoneTranslations} props.translations - Translations for text labels.\r\n * @param {(errors: FileRejection[]) => void} [props.onErrors] - Callback triggered when file errors occur.\r\n * @param {boolean} [props.hideErrors=false] - Whether to hide error messages.\r\n * @param {boolean} [props.disabled=false] - Whether the dropzone is disabled.\r\n * @param {DropzoneStyles} [props.classNames] - Custom classNames for different dropzone states.\r\n * @param {DropzoneValueItem[]} [props.value=[]] - Current selected files or URLs.\r\n * @param {(items: DropzoneValueItem[]) => void} [props.onChangeValue] - Callback triggered when file selection changes.\r\n * @param {string} [props.className] - Additional class names for styling.\r\n * @param {React.Ref<HTMLDivElement>} ref - Ref for the root dropzone container.\r\n * @returns {JSX.Element} The rendered Dropzone component.\r\n */\r\nexport const Dropzone = forwardRef<DropzoneControl, DropzoneProps>(\r\n (\r\n {\r\n acceptTypes = DEFAULT_FILE_TYPES,\r\n maxSizeMB,\r\n maxFiles = 1,\r\n onErrors,\r\n hideErrors = false,\r\n disabled = false,\r\n classNames,\r\n value,\r\n onChangeValue,\r\n className,\r\n labelDropzonePrompt = 'Drop files here or click to select',\r\n labelDropzoneSubPrompt = '',\r\n labelOrClickToSelect = 'Upload file',\r\n labelSelectedFiles = 'Selected Files',\r\n labelUploadErrors = 'Upload Errors',\r\n labelFileTooLarge = 'File is too large',\r\n labelInvalidFileType = 'Invalid file type',\r\n labelVideoUploaded = 'Uploaded',\r\n labelVideoReplace = 'Replace',\r\n singlePick = false,\r\n labelDropzoneClassname,\r\n labelDropzoneSubClassname,\r\n isUploading = false,\r\n uploadProgress = 0,\r\n uploadLoadedBytes = 0,\r\n uploadTotalBytes = 0,\r\n onCancelUpload,\r\n labelUploadingTitle = 'Uploading video...',\r\n labelUploadingHint = 'Please do not close this page',\r\n labelUploadingActionCancel = 'Cancel',\r\n labelUploadingOf = 'of',\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\r\n const onDrop = (acceptedFiles: File[], fileRejections: FileRejection[]) => {\r\n setFileErrors(fileRejections);\r\n onErrors?.(fileRejections);\r\n\r\n const newItems = singlePick\r\n ? acceptedFiles.slice(0, 1)\r\n : [...items, ...acceptedFiles].slice(0, maxFiles);\r\n\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n useEffect(() => {\r\n if (value && !areItemsEqual(items, value)) {\r\n setItems(value);\r\n }\r\n }, [items, value]);\r\n\r\n const removeItem = (\r\n event: React.MouseEvent<HTMLDivElement>,\r\n index: number\r\n ) => {\r\n if (disabled) return;\r\n event.stopPropagation();\r\n\r\n const newItems = items.filter((_, i) => i !== index);\r\n setItems(newItems);\r\n onChangeValue?.(newItems);\r\n };\r\n\r\n const { getRootProps, getInputProps, isDragActive, open } = useDropzone({\r\n onDrop,\r\n accept: acceptTypes.reduce((acc, fileType) => {\r\n acc[fileType] = [];\r\n return acc;\r\n }, {} as Record<string, string[]>),\r\n maxSize: maxSizeMB * 1024 * 1024,\r\n maxFiles: singlePick ? 1 : maxFiles,\r\n disabled: disabled || isUploading,\r\n noClick: true,\r\n });\r\n\r\n useImperativeHandle(ref, () => {\r\n return {\r\n setItems,\r\n };\r\n }, []);\r\n\r\n const isCoverMode =\r\n coverFirstItem && previewVariant === 'image-grid' && !singlePick && items.length > 0;\r\n\r\n const shouldRenderDetachedPreview =\r\n !isUploading && !singlePick && persistentDropzone && items.length > 0;\r\n\r\n const restItemsForGrid = isCoverMode ? items.slice(1) : items;\r\n\r\n const showAddMoreTile =\r\n !disabled &&\r\n !singlePick &&\r\n previewVariant === 'image-grid' &&\r\n items.length > 0 &&\r\n items.length < maxFiles;\r\n\r\n const previewBlock =\r\n !isUploading &&\r\n !singlePick &&\r\n (restItemsForGrid.length > 0 || showAddMoreTile) && (\r\n <div className={cn('w-full mt-2', classNames?.previewWrapper)}>\r\n {previewVariant === 'default' && (\r\n <pre className=\"font-semibold text-gray-600\">\r\n {labelSelectedFiles}:\r\n </pre>\r\n )}\r\n <ul\r\n className={cn(\r\n 'mt-2 text-sm text-gray-500 flex flex-wrap items-start',\r\n previewVariant === 'image-grid'\r\n ? 'gap-2 justify-start'\r\n : 'gap-4 justify-center'\r\n )}\r\n >\r\n {restItemsForGrid.map((item, gridIndex) => {\r\n const index = isCoverMode ? gridIndex + 1 : gridIndex;\r\n const fileName = isFile(item) ? item.name : extractName(item);\r\n const fileSize = isFile(item)\r\n ? (item.size / (1024 * 1024)).toFixed(2) + ' MB'\r\n : '';\r\n\r\n return (\r\n <li\r\n key={index}\r\n className={cn(\r\n 'relative',\r\n previewVariant === 'image-grid'\r\n ? 'w-[75px] h-[75px]'\r\n : 'flex flex-col items-center gap-2'\r\n )}\r\n >\r\n <div className=\"relative w-full h-full\">\r\n <FilePreview item={item} styles={classNames} />\r\n <div\r\n className={cn(\r\n 'absolute top-0 right-0 cursor-pointer bg-gray-300 rounded-sm',\r\n previewVariant === 'image-grid' && 'top-1 right-1 bg-white/90 rounded-full p-0.5'\r\n )}\r\n onClick={(event) => removeItem(event, index)}\r\n >\r\n <X size={16} strokeWidth={1} color=\"black\" />\r\n </div>\r\n </div>\r\n {previewVariant === 'default' && (\r\n <span className=\"inline-flex flex-col items-center\">\r\n <span className=\"max-w-[80px] text-ellipsis overflow-hidden whitespace-nowrap\">\r\n {fileName}\r\n </span>\r\n {fileSize && <span>({fileSize})</span>}\r\n </span>\r\n )}\r\n </li>\r\n );\r\n })}\r\n {showAddMoreTile && (\r\n <li\r\n key=\"add-more\"\r\n className=\"relative w-[75px] h-[75px] flex items-center justify-center rounded-[8px] border border-dashed border-[#9368FF80] bg-[#FCFCFC] cursor-pointer hover:bg-[#9368FF0F]\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n if (disabled || isUploading) return;\r\n open();\r\n }}\r\n >\r\n <div className=\"flex size-6 items-center justify-center rounded-full bg-[#9368FF1F]\">\r\n <Plus size={16} className=\"text-[#9368FF]\" />\r\n </div>\r\n </li>\r\n )}\r\n </ul>\r\n </div>\r\n );\r\n\r\n return (\r\n <div className=\"w-full select-none\">\r\n <Card\r\n {...restProps}\r\n {...getRootProps({\r\n onClick: (event) => {\r\n if (disabled || isUploading) return;\r\n if (shouldBlockRootOpen) {\r\n restProps.onClick?.(event);\r\n return;\r\n }\r\n open();\r\n restProps.onClick?.(event);\r\n },\r\n })}\r\n className={cn(\r\n `w-full text-center flex flex-col items-center justify-center gap-6 cursor-pointer`,\r\n !isContentPreviewMode &&\r\n 'border border-dashed border-[#9368FF80] rounded-[8px] bg-[#FCFCFC] p-4',\r\n isContentPreviewMode && 'min-h-0 border-0 bg-transparent p-0',\r\n isCoverMode && 'relative',\r\n disabled && 'border-[#E4E4E7] pointer-events-none',\r\n fileErrors.length > 0 && !isContentPreviewMode && 'border-red-500',\r\n isDragActive && 'bg-gray-100',\r\n singlePick && 'shadow-none!',\r\n singlePick && items.length > 0 && !hasSingleVideoPreview && 'p-0! shadow-none!',\r\n hasSingleVideoPreview && 'h-auto! max-h-none! min-h-0! p-2!',\r\n className\r\n )}\r\n >\r\n <input {...getInputProps()} />\r\n\r\n {isUploading && (\r\n <div\r\n className=\"w-full h-full min-h-46 rounded-lg border border-[#E4E4E7] bg-[#FCFCFC] flex flex-col items-center justify-center gap-4 p-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"relative h-24 w-24\">\r\n <svg className=\"h-24 w-24\" viewBox=\"0 0 100 100\">\r\n <circle cx=\"50\" cy=\"50\" r=\"42\" stroke=\"#E6E1F5\" strokeWidth=\"8\" fill=\"none\" />\r\n </svg>\r\n <span className=\"absolute inset-0 flex items-center justify-center text-lg font-semibold text-foreground\">\r\n {Math.max(0, Math.min(100, Math.round(uploadProgress)))}%\r\n </span>\r\n </div>\r\n\r\n <div className=\"text-center\">\r\n <p className=\"text-xl font-semibold text-foreground\">{labelUploadingTitle}</p>\r\n <p className=\"text-sm text-[#666A78]\">\r\n {formatBytesToMb(uploadLoadedBytes)} {labelUploadingOf} {formatBytesToMb(uploadTotalBytes)}\r\n </p>\r\n <p className=\"mt-2 text-sm text-[#666A78]\">{labelUploadingHint}</p>\r\n </div>\r\n\r\n <div className=\"w-full max-w-[520px] h-2 rounded-full bg-[#E6E1F5] overflow-hidden\">\r\n <div\r\n className=\"h-full bg-[#9368FF] transition-[width] duration-150 ease-linear\"\r\n style={{ width: `${Math.max(0, Math.min(100, uploadProgress))}%` }}\r\n />\r\n </div>\r\n\r\n {onCancelUpload && (\r\n <button\r\n type=\"button\"\r\n className=\"mt-1 h-10 min-w-36 rounded-md border border-[#E4E4E7] bg-white px-6 text-base font-medium text-foreground cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n onCancelUpload();\r\n }}\r\n >\r\n {labelUploadingActionCancel}\r\n </button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && isCoverMode && (\r\n <div\r\n className=\"absolute inset-0 rounded-[8px] overflow-hidden\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <FilePreview\r\n item={items[0]}\r\n styles={{\r\n ...classNames,\r\n previewWraper: cn(\r\n 'w-full h-full rounded-[8px] border-0',\r\n classNames?.previewWraper?.replace(/w-\\[[^\\]]+\\]|h-\\[[^\\]]+\\]/g, ''),\r\n ),\r\n }}\r\n />\r\n <div\r\n className=\"absolute top-2 right-2 cursor-pointer bg-white/90 rounded-full p-1\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={16} strokeWidth={1} color=\"black\" />\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!isUploading &&\r\n (items.length === 0 || (!singlePick && persistentDropzone)) &&\r\n (fileErrors.length === 0 || !singlePick) && (\r\n <div\r\n className={cn(\r\n 'flex flex-col items-center gap-2 w-full',\r\n classNames?.idleWrapper,\r\n isCoverMode && 'invisible',\r\n )}\r\n >\r\n <div className=\"flex size-12 items-center justify-center rounded-full bg-[#9368FF1F]\">\r\n <UploadIcon className=\"size-6 text-[#9368FF]\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-center gap-1 w-full\">\r\n {!disabled && (\r\n <>\r\n <span\r\n className={cn(\r\n \"font-semibold text-[14px] leading-[125%] text-[#06080D] text-center w-full whitespace-pre-line\",\r\n labelDropzoneClassname\r\n )}\r\n >\r\n {labelDropzonePrompt}\r\n </span>\r\n\r\n <span\r\n className={cn(\r\n \"font-medium text-[12px] leading-[120%] text-[#666A78] text-center w-full whitespace-pre-line\",\r\n labelDropzoneSubClassname\r\n )}\r\n >\r\n {labelDropzoneSubPrompt}\r\n </span>\r\n </>\r\n )}\r\n </div>\r\n\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n size=\"md\"\r\n >\r\n {labelOrClickToSelect}\r\n </Button>\r\n )}\r\n </div>\r\n )}\r\n\r\n {!isUploading && singlePick && fileErrors.length > 0 && !hasRejectedSingleDocumentFile && (\r\n <div className={cn('w-full mt-4', classNames?.errorWrapper)}>\r\n <span className=\"font-semibold text-red-500\">\r\n {labelUploadErrors}:\r\n </span>\r\n <ul className=\"mt-2 text-sm text-red-500 list-disc list-inside\">\r\n {fileErrors.map((fileRejection, index) => (\r\n <li key={index}>\r\n {fileRejection.file.name} (\r\n {(fileRejection.file.size / (1024 * 1024)).toFixed(2)} MB)\r\n {!hideErrors && (\r\n <ul className=\"ml-4 list-disc list-inside\">\r\n {fileRejection.errors.map((error, errorIndex) => (\r\n <li key={errorIndex}>\r\n {error.code === 'file-too-large' && labelFileTooLarge}\r\n {error.code === 'file-invalid-type' &&\r\n labelInvalidFileType}\r\n {error.code !== 'file-too-large' &&\r\n error.code !== 'file-invalid-type' &&\r\n error.message}\r\n </li>\r\n ))}\r\n </ul>\r\n )}\r\n </li>\r\n ))}\r\n </ul>\r\n </div>\r\n )}\r\n\r\n {!isUploading && Boolean(singlePick && items.length) && (\r\n <>\r\n {isSingleDocument ? (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n )}\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {singleFileCard\r\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\r\n : ''}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => removeItem(event, 0)}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n </div>\r\n ) : (\r\n <DropzoneSinglePickPreview\r\n item={items[0]}\r\n onRemoveClick={(e) => removeItem(e, 0)}\r\n onReplaceClick={(e) => {\r\n e.stopPropagation();\r\n if (disabled) return;\r\n open();\r\n }}\r\n labelUploaded={labelVideoUploaded}\r\n labelReplace={labelVideoReplace}\r\n fileInfo={singlePickFileInfo}\r\n disabled={disabled}\r\n />\r\n )}\r\n </>\r\n )}\r\n\r\n {!isUploading && hasRejectedSingleDocumentFile && (\r\n <div\r\n className=\"w-full max-w-[502px] flex flex-col items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <p className=\"w-full text-center text-[16px] leading-[130%] font-semibold text-[#06080D]\">\r\n {labelDropzonePrompt}\r\n </p>\r\n\r\n <div className=\"w-full min-h-[72px] rounded-[8px] bg-[#F5F5F5] p-4 flex items-center gap-4\">\r\n {singleFileCardIcon ? (\r\n <img\r\n src={singleFileCardIcon}\r\n alt=\"\"\r\n className=\"size-10 shrink-0\"\r\n />\r\n ) : (\r\n <div className=\"size-10 rounded-[8px] bg-[#DC2626] text-white flex items-center justify-center shrink-0\">\r\n <FileTextIcon size={20} />\r\n </div>\r\n )}\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate\">\r\n {singleFileCard?.name}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#666A78]\">\r\n {singleFileCard\r\n ? `${(singleFileCard.size / (1024 * 1024)).toFixed(0)} MB`\r\n : ''}\r\n </span>\r\n </div>\r\n {!disabled && (\r\n <div\r\n className=\"size-6 flex items-center justify-center cursor-pointer\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n setFileErrors([]);\r\n }}\r\n >\r\n <X size={24} color=\"#06080D\" />\r\n </div>\r\n )}\r\n </div>\r\n\r\n <div className=\"w-full bg-[#DC26260F] p-4 flex items-start gap-4\">\r\n <InfoIcon size={20} color=\"#DC2626\" />\r\n <p className=\"text-[12px] leading-[120%] font-medium text-[#DC2626] text-left\">\r\n {fileErrors[0]?.errors?.[0]?.code === 'file-too-large'\r\n ? labelFileTooLarge\r\n : fileErrors[0]?.errors?.[0]?.message || labelInvalidFileType}\r\n </p>\r\n </div>\r\n </div>\r\n )}\r\n\r\n {!shouldRenderDetachedPreview && previewBlock}\r\n </Card>\r\n {shouldRenderDetachedPreview && <div className=\"w-full\">{previewBlock}</div>}\r\n {!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":["formatBytesToMb","bytes","FILE_EXT_ICON_MAP","fileCsvIcon","fileDocIcon","fileDocxIcon","fileJpgIcon","filePdfIcon","filePngIcon","filePptIcon","filePptxIcon","fileRarIcon","fileSvgIcon","fileWebpIcon","fileXlsIcon","fileXlsxIcon","fileZipIcon","getFileExtension","fileName","parts","getFileTypeIconByName","extension","areItemsEqual","a","b","i","left","right","isFile","Dropzone","forwardRef","acceptTypes","DEFAULT_FILE_TYPES","maxSizeMB","maxFiles","onErrors","hideErrors","disabled","classNames","value","onChangeValue","className","labelDropzonePrompt","labelDropzoneSubPrompt","labelOrClickToSelect","labelSelectedFiles","labelUploadErrors","labelFileTooLarge","labelInvalidFileType","labelVideoUploaded","labelVideoReplace","singlePick","labelDropzoneClassname","labelDropzoneSubClassname","isUploading","uploadProgress","uploadLoadedBytes","uploadTotalBytes","onCancelUpload","labelUploadingTitle","labelUploadingHint","labelUploadingActionCancel","labelUploadingOf","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","onDrop","acceptedFiles","fileRejections","newItems","useEffect","removeItem","event","index","_","getRootProps","getInputProps","isDragActive","open","useDropzone","acc","fileType","useImperativeHandle","isCoverMode","shouldRenderDetachedPreview","restItemsForGrid","showAddMoreTile","previewBlock","jsxs","cn","item","gridIndex","extractName","fileSize","jsx","FilePreview","X","Plus","Card","UploadIcon","Fragment","Button","fileRejection","error","errorIndex","FileTextIcon","DropzoneSinglePickPreview","e","InfoIcon","firstError","errorText"],"mappings":"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"}
@@ -37,6 +37,11 @@ export interface DropzoneProps extends DropzoneTranslations, React.HTMLAttribute
37
37
  labelUploadingTitle?: string;
38
38
  labelUploadingHint?: string;
39
39
  labelUploadingActionCancel?: string;
40
+ labelUploadingOf?: string;
41
+ singlePickFileInfo?: {
42
+ name?: string;
43
+ size?: number;
44
+ };
40
45
  persistentDropzone?: boolean;
41
46
  previewVariant?: 'default' | 'image-grid';
42
47
  designVariant?: 'legacy' | 'modern';
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.types.d.ts","sourceRoot":"","sources":["../../src/Dropzone/Dropzone.types.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Dropzone.types.d.ts","sourceRoot":"","sources":["../../src/Dropzone/Dropzone.types.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Dropzone.types.js","sources":["../../src/Dropzone/Dropzone.types.tsx"],"sourcesContent":["import { FileRejection } from 'react-dropzone';\r\nimport { Dispatch, SetStateAction } from 'react';\r\n\r\nexport type DropzoneValueItem = File | string;\r\n\r\nexport interface FilePreviewProps {\r\n item: DropzoneValueItem;\r\n styles?: Pick<\r\n DropzoneStyles,\r\n 'previewWraper' | 'previewImage' | 'previewFile'\r\n >;\r\n}\r\n\r\nexport interface DropzoneTranslations {\r\n labelDropzonePrompt?: string;\r\n labelDropzoneSubPrompt?: string;\r\n labelOrClickToSelect?: string;\r\n labelSelectedFiles?: string;\r\n labelUploadErrors?: string;\r\n labelFileTooLarge?: string;\r\n labelInvalidFileType?: string;\r\n labelVideoUploaded?: string;\r\n labelVideoReplace?: string;\r\n}\r\n\r\nexport interface DropzoneProps\r\n extends DropzoneTranslations,\r\n React.HTMLAttributes<HTMLDivElement> {\r\n acceptTypes?: string[];\r\n maxSizeMB: number;\r\n maxFiles?: number;\r\n onErrors?: (errors: FileRejection[]) => void;\r\n hideErrors?: boolean;\r\n disabled?: boolean;\r\n classNames?: DropzoneStyles;\r\n value?: DropzoneValueItem[];\r\n onChangeValue?: (items: DropzoneValueItem[]) => void;\r\n singlePick?: boolean;\r\n labelDropzoneClassname?: string;\r\n labelDropzoneSubClassname?: string;\r\n isUploading?: boolean;\r\n uploadProgress?: number;\r\n uploadLoadedBytes?: number;\r\n uploadTotalBytes?: number;\r\n onCancelUpload?: () => void;\r\n labelUploadingTitle?: string;\r\n labelUploadingHint?: string;\r\n labelUploadingActionCancel?: string;\r\n persistentDropzone?: boolean;\r\n previewVariant?: 'default' | 'image-grid';\r\n designVariant?: 'legacy' | 'modern';\r\n documentUploadCard?: boolean;\r\n /**\r\n * In `image-grid` variant, render the first item as a full-width cover preview.\r\n * Other items keep the regular grid size. The remove (X) button is preserved.\r\n */\r\n coverFirstItem?: boolean;\r\n}\r\n\r\nexport interface DropzoneStyles {\r\n idleWrapper?: string;\r\n previewWrapper?: string;\r\n errorWrapper?: string;\r\n previewWraper?: string;\r\n previewImage?: string;\r\n previewFile?: string;\r\n}\r\n\r\nexport const DEFAULT_DOCUMENT_TYPES = [\r\n 'application/pdf',\r\n 'application/msword',\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.ms-powerpoint',\r\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n 'text/csv',\r\n 'text/plain',\r\n];\r\n\r\nexport const DEFAULT_IMAGES_TYPES = [\r\n 'image/png',\r\n 'image/jpeg',\r\n 'image/jpg',\r\n 'image/webp',\r\n // 'image/gif', // TODO: normalize this type\r\n];\r\n\r\nexport const DEFAULT_VIDEO_TYPES = [\r\n 'video/mp4',\r\n 'video/quicktime',\r\n 'video/x-msvideo',\r\n 'video/webm',\r\n 'video/avi'\r\n];\r\n\r\n// Backward-compatible alias.\r\nexport const DEFAULT_FILE_TYPES = DEFAULT_DOCUMENT_TYPES;\r\n\r\n\r\nexport interface DropzoneControl {\r\n setItems: Dispatch<SetStateAction<DropzoneValueItem[]>>;\r\n}\r\n"],"names":["DEFAULT_DOCUMENT_TYPES","DEFAULT_IMAGES_TYPES","DEFAULT_VIDEO_TYPES","DEFAULT_FILE_TYPES"],"mappings":"AAoEO,MAAMA,IAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAEF,GAEaC,IAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGaC,IAAqBH;"}
1
+ {"version":3,"file":"Dropzone.types.js","sources":["../../src/Dropzone/Dropzone.types.tsx"],"sourcesContent":["import { FileRejection } from 'react-dropzone';\r\nimport { Dispatch, SetStateAction } from 'react';\r\n\r\nexport type DropzoneValueItem = File | string;\r\n\r\nexport interface FilePreviewProps {\r\n item: DropzoneValueItem;\r\n styles?: Pick<\r\n DropzoneStyles,\r\n 'previewWraper' | 'previewImage' | 'previewFile'\r\n >;\r\n}\r\n\r\nexport interface DropzoneTranslations {\r\n labelDropzonePrompt?: string;\r\n labelDropzoneSubPrompt?: string;\r\n labelOrClickToSelect?: string;\r\n labelSelectedFiles?: string;\r\n labelUploadErrors?: string;\r\n labelFileTooLarge?: string;\r\n labelInvalidFileType?: string;\r\n labelVideoUploaded?: string;\r\n labelVideoReplace?: string;\r\n}\r\n\r\nexport interface DropzoneProps\r\n extends DropzoneTranslations,\r\n React.HTMLAttributes<HTMLDivElement> {\r\n acceptTypes?: string[];\r\n maxSizeMB: number;\r\n maxFiles?: number;\r\n onErrors?: (errors: FileRejection[]) => void;\r\n hideErrors?: boolean;\r\n disabled?: boolean;\r\n classNames?: DropzoneStyles;\r\n value?: DropzoneValueItem[];\r\n onChangeValue?: (items: DropzoneValueItem[]) => void;\r\n singlePick?: boolean;\r\n labelDropzoneClassname?: string;\r\n labelDropzoneSubClassname?: string;\r\n isUploading?: boolean;\r\n uploadProgress?: number;\r\n uploadLoadedBytes?: number;\r\n uploadTotalBytes?: number;\r\n onCancelUpload?: () => void;\r\n labelUploadingTitle?: string;\r\n labelUploadingHint?: string;\r\n labelUploadingActionCancel?: string;\r\n labelUploadingOf?: string;\r\n singlePickFileInfo?: { name?: string; size?: number };\r\n persistentDropzone?: boolean;\r\n previewVariant?: 'default' | 'image-grid';\r\n designVariant?: 'legacy' | 'modern';\r\n documentUploadCard?: boolean;\r\n /**\r\n * In `image-grid` variant, render the first item as a full-width cover preview.\r\n * Other items keep the regular grid size. The remove (X) button is preserved.\r\n */\r\n coverFirstItem?: boolean;\r\n}\r\n\r\nexport interface DropzoneStyles {\r\n idleWrapper?: string;\r\n previewWrapper?: string;\r\n errorWrapper?: string;\r\n previewWraper?: string;\r\n previewImage?: string;\r\n previewFile?: string;\r\n}\r\n\r\nexport const DEFAULT_DOCUMENT_TYPES = [\r\n 'application/pdf',\r\n 'application/msword',\r\n 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',\r\n 'application/vnd.ms-excel',\r\n 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',\r\n 'application/vnd.ms-powerpoint',\r\n 'application/vnd.openxmlformats-officedocument.presentationml.presentation',\r\n 'text/csv',\r\n 'text/plain',\r\n];\r\n\r\nexport const DEFAULT_IMAGES_TYPES = [\r\n 'image/png',\r\n 'image/jpeg',\r\n 'image/jpg',\r\n 'image/webp',\r\n // 'image/gif', // TODO: normalize this type\r\n];\r\n\r\nexport const DEFAULT_VIDEO_TYPES = [\r\n 'video/mp4',\r\n 'video/quicktime',\r\n 'video/x-msvideo',\r\n 'video/webm',\r\n 'video/avi'\r\n];\r\n\r\n// Backward-compatible alias.\r\nexport const DEFAULT_FILE_TYPES = DEFAULT_DOCUMENT_TYPES;\r\n\r\n\r\nexport interface DropzoneControl {\r\n setItems: Dispatch<SetStateAction<DropzoneValueItem[]>>;\r\n}\r\n"],"names":["DEFAULT_DOCUMENT_TYPES","DEFAULT_IMAGES_TYPES","DEFAULT_VIDEO_TYPES","DEFAULT_FILE_TYPES"],"mappings":"AAsEO,MAAMA,IAAyB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAEaC,IAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA;AAEF,GAEaC,IAAsB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAGaC,IAAqBH;"}
@@ -7,7 +7,11 @@ interface SinglePickPreviewProps {
7
7
  onReplaceClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;
8
8
  labelUploaded?: string;
9
9
  labelReplace?: string;
10
+ fileInfo?: {
11
+ name?: string;
12
+ size?: number;
13
+ };
10
14
  }
11
- export declare const DropzoneSinglePickPreview: ({ item, disabled, onRemoveClick, onReplaceClick, labelReplace, }: SinglePickPreviewProps) => import("react/jsx-runtime").JSX.Element;
15
+ export declare const DropzoneSinglePickPreview: ({ item, disabled, onRemoveClick, onReplaceClick, labelReplace, fileInfo, }: SinglePickPreviewProps) => import("react/jsx-runtime").JSX.Element;
12
16
  export {};
13
17
  //# sourceMappingURL=DropzoneSinglePickPreview.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropzoneSinglePickPreview.d.ts","sourceRoot":"","sources":["../../src/Dropzone/DropzoneSinglePickPreview.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,iDAAiD,CAAC;AACzD,OAAO,yDAAyD,CAAC;AACjE,OAAO,iCAAiC,CAAC;AAGzC,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,GAAG,IAAI,GAAG,IAAI,KAAG,MAYpE,CAAC;AAqCF,UAAU,sBAAsB;IAC9B,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC1D,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,eAAO,MAAM,yBAAyB,GAAI,kEAMvC,sBAAsB,4CAqLxB,CAAC"}
1
+ {"version":3,"file":"DropzoneSinglePickPreview.d.ts","sourceRoot":"","sources":["../../src/Dropzone/DropzoneSinglePickPreview.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAOrD,OAAO,wCAAwC,CAAC;AAChD,OAAO,iDAAiD,CAAC;AACzD,OAAO,yDAAyD,CAAC;AACjE,OAAO,iCAAiC,CAAC;AAgBzC,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,GAAG,IAAI,GAAG,IAAI,KAAG,MAYpE,CAAC;AAqCF,UAAU,sBAAsB;IAC9B,IAAI,EAAE,iBAAiB,CAAC;IACxB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,aAAa,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC;IAC1D,cAAc,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,UAAU,CAAC,iBAAiB,CAAC,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC7C;AAED,eAAO,MAAM,yBAAyB,GAAI,4EAOvC,sBAAsB,4CAuLxB,CAAC"}
@@ -1,16 +1,27 @@
1
- import { jsxs as a, jsx as o } from "react/jsx-runtime";
2
- import { useState as x, useMemo as i, useRef as F, useEffect as I } from "react";
3
- import { isVideoUrl as C, isFile as R } from "./DropzoneUtils.js";
4
- import { X as U, FileIcon as M, Video as V, PencilIcon as B, Trash2 as D } from "lucide-react";
5
- import { MediaPlayer as O, MediaProvider as T, Poster as W } from "@vidstack/react";
6
- import { DefaultVideoLayout as Y, defaultLayoutIcons as $ } from "@vidstack/react/player/layouts/default";
7
- import { Button as q } from "../Button/Button.js";
1
+ import { jsxs as i, jsx as o } from "react/jsx-runtime";
2
+ import { useState as v, useMemo as l, useRef as E, useEffect as U } from "react";
3
+ import { isVideoUrl as I, isFile as M } from "./DropzoneUtils.js";
4
+ import { X as F, FileIcon as B, Video as V, PencilIcon as Y, Trash2 as T } from "lucide-react";
5
+ import { MediaPlayer as O, MediaProvider as D, Poster as W } from "@vidstack/react";
6
+ import { DefaultVideoLayout as $, defaultLayoutIcons as q } from "@vidstack/react/player/layouts/default";
7
+ import { Button as A } from "../Button/Button.js";
8
8
  import "@vidstack/react/player/styles/base.css";
9
9
  import "@vidstack/react/player/styles/default/theme.css";
10
10
  import "@vidstack/react/player/styles/default/layouts/video.css";
11
11
  /* empty css */
12
- import { ButtonIcon as A } from "../ButtonIcon/ButtonIcon.js";
13
- const J = (e) => {
12
+ import { ButtonIcon as _ } from "../ButtonIcon/ButtonIcon.js";
13
+ const J = `
14
+ .dropzone-youtube-player:not([data-fullscreen]) .vds-play-button,
15
+ .dropzone-youtube-player[data-fullscreen="false"] .vds-play-button,
16
+ .dropzone-youtube-player:not([data-fullscreen]) .vds-buffering-indicator,
17
+ .dropzone-youtube-player[data-fullscreen="false"] .vds-buffering-indicator,
18
+ .dropzone-youtube-player:not([data-fullscreen]) .vds-loading-indicator,
19
+ .dropzone-youtube-player[data-fullscreen="false"] .vds-loading-indicator,
20
+ .dropzone-youtube-player:not([data-fullscreen]) .vds-spinner,
21
+ .dropzone-youtube-player[data-fullscreen="false"] .vds-spinner {
22
+ display: none !important;
23
+ }
24
+ `, X = (e) => {
14
25
  if (!e) return "";
15
26
  switch (!0) {
16
27
  case (typeof e == "string" && !!e.trim() && e !== "null"):
@@ -22,143 +33,148 @@ const J = (e) => {
22
33
  default:
23
34
  return "";
24
35
  }
25
- }, X = (e) => {
36
+ }, G = (e) => {
26
37
  if (!e) return !1;
27
38
  try {
28
- const c = new URL(e).hostname.toLowerCase();
29
- return c.includes("youtube.com") || c.includes("youtu.be");
39
+ const a = new URL(e).hostname.toLowerCase();
40
+ return a.includes("youtube.com") || a.includes("youtu.be");
30
41
  } catch {
31
42
  return !1;
32
43
  }
33
- }, G = (e) => {
44
+ }, H = (e) => {
34
45
  try {
35
46
  const s = new URL(e);
36
47
  if (s.hostname.toLowerCase().includes("youtu.be"))
37
48
  return s.pathname.replace("/", "").trim();
38
49
  const h = s.searchParams.get("v");
39
50
  if (h) return h.trim();
40
- const f = s.pathname.split("/").filter(Boolean), l = f.findIndex((m) => m === "embed");
41
- return l >= 0 && f[l + 1] ? f[l + 1].trim() : "";
51
+ const p = s.pathname.split("/").filter(Boolean), u = p.findIndex((c) => c === "embed");
52
+ return u >= 0 && p[u + 1] ? p[u + 1].trim() : "";
42
53
  } catch {
43
54
  return "";
44
55
  }
45
56
  }, ie = ({
46
57
  item: e,
47
58
  disabled: s,
48
- onRemoveClick: c,
59
+ onRemoveClick: a,
49
60
  onReplaceClick: h,
50
- labelReplace: f = "Замінити"
61
+ labelReplace: p = "Замінити",
62
+ fileInfo: u
51
63
  }) => {
52
- const [l, m] = x(""), n = R(e), g = n ? e.name : e, t = i(
53
- () => typeof e == "string" && X(e),
64
+ const [c, x] = v(""), n = M(e), y = n ? e.name : u?.name ?? e, t = l(
65
+ () => typeof e == "string" && G(e),
54
66
  [e]
55
- ), p = i(
56
- () => typeof e == "string" && !t && C(e),
67
+ ), m = l(
68
+ () => typeof e == "string" && !t && I(e),
57
69
  [e, t]
58
- ), u = i(
59
- () => t && typeof e == "string" ? G(e) : "",
70
+ ), d = l(
71
+ () => t && typeof e == "string" ? H(e) : "",
60
72
  [t, e]
61
- ), w = i(() => !t || typeof e != "string" ? "" : u ? `youtube/${u}` : e, [t, e, u]), y = i(
62
- () => u ? `https://img.youtube.com/vi/${u}/hqdefault.jpg` : void 0,
63
- [u]
64
- ), [j, v] = x(!1), [z, N] = x(!0), P = F(null), k = F(null);
65
- I(() => {
66
- v(!1), N(!0);
73
+ ), w = l(() => !t || typeof e != "string" ? "" : d ? `youtube/${d}` : e, [t, e, d]), b = l(
74
+ () => d ? `https://img.youtube.com/vi/${d}/hqdefault.jpg` : void 0,
75
+ [d]
76
+ ), [j, z] = v(!1), [R, N] = v(!0), P = E(null), S = E(null);
77
+ U(() => {
78
+ z(!1), N(!0);
67
79
  }, [w]);
68
- const S = i(() => n && e.type?.includes("image") || typeof e == "string" && !t && !p, [e, n, t, p]), d = i(() => n && e.type?.includes("video") || t || p, [e, n, t, p]), E = i(() => n ? `${(e.size / (1024 * 1024)).toFixed(0)} MB` : "", [e, n]);
69
- return I(() => {
70
- if (S || d) {
71
- const r = J(e);
72
- if (m(r), n && r)
80
+ const L = l(() => n && e.type?.includes("image") || typeof e == "string" && !t && !m, [e, n, t, m]), f = l(() => n && e.type?.includes("video") || t || m, [e, n, t, m]), C = l(() => {
81
+ const r = n ? e.size : u?.size;
82
+ return r ? `${(r / (1024 * 1024)).toFixed(0)} MB` : "";
83
+ }, [e, n, u?.size]);
84
+ return U(() => {
85
+ if (L || f) {
86
+ const r = X(e);
87
+ if (x(r), n && r)
73
88
  return () => URL.revokeObjectURL(r);
74
89
  } else
75
- m("");
76
- }, [e, n, S, d]), /* @__PURE__ */ a("div", { className: "relative w-full overflow-hidden", children: [
77
- d && l ? /* @__PURE__ */ o("div", { className: "w-full rounded-lg overflow-hidden bg-black", onClick: (r) => r.stopPropagation(), children: /* @__PURE__ */ o("div", { className: "aspect-video", children: /* @__PURE__ */ a(
90
+ x("");
91
+ }, [e, n, L, f]), /* @__PURE__ */ i("div", { className: "relative w-full overflow-hidden", children: [
92
+ t && /* @__PURE__ */ o("style", { children: J }),
93
+ f && c ? /* @__PURE__ */ o("div", { className: "w-full rounded-lg overflow-hidden bg-black", onClick: (r) => r.stopPropagation(), children: /* @__PURE__ */ o("div", { className: "aspect-video", children: /* @__PURE__ */ i(
78
94
  O,
79
95
  {
80
96
  ref: P,
81
97
  title: n ? e.name : t ? void 0 : typeof e == "string" ? e : void 0,
82
- src: t ? w : { src: l, type: n ? e.type : void 0 },
83
- poster: t ? y : void 0,
98
+ src: t ? w : { src: c, type: n ? e.type : void 0 },
99
+ poster: t ? b : void 0,
84
100
  className: `h-full w-full bg-black text-white ${t && j ? "dropzone-youtube-player" : ""}`,
85
101
  playsInline: !0,
86
102
  onPlay: () => {
87
- N(!1), t && v(!0);
103
+ N(!1), t && z(!0);
88
104
  },
89
105
  onVolumeChange: (r) => {
90
106
  if (!t) return;
91
- const b = r.volume === 0 || r.muted;
92
- if (k.current === b) return;
93
- k.current = b;
94
- const L = P.current?.el?.querySelector("iframe");
95
- L?.contentWindow && L.contentWindow.postMessage(
96
- JSON.stringify({ event: "command", func: b ? "mute" : "unMute", args: [] }),
107
+ const g = r.volume === 0 || r.muted;
108
+ if (S.current === g) return;
109
+ S.current = g;
110
+ const k = P.current?.el?.querySelector("iframe");
111
+ k?.contentWindow && k.contentWindow.postMessage(
112
+ JSON.stringify({ event: "command", func: g ? "mute" : "unMute", args: [] }),
97
113
  "*"
98
114
  );
99
115
  },
100
116
  children: [
101
- /* @__PURE__ */ o(T, {}),
102
- z && t && y && /* @__PURE__ */ o(
117
+ /* @__PURE__ */ o(D, {}),
118
+ R && t && b && /* @__PURE__ */ o(
103
119
  W,
104
120
  {
105
121
  className: "absolute inset-0 h-full w-full object-cover",
106
- src: y,
122
+ src: b,
107
123
  alt: typeof e == "string" ? e : ""
108
124
  }
109
125
  ),
110
- /* @__PURE__ */ o(Y, { icons: $ })
126
+ /* @__PURE__ */ o($, { icons: q })
111
127
  ]
112
128
  }
113
- ) }) }) : !d && l ? /* @__PURE__ */ a("div", { className: "relative w-full h-64 sm:h-80 md:h-96 overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg", children: [
114
- !s && /* @__PURE__ */ o("div", { className: "absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm", onClick: c, children: /* @__PURE__ */ o(U, { size: 16, strokeWidth: 2, color: "black" }) }),
129
+ ) }) }) : !f && c ? /* @__PURE__ */ i("div", { className: "relative w-full h-64 sm:h-80 md:h-96 overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg", children: [
130
+ !s && /* @__PURE__ */ o("div", { className: "absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm", onClick: a, children: /* @__PURE__ */ o(F, { size: 16, strokeWidth: 2, color: "black" }) }),
115
131
  /* @__PURE__ */ o(
116
132
  "img",
117
133
  {
118
- src: l,
119
- alt: g?.toString(),
134
+ src: c,
135
+ alt: y?.toString(),
120
136
  className: "w-full h-full object-cover rounded-lg"
121
137
  }
122
138
  )
123
- ] }) : d ? null : /* @__PURE__ */ a("div", { className: "relative w-full h-64 sm:h-80 md:h-96 overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg", children: [
124
- !s && /* @__PURE__ */ o("div", { className: "absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm", onClick: c, children: /* @__PURE__ */ o(U, { size: 16, strokeWidth: 2, color: "black" }) }),
125
- /* @__PURE__ */ a("div", { className: "w-full h-full flex flex-col items-center justify-center text-gray-600", children: [
126
- /* @__PURE__ */ o(M, { size: 28 }),
127
- /* @__PURE__ */ o("span", { className: "text-sm mt-2 break-all px-2 text-center", children: g?.toString() })
139
+ ] }) : f ? null : /* @__PURE__ */ i("div", { className: "relative w-full h-64 sm:h-80 md:h-96 overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg", children: [
140
+ !s && /* @__PURE__ */ o("div", { className: "absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm", onClick: a, children: /* @__PURE__ */ o(F, { size: 16, strokeWidth: 2, color: "black" }) }),
141
+ /* @__PURE__ */ i("div", { className: "w-full h-full flex flex-col items-center justify-center text-gray-600", children: [
142
+ /* @__PURE__ */ o(B, { size: 28 }),
143
+ /* @__PURE__ */ o("span", { className: "text-sm mt-2 break-all px-2 text-center", children: y?.toString() })
128
144
  ] })
129
145
  ] }),
130
- d && !t && /* @__PURE__ */ a(
146
+ f && !t && /* @__PURE__ */ i(
131
147
  "div",
132
148
  {
133
149
  className: "mt-2 w-full h-auto min-h-14 rounded-[8px] border border-[#E8E9EB] bg-[#FCFCFC] p-2 flex items-center gap-4",
134
150
  onClick: (r) => r.stopPropagation(),
135
151
  children: [
136
152
  /* @__PURE__ */ o("div", { className: "size-10 rounded-[8px] bg-[#9368FF1F] flex items-center justify-center shrink-0", children: /* @__PURE__ */ o(V, { className: "size-6 text-[#06080D]" }) }),
137
- /* @__PURE__ */ a("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1 justify-start", children: [
138
- /* @__PURE__ */ o("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate text-left", children: g?.toString() }),
139
- /* @__PURE__ */ o("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#363B4E] text-left", children: E })
153
+ /* @__PURE__ */ i("div", { className: "flex flex-col items-start text-left gap-1 min-w-0 flex-1 justify-start", children: [
154
+ /* @__PURE__ */ o("span", { className: "w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate text-left", children: y?.toString() }),
155
+ /* @__PURE__ */ o("span", { className: "w-full text-[12px] font-medium leading-[120%] text-[#363B4E] text-left", children: C })
140
156
  ] }),
141
157
  !s && /* @__PURE__ */ o(
142
- q,
158
+ A,
143
159
  {
144
160
  type: "button",
145
161
  color: "secondary",
146
- startAdornment: B,
162
+ startAdornment: Y,
147
163
  size: "md",
148
164
  onClick: (r) => {
149
165
  r.stopPropagation(), h?.(r);
150
166
  },
151
- children: f
167
+ children: p
152
168
  }
153
169
  ),
154
170
  !s && /* @__PURE__ */ o(
155
- A,
171
+ _,
156
172
  {
157
- icon: D,
173
+ icon: T,
158
174
  variant: "outlined",
159
175
  size: "md",
160
176
  color: "secondary",
161
- onClick: c
177
+ onClick: a
162
178
  }
163
179
  )
164
180
  ]
@@ -168,6 +184,6 @@ const J = (e) => {
168
184
  };
169
185
  export {
170
186
  ie as DropzoneSinglePickPreview,
171
- J as transformImageToSrc
187
+ X as transformImageToSrc
172
188
  };
173
189
  //# sourceMappingURL=DropzoneSinglePickPreview.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropzoneSinglePickPreview.js","sources":["../../src/Dropzone/DropzoneSinglePickPreview.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { DropzoneValueItem } from './Dropzone.types';\r\nimport { isFile, isVideoUrl } from './DropzoneUtils';\r\nimport { FileIcon, PencilIcon, Trash2, Video, X } from 'lucide-react';\r\nimport { MediaPlayer, type MediaPlayerInstance, MediaProvider, Poster } from '@vidstack/react';\r\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\r\nimport { Button } from '../Button/Button';\r\n\r\nimport '@vidstack/react/player/styles/base.css';\r\nimport '@vidstack/react/player/styles/default/theme.css';\r\nimport '@vidstack/react/player/styles/default/layouts/video.css';\r\nimport './DropzoneSinglePickPreview.css';\r\nimport { ButtonIcon } from \"../ButtonIcon\";\r\n\r\nexport const transformImageToSrc = (preview?: string | File | null): string => {\r\n if (!preview) return '';\r\n switch (true) {\r\n case typeof preview === 'string' && !!preview.trim() && preview !== 'null':\r\n return preview;\r\n case preview instanceof File:\r\n return URL.createObjectURL(preview);\r\n case preview instanceof FileList:\r\n return preview[0] ? URL.createObjectURL(preview[0]) : '';\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\nconst isYoutubeUrl = (value?: string | null) => {\r\n if (!value) return false;\r\n try {\r\n const url = new URL(value);\r\n const hostname = url.hostname.toLowerCase();\r\n return hostname.includes('youtube.com') || hostname.includes('youtu.be');\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\nconst extractYoutubeId = (value: string) => {\r\n try {\r\n const url = new URL(value);\r\n const hostname = url.hostname.toLowerCase();\r\n\r\n if (hostname.includes('youtu.be')) {\r\n return url.pathname.replace('/', '').trim();\r\n }\r\n\r\n const searchId = url.searchParams.get('v');\r\n if (searchId) return searchId.trim();\r\n\r\n const pathParts = url.pathname.split('/').filter(Boolean);\r\n const embedIndex = pathParts.findIndex((part) => part === 'embed');\r\n if (embedIndex >= 0 && pathParts[embedIndex + 1]) {\r\n return pathParts[embedIndex + 1].trim();\r\n }\r\n\r\n return '';\r\n } catch {\r\n return '';\r\n }\r\n};\r\n\r\ninterface SinglePickPreviewProps {\r\n item: DropzoneValueItem;\r\n disabled?: boolean;\r\n onRemoveClick: (e: React.MouseEvent<HTMLElement>) => void;\r\n onReplaceClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n labelUploaded?: string;\r\n labelReplace?: string;\r\n}\r\n\r\nexport const DropzoneSinglePickPreview = ({\r\n item,\r\n disabled,\r\n onRemoveClick,\r\n onReplaceClick,\r\n labelReplace = 'Замінити',\r\n}: SinglePickPreviewProps) => {\r\n const [previewUrl, setPreviewUrl] = useState('');\r\n const isFileType = isFile(item);\r\n const fileName = isFileType ? item.name : item;\r\n\r\n const isYoutubeVideo = useMemo(\r\n () => typeof item === 'string' && isYoutubeUrl(item),\r\n [item]\r\n );\r\n const isRemoteVideo = useMemo(\r\n () => typeof item === 'string' && !isYoutubeVideo && isVideoUrl(item),\r\n [item, isYoutubeVideo]\r\n );\r\n const youtubeId = useMemo(\r\n () => (isYoutubeVideo && typeof item === 'string' ? extractYoutubeId(item) : ''),\r\n [isYoutubeVideo, item]\r\n );\r\n const youtubeSource = useMemo(() => {\r\n if (!isYoutubeVideo || typeof item !== 'string') return '';\r\n return youtubeId ? `youtube/${youtubeId}` : item;\r\n }, [isYoutubeVideo, item, youtubeId]);\r\n const youtubeThumbnail = useMemo(\r\n () => (youtubeId ? `https://img.youtube.com/vi/${youtubeId}/hqdefault.jpg` : undefined),\r\n [youtubeId]\r\n );\r\n const [youtubeStarted, setYoutubeStarted] = useState(false);\r\n const [showPoster, setShowPoster] = useState(true);\r\n const mediaPlayerRef = useRef<MediaPlayerInstance>(null);\r\n const lastMuteStateRef = useRef<boolean | null>(null);\r\n\r\n useEffect(() => {\r\n setYoutubeStarted(false);\r\n setShowPoster(true);\r\n }, [youtubeSource]);\r\n\r\n const showImage = useMemo(() => {\r\n return (isFileType && item.type?.includes('image')) || (typeof item === 'string' && !isYoutubeVideo && !isRemoteVideo);\r\n }, [item, isFileType, isYoutubeVideo, isRemoteVideo]);\r\n\r\n const showVideo = useMemo(() => {\r\n return (isFileType && item.type?.includes('video')) || isYoutubeVideo || isRemoteVideo;\r\n }, [item, isFileType, isYoutubeVideo, isRemoteVideo]);\r\n\r\n const fileSize = useMemo(() => {\r\n if (!isFileType) return '';\r\n return `${(item.size / (1024 * 1024)).toFixed(0)} MB`;\r\n }, [item, isFileType]);\r\n\r\n useEffect(() => {\r\n if (showImage || showVideo) {\r\n const nextPreview = transformImageToSrc(item);\r\n setPreviewUrl(nextPreview);\r\n\r\n if (isFileType && nextPreview) {\r\n return () => URL.revokeObjectURL(nextPreview);\r\n }\r\n } else {\r\n setPreviewUrl('');\r\n }\r\n\r\n return undefined;\r\n }, [item, isFileType, showImage, showVideo]);\r\n\r\n return (\r\n <div className=\"relative w-full overflow-hidden\">\r\n {showVideo && previewUrl ? (\r\n <div className=\"w-full rounded-lg overflow-hidden bg-black\" onClick={(event) => event.stopPropagation()}>\r\n <div className=\"aspect-video\">\r\n <MediaPlayer\r\n ref={mediaPlayerRef}\r\n title={isFileType ? (item as File).name : isYoutubeVideo ? undefined : (typeof item === 'string' ? item : undefined)}\r\n src={isYoutubeVideo ? youtubeSource : { src: previewUrl, type: isFileType ? (item as File).type : undefined }}\r\n poster={isYoutubeVideo ? youtubeThumbnail : undefined}\r\n className={`h-full w-full bg-black text-white ${\r\n isYoutubeVideo && youtubeStarted ? 'dropzone-youtube-player' : ''\r\n }`}\r\n playsInline\r\n onPlay={() => {\r\n setShowPoster(false);\r\n if (isYoutubeVideo) setYoutubeStarted(true);\r\n }}\r\n onVolumeChange={(detail) => {\r\n if (!isYoutubeVideo) return;\r\n const shouldMute = detail.volume === 0 || detail.muted;\r\n if (lastMuteStateRef.current === shouldMute) return;\r\n lastMuteStateRef.current = shouldMute;\r\n const iframe = mediaPlayerRef.current?.el?.querySelector('iframe') as HTMLIFrameElement | null;\r\n if (!iframe?.contentWindow) return;\r\n iframe.contentWindow.postMessage(\r\n JSON.stringify({ event: 'command', func: shouldMute ? 'mute' : 'unMute', args: [] }),\r\n '*'\r\n );\r\n }}\r\n >\r\n <MediaProvider />\r\n {showPoster && isYoutubeVideo && youtubeThumbnail && (\r\n <Poster\r\n className=\"absolute inset-0 h-full w-full object-cover\"\r\n src={youtubeThumbnail}\r\n alt={typeof item === 'string' ? item : ''}\r\n />\r\n )}\r\n <DefaultVideoLayout icons={defaultLayoutIcons} />\r\n </MediaPlayer>\r\n </div>\r\n </div>\r\n ) : !showVideo && previewUrl ? (\r\n <div className=\"relative w-full h-64 sm:h-80 md:h-96 overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg\">\r\n {!disabled && (\r\n <div className=\"absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm\" onClick={onRemoveClick} >\r\n <X size={16} strokeWidth={2} color=\"black\" />\r\n </div>\r\n )}\r\n <img\r\n src={previewUrl}\r\n alt={fileName?.toString()}\r\n className=\"w-full h-full object-cover rounded-lg\"\r\n />\r\n </div>\r\n ) : !showVideo ? (\r\n <div className=\"relative w-full h-64 sm:h-80 md:h-96 overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg\">\r\n {!disabled && (\r\n <div className=\"absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm\" onClick={onRemoveClick} >\r\n <X size={16} strokeWidth={2} color=\"black\" />\r\n </div>\r\n )}\r\n <div className=\"w-full h-full flex flex-col items-center justify-center text-gray-600\">\r\n <FileIcon size={28} />\r\n <span className=\"text-sm mt-2 break-all px-2 text-center\">\r\n {fileName?.toString()}\r\n </span>\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {showVideo && !isYoutubeVideo && (\r\n <div\r\n className=\"mt-2 w-full h-auto min-h-14 rounded-[8px] border border-[#E8E9EB] bg-[#FCFCFC] p-2 flex items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"size-10 rounded-[8px] bg-[#9368FF1F] flex items-center justify-center shrink-0\">\r\n <Video className=\"size-6 text-[#06080D]\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1 justify-start\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate text-left\">\r\n {fileName?.toString()}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#363B4E] text-left\">\r\n {fileSize}\r\n </span>\r\n </div>\r\n\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n color=\"secondary\"\r\n startAdornment={PencilIcon}\r\n size=\"md\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n onReplaceClick?.(event);\r\n }}\r\n >\r\n {labelReplace}\r\n </Button>\r\n )}\r\n\r\n {!disabled && (\r\n <ButtonIcon\r\n icon={Trash2}\r\n variant=\"outlined\"\r\n size=\"md\"\r\n color=\"secondary\"\r\n onClick={onRemoveClick}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n"],"names":["transformImageToSrc","preview","isYoutubeUrl","value","hostname","extractYoutubeId","url","searchId","pathParts","embedIndex","part","DropzoneSinglePickPreview","item","disabled","onRemoveClick","onReplaceClick","labelReplace","previewUrl","setPreviewUrl","useState","isFileType","isFile","fileName","isYoutubeVideo","useMemo","isRemoteVideo","isVideoUrl","youtubeId","youtubeSource","youtubeThumbnail","youtubeStarted","setYoutubeStarted","showPoster","setShowPoster","mediaPlayerRef","useRef","lastMuteStateRef","useEffect","showImage","showVideo","fileSize","nextPreview","jsxs","jsx","event","MediaPlayer","detail","shouldMute","iframe","MediaProvider","Poster","DefaultVideoLayout","defaultLayoutIcons","X","FileIcon","Video","Button","PencilIcon","ButtonIcon","Trash2"],"mappings":"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"}
1
+ {"version":3,"file":"DropzoneSinglePickPreview.js","sources":["../../src/Dropzone/DropzoneSinglePickPreview.tsx"],"sourcesContent":["import { useEffect, useMemo, useRef, useState } from 'react';\r\nimport { DropzoneValueItem } from './Dropzone.types';\r\nimport { isFile, isVideoUrl } from './DropzoneUtils';\r\nimport { FileIcon, PencilIcon, Trash2, Video, X } from 'lucide-react';\r\nimport { MediaPlayer, type MediaPlayerInstance, MediaProvider, Poster } from '@vidstack/react';\r\nimport { defaultLayoutIcons, DefaultVideoLayout } from '@vidstack/react/player/layouts/default';\r\nimport { Button } from '../Button/Button';\r\n\r\nimport '@vidstack/react/player/styles/base.css';\r\nimport '@vidstack/react/player/styles/default/theme.css';\r\nimport '@vidstack/react/player/styles/default/layouts/video.css';\r\nimport './DropzoneSinglePickPreview.css';\r\nimport { ButtonIcon } from \"../ButtonIcon\";\r\n\r\nconst YOUTUBE_PLAYER_STYLES = `\r\n.dropzone-youtube-player:not([data-fullscreen]) .vds-play-button,\r\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-play-button,\r\n.dropzone-youtube-player:not([data-fullscreen]) .vds-buffering-indicator,\r\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-buffering-indicator,\r\n.dropzone-youtube-player:not([data-fullscreen]) .vds-loading-indicator,\r\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-loading-indicator,\r\n.dropzone-youtube-player:not([data-fullscreen]) .vds-spinner,\r\n.dropzone-youtube-player[data-fullscreen=\"false\"] .vds-spinner {\r\n display: none !important;\r\n}\r\n`;\r\n\r\nexport const transformImageToSrc = (preview?: string | File | null): string => {\r\n if (!preview) return '';\r\n switch (true) {\r\n case typeof preview === 'string' && !!preview.trim() && preview !== 'null':\r\n return preview;\r\n case preview instanceof File:\r\n return URL.createObjectURL(preview);\r\n case preview instanceof FileList:\r\n return preview[0] ? URL.createObjectURL(preview[0]) : '';\r\n default:\r\n return '';\r\n }\r\n};\r\n\r\nconst isYoutubeUrl = (value?: string | null) => {\r\n if (!value) return false;\r\n try {\r\n const url = new URL(value);\r\n const hostname = url.hostname.toLowerCase();\r\n return hostname.includes('youtube.com') || hostname.includes('youtu.be');\r\n } catch {\r\n return false;\r\n }\r\n};\r\n\r\nconst extractYoutubeId = (value: string) => {\r\n try {\r\n const url = new URL(value);\r\n const hostname = url.hostname.toLowerCase();\r\n\r\n if (hostname.includes('youtu.be')) {\r\n return url.pathname.replace('/', '').trim();\r\n }\r\n\r\n const searchId = url.searchParams.get('v');\r\n if (searchId) return searchId.trim();\r\n\r\n const pathParts = url.pathname.split('/').filter(Boolean);\r\n const embedIndex = pathParts.findIndex((part) => part === 'embed');\r\n if (embedIndex >= 0 && pathParts[embedIndex + 1]) {\r\n return pathParts[embedIndex + 1].trim();\r\n }\r\n\r\n return '';\r\n } catch {\r\n return '';\r\n }\r\n};\r\n\r\ninterface SinglePickPreviewProps {\r\n item: DropzoneValueItem;\r\n disabled?: boolean;\r\n onRemoveClick: (e: React.MouseEvent<HTMLElement>) => void;\r\n onReplaceClick?: (e: React.MouseEvent<HTMLButtonElement>) => void;\r\n labelUploaded?: string;\r\n labelReplace?: string;\r\n fileInfo?: { name?: string; size?: number };\r\n}\r\n\r\nexport const DropzoneSinglePickPreview = ({\r\n item,\r\n disabled,\r\n onRemoveClick,\r\n onReplaceClick,\r\n labelReplace = 'Замінити',\r\n fileInfo,\r\n}: SinglePickPreviewProps) => {\r\n const [previewUrl, setPreviewUrl] = useState('');\r\n const isFileType = isFile(item);\r\n const fileName = isFileType ? item.name : (fileInfo?.name ?? item);\r\n\r\n const isYoutubeVideo = useMemo(\r\n () => typeof item === 'string' && isYoutubeUrl(item),\r\n [item]\r\n );\r\n const isRemoteVideo = useMemo(\r\n () => typeof item === 'string' && !isYoutubeVideo && isVideoUrl(item),\r\n [item, isYoutubeVideo]\r\n );\r\n const youtubeId = useMemo(\r\n () => (isYoutubeVideo && typeof item === 'string' ? extractYoutubeId(item) : ''),\r\n [isYoutubeVideo, item]\r\n );\r\n const youtubeSource = useMemo(() => {\r\n if (!isYoutubeVideo || typeof item !== 'string') return '';\r\n return youtubeId ? `youtube/${youtubeId}` : item;\r\n }, [isYoutubeVideo, item, youtubeId]);\r\n const youtubeThumbnail = useMemo(\r\n () => (youtubeId ? `https://img.youtube.com/vi/${youtubeId}/hqdefault.jpg` : undefined),\r\n [youtubeId]\r\n );\r\n const [youtubeStarted, setYoutubeStarted] = useState(false);\r\n const [showPoster, setShowPoster] = useState(true);\r\n const mediaPlayerRef = useRef<MediaPlayerInstance>(null);\r\n const lastMuteStateRef = useRef<boolean | null>(null);\r\n\r\n useEffect(() => {\r\n setYoutubeStarted(false);\r\n setShowPoster(true);\r\n }, [youtubeSource]);\r\n\r\n const showImage = useMemo(() => {\r\n return (isFileType && item.type?.includes('image')) || (typeof item === 'string' && !isYoutubeVideo && !isRemoteVideo);\r\n }, [item, isFileType, isYoutubeVideo, isRemoteVideo]);\r\n\r\n const showVideo = useMemo(() => {\r\n return (isFileType && item.type?.includes('video')) || isYoutubeVideo || isRemoteVideo;\r\n }, [item, isFileType, isYoutubeVideo, isRemoteVideo]);\r\n\r\n const fileSize = useMemo(() => {\r\n const bytes = isFileType ? item.size : fileInfo?.size;\r\n if (!bytes) return '';\r\n return `${(bytes / (1024 * 1024)).toFixed(0)} MB`;\r\n }, [item, isFileType, fileInfo?.size]);\r\n\r\n useEffect(() => {\r\n if (showImage || showVideo) {\r\n const nextPreview = transformImageToSrc(item);\r\n setPreviewUrl(nextPreview);\r\n\r\n if (isFileType && nextPreview) {\r\n return () => URL.revokeObjectURL(nextPreview);\r\n }\r\n } else {\r\n setPreviewUrl('');\r\n }\r\n\r\n return undefined;\r\n }, [item, isFileType, showImage, showVideo]);\r\n\r\n return (\r\n <div className=\"relative w-full overflow-hidden\">\r\n {isYoutubeVideo && <style>{YOUTUBE_PLAYER_STYLES}</style>}\r\n {showVideo && previewUrl ? (\r\n <div className=\"w-full rounded-lg overflow-hidden bg-black\" onClick={(event) => event.stopPropagation()}>\r\n <div className=\"aspect-video\">\r\n <MediaPlayer\r\n ref={mediaPlayerRef}\r\n title={isFileType ? (item as File).name : isYoutubeVideo ? undefined : (typeof item === 'string' ? item : undefined)}\r\n src={isYoutubeVideo ? youtubeSource : { src: previewUrl, type: isFileType ? (item as File).type : undefined }}\r\n poster={isYoutubeVideo ? youtubeThumbnail : undefined}\r\n className={`h-full w-full bg-black text-white ${\r\n isYoutubeVideo && youtubeStarted ? 'dropzone-youtube-player' : ''\r\n }`}\r\n playsInline\r\n onPlay={() => {\r\n setShowPoster(false);\r\n if (isYoutubeVideo) setYoutubeStarted(true);\r\n }}\r\n onVolumeChange={(detail) => {\r\n if (!isYoutubeVideo) return;\r\n const shouldMute = detail.volume === 0 || detail.muted;\r\n if (lastMuteStateRef.current === shouldMute) return;\r\n lastMuteStateRef.current = shouldMute;\r\n const iframe = mediaPlayerRef.current?.el?.querySelector('iframe') as HTMLIFrameElement | null;\r\n if (!iframe?.contentWindow) return;\r\n iframe.contentWindow.postMessage(\r\n JSON.stringify({ event: 'command', func: shouldMute ? 'mute' : 'unMute', args: [] }),\r\n '*'\r\n );\r\n }}\r\n >\r\n <MediaProvider />\r\n {showPoster && isYoutubeVideo && youtubeThumbnail && (\r\n <Poster\r\n className=\"absolute inset-0 h-full w-full object-cover\"\r\n src={youtubeThumbnail}\r\n alt={typeof item === 'string' ? item : ''}\r\n />\r\n )}\r\n <DefaultVideoLayout icons={defaultLayoutIcons} />\r\n </MediaPlayer>\r\n </div>\r\n </div>\r\n ) : !showVideo && previewUrl ? (\r\n <div className=\"relative w-full h-64 sm:h-80 md:h-96 overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg\">\r\n {!disabled && (\r\n <div className=\"absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm\" onClick={onRemoveClick} >\r\n <X size={16} strokeWidth={2} color=\"black\" />\r\n </div>\r\n )}\r\n <img\r\n src={previewUrl}\r\n alt={fileName?.toString()}\r\n className=\"w-full h-full object-cover rounded-lg\"\r\n />\r\n </div>\r\n ) : !showVideo ? (\r\n <div className=\"relative w-full h-64 sm:h-80 md:h-96 overflow-hidden outline-[#E4E4E7] outline-2 outline-dashed -outline-offset-1 rounded-lg\">\r\n {!disabled && (\r\n <div className=\"absolute top-2 right-2 cursor-pointer bg-white/70 rounded-[4px] p-1 shadow-sm\" onClick={onRemoveClick} >\r\n <X size={16} strokeWidth={2} color=\"black\" />\r\n </div>\r\n )}\r\n <div className=\"w-full h-full flex flex-col items-center justify-center text-gray-600\">\r\n <FileIcon size={28} />\r\n <span className=\"text-sm mt-2 break-all px-2 text-center\">\r\n {fileName?.toString()}\r\n </span>\r\n </div>\r\n </div>\r\n ) : null}\r\n\r\n {showVideo && !isYoutubeVideo && (\r\n <div\r\n className=\"mt-2 w-full h-auto min-h-14 rounded-[8px] border border-[#E8E9EB] bg-[#FCFCFC] p-2 flex items-center gap-4\"\r\n onClick={(event) => event.stopPropagation()}\r\n >\r\n <div className=\"size-10 rounded-[8px] bg-[#9368FF1F] flex items-center justify-center shrink-0\">\r\n <Video className=\"size-6 text-[#06080D]\" />\r\n </div>\r\n\r\n <div className=\"flex flex-col items-start text-left gap-1 min-w-0 flex-1 justify-start\">\r\n <span className=\"w-full text-[14px] font-semibold leading-[125%] text-[#06080D] truncate text-left\">\r\n {fileName?.toString()}\r\n </span>\r\n <span className=\"w-full text-[12px] font-medium leading-[120%] text-[#363B4E] text-left\">\r\n {fileSize}\r\n </span>\r\n </div>\r\n\r\n {!disabled && (\r\n <Button\r\n type=\"button\"\r\n color=\"secondary\"\r\n startAdornment={PencilIcon}\r\n size=\"md\"\r\n onClick={(event) => {\r\n event.stopPropagation();\r\n onReplaceClick?.(event);\r\n }}\r\n >\r\n {labelReplace}\r\n </Button>\r\n )}\r\n\r\n {!disabled && (\r\n <ButtonIcon\r\n icon={Trash2}\r\n variant=\"outlined\"\r\n size=\"md\"\r\n color=\"secondary\"\r\n onClick={onRemoveClick}\r\n />\r\n )}\r\n </div>\r\n )}\r\n </div>\r\n );\r\n};\r\n"],"names":["YOUTUBE_PLAYER_STYLES","transformImageToSrc","preview","isYoutubeUrl","value","hostname","extractYoutubeId","url","searchId","pathParts","embedIndex","part","DropzoneSinglePickPreview","item","disabled","onRemoveClick","onReplaceClick","labelReplace","fileInfo","previewUrl","setPreviewUrl","useState","isFileType","isFile","fileName","isYoutubeVideo","useMemo","isRemoteVideo","isVideoUrl","youtubeId","youtubeSource","youtubeThumbnail","youtubeStarted","setYoutubeStarted","showPoster","setShowPoster","mediaPlayerRef","useRef","lastMuteStateRef","useEffect","showImage","showVideo","fileSize","bytes","nextPreview","jsxs","jsx","event","MediaPlayer","detail","shouldMute","iframe","MediaProvider","Poster","DefaultVideoLayout","defaultLayoutIcons","X","FileIcon","Video","Button","PencilIcon","ButtonIcon","Trash2"],"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.280",
3
+ "version": "0.1.99-beta.282",
4
4
  "description": "UI component library for OnePlatform",
5
5
  "author": "One Platform Development Team",
6
6
  "keywords": [
@@ -109,9 +109,9 @@
109
109
  "recharts": "^3.2.0",
110
110
  "sonner": "^2.0.7",
111
111
  "vaul": "^1.1.2",
112
- "@oneplatformdev/tokens": "^0.1.99-beta.280",
113
- "@oneplatformdev/hooks": "^0.1.99-beta.280",
114
- "@oneplatformdev/utils": "^0.1.99-beta.280"
112
+ "@oneplatformdev/hooks": "^0.1.99-beta.282",
113
+ "@oneplatformdev/utils": "^0.1.99-beta.282",
114
+ "@oneplatformdev/tokens": "^0.1.99-beta.282"
115
115
  },
116
116
  "scripts": {
117
117
  "chromatic": "chromatic"
package/styles.css CHANGED
@@ -1 +1 @@
1
- .dropzone-youtube-player:not([data-fullscreen]) .vds-play-button,.dropzone-youtube-player[data-fullscreen=false] .vds-play-button{display:none}.dropzone-youtube-player:not([data-fullscreen]) .vds-buffering-indicator,.dropzone-youtube-player[data-fullscreen=false] .vds-buffering-indicator,.dropzone-youtube-player:not([data-fullscreen]) .vds-loading-indicator,.dropzone-youtube-player[data-fullscreen=false] .vds-loading-indicator,.dropzone-youtube-player:not([data-fullscreen]) .vds-spinner,.dropzone-youtube-player[data-fullscreen=false] .vds-spinner{display:none}
1
+ .dropzone-youtube-player:not([data-fullscreen]) .vds-play-button,.dropzone-youtube-player[data-fullscreen=false] .vds-play-button{display:none!important}.dropzone-youtube-player:not([data-fullscreen]) .vds-buffering-indicator,.dropzone-youtube-player[data-fullscreen=false] .vds-buffering-indicator,.dropzone-youtube-player:not([data-fullscreen]) .vds-loading-indicator,.dropzone-youtube-player[data-fullscreen=false] .vds-loading-indicator,.dropzone-youtube-player:not([data-fullscreen]) .vds-spinner,.dropzone-youtube-player[data-fullscreen=false] .vds-spinner{display:none!important}