@psnext/design-system 2.4.0 → 2.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (479) hide show
  1. package/DESIGN.md +27 -4
  2. package/SKILL.md +1 -1
  3. package/dist/Header.cjs +1 -1
  4. package/dist/Header.cjs.map +1 -1
  5. package/dist/Header.js +1 -1
  6. package/dist/Header.js.map +1 -1
  7. package/dist/Mosaic.cjs +472 -0
  8. package/dist/Mosaic.cjs.map +1 -0
  9. package/dist/Mosaic.js +459 -0
  10. package/dist/Mosaic.js.map +1 -0
  11. package/dist/index.cjs +13 -2
  12. package/dist/index.d.cts +5 -5
  13. package/dist/index.d.cts.map +1 -1
  14. package/dist/index.d.ts +5 -5
  15. package/dist/index.js +7 -3
  16. package/dist/index10.d.cts +6 -6
  17. package/dist/index10.d.cts.map +1 -1
  18. package/dist/index10.d.ts +6 -6
  19. package/dist/index11.d.cts +3 -3
  20. package/dist/index11.d.ts +3 -3
  21. package/dist/index12.d.cts +12 -12
  22. package/dist/index12.d.cts.map +1 -1
  23. package/dist/index12.d.ts +12 -12
  24. package/dist/index13.d.cts +6 -6
  25. package/dist/index13.d.cts.map +1 -1
  26. package/dist/index13.d.ts +6 -6
  27. package/dist/index14.d.cts +5 -5
  28. package/dist/index14.d.ts +5 -5
  29. package/dist/index15.d.cts +58 -23
  30. package/dist/index15.d.cts.map +1 -1
  31. package/dist/index15.d.ts +58 -23
  32. package/dist/index15.d.ts.map +1 -1
  33. package/dist/index16.d.cts +23 -32
  34. package/dist/index16.d.cts.map +1 -1
  35. package/dist/index16.d.ts +23 -32
  36. package/dist/index16.d.ts.map +1 -1
  37. package/dist/index17.d.cts +34 -15
  38. package/dist/index17.d.cts.map +1 -1
  39. package/dist/index17.d.ts +34 -15
  40. package/dist/index17.d.ts.map +1 -1
  41. package/dist/index18.d.cts +13 -67
  42. package/dist/index18.d.cts.map +1 -1
  43. package/dist/index18.d.ts +13 -67
  44. package/dist/index18.d.ts.map +1 -1
  45. package/dist/index19.d.cts +55 -48
  46. package/dist/index19.d.cts.map +1 -1
  47. package/dist/index19.d.ts +55 -48
  48. package/dist/index19.d.ts.map +1 -1
  49. package/dist/index2.d.cts +8 -8
  50. package/dist/index2.d.cts.map +1 -1
  51. package/dist/index2.d.ts +8 -8
  52. package/dist/index2.d.ts.map +1 -1
  53. package/dist/index20.d.cts +45 -75
  54. package/dist/index20.d.cts.map +1 -1
  55. package/dist/index20.d.ts +45 -75
  56. package/dist/index20.d.ts.map +1 -1
  57. package/dist/index21.d.cts +90 -28
  58. package/dist/index21.d.cts.map +1 -1
  59. package/dist/index21.d.ts +90 -28
  60. package/dist/index21.d.ts.map +1 -1
  61. package/dist/index22.d.cts +28 -56
  62. package/dist/index22.d.cts.map +1 -1
  63. package/dist/index22.d.ts +28 -56
  64. package/dist/index22.d.ts.map +1 -1
  65. package/dist/index23.d.cts +53 -78
  66. package/dist/index23.d.cts.map +1 -1
  67. package/dist/index23.d.ts +53 -78
  68. package/dist/index23.d.ts.map +1 -1
  69. package/dist/index24.d.cts +83 -33
  70. package/dist/index24.d.cts.map +1 -1
  71. package/dist/index24.d.ts +83 -33
  72. package/dist/index24.d.ts.map +1 -1
  73. package/dist/index25.d.cts +43 -11
  74. package/dist/index25.d.cts.map +1 -1
  75. package/dist/index25.d.ts +43 -11
  76. package/dist/index25.d.ts.map +1 -1
  77. package/dist/index26.d.cts +11 -74
  78. package/dist/index26.d.cts.map +1 -1
  79. package/dist/index26.d.ts +11 -74
  80. package/dist/index26.d.ts.map +1 -1
  81. package/dist/index27.d.cts +68 -59
  82. package/dist/index27.d.cts.map +1 -1
  83. package/dist/index27.d.ts +68 -59
  84. package/dist/index27.d.ts.map +1 -1
  85. package/dist/index28.d.cts +47 -30
  86. package/dist/index28.d.cts.map +1 -1
  87. package/dist/index28.d.ts +47 -30
  88. package/dist/index28.d.ts.map +1 -1
  89. package/dist/index29.d.cts +63 -17
  90. package/dist/index29.d.cts.map +1 -1
  91. package/dist/index29.d.ts +63 -17
  92. package/dist/index29.d.ts.map +1 -1
  93. package/dist/index3.d.cts +13 -13
  94. package/dist/index3.d.cts.map +1 -1
  95. package/dist/index3.d.ts +13 -13
  96. package/dist/index30.d.cts +29 -80
  97. package/dist/index30.d.cts.map +1 -1
  98. package/dist/index30.d.ts +29 -80
  99. package/dist/index30.d.ts.map +1 -1
  100. package/dist/index31.d.cts +19 -34
  101. package/dist/index31.d.cts.map +1 -1
  102. package/dist/index31.d.ts +19 -34
  103. package/dist/index31.d.ts.map +1 -1
  104. package/dist/index32.d.cts +80 -18
  105. package/dist/index32.d.cts.map +1 -1
  106. package/dist/index32.d.ts +79 -17
  107. package/dist/index32.d.ts.map +1 -1
  108. package/dist/index33.d.cts +32 -51
  109. package/dist/index33.d.cts.map +1 -1
  110. package/dist/index33.d.ts +32 -51
  111. package/dist/index33.d.ts.map +1 -1
  112. package/dist/index34.d.cts +19 -36
  113. package/dist/index34.d.cts.map +1 -1
  114. package/dist/index34.d.ts +19 -36
  115. package/dist/index34.d.ts.map +1 -1
  116. package/dist/index35.d.cts +43 -61
  117. package/dist/index35.d.cts.map +1 -1
  118. package/dist/index35.d.ts +43 -61
  119. package/dist/index35.d.ts.map +1 -1
  120. package/dist/index36.d.cts +35 -11
  121. package/dist/index36.d.cts.map +1 -1
  122. package/dist/index36.d.ts +35 -11
  123. package/dist/index36.d.ts.map +1 -1
  124. package/dist/index37.d.cts +68 -20
  125. package/dist/index37.d.cts.map +1 -1
  126. package/dist/index37.d.ts +68 -20
  127. package/dist/index37.d.ts.map +1 -1
  128. package/dist/index38.d.cts +14 -15
  129. package/dist/index38.d.cts.map +1 -1
  130. package/dist/index38.d.ts +14 -15
  131. package/dist/index38.d.ts.map +1 -1
  132. package/dist/index39.d.cts +22 -98
  133. package/dist/index39.d.cts.map +1 -1
  134. package/dist/index39.d.ts +22 -98
  135. package/dist/index39.d.ts.map +1 -1
  136. package/dist/index4.d.cts +2 -2
  137. package/dist/index4.d.cts.map +1 -1
  138. package/dist/index4.d.ts +2 -2
  139. package/dist/index4.d.ts.map +1 -1
  140. package/dist/index40.d.cts +15 -17
  141. package/dist/index40.d.cts.map +1 -1
  142. package/dist/index40.d.ts +15 -17
  143. package/dist/index40.d.ts.map +1 -1
  144. package/dist/index41.d.cts +84 -35
  145. package/dist/index41.d.cts.map +1 -1
  146. package/dist/index41.d.ts +84 -35
  147. package/dist/index41.d.ts.map +1 -1
  148. package/dist/index42.d.cts +118 -38
  149. package/dist/index42.d.cts.map +1 -1
  150. package/dist/index42.d.ts +118 -38
  151. package/dist/index42.d.ts.map +1 -1
  152. package/dist/index43.d.cts +15 -89
  153. package/dist/index43.d.cts.map +1 -1
  154. package/dist/index43.d.ts +15 -89
  155. package/dist/index43.d.ts.map +1 -1
  156. package/dist/index44.d.cts +56 -1
  157. package/dist/index44.d.cts.map +1 -0
  158. package/dist/index44.d.ts +56 -1
  159. package/dist/index44.d.ts.map +1 -0
  160. package/dist/index45.d.cts +31 -34
  161. package/dist/index45.d.cts.map +1 -1
  162. package/dist/index45.d.ts +31 -34
  163. package/dist/index45.d.ts.map +1 -1
  164. package/dist/index46.d.cts +89 -21
  165. package/dist/index46.d.cts.map +1 -1
  166. package/dist/index46.d.ts +89 -21
  167. package/dist/index46.d.ts.map +1 -1
  168. package/dist/index47.d.cts +1 -41
  169. package/dist/index47.d.ts +1 -41
  170. package/dist/index48.d.cts +122 -20
  171. package/dist/index48.d.cts.map +1 -1
  172. package/dist/index48.d.ts +122 -20
  173. package/dist/index48.d.ts.map +1 -1
  174. package/dist/index49.d.cts +40 -13
  175. package/dist/index49.d.cts.map +1 -1
  176. package/dist/index49.d.ts +40 -13
  177. package/dist/index49.d.ts.map +1 -1
  178. package/dist/index5.d.cts +7 -7
  179. package/dist/index5.d.cts.map +1 -1
  180. package/dist/index5.d.ts +7 -7
  181. package/dist/index50.d.cts +22 -63
  182. package/dist/index50.d.cts.map +1 -1
  183. package/dist/index50.d.ts +22 -63
  184. package/dist/index50.d.ts.map +1 -1
  185. package/dist/index51.d.cts +33 -55
  186. package/dist/index51.d.cts.map +1 -1
  187. package/dist/index51.d.ts +33 -55
  188. package/dist/index51.d.ts.map +1 -1
  189. package/dist/index52.d.cts +18 -24
  190. package/dist/index52.d.cts.map +1 -1
  191. package/dist/index52.d.ts +18 -24
  192. package/dist/index52.d.ts.map +1 -1
  193. package/dist/index53.d.cts +12 -200
  194. package/dist/index53.d.cts.map +1 -1
  195. package/dist/index53.d.ts +12 -200
  196. package/dist/index53.d.ts.map +1 -1
  197. package/dist/index54.d.cts +58 -15
  198. package/dist/index54.d.cts.map +1 -1
  199. package/dist/index54.d.ts +58 -15
  200. package/dist/index54.d.ts.map +1 -1
  201. package/dist/index55.d.cts +93 -23
  202. package/dist/index55.d.cts.map +1 -1
  203. package/dist/index55.d.ts +93 -23
  204. package/dist/index55.d.ts.map +1 -1
  205. package/dist/index56.d.cts +27 -21
  206. package/dist/index56.d.cts.map +1 -1
  207. package/dist/index56.d.ts +27 -21
  208. package/dist/index56.d.ts.map +1 -1
  209. package/dist/index57.d.cts +203 -6
  210. package/dist/index57.d.cts.map +1 -1
  211. package/dist/index57.d.ts +203 -6
  212. package/dist/index57.d.ts.map +1 -1
  213. package/dist/index58.d.cts +17 -41
  214. package/dist/index58.d.cts.map +1 -1
  215. package/dist/index58.d.ts +17 -41
  216. package/dist/index58.d.ts.map +1 -1
  217. package/dist/index59.d.cts +24 -47
  218. package/dist/index59.d.cts.map +1 -1
  219. package/dist/index59.d.ts +24 -47
  220. package/dist/index59.d.ts.map +1 -1
  221. package/dist/index6.d.cts +5 -5
  222. package/dist/index6.d.cts.map +1 -1
  223. package/dist/index6.d.ts +5 -5
  224. package/dist/index60.d.cts +19 -57
  225. package/dist/index60.d.cts.map +1 -1
  226. package/dist/index60.d.ts +19 -57
  227. package/dist/index60.d.ts.map +1 -1
  228. package/dist/index61.d.cts +6 -39
  229. package/dist/index61.d.cts.map +1 -1
  230. package/dist/index61.d.ts +6 -39
  231. package/dist/index61.d.ts.map +1 -1
  232. package/dist/index62.d.cts +44 -18
  233. package/dist/index62.d.cts.map +1 -1
  234. package/dist/index62.d.ts +44 -18
  235. package/dist/index62.d.ts.map +1 -1
  236. package/dist/index63.d.cts +47 -41
  237. package/dist/index63.d.cts.map +1 -1
  238. package/dist/index63.d.ts +47 -41
  239. package/dist/index63.d.ts.map +1 -1
  240. package/dist/index64.d.cts +55 -15
  241. package/dist/index64.d.cts.map +1 -1
  242. package/dist/index64.d.ts +55 -15
  243. package/dist/index64.d.ts.map +1 -1
  244. package/dist/index65.d.cts +36 -39
  245. package/dist/index65.d.cts.map +1 -1
  246. package/dist/index65.d.ts +36 -39
  247. package/dist/index65.d.ts.map +1 -1
  248. package/dist/index66.d.cts +16 -17
  249. package/dist/index66.d.cts.map +1 -1
  250. package/dist/index66.d.ts +16 -17
  251. package/dist/index66.d.ts.map +1 -1
  252. package/dist/index67.d.cts +38 -84
  253. package/dist/index67.d.cts.map +1 -1
  254. package/dist/index67.d.ts +38 -84
  255. package/dist/index67.d.ts.map +1 -1
  256. package/dist/index68.d.cts +17 -13
  257. package/dist/index68.d.cts.map +1 -1
  258. package/dist/index68.d.ts +17 -13
  259. package/dist/index68.d.ts.map +1 -1
  260. package/dist/index69.d.cts +41 -30
  261. package/dist/index69.d.cts.map +1 -1
  262. package/dist/index69.d.ts +41 -30
  263. package/dist/index69.d.ts.map +1 -1
  264. package/dist/index7.d.cts +8 -8
  265. package/dist/index7.d.ts +8 -8
  266. package/dist/index7.d.ts.map +1 -1
  267. package/dist/index70.d.cts +17 -28
  268. package/dist/index70.d.cts.map +1 -1
  269. package/dist/index70.d.ts +17 -28
  270. package/dist/index70.d.ts.map +1 -1
  271. package/dist/index71.d.cts +88 -79
  272. package/dist/index71.d.cts.map +1 -1
  273. package/dist/index71.d.ts +88 -79
  274. package/dist/index71.d.ts.map +1 -1
  275. package/dist/index72.d.cts +13 -272
  276. package/dist/index72.d.cts.map +1 -1
  277. package/dist/index72.d.ts +13 -272
  278. package/dist/index72.d.ts.map +1 -1
  279. package/dist/index73.d.cts +37 -0
  280. package/dist/index73.d.cts.map +1 -0
  281. package/dist/index73.d.ts +37 -0
  282. package/dist/index73.d.ts.map +1 -0
  283. package/dist/index74.d.cts +36 -0
  284. package/dist/index74.d.cts.map +1 -0
  285. package/dist/index74.d.ts +36 -0
  286. package/dist/index74.d.ts.map +1 -0
  287. package/dist/index75.d.cts +86 -0
  288. package/dist/index75.d.cts.map +1 -0
  289. package/dist/index75.d.ts +86 -0
  290. package/dist/index75.d.ts.map +1 -0
  291. package/dist/index76.d.cts +278 -0
  292. package/dist/index76.d.cts.map +1 -0
  293. package/dist/index76.d.ts +278 -0
  294. package/dist/index76.d.ts.map +1 -0
  295. package/dist/index8.d.cts +4 -4
  296. package/dist/index8.d.cts.map +1 -1
  297. package/dist/index8.d.ts +4 -4
  298. package/dist/index9.d.cts +2 -2
  299. package/dist/index9.d.cts.map +1 -1
  300. package/dist/index9.d.ts +2 -2
  301. package/dist/layouts/Container/index.d.cts +1 -1
  302. package/dist/layouts/Container/index.d.ts +1 -1
  303. package/dist/layouts/MultiColumn/index.d.cts +1 -1
  304. package/dist/layouts/MultiColumn/index.d.ts +1 -1
  305. package/dist/layouts/PageBackground/index.d.cts +1 -1
  306. package/dist/layouts/PageBackground/index.d.ts +1 -1
  307. package/dist/layouts/Stack/index.d.cts +1 -1
  308. package/dist/layouts/Stack/index.d.ts +1 -1
  309. package/dist/layouts/TwoColumn/index.d.cts +1 -1
  310. package/dist/layouts/TwoColumn/index.d.ts +1 -1
  311. package/dist/layouts/index.d.cts +5 -5
  312. package/dist/layouts/index.d.ts +5 -5
  313. package/dist/patterns/DataTable/index.d.cts +3 -3
  314. package/dist/patterns/DataTable/index.d.cts.map +1 -1
  315. package/dist/patterns/DataTable/index.d.ts +3 -3
  316. package/dist/patterns/Footer/index.d.cts +7 -7
  317. package/dist/patterns/Footer/index.d.ts +7 -7
  318. package/dist/patterns/Header/index.d.cts +1 -1
  319. package/dist/patterns/Header/index.d.ts +1 -1
  320. package/dist/patterns/MediaObject/index.d.cts +14 -14
  321. package/dist/patterns/MediaObject/index.d.cts.map +1 -1
  322. package/dist/patterns/MediaObject/index.d.ts +13 -13
  323. package/dist/patterns/NavRail/index.d.cts +1 -1
  324. package/dist/patterns/NavRail/index.d.ts +1 -1
  325. package/dist/patterns/SectionCard/index.d.cts +2 -2
  326. package/dist/patterns/SectionCard/index.d.cts.map +1 -1
  327. package/dist/patterns/SectionCard/index.d.ts +2 -2
  328. package/dist/patterns/SectionCard/index.d.ts.map +1 -1
  329. package/dist/patterns/SectionHeading/index.d.cts +3 -3
  330. package/dist/patterns/SectionHeading/index.d.cts.map +1 -1
  331. package/dist/patterns/SectionHeading/index.d.ts +3 -3
  332. package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
  333. package/dist/patterns/index.d.cts +2 -2
  334. package/dist/patterns/index.d.ts +2 -2
  335. package/dist/primitives/Checkbox/index.cjs +1 -1
  336. package/dist/primitives/Checkbox/index.cjs.map +1 -1
  337. package/dist/primitives/Checkbox/index.d.cts +1 -1
  338. package/dist/primitives/Checkbox/index.d.ts +1 -1
  339. package/dist/primitives/Checkbox/index.js +1 -1
  340. package/dist/primitives/Checkbox/index.js.map +1 -1
  341. package/dist/primitives/CheckboxTree/index.d.cts +1 -1
  342. package/dist/primitives/CheckboxTree/index.d.ts +1 -1
  343. package/dist/primitives/CircularProgress/index.cjs +106 -0
  344. package/dist/primitives/CircularProgress/index.cjs.map +1 -0
  345. package/dist/primitives/CircularProgress/index.d.cts +2 -0
  346. package/dist/primitives/CircularProgress/index.d.ts +2 -0
  347. package/dist/primitives/CircularProgress/index.js +105 -0
  348. package/dist/primitives/CircularProgress/index.js.map +1 -0
  349. package/dist/primitives/Collapsible/index.d.cts +1 -1
  350. package/dist/primitives/Collapsible/index.d.ts +1 -1
  351. package/dist/primitives/Command/index.d.cts +1 -1
  352. package/dist/primitives/Command/index.d.ts +1 -1
  353. package/dist/primitives/ContextMenu/index.d.cts +1 -1
  354. package/dist/primitives/ContextMenu/index.d.ts +1 -1
  355. package/dist/primitives/Credits/index.d.cts +1 -1
  356. package/dist/primitives/Credits/index.d.ts +1 -1
  357. package/dist/primitives/Dialog/index.d.cts +1 -1
  358. package/dist/primitives/Dialog/index.d.ts +1 -1
  359. package/dist/primitives/Drawer/index.cjs +34 -2
  360. package/dist/primitives/Drawer/index.cjs.map +1 -1
  361. package/dist/primitives/Drawer/index.d.cts +1 -1
  362. package/dist/primitives/Drawer/index.d.ts +1 -1
  363. package/dist/primitives/Drawer/index.js +34 -2
  364. package/dist/primitives/Drawer/index.js.map +1 -1
  365. package/dist/primitives/DropdownMenu/index.d.cts +1 -1
  366. package/dist/primitives/DropdownMenu/index.d.ts +1 -1
  367. package/dist/primitives/Empty/index.d.cts +1 -1
  368. package/dist/primitives/Empty/index.d.ts +1 -1
  369. package/dist/primitives/Field/index.d.cts +1 -1
  370. package/dist/primitives/Field/index.d.ts +1 -1
  371. package/dist/primitives/FileUpload/index.cjs +354 -0
  372. package/dist/primitives/FileUpload/index.cjs.map +1 -0
  373. package/dist/primitives/FileUpload/index.d.cts +2 -0
  374. package/dist/primitives/FileUpload/index.d.ts +2 -0
  375. package/dist/primitives/FileUpload/index.js +351 -0
  376. package/dist/primitives/FileUpload/index.js.map +1 -0
  377. package/dist/primitives/Form/index.d.cts +1 -1
  378. package/dist/primitives/Form/index.d.ts +1 -1
  379. package/dist/primitives/Heading/index.d.cts +1 -1
  380. package/dist/primitives/Heading/index.d.ts +1 -1
  381. package/dist/primitives/HoverCard/index.d.cts +1 -1
  382. package/dist/primitives/HoverCard/index.d.ts +1 -1
  383. package/dist/primitives/Icon/index.d.cts +1 -1
  384. package/dist/primitives/Icon/index.d.ts +1 -1
  385. package/dist/primitives/InfoBanner/index.d.cts +1 -1
  386. package/dist/primitives/InfoBanner/index.d.ts +1 -1
  387. package/dist/primitives/Input/index.d.cts +1 -1
  388. package/dist/primitives/Input/index.d.ts +1 -1
  389. package/dist/primitives/InputGroup/index.d.cts +1 -1
  390. package/dist/primitives/InputGroup/index.d.ts +1 -1
  391. package/dist/primitives/InputOtp/index.d.cts +1 -1
  392. package/dist/primitives/InputOtp/index.d.ts +1 -1
  393. package/dist/primitives/Item/index.d.cts +1 -1
  394. package/dist/primitives/Item/index.d.ts +1 -1
  395. package/dist/primitives/Kbd/index.d.cts +1 -1
  396. package/dist/primitives/Kbd/index.d.ts +1 -1
  397. package/dist/primitives/Label/index.d.cts +1 -1
  398. package/dist/primitives/Label/index.d.ts +1 -1
  399. package/dist/primitives/Link/index.d.cts +1 -1
  400. package/dist/primitives/Link/index.d.ts +1 -1
  401. package/dist/primitives/Logo/index.d.cts +1 -1
  402. package/dist/primitives/Logo/index.d.ts +1 -1
  403. package/dist/primitives/Menubar/index.d.cts +1 -1
  404. package/dist/primitives/Menubar/index.d.ts +1 -1
  405. package/dist/primitives/Mosaic/index.cjs +4 -0
  406. package/dist/primitives/Mosaic/index.d.cts +2 -0
  407. package/dist/primitives/Mosaic/index.d.ts +2 -0
  408. package/dist/primitives/Mosaic/index.js +2 -0
  409. package/dist/primitives/NativeSelect/index.d.cts +1 -1
  410. package/dist/primitives/NativeSelect/index.d.ts +1 -1
  411. package/dist/primitives/NavRail/index.d.cts +2 -2
  412. package/dist/primitives/NavRail/index.d.ts +2 -2
  413. package/dist/primitives/NavigationMenu/index.d.cts +1 -1
  414. package/dist/primitives/NavigationMenu/index.d.ts +1 -1
  415. package/dist/primitives/NotchedCard/index.cjs +390 -0
  416. package/dist/primitives/NotchedCard/index.cjs.map +1 -0
  417. package/dist/primitives/NotchedCard/index.d.cts +2 -0
  418. package/dist/primitives/NotchedCard/index.d.ts +2 -0
  419. package/dist/primitives/NotchedCard/index.js +385 -0
  420. package/dist/primitives/NotchedCard/index.js.map +1 -0
  421. package/dist/primitives/Pagination/index.d.cts +1 -1
  422. package/dist/primitives/Pagination/index.d.ts +1 -1
  423. package/dist/primitives/Popover/index.d.cts +1 -1
  424. package/dist/primitives/Popover/index.d.ts +1 -1
  425. package/dist/primitives/Progress/index.d.cts +1 -1
  426. package/dist/primitives/Progress/index.d.ts +1 -1
  427. package/dist/primitives/RadioGroup/index.cjs +1 -1
  428. package/dist/primitives/RadioGroup/index.cjs.map +1 -1
  429. package/dist/primitives/RadioGroup/index.d.cts +1 -1
  430. package/dist/primitives/RadioGroup/index.d.ts +1 -1
  431. package/dist/primitives/RadioGroup/index.js +1 -1
  432. package/dist/primitives/RadioGroup/index.js.map +1 -1
  433. package/dist/primitives/Resizable/index.d.cts +1 -1
  434. package/dist/primitives/Resizable/index.d.ts +1 -1
  435. package/dist/primitives/ScrollArea/index.d.cts +1 -1
  436. package/dist/primitives/ScrollArea/index.d.ts +1 -1
  437. package/dist/primitives/Select/index.d.cts +1 -1
  438. package/dist/primitives/Select/index.d.ts +1 -1
  439. package/dist/primitives/Sheet/index.cjs +34 -2
  440. package/dist/primitives/Sheet/index.cjs.map +1 -1
  441. package/dist/primitives/Sheet/index.d.cts +1 -1
  442. package/dist/primitives/Sheet/index.d.ts +1 -1
  443. package/dist/primitives/Sheet/index.js +34 -2
  444. package/dist/primitives/Sheet/index.js.map +1 -1
  445. package/dist/primitives/Sidebar/index.d.cts +1 -1
  446. package/dist/primitives/Sidebar/index.d.ts +1 -1
  447. package/dist/primitives/Skeleton/index.d.cts +1 -1
  448. package/dist/primitives/Skeleton/index.d.ts +1 -1
  449. package/dist/primitives/Slider/index.d.cts +1 -1
  450. package/dist/primitives/Slider/index.d.ts +1 -1
  451. package/dist/primitives/Sonner/index.d.cts +1 -1
  452. package/dist/primitives/Sonner/index.d.ts +1 -1
  453. package/dist/primitives/Spinner/index.d.cts +1 -1
  454. package/dist/primitives/Spinner/index.d.ts +1 -1
  455. package/dist/primitives/Switch/index.d.cts +1 -1
  456. package/dist/primitives/Switch/index.d.ts +1 -1
  457. package/dist/primitives/Table/index.d.cts +1 -1
  458. package/dist/primitives/Table/index.d.ts +1 -1
  459. package/dist/primitives/Tabs/index.d.cts +1 -1
  460. package/dist/primitives/Tabs/index.d.ts +1 -1
  461. package/dist/primitives/Text/index.d.cts +1 -1
  462. package/dist/primitives/Text/index.d.ts +1 -1
  463. package/dist/primitives/Textarea/index.d.cts +1 -1
  464. package/dist/primitives/Textarea/index.d.ts +1 -1
  465. package/dist/primitives/ThemeProvider/index.d.cts +1 -1
  466. package/dist/primitives/ThemeProvider/index.d.ts +1 -1
  467. package/dist/primitives/Toggle/index.d.cts +1 -1
  468. package/dist/primitives/Toggle/index.d.ts +1 -1
  469. package/dist/primitives/ToggleGroup/index.d.cts +1 -1
  470. package/dist/primitives/ToggleGroup/index.d.ts +1 -1
  471. package/dist/primitives/Tooltip/index.d.cts +1 -1
  472. package/dist/primitives/Tooltip/index.d.ts +1 -1
  473. package/dist/primitives/index.cjs +13 -2
  474. package/dist/primitives/index.d.cts +55 -51
  475. package/dist/primitives/index.d.ts +55 -51
  476. package/dist/primitives/index.js +7 -3
  477. package/package.json +1 -1
  478. package/dist/index47.d.cts.map +0 -1
  479. package/dist/index47.d.ts.map +0 -1
@@ -0,0 +1,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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"}
@@ -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,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,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,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,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,2 +1,2 @@
1
- import { n as inputVariants, t as Input } from "../../index32.cjs";
1
+ import { n as inputVariants, t as Input } from "../../index34.cjs";
2
2
  export { Input, inputVariants };
@@ -1,2 +1,2 @@
1
- import { n as inputVariants, t as Input } from "../../index32.js";
1
+ import { n as inputVariants, t as Input } from "../../index34.js";
2
2
  export { Input, inputVariants };
@@ -1,2 +1,2 @@
1
- import { a as InputGroupText, i as InputGroupInput, n as InputGroupAddon, o as InputGroupTextarea, r as InputGroupButton, t as InputGroup } from "../../index33.cjs";
1
+ import { a as InputGroupText, i as InputGroupInput, n as InputGroupAddon, o as InputGroupTextarea, r as InputGroupButton, t as InputGroup } from "../../index35.cjs";
2
2
  export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
@@ -1,2 +1,2 @@
1
- import { a as InputGroupText, i as InputGroupInput, n as InputGroupAddon, o as InputGroupTextarea, r as InputGroupButton, t as InputGroup } from "../../index33.js";
1
+ import { a as InputGroupText, i as InputGroupInput, n as InputGroupAddon, o as InputGroupTextarea, r as InputGroupButton, t as InputGroup } from "../../index35.js";
2
2
  export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea };
@@ -1,2 +1,2 @@
1
- import { i as InputOTPSlot, n as InputOTPGroup, r as InputOTPSeparator, t as InputOTP } from "../../index34.cjs";
1
+ import { i as InputOTPSlot, n as InputOTPGroup, r as InputOTPSeparator, t as InputOTP } from "../../index36.cjs";
2
2
  export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
@@ -1,2 +1,2 @@
1
- import { i as InputOTPSlot, n as InputOTPGroup, r as InputOTPSeparator, t as InputOTP } from "../../index34.js";
1
+ import { i as InputOTPSlot, n as InputOTPGroup, r as InputOTPSeparator, t as InputOTP } from "../../index36.js";
2
2
  export { InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot };
@@ -1,2 +1,2 @@
1
- import { a as ItemFooter, c as ItemMedia, i as ItemDescription, l as ItemSeparator, n as ItemActions, o as ItemGroup, r as ItemContent, s as ItemHeader, t as Item, u as ItemTitle } from "../../index35.cjs";
1
+ import { a as ItemFooter, c as ItemMedia, i as ItemDescription, l as ItemSeparator, n as ItemActions, o as ItemGroup, r as ItemContent, s as ItemHeader, t as Item, u as ItemTitle } from "../../index37.cjs";
2
2
  export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
@@ -1,2 +1,2 @@
1
- import { a as ItemFooter, c as ItemMedia, i as ItemDescription, l as ItemSeparator, n as ItemActions, o as ItemGroup, r as ItemContent, s as ItemHeader, t as Item, u as ItemTitle } from "../../index35.js";
1
+ import { a as ItemFooter, c as ItemMedia, i as ItemDescription, l as ItemSeparator, n as ItemActions, o as ItemGroup, r as ItemContent, s as ItemHeader, t as Item, u as ItemTitle } from "../../index37.js";
2
2
  export { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle };
@@ -1,2 +1,2 @@
1
- import { n as KbdGroup, t as Kbd } from "../../index36.cjs";
1
+ import { n as KbdGroup, t as Kbd } from "../../index38.cjs";
2
2
  export { Kbd, KbdGroup };
@@ -1,2 +1,2 @@
1
- import { n as KbdGroup, t as Kbd } from "../../index36.js";
1
+ import { n as KbdGroup, t as Kbd } from "../../index38.js";
2
2
  export { Kbd, KbdGroup };
@@ -1,2 +1,2 @@
1
- import { t as Label } from "../../index25.cjs";
1
+ import { t as Label } from "../../index26.cjs";
2
2
  export { Label };
@@ -1,2 +1,2 @@
1
- import { t as Label } from "../../index25.js";
1
+ import { t as Label } from "../../index26.js";
2
2
  export { Label };
@@ -1,2 +1,2 @@
1
- import { n as LinkProps, r as linkVariants, t as Link } from "../../index37.cjs";
1
+ import { n as LinkProps, r as linkVariants, t as Link } from "../../index39.cjs";
2
2
  export { Link, LinkProps, linkVariants };
@@ -1,2 +1,2 @@
1
- import { n as LinkProps, r as linkVariants, t as Link } from "../../index37.js";
1
+ import { n as LinkProps, r as linkVariants, t as Link } from "../../index39.js";
2
2
  export { Link, LinkProps, linkVariants };
@@ -1,2 +1,2 @@
1
- import { n as LogoBrand, r as LogoVariant, t as Logo } from "../../index38.cjs";
1
+ import { n as LogoBrand, r as LogoVariant, t as Logo } from "../../index40.cjs";
2
2
  export { Logo, LogoBrand, LogoVariant };
@@ -1,2 +1,2 @@
1
- import { n as LogoBrand, r as LogoVariant, t as Logo } from "../../index38.js";
1
+ import { n as LogoBrand, r as LogoVariant, t as Logo } from "../../index40.js";
2
2
  export { Logo, LogoBrand, LogoVariant };
@@ -1,2 +1,2 @@
1
- import { a as MenubarItem, c as MenubarPortal, d as MenubarSeparator, f as MenubarShortcut, g as MenubarTrigger, h as MenubarSubTrigger, i as MenubarGroup, l as MenubarRadioGroup, m as MenubarSubContent, n as MenubarCheckboxItem, o as MenubarLabel, p as MenubarSub, r as MenubarContent, s as MenubarMenu, t as Menubar, u as MenubarRadioItem } from "../../index39.cjs";
1
+ import { a as MenubarItem, c as MenubarPortal, d as MenubarSeparator, f as MenubarShortcut, g as MenubarTrigger, h as MenubarSubTrigger, i as MenubarGroup, l as MenubarRadioGroup, m as MenubarSubContent, n as MenubarCheckboxItem, o as MenubarLabel, p as MenubarSub, r as MenubarContent, s as MenubarMenu, t as Menubar, u as MenubarRadioItem } from "../../index41.cjs";
2
2
  export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger };
@@ -1,2 +1,2 @@
1
- import { a as MenubarItem, c as MenubarPortal, d as MenubarSeparator, f as MenubarShortcut, g as MenubarTrigger, h as MenubarSubTrigger, i as MenubarGroup, l as MenubarRadioGroup, m as MenubarSubContent, n as MenubarCheckboxItem, o as MenubarLabel, p as MenubarSub, r as MenubarContent, s as MenubarMenu, t as Menubar, u as MenubarRadioItem } from "../../index39.js";
1
+ import { a as MenubarItem, c as MenubarPortal, d as MenubarSeparator, f as MenubarShortcut, g as MenubarTrigger, h as MenubarSubTrigger, i as MenubarGroup, l as MenubarRadioGroup, m as MenubarSubContent, n as MenubarCheckboxItem, o as MenubarLabel, p as MenubarSub, r as MenubarContent, s as MenubarMenu, t as Menubar, u as MenubarRadioItem } from "../../index41.js";
2
2
  export { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger };
@@ -0,0 +1,4 @@
1
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
+ const require_Mosaic = require("../../Mosaic.cjs");
3
+ exports.Mosaic = require_Mosaic.Mosaic;
4
+ exports.MosaicWindow = require_Mosaic.MosaicWindow;
@@ -0,0 +1,2 @@
1
+ import { a as DropZone, c as MosaicNode, i as MosaicWindowProps, l as MosaicParent, n as MosaicProps, o as MosaicDirection, r as MosaicWindow, s as MosaicKey, t as Mosaic, u as MosaicPath } from "../../index42.cjs";
2
+ export { DropZone, Mosaic, MosaicDirection, MosaicKey, MosaicNode, MosaicParent, MosaicPath, MosaicProps, MosaicWindow, MosaicWindowProps };
@@ -0,0 +1,2 @@
1
+ import { a as DropZone, c as MosaicNode, i as MosaicWindowProps, l as MosaicParent, n as MosaicProps, o as MosaicDirection, r as MosaicWindow, s as MosaicKey, t as Mosaic, u as MosaicPath } from "../../index42.js";
2
+ export { DropZone, Mosaic, MosaicDirection, MosaicKey, MosaicNode, MosaicParent, MosaicPath, MosaicProps, MosaicWindow, MosaicWindowProps };
@@ -0,0 +1,2 @@
1
+ import { n as MosaicWindow, t as Mosaic } from "../../Mosaic.js";
2
+ export { Mosaic, MosaicWindow };
@@ -1,2 +1,2 @@
1
- import { n as nativeSelectVariants, t as NativeSelect } from "../../index40.cjs";
1
+ import { n as nativeSelectVariants, t as NativeSelect } from "../../index43.cjs";
2
2
  export { NativeSelect, nativeSelectVariants };
@@ -1,2 +1,2 @@
1
- import { n as nativeSelectVariants, t as NativeSelect } from "../../index40.js";
1
+ import { n as nativeSelectVariants, t as NativeSelect } from "../../index43.js";
2
2
  export { NativeSelect, nativeSelectVariants };
@@ -1,3 +1,3 @@
1
- import { a as NavRailMenuContent, c as NavRailMenuTrigger, d as NavRailSeparator, f as NavRailUser, i as NavRailMenu, l as NavRailMenuTriggerProps, n as NavRailItem, o as NavRailMenuItem, p as NavRailUserProps, r as NavRailItemProps, s as NavRailMenuItemProps, t as NavRail, u as NavRailMode } from "../../index43.cjs";
2
- import "../../index44.cjs";
1
+ import { a as NavRailMenuContent, c as NavRailMenuTrigger, d as NavRailSeparator, f as NavRailUser, i as NavRailMenu, l as NavRailMenuTriggerProps, n as NavRailItem, o as NavRailMenuItem, p as NavRailUserProps, r as NavRailItemProps, s as NavRailMenuItemProps, t as NavRail, u as NavRailMode } from "../../index46.cjs";
2
+ import "../../index47.cjs";
3
3
  export { NavRail, NavRailItem, NavRailItemProps, NavRailMenu, NavRailMenuContent, NavRailMenuItem, NavRailMenuItemProps, NavRailMenuTrigger, NavRailMenuTriggerProps, NavRailMode, NavRailSeparator, NavRailUser, NavRailUserProps };
@@ -1,3 +1,3 @@
1
- import { a as NavRailMenuContent, c as NavRailMenuTrigger, d as NavRailSeparator, f as NavRailUser, i as NavRailMenu, l as NavRailMenuTriggerProps, n as NavRailItem, o as NavRailMenuItem, p as NavRailUserProps, r as NavRailItemProps, s as NavRailMenuItemProps, t as NavRail, u as NavRailMode } from "../../index43.js";
2
- import "../../index44.js";
1
+ import { a as NavRailMenuContent, c as NavRailMenuTrigger, d as NavRailSeparator, f as NavRailUser, i as NavRailMenu, l as NavRailMenuTriggerProps, n as NavRailItem, o as NavRailMenuItem, p as NavRailUserProps, r as NavRailItemProps, s as NavRailMenuItemProps, t as NavRail, u as NavRailMode } from "../../index46.js";
2
+ import "../../index47.js";
3
3
  export { NavRail, NavRailItem, NavRailItemProps, NavRailMenu, NavRailMenuContent, NavRailMenuItem, NavRailMenuItemProps, NavRailMenuTrigger, NavRailMenuTriggerProps, NavRailMode, NavRailSeparator, NavRailUser, NavRailUserProps };
@@ -1,2 +1,2 @@
1
- import { a as NavigationMenuLink, c as NavigationMenuViewport, i as NavigationMenuItem, l as navigationMenuTriggerStyle, n as NavigationMenuContent, o as NavigationMenuList, r as NavigationMenuIndicator, s as NavigationMenuTrigger, t as NavigationMenu } from "../../index41.cjs";
1
+ import { a as NavigationMenuLink, c as NavigationMenuViewport, i as NavigationMenuItem, l as navigationMenuTriggerStyle, n as NavigationMenuContent, o as NavigationMenuList, r as NavigationMenuIndicator, s as NavigationMenuTrigger, t as NavigationMenu } from "../../index44.cjs";
2
2
  export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle };
@@ -1,2 +1,2 @@
1
- import { a as NavigationMenuLink, c as NavigationMenuViewport, i as NavigationMenuItem, l as navigationMenuTriggerStyle, n as NavigationMenuContent, o as NavigationMenuList, r as NavigationMenuIndicator, s as NavigationMenuTrigger, t as NavigationMenu } from "../../index41.js";
1
+ import { a as NavigationMenuLink, c as NavigationMenuViewport, i as NavigationMenuItem, l as navigationMenuTriggerStyle, n as NavigationMenuContent, o as NavigationMenuList, r as NavigationMenuIndicator, s as NavigationMenuTrigger, t as NavigationMenu } from "../../index44.js";
2
2
  export { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle };