@psnext/design-system 2.3.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 (671) hide show
  1. package/DESIGN.md +493 -8
  2. package/README.md +3 -3
  3. package/SKILL.md +84 -6
  4. package/bin/install-agent-skill.mjs +39 -7
  5. package/dist/Header.cjs +152 -21
  6. package/dist/Header.cjs.map +1 -1
  7. package/dist/Header.js +152 -21
  8. package/dist/Header.js.map +1 -1
  9. package/dist/Icon.cjs +40 -8
  10. package/dist/Icon.cjs.map +1 -1
  11. package/dist/Icon.js +40 -8
  12. package/dist/Icon.js.map +1 -1
  13. package/dist/Mosaic.cjs +472 -0
  14. package/dist/Mosaic.cjs.map +1 -0
  15. package/dist/Mosaic.js +459 -0
  16. package/dist/Mosaic.js.map +1 -0
  17. package/dist/MultiColumn.cjs +354 -0
  18. package/dist/MultiColumn.cjs.map +1 -0
  19. package/dist/MultiColumn.js +335 -0
  20. package/dist/MultiColumn.js.map +1 -0
  21. package/dist/Sidebar.cjs +4 -3
  22. package/dist/Sidebar.cjs.map +1 -1
  23. package/dist/Sidebar.js +4 -3
  24. package/dist/Sidebar.js.map +1 -1
  25. package/dist/index.cjs +18 -3
  26. package/dist/index.d.cts +5 -5
  27. package/dist/index.d.cts.map +1 -1
  28. package/dist/index.d.ts +5 -5
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +9 -4
  31. package/dist/index10.d.cts +6 -6
  32. package/dist/index10.d.cts.map +1 -1
  33. package/dist/index10.d.ts +6 -6
  34. package/dist/index11.d.cts +3 -3
  35. package/dist/index11.d.cts.map +1 -1
  36. package/dist/index11.d.ts +3 -3
  37. package/dist/index11.d.ts.map +1 -1
  38. package/dist/index12.d.cts +12 -12
  39. package/dist/index12.d.ts +12 -12
  40. package/dist/index13.d.cts +6 -6
  41. package/dist/index13.d.cts.map +1 -1
  42. package/dist/index13.d.ts +6 -6
  43. package/dist/index13.d.ts.map +1 -1
  44. package/dist/index14.d.cts +5 -5
  45. package/dist/index14.d.ts +5 -5
  46. package/dist/index15.d.cts +58 -23
  47. package/dist/index15.d.cts.map +1 -1
  48. package/dist/index15.d.ts +58 -23
  49. package/dist/index15.d.ts.map +1 -1
  50. package/dist/index16.d.cts +23 -32
  51. package/dist/index16.d.cts.map +1 -1
  52. package/dist/index16.d.ts +23 -32
  53. package/dist/index16.d.ts.map +1 -1
  54. package/dist/index17.d.cts +34 -15
  55. package/dist/index17.d.cts.map +1 -1
  56. package/dist/index17.d.ts +34 -15
  57. package/dist/index17.d.ts.map +1 -1
  58. package/dist/index18.d.cts +13 -67
  59. package/dist/index18.d.cts.map +1 -1
  60. package/dist/index18.d.ts +13 -67
  61. package/dist/index18.d.ts.map +1 -1
  62. package/dist/index19.d.cts +55 -48
  63. package/dist/index19.d.cts.map +1 -1
  64. package/dist/index19.d.ts +55 -48
  65. package/dist/index19.d.ts.map +1 -1
  66. package/dist/index2.d.cts +8 -8
  67. package/dist/index2.d.ts +9 -9
  68. package/dist/index20.d.cts +45 -75
  69. package/dist/index20.d.cts.map +1 -1
  70. package/dist/index20.d.ts +45 -75
  71. package/dist/index20.d.ts.map +1 -1
  72. package/dist/index21.d.cts +90 -28
  73. package/dist/index21.d.cts.map +1 -1
  74. package/dist/index21.d.ts +90 -28
  75. package/dist/index21.d.ts.map +1 -1
  76. package/dist/index22.d.cts +28 -56
  77. package/dist/index22.d.cts.map +1 -1
  78. package/dist/index22.d.ts +28 -56
  79. package/dist/index22.d.ts.map +1 -1
  80. package/dist/index23.d.cts +53 -78
  81. package/dist/index23.d.cts.map +1 -1
  82. package/dist/index23.d.ts +53 -78
  83. package/dist/index23.d.ts.map +1 -1
  84. package/dist/index24.d.cts +83 -33
  85. package/dist/index24.d.cts.map +1 -1
  86. package/dist/index24.d.ts +83 -33
  87. package/dist/index24.d.ts.map +1 -1
  88. package/dist/index25.d.cts +43 -11
  89. package/dist/index25.d.cts.map +1 -1
  90. package/dist/index25.d.ts +43 -11
  91. package/dist/index25.d.ts.map +1 -1
  92. package/dist/index26.d.cts +11 -74
  93. package/dist/index26.d.cts.map +1 -1
  94. package/dist/index26.d.ts +11 -74
  95. package/dist/index26.d.ts.map +1 -1
  96. package/dist/index27.d.cts +68 -59
  97. package/dist/index27.d.cts.map +1 -1
  98. package/dist/index27.d.ts +68 -59
  99. package/dist/index27.d.ts.map +1 -1
  100. package/dist/index28.d.cts +47 -30
  101. package/dist/index28.d.cts.map +1 -1
  102. package/dist/index28.d.ts +47 -30
  103. package/dist/index28.d.ts.map +1 -1
  104. package/dist/index29.d.cts +63 -17
  105. package/dist/index29.d.cts.map +1 -1
  106. package/dist/index29.d.ts +63 -17
  107. package/dist/index29.d.ts.map +1 -1
  108. package/dist/index3.d.cts +13 -13
  109. package/dist/index3.d.ts +13 -13
  110. package/dist/index30.d.cts +29 -51
  111. package/dist/index30.d.cts.map +1 -1
  112. package/dist/index30.d.ts +30 -52
  113. package/dist/index30.d.ts.map +1 -1
  114. package/dist/index31.d.cts +19 -34
  115. package/dist/index31.d.cts.map +1 -1
  116. package/dist/index31.d.ts +19 -34
  117. package/dist/index31.d.ts.map +1 -1
  118. package/dist/index32.d.cts +80 -18
  119. package/dist/index32.d.cts.map +1 -1
  120. package/dist/index32.d.ts +79 -17
  121. package/dist/index32.d.ts.map +1 -1
  122. package/dist/index33.d.cts +32 -51
  123. package/dist/index33.d.cts.map +1 -1
  124. package/dist/index33.d.ts +33 -52
  125. package/dist/index33.d.ts.map +1 -1
  126. package/dist/index34.d.cts +19 -36
  127. package/dist/index34.d.cts.map +1 -1
  128. package/dist/index34.d.ts +19 -36
  129. package/dist/index34.d.ts.map +1 -1
  130. package/dist/index35.d.cts +43 -61
  131. package/dist/index35.d.cts.map +1 -1
  132. package/dist/index35.d.ts +44 -62
  133. package/dist/index35.d.ts.map +1 -1
  134. package/dist/index36.d.cts +35 -11
  135. package/dist/index36.d.cts.map +1 -1
  136. package/dist/index36.d.ts +35 -11
  137. package/dist/index36.d.ts.map +1 -1
  138. package/dist/index37.d.cts +68 -20
  139. package/dist/index37.d.cts.map +1 -1
  140. package/dist/index37.d.ts +69 -21
  141. package/dist/index37.d.ts.map +1 -1
  142. package/dist/index38.d.cts +14 -15
  143. package/dist/index38.d.cts.map +1 -1
  144. package/dist/index38.d.ts +14 -15
  145. package/dist/index38.d.ts.map +1 -1
  146. package/dist/index39.d.cts +22 -98
  147. package/dist/index39.d.cts.map +1 -1
  148. package/dist/index39.d.ts +22 -98
  149. package/dist/index39.d.ts.map +1 -1
  150. package/dist/index4.d.cts +2 -2
  151. package/dist/index4.d.cts.map +1 -1
  152. package/dist/index4.d.ts +2 -2
  153. package/dist/index40.d.cts +15 -17
  154. package/dist/index40.d.cts.map +1 -1
  155. package/dist/index40.d.ts +15 -17
  156. package/dist/index40.d.ts.map +1 -1
  157. package/dist/index41.d.cts +84 -35
  158. package/dist/index41.d.cts.map +1 -1
  159. package/dist/index41.d.ts +84 -35
  160. package/dist/index41.d.ts.map +1 -1
  161. package/dist/index42.d.cts +118 -38
  162. package/dist/index42.d.cts.map +1 -1
  163. package/dist/index42.d.ts +118 -38
  164. package/dist/index42.d.ts.map +1 -1
  165. package/dist/index43.d.cts +15 -89
  166. package/dist/index43.d.cts.map +1 -1
  167. package/dist/index43.d.ts +15 -89
  168. package/dist/index43.d.ts.map +1 -1
  169. package/dist/index44.d.cts +56 -1
  170. package/dist/index44.d.cts.map +1 -0
  171. package/dist/index44.d.ts +56 -1
  172. package/dist/index44.d.ts.map +1 -0
  173. package/dist/index45.d.cts +31 -34
  174. package/dist/index45.d.cts.map +1 -1
  175. package/dist/index45.d.ts +31 -34
  176. package/dist/index45.d.ts.map +1 -1
  177. package/dist/index46.d.cts +89 -21
  178. package/dist/index46.d.cts.map +1 -1
  179. package/dist/index46.d.ts +89 -21
  180. package/dist/index46.d.ts.map +1 -1
  181. package/dist/index47.d.cts +1 -41
  182. package/dist/index47.d.ts +1 -41
  183. package/dist/index48.d.cts +122 -20
  184. package/dist/index48.d.cts.map +1 -1
  185. package/dist/index48.d.ts +122 -20
  186. package/dist/index48.d.ts.map +1 -1
  187. package/dist/index49.d.cts +40 -13
  188. package/dist/index49.d.cts.map +1 -1
  189. package/dist/index49.d.ts +40 -13
  190. package/dist/index49.d.ts.map +1 -1
  191. package/dist/index5.d.cts +7 -7
  192. package/dist/index5.d.cts.map +1 -1
  193. package/dist/index5.d.ts +7 -7
  194. package/dist/index50.d.cts +22 -63
  195. package/dist/index50.d.cts.map +1 -1
  196. package/dist/index50.d.ts +22 -63
  197. package/dist/index50.d.ts.map +1 -1
  198. package/dist/index51.d.cts +33 -55
  199. package/dist/index51.d.cts.map +1 -1
  200. package/dist/index51.d.ts +33 -55
  201. package/dist/index51.d.ts.map +1 -1
  202. package/dist/index52.d.cts +18 -24
  203. package/dist/index52.d.cts.map +1 -1
  204. package/dist/index52.d.ts +18 -24
  205. package/dist/index52.d.ts.map +1 -1
  206. package/dist/index53.d.cts +12 -200
  207. package/dist/index53.d.cts.map +1 -1
  208. package/dist/index53.d.ts +12 -200
  209. package/dist/index53.d.ts.map +1 -1
  210. package/dist/index54.d.cts +58 -15
  211. package/dist/index54.d.cts.map +1 -1
  212. package/dist/index54.d.ts +58 -15
  213. package/dist/index54.d.ts.map +1 -1
  214. package/dist/index55.d.cts +93 -23
  215. package/dist/index55.d.cts.map +1 -1
  216. package/dist/index55.d.ts +93 -23
  217. package/dist/index55.d.ts.map +1 -1
  218. package/dist/index56.d.cts +27 -21
  219. package/dist/index56.d.cts.map +1 -1
  220. package/dist/index56.d.ts +27 -21
  221. package/dist/index56.d.ts.map +1 -1
  222. package/dist/index57.d.cts +203 -6
  223. package/dist/index57.d.cts.map +1 -1
  224. package/dist/index57.d.ts +203 -6
  225. package/dist/index57.d.ts.map +1 -1
  226. package/dist/index58.d.cts +17 -41
  227. package/dist/index58.d.cts.map +1 -1
  228. package/dist/index58.d.ts +17 -41
  229. package/dist/index58.d.ts.map +1 -1
  230. package/dist/index59.d.cts +24 -47
  231. package/dist/index59.d.cts.map +1 -1
  232. package/dist/index59.d.ts +24 -47
  233. package/dist/index59.d.ts.map +1 -1
  234. package/dist/index6.d.cts +5 -5
  235. package/dist/index6.d.cts.map +1 -1
  236. package/dist/index6.d.ts +6 -6
  237. package/dist/index60.d.cts +19 -57
  238. package/dist/index60.d.cts.map +1 -1
  239. package/dist/index60.d.ts +19 -57
  240. package/dist/index60.d.ts.map +1 -1
  241. package/dist/index61.d.cts +6 -39
  242. package/dist/index61.d.cts.map +1 -1
  243. package/dist/index61.d.ts +6 -39
  244. package/dist/index61.d.ts.map +1 -1
  245. package/dist/index62.d.cts +44 -18
  246. package/dist/index62.d.cts.map +1 -1
  247. package/dist/index62.d.ts +44 -18
  248. package/dist/index62.d.ts.map +1 -1
  249. package/dist/index63.d.cts +47 -41
  250. package/dist/index63.d.cts.map +1 -1
  251. package/dist/index63.d.ts +47 -41
  252. package/dist/index63.d.ts.map +1 -1
  253. package/dist/index64.d.cts +55 -15
  254. package/dist/index64.d.cts.map +1 -1
  255. package/dist/index64.d.ts +54 -14
  256. package/dist/index64.d.ts.map +1 -1
  257. package/dist/index65.d.cts +36 -39
  258. package/dist/index65.d.cts.map +1 -1
  259. package/dist/index65.d.ts +37 -40
  260. package/dist/index65.d.ts.map +1 -1
  261. package/dist/index66.d.cts +16 -17
  262. package/dist/index66.d.cts.map +1 -1
  263. package/dist/index66.d.ts +17 -18
  264. package/dist/index66.d.ts.map +1 -1
  265. package/dist/index67.d.cts +40 -14
  266. package/dist/index67.d.cts.map +1 -1
  267. package/dist/index67.d.ts +40 -14
  268. package/dist/index67.d.ts.map +1 -1
  269. package/dist/index68.d.cts +16 -30
  270. package/dist/index68.d.cts.map +1 -1
  271. package/dist/index68.d.ts +17 -31
  272. package/dist/index68.d.ts.map +1 -1
  273. package/dist/index69.d.cts +39 -27
  274. package/dist/index69.d.cts.map +1 -1
  275. package/dist/index69.d.ts +40 -28
  276. package/dist/index69.d.ts.map +1 -1
  277. package/dist/index7.d.cts +8 -8
  278. package/dist/index7.d.cts.map +1 -1
  279. package/dist/index7.d.ts +8 -8
  280. package/dist/index7.d.ts.map +1 -1
  281. package/dist/index70.d.cts +22 -78
  282. package/dist/index70.d.cts.map +1 -1
  283. package/dist/index70.d.ts +22 -78
  284. package/dist/index70.d.ts.map +1 -1
  285. package/dist/index71.d.cts +77 -251
  286. package/dist/index71.d.cts.map +1 -1
  287. package/dist/index71.d.ts +77 -251
  288. package/dist/index71.d.ts.map +1 -1
  289. package/dist/index72.d.cts +19 -0
  290. package/dist/index72.d.cts.map +1 -0
  291. package/dist/index72.d.ts +19 -0
  292. package/dist/index72.d.ts.map +1 -0
  293. package/dist/index73.d.cts +37 -0
  294. package/dist/index73.d.cts.map +1 -0
  295. package/dist/index73.d.ts +37 -0
  296. package/dist/index73.d.ts.map +1 -0
  297. package/dist/index74.d.cts +36 -0
  298. package/dist/index74.d.cts.map +1 -0
  299. package/dist/index74.d.ts +36 -0
  300. package/dist/index74.d.ts.map +1 -0
  301. package/dist/index75.d.cts +86 -0
  302. package/dist/index75.d.cts.map +1 -0
  303. package/dist/index75.d.ts +86 -0
  304. package/dist/index75.d.ts.map +1 -0
  305. package/dist/index76.d.cts +278 -0
  306. package/dist/index76.d.cts.map +1 -0
  307. package/dist/index76.d.ts +278 -0
  308. package/dist/index76.d.ts.map +1 -0
  309. package/dist/index8.d.cts +4 -4
  310. package/dist/index8.d.ts +5 -5
  311. package/dist/index9.d.cts +2 -2
  312. package/dist/index9.d.ts +2 -2
  313. package/dist/index9.d.ts.map +1 -1
  314. package/dist/layouts/Container/index.cjs +2 -1
  315. package/dist/layouts/Container/index.cjs.map +1 -1
  316. package/dist/layouts/Container/index.d.cts +1 -1
  317. package/dist/layouts/Container/index.d.ts +1 -1
  318. package/dist/layouts/Container/index.js +1 -1
  319. package/dist/layouts/MultiColumn/index.cjs +5 -0
  320. package/dist/layouts/MultiColumn/index.d.cts +2 -0
  321. package/dist/layouts/MultiColumn/index.d.ts +2 -0
  322. package/dist/layouts/MultiColumn/index.js +2 -0
  323. package/dist/layouts/PageBackground/index.d.cts +1 -1
  324. package/dist/layouts/PageBackground/index.d.ts +1 -1
  325. package/dist/layouts/Stack/index.cjs +2 -1
  326. package/dist/layouts/Stack/index.cjs.map +1 -1
  327. package/dist/layouts/Stack/index.d.cts +1 -1
  328. package/dist/layouts/Stack/index.d.ts +1 -1
  329. package/dist/layouts/Stack/index.js +1 -1
  330. package/dist/layouts/TwoColumn/index.cjs +2 -1
  331. package/dist/layouts/TwoColumn/index.cjs.map +1 -1
  332. package/dist/layouts/TwoColumn/index.d.cts +1 -1
  333. package/dist/layouts/TwoColumn/index.d.ts +1 -1
  334. package/dist/layouts/TwoColumn/index.js +1 -1
  335. package/dist/layouts/index.cjs +4 -0
  336. package/dist/layouts/index.d.cts +6 -5
  337. package/dist/layouts/index.d.ts +6 -5
  338. package/dist/layouts/index.js +2 -1
  339. package/dist/patterns/DataTable/index.cjs +6 -2
  340. package/dist/patterns/DataTable/index.cjs.map +1 -1
  341. package/dist/patterns/DataTable/index.d.cts +3 -3
  342. package/dist/patterns/DataTable/index.d.cts.map +1 -1
  343. package/dist/patterns/DataTable/index.d.ts +3 -3
  344. package/dist/patterns/DataTable/index.d.ts.map +1 -1
  345. package/dist/patterns/DataTable/index.js +6 -2
  346. package/dist/patterns/DataTable/index.js.map +1 -1
  347. package/dist/patterns/Footer/index.d.cts +7 -7
  348. package/dist/patterns/Footer/index.d.cts.map +1 -1
  349. package/dist/patterns/Footer/index.d.ts +7 -7
  350. package/dist/patterns/Footer/index.d.ts.map +1 -1
  351. package/dist/patterns/Header/index.d.cts +1 -1
  352. package/dist/patterns/Header/index.d.ts +1 -1
  353. package/dist/patterns/MediaObject/index.cjs +1 -1
  354. package/dist/patterns/MediaObject/index.d.cts +14 -14
  355. package/dist/patterns/MediaObject/index.d.cts.map +1 -1
  356. package/dist/patterns/MediaObject/index.d.ts +12 -12
  357. package/dist/patterns/MediaObject/index.js +1 -1
  358. package/dist/patterns/NavRail/index.cjs +4 -2
  359. package/dist/patterns/NavRail/index.cjs.map +1 -1
  360. package/dist/patterns/NavRail/index.d.cts +1 -1
  361. package/dist/patterns/NavRail/index.d.ts +1 -1
  362. package/dist/patterns/NavRail/index.js +4 -2
  363. package/dist/patterns/NavRail/index.js.map +1 -1
  364. package/dist/patterns/SectionCard/index.d.cts +2 -2
  365. package/dist/patterns/SectionCard/index.d.cts.map +1 -1
  366. package/dist/patterns/SectionCard/index.d.ts +2 -2
  367. package/dist/patterns/SectionCard/index.d.ts.map +1 -1
  368. package/dist/patterns/SectionHeading/index.d.cts +3 -3
  369. package/dist/patterns/SectionHeading/index.d.cts.map +1 -1
  370. package/dist/patterns/SectionHeading/index.d.ts +3 -3
  371. package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
  372. package/dist/patterns/index.d.cts +2 -2
  373. package/dist/patterns/index.d.ts +2 -2
  374. package/dist/primitives/Accordion/index.cjs +6 -2
  375. package/dist/primitives/Accordion/index.cjs.map +1 -1
  376. package/dist/primitives/Accordion/index.js +6 -2
  377. package/dist/primitives/Accordion/index.js.map +1 -1
  378. package/dist/primitives/Alert/index.cjs +2 -1
  379. package/dist/primitives/Alert/index.cjs.map +1 -1
  380. package/dist/primitives/Alert/index.js +1 -1
  381. package/dist/primitives/AlertDialog/index.cjs +1 -1
  382. package/dist/primitives/AlertDialog/index.js +1 -1
  383. package/dist/primitives/AspectRatio/index.cjs +1 -1
  384. package/dist/primitives/AspectRatio/index.js +1 -1
  385. package/dist/primitives/Avatar/index.cjs +1 -1
  386. package/dist/primitives/Avatar/index.js +1 -1
  387. package/dist/primitives/Badge/index.cjs +3 -2
  388. package/dist/primitives/Badge/index.cjs.map +1 -1
  389. package/dist/primitives/Badge/index.js +2 -2
  390. package/dist/primitives/Breadcrumb/index.cjs +7 -3
  391. package/dist/primitives/Breadcrumb/index.cjs.map +1 -1
  392. package/dist/primitives/Breadcrumb/index.js +7 -3
  393. package/dist/primitives/Breadcrumb/index.js.map +1 -1
  394. package/dist/primitives/Button/index.cjs +3 -2
  395. package/dist/primitives/Button/index.cjs.map +1 -1
  396. package/dist/primitives/Button/index.js +2 -2
  397. package/dist/primitives/ButtonGroup/index.cjs +3 -2
  398. package/dist/primitives/ButtonGroup/index.cjs.map +1 -1
  399. package/dist/primitives/ButtonGroup/index.js +2 -2
  400. package/dist/primitives/Calendar/index.cjs +12 -11
  401. package/dist/primitives/Calendar/index.cjs.map +1 -1
  402. package/dist/primitives/Calendar/index.js +12 -11
  403. package/dist/primitives/Calendar/index.js.map +1 -1
  404. package/dist/primitives/Card/index.cjs +2 -1
  405. package/dist/primitives/Card/index.cjs.map +1 -1
  406. package/dist/primitives/Card/index.js +1 -1
  407. package/dist/primitives/Carousel/index.cjs +4 -3
  408. package/dist/primitives/Carousel/index.cjs.map +1 -1
  409. package/dist/primitives/Carousel/index.js +4 -3
  410. package/dist/primitives/Carousel/index.js.map +1 -1
  411. package/dist/primitives/Checkbox/index.cjs +10 -3
  412. package/dist/primitives/Checkbox/index.cjs.map +1 -1
  413. package/dist/primitives/Checkbox/index.d.cts +1 -1
  414. package/dist/primitives/Checkbox/index.d.ts +1 -1
  415. package/dist/primitives/Checkbox/index.js +10 -3
  416. package/dist/primitives/Checkbox/index.js.map +1 -1
  417. package/dist/primitives/CheckboxTree/index.cjs +6 -2
  418. package/dist/primitives/CheckboxTree/index.cjs.map +1 -1
  419. package/dist/primitives/CheckboxTree/index.d.cts +1 -1
  420. package/dist/primitives/CheckboxTree/index.d.ts +1 -1
  421. package/dist/primitives/CheckboxTree/index.js +6 -2
  422. package/dist/primitives/CheckboxTree/index.js.map +1 -1
  423. package/dist/primitives/CircularProgress/index.cjs +106 -0
  424. package/dist/primitives/CircularProgress/index.cjs.map +1 -0
  425. package/dist/primitives/CircularProgress/index.d.cts +2 -0
  426. package/dist/primitives/CircularProgress/index.d.ts +2 -0
  427. package/dist/primitives/CircularProgress/index.js +105 -0
  428. package/dist/primitives/CircularProgress/index.js.map +1 -0
  429. package/dist/primitives/Collapsible/index.cjs +1 -1
  430. package/dist/primitives/Collapsible/index.d.cts +1 -1
  431. package/dist/primitives/Collapsible/index.d.ts +1 -1
  432. package/dist/primitives/Collapsible/index.js +1 -1
  433. package/dist/primitives/Command/index.cjs +6 -2
  434. package/dist/primitives/Command/index.cjs.map +1 -1
  435. package/dist/primitives/Command/index.d.cts +1 -1
  436. package/dist/primitives/Command/index.d.ts +1 -1
  437. package/dist/primitives/Command/index.js +6 -2
  438. package/dist/primitives/Command/index.js.map +1 -1
  439. package/dist/primitives/ContextMenu/index.cjs +14 -4
  440. package/dist/primitives/ContextMenu/index.cjs.map +1 -1
  441. package/dist/primitives/ContextMenu/index.d.cts +1 -1
  442. package/dist/primitives/ContextMenu/index.d.ts +1 -1
  443. package/dist/primitives/ContextMenu/index.js +14 -4
  444. package/dist/primitives/ContextMenu/index.js.map +1 -1
  445. package/dist/primitives/Credits/index.cjs +8 -3
  446. package/dist/primitives/Credits/index.cjs.map +1 -1
  447. package/dist/primitives/Credits/index.d.cts +1 -1
  448. package/dist/primitives/Credits/index.d.ts +1 -1
  449. package/dist/primitives/Credits/index.js +7 -3
  450. package/dist/primitives/Credits/index.js.map +1 -1
  451. package/dist/primitives/Dialog/index.cjs +3 -2
  452. package/dist/primitives/Dialog/index.cjs.map +1 -1
  453. package/dist/primitives/Dialog/index.d.cts +1 -1
  454. package/dist/primitives/Dialog/index.d.ts +1 -1
  455. package/dist/primitives/Dialog/index.js +3 -2
  456. package/dist/primitives/Dialog/index.js.map +1 -1
  457. package/dist/primitives/Drawer/index.cjs +34 -2
  458. package/dist/primitives/Drawer/index.cjs.map +1 -1
  459. package/dist/primitives/Drawer/index.d.cts +1 -1
  460. package/dist/primitives/Drawer/index.d.ts +1 -1
  461. package/dist/primitives/Drawer/index.js +34 -2
  462. package/dist/primitives/Drawer/index.js.map +1 -1
  463. package/dist/primitives/DropdownMenu/index.cjs +14 -4
  464. package/dist/primitives/DropdownMenu/index.cjs.map +1 -1
  465. package/dist/primitives/DropdownMenu/index.d.cts +1 -1
  466. package/dist/primitives/DropdownMenu/index.d.ts +1 -1
  467. package/dist/primitives/DropdownMenu/index.js +14 -4
  468. package/dist/primitives/DropdownMenu/index.js.map +1 -1
  469. package/dist/primitives/Empty/index.cjs +1 -1
  470. package/dist/primitives/Empty/index.d.cts +1 -1
  471. package/dist/primitives/Empty/index.d.ts +1 -1
  472. package/dist/primitives/Empty/index.js +1 -1
  473. package/dist/primitives/Field/index.cjs +1 -1
  474. package/dist/primitives/Field/index.d.cts +1 -1
  475. package/dist/primitives/Field/index.d.ts +1 -1
  476. package/dist/primitives/Field/index.js +1 -1
  477. package/dist/primitives/FileUpload/index.cjs +354 -0
  478. package/dist/primitives/FileUpload/index.cjs.map +1 -0
  479. package/dist/primitives/FileUpload/index.d.cts +2 -0
  480. package/dist/primitives/FileUpload/index.d.ts +2 -0
  481. package/dist/primitives/FileUpload/index.js +351 -0
  482. package/dist/primitives/FileUpload/index.js.map +1 -0
  483. package/dist/primitives/Form/index.cjs +1 -1
  484. package/dist/primitives/Form/index.d.cts +1 -1
  485. package/dist/primitives/Form/index.d.ts +1 -1
  486. package/dist/primitives/Form/index.js +1 -1
  487. package/dist/primitives/Heading/index.cjs +2 -1
  488. package/dist/primitives/Heading/index.cjs.map +1 -1
  489. package/dist/primitives/Heading/index.d.cts +1 -1
  490. package/dist/primitives/Heading/index.d.ts +1 -1
  491. package/dist/primitives/Heading/index.js +1 -1
  492. package/dist/primitives/HoverCard/index.cjs +1 -1
  493. package/dist/primitives/HoverCard/index.d.cts +1 -1
  494. package/dist/primitives/HoverCard/index.d.ts +1 -1
  495. package/dist/primitives/HoverCard/index.js +1 -1
  496. package/dist/primitives/Icon/index.d.cts +1 -1
  497. package/dist/primitives/Icon/index.d.ts +1 -1
  498. package/dist/primitives/InfoBanner/index.cjs +6 -3
  499. package/dist/primitives/InfoBanner/index.cjs.map +1 -1
  500. package/dist/primitives/InfoBanner/index.d.cts +1 -1
  501. package/dist/primitives/InfoBanner/index.d.ts +1 -1
  502. package/dist/primitives/InfoBanner/index.js +5 -3
  503. package/dist/primitives/InfoBanner/index.js.map +1 -1
  504. package/dist/primitives/Input/index.cjs +2 -1
  505. package/dist/primitives/Input/index.cjs.map +1 -1
  506. package/dist/primitives/Input/index.d.cts +1 -1
  507. package/dist/primitives/Input/index.d.ts +1 -1
  508. package/dist/primitives/Input/index.js +1 -1
  509. package/dist/primitives/InputGroup/index.cjs +1 -1
  510. package/dist/primitives/InputGroup/index.d.cts +1 -1
  511. package/dist/primitives/InputGroup/index.d.ts +1 -1
  512. package/dist/primitives/InputGroup/index.js +1 -1
  513. package/dist/primitives/InputOtp/index.cjs +3 -2
  514. package/dist/primitives/InputOtp/index.cjs.map +1 -1
  515. package/dist/primitives/InputOtp/index.d.cts +1 -1
  516. package/dist/primitives/InputOtp/index.d.ts +1 -1
  517. package/dist/primitives/InputOtp/index.js +3 -2
  518. package/dist/primitives/InputOtp/index.js.map +1 -1
  519. package/dist/primitives/Item/index.cjs +2 -2
  520. package/dist/primitives/Item/index.d.cts +1 -1
  521. package/dist/primitives/Item/index.d.ts +1 -1
  522. package/dist/primitives/Item/index.js +2 -2
  523. package/dist/primitives/Kbd/index.d.cts +1 -1
  524. package/dist/primitives/Kbd/index.d.ts +1 -1
  525. package/dist/primitives/Label/index.cjs +1 -1
  526. package/dist/primitives/Label/index.d.cts +1 -1
  527. package/dist/primitives/Label/index.d.ts +1 -1
  528. package/dist/primitives/Label/index.js +1 -1
  529. package/dist/primitives/Link/index.cjs +3 -2
  530. package/dist/primitives/Link/index.cjs.map +1 -1
  531. package/dist/primitives/Link/index.d.cts +1 -1
  532. package/dist/primitives/Link/index.d.ts +1 -1
  533. package/dist/primitives/Link/index.js +2 -2
  534. package/dist/primitives/Logo/index.d.cts +1 -1
  535. package/dist/primitives/Logo/index.d.ts +1 -1
  536. package/dist/primitives/Menubar/index.cjs +14 -4
  537. package/dist/primitives/Menubar/index.cjs.map +1 -1
  538. package/dist/primitives/Menubar/index.d.cts +1 -1
  539. package/dist/primitives/Menubar/index.d.ts +1 -1
  540. package/dist/primitives/Menubar/index.js +14 -4
  541. package/dist/primitives/Menubar/index.js.map +1 -1
  542. package/dist/primitives/Mosaic/index.cjs +4 -0
  543. package/dist/primitives/Mosaic/index.d.cts +2 -0
  544. package/dist/primitives/Mosaic/index.d.ts +2 -0
  545. package/dist/primitives/Mosaic/index.js +2 -0
  546. package/dist/primitives/NativeSelect/index.cjs +6 -3
  547. package/dist/primitives/NativeSelect/index.cjs.map +1 -1
  548. package/dist/primitives/NativeSelect/index.d.cts +1 -1
  549. package/dist/primitives/NativeSelect/index.d.ts +1 -1
  550. package/dist/primitives/NativeSelect/index.js +5 -3
  551. package/dist/primitives/NativeSelect/index.js.map +1 -1
  552. package/dist/primitives/NavRail/index.d.cts +2 -2
  553. package/dist/primitives/NavRail/index.d.ts +2 -2
  554. package/dist/primitives/NavigationMenu/index.cjs +5 -3
  555. package/dist/primitives/NavigationMenu/index.cjs.map +1 -1
  556. package/dist/primitives/NavigationMenu/index.d.cts +1 -1
  557. package/dist/primitives/NavigationMenu/index.d.ts +1 -1
  558. package/dist/primitives/NavigationMenu/index.js +5 -3
  559. package/dist/primitives/NavigationMenu/index.js.map +1 -1
  560. package/dist/primitives/NotchedCard/index.cjs +390 -0
  561. package/dist/primitives/NotchedCard/index.cjs.map +1 -0
  562. package/dist/primitives/NotchedCard/index.d.cts +2 -0
  563. package/dist/primitives/NotchedCard/index.d.ts +2 -0
  564. package/dist/primitives/NotchedCard/index.js +385 -0
  565. package/dist/primitives/NotchedCard/index.js.map +1 -0
  566. package/dist/primitives/Pagination/index.cjs +6 -2
  567. package/dist/primitives/Pagination/index.cjs.map +1 -1
  568. package/dist/primitives/Pagination/index.d.cts +1 -1
  569. package/dist/primitives/Pagination/index.d.ts +1 -1
  570. package/dist/primitives/Pagination/index.js +6 -2
  571. package/dist/primitives/Pagination/index.js.map +1 -1
  572. package/dist/primitives/Popover/index.cjs +1 -1
  573. package/dist/primitives/Popover/index.d.cts +1 -1
  574. package/dist/primitives/Popover/index.d.ts +1 -1
  575. package/dist/primitives/Popover/index.js +1 -1
  576. package/dist/primitives/Progress/index.cjs +1 -1
  577. package/dist/primitives/Progress/index.d.cts +1 -1
  578. package/dist/primitives/Progress/index.d.ts +1 -1
  579. package/dist/primitives/Progress/index.js +1 -1
  580. package/dist/primitives/RadioGroup/index.cjs +7 -3
  581. package/dist/primitives/RadioGroup/index.cjs.map +1 -1
  582. package/dist/primitives/RadioGroup/index.d.cts +1 -1
  583. package/dist/primitives/RadioGroup/index.d.ts +1 -1
  584. package/dist/primitives/RadioGroup/index.js +7 -3
  585. package/dist/primitives/RadioGroup/index.js.map +1 -1
  586. package/dist/primitives/Resizable/index.cjs +6 -2
  587. package/dist/primitives/Resizable/index.cjs.map +1 -1
  588. package/dist/primitives/Resizable/index.d.cts +1 -1
  589. package/dist/primitives/Resizable/index.d.ts +1 -1
  590. package/dist/primitives/Resizable/index.js +6 -2
  591. package/dist/primitives/Resizable/index.js.map +1 -1
  592. package/dist/primitives/ScrollArea/index.cjs +1 -1
  593. package/dist/primitives/ScrollArea/index.d.cts +1 -1
  594. package/dist/primitives/ScrollArea/index.d.ts +1 -1
  595. package/dist/primitives/ScrollArea/index.js +1 -1
  596. package/dist/primitives/Select/index.cjs +18 -5
  597. package/dist/primitives/Select/index.cjs.map +1 -1
  598. package/dist/primitives/Select/index.d.cts +1 -1
  599. package/dist/primitives/Select/index.d.ts +1 -1
  600. package/dist/primitives/Select/index.js +18 -5
  601. package/dist/primitives/Select/index.js.map +1 -1
  602. package/dist/primitives/Separator/index.cjs +1 -1
  603. package/dist/primitives/Separator/index.js +1 -1
  604. package/dist/primitives/Sheet/index.cjs +40 -4
  605. package/dist/primitives/Sheet/index.cjs.map +1 -1
  606. package/dist/primitives/Sheet/index.d.cts +1 -1
  607. package/dist/primitives/Sheet/index.d.ts +1 -1
  608. package/dist/primitives/Sheet/index.js +40 -4
  609. package/dist/primitives/Sheet/index.js.map +1 -1
  610. package/dist/primitives/Sidebar/index.d.cts +1 -1
  611. package/dist/primitives/Sidebar/index.d.ts +1 -1
  612. package/dist/primitives/Skeleton/index.d.cts +1 -1
  613. package/dist/primitives/Skeleton/index.d.ts +1 -1
  614. package/dist/primitives/Slider/index.cjs +1 -1
  615. package/dist/primitives/Slider/index.d.cts +1 -1
  616. package/dist/primitives/Slider/index.d.ts +1 -1
  617. package/dist/primitives/Slider/index.js +1 -1
  618. package/dist/primitives/Sonner/index.cjs +22 -6
  619. package/dist/primitives/Sonner/index.cjs.map +1 -1
  620. package/dist/primitives/Sonner/index.d.cts +1 -1
  621. package/dist/primitives/Sonner/index.d.ts +1 -1
  622. package/dist/primitives/Sonner/index.js +22 -6
  623. package/dist/primitives/Sonner/index.js.map +1 -1
  624. package/dist/primitives/Spinner/index.cjs +4 -2
  625. package/dist/primitives/Spinner/index.cjs.map +1 -1
  626. package/dist/primitives/Spinner/index.d.cts +1 -1
  627. package/dist/primitives/Spinner/index.d.ts +1 -1
  628. package/dist/primitives/Spinner/index.js +4 -2
  629. package/dist/primitives/Spinner/index.js.map +1 -1
  630. package/dist/primitives/Switch/index.cjs +1 -1
  631. package/dist/primitives/Switch/index.d.cts +1 -1
  632. package/dist/primitives/Switch/index.d.ts +1 -1
  633. package/dist/primitives/Switch/index.js +1 -1
  634. package/dist/primitives/Table/index.d.cts +1 -1
  635. package/dist/primitives/Table/index.d.ts +1 -1
  636. package/dist/primitives/Tabs/index.cjs +2 -2
  637. package/dist/primitives/Tabs/index.d.cts +1 -1
  638. package/dist/primitives/Tabs/index.d.ts +1 -1
  639. package/dist/primitives/Tabs/index.js +2 -2
  640. package/dist/primitives/Text/index.cjs +2 -1
  641. package/dist/primitives/Text/index.cjs.map +1 -1
  642. package/dist/primitives/Text/index.d.cts +1 -1
  643. package/dist/primitives/Text/index.d.ts +1 -1
  644. package/dist/primitives/Text/index.js +1 -1
  645. package/dist/primitives/Textarea/index.cjs +2 -1
  646. package/dist/primitives/Textarea/index.cjs.map +1 -1
  647. package/dist/primitives/Textarea/index.d.cts +1 -1
  648. package/dist/primitives/Textarea/index.d.ts +1 -1
  649. package/dist/primitives/Textarea/index.js +1 -1
  650. package/dist/primitives/ThemeProvider/index.d.cts +1 -1
  651. package/dist/primitives/ThemeProvider/index.d.ts +1 -1
  652. package/dist/primitives/Toggle/index.cjs +3 -2
  653. package/dist/primitives/Toggle/index.cjs.map +1 -1
  654. package/dist/primitives/Toggle/index.d.cts +1 -1
  655. package/dist/primitives/Toggle/index.d.ts +1 -1
  656. package/dist/primitives/Toggle/index.js +2 -2
  657. package/dist/primitives/ToggleGroup/index.cjs +1 -1
  658. package/dist/primitives/ToggleGroup/index.d.cts +1 -1
  659. package/dist/primitives/ToggleGroup/index.d.ts +1 -1
  660. package/dist/primitives/ToggleGroup/index.js +1 -1
  661. package/dist/primitives/Tooltip/index.cjs +1 -1
  662. package/dist/primitives/Tooltip/index.d.cts +1 -1
  663. package/dist/primitives/Tooltip/index.d.ts +1 -1
  664. package/dist/primitives/Tooltip/index.js +1 -1
  665. package/dist/primitives/index.cjs +14 -3
  666. package/dist/primitives/index.d.cts +55 -51
  667. package/dist/primitives/index.d.ts +55 -51
  668. package/dist/primitives/index.js +8 -4
  669. package/package.json +2 -1
  670. package/dist/index47.d.cts.map +0 -1
  671. package/dist/index47.d.ts.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["DropdownMenuPrimitive"],"sources":["../../../src/primitives/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root provider for a dropdown menu; holds open state and wires the trigger to its content. */\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\n/** Renders the menu into a portal so it escapes overflow/stacking contexts. */\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\n/** The control (usually a button) that toggles the menu open and closed. */\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\n/** The floating surface that holds the menu items; portalled and animated on open/close. */\nfunction DropdownMenuContent({\n className,\n /** Gap in pixels between the trigger and the content edge. */\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n // Figma Menu spec (Select & Combobox page): glass-none surface, primary\n // border, radius-12, shadow-sm, 8px padding.\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-12 border border-primary-border bg-glass-60-bg backdrop-blur-glass p-2 text-primary-txt shadow-sm data-[side=bottom]:slide-in-from-top-8 data-[side=left]:slide-in-from-right-8 data-[side=right]:slide-in-from-left-8 data-[side=top]:slide-in-from-bottom-8 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n // Vertical hierarchy: if any item reserves the 32px indicator column\n // (checkbox/radio items), plain items, labels and sub-triggers share it.\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-item]:not([data-inset])]:pl-8\",\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-label]:not([data-inset])]:pl-8\",\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-sub-trigger]:not([data-inset])]:pl-8\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\n/** Groups related menu items together for labelling and keyboard navigation. */\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\n/** A selectable menu row that fires on click/Enter. */\nfunction DropdownMenuItem({\n className,\n /** Indents the item to align with rows that have a leading icon/indicator. */\n inset,\n /** Visual tone of the item; `destructive` renders in the danger color. */\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex min-h-8 cursor-default items-center gap-2 rounded-10 px-2 py-1.5 text-sm leading-5 outline-hidden select-none focus:bg-ghost-hover-bg data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-danger-txt data-[variant=destructive]:focus:bg-danger-bg [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-txt data-[variant=destructive]:*:[svg]:text-danger-txt!\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** A menu row with a toggleable checkmark indicator for boolean options. */\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n /** Whether the checkbox indicator is shown as checked. */\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex min-h-8 cursor-default items-center gap-2 rounded-10 py-1.5 pr-2 pl-8 text-sm leading-5 outline-hidden select-none focus:bg-ghost-hover-bg data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CheckIcon className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\n/** Wraps radio items so only one option in the group can be selected at a time. */\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\n/** A single mutually-exclusive option within a `DropdownMenuRadioGroup`. */\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex min-h-8 cursor-default items-center gap-2 rounded-10 py-1.5 pr-2 pl-8 text-sm leading-5 outline-hidden select-none focus:bg-ghost-hover-bg data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <CircleIcon className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\n/** A non-interactive heading used to title a group of menu items. */\nfunction DropdownMenuLabel({\n className,\n /** Indents the label to align with rows that have a leading icon/indicator. */\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-xs leading-4 font-medium text-muted-txt data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** A thin divider line used to visually separate groups of menu items. */\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"my-1 h-px bg-primary-border\", className)}\n {...props}\n />\n );\n}\n\n/** Right-aligned hint for an item's keyboard shortcut (e.g. ⇧⌘P). */\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"ml-auto text-sm leading-5 text-muted-txt\", className)}\n {...props}\n />\n );\n}\n\n/** Root for a nested submenu; holds the sub-trigger and its sub-content. */\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\n/** The item that opens a nested submenu, shown with a trailing chevron. */\nfunction DropdownMenuSubTrigger({\n className,\n /** Indents the trigger to align with rows that have a leading icon/indicator. */\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex min-h-8 cursor-default items-center gap-2 rounded-10 px-2 py-1.5 text-sm leading-5 outline-hidden select-none focus:bg-ghost-hover-bg data-[inset]:pl-8 data-[state=open]:bg-ghost-hover-bg [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-txt\",\n className,\n )}\n {...props}\n >\n {children}\n <ChevronRightIcon className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\n/** The floating surface for a nested submenu's items. */\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-12 border border-primary-border bg-glass-none-bg p-2 text-primary-txt shadow-sm data-[side=bottom]:slide-in-from-top-8 data-[side=left]:slide-in-from-right-8 data-[side=right]:slide-in-from-left-8 data-[side=top]:slide-in-from-bottom-8 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n // Vertical hierarchy: if any item reserves the 32px indicator column\n // (checkbox/radio items), plain items, labels and sub-triggers share it.\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-item]:not([data-inset])]:pl-8\",\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-label]:not([data-inset])]:pl-8\",\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-sub-trigger]:not([data-inset])]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["DropdownMenuPrimitive"],"sources":["../../../src/primitives/DropdownMenu/DropdownMenu.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { CheckIcon, ChevronRightIcon, CircleIcon } from \"lucide-react\";\nimport { DropdownMenu as DropdownMenuPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root provider for a dropdown menu; holds open state and wires the trigger to its content. */\nfunction DropdownMenu({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Root>) {\n return <DropdownMenuPrimitive.Root data-slot=\"dropdown-menu\" {...props} />;\n}\n\n/** Renders the menu into a portal so it escapes overflow/stacking contexts. */\nfunction DropdownMenuPortal({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Portal>) {\n return <DropdownMenuPrimitive.Portal data-slot=\"dropdown-menu-portal\" {...props} />;\n}\n\n/** The control (usually a button) that toggles the menu open and closed. */\nfunction DropdownMenuTrigger({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Trigger>) {\n return <DropdownMenuPrimitive.Trigger data-slot=\"dropdown-menu-trigger\" {...props} />;\n}\n\n/** The floating surface that holds the menu items; portalled and animated on open/close. */\nfunction DropdownMenuContent({\n className,\n /** Gap in pixels between the trigger and the content edge. */\n sideOffset = 4,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Content>) {\n return (\n <DropdownMenuPrimitive.Portal>\n <DropdownMenuPrimitive.Content\n data-slot=\"dropdown-menu-content\"\n sideOffset={sideOffset}\n className={cn(\n // Figma Menu spec (Select & Combobox page): glass-none surface, primary\n // border, radius-12, shadow-sm, 8px padding.\n \"z-50 max-h-(--radix-dropdown-menu-content-available-height) min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-x-hidden overflow-y-auto rounded-12 border border-primary-border bg-glass-60-bg backdrop-blur-glass p-2 text-primary-txt shadow-sm data-[side=bottom]:slide-in-from-top-8 data-[side=left]:slide-in-from-right-8 data-[side=right]:slide-in-from-left-8 data-[side=top]:slide-in-from-bottom-8 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n // Vertical hierarchy: if any item reserves the 32px indicator column\n // (checkbox/radio items), plain items, labels and sub-triggers share it.\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-item]:not([data-inset])]:pl-8\",\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-label]:not([data-inset])]:pl-8\",\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-sub-trigger]:not([data-inset])]:pl-8\",\n className,\n )}\n {...props}\n />\n </DropdownMenuPrimitive.Portal>\n );\n}\n\n/** Groups related menu items together for labelling and keyboard navigation. */\nfunction DropdownMenuGroup({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Group>) {\n return <DropdownMenuPrimitive.Group data-slot=\"dropdown-menu-group\" {...props} />;\n}\n\n/** A selectable menu row that fires on click/Enter. */\nfunction DropdownMenuItem({\n className,\n /** Indents the item to align with rows that have a leading icon/indicator. */\n inset,\n /** Visual tone of the item; `destructive` renders in the danger color. */\n variant = \"default\",\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Item> & {\n inset?: boolean;\n variant?: \"default\" | \"destructive\";\n}) {\n return (\n <DropdownMenuPrimitive.Item\n data-slot=\"dropdown-menu-item\"\n data-inset={inset}\n data-variant={variant}\n className={cn(\n \"relative flex min-h-8 cursor-default items-center gap-2 rounded-10 px-2 py-1.5 text-sm leading-5 outline-hidden select-none focus:bg-ghost-hover-bg data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 data-[variant=destructive]:text-danger-txt data-[variant=destructive]:focus:bg-danger-bg [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-txt data-[variant=destructive]:*:[svg]:text-danger-txt!\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** A menu row with a toggleable checkmark indicator for boolean options. */\nfunction DropdownMenuCheckboxItem({\n className,\n children,\n /** Whether the checkbox indicator is shown as checked. */\n checked,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.CheckboxItem>) {\n return (\n <DropdownMenuPrimitive.CheckboxItem\n data-slot=\"dropdown-menu-checkbox-item\"\n className={cn(\n \"relative flex min-h-8 cursor-default items-center gap-2 rounded-10 py-1.5 pr-2 pl-8 text-sm leading-5 outline-hidden select-none focus:bg-ghost-hover-bg data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n checked={checked}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Icon as={CheckIcon} className=\"size-4\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.CheckboxItem>\n );\n}\n\n/** Wraps radio items so only one option in the group can be selected at a time. */\nfunction DropdownMenuRadioGroup({\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioGroup>) {\n return <DropdownMenuPrimitive.RadioGroup data-slot=\"dropdown-menu-radio-group\" {...props} />;\n}\n\n/** A single mutually-exclusive option within a `DropdownMenuRadioGroup`. */\nfunction DropdownMenuRadioItem({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.RadioItem>) {\n return (\n <DropdownMenuPrimitive.RadioItem\n data-slot=\"dropdown-menu-radio-item\"\n className={cn(\n \"relative flex min-h-8 cursor-default items-center gap-2 rounded-10 py-1.5 pr-2 pl-8 text-sm leading-5 outline-hidden select-none focus:bg-ghost-hover-bg data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n className,\n )}\n {...props}\n >\n <span className=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n <DropdownMenuPrimitive.ItemIndicator>\n <Icon as={CircleIcon} className=\"size-2 fill-current\" />\n </DropdownMenuPrimitive.ItemIndicator>\n </span>\n {children}\n </DropdownMenuPrimitive.RadioItem>\n );\n}\n\n/** A non-interactive heading used to title a group of menu items. */\nfunction DropdownMenuLabel({\n className,\n /** Indents the label to align with rows that have a leading icon/indicator. */\n inset,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Label> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.Label\n data-slot=\"dropdown-menu-label\"\n data-inset={inset}\n className={cn(\n \"px-2 py-1.5 text-xs leading-4 font-medium text-muted-txt data-[inset]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** A thin divider line used to visually separate groups of menu items. */\nfunction DropdownMenuSeparator({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.Separator>) {\n return (\n <DropdownMenuPrimitive.Separator\n data-slot=\"dropdown-menu-separator\"\n className={cn(\"my-1 h-px bg-primary-border\", className)}\n {...props}\n />\n );\n}\n\n/** Right-aligned hint for an item's keyboard shortcut (e.g. ⇧⌘P). */\nfunction DropdownMenuShortcut({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"dropdown-menu-shortcut\"\n className={cn(\"ml-auto text-sm leading-5 text-muted-txt\", className)}\n {...props}\n />\n );\n}\n\n/** Root for a nested submenu; holds the sub-trigger and its sub-content. */\nfunction DropdownMenuSub({ ...props }: React.ComponentProps<typeof DropdownMenuPrimitive.Sub>) {\n return <DropdownMenuPrimitive.Sub data-slot=\"dropdown-menu-sub\" {...props} />;\n}\n\n/** The item that opens a nested submenu, shown with a trailing chevron. */\nfunction DropdownMenuSubTrigger({\n className,\n /** Indents the trigger to align with rows that have a leading icon/indicator. */\n inset,\n children,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubTrigger> & {\n inset?: boolean;\n}) {\n return (\n <DropdownMenuPrimitive.SubTrigger\n data-slot=\"dropdown-menu-sub-trigger\"\n data-inset={inset}\n className={cn(\n \"flex min-h-8 cursor-default items-center gap-2 rounded-10 px-2 py-1.5 text-sm leading-5 outline-hidden select-none focus:bg-ghost-hover-bg data-[inset]:pl-8 data-[state=open]:bg-ghost-hover-bg [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4 [&_svg:not([class*='text-'])]:text-muted-txt\",\n className,\n )}\n {...props}\n >\n {children}\n <Icon as={ChevronRightIcon} className=\"ml-auto size-4\" />\n </DropdownMenuPrimitive.SubTrigger>\n );\n}\n\n/** The floating surface for a nested submenu's items. */\nfunction DropdownMenuSubContent({\n className,\n ...props\n}: React.ComponentProps<typeof DropdownMenuPrimitive.SubContent>) {\n return (\n <DropdownMenuPrimitive.SubContent\n data-slot=\"dropdown-menu-sub-content\"\n className={cn(\n \"z-50 min-w-32 origin-(--radix-dropdown-menu-content-transform-origin) overflow-hidden rounded-12 border border-primary-border bg-glass-none-bg p-2 text-primary-txt shadow-sm data-[side=bottom]:slide-in-from-top-8 data-[side=left]:slide-in-from-right-8 data-[side=right]:slide-in-from-left-8 data-[side=top]:slide-in-from-bottom-8 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n // Vertical hierarchy: if any item reserves the 32px indicator column\n // (checkbox/radio items), plain items, labels and sub-triggers share it.\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-item]:not([data-inset])]:pl-8\",\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-label]:not([data-inset])]:pl-8\",\n \"[&:has([role=menuitemcheckbox],[role=menuitemradio])_[data-slot=dropdown-menu-sub-trigger]:not([data-inset])]:pl-8\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n DropdownMenu,\n DropdownMenuPortal,\n DropdownMenuTrigger,\n DropdownMenuContent,\n DropdownMenuGroup,\n DropdownMenuLabel,\n DropdownMenuItem,\n DropdownMenuCheckboxItem,\n DropdownMenuRadioGroup,\n DropdownMenuRadioItem,\n DropdownMenuSeparator,\n DropdownMenuShortcut,\n DropdownMenuSub,\n DropdownMenuSubTrigger,\n DropdownMenuSubContent,\n};\n"],"mappings":"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"}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_cn = require("../../cn.cjs");
3
- let react_jsx_runtime = require("react/jsx-runtime");
4
3
  let class_variance_authority = require("class-variance-authority");
4
+ let react_jsx_runtime = require("react/jsx-runtime");
5
5
  //#region src/primitives/Empty/Empty.tsx
6
6
  const emptyVariants = (0, class_variance_authority.cva)("flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-8 p-6 text-center text-balance md:p-12", {
7
7
  variants: { variant: {
@@ -1,2 +1,2 @@
1
- import { a as EmptyMedia, i as EmptyHeader, n as EmptyContent, o as EmptyTitle, r as EmptyDescription, s as emptyVariants, t as Empty } from "../../index24.cjs";
1
+ import { a as EmptyMedia, i as EmptyHeader, n as EmptyContent, o as EmptyTitle, r as EmptyDescription, s as emptyVariants, t as Empty } from "../../index25.cjs";
2
2
  export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, emptyVariants };
@@ -1,2 +1,2 @@
1
- import { a as EmptyMedia, i as EmptyHeader, n as EmptyContent, o as EmptyTitle, r as EmptyDescription, s as emptyVariants, t as Empty } from "../../index24.js";
1
+ import { a as EmptyMedia, i as EmptyHeader, n as EmptyContent, o as EmptyTitle, r as EmptyDescription, s as emptyVariants, t as Empty } from "../../index25.js";
2
2
  export { Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, emptyVariants };
@@ -1,6 +1,6 @@
1
1
  import { t as cn } from "../../cn.js";
2
- import { jsx } from "react/jsx-runtime";
3
2
  import { cva } from "class-variance-authority";
3
+ import { jsx } from "react/jsx-runtime";
4
4
  //#region src/primitives/Empty/Empty.tsx
5
5
  const emptyVariants = cva("flex min-w-0 flex-1 flex-col items-center justify-center gap-6 rounded-8 p-6 text-center text-balance md:p-12", {
6
6
  variants: { variant: {
@@ -2,9 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_cn = require("../../cn.cjs");
3
3
  const require_primitives_Separator_index = require("../Separator/index.cjs");
4
4
  const require_primitives_Label_index = require("../Label/index.cjs");
5
+ let class_variance_authority = require("class-variance-authority");
5
6
  let react = require("react");
6
7
  let react_jsx_runtime = require("react/jsx-runtime");
7
- let class_variance_authority = require("class-variance-authority");
8
8
  //#region src/primitives/Field/Field.tsx
9
9
  /** A `<fieldset>` wrapper that groups related fields with consistent spacing. */
10
10
  function FieldSet({ className, ...props }) {
@@ -1,2 +1,2 @@
1
- import { a as FieldGroup, c as FieldSeparator, i as FieldError, l as FieldSet, n as FieldContent, o as FieldLabel, r as FieldDescription, s as FieldLegend, t as Field, u as FieldTitle } from "../../index26.cjs";
1
+ import { a as FieldGroup, c as FieldSeparator, i as FieldError, l as FieldSet, n as FieldContent, o as FieldLabel, r as FieldDescription, s as FieldLegend, t as Field, u as FieldTitle } from "../../index27.cjs";
2
2
  export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle };
@@ -1,2 +1,2 @@
1
- import { a as FieldGroup, c as FieldSeparator, i as FieldError, l as FieldSet, n as FieldContent, o as FieldLabel, r as FieldDescription, s as FieldLegend, t as Field, u as FieldTitle } from "../../index26.js";
1
+ import { a as FieldGroup, c as FieldSeparator, i as FieldError, l as FieldSet, n as FieldContent, o as FieldLabel, r as FieldDescription, s as FieldLegend, t as Field, u as FieldTitle } from "../../index27.js";
2
2
  export { Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle };
@@ -1,9 +1,9 @@
1
1
  import { t as cn } from "../../cn.js";
2
2
  import { Separator } from "../Separator/index.js";
3
3
  import { Label } from "../Label/index.js";
4
+ import { cva } from "class-variance-authority";
4
5
  import { useMemo } from "react";
5
6
  import { jsx, jsxs } from "react/jsx-runtime";
6
- import { cva } from "class-variance-authority";
7
7
  //#region src/primitives/Field/Field.tsx
8
8
  /** A `<fieldset>` wrapper that groups related fields with consistent spacing. */
9
9
  function FieldSet({ className, ...props }) {
@@ -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":"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"}
@@ -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 };