@optimum-intelligence/opti-ui 0.0.0-stage → 0.3.0

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 (193) hide show
  1. package/LICENSE +23 -0
  2. package/README.md +244 -2
  3. package/dist/components/accordion/Accordion.d.ts +17 -0
  4. package/dist/components/accordion/Accordion.js +204 -0
  5. package/dist/components/accordion/Accordion.js.map +1 -0
  6. package/dist/components/alert/Alert.d.ts +18 -0
  7. package/dist/components/alert/Alert.js +164 -0
  8. package/dist/components/alert/Alert.js.map +1 -0
  9. package/dist/components/app-shell/AppShell.d.ts +97 -0
  10. package/dist/components/app-shell/AppShell.js +689 -0
  11. package/dist/components/app-shell/AppShell.js.map +1 -0
  12. package/dist/components/avatar/Avatar.d.ts +21 -0
  13. package/dist/components/avatar/Avatar.js +190 -0
  14. package/dist/components/avatar/Avatar.js.map +1 -0
  15. package/dist/components/badge/Badge.d.ts +16 -0
  16. package/dist/components/badge/Badge.js +94 -0
  17. package/dist/components/badge/Badge.js.map +1 -0
  18. package/dist/components/breadcrumbs/Breadcrumbs.d.ts +18 -0
  19. package/dist/components/breadcrumbs/Breadcrumbs.js +154 -0
  20. package/dist/components/breadcrumbs/Breadcrumbs.js.map +1 -0
  21. package/dist/components/button/Button.d.ts +23 -0
  22. package/dist/components/button/Button.js +159 -0
  23. package/dist/components/button/Button.js.map +1 -0
  24. package/dist/components/calendar/Calendar.d.ts +59 -0
  25. package/dist/components/calendar/Calendar.js +709 -0
  26. package/dist/components/calendar/Calendar.js.map +1 -0
  27. package/dist/components/calendar/date-utils.d.ts +32 -0
  28. package/dist/components/calendar/date-utils.js +112 -0
  29. package/dist/components/calendar/date-utils.js.map +1 -0
  30. package/dist/components/card/Card.d.ts +42 -0
  31. package/dist/components/card/Card.js +82 -0
  32. package/dist/components/card/Card.js.map +1 -0
  33. package/dist/components/choice/Choice.d.ts +32 -0
  34. package/dist/components/choice/Choice.js +371 -0
  35. package/dist/components/choice/Choice.js.map +1 -0
  36. package/dist/components/collapsible/Collapsible.d.ts +15 -0
  37. package/dist/components/collapsible/Collapsible.js +155 -0
  38. package/dist/components/collapsible/Collapsible.js.map +1 -0
  39. package/dist/components/combobox/Combobox.d.ts +68 -0
  40. package/dist/components/combobox/Combobox.js +752 -0
  41. package/dist/components/combobox/Combobox.js.map +1 -0
  42. package/dist/components/command-palette/CommandPalette.d.ts +52 -0
  43. package/dist/components/command-palette/CommandPalette.js +328 -0
  44. package/dist/components/command-palette/CommandPalette.js.map +1 -0
  45. package/dist/components/data-table/DataTable.d.ts +73 -0
  46. package/dist/components/data-table/DataTable.js +478 -0
  47. package/dist/components/data-table/DataTable.js.map +1 -0
  48. package/dist/components/data-table/DataTableContent.d.ts +35 -0
  49. package/dist/components/data-table/DataTableContent.js +550 -0
  50. package/dist/components/data-table/DataTableContent.js.map +1 -0
  51. package/dist/components/data-table/DataTableFilters.d.ts +15 -0
  52. package/dist/components/data-table/DataTableFilters.js +284 -0
  53. package/dist/components/data-table/DataTableFilters.js.map +1 -0
  54. package/dist/components/data-table/DataTableRow.d.ts +33 -0
  55. package/dist/components/data-table/DataTableRow.js +552 -0
  56. package/dist/components/data-table/DataTableRow.js.map +1 -0
  57. package/dist/components/data-table/context.d.ts +5 -0
  58. package/dist/components/data-table/context.js +14 -0
  59. package/dist/components/data-table/context.js.map +1 -0
  60. package/dist/components/data-table/layout.d.ts +60 -0
  61. package/dist/components/data-table/layout.js +272 -0
  62. package/dist/components/data-table/layout.js.map +1 -0
  63. package/dist/components/data-table/types.d.ts +319 -0
  64. package/dist/components/data-table/useDataTable.d.ts +9 -0
  65. package/dist/components/data-table/useDataTable.js +666 -0
  66. package/dist/components/data-table/useDataTable.js.map +1 -0
  67. package/dist/components/date-picker/DatePicker.d.ts +50 -0
  68. package/dist/components/date-picker/DatePicker.js +485 -0
  69. package/dist/components/date-picker/DatePicker.js.map +1 -0
  70. package/dist/components/date-picker/DateRangePicker.d.ts +39 -0
  71. package/dist/components/date-picker/DateRangePicker.js +339 -0
  72. package/dist/components/date-picker/DateRangePicker.js.map +1 -0
  73. package/dist/components/date-picker/PickerField.d.ts +38 -0
  74. package/dist/components/date-picker/PickerField.js +238 -0
  75. package/dist/components/date-picker/PickerField.js.map +1 -0
  76. package/dist/components/dialog/Dialog.d.ts +70 -0
  77. package/dist/components/dialog/Dialog.js +354 -0
  78. package/dist/components/dialog/Dialog.js.map +1 -0
  79. package/dist/components/drawer/Drawer.d.ts +39 -0
  80. package/dist/components/drawer/Drawer.js +225 -0
  81. package/dist/components/drawer/Drawer.js.map +1 -0
  82. package/dist/components/empty-state/EmptyState.d.ts +12 -0
  83. package/dist/components/empty-state/EmptyState.js +116 -0
  84. package/dist/components/empty-state/EmptyState.js.map +1 -0
  85. package/dist/components/field/Field.d.ts +36 -0
  86. package/dist/components/field/Field.js +337 -0
  87. package/dist/components/field/Field.js.map +1 -0
  88. package/dist/components/file-upload/FileUpload.d.ts +91 -0
  89. package/dist/components/file-upload/FileUpload.js +714 -0
  90. package/dist/components/file-upload/FileUpload.js.map +1 -0
  91. package/dist/components/input/Input.d.ts +49 -0
  92. package/dist/components/input/Input.js +538 -0
  93. package/dist/components/input/Input.js.map +1 -0
  94. package/dist/components/link/Link.d.ts +17 -0
  95. package/dist/components/link/Link.js +91 -0
  96. package/dist/components/link/Link.js.map +1 -0
  97. package/dist/components/menu/Menu.d.ts +79 -0
  98. package/dist/components/menu/Menu.js +615 -0
  99. package/dist/components/menu/Menu.js.map +1 -0
  100. package/dist/components/number-field/NumberField.d.ts +16 -0
  101. package/dist/components/number-field/NumberField.js +188 -0
  102. package/dist/components/number-field/NumberField.js.map +1 -0
  103. package/dist/components/pagination/Pagination.d.ts +34 -0
  104. package/dist/components/pagination/Pagination.js +244 -0
  105. package/dist/components/pagination/Pagination.js.map +1 -0
  106. package/dist/components/popover/Popover.d.ts +22 -0
  107. package/dist/components/popover/Popover.js +186 -0
  108. package/dist/components/popover/Popover.js.map +1 -0
  109. package/dist/components/preview-card/PreviewCard.d.ts +20 -0
  110. package/dist/components/preview-card/PreviewCard.js +114 -0
  111. package/dist/components/preview-card/PreviewCard.js.map +1 -0
  112. package/dist/components/progress/Progress.d.ts +20 -0
  113. package/dist/components/progress/Progress.js +169 -0
  114. package/dist/components/progress/Progress.js.map +1 -0
  115. package/dist/components/scroll-area/ScrollArea.d.ts +8 -0
  116. package/dist/components/scroll-area/ScrollArea.js +112 -0
  117. package/dist/components/scroll-area/ScrollArea.js.map +1 -0
  118. package/dist/components/search-input/SearchInput.d.ts +14 -0
  119. package/dist/components/search-input/SearchInput.js +114 -0
  120. package/dist/components/search-input/SearchInput.js.map +1 -0
  121. package/dist/components/select/Select.d.ts +66 -0
  122. package/dist/components/select/Select.js +601 -0
  123. package/dist/components/select/Select.js.map +1 -0
  124. package/dist/components/separator/Separator.d.ts +4 -0
  125. package/dist/components/separator/Separator.js +46 -0
  126. package/dist/components/separator/Separator.js.map +1 -0
  127. package/dist/components/skeleton/Skeleton.d.ts +16 -0
  128. package/dist/components/skeleton/Skeleton.js +135 -0
  129. package/dist/components/skeleton/Skeleton.js.map +1 -0
  130. package/dist/components/slider/Slider.d.ts +11 -0
  131. package/dist/components/slider/Slider.js +107 -0
  132. package/dist/components/slider/Slider.js.map +1 -0
  133. package/dist/components/spinner/Spinner.d.ts +9 -0
  134. package/dist/components/spinner/Spinner.js +78 -0
  135. package/dist/components/spinner/Spinner.js.map +1 -0
  136. package/dist/components/stack/Stack.d.ts +23 -0
  137. package/dist/components/stack/Stack.js +79 -0
  138. package/dist/components/stack/Stack.js.map +1 -0
  139. package/dist/components/stat-card/StatCard.d.ts +22 -0
  140. package/dist/components/stat-card/StatCard.js +153 -0
  141. package/dist/components/stat-card/StatCard.js.map +1 -0
  142. package/dist/components/stepper/Stepper.d.ts +30 -0
  143. package/dist/components/stepper/Stepper.js +131 -0
  144. package/dist/components/stepper/Stepper.js.map +1 -0
  145. package/dist/components/table/Table.d.ts +53 -0
  146. package/dist/components/table/Table.js +221 -0
  147. package/dist/components/table/Table.js.map +1 -0
  148. package/dist/components/tabs/Tabs.d.ts +19 -0
  149. package/dist/components/tabs/Tabs.js +183 -0
  150. package/dist/components/tabs/Tabs.js.map +1 -0
  151. package/dist/components/tag/Tag.d.ts +22 -0
  152. package/dist/components/tag/Tag.js +121 -0
  153. package/dist/components/tag/Tag.js.map +1 -0
  154. package/dist/components/toast/Toast.d.ts +34 -0
  155. package/dist/components/toast/Toast.js +187 -0
  156. package/dist/components/toast/Toast.js.map +1 -0
  157. package/dist/components/toggle/Toggle.d.ts +31 -0
  158. package/dist/components/toggle/Toggle.js +197 -0
  159. package/dist/components/toggle/Toggle.js.map +1 -0
  160. package/dist/components/toolbar/Toolbar.d.ts +21 -0
  161. package/dist/components/toolbar/Toolbar.js +239 -0
  162. package/dist/components/toolbar/Toolbar.js.map +1 -0
  163. package/dist/components/tooltip/Tooltip.d.ts +33 -0
  164. package/dist/components/tooltip/Tooltip.js +182 -0
  165. package/dist/components/tooltip/Tooltip.js.map +1 -0
  166. package/dist/components/typography/Typography.d.ts +32 -0
  167. package/dist/components/typography/Typography.js +183 -0
  168. package/dist/components/typography/Typography.js.map +1 -0
  169. package/dist/fonts.css +3 -0
  170. package/dist/icons/index.d.ts +133 -0
  171. package/dist/icons/index.js +182 -0
  172. package/dist/icons/index.js.map +1 -0
  173. package/dist/index.d.ts +55 -0
  174. package/dist/index.js +58 -0
  175. package/dist/opti-ui.css +5692 -0
  176. package/dist/theme/ThemeProvider.d.ts +22 -0
  177. package/dist/theme/ThemeProvider.js +115 -0
  178. package/dist/theme/ThemeProvider.js.map +1 -0
  179. package/dist/theme/index.d.ts +2 -0
  180. package/dist/utils/cx.d.ts +10 -0
  181. package/dist/utils/cx.js +18 -0
  182. package/dist/utils/cx.js.map +1 -0
  183. package/dist/utils/index.d.ts +2 -0
  184. package/dist/utils/portal.d.ts +8 -0
  185. package/dist/utils/portal.js +16 -0
  186. package/dist/utils/portal.js.map +1 -0
  187. package/dist/utils/primitive.d.ts +13 -0
  188. package/dist/utils/primitive.js +61 -0
  189. package/dist/utils/primitive.js.map +1 -0
  190. package/dist/utils/search.d.ts +4 -0
  191. package/dist/utils/search.js +15 -0
  192. package/dist/utils/search.js.map +1 -0
  193. package/package.json +71 -4
@@ -0,0 +1,714 @@
1
+ "use client";
2
+ import { cx } from "../../utils/cx.js";
3
+ import { CircleCheckIcon, FileIcon, UploadIcon, XIcon } from "../../icons/index.js";
4
+ import { IconButton } from "../button/Button.js";
5
+ import { Progress } from "../progress/Progress.js";
6
+ import { c } from "react/compiler-runtime";
7
+ import * as React from "react";
8
+ import { jsx, jsxs } from "react/jsx-runtime";
9
+ //#region src/components/file-upload/FileUpload.tsx
10
+ /** `1536` → `"1.5 KB"`. */
11
+ function formatFileSize(bytes, locale) {
12
+ const units = [
13
+ "B",
14
+ "KB",
15
+ "MB",
16
+ "GB",
17
+ "TB"
18
+ ];
19
+ let value = bytes;
20
+ let unit = 0;
21
+ while (value >= 1024 && unit < units.length - 1) {
22
+ value /= 1024;
23
+ unit += 1;
24
+ }
25
+ const digits = unit > 0 && value < 10 ? 1 : 0;
26
+ return `${new Intl.NumberFormat(locale, { maximumFractionDigits: digits }).format(value)} ${units[unit]}`;
27
+ }
28
+ function accepts(file, accept) {
29
+ const tokens = (accept ?? "").split(",").map((token) => token.trim().toLowerCase()).filter(Boolean);
30
+ if (!tokens.length) return true;
31
+ const [name, type] = [file.name.toLowerCase(), file.type.toLowerCase()];
32
+ return tokens.some((token) => token.startsWith(".") ? name.endsWith(token) : token.endsWith("/*") ? type.startsWith(token.slice(0, -1)) : type === token);
33
+ }
34
+ function setInputFiles(input, files) {
35
+ if (!input) return;
36
+ if (!files?.length || typeof DataTransfer === "undefined") {
37
+ input.value = "";
38
+ return;
39
+ }
40
+ const transfer = new DataTransfer();
41
+ for (const file of files) transfer.items.add(file);
42
+ input.files = transfer.files;
43
+ }
44
+ /** Drop target that also opens the file browser on click, Enter or Space. */
45
+ function Dropzone(t0) {
46
+ const $ = c(74);
47
+ let accept;
48
+ let children;
49
+ let className;
50
+ let disabled;
51
+ let files;
52
+ let hint;
53
+ let icon;
54
+ let inputProps;
55
+ let invalid;
56
+ let maxSize;
57
+ let multiple;
58
+ let onFiles;
59
+ let onReject;
60
+ let props;
61
+ let ref;
62
+ let t1;
63
+ let title;
64
+ if ($[0] !== t0) {
65
+ ({onFiles, onReject, accept, multiple, maxSize, files, disabled, invalid, size: t1, icon, title, hint, inputProps, className, children, ref, ...props} = t0);
66
+ $[0] = t0;
67
+ $[1] = accept;
68
+ $[2] = children;
69
+ $[3] = className;
70
+ $[4] = disabled;
71
+ $[5] = files;
72
+ $[6] = hint;
73
+ $[7] = icon;
74
+ $[8] = inputProps;
75
+ $[9] = invalid;
76
+ $[10] = maxSize;
77
+ $[11] = multiple;
78
+ $[12] = onFiles;
79
+ $[13] = onReject;
80
+ $[14] = props;
81
+ $[15] = ref;
82
+ $[16] = t1;
83
+ $[17] = title;
84
+ } else {
85
+ accept = $[1];
86
+ children = $[2];
87
+ className = $[3];
88
+ disabled = $[4];
89
+ files = $[5];
90
+ hint = $[6];
91
+ icon = $[7];
92
+ inputProps = $[8];
93
+ invalid = $[9];
94
+ maxSize = $[10];
95
+ multiple = $[11];
96
+ onFiles = $[12];
97
+ onReject = $[13];
98
+ props = $[14];
99
+ ref = $[15];
100
+ t1 = $[16];
101
+ title = $[17];
102
+ }
103
+ const size = t1 === void 0 ? "md" : t1;
104
+ const [dragging, setDragging] = React.useState(false);
105
+ const inputRef = React.useRef(null);
106
+ let t2;
107
+ let t3;
108
+ if ($[18] !== files) {
109
+ t2 = () => {
110
+ setInputFiles(inputRef.current, files);
111
+ };
112
+ t3 = [files];
113
+ $[18] = files;
114
+ $[19] = t2;
115
+ $[20] = t3;
116
+ } else {
117
+ t2 = $[19];
118
+ t3 = $[20];
119
+ }
120
+ React.useEffect(t2, t3);
121
+ let t4;
122
+ if ($[21] !== accept || $[22] !== files || $[23] !== maxSize || $[24] !== multiple || $[25] !== onFiles || $[26] !== onReject) {
123
+ t4 = (list) => {
124
+ const accepted = [];
125
+ const rejected = [];
126
+ for (const file of Array.from(list ?? [])) if (!accepts(file, accept)) rejected.push({
127
+ file,
128
+ reason: "type"
129
+ });
130
+ else if (maxSize != null && file.size > maxSize) rejected.push({
131
+ file,
132
+ reason: "size"
133
+ });
134
+ else if (!multiple && accepted.length) rejected.push({
135
+ file,
136
+ reason: "count"
137
+ });
138
+ else accepted.push(file);
139
+ setInputFiles(inputRef.current, files);
140
+ if (accepted.length) onFiles?.(accepted);
141
+ if (rejected.length) onReject?.(rejected);
142
+ };
143
+ $[21] = accept;
144
+ $[22] = files;
145
+ $[23] = maxSize;
146
+ $[24] = multiple;
147
+ $[25] = onFiles;
148
+ $[26] = onReject;
149
+ $[27] = t4;
150
+ } else t4 = $[27];
151
+ const take = t4;
152
+ const hasFiles = _temp;
153
+ let t5;
154
+ if ($[28] !== className) {
155
+ t5 = cx("oui-dropzone", className);
156
+ $[28] = className;
157
+ $[29] = t5;
158
+ } else t5 = $[29];
159
+ const t6 = dragging ? "" : void 0;
160
+ const t7 = disabled ? "" : void 0;
161
+ const t8 = invalid ? "" : void 0;
162
+ let t9;
163
+ if ($[30] !== disabled) {
164
+ t9 = (event_0) => {
165
+ if (!disabled && hasFiles(event_0)) setDragging(true);
166
+ };
167
+ $[30] = disabled;
168
+ $[31] = t9;
169
+ } else t9 = $[31];
170
+ let t10;
171
+ let t11;
172
+ if ($[32] === Symbol.for("react.memo_cache_sentinel")) {
173
+ t10 = (event_1) => {
174
+ if (hasFiles(event_1)) event_1.preventDefault();
175
+ };
176
+ t11 = (event_2) => {
177
+ if (!event_2.currentTarget.contains(event_2.relatedTarget)) setDragging(false);
178
+ };
179
+ $[32] = t10;
180
+ $[33] = t11;
181
+ } else {
182
+ t10 = $[32];
183
+ t11 = $[33];
184
+ }
185
+ let t12;
186
+ if ($[34] !== disabled || $[35] !== take) {
187
+ t12 = (event_3) => {
188
+ if (!hasFiles(event_3)) return;
189
+ event_3.preventDefault();
190
+ setDragging(false);
191
+ if (!disabled) take(event_3.dataTransfer.files);
192
+ };
193
+ $[34] = disabled;
194
+ $[35] = take;
195
+ $[36] = t12;
196
+ } else t12 = $[36];
197
+ const t13 = inputProps?.className;
198
+ let t14;
199
+ if ($[37] !== t13) {
200
+ t14 = cx("oui-dropzone__input", t13);
201
+ $[37] = t13;
202
+ $[38] = t14;
203
+ } else t14 = $[38];
204
+ const t15 = invalid || void 0;
205
+ let t16;
206
+ if ($[39] !== take) {
207
+ t16 = (event_4) => take(event_4.target.files);
208
+ $[39] = take;
209
+ $[40] = t16;
210
+ } else t16 = $[40];
211
+ let t17;
212
+ if ($[41] !== accept || $[42] !== disabled || $[43] !== inputProps || $[44] !== multiple || $[45] !== t14 || $[46] !== t15 || $[47] !== t16) {
213
+ t17 = /* @__PURE__ */ jsx("input", {
214
+ ...inputProps,
215
+ ref: inputRef,
216
+ type: "file",
217
+ className: t14,
218
+ accept,
219
+ multiple,
220
+ disabled,
221
+ "aria-invalid": t15,
222
+ onChange: t16
223
+ });
224
+ $[41] = accept;
225
+ $[42] = disabled;
226
+ $[43] = inputProps;
227
+ $[44] = multiple;
228
+ $[45] = t14;
229
+ $[46] = t15;
230
+ $[47] = t16;
231
+ $[48] = t17;
232
+ } else t17 = $[48];
233
+ let t18;
234
+ if ($[49] !== icon) {
235
+ t18 = icon ?? /* @__PURE__ */ jsx(UploadIcon, {});
236
+ $[49] = icon;
237
+ $[50] = t18;
238
+ } else t18 = $[50];
239
+ let t19;
240
+ if ($[51] !== t18) {
241
+ t19 = /* @__PURE__ */ jsx("span", {
242
+ className: "oui-dropzone__icon",
243
+ children: t18
244
+ });
245
+ $[51] = t18;
246
+ $[52] = t19;
247
+ } else t19 = $[52];
248
+ const t20 = title ?? (multiple ? "Drop files here or click to browse" : "Drop a file here or click to browse");
249
+ let t21;
250
+ if ($[53] !== t20) {
251
+ t21 = /* @__PURE__ */ jsx("span", {
252
+ className: "oui-dropzone__title",
253
+ children: t20
254
+ });
255
+ $[53] = t20;
256
+ $[54] = t21;
257
+ } else t21 = $[54];
258
+ let t22;
259
+ if ($[55] !== hint) {
260
+ t22 = hint != null && /* @__PURE__ */ jsx("span", {
261
+ className: "oui-dropzone__hint",
262
+ children: hint
263
+ });
264
+ $[55] = hint;
265
+ $[56] = t22;
266
+ } else t22 = $[56];
267
+ let t23;
268
+ if ($[57] !== t21 || $[58] !== t22) {
269
+ t23 = /* @__PURE__ */ jsxs("span", {
270
+ className: "oui-dropzone__text",
271
+ children: [t21, t22]
272
+ });
273
+ $[57] = t21;
274
+ $[58] = t22;
275
+ $[59] = t23;
276
+ } else t23 = $[59];
277
+ let t24;
278
+ if ($[60] !== children || $[61] !== props || $[62] !== ref || $[63] !== size || $[64] !== t12 || $[65] !== t17 || $[66] !== t19 || $[67] !== t23 || $[68] !== t5 || $[69] !== t6 || $[70] !== t7 || $[71] !== t8 || $[72] !== t9) {
279
+ t24 = /* @__PURE__ */ jsxs("label", {
280
+ ref,
281
+ ...props,
282
+ className: t5,
283
+ "data-size": size,
284
+ "data-dragging": t6,
285
+ "data-disabled": t7,
286
+ "data-invalid": t8,
287
+ onDragEnter: t9,
288
+ onDragOver: t10,
289
+ onDragLeave: t11,
290
+ onDrop: t12,
291
+ children: [
292
+ t17,
293
+ t19,
294
+ t23,
295
+ children
296
+ ]
297
+ });
298
+ $[60] = children;
299
+ $[61] = props;
300
+ $[62] = ref;
301
+ $[63] = size;
302
+ $[64] = t12;
303
+ $[65] = t17;
304
+ $[66] = t19;
305
+ $[67] = t23;
306
+ $[68] = t5;
307
+ $[69] = t6;
308
+ $[70] = t7;
309
+ $[71] = t8;
310
+ $[72] = t9;
311
+ $[73] = t24;
312
+ } else t24 = $[73];
313
+ return t24;
314
+ }
315
+ function _temp(event) {
316
+ return event.dataTransfer.types.includes("Files");
317
+ }
318
+ /** One file in a list: name, size, upload progress or error, and a remove button. */
319
+ function FileItem(t0) {
320
+ const $ = c(59);
321
+ let actions;
322
+ let className;
323
+ let error;
324
+ let icon;
325
+ let locale;
326
+ let name;
327
+ let onRemove;
328
+ let props;
329
+ let ref;
330
+ let removeLabel;
331
+ let size;
332
+ let t1;
333
+ let t2;
334
+ if ($[0] !== t0) {
335
+ ({name, size, icon, status: t1, progress: t2, error, onRemove, removeLabel, actions, locale, className, ref, ...props} = t0);
336
+ $[0] = t0;
337
+ $[1] = actions;
338
+ $[2] = className;
339
+ $[3] = error;
340
+ $[4] = icon;
341
+ $[5] = locale;
342
+ $[6] = name;
343
+ $[7] = onRemove;
344
+ $[8] = props;
345
+ $[9] = ref;
346
+ $[10] = removeLabel;
347
+ $[11] = size;
348
+ $[12] = t1;
349
+ $[13] = t2;
350
+ } else {
351
+ actions = $[1];
352
+ className = $[2];
353
+ error = $[3];
354
+ icon = $[4];
355
+ locale = $[5];
356
+ name = $[6];
357
+ onRemove = $[7];
358
+ props = $[8];
359
+ ref = $[9];
360
+ removeLabel = $[10];
361
+ size = $[11];
362
+ t1 = $[12];
363
+ t2 = $[13];
364
+ }
365
+ const status = t1 === void 0 ? "idle" : t1;
366
+ const progress = t2 === void 0 ? null : t2;
367
+ const uploading = status === "uploading";
368
+ let t3;
369
+ if ($[14] !== locale || $[15] !== size) {
370
+ t3 = size != null && formatFileSize(size, locale);
371
+ $[14] = locale;
372
+ $[15] = size;
373
+ $[16] = t3;
374
+ } else t3 = $[16];
375
+ let t4;
376
+ if ($[17] !== progress || $[18] !== uploading) {
377
+ t4 = uploading && progress != null && `${Math.round(progress)}%`;
378
+ $[17] = progress;
379
+ $[18] = uploading;
380
+ $[19] = t4;
381
+ } else t4 = $[19];
382
+ let t5;
383
+ if ($[20] !== t3 || $[21] !== t4) {
384
+ t5 = [t3, t4].filter(Boolean);
385
+ $[20] = t3;
386
+ $[21] = t4;
387
+ $[22] = t5;
388
+ } else t5 = $[22];
389
+ const meta = t5;
390
+ let t6;
391
+ if ($[23] !== className) {
392
+ t6 = cx("oui-file-item", className);
393
+ $[23] = className;
394
+ $[24] = t6;
395
+ } else t6 = $[24];
396
+ let t7;
397
+ if ($[25] !== icon) {
398
+ t7 = icon ?? /* @__PURE__ */ jsx(FileIcon, {});
399
+ $[25] = icon;
400
+ $[26] = t7;
401
+ } else t7 = $[26];
402
+ let t8;
403
+ if ($[27] !== t7) {
404
+ t8 = /* @__PURE__ */ jsx("span", {
405
+ className: "oui-file-item__icon",
406
+ children: t7
407
+ });
408
+ $[27] = t7;
409
+ $[28] = t8;
410
+ } else t8 = $[28];
411
+ let t9;
412
+ if ($[29] !== name) {
413
+ t9 = /* @__PURE__ */ jsx("span", {
414
+ className: "oui-file-item__name",
415
+ title: name,
416
+ children: name
417
+ });
418
+ $[29] = name;
419
+ $[30] = t9;
420
+ } else t9 = $[30];
421
+ let t10;
422
+ if ($[31] !== error || $[32] !== meta || $[33] !== status) {
423
+ t10 = status === "error" && error ? /* @__PURE__ */ jsx("span", {
424
+ className: "oui-file-item__meta",
425
+ role: "alert",
426
+ children: error
427
+ }) : meta.length > 0 && /* @__PURE__ */ jsx("span", {
428
+ className: "oui-file-item__meta",
429
+ children: meta.join(" · ")
430
+ });
431
+ $[31] = error;
432
+ $[32] = meta;
433
+ $[33] = status;
434
+ $[34] = t10;
435
+ } else t10 = $[34];
436
+ let t11;
437
+ if ($[35] !== name || $[36] !== progress || $[37] !== uploading) {
438
+ t11 = uploading && /* @__PURE__ */ jsx(Progress, {
439
+ size: "sm",
440
+ value: progress,
441
+ "aria-label": name
442
+ });
443
+ $[35] = name;
444
+ $[36] = progress;
445
+ $[37] = uploading;
446
+ $[38] = t11;
447
+ } else t11 = $[38];
448
+ let t12;
449
+ if ($[39] !== t10 || $[40] !== t11 || $[41] !== t9) {
450
+ t12 = /* @__PURE__ */ jsxs("div", {
451
+ className: "oui-file-item__body",
452
+ children: [
453
+ t9,
454
+ t10,
455
+ t11
456
+ ]
457
+ });
458
+ $[39] = t10;
459
+ $[40] = t11;
460
+ $[41] = t9;
461
+ $[42] = t12;
462
+ } else t12 = $[42];
463
+ let t13;
464
+ if ($[43] !== status) {
465
+ t13 = status === "success" && /* @__PURE__ */ jsx(CircleCheckIcon, { className: "oui-file-item__done" });
466
+ $[43] = status;
467
+ $[44] = t13;
468
+ } else t13 = $[44];
469
+ let t14;
470
+ if ($[45] !== name || $[46] !== onRemove || $[47] !== removeLabel) {
471
+ t14 = onRemove && /* @__PURE__ */ jsx(IconButton, {
472
+ size: "sm",
473
+ "aria-label": removeLabel ?? `Remove ${name}`,
474
+ onClick: onRemove,
475
+ children: /* @__PURE__ */ jsx(XIcon, {})
476
+ });
477
+ $[45] = name;
478
+ $[46] = onRemove;
479
+ $[47] = removeLabel;
480
+ $[48] = t14;
481
+ } else t14 = $[48];
482
+ let t15;
483
+ if ($[49] !== actions || $[50] !== props || $[51] !== ref || $[52] !== status || $[53] !== t12 || $[54] !== t13 || $[55] !== t14 || $[56] !== t6 || $[57] !== t8) {
484
+ t15 = /* @__PURE__ */ jsxs("div", {
485
+ ref,
486
+ className: t6,
487
+ "data-status": status,
488
+ ...props,
489
+ children: [
490
+ t8,
491
+ t12,
492
+ t13,
493
+ actions,
494
+ t14
495
+ ]
496
+ });
497
+ $[49] = actions;
498
+ $[50] = props;
499
+ $[51] = ref;
500
+ $[52] = status;
501
+ $[53] = t12;
502
+ $[54] = t13;
503
+ $[55] = t14;
504
+ $[56] = t6;
505
+ $[57] = t8;
506
+ $[58] = t15;
507
+ } else t15 = $[58];
508
+ return t15;
509
+ }
510
+ var defaultLabels = { remove: (name) => `Remove ${name}` };
511
+ var sameFile = (a, b) => a.name === b.name && a.size === b.size && a.lastModified === b.lastModified;
512
+ /**
513
+ * File field: a dropzone plus the list of chosen files. It only collects
514
+ * `File` objects; upload them yourself and report progress through `fileState`.
515
+ */
516
+ function FileUpload(t0) {
517
+ const $ = c(54);
518
+ const { value, defaultValue, onValueChange, accept, multiple, maxSize, maxFiles, onReject, fileState, size, icon, title, hint, label, description, error, required, disabled, name, id: idProp, className, locale, labels, ref } = t0;
519
+ const text = {
520
+ ...defaultLabels,
521
+ ...labels
522
+ };
523
+ let t1;
524
+ if ($[0] !== defaultValue) {
525
+ t1 = defaultValue ?? [];
526
+ $[0] = defaultValue;
527
+ $[1] = t1;
528
+ } else t1 = $[1];
529
+ const [inner, setInner] = React.useState(t1);
530
+ const files = value ?? inner;
531
+ const generatedId = React.useId();
532
+ const id = idProp ?? generatedId;
533
+ const descriptionId = description != null ? `${id}-description` : null;
534
+ const errorId = error ? `${id}-error` : null;
535
+ let t2;
536
+ if ($[2] !== descriptionId || $[3] !== errorId) {
537
+ t2 = cx(descriptionId, errorId) || void 0;
538
+ $[2] = descriptionId;
539
+ $[3] = errorId;
540
+ $[4] = t2;
541
+ } else t2 = $[4];
542
+ const describedBy = t2;
543
+ let t3;
544
+ if ($[5] !== onValueChange) {
545
+ t3 = (next) => {
546
+ setInner(next);
547
+ onValueChange?.(next);
548
+ };
549
+ $[5] = onValueChange;
550
+ $[6] = t3;
551
+ } else t3 = $[6];
552
+ const commit = t3;
553
+ let t4;
554
+ if ($[7] !== commit || $[8] !== files || $[9] !== maxFiles || $[10] !== multiple || $[11] !== onReject) {
555
+ t4 = (added) => {
556
+ if (!multiple) {
557
+ commit(added.slice(0, 1));
558
+ return;
559
+ }
560
+ const fresh = added.filter((file) => !files.some((existing) => sameFile(existing, file)));
561
+ const room = maxFiles == null ? fresh.length : Math.max(0, maxFiles - files.length);
562
+ if (fresh.length > room) onReject?.(fresh.slice(room).map(_temp2));
563
+ if (room > 0 && fresh.length > 0) commit([...files, ...fresh.slice(0, room)]);
564
+ };
565
+ $[7] = commit;
566
+ $[8] = files;
567
+ $[9] = maxFiles;
568
+ $[10] = multiple;
569
+ $[11] = onReject;
570
+ $[12] = t4;
571
+ } else t4 = $[12];
572
+ const add = t4;
573
+ let t5;
574
+ if ($[13] !== className) {
575
+ t5 = cx("oui-field", "oui-file-upload", className);
576
+ $[13] = className;
577
+ $[14] = t5;
578
+ } else t5 = $[14];
579
+ const t6 = disabled || void 0;
580
+ const t7 = error ? "" : void 0;
581
+ let t8;
582
+ if ($[15] !== id || $[16] !== label || $[17] !== required) {
583
+ t8 = label != null && /* @__PURE__ */ jsxs("label", {
584
+ htmlFor: id,
585
+ className: "oui-field__label",
586
+ children: [label, required && /* @__PURE__ */ jsx("span", {
587
+ className: "oui-field__required",
588
+ "aria-hidden": true,
589
+ children: "*"
590
+ })]
591
+ });
592
+ $[15] = id;
593
+ $[16] = label;
594
+ $[17] = required;
595
+ $[18] = t8;
596
+ } else t8 = $[18];
597
+ const t9 = Boolean(error);
598
+ let t10;
599
+ if ($[19] !== describedBy || $[20] !== id || $[21] !== name || $[22] !== required) {
600
+ t10 = {
601
+ id,
602
+ name,
603
+ required,
604
+ "aria-describedby": describedBy
605
+ };
606
+ $[19] = describedBy;
607
+ $[20] = id;
608
+ $[21] = name;
609
+ $[22] = required;
610
+ $[23] = t10;
611
+ } else t10 = $[23];
612
+ let t11;
613
+ if ($[24] !== accept || $[25] !== add || $[26] !== disabled || $[27] !== files || $[28] !== hint || $[29] !== icon || $[30] !== maxSize || $[31] !== multiple || $[32] !== onReject || $[33] !== ref || $[34] !== size || $[35] !== t10 || $[36] !== t9 || $[37] !== title) {
614
+ t11 = /* @__PURE__ */ jsx(Dropzone, {
615
+ ref,
616
+ files,
617
+ onFiles: add,
618
+ onReject,
619
+ accept,
620
+ multiple,
621
+ maxSize,
622
+ disabled,
623
+ invalid: t9,
624
+ size,
625
+ icon,
626
+ title,
627
+ hint,
628
+ inputProps: t10
629
+ });
630
+ $[24] = accept;
631
+ $[25] = add;
632
+ $[26] = disabled;
633
+ $[27] = files;
634
+ $[28] = hint;
635
+ $[29] = icon;
636
+ $[30] = maxSize;
637
+ $[31] = multiple;
638
+ $[32] = onReject;
639
+ $[33] = ref;
640
+ $[34] = size;
641
+ $[35] = t10;
642
+ $[36] = t9;
643
+ $[37] = title;
644
+ $[38] = t11;
645
+ } else t11 = $[38];
646
+ const t12 = files.length > 0 && /* @__PURE__ */ jsx("ul", {
647
+ className: "oui-file-upload__list",
648
+ children: files.map((file_1, index) => /* @__PURE__ */ jsx("li", { children: /* @__PURE__ */ jsx(FileItem, {
649
+ name: file_1.name,
650
+ size: file_1.size,
651
+ locale,
652
+ removeLabel: text.remove(file_1.name),
653
+ onRemove: disabled ? void 0 : () => commit(files.filter((_, position) => position !== index)),
654
+ ...fileState?.(file_1)
655
+ }) }, `${file_1.name}-${file_1.size}-${file_1.lastModified}`))
656
+ });
657
+ let t13;
658
+ if ($[39] !== description || $[40] !== id) {
659
+ t13 = description != null && /* @__PURE__ */ jsx("p", {
660
+ id: `${id}-description`,
661
+ className: "oui-field__description",
662
+ children: description
663
+ });
664
+ $[39] = description;
665
+ $[40] = id;
666
+ $[41] = t13;
667
+ } else t13 = $[41];
668
+ let t14;
669
+ if ($[42] !== error || $[43] !== id) {
670
+ t14 = error && /* @__PURE__ */ jsx("div", {
671
+ id: `${id}-error`,
672
+ className: "oui-field__error",
673
+ children: error
674
+ });
675
+ $[42] = error;
676
+ $[43] = id;
677
+ $[44] = t14;
678
+ } else t14 = $[44];
679
+ let t15;
680
+ if ($[45] !== t11 || $[46] !== t12 || $[47] !== t13 || $[48] !== t14 || $[49] !== t5 || $[50] !== t6 || $[51] !== t7 || $[52] !== t8) {
681
+ t15 = /* @__PURE__ */ jsxs("div", {
682
+ className: t5,
683
+ "data-disabled": t6,
684
+ "data-invalid": t7,
685
+ children: [
686
+ t8,
687
+ t11,
688
+ t12,
689
+ t13,
690
+ t14
691
+ ]
692
+ });
693
+ $[45] = t11;
694
+ $[46] = t12;
695
+ $[47] = t13;
696
+ $[48] = t14;
697
+ $[49] = t5;
698
+ $[50] = t6;
699
+ $[51] = t7;
700
+ $[52] = t8;
701
+ $[53] = t15;
702
+ } else t15 = $[53];
703
+ return t15;
704
+ }
705
+ function _temp2(file_0) {
706
+ return {
707
+ file: file_0,
708
+ reason: "count"
709
+ };
710
+ }
711
+ //#endregion
712
+ export { Dropzone, FileItem, FileUpload, formatFileSize };
713
+
714
+ //# sourceMappingURL=FileUpload.js.map