@psnext/design-system 2.4.0 → 2.6.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 (493) hide show
  1. package/DESIGN.md +32 -4
  2. package/SKILL.md +1 -1
  3. package/dist/Header.cjs +3 -3
  4. package/dist/Header.cjs.map +1 -1
  5. package/dist/Header.js +3 -3
  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 +25 -4
  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 +10 -5
  16. package/dist/index10.d.cts +5 -5
  17. package/dist/index10.d.ts +6 -6
  18. package/dist/index11.d.cts +3 -3
  19. package/dist/index11.d.ts +3 -3
  20. package/dist/index12.d.cts +12 -12
  21. package/dist/index12.d.cts.map +1 -1
  22. package/dist/index12.d.ts +12 -12
  23. package/dist/index12.d.ts.map +1 -1
  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/index13.d.ts.map +1 -1
  28. package/dist/index14.d.cts +5 -5
  29. package/dist/index14.d.ts +5 -5
  30. package/dist/index15.d.cts +58 -23
  31. package/dist/index15.d.cts.map +1 -1
  32. package/dist/index15.d.ts +58 -23
  33. package/dist/index15.d.ts.map +1 -1
  34. package/dist/index16.d.cts +23 -32
  35. package/dist/index16.d.cts.map +1 -1
  36. package/dist/index16.d.ts +23 -32
  37. package/dist/index16.d.ts.map +1 -1
  38. package/dist/index17.d.cts +34 -15
  39. package/dist/index17.d.cts.map +1 -1
  40. package/dist/index17.d.ts +34 -15
  41. package/dist/index17.d.ts.map +1 -1
  42. package/dist/index18.d.cts +13 -67
  43. package/dist/index18.d.cts.map +1 -1
  44. package/dist/index18.d.ts +13 -67
  45. package/dist/index18.d.ts.map +1 -1
  46. package/dist/index19.d.cts +55 -48
  47. package/dist/index19.d.cts.map +1 -1
  48. package/dist/index19.d.ts +55 -48
  49. package/dist/index19.d.ts.map +1 -1
  50. package/dist/index2.d.cts +8 -8
  51. package/dist/index2.d.cts.map +1 -1
  52. package/dist/index2.d.ts +8 -8
  53. package/dist/index2.d.ts.map +1 -1
  54. package/dist/index20.d.cts +45 -75
  55. package/dist/index20.d.cts.map +1 -1
  56. package/dist/index20.d.ts +45 -75
  57. package/dist/index20.d.ts.map +1 -1
  58. package/dist/index21.d.cts +39 -28
  59. package/dist/index21.d.cts.map +1 -1
  60. package/dist/index21.d.ts +39 -28
  61. package/dist/index21.d.ts.map +1 -1
  62. package/dist/index22.d.cts +98 -44
  63. package/dist/index22.d.cts.map +1 -1
  64. package/dist/index22.d.ts +98 -44
  65. package/dist/index22.d.ts.map +1 -1
  66. package/dist/index23.d.cts +65 -68
  67. package/dist/index23.d.cts.map +1 -1
  68. package/dist/index23.d.ts +65 -68
  69. package/dist/index23.d.ts.map +1 -1
  70. package/dist/index24.d.cts +27 -42
  71. package/dist/index24.d.cts.map +1 -1
  72. package/dist/index24.d.ts +27 -42
  73. package/dist/index24.d.ts.map +1 -1
  74. package/dist/index25.d.cts +68 -11
  75. package/dist/index25.d.cts.map +1 -1
  76. package/dist/index25.d.ts +68 -11
  77. package/dist/index25.d.ts.map +1 -1
  78. package/dist/index26.d.cts +75 -56
  79. package/dist/index26.d.cts.map +1 -1
  80. package/dist/index26.d.ts +75 -56
  81. package/dist/index26.d.ts.map +1 -1
  82. package/dist/index27.d.cts +38 -60
  83. package/dist/index27.d.cts.map +1 -1
  84. package/dist/index27.d.ts +38 -60
  85. package/dist/index27.d.ts.map +1 -1
  86. package/dist/index28.d.cts +10 -30
  87. package/dist/index28.d.cts.map +1 -1
  88. package/dist/index28.d.ts +10 -30
  89. package/dist/index28.d.ts.map +1 -1
  90. package/dist/index29.d.cts +72 -17
  91. package/dist/index29.d.cts.map +1 -1
  92. package/dist/index29.d.ts +72 -17
  93. package/dist/index29.d.ts.map +1 -1
  94. package/dist/index3.d.cts +13 -13
  95. package/dist/index3.d.cts.map +1 -1
  96. package/dist/index3.d.ts +13 -13
  97. package/dist/index30.d.cts +46 -80
  98. package/dist/index30.d.cts.map +1 -1
  99. package/dist/index30.d.ts +46 -80
  100. package/dist/index30.d.ts.map +1 -1
  101. package/dist/index31.d.cts +64 -33
  102. package/dist/index31.d.cts.map +1 -1
  103. package/dist/index31.d.ts +64 -33
  104. package/dist/index31.d.ts.map +1 -1
  105. package/dist/index32.d.cts +29 -18
  106. package/dist/index32.d.cts.map +1 -1
  107. package/dist/index32.d.ts +29 -18
  108. package/dist/index32.d.ts.map +1 -1
  109. package/dist/index33.d.cts +17 -51
  110. package/dist/index33.d.cts.map +1 -1
  111. package/dist/index33.d.ts +17 -51
  112. package/dist/index33.d.ts.map +1 -1
  113. package/dist/index34.d.cts +81 -36
  114. package/dist/index34.d.cts.map +1 -1
  115. package/dist/index34.d.ts +81 -36
  116. package/dist/index34.d.ts.map +1 -1
  117. package/dist/index35.d.cts +32 -69
  118. package/dist/index35.d.cts.map +1 -1
  119. package/dist/index35.d.ts +32 -69
  120. package/dist/index35.d.ts.map +1 -1
  121. package/dist/index36.d.cts +20 -13
  122. package/dist/index36.d.cts.map +1 -1
  123. package/dist/index36.d.ts +20 -13
  124. package/dist/index36.d.ts.map +1 -1
  125. package/dist/index37.d.cts +51 -21
  126. package/dist/index37.d.cts.map +1 -1
  127. package/dist/index37.d.ts +51 -21
  128. package/dist/index37.d.ts.map +1 -1
  129. package/dist/index38.d.cts +38 -15
  130. package/dist/index38.d.cts.map +1 -1
  131. package/dist/index38.d.ts +38 -15
  132. package/dist/index38.d.ts.map +1 -1
  133. package/dist/index39.d.cts +53 -81
  134. package/dist/index39.d.cts.map +1 -1
  135. package/dist/index39.d.ts +53 -81
  136. package/dist/index39.d.ts.map +1 -1
  137. package/dist/index4.d.cts +2 -2
  138. package/dist/index4.d.ts +2 -2
  139. package/dist/index4.d.ts.map +1 -1
  140. package/dist/index40.d.cts +13 -16
  141. package/dist/index40.d.cts.map +1 -1
  142. package/dist/index40.d.ts +13 -16
  143. package/dist/index40.d.ts.map +1 -1
  144. package/dist/index41.d.cts +25 -52
  145. package/dist/index41.d.cts.map +1 -1
  146. package/dist/index41.d.ts +24 -51
  147. package/dist/index41.d.ts.map +1 -1
  148. package/dist/index42.d.cts +15 -40
  149. package/dist/index42.d.cts.map +1 -1
  150. package/dist/index42.d.ts +15 -40
  151. package/dist/index42.d.ts.map +1 -1
  152. package/dist/index43.d.cts +86 -77
  153. package/dist/index43.d.cts.map +1 -1
  154. package/dist/index43.d.ts +86 -77
  155. package/dist/index43.d.ts.map +1 -1
  156. package/dist/index44.d.cts +125 -1
  157. package/dist/index44.d.cts.map +1 -0
  158. package/dist/index44.d.ts +125 -1
  159. package/dist/index44.d.ts.map +1 -0
  160. package/dist/index45.d.cts +15 -41
  161. package/dist/index45.d.cts.map +1 -1
  162. package/dist/index45.d.ts +15 -41
  163. package/dist/index45.d.ts.map +1 -1
  164. package/dist/index46.d.cts +52 -24
  165. package/dist/index46.d.cts.map +1 -1
  166. package/dist/index46.d.ts +52 -24
  167. package/dist/index46.d.ts.map +1 -1
  168. package/dist/index47.d.cts +86 -31
  169. package/dist/index47.d.cts.map +1 -1
  170. package/dist/index47.d.ts +86 -31
  171. package/dist/index47.d.ts.map +1 -1
  172. package/dist/index48.d.cts +1 -25
  173. package/dist/index48.d.ts +1 -25
  174. package/dist/index49.d.cts +120 -14
  175. package/dist/index49.d.cts.map +1 -1
  176. package/dist/index49.d.ts +120 -14
  177. package/dist/index49.d.ts.map +1 -1
  178. package/dist/index5.d.cts +7 -7
  179. package/dist/index5.d.ts +7 -7
  180. package/dist/index50.d.cts +32 -53
  181. package/dist/index50.d.cts.map +1 -1
  182. package/dist/index50.d.ts +32 -53
  183. package/dist/index50.d.ts.map +1 -1
  184. package/dist/index51.d.cts +21 -56
  185. package/dist/index51.d.cts.map +1 -1
  186. package/dist/index51.d.ts +21 -56
  187. package/dist/index51.d.ts.map +1 -1
  188. package/dist/index52.d.cts +33 -23
  189. package/dist/index52.d.cts.map +1 -1
  190. package/dist/index52.d.ts +33 -23
  191. package/dist/index52.d.ts.map +1 -1
  192. package/dist/index53.d.cts +17 -201
  193. package/dist/index53.d.cts.map +1 -1
  194. package/dist/index53.d.ts +17 -201
  195. package/dist/index53.d.ts.map +1 -1
  196. package/dist/index54.d.cts +14 -19
  197. package/dist/index54.d.cts.map +1 -1
  198. package/dist/index54.d.ts +14 -19
  199. package/dist/index54.d.ts.map +1 -1
  200. package/dist/index55.d.cts +64 -23
  201. package/dist/index55.d.cts.map +1 -1
  202. package/dist/index55.d.ts +64 -23
  203. package/dist/index55.d.ts.map +1 -1
  204. package/dist/index56.d.cts +95 -22
  205. package/dist/index56.d.cts.map +1 -1
  206. package/dist/index56.d.ts +95 -22
  207. package/dist/index56.d.ts.map +1 -1
  208. package/dist/index57.d.cts +25 -6
  209. package/dist/index57.d.cts.map +1 -1
  210. package/dist/index57.d.ts +25 -6
  211. package/dist/index57.d.ts.map +1 -1
  212. package/dist/index58.d.cts +202 -43
  213. package/dist/index58.d.cts.map +1 -1
  214. package/dist/index58.d.ts +202 -43
  215. package/dist/index58.d.ts.map +1 -1
  216. package/dist/index59.d.cts +15 -40
  217. package/dist/index59.d.cts.map +1 -1
  218. package/dist/index59.d.ts +15 -40
  219. package/dist/index59.d.ts.map +1 -1
  220. package/dist/index6.d.cts +5 -5
  221. package/dist/index6.d.cts.map +1 -1
  222. package/dist/index6.d.ts +5 -5
  223. package/dist/index6.d.ts.map +1 -1
  224. package/dist/index60.d.cts +20 -55
  225. package/dist/index60.d.cts.map +1 -1
  226. package/dist/index60.d.ts +20 -55
  227. package/dist/index60.d.ts.map +1 -1
  228. package/dist/index61.d.cts +21 -41
  229. package/dist/index61.d.cts.map +1 -1
  230. package/dist/index61.d.ts +21 -41
  231. package/dist/index61.d.ts.map +1 -1
  232. package/dist/index62.d.cts +6 -18
  233. package/dist/index62.d.cts.map +1 -1
  234. package/dist/index62.d.ts +6 -18
  235. package/dist/index62.d.ts.map +1 -1
  236. package/dist/index63.d.cts +46 -41
  237. package/dist/index63.d.cts.map +1 -1
  238. package/dist/index63.d.ts +46 -41
  239. package/dist/index63.d.ts.map +1 -1
  240. package/dist/index64.d.cts +47 -19
  241. package/dist/index64.d.cts.map +1 -1
  242. package/dist/index64.d.ts +47 -19
  243. package/dist/index64.d.ts.map +1 -1
  244. package/dist/index65.d.cts +50 -35
  245. package/dist/index65.d.cts.map +1 -1
  246. package/dist/index65.d.ts +50 -35
  247. package/dist/index65.d.ts.map +1 -1
  248. package/dist/index66.d.cts +33 -13
  249. package/dist/index66.d.cts.map +1 -1
  250. package/dist/index66.d.ts +33 -13
  251. package/dist/index66.d.ts.map +1 -1
  252. package/dist/index67.d.cts +17 -84
  253. package/dist/index67.d.cts.map +1 -1
  254. package/dist/index67.d.ts +17 -84
  255. package/dist/index67.d.ts.map +1 -1
  256. package/dist/index68.d.cts +40 -14
  257. package/dist/index68.d.cts.map +1 -1
  258. package/dist/index68.d.ts +40 -14
  259. package/dist/index68.d.ts.map +1 -1
  260. package/dist/index69.d.cts +16 -30
  261. package/dist/index69.d.cts.map +1 -1
  262. package/dist/index69.d.ts +16 -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/index70.d.cts +39 -27
  267. package/dist/index70.d.cts.map +1 -1
  268. package/dist/index70.d.ts +39 -27
  269. package/dist/index70.d.ts.map +1 -1
  270. package/dist/index71.d.cts +22 -79
  271. package/dist/index71.d.cts.map +1 -1
  272. package/dist/index71.d.ts +22 -79
  273. package/dist/index71.d.ts.map +1 -1
  274. package/dist/index72.d.cts +77 -264
  275. package/dist/index72.d.cts.map +1 -1
  276. package/dist/index72.d.ts +77 -264
  277. package/dist/index72.d.ts.map +1 -1
  278. package/dist/index73.d.cts +19 -0
  279. package/dist/index73.d.cts.map +1 -0
  280. package/dist/index73.d.ts +19 -0
  281. package/dist/index73.d.ts.map +1 -0
  282. package/dist/index74.d.cts +37 -0
  283. package/dist/index74.d.cts.map +1 -0
  284. package/dist/index74.d.ts +37 -0
  285. package/dist/index74.d.ts.map +1 -0
  286. package/dist/index75.d.cts +36 -0
  287. package/dist/index75.d.cts.map +1 -0
  288. package/dist/index75.d.ts +36 -0
  289. package/dist/index75.d.ts.map +1 -0
  290. package/dist/index76.d.cts +87 -0
  291. package/dist/index76.d.cts.map +1 -0
  292. package/dist/index76.d.ts +87 -0
  293. package/dist/index76.d.ts.map +1 -0
  294. package/dist/index77.d.cts +278 -0
  295. package/dist/index77.d.cts.map +1 -0
  296. package/dist/index77.d.ts +278 -0
  297. package/dist/index77.d.ts.map +1 -0
  298. package/dist/index8.d.cts +4 -4
  299. package/dist/index8.d.cts.map +1 -1
  300. package/dist/index8.d.ts +4 -4
  301. package/dist/index9.d.cts +2 -2
  302. package/dist/index9.d.ts +2 -2
  303. package/dist/index9.d.ts.map +1 -1
  304. package/dist/layouts/Container/index.d.cts +1 -1
  305. package/dist/layouts/Container/index.d.ts +1 -1
  306. package/dist/layouts/MultiColumn/index.d.cts +1 -1
  307. package/dist/layouts/MultiColumn/index.d.ts +1 -1
  308. package/dist/layouts/PageBackground/index.d.cts +1 -1
  309. package/dist/layouts/PageBackground/index.d.ts +1 -1
  310. package/dist/layouts/Stack/index.d.cts +1 -1
  311. package/dist/layouts/Stack/index.d.ts +1 -1
  312. package/dist/layouts/TwoColumn/index.d.cts +1 -1
  313. package/dist/layouts/TwoColumn/index.d.ts +1 -1
  314. package/dist/layouts/index.d.cts +5 -5
  315. package/dist/layouts/index.d.ts +5 -5
  316. package/dist/patterns/DataTable/index.d.cts +3 -3
  317. package/dist/patterns/DataTable/index.d.cts.map +1 -1
  318. package/dist/patterns/DataTable/index.d.ts +3 -3
  319. package/dist/patterns/DataTable/index.d.ts.map +1 -1
  320. package/dist/patterns/Footer/index.d.cts +7 -7
  321. package/dist/patterns/Footer/index.d.ts +7 -7
  322. package/dist/patterns/Footer/index.d.ts.map +1 -1
  323. package/dist/patterns/Header/index.d.cts +1 -1
  324. package/dist/patterns/Header/index.d.ts +1 -1
  325. package/dist/patterns/MediaObject/index.d.cts +14 -14
  326. package/dist/patterns/MediaObject/index.d.cts.map +1 -1
  327. package/dist/patterns/MediaObject/index.d.ts +14 -14
  328. package/dist/patterns/NavRail/index.d.cts +1 -1
  329. package/dist/patterns/NavRail/index.d.ts +1 -1
  330. package/dist/patterns/SectionCard/index.d.cts +2 -2
  331. package/dist/patterns/SectionCard/index.d.ts +2 -2
  332. package/dist/patterns/SectionCard/index.d.ts.map +1 -1
  333. package/dist/patterns/SectionHeading/index.d.cts +3 -3
  334. package/dist/patterns/SectionHeading/index.d.ts +3 -3
  335. package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
  336. package/dist/patterns/index.d.cts +2 -2
  337. package/dist/patterns/index.d.ts +2 -2
  338. package/dist/primitives/Checkbox/index.cjs +1 -1
  339. package/dist/primitives/Checkbox/index.cjs.map +1 -1
  340. package/dist/primitives/Checkbox/index.d.cts +1 -1
  341. package/dist/primitives/Checkbox/index.d.ts +1 -1
  342. package/dist/primitives/Checkbox/index.js +1 -1
  343. package/dist/primitives/Checkbox/index.js.map +1 -1
  344. package/dist/primitives/CheckboxTree/index.d.cts +1 -1
  345. package/dist/primitives/CheckboxTree/index.d.ts +1 -1
  346. package/dist/primitives/CircularProgress/index.cjs +106 -0
  347. package/dist/primitives/CircularProgress/index.cjs.map +1 -0
  348. package/dist/primitives/CircularProgress/index.d.cts +2 -0
  349. package/dist/primitives/CircularProgress/index.d.ts +2 -0
  350. package/dist/primitives/CircularProgress/index.js +105 -0
  351. package/dist/primitives/CircularProgress/index.js.map +1 -0
  352. package/dist/primitives/Collapsible/index.d.cts +1 -1
  353. package/dist/primitives/Collapsible/index.d.ts +1 -1
  354. package/dist/primitives/Combobox/index.cjs +210 -0
  355. package/dist/primitives/Combobox/index.cjs.map +1 -0
  356. package/dist/primitives/Combobox/index.d.cts +2 -0
  357. package/dist/primitives/Combobox/index.d.ts +2 -0
  358. package/dist/primitives/Combobox/index.js +199 -0
  359. package/dist/primitives/Combobox/index.js.map +1 -0
  360. package/dist/primitives/Command/index.d.cts +1 -1
  361. package/dist/primitives/Command/index.d.ts +1 -1
  362. package/dist/primitives/ContextMenu/index.d.cts +1 -1
  363. package/dist/primitives/ContextMenu/index.d.ts +1 -1
  364. package/dist/primitives/Credits/index.d.cts +1 -1
  365. package/dist/primitives/Credits/index.d.ts +1 -1
  366. package/dist/primitives/Dialog/index.d.cts +1 -1
  367. package/dist/primitives/Dialog/index.d.ts +1 -1
  368. package/dist/primitives/Drawer/index.cjs +34 -2
  369. package/dist/primitives/Drawer/index.cjs.map +1 -1
  370. package/dist/primitives/Drawer/index.d.cts +1 -1
  371. package/dist/primitives/Drawer/index.d.ts +1 -1
  372. package/dist/primitives/Drawer/index.js +34 -2
  373. package/dist/primitives/Drawer/index.js.map +1 -1
  374. package/dist/primitives/DropdownMenu/index.d.cts +1 -1
  375. package/dist/primitives/DropdownMenu/index.d.ts +1 -1
  376. package/dist/primitives/Empty/index.d.cts +1 -1
  377. package/dist/primitives/Empty/index.d.ts +1 -1
  378. package/dist/primitives/Field/index.d.cts +1 -1
  379. package/dist/primitives/Field/index.d.ts +1 -1
  380. package/dist/primitives/FileUpload/index.cjs +354 -0
  381. package/dist/primitives/FileUpload/index.cjs.map +1 -0
  382. package/dist/primitives/FileUpload/index.d.cts +2 -0
  383. package/dist/primitives/FileUpload/index.d.ts +2 -0
  384. package/dist/primitives/FileUpload/index.js +351 -0
  385. package/dist/primitives/FileUpload/index.js.map +1 -0
  386. package/dist/primitives/Form/index.d.cts +1 -1
  387. package/dist/primitives/Form/index.d.ts +1 -1
  388. package/dist/primitives/Heading/index.d.cts +1 -1
  389. package/dist/primitives/Heading/index.d.ts +1 -1
  390. package/dist/primitives/HoverCard/index.d.cts +1 -1
  391. package/dist/primitives/HoverCard/index.d.ts +1 -1
  392. package/dist/primitives/Icon/index.d.cts +1 -1
  393. package/dist/primitives/Icon/index.d.ts +1 -1
  394. package/dist/primitives/InfoBanner/index.d.cts +1 -1
  395. package/dist/primitives/InfoBanner/index.d.ts +1 -1
  396. package/dist/primitives/Input/index.d.cts +1 -1
  397. package/dist/primitives/Input/index.d.ts +1 -1
  398. package/dist/primitives/InputGroup/index.d.cts +1 -1
  399. package/dist/primitives/InputGroup/index.d.ts +1 -1
  400. package/dist/primitives/InputOtp/index.d.cts +1 -1
  401. package/dist/primitives/InputOtp/index.d.ts +1 -1
  402. package/dist/primitives/Item/index.d.cts +1 -1
  403. package/dist/primitives/Item/index.d.ts +1 -1
  404. package/dist/primitives/Kbd/index.d.cts +1 -1
  405. package/dist/primitives/Kbd/index.d.ts +1 -1
  406. package/dist/primitives/Label/index.d.cts +1 -1
  407. package/dist/primitives/Label/index.d.ts +1 -1
  408. package/dist/primitives/Link/index.d.cts +1 -1
  409. package/dist/primitives/Link/index.d.ts +1 -1
  410. package/dist/primitives/Logo/index.d.cts +1 -1
  411. package/dist/primitives/Logo/index.d.ts +1 -1
  412. package/dist/primitives/Menubar/index.d.cts +1 -1
  413. package/dist/primitives/Menubar/index.d.ts +1 -1
  414. package/dist/primitives/Mosaic/index.cjs +4 -0
  415. package/dist/primitives/Mosaic/index.d.cts +2 -0
  416. package/dist/primitives/Mosaic/index.d.ts +2 -0
  417. package/dist/primitives/Mosaic/index.js +2 -0
  418. package/dist/primitives/NativeSelect/index.d.cts +1 -1
  419. package/dist/primitives/NativeSelect/index.d.ts +1 -1
  420. package/dist/primitives/NavRail/index.d.cts +2 -2
  421. package/dist/primitives/NavRail/index.d.ts +2 -2
  422. package/dist/primitives/NavigationMenu/index.d.cts +1 -1
  423. package/dist/primitives/NavigationMenu/index.d.ts +1 -1
  424. package/dist/primitives/NotchedCard/index.cjs +390 -0
  425. package/dist/primitives/NotchedCard/index.cjs.map +1 -0
  426. package/dist/primitives/NotchedCard/index.d.cts +2 -0
  427. package/dist/primitives/NotchedCard/index.d.ts +2 -0
  428. package/dist/primitives/NotchedCard/index.js +385 -0
  429. package/dist/primitives/NotchedCard/index.js.map +1 -0
  430. package/dist/primitives/Pagination/index.d.cts +1 -1
  431. package/dist/primitives/Pagination/index.d.ts +1 -1
  432. package/dist/primitives/Popover/index.d.cts +1 -1
  433. package/dist/primitives/Popover/index.d.ts +1 -1
  434. package/dist/primitives/Progress/index.d.cts +1 -1
  435. package/dist/primitives/Progress/index.d.ts +1 -1
  436. package/dist/primitives/RadioGroup/index.cjs +1 -1
  437. package/dist/primitives/RadioGroup/index.cjs.map +1 -1
  438. package/dist/primitives/RadioGroup/index.d.cts +1 -1
  439. package/dist/primitives/RadioGroup/index.d.ts +1 -1
  440. package/dist/primitives/RadioGroup/index.js +1 -1
  441. package/dist/primitives/RadioGroup/index.js.map +1 -1
  442. package/dist/primitives/Resizable/index.d.cts +1 -1
  443. package/dist/primitives/Resizable/index.d.ts +1 -1
  444. package/dist/primitives/ScrollArea/index.d.cts +1 -1
  445. package/dist/primitives/ScrollArea/index.d.ts +1 -1
  446. package/dist/primitives/Select/index.d.cts +1 -1
  447. package/dist/primitives/Select/index.d.ts +1 -1
  448. package/dist/primitives/Sheet/index.cjs +34 -2
  449. package/dist/primitives/Sheet/index.cjs.map +1 -1
  450. package/dist/primitives/Sheet/index.d.cts +1 -1
  451. package/dist/primitives/Sheet/index.d.ts +1 -1
  452. package/dist/primitives/Sheet/index.js +34 -2
  453. package/dist/primitives/Sheet/index.js.map +1 -1
  454. package/dist/primitives/Sidebar/index.d.cts +1 -1
  455. package/dist/primitives/Sidebar/index.d.ts +1 -1
  456. package/dist/primitives/Skeleton/index.d.cts +1 -1
  457. package/dist/primitives/Skeleton/index.d.ts +1 -1
  458. package/dist/primitives/Slider/index.d.cts +1 -1
  459. package/dist/primitives/Slider/index.d.ts +1 -1
  460. package/dist/primitives/Sonner/index.d.cts +1 -1
  461. package/dist/primitives/Sonner/index.d.ts +1 -1
  462. package/dist/primitives/Spinner/index.d.cts +1 -1
  463. package/dist/primitives/Spinner/index.d.ts +1 -1
  464. package/dist/primitives/Switch/index.d.cts +1 -1
  465. package/dist/primitives/Switch/index.d.ts +1 -1
  466. package/dist/primitives/Table/index.d.cts +1 -1
  467. package/dist/primitives/Table/index.d.ts +1 -1
  468. package/dist/primitives/Tabs/index.cjs +153 -10
  469. package/dist/primitives/Tabs/index.cjs.map +1 -1
  470. package/dist/primitives/Tabs/index.d.cts +1 -1
  471. package/dist/primitives/Tabs/index.d.ts +1 -1
  472. package/dist/primitives/Tabs/index.js +153 -10
  473. package/dist/primitives/Tabs/index.js.map +1 -1
  474. package/dist/primitives/Text/index.d.cts +1 -1
  475. package/dist/primitives/Text/index.d.ts +1 -1
  476. package/dist/primitives/Textarea/index.d.cts +1 -1
  477. package/dist/primitives/Textarea/index.d.ts +1 -1
  478. package/dist/primitives/ThemeProvider/index.d.cts +1 -1
  479. package/dist/primitives/ThemeProvider/index.d.ts +1 -1
  480. package/dist/primitives/Toggle/index.d.cts +1 -1
  481. package/dist/primitives/Toggle/index.d.ts +1 -1
  482. package/dist/primitives/ToggleGroup/index.d.cts +1 -1
  483. package/dist/primitives/ToggleGroup/index.d.ts +1 -1
  484. package/dist/primitives/Tooltip/index.d.cts +1 -1
  485. package/dist/primitives/Tooltip/index.d.ts +1 -1
  486. package/dist/primitives/index.cjs +25 -4
  487. package/dist/primitives/index.d.cts +56 -51
  488. package/dist/primitives/index.d.ts +56 -51
  489. package/dist/primitives/index.js +10 -5
  490. package/dist/styles/tokens/mode-dark.css +1 -1
  491. package/package.json +1 -1
  492. package/dist/index48.d.cts.map +0 -1
  493. package/dist/index48.d.ts.map +0 -1
@@ -0,0 +1,385 @@
1
+ import { t as cn } from "../../cn.js";
2
+ import * as React from "react";
3
+ import { jsx, jsxs } from "react/jsx-runtime";
4
+ //#region src/primitives/NotchedCard/NotchedCard.tsx
5
+ const CORNER_KEYS = [
6
+ "tl",
7
+ "tr",
8
+ "br",
9
+ "bl"
10
+ ];
11
+ const useIsoLayoutEffect = typeof window !== "undefined" ? React.useLayoutEffect : React.useEffect;
12
+ const round2 = (v) => Math.round(v * 100) / 100;
13
+ /**
14
+ * Builds the notched outline as an SVG path, walking clockwise from the top
15
+ * edge. Convex turns sweep outward (sweep=1); the inner corner of each notch
16
+ * is a concave fillet (sweep=0). Exported for testing — not part of the
17
+ * typical component API.
18
+ */
19
+ function buildNotchedCardPath({ w, h, radius, notchRadius, notches }) {
20
+ if (w <= 0 || h <= 0) return "";
21
+ const R = Math.max(0, Math.min(radius, w / 2, h / 2));
22
+ const arc = (rr, x, y, sweep) => `A ${round2(rr)} ${round2(rr)} 0 0 ${sweep} ${round2(x)} ${round2(y)}`;
23
+ const line = (x, y) => `L ${round2(x)} ${round2(y)}`;
24
+ const pt = ([x, y]) => `${round2(x)} ${round2(y)}`;
25
+ const prep = (c) => {
26
+ if (!c || c.w <= 0 || c.h <= 0) return null;
27
+ const nw = Math.min(c.w, w - 2 * R);
28
+ const nh = Math.min(c.h, h - 2 * R);
29
+ if (nw <= R || nh <= R) return null;
30
+ return {
31
+ nw,
32
+ nh,
33
+ r: Math.max(0, Math.min(notchRadius, nw - R, nh - R))
34
+ };
35
+ };
36
+ const tl = prep(notches.tl);
37
+ const tr = prep(notches.tr);
38
+ const br = prep(notches.br);
39
+ const bl = prep(notches.bl);
40
+ const corner = {
41
+ tl: tl ? {
42
+ entry: [0, tl.nh + R],
43
+ exit: [tl.nw + R, 0],
44
+ cmds: [
45
+ arc(R, R, tl.nh, 1),
46
+ line(tl.nw - tl.r, tl.nh),
47
+ arc(tl.r, tl.nw, tl.nh - tl.r, 0),
48
+ line(tl.nw, R),
49
+ arc(R, tl.nw + R, 0, 1)
50
+ ]
51
+ } : {
52
+ entry: [0, R],
53
+ exit: [R, 0],
54
+ cmds: [arc(R, R, 0, 1)]
55
+ },
56
+ tr: tr ? {
57
+ entry: [w - tr.nw - R, 0],
58
+ exit: [w, tr.nh + R],
59
+ cmds: [
60
+ arc(R, w - tr.nw, R, 1),
61
+ line(w - tr.nw, tr.nh - tr.r),
62
+ arc(tr.r, w - tr.nw + tr.r, tr.nh, 0),
63
+ line(w - R, tr.nh),
64
+ arc(R, w, tr.nh + R, 1)
65
+ ]
66
+ } : {
67
+ entry: [w - R, 0],
68
+ exit: [w, R],
69
+ cmds: [arc(R, w, R, 1)]
70
+ },
71
+ br: br ? {
72
+ entry: [w, h - br.nh - R],
73
+ exit: [w - br.nw - R, h],
74
+ cmds: [
75
+ arc(R, w - R, h - br.nh, 1),
76
+ line(w - br.nw + br.r, h - br.nh),
77
+ arc(br.r, w - br.nw, h - br.nh + br.r, 0),
78
+ line(w - br.nw, h - R),
79
+ arc(R, w - br.nw - R, h, 1)
80
+ ]
81
+ } : {
82
+ entry: [w, h - R],
83
+ exit: [w - R, h],
84
+ cmds: [arc(R, w - R, h, 1)]
85
+ },
86
+ bl: bl ? {
87
+ entry: [bl.nw + R, h],
88
+ exit: [0, h - bl.nh - R],
89
+ cmds: [
90
+ arc(R, bl.nw, h - R, 1),
91
+ line(bl.nw, h - bl.nh + bl.r),
92
+ arc(bl.r, bl.nw - bl.r, h - bl.nh, 0),
93
+ line(R, h - bl.nh),
94
+ arc(R, 0, h - bl.nh - R, 1)
95
+ ]
96
+ } : {
97
+ entry: [R, h],
98
+ exit: [0, h - R],
99
+ cmds: [arc(R, 0, h - R, 1)]
100
+ }
101
+ };
102
+ return [
103
+ `M ${pt(corner.tl.exit)}`,
104
+ line(...corner.tr.entry),
105
+ ...corner.tr.cmds,
106
+ line(...corner.br.entry),
107
+ ...corner.br.cmds,
108
+ line(...corner.bl.entry),
109
+ ...corner.bl.cmds,
110
+ line(...corner.tl.entry),
111
+ ...corner.tl.cmds,
112
+ "Z"
113
+ ].join(" ");
114
+ }
115
+ const sameBox = (a, b) => a === b || !!a && !!b && a.w === b.w && a.h === b.h;
116
+ /**
117
+ * Style for an invisible float that reserves a side's notched corners inside
118
+ * the content flow, so flowing content wraps around the cutouts instead of
119
+ * running under them. `shape-inside` never shipped in any browser; a float
120
+ * with `shape-outside` is the standard equivalent. A top-only corner is just
121
+ * the float's own box; a bottom corner needs the float to span the content
122
+ * height with a polygon covering only the corner bands (joined by a zero-width
123
+ * "keyhole" along the box edge, which keeps the polygon simple and valid).
124
+ */
125
+ function sideSpacerStyle(side, rects, innerH) {
126
+ const top = rects.top && rects.top.w > 0 && rects.top.h > 0 ? rects.top : null;
127
+ const bottom = rects.bottom && rects.bottom.w > 0 && rects.bottom.h > 0 ? rects.bottom : null;
128
+ if (!top && !bottom) return null;
129
+ const base = {
130
+ float: side,
131
+ pointerEvents: "none"
132
+ };
133
+ if (!bottom) return {
134
+ ...base,
135
+ width: top.w,
136
+ height: top.h
137
+ };
138
+ const px = (v) => `${round2(v)}px`;
139
+ const bandTop = `calc(100% - ${px(bottom.h)})`;
140
+ const shape = side === "left" ? top ? `polygon(0 0, ${px(top.w)} 0, ${px(top.w)} ${px(top.h)}, 0 ${px(top.h)}, 0 ${bandTop}, ${px(bottom.w)} ${bandTop}, ${px(bottom.w)} 100%, 0 100%)` : `polygon(0 ${bandTop}, ${px(bottom.w)} ${bandTop}, ${px(bottom.w)} 100%, 0 100%)` : top ? `polygon(100% 0, calc(100% - ${px(top.w)}) 0, calc(100% - ${px(top.w)}) ${px(top.h)}, 100% ${px(top.h)}, 100% ${bandTop}, calc(100% - ${px(bottom.w)}) ${bandTop}, calc(100% - ${px(bottom.w)}) 100%, 100% 100%)` : `polygon(100% ${bandTop}, calc(100% - ${px(bottom.w)}) ${bandTop}, calc(100% - ${px(bottom.w)}) 100%, 100% 100%)`;
141
+ return {
142
+ ...base,
143
+ width: Math.max(top?.w ?? 0, bottom.w),
144
+ height: Math.max(innerH, (top?.h ?? 0) + bottom.h),
145
+ shapeOutside: shape
146
+ };
147
+ }
148
+ const notchedCardVariants = {
149
+ default: {
150
+ background: "bg-glass-none-bg",
151
+ shadow: "drop-shadow-sm",
152
+ text: "text-primary-txt",
153
+ borderedByDefault: true
154
+ },
155
+ muted: {
156
+ background: "bg-muted-bg",
157
+ shadow: "",
158
+ text: "text-primary-txt",
159
+ borderedByDefault: true
160
+ },
161
+ glass: {
162
+ background: "bg-glass-40-bg backdrop-blur-glass",
163
+ shadow: "",
164
+ text: "text-primary-txt",
165
+ borderedByDefault: false
166
+ },
167
+ brand: {
168
+ background: "bg-[image:linear-gradient(to_right,var(--theme-brand-700),var(--theme-brand-500-primary))]",
169
+ shadow: "",
170
+ text: "text-white",
171
+ borderedByDefault: false
172
+ },
173
+ inverted: {
174
+ background: "bg-primary-invert-bg",
175
+ shadow: "",
176
+ text: "text-primary-invert-txt",
177
+ borderedByDefault: false
178
+ }
179
+ };
180
+ /** Card with corner slots that notch the background around their content. */
181
+ function NotchedCard({ children, topLeftComponent, topRightComponent, bottomLeftComponent, bottomRightComponent, variant = "default", backgroundImage, backgroundImageOpacity = .8, radius = 16, notchRadius = 12, notchGap = 12, padding = 24, avoidNotches = true, bordered, className, backgroundClassName, contentClassName, style, ...props }) {
182
+ const rootRef = React.useRef(null);
183
+ const cornerRefs = {
184
+ tl: React.useRef(null),
185
+ tr: React.useRef(null),
186
+ br: React.useRef(null),
187
+ bl: React.useRef(null)
188
+ };
189
+ const contentRef = React.useRef(null);
190
+ const [box, setBox] = React.useState({
191
+ w: 0,
192
+ h: 0
193
+ });
194
+ const [contentH, setContentH] = React.useState(0);
195
+ const [sizes, setSizes] = React.useState({
196
+ tl: null,
197
+ tr: null,
198
+ br: null,
199
+ bl: null
200
+ });
201
+ const cornerSlots = [
202
+ [
203
+ "tl",
204
+ topLeftComponent,
205
+ {
206
+ top: 0,
207
+ left: 0
208
+ }
209
+ ],
210
+ [
211
+ "tr",
212
+ topRightComponent,
213
+ {
214
+ top: 0,
215
+ right: 0
216
+ }
217
+ ],
218
+ [
219
+ "br",
220
+ bottomRightComponent,
221
+ {
222
+ bottom: 0,
223
+ right: 0
224
+ }
225
+ ],
226
+ [
227
+ "bl",
228
+ bottomLeftComponent,
229
+ {
230
+ bottom: 0,
231
+ left: 0
232
+ }
233
+ ]
234
+ ];
235
+ const hasCorners = cornerSlots.some(([, node]) => node != null && node !== false);
236
+ const measure = React.useCallback(() => {
237
+ const root = rootRef.current;
238
+ if (!root) return;
239
+ setBox((prev) => {
240
+ const next = {
241
+ w: root.offsetWidth,
242
+ h: root.offsetHeight
243
+ };
244
+ return sameBox(prev, next) ? prev : next;
245
+ });
246
+ setContentH((prev) => {
247
+ const next = contentRef.current?.offsetHeight ?? 0;
248
+ return prev === next ? prev : next;
249
+ });
250
+ setSizes((prev) => {
251
+ const next = {};
252
+ let changed = false;
253
+ for (const k of CORNER_KEYS) {
254
+ const el = cornerRefs[k].current;
255
+ next[k] = el ? {
256
+ w: el.offsetWidth,
257
+ h: el.offsetHeight
258
+ } : null;
259
+ if (!sameBox(prev[k], next[k])) changed = true;
260
+ }
261
+ return changed ? next : prev;
262
+ });
263
+ }, []);
264
+ useIsoLayoutEffect(() => {
265
+ if (!hasCorners) return;
266
+ measure();
267
+ if (typeof ResizeObserver === "undefined") return;
268
+ const ro = new ResizeObserver(measure);
269
+ if (rootRef.current) ro.observe(rootRef.current);
270
+ if (contentRef.current) ro.observe(contentRef.current);
271
+ for (const k of CORNER_KEYS) {
272
+ const el = cornerRefs[k].current;
273
+ if (el) ro.observe(el);
274
+ }
275
+ return () => ro.disconnect();
276
+ }, [
277
+ measure,
278
+ hasCorners,
279
+ topLeftComponent,
280
+ topRightComponent,
281
+ bottomRightComponent,
282
+ bottomLeftComponent
283
+ ]);
284
+ const notches = Object.fromEntries(CORNER_KEYS.map((k) => [k, sizes[k] ? {
285
+ w: sizes[k].w + notchGap,
286
+ h: sizes[k].h + notchGap
287
+ } : null]));
288
+ const path = hasCorners ? buildNotchedCardPath({
289
+ w: box.w,
290
+ h: box.h,
291
+ radius,
292
+ notchRadius,
293
+ notches
294
+ }) : "";
295
+ const styles = notchedCardVariants[variant];
296
+ const showBorder = bordered ?? styles.borderedByDefault;
297
+ const inset = (v) => Math.max(0, (v ?? 0) - padding + notchGap);
298
+ const toRect = (notch) => notch ? {
299
+ w: inset(notch.w),
300
+ h: inset(notch.h)
301
+ } : null;
302
+ const spacerSides = [["left", {
303
+ top: toRect(notches.tl),
304
+ bottom: toRect(notches.bl)
305
+ }], ["right", {
306
+ top: toRect(notches.tr),
307
+ bottom: toRect(notches.br)
308
+ }]];
309
+ const innerH = Math.max(0, contentH - 2 * padding);
310
+ return /* @__PURE__ */ jsxs("div", {
311
+ ref: rootRef,
312
+ "data-slot": "notched-card",
313
+ "data-variant": variant,
314
+ className: cn("group relative isolate", styles.text, className),
315
+ style,
316
+ ...props,
317
+ children: [
318
+ /* @__PURE__ */ jsx("div", {
319
+ "aria-hidden": true,
320
+ className: cn("absolute inset-0 -z-10", styles.shadow),
321
+ children: /* @__PURE__ */ jsx("div", {
322
+ "data-slot": "notched-card-background",
323
+ className: cn("absolute inset-0 overflow-hidden", styles.background, backgroundClassName),
324
+ style: path ? {
325
+ clipPath: `path("${path}")`,
326
+ WebkitClipPath: `path("${path}")`
327
+ } : { borderRadius: radius },
328
+ children: backgroundImage && /* @__PURE__ */ jsx("img", {
329
+ src: backgroundImage,
330
+ alt: "",
331
+ className: "absolute inset-0 size-full object-cover",
332
+ style: { opacity: backgroundImageOpacity }
333
+ })
334
+ })
335
+ }),
336
+ showBorder && (path ? /* @__PURE__ */ jsx("svg", {
337
+ "aria-hidden": true,
338
+ "data-slot": "notched-card-border",
339
+ viewBox: `0 0 ${box.w} ${box.h}`,
340
+ width: box.w,
341
+ height: box.h,
342
+ className: "pointer-events-none absolute inset-0",
343
+ focusable: "false",
344
+ children: /* @__PURE__ */ jsx("path", {
345
+ d: path,
346
+ fill: "none",
347
+ strokeWidth: 1,
348
+ className: "stroke-primary-border"
349
+ })
350
+ }) : /* @__PURE__ */ jsx("div", {
351
+ "aria-hidden": true,
352
+ "data-slot": "notched-card-border",
353
+ className: "pointer-events-none absolute inset-0 border border-primary-border",
354
+ style: { borderRadius: radius }
355
+ })),
356
+ /* @__PURE__ */ jsxs("div", {
357
+ ref: contentRef,
358
+ "data-slot": "notched-card-content",
359
+ className: cn("relative", contentClassName),
360
+ style: { padding },
361
+ children: [avoidNotches && spacerSides.map(([side, rects]) => {
362
+ const spacerStyle = sideSpacerStyle(side, rects, innerH);
363
+ return spacerStyle ? /* @__PURE__ */ jsx("div", {
364
+ "aria-hidden": true,
365
+ "data-slot": "notched-card-spacer",
366
+ "data-side": side,
367
+ style: spacerStyle
368
+ }, side) : null;
369
+ }), children]
370
+ }),
371
+ cornerSlots.map(([key, node, pos]) => node != null && node !== false ? /* @__PURE__ */ jsx("div", {
372
+ ref: cornerRefs[key],
373
+ "data-slot": "notched-card-corner",
374
+ "data-corner": key,
375
+ className: "absolute flex w-max items-center",
376
+ style: pos,
377
+ children: node
378
+ }, key) : null)
379
+ ]
380
+ });
381
+ }
382
+ //#endregion
383
+ export { NotchedCard, buildNotchedCardPath, notchedCardVariants };
384
+
385
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/NotchedCard/NotchedCard.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/* NotchedCard — a card whose background is a clipped shape. Any corner that\n receives content gets a rectangular bite taken out of the background, sized\n to that content, with a concave fillet at the inner corner. With no corner\n content it renders as a plain rounded rectangle (no measuring, no clip). */\n\nconst CORNER_KEYS = [\"tl\", \"tr\", \"br\", \"bl\"] as const;\ntype CornerKey = (typeof CORNER_KEYS)[number];\n\ntype CornerBox = { w: number; h: number };\ntype CornerSizes = Record<CornerKey, CornerBox | null>;\n\n// useLayoutEffect on the client, useEffect during SSR (avoids the React warning).\nconst useIsoLayoutEffect = typeof window !== \"undefined\" ? React.useLayoutEffect : React.useEffect;\n\nconst round2 = (v: number) => Math.round(v * 100) / 100;\n\n/**\n * Builds the notched outline as an SVG path, walking clockwise from the top\n * edge. Convex turns sweep outward (sweep=1); the inner corner of each notch\n * is a concave fillet (sweep=0). Exported for testing — not part of the\n * typical component API.\n */\nfunction buildNotchedCardPath({\n w,\n h,\n radius,\n notchRadius,\n notches,\n}: {\n w: number;\n h: number;\n radius: number;\n notchRadius: number;\n notches: CornerSizes;\n}): string {\n if (w <= 0 || h <= 0) return \"\";\n\n const R = Math.max(0, Math.min(radius, w / 2, h / 2));\n const arc = (rr: number, x: number, y: number, sweep: 0 | 1) =>\n `A ${round2(rr)} ${round2(rr)} 0 0 ${sweep} ${round2(x)} ${round2(y)}`;\n const line = (x: number, y: number) => `L ${round2(x)} ${round2(y)}`;\n const pt = ([x, y]: readonly [number, number]) => `${round2(x)} ${round2(y)}`;\n\n // A notch only survives if there is room for it between the outer radii.\n const prep = (c: CornerBox | null) => {\n if (!c || c.w <= 0 || c.h <= 0) return null;\n const nw = Math.min(c.w, w - 2 * R);\n const nh = Math.min(c.h, h - 2 * R);\n if (nw <= R || nh <= R) return null;\n const r = Math.max(0, Math.min(notchRadius, nw - R, nh - R));\n return { nw, nh, r };\n };\n\n type Corner = {\n entry: readonly [number, number];\n exit: readonly [number, number];\n cmds: string[];\n };\n\n const tl = prep(notches.tl);\n const tr = prep(notches.tr);\n const br = prep(notches.br);\n const bl = prep(notches.bl);\n\n const corner: Record<CornerKey, Corner> = {\n tl: tl\n ? {\n entry: [0, tl.nh + R],\n exit: [tl.nw + R, 0],\n cmds: [\n arc(R, R, tl.nh, 1),\n line(tl.nw - tl.r, tl.nh),\n arc(tl.r, tl.nw, tl.nh - tl.r, 0),\n line(tl.nw, R),\n arc(R, tl.nw + R, 0, 1),\n ],\n }\n : { entry: [0, R], exit: [R, 0], cmds: [arc(R, R, 0, 1)] },\n tr: tr\n ? {\n entry: [w - tr.nw - R, 0],\n exit: [w, tr.nh + R],\n cmds: [\n arc(R, w - tr.nw, R, 1),\n line(w - tr.nw, tr.nh - tr.r),\n arc(tr.r, w - tr.nw + tr.r, tr.nh, 0),\n line(w - R, tr.nh),\n arc(R, w, tr.nh + R, 1),\n ],\n }\n : { entry: [w - R, 0], exit: [w, R], cmds: [arc(R, w, R, 1)] },\n br: br\n ? {\n entry: [w, h - br.nh - R],\n exit: [w - br.nw - R, h],\n cmds: [\n arc(R, w - R, h - br.nh, 1),\n line(w - br.nw + br.r, h - br.nh),\n arc(br.r, w - br.nw, h - br.nh + br.r, 0),\n line(w - br.nw, h - R),\n arc(R, w - br.nw - R, h, 1),\n ],\n }\n : { entry: [w, h - R], exit: [w - R, h], cmds: [arc(R, w - R, h, 1)] },\n bl: bl\n ? {\n entry: [bl.nw + R, h],\n exit: [0, h - bl.nh - R],\n cmds: [\n arc(R, bl.nw, h - R, 1),\n line(bl.nw, h - bl.nh + bl.r),\n arc(bl.r, bl.nw - bl.r, h - bl.nh, 0),\n line(R, h - bl.nh),\n arc(R, 0, h - bl.nh - R, 1),\n ],\n }\n : { entry: [R, h], exit: [0, h - R], cmds: [arc(R, 0, h - R, 1)] },\n };\n\n return [\n `M ${pt(corner.tl.exit)}`,\n line(...corner.tr.entry),\n ...corner.tr.cmds,\n line(...corner.br.entry),\n ...corner.br.cmds,\n line(...corner.bl.entry),\n ...corner.bl.cmds,\n line(...corner.tl.entry),\n ...corner.tl.cmds,\n \"Z\",\n ].join(\" \");\n}\n\nconst sameBox = (a: CornerBox | null, b: CornerBox | null) =>\n a === b || (!!a && !!b && a.w === b.w && a.h === b.h);\n\ntype SideRects = { top: CornerBox | null; bottom: CornerBox | null };\n\n/**\n * Style for an invisible float that reserves a side's notched corners inside\n * the content flow, so flowing content wraps around the cutouts instead of\n * running under them. `shape-inside` never shipped in any browser; a float\n * with `shape-outside` is the standard equivalent. A top-only corner is just\n * the float's own box; a bottom corner needs the float to span the content\n * height with a polygon covering only the corner bands (joined by a zero-width\n * \"keyhole\" along the box edge, which keeps the polygon simple and valid).\n */\nfunction sideSpacerStyle(\n side: \"left\" | \"right\",\n rects: SideRects,\n innerH: number,\n): React.CSSProperties | null {\n const top = rects.top && rects.top.w > 0 && rects.top.h > 0 ? rects.top : null;\n const bottom = rects.bottom && rects.bottom.w > 0 && rects.bottom.h > 0 ? rects.bottom : null;\n if (!top && !bottom) return null;\n\n const base: React.CSSProperties = { float: side, pointerEvents: \"none\" };\n if (!bottom) {\n // Type-narrowing: !bottom && the guard above means top is set.\n return { ...base, width: (top as CornerBox).w, height: (top as CornerBox).h };\n }\n\n const px = (v: number) => `${round2(v)}px`;\n const bandTop = `calc(100% - ${px(bottom.h)})`;\n const shape =\n side === \"left\"\n ? top\n ? `polygon(0 0, ${px(top.w)} 0, ${px(top.w)} ${px(top.h)}, 0 ${px(top.h)}, 0 ${bandTop}, ${px(bottom.w)} ${bandTop}, ${px(bottom.w)} 100%, 0 100%)`\n : `polygon(0 ${bandTop}, ${px(bottom.w)} ${bandTop}, ${px(bottom.w)} 100%, 0 100%)`\n : top\n ? `polygon(100% 0, calc(100% - ${px(top.w)}) 0, calc(100% - ${px(top.w)}) ${px(top.h)}, 100% ${px(top.h)}, 100% ${bandTop}, calc(100% - ${px(bottom.w)}) ${bandTop}, calc(100% - ${px(bottom.w)}) 100%, 100% 100%)`\n : `polygon(100% ${bandTop}, calc(100% - ${px(bottom.w)}) ${bandTop}, calc(100% - ${px(bottom.w)}) 100%, 100% 100%)`;\n\n return {\n ...base,\n width: Math.max(top?.w ?? 0, bottom.w),\n height: Math.max(innerH, (top?.h ?? 0) + bottom.h),\n shapeOutside: shape,\n };\n}\n\n// Variant fill goes on the clipped background layer; text colour goes on the\n// root so corner slots and content inherit it. Shadows must be drop-shadow\n// (a filter, applied to the layer's parent) — box-shadow gets clipped away.\nconst notchedCardVariants = {\n default: {\n background: \"bg-glass-none-bg\",\n shadow: \"drop-shadow-sm\",\n text: \"text-primary-txt\",\n borderedByDefault: true,\n },\n muted: {\n background: \"bg-muted-bg\",\n shadow: \"\",\n text: \"text-primary-txt\",\n borderedByDefault: true,\n },\n // Translucent glass over textured backgrounds — blur is part of the deal.\n glass: {\n background: \"bg-glass-40-bg backdrop-blur-glass\",\n shadow: \"\",\n text: \"text-primary-txt\",\n borderedByDefault: false,\n },\n // Active product's brand gradient, matching Card's brand variant.\n brand: {\n background:\n \"bg-[image:linear-gradient(to_right,var(--theme-brand-700),var(--theme-brand-500-primary))]\",\n shadow: \"\",\n text: \"text-white\",\n borderedByDefault: false,\n },\n inverted: {\n background: \"bg-primary-invert-bg\",\n shadow: \"\",\n text: \"text-primary-invert-txt\",\n borderedByDefault: false,\n },\n} as const;\n\ntype NotchedCardVariant = keyof typeof notchedCardVariants;\n\ntype NotchedCardProps = React.ComponentProps<\"div\"> & {\n /** Content pinned to the top-left corner; its footprint is notched out of the background. */\n topLeftComponent?: React.ReactNode;\n /** Content pinned to the top-right corner; its footprint is notched out of the background. */\n topRightComponent?: React.ReactNode;\n /** Content pinned to the bottom-left corner; its footprint is notched out of the background. */\n bottomLeftComponent?: React.ReactNode;\n /** Content pinned to the bottom-right corner; its footprint is notched out of the background. */\n bottomRightComponent?: React.ReactNode;\n /** Background fill of the card surface. Default `default` (solid surface). */\n variant?: NotchedCardVariant;\n /** Image URL rendered as the card's background (object-fit: cover), slightly transparent. */\n backgroundImage?: string;\n /** Opacity of the background image. Default `0.8`. */\n backgroundImageOpacity?: number;\n /** Outer corner radius in px. Default `16`. */\n radius?: number;\n /** Concave fillet radius at each notch's inner corner in px. Default `12`. */\n notchRadius?: number;\n /** Gutter in px between corner content and the background edge. Default `12`. */\n notchGap?: number;\n /** Content padding in px. Default `24`. */\n padding?: number;\n /** Keep flowing content out of the notched corners via invisible float\n spacers. Needs flow (block/inline) content — set `false` if\n `contentClassName` turns the wrapper into a flex/grid container.\n Default `true`. */\n avoidNotches?: boolean;\n /** Draw the outline stroke. Defaults per variant (`default`/`muted` on, others off). */\n bordered?: boolean;\n /** Extra classes for the clipped background layer — set the fill here (e.g.\n `bg-…`, gradients). The layer sits behind the content, so plain `hover:`\n variants never fire on it; the root carries the `group` marker — use\n `group-hover:bg-…` for hover fills (plain `hover:` works on `className`,\n which styles the root itself). */\n backgroundClassName?: string;\n /** Extra classes for the content wrapper. */\n contentClassName?: string;\n};\n\n/** Card with corner slots that notch the background around their content. */\nfunction NotchedCard({\n children,\n topLeftComponent,\n topRightComponent,\n bottomLeftComponent,\n bottomRightComponent,\n variant = \"default\",\n backgroundImage,\n backgroundImageOpacity = 0.8,\n radius = 16,\n notchRadius = 12,\n notchGap = 12,\n padding = 24,\n avoidNotches = true,\n bordered,\n className,\n backgroundClassName,\n contentClassName,\n style,\n ...props\n}: NotchedCardProps) {\n const rootRef = React.useRef<HTMLDivElement>(null);\n const tlRef = React.useRef<HTMLDivElement>(null);\n const trRef = React.useRef<HTMLDivElement>(null);\n const brRef = React.useRef<HTMLDivElement>(null);\n const blRef = React.useRef<HTMLDivElement>(null);\n const cornerRefs: Record<CornerKey, React.RefObject<HTMLDivElement>> = {\n tl: tlRef,\n tr: trRef,\n br: brRef,\n bl: blRef,\n };\n\n const contentRef = React.useRef<HTMLDivElement>(null);\n\n const [box, setBox] = React.useState<CornerBox>({ w: 0, h: 0 });\n const [contentH, setContentH] = React.useState(0);\n const [sizes, setSizes] = React.useState<CornerSizes>({\n tl: null,\n tr: null,\n br: null,\n bl: null,\n });\n\n const cornerSlots: Array<[CornerKey, React.ReactNode, React.CSSProperties]> = [\n [\"tl\", topLeftComponent, { top: 0, left: 0 }],\n [\"tr\", topRightComponent, { top: 0, right: 0 }],\n [\"br\", bottomRightComponent, { bottom: 0, right: 0 }],\n [\"bl\", bottomLeftComponent, { bottom: 0, left: 0 }],\n ];\n const hasCorners = cornerSlots.some(([, node]) => node != null && node !== false);\n\n const measure = React.useCallback(() => {\n const root = rootRef.current;\n if (!root) return;\n setBox((prev) => {\n const next = { w: root.offsetWidth, h: root.offsetHeight };\n return sameBox(prev, next) ? prev : next;\n });\n setContentH((prev) => {\n const next = contentRef.current?.offsetHeight ?? 0;\n return prev === next ? prev : next;\n });\n setSizes((prev) => {\n const next = {} as CornerSizes;\n let changed = false;\n for (const k of CORNER_KEYS) {\n const el = cornerRefs[k].current;\n next[k] = el ? { w: el.offsetWidth, h: el.offsetHeight } : null;\n if (!sameBox(prev[k], next[k])) changed = true;\n }\n return changed ? next : prev;\n });\n }, []);\n\n useIsoLayoutEffect(() => {\n if (!hasCorners) return;\n measure();\n if (typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(measure);\n if (rootRef.current) ro.observe(rootRef.current);\n if (contentRef.current) ro.observe(contentRef.current);\n for (const k of CORNER_KEYS) {\n const el = cornerRefs[k].current;\n if (el) ro.observe(el);\n }\n return () => ro.disconnect();\n }, [\n measure,\n hasCorners,\n topLeftComponent,\n topRightComponent,\n bottomRightComponent,\n bottomLeftComponent,\n ]);\n\n // Corner content box + gutter = the bite taken out of the background.\n const notches = Object.fromEntries(\n CORNER_KEYS.map((k) => [\n k,\n sizes[k]\n ? { w: (sizes[k] as CornerBox).w + notchGap, h: (sizes[k] as CornerBox).h + notchGap }\n : null,\n ]),\n ) as CornerSizes;\n\n const path = hasCorners\n ? buildNotchedCardPath({ w: box.w, h: box.h, radius, notchRadius, notches })\n : \"\";\n\n const styles = notchedCardVariants[variant];\n const showBorder = bordered ?? styles.borderedByDefault;\n\n // Notch footprints translated into content-box coordinates, extended by\n // `notchGap` so flowing content keeps a gutter from the cut edges.\n const inset = (v?: number) => Math.max(0, (v ?? 0) - padding + notchGap);\n const toRect = (notch: CornerBox | null) =>\n notch ? { w: inset(notch.w), h: inset(notch.h) } : null;\n const spacerSides: Array<[\"left\" | \"right\", SideRects]> = [\n [\"left\", { top: toRect(notches.tl), bottom: toRect(notches.bl) }],\n [\"right\", { top: toRect(notches.tr), bottom: toRect(notches.br) }],\n ];\n const innerH = Math.max(0, contentH - 2 * padding);\n\n return (\n <div\n ref={rootRef}\n data-slot=\"notched-card\"\n data-variant={variant}\n className={cn(\"group relative isolate\", styles.text, className)}\n style={style}\n {...props}\n >\n {/* Background layer — the only thing that gets clipped. The wrapper owns\n the drop-shadow filter: filters apply before clipping, so a shadow on\n the clipped element itself would be cut away with it. */}\n <div aria-hidden className={cn(\"absolute inset-0 -z-10\", styles.shadow)}>\n <div\n data-slot=\"notched-card-background\"\n className={cn(\"absolute inset-0 overflow-hidden\", styles.background, backgroundClassName)}\n style={\n path\n ? { clipPath: `path(\"${path}\")`, WebkitClipPath: `path(\"${path}\")` }\n : { borderRadius: radius }\n }\n >\n {backgroundImage && (\n <img\n src={backgroundImage}\n alt=\"\"\n className=\"absolute inset-0 size-full object-cover\"\n style={{ opacity: backgroundImageOpacity }}\n />\n )}\n </div>\n </div>\n\n {/* Outline — stroked (not clipped) so it follows the notches and stays crisp. */}\n {showBorder &&\n (path ? (\n <svg\n aria-hidden\n data-slot=\"notched-card-border\"\n viewBox={`0 0 ${box.w} ${box.h}`}\n width={box.w}\n height={box.h}\n className=\"pointer-events-none absolute inset-0\"\n focusable=\"false\"\n >\n <path d={path} fill=\"none\" strokeWidth={1} className=\"stroke-primary-border\" />\n </svg>\n ) : (\n <div\n aria-hidden\n data-slot=\"notched-card-border\"\n className=\"pointer-events-none absolute inset-0 border border-primary-border\"\n style={{ borderRadius: radius }}\n />\n ))}\n\n {/* Content — uniform padding; float spacers keep flowing content out of\n the notched corners. */}\n <div\n ref={contentRef}\n data-slot=\"notched-card-content\"\n className={cn(\"relative\", contentClassName)}\n style={{ padding }}\n >\n {avoidNotches &&\n spacerSides.map(([side, rects]) => {\n const spacerStyle = sideSpacerStyle(side, rects, innerH);\n return spacerStyle ? (\n <div\n key={side}\n aria-hidden\n data-slot=\"notched-card-spacer\"\n data-side={side}\n style={spacerStyle}\n />\n ) : null;\n })}\n {children}\n </div>\n\n {/* Corner slots — outside the background, inside the cutouts. */}\n {cornerSlots.map(([key, node, pos]) =>\n node != null && node !== false ? (\n <div\n key={key}\n ref={cornerRefs[key]}\n data-slot=\"notched-card-corner\"\n data-corner={key}\n className=\"absolute flex w-max items-center\"\n style={pos}\n >\n {node}\n </div>\n ) : null,\n )}\n </div>\n );\n}\n\nexport {\n NotchedCard,\n buildNotchedCardPath,\n notchedCardVariants,\n type NotchedCardProps,\n type NotchedCardVariant,\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { a as PaginationLink, i as PaginationItem, n as PaginationContent, o as PaginationNext, r as PaginationEllipsis, s as PaginationPrevious, t as Pagination } from "../../index45.cjs";
1
+ import { a as PaginationLink, i as PaginationItem, n as PaginationContent, o as PaginationNext, r as PaginationEllipsis, s as PaginationPrevious, t as Pagination } from "../../index50.cjs";
2
2
  export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious };
@@ -1,2 +1,2 @@
1
- import { a as PaginationLink, i as PaginationItem, n as PaginationContent, o as PaginationNext, r as PaginationEllipsis, s as PaginationPrevious, t as Pagination } from "../../index45.js";
1
+ import { a as PaginationLink, i as PaginationItem, n as PaginationContent, o as PaginationNext, r as PaginationEllipsis, s as PaginationPrevious, t as Pagination } from "../../index50.js";
2
2
  export { Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious };
@@ -1,2 +1,2 @@
1
- import { a as PopoverHeader, i as PopoverDescription, n as PopoverAnchor, o as PopoverTitle, r as PopoverContent, s as PopoverTrigger, t as Popover } from "../../index42.cjs";
1
+ import { a as PopoverHeader, i as PopoverDescription, n as PopoverAnchor, o as PopoverTitle, r as PopoverContent, s as PopoverTrigger, t as Popover } from "../../index21.cjs";
2
2
  export { Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger };
@@ -1,2 +1,2 @@
1
- import { a as PopoverHeader, i as PopoverDescription, n as PopoverAnchor, o as PopoverTitle, r as PopoverContent, s as PopoverTrigger, t as Popover } from "../../index42.js";
1
+ import { a as PopoverHeader, i as PopoverDescription, n as PopoverAnchor, o as PopoverTitle, r as PopoverContent, s as PopoverTrigger, t as Popover } from "../../index21.js";
2
2
  export { Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger };
@@ -1,2 +1,2 @@
1
- import { t as Progress } from "../../index46.cjs";
1
+ import { t as Progress } from "../../index51.cjs";
2
2
  export { Progress };
@@ -1,2 +1,2 @@
1
- import { t as Progress } from "../../index46.js";
1
+ import { t as Progress } from "../../index51.js";
2
2
  export { Progress };
@@ -20,7 +20,7 @@ function RadioGroup({ className, orientation = "vertical", ...props }) {
20
20
  function RadioGroupItem({ className, ...props }) {
21
21
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.RadioGroup.Item, {
22
22
  "data-slot": "radio-group-item",
23
- className: require_cn.cn("aspect-square size-4 shrink-0 rounded-full border border-secondary-border bg-input-bg text-primary-invert-bg transition-[color,box-shadow] outline-none focus-visible:ring-3 focus-visible:ring-focus data-[state=checked]:border-selected-border disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-border aria-invalid:ring-focus-error aria-invalid:text-danger-txt", className),
23
+ className: require_cn.cn("relative aspect-square size-4 shrink-0 rounded-full border border-secondary-border bg-input-bg text-primary-invert-bg transition-[color,box-shadow] outline-none after:absolute after:-inset-1 after:rounded-full after:content-[''] focus-visible:ring-3 focus-visible:ring-focus data-[state=checked]:border-selected-border disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-border aria-invalid:ring-focus-error aria-invalid:text-danger-txt", className),
24
24
  ...props,
25
25
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.RadioGroup.Indicator, {
26
26
  "data-slot": "radio-group-indicator",
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["RadioGroupPrimitive","cn","Icon","CircleIcon"],"sources":["../../../src/primitives/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { CircleIcon } from \"lucide-react\";\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\";\nimport { useId } from \"react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root of a set of mutually-exclusive radio options; lays them out vertically or horizontally. */\nfunction RadioGroup({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root> & {\n /** Stack the items in a column (`vertical`) or wrap them in a row (`horizontal`). */\n orientation?: \"vertical\" | \"horizontal\";\n}) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n orientation === \"horizontal\" ? \"flex flex-row flex-wrap gap-4 items-center\" : \"grid gap-3\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** A single selectable radio control; pair it with a label for accessible option text. */\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n // Dot color rides on currentColor: the checked dot is the inverted fill,\n // flipping to the danger color under aria-invalid (Figma radio spec).\n \"aspect-square size-4 shrink-0 rounded-full border border-secondary-border bg-input-bg text-primary-invert-bg transition-[color,box-shadow] outline-none focus-visible:ring-3 focus-visible:ring-focus data-[state=checked]:border-selected-border disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-border aria-invalid:ring-focus-error aria-invalid:text-danger-txt\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <Icon\n as={CircleIcon}\n className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-current stroke-current\"\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\n/** A card-style radio option with a bordered surface, title, and description that highlights when checked. */\nfunction RichRadioItem({\n className,\n value,\n title,\n description,\n flipped = false,\n id,\n ...props\n}: Omit<React.ComponentProps<typeof RadioGroupPrimitive.Item>, \"children\"> & {\n /** Value submitted when this option is selected. */\n value: string;\n /** Bold heading shown at the top of the card. */\n title?: React.ReactNode;\n /** Secondary muted text shown beneath the title. */\n description?: React.ReactNode;\n /** Place the radio control on the trailing edge instead of the leading edge. */\n flipped?: boolean;\n}) {\n const generatedId = useId();\n const itemId = id ?? generatedId;\n return (\n <label\n data-slot=\"rich-radio-item\"\n htmlFor={itemId}\n className={cn(\n \"flex cursor-pointer items-start gap-3 rounded-10 border border-primary-border bg-muted-bg p-3 text-primary-txt transition-colors has-[[data-state=checked]]:border-selected-border has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50\",\n flipped ? \"flex-row-reverse\" : \"flex-row\",\n className,\n )}\n >\n <RadioGroupItem\n data-slot=\"rich-radio-item-control\"\n id={itemId}\n value={value}\n className=\"mt-0.75\"\n {...props}\n />\n <span data-slot=\"rich-radio-item-content\" className=\"flex flex-col gap-1.5\">\n {title != null && (\n <span data-slot=\"rich-radio-item-title\" className=\"text-sm leading-5\">\n {title}\n </span>\n )}\n {description != null && (\n <span\n data-slot=\"rich-radio-item-description\"\n className=\"text-xs leading-4 text-muted-txt\"\n >\n {description}\n </span>\n )}\n </span>\n </label>\n );\n}\n\nexport { RadioGroup, RadioGroupItem, RichRadioItem };\n"],"mappings":";;;;;;;;;AASA,SAAS,WAAW,EAClB,WACA,cAAc,YACd,GAAG,SAIF;CACD,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,WAAoB,MAArB;EACE,aAAU;EACV,oBAAkB;EACL;EACb,WAAWC,WAAAA,GACT,gBAAgB,eAAe,+CAA+C,cAC9E,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,eAAe,EACtB,WACA,GAAG,SACqD;CACxD,OACE,iBAAA,GAAA,kBAAA,KAACD,SAAAA,WAAoB,MAArB;EACE,aAAU;EACV,WAAWC,WAAAA,GAGT,kYACA,SACF;EACA,GAAI;YAEJ,iBAAA,GAAA,kBAAA,KAACD,SAAAA,WAAoB,WAArB;GACE,aAAU;GACV,WAAU;aAEV,iBAAA,GAAA,kBAAA,KAACE,aAAAA,MAAD;IACE,IAAIC,aAAAA;IACJ,WAAU;GACX,CAAA;EAC4B,CAAA;CACP,CAAA;AAE9B;;AAGA,SAAS,cAAc,EACrB,WACA,OACA,OACA,aACA,UAAU,OACV,IACA,GAAG,SAUF;CACD,MAAM,eAAA,GAAA,MAAA,OAAoB;CAC1B,MAAM,SAAS,MAAM;CACrB,OACE,iBAAA,GAAA,kBAAA,MAAC,SAAD;EACE,aAAU;EACV,SAAS;EACT,WAAWF,WAAAA,GACT,oPACA,UAAU,qBAAqB,YAC/B,SACF;YAPF,CASE,iBAAA,GAAA,kBAAA,KAAC,gBAAD;GACE,aAAU;GACV,IAAI;GACG;GACP,WAAU;GACV,GAAI;EACL,CAAA,GACD,iBAAA,GAAA,kBAAA,MAAC,QAAD;GAAM,aAAU;GAA0B,WAAU;aAApD,CACG,SAAS,QACR,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,aAAU;IAAwB,WAAU;cAC/C;GACG,CAAA,GAEP,eAAe,QACd,iBAAA,GAAA,kBAAA,KAAC,QAAD;IACE,aAAU;IACV,WAAU;cAET;GACG,CAAA,CAEJ;IACD;;AAEX"}
1
+ {"version":3,"file":"index.cjs","names":["RadioGroupPrimitive","cn","Icon","CircleIcon"],"sources":["../../../src/primitives/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { CircleIcon } from \"lucide-react\";\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\";\nimport { useId } from \"react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root of a set of mutually-exclusive radio options; lays them out vertically or horizontally. */\nfunction RadioGroup({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root> & {\n /** Stack the items in a column (`vertical`) or wrap them in a row (`horizontal`). */\n orientation?: \"vertical\" | \"horizontal\";\n}) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n orientation === \"horizontal\" ? \"flex flex-row flex-wrap gap-4 items-center\" : \"grid gap-3\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** A single selectable radio control; pair it with a label for accessible option text. */\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n // Keep the visible control at 16px while expanding the click/tap target to 24px.\n // This follows the repo's hit-area pattern (negative inset pseudo-element)\n // so surrounding layout stays unchanged.\n // Dot color rides on currentColor: the checked dot is the inverted fill,\n // flipping to the danger color under aria-invalid (Figma radio spec).\n \"relative aspect-square size-4 shrink-0 rounded-full border border-secondary-border bg-input-bg text-primary-invert-bg transition-[color,box-shadow] outline-none after:absolute after:-inset-1 after:rounded-full after:content-[''] focus-visible:ring-3 focus-visible:ring-focus data-[state=checked]:border-selected-border disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-border aria-invalid:ring-focus-error aria-invalid:text-danger-txt\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <Icon\n as={CircleIcon}\n className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-current stroke-current\"\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\n/** A card-style radio option with a bordered surface, title, and description that highlights when checked. */\nfunction RichRadioItem({\n className,\n value,\n title,\n description,\n flipped = false,\n id,\n ...props\n}: Omit<React.ComponentProps<typeof RadioGroupPrimitive.Item>, \"children\"> & {\n /** Value submitted when this option is selected. */\n value: string;\n /** Bold heading shown at the top of the card. */\n title?: React.ReactNode;\n /** Secondary muted text shown beneath the title. */\n description?: React.ReactNode;\n /** Place the radio control on the trailing edge instead of the leading edge. */\n flipped?: boolean;\n}) {\n const generatedId = useId();\n const itemId = id ?? generatedId;\n return (\n <label\n data-slot=\"rich-radio-item\"\n htmlFor={itemId}\n className={cn(\n \"flex cursor-pointer items-start gap-3 rounded-10 border border-primary-border bg-muted-bg p-3 text-primary-txt transition-colors has-[[data-state=checked]]:border-selected-border has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50\",\n flipped ? \"flex-row-reverse\" : \"flex-row\",\n className,\n )}\n >\n <RadioGroupItem\n data-slot=\"rich-radio-item-control\"\n id={itemId}\n value={value}\n className=\"mt-0.75\"\n {...props}\n />\n <span data-slot=\"rich-radio-item-content\" className=\"flex flex-col gap-1.5\">\n {title != null && (\n <span data-slot=\"rich-radio-item-title\" className=\"text-sm leading-5\">\n {title}\n </span>\n )}\n {description != null && (\n <span\n data-slot=\"rich-radio-item-description\"\n className=\"text-xs leading-4 text-muted-txt\"\n >\n {description}\n </span>\n )}\n </span>\n </label>\n );\n}\n\nexport { RadioGroup, RadioGroupItem, RichRadioItem };\n"],"mappings":";;;;;;;;;AASA,SAAS,WAAW,EAClB,WACA,cAAc,YACd,GAAG,SAIF;CACD,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,WAAoB,MAArB;EACE,aAAU;EACV,oBAAkB;EACL;EACb,WAAWC,WAAAA,GACT,gBAAgB,eAAe,+CAA+C,cAC9E,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,eAAe,EACtB,WACA,GAAG,SACqD;CACxD,OACE,iBAAA,GAAA,kBAAA,KAACD,SAAAA,WAAoB,MAArB;EACE,aAAU;EACV,WAAWC,WAAAA,GAMT,+cACA,SACF;EACA,GAAI;YAEJ,iBAAA,GAAA,kBAAA,KAACD,SAAAA,WAAoB,WAArB;GACE,aAAU;GACV,WAAU;aAEV,iBAAA,GAAA,kBAAA,KAACE,aAAAA,MAAD;IACE,IAAIC,aAAAA;IACJ,WAAU;GACX,CAAA;EAC4B,CAAA;CACP,CAAA;AAE9B;;AAGA,SAAS,cAAc,EACrB,WACA,OACA,OACA,aACA,UAAU,OACV,IACA,GAAG,SAUF;CACD,MAAM,eAAA,GAAA,MAAA,OAAoB;CAC1B,MAAM,SAAS,MAAM;CACrB,OACE,iBAAA,GAAA,kBAAA,MAAC,SAAD;EACE,aAAU;EACV,SAAS;EACT,WAAWF,WAAAA,GACT,oPACA,UAAU,qBAAqB,YAC/B,SACF;YAPF,CASE,iBAAA,GAAA,kBAAA,KAAC,gBAAD;GACE,aAAU;GACV,IAAI;GACG;GACP,WAAU;GACV,GAAI;EACL,CAAA,GACD,iBAAA,GAAA,kBAAA,MAAC,QAAD;GAAM,aAAU;GAA0B,WAAU;aAApD,CACG,SAAS,QACR,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,aAAU;IAAwB,WAAU;cAC/C;GACG,CAAA,GAEP,eAAe,QACd,iBAAA,GAAA,kBAAA,KAAC,QAAD;IACE,aAAU;IACV,WAAU;cAET;GACG,CAAA,CAEJ;IACD;;AAEX"}
@@ -1,2 +1,2 @@
1
- import { n as RadioGroupItem, r as RichRadioItem, t as RadioGroup } from "../../index47.cjs";
1
+ import { n as RadioGroupItem, r as RichRadioItem, t as RadioGroup } from "../../index52.cjs";
2
2
  export { RadioGroup, RadioGroupItem, RichRadioItem };
@@ -1,2 +1,2 @@
1
- import { n as RadioGroupItem, r as RichRadioItem, t as RadioGroup } from "../../index47.js";
1
+ import { n as RadioGroupItem, r as RichRadioItem, t as RadioGroup } from "../../index52.js";
2
2
  export { RadioGroup, RadioGroupItem, RichRadioItem };
@@ -19,7 +19,7 @@ function RadioGroup({ className, orientation = "vertical", ...props }) {
19
19
  function RadioGroupItem({ className, ...props }) {
20
20
  return /* @__PURE__ */ jsx(RadioGroup$1.Item, {
21
21
  "data-slot": "radio-group-item",
22
- className: cn("aspect-square size-4 shrink-0 rounded-full border border-secondary-border bg-input-bg text-primary-invert-bg transition-[color,box-shadow] outline-none focus-visible:ring-3 focus-visible:ring-focus data-[state=checked]:border-selected-border disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-border aria-invalid:ring-focus-error aria-invalid:text-danger-txt", className),
22
+ className: cn("relative aspect-square size-4 shrink-0 rounded-full border border-secondary-border bg-input-bg text-primary-invert-bg transition-[color,box-shadow] outline-none after:absolute after:-inset-1 after:rounded-full after:content-[''] focus-visible:ring-3 focus-visible:ring-focus data-[state=checked]:border-selected-border disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-border aria-invalid:ring-focus-error aria-invalid:text-danger-txt", className),
23
23
  ...props,
24
24
  children: /* @__PURE__ */ jsx(RadioGroup$1.Indicator, {
25
25
  "data-slot": "radio-group-indicator",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["RadioGroupPrimitive"],"sources":["../../../src/primitives/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { CircleIcon } from \"lucide-react\";\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\";\nimport { useId } from \"react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root of a set of mutually-exclusive radio options; lays them out vertically or horizontally. */\nfunction RadioGroup({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root> & {\n /** Stack the items in a column (`vertical`) or wrap them in a row (`horizontal`). */\n orientation?: \"vertical\" | \"horizontal\";\n}) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n orientation === \"horizontal\" ? \"flex flex-row flex-wrap gap-4 items-center\" : \"grid gap-3\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** A single selectable radio control; pair it with a label for accessible option text. */\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n // Dot color rides on currentColor: the checked dot is the inverted fill,\n // flipping to the danger color under aria-invalid (Figma radio spec).\n \"aspect-square size-4 shrink-0 rounded-full border border-secondary-border bg-input-bg text-primary-invert-bg transition-[color,box-shadow] outline-none focus-visible:ring-3 focus-visible:ring-focus data-[state=checked]:border-selected-border disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-border aria-invalid:ring-focus-error aria-invalid:text-danger-txt\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <Icon\n as={CircleIcon}\n className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-current stroke-current\"\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\n/** A card-style radio option with a bordered surface, title, and description that highlights when checked. */\nfunction RichRadioItem({\n className,\n value,\n title,\n description,\n flipped = false,\n id,\n ...props\n}: Omit<React.ComponentProps<typeof RadioGroupPrimitive.Item>, \"children\"> & {\n /** Value submitted when this option is selected. */\n value: string;\n /** Bold heading shown at the top of the card. */\n title?: React.ReactNode;\n /** Secondary muted text shown beneath the title. */\n description?: React.ReactNode;\n /** Place the radio control on the trailing edge instead of the leading edge. */\n flipped?: boolean;\n}) {\n const generatedId = useId();\n const itemId = id ?? generatedId;\n return (\n <label\n data-slot=\"rich-radio-item\"\n htmlFor={itemId}\n className={cn(\n \"flex cursor-pointer items-start gap-3 rounded-10 border border-primary-border bg-muted-bg p-3 text-primary-txt transition-colors has-[[data-state=checked]]:border-selected-border has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50\",\n flipped ? \"flex-row-reverse\" : \"flex-row\",\n className,\n )}\n >\n <RadioGroupItem\n data-slot=\"rich-radio-item-control\"\n id={itemId}\n value={value}\n className=\"mt-0.75\"\n {...props}\n />\n <span data-slot=\"rich-radio-item-content\" className=\"flex flex-col gap-1.5\">\n {title != null && (\n <span data-slot=\"rich-radio-item-title\" className=\"text-sm leading-5\">\n {title}\n </span>\n )}\n {description != null && (\n <span\n data-slot=\"rich-radio-item-description\"\n className=\"text-xs leading-4 text-muted-txt\"\n >\n {description}\n </span>\n )}\n </span>\n </label>\n );\n}\n\nexport { RadioGroup, RadioGroupItem, RichRadioItem };\n"],"mappings":";;;;;;;;AASA,SAAS,WAAW,EAClB,WACA,cAAc,YACd,GAAG,SAIF;CACD,OACE,oBAACA,aAAoB,MAArB;EACE,aAAU;EACV,oBAAkB;EACL;EACb,WAAW,GACT,gBAAgB,eAAe,+CAA+C,cAC9E,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,eAAe,EACtB,WACA,GAAG,SACqD;CACxD,OACE,oBAACA,aAAoB,MAArB;EACE,aAAU;EACV,WAAW,GAGT,kYACA,SACF;EACA,GAAI;YAEJ,oBAACA,aAAoB,WAArB;GACE,aAAU;GACV,WAAU;aAEV,oBAAC,MAAD;IACE,IAAI;IACJ,WAAU;GACX,CAAA;EAC4B,CAAA;CACP,CAAA;AAE9B;;AAGA,SAAS,cAAc,EACrB,WACA,OACA,OACA,aACA,UAAU,OACV,IACA,GAAG,SAUF;CACD,MAAM,cAAc,MAAM;CAC1B,MAAM,SAAS,MAAM;CACrB,OACE,qBAAC,SAAD;EACE,aAAU;EACV,SAAS;EACT,WAAW,GACT,oPACA,UAAU,qBAAqB,YAC/B,SACF;YAPF,CASE,oBAAC,gBAAD;GACE,aAAU;GACV,IAAI;GACG;GACP,WAAU;GACV,GAAI;EACL,CAAA,GACD,qBAAC,QAAD;GAAM,aAAU;GAA0B,WAAU;aAApD,CACG,SAAS,QACR,oBAAC,QAAD;IAAM,aAAU;IAAwB,WAAU;cAC/C;GACG,CAAA,GAEP,eAAe,QACd,oBAAC,QAAD;IACE,aAAU;IACV,WAAU;cAET;GACG,CAAA,CAEJ;IACD;;AAEX"}
1
+ {"version":3,"file":"index.js","names":["RadioGroupPrimitive"],"sources":["../../../src/primitives/RadioGroup/RadioGroup.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { CircleIcon } from \"lucide-react\";\nimport { RadioGroup as RadioGroupPrimitive } from \"radix-ui\";\nimport { useId } from \"react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root of a set of mutually-exclusive radio options; lays them out vertically or horizontally. */\nfunction RadioGroup({\n className,\n orientation = \"vertical\",\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Root> & {\n /** Stack the items in a column (`vertical`) or wrap them in a row (`horizontal`). */\n orientation?: \"vertical\" | \"horizontal\";\n}) {\n return (\n <RadioGroupPrimitive.Root\n data-slot=\"radio-group\"\n data-orientation={orientation}\n orientation={orientation}\n className={cn(\n orientation === \"horizontal\" ? \"flex flex-row flex-wrap gap-4 items-center\" : \"grid gap-3\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** A single selectable radio control; pair it with a label for accessible option text. */\nfunction RadioGroupItem({\n className,\n ...props\n}: React.ComponentProps<typeof RadioGroupPrimitive.Item>) {\n return (\n <RadioGroupPrimitive.Item\n data-slot=\"radio-group-item\"\n className={cn(\n // Keep the visible control at 16px while expanding the click/tap target to 24px.\n // This follows the repo's hit-area pattern (negative inset pseudo-element)\n // so surrounding layout stays unchanged.\n // Dot color rides on currentColor: the checked dot is the inverted fill,\n // flipping to the danger color under aria-invalid (Figma radio spec).\n \"relative aspect-square size-4 shrink-0 rounded-full border border-secondary-border bg-input-bg text-primary-invert-bg transition-[color,box-shadow] outline-none after:absolute after:-inset-1 after:rounded-full after:content-[''] focus-visible:ring-3 focus-visible:ring-focus data-[state=checked]:border-selected-border disabled:cursor-not-allowed disabled:opacity-50 aria-invalid:border-danger-border aria-invalid:ring-focus-error aria-invalid:text-danger-txt\",\n className,\n )}\n {...props}\n >\n <RadioGroupPrimitive.Indicator\n data-slot=\"radio-group-indicator\"\n className=\"relative flex items-center justify-center\"\n >\n <Icon\n as={CircleIcon}\n className=\"absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 fill-current stroke-current\"\n />\n </RadioGroupPrimitive.Indicator>\n </RadioGroupPrimitive.Item>\n );\n}\n\n/** A card-style radio option with a bordered surface, title, and description that highlights when checked. */\nfunction RichRadioItem({\n className,\n value,\n title,\n description,\n flipped = false,\n id,\n ...props\n}: Omit<React.ComponentProps<typeof RadioGroupPrimitive.Item>, \"children\"> & {\n /** Value submitted when this option is selected. */\n value: string;\n /** Bold heading shown at the top of the card. */\n title?: React.ReactNode;\n /** Secondary muted text shown beneath the title. */\n description?: React.ReactNode;\n /** Place the radio control on the trailing edge instead of the leading edge. */\n flipped?: boolean;\n}) {\n const generatedId = useId();\n const itemId = id ?? generatedId;\n return (\n <label\n data-slot=\"rich-radio-item\"\n htmlFor={itemId}\n className={cn(\n \"flex cursor-pointer items-start gap-3 rounded-10 border border-primary-border bg-muted-bg p-3 text-primary-txt transition-colors has-[[data-state=checked]]:border-selected-border has-[:disabled]:cursor-not-allowed has-[:disabled]:opacity-50\",\n flipped ? \"flex-row-reverse\" : \"flex-row\",\n className,\n )}\n >\n <RadioGroupItem\n data-slot=\"rich-radio-item-control\"\n id={itemId}\n value={value}\n className=\"mt-0.75\"\n {...props}\n />\n <span data-slot=\"rich-radio-item-content\" className=\"flex flex-col gap-1.5\">\n {title != null && (\n <span data-slot=\"rich-radio-item-title\" className=\"text-sm leading-5\">\n {title}\n </span>\n )}\n {description != null && (\n <span\n data-slot=\"rich-radio-item-description\"\n className=\"text-xs leading-4 text-muted-txt\"\n >\n {description}\n </span>\n )}\n </span>\n </label>\n );\n}\n\nexport { RadioGroup, RadioGroupItem, RichRadioItem };\n"],"mappings":";;;;;;;;AASA,SAAS,WAAW,EAClB,WACA,cAAc,YACd,GAAG,SAIF;CACD,OACE,oBAACA,aAAoB,MAArB;EACE,aAAU;EACV,oBAAkB;EACL;EACb,WAAW,GACT,gBAAgB,eAAe,+CAA+C,cAC9E,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,eAAe,EACtB,WACA,GAAG,SACqD;CACxD,OACE,oBAACA,aAAoB,MAArB;EACE,aAAU;EACV,WAAW,GAMT,+cACA,SACF;EACA,GAAI;YAEJ,oBAACA,aAAoB,WAArB;GACE,aAAU;GACV,WAAU;aAEV,oBAAC,MAAD;IACE,IAAI;IACJ,WAAU;GACX,CAAA;EAC4B,CAAA;CACP,CAAA;AAE9B;;AAGA,SAAS,cAAc,EACrB,WACA,OACA,OACA,aACA,UAAU,OACV,IACA,GAAG,SAUF;CACD,MAAM,cAAc,MAAM;CAC1B,MAAM,SAAS,MAAM;CACrB,OACE,qBAAC,SAAD;EACE,aAAU;EACV,SAAS;EACT,WAAW,GACT,oPACA,UAAU,qBAAqB,YAC/B,SACF;YAPF,CASE,oBAAC,gBAAD;GACE,aAAU;GACV,IAAI;GACG;GACP,WAAU;GACV,GAAI;EACL,CAAA,GACD,qBAAC,QAAD;GAAM,aAAU;GAA0B,WAAU;aAApD,CACG,SAAS,QACR,oBAAC,QAAD;IAAM,aAAU;IAAwB,WAAU;cAC/C;GACG,CAAA,GAEP,eAAe,QACd,oBAAC,QAAD;IACE,aAAU;IACV,WAAU;cAET;GACG,CAAA,CAEJ;IACD;;AAEX"}
@@ -1,2 +1,2 @@
1
- import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../../index48.cjs";
1
+ import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../../index53.cjs";
2
2
  export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
@@ -1,2 +1,2 @@
1
- import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../../index48.js";
1
+ import { n as ResizablePanel, r as ResizablePanelGroup, t as ResizableHandle } from "../../index53.js";
2
2
  export { ResizableHandle, ResizablePanel, ResizablePanelGroup };
@@ -1,2 +1,2 @@
1
- import { n as ScrollBar, t as ScrollArea } from "../../index49.cjs";
1
+ import { n as ScrollBar, t as ScrollArea } from "../../index54.cjs";
2
2
  export { ScrollArea, ScrollBar };
@@ -1,2 +1,2 @@
1
- import { n as ScrollBar, t as ScrollArea } from "../../index49.js";
1
+ import { n as ScrollBar, t as ScrollArea } from "../../index54.js";
2
2
  export { ScrollArea, ScrollBar };
@@ -1,2 +1,2 @@
1
- import { a as SelectLabel, c as SelectSeparator, i as SelectItem, l as SelectTrigger, n as SelectContent, o as SelectScrollDownButton, r as SelectGroup, s as SelectScrollUpButton, t as Select, u as SelectValue } from "../../index50.cjs";
1
+ import { a as SelectLabel, c as SelectSeparator, i as SelectItem, l as SelectTrigger, n as SelectContent, o as SelectScrollDownButton, r as SelectGroup, s as SelectScrollUpButton, t as Select, u as SelectValue } from "../../index55.cjs";
2
2
  export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue };
@@ -1,2 +1,2 @@
1
- import { a as SelectLabel, c as SelectSeparator, i as SelectItem, l as SelectTrigger, n as SelectContent, o as SelectScrollDownButton, r as SelectGroup, s as SelectScrollUpButton, t as Select, u as SelectValue } from "../../index50.js";
1
+ import { a as SelectLabel, c as SelectSeparator, i as SelectItem, l as SelectTrigger, n as SelectContent, o as SelectScrollDownButton, r as SelectGroup, s as SelectScrollUpButton, t as Select, u as SelectValue } from "../../index55.js";
2
2
  export { Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue };