@spark-ui/components 17.2.3 → 17.2.4

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 (302) hide show
  1. package/dist/DialogContent.styles-BSxCCi-u.mjs +62 -0
  2. package/dist/DialogContent.styles-BSxCCi-u.mjs.map +1 -0
  3. package/dist/DialogContent.styles-CAhJtUud.js +2 -0
  4. package/dist/DialogContent.styles-CAhJtUud.js.map +1 -0
  5. package/dist/FormFieldRequiredIndicator-CtgkvPZo.js +2 -0
  6. package/dist/FormFieldRequiredIndicator-CtgkvPZo.js.map +1 -0
  7. package/dist/FormFieldRequiredIndicator-DOGQ_HxO.mjs +14 -0
  8. package/dist/FormFieldRequiredIndicator-DOGQ_HxO.mjs.map +1 -0
  9. package/dist/accordion/index.js +2 -2
  10. package/dist/accordion/index.js.map +1 -1
  11. package/dist/accordion/index.mjs +99 -161
  12. package/dist/accordion/index.mjs.map +1 -1
  13. package/dist/alert-dialog/index.js +2 -2
  14. package/dist/alert-dialog/index.js.map +1 -1
  15. package/dist/alert-dialog/index.mjs +169 -235
  16. package/dist/alert-dialog/index.mjs.map +1 -1
  17. package/dist/avatar/index.js +2 -2
  18. package/dist/avatar/index.js.map +1 -1
  19. package/dist/avatar/index.mjs +187 -224
  20. package/dist/avatar/index.mjs.map +1 -1
  21. package/dist/badge/index.js +2 -2
  22. package/dist/badge/index.js.map +1 -1
  23. package/dist/badge/index.mjs +115 -81
  24. package/dist/badge/index.mjs.map +1 -1
  25. package/dist/breadcrumb/index.js +2 -2
  26. package/dist/breadcrumb/index.js.map +1 -1
  27. package/dist/breadcrumb/index.mjs +73 -106
  28. package/dist/breadcrumb/index.mjs.map +1 -1
  29. package/dist/button/index.js +1 -2
  30. package/dist/button/index.mjs +2 -5
  31. package/dist/button-BTDRzvpB.js +2 -0
  32. package/dist/button-BTDRzvpB.js.map +1 -0
  33. package/dist/button-_YZ_4J42.mjs +643 -0
  34. package/dist/button-_YZ_4J42.mjs.map +1 -0
  35. package/dist/card/index.js +2 -2
  36. package/dist/card/index.js.map +1 -1
  37. package/dist/card/index.mjs +327 -394
  38. package/dist/card/index.mjs.map +1 -1
  39. package/dist/carousel/index.js +2 -2
  40. package/dist/carousel/index.js.map +1 -1
  41. package/dist/carousel/index.mjs +515 -618
  42. package/dist/carousel/index.mjs.map +1 -1
  43. package/dist/checkbox/index.js +2 -2
  44. package/dist/checkbox/index.js.map +1 -1
  45. package/dist/checkbox/index.mjs +213 -246
  46. package/dist/checkbox/index.mjs.map +1 -1
  47. package/dist/chip/index.js +2 -2
  48. package/dist/chip/index.js.map +1 -1
  49. package/dist/chip/index.mjs +601 -652
  50. package/dist/chip/index.mjs.map +1 -1
  51. package/dist/chunk-C91j1N6u.js +1 -0
  52. package/dist/circular-meter/index.js +2 -2
  53. package/dist/circular-meter/index.js.map +1 -1
  54. package/dist/circular-meter/index.mjs +354 -309
  55. package/dist/circular-meter/index.mjs.map +1 -1
  56. package/dist/collapsible/index.js +2 -2
  57. package/dist/collapsible/index.js.map +1 -1
  58. package/dist/collapsible/index.mjs +53 -53
  59. package/dist/collapsible/index.mjs.map +1 -1
  60. package/dist/combobox/index.js +2 -2
  61. package/dist/combobox/index.js.map +1 -1
  62. package/dist/combobox/index.mjs +721 -876
  63. package/dist/combobox/index.mjs.map +1 -1
  64. package/dist/dialog/index.js +2 -2
  65. package/dist/dialog/index.js.map +1 -1
  66. package/dist/dialog/index.mjs +181 -206
  67. package/dist/dialog/index.mjs.map +1 -1
  68. package/dist/divider/index.js +2 -2
  69. package/dist/divider/index.js.map +1 -1
  70. package/dist/divider/index.mjs +178 -183
  71. package/dist/divider/index.mjs.map +1 -1
  72. package/dist/drawer/index.js +2 -2
  73. package/dist/drawer/index.js.map +1 -1
  74. package/dist/drawer/index.mjs +277 -309
  75. package/dist/drawer/index.mjs.map +1 -1
  76. package/dist/dropdown/index.js +2 -2
  77. package/dist/dropdown/index.js.map +1 -1
  78. package/dist/dropdown/index.mjs +429 -492
  79. package/dist/dropdown/index.mjs.map +1 -1
  80. package/dist/file-upload/index.js +2 -2
  81. package/dist/file-upload/index.js.map +1 -1
  82. package/dist/file-upload/index.mjs +540 -677
  83. package/dist/file-upload/index.mjs.map +1 -1
  84. package/dist/form-field/index.js +1 -2
  85. package/dist/form-field/index.mjs +2 -284
  86. package/dist/form-field-B8QzM655.mjs +231 -0
  87. package/dist/form-field-B8QzM655.mjs.map +1 -0
  88. package/dist/form-field-Bu_0E9tb.js +2 -0
  89. package/dist/form-field-Bu_0E9tb.js.map +1 -0
  90. package/dist/icon/index.js +1 -2
  91. package/dist/icon/index.mjs +2 -5
  92. package/dist/icon-CRPcdgYp.js +2 -0
  93. package/dist/icon-CRPcdgYp.js.map +1 -0
  94. package/dist/icon-D05Uqh8_.mjs +41 -0
  95. package/dist/icon-D05Uqh8_.mjs.map +1 -0
  96. package/dist/icon-button/index.js +1 -2
  97. package/dist/icon-button/index.mjs +2 -5
  98. package/dist/icon-button-6p3O7NIm.mjs +28 -0
  99. package/dist/icon-button-6p3O7NIm.mjs.map +1 -0
  100. package/dist/icon-button-CykysbgJ.js +2 -0
  101. package/dist/icon-button-CykysbgJ.js.map +1 -0
  102. package/dist/input/index.js +1 -2
  103. package/dist/input/index.mjs +2 -455
  104. package/dist/input-CmYeHYWQ.mjs +355 -0
  105. package/dist/input-CmYeHYWQ.mjs.map +1 -0
  106. package/dist/input-DNr40G2Z.js +2 -0
  107. package/dist/input-DNr40G2Z.js.map +1 -0
  108. package/dist/input-otp/index.js +2 -2
  109. package/dist/input-otp/index.js.map +1 -1
  110. package/dist/input-otp/index.mjs +344 -407
  111. package/dist/input-otp/index.mjs.map +1 -1
  112. package/dist/kbd/index.js +2 -2
  113. package/dist/kbd/index.js.map +1 -1
  114. package/dist/kbd/index.mjs +12 -17
  115. package/dist/kbd/index.mjs.map +1 -1
  116. package/dist/label/index.js +1 -2
  117. package/dist/label/index.mjs +2 -40
  118. package/dist/label-BqRlrca0.mjs +31 -0
  119. package/dist/label-BqRlrca0.mjs.map +1 -0
  120. package/dist/label-DU0p0d-f.js +2 -0
  121. package/dist/label-DU0p0d-f.js.map +1 -0
  122. package/dist/link-box/index.js +2 -2
  123. package/dist/link-box/index.js.map +1 -1
  124. package/dist/link-box/index.mjs +36 -34
  125. package/dist/link-box/index.mjs.map +1 -1
  126. package/dist/meter/index.js +2 -2
  127. package/dist/meter/index.js.map +1 -1
  128. package/dist/meter/index.mjs +149 -171
  129. package/dist/meter/index.mjs.map +1 -1
  130. package/dist/pagination/index.js +2 -2
  131. package/dist/pagination/index.js.map +1 -1
  132. package/dist/pagination/index.mjs +253 -214
  133. package/dist/pagination/index.mjs.map +1 -1
  134. package/dist/popover/index.js +1 -2
  135. package/dist/popover/index.mjs +2 -239
  136. package/dist/popover-CxZAQmw6.mjs +211 -0
  137. package/dist/popover-CxZAQmw6.mjs.map +1 -0
  138. package/dist/popover-GOovJ27J.js +2 -0
  139. package/dist/popover-GOovJ27J.js.map +1 -0
  140. package/dist/portal/index.js +2 -2
  141. package/dist/portal/index.js.map +1 -1
  142. package/dist/portal/index.mjs +8 -7
  143. package/dist/portal/index.mjs.map +1 -1
  144. package/dist/progress/index.js +1 -2
  145. package/dist/progress/index.mjs +2 -178
  146. package/dist/progress-cEf3tFbn.mjs +132 -0
  147. package/dist/progress-cEf3tFbn.mjs.map +1 -0
  148. package/dist/progress-rJZcPJsZ.js +2 -0
  149. package/dist/progress-rJZcPJsZ.js.map +1 -0
  150. package/dist/progress-tracker/index.js +2 -2
  151. package/dist/progress-tracker/index.js.map +1 -1
  152. package/dist/progress-tracker/index.mjs +303 -380
  153. package/dist/progress-tracker/index.mjs.map +1 -1
  154. package/dist/radio-group/index.js +2 -2
  155. package/dist/radio-group/index.js.map +1 -1
  156. package/dist/radio-group/index.mjs +204 -213
  157. package/dist/radio-group/index.mjs.map +1 -1
  158. package/dist/rating/index.js +2 -2
  159. package/dist/rating/index.js.map +1 -1
  160. package/dist/rating/index.mjs +189 -244
  161. package/dist/rating/index.mjs.map +1 -1
  162. package/dist/rating-display/index.js +2 -2
  163. package/dist/rating-display/index.js.map +1 -1
  164. package/dist/rating-display/index.mjs +165 -166
  165. package/dist/rating-display/index.mjs.map +1 -1
  166. package/dist/scrolling-list/index.js +2 -2
  167. package/dist/scrolling-list/index.js.map +1 -1
  168. package/dist/scrolling-list/index.mjs +216 -273
  169. package/dist/scrolling-list/index.mjs.map +1 -1
  170. package/dist/segmented-control/index.js +2 -2
  171. package/dist/segmented-control/index.js.map +1 -1
  172. package/dist/segmented-control/index.mjs +146 -180
  173. package/dist/segmented-control/index.mjs.map +1 -1
  174. package/dist/segmented-gauge/index.js +2 -2
  175. package/dist/segmented-gauge/index.js.map +1 -1
  176. package/dist/segmented-gauge/index.mjs +146 -195
  177. package/dist/segmented-gauge/index.mjs.map +1 -1
  178. package/dist/select/index.js +2 -2
  179. package/dist/select/index.js.map +1 -1
  180. package/dist/select/index.mjs +279 -327
  181. package/dist/select/index.mjs.map +1 -1
  182. package/dist/skeleton/index.js +2 -2
  183. package/dist/skeleton/index.js.map +1 -1
  184. package/dist/skeleton/index.mjs +92 -114
  185. package/dist/skeleton/index.mjs.map +1 -1
  186. package/dist/slider/index.js +2 -2
  187. package/dist/slider/index.js.map +1 -1
  188. package/dist/slider/index.mjs +259 -326
  189. package/dist/slider/index.mjs.map +1 -1
  190. package/dist/slot/index.js +2 -2
  191. package/dist/slot/index.js.map +1 -1
  192. package/dist/slot/index.mjs +12 -7
  193. package/dist/slot/index.mjs.map +1 -1
  194. package/dist/snackbar/index.js +2 -2
  195. package/dist/snackbar/index.js.map +1 -1
  196. package/dist/snackbar/index.mjs +404 -529
  197. package/dist/snackbar/index.mjs.map +1 -1
  198. package/dist/spinner/index.js +1 -2
  199. package/dist/spinner/index.mjs +2 -5
  200. package/dist/spinner-DFUoYvmm.js +2 -0
  201. package/dist/spinner-DFUoYvmm.js.map +1 -0
  202. package/dist/spinner-DULLiM6a.mjs +56 -0
  203. package/dist/spinner-DULLiM6a.mjs.map +1 -0
  204. package/dist/src/avatar/index.d.mts +2 -2
  205. package/dist/src/avatar/index.d.ts +2 -2
  206. package/dist/src/file-upload/index.d.mts +1 -1
  207. package/dist/src/file-upload/index.d.ts +1 -1
  208. package/dist/stepper/index.js +2 -2
  209. package/dist/stepper/index.js.map +1 -1
  210. package/dist/stepper/index.mjs +139 -176
  211. package/dist/stepper/index.mjs.map +1 -1
  212. package/dist/switch/index.js +2 -2
  213. package/dist/switch/index.js.map +1 -1
  214. package/dist/switch/index.mjs +194 -197
  215. package/dist/switch/index.mjs.map +1 -1
  216. package/dist/tabs/index.js +2 -2
  217. package/dist/tabs/index.js.map +1 -1
  218. package/dist/tabs/index.mjs +337 -389
  219. package/dist/tabs/index.mjs.map +1 -1
  220. package/dist/tag/index.js +2 -2
  221. package/dist/tag/index.js.map +1 -1
  222. package/dist/tag/index.mjs +192 -211
  223. package/dist/tag/index.mjs.map +1 -1
  224. package/dist/text-link/index.js +2 -2
  225. package/dist/text-link/index.js.map +1 -1
  226. package/dist/text-link/index.mjs +44 -5
  227. package/dist/text-link/index.mjs.map +1 -1
  228. package/dist/textarea/index.js +2 -2
  229. package/dist/textarea/index.js.map +1 -1
  230. package/dist/textarea/index.mjs +51 -50
  231. package/dist/textarea/index.mjs.map +1 -1
  232. package/dist/toast/index.js +2 -2
  233. package/dist/toast/index.js.map +1 -1
  234. package/dist/toast/index.mjs +314 -367
  235. package/dist/toast/index.mjs.map +1 -1
  236. package/dist/useRenderSlot-DP4fYerF.mjs +11 -0
  237. package/dist/useRenderSlot-DP4fYerF.mjs.map +1 -0
  238. package/dist/useRenderSlot-Xxf_s88b.js +2 -0
  239. package/dist/useRenderSlot-Xxf_s88b.js.map +1 -0
  240. package/dist/visually-hidden/index.js +2 -2
  241. package/dist/visually-hidden/index.js.map +1 -1
  242. package/dist/visually-hidden/index.mjs +25 -5
  243. package/dist/visually-hidden/index.mjs.map +1 -1
  244. package/package.json +4 -4
  245. package/dist/Button-1M9DcZl0.mjs +0 -704
  246. package/dist/Button-1M9DcZl0.mjs.map +0 -1
  247. package/dist/Button-FZceRWG2.js +0 -2
  248. package/dist/Button-FZceRWG2.js.map +0 -1
  249. package/dist/DialogContent.styles-CziMQtYr.js +0 -2
  250. package/dist/DialogContent.styles-CziMQtYr.js.map +0 -1
  251. package/dist/DialogContent.styles-Du7_Dkde.mjs +0 -60
  252. package/dist/DialogContent.styles-Du7_Dkde.mjs.map +0 -1
  253. package/dist/FormFieldRequiredIndicator-CHfcoT2y.js +0 -2
  254. package/dist/FormFieldRequiredIndicator-CHfcoT2y.js.map +0 -1
  255. package/dist/FormFieldRequiredIndicator-DTnCGiX2.mjs +0 -13
  256. package/dist/FormFieldRequiredIndicator-DTnCGiX2.mjs.map +0 -1
  257. package/dist/Icon-BO327oHU.mjs +0 -57
  258. package/dist/Icon-BO327oHU.mjs.map +0 -1
  259. package/dist/Icon-C-cNTnzd.js +0 -2
  260. package/dist/Icon-C-cNTnzd.js.map +0 -1
  261. package/dist/IconButton-BR1bJSQA.js +0 -2
  262. package/dist/IconButton-BR1bJSQA.js.map +0 -1
  263. package/dist/IconButton-DdB3Pq13.mjs +0 -43
  264. package/dist/IconButton-DdB3Pq13.mjs.map +0 -1
  265. package/dist/Slot-DLY1rJrG.mjs +0 -14
  266. package/dist/Slot-DLY1rJrG.mjs.map +0 -1
  267. package/dist/Slot-DQ8z2zsy.js +0 -2
  268. package/dist/Slot-DQ8z2zsy.js.map +0 -1
  269. package/dist/Spinner-Br4Rp9V2.js +0 -2
  270. package/dist/Spinner-Br4Rp9V2.js.map +0 -1
  271. package/dist/Spinner-Co3AjkQV.mjs +0 -68
  272. package/dist/Spinner-Co3AjkQV.mjs.map +0 -1
  273. package/dist/TextLink-5MvP0P8D.js +0 -2
  274. package/dist/TextLink-5MvP0P8D.js.map +0 -1
  275. package/dist/TextLink-Cc_LeVcx.mjs +0 -57
  276. package/dist/TextLink-Cc_LeVcx.mjs.map +0 -1
  277. package/dist/VisuallyHidden-CB6Nx76j.js +0 -2
  278. package/dist/VisuallyHidden-CB6Nx76j.js.map +0 -1
  279. package/dist/VisuallyHidden-DjlV0-CW.mjs +0 -28
  280. package/dist/VisuallyHidden-DjlV0-CW.mjs.map +0 -1
  281. package/dist/button/index.js.map +0 -1
  282. package/dist/button/index.mjs.map +0 -1
  283. package/dist/form-field/index.js.map +0 -1
  284. package/dist/form-field/index.mjs.map +0 -1
  285. package/dist/icon/index.js.map +0 -1
  286. package/dist/icon/index.mjs.map +0 -1
  287. package/dist/icon-button/index.js.map +0 -1
  288. package/dist/icon-button/index.mjs.map +0 -1
  289. package/dist/input/index.js.map +0 -1
  290. package/dist/input/index.mjs.map +0 -1
  291. package/dist/label/index.js.map +0 -1
  292. package/dist/label/index.mjs.map +0 -1
  293. package/dist/popover/index.js.map +0 -1
  294. package/dist/popover/index.mjs.map +0 -1
  295. package/dist/progress/index.js.map +0 -1
  296. package/dist/progress/index.mjs.map +0 -1
  297. package/dist/spinner/index.js.map +0 -1
  298. package/dist/spinner/index.mjs.map +0 -1
  299. package/dist/useRenderSlot-Bta2kdp4.mjs +0 -10
  300. package/dist/useRenderSlot-Bta2kdp4.mjs.map +0 -1
  301. package/dist/useRenderSlot-DATwjgpo.js +0 -2
  302. package/dist/useRenderSlot-DATwjgpo.js.map +0 -1
@@ -1,696 +1,559 @@
1
- import { jsx as s, jsxs as M, Fragment as Fe } from "react/jsx-runtime";
2
- import { useFormFieldControl as be } from "@spark-ui/components/form-field";
3
- import { createElement as X, useState as G, createContext as se, useId as he, useRef as z, useContext as le, useEffect as de, useCallback as ye } from "react";
4
- import { useCombinedState as Ie } from "@spark-ui/hooks/use-combined-state";
5
- import { CvOutline as Re } from "@spark-ui/icons/CvOutline";
6
- import { FilePdfOutline as Le } from "@spark-ui/icons/FilePdfOutline";
7
- import { ImageOutline as Ne } from "@spark-ui/icons/ImageOutline";
8
- import { PlayOutline as xe } from "@spark-ui/icons/PlayOutline";
9
- import { cx as _ } from "class-variance-authority";
10
- import { I as K } from "../Icon-BO327oHU.mjs";
11
- import { Progress as Ee } from "../progress/index.mjs";
12
- import { Close as ce } from "@spark-ui/icons/Close";
13
- import { I as ue } from "../IconButton-DdB3Pq13.mjs";
14
- import { WarningOutline as je } from "@spark-ui/icons/WarningOutline";
15
- import { b as Te, B as De } from "../Button-1M9DcZl0.mjs";
16
- import { S as Oe } from "../Slot-DLY1rJrG.mjs";
17
- const O = {
18
- /**
19
- * Exceeds the maxFiles limit
20
- */
21
- TOO_MANY_FILES: "TOO_MANY_FILES",
22
- /**
23
- * File type not in the accept list
24
- */
25
- FILE_INVALID_TYPE: "FILE_INVALID_TYPE",
26
- /**
27
- * File size exceeds maxFileSize
28
- */
29
- FILE_TOO_LARGE: "FILE_TOO_LARGE",
30
- /**
31
- * File size below minFileSize
32
- */
33
- FILE_TOO_SMALL: "FILE_TOO_SMALL",
34
- /**
35
- * Generic validation failure
36
- */
37
- FILE_INVALID: "FILE_INVALID",
38
- /**
39
- * Duplicate file detected
40
- */
41
- FILE_EXISTS: "FILE_EXISTS"
1
+ import { Slot as e } from "../slot/index.mjs";
2
+ import { t } from "../icon-D05Uqh8_.mjs";
3
+ import { n, t as r } from "../button-_YZ_4J42.mjs";
4
+ import { t as i } from "../icon-button-6p3O7NIm.mjs";
5
+ import { t as a } from "../progress-cEf3tFbn.mjs";
6
+ import { cx as o } from "class-variance-authority";
7
+ import { createContext as s, createElement as c, useCallback as l, useContext as u, useEffect as d, useId as f, useRef as p, useState as m } from "react";
8
+ import { Fragment as h, jsx as g, jsxs as _ } from "react/jsx-runtime";
9
+ import { useFormFieldControl as v } from "@spark-ui/components/form-field";
10
+ import { useCombinedState as y } from "@spark-ui/hooks/use-combined-state";
11
+ import { Close as b } from "@spark-ui/icons/Close";
12
+ import { CvOutline as x } from "@spark-ui/icons/CvOutline";
13
+ import { FilePdfOutline as S } from "@spark-ui/icons/FilePdfOutline";
14
+ import { ImageOutline as C } from "@spark-ui/icons/ImageOutline";
15
+ import { PlayOutline as w } from "@spark-ui/icons/PlayOutline";
16
+ import { WarningOutline as T } from "@spark-ui/icons/WarningOutline";
17
+ //#region src/file-upload/constants.ts
18
+ var E = {
19
+ TOO_MANY_FILES: "TOO_MANY_FILES",
20
+ FILE_INVALID_TYPE: "FILE_INVALID_TYPE",
21
+ FILE_TOO_LARGE: "FILE_TOO_LARGE",
22
+ FILE_TOO_SMALL: "FILE_TOO_SMALL",
23
+ FILE_INVALID: "FILE_INVALID",
24
+ FILE_EXISTS: "FILE_EXISTS"
42
25
  };
43
- function oe(t, r) {
44
- return r ? r.split(",").map((e) => e.trim()).some((e) => {
45
- if (e.includes("/")) {
46
- if (e.endsWith("/*")) {
47
- const d = e.slice(0, -2);
48
- return t.type.startsWith(d + "/");
49
- }
50
- return t.type === e;
51
- }
52
- if (e.startsWith(".")) {
53
- const d = e.toLowerCase();
54
- return t.name.toLowerCase().endsWith(d);
55
- }
56
- const o = "." + e.toLowerCase();
57
- return t.name.toLowerCase().endsWith(o);
58
- }) : !0;
26
+ //#endregion
27
+ //#region src/file-upload/utils.ts
28
+ function D(e, t) {
29
+ return t ? t.split(",").map((e) => e.trim()).some((t) => {
30
+ if (t.includes("/")) {
31
+ if (t.endsWith("/*")) {
32
+ let n = t.slice(0, -2);
33
+ return e.type.startsWith(n + "/");
34
+ }
35
+ return e.type === t;
36
+ }
37
+ if (t.startsWith(".")) {
38
+ let n = t.toLowerCase();
39
+ return e.name.toLowerCase().endsWith(n);
40
+ }
41
+ let n = "." + t.toLowerCase();
42
+ return e.name.toLowerCase().endsWith(n);
43
+ }) : !0;
59
44
  }
60
- function _e(t, r, i, e) {
61
- const o = e || fe();
62
- return r !== void 0 && t.size < r ? {
63
- valid: !1,
64
- error: `File "${t.name}" is too small. Minimum size is ${W(r, o)}.`
65
- } : i !== void 0 && t.size > i ? {
66
- valid: !1,
67
- error: `File "${t.name}" is too large. Maximum size is ${W(i, o)}.`
68
- } : { valid: !0 };
45
+ function O(e, t, n, r) {
46
+ let i = r || k();
47
+ return t !== void 0 && e.size < t ? {
48
+ valid: !1,
49
+ error: `File "${e.name}" is too small. Minimum size is ${A(t, i)}.`
50
+ } : n !== void 0 && e.size > n ? {
51
+ valid: !1,
52
+ error: `File "${e.name}" is too large. Maximum size is ${A(n, i)}.`
53
+ } : { valid: !0 };
69
54
  }
70
- function fe() {
71
- return typeof navigator < "u" && navigator.language ? navigator.language : "en";
55
+ function k() {
56
+ return typeof navigator < "u" && navigator.language ? navigator.language : "en";
72
57
  }
73
- function W(t, r) {
74
- const i = r || fe();
75
- let e = i;
76
- if (i.length === 2 && (e = i === "fr" ? "fr-FR" : "en-US"), t === 0)
77
- return new Intl.NumberFormat(e, {
78
- style: "unit",
79
- unit: "byte",
80
- unitDisplay: "long",
81
- minimumFractionDigits: 0,
82
- maximumFractionDigits: 0
83
- }).format(0);
84
- const o = 1024, c = Math.floor(Math.log(t) / Math.log(o)), a = ["byte", "kilobyte", "megabyte", "gigabyte"][c] || "byte", l = t / Math.pow(o, c), n = c === 0 ? "long" : "short";
85
- return new Intl.NumberFormat(e, {
86
- style: "unit",
87
- unit: a,
88
- unitDisplay: n,
89
- minimumFractionDigits: 0,
90
- maximumFractionDigits: 2
91
- }).format(l);
58
+ function A(e, t) {
59
+ let n = t || k(), r = n;
60
+ if (n.length === 2 && (r = n === "fr" ? "fr-FR" : "en-US"), e === 0) return new Intl.NumberFormat(r, {
61
+ style: "unit",
62
+ unit: "byte",
63
+ unitDisplay: "long",
64
+ minimumFractionDigits: 0,
65
+ maximumFractionDigits: 0
66
+ }).format(0);
67
+ let i = 1024, a = Math.floor(Math.log(e) / Math.log(i)), o = [
68
+ "byte",
69
+ "kilobyte",
70
+ "megabyte",
71
+ "gigabyte"
72
+ ][a] || "byte", s = e / i ** +a, c = a === 0 ? "long" : "short";
73
+ return new Intl.NumberFormat(r, {
74
+ style: "unit",
75
+ unit: o,
76
+ unitDisplay: c,
77
+ minimumFractionDigits: 0,
78
+ maximumFractionDigits: 2
79
+ }).format(s);
92
80
  }
93
- function we(t) {
94
- const r = t.type.toLowerCase(), i = t.name.toLowerCase();
95
- return r.startsWith("image/") || /\.(jpg|jpeg|png|gif|bmp|webp|svg|ico)$/i.test(i) ? X(Ne) : r === "application/pdf" || i.endsWith(".pdf") ? X(Le) : r.startsWith("video/") || /\.(mp4|avi|mov|wmv|flv|webm|mkv)$/i.test(i) ? X(xe) : X(Re);
81
+ function j(e) {
82
+ let t = e.type.toLowerCase(), n = e.name.toLowerCase();
83
+ return t.startsWith("image/") || /\.(jpg|jpeg|png|gif|bmp|webp|svg|ico)$/i.test(n) ? c(C) : t === "application/pdf" || n.endsWith(".pdf") ? c(S) : t.startsWith("video/") || /\.(mp4|avi|mov|wmv|flv|webm|mkv)$/i.test(n) ? c(w) : c(x);
96
84
  }
97
- function Ae(t) {
98
- if (!t)
99
- return !1;
100
- if (t.tabIndex >= 0)
101
- return !0;
102
- const i = String(t.contentEditable) === "true";
103
- return t instanceof HTMLInputElement || t instanceof HTMLButtonElement || t instanceof HTMLSelectElement || t instanceof HTMLTextAreaElement || t instanceof HTMLAnchorElement && !!t.href || i;
85
+ function M(e) {
86
+ if (!e) return !1;
87
+ if (e.tabIndex >= 0) return !0;
88
+ let t = String(e.contentEditable) === "true";
89
+ return e instanceof HTMLInputElement || e instanceof HTMLButtonElement || e instanceof HTMLSelectElement || e instanceof HTMLTextAreaElement || e instanceof HTMLAnchorElement && !!e.href || t;
104
90
  }
105
- function me(t, r) {
106
- for (const i of t)
107
- if (Ae(i))
108
- return i;
109
- return r.current ? r.current : null;
91
+ function N(e, t) {
92
+ for (let t of e) if (M(t)) return t;
93
+ return t.current ? t.current : null;
110
94
  }
111
- function ze({
112
- defaultValue: t = [],
113
- value: r,
114
- onFileAccept: i,
115
- onFileReject: e,
116
- onFileChange: o,
117
- multiple: c = !0,
118
- accept: d,
119
- maxFiles: a,
120
- maxFileSize: l,
121
- minFileSize: n,
122
- disabled: m = !1,
123
- readOnly: p = !1,
124
- locale: x
125
- }) {
126
- const f = x || (typeof navigator < "u" && navigator.language ? navigator.language : "en"), [E, F] = Ie(r, t), u = E ?? [], I = F, [b, g] = G([]), U = (j) => {
127
- if (m || p)
128
- return;
129
- g([]);
130
- const T = [], P = (L, N) => N.some(
131
- (y) => y.name === L.name && y.size === L.size
132
- ), h = (L, N) => {
133
- const y = T.find(
134
- (w) => w.file.name === L.name && w.file.size === L.size
135
- );
136
- y ? y.errors.includes(N) || y.errors.push(N) : T.push({
137
- file: L,
138
- errors: [N]
139
- });
140
- };
141
- I((L) => {
142
- const N = L ?? [], y = a !== void 0 ? a - N.length : void 0;
143
- y !== void 0 && y <= 0 && j.forEach((v) => {
144
- h(v, O.TOO_MANY_FILES);
145
- });
146
- let w = j;
147
- d && (j.filter((D) => !oe(D, d)).forEach((D) => {
148
- h(D, O.FILE_INVALID_TYPE);
149
- }), w = j.filter((D) => oe(D, d)));
150
- let Y = w;
151
- (n !== void 0 || l !== void 0) && (Y = w.filter((v) => _e(v, n, l, f).valid ? !0 : (l !== void 0 && v.size > l ? h(v, O.FILE_TOO_LARGE) : n !== void 0 && v.size < n ? h(v, O.FILE_TOO_SMALL) : h(v, O.FILE_INVALID), !1)));
152
- const H = /* @__PURE__ */ new Map(), q = Y.filter((v) => {
153
- const D = `${v.name}-${v.size}`;
154
- return P(v, N) || H.has(D) ? (h(v, O.FILE_EXISTS), !1) : (H.set(D, v), !0);
155
- });
156
- let A = c ? q : q.slice(0, 1);
157
- y !== void 0 && (y <= 0 ? A = [] : A.length > y && (A.forEach((v) => {
158
- h(v, O.TOO_MANY_FILES);
159
- }), A = []));
160
- const ae = c ? [...N, ...A] : A, V = [...T];
161
- return g(V), A.length > 0 && i && i({ files: A }), V.length > 0 && e && e({ files: V }), o && o({
162
- acceptedFiles: ae,
163
- rejectedFiles: V
164
- }), ae;
165
- });
166
- }, C = (j) => {
167
- m || p || I((T) => {
168
- const h = (T ?? []).filter((N, y) => y !== j);
169
- let L = b;
170
- return a !== void 0 && h.length < a && (L = b.filter(
171
- (N) => !N.errors.includes(O.TOO_MANY_FILES)
172
- ), g(L)), o && o({
173
- acceptedFiles: h,
174
- rejectedFiles: L
175
- }), h;
176
- });
177
- }, R = () => {
178
- m || p || (I([]), g([]), o && o({
179
- acceptedFiles: [],
180
- rejectedFiles: []
181
- }));
182
- }, $ = (j) => {
183
- m || p || g((T) => T.filter((P, h) => h !== j));
184
- }, k = () => {
185
- g([]);
186
- }, B = a !== void 0 && u.length >= a;
187
- return {
188
- files: u,
189
- rejectedFiles: b,
190
- addFiles: U,
191
- removeFile: C,
192
- removeRejectedFile: $,
193
- clearFiles: R,
194
- clearRejectedFiles: k,
195
- maxFilesReached: B
196
- };
95
+ //#endregion
96
+ //#region src/file-upload/useFileUploadState.tsx
97
+ function P({ defaultValue: e = [], value: t, onFileAccept: n, onFileReject: r, onFileChange: i, multiple: a = !0, accept: o, maxFiles: s, maxFileSize: c, minFileSize: l, disabled: u = !1, readOnly: d = !1, locale: f }) {
98
+ let p = f || (typeof navigator < "u" && navigator.language ? navigator.language : "en"), [h, g] = y(t, e), _ = h ?? [], v = g, [b, x] = m([]);
99
+ return {
100
+ files: _,
101
+ rejectedFiles: b,
102
+ addFiles: (e) => {
103
+ if (u || d) return;
104
+ x([]);
105
+ let t = [], f = (e, t) => t.some((t) => t.name === e.name && t.size === e.size), m = (e, n) => {
106
+ let r = t.find((t) => t.file.name === e.name && t.file.size === e.size);
107
+ r ? r.errors.includes(n) || r.errors.push(n) : t.push({
108
+ file: e,
109
+ errors: [n]
110
+ });
111
+ };
112
+ v((u) => {
113
+ let d = u ?? [], h = s === void 0 ? void 0 : s - d.length;
114
+ h !== void 0 && h <= 0 && e.forEach((e) => {
115
+ m(e, E.TOO_MANY_FILES);
116
+ });
117
+ let g = e;
118
+ o && (e.filter((e) => !D(e, o)).forEach((e) => {
119
+ m(e, E.FILE_INVALID_TYPE);
120
+ }), g = e.filter((e) => D(e, o)));
121
+ let _ = g;
122
+ (l !== void 0 || c !== void 0) && (_ = g.filter((e) => O(e, l, c, p).valid ? !0 : (c !== void 0 && e.size > c ? m(e, E.FILE_TOO_LARGE) : l !== void 0 && e.size < l ? m(e, E.FILE_TOO_SMALL) : m(e, E.FILE_INVALID), !1)));
123
+ let v = /* @__PURE__ */ new Map(), y = _.filter((e) => {
124
+ let t = `${e.name}-${e.size}`;
125
+ return f(e, d) || v.has(t) ? (m(e, E.FILE_EXISTS), !1) : (v.set(t, e), !0);
126
+ }), b = a ? y : y.slice(0, 1);
127
+ h !== void 0 && (h <= 0 ? b = [] : b.length > h && (b.forEach((e) => {
128
+ m(e, E.TOO_MANY_FILES);
129
+ }), b = []));
130
+ let S = a ? [...d, ...b] : b, C = [...t];
131
+ return x(C), b.length > 0 && n && n({ files: b }), C.length > 0 && r && r({ files: C }), i && i({
132
+ acceptedFiles: S,
133
+ rejectedFiles: C
134
+ }), S;
135
+ });
136
+ },
137
+ removeFile: (e) => {
138
+ u || d || v((t) => {
139
+ let n = (t ?? []).filter((t, n) => n !== e), r = b;
140
+ return s !== void 0 && n.length < s && (r = b.filter((e) => !e.errors.includes(E.TOO_MANY_FILES)), x(r)), i && i({
141
+ acceptedFiles: n,
142
+ rejectedFiles: r
143
+ }), n;
144
+ });
145
+ },
146
+ removeRejectedFile: (e) => {
147
+ u || d || x((t) => t.filter((t, n) => n !== e));
148
+ },
149
+ clearFiles: () => {
150
+ u || d || (v([]), x([]), i && i({
151
+ acceptedFiles: [],
152
+ rejectedFiles: []
153
+ }));
154
+ },
155
+ clearRejectedFiles: () => {
156
+ x([]);
157
+ },
158
+ maxFilesReached: s !== void 0 && _.length >= s
159
+ };
197
160
  }
198
- const pe = se(null), Ue = ":file-upload", ge = ({
199
- asChild: t = !1,
200
- children: r,
201
- defaultValue: i = [],
202
- value: e,
203
- onFileAccept: o,
204
- onFileReject: c,
205
- onFileChange: d,
206
- multiple: a = !0,
207
- accept: l,
208
- maxFiles: n,
209
- maxFileSize: m,
210
- minFileSize: p,
211
- disabled: x = !1,
212
- readOnly: f = !1,
213
- locale: E
214
- }) => {
215
- const F = be(), u = he(), I = F.id || `${Ue}-${u}`, b = F.name, g = z(null), U = z(null), C = z(null), R = z([]), $ = z([]), k = F.disabled ?? x, B = F.readOnly ?? f, {
216
- files: j,
217
- rejectedFiles: T,
218
- addFiles: P,
219
- removeFile: h,
220
- removeRejectedFile: L,
221
- clearFiles: N,
222
- clearRejectedFiles: y,
223
- maxFilesReached: w
224
- } = ze({
225
- defaultValue: i,
226
- value: e,
227
- onFileAccept: o,
228
- onFileReject: c,
229
- onFileChange: d,
230
- multiple: a,
231
- accept: l,
232
- maxFiles: n,
233
- maxFileSize: m,
234
- minFileSize: p,
235
- disabled: k,
236
- readOnly: B,
237
- locale: E
238
- }), Y = () => {
239
- N(), R.current = [];
240
- }, H = () => {
241
- y(), $.current = [];
242
- };
243
- return /* @__PURE__ */ s(
244
- pe.Provider,
245
- {
246
- value: {
247
- inputRef: g,
248
- files: j,
249
- rejectedFiles: T,
250
- addFiles: P,
251
- removeFile: h,
252
- removeRejectedFile: L,
253
- clearFiles: Y,
254
- clearRejectedFiles: H,
255
- triggerRef: U,
256
- dropzoneRef: C,
257
- deleteButtonRefs: R,
258
- rejectedFileDeleteButtonRefs: $,
259
- multiple: a,
260
- maxFiles: n,
261
- maxFilesReached: w,
262
- disabled: k,
263
- readOnly: B,
264
- locale: E || (typeof navigator < "u" && navigator.language ? navigator.language : "en"),
265
- description: F.description,
266
- isInvalid: F.isInvalid,
267
- isRequired: F.isRequired
268
- },
269
- children: /* @__PURE__ */ M("div", { className: "relative", children: [
270
- r,
271
- /* @__PURE__ */ s(
272
- "input",
273
- {
274
- ref: g,
275
- type: "file",
276
- tabIndex: -1,
277
- id: I,
278
- multiple: a,
279
- name: b,
280
- accept: l,
281
- disabled: k,
282
- readOnly: B && !k,
283
- required: F.isRequired,
284
- "aria-invalid": F.isInvalid,
285
- "aria-describedby": F.description,
286
- "aria-label": F.labelId ? void 0 : "Upload files",
287
- className: "sr-only",
288
- onChange: (q) => {
289
- if (q.target.files && !k && !B) {
290
- P(Array.from(q.target.files));
291
- try {
292
- q.target.value = "";
293
- } catch {
294
- }
295
- }
296
- }
297
- }
298
- )
299
- ] })
300
- }
301
- );
161
+ //#endregion
162
+ //#region src/file-upload/FileUpload.tsx
163
+ var F = s(null), I = ":file-upload", L = ({ asChild: e = !1, children: t, defaultValue: n = [], value: r, onFileAccept: i, onFileReject: a, onFileChange: o, multiple: s = !0, accept: c, maxFiles: l, maxFileSize: u, minFileSize: d, disabled: m = !1, readOnly: h = !1, locale: y }) => {
164
+ let b = v(), x = f(), S = b.id || `${I}-${x}`, C = b.name, w = p(null), T = p(null), E = p(null), D = p([]), O = p([]), k = b.disabled ?? m, A = b.readOnly ?? h, { files: j, rejectedFiles: M, addFiles: N, removeFile: L, removeRejectedFile: R, clearFiles: z, clearRejectedFiles: B, maxFilesReached: V } = P({
165
+ defaultValue: n,
166
+ value: r,
167
+ onFileAccept: i,
168
+ onFileReject: a,
169
+ onFileChange: o,
170
+ multiple: s,
171
+ accept: c,
172
+ maxFiles: l,
173
+ maxFileSize: u,
174
+ minFileSize: d,
175
+ disabled: k,
176
+ readOnly: A,
177
+ locale: y
178
+ });
179
+ return /* @__PURE__ */ g(F.Provider, {
180
+ value: {
181
+ inputRef: w,
182
+ files: j,
183
+ rejectedFiles: M,
184
+ addFiles: N,
185
+ removeFile: L,
186
+ removeRejectedFile: R,
187
+ clearFiles: () => {
188
+ z(), D.current = [];
189
+ },
190
+ clearRejectedFiles: () => {
191
+ B(), O.current = [];
192
+ },
193
+ triggerRef: T,
194
+ dropzoneRef: E,
195
+ deleteButtonRefs: D,
196
+ rejectedFileDeleteButtonRefs: O,
197
+ multiple: s,
198
+ maxFiles: l,
199
+ maxFilesReached: V,
200
+ disabled: k,
201
+ readOnly: A,
202
+ locale: y || (typeof navigator < "u" && navigator.language ? navigator.language : "en"),
203
+ description: b.description,
204
+ isInvalid: b.isInvalid,
205
+ isRequired: b.isRequired
206
+ },
207
+ children: /* @__PURE__ */ _("div", {
208
+ className: "relative",
209
+ children: [t, /* @__PURE__ */ g("input", {
210
+ ref: w,
211
+ type: "file",
212
+ tabIndex: -1,
213
+ id: S,
214
+ multiple: s,
215
+ name: C,
216
+ accept: c,
217
+ disabled: k,
218
+ readOnly: A && !k,
219
+ required: b.isRequired,
220
+ "aria-invalid": b.isInvalid,
221
+ "aria-describedby": b.description,
222
+ "aria-label": b.labelId ? void 0 : "Upload files",
223
+ className: "sr-only",
224
+ onChange: (e) => {
225
+ if (e.target.files && !k && !A) {
226
+ N(Array.from(e.target.files));
227
+ try {
228
+ e.target.value = "";
229
+ } catch {}
230
+ }
231
+ }
232
+ })]
233
+ })
234
+ });
302
235
  };
303
- ge.displayName = "FileUpload";
304
- const S = () => {
305
- const t = le(pe);
306
- if (!t)
307
- throw Error("useFileUploadContext must be used within a FileUpload provider");
308
- return t;
309
- }, J = ({
310
- className: t,
311
- file: r,
312
- onClick: i,
313
- ...e
314
- }) => {
315
- const {
316
- removeFile: o,
317
- triggerRef: c,
318
- dropzoneRef: d,
319
- deleteButtonRefs: a,
320
- inputRef: l,
321
- disabled: n,
322
- readOnly: m,
323
- files: p
324
- } = S(), x = z(null), f = p.findIndex((u) => u.name === r.name && u.size === r.size), E = (u) => {
325
- n || m || (o(f), requestAnimationFrame(() => {
326
- const I = a.current.filter(Boolean);
327
- if (I.length > 0) {
328
- const b = Math.min(f, I.length - 1), g = I[b];
329
- g && g.focus();
330
- } else {
331
- const b = me(
332
- [c.current, d.current],
333
- l
334
- );
335
- b && b.focus();
336
- }
337
- }), i?.(u));
338
- };
339
- return /* @__PURE__ */ s(
340
- ue,
341
- {
342
- ref: (u) => {
343
- if (x.current = u, u) {
344
- for (; a.current.length <= f; )
345
- a.current.push(null);
346
- a.current[f] = u;
347
- } else
348
- a.current[f] && (a.current[f] = null);
349
- },
350
- "data-spark-component": "file-upload-item-delete-trigger",
351
- className: _(t),
352
- onClick: E,
353
- disabled: n || m,
354
- size: "sm",
355
- design: "contrast",
356
- intent: "surface",
357
- ...e,
358
- children: /* @__PURE__ */ s(K, { size: "sm", children: /* @__PURE__ */ s(ce, {}) })
359
- }
360
- );
236
+ L.displayName = "FileUpload";
237
+ var R = () => {
238
+ let e = u(F);
239
+ if (!e) throw Error("useFileUploadContext must be used within a FileUpload provider");
240
+ return e;
241
+ }, z = ({ className: e, file: n, onClick: r, ...a }) => {
242
+ let { removeFile: s, triggerRef: c, dropzoneRef: l, deleteButtonRefs: u, inputRef: d, disabled: f, readOnly: m, files: h } = R(), _ = p(null), v = h.findIndex((e) => e.name === n.name && e.size === n.size), y = (e) => {
243
+ f || m || (s(v), requestAnimationFrame(() => {
244
+ let e = u.current.filter(Boolean);
245
+ if (e.length > 0) {
246
+ let t = e[Math.min(v, e.length - 1)];
247
+ t && t.focus();
248
+ } else {
249
+ let e = N([c.current, l.current], d);
250
+ e && e.focus();
251
+ }
252
+ }), r?.(e));
253
+ };
254
+ return /* @__PURE__ */ g(i, {
255
+ ref: (e) => {
256
+ if (_.current = e, e) {
257
+ for (; u.current.length <= v;) u.current.push(null);
258
+ u.current[v] = e;
259
+ } else u.current[v] && (u.current[v] = null);
260
+ },
261
+ "data-spark-component": "file-upload-item-delete-trigger",
262
+ className: o(e),
263
+ onClick: y,
264
+ disabled: f || m,
265
+ size: "sm",
266
+ design: "contrast",
267
+ intent: "surface",
268
+ ...a,
269
+ children: /* @__PURE__ */ g(t, {
270
+ size: "sm",
271
+ children: /* @__PURE__ */ g(b, {})
272
+ })
273
+ });
361
274
  };
362
- J.displayName = "FileUpload.ItemDeleteTrigger";
363
- const Z = ({
364
- className: t,
365
- file: r,
366
- uploadProgress: i,
367
- deleteButtonAriaLabel: e,
368
- progressAriaLabel: o,
369
- ...c
370
- }) => {
371
- const { locale: d } = S(), [a, l] = G(i !== void 0);
372
- de(() => {
373
- l(i !== void 0);
374
- }, [i]);
375
- const n = ye(() => {
376
- l(!1);
377
- }, []);
378
- return /* @__PURE__ */ M(
379
- "li",
380
- {
381
- "data-spark-component": "file-upload-accepted-file",
382
- className: _(
383
- "relative",
384
- "default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
385
- "gap-md flex items-center justify-between default:w-full",
386
- t
387
- ),
388
- ...c,
389
- children: [
390
- /* @__PURE__ */ s("div", { className: "size-sz-36 bg-support-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ s(K, { size: "md", children: we(r) }) }),
391
- /* @__PURE__ */ M("div", { className: "gap-md relative flex min-w-0 flex-1 flex-row items-center justify-between self-stretch", children: [
392
- /* @__PURE__ */ s("p", { className: "text-body-2 truncate font-medium", children: r.name }),
393
- /* @__PURE__ */ s("p", { className: "text-caption opacity-dim-1", children: W(r.size, d) }),
394
- a && i !== void 0 && /* @__PURE__ */ s("div", { className: "absolute bottom-0 left-0 w-full", children: /* @__PURE__ */ s(
395
- Ee,
396
- {
397
- value: i,
398
- max: 100,
399
- "aria-label": o,
400
- onComplete: n
401
- }
402
- ) })
403
- ] }),
404
- /* @__PURE__ */ s(J, { "aria-label": e, file: r })
405
- ]
406
- }
407
- );
275
+ z.displayName = "FileUpload.ItemDeleteTrigger";
276
+ //#endregion
277
+ //#region src/file-upload/FileUploadAcceptedFile.tsx
278
+ var B = ({ className: e, file: n, uploadProgress: r, deleteButtonAriaLabel: i, progressAriaLabel: s, ...c }) => {
279
+ let { locale: u } = R(), [f, p] = m(r !== void 0);
280
+ d(() => {
281
+ p(r !== void 0);
282
+ }, [r]);
283
+ let h = l(() => {
284
+ p(!1);
285
+ }, []);
286
+ return /* @__PURE__ */ _("li", {
287
+ "data-spark-component": "file-upload-accepted-file",
288
+ className: o("relative", "default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md", "gap-md flex items-center justify-between default:w-full", e),
289
+ ...c,
290
+ children: [
291
+ /* @__PURE__ */ g("div", {
292
+ className: "size-sz-36 bg-support-container flex items-center justify-center rounded-md",
293
+ children: /* @__PURE__ */ g(t, {
294
+ size: "md",
295
+ children: j(n)
296
+ })
297
+ }),
298
+ /* @__PURE__ */ _("div", {
299
+ className: "gap-md relative flex min-w-0 flex-1 flex-row items-center justify-between self-stretch",
300
+ children: [
301
+ /* @__PURE__ */ g("p", {
302
+ className: "text-body-2 truncate font-medium",
303
+ children: n.name
304
+ }),
305
+ /* @__PURE__ */ g("p", {
306
+ className: "text-caption opacity-dim-1",
307
+ children: A(n.size, u)
308
+ }),
309
+ f && r !== void 0 && /* @__PURE__ */ g("div", {
310
+ className: "absolute bottom-0 left-0 w-full",
311
+ children: /* @__PURE__ */ g(a, {
312
+ value: r,
313
+ max: 100,
314
+ "aria-label": s,
315
+ onComplete: h
316
+ })
317
+ })
318
+ ]
319
+ }),
320
+ /* @__PURE__ */ g(z, {
321
+ "aria-label": i,
322
+ file: n
323
+ })
324
+ ]
325
+ });
408
326
  };
409
- Z.displayName = "FileUpload.AcceptedFile";
410
- const ee = ({ children: t }) => {
411
- const { files: r = [], rejectedFiles: i = [], locale: e } = S();
412
- return /* @__PURE__ */ s(Fe, { children: t({
413
- acceptedFiles: r,
414
- rejectedFiles: i,
415
- formatFileSize: W,
416
- locale: e
417
- }) });
327
+ B.displayName = "FileUpload.AcceptedFile";
328
+ //#endregion
329
+ //#region src/file-upload/FileUploadContext.tsx
330
+ var V = ({ children: e }) => {
331
+ let { files: t = [], rejectedFiles: n = [], locale: r } = R();
332
+ return /* @__PURE__ */ g(h, { children: e({
333
+ acceptedFiles: t,
334
+ rejectedFiles: n,
335
+ formatFileSize: A,
336
+ locale: r
337
+ }) });
418
338
  };
419
- ee.displayName = "FileUpload.Context";
420
- const ve = se(!1), Ce = () => le(ve);
421
- function te({
422
- children: t,
423
- className: r,
424
- unstyled: i = !1
425
- }) {
426
- const e = S(), o = z(null);
427
- if (!e) throw new Error("FileUploadDropzone must be used inside <FileUpload>");
428
- const c = (n) => {
429
- if (n.preventDefault(), n.stopPropagation(), n.currentTarget.setAttribute("data-drag-over", "false"), e.disabled || e.readOnly)
430
- return;
431
- const m = n.dataTransfer.files;
432
- let p = [];
433
- m && (p = Array.isArray(m) ? [...m] : Array.from(m)), p.length > 0 && e.addFiles(p);
434
- }, d = () => {
435
- !e.disabled && !e.readOnly && e.inputRef.current?.click();
436
- }, a = (n) => {
437
- (n.key === "Enter" || n.key === " ") && (n.preventDefault(), !e.disabled && !e.readOnly && e.inputRef.current?.click());
438
- }, l = e.disabled || e.readOnly;
439
- return /* @__PURE__ */ s(ve.Provider, { value: !0, children: /* @__PURE__ */ s(
440
- "div",
441
- {
442
- ref: (n) => {
443
- o.current = n, e.dropzoneRef && (e.dropzoneRef.current = n);
444
- },
445
- role: "button",
446
- tabIndex: l ? -1 : 0,
447
- "aria-disabled": e.disabled ? !0 : void 0,
448
- "aria-describedby": e.description,
449
- "aria-invalid": e.isInvalid,
450
- "aria-required": e.isRequired,
451
- onClick: d,
452
- onKeyDown: a,
453
- onDrop: c,
454
- onDragOver: (n) => {
455
- n.preventDefault();
456
- },
457
- className: i ? r : _(
458
- "default:bg-surface default:border-sm default:border-outline default:relative default:rounded-lg default:border-dashed",
459
- "gap-lg flex flex-col items-center justify-center text-center",
460
- "default:p-xl",
461
- "transition-colors duration-200",
462
- !l && "default:hover:bg-surface-hovered",
463
- "data-[drag-over=true]:border-outline-high data-[drag-over=true]:bg-surface-hovered data-[drag-over=true]:border-solid",
464
- // Disabled: more visually disabled (opacity + cursor)
465
- e.disabled && "cursor-not-allowed opacity-50",
466
- // ReadOnly: less visually disabled (just cursor, no opacity)
467
- e.readOnly && !e.disabled && "cursor-default",
468
- r
469
- ),
470
- onDragEnter: (n) => {
471
- l || n.currentTarget.setAttribute("data-drag-over", "true");
472
- },
473
- onDragLeave: (n) => {
474
- n.currentTarget.setAttribute("data-drag-over", "false");
475
- },
476
- children: t
477
- }
478
- ) });
339
+ V.displayName = "FileUpload.Context";
340
+ //#endregion
341
+ //#region src/file-upload/FileUploadDropzone.tsx
342
+ var H = s(!1), U = () => u(H);
343
+ function W({ children: e, className: t, unstyled: n = !1 }) {
344
+ let r = R(), i = p(null);
345
+ if (!r) throw Error("FileUploadDropzone must be used inside <FileUpload>");
346
+ let a = (e) => {
347
+ if (e.preventDefault(), e.stopPropagation(), e.currentTarget.setAttribute("data-drag-over", "false"), r.disabled || r.readOnly) return;
348
+ let t = e.dataTransfer.files, n = [];
349
+ t && (n = Array.isArray(t) ? [...t] : Array.from(t)), n.length > 0 && r.addFiles(n);
350
+ }, s = () => {
351
+ !r.disabled && !r.readOnly && r.inputRef.current?.click();
352
+ }, c = (e) => {
353
+ (e.key === "Enter" || e.key === " ") && (e.preventDefault(), !r.disabled && !r.readOnly && r.inputRef.current?.click());
354
+ }, l = r.disabled || r.readOnly;
355
+ return /* @__PURE__ */ g(H.Provider, {
356
+ value: !0,
357
+ children: /* @__PURE__ */ g("div", {
358
+ ref: (e) => {
359
+ i.current = e, r.dropzoneRef && (r.dropzoneRef.current = e);
360
+ },
361
+ role: "button",
362
+ tabIndex: l ? -1 : 0,
363
+ "aria-disabled": r.disabled ? !0 : void 0,
364
+ "aria-describedby": r.description,
365
+ "aria-invalid": r.isInvalid,
366
+ "aria-required": r.isRequired,
367
+ onClick: s,
368
+ onKeyDown: c,
369
+ onDrop: a,
370
+ onDragOver: (e) => {
371
+ e.preventDefault();
372
+ },
373
+ className: n ? t : o("default:bg-surface default:border-sm default:border-outline default:relative default:rounded-lg default:border-dashed", "gap-lg flex flex-col items-center justify-center text-center", "default:p-xl", "transition-colors duration-200", !l && "default:hover:bg-surface-hovered", "data-[drag-over=true]:border-outline-high data-[drag-over=true]:bg-surface-hovered data-[drag-over=true]:border-solid", r.disabled && "cursor-not-allowed opacity-50", r.readOnly && !r.disabled && "cursor-default", t),
374
+ onDragEnter: (e) => {
375
+ l || e.currentTarget.setAttribute("data-drag-over", "true");
376
+ },
377
+ onDragLeave: (e) => {
378
+ e.currentTarget.setAttribute("data-drag-over", "false");
379
+ },
380
+ children: e
381
+ })
382
+ });
479
383
  }
480
- te.displayName = "FileUploadDropzone";
481
- const re = ({
482
- className: t,
483
- file: r,
484
- fallback: i = "📄",
485
- ...e
486
- }) => {
487
- const [o, c] = G(!1), [d, a] = G(!1), l = r.type.startsWith("image/"), n = l ? URL.createObjectURL(r) : null;
488
- return de(() => () => {
489
- n && URL.revokeObjectURL(n);
490
- }, [n]), !l || o ? /* @__PURE__ */ s(
491
- "div",
492
- {
493
- "data-spark-component": "file-upload-preview-image",
494
- className: _(
495
- "bg-neutral-container flex items-center justify-center rounded-md",
496
- t
497
- ),
498
- ...e,
499
- children: i
500
- }
501
- ) : /* @__PURE__ */ M(
502
- "div",
503
- {
504
- "data-spark-component": "file-upload-preview-image",
505
- className: _("bg-neutral-container overflow-hidden", t),
506
- ...e,
507
- children: [
508
- /* @__PURE__ */ s(
509
- "img",
510
- {
511
- src: n,
512
- alt: r.name,
513
- className: _("size-full object-cover", !d && "opacity-0"),
514
- onLoad: () => a(!0),
515
- onError: () => c(!0)
516
- }
517
- ),
518
- !d && /* @__PURE__ */ s("div", { className: "absolute inset-0 flex items-center justify-center", children: i })
519
- ]
520
- }
521
- );
384
+ W.displayName = "FileUploadDropzone";
385
+ //#endregion
386
+ //#region src/file-upload/FileUploadPreviewImage.tsx
387
+ var G = ({ className: e, file: t, fallback: n = "📄", ...r }) => {
388
+ let [i, a] = m(!1), [s, c] = m(!1), l = t.type.startsWith("image/"), u = l ? URL.createObjectURL(t) : null;
389
+ return d(() => () => {
390
+ u && URL.revokeObjectURL(u);
391
+ }, [u]), !l || i ? /* @__PURE__ */ g("div", {
392
+ "data-spark-component": "file-upload-preview-image",
393
+ className: o("bg-neutral-container flex items-center justify-center rounded-md", e),
394
+ ...r,
395
+ children: n
396
+ }) : /* @__PURE__ */ _("div", {
397
+ "data-spark-component": "file-upload-preview-image",
398
+ className: o("bg-neutral-container overflow-hidden", e),
399
+ ...r,
400
+ children: [/* @__PURE__ */ g("img", {
401
+ src: u,
402
+ alt: t.name,
403
+ className: o("size-full object-cover", !s && "opacity-0"),
404
+ onLoad: () => c(!0),
405
+ onError: () => a(!0)
406
+ }), !s && /* @__PURE__ */ g("div", {
407
+ className: "absolute inset-0 flex items-center justify-center",
408
+ children: n
409
+ })]
410
+ });
522
411
  };
523
- re.displayName = "FileUpload.PreviewImage";
524
- const Q = ({
525
- className: t,
526
- rejectedFile: r,
527
- onClick: i,
528
- ...e
529
- }) => {
530
- const {
531
- removeRejectedFile: o,
532
- triggerRef: c,
533
- dropzoneRef: d,
534
- rejectedFileDeleteButtonRefs: a,
535
- inputRef: l,
536
- disabled: n,
537
- readOnly: m,
538
- rejectedFiles: p
539
- } = S(), x = z(null), f = p.findIndex(
540
- (u) => u.file.name === r.file.name && u.file.size === r.file.size
541
- ), E = (u) => {
542
- n || m || (o(f), requestAnimationFrame(() => {
543
- const I = a.current.filter(Boolean);
544
- if (I.length > 0) {
545
- const b = Math.min(f, I.length - 1), g = I[b];
546
- g && g.focus();
547
- } else {
548
- const b = me(
549
- [c.current, d.current],
550
- l
551
- );
552
- b && b.focus();
553
- }
554
- }), i?.(u));
555
- };
556
- return /* @__PURE__ */ s(
557
- ue,
558
- {
559
- ref: (u) => {
560
- if (x.current = u, u) {
561
- for (; a.current.length <= f; )
562
- a.current.push(null);
563
- a.current[f] = u;
564
- } else
565
- a.current[f] && (a.current[f] = null);
566
- },
567
- "data-spark-component": "file-upload-rejected-file-delete-trigger",
568
- className: _(t),
569
- onClick: E,
570
- disabled: n || m,
571
- size: "sm",
572
- design: "contrast",
573
- intent: "surface",
574
- ...e,
575
- children: /* @__PURE__ */ s(K, { size: "sm", children: /* @__PURE__ */ s(ce, {}) })
576
- }
577
- );
412
+ G.displayName = "FileUpload.PreviewImage";
413
+ //#endregion
414
+ //#region src/file-upload/FileUploadRejectedFileDeleteTrigger.tsx
415
+ var K = ({ className: e, rejectedFile: n, onClick: r, ...a }) => {
416
+ let { removeRejectedFile: s, triggerRef: c, dropzoneRef: l, rejectedFileDeleteButtonRefs: u, inputRef: d, disabled: f, readOnly: m, rejectedFiles: h } = R(), _ = p(null), v = h.findIndex((e) => e.file.name === n.file.name && e.file.size === n.file.size), y = (e) => {
417
+ f || m || (s(v), requestAnimationFrame(() => {
418
+ let e = u.current.filter(Boolean);
419
+ if (e.length > 0) {
420
+ let t = e[Math.min(v, e.length - 1)];
421
+ t && t.focus();
422
+ } else {
423
+ let e = N([c.current, l.current], d);
424
+ e && e.focus();
425
+ }
426
+ }), r?.(e));
427
+ };
428
+ return /* @__PURE__ */ g(i, {
429
+ ref: (e) => {
430
+ if (_.current = e, e) {
431
+ for (; u.current.length <= v;) u.current.push(null);
432
+ u.current[v] = e;
433
+ } else u.current[v] && (u.current[v] = null);
434
+ },
435
+ "data-spark-component": "file-upload-rejected-file-delete-trigger",
436
+ className: o(e),
437
+ onClick: y,
438
+ disabled: f || m,
439
+ size: "sm",
440
+ design: "contrast",
441
+ intent: "surface",
442
+ ...a,
443
+ children: /* @__PURE__ */ g(t, {
444
+ size: "sm",
445
+ children: /* @__PURE__ */ g(b, {})
446
+ })
447
+ });
578
448
  };
579
- Q.displayName = "FileUpload.RejectedFileDeleteTrigger";
580
- const ie = ({
581
- className: t,
582
- rejectedFile: r,
583
- renderError: i,
584
- deleteButtonAriaLabel: e,
585
- ...o
586
- }) => {
587
- const { locale: c } = S();
588
- return /* @__PURE__ */ M(
589
- "li",
590
- {
591
- "data-spark-component": "file-upload-rejected-file",
592
- className: _(
593
- "relative",
594
- "default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md",
595
- "gap-md flex items-center justify-between default:w-full",
596
- "border-error border-md",
597
- t
598
- ),
599
- ...o,
600
- children: [
601
- /* @__PURE__ */ s("div", { className: "size-sz-36 bg-error-container flex items-center justify-center rounded-md", children: /* @__PURE__ */ s(K, { size: "md", className: "text-error", children: /* @__PURE__ */ s(je, {}) }) }),
602
- /* @__PURE__ */ s("div", { className: "min-w-0 flex-1", children: /* @__PURE__ */ M("div", { className: "gap-md flex flex-col", children: [
603
- /* @__PURE__ */ M("div", { className: "gap-md flex flex-row items-center justify-between", children: [
604
- /* @__PURE__ */ s("p", { className: "text-body-2 truncate font-medium", children: r.file.name }),
605
- /* @__PURE__ */ s("p", { className: "text-caption opacity-dim-1", children: W(r.file.size, c) })
606
- ] }),
607
- /* @__PURE__ */ s("div", { className: "gap-xs flex flex-col", children: r.errors.map((d, a) => /* @__PURE__ */ s("div", { className: "text-caption text-error", "data-error-code": d, children: i(d) }, a)) })
608
- ] }) }),
609
- /* @__PURE__ */ s(Q, { "aria-label": e, rejectedFile: r })
610
- ]
611
- }
612
- );
449
+ K.displayName = "FileUpload.RejectedFileDeleteTrigger";
450
+ //#endregion
451
+ //#region src/file-upload/FileUploadRejectedFile.tsx
452
+ var q = ({ className: e, rejectedFile: n, renderError: r, deleteButtonAriaLabel: i, ...a }) => {
453
+ let { locale: s } = R();
454
+ return /* @__PURE__ */ _("li", {
455
+ "data-spark-component": "file-upload-rejected-file",
456
+ className: o("relative", "default:bg-surface default:border-sm default:border-outline default:p-md default:rounded-md", "gap-md flex items-center justify-between default:w-full", "border-error border-md", e),
457
+ ...a,
458
+ children: [
459
+ /* @__PURE__ */ g("div", {
460
+ className: "size-sz-36 bg-error-container flex items-center justify-center rounded-md",
461
+ children: /* @__PURE__ */ g(t, {
462
+ size: "md",
463
+ className: "text-error",
464
+ children: /* @__PURE__ */ g(T, {})
465
+ })
466
+ }),
467
+ /* @__PURE__ */ g("div", {
468
+ className: "min-w-0 flex-1",
469
+ children: /* @__PURE__ */ _("div", {
470
+ className: "gap-md flex flex-col",
471
+ children: [/* @__PURE__ */ _("div", {
472
+ className: "gap-md flex flex-row items-center justify-between",
473
+ children: [/* @__PURE__ */ g("p", {
474
+ className: "text-body-2 truncate font-medium",
475
+ children: n.file.name
476
+ }), /* @__PURE__ */ g("p", {
477
+ className: "text-caption opacity-dim-1",
478
+ children: A(n.file.size, s)
479
+ })]
480
+ }), /* @__PURE__ */ g("div", {
481
+ className: "gap-xs flex flex-col",
482
+ children: n.errors.map((e, t) => /* @__PURE__ */ g("div", {
483
+ className: "text-caption text-error",
484
+ "data-error-code": e,
485
+ children: r(e)
486
+ }, t))
487
+ })]
488
+ })
489
+ }),
490
+ /* @__PURE__ */ g(K, {
491
+ "aria-label": i,
492
+ rejectedFile: n
493
+ })
494
+ ]
495
+ });
613
496
  };
614
- ie.displayName = "FileUpload.RejectedFile";
615
- const ne = ({
616
- className: t,
617
- children: r,
618
- asChild: i = !1,
619
- unstyled: e = !1,
620
- design: o = "filled",
621
- intent: c = "support",
622
- size: d = "md",
623
- shape: a = "rounded",
624
- ref: l,
625
- ...n
626
- }) => {
627
- const { inputRef: m, triggerRef: p, disabled: x, readOnly: f, description: E, isInvalid: F, isRequired: u } = S(), I = Ce(), b = (R) => {
628
- R.stopPropagation(), R.preventDefault(), !x && !f && m.current?.click();
629
- }, g = (R) => {
630
- p && (p.current = R), l && (typeof l == "function" ? l(R) : l.current = R);
631
- };
632
- let U, C;
633
- if (I) {
634
- U = "span";
635
- const R = e ? t : Te({
636
- design: o,
637
- intent: c,
638
- size: d,
639
- shape: a,
640
- disabled: x || f,
641
- className: t
642
- });
643
- C = {
644
- ref: g,
645
- "data-spark-component": "file-upload-trigger",
646
- className: R
647
- // No onClick, no role, no tabIndex - Dropzone handles interaction
648
- // No aria attributes here - they're on the Dropzone
649
- };
650
- } else
651
- U = i ? Oe : e ? "button" : De, C = {
652
- ref: g,
653
- type: "button",
654
- design: o,
655
- intent: c,
656
- size: d,
657
- shape: a,
658
- "data-spark-component": "file-upload-trigger",
659
- className: _(t),
660
- disabled: x || f,
661
- onClick: b,
662
- "aria-describedby": E,
663
- "aria-invalid": F,
664
- "aria-required": u,
665
- ...n
666
- };
667
- return /* @__PURE__ */ s(U, { ...C, children: r });
497
+ q.displayName = "FileUpload.RejectedFile";
498
+ //#endregion
499
+ //#region src/file-upload/FileUploadTrigger.tsx
500
+ var J = ({ className: t, children: i, asChild: a = !1, unstyled: s = !1, design: c = "filled", intent: l = "support", size: u = "md", shape: d = "rounded", ref: f, ...p }) => {
501
+ let { inputRef: m, triggerRef: h, disabled: _, readOnly: v, description: y, isInvalid: b, isRequired: x } = R(), S = U(), C = (e) => {
502
+ e.stopPropagation(), e.preventDefault(), !_ && !v && m.current?.click();
503
+ }, w = (e) => {
504
+ h && (h.current = e), f && (typeof f == "function" ? f(e) : f.current = e);
505
+ }, T, E;
506
+ if (S) {
507
+ T = "span";
508
+ let e = s ? t : n({
509
+ design: c,
510
+ intent: l,
511
+ size: u,
512
+ shape: d,
513
+ disabled: _ || v,
514
+ className: t
515
+ });
516
+ E = {
517
+ ref: w,
518
+ "data-spark-component": "file-upload-trigger",
519
+ className: e
520
+ };
521
+ } else T = a ? e : s ? "button" : r, E = {
522
+ ref: w,
523
+ type: "button",
524
+ design: c,
525
+ intent: l,
526
+ size: u,
527
+ shape: d,
528
+ "data-spark-component": "file-upload-trigger",
529
+ className: o(t),
530
+ disabled: _ || v,
531
+ onClick: C,
532
+ "aria-describedby": y,
533
+ "aria-invalid": b,
534
+ "aria-required": x,
535
+ ...p
536
+ };
537
+ return /* @__PURE__ */ g(T, {
538
+ ...E,
539
+ children: i
540
+ });
668
541
  };
669
- ne.displayName = "FileUpload.Trigger";
670
- const ke = Object.assign(ge, {
671
- // Main input components
672
- Trigger: ne,
673
- Dropzone: te,
674
- // Context components
675
- Context: ee,
676
- AcceptedFile: Z,
677
- RejectedFile: ie,
678
- // Helpers for custom renders
679
- PreviewImage: re,
680
- ItemDeleteTrigger: J,
681
- RejectedFileDeleteTrigger: Q
542
+ J.displayName = "FileUpload.Trigger";
543
+ //#endregion
544
+ //#region src/file-upload/index.ts
545
+ var Y = Object.assign(L, {
546
+ Trigger: J,
547
+ Dropzone: W,
548
+ Context: V,
549
+ AcceptedFile: B,
550
+ RejectedFile: q,
551
+ PreviewImage: G,
552
+ ItemDeleteTrigger: z,
553
+ RejectedFileDeleteTrigger: K
682
554
  });
683
- ke.displayName = "FileUpload";
684
- ne.displayName = "FileUpload.Trigger";
685
- te.displayName = "FileUpload.Dropzone";
686
- ee.displayName = "FileUpload.Context";
687
- J.displayName = "FileUpload.ItemDeleteTrigger";
688
- re.displayName = "FileUpload.PreviewImage";
689
- Z.displayName = "FileUpload.AcceptedFile";
690
- ie.displayName = "FileUpload.RejectedFile";
691
- Q.displayName = "FileUpload.RejectedFileDeleteTrigger";
692
- export {
693
- O as FILE_UPLOAD_ERRORS,
694
- ke as FileUpload
695
- };
696
- //# sourceMappingURL=index.mjs.map
555
+ Y.displayName = "FileUpload", J.displayName = "FileUpload.Trigger", W.displayName = "FileUpload.Dropzone", V.displayName = "FileUpload.Context", z.displayName = "FileUpload.ItemDeleteTrigger", G.displayName = "FileUpload.PreviewImage", B.displayName = "FileUpload.AcceptedFile", q.displayName = "FileUpload.RejectedFile", K.displayName = "FileUpload.RejectedFileDeleteTrigger";
556
+ //#endregion
557
+ export { E as FILE_UPLOAD_ERRORS, Y as FileUpload };
558
+
559
+ //# sourceMappingURL=index.mjs.map