@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
@@ -0,0 +1,351 @@
1
+ import { t as cn } from "../../cn.js";
2
+ import { Button } from "../Button/index.js";
3
+ import { Progress } from "../Progress/index.js";
4
+ import * as React from "react";
5
+ import { jsx, jsxs } from "react/jsx-runtime";
6
+ import { CheckCircle2, CircleAlert, FileIcon, Loader2, UploadCloud, XIcon } from "lucide-react";
7
+ //#region src/primitives/FileUpload/FileUpload.tsx
8
+ function clamp(value, min, max) {
9
+ return Math.min(max, Math.max(min, value));
10
+ }
11
+ function formatBytes(value) {
12
+ if (!Number.isFinite(value) || value <= 0) return "0 B";
13
+ const units = [
14
+ "B",
15
+ "KB",
16
+ "MB",
17
+ "GB",
18
+ "TB"
19
+ ];
20
+ const exponent = Math.min(Math.floor(Math.log(value) / Math.log(1024)), units.length - 1);
21
+ const size = value / 1024 ** exponent;
22
+ return `${size.toFixed(size >= 10 || exponent === 0 ? 0 : 1)} ${units[exponent]}`;
23
+ }
24
+ function getAcceptTokens(accept) {
25
+ return (accept ?? "").split(",").map((token) => token.trim().toLowerCase()).filter(Boolean);
26
+ }
27
+ function matchesAccept(file, accept) {
28
+ const tokens = getAcceptTokens(accept);
29
+ if (tokens.length === 0) return true;
30
+ const fileName = file.name.toLowerCase();
31
+ const fileType = file.type.toLowerCase();
32
+ return tokens.some((token) => {
33
+ if (token.startsWith(".")) return fileName.endsWith(token);
34
+ if (token.endsWith("/*")) {
35
+ const category = token.slice(0, token.length - 1);
36
+ return fileType.startsWith(category);
37
+ }
38
+ return fileType === token;
39
+ });
40
+ }
41
+ function createFileItem(file) {
42
+ return {
43
+ id: typeof crypto !== "undefined" && typeof crypto.randomUUID === "function" ? crypto.randomUUID() : `${file.name}-${file.lastModified}-${Math.random().toString(36).slice(2)}`,
44
+ file,
45
+ status: "idle",
46
+ progress: 0
47
+ };
48
+ }
49
+ function hasFiles(event) {
50
+ return Array.from(event.dataTransfer?.types ?? []).includes("Files");
51
+ }
52
+ function getStatusLabel(item) {
53
+ if (item.status === "idle") return "Ready to upload";
54
+ if (item.status === "uploading") return `Uploading… ${Math.round(item.progress)}%`;
55
+ if (item.status === "success") return "Upload complete";
56
+ return item.error ? `Upload failed: ${item.error}` : "Upload failed";
57
+ }
58
+ /** File upload primitive with click-to-browse and drag-and-drop interactions, validation, and per-file upload states. */
59
+ function FileUpload({ className, multiple = false, accept, maxFiles, maxFileSize, validateFile, onUpload, onItemsChange, dropzoneAriaLabel = "File upload drop zone", disabled, ...props }) {
60
+ const inputRef = React.useRef(null);
61
+ const uploadControllersRef = React.useRef(/* @__PURE__ */ new Map());
62
+ const [items, setItems] = React.useState([]);
63
+ const [errors, setErrors] = React.useState([]);
64
+ const [dragState, setDragState] = React.useState("idle");
65
+ const dragDepthRef = React.useRef(0);
66
+ const baseId = React.useId();
67
+ const hintId = `${baseId}-hint`;
68
+ const errorId = `${baseId}-errors`;
69
+ const updateItem = React.useCallback((itemId, updater) => {
70
+ setItems((current) => current.map((item) => item.id === itemId ? updater(item) : item));
71
+ }, []);
72
+ const removeItem = React.useCallback((itemId) => {
73
+ uploadControllersRef.current.get(itemId)?.abort();
74
+ uploadControllersRef.current.delete(itemId);
75
+ setItems((current) => current.filter((item) => item.id !== itemId));
76
+ }, []);
77
+ const beginUpload = React.useCallback((item) => {
78
+ if (!onUpload) return;
79
+ const controller = new AbortController();
80
+ uploadControllersRef.current.set(item.id, controller);
81
+ updateItem(item.id, (current) => ({
82
+ ...current,
83
+ status: "uploading",
84
+ progress: 0,
85
+ error: void 0
86
+ }));
87
+ onUpload({
88
+ file: item.file,
89
+ signal: controller.signal,
90
+ reportProgress: (value) => {
91
+ updateItem(item.id, (current) => {
92
+ if (current.status !== "uploading") return current;
93
+ return {
94
+ ...current,
95
+ progress: clamp(value, 0, 100)
96
+ };
97
+ });
98
+ }
99
+ }).then(() => {
100
+ if (controller.signal.aborted) return;
101
+ updateItem(item.id, (current) => ({
102
+ ...current,
103
+ status: "success",
104
+ progress: 100,
105
+ error: void 0
106
+ }));
107
+ }).catch((uploadError) => {
108
+ if (controller.signal.aborted) return;
109
+ const message = uploadError instanceof Error && uploadError.message ? uploadError.message : "Upload failed.";
110
+ updateItem(item.id, (current) => ({
111
+ ...current,
112
+ status: "error",
113
+ error: message
114
+ }));
115
+ }).finally(() => {
116
+ uploadControllersRef.current.delete(item.id);
117
+ });
118
+ }, [onUpload, updateItem]);
119
+ const queueFiles = React.useCallback((queuedFiles) => {
120
+ const incoming = Array.isArray(queuedFiles) ? queuedFiles : Array.from(queuedFiles);
121
+ if (incoming.length === 0) return;
122
+ if (!multiple) {
123
+ uploadControllersRef.current.forEach((controller) => controller.abort());
124
+ uploadControllersRef.current.clear();
125
+ }
126
+ const nextErrors = [];
127
+ const acceptedItems = [];
128
+ const nextItems = multiple ? [...items] : [];
129
+ const effectiveMaxFiles = multiple ? maxFiles ?? Number.POSITIVE_INFINITY : 1;
130
+ let candidates = incoming;
131
+ if (!multiple && incoming.length > 1) {
132
+ nextErrors.push("Only one file can be selected at a time.");
133
+ candidates = [incoming[0]];
134
+ }
135
+ const availableSlots = Math.max(0, effectiveMaxFiles - nextItems.length);
136
+ if (availableSlots < candidates.length) {
137
+ nextErrors.push(`You can upload up to ${effectiveMaxFiles} file${effectiveMaxFiles === 1 ? "" : "s"}.`);
138
+ candidates = candidates.slice(0, availableSlots);
139
+ }
140
+ for (const file of candidates) {
141
+ if (!matchesAccept(file, accept)) {
142
+ nextErrors.push(`${file.name} has an unsupported file type.`);
143
+ continue;
144
+ }
145
+ if (maxFileSize != null && file.size > maxFileSize) {
146
+ nextErrors.push(`${file.name} exceeds the ${formatBytes(maxFileSize)} size limit.`);
147
+ continue;
148
+ }
149
+ const customError = validateFile?.(file);
150
+ if (customError) {
151
+ nextErrors.push(customError);
152
+ continue;
153
+ }
154
+ const item = createFileItem(file);
155
+ acceptedItems.push(item);
156
+ nextItems.push(item);
157
+ }
158
+ setItems(nextItems);
159
+ setErrors(nextErrors);
160
+ setDragState(nextErrors.length > 0 ? "invalid-drop" : "idle");
161
+ if (onUpload) acceptedItems.forEach((item) => beginUpload(item));
162
+ }, [
163
+ accept,
164
+ beginUpload,
165
+ items,
166
+ maxFileSize,
167
+ maxFiles,
168
+ multiple,
169
+ onUpload,
170
+ validateFile
171
+ ]);
172
+ const openPicker = React.useCallback(() => {
173
+ if (disabled) return;
174
+ inputRef.current?.click();
175
+ }, [disabled]);
176
+ const handleInputChange = React.useCallback((event) => {
177
+ queueFiles(event.target.files ?? []);
178
+ event.target.value = "";
179
+ }, [queueFiles]);
180
+ const handleDragEnter = React.useCallback((event) => {
181
+ event.preventDefault();
182
+ if (disabled) return;
183
+ if (!hasFiles(event)) {
184
+ setDragState("invalid-drop");
185
+ return;
186
+ }
187
+ dragDepthRef.current += 1;
188
+ setDragState("drag-over");
189
+ }, [disabled]);
190
+ const handleDragOver = React.useCallback((event) => {
191
+ event.preventDefault();
192
+ if (disabled) return;
193
+ if (event.dataTransfer) event.dataTransfer.dropEffect = "copy";
194
+ if (!hasFiles(event)) setDragState("invalid-drop");
195
+ }, [disabled]);
196
+ const handleDragLeave = React.useCallback((event) => {
197
+ event.preventDefault();
198
+ dragDepthRef.current = Math.max(0, dragDepthRef.current - 1);
199
+ if (dragDepthRef.current === 0) setDragState("idle");
200
+ }, []);
201
+ const handleDrop = React.useCallback((event) => {
202
+ event.preventDefault();
203
+ dragDepthRef.current = 0;
204
+ if (disabled) return;
205
+ if (!hasFiles(event)) {
206
+ setErrors(["Only files can be dropped here."]);
207
+ setDragState("invalid-drop");
208
+ return;
209
+ }
210
+ queueFiles(event.dataTransfer.files);
211
+ }, [disabled, queueFiles]);
212
+ React.useEffect(() => {
213
+ onItemsChange?.(items);
214
+ }, [items, onItemsChange]);
215
+ React.useEffect(() => () => {
216
+ uploadControllersRef.current.forEach((controller) => controller.abort());
217
+ uploadControllersRef.current.clear();
218
+ }, []);
219
+ return /* @__PURE__ */ jsxs("div", {
220
+ "data-slot": "file-upload",
221
+ className: cn("flex flex-col gap-3", className),
222
+ ...props,
223
+ children: [
224
+ /* @__PURE__ */ jsx("input", {
225
+ ref: inputRef,
226
+ type: "file",
227
+ accept,
228
+ multiple,
229
+ disabled,
230
+ "data-slot": "file-upload-input",
231
+ className: "hidden",
232
+ onChange: handleInputChange,
233
+ tabIndex: -1
234
+ }),
235
+ /* @__PURE__ */ jsxs("div", {
236
+ "data-slot": "file-upload-dropzone",
237
+ "data-drag-state": dragState,
238
+ role: "button",
239
+ tabIndex: disabled ? -1 : 0,
240
+ "aria-label": dropzoneAriaLabel,
241
+ "aria-disabled": disabled || void 0,
242
+ "aria-describedby": errors.length > 0 ? `${hintId} ${errorId}` : hintId,
243
+ className: 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"),
244
+ onClick: openPicker,
245
+ onKeyDown: (event) => {
246
+ if (event.key === "Enter" || event.key === " ") {
247
+ event.preventDefault();
248
+ openPicker();
249
+ }
250
+ },
251
+ onDragEnter: handleDragEnter,
252
+ onDragOver: handleDragOver,
253
+ onDragLeave: handleDragLeave,
254
+ onDrop: handleDrop,
255
+ children: [
256
+ /* @__PURE__ */ jsx(UploadCloud, {
257
+ className: "size-8 text-muted-txt",
258
+ "aria-hidden": "true"
259
+ }),
260
+ /* @__PURE__ */ jsx("p", {
261
+ className: "font-medium text-sm text-primary-txt",
262
+ children: "Drag files here or click to browse"
263
+ }),
264
+ /* @__PURE__ */ jsxs("p", {
265
+ id: hintId,
266
+ className: "text-muted-txt text-xs",
267
+ children: [
268
+ multiple ? "Supports multiple files." : "Supports one file.",
269
+ accept ? ` Accepted: ${accept}.` : "",
270
+ maxFileSize ? ` Max file size: ${formatBytes(maxFileSize)}.` : ""
271
+ ]
272
+ })
273
+ ]
274
+ }),
275
+ errors.length > 0 ? /* @__PURE__ */ jsx("ul", {
276
+ id: errorId,
277
+ role: "alert",
278
+ className: "space-y-1 text-danger-txt text-xs",
279
+ children: errors.map((message, index) => /* @__PURE__ */ jsxs("li", {
280
+ className: "flex items-start gap-1.5",
281
+ children: [/* @__PURE__ */ jsx(CircleAlert, {
282
+ className: "mt-0.5 size-3.5 shrink-0",
283
+ "aria-hidden": "true"
284
+ }), /* @__PURE__ */ jsx("span", { children: message })]
285
+ }, `${message}-${index}`))
286
+ }) : null,
287
+ items.length > 0 ? /* @__PURE__ */ jsx("ul", {
288
+ "data-slot": "file-upload-list",
289
+ className: "space-y-2",
290
+ "aria-live": "polite",
291
+ children: items.map((item) => {
292
+ const showProgress = item.status === "uploading" || item.status === "success";
293
+ const progressVariant = item.status === "error" ? "destructive" : "default";
294
+ return /* @__PURE__ */ jsx("li", {
295
+ "data-slot": "file-upload-item",
296
+ "data-state": item.status,
297
+ className: "rounded-12 border border-primary-border bg-secondary-bg/20 px-3 py-2",
298
+ children: /* @__PURE__ */ jsxs("div", {
299
+ className: "flex items-start gap-2.5",
300
+ children: [
301
+ /* @__PURE__ */ jsx("div", {
302
+ className: "mt-0.5 shrink-0 text-muted-txt",
303
+ "aria-hidden": "true",
304
+ children: item.status === "success" ? /* @__PURE__ */ jsx(CheckCircle2, { className: "size-4 text-success-txt" }) : item.status === "error" ? /* @__PURE__ */ jsx(CircleAlert, { className: "size-4 text-danger-txt" }) : item.status === "uploading" ? /* @__PURE__ */ jsx(Loader2, { className: "size-4 animate-spin" }) : /* @__PURE__ */ jsx(FileIcon, { className: "size-4" })
305
+ }),
306
+ /* @__PURE__ */ jsxs("div", {
307
+ className: "min-w-0 flex-1",
308
+ children: [
309
+ /* @__PURE__ */ jsxs("div", {
310
+ className: "flex items-center justify-between gap-3",
311
+ children: [/* @__PURE__ */ jsx("p", {
312
+ className: "truncate font-medium text-sm text-primary-txt",
313
+ children: item.file.name
314
+ }), /* @__PURE__ */ jsx("p", {
315
+ className: "shrink-0 text-muted-txt text-xs",
316
+ children: formatBytes(item.file.size)
317
+ })]
318
+ }),
319
+ /* @__PURE__ */ jsx("p", {
320
+ className: "mt-0.5 text-muted-txt text-xs",
321
+ children: getStatusLabel(item)
322
+ }),
323
+ showProgress ? /* @__PURE__ */ jsx(Progress, {
324
+ className: "mt-2",
325
+ value: item.status === "success" ? 100 : item.progress,
326
+ variant: progressVariant,
327
+ "aria-label": `Upload progress for ${item.file.name}`
328
+ }) : null
329
+ ]
330
+ }),
331
+ /* @__PURE__ */ jsx(Button, {
332
+ type: "button",
333
+ variant: item.status === "uploading" ? "destructive-ghost" : "ghost",
334
+ size: "icon-sm",
335
+ shape: "square",
336
+ "aria-label": item.status === "uploading" ? `Cancel upload for ${item.file.name}` : `Remove ${item.file.name}`,
337
+ onClick: () => removeItem(item.id),
338
+ children: /* @__PURE__ */ jsx(XIcon, {})
339
+ })
340
+ ]
341
+ })
342
+ }, item.id);
343
+ })
344
+ }) : null
345
+ ]
346
+ });
347
+ }
348
+ //#endregion
349
+ export { FileUpload };
350
+
351
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"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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"}
@@ -4,8 +4,8 @@ const require_cn = require("../../cn.cjs");
4
4
  const require_primitives_Field_index = require("../Field/index.cjs");
5
5
  let react = require("react");
6
6
  react = require_chunk.__toESM(react);
7
- let radix_ui = require("radix-ui");
8
7
  let react_jsx_runtime = require("react/jsx-runtime");
8
+ let radix_ui = require("radix-ui");
9
9
  let react_hook_form = require("react-hook-form");
10
10
  //#region src/primitives/Form/Form.tsx
11
11
  /** Root provider that shares one react-hook-form instance with all nested form pieces. */
@@ -1,2 +1,2 @@
1
- import { a as FormItem, c as useFormField, i as FormField, n as FormControl, o as FormLabel, r as FormDescription, s as FormMessage, t as Form } from "../../index27.cjs";
1
+ import { a as FormItem, c as useFormField, i as FormField, n as FormControl, o as FormLabel, r as FormDescription, s as FormMessage, t as Form } from "../../index29.cjs";
2
2
  export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
@@ -1,2 +1,2 @@
1
- import { a as FormItem, c as useFormField, i as FormField, n as FormControl, o as FormLabel, r as FormDescription, s as FormMessage, t as Form } from "../../index27.js";
1
+ import { a as FormItem, c as useFormField, i as FormField, n as FormControl, o as FormLabel, r as FormDescription, s as FormMessage, t as Form } from "../../index29.js";
2
2
  export { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, useFormField };
@@ -1,8 +1,8 @@
1
1
  import { t as cn } from "../../cn.js";
2
2
  import { Field, FieldDescription, FieldError, FieldLabel } from "../Field/index.js";
3
3
  import * as React from "react";
4
- import { Slot } from "radix-ui";
5
4
  import { jsx } from "react/jsx-runtime";
5
+ import { Slot } from "radix-ui";
6
6
  import { Controller, FormProvider, useFormContext, useFormState } from "react-hook-form";
7
7
  //#region src/primitives/Form/Form.tsx
8
8
  /** Root provider that shares one react-hook-form instance with all nested form pieces. */
@@ -1,8 +1,9 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_cn = require("../../cn.cjs");
3
+ let class_variance_authority = require("class-variance-authority");
3
4
  let react_jsx_runtime = require("react/jsx-runtime");
4
5
  //#region src/primitives/Heading/Heading.tsx
5
- const headingVariants = (0, require("class-variance-authority").cva)("font-heading text-balance", {
6
+ const headingVariants = (0, class_variance_authority.cva)("font-heading text-balance", {
6
7
  variants: {
7
8
  size: {
8
9
  "1": "text-[length:var(--heading-1-font-size)] leading-[var(--heading-1-line-height)] font-normal",
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Heading/Heading.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Heading — display/section titles using the design-system HEADING scale\n// (Outfit): the Figma \"heading 1–7\" steps (tokens in styles/tokens/typography.css).\n// `size` drives the visual step (font-size + line-height + the spec's per-step\n// weight: 1–4 Regular, 5–7 Medium); `as` controls the semantic level\n// independently; `gradient` enables the brand gradient text fill.\nconst headingVariants = cva(\"font-heading text-balance\", {\n variants: {\n size: {\n \"1\": \"text-[length:var(--heading-1-font-size)] leading-[var(--heading-1-line-height)] font-normal\",\n \"2\": \"text-[length:var(--heading-2-font-size)] leading-[var(--heading-2-line-height)] font-normal\",\n \"3\": \"text-[length:var(--heading-3-font-size)] leading-[var(--heading-3-line-height)] font-normal\",\n \"4\": \"text-[length:var(--heading-4-font-size)] leading-[var(--heading-4-line-height)] font-normal\",\n \"5\": \"text-[length:var(--heading-5-font-size)] leading-[var(--heading-5-line-height)] font-medium\",\n \"6\": \"text-[length:var(--heading-6-font-size)] leading-[var(--heading-6-line-height)] font-medium\",\n \"7\": \"text-[length:var(--heading-7-font-size)] leading-[var(--heading-7-line-height)] font-medium\",\n },\n // Optional override of the per-step default weight.\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n gradient: {\n true: \"bg-gradient-to-r from-[var(--theme-brand-700)] to-[var(--theme-brand-500-primary)] bg-clip-text text-transparent\",\n false: \"text-primary-txt\",\n },\n },\n defaultVariants: {\n size: \"2\",\n gradient: false,\n },\n});\n\ntype HeadingProps = React.ComponentProps<\"h2\"> &\n VariantProps<typeof headingVariants> & {\n /** Semantic heading level/element. Defaults to `h2`. */\n as?: React.ElementType;\n /** Visual step on the Figma heading scale (1 largest → 7 smallest); also sets the per-step default weight. */\n size?: VariantProps<typeof headingVariants>[\"size\"];\n /** Override the per-step default weight. */\n weight?: VariantProps<typeof headingVariants>[\"weight\"];\n /** Text alignment. */\n align?: VariantProps<typeof headingVariants>[\"align\"];\n /** When true, fills the text with the brand gradient instead of the foreground colour. */\n gradient?: VariantProps<typeof headingVariants>[\"gradient\"];\n };\n\n/** Display/section title using the design-system heading scale; `size` sets the visual step, `as` the semantic element. */\nfunction Heading({ as, className, size, weight, align, gradient, ...props }: HeadingProps) {\n const Comp = as ?? \"h2\";\n return (\n <Comp\n data-slot=\"heading\"\n className={cn(headingVariants({ size, weight, align, gradient }), className)}\n {...props}\n />\n );\n}\n\nexport { Heading, headingVariants, type HeadingProps };\n"],"mappings":";;;;AAUA,MAAM,mBAAA,qCAAA,EAAA,KAAsB,6BAA6B;CACvD,UAAU;EACR,MAAM;GACJ,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;EACP;EAEA,QAAQ;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;EACA,OAAO;GACL,MAAM;GACN,QAAQ;GACR,OAAO;EACT;EACA,UAAU;GACR,MAAM;GACN,OAAO;EACT;CACF;CACA,iBAAiB;EACf,MAAM;EACN,UAAU;CACZ;AACF,CAAC;;AAiBD,SAAS,QAAQ,EAAE,IAAI,WAAW,MAAM,QAAQ,OAAO,UAAU,GAAG,SAAuB;CAEzF,OACE,iBAAA,GAAA,kBAAA,KAFW,MAAM,MAEjB;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,gBAAgB;GAAE;GAAM;GAAQ;GAAO;EAAS,CAAC,GAAG,SAAS;EAC3E,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Heading/Heading.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Heading — display/section titles using the design-system HEADING scale\n// (Outfit): the Figma \"heading 1–7\" steps (tokens in styles/tokens/typography.css).\n// `size` drives the visual step (font-size + line-height + the spec's per-step\n// weight: 1–4 Regular, 5–7 Medium); `as` controls the semantic level\n// independently; `gradient` enables the brand gradient text fill.\nconst headingVariants = cva(\"font-heading text-balance\", {\n variants: {\n size: {\n \"1\": \"text-[length:var(--heading-1-font-size)] leading-[var(--heading-1-line-height)] font-normal\",\n \"2\": \"text-[length:var(--heading-2-font-size)] leading-[var(--heading-2-line-height)] font-normal\",\n \"3\": \"text-[length:var(--heading-3-font-size)] leading-[var(--heading-3-line-height)] font-normal\",\n \"4\": \"text-[length:var(--heading-4-font-size)] leading-[var(--heading-4-line-height)] font-normal\",\n \"5\": \"text-[length:var(--heading-5-font-size)] leading-[var(--heading-5-line-height)] font-medium\",\n \"6\": \"text-[length:var(--heading-6-font-size)] leading-[var(--heading-6-line-height)] font-medium\",\n \"7\": \"text-[length:var(--heading-7-font-size)] leading-[var(--heading-7-line-height)] font-medium\",\n },\n // Optional override of the per-step default weight.\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n gradient: {\n true: \"bg-gradient-to-r from-[var(--theme-brand-700)] to-[var(--theme-brand-500-primary)] bg-clip-text text-transparent\",\n false: \"text-primary-txt\",\n },\n },\n defaultVariants: {\n size: \"2\",\n gradient: false,\n },\n});\n\ntype HeadingProps = React.ComponentProps<\"h2\"> &\n VariantProps<typeof headingVariants> & {\n /** Semantic heading level/element. Defaults to `h2`. */\n as?: React.ElementType;\n /** Visual step on the Figma heading scale (1 largest → 7 smallest); also sets the per-step default weight. */\n size?: VariantProps<typeof headingVariants>[\"size\"];\n /** Override the per-step default weight. */\n weight?: VariantProps<typeof headingVariants>[\"weight\"];\n /** Text alignment. */\n align?: VariantProps<typeof headingVariants>[\"align\"];\n /** When true, fills the text with the brand gradient instead of the foreground colour. */\n gradient?: VariantProps<typeof headingVariants>[\"gradient\"];\n };\n\n/** Display/section title using the design-system heading scale; `size` sets the visual step, `as` the semantic element. */\nfunction Heading({ as, className, size, weight, align, gradient, ...props }: HeadingProps) {\n const Comp = as ?? \"h2\";\n return (\n <Comp\n data-slot=\"heading\"\n className={cn(headingVariants({ size, weight, align, gradient }), className)}\n {...props}\n />\n );\n}\n\nexport { Heading, headingVariants, type HeadingProps };\n"],"mappings":";;;;;AAUA,MAAM,mBAAA,GAAA,yBAAA,KAAsB,6BAA6B;CACvD,UAAU;EACR,MAAM;GACJ,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;EACP;EAEA,QAAQ;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;EACA,OAAO;GACL,MAAM;GACN,QAAQ;GACR,OAAO;EACT;EACA,UAAU;GACR,MAAM;GACN,OAAO;EACT;CACF;CACA,iBAAiB;EACf,MAAM;EACN,UAAU;CACZ;AACF,CAAC;;AAiBD,SAAS,QAAQ,EAAE,IAAI,WAAW,MAAM,QAAQ,OAAO,UAAU,GAAG,SAAuB;CAEzF,OACE,iBAAA,GAAA,kBAAA,KAFW,MAAM,MAEjB;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,gBAAgB;GAAE;GAAM;GAAQ;GAAO;EAAS,CAAC,GAAG,SAAS;EAC3E,GAAI;CACL,CAAA;AAEL"}
@@ -1,2 +1,2 @@
1
- import { n as HeadingProps, r as headingVariants, t as Heading } from "../../index28.cjs";
1
+ import { n as HeadingProps, r as headingVariants, t as Heading } from "../../index30.cjs";
2
2
  export { Heading, HeadingProps, headingVariants };
@@ -1,2 +1,2 @@
1
- import { n as HeadingProps, r as headingVariants, t as Heading } from "../../index28.js";
1
+ import { n as HeadingProps, r as headingVariants, t as Heading } from "../../index30.js";
2
2
  export { Heading, HeadingProps, headingVariants };
@@ -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/Heading/Heading.tsx
5
5
  const headingVariants = cva("font-heading text-balance", {
6
6
  variants: {
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_cn = require("../../cn.cjs");
3
- let radix_ui = require("radix-ui");
4
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
+ let radix_ui = require("radix-ui");
5
5
  //#region src/primitives/HoverCard/HoverCard.tsx
6
6
  /** Root that reveals a floating card when the user hovers (or focuses) the trigger. */
7
7
  function HoverCard({ ...props }) {
@@ -1,2 +1,2 @@
1
- import { n as HoverCardContent, r as HoverCardTrigger, t as HoverCard } from "../../index29.cjs";
1
+ import { n as HoverCardContent, r as HoverCardTrigger, t as HoverCard } from "../../index31.cjs";
2
2
  export { HoverCard, HoverCardContent, HoverCardTrigger };
@@ -1,2 +1,2 @@
1
- import { n as HoverCardContent, r as HoverCardTrigger, t as HoverCard } from "../../index29.js";
1
+ import { n as HoverCardContent, r as HoverCardTrigger, t as HoverCard } from "../../index31.js";
2
2
  export { HoverCard, HoverCardContent, HoverCardTrigger };
@@ -1,6 +1,6 @@
1
1
  import { t as cn } from "../../cn.js";
2
- import { HoverCard as HoverCard$1 } from "radix-ui";
3
2
  import { jsx } from "react/jsx-runtime";
3
+ import { HoverCard as HoverCard$1 } from "radix-ui";
4
4
  //#region src/primitives/HoverCard/HoverCard.tsx
5
5
  /** Root that reveals a floating card when the user hovers (or focuses) the trigger. */
6
6
  function HoverCard({ ...props }) {
@@ -1,2 +1,2 @@
1
- import { i as IconName, n as IconProps, r as ICON_NAMES, t as Icon } from "../../index30.cjs";
1
+ import { i as IconName, n as IconProps, r as ICON_NAMES, t as Icon } from "../../index32.cjs";
2
2
  export { ICON_NAMES, Icon, IconName, IconProps };
@@ -1,2 +1,2 @@
1
- import { i as IconName, n as IconProps, r as ICON_NAMES, t as Icon } from "../../index30.js";
1
+ import { i as IconName, n as IconProps, r as ICON_NAMES, t as Icon } from "../../index32.js";
2
2
  export { ICON_NAMES, Icon, IconName, IconProps };
@@ -1,10 +1,12 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_cn = require("../../cn.cjs");
3
+ const require_Icon = require("../../Icon.cjs");
4
+ let class_variance_authority = require("class-variance-authority");
3
5
  let react = require("react");
4
- let lucide_react = require("lucide-react");
5
6
  let react_jsx_runtime = require("react/jsx-runtime");
7
+ let lucide_react = require("lucide-react");
6
8
  //#region src/primitives/InfoBanner/InfoBanner.tsx
7
- const infoBannerVariants = (0, require("class-variance-authority").cva)("flex w-full gap-4 rounded-12 px-4 py-3", {
9
+ const infoBannerVariants = (0, class_variance_authority.cva)("flex w-full gap-4 rounded-12 px-4 py-3", {
8
10
  variants: { variant: {
9
11
  info: "bg-info-bg text-info-txt",
10
12
  success: "bg-success-bg text-success-txt",
@@ -63,7 +65,8 @@ function InfoBanner({ title, description, variant, icon, dismissible = true, vis
63
65
  "aria-label": "Dismiss",
64
66
  onClick: handleDismiss,
65
67
  className: "-mr-2 flex size-8 shrink-0 items-center justify-center rounded-8 text-primary-txt transition-colors hover:bg-primary-txt/5",
66
- children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.X, {
68
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
69
+ as: lucide_react.X,
67
70
  "data-slot": "info-banner-dismiss-icon",
68
71
  className: "size-4",
69
72
  "aria-hidden": "true"
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["Info","CircleCheck","TriangleAlert","CircleAlert","cn","X"],"sources":["../../../src/primitives/InfoBanner/InfoBanner.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { CircleAlert, CircleCheck, Info, TriangleAlert, X } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { useState } from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// InfoBanner — a dismissible inline status banner (Figma \"Toast Messages\" on\n// the Alert page, node 3962:11659): status-bg surface, rounded-12, px-4 py-3,\n// heading-5 title in the status text color, 14/20 medium secondary description.\n// Distinct from Alert (which is not dismissible).\nconst infoBannerVariants = cva(\"flex w-full gap-4 rounded-12 px-4 py-3\", {\n variants: {\n variant: {\n info: \"bg-info-bg text-info-txt\",\n success: \"bg-success-bg text-success-txt\",\n warning: \"bg-warning-bg text-warning-txt\",\n error: \"bg-danger-bg text-danger-txt\",\n neutral: \"bg-muted-bg text-primary-txt\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n});\n\nconst variantIcons = {\n info: Info,\n success: CircleCheck,\n warning: TriangleAlert,\n error: CircleAlert,\n neutral: Info,\n} as const;\n\nexport type InfoBannerProps = Omit<React.ComponentProps<\"div\">, \"title\"> &\n VariantProps<typeof infoBannerVariants> & {\n /** Intent that drives the banner colors and default icon. Default `info`. */\n variant?: VariantProps<typeof infoBannerVariants>[\"variant\"];\n /** Banner heading. */\n title: string;\n /** Optional supporting copy below the title. */\n description?: React.ReactNode;\n /** Override the default per-variant leading icon. */\n icon?: React.ReactNode;\n /** Show the trailing dismiss button. Default true. */\n dismissible?: boolean;\n /** Controlled visibility. When provided, overrides internal state. */\n visible?: boolean;\n /** Called when the dismiss button is pressed. */\n onDismiss?: () => void;\n };\n\n/** Dismissible inline status banner colored by intent (info/success/warning/error/neutral). */\nfunction InfoBanner({\n title,\n description,\n variant,\n icon,\n dismissible = true,\n visible,\n onDismiss,\n className,\n ...props\n}: InfoBannerProps) {\n const [internalVisible, setInternalVisible] = useState(true);\n const isControlled = visible !== undefined;\n const isVisible = isControlled ? visible : internalVisible;\n\n if (!isVisible) return null;\n\n const handleDismiss = () => {\n if (!isControlled) setInternalVisible(false);\n onDismiss?.();\n };\n\n const VariantIcon = variantIcons[variant ?? \"info\"];\n\n return (\n <div\n data-slot=\"info-banner\"\n data-variant={variant ?? \"info\"}\n role=\"status\"\n className={cn(\n infoBannerVariants({ variant }),\n // Top-aligned like Alert; the icon aligner below sits it on the first line.\n \"items-start\",\n className,\n )}\n {...props}\n >\n {/* Icon inherits the variant's text color via currentColor. */}\n <span data-slot=\"info-banner-icon\" className=\"shrink-0 pt-0.5\" aria-hidden=\"true\">\n {icon ?? <VariantIcon className=\"size-5\" />}\n </span>\n\n <div data-slot=\"info-banner-content\" className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span\n data-slot=\"info-banner-title\"\n className=\"font-heading text-[length:var(--heading-5-font-size)] leading-[var(--heading-5-line-height)] font-medium\"\n >\n {title}\n </span>\n {description != null && (\n <span\n data-slot=\"info-banner-description\"\n className=\"text-sm leading-5 font-medium text-secondary-txt\"\n >\n {description}\n </span>\n )}\n </div>\n\n {dismissible && (\n <button\n data-slot=\"info-banner-dismiss\"\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={handleDismiss}\n className=\"-mr-2 flex size-8 shrink-0 items-center justify-center rounded-8 text-primary-txt transition-colors hover:bg-primary-txt/5\"\n >\n <X data-slot=\"info-banner-dismiss-icon\" className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n}\n\nexport { InfoBanner, infoBannerVariants };\n"],"mappings":";;;;;;AAWA,MAAM,sBAAA,qCAAA,EAAA,KAAyB,0CAA0C;CACvE,UAAU,EACR,SAAS;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,OACX;AACF,CAAC;AAED,MAAM,eAAe;CACnB,MAAMA,aAAAA;CACN,SAASC,aAAAA;CACT,SAASC,aAAAA;CACT,OAAOC,aAAAA;CACP,SAASH,aAAAA;AACX;;AAqBA,SAAS,WAAW,EAClB,OACA,aACA,SACA,MACA,cAAc,MACd,SACA,WACA,WACA,GAAG,SACe;CAClB,MAAM,CAAC,iBAAiB,uBAAA,GAAA,MAAA,UAA+B,IAAI;CAC3D,MAAM,eAAe,YAAY,KAAA;CAGjC,IAAI,EAFc,eAAe,UAAU,kBAE3B,OAAO;CAEvB,MAAM,sBAAsB;EAC1B,IAAI,CAAC,cAAc,mBAAmB,KAAK;EAC3C,YAAY;CACd;CAEA,MAAM,cAAc,aAAa,WAAW;CAE5C,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,aAAU;EACV,gBAAc,WAAW;EACzB,MAAK;EACL,WAAWI,WAAAA,GACT,mBAAmB,EAAE,QAAQ,CAAC,GAE9B,eACA,SACF;EACA,GAAI;YAVN;GAaE,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,aAAU;IAAmB,WAAU;IAAkB,eAAY;cACxE,QAAQ,iBAAA,GAAA,kBAAA,KAAC,aAAD,EAAa,WAAU,SAAU,CAAA;GACtC,CAAA;GAEN,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,aAAU;IAAsB,WAAU;cAA/C,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;KACE,aAAU;KACV,WAAU;eAET;IACG,CAAA,GACL,eAAe,QACd,iBAAA,GAAA,kBAAA,KAAC,QAAD;KACE,aAAU;KACV,WAAU;eAET;IACG,CAAA,CAEL;;GAEJ,eACC,iBAAA,GAAA,kBAAA,KAAC,UAAD;IACE,aAAU;IACV,MAAK;IACL,cAAW;IACX,SAAS;IACT,WAAU;cAEV,iBAAA,GAAA,kBAAA,KAACC,aAAAA,GAAD;KAAG,aAAU;KAA2B,WAAU;KAAS,eAAY;IAAQ,CAAA;GACzE,CAAA;EAEP;;AAET"}
1
+ {"version":3,"file":"index.cjs","names":["Info","CircleCheck","TriangleAlert","CircleAlert","cn","Icon","X"],"sources":["../../../src/primitives/InfoBanner/InfoBanner.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { type VariantProps, cva } from \"class-variance-authority\";\nimport { CircleAlert, CircleCheck, Info, TriangleAlert, X } from \"lucide-react\";\nimport type * as React from \"react\";\nimport { useState } from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// InfoBanner — a dismissible inline status banner (Figma \"Toast Messages\" on\n// the Alert page, node 3962:11659): status-bg surface, rounded-12, px-4 py-3,\n// heading-5 title in the status text color, 14/20 medium secondary description.\n// Distinct from Alert (which is not dismissible).\nconst infoBannerVariants = cva(\"flex w-full gap-4 rounded-12 px-4 py-3\", {\n variants: {\n variant: {\n info: \"bg-info-bg text-info-txt\",\n success: \"bg-success-bg text-success-txt\",\n warning: \"bg-warning-bg text-warning-txt\",\n error: \"bg-danger-bg text-danger-txt\",\n neutral: \"bg-muted-bg text-primary-txt\",\n },\n },\n defaultVariants: {\n variant: \"info\",\n },\n});\n\nconst variantIcons = {\n info: Info,\n success: CircleCheck,\n warning: TriangleAlert,\n error: CircleAlert,\n neutral: Info,\n} as const;\n\nexport type InfoBannerProps = Omit<React.ComponentProps<\"div\">, \"title\"> &\n VariantProps<typeof infoBannerVariants> & {\n /** Intent that drives the banner colors and default icon. Default `info`. */\n variant?: VariantProps<typeof infoBannerVariants>[\"variant\"];\n /** Banner heading. */\n title: string;\n /** Optional supporting copy below the title. */\n description?: React.ReactNode;\n /** Override the default per-variant leading icon. */\n icon?: React.ReactNode;\n /** Show the trailing dismiss button. Default true. */\n dismissible?: boolean;\n /** Controlled visibility. When provided, overrides internal state. */\n visible?: boolean;\n /** Called when the dismiss button is pressed. */\n onDismiss?: () => void;\n };\n\n/** Dismissible inline status banner colored by intent (info/success/warning/error/neutral). */\nfunction InfoBanner({\n title,\n description,\n variant,\n icon,\n dismissible = true,\n visible,\n onDismiss,\n className,\n ...props\n}: InfoBannerProps) {\n const [internalVisible, setInternalVisible] = useState(true);\n const isControlled = visible !== undefined;\n const isVisible = isControlled ? visible : internalVisible;\n\n if (!isVisible) return null;\n\n const handleDismiss = () => {\n if (!isControlled) setInternalVisible(false);\n onDismiss?.();\n };\n\n const VariantIcon = variantIcons[variant ?? \"info\"];\n\n return (\n <div\n data-slot=\"info-banner\"\n data-variant={variant ?? \"info\"}\n role=\"status\"\n className={cn(\n infoBannerVariants({ variant }),\n // Top-aligned like Alert; the icon aligner below sits it on the first line.\n \"items-start\",\n className,\n )}\n {...props}\n >\n {/* Icon inherits the variant's text color via currentColor. */}\n <span data-slot=\"info-banner-icon\" className=\"shrink-0 pt-0.5\" aria-hidden=\"true\">\n {icon ?? <VariantIcon className=\"size-5\" />}\n </span>\n\n <div data-slot=\"info-banner-content\" className=\"flex min-w-0 flex-1 flex-col gap-1\">\n <span\n data-slot=\"info-banner-title\"\n className=\"font-heading text-[length:var(--heading-5-font-size)] leading-[var(--heading-5-line-height)] font-medium\"\n >\n {title}\n </span>\n {description != null && (\n <span\n data-slot=\"info-banner-description\"\n className=\"text-sm leading-5 font-medium text-secondary-txt\"\n >\n {description}\n </span>\n )}\n </div>\n\n {dismissible && (\n <button\n data-slot=\"info-banner-dismiss\"\n type=\"button\"\n aria-label=\"Dismiss\"\n onClick={handleDismiss}\n className=\"-mr-2 flex size-8 shrink-0 items-center justify-center rounded-8 text-primary-txt transition-colors hover:bg-primary-txt/5\"\n >\n <Icon as={X} data-slot=\"info-banner-dismiss-icon\" className=\"size-4\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n}\n\nexport { InfoBanner, infoBannerVariants };\n"],"mappings":";;;;;;;;AAYA,MAAM,sBAAA,GAAA,yBAAA,KAAyB,0CAA0C;CACvE,UAAU,EACR,SAAS;EACP,MAAM;EACN,SAAS;EACT,SAAS;EACT,OAAO;EACP,SAAS;CACX,EACF;CACA,iBAAiB,EACf,SAAS,OACX;AACF,CAAC;AAED,MAAM,eAAe;CACnB,MAAMA,aAAAA;CACN,SAASC,aAAAA;CACT,SAASC,aAAAA;CACT,OAAOC,aAAAA;CACP,SAASH,aAAAA;AACX;;AAqBA,SAAS,WAAW,EAClB,OACA,aACA,SACA,MACA,cAAc,MACd,SACA,WACA,WACA,GAAG,SACe;CAClB,MAAM,CAAC,iBAAiB,uBAAA,GAAA,MAAA,UAA+B,IAAI;CAC3D,MAAM,eAAe,YAAY,KAAA;CAGjC,IAAI,EAFc,eAAe,UAAU,kBAE3B,OAAO;CAEvB,MAAM,sBAAsB;EAC1B,IAAI,CAAC,cAAc,mBAAmB,KAAK;EAC3C,YAAY;CACd;CAEA,MAAM,cAAc,aAAa,WAAW;CAE5C,OACE,iBAAA,GAAA,kBAAA,MAAC,OAAD;EACE,aAAU;EACV,gBAAc,WAAW;EACzB,MAAK;EACL,WAAWI,WAAAA,GACT,mBAAmB,EAAE,QAAQ,CAAC,GAE9B,eACA,SACF;EACA,GAAI;YAVN;GAaE,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,aAAU;IAAmB,WAAU;IAAkB,eAAY;cACxE,QAAQ,iBAAA,GAAA,kBAAA,KAAC,aAAD,EAAa,WAAU,SAAU,CAAA;GACtC,CAAA;GAEN,iBAAA,GAAA,kBAAA,MAAC,OAAD;IAAK,aAAU;IAAsB,WAAU;cAA/C,CACE,iBAAA,GAAA,kBAAA,KAAC,QAAD;KACE,aAAU;KACV,WAAU;eAET;IACG,CAAA,GACL,eAAe,QACd,iBAAA,GAAA,kBAAA,KAAC,QAAD;KACE,aAAU;KACV,WAAU;eAET;IACG,CAAA,CAEL;;GAEJ,eACC,iBAAA,GAAA,kBAAA,KAAC,UAAD;IACE,aAAU;IACV,MAAK;IACL,cAAW;IACX,SAAS;IACT,WAAU;cAEV,iBAAA,GAAA,kBAAA,KAACC,aAAAA,MAAD;KAAM,IAAIC,aAAAA;KAAG,aAAU;KAA2B,WAAU;KAAS,eAAY;IAAQ,CAAA;GACnF,CAAA;EAEP;;AAET"}
@@ -1,2 +1,2 @@
1
- import { n as InfoBannerProps, r as infoBannerVariants, t as InfoBanner } from "../../index31.cjs";
1
+ import { n as InfoBannerProps, r as infoBannerVariants, t as InfoBanner } from "../../index33.cjs";
2
2
  export { InfoBanner, InfoBannerProps, infoBannerVariants };
@@ -1,2 +1,2 @@
1
- import { n as InfoBannerProps, r as infoBannerVariants, t as InfoBanner } from "../../index31.js";
1
+ import { n as InfoBannerProps, r as infoBannerVariants, t as InfoBanner } from "../../index33.js";
2
2
  export { InfoBanner, InfoBannerProps, infoBannerVariants };
@@ -1,8 +1,9 @@
1
1
  import { t as cn } from "../../cn.js";
2
+ import { t as Icon } from "../../Icon.js";
3
+ import { cva } from "class-variance-authority";
2
4
  import { useState } from "react";
3
- import { CircleAlert, CircleCheck, Info, TriangleAlert, X } from "lucide-react";
4
5
  import { jsx, jsxs } from "react/jsx-runtime";
5
- import { cva } from "class-variance-authority";
6
+ import { CircleAlert, CircleCheck, Info, TriangleAlert, X } from "lucide-react";
6
7
  //#region src/primitives/InfoBanner/InfoBanner.tsx
7
8
  const infoBannerVariants = cva("flex w-full gap-4 rounded-12 px-4 py-3", {
8
9
  variants: { variant: {
@@ -63,7 +64,8 @@ function InfoBanner({ title, description, variant, icon, dismissible = true, vis
63
64
  "aria-label": "Dismiss",
64
65
  onClick: handleDismiss,
65
66
  className: "-mr-2 flex size-8 shrink-0 items-center justify-center rounded-8 text-primary-txt transition-colors hover:bg-primary-txt/5",
66
- children: /* @__PURE__ */ jsx(X, {
67
+ children: /* @__PURE__ */ jsx(Icon, {
68
+ as: X,
67
69
  "data-slot": "info-banner-dismiss-icon",
68
70
  className: "size-4",
69
71
  "aria-hidden": "true"