ixia-ui-react 1.8.0 → 2.0.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 (270) hide show
  1. package/README.md +24 -1
  2. package/dist/accordion/index.d.ts +41 -0
  3. package/dist/accordion/index.js +142 -0
  4. package/dist/accordion/index.js.map +1 -0
  5. package/dist/alert/index.d.ts +22 -0
  6. package/dist/alert/index.js +1 -0
  7. package/dist/alert-Dcu9R8CY.js +73 -0
  8. package/dist/alert-Dcu9R8CY.js.map +1 -0
  9. package/dist/alert-dialog/index.d.ts +39 -0
  10. package/dist/alert-dialog/index.js +134 -0
  11. package/dist/alert-dialog/index.js.map +1 -0
  12. package/dist/autocomplete/index.d.ts +2 -0
  13. package/dist/autocomplete/index.js +1 -0
  14. package/dist/autocomplete-BfpWVO1l.js +169 -0
  15. package/dist/autocomplete-BfpWVO1l.js.map +1 -0
  16. package/dist/avatar/index.d.ts +2 -0
  17. package/dist/avatar/index.js +1 -0
  18. package/dist/avatar-Bp4gZh21.js +93 -0
  19. package/dist/avatar-Bp4gZh21.js.map +1 -0
  20. package/dist/badge/index.d.ts +2 -0
  21. package/dist/badge/index.js +1 -0
  22. package/dist/badge-Cl-9WTW-.js +160 -0
  23. package/dist/badge-Cl-9WTW-.js.map +1 -0
  24. package/dist/bento-box/index.d.ts +30 -0
  25. package/dist/bento-box/index.js +103 -0
  26. package/dist/bento-box/index.js.map +1 -0
  27. package/dist/breadcrumb/index.d.ts +18 -0
  28. package/dist/breadcrumb/index.js +58 -0
  29. package/dist/breadcrumb/index.js.map +1 -0
  30. package/dist/button/index.d.ts +3 -0
  31. package/dist/button/index.js +1 -0
  32. package/dist/button-BpUC-R1J.js +307 -0
  33. package/dist/button-BpUC-R1J.js.map +1 -0
  34. package/dist/button-group/index.d.ts +2 -0
  35. package/dist/button-group/index.js +1 -0
  36. package/dist/button-group-7azbqlcO.js +269 -0
  37. package/dist/button-group-7azbqlcO.js.map +1 -0
  38. package/dist/button.types-BFKrBCGd.d.ts +10 -0
  39. package/dist/calendar/index.d.ts +63 -0
  40. package/dist/calendar/index.js +292 -0
  41. package/dist/calendar/index.js.map +1 -0
  42. package/dist/chart/index.d.ts +87 -0
  43. package/dist/chart/index.js +262 -0
  44. package/dist/chart/index.js.map +1 -0
  45. package/dist/checkbox/index.d.ts +2 -0
  46. package/dist/checkbox/index.js +1 -0
  47. package/dist/checkbox-BuUZ1Lly.js +54 -0
  48. package/dist/checkbox-BuUZ1Lly.js.map +1 -0
  49. package/dist/checkbox-group/index.d.ts +6 -0
  50. package/dist/checkbox-group/index.js +17 -0
  51. package/dist/checkbox-group/index.js.map +1 -0
  52. package/dist/cn-BDi0DfT5.js +29 -0
  53. package/dist/cn-BDi0DfT5.js.map +1 -0
  54. package/dist/code-block/index.d.ts +50 -0
  55. package/dist/code-block/index.js +208 -0
  56. package/dist/code-block/index.js.map +1 -0
  57. package/dist/collapsible/index.d.ts +2 -0
  58. package/dist/collapsible/index.js +1 -0
  59. package/dist/collapsible-BVqrh0Q0.js +44 -0
  60. package/dist/collapsible-BVqrh0Q0.js.map +1 -0
  61. package/dist/color-channel-slider/index.d.ts +2 -0
  62. package/dist/color-channel-slider/index.js +1 -0
  63. package/dist/color-channel-slider-h8mUPJ35.js +70 -0
  64. package/dist/color-channel-slider-h8mUPJ35.js.map +1 -0
  65. package/dist/color-picker/index.d.ts +137 -0
  66. package/dist/color-picker/index.js +621 -0
  67. package/dist/color-picker/index.js.map +1 -0
  68. package/dist/combobox/index.d.ts +64 -0
  69. package/dist/combobox/index.js +289 -0
  70. package/dist/combobox/index.js.map +1 -0
  71. package/dist/context-menu/index.d.ts +49 -0
  72. package/dist/context-menu/index.js +166 -0
  73. package/dist/context-menu/index.js.map +1 -0
  74. package/dist/dialog/index.d.ts +36 -0
  75. package/dist/dialog/index.js +119 -0
  76. package/dist/dialog/index.js.map +1 -0
  77. package/dist/drawer/index.d.ts +31 -0
  78. package/dist/drawer/index.js +95 -0
  79. package/dist/drawer/index.js.map +1 -0
  80. package/dist/dropzone/index.d.ts +70 -0
  81. package/dist/dropzone/index.js +479 -0
  82. package/dist/dropzone/index.js.map +1 -0
  83. package/dist/field/index.d.ts +2 -0
  84. package/dist/field/index.js +1 -0
  85. package/dist/field-DTL7eA5y.js +254 -0
  86. package/dist/field-DTL7eA5y.js.map +1 -0
  87. package/dist/form/index.d.ts +220 -0
  88. package/dist/form/index.js +3 -0
  89. package/dist/form-BxMg796f.js +192 -0
  90. package/dist/form-BxMg796f.js.map +1 -0
  91. package/dist/has-single-element-child-DLGI0Dh2.js +12 -0
  92. package/dist/has-single-element-child-DLGI0Dh2.js.map +1 -0
  93. package/dist/hooks/index.d.ts +26 -0
  94. package/dist/hooks/index.js +1 -0
  95. package/dist/hooks-DUm-q_ig.js +68 -0
  96. package/dist/hooks-DUm-q_ig.js.map +1 -0
  97. package/dist/icon/index.d.ts +2 -0
  98. package/dist/icon/index.js +1 -0
  99. package/dist/icon-D3JWfCa2.js +85 -0
  100. package/dist/icon-D3JWfCa2.js.map +1 -0
  101. package/dist/icon-container/index.d.ts +10 -0
  102. package/dist/icon-container/index.js +64 -0
  103. package/dist/icon-container/index.js.map +1 -0
  104. package/dist/index-0ZQzIKoE.d.ts +11 -0
  105. package/dist/index-B3MK1QYh.d.ts +11 -0
  106. package/dist/index-BJVMIPq4.d.ts +54 -0
  107. package/dist/index-BsV-u_jc.d.ts +4 -0
  108. package/dist/index-BygR7cUT.d.ts +22 -0
  109. package/dist/index-BzTOLSgZ.d.ts +9 -0
  110. package/dist/index-C15xiG9O.d.ts +14 -0
  111. package/dist/index-C2zco6-C.d.ts +15 -0
  112. package/dist/index-CIDOd4Z8.d.ts +56 -0
  113. package/dist/index-CQti9gFb.d.ts +49 -0
  114. package/dist/index-CiE-Rqit.d.ts +70 -0
  115. package/dist/index-D1kkOg9k.d.ts +14 -0
  116. package/dist/index-DLfdAked.d.ts +34 -0
  117. package/dist/index-DMaW_XF1.d.ts +24 -0
  118. package/dist/index-Db_QGr6S.d.ts +5 -0
  119. package/dist/index-DdFxZ3Xr.d.ts +22 -0
  120. package/dist/index-DfNHJF0t.d.ts +33 -0
  121. package/dist/index-DyQYoAUf.d.ts +29 -0
  122. package/dist/index-N2CBSUDu.d.ts +14 -0
  123. package/dist/index-PuhTRMce.d.ts +11 -0
  124. package/dist/index-Wb_tILYa.d.ts +24 -0
  125. package/dist/index-bVyqfhJS.d.ts +4 -0
  126. package/dist/index-x4f8gnaI.d.ts +15 -0
  127. package/dist/input/index.d.ts +3 -0
  128. package/dist/input/index.js +1 -0
  129. package/dist/input-Laj6dwtK.js +179 -0
  130. package/dist/input-Laj6dwtK.js.map +1 -0
  131. package/dist/input-group/index.d.ts +2 -0
  132. package/dist/input-group/index.js +1 -0
  133. package/dist/input-group-CgdazGrY.js +111 -0
  134. package/dist/input-group-CgdazGrY.js.map +1 -0
  135. package/dist/input-otp/index.d.ts +13 -0
  136. package/dist/input-otp/index.js +44 -0
  137. package/dist/input-otp/index.js.map +1 -0
  138. package/dist/input.types-816rEVWU.d.ts +20 -0
  139. package/dist/input.types-D0gyoaQv.js +48 -0
  140. package/dist/input.types-D0gyoaQv.js.map +1 -0
  141. package/dist/kbd/index.d.ts +9 -0
  142. package/dist/kbd/index.js +25 -0
  143. package/dist/kbd/index.js.map +1 -0
  144. package/dist/label/index.d.ts +8 -0
  145. package/dist/label/index.js +1 -0
  146. package/dist/label-BgpayDvN.js +27 -0
  147. package/dist/label-BgpayDvN.js.map +1 -0
  148. package/dist/layer-tree/index.d.ts +728 -0
  149. package/dist/layer-tree/index.js +685 -0
  150. package/dist/layer-tree/index.js.map +1 -0
  151. package/dist/map/google/index.d.ts +143 -0
  152. package/dist/map/google/index.js +445 -0
  153. package/dist/map/google/index.js.map +1 -0
  154. package/dist/map/index.d.ts +94 -0
  155. package/dist/map/index.js +208 -0
  156. package/dist/map/index.js.map +1 -0
  157. package/dist/map.context-Dw1D7E8m.js +11 -0
  158. package/dist/map.context-Dw1D7E8m.js.map +1 -0
  159. package/dist/menu/index.d.ts +2 -0
  160. package/dist/menu/index.js +1 -0
  161. package/dist/menu-sf13cnGp.js +173 -0
  162. package/dist/menu-sf13cnGp.js.map +1 -0
  163. package/dist/menu-tone-DWBEHoX2.js +22 -0
  164. package/dist/menu-tone-DWBEHoX2.js.map +1 -0
  165. package/dist/meter/index.d.ts +2 -0
  166. package/dist/meter/index.js +1 -0
  167. package/dist/meter-HD5taq57.js +116 -0
  168. package/dist/meter-HD5taq57.js.map +1 -0
  169. package/dist/nav-bar/index.d.ts +25 -0
  170. package/dist/nav-bar/index.js +133 -0
  171. package/dist/nav-bar/index.js.map +1 -0
  172. package/dist/navigation-menu/index.d.ts +43 -0
  173. package/dist/navigation-menu/index.js +176 -0
  174. package/dist/navigation-menu/index.js.map +1 -0
  175. package/dist/number-field/index.d.ts +14 -0
  176. package/dist/number-field/index.js +116 -0
  177. package/dist/number-field/index.js.map +1 -0
  178. package/dist/popover/index.d.ts +2 -0
  179. package/dist/popover/index.js +1 -0
  180. package/dist/popover-B1s4xXrX.js +114 -0
  181. package/dist/popover-B1s4xXrX.js.map +1 -0
  182. package/dist/preview-card/index.d.ts +13 -0
  183. package/dist/preview-card/index.js +35 -0
  184. package/dist/preview-card/index.js.map +1 -0
  185. package/dist/profile/index.d.ts +21 -0
  186. package/dist/profile/index.js +52 -0
  187. package/dist/profile/index.js.map +1 -0
  188. package/dist/progress/index.d.ts +23 -0
  189. package/dist/progress/index.js +97 -0
  190. package/dist/progress/index.js.map +1 -0
  191. package/dist/radar-ping/index.d.ts +11 -0
  192. package/dist/radar-ping/index.js +49 -0
  193. package/dist/radar-ping/index.js.map +1 -0
  194. package/dist/radio-group/index.d.ts +2 -0
  195. package/dist/radio-group/index.js +1 -0
  196. package/dist/radio-group-Dj43u35Z.js +47 -0
  197. package/dist/radio-group-Dj43u35Z.js.map +1 -0
  198. package/dist/resizeable/index.d.ts +11 -0
  199. package/dist/resizeable/index.js +31 -0
  200. package/dist/resizeable/index.js.map +1 -0
  201. package/dist/scroll-area/index.d.ts +11 -0
  202. package/dist/scroll-area/index.js +51 -0
  203. package/dist/scroll-area/index.js.map +1 -0
  204. package/dist/select/index.d.ts +2 -0
  205. package/dist/select/index.js +1 -0
  206. package/dist/select-DncJXYim.js +159 -0
  207. package/dist/select-DncJXYim.js.map +1 -0
  208. package/dist/separator/index.d.ts +2 -0
  209. package/dist/separator/index.js +1 -0
  210. package/dist/separator-DgIQp1cB.js +97 -0
  211. package/dist/separator-DgIQp1cB.js.map +1 -0
  212. package/dist/sidebar/index.d.ts +80 -0
  213. package/dist/sidebar/index.js +334 -0
  214. package/dist/sidebar/index.js.map +1 -0
  215. package/dist/site-header/index.d.ts +22 -0
  216. package/dist/site-header/index.js +55 -0
  217. package/dist/site-header/index.js.map +1 -0
  218. package/dist/skeleton/index.d.ts +4 -0
  219. package/dist/skeleton/index.js +1 -0
  220. package/dist/skeleton-DSG3FWby.js +13 -0
  221. package/dist/skeleton-DSG3FWby.js.map +1 -0
  222. package/dist/slider/index.d.ts +2 -0
  223. package/dist/slider/index.js +1 -0
  224. package/dist/slider-D_XlV4OW.js +114 -0
  225. package/dist/slider-D_XlV4OW.js.map +1 -0
  226. package/dist/slider-group/index.d.ts +46 -0
  227. package/dist/slider-group/index.js +198 -0
  228. package/dist/slider-group/index.js.map +1 -0
  229. package/dist/styles.css +4 -1
  230. package/dist/switch/index.d.ts +2 -0
  231. package/dist/switch/index.js +1 -0
  232. package/dist/switch-DXHixGHe.js +23 -0
  233. package/dist/switch-DXHixGHe.js.map +1 -0
  234. package/dist/table/index.d.ts +920 -0
  235. package/dist/table/index.js +1544 -0
  236. package/dist/table/index.js.map +1 -0
  237. package/dist/tabs/index.d.ts +2 -0
  238. package/dist/tabs/index.js +1 -0
  239. package/dist/tabs-DTC7coap.js +270 -0
  240. package/dist/tabs-DTC7coap.js.map +1 -0
  241. package/dist/text-area/index.d.ts +2 -0
  242. package/dist/text-area/index.js +1 -0
  243. package/dist/text-area-H6HjKnv_.js +50 -0
  244. package/dist/text-area-H6HjKnv_.js.map +1 -0
  245. package/dist/toast/index.d.ts +65 -0
  246. package/dist/toast/index.js +216 -0
  247. package/dist/toast/index.js.map +1 -0
  248. package/dist/toggle/index.d.ts +2 -0
  249. package/dist/toggle/index.js +1 -0
  250. package/dist/toggle-ZT9thVmz.js +73 -0
  251. package/dist/toggle-ZT9thVmz.js.map +1 -0
  252. package/dist/toggle-group/index.d.ts +10 -0
  253. package/dist/toggle-group/index.js +63 -0
  254. package/dist/toggle-group/index.js.map +1 -0
  255. package/dist/toggle-group-context-CBNZEf1I.js +6 -0
  256. package/dist/toggle-group-context-CBNZEf1I.js.map +1 -0
  257. package/dist/tooltip/index.d.ts +18 -0
  258. package/dist/tooltip/index.js +1 -0
  259. package/dist/tooltip-B6z3tDbW.js +41 -0
  260. package/dist/tooltip-B6z3tDbW.js.map +1 -0
  261. package/dist/trim-text-children-CQRFg2fL.js +33 -0
  262. package/dist/trim-text-children-CQRFg2fL.js.map +1 -0
  263. package/dist/utils/index.d.ts +4 -0
  264. package/dist/utils/index.js +3 -0
  265. package/dist/utils-BI2x7nW5.js +5 -0
  266. package/dist/utils-BI2x7nW5.js.map +1 -0
  267. package/package.json +100 -31
  268. package/dist/index.d.ts +0 -8000
  269. package/dist/index.js +0 -17274
  270. package/dist/index.js.map +0 -1
@@ -0,0 +1,479 @@
1
+ import { t as cn } from "../cn-BDi0DfT5.js";
2
+ import { n as Icon } from "../icon-D3JWfCa2.js";
3
+ import { t as Button } from "../button-BpUC-R1J.js";
4
+ import { c as MeterFooter, n as MeterValue, o as MeterIndicator, r as MeterTrack, t as Meter } from "../meter-HD5taq57.js";
5
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
6
+ import React, { useId } from "react";
7
+ // src/components/dropzone/dropzone.utils.ts
8
+ const BYTES_PER_UNIT = 1e3;
9
+ const FIRST_UNIT_INDEX = 0;
10
+ const UNIT_STEP = 1;
11
+ const LAST_UNIT_OFFSET = 1;
12
+ const NO_DECIMALS = 0;
13
+ const SINGLE_DECIMAL = 1;
14
+ const EMPTY_LENGTH = 0;
15
+ const PATTERN_START = 0;
16
+ const formatFileSize = (bytes) => {
17
+ if (bytes < BYTES_PER_UNIT) return `${bytes} B`;
18
+ const units = [
19
+ "KB",
20
+ "MB",
21
+ "GB",
22
+ "TB"
23
+ ];
24
+ let size = bytes / BYTES_PER_UNIT, unitIndex = FIRST_UNIT_INDEX, decimals = NO_DECIMALS;
25
+ while (size >= BYTES_PER_UNIT && unitIndex < units.length - LAST_UNIT_OFFSET) {
26
+ size /= BYTES_PER_UNIT;
27
+ unitIndex += UNIT_STEP;
28
+ }
29
+ if (!Number.isInteger(size)) decimals = SINGLE_DECIMAL;
30
+ return `${size.toFixed(decimals)}${units[unitIndex]}`;
31
+ };
32
+ const getFileKey = (file) => `${file.name}-${file.size}-${file.lastModified}`;
33
+ const isFileTypeAccepted = (file, acceptedFileTypes) => {
34
+ if (acceptedFileTypes.length === EMPTY_LENGTH) return true;
35
+ const fileName = file.name.toLowerCase(), fileType = file.type.toLowerCase();
36
+ return acceptedFileTypes.some((accepted) => {
37
+ const pattern = accepted.toLowerCase();
38
+ if (pattern.startsWith(".")) return fileName.endsWith(pattern);
39
+ if (pattern.endsWith("/*")) return fileType.startsWith(pattern.slice(PATTERN_START, -1));
40
+ return fileType === pattern;
41
+ });
42
+ };
43
+ const DropzoneContext = React.createContext(void 0);
44
+ const useDropzone = () => {
45
+ const context = React.useContext(DropzoneContext);
46
+ if (!context) throw new Error("useDropzone must be used within a DropzoneProvider");
47
+ return context;
48
+ };
49
+ // src/components/dropzone/dropzone.tsx
50
+ const SINGLE_FILE = 1;
51
+ const FIRST_INDEX = 0;
52
+ const EMPTY = 0;
53
+ const MIN_PROGRESS = 0;
54
+ const MAX_PROGRESS = 100;
55
+ const defaultMaxFilesErrorLabel = (max) => {
56
+ let suffix = "s";
57
+ if (max === SINGLE_FILE) suffix = "";
58
+ return `You can select up to ${max} file${suffix}.`;
59
+ };
60
+ const defaultMaxFileSizeErrorLabel = (fileName, max) => `"${fileName}" exceeds the maximum size of ${max}.`;
61
+ const defaultFileTypeErrorLabel = (fileName) => `"${fileName}" is not an accepted file type.`;
62
+ const resolveAcceptedTypes = (accept) => {
63
+ if (typeof accept !== "string") return [];
64
+ return accept.split(",").map((value) => value.trim()).filter(Boolean);
65
+ };
66
+ const toFileArray = (fileList) => {
67
+ if (!fileList) return [];
68
+ return [...fileList];
69
+ };
70
+ const formatOptionalSize = (size) => {
71
+ if (size === void 0) return;
72
+ return formatFileSize(size);
73
+ };
74
+ function Dropzone$1({ maxFiles, maxFileSize, maxFilesErrorLabel = defaultMaxFilesErrorLabel, maxFileSizeErrorLabel = defaultMaxFileSizeErrorLabel, fileTypeErrorLabel = defaultFileTypeErrorLabel, onUpload, ref, className, children, onChange, onConfirm, ...props }) {
75
+ const inputRef = React.useRef(null), filesRef = React.useRef([]), [isHovering, setIsHovering] = React.useState(false), [files, setFiles] = React.useState([]), [fileError, setFileError] = React.useState(void 0), [fileProgress, setFileProgress] = React.useState({}), acceptedFileTypes = resolveAcceptedTypes(props.accept), formattedMaxFileSize = formatOptionalSize(maxFileSize), syncInputFiles = React.useCallback((nextFiles) => {
76
+ if (!inputRef.current) return;
77
+ const dataTransfer = new DataTransfer();
78
+ nextFiles.forEach((file) => dataTransfer.items.add(file));
79
+ inputRef.current.files = dataTransfer.files;
80
+ }, []), getNextFiles = (incomingFiles) => {
81
+ if (!props.multiple) return incomingFiles.slice(FIRST_INDEX, SINGLE_FILE);
82
+ return [...filesRef.current, ...incomingFiles].filter((file, index, source) => source.findIndex((item) => item.name === file.name && item.size === file.size && item.lastModified === file.lastModified) === index);
83
+ }, startUploads = (newFiles) => {
84
+ newFiles.forEach((file) => {
85
+ const key = getFileKey(file);
86
+ if (!onUpload) {
87
+ setFileProgress((previous) => ({
88
+ ...previous,
89
+ [key]: MAX_PROGRESS
90
+ }));
91
+ return;
92
+ }
93
+ setFileProgress((previous) => ({
94
+ ...previous,
95
+ [key]: MIN_PROGRESS
96
+ }));
97
+ onUpload(file, (percent) => {
98
+ setFileProgress((previous) => ({
99
+ ...previous,
100
+ [key]: Math.max(MIN_PROGRESS, Math.min(MAX_PROGRESS, percent))
101
+ }));
102
+ });
103
+ });
104
+ }, commitFiles = (previousFiles, acceptedFiles) => {
105
+ const previousKeys = new Set(previousFiles.map(getFileKey)), addedFiles = acceptedFiles.filter((file) => !previousKeys.has(getFileKey(file)));
106
+ filesRef.current = acceptedFiles;
107
+ setFiles(acceptedFiles);
108
+ syncInputFiles(acceptedFiles);
109
+ startUploads(addedFiles);
110
+ }, partitionBySize = (candidateFiles) => {
111
+ if (maxFileSize === void 0) return {
112
+ acceptedFiles: candidateFiles,
113
+ oversizedFiles: []
114
+ };
115
+ return {
116
+ acceptedFiles: candidateFiles.filter((file) => file.size <= maxFileSize),
117
+ oversizedFiles: candidateFiles.filter((file) => file.size > maxFileSize)
118
+ };
119
+ }, processFiles = (candidateFiles) => {
120
+ const invalidTypeFiles = candidateFiles.filter((file) => !isFileTypeAccepted(file, acceptedFileTypes)), { oversizedFiles, acceptedFiles } = partitionBySize(candidateFiles);
121
+ if (invalidTypeFiles.length > EMPTY) return {
122
+ acceptedFiles: void 0,
123
+ error: fileTypeErrorLabel(invalidTypeFiles[FIRST_INDEX].name)
124
+ };
125
+ if (maxFiles !== void 0 && acceptedFiles.length > maxFiles) return {
126
+ acceptedFiles: void 0,
127
+ error: maxFilesErrorLabel(maxFiles)
128
+ };
129
+ if (oversizedFiles.length > EMPTY && maxFileSize !== void 0) return {
130
+ acceptedFiles,
131
+ error: maxFileSizeErrorLabel(oversizedFiles[FIRST_INDEX].name, formatFileSize(maxFileSize))
132
+ };
133
+ return {
134
+ acceptedFiles,
135
+ error: void 0
136
+ };
137
+ }, applyAcceptedFiles = (candidateFiles) => {
138
+ const previousFiles = filesRef.current, nextFiles = getNextFiles(candidateFiles), { acceptedFiles, error } = processFiles(nextFiles);
139
+ if (acceptedFiles) commitFiles(previousFiles, acceptedFiles);
140
+ return {
141
+ acceptedFiles,
142
+ error,
143
+ previousFiles
144
+ };
145
+ }, removeFile = (fileToRemove) => {
146
+ const removedKey = getFileKey(fileToRemove);
147
+ setFiles((previousFiles) => {
148
+ const nextFiles = previousFiles.filter((file) => file !== fileToRemove);
149
+ filesRef.current = nextFiles;
150
+ syncInputFiles(nextFiles);
151
+ return nextFiles;
152
+ });
153
+ setFileProgress((previous) => {
154
+ const next = { ...previous };
155
+ delete next[removedKey];
156
+ return next;
157
+ });
158
+ setFileError(void 0);
159
+ }, handleFiles = (event) => {
160
+ const { acceptedFiles, error, previousFiles } = applyAcceptedFiles(toFileArray(event.target.files));
161
+ setFileError(error);
162
+ if (!acceptedFiles) {
163
+ syncInputFiles(previousFiles);
164
+ return;
165
+ }
166
+ onChange?.(event);
167
+ }, handleDragOver = (event) => {
168
+ event.preventDefault();
169
+ setIsHovering(true);
170
+ }, handleDragLeave = () => {
171
+ setIsHovering(false);
172
+ }, handleDrop = (event) => {
173
+ event.preventDefault();
174
+ const { acceptedFiles, error } = applyAcceptedFiles([...event.dataTransfer.files]);
175
+ setFileError(error);
176
+ if (!acceptedFiles) {
177
+ setIsHovering(false);
178
+ return;
179
+ }
180
+ inputRef.current?.dispatchEvent(new Event("change", { bubbles: true }));
181
+ setIsHovering(false);
182
+ };
183
+ React.useEffect(() => {
184
+ filesRef.current = files;
185
+ }, [files]);
186
+ return /* @__PURE__ */ jsx(DropzoneContext.Provider, {
187
+ value: {
188
+ acceptedFileTypes,
189
+ fileError,
190
+ fileProgress,
191
+ files,
192
+ handleDragLeave,
193
+ handleDragOver,
194
+ handleDrop,
195
+ handleFiles,
196
+ inputRef,
197
+ isHovering,
198
+ maxFileSize: formattedMaxFileSize,
199
+ maxFiles,
200
+ onConfirm,
201
+ onUpload,
202
+ props,
203
+ removeFile,
204
+ setFiles
205
+ },
206
+ children: /* @__PURE__ */ jsx("div", {
207
+ className: cn("space-y-md", className),
208
+ ref,
209
+ children
210
+ })
211
+ });
212
+ }
213
+ // src/components/dropzone/dropzone-actions.tsx
214
+ function DropzoneActions({ className, ref, ...props }) {
215
+ return /* @__PURE__ */ jsx("div", {
216
+ className: cn("flex items-center gap-xs", className),
217
+ ref,
218
+ ...props
219
+ });
220
+ }
221
+ // src/components/dropzone/dropzone-clear.tsx
222
+ const EMPTY_FILE_COUNT$1 = 0;
223
+ function DropzoneClear({ className, ref, ...props }) {
224
+ const { files, setFiles } = useDropzone();
225
+ return /* @__PURE__ */ jsx(Button, {
226
+ disabled: files.length === EMPTY_FILE_COUNT$1,
227
+ onClick: () => setFiles([]),
228
+ tone: "error",
229
+ variant: "outline",
230
+ className: cn("w-full", className),
231
+ ref,
232
+ ...props
233
+ });
234
+ }
235
+ // src/components/dropzone/dropzone-confirm.tsx
236
+ const EMPTY_FILE_COUNT = 0;
237
+ function DropzoneConfirm({ className, ref, ...props }) {
238
+ const { files, onConfirm } = useDropzone(), handleClick = () => {
239
+ if (onConfirm) onConfirm(files);
240
+ };
241
+ return /* @__PURE__ */ jsx(Button, {
242
+ disabled: files.length === EMPTY_FILE_COUNT,
243
+ onClick: handleClick,
244
+ className: cn("w-full", className),
245
+ ref,
246
+ ...props
247
+ });
248
+ }
249
+ // src/components/dropzone/dropzone-container.tsx
250
+ function DropzoneContainer({ className, children, ...containerProps }) {
251
+ const { fileError, handleDragLeave, handleDragOver, handleDrop, handleFiles, inputRef, isHovering, props } = useDropzone(), inputId = useId(), isDisabled = props.disabled ?? false;
252
+ return /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("label", {
253
+ htmlFor: inputId,
254
+ "aria-disabled": isDisabled,
255
+ onDragLeave: handleDragLeave,
256
+ onDragOver: handleDragOver,
257
+ onDrop: handleDrop,
258
+ className: cn("flex size-full items-center justify-center rounded-xl border-2 border-brand-border bg-surface py-2xl transition-all outline-none", !isDisabled && "cursor-pointer", isHovering && "ring-8 ring-brand-border-strong/20", fileError && "border-error-border", isDisabled && "cursor-not-allowed opacity-50", className),
259
+ ...containerProps,
260
+ children: /* @__PURE__ */ jsx("div", {
261
+ className: "flex flex-col items-center justify-center gap-lg",
262
+ children
263
+ })
264
+ }), /* @__PURE__ */ jsx("input", {
265
+ ...props,
266
+ id: inputId,
267
+ hidden: true,
268
+ onChange: handleFiles,
269
+ onClick: (event) => {
270
+ event.currentTarget.value = "";
271
+ },
272
+ ref: inputRef,
273
+ type: "file"
274
+ })] });
275
+ }
276
+ // src/components/dropzone/dropzone-error.tsx
277
+ function DropzoneError({ className, children, ref, ...props }) {
278
+ const { fileError } = useDropzone();
279
+ if (!fileError && !children) return;
280
+ return /* @__PURE__ */ jsxs("p", {
281
+ className: cn("flex items-center gap-2xs style-text-strong--1 text-error-default", className),
282
+ ref,
283
+ role: "alert",
284
+ ...props,
285
+ children: [/* @__PURE__ */ jsx(Icon, { name: "error" }), children ?? fileError]
286
+ });
287
+ }
288
+ // src/components/dropzone/dropzone-file-limit.tsx
289
+ function DropzoneFileLimit({ className, children, ref, ...props }) {
290
+ const { files, maxFiles } = useDropzone();
291
+ if (maxFiles === void 0) return;
292
+ return /* @__PURE__ */ jsxs("span", {
293
+ className: cn("style-text-default--1 text-on-surface-variant", className),
294
+ ref,
295
+ ...props,
296
+ children: [
297
+ files.length,
298
+ "/",
299
+ maxFiles,
300
+ children
301
+ ]
302
+ });
303
+ }
304
+ // src/components/dropzone/dropzone-file-size-limit.tsx
305
+ function DropzoneFileSizeLimit({ className, children, ref, ...props }) {
306
+ const { maxFileSize } = useDropzone();
307
+ return /* @__PURE__ */ jsxs("span", {
308
+ className: cn("", className),
309
+ ref,
310
+ ...props,
311
+ children: [children, maxFileSize]
312
+ });
313
+ }
314
+ // src/components/dropzone/dropzone-files.tsx
315
+ function DropzoneFiles({ className, ref, ...props }) {
316
+ return /* @__PURE__ */ jsx("div", {
317
+ className: cn("flex flex-col gap-xs", className),
318
+ ref,
319
+ ...props
320
+ });
321
+ }
322
+ // src/components/dropzone/dropzone-files-header.tsx
323
+ function DropzoneFilesHeader({ className, ref, ...props }) {
324
+ return /* @__PURE__ */ jsx("div", {
325
+ className: cn("flex items-center justify-between gap-sm", className),
326
+ ref,
327
+ ...props
328
+ });
329
+ }
330
+ // src/components/dropzone/dropzone-files-list.tsx
331
+ const NO_PROGRESS = 0;
332
+ const COMPLETE_PROGRESS = 100;
333
+ function DropzoneFilesList({ className, children, ref, ...props }) {
334
+ const { files, fileProgress, removeFile, onUpload } = useDropzone();
335
+ return /* @__PURE__ */ jsxs("ul", {
336
+ className: cn("flex flex-col gap-xs", className),
337
+ ref,
338
+ ...props,
339
+ children: [files.map((file) => {
340
+ const fileKey = getFileKey(file), progress = fileProgress[fileKey] ?? NO_PROGRESS, isUploading = progress >= NO_PROGRESS && progress < COMPLETE_PROGRESS, isUploaded = progress >= COMPLETE_PROGRESS;
341
+ let meterTone = "brand";
342
+ if (isUploaded) meterTone = "success";
343
+ return /* @__PURE__ */ jsxs("li", {
344
+ className: cn("flex items-center justify-between gap-lg rounded-xl border bg-surface px-md py-sm", isUploading && "border-border", isUploaded && "border-border"),
345
+ children: [
346
+ isUploading && /* @__PURE__ */ jsx("div", {
347
+ className: "flex items-center justify-center rounded-full bg-brand-container p-xs",
348
+ children: /* @__PURE__ */ jsx(Icon, {
349
+ name: "fileUpload",
350
+ className: "size-md text-brand-on-container"
351
+ })
352
+ }),
353
+ isUploaded && /* @__PURE__ */ jsx("div", {
354
+ className: "flex items-center justify-center rounded-full bg-success-container p-xs",
355
+ children: /* @__PURE__ */ jsx(Icon, {
356
+ name: "selected",
357
+ className: "size-md text-success-on-container"
358
+ })
359
+ }),
360
+ /* @__PURE__ */ jsxs("div", {
361
+ className: "flex w-full flex-col justify-between gap-3xs",
362
+ children: [
363
+ /* @__PURE__ */ jsx("span", {
364
+ className: "style-text-default-0",
365
+ children: file.name
366
+ }),
367
+ onUpload && /* @__PURE__ */ jsxs(Meter, {
368
+ orientation: "vertical",
369
+ tone: meterTone,
370
+ value: progress,
371
+ children: [/* @__PURE__ */ jsx(MeterTrack, { children: /* @__PURE__ */ jsx(MeterIndicator, {}) }), /* @__PURE__ */ jsxs(MeterFooter, { children: [/* @__PURE__ */ jsx("span", {
372
+ className: "style-text-prose--1 text-on-surface-variant",
373
+ children: formatFileSize(file.size)
374
+ }), /* @__PURE__ */ jsx(MeterValue, {})] })]
375
+ }),
376
+ !onUpload && /* @__PURE__ */ jsx("span", {
377
+ className: "style-text-prose--1 text-on-surface-variant",
378
+ children: formatFileSize(file.size)
379
+ })
380
+ ]
381
+ }),
382
+ /* @__PURE__ */ jsx(Button, {
383
+ variant: "ghost",
384
+ tone: "error",
385
+ onClick: () => removeFile(file),
386
+ children: /* @__PURE__ */ jsx(Icon, { name: "delete" })
387
+ })
388
+ ]
389
+ }, fileKey);
390
+ }), children]
391
+ });
392
+ }
393
+ // src/components/dropzone/dropzone-files-title.tsx
394
+ function DropzoneFilesTitle({ className, ref, ...props }) {
395
+ return /* @__PURE__ */ jsx("span", {
396
+ className: cn("style-text-default-0", className),
397
+ ref,
398
+ ...props
399
+ });
400
+ }
401
+ // src/components/dropzone/dropzone-formats.tsx
402
+ function DropzoneFormats({ className, children, ref, ...props }) {
403
+ const { acceptedFileTypes } = useDropzone();
404
+ return /* @__PURE__ */ jsxs("span", {
405
+ className: cn("", className),
406
+ ref,
407
+ ...props,
408
+ children: [acceptedFileTypes.join(", "), children]
409
+ });
410
+ }
411
+ // src/components/dropzone/dropzone-heading.tsx
412
+ function DropzoneHeading({ className, ref, ...props }) {
413
+ return /* @__PURE__ */ jsx("span", {
414
+ className: cn("style-text-default-0", className),
415
+ ref,
416
+ ...props
417
+ });
418
+ }
419
+ // src/components/dropzone/dropzone-icon.tsx
420
+ function DropzoneIcon({ className, ref, ...props }) {
421
+ return /* @__PURE__ */ jsx("div", {
422
+ className: cn("rounded-full bg-brand-container p-sm [&>svg]:size-lg [&>svg]:text-brand-on-container", className),
423
+ ref,
424
+ ...props
425
+ });
426
+ }
427
+ // src/components/dropzone/dropzone-info.tsx
428
+ function DropzoneInfo({ className, ref, ...props }) {
429
+ return /* @__PURE__ */ jsx("div", {
430
+ className: cn("flex flex-col items-center justify-center gap-sm", className),
431
+ ref,
432
+ ...props
433
+ });
434
+ }
435
+ // src/components/dropzone/dropzone-subtitle.tsx
436
+ function DropzoneSubtitle({ className, ref, ...props }) {
437
+ return /* @__PURE__ */ jsx("span", {
438
+ className: cn("text-on-surface-variant", className),
439
+ ref,
440
+ ...props
441
+ });
442
+ }
443
+ // src/components/dropzone/dropzone-trigger.tsx
444
+ function DropzoneTrigger({ className, ref, ...props }) {
445
+ const { inputRef } = useDropzone(), handleClick = (event) => {
446
+ event.stopPropagation();
447
+ inputRef.current?.click();
448
+ };
449
+ return /* @__PURE__ */ jsx(Button, {
450
+ variant: "link",
451
+ onClick: handleClick,
452
+ className: cn("", className),
453
+ ref,
454
+ ...props
455
+ });
456
+ }
457
+ // src/components/dropzone/index.ts
458
+ const Dropzone = Object.assign(Dropzone$1, {
459
+ Actions: DropzoneActions,
460
+ Clear: DropzoneClear,
461
+ Confirm: DropzoneConfirm,
462
+ Container: DropzoneContainer,
463
+ Error: DropzoneError,
464
+ FileLimit: DropzoneFileLimit,
465
+ FileSizeLimit: DropzoneFileSizeLimit,
466
+ Files: DropzoneFiles,
467
+ FilesHeader: DropzoneFilesHeader,
468
+ FilesList: DropzoneFilesList,
469
+ FilesTitle: DropzoneFilesTitle,
470
+ Formats: DropzoneFormats,
471
+ Heading: DropzoneHeading,
472
+ Icon: DropzoneIcon,
473
+ Info: DropzoneInfo,
474
+ Subtitle: DropzoneSubtitle,
475
+ Trigger: DropzoneTrigger
476
+ });
477
+ export { Dropzone, DropzoneActions, DropzoneClear, DropzoneConfirm, DropzoneContainer, DropzoneError, DropzoneFilesList as DropzoneFileList, DropzoneFileSizeLimit, DropzoneFiles, DropzoneFilesHeader, DropzoneFilesTitle, DropzoneFormats, DropzoneHeading, DropzoneIcon, DropzoneInfo, DropzoneSubtitle, DropzoneTrigger };
478
+
479
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":["Dropzone","EMPTY_FILE_COUNT","DropzoneRoot"],"sources":["../../src/components/dropzone/dropzone.utils.ts","../../src/components/dropzone/dropzone.tsx","../../src/components/dropzone/dropzone-actions.tsx","../../src/components/dropzone/dropzone-clear.tsx","../../src/components/dropzone/dropzone-confirm.tsx","../../src/components/dropzone/dropzone-container.tsx","../../src/components/dropzone/dropzone-error.tsx","../../src/components/dropzone/dropzone-file-limit.tsx","../../src/components/dropzone/dropzone-file-size-limit.tsx","../../src/components/dropzone/dropzone-files.tsx","../../src/components/dropzone/dropzone-files-header.tsx","../../src/components/dropzone/dropzone-files-list.tsx","../../src/components/dropzone/dropzone-files-title.tsx","../../src/components/dropzone/dropzone-formats.tsx","../../src/components/dropzone/dropzone-heading.tsx","../../src/components/dropzone/dropzone-icon.tsx","../../src/components/dropzone/dropzone-info.tsx","../../src/components/dropzone/dropzone-subtitle.tsx","../../src/components/dropzone/dropzone-trigger.tsx","../../src/components/dropzone/index.ts"],"sourcesContent":["import React from 'react'\n\nimport type { DropzoneContextProps } from './dropzone.types'\n\nconst BYTES_PER_UNIT = 1000,\n FIRST_UNIT_INDEX = 0,\n UNIT_STEP = 1,\n LAST_UNIT_OFFSET = 1,\n NO_DECIMALS = 0,\n SINGLE_DECIMAL = 1,\n EMPTY_LENGTH = 0,\n PATTERN_START = 0,\n WILDCARD_SUFFIX_LENGTH = 1,\n formatFileSize = (bytes: number): string => {\n if (bytes < BYTES_PER_UNIT) {\n return `${bytes} B`\n }\n\n const units = ['KB', 'MB', 'GB', 'TB']\n let size = bytes / BYTES_PER_UNIT,\n unitIndex = FIRST_UNIT_INDEX,\n decimals = NO_DECIMALS\n\n while (size >= BYTES_PER_UNIT && unitIndex < units.length - LAST_UNIT_OFFSET) {\n size /= BYTES_PER_UNIT\n unitIndex += UNIT_STEP\n }\n\n if (!Number.isInteger(size)) {\n decimals = SINGLE_DECIMAL\n }\n\n return `${size.toFixed(decimals)}${units[unitIndex]}`\n },\n getFileKey = (file: File): string => `${file.name}-${file.size}-${file.lastModified}`,\n isFileTypeAccepted = (file: File, acceptedFileTypes: string[]): boolean => {\n if (acceptedFileTypes.length === EMPTY_LENGTH) {\n return true\n }\n\n const fileName = file.name.toLowerCase(),\n fileType = file.type.toLowerCase()\n\n return acceptedFileTypes.some((accepted) => {\n const pattern = accepted.toLowerCase()\n\n if (pattern.startsWith('.')) {\n return fileName.endsWith(pattern)\n }\n\n if (pattern.endsWith('/*')) {\n return fileType.startsWith(pattern.slice(PATTERN_START, -WILDCARD_SUFFIX_LENGTH))\n }\n\n return fileType === pattern\n })\n },\n DropzoneContext = React.createContext<DropzoneContextProps | undefined>(undefined),\n useDropzone = () => {\n const context = React.useContext(DropzoneContext)\n\n if (!context) {\n throw new Error('useDropzone must be used within a DropzoneProvider')\n }\n\n return context\n }\n\nexport { DropzoneContext, formatFileSize, getFileKey, isFileTypeAccepted, useDropzone }\n","import React from 'react'\n\nimport { cn } from '@/utils/cn'\n\nimport type { DropzoneProps } from './dropzone.types'\nimport { DropzoneContext, formatFileSize, getFileKey, isFileTypeAccepted } from './dropzone.utils'\n\nconst SINGLE_FILE = 1,\n FIRST_INDEX = 0,\n EMPTY = 0,\n MIN_PROGRESS = 0,\n MAX_PROGRESS = 100,\n defaultMaxFilesErrorLabel = (max: number) => {\n let suffix = 's'\n if (max === SINGLE_FILE) {\n suffix = ''\n }\n return `You can select up to ${max} file${suffix}.`\n },\n defaultMaxFileSizeErrorLabel = (fileName: string, max: string) =>\n `\"${fileName}\" exceeds the maximum size of ${max}.`,\n defaultFileTypeErrorLabel = (fileName: string) => `\"${fileName}\" is not an accepted file type.`,\n resolveAcceptedTypes = (accept: string | undefined) => {\n if (typeof accept !== 'string') {\n return []\n }\n return accept\n .split(',')\n .map((value) => value.trim())\n .filter(Boolean)\n },\n toFileArray = (fileList: FileList | null) => {\n if (!fileList) {\n return []\n }\n return [...fileList]\n },\n formatOptionalSize = (size: number | undefined) => {\n if (size === undefined) {\n return undefined\n }\n return formatFileSize(size)\n }\n\nexport function Dropzone({\n maxFiles,\n maxFileSize,\n maxFilesErrorLabel = defaultMaxFilesErrorLabel,\n maxFileSizeErrorLabel = defaultMaxFileSizeErrorLabel,\n fileTypeErrorLabel = defaultFileTypeErrorLabel,\n onUpload,\n ref,\n className,\n children,\n onChange,\n onConfirm,\n ...props\n}: DropzoneProps) {\n const inputRef = React.useRef<HTMLInputElement | null>(null),\n filesRef = React.useRef<File[]>([]),\n [isHovering, setIsHovering] = React.useState(false),\n [files, setFiles] = React.useState<File[]>([]),\n [fileError, setFileError] = React.useState<string | undefined>(undefined),\n [fileProgress, setFileProgress] = React.useState<Record<string, number>>({}),\n acceptedFileTypes = resolveAcceptedTypes(props.accept),\n formattedMaxFileSize = formatOptionalSize(maxFileSize),\n syncInputFiles = React.useCallback((nextFiles: File[]) => {\n if (!inputRef.current) {\n return\n }\n\n const dataTransfer = new DataTransfer()\n nextFiles.forEach((file) => dataTransfer.items.add(file))\n inputRef.current.files = dataTransfer.files\n }, []),\n getNextFiles = (incomingFiles: File[]) => {\n if (!props.multiple) {\n return incomingFiles.slice(FIRST_INDEX, SINGLE_FILE)\n }\n\n const mergedFiles = [...filesRef.current, ...incomingFiles],\n dedupedFiles = mergedFiles.filter(\n (file, index, source) =>\n source.findIndex(\n (item) =>\n item.name === file.name &&\n item.size === file.size &&\n item.lastModified === file.lastModified,\n ) === index,\n )\n\n return dedupedFiles\n },\n startUploads = (newFiles: File[]) => {\n newFiles.forEach((file) => {\n const key = getFileKey(file)\n\n if (!onUpload) {\n setFileProgress((previous) => ({ ...previous, [key]: MAX_PROGRESS }))\n return\n }\n\n setFileProgress((previous) => ({ ...previous, [key]: MIN_PROGRESS }))\n void onUpload(file, (percent) => {\n setFileProgress((previous) => ({\n ...previous,\n [key]: Math.max(MIN_PROGRESS, Math.min(MAX_PROGRESS, percent)),\n }))\n })\n })\n },\n commitFiles = (previousFiles: File[], acceptedFiles: File[]) => {\n const previousKeys = new Set(previousFiles.map(getFileKey)),\n addedFiles = acceptedFiles.filter((file) => !previousKeys.has(getFileKey(file)))\n filesRef.current = acceptedFiles\n setFiles(acceptedFiles)\n syncInputFiles(acceptedFiles)\n startUploads(addedFiles)\n },\n partitionBySize = (candidateFiles: File[]) => {\n if (maxFileSize === undefined) {\n return { acceptedFiles: candidateFiles, oversizedFiles: [] as File[] }\n }\n\n return {\n acceptedFiles: candidateFiles.filter((file) => file.size <= maxFileSize),\n oversizedFiles: candidateFiles.filter((file) => file.size > maxFileSize),\n }\n },\n processFiles = (candidateFiles: File[]) => {\n const invalidTypeFiles = candidateFiles.filter(\n (file) => !isFileTypeAccepted(file, acceptedFileTypes),\n ),\n { oversizedFiles, acceptedFiles } = partitionBySize(candidateFiles)\n\n if (invalidTypeFiles.length > EMPTY) {\n return {\n acceptedFiles: undefined,\n error: fileTypeErrorLabel(invalidTypeFiles[FIRST_INDEX].name),\n }\n }\n\n if (maxFiles !== undefined && acceptedFiles.length > maxFiles) {\n return {\n acceptedFiles: undefined,\n error: maxFilesErrorLabel(maxFiles),\n }\n }\n\n if (oversizedFiles.length > EMPTY && maxFileSize !== undefined) {\n return {\n acceptedFiles,\n error: maxFileSizeErrorLabel(\n oversizedFiles[FIRST_INDEX].name,\n formatFileSize(maxFileSize),\n ),\n }\n }\n\n return { acceptedFiles, error: undefined }\n },\n applyAcceptedFiles = (candidateFiles: File[]) => {\n const previousFiles = filesRef.current,\n nextFiles = getNextFiles(candidateFiles),\n { acceptedFiles, error } = processFiles(nextFiles)\n\n if (acceptedFiles) {\n commitFiles(previousFiles, acceptedFiles)\n }\n\n return { acceptedFiles, error, previousFiles }\n },\n removeFile = (fileToRemove: File) => {\n const removedKey = getFileKey(fileToRemove)\n\n setFiles((previousFiles) => {\n const nextFiles = previousFiles.filter((file) => file !== fileToRemove)\n filesRef.current = nextFiles\n syncInputFiles(nextFiles)\n return nextFiles\n })\n setFileProgress((previous) => {\n const next = { ...previous }\n delete next[removedKey]\n return next\n })\n setFileError(undefined)\n },\n handleFiles = (event: React.ChangeEvent<HTMLInputElement>) => {\n const { acceptedFiles, error, previousFiles } = applyAcceptedFiles(\n toFileArray(event.target.files),\n )\n\n setFileError(error)\n if (!acceptedFiles) {\n syncInputFiles(previousFiles)\n return\n }\n\n onChange?.(event)\n },\n handleDragOver = (event: React.DragEvent<HTMLElement>) => {\n event.preventDefault()\n setIsHovering(true)\n },\n handleDragLeave = () => {\n setIsHovering(false)\n },\n handleDrop = (event: React.DragEvent<HTMLElement>) => {\n event.preventDefault()\n const { acceptedFiles, error } = applyAcceptedFiles([...event.dataTransfer.files])\n\n setFileError(error)\n if (!acceptedFiles) {\n setIsHovering(false)\n return\n }\n\n inputRef.current?.dispatchEvent(new Event('change', { bubbles: true }))\n setIsHovering(false)\n }\n\n React.useEffect(() => {\n filesRef.current = files\n }, [files])\n\n return (\n <DropzoneContext.Provider\n value={{\n acceptedFileTypes,\n fileError,\n fileProgress,\n files,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handleFiles,\n inputRef,\n isHovering,\n maxFileSize: formattedMaxFileSize,\n maxFiles,\n onConfirm,\n onUpload,\n props,\n removeFile,\n setFiles,\n }}\n >\n <div className={cn('space-y-md', className)} ref={ref}>\n {children}\n </div>\n </DropzoneContext.Provider>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneActionsProps } from './dropzone.types'\n\nexport function DropzoneActions({ className, ref, ...props }: DropzoneActionsProps) {\n return <div className={cn('flex items-center gap-xs', className)} ref={ref} {...props} />\n}\n","import { cn } from '@/utils/cn'\n\nimport { Button } from '../button'\nimport type { DropzoneClearProps } from './dropzone.types'\nimport { useDropzone } from './dropzone.utils'\n\nconst EMPTY_FILE_COUNT = 0\n\nexport function DropzoneClear({ className, ref, ...props }: DropzoneClearProps) {\n const { files, setFiles } = useDropzone()\n\n return (\n <Button\n disabled={files.length === EMPTY_FILE_COUNT}\n onClick={() => setFiles([])}\n tone=\"error\"\n variant=\"outline\"\n className={cn('w-full', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { Button } from '../button'\nimport type { DropzoneConfirmProps } from './dropzone.types'\nimport { useDropzone } from './dropzone.utils'\n\nconst EMPTY_FILE_COUNT = 0\n\nexport function DropzoneConfirm({ className, ref, ...props }: DropzoneConfirmProps) {\n const { files, onConfirm } = useDropzone(),\n handleClick = () => {\n if (onConfirm) {\n onConfirm(files)\n }\n }\n return (\n <Button\n disabled={files.length === EMPTY_FILE_COUNT}\n onClick={handleClick}\n className={cn('w-full', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { useId } from 'react'\n\nimport { cn } from '@/utils/cn'\n\nimport type { DropzoneContainerProps } from './dropzone.types'\nimport { useDropzone } from './dropzone.utils'\n\nexport function DropzoneContainer({\n className,\n children,\n ...containerProps\n}: DropzoneContainerProps) {\n const {\n fileError,\n handleDragLeave,\n handleDragOver,\n handleDrop,\n handleFiles,\n inputRef,\n isHovering,\n props,\n } = useDropzone(),\n inputId = useId(),\n isDisabled = props.disabled ?? false\n\n return (\n <>\n {/* Drag-and-drop has no keyboard equivalent; the label/input and Dropzone.Trigger provide the accessible path. */}\n {/* oxlint-disable-next-line jsx-a11y/no-noninteractive-element-interactions */}\n <label\n htmlFor={inputId}\n aria-disabled={isDisabled}\n onDragLeave={handleDragLeave}\n onDragOver={handleDragOver}\n onDrop={handleDrop}\n className={cn(\n 'flex size-full items-center justify-center rounded-xl border-2 border-brand-border bg-surface py-2xl transition-all outline-none',\n !isDisabled && 'cursor-pointer',\n isHovering && 'ring-8 ring-brand-border-strong/20',\n fileError && 'border-error-border',\n isDisabled && 'cursor-not-allowed opacity-50',\n className,\n )}\n {...containerProps}\n >\n <div className=\"flex flex-col items-center justify-center gap-lg\">{children}</div>\n </label>\n <input\n {...props}\n id={inputId}\n hidden\n onChange={handleFiles}\n onClick={(event) => {\n event.currentTarget.value = ''\n }}\n ref={inputRef}\n type=\"file\"\n />\n </>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { Icon } from '../icon'\nimport type { DropzoneErrorProps } from './dropzone.types'\nimport { useDropzone } from './dropzone.utils'\n\nexport function DropzoneError({ className, children, ref, ...props }: DropzoneErrorProps) {\n const { fileError } = useDropzone()\n\n if (!fileError && !children) {\n return undefined\n }\n\n return (\n <p\n className={cn('flex items-center gap-2xs style-text-strong--1 text-error-default', className)}\n ref={ref}\n role=\"alert\"\n {...props}\n >\n <Icon name=\"error\" />\n {children ?? fileError}\n </p>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneFileLimitProps } from './dropzone.types'\nimport { useDropzone } from './dropzone.utils'\n\nexport function DropzoneFileLimit({ className, children, ref, ...props }: DropzoneFileLimitProps) {\n const { files, maxFiles } = useDropzone()\n\n if (maxFiles === undefined) {\n return undefined\n }\n\n return (\n <span\n className={cn('style-text-default--1 text-on-surface-variant', className)}\n ref={ref}\n {...props}\n >\n {files.length}/{maxFiles}\n {children}\n </span>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneFileSizeLimitProps } from './dropzone.types'\nimport { useDropzone } from './dropzone.utils'\n\nexport function DropzoneFileSizeLimit({\n className,\n children,\n ref,\n ...props\n}: DropzoneFileSizeLimitProps) {\n const { maxFileSize } = useDropzone()\n\n return (\n <span className={cn('', className)} ref={ref} {...props}>\n {children}\n {maxFileSize}\n </span>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneFilesProps } from './dropzone.types'\n\nexport function DropzoneFiles({ className, ref, ...props }: DropzoneFilesProps) {\n return <div className={cn('flex flex-col gap-xs', className)} ref={ref} {...props} />\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneFilesHeaderProps } from './dropzone.types'\n\nexport function DropzoneFilesHeader({ className, ref, ...props }: DropzoneFilesHeaderProps) {\n return (\n <div\n className={cn('flex items-center justify-between gap-sm', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport { Button } from '../button'\nimport { Icon } from '../icon'\nimport { Meter, MeterFooter, MeterIndicator, MeterTrack, MeterValue } from '../meter'\nimport type { DropzoneFilesListProps } from './dropzone.types'\nimport { formatFileSize, getFileKey, useDropzone } from './dropzone.utils'\n\nconst NO_PROGRESS = 0,\n COMPLETE_PROGRESS = 100\n\nexport function DropzoneFilesList({ className, children, ref, ...props }: DropzoneFilesListProps) {\n const { files, fileProgress, removeFile, onUpload } = useDropzone()\n\n return (\n <ul className={cn('flex flex-col gap-xs', className)} ref={ref} {...props}>\n {files.map((file) => {\n const fileKey = getFileKey(file),\n progress = fileProgress[fileKey] ?? NO_PROGRESS,\n isUploading = progress >= NO_PROGRESS && progress < COMPLETE_PROGRESS,\n isUploaded = progress >= COMPLETE_PROGRESS\n\n let meterTone: 'success' | 'brand' = 'brand'\n if (isUploaded) {\n meterTone = 'success'\n }\n\n return (\n <li\n key={fileKey}\n className={cn(\n 'flex items-center justify-between gap-lg rounded-xl border bg-surface px-md py-sm',\n isUploading && 'border-border',\n isUploaded && 'border-border',\n )}\n >\n {isUploading && (\n <div className=\"flex items-center justify-center rounded-full bg-brand-container p-xs\">\n <Icon name=\"fileUpload\" className=\"size-md text-brand-on-container\" />\n </div>\n )}\n {isUploaded && (\n <div className=\"flex items-center justify-center rounded-full bg-success-container p-xs\">\n <Icon name=\"selected\" className=\"size-md text-success-on-container\" />\n </div>\n )}\n <div className=\"flex w-full flex-col justify-between gap-3xs\">\n <span className=\"style-text-default-0\">{file.name}</span>\n {onUpload && (\n <Meter orientation=\"vertical\" tone={meterTone} value={progress}>\n <MeterTrack>\n <MeterIndicator />\n </MeterTrack>\n <MeterFooter>\n <span className=\"style-text-prose--1 text-on-surface-variant\">\n {formatFileSize(file.size)}\n </span>\n <MeterValue />\n </MeterFooter>\n </Meter>\n )}\n {!onUpload && (\n <span className=\"style-text-prose--1 text-on-surface-variant\">\n {formatFileSize(file.size)}\n </span>\n )}\n </div>\n <Button variant=\"ghost\" tone=\"error\" onClick={() => removeFile(file)}>\n <Icon name=\"delete\" />\n </Button>\n </li>\n )\n })}\n {children}\n </ul>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneFilesTitleProps } from './dropzone.types'\n\nexport function DropzoneFilesTitle({ className, ref, ...props }: DropzoneFilesTitleProps) {\n return <span className={cn('style-text-default-0', className)} ref={ref} {...props} />\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneFormatsProps } from './dropzone.types'\nimport { useDropzone } from './dropzone.utils'\n\nexport function DropzoneFormats({ className, children, ref, ...props }: DropzoneFormatsProps) {\n const { acceptedFileTypes } = useDropzone()\n\n return (\n <span className={cn('', className)} ref={ref} {...props}>\n {acceptedFileTypes.join(', ')}\n {children}\n </span>\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneHeadingProps } from './dropzone.types'\n\nexport function DropzoneHeading({ className, ref, ...props }: DropzoneHeadingProps) {\n return <span className={cn('style-text-default-0', className)} ref={ref} {...props} />\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneIconProps } from './dropzone.types'\n\nexport function DropzoneIcon({ className, ref, ...props }: DropzoneIconProps) {\n return (\n <div\n className={cn(\n 'rounded-full bg-brand-container p-sm [&>svg]:size-lg [&>svg]:text-brand-on-container',\n className,\n )}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneInfoProps } from './dropzone.types'\n\nexport function DropzoneInfo({ className, ref, ...props }: DropzoneInfoProps) {\n return (\n <div\n className={cn('flex flex-col items-center justify-center gap-sm', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { cn } from '@/utils/cn'\n\nimport type { DropzoneSubtitleProps } from './dropzone.types'\n\nexport function DropzoneSubtitle({ className, ref, ...props }: DropzoneSubtitleProps) {\n return <span className={cn('text-on-surface-variant', className)} ref={ref} {...props} />\n}\n","import { cn } from '@/utils/cn'\n\nimport { Button } from '../button'\nimport type { DropzoneTriggerProps } from './dropzone.types'\nimport { useDropzone } from './dropzone.utils'\n\nexport function DropzoneTrigger({ className, ref, ...props }: DropzoneTriggerProps) {\n const { inputRef } = useDropzone(),\n handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation()\n inputRef.current?.click()\n }\n\n return (\n <Button\n variant=\"link\"\n onClick={handleClick}\n className={cn('', className)}\n ref={ref}\n {...props}\n />\n )\n}\n","import { Dropzone as DropzoneRoot } from './dropzone'\nimport { DropzoneActions } from './dropzone-actions'\nimport { DropzoneClear } from './dropzone-clear'\nimport { DropzoneConfirm } from './dropzone-confirm'\nimport { DropzoneContainer } from './dropzone-container'\nimport { DropzoneError } from './dropzone-error'\nimport { DropzoneFileLimit } from './dropzone-file-limit'\nimport { DropzoneFileSizeLimit } from './dropzone-file-size-limit'\nimport { DropzoneFiles } from './dropzone-files'\nimport { DropzoneFilesHeader } from './dropzone-files-header'\nimport { DropzoneFilesList } from './dropzone-files-list'\nimport { DropzoneFilesTitle } from './dropzone-files-title'\nimport { DropzoneFormats } from './dropzone-formats'\nimport { DropzoneHeading } from './dropzone-heading'\nimport { DropzoneIcon } from './dropzone-icon'\nimport { DropzoneInfo } from './dropzone-info'\nimport { DropzoneSubtitle } from './dropzone-subtitle'\nimport { DropzoneTrigger } from './dropzone-trigger'\n\nconst Dropzone = Object.assign(DropzoneRoot, {\n Actions: DropzoneActions,\n Clear: DropzoneClear,\n Confirm: DropzoneConfirm,\n Container: DropzoneContainer,\n Error: DropzoneError,\n FileLimit: DropzoneFileLimit,\n FileSizeLimit: DropzoneFileSizeLimit,\n Files: DropzoneFiles,\n FilesHeader: DropzoneFilesHeader,\n FilesList: DropzoneFilesList,\n FilesTitle: DropzoneFilesTitle,\n Formats: DropzoneFormats,\n Heading: DropzoneHeading,\n Icon: DropzoneIcon,\n Info: DropzoneInfo,\n Subtitle: DropzoneSubtitle,\n Trigger: DropzoneTrigger,\n})\n\nexport type {\n DropzoneProps,\n DropzoneContainerProps,\n DropzoneErrorProps,\n DropzoneActionsProps,\n DropzoneClearProps,\n DropzoneConfirmProps,\n DropzoneFilesListProps,\n DropzoneFileLimitProps,\n DropzoneFilesHeaderProps,\n DropzoneFilesProps,\n DropzoneFilesTitleProps,\n DropzoneFileSizeLimitProps,\n DropzoneFormatsProps,\n DropzoneHeadingProps,\n DropzoneIconProps,\n DropzoneSubtitleProps,\n DropzoneTriggerProps,\n DropzoneInfoProps,\n} from './dropzone.types'\nexport { DropzoneContainer } from './dropzone-container'\nexport { DropzoneError } from './dropzone-error'\nexport { DropzoneFilesList as DropzoneFileList } from './dropzone-files-list'\nexport { DropzoneFileSizeLimit } from './dropzone-file-size-limit'\nexport { DropzoneFormats } from './dropzone-formats'\nexport { DropzoneHeading } from './dropzone-heading'\nexport { DropzoneIcon } from './dropzone-icon'\nexport { DropzoneSubtitle } from './dropzone-subtitle'\nexport { DropzoneTrigger } from './dropzone-trigger'\nexport { DropzoneInfo } from './dropzone-info'\nexport { DropzoneFiles } from './dropzone-files'\nexport { DropzoneFilesHeader } from './dropzone-files-header'\nexport { DropzoneFilesTitle } from './dropzone-files-title'\nexport { DropzoneActions } from './dropzone-actions'\nexport { DropzoneConfirm } from './dropzone-confirm'\nexport { DropzoneClear } from './dropzone-clear'\n\nexport { Dropzone }\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { A as FieldSetProps, C as FieldInputProps, D as FieldRadioProps, E as FieldRadioGroupProps, M as FieldSwitchProps, N as FieldTextAreaProps, O as FieldRowProps, P as FieldToggleProps, S as FieldInputGroupProps, T as FieldProps, _ as FieldCheckbox, a as FieldSlider, b as FieldErrorProps, c as FieldRow, d as FieldLabel, f as FieldInputGroupInput, g as FieldDescription, h as FieldErrors, i as FieldSwitch, j as FieldSliderProps, k as FieldSelectProps, l as FieldRadioGroup, m as FieldInput, n as FieldToggle, o as FieldSet, p as FieldInputGroup, r as FieldTextArea, s as FieldSelect, t as Field, u as FieldRadio, v as FieldCheckboxProps, w as FieldLabelProps, x as FieldInputGroupInputProps, y as FieldDescriptionProps } from "../index-CiE-Rqit.js";
2
+ export { Field, FieldCheckbox, type FieldCheckboxProps, FieldDescription, type FieldDescriptionProps, type FieldErrorProps, FieldErrors, FieldInput, FieldInputGroup, FieldInputGroupInput, type FieldInputGroupInputProps, type FieldInputGroupProps, type FieldInputProps, FieldLabel, type FieldLabelProps, type FieldProps, FieldRadio, FieldRadioGroup, type FieldRadioGroupProps, type FieldRadioProps, FieldRow, type FieldRowProps, FieldSelect, type FieldSelectProps, FieldSet, type FieldSetProps, FieldSlider, type FieldSliderProps, FieldSwitch, type FieldSwitchProps, FieldTextArea, type FieldTextAreaProps, FieldToggle, type FieldToggleProps };
@@ -0,0 +1 @@
1
+ export { t as Field, _ as FieldCheckbox, g as FieldDescription, h as FieldErrors, m as FieldInput, p as FieldInputGroup, f as FieldInputGroupInput, d as FieldLabel, u as FieldRadio, l as FieldRadioGroup, c as FieldRow, s as FieldSelect, o as FieldSet, a as FieldSlider, i as FieldSwitch, r as FieldTextArea, n as FieldToggle } from "../field-DTL7eA5y.js";