@vkzstudio/muza-ui 1.0.43 → 1.0.45

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.
Files changed (116) hide show
  1. package/dist/components/Accordion/Accordion.d.ts +42 -6
  2. package/dist/components/Accordion/Accordion.d.ts.map +1 -1
  3. package/dist/components/Button/Button.d.ts +71 -17
  4. package/dist/components/Button/Button.d.ts.map +1 -1
  5. package/dist/components/DataTable/DataTable.d.ts +66 -20
  6. package/dist/components/DataTable/DataTable.d.ts.map +1 -1
  7. package/dist/components/DataTable/DataTable.js +39 -39
  8. package/dist/components/DataTable/DataTable.stories.d.ts.map +1 -1
  9. package/dist/components/DatePicker/DatePicker.d.ts +69 -36
  10. package/dist/components/DatePicker/DatePicker.d.ts.map +1 -1
  11. package/dist/components/DatePicker/DatePicker.stories.d.ts.map +1 -1
  12. package/dist/components/DropdownMenu/DropdownMenu.d.ts +38 -7
  13. package/dist/components/DropdownMenu/DropdownMenu.d.ts.map +1 -1
  14. package/dist/components/DropdownMenu/DropdownMenu.js +165 -163
  15. package/dist/components/DropdownMenu/DropdownMenu.stories.d.ts +3 -17
  16. package/dist/components/DropdownMenu/DropdownMenu.stories.d.ts.map +1 -1
  17. package/dist/components/EdgeButton/EdgeButton.d.ts +10 -11
  18. package/dist/components/EdgeButton/EdgeButton.d.ts.map +1 -1
  19. package/dist/components/ExpandableTable/ExpandableTable.d.ts +103 -19
  20. package/dist/components/ExpandableTable/ExpandableTable.d.ts.map +1 -1
  21. package/dist/components/ExpandableTable/ExpandableTable.js +100 -111
  22. package/dist/components/ExpandableTable/ExpandableTable.stories.d.ts +6 -1
  23. package/dist/components/ExpandableTable/ExpandableTable.stories.d.ts.map +1 -1
  24. package/dist/components/ExpandableTable/index.d.ts +1 -1
  25. package/dist/components/ExpandableTable/index.d.ts.map +1 -1
  26. package/dist/components/FileUpload/FileItem.d.ts +22 -0
  27. package/dist/components/FileUpload/FileItem.d.ts.map +1 -1
  28. package/dist/components/FileUpload/FileItem.js +38 -41
  29. package/dist/components/FileUpload/FileUpload.d.ts +137 -42
  30. package/dist/components/FileUpload/FileUpload.d.ts.map +1 -1
  31. package/dist/components/FileUpload/FileUpload.js +87 -83
  32. package/dist/components/FileUpload/FileUpload.stories.d.ts +1 -0
  33. package/dist/components/FileUpload/FileUpload.stories.d.ts.map +1 -1
  34. package/dist/components/FileUpload/index.d.ts +1 -1
  35. package/dist/components/FileUpload/index.d.ts.map +1 -1
  36. package/dist/components/Flex/Flex.d.ts +1 -1
  37. package/dist/components/Icons/CustomBadges.d.ts +14 -0
  38. package/dist/components/Icons/CustomBadges.d.ts.map +1 -0
  39. package/dist/components/Icons/CustomBadges.js +334 -0
  40. package/dist/components/Icons/CustomIcons.d.ts +24 -0
  41. package/dist/components/Icons/CustomIcons.d.ts.map +1 -1
  42. package/dist/components/Icons/CustomIcons.js +88 -42
  43. package/dist/components/Icons/CustomLogos.d.ts +29 -0
  44. package/dist/components/Icons/CustomLogos.d.ts.map +1 -0
  45. package/dist/components/Icons/CustomLogos.js +593 -0
  46. package/dist/components/Icons/LogosAndBadges.stories.d.ts +7 -0
  47. package/dist/components/Icons/LogosAndBadges.stories.d.ts.map +1 -0
  48. package/dist/components/Icons/index.d.ts +2 -0
  49. package/dist/components/Icons/index.d.ts.map +1 -1
  50. package/dist/components/Input/Input.d.ts +33 -34
  51. package/dist/components/Input/Input.d.ts.map +1 -1
  52. package/dist/components/Input/Input.stories.d.ts.map +1 -1
  53. package/dist/components/LanguageSwitcher/LanguageSwitcher.d.ts +24 -1
  54. package/dist/components/LanguageSwitcher/LanguageSwitcher.d.ts.map +1 -1
  55. package/dist/components/LanguageSwitcher/LanguageSwitcher.js +71 -52
  56. package/dist/components/LanguageSwitcher/LanguageSwitcher.stories.d.ts +2 -0
  57. package/dist/components/LanguageSwitcher/LanguageSwitcher.stories.d.ts.map +1 -1
  58. package/dist/components/MultiSelect/MultiSelect.d.ts +50 -23
  59. package/dist/components/MultiSelect/MultiSelect.d.ts.map +1 -1
  60. package/dist/components/MultiSelect/MultiSelect.js +18 -17
  61. package/dist/components/Reorderable/Reorderable.d.ts +48 -1
  62. package/dist/components/Reorderable/Reorderable.d.ts.map +1 -1
  63. package/dist/components/ReorderableTable/ReorderableTable.d.ts +34 -17
  64. package/dist/components/ReorderableTable/ReorderableTable.d.ts.map +1 -1
  65. package/dist/components/ReorderableTable/ReorderableTable.stories.d.ts.map +1 -1
  66. package/dist/components/ResponsiveLayoutTable/ResponsiveLayoutTable.d.ts +266 -0
  67. package/dist/components/ResponsiveLayoutTable/ResponsiveLayoutTable.d.ts.map +1 -0
  68. package/dist/components/ResponsiveLayoutTable/ResponsiveLayoutTable.examples.d.ts +39 -0
  69. package/dist/components/ResponsiveLayoutTable/ResponsiveLayoutTable.examples.d.ts.map +1 -0
  70. package/dist/components/ResponsiveLayoutTable/ResponsiveLayoutTable.js +134 -0
  71. package/dist/components/ResponsiveLayoutTable/ResponsiveLayoutTable.stories.d.ts +14 -0
  72. package/dist/components/ResponsiveLayoutTable/ResponsiveLayoutTable.stories.d.ts.map +1 -0
  73. package/dist/components/ResponsiveLayoutTable/index.d.ts +2 -0
  74. package/dist/components/ResponsiveLayoutTable/index.d.ts.map +1 -0
  75. package/dist/components/Select/Select.d.ts +58 -28
  76. package/dist/components/Select/Select.d.ts.map +1 -1
  77. package/dist/components/Select/Select.js +123 -92
  78. package/dist/components/Select/Select.stories.d.ts +1 -0
  79. package/dist/components/Select/Select.stories.d.ts.map +1 -1
  80. package/dist/components/Select/index.d.ts +1 -1
  81. package/dist/components/Select/index.d.ts.map +1 -1
  82. package/dist/components/Select/utils.d.ts +1 -0
  83. package/dist/components/Select/utils.d.ts.map +1 -1
  84. package/dist/components/Select/utils.js +5 -2
  85. package/dist/components/TextEditor/TextEditor.d.ts +82 -46
  86. package/dist/components/TextEditor/TextEditor.d.ts.map +1 -1
  87. package/dist/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  88. package/dist/components/TextEditor/index.d.ts +1 -1
  89. package/dist/components/TextEditor/index.d.ts.map +1 -1
  90. package/dist/components/Textarea/Textarea.d.ts +41 -10
  91. package/dist/components/Textarea/Textarea.d.ts.map +1 -1
  92. package/dist/components/Textarea/Textarea.stories.d.ts.map +1 -1
  93. package/dist/components/Toggle/Toggle.js +1 -1
  94. package/dist/components/ToggleCheckButton/ToggleCheckButton.d.ts +69 -0
  95. package/dist/components/ToggleCheckButton/ToggleCheckButton.d.ts.map +1 -0
  96. package/dist/components/ToggleCheckButton/ToggleCheckButton.js +64 -0
  97. package/dist/components/ToggleCheckButton/ToggleCheckButton.stories.d.ts +8 -0
  98. package/dist/components/ToggleCheckButton/ToggleCheckButton.stories.d.ts.map +1 -0
  99. package/dist/components/ToggleCheckButton/index.d.ts +2 -0
  100. package/dist/components/ToggleCheckButton/index.d.ts.map +1 -0
  101. package/dist/components/WebCheckoutNav/WebCheckoutNav.examples.d.ts +19 -0
  102. package/dist/components/WebCheckoutNav/WebCheckoutNav.examples.d.ts.map +1 -0
  103. package/dist/components/WebCheckoutNav/WebCheckoutNav.stories.d.ts +8 -0
  104. package/dist/components/WebCheckoutNav/WebCheckoutNav.stories.d.ts.map +1 -0
  105. package/dist/components/index.d.ts +2 -0
  106. package/dist/components/index.d.ts.map +1 -1
  107. package/dist/hooks/use-is-breakpoint.d.ts +11 -0
  108. package/dist/hooks/use-is-breakpoint.d.ts.map +1 -1
  109. package/dist/hooks/use-is-breakpoint.js +24 -13
  110. package/dist/index.js +236 -215
  111. package/dist/muza-ui.css +1 -1
  112. package/dist/styles/token-colors.css +64 -3
  113. package/dist/styles/token-sizes.css +86 -54
  114. package/dist/utils/cn.d.ts.map +1 -1
  115. package/dist/utils/cn.js +16 -5
  116. package/package.json +1 -1
@@ -1,27 +1,49 @@
1
1
  import * as React from 'react';
2
+ /**
3
+ * Internal base props shared by both `file` and `url` variants of FileItem.
4
+ * Not exported — FileItem is an internal sub-component of FileUpload.
5
+ */
2
6
  interface FileItemBaseProps {
7
+ /** Whether the file has finished uploading. Controls which action buttons render. */
3
8
  uploaded?: boolean;
9
+ /** Upload progress in percent (0–100). Renders a progress bar while strictly between 0 and 100. */
4
10
  progress?: number;
11
+ /** Controls the item's min-height variant. */
5
12
  size?: 'sm' | 'base' | 'lg';
13
+ /** Prevents interaction and applies disabled styling. */
6
14
  disabled?: boolean;
15
+ /** Hides the delete button; download button remains available for uploaded items. */
7
16
  readOnly?: boolean;
17
+ /** Hint message displayed below the item with secondary styling. */
8
18
  note?: React.ReactNode;
19
+ /** Error message displayed below the item with error styling. */
9
20
  error?: React.ReactNode;
10
21
  /** Secondary text displayed below the file name (e.g., file size). */
11
22
  secondaryText?: React.ReactNode;
23
+ /** Fires when the delete button is clicked. */
12
24
  onDelete: () => void;
25
+ /**
26
+ * When provided, replaces the default download behavior. Use when the consumer
27
+ * needs to mint a fresh URL (e.g., short-lived authed URL fetched by UUID) or
28
+ * pull the authoritative copy from a server instead of using the local blob.
29
+ */
30
+ onDownload?: () => void;
31
+ /** Fires when an internal error occurs (e.g., download failure). */
13
32
  onError?: (error: string, file?: File) => void;
14
33
  }
34
+ /** Internal props for a FileItem backed by a local `File` object. */
15
35
  interface FileItemFileProps extends FileItemBaseProps {
16
36
  source: 'file';
17
37
  file: File;
18
38
  }
39
+ /** Internal props for a FileItem backed by a remote URL (already-uploaded file). */
19
40
  interface FileItemUrlProps extends FileItemBaseProps {
20
41
  source: 'url';
21
42
  url: string;
22
43
  name: string;
23
44
  type?: string;
24
45
  }
46
+ /** Discriminated union: `source: 'file'` uses a local File, `source: 'url'` references a remote URL. */
25
47
  type FileItemProps = FileItemFileProps | FileItemUrlProps;
26
48
  export declare const FileItem: (props: FileItemProps) => import("react/jsx-runtime").JSX.Element;
27
49
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"FileItem.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA8C9B,UAAU,iBAAiB;IACzB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;CAC/C;AAED,UAAU,iBAAkB,SAAQ,iBAAiB;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,IAAI,CAAA;CACX;AAED,UAAU,gBAAiB,SAAQ,iBAAiB;IAClD,MAAM,EAAE,KAAK,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,KAAK,aAAa,GAAG,iBAAiB,GAAG,gBAAgB,CAAA;AAsEzD,eAAO,MAAM,QAAQ,GAAI,OAAO,aAAa,4CAuO5C,CAAA"}
1
+ {"version":3,"file":"FileItem.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileItem.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AA8C9B;;;GAGG;AACH,UAAU,iBAAiB;IACzB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,mGAAmG;IACnG,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,8CAA8C;IAC9C,IAAI,CAAC,EAAE,IAAI,GAAG,MAAM,GAAG,IAAI,CAAA;IAC3B,yDAAyD;IACzD,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,qFAAqF;IACrF,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,oEAAoE;IACpE,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACtB,iEAAiE;IACjE,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IACvB,sEAAsE;IACtE,aAAa,CAAC,EAAE,KAAK,CAAC,SAAS,CAAA;IAC/B,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,IAAI,CAAA;IACpB;;;;OAIG;IACH,UAAU,CAAC,EAAE,MAAM,IAAI,CAAA;IACvB,oEAAoE;IACpE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;CAC/C;AAED,qEAAqE;AACrE,UAAU,iBAAkB,SAAQ,iBAAiB;IACnD,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,IAAI,CAAA;CACX;AAED,oFAAoF;AACpF,UAAU,gBAAiB,SAAQ,iBAAiB;IAClD,MAAM,EAAE,KAAK,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wGAAwG;AACxG,KAAK,aAAa,GAAG,iBAAiB,GAAG,gBAAgB,CAAA;AAsEzD,eAAO,MAAM,QAAQ,GAAI,OAAO,aAAa,4CAiO5C,CAAA"}
@@ -1,12 +1,12 @@
1
1
  import { jsxs as f, jsx as t } from "react/jsx-runtime";
2
2
  import * as p from "react";
3
- import { cva as O } from "class-variance-authority";
4
- import { useMuzaTranslations as _ } from "../../translations/TranslationContext.js";
5
- import { Flex as U } from "../Flex/Flex.js";
3
+ import { cva as _ } from "class-variance-authority";
4
+ import { useMuzaTranslations as B } from "../../translations/TranslationContext.js";
5
+ import { Flex as z } from "../Flex/Flex.js";
6
6
  import { cn as a } from "../../utils/cn.js";
7
- import { GalleryOutline as B, FileTextBold as M, CloseCircleBold as j, DownloadMinimalisticBold as I, TrashBinTrashBold as R } from "@solar-icons/react-perf";
7
+ import { GalleryOutline as M, FileTextBold as j, CloseCircleBold as D, DownloadMinimalisticBold as I, TrashBinTrashBold as R } from "@solar-icons/react-perf";
8
8
  import { Typography as u } from "../Typography/Typography.js";
9
- const D = (e, l, i) => {
9
+ const S = (e, l, i) => {
10
10
  let n = null, o = null;
11
11
  try {
12
12
  n = URL.createObjectURL(e), o = document.createElement("a"), o.href = n, o.download = e.name, o.style.display = "none", document.body.appendChild(o), o.click();
@@ -16,7 +16,7 @@ const D = (e, l, i) => {
16
16
  } finally {
17
17
  o && document.body.contains(o) && document.body.removeChild(o), n && URL.revokeObjectURL(n);
18
18
  }
19
- }, S = O(
19
+ }, A = _(
20
20
  [
21
21
  "flex flex-1 items-center gap-sm rounded-full border transition-colors",
22
22
  "relative pr-comp-input-p-hor pl-comp-input-p-hor",
@@ -63,7 +63,7 @@ const D = (e, l, i) => {
63
63
  "bg-none cursor-pointer disabled:cursor-not-allowed",
64
64
  "text-comp-file-upload-icon-def-secondary",
65
65
  "disabled:text-comp-file-upload-icon-def-disabled"
66
- ]), A = /\.(jpe?g|png|gif|webp|svg|bmp|ico|avif|tiff?)$/i, z = /\.(pdf|docx?|txt|rtf|odt|xlsx?|csv|pptx?|md|tex)$/i, E = [
66
+ ]), F = /\.(jpe?g|png|gif|webp|svg|bmp|ico|avif|tiff?)$/i, E = /\.(pdf|docx?|txt|rtf|odt|xlsx?|csv|pptx?|md|tex)$/i, L = [
67
67
  "application/pdf",
68
68
  "application/msword",
69
69
  "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
@@ -76,7 +76,7 @@ const D = (e, l, i) => {
76
76
  "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
77
77
  "application/vnd.ms-powerpoint",
78
78
  "application/vnd.openxmlformats-officedocument.presentationml.presentation"
79
- ], P = (e) => {
79
+ ], q = (e) => {
80
80
  const {
81
81
  uploaded: l,
82
82
  progress: i,
@@ -87,37 +87,38 @@ const D = (e, l, i) => {
87
87
  error: s,
88
88
  secondaryText: y,
89
89
  onDelete: g,
90
- onError: L
91
- } = e, m = _(), [v, w] = p.useState(!1), N = e.source === "file" ? e.file.name : e.name, b = e.source === "url" ? (e.type ?? "").startsWith("image/") || A.test(e.name) : e.file.type.startsWith("image/"), T = e.source === "url" ? E.includes(e.type ?? "") || z.test(e.name) : E.includes(e.file.type) || z.test(e.file.name), d = e.source === "file" ? e.file : e.url, C = p.useMemo(() => o ? "disabled" : s ? "error" : typeof i == "number" && i > 0 && i < 100 ? "loading" : "default", [o, s, i]), x = p.useMemo(() => {
90
+ onDownload: v,
91
+ onError: T
92
+ } = e, m = B(), [w, N] = p.useState(!1), k = e.source === "file" ? e.file.name : e.name, b = e.source === "url" ? (e.type ?? "").startsWith("image/") || F.test(e.name) : e.file.type.startsWith("image/"), C = e.source === "url" ? L.includes(e.type ?? "") || E.test(e.name) : L.includes(e.file.type) || E.test(e.file.name), d = e.source === "file" ? e.file : e.url, O = p.useMemo(() => o ? "disabled" : s ? "error" : typeof i == "number" && i > 0 && i < 100 ? "loading" : "default", [o, s, i]), x = p.useMemo(() => {
92
93
  if (b)
93
94
  return typeof d == "string" ? d : URL.createObjectURL(d);
94
95
  }, [b, d]);
95
- return p.useEffect(() => w(!1), [d]), /* @__PURE__ */ f(U, { gap: "sm", direction: "column", component: "li", children: [
96
+ return p.useEffect(() => N(!1), [d]), /* @__PURE__ */ f(z, { gap: "sm", direction: "column", component: "li", children: [
96
97
  /* @__PURE__ */ f(
97
98
  "div",
98
99
  {
99
100
  className: a(
100
- S({
101
- variant: C,
101
+ A({
102
+ variant: O,
102
103
  size: n
103
104
  })
104
105
  ),
105
106
  children: [
106
- x && !v && /* @__PURE__ */ t(
107
+ x && !w && /* @__PURE__ */ t(
107
108
  "img",
108
109
  {
109
110
  src: x,
110
- alt: N,
111
+ alt: k,
111
112
  width: 24,
112
113
  height: 24,
113
- onError: () => w(!0),
114
+ onError: () => N(!0),
114
115
  className: a("size-icon-medium shrink-0 rounded-xs object-cover", {
115
116
  "opacity-50 saturate-0": o
116
117
  })
117
118
  }
118
119
  ),
119
- x && v && /* @__PURE__ */ t(
120
- B,
120
+ x && w && /* @__PURE__ */ t(
121
+ M,
121
122
  {
122
123
  className: a(
123
124
  "size-icon-medium shrink-0 text-comp-file-upload-icon-def-secondary",
@@ -127,8 +128,8 @@ const D = (e, l, i) => {
127
128
  )
128
129
  }
129
130
  ),
130
- !b && T && /* @__PURE__ */ t(
131
- M,
131
+ !b && C && /* @__PURE__ */ t(
132
+ j,
132
133
  {
133
134
  className: a(
134
135
  "size-icon-medium shrink-0 text-comp-file-upload-icon-def-secondary",
@@ -138,7 +139,7 @@ const D = (e, l, i) => {
138
139
  )
139
140
  }
140
141
  ),
141
- /* @__PURE__ */ f(U, { direction: "column", className: "min-w-0 flex-1 justify-center", children: [
142
+ /* @__PURE__ */ f(z, { direction: "column", className: "min-w-0 flex-1 justify-center", children: [
142
143
  /* @__PURE__ */ t(
143
144
  u,
144
145
  {
@@ -148,7 +149,7 @@ const D = (e, l, i) => {
148
149
  variant: "body",
149
150
  weight: "medium",
150
151
  fixY: !0,
151
- children: N
152
+ children: k
152
153
  }
153
154
  ),
154
155
  y && /* @__PURE__ */ t(
@@ -177,7 +178,7 @@ const D = (e, l, i) => {
177
178
  "focus-visible:text-comp-file-upload-icon-def-focused",
178
179
  "disabled:text-comp-file-upload-icon-def-disabled"
179
180
  ),
180
- children: /* @__PURE__ */ t(j, { className: "size-icon-medium" })
181
+ children: /* @__PURE__ */ t(D, { className: "size-icon-medium" })
181
182
  }
182
183
  ),
183
184
  l && /* @__PURE__ */ f("div", { className: "flex gap-xl", children: [
@@ -186,24 +187,20 @@ const D = (e, l, i) => {
186
187
  {
187
188
  type: "button",
188
189
  disabled: o,
189
- onClick: () => e.source === "url" ? (() => {
190
- try {
191
- const k = new URL(
192
- e.url,
193
- window.location.origin
194
- );
195
- ["http:", "https:", "blob:"].includes(k.protocol) && window.open(
196
- k.href,
197
- "_blank",
198
- "noopener,noreferrer"
199
- );
200
- } catch {
190
+ onClick: () => {
191
+ if (v) {
192
+ v();
193
+ return;
201
194
  }
202
- })() : D(
203
- e.file,
204
- L,
205
- m.fileUpload.downloadError
206
- ),
195
+ if (e.source === "url")
196
+ try {
197
+ const U = new URL(e.url, window.location.origin);
198
+ ["http:", "https:", "blob:"].includes(U.protocol) && window.open(U.href, "_blank", "noopener,noreferrer");
199
+ } catch {
200
+ }
201
+ else
202
+ S(e.file, T, m.fileUpload.downloadError);
203
+ },
207
204
  "aria-label": m.fileUpload.downloadButtonAriaLabel,
208
205
  className: a(
209
206
  h,
@@ -273,5 +270,5 @@ const D = (e, l, i) => {
273
270
  ] });
274
271
  };
275
272
  export {
276
- P as FileItem
273
+ q as FileItem
277
274
  };
@@ -9,117 +9,212 @@ declare const fileUploadVariants: (props?: ({
9
9
  /**
10
10
  * Represents a remote file that is already uploaded and accessible via URL.
11
11
  * Used to display previously-uploaded files without re-fetching them as `File` objects.
12
+ *
13
+ * @example
14
+ * const urls: PreselectedUrl[] = [
15
+ * { url: 'https://cdn.example.com/photo.jpg', name: 'photo.jpg', type: 'image/jpeg', secondaryText: '3.2 MB' },
16
+ * { url: 'https://cdn.example.com/report.pdf', name: 'report.pdf', type: 'application/pdf' },
17
+ * ]
12
18
  */
13
19
  export interface PreselectedUrl {
14
- /** Direct URL to the file. */
20
+ /** Direct URL to the file. Used for opening the file in a new tab on download. */
15
21
  url: string;
16
- /** Display name for the file. */
22
+ /** Display name shown in the file list item. */
17
23
  name: string;
18
- /** MIME type — if starts with `"image/"`, shows thumbnail. Falls back to extension sniffing from name. */
24
+ /**
25
+ * MIME type used to pick the file icon. If it starts with `"image/"` the item renders a
26
+ * thumbnail from `url`. When omitted, the extension in `name` is used as a fallback.
27
+ */
19
28
  type?: string;
20
- /** File size in bytes (for display). */
29
+ /** File size in bytes. Currently informational; not rendered directly — use `secondaryText` for display. */
21
30
  size?: number;
22
- /** Secondary text displayed below the file name (e.g., formatted file size). */
31
+ /** Secondary text displayed below the file name (e.g., formatted file size like `'3.2 MB'`). */
23
32
  secondaryText?: React.ReactNode;
24
33
  }
34
+ /**
35
+ * Upload status for a single file in `FileUpload`, matched by index to `preselectedFiles`.
36
+ *
37
+ * @example
38
+ * // Second file is 75% uploaded, first and third are done
39
+ * const status: FileUploadStatus[] = [
40
+ * { uploaded: true },
41
+ * { uploaded: false, progress: 75 },
42
+ * { uploaded: true },
43
+ * ]
44
+ */
45
+ export interface FileUploadStatus {
46
+ /** Whether the file has finished uploading. Controls the icon (close vs download/trash). */
47
+ uploaded: boolean;
48
+ /** Upload progress in percent (0–100). Renders a progress bar under the item while strictly between 0 and 100. */
49
+ progress?: number;
50
+ }
25
51
  /**
26
52
  * Props for the FileUpload component.
27
53
  * Extends standard div attributes except `onDrop`, `onError`, and `onChange`
28
54
  * (replaced by component-specific callbacks).
29
55
  */
30
56
  export interface FileUploadProps extends Omit<React.HTMLAttributes<HTMLDivElement>, 'onDrop' | 'onError' | 'onChange'>, Omit<VariantProps<typeof fileUploadVariants>, 'isDragActive'> {
31
- /** Fires when files are dropped or selected. Receives array of accepted files. */
57
+ /**
58
+ * Fires when files are dropped or selected (after internal validation). Receives the
59
+ * array of newly accepted files from the current interaction only — not the cumulative
60
+ * list. Use `onChange` for the full list after each change.
61
+ *
62
+ * @example
63
+ * <FileUpload onDrop={(files) => uploadToServer(files)} />
64
+ */
32
65
  onDrop?: (acceptedFiles: File[]) => void;
33
66
  /**
34
- * Accepted file types as MIME type strings.
67
+ * Accepted file types as MIME type strings. Accepts either a single MIME type or an array.
68
+ * Wildcards (`image/*`, `video/*`) are supported.
35
69
  *
36
70
  * @example
37
- * accept="image/*"
38
- * accept={['image/*', 'application/pdf']}
71
+ * <FileUpload accept="image/*" />
72
+ * <FileUpload accept={['image/*', 'application/pdf']} />
39
73
  */
40
74
  accept?: string | string[];
41
- /** Allows selecting multiple files simultaneously. @default true */
75
+ /** Allows selecting multiple files simultaneously. When `false`, the dropzone hides after the first file is selected. @default true */
42
76
  multiple?: boolean;
43
- /** Maximum allowed file size in bytes. */
77
+ /**
78
+ * Maximum allowed file size in bytes. Files exceeding this size are rejected and trigger `onError`.
79
+ *
80
+ * @example
81
+ * <FileUpload maxSize={5 * 1024 * 1024} /> // 5 MB
82
+ */
44
83
  maxSize?: number;
45
84
  /** Custom error message when a file exceeds `maxSize`. Defaults to a translated message with the size in MB. */
46
85
  maxSizeErrorMessage?: string;
47
- /** Maximum number of files allowed. When reached, the dropzone is hidden. */
86
+ /** Maximum number of files allowed (counts both `preselectedFiles` and `preselectedUrls`). When reached, the dropzone is hidden. */
48
87
  maxFiles?: number;
49
- /** Custom error message when file count exceeds `maxFiles`. Defaults to a translated message. */
88
+ /** Custom error message when file count exceeds `maxFiles`. Defaults to a translated message with the count. */
50
89
  maxFilesErrorMessage?: string;
51
90
  /** Controls the visual size of file items in the list. @default 'base' */
52
91
  size?: 'sm' | 'base' | 'lg';
53
- /** Prevents interaction and applies disabled styling. @default false */
92
+ /** Prevents interaction and applies disabled styling to the dropzone and all file items. @default false */
54
93
  disabled?: boolean;
55
- /** Hides the dropzone and shows only uploaded files without delete buttons. @default false */
94
+ /** Hides the dropzone and shows only uploaded files without delete buttons. Download buttons remain available. @default false */
56
95
  readOnly?: boolean;
57
96
  /** Title text displayed inside the dropzone area. Defaults to a translated string. */
58
97
  title?: string;
59
- /** Label displayed above the upload area. */
98
+ /** Label displayed above the upload area via `FormField`. */
60
99
  label?: string;
61
- /** Subtitle text displayed below the title inside the dropzone. */
100
+ /** Subtitle text displayed below the title inside the dropzone (typically used for supported formats hint). */
62
101
  subtitle?: string;
63
- /** Applies error border and text styling to the dropzone. */
102
+ /** Applies error border and text styling to the dropzone. Independent of per-file errors in `itemErrors`. */
64
103
  error?: boolean;
65
104
  /** Marks the field as required and displays a red asterisk next to the label. @default false */
66
105
  required?: boolean;
67
106
  /** Hides the required asterisk even when `required` is true. @default false */
68
107
  disableRequiredAsterisk?: boolean;
69
108
  /**
70
- * Additional options passed to react-dropzone.
71
- * Props managed by the component (`onDrop`, `accept`, `multiple`, `maxSize`, `disabled`) are excluded.
109
+ * Additional options passed to the underlying react-dropzone hook. Props already managed by
110
+ * `FileUpload` (`onDrop`, `accept`, `multiple`, `maxSize`, `maxFiles`, `disabled`) are excluded.
111
+ *
72
112
  * @see DropzoneOptions
73
113
  */
74
114
  dropzoneOptions?: Omit<DropzoneOptions, 'onDrop' | 'accept' | 'multiple' | 'maxSize' | 'maxFiles' | 'disabled'>;
75
115
  /** Files displayed in the list on mount. @default [] */
76
116
  preselectedFiles?: File[];
77
117
  /**
78
- * Upload status for each file, matched by index to `preselectedFiles`.
79
- * Each entry contains `uploaded` (boolean) and optional `progress` (0-100).
118
+ * Upload status for each file, matched by index to `preselectedFiles`. Omit or pass an empty
119
+ * array to treat all files as not-yet-uploaded.
120
+ *
121
+ * @example
122
+ * <FileUpload
123
+ * preselectedFiles={[file1, file2]}
124
+ * fileStatus={[{ uploaded: true }, { uploaded: false, progress: 42 }]}
125
+ * />
126
+ *
127
+ * @see FileUploadStatus
80
128
  * @default []
81
129
  */
82
- fileStatus?: {
83
- uploaded: boolean;
84
- progress?: number;
85
- }[];
130
+ fileStatus?: FileUploadStatus[];
86
131
  /**
87
- * Per-file error messages keyed by File reference.
132
+ * Per-file error messages keyed by File reference. Displayed below the file item with error styling.
88
133
  *
89
134
  * @example
90
- * const errors = new Map<File, string>([[file, 'Upload failed']])
91
- * <FileUpload itemErrors={errors} />
135
+ * const itemErrors = new Map<File, React.ReactNode>([[file, 'Upload failed']])
136
+ * <FileUpload itemErrors={itemErrors} />
92
137
  */
93
138
  itemErrors?: Map<File, React.ReactNode>;
94
139
  /**
95
- * Per-file hint messages keyed by File reference.
140
+ * Per-file hint messages keyed by File reference. Displayed below the file item with secondary styling.
96
141
  *
97
142
  * @example
98
- * const hints = new Map<File, string>([[file, 'Will be optimized']])
99
- * <FileUpload itemHints={hints} />
143
+ * const itemHints = new Map<File, React.ReactNode>([[file, 'Will be optimized before upload']])
144
+ * <FileUpload itemHints={itemHints} />
100
145
  */
101
146
  itemHints?: Map<File, React.ReactNode>;
102
147
  /**
103
- * Per-file secondary text keyed by File reference (e.g., formatted file size).
148
+ * Per-file secondary text keyed by File reference (e.g., formatted file size). Displayed below the file name inside the item.
104
149
  *
105
150
  * @example
106
- * const texts = new Map<File, React.ReactNode>([[file, '7 MB']])
107
- * <FileUpload itemSecondaryTexts={texts} />
151
+ * const itemSecondaryTexts = new Map<File, React.ReactNode>([[file, '7 MB']])
152
+ * <FileUpload itemSecondaryTexts={itemSecondaryTexts} />
108
153
  */
109
154
  itemSecondaryTexts?: Map<File, React.ReactNode>;
110
- /** Fires when an error occurs. Receives the error message and the optional file that caused it. */
155
+ /**
156
+ * Fires when an error occurs (file too large, too many files, processing or deletion failure).
157
+ * Receives the error message and the optional file that caused it.
158
+ *
159
+ * @example
160
+ * <FileUpload onError={(msg, file) => toast({ variant: 'error', text: msg })} />
161
+ */
111
162
  onError?: (error: string, file?: File) => void;
112
- /** Fires when a file is deleted. Receives the deleted file and its index. */
163
+ /** Fires when a `File` item is removed. Receives the deleted file and its index in `preselectedFiles`. */
113
164
  onDelete?: (file: File, index: number) => void;
114
- /** Fires when the file list changes. Receives the updated array of all files. */
165
+ /**
166
+ * Fires when the internal file list changes (after drop or delete). Receives the full updated array,
167
+ * including previously-selected files.
168
+ *
169
+ * @example
170
+ * <FileUpload onChange={(files) => setValue('attachments', files)} />
171
+ */
115
172
  onChange?: (files: File[]) => void;
116
- /** Already-uploaded files to display via URL, without needing `File` objects. @default [] */
173
+ /**
174
+ * Already-uploaded files to display via URL, without needing `File` objects. Rendered before
175
+ * `preselectedFiles` in the list.
176
+ *
177
+ * @see PreselectedUrl
178
+ * @default []
179
+ */
117
180
  preselectedUrls?: PreselectedUrl[];
118
- /** Fires when a URL-backed item is deleted. Receives the item and its index in the `preselectedUrls` array. */
181
+ /** Fires when a URL-backed item is removed. Receives the item and its index in `preselectedUrls`. @see PreselectedUrl */
119
182
  onDeleteUrl?: (item: PreselectedUrl, index: number) => void;
120
- /** Extra content rendered inline next to the label (e.g. a tooltip icon). */
183
+ /**
184
+ * Fires when the download button is clicked on a URL-backed item. When provided,
185
+ * replaces the default `window.open` behavior — use this when the URL needs to be
186
+ * minted on demand (e.g., short-lived authed URLs fetched by UUID).
187
+ *
188
+ * @example
189
+ * <FileUpload
190
+ * preselectedUrls={items}
191
+ * onDownloadUrl={async (_item, index) => {
192
+ * const fresh = await fetchAuthedUrl(items[index].uuid)
193
+ * window.open(fresh, '_blank', 'noopener,noreferrer')
194
+ * }}
195
+ * />
196
+ *
197
+ * @see PreselectedUrl
198
+ */
199
+ onDownloadUrl?: (item: PreselectedUrl, index: number) => void;
200
+ /**
201
+ * Fires when the download button is clicked on an uploaded `File` item. When provided,
202
+ * replaces the default blob-download behavior — use this when the authoritative copy
203
+ * lives on a server and should be fetched rather than streamed from the local `File`.
204
+ *
205
+ * @example
206
+ * <FileUpload
207
+ * preselectedFiles={files}
208
+ * onDownloadFile={async (file) => {
209
+ * const fresh = await fetchAuthedUrl(file.name)
210
+ * window.open(fresh, '_blank', 'noopener,noreferrer')
211
+ * }}
212
+ * />
213
+ */
214
+ onDownloadFile?: (file: File, index: number) => void;
215
+ /** Extra content rendered inline next to the label (e.g. a tooltip icon). Takes precedence over `infoTooltip`. */
121
216
  labelExtra?: React.ReactNode;
122
- /** Tooltip content shown in an info icon next to the label. Overridden by `labelExtra` if both are provided. */
217
+ /** Tooltip content shown in an info icon next to the label. Ignored when `labelExtra` is provided. */
123
218
  infoTooltip?: string;
124
219
  }
125
220
  declare const FileUpload: React.ForwardRefExoticComponent<FileUploadProps & React.RefAttributes<HTMLDivElement>>;
@@ -1 +1 @@
1
- {"version":3,"file":"FileUpload.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileUpload.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileUpload.d.ts","sourceRoot":"","sources":["../../../src/components/FileUpload/FileUpload.tsx"],"names":[],"mappings":"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"}