@psnext/design-system 2.4.0 → 2.5.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 (479) hide show
  1. package/DESIGN.md +27 -4
  2. package/SKILL.md +1 -1
  3. package/dist/Header.cjs +1 -1
  4. package/dist/Header.cjs.map +1 -1
  5. package/dist/Header.js +1 -1
  6. package/dist/Header.js.map +1 -1
  7. package/dist/Mosaic.cjs +472 -0
  8. package/dist/Mosaic.cjs.map +1 -0
  9. package/dist/Mosaic.js +459 -0
  10. package/dist/Mosaic.js.map +1 -0
  11. package/dist/index.cjs +13 -2
  12. package/dist/index.d.cts +5 -5
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.ts +5 -5
  15. package/dist/index.js +7 -3
  16. package/dist/index10.d.cts +6 -6
  17. package/dist/index10.d.cts.map +1 -1
  18. package/dist/index10.d.ts +6 -6
  19. package/dist/index11.d.cts +3 -3
  20. package/dist/index11.d.ts +3 -3
  21. package/dist/index12.d.cts +12 -12
  22. package/dist/index12.d.cts.map +1 -1
  23. package/dist/index12.d.ts +12 -12
  24. package/dist/index13.d.cts +6 -6
  25. package/dist/index13.d.cts.map +1 -1
  26. package/dist/index13.d.ts +6 -6
  27. package/dist/index14.d.cts +5 -5
  28. package/dist/index14.d.ts +5 -5
  29. package/dist/index15.d.cts +58 -23
  30. package/dist/index15.d.cts.map +1 -1
  31. package/dist/index15.d.ts +58 -23
  32. package/dist/index15.d.ts.map +1 -1
  33. package/dist/index16.d.cts +23 -32
  34. package/dist/index16.d.cts.map +1 -1
  35. package/dist/index16.d.ts +23 -32
  36. package/dist/index16.d.ts.map +1 -1
  37. package/dist/index17.d.cts +34 -15
  38. package/dist/index17.d.cts.map +1 -1
  39. package/dist/index17.d.ts +34 -15
  40. package/dist/index17.d.ts.map +1 -1
  41. package/dist/index18.d.cts +13 -67
  42. package/dist/index18.d.cts.map +1 -1
  43. package/dist/index18.d.ts +13 -67
  44. package/dist/index18.d.ts.map +1 -1
  45. package/dist/index19.d.cts +55 -48
  46. package/dist/index19.d.cts.map +1 -1
  47. package/dist/index19.d.ts +55 -48
  48. package/dist/index19.d.ts.map +1 -1
  49. package/dist/index2.d.cts +8 -8
  50. package/dist/index2.d.cts.map +1 -1
  51. package/dist/index2.d.ts +8 -8
  52. package/dist/index2.d.ts.map +1 -1
  53. package/dist/index20.d.cts +45 -75
  54. package/dist/index20.d.cts.map +1 -1
  55. package/dist/index20.d.ts +45 -75
  56. package/dist/index20.d.ts.map +1 -1
  57. package/dist/index21.d.cts +90 -28
  58. package/dist/index21.d.cts.map +1 -1
  59. package/dist/index21.d.ts +90 -28
  60. package/dist/index21.d.ts.map +1 -1
  61. package/dist/index22.d.cts +28 -56
  62. package/dist/index22.d.cts.map +1 -1
  63. package/dist/index22.d.ts +28 -56
  64. package/dist/index22.d.ts.map +1 -1
  65. package/dist/index23.d.cts +53 -78
  66. package/dist/index23.d.cts.map +1 -1
  67. package/dist/index23.d.ts +53 -78
  68. package/dist/index23.d.ts.map +1 -1
  69. package/dist/index24.d.cts +83 -33
  70. package/dist/index24.d.cts.map +1 -1
  71. package/dist/index24.d.ts +83 -33
  72. package/dist/index24.d.ts.map +1 -1
  73. package/dist/index25.d.cts +43 -11
  74. package/dist/index25.d.cts.map +1 -1
  75. package/dist/index25.d.ts +43 -11
  76. package/dist/index25.d.ts.map +1 -1
  77. package/dist/index26.d.cts +11 -74
  78. package/dist/index26.d.cts.map +1 -1
  79. package/dist/index26.d.ts +11 -74
  80. package/dist/index26.d.ts.map +1 -1
  81. package/dist/index27.d.cts +68 -59
  82. package/dist/index27.d.cts.map +1 -1
  83. package/dist/index27.d.ts +68 -59
  84. package/dist/index27.d.ts.map +1 -1
  85. package/dist/index28.d.cts +47 -30
  86. package/dist/index28.d.cts.map +1 -1
  87. package/dist/index28.d.ts +47 -30
  88. package/dist/index28.d.ts.map +1 -1
  89. package/dist/index29.d.cts +63 -17
  90. package/dist/index29.d.cts.map +1 -1
  91. package/dist/index29.d.ts +63 -17
  92. package/dist/index29.d.ts.map +1 -1
  93. package/dist/index3.d.cts +13 -13
  94. package/dist/index3.d.cts.map +1 -1
  95. package/dist/index3.d.ts +13 -13
  96. package/dist/index30.d.cts +29 -80
  97. package/dist/index30.d.cts.map +1 -1
  98. package/dist/index30.d.ts +29 -80
  99. package/dist/index30.d.ts.map +1 -1
  100. package/dist/index31.d.cts +19 -34
  101. package/dist/index31.d.cts.map +1 -1
  102. package/dist/index31.d.ts +19 -34
  103. package/dist/index31.d.ts.map +1 -1
  104. package/dist/index32.d.cts +80 -18
  105. package/dist/index32.d.cts.map +1 -1
  106. package/dist/index32.d.ts +79 -17
  107. package/dist/index32.d.ts.map +1 -1
  108. package/dist/index33.d.cts +32 -51
  109. package/dist/index33.d.cts.map +1 -1
  110. package/dist/index33.d.ts +32 -51
  111. package/dist/index33.d.ts.map +1 -1
  112. package/dist/index34.d.cts +19 -36
  113. package/dist/index34.d.cts.map +1 -1
  114. package/dist/index34.d.ts +19 -36
  115. package/dist/index34.d.ts.map +1 -1
  116. package/dist/index35.d.cts +43 -61
  117. package/dist/index35.d.cts.map +1 -1
  118. package/dist/index35.d.ts +43 -61
  119. package/dist/index35.d.ts.map +1 -1
  120. package/dist/index36.d.cts +35 -11
  121. package/dist/index36.d.cts.map +1 -1
  122. package/dist/index36.d.ts +35 -11
  123. package/dist/index36.d.ts.map +1 -1
  124. package/dist/index37.d.cts +68 -20
  125. package/dist/index37.d.cts.map +1 -1
  126. package/dist/index37.d.ts +68 -20
  127. package/dist/index37.d.ts.map +1 -1
  128. package/dist/index38.d.cts +14 -15
  129. package/dist/index38.d.cts.map +1 -1
  130. package/dist/index38.d.ts +14 -15
  131. package/dist/index38.d.ts.map +1 -1
  132. package/dist/index39.d.cts +22 -98
  133. package/dist/index39.d.cts.map +1 -1
  134. package/dist/index39.d.ts +22 -98
  135. package/dist/index39.d.ts.map +1 -1
  136. package/dist/index4.d.cts +2 -2
  137. package/dist/index4.d.cts.map +1 -1
  138. package/dist/index4.d.ts +2 -2
  139. package/dist/index4.d.ts.map +1 -1
  140. package/dist/index40.d.cts +15 -17
  141. package/dist/index40.d.cts.map +1 -1
  142. package/dist/index40.d.ts +15 -17
  143. package/dist/index40.d.ts.map +1 -1
  144. package/dist/index41.d.cts +84 -35
  145. package/dist/index41.d.cts.map +1 -1
  146. package/dist/index41.d.ts +84 -35
  147. package/dist/index41.d.ts.map +1 -1
  148. package/dist/index42.d.cts +118 -38
  149. package/dist/index42.d.cts.map +1 -1
  150. package/dist/index42.d.ts +118 -38
  151. package/dist/index42.d.ts.map +1 -1
  152. package/dist/index43.d.cts +15 -89
  153. package/dist/index43.d.cts.map +1 -1
  154. package/dist/index43.d.ts +15 -89
  155. package/dist/index43.d.ts.map +1 -1
  156. package/dist/index44.d.cts +56 -1
  157. package/dist/index44.d.cts.map +1 -0
  158. package/dist/index44.d.ts +56 -1
  159. package/dist/index44.d.ts.map +1 -0
  160. package/dist/index45.d.cts +31 -34
  161. package/dist/index45.d.cts.map +1 -1
  162. package/dist/index45.d.ts +31 -34
  163. package/dist/index45.d.ts.map +1 -1
  164. package/dist/index46.d.cts +89 -21
  165. package/dist/index46.d.cts.map +1 -1
  166. package/dist/index46.d.ts +89 -21
  167. package/dist/index46.d.ts.map +1 -1
  168. package/dist/index47.d.cts +1 -41
  169. package/dist/index47.d.ts +1 -41
  170. package/dist/index48.d.cts +122 -20
  171. package/dist/index48.d.cts.map +1 -1
  172. package/dist/index48.d.ts +122 -20
  173. package/dist/index48.d.ts.map +1 -1
  174. package/dist/index49.d.cts +40 -13
  175. package/dist/index49.d.cts.map +1 -1
  176. package/dist/index49.d.ts +40 -13
  177. package/dist/index49.d.ts.map +1 -1
  178. package/dist/index5.d.cts +7 -7
  179. package/dist/index5.d.cts.map +1 -1
  180. package/dist/index5.d.ts +7 -7
  181. package/dist/index50.d.cts +22 -63
  182. package/dist/index50.d.cts.map +1 -1
  183. package/dist/index50.d.ts +22 -63
  184. package/dist/index50.d.ts.map +1 -1
  185. package/dist/index51.d.cts +33 -55
  186. package/dist/index51.d.cts.map +1 -1
  187. package/dist/index51.d.ts +33 -55
  188. package/dist/index51.d.ts.map +1 -1
  189. package/dist/index52.d.cts +18 -24
  190. package/dist/index52.d.cts.map +1 -1
  191. package/dist/index52.d.ts +18 -24
  192. package/dist/index52.d.ts.map +1 -1
  193. package/dist/index53.d.cts +12 -200
  194. package/dist/index53.d.cts.map +1 -1
  195. package/dist/index53.d.ts +12 -200
  196. package/dist/index53.d.ts.map +1 -1
  197. package/dist/index54.d.cts +58 -15
  198. package/dist/index54.d.cts.map +1 -1
  199. package/dist/index54.d.ts +58 -15
  200. package/dist/index54.d.ts.map +1 -1
  201. package/dist/index55.d.cts +93 -23
  202. package/dist/index55.d.cts.map +1 -1
  203. package/dist/index55.d.ts +93 -23
  204. package/dist/index55.d.ts.map +1 -1
  205. package/dist/index56.d.cts +27 -21
  206. package/dist/index56.d.cts.map +1 -1
  207. package/dist/index56.d.ts +27 -21
  208. package/dist/index56.d.ts.map +1 -1
  209. package/dist/index57.d.cts +203 -6
  210. package/dist/index57.d.cts.map +1 -1
  211. package/dist/index57.d.ts +203 -6
  212. package/dist/index57.d.ts.map +1 -1
  213. package/dist/index58.d.cts +17 -41
  214. package/dist/index58.d.cts.map +1 -1
  215. package/dist/index58.d.ts +17 -41
  216. package/dist/index58.d.ts.map +1 -1
  217. package/dist/index59.d.cts +24 -47
  218. package/dist/index59.d.cts.map +1 -1
  219. package/dist/index59.d.ts +24 -47
  220. package/dist/index59.d.ts.map +1 -1
  221. package/dist/index6.d.cts +5 -5
  222. package/dist/index6.d.cts.map +1 -1
  223. package/dist/index6.d.ts +5 -5
  224. package/dist/index60.d.cts +19 -57
  225. package/dist/index60.d.cts.map +1 -1
  226. package/dist/index60.d.ts +19 -57
  227. package/dist/index60.d.ts.map +1 -1
  228. package/dist/index61.d.cts +6 -39
  229. package/dist/index61.d.cts.map +1 -1
  230. package/dist/index61.d.ts +6 -39
  231. package/dist/index61.d.ts.map +1 -1
  232. package/dist/index62.d.cts +44 -18
  233. package/dist/index62.d.cts.map +1 -1
  234. package/dist/index62.d.ts +44 -18
  235. package/dist/index62.d.ts.map +1 -1
  236. package/dist/index63.d.cts +47 -41
  237. package/dist/index63.d.cts.map +1 -1
  238. package/dist/index63.d.ts +47 -41
  239. package/dist/index63.d.ts.map +1 -1
  240. package/dist/index64.d.cts +55 -15
  241. package/dist/index64.d.cts.map +1 -1
  242. package/dist/index64.d.ts +55 -15
  243. package/dist/index64.d.ts.map +1 -1
  244. package/dist/index65.d.cts +36 -39
  245. package/dist/index65.d.cts.map +1 -1
  246. package/dist/index65.d.ts +36 -39
  247. package/dist/index65.d.ts.map +1 -1
  248. package/dist/index66.d.cts +16 -17
  249. package/dist/index66.d.cts.map +1 -1
  250. package/dist/index66.d.ts +16 -17
  251. package/dist/index66.d.ts.map +1 -1
  252. package/dist/index67.d.cts +38 -84
  253. package/dist/index67.d.cts.map +1 -1
  254. package/dist/index67.d.ts +38 -84
  255. package/dist/index67.d.ts.map +1 -1
  256. package/dist/index68.d.cts +17 -13
  257. package/dist/index68.d.cts.map +1 -1
  258. package/dist/index68.d.ts +17 -13
  259. package/dist/index68.d.ts.map +1 -1
  260. package/dist/index69.d.cts +41 -30
  261. package/dist/index69.d.cts.map +1 -1
  262. package/dist/index69.d.ts +41 -30
  263. package/dist/index69.d.ts.map +1 -1
  264. package/dist/index7.d.cts +8 -8
  265. package/dist/index7.d.ts +8 -8
  266. package/dist/index7.d.ts.map +1 -1
  267. package/dist/index70.d.cts +17 -28
  268. package/dist/index70.d.cts.map +1 -1
  269. package/dist/index70.d.ts +17 -28
  270. package/dist/index70.d.ts.map +1 -1
  271. package/dist/index71.d.cts +88 -79
  272. package/dist/index71.d.cts.map +1 -1
  273. package/dist/index71.d.ts +88 -79
  274. package/dist/index71.d.ts.map +1 -1
  275. package/dist/index72.d.cts +13 -272
  276. package/dist/index72.d.cts.map +1 -1
  277. package/dist/index72.d.ts +13 -272
  278. package/dist/index72.d.ts.map +1 -1
  279. package/dist/index73.d.cts +37 -0
  280. package/dist/index73.d.cts.map +1 -0
  281. package/dist/index73.d.ts +37 -0
  282. package/dist/index73.d.ts.map +1 -0
  283. package/dist/index74.d.cts +36 -0
  284. package/dist/index74.d.cts.map +1 -0
  285. package/dist/index74.d.ts +36 -0
  286. package/dist/index74.d.ts.map +1 -0
  287. package/dist/index75.d.cts +86 -0
  288. package/dist/index75.d.cts.map +1 -0
  289. package/dist/index75.d.ts +86 -0
  290. package/dist/index75.d.ts.map +1 -0
  291. package/dist/index76.d.cts +278 -0
  292. package/dist/index76.d.cts.map +1 -0
  293. package/dist/index76.d.ts +278 -0
  294. package/dist/index76.d.ts.map +1 -0
  295. package/dist/index8.d.cts +4 -4
  296. package/dist/index8.d.cts.map +1 -1
  297. package/dist/index8.d.ts +4 -4
  298. package/dist/index9.d.cts +2 -2
  299. package/dist/index9.d.cts.map +1 -1
  300. package/dist/index9.d.ts +2 -2
  301. package/dist/layouts/Container/index.d.cts +1 -1
  302. package/dist/layouts/Container/index.d.ts +1 -1
  303. package/dist/layouts/MultiColumn/index.d.cts +1 -1
  304. package/dist/layouts/MultiColumn/index.d.ts +1 -1
  305. package/dist/layouts/PageBackground/index.d.cts +1 -1
  306. package/dist/layouts/PageBackground/index.d.ts +1 -1
  307. package/dist/layouts/Stack/index.d.cts +1 -1
  308. package/dist/layouts/Stack/index.d.ts +1 -1
  309. package/dist/layouts/TwoColumn/index.d.cts +1 -1
  310. package/dist/layouts/TwoColumn/index.d.ts +1 -1
  311. package/dist/layouts/index.d.cts +5 -5
  312. package/dist/layouts/index.d.ts +5 -5
  313. package/dist/patterns/DataTable/index.d.cts +3 -3
  314. package/dist/patterns/DataTable/index.d.cts.map +1 -1
  315. package/dist/patterns/DataTable/index.d.ts +3 -3
  316. package/dist/patterns/Footer/index.d.cts +7 -7
  317. package/dist/patterns/Footer/index.d.ts +7 -7
  318. package/dist/patterns/Header/index.d.cts +1 -1
  319. package/dist/patterns/Header/index.d.ts +1 -1
  320. package/dist/patterns/MediaObject/index.d.cts +14 -14
  321. package/dist/patterns/MediaObject/index.d.cts.map +1 -1
  322. package/dist/patterns/MediaObject/index.d.ts +13 -13
  323. package/dist/patterns/NavRail/index.d.cts +1 -1
  324. package/dist/patterns/NavRail/index.d.ts +1 -1
  325. package/dist/patterns/SectionCard/index.d.cts +2 -2
  326. package/dist/patterns/SectionCard/index.d.cts.map +1 -1
  327. package/dist/patterns/SectionCard/index.d.ts +2 -2
  328. package/dist/patterns/SectionCard/index.d.ts.map +1 -1
  329. package/dist/patterns/SectionHeading/index.d.cts +3 -3
  330. package/dist/patterns/SectionHeading/index.d.cts.map +1 -1
  331. package/dist/patterns/SectionHeading/index.d.ts +3 -3
  332. package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
  333. package/dist/patterns/index.d.cts +2 -2
  334. package/dist/patterns/index.d.ts +2 -2
  335. package/dist/primitives/Checkbox/index.cjs +1 -1
  336. package/dist/primitives/Checkbox/index.cjs.map +1 -1
  337. package/dist/primitives/Checkbox/index.d.cts +1 -1
  338. package/dist/primitives/Checkbox/index.d.ts +1 -1
  339. package/dist/primitives/Checkbox/index.js +1 -1
  340. package/dist/primitives/Checkbox/index.js.map +1 -1
  341. package/dist/primitives/CheckboxTree/index.d.cts +1 -1
  342. package/dist/primitives/CheckboxTree/index.d.ts +1 -1
  343. package/dist/primitives/CircularProgress/index.cjs +106 -0
  344. package/dist/primitives/CircularProgress/index.cjs.map +1 -0
  345. package/dist/primitives/CircularProgress/index.d.cts +2 -0
  346. package/dist/primitives/CircularProgress/index.d.ts +2 -0
  347. package/dist/primitives/CircularProgress/index.js +105 -0
  348. package/dist/primitives/CircularProgress/index.js.map +1 -0
  349. package/dist/primitives/Collapsible/index.d.cts +1 -1
  350. package/dist/primitives/Collapsible/index.d.ts +1 -1
  351. package/dist/primitives/Command/index.d.cts +1 -1
  352. package/dist/primitives/Command/index.d.ts +1 -1
  353. package/dist/primitives/ContextMenu/index.d.cts +1 -1
  354. package/dist/primitives/ContextMenu/index.d.ts +1 -1
  355. package/dist/primitives/Credits/index.d.cts +1 -1
  356. package/dist/primitives/Credits/index.d.ts +1 -1
  357. package/dist/primitives/Dialog/index.d.cts +1 -1
  358. package/dist/primitives/Dialog/index.d.ts +1 -1
  359. package/dist/primitives/Drawer/index.cjs +34 -2
  360. package/dist/primitives/Drawer/index.cjs.map +1 -1
  361. package/dist/primitives/Drawer/index.d.cts +1 -1
  362. package/dist/primitives/Drawer/index.d.ts +1 -1
  363. package/dist/primitives/Drawer/index.js +34 -2
  364. package/dist/primitives/Drawer/index.js.map +1 -1
  365. package/dist/primitives/DropdownMenu/index.d.cts +1 -1
  366. package/dist/primitives/DropdownMenu/index.d.ts +1 -1
  367. package/dist/primitives/Empty/index.d.cts +1 -1
  368. package/dist/primitives/Empty/index.d.ts +1 -1
  369. package/dist/primitives/Field/index.d.cts +1 -1
  370. package/dist/primitives/Field/index.d.ts +1 -1
  371. package/dist/primitives/FileUpload/index.cjs +354 -0
  372. package/dist/primitives/FileUpload/index.cjs.map +1 -0
  373. package/dist/primitives/FileUpload/index.d.cts +2 -0
  374. package/dist/primitives/FileUpload/index.d.ts +2 -0
  375. package/dist/primitives/FileUpload/index.js +351 -0
  376. package/dist/primitives/FileUpload/index.js.map +1 -0
  377. package/dist/primitives/Form/index.d.cts +1 -1
  378. package/dist/primitives/Form/index.d.ts +1 -1
  379. package/dist/primitives/Heading/index.d.cts +1 -1
  380. package/dist/primitives/Heading/index.d.ts +1 -1
  381. package/dist/primitives/HoverCard/index.d.cts +1 -1
  382. package/dist/primitives/HoverCard/index.d.ts +1 -1
  383. package/dist/primitives/Icon/index.d.cts +1 -1
  384. package/dist/primitives/Icon/index.d.ts +1 -1
  385. package/dist/primitives/InfoBanner/index.d.cts +1 -1
  386. package/dist/primitives/InfoBanner/index.d.ts +1 -1
  387. package/dist/primitives/Input/index.d.cts +1 -1
  388. package/dist/primitives/Input/index.d.ts +1 -1
  389. package/dist/primitives/InputGroup/index.d.cts +1 -1
  390. package/dist/primitives/InputGroup/index.d.ts +1 -1
  391. package/dist/primitives/InputOtp/index.d.cts +1 -1
  392. package/dist/primitives/InputOtp/index.d.ts +1 -1
  393. package/dist/primitives/Item/index.d.cts +1 -1
  394. package/dist/primitives/Item/index.d.ts +1 -1
  395. package/dist/primitives/Kbd/index.d.cts +1 -1
  396. package/dist/primitives/Kbd/index.d.ts +1 -1
  397. package/dist/primitives/Label/index.d.cts +1 -1
  398. package/dist/primitives/Label/index.d.ts +1 -1
  399. package/dist/primitives/Link/index.d.cts +1 -1
  400. package/dist/primitives/Link/index.d.ts +1 -1
  401. package/dist/primitives/Logo/index.d.cts +1 -1
  402. package/dist/primitives/Logo/index.d.ts +1 -1
  403. package/dist/primitives/Menubar/index.d.cts +1 -1
  404. package/dist/primitives/Menubar/index.d.ts +1 -1
  405. package/dist/primitives/Mosaic/index.cjs +4 -0
  406. package/dist/primitives/Mosaic/index.d.cts +2 -0
  407. package/dist/primitives/Mosaic/index.d.ts +2 -0
  408. package/dist/primitives/Mosaic/index.js +2 -0
  409. package/dist/primitives/NativeSelect/index.d.cts +1 -1
  410. package/dist/primitives/NativeSelect/index.d.ts +1 -1
  411. package/dist/primitives/NavRail/index.d.cts +2 -2
  412. package/dist/primitives/NavRail/index.d.ts +2 -2
  413. package/dist/primitives/NavigationMenu/index.d.cts +1 -1
  414. package/dist/primitives/NavigationMenu/index.d.ts +1 -1
  415. package/dist/primitives/NotchedCard/index.cjs +390 -0
  416. package/dist/primitives/NotchedCard/index.cjs.map +1 -0
  417. package/dist/primitives/NotchedCard/index.d.cts +2 -0
  418. package/dist/primitives/NotchedCard/index.d.ts +2 -0
  419. package/dist/primitives/NotchedCard/index.js +385 -0
  420. package/dist/primitives/NotchedCard/index.js.map +1 -0
  421. package/dist/primitives/Pagination/index.d.cts +1 -1
  422. package/dist/primitives/Pagination/index.d.ts +1 -1
  423. package/dist/primitives/Popover/index.d.cts +1 -1
  424. package/dist/primitives/Popover/index.d.ts +1 -1
  425. package/dist/primitives/Progress/index.d.cts +1 -1
  426. package/dist/primitives/Progress/index.d.ts +1 -1
  427. package/dist/primitives/RadioGroup/index.cjs +1 -1
  428. package/dist/primitives/RadioGroup/index.cjs.map +1 -1
  429. package/dist/primitives/RadioGroup/index.d.cts +1 -1
  430. package/dist/primitives/RadioGroup/index.d.ts +1 -1
  431. package/dist/primitives/RadioGroup/index.js +1 -1
  432. package/dist/primitives/RadioGroup/index.js.map +1 -1
  433. package/dist/primitives/Resizable/index.d.cts +1 -1
  434. package/dist/primitives/Resizable/index.d.ts +1 -1
  435. package/dist/primitives/ScrollArea/index.d.cts +1 -1
  436. package/dist/primitives/ScrollArea/index.d.ts +1 -1
  437. package/dist/primitives/Select/index.d.cts +1 -1
  438. package/dist/primitives/Select/index.d.ts +1 -1
  439. package/dist/primitives/Sheet/index.cjs +34 -2
  440. package/dist/primitives/Sheet/index.cjs.map +1 -1
  441. package/dist/primitives/Sheet/index.d.cts +1 -1
  442. package/dist/primitives/Sheet/index.d.ts +1 -1
  443. package/dist/primitives/Sheet/index.js +34 -2
  444. package/dist/primitives/Sheet/index.js.map +1 -1
  445. package/dist/primitives/Sidebar/index.d.cts +1 -1
  446. package/dist/primitives/Sidebar/index.d.ts +1 -1
  447. package/dist/primitives/Skeleton/index.d.cts +1 -1
  448. package/dist/primitives/Skeleton/index.d.ts +1 -1
  449. package/dist/primitives/Slider/index.d.cts +1 -1
  450. package/dist/primitives/Slider/index.d.ts +1 -1
  451. package/dist/primitives/Sonner/index.d.cts +1 -1
  452. package/dist/primitives/Sonner/index.d.ts +1 -1
  453. package/dist/primitives/Spinner/index.d.cts +1 -1
  454. package/dist/primitives/Spinner/index.d.ts +1 -1
  455. package/dist/primitives/Switch/index.d.cts +1 -1
  456. package/dist/primitives/Switch/index.d.ts +1 -1
  457. package/dist/primitives/Table/index.d.cts +1 -1
  458. package/dist/primitives/Table/index.d.ts +1 -1
  459. package/dist/primitives/Tabs/index.d.cts +1 -1
  460. package/dist/primitives/Tabs/index.d.ts +1 -1
  461. package/dist/primitives/Text/index.d.cts +1 -1
  462. package/dist/primitives/Text/index.d.ts +1 -1
  463. package/dist/primitives/Textarea/index.d.cts +1 -1
  464. package/dist/primitives/Textarea/index.d.ts +1 -1
  465. package/dist/primitives/ThemeProvider/index.d.cts +1 -1
  466. package/dist/primitives/ThemeProvider/index.d.ts +1 -1
  467. package/dist/primitives/Toggle/index.d.cts +1 -1
  468. package/dist/primitives/Toggle/index.d.ts +1 -1
  469. package/dist/primitives/ToggleGroup/index.d.cts +1 -1
  470. package/dist/primitives/ToggleGroup/index.d.ts +1 -1
  471. package/dist/primitives/Tooltip/index.d.cts +1 -1
  472. package/dist/primitives/Tooltip/index.d.ts +1 -1
  473. package/dist/primitives/index.cjs +13 -2
  474. package/dist/primitives/index.d.cts +55 -51
  475. package/dist/primitives/index.d.ts +55 -51
  476. package/dist/primitives/index.js +7 -3
  477. package/package.json +1 -1
  478. package/dist/index47.d.cts.map +0 -1
  479. package/dist/index47.d.ts.map +0 -1
@@ -0,0 +1,354 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_chunk = require("../../chunk.cjs");
3
+ const require_cn = require("../../cn.cjs");
4
+ const require_primitives_Button_index = require("../Button/index.cjs");
5
+ const require_primitives_Progress_index = require("../Progress/index.cjs");
6
+ let react = require("react");
7
+ react = require_chunk.__toESM(react);
8
+ let react_jsx_runtime = require("react/jsx-runtime");
9
+ let lucide_react = require("lucide-react");
10
+ //#region src/primitives/FileUpload/FileUpload.tsx
11
+ function clamp(value, min, max) {
12
+ return Math.min(max, Math.max(min, value));
13
+ }
14
+ function formatBytes(value) {
15
+ if (!Number.isFinite(value) || value <= 0) return "0 B";
16
+ const units = [
17
+ "B",
18
+ "KB",
19
+ "MB",
20
+ "GB",
21
+ "TB"
22
+ ];
23
+ const exponent = Math.min(Math.floor(Math.log(value) / Math.log(1024)), units.length - 1);
24
+ const size = value / 1024 ** exponent;
25
+ return `${size.toFixed(size >= 10 || exponent === 0 ? 0 : 1)} ${units[exponent]}`;
26
+ }
27
+ function getAcceptTokens(accept) {
28
+ return (accept ?? "").split(",").map((token) => token.trim().toLowerCase()).filter(Boolean);
29
+ }
30
+ function matchesAccept(file, accept) {
31
+ const tokens = getAcceptTokens(accept);
32
+ if (tokens.length === 0) return true;
33
+ const fileName = file.name.toLowerCase();
34
+ const fileType = file.type.toLowerCase();
35
+ return tokens.some((token) => {
36
+ if (token.startsWith(".")) return fileName.endsWith(token);
37
+ if (token.endsWith("/*")) {
38
+ const category = token.slice(0, token.length - 1);
39
+ return fileType.startsWith(category);
40
+ }
41
+ return fileType === token;
42
+ });
43
+ }
44
+ function createFileItem(file) {
45
+ return {
46
+ id: typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `${file.name}-${file.lastModified}-${Math.random().toString(36).slice(2)}`,
47
+ file,
48
+ status: "idle",
49
+ progress: 0
50
+ };
51
+ }
52
+ function hasFiles(event) {
53
+ return Array.from(event.dataTransfer?.types ?? []).includes("Files");
54
+ }
55
+ function getStatusLabel(item) {
56
+ if (item.status === "idle") return "Ready to upload";
57
+ if (item.status === "uploading") return `Uploading… ${Math.round(item.progress)}%`;
58
+ if (item.status === "success") return "Upload complete";
59
+ return item.error ? `Upload failed: ${item.error}` : "Upload failed";
60
+ }
61
+ /** File upload primitive with click-to-browse and drag-and-drop interactions, validation, and per-file upload states. */
62
+ function FileUpload({ className, multiple = false, accept, maxFiles, maxFileSize, validateFile, onUpload, onItemsChange, dropzoneAriaLabel = "File upload drop zone", disabled, ...props }) {
63
+ const inputRef = react.useRef(null);
64
+ const uploadControllersRef = react.useRef(/* @__PURE__ */ new Map());
65
+ const [items, setItems] = react.useState([]);
66
+ const [errors, setErrors] = react.useState([]);
67
+ const [dragState, setDragState] = react.useState("idle");
68
+ const dragDepthRef = react.useRef(0);
69
+ const baseId = react.useId();
70
+ const hintId = `${baseId}-hint`;
71
+ const errorId = `${baseId}-errors`;
72
+ const updateItem = react.useCallback((itemId, updater) => {
73
+ setItems((current) => current.map((item) => item.id === itemId ? updater(item) : item));
74
+ }, []);
75
+ const removeItem = react.useCallback((itemId) => {
76
+ uploadControllersRef.current.get(itemId)?.abort();
77
+ uploadControllersRef.current.delete(itemId);
78
+ setItems((current) => current.filter((item) => item.id !== itemId));
79
+ }, []);
80
+ const beginUpload = react.useCallback((item) => {
81
+ if (!onUpload) return;
82
+ const controller = new AbortController();
83
+ uploadControllersRef.current.set(item.id, controller);
84
+ updateItem(item.id, (current) => ({
85
+ ...current,
86
+ status: "uploading",
87
+ progress: 0,
88
+ error: void 0
89
+ }));
90
+ onUpload({
91
+ file: item.file,
92
+ signal: controller.signal,
93
+ reportProgress: (value) => {
94
+ updateItem(item.id, (current) => {
95
+ if (current.status !== "uploading") return current;
96
+ return {
97
+ ...current,
98
+ progress: clamp(value, 0, 100)
99
+ };
100
+ });
101
+ }
102
+ }).then(() => {
103
+ if (controller.signal.aborted) return;
104
+ updateItem(item.id, (current) => ({
105
+ ...current,
106
+ status: "success",
107
+ progress: 100,
108
+ error: void 0
109
+ }));
110
+ }).catch((uploadError) => {
111
+ if (controller.signal.aborted) return;
112
+ const message = uploadError instanceof Error && uploadError.message ? uploadError.message : "Upload failed.";
113
+ updateItem(item.id, (current) => ({
114
+ ...current,
115
+ status: "error",
116
+ error: message
117
+ }));
118
+ }).finally(() => {
119
+ uploadControllersRef.current.delete(item.id);
120
+ });
121
+ }, [onUpload, updateItem]);
122
+ const queueFiles = react.useCallback((queuedFiles) => {
123
+ const incoming = Array.isArray(queuedFiles) ? queuedFiles : Array.from(queuedFiles);
124
+ if (incoming.length === 0) return;
125
+ if (!multiple) {
126
+ uploadControllersRef.current.forEach((controller) => controller.abort());
127
+ uploadControllersRef.current.clear();
128
+ }
129
+ const nextErrors = [];
130
+ const acceptedItems = [];
131
+ const nextItems = multiple ? [...items] : [];
132
+ const effectiveMaxFiles = multiple ? maxFiles ?? Number.POSITIVE_INFINITY : 1;
133
+ let candidates = incoming;
134
+ if (!multiple && incoming.length > 1) {
135
+ nextErrors.push("Only one file can be selected at a time.");
136
+ candidates = [incoming[0]];
137
+ }
138
+ const availableSlots = Math.max(0, effectiveMaxFiles - nextItems.length);
139
+ if (availableSlots < candidates.length) {
140
+ nextErrors.push(`You can upload up to ${effectiveMaxFiles} file${effectiveMaxFiles === 1 ? "" : "s"}.`);
141
+ candidates = candidates.slice(0, availableSlots);
142
+ }
143
+ for (const file of candidates) {
144
+ if (!matchesAccept(file, accept)) {
145
+ nextErrors.push(`${file.name} has an unsupported file type.`);
146
+ continue;
147
+ }
148
+ if (maxFileSize != null && file.size > maxFileSize) {
149
+ nextErrors.push(`${file.name} exceeds the ${formatBytes(maxFileSize)} size limit.`);
150
+ continue;
151
+ }
152
+ const customError = validateFile?.(file);
153
+ if (customError) {
154
+ nextErrors.push(customError);
155
+ continue;
156
+ }
157
+ const item = createFileItem(file);
158
+ acceptedItems.push(item);
159
+ nextItems.push(item);
160
+ }
161
+ setItems(nextItems);
162
+ setErrors(nextErrors);
163
+ setDragState(nextErrors.length > 0 ? "invalid-drop" : "idle");
164
+ if (onUpload) acceptedItems.forEach((item) => beginUpload(item));
165
+ }, [
166
+ accept,
167
+ beginUpload,
168
+ items,
169
+ maxFileSize,
170
+ maxFiles,
171
+ multiple,
172
+ onUpload,
173
+ validateFile
174
+ ]);
175
+ const openPicker = react.useCallback(() => {
176
+ if (disabled) return;
177
+ inputRef.current?.click();
178
+ }, [disabled]);
179
+ const handleInputChange = react.useCallback((event) => {
180
+ queueFiles(event.target.files ?? []);
181
+ event.target.value = "";
182
+ }, [queueFiles]);
183
+ const handleDragEnter = react.useCallback((event) => {
184
+ event.preventDefault();
185
+ if (disabled) return;
186
+ if (!hasFiles(event)) {
187
+ setDragState("invalid-drop");
188
+ return;
189
+ }
190
+ dragDepthRef.current += 1;
191
+ setDragState("drag-over");
192
+ }, [disabled]);
193
+ const handleDragOver = react.useCallback((event) => {
194
+ event.preventDefault();
195
+ if (disabled) return;
196
+ if (event.dataTransfer) event.dataTransfer.dropEffect = "copy";
197
+ if (!hasFiles(event)) setDragState("invalid-drop");
198
+ }, [disabled]);
199
+ const handleDragLeave = react.useCallback((event) => {
200
+ event.preventDefault();
201
+ dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);
202
+ if (dragDepthRef.current === 0) setDragState("idle");
203
+ }, []);
204
+ const handleDrop = react.useCallback((event) => {
205
+ event.preventDefault();
206
+ dragDepthRef.current = 0;
207
+ if (disabled) return;
208
+ if (!hasFiles(event)) {
209
+ setErrors(["Only files can be dropped here."]);
210
+ setDragState("invalid-drop");
211
+ return;
212
+ }
213
+ queueFiles(event.dataTransfer.files);
214
+ }, [disabled, queueFiles]);
215
+ react.useEffect(() => {
216
+ onItemsChange?.(items);
217
+ }, [items, onItemsChange]);
218
+ react.useEffect(() => () => {
219
+ uploadControllersRef.current.forEach((controller) => controller.abort());
220
+ uploadControllersRef.current.clear();
221
+ }, []);
222
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
223
+ "data-slot": "file-upload",
224
+ className: require_cn.cn("flex flex-col gap-3", className),
225
+ ...props,
226
+ children: [
227
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("input", {
228
+ ref: inputRef,
229
+ type: "file",
230
+ accept,
231
+ multiple,
232
+ disabled,
233
+ "data-slot": "file-upload-input",
234
+ className: "hidden",
235
+ onChange: handleInputChange,
236
+ tabIndex: -1
237
+ }),
238
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
239
+ "data-slot": "file-upload-dropzone",
240
+ "data-drag-state": dragState,
241
+ role: "button",
242
+ tabIndex: disabled ? -1 : 0,
243
+ "aria-label": dropzoneAriaLabel,
244
+ "aria-disabled": disabled || void 0,
245
+ "aria-describedby": errors.length > 0 ? `${hintId} ${errorId}` : hintId,
246
+ className: require_cn.cn("flex cursor-pointer flex-col items-center justify-center gap-2 rounded-12 border-2 border-dashed px-5 py-8 text-center outline-none transition-colors focus-visible:ring-3 focus-visible:ring-focus", "data-[drag-state=idle]:border-primary-border data-[drag-state=idle]:bg-secondary-bg/25", "data-[drag-state=drag-over]:border-primary-invert-border data-[drag-state=drag-over]:bg-primary-bg", "data-[drag-state=invalid-drop]:border-danger-border data-[drag-state=invalid-drop]:bg-danger-bg/35", disabled && "cursor-not-allowed opacity-60"),
247
+ onClick: openPicker,
248
+ onKeyDown: (event) => {
249
+ if (event.key === "Enter" || event.key === " ") {
250
+ event.preventDefault();
251
+ openPicker();
252
+ }
253
+ },
254
+ onDragEnter: handleDragEnter,
255
+ onDragOver: handleDragOver,
256
+ onDragLeave: handleDragLeave,
257
+ onDrop: handleDrop,
258
+ children: [
259
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.UploadCloud, {
260
+ className: "size-8 text-muted-txt",
261
+ "aria-hidden": "true"
262
+ }),
263
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
264
+ className: "font-medium text-sm text-primary-txt",
265
+ children: "Drag files here or click to browse"
266
+ }),
267
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("p", {
268
+ id: hintId,
269
+ className: "text-muted-txt text-xs",
270
+ children: [
271
+ multiple ? "Supports multiple files." : "Supports one file.",
272
+ accept ? ` Accepted: ${accept}.` : "",
273
+ maxFileSize ? ` Max file size: ${formatBytes(maxFileSize)}.` : ""
274
+ ]
275
+ })
276
+ ]
277
+ }),
278
+ errors.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
279
+ id: errorId,
280
+ role: "alert",
281
+ className: "space-y-1 text-danger-txt text-xs",
282
+ children: errors.map((message, index) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("li", {
283
+ className: "flex items-start gap-1.5",
284
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CircleAlert, {
285
+ className: "mt-0.5 size-3.5 shrink-0",
286
+ "aria-hidden": "true"
287
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", { children: message })]
288
+ }, `${message}-${index}`))
289
+ }) : null,
290
+ items.length > 0 ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
291
+ "data-slot": "file-upload-list",
292
+ className: "space-y-2",
293
+ "aria-live": "polite",
294
+ children: items.map((item) => {
295
+ const showProgress = item.status === "uploading" || item.status === "success";
296
+ const progressVariant = item.status === "error" ? "destructive" : "default";
297
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
298
+ "data-slot": "file-upload-item",
299
+ "data-state": item.status,
300
+ className: "rounded-12 border border-primary-border bg-secondary-bg/20 px-3 py-2",
301
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
302
+ className: "flex items-start gap-2.5",
303
+ children: [
304
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
305
+ className: "mt-0.5 shrink-0 text-muted-txt",
306
+ "aria-hidden": "true",
307
+ children: item.status === "success" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CheckCircle2, { className: "size-4 text-success-txt" }) : item.status === "error" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.CircleAlert, { className: "size-4 text-danger-txt" }) : item.status === "uploading" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.Loader2, { className: "size-4 animate-spin" }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.FileIcon, { className: "size-4" })
308
+ }),
309
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
310
+ className: "min-w-0 flex-1",
311
+ children: [
312
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
313
+ className: "flex items-center justify-between gap-3",
314
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
315
+ className: "truncate font-medium text-sm text-primary-txt",
316
+ children: item.file.name
317
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
318
+ className: "shrink-0 text-muted-txt text-xs",
319
+ children: formatBytes(item.file.size)
320
+ })]
321
+ }),
322
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
323
+ className: "mt-0.5 text-muted-txt text-xs",
324
+ children: getStatusLabel(item)
325
+ }),
326
+ showProgress ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_primitives_Progress_index.Progress, {
327
+ className: "mt-2",
328
+ value: item.status === "success" ? 100 : item.progress,
329
+ variant: progressVariant,
330
+ "aria-label": `Upload progress for ${item.file.name}`
331
+ }) : null
332
+ ]
333
+ }),
334
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_primitives_Button_index.Button, {
335
+ type: "button",
336
+ variant: item.status === "uploading" ? "destructive-ghost" : "ghost",
337
+ size: "icon-sm",
338
+ shape: "square",
339
+ "aria-label": item.status === "uploading" ? `Cancel upload for ${item.file.name}` : `Remove ${item.file.name}`,
340
+ onClick: () => removeItem(item.id),
341
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.XIcon, {})
342
+ })
343
+ ]
344
+ })
345
+ }, item.id);
346
+ })
347
+ }) : null
348
+ ]
349
+ });
350
+ }
351
+ //#endregion
352
+ exports.FileUpload = FileUpload;
353
+
354
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.cjs","names":["React","cn","UploadCloud","CircleAlert","CheckCircle2","Loader2","FileIcon","Progress","Button","XIcon"],"sources":["../../../src/primitives/FileUpload/FileUpload.tsx"],"sourcesContent":["\"use client\";\n\nimport { CheckCircle2, CircleAlert, FileIcon, Loader2, UploadCloud, XIcon } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/primitives/Button\";\nimport { Progress } from \"@/primitives/Progress\";\nimport { cn } from \"@/utils\";\n\ntype FileUploadStatus = \"idle\" | \"uploading\" | \"success\" | \"error\";\n\ntype FileUploadItem = {\n id: string;\n file: File;\n status: FileUploadStatus;\n progress: number;\n error?: string;\n};\n\ntype FileUploadHandler = (params: {\n file: File;\n signal: AbortSignal;\n reportProgress: (value: number) => void;\n}) => Promise<void>;\n\ntype FileUploadProps = Omit<React.ComponentProps<\"div\">, \"onChange\"> & {\n /** Disable click, drag/drop, and file selection. */\n disabled?: boolean;\n /** Allow selecting or dropping multiple files in one interaction. */\n multiple?: boolean;\n /** Native file accept filter (e.g. `image/*,.pdf`). */\n accept?: string;\n /** Maximum number of files held by the component at once. */\n maxFiles?: number;\n /** Maximum file size in bytes; oversized files are rejected with an error message. */\n maxFileSize?: number;\n /** Optional custom validator. Return a message to reject the file, or `null` to accept it. */\n validateFile?: (file: File) => string | null;\n /** Called for each accepted file; receives a progress reporter and abort signal. */\n onUpload?: FileUploadHandler;\n /** Called whenever file entries change (added, progress updates, completed, removed). */\n onItemsChange?: (items: FileUploadItem[]) => void;\n /** Accessible label for the drag-and-drop region. */\n dropzoneAriaLabel?: string;\n};\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(max, Math.max(min, value));\n}\n\nfunction formatBytes(value: number) {\n if (!Number.isFinite(value) || value <= 0) {\n return \"0 B\";\n }\n\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\"];\n const exponent = Math.min(Math.floor(Math.log(value) / Math.log(1024)), units.length - 1);\n const size = value / 1024 ** exponent;\n return `${size.toFixed(size >= 10 || exponent === 0 ? 0 : 1)} ${units[exponent]}`;\n}\n\nfunction getAcceptTokens(accept?: string) {\n return (accept ?? \"\")\n .split(\",\")\n .map((token) => token.trim().toLowerCase())\n .filter(Boolean);\n}\n\nfunction matchesAccept(file: File, accept?: string) {\n const tokens = getAcceptTokens(accept);\n if (tokens.length === 0) {\n return true;\n }\n\n const fileName = file.name.toLowerCase();\n const fileType = file.type.toLowerCase();\n\n return tokens.some((token) => {\n if (token.startsWith(\".\")) {\n return fileName.endsWith(token);\n }\n\n if (token.endsWith(\"/*\")) {\n const category = token.slice(0, token.length - 1);\n return fileType.startsWith(category);\n }\n\n return fileType === token;\n });\n}\n\nfunction createFileItem(file: File): FileUploadItem {\n const id =\n typeof crypto !== \"undefined\" && typeof crypto.randomUUID === \"function\"\n ? crypto.randomUUID()\n : `${file.name}-${file.lastModified}-${Math.random().toString(36).slice(2)}`;\n\n return {\n id,\n file,\n status: \"idle\",\n progress: 0,\n };\n}\n\nfunction hasFiles(event: React.DragEvent<HTMLElement>) {\n return Array.from(event.dataTransfer?.types ?? []).includes(\"Files\");\n}\n\nfunction getStatusLabel(item: FileUploadItem) {\n if (item.status === \"idle\") {\n return \"Ready to upload\";\n }\n\n if (item.status === \"uploading\") {\n return `Uploading… ${Math.round(item.progress)}%`;\n }\n\n if (item.status === \"success\") {\n return \"Upload complete\";\n }\n\n return item.error ? `Upload failed: ${item.error}` : \"Upload failed\";\n}\n\n/** File upload primitive with click-to-browse and drag-and-drop interactions, validation, and per-file upload states. */\nfunction FileUpload({\n className,\n multiple = false,\n accept,\n maxFiles,\n maxFileSize,\n validateFile,\n onUpload,\n onItemsChange,\n dropzoneAriaLabel = \"File upload drop zone\",\n disabled,\n ...props\n}: FileUploadProps) {\n const inputRef = React.useRef<HTMLInputElement>(null);\n const uploadControllersRef = React.useRef<Map<string, AbortController>>(new Map());\n\n const [items, setItems] = React.useState<FileUploadItem[]>([]);\n const [errors, setErrors] = React.useState<string[]>([]);\n const [dragState, setDragState] = React.useState<\"idle\" | \"drag-over\" | \"invalid-drop\">(\"idle\");\n const dragDepthRef = React.useRef(0);\n\n const baseId = React.useId();\n const hintId = `${baseId}-hint`;\n const errorId = `${baseId}-errors`;\n\n const updateItem = React.useCallback(\n (itemId: string, updater: (item: FileUploadItem) => FileUploadItem) => {\n setItems((current) => current.map((item) => (item.id === itemId ? updater(item) : item)));\n },\n [],\n );\n\n const removeItem = React.useCallback((itemId: string) => {\n const controller = uploadControllersRef.current.get(itemId);\n controller?.abort();\n uploadControllersRef.current.delete(itemId);\n setItems((current) => current.filter((item) => item.id !== itemId));\n }, []);\n\n const beginUpload = React.useCallback(\n (item: FileUploadItem) => {\n if (!onUpload) {\n return;\n }\n\n const controller = new AbortController();\n uploadControllersRef.current.set(item.id, controller);\n\n updateItem(item.id, (current) => ({\n ...current,\n status: \"uploading\",\n progress: 0,\n error: undefined,\n }));\n\n void onUpload({\n file: item.file,\n signal: controller.signal,\n reportProgress: (value) => {\n updateItem(item.id, (current) => {\n if (current.status !== \"uploading\") {\n return current;\n }\n\n return {\n ...current,\n progress: clamp(value, 0, 100),\n };\n });\n },\n })\n .then(() => {\n if (controller.signal.aborted) {\n return;\n }\n\n updateItem(item.id, (current) => ({\n ...current,\n status: \"success\",\n progress: 100,\n error: undefined,\n }));\n })\n .catch((uploadError) => {\n if (controller.signal.aborted) {\n return;\n }\n\n const message =\n uploadError instanceof Error && uploadError.message\n ? uploadError.message\n : \"Upload failed.\";\n\n updateItem(item.id, (current) => ({\n ...current,\n status: \"error\",\n error: message,\n }));\n })\n .finally(() => {\n uploadControllersRef.current.delete(item.id);\n });\n },\n [onUpload, updateItem],\n );\n\n const queueFiles = React.useCallback(\n (queuedFiles: File[] | FileList) => {\n const incoming = Array.isArray(queuedFiles) ? queuedFiles : Array.from(queuedFiles);\n if (incoming.length === 0) {\n return;\n }\n\n if (!multiple) {\n uploadControllersRef.current.forEach((controller) => controller.abort());\n uploadControllersRef.current.clear();\n }\n\n const nextErrors: string[] = [];\n const acceptedItems: FileUploadItem[] = [];\n const nextItems = multiple ? [...items] : [];\n\n const effectiveMaxFiles = multiple ? (maxFiles ?? Number.POSITIVE_INFINITY) : 1;\n let candidates = incoming;\n\n if (!multiple && incoming.length > 1) {\n nextErrors.push(\"Only one file can be selected at a time.\");\n candidates = [incoming[0]];\n }\n\n const availableSlots = Math.max(0, effectiveMaxFiles - nextItems.length);\n if (availableSlots < candidates.length) {\n nextErrors.push(\n `You can upload up to ${effectiveMaxFiles} file${effectiveMaxFiles === 1 ? \"\" : \"s\"}.`,\n );\n candidates = candidates.slice(0, availableSlots);\n }\n\n for (const file of candidates) {\n if (!matchesAccept(file, accept)) {\n nextErrors.push(`${file.name} has an unsupported file type.`);\n continue;\n }\n\n if (maxFileSize != null && file.size > maxFileSize) {\n nextErrors.push(`${file.name} exceeds the ${formatBytes(maxFileSize)} size limit.`);\n continue;\n }\n\n const customError = validateFile?.(file);\n if (customError) {\n nextErrors.push(customError);\n continue;\n }\n\n const item = createFileItem(file);\n acceptedItems.push(item);\n nextItems.push(item);\n }\n\n setItems(nextItems);\n setErrors(nextErrors);\n setDragState(nextErrors.length > 0 ? \"invalid-drop\" : \"idle\");\n\n if (onUpload) {\n acceptedItems.forEach((item) => beginUpload(item));\n }\n },\n [accept, beginUpload, items, maxFileSize, maxFiles, multiple, onUpload, validateFile],\n );\n\n const openPicker = React.useCallback(() => {\n if (disabled) {\n return;\n }\n\n inputRef.current?.click();\n }, [disabled]);\n\n const handleInputChange = React.useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n queueFiles(event.target.files ?? []);\n event.target.value = \"\";\n },\n [queueFiles],\n );\n\n const handleDragEnter = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n if (disabled) {\n return;\n }\n\n if (!hasFiles(event)) {\n setDragState(\"invalid-drop\");\n return;\n }\n\n dragDepthRef.current += 1;\n setDragState(\"drag-over\");\n },\n [disabled],\n );\n\n const handleDragOver = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n if (disabled) {\n return;\n }\n\n if (event.dataTransfer) {\n event.dataTransfer.dropEffect = \"copy\";\n }\n\n if (!hasFiles(event)) {\n setDragState(\"invalid-drop\");\n }\n },\n [disabled],\n );\n\n const handleDragLeave = React.useCallback((event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n\n dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);\n if (dragDepthRef.current === 0) {\n setDragState(\"idle\");\n }\n }, []);\n\n const handleDrop = React.useCallback(\n (event: React.DragEvent<HTMLDivElement>) => {\n event.preventDefault();\n dragDepthRef.current = 0;\n\n if (disabled) {\n return;\n }\n\n if (!hasFiles(event)) {\n setErrors([\"Only files can be dropped here.\"]);\n setDragState(\"invalid-drop\");\n return;\n }\n\n queueFiles(event.dataTransfer.files);\n },\n [disabled, queueFiles],\n );\n\n React.useEffect(() => {\n onItemsChange?.(items);\n }, [items, onItemsChange]);\n\n React.useEffect(\n () => () => {\n uploadControllersRef.current.forEach((controller) => controller.abort());\n uploadControllersRef.current.clear();\n },\n [],\n );\n\n return (\n <div data-slot=\"file-upload\" className={cn(\"flex flex-col gap-3\", className)} {...props}>\n <input\n ref={inputRef}\n type=\"file\"\n accept={accept}\n multiple={multiple}\n disabled={disabled}\n data-slot=\"file-upload-input\"\n className=\"hidden\"\n onChange={handleInputChange}\n tabIndex={-1}\n />\n\n <div\n data-slot=\"file-upload-dropzone\"\n data-drag-state={dragState}\n role=\"button\"\n tabIndex={disabled ? -1 : 0}\n aria-label={dropzoneAriaLabel}\n aria-disabled={disabled || undefined}\n aria-describedby={errors.length > 0 ? `${hintId} ${errorId}` : hintId}\n className={cn(\n \"flex cursor-pointer flex-col items-center justify-center gap-2 rounded-12 border-2 border-dashed px-5 py-8 text-center outline-none transition-colors focus-visible:ring-3 focus-visible:ring-focus\",\n \"data-[drag-state=idle]:border-primary-border data-[drag-state=idle]:bg-secondary-bg/25\",\n \"data-[drag-state=drag-over]:border-primary-invert-border data-[drag-state=drag-over]:bg-primary-bg\",\n \"data-[drag-state=invalid-drop]:border-danger-border data-[drag-state=invalid-drop]:bg-danger-bg/35\",\n disabled && \"cursor-not-allowed opacity-60\",\n )}\n onClick={openPicker}\n onKeyDown={(event) => {\n if (event.key === \"Enter\" || event.key === \" \") {\n event.preventDefault();\n openPicker();\n }\n }}\n onDragEnter={handleDragEnter}\n onDragOver={handleDragOver}\n onDragLeave={handleDragLeave}\n onDrop={handleDrop}\n >\n <UploadCloud className=\"size-8 text-muted-txt\" aria-hidden=\"true\" />\n <p className=\"font-medium text-sm text-primary-txt\">Drag files here or click to browse</p>\n <p id={hintId} className=\"text-muted-txt text-xs\">\n {multiple ? \"Supports multiple files.\" : \"Supports one file.\"}\n {accept ? ` Accepted: ${accept}.` : \"\"}\n {maxFileSize ? ` Max file size: ${formatBytes(maxFileSize)}.` : \"\"}\n </p>\n </div>\n\n {errors.length > 0 ? (\n <ul id={errorId} role=\"alert\" className=\"space-y-1 text-danger-txt text-xs\">\n {errors.map((message, index) => (\n <li key={`${message}-${index}`} className=\"flex items-start gap-1.5\">\n <CircleAlert className=\"mt-0.5 size-3.5 shrink-0\" aria-hidden=\"true\" />\n <span>{message}</span>\n </li>\n ))}\n </ul>\n ) : null}\n\n {items.length > 0 ? (\n <ul data-slot=\"file-upload-list\" className=\"space-y-2\" aria-live=\"polite\">\n {items.map((item) => {\n const showProgress = item.status === \"uploading\" || item.status === \"success\";\n const progressVariant = item.status === \"error\" ? \"destructive\" : \"default\";\n\n return (\n <li\n key={item.id}\n data-slot=\"file-upload-item\"\n data-state={item.status}\n className=\"rounded-12 border border-primary-border bg-secondary-bg/20 px-3 py-2\"\n >\n <div className=\"flex items-start gap-2.5\">\n <div className=\"mt-0.5 shrink-0 text-muted-txt\" aria-hidden=\"true\">\n {item.status === \"success\" ? (\n <CheckCircle2 className=\"size-4 text-success-txt\" />\n ) : item.status === \"error\" ? (\n <CircleAlert className=\"size-4 text-danger-txt\" />\n ) : item.status === \"uploading\" ? (\n <Loader2 className=\"size-4 animate-spin\" />\n ) : (\n <FileIcon className=\"size-4\" />\n )}\n </div>\n\n <div className=\"min-w-0 flex-1\">\n <div className=\"flex items-center justify-between gap-3\">\n <p className=\"truncate font-medium text-sm text-primary-txt\">\n {item.file.name}\n </p>\n <p className=\"shrink-0 text-muted-txt text-xs\">\n {formatBytes(item.file.size)}\n </p>\n </div>\n <p className=\"mt-0.5 text-muted-txt text-xs\">{getStatusLabel(item)}</p>\n {showProgress ? (\n <Progress\n className=\"mt-2\"\n value={item.status === \"success\" ? 100 : item.progress}\n variant={progressVariant}\n aria-label={`Upload progress for ${item.file.name}`}\n />\n ) : null}\n </div>\n\n <Button\n type=\"button\"\n variant={item.status === \"uploading\" ? \"destructive-ghost\" : \"ghost\"}\n size=\"icon-sm\"\n shape=\"square\"\n aria-label={\n item.status === \"uploading\"\n ? `Cancel upload for ${item.file.name}`\n : `Remove ${item.file.name}`\n }\n onClick={() => removeItem(item.id)}\n >\n <XIcon />\n </Button>\n </div>\n </li>\n );\n })}\n </ul>\n ) : null}\n </div>\n );\n}\n\nexport {\n FileUpload,\n type FileUploadHandler,\n type FileUploadItem,\n type FileUploadProps,\n type FileUploadStatus,\n};\n"],"mappings":";;;;;;;;;;AA8CA,SAAS,MAAM,OAAe,KAAa,KAAa;CACtD,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,CAAC;AAC3C;AAEA,SAAS,YAAY,OAAe;CAClC,IAAI,CAAC,OAAO,SAAS,KAAK,KAAK,SAAS,GACtC,OAAO;CAGT,MAAM,QAAQ;EAAC;EAAK;EAAM;EAAM;EAAM;CAAI;CAC1C,MAAM,WAAW,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC;CACxF,MAAM,OAAO,QAAQ,QAAQ;CAC7B,OAAO,GAAG,KAAK,QAAQ,QAAQ,MAAM,aAAa,IAAI,IAAI,CAAC,EAAE,GAAG,MAAM;AACxE;AAEA,SAAS,gBAAgB,QAAiB;CACxC,QAAQ,UAAU,IACf,MAAM,GAAG,EACT,KAAK,UAAU,MAAM,KAAK,EAAE,YAAY,CAAC,EACzC,OAAO,OAAO;AACnB;AAEA,SAAS,cAAc,MAAY,QAAiB;CAClD,MAAM,SAAS,gBAAgB,MAAM;CACrC,IAAI,OAAO,WAAW,GACpB,OAAO;CAGT,MAAM,WAAW,KAAK,KAAK,YAAY;CACvC,MAAM,WAAW,KAAK,KAAK,YAAY;CAEvC,OAAO,OAAO,MAAM,UAAU;EAC5B,IAAI,MAAM,WAAW,GAAG,GACtB,OAAO,SAAS,SAAS,KAAK;EAGhC,IAAI,MAAM,SAAS,IAAI,GAAG;GACxB,MAAM,WAAW,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC;GAChD,OAAO,SAAS,WAAW,QAAQ;EACrC;EAEA,OAAO,aAAa;CACtB,CAAC;AACH;AAEA,SAAS,eAAe,MAA4B;CAMlD,OAAO;EACL,IALA,OAAO,WAAW,eAAe,OAAO,OAAO,eAAe,aAC1D,OAAO,WAAW,IAClB,GAAG,KAAK,KAAK,GAAG,KAAK,aAAa,GAAG,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;EAI3E;EACA,QAAQ;EACR,UAAU;CACZ;AACF;AAEA,SAAS,SAAS,OAAqC;CACrD,OAAO,MAAM,KAAK,MAAM,cAAc,SAAS,CAAC,CAAC,EAAE,SAAS,OAAO;AACrE;AAEA,SAAS,eAAe,MAAsB;CAC5C,IAAI,KAAK,WAAW,QAClB,OAAO;CAGT,IAAI,KAAK,WAAW,aAClB,OAAO,cAAc,KAAK,MAAM,KAAK,QAAQ,EAAE;CAGjD,IAAI,KAAK,WAAW,WAClB,OAAO;CAGT,OAAO,KAAK,QAAQ,kBAAkB,KAAK,UAAU;AACvD;;AAGA,SAAS,WAAW,EAClB,WACA,WAAW,OACX,QACA,UACA,aACA,cACA,UACA,eACA,oBAAoB,yBACpB,UACA,GAAG,SACe;CAClB,MAAM,WAAWA,MAAM,OAAyB,IAAI;CACpD,MAAM,uBAAuBA,MAAM,uBAAqC,IAAI,IAAI,CAAC;CAEjF,MAAM,CAAC,OAAO,YAAYA,MAAM,SAA2B,CAAC,CAAC;CAC7D,MAAM,CAAC,QAAQ,aAAaA,MAAM,SAAmB,CAAC,CAAC;CACvD,MAAM,CAAC,WAAW,gBAAgBA,MAAM,SAAgD,MAAM;CAC9F,MAAM,eAAeA,MAAM,OAAO,CAAC;CAEnC,MAAM,SAASA,MAAM,MAAM;CAC3B,MAAM,SAAS,GAAG,OAAO;CACzB,MAAM,UAAU,GAAG,OAAO;CAE1B,MAAM,aAAaA,MAAM,aACtB,QAAgB,YAAsD;EACrE,UAAU,YAAY,QAAQ,KAAK,SAAU,KAAK,OAAO,SAAS,QAAQ,IAAI,IAAI,IAAK,CAAC;CAC1F,GACA,CAAC,CACH;CAEA,MAAM,aAAaA,MAAM,aAAa,WAAmB;EAEvD,qBADwC,QAAQ,IAAI,MAC3C,GAAG,MAAM;EAClB,qBAAqB,QAAQ,OAAO,MAAM;EAC1C,UAAU,YAAY,QAAQ,QAAQ,SAAS,KAAK,OAAO,MAAM,CAAC;CACpE,GAAG,CAAC,CAAC;CAEL,MAAM,cAAcA,MAAM,aACvB,SAAyB;EACxB,IAAI,CAAC,UACH;EAGF,MAAM,aAAa,IAAI,gBAAgB;EACvC,qBAAqB,QAAQ,IAAI,KAAK,IAAI,UAAU;EAEpD,WAAW,KAAK,KAAK,aAAa;GAChC,GAAG;GACH,QAAQ;GACR,UAAU;GACV,OAAO,KAAA;EACT,EAAE;EAEF,SAAc;GACZ,MAAM,KAAK;GACX,QAAQ,WAAW;GACnB,iBAAiB,UAAU;IACzB,WAAW,KAAK,KAAK,YAAY;KAC/B,IAAI,QAAQ,WAAW,aACrB,OAAO;KAGT,OAAO;MACL,GAAG;MACH,UAAU,MAAM,OAAO,GAAG,GAAG;KAC/B;IACF,CAAC;GACH;EACF,CAAC,EACE,WAAW;GACV,IAAI,WAAW,OAAO,SACpB;GAGF,WAAW,KAAK,KAAK,aAAa;IAChC,GAAG;IACH,QAAQ;IACR,UAAU;IACV,OAAO,KAAA;GACT,EAAE;EACJ,CAAC,EACA,OAAO,gBAAgB;GACtB,IAAI,WAAW,OAAO,SACpB;GAGF,MAAM,UACJ,uBAAuB,SAAS,YAAY,UACxC,YAAY,UACZ;GAEN,WAAW,KAAK,KAAK,aAAa;IAChC,GAAG;IACH,QAAQ;IACR,OAAO;GACT,EAAE;EACJ,CAAC,EACA,cAAc;GACb,qBAAqB,QAAQ,OAAO,KAAK,EAAE;EAC7C,CAAC;CACL,GACA,CAAC,UAAU,UAAU,CACvB;CAEA,MAAM,aAAaA,MAAM,aACtB,gBAAmC;EAClC,MAAM,WAAW,MAAM,QAAQ,WAAW,IAAI,cAAc,MAAM,KAAK,WAAW;EAClF,IAAI,SAAS,WAAW,GACtB;EAGF,IAAI,CAAC,UAAU;GACb,qBAAqB,QAAQ,SAAS,eAAe,WAAW,MAAM,CAAC;GACvE,qBAAqB,QAAQ,MAAM;EACrC;EAEA,MAAM,aAAuB,CAAC;EAC9B,MAAM,gBAAkC,CAAC;EACzC,MAAM,YAAY,WAAW,CAAC,GAAG,KAAK,IAAI,CAAC;EAE3C,MAAM,oBAAoB,WAAY,YAAY,OAAO,oBAAqB;EAC9E,IAAI,aAAa;EAEjB,IAAI,CAAC,YAAY,SAAS,SAAS,GAAG;GACpC,WAAW,KAAK,0CAA0C;GAC1D,aAAa,CAAC,SAAS,EAAE;EAC3B;EAEA,MAAM,iBAAiB,KAAK,IAAI,GAAG,oBAAoB,UAAU,MAAM;EACvE,IAAI,iBAAiB,WAAW,QAAQ;GACtC,WAAW,KACT,wBAAwB,kBAAkB,OAAO,sBAAsB,IAAI,KAAK,IAAI,EACtF;GACA,aAAa,WAAW,MAAM,GAAG,cAAc;EACjD;EAEA,KAAK,MAAM,QAAQ,YAAY;GAC7B,IAAI,CAAC,cAAc,MAAM,MAAM,GAAG;IAChC,WAAW,KAAK,GAAG,KAAK,KAAK,+BAA+B;IAC5D;GACF;GAEA,IAAI,eAAe,QAAQ,KAAK,OAAO,aAAa;IAClD,WAAW,KAAK,GAAG,KAAK,KAAK,eAAe,YAAY,WAAW,EAAE,aAAa;IAClF;GACF;GAEA,MAAM,cAAc,eAAe,IAAI;GACvC,IAAI,aAAa;IACf,WAAW,KAAK,WAAW;IAC3B;GACF;GAEA,MAAM,OAAO,eAAe,IAAI;GAChC,cAAc,KAAK,IAAI;GACvB,UAAU,KAAK,IAAI;EACrB;EAEA,SAAS,SAAS;EAClB,UAAU,UAAU;EACpB,aAAa,WAAW,SAAS,IAAI,iBAAiB,MAAM;EAE5D,IAAI,UACF,cAAc,SAAS,SAAS,YAAY,IAAI,CAAC;CAErD,GACA;EAAC;EAAQ;EAAa;EAAO;EAAa;EAAU;EAAU;EAAU;CAAY,CACtF;CAEA,MAAM,aAAaA,MAAM,kBAAkB;EACzC,IAAI,UACF;EAGF,SAAS,SAAS,MAAM;CAC1B,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,oBAAoBA,MAAM,aAC7B,UAA+C;EAC9C,WAAW,MAAM,OAAO,SAAS,CAAC,CAAC;EACnC,MAAM,OAAO,QAAQ;CACvB,GACA,CAAC,UAAU,CACb;CAEA,MAAM,kBAAkBA,MAAM,aAC3B,UAA2C;EAC1C,MAAM,eAAe;EACrB,IAAI,UACF;EAGF,IAAI,CAAC,SAAS,KAAK,GAAG;GACpB,aAAa,cAAc;GAC3B;EACF;EAEA,aAAa,WAAW;EACxB,aAAa,WAAW;CAC1B,GACA,CAAC,QAAQ,CACX;CAEA,MAAM,iBAAiBA,MAAM,aAC1B,UAA2C;EAC1C,MAAM,eAAe;EACrB,IAAI,UACF;EAGF,IAAI,MAAM,cACR,MAAM,aAAa,aAAa;EAGlC,IAAI,CAAC,SAAS,KAAK,GACjB,aAAa,cAAc;CAE/B,GACA,CAAC,QAAQ,CACX;CAEA,MAAM,kBAAkBA,MAAM,aAAa,UAA2C;EACpF,MAAM,eAAe;EAErB,aAAa,UAAU,KAAK,IAAI,GAAG,aAAa,UAAU,CAAC;EAC3D,IAAI,aAAa,YAAY,GAC3B,aAAa,MAAM;CAEvB,GAAG,CAAC,CAAC;CAEL,MAAM,aAAaA,MAAM,aACtB,UAA2C;EAC1C,MAAM,eAAe;EACrB,aAAa,UAAU;EAEvB,IAAI,UACF;EAGF,IAAI,CAAC,SAAS,KAAK,GAAG;GACpB,UAAU,CAAC,iCAAiC,CAAC;GAC7C,aAAa,cAAc;GAC3B;EACF;EAEA,WAAW,MAAM,aAAa,KAAK;CACrC,GACA,CAAC,UAAU,UAAU,CACvB;CAEA,MAAM,gBAAgB;EACpB,gBAAgB,KAAK;CACvB,GAAG,CAAC,OAAO,aAAa,CAAC;CAEzB,MAAM,sBACQ;EACV,qBAAqB,QAAQ,SAAS,eAAe,WAAW,MAAM,CAAC;EACvE,qBAAqB,QAAQ,MAAM;CACrC,GACA,CAAC,CACH;CAEA,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EAAK,aAAU;EAAc,WAAWC,WAAAA,GAAG,uBAAuB,SAAS;EAAG,GAAI;YAAlF;GACE,iBAAA,GAAA,kBAAA,KAAC,SAAD;IACE,KAAK;IACL,MAAK;IACG;IACE;IACA;IACV,aAAU;IACV,WAAU;IACV,UAAU;IACV,UAAU;GACX,CAAA;GAED,iBAAA,GAAA,kBAAA,MAAC,OAAD;IACE,aAAU;IACV,mBAAiB;IACjB,MAAK;IACL,UAAU,WAAW,KAAK;IAC1B,cAAY;IACZ,iBAAe,YAAY,KAAA;IAC3B,oBAAkB,OAAO,SAAS,IAAI,GAAG,OAAO,GAAG,YAAY;IAC/D,WAAWA,WAAAA,GACT,uMACA,0FACA,sGACA,sGACA,YAAY,+BACd;IACA,SAAS;IACT,YAAY,UAAU;KACpB,IAAI,MAAM,QAAQ,WAAW,MAAM,QAAQ,KAAK;MAC9C,MAAM,eAAe;MACrB,WAAW;KACb;IACF;IACA,aAAa;IACb,YAAY;IACZ,aAAa;IACb,QAAQ;cAzBV;KA2BE,iBAAA,GAAA,kBAAA,KAACC,aAAAA,aAAD;MAAa,WAAU;MAAwB,eAAY;KAAQ,CAAA;KACnE,iBAAA,GAAA,kBAAA,KAAC,KAAD;MAAG,WAAU;gBAAuC;KAAqC,CAAA;KACzF,iBAAA,GAAA,kBAAA,MAAC,KAAD;MAAG,IAAI;MAAQ,WAAU;gBAAzB;OACG,WAAW,6BAA6B;OACxC,SAAS,cAAc,OAAO,KAAK;OACnC,cAAc,mBAAmB,YAAY,WAAW,EAAE,KAAK;MAC/D;;IACA;;GAEJ,OAAO,SAAS,IACf,iBAAA,GAAA,kBAAA,KAAC,MAAD;IAAI,IAAI;IAAS,MAAK;IAAQ,WAAU;cACrC,OAAO,KAAK,SAAS,UACpB,iBAAA,GAAA,kBAAA,MAAC,MAAD;KAAgC,WAAU;eAA1C,CACE,iBAAA,GAAA,kBAAA,KAACC,aAAAA,aAAD;MAAa,WAAU;MAA2B,eAAY;KAAQ,CAAA,GACtE,iBAAA,GAAA,kBAAA,KAAC,QAAD,EAAA,UAAO,QAAc,CAAA,CACnB;OAHK,GAAG,QAAQ,GAAG,OAGnB,CACL;GACC,CAAA,IACF;GAEH,MAAM,SAAS,IACd,iBAAA,GAAA,kBAAA,KAAC,MAAD;IAAI,aAAU;IAAmB,WAAU;IAAY,aAAU;cAC9D,MAAM,KAAK,SAAS;KACnB,MAAM,eAAe,KAAK,WAAW,eAAe,KAAK,WAAW;KACpE,MAAM,kBAAkB,KAAK,WAAW,UAAU,gBAAgB;KAElE,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;MAEE,aAAU;MACV,cAAY,KAAK;MACjB,WAAU;gBAEV,iBAAA,GAAA,kBAAA,MAAC,OAAD;OAAK,WAAU;iBAAf;QACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;SAAK,WAAU;SAAiC,eAAY;mBACzD,KAAK,WAAW,YACf,iBAAA,GAAA,kBAAA,KAACC,aAAAA,cAAD,EAAc,WAAU,0BAA2B,CAAA,IACjD,KAAK,WAAW,UAClB,iBAAA,GAAA,kBAAA,KAACD,aAAAA,aAAD,EAAa,WAAU,yBAA0B,CAAA,IAC/C,KAAK,WAAW,cAClB,iBAAA,GAAA,kBAAA,KAACE,aAAAA,SAAD,EAAS,WAAU,sBAAuB,CAAA,IAE1C,iBAAA,GAAA,kBAAA,KAACC,aAAAA,UAAD,EAAU,WAAU,SAAU,CAAA;QAE7B,CAAA;QAEL,iBAAA,GAAA,kBAAA,MAAC,OAAD;SAAK,WAAU;mBAAf;UACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;WAAK,WAAU;qBAAf,CACE,iBAAA,GAAA,kBAAA,KAAC,KAAD;YAAG,WAAU;sBACV,KAAK,KAAK;WACV,CAAA,GACH,iBAAA,GAAA,kBAAA,KAAC,KAAD;YAAG,WAAU;sBACV,YAAY,KAAK,KAAK,IAAI;WAC1B,CAAA,CACA;;UACL,iBAAA,GAAA,kBAAA,KAAC,KAAD;WAAG,WAAU;qBAAiC,eAAe,IAAI;UAAK,CAAA;UACrE,eACC,iBAAA,GAAA,kBAAA,KAACC,kCAAAA,UAAD;WACE,WAAU;WACV,OAAO,KAAK,WAAW,YAAY,MAAM,KAAK;WAC9C,SAAS;WACT,cAAY,uBAAuB,KAAK,KAAK;UAC9C,CAAA,IACC;SACD;;QAEL,iBAAA,GAAA,kBAAA,KAACC,gCAAAA,QAAD;SACE,MAAK;SACL,SAAS,KAAK,WAAW,cAAc,sBAAsB;SAC7D,MAAK;SACL,OAAM;SACN,cACE,KAAK,WAAW,cACZ,qBAAqB,KAAK,KAAK,SAC/B,UAAU,KAAK,KAAK;SAE1B,eAAe,WAAW,KAAK,EAAE;mBAEjC,iBAAA,GAAA,kBAAA,KAACC,aAAAA,OAAD,CAAQ,CAAA;QACF,CAAA;OACL;;KACH,GArDG,KAAK,EAqDR;IAER,CAAC;GACC,CAAA,IACF;EACD;;AAET"}
@@ -0,0 +1,2 @@
1
+ import { a as FileUploadStatus, i as FileUploadProps, n as FileUploadHandler, r as FileUploadItem, t as FileUpload } from "../../index28.cjs";
2
+ export { FileUpload, FileUploadHandler, FileUploadItem, FileUploadProps, FileUploadStatus };
@@ -0,0 +1,2 @@
1
+ import { a as FileUploadStatus, i as FileUploadProps, n as FileUploadHandler, r as FileUploadItem, t as FileUpload } from "../../index28.js";
2
+ export { FileUpload, FileUploadHandler, FileUploadItem, FileUploadProps, FileUploadStatus };