@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
@@ -48,11 +48,43 @@ const sheetOverlayVariants = {
48
48
  glass: "bg-glass-40-bg backdrop-blur-glass",
49
49
  none: "bg-transparent"
50
50
  };
51
+ const sheetSizeVariants = {
52
+ small: {
53
+ right: "w-2/3 sm:max-w-xs",
54
+ left: "w-2/3 sm:max-w-xs",
55
+ top: "h-[40vh]",
56
+ bottom: "h-[40vh]"
57
+ },
58
+ default: {
59
+ right: "w-3/4 sm:max-w-sm",
60
+ left: "w-3/4 sm:max-w-sm",
61
+ top: "h-auto",
62
+ bottom: "h-auto"
63
+ },
64
+ medium: {
65
+ right: "w-4/5 sm:max-w-md",
66
+ left: "w-4/5 sm:max-w-md",
67
+ top: "h-[60vh]",
68
+ bottom: "h-[60vh]"
69
+ },
70
+ large: {
71
+ right: "w-11/12 sm:max-w-lg",
72
+ left: "w-11/12 sm:max-w-lg",
73
+ top: "h-[80vh]",
74
+ bottom: "h-[80vh]"
75
+ },
76
+ extraLarge: {
77
+ right: "w-[95vw] sm:max-w-2xl",
78
+ left: "w-[95vw] sm:max-w-2xl",
79
+ top: "h-[95vh]",
80
+ bottom: "h-[95vh]"
81
+ }
82
+ };
51
83
  /** The sliding panel surface (portaled, with its overlay). Holds the header, body, and footer. */
52
- function SheetContent({ className, children, side = "right", showCloseButton = true, overlay = "default", ...props }) {
84
+ function SheetContent({ className, children, side = "right", showCloseButton = true, overlay = "default", size = "default", ...props }) {
53
85
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(SheetPortal, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(SheetOverlay, { className: sheetOverlayVariants[overlay] }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(radix_ui.Dialog.Content, {
54
86
  "data-slot": "sheet-content",
55
- className: require_cn.cn("bg-primary-bg data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 overflow-y-auto shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 rounded-l-8 sm:max-w-sm", side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 rounded-r-8 sm:max-w-sm", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto rounded-b-8", side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto rounded-t-8", className),
87
+ className: require_cn.cn("bg-primary-bg data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 overflow-y-auto shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full rounded-l-8", side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full rounded-r-8", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 rounded-b-8", side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 rounded-t-8", sheetSizeVariants[size][side], className),
56
88
  ...props,
57
89
  children: [children, showCloseButton && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(radix_ui.Dialog.Close, {
58
90
  className: "absolute top-4 right-4 rounded-2 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-focus focus-visible:ring-3 focus:outline-hidden disabled:pointer-events-none",
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["SheetPrimitive","cn","Icon","XIcon"],"sources":["../../../src/primitives/Sheet/Sheet.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { XIcon } from \"lucide-react\";\nimport { Dialog as SheetPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root provider for a slide-in panel (drawer). Wraps a `SheetTrigger` and `SheetContent`; controls open/closed state. */\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\n/** Element that opens the sheet when activated. Use `asChild` to wrap your own button. */\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\n/** Element that closes the sheet when activated. Use `asChild` to wrap your own button. */\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\n/** Portals the overlay and content out of the DOM tree to the document body. */\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\n/** Full-screen scrim rendered behind the sheet content. */\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Predefined scrim styles for the sheet overlay. Pass via `overlay`. */\nconst sheetOverlayVariants = {\n default: \"bg-overlay-bg\",\n dark: \"bg-black/50\",\n glass: \"bg-glass-40-bg backdrop-blur-glass\",\n none: \"bg-transparent\",\n} as const;\n\n/** The sliding panel surface (portaled, with its overlay). Holds the header, body, and footer. */\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n overlay = \"default\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n /** Edge the sheet slides in from. */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Whether to render the built-in top-right close (X) button. */\n showCloseButton?: boolean;\n /** Scrim style behind the sheet (e.g. `glass` for drawer patterns). */\n overlay?: keyof typeof sheetOverlayVariants;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay className={sheetOverlayVariants[overlay]} />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n // Figma: bg/primary panel with shadow-lg only (no border binding);\n // radius-8 on the inward edge — the outer edge sits flush.\n \"bg-primary-bg data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 overflow-y-auto shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 rounded-l-8 sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 rounded-r-8 sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto rounded-b-8\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto rounded-t-8\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-2 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-focus focus-visible:ring-3 focus:outline-hidden disabled:pointer-events-none\">\n <Icon as={XIcon} className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\n/** Top region of the sheet; typically holds the `SheetTitle` and `SheetDescription`. */\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"sheet-header\" className={cn(\"flex flex-col gap-2 p-6\", className)} {...props} />\n );\n}\n\n/** Bottom region of the sheet, pinned to the base; typically holds action buttons. */\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\n \"mt-auto flex flex-col-reverse gap-3 p-6 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible title for the sheet, announced when it opens. */\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n // Figma: heading 4 (Outfit Regular 20/24). Bound to raw neutral/900 in\n // Figma — we use content/primary (flag #13).\n className={cn(\n \"font-heading text-[length:var(--heading-4-font-size)] leading-[var(--heading-4-line-height)] font-normal text-primary-txt\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible supporting text for the sheet, linked to the dialog for screen readers. */\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-txt text-sm leading-5\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n"],"mappings":";;;;;;;;AAQA,SAAS,MAAM,EAAE,GAAG,SAA2D;CAC7E,OAAO,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAe,MAAhB;EAAqB,aAAU;EAAQ,GAAI;CAAQ,CAAA;AAC5D;;AAGA,SAAS,aAAa,EAAE,GAAG,SAA8D;CACvF,OAAO,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAe,SAAhB;EAAwB,aAAU;EAAgB,GAAI;CAAQ,CAAA;AACvE;;AAGA,SAAS,WAAW,EAAE,GAAG,SAA4D;CACnF,OAAO,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAe,OAAhB;EAAsB,aAAU;EAAc,GAAI;CAAQ,CAAA;AACnE;;AAGA,SAAS,YAAY,EAAE,GAAG,SAA6D;CACrF,OAAO,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAe,QAAhB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;;AAGA,SAAS,aAAa,EACpB,WACA,GAAG,SACmD;CACtD,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAe,SAAhB;EACE,aAAU;EACV,WAAWC,WAAAA,GACT,8IACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,MAAM,uBAAuB;CAC3B,SAAS;CACT,MAAM;CACN,OAAO;CACP,MAAM;AACR;;AAGA,SAAS,aAAa,EACpB,WACA,UACA,OAAO,SACP,kBAAkB,MAClB,UAAU,WACV,GAAG,SAQF;CACD,OACE,iBAAA,GAAA,kBAAA,MAAC,aAAD,EAAA,UAAA,CACE,iBAAA,GAAA,kBAAA,KAAC,cAAD,EAAc,WAAW,qBAAqB,SAAW,CAAA,GACzD,iBAAA,GAAA,kBAAA,MAACD,SAAAA,OAAe,SAAhB;EACE,aAAU;EACV,WAAWC,WAAAA,GAGT,8NACA,SAAS,WACP,uIACF,SAAS,UACP,oIACF,SAAS,SACP,+GACF,SAAS,YACP,wHACF,SACF;EACA,GAAI;YAhBN,CAkBG,UACA,mBACC,iBAAA,GAAA,kBAAA,MAACD,SAAAA,OAAe,OAAhB;GAAsB,WAAU;aAAhC,CACE,iBAAA,GAAA,kBAAA,KAACE,aAAAA,MAAD;IAAM,IAAIC,aAAAA;IAAO,WAAU;GAAU,CAAA,GACrC,iBAAA,GAAA,kBAAA,KAAC,QAAD;IAAM,WAAU;cAAU;GAAW,CAAA,CACjB;IAEF;GACb,EAAA,CAAA;AAEjB;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EAAK,aAAU;EAAe,WAAWF,WAAAA,GAAG,2BAA2B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEnG;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GACT,sEACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA4D;CAC9F,OACE,iBAAA,GAAA,kBAAA,KAACD,SAAAA,OAAe,OAAhB;EACE,aAAU;EAGV,WAAWC,WAAAA,GACT,6HACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,iBAAiB,EACxB,WACA,GAAG,SACuD;CAC1D,OACE,iBAAA,GAAA,kBAAA,KAACD,SAAAA,OAAe,aAAhB;EACE,aAAU;EACV,WAAWC,WAAAA,GAAG,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.cjs","names":["SheetPrimitive","cn","Icon","XIcon"],"sources":["../../../src/primitives/Sheet/Sheet.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { XIcon } from \"lucide-react\";\nimport { Dialog as SheetPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root provider for a slide-in panel (drawer). Wraps a `SheetTrigger` and `SheetContent`; controls open/closed state. */\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\n/** Element that opens the sheet when activated. Use `asChild` to wrap your own button. */\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\n/** Element that closes the sheet when activated. Use `asChild` to wrap your own button. */\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\n/** Portals the overlay and content out of the DOM tree to the document body. */\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\n/** Full-screen scrim rendered behind the sheet content. */\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Predefined scrim styles for the sheet overlay. Pass via `overlay`. */\nconst sheetOverlayVariants = {\n default: \"bg-overlay-bg\",\n dark: \"bg-black/50\",\n glass: \"bg-glass-40-bg backdrop-blur-glass\",\n none: \"bg-transparent\",\n} as const;\n\nconst sheetSizeVariants = {\n small: {\n right: \"w-2/3 sm:max-w-xs\",\n left: \"w-2/3 sm:max-w-xs\",\n top: \"h-[40vh]\",\n bottom: \"h-[40vh]\",\n },\n default: {\n right: \"w-3/4 sm:max-w-sm\",\n left: \"w-3/4 sm:max-w-sm\",\n top: \"h-auto\",\n bottom: \"h-auto\",\n },\n medium: {\n right: \"w-4/5 sm:max-w-md\",\n left: \"w-4/5 sm:max-w-md\",\n top: \"h-[60vh]\",\n bottom: \"h-[60vh]\",\n },\n large: {\n right: \"w-11/12 sm:max-w-lg\",\n left: \"w-11/12 sm:max-w-lg\",\n top: \"h-[80vh]\",\n bottom: \"h-[80vh]\",\n },\n extraLarge: {\n right: \"w-[95vw] sm:max-w-2xl\",\n left: \"w-[95vw] sm:max-w-2xl\",\n top: \"h-[95vh]\",\n bottom: \"h-[95vh]\",\n },\n} as const;\n\n/** The sliding panel surface (portaled, with its overlay). Holds the header, body, and footer. */\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n overlay = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n /** Edge the sheet slides in from. */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Whether to render the built-in top-right close (X) button. */\n showCloseButton?: boolean;\n /** Scrim style behind the sheet (e.g. `glass` for drawer patterns). */\n overlay?: keyof typeof sheetOverlayVariants;\n /** Panel size. `default` matches the existing production sizing. */\n size?: keyof typeof sheetSizeVariants;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay className={sheetOverlayVariants[overlay]} />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n // Figma: bg/primary panel with shadow-lg only (no border binding);\n // radius-8 on the inward edge — the outer edge sits flush.\n \"bg-primary-bg data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 overflow-y-auto shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full rounded-l-8\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full rounded-r-8\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 rounded-b-8\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 rounded-t-8\",\n sheetSizeVariants[size][side],\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-2 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-focus focus-visible:ring-3 focus:outline-hidden disabled:pointer-events-none\">\n <Icon as={XIcon} className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\n/** Top region of the sheet; typically holds the `SheetTitle` and `SheetDescription`. */\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"sheet-header\" className={cn(\"flex flex-col gap-2 p-6\", className)} {...props} />\n );\n}\n\n/** Bottom region of the sheet, pinned to the base; typically holds action buttons. */\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\n \"mt-auto flex flex-col-reverse gap-3 p-6 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible title for the sheet, announced when it opens. */\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n // Figma: heading 4 (Outfit Regular 20/24). Bound to raw neutral/900 in\n // Figma — we use content/primary (flag #13).\n className={cn(\n \"font-heading text-[length:var(--heading-4-font-size)] leading-[var(--heading-4-line-height)] font-normal text-primary-txt\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible supporting text for the sheet, linked to the dialog for screen readers. */\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-txt text-sm leading-5\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { a as SheetFooter, c as SheetTrigger, i as SheetDescription, n as SheetClose, o as SheetHeader, r as SheetContent, s as SheetTitle, t as Sheet } from "../../index51.cjs";
1
+ import { a as SheetFooter, c as SheetTrigger, i as SheetDescription, n as SheetClose, o as SheetHeader, r as SheetContent, s as SheetTitle, t as Sheet } from "../../index56.cjs";
2
2
  export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger };
@@ -1,2 +1,2 @@
1
- import { a as SheetFooter, c as SheetTrigger, i as SheetDescription, n as SheetClose, o as SheetHeader, r as SheetContent, s as SheetTitle, t as Sheet } from "../../index51.js";
1
+ import { a as SheetFooter, c as SheetTrigger, i as SheetDescription, n as SheetClose, o as SheetHeader, r as SheetContent, s as SheetTitle, t as Sheet } from "../../index56.js";
2
2
  export { Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger };
@@ -47,11 +47,43 @@ const sheetOverlayVariants = {
47
47
  glass: "bg-glass-40-bg backdrop-blur-glass",
48
48
  none: "bg-transparent"
49
49
  };
50
+ const sheetSizeVariants = {
51
+ small: {
52
+ right: "w-2/3 sm:max-w-xs",
53
+ left: "w-2/3 sm:max-w-xs",
54
+ top: "h-[40vh]",
55
+ bottom: "h-[40vh]"
56
+ },
57
+ default: {
58
+ right: "w-3/4 sm:max-w-sm",
59
+ left: "w-3/4 sm:max-w-sm",
60
+ top: "h-auto",
61
+ bottom: "h-auto"
62
+ },
63
+ medium: {
64
+ right: "w-4/5 sm:max-w-md",
65
+ left: "w-4/5 sm:max-w-md",
66
+ top: "h-[60vh]",
67
+ bottom: "h-[60vh]"
68
+ },
69
+ large: {
70
+ right: "w-11/12 sm:max-w-lg",
71
+ left: "w-11/12 sm:max-w-lg",
72
+ top: "h-[80vh]",
73
+ bottom: "h-[80vh]"
74
+ },
75
+ extraLarge: {
76
+ right: "w-[95vw] sm:max-w-2xl",
77
+ left: "w-[95vw] sm:max-w-2xl",
78
+ top: "h-[95vh]",
79
+ bottom: "h-[95vh]"
80
+ }
81
+ };
50
82
  /** The sliding panel surface (portaled, with its overlay). Holds the header, body, and footer. */
51
- function SheetContent({ className, children, side = "right", showCloseButton = true, overlay = "default", ...props }) {
83
+ function SheetContent({ className, children, side = "right", showCloseButton = true, overlay = "default", size = "default", ...props }) {
52
84
  return /* @__PURE__ */ jsxs(SheetPortal, { children: [/* @__PURE__ */ jsx(SheetOverlay, { className: sheetOverlayVariants[overlay] }), /* @__PURE__ */ jsxs(Dialog.Content, {
53
85
  "data-slot": "sheet-content",
54
- className: cn("bg-primary-bg data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 overflow-y-auto shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 rounded-l-8 sm:max-w-sm", side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 rounded-r-8 sm:max-w-sm", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto rounded-b-8", side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto rounded-t-8", className),
86
+ className: cn("bg-primary-bg data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 overflow-y-auto shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500", side === "right" && "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full rounded-l-8", side === "left" && "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full rounded-r-8", side === "top" && "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 rounded-b-8", side === "bottom" && "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 rounded-t-8", sheetSizeVariants[size][side], className),
55
87
  ...props,
56
88
  children: [children, showCloseButton && /* @__PURE__ */ jsxs(Dialog.Close, {
57
89
  className: "absolute top-4 right-4 rounded-2 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-focus focus-visible:ring-3 focus:outline-hidden disabled:pointer-events-none",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["SheetPrimitive"],"sources":["../../../src/primitives/Sheet/Sheet.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { XIcon } from \"lucide-react\";\nimport { Dialog as SheetPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root provider for a slide-in panel (drawer). Wraps a `SheetTrigger` and `SheetContent`; controls open/closed state. */\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\n/** Element that opens the sheet when activated. Use `asChild` to wrap your own button. */\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\n/** Element that closes the sheet when activated. Use `asChild` to wrap your own button. */\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\n/** Portals the overlay and content out of the DOM tree to the document body. */\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\n/** Full-screen scrim rendered behind the sheet content. */\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Predefined scrim styles for the sheet overlay. Pass via `overlay`. */\nconst sheetOverlayVariants = {\n default: \"bg-overlay-bg\",\n dark: \"bg-black/50\",\n glass: \"bg-glass-40-bg backdrop-blur-glass\",\n none: \"bg-transparent\",\n} as const;\n\n/** The sliding panel surface (portaled, with its overlay). Holds the header, body, and footer. */\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n overlay = \"default\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n /** Edge the sheet slides in from. */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Whether to render the built-in top-right close (X) button. */\n showCloseButton?: boolean;\n /** Scrim style behind the sheet (e.g. `glass` for drawer patterns). */\n overlay?: keyof typeof sheetOverlayVariants;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay className={sheetOverlayVariants[overlay]} />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n // Figma: bg/primary panel with shadow-lg only (no border binding);\n // radius-8 on the inward edge — the outer edge sits flush.\n \"bg-primary-bg data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 overflow-y-auto shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full w-3/4 rounded-l-8 sm:max-w-sm\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full w-3/4 rounded-r-8 sm:max-w-sm\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 h-auto rounded-b-8\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 h-auto rounded-t-8\",\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-2 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-focus focus-visible:ring-3 focus:outline-hidden disabled:pointer-events-none\">\n <Icon as={XIcon} className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\n/** Top region of the sheet; typically holds the `SheetTitle` and `SheetDescription`. */\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"sheet-header\" className={cn(\"flex flex-col gap-2 p-6\", className)} {...props} />\n );\n}\n\n/** Bottom region of the sheet, pinned to the base; typically holds action buttons. */\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\n \"mt-auto flex flex-col-reverse gap-3 p-6 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible title for the sheet, announced when it opens. */\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n // Figma: heading 4 (Outfit Regular 20/24). Bound to raw neutral/900 in\n // Figma — we use content/primary (flag #13).\n className={cn(\n \"font-heading text-[length:var(--heading-4-font-size)] leading-[var(--heading-4-line-height)] font-normal text-primary-txt\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible supporting text for the sheet, linked to the dialog for screen readers. */\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-txt text-sm leading-5\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n"],"mappings":";;;;;;;AAQA,SAAS,MAAM,EAAE,GAAG,SAA2D;CAC7E,OAAO,oBAACA,OAAe,MAAhB;EAAqB,aAAU;EAAQ,GAAI;CAAQ,CAAA;AAC5D;;AAGA,SAAS,aAAa,EAAE,GAAG,SAA8D;CACvF,OAAO,oBAACA,OAAe,SAAhB;EAAwB,aAAU;EAAgB,GAAI;CAAQ,CAAA;AACvE;;AAGA,SAAS,WAAW,EAAE,GAAG,SAA4D;CACnF,OAAO,oBAACA,OAAe,OAAhB;EAAsB,aAAU;EAAc,GAAI;CAAQ,CAAA;AACnE;;AAGA,SAAS,YAAY,EAAE,GAAG,SAA6D;CACrF,OAAO,oBAACA,OAAe,QAAhB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;;AAGA,SAAS,aAAa,EACpB,WACA,GAAG,SACmD;CACtD,OACE,oBAACA,OAAe,SAAhB;EACE,aAAU;EACV,WAAW,GACT,8IACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,MAAM,uBAAuB;CAC3B,SAAS;CACT,MAAM;CACN,OAAO;CACP,MAAM;AACR;;AAGA,SAAS,aAAa,EACpB,WACA,UACA,OAAO,SACP,kBAAkB,MAClB,UAAU,WACV,GAAG,SAQF;CACD,OACE,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,cAAD,EAAc,WAAW,qBAAqB,SAAW,CAAA,GACzD,qBAACA,OAAe,SAAhB;EACE,aAAU;EACV,WAAW,GAGT,8NACA,SAAS,WACP,uIACF,SAAS,UACP,oIACF,SAAS,SACP,+GACF,SAAS,YACP,wHACF,SACF;EACA,GAAI;YAhBN,CAkBG,UACA,mBACC,qBAACA,OAAe,OAAhB;GAAsB,WAAU;aAAhC,CACE,oBAAC,MAAD;IAAM,IAAI;IAAO,WAAU;GAAU,CAAA,GACrC,oBAAC,QAAD;IAAM,WAAU;cAAU;GAAW,CAAA,CACjB;IAEF;GACb,EAAA,CAAA;AAEjB;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAAC,OAAD;EAAK,aAAU;EAAe,WAAW,GAAG,2BAA2B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEnG;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,sEACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA4D;CAC9F,OACE,oBAACA,OAAe,OAAhB;EACE,aAAU;EAGV,WAAW,GACT,6HACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,iBAAiB,EACxB,WACA,GAAG,SACuD;CAC1D,OACE,oBAACA,OAAe,aAAhB;EACE,aAAU;EACV,WAAW,GAAG,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":["SheetPrimitive"],"sources":["../../../src/primitives/Sheet/Sheet.tsx"],"sourcesContent":["import { Icon } from \"@/primitives/Icon\";\nimport { XIcon } from \"lucide-react\";\nimport { Dialog as SheetPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Root provider for a slide-in panel (drawer). Wraps a `SheetTrigger` and `SheetContent`; controls open/closed state. */\nfunction Sheet({ ...props }: React.ComponentProps<typeof SheetPrimitive.Root>) {\n return <SheetPrimitive.Root data-slot=\"sheet\" {...props} />;\n}\n\n/** Element that opens the sheet when activated. Use `asChild` to wrap your own button. */\nfunction SheetTrigger({ ...props }: React.ComponentProps<typeof SheetPrimitive.Trigger>) {\n return <SheetPrimitive.Trigger data-slot=\"sheet-trigger\" {...props} />;\n}\n\n/** Element that closes the sheet when activated. Use `asChild` to wrap your own button. */\nfunction SheetClose({ ...props }: React.ComponentProps<typeof SheetPrimitive.Close>) {\n return <SheetPrimitive.Close data-slot=\"sheet-close\" {...props} />;\n}\n\n/** Portals the overlay and content out of the DOM tree to the document body. */\nfunction SheetPortal({ ...props }: React.ComponentProps<typeof SheetPrimitive.Portal>) {\n return <SheetPrimitive.Portal data-slot=\"sheet-portal\" {...props} />;\n}\n\n/** Full-screen scrim rendered behind the sheet content. */\nfunction SheetOverlay({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Overlay>) {\n return (\n <SheetPrimitive.Overlay\n data-slot=\"sheet-overlay\"\n className={cn(\n \"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-50\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Predefined scrim styles for the sheet overlay. Pass via `overlay`. */\nconst sheetOverlayVariants = {\n default: \"bg-overlay-bg\",\n dark: \"bg-black/50\",\n glass: \"bg-glass-40-bg backdrop-blur-glass\",\n none: \"bg-transparent\",\n} as const;\n\nconst sheetSizeVariants = {\n small: {\n right: \"w-2/3 sm:max-w-xs\",\n left: \"w-2/3 sm:max-w-xs\",\n top: \"h-[40vh]\",\n bottom: \"h-[40vh]\",\n },\n default: {\n right: \"w-3/4 sm:max-w-sm\",\n left: \"w-3/4 sm:max-w-sm\",\n top: \"h-auto\",\n bottom: \"h-auto\",\n },\n medium: {\n right: \"w-4/5 sm:max-w-md\",\n left: \"w-4/5 sm:max-w-md\",\n top: \"h-[60vh]\",\n bottom: \"h-[60vh]\",\n },\n large: {\n right: \"w-11/12 sm:max-w-lg\",\n left: \"w-11/12 sm:max-w-lg\",\n top: \"h-[80vh]\",\n bottom: \"h-[80vh]\",\n },\n extraLarge: {\n right: \"w-[95vw] sm:max-w-2xl\",\n left: \"w-[95vw] sm:max-w-2xl\",\n top: \"h-[95vh]\",\n bottom: \"h-[95vh]\",\n },\n} as const;\n\n/** The sliding panel surface (portaled, with its overlay). Holds the header, body, and footer. */\nfunction SheetContent({\n className,\n children,\n side = \"right\",\n showCloseButton = true,\n overlay = \"default\",\n size = \"default\",\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Content> & {\n /** Edge the sheet slides in from. */\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n /** Whether to render the built-in top-right close (X) button. */\n showCloseButton?: boolean;\n /** Scrim style behind the sheet (e.g. `glass` for drawer patterns). */\n overlay?: keyof typeof sheetOverlayVariants;\n /** Panel size. `default` matches the existing production sizing. */\n size?: keyof typeof sheetSizeVariants;\n}) {\n return (\n <SheetPortal>\n <SheetOverlay className={sheetOverlayVariants[overlay]} />\n <SheetPrimitive.Content\n data-slot=\"sheet-content\"\n className={cn(\n // Figma: bg/primary panel with shadow-lg only (no border binding);\n // radius-8 on the inward edge — the outer edge sits flush.\n \"bg-primary-bg data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-50 flex flex-col gap-4 overflow-y-auto shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500\",\n side === \"right\" &&\n \"data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right inset-y-0 right-0 h-full rounded-l-8\",\n side === \"left\" &&\n \"data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left inset-y-0 left-0 h-full rounded-r-8\",\n side === \"top\" &&\n \"data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-0 top-0 rounded-b-8\",\n side === \"bottom\" &&\n \"data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-0 bottom-0 rounded-t-8\",\n sheetSizeVariants[size][side],\n className,\n )}\n {...props}\n >\n {children}\n {showCloseButton && (\n <SheetPrimitive.Close className=\"absolute top-4 right-4 rounded-2 opacity-70 transition-opacity hover:opacity-100 focus-visible:ring-focus focus-visible:ring-3 focus:outline-hidden disabled:pointer-events-none\">\n <Icon as={XIcon} className=\"size-4\" />\n <span className=\"sr-only\">Close</span>\n </SheetPrimitive.Close>\n )}\n </SheetPrimitive.Content>\n </SheetPortal>\n );\n}\n\n/** Top region of the sheet; typically holds the `SheetTitle` and `SheetDescription`. */\nfunction SheetHeader({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div data-slot=\"sheet-header\" className={cn(\"flex flex-col gap-2 p-6\", className)} {...props} />\n );\n}\n\n/** Bottom region of the sheet, pinned to the base; typically holds action buttons. */\nfunction SheetFooter({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"sheet-footer\"\n className={cn(\n \"mt-auto flex flex-col-reverse gap-3 p-6 sm:flex-row sm:justify-end\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible title for the sheet, announced when it opens. */\nfunction SheetTitle({ className, ...props }: React.ComponentProps<typeof SheetPrimitive.Title>) {\n return (\n <SheetPrimitive.Title\n data-slot=\"sheet-title\"\n // Figma: heading 4 (Outfit Regular 20/24). Bound to raw neutral/900 in\n // Figma — we use content/primary (flag #13).\n className={cn(\n \"font-heading text-[length:var(--heading-4-font-size)] leading-[var(--heading-4-line-height)] font-normal text-primary-txt\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Accessible supporting text for the sheet, linked to the dialog for screen readers. */\nfunction SheetDescription({\n className,\n ...props\n}: React.ComponentProps<typeof SheetPrimitive.Description>) {\n return (\n <SheetPrimitive.Description\n data-slot=\"sheet-description\"\n className={cn(\"text-muted-txt text-sm leading-5\", className)}\n {...props}\n />\n );\n}\n\nexport {\n Sheet,\n SheetTrigger,\n SheetClose,\n SheetContent,\n SheetHeader,\n SheetFooter,\n SheetTitle,\n SheetDescription,\n};\n"],"mappings":";;;;;;;AAQA,SAAS,MAAM,EAAE,GAAG,SAA2D;CAC7E,OAAO,oBAACA,OAAe,MAAhB;EAAqB,aAAU;EAAQ,GAAI;CAAQ,CAAA;AAC5D;;AAGA,SAAS,aAAa,EAAE,GAAG,SAA8D;CACvF,OAAO,oBAACA,OAAe,SAAhB;EAAwB,aAAU;EAAgB,GAAI;CAAQ,CAAA;AACvE;;AAGA,SAAS,WAAW,EAAE,GAAG,SAA4D;CACnF,OAAO,oBAACA,OAAe,OAAhB;EAAsB,aAAU;EAAc,GAAI;CAAQ,CAAA;AACnE;;AAGA,SAAS,YAAY,EAAE,GAAG,SAA6D;CACrF,OAAO,oBAACA,OAAe,QAAhB;EAAuB,aAAU;EAAe,GAAI;CAAQ,CAAA;AACrE;;AAGA,SAAS,aAAa,EACpB,WACA,GAAG,SACmD;CACtD,OACE,oBAACA,OAAe,SAAhB;EACE,aAAU;EACV,WAAW,GACT,8IACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,MAAM,uBAAuB;CAC3B,SAAS;CACT,MAAM;CACN,OAAO;CACP,MAAM;AACR;AAEA,MAAM,oBAAoB;CACxB,OAAO;EACL,OAAO;EACP,MAAM;EACN,KAAK;EACL,QAAQ;CACV;CACA,SAAS;EACP,OAAO;EACP,MAAM;EACN,KAAK;EACL,QAAQ;CACV;CACA,QAAQ;EACN,OAAO;EACP,MAAM;EACN,KAAK;EACL,QAAQ;CACV;CACA,OAAO;EACL,OAAO;EACP,MAAM;EACN,KAAK;EACL,QAAQ;CACV;CACA,YAAY;EACV,OAAO;EACP,MAAM;EACN,KAAK;EACL,QAAQ;CACV;AACF;;AAGA,SAAS,aAAa,EACpB,WACA,UACA,OAAO,SACP,kBAAkB,MAClB,UAAU,WACV,OAAO,WACP,GAAG,SAUF;CACD,OACE,qBAAC,aAAD,EAAA,UAAA,CACE,oBAAC,cAAD,EAAc,WAAW,qBAAqB,SAAW,CAAA,GACzD,qBAACA,OAAe,SAAhB;EACE,aAAU;EACV,WAAW,GAGT,8NACA,SAAS,WACP,qHACF,SAAS,UACP,kHACF,SAAS,SACP,wGACF,SAAS,YACP,iHACF,kBAAkB,MAAM,OACxB,SACF;EACA,GAAI;YAjBN,CAmBG,UACA,mBACC,qBAACA,OAAe,OAAhB;GAAsB,WAAU;aAAhC,CACE,oBAAC,MAAD;IAAM,IAAI;IAAO,WAAU;GAAU,CAAA,GACrC,oBAAC,QAAD;IAAM,WAAU;cAAU;GAAW,CAAA,CACjB;IAEF;GACb,EAAA,CAAA;AAEjB;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAAC,OAAD;EAAK,aAAU;EAAe,WAAW,GAAG,2BAA2B,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEnG;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,sEACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,SAA4D;CAC9F,OACE,oBAACA,OAAe,OAAhB;EACE,aAAU;EAGV,WAAW,GACT,6HACA,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,iBAAiB,EACxB,WACA,GAAG,SACuD;CAC1D,OACE,oBAACA,OAAe,aAAhB;EACE,aAAU;EACV,WAAW,GAAG,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL"}
@@ -1,2 +1,2 @@
1
- import { C as SidebarTrigger, S as SidebarSeparator, _ as SidebarMenuSub, a as SidebarGroupAction, b as SidebarProvider, c as SidebarHeader, d as SidebarMenu, f as SidebarMenuAction, g as SidebarMenuSkeleton, h as SidebarMenuItem, i as SidebarGroup, l as SidebarInput, m as SidebarMenuButton, n as SidebarContent, o as SidebarGroupContent, p as SidebarMenuBadge, r as SidebarFooter, s as SidebarGroupLabel, t as Sidebar, u as SidebarInset, v as SidebarMenuSubButton, w as useSidebar, x as SidebarRail, y as SidebarMenuSubItem } from "../../index53.cjs";
1
+ import { C as SidebarTrigger, S as SidebarSeparator, _ as SidebarMenuSub, a as SidebarGroupAction, b as SidebarProvider, c as SidebarHeader, d as SidebarMenu, f as SidebarMenuAction, g as SidebarMenuSkeleton, h as SidebarMenuItem, i as SidebarGroup, l as SidebarInput, m as SidebarMenuButton, n as SidebarContent, o as SidebarGroupContent, p as SidebarMenuBadge, r as SidebarFooter, s as SidebarGroupLabel, t as Sidebar, u as SidebarInset, v as SidebarMenuSubButton, w as useSidebar, x as SidebarRail, y as SidebarMenuSubItem } from "../../index58.cjs";
2
2
  export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar };
@@ -1,2 +1,2 @@
1
- import { C as SidebarTrigger, S as SidebarSeparator, _ as SidebarMenuSub, a as SidebarGroupAction, b as SidebarProvider, c as SidebarHeader, d as SidebarMenu, f as SidebarMenuAction, g as SidebarMenuSkeleton, h as SidebarMenuItem, i as SidebarGroup, l as SidebarInput, m as SidebarMenuButton, n as SidebarContent, o as SidebarGroupContent, p as SidebarMenuBadge, r as SidebarFooter, s as SidebarGroupLabel, t as Sidebar, u as SidebarInset, v as SidebarMenuSubButton, w as useSidebar, x as SidebarRail, y as SidebarMenuSubItem } from "../../index53.js";
1
+ import { C as SidebarTrigger, S as SidebarSeparator, _ as SidebarMenuSub, a as SidebarGroupAction, b as SidebarProvider, c as SidebarHeader, d as SidebarMenu, f as SidebarMenuAction, g as SidebarMenuSkeleton, h as SidebarMenuItem, i as SidebarGroup, l as SidebarInput, m as SidebarMenuButton, n as SidebarContent, o as SidebarGroupContent, p as SidebarMenuBadge, r as SidebarFooter, s as SidebarGroupLabel, t as Sidebar, u as SidebarInset, v as SidebarMenuSubButton, w as useSidebar, x as SidebarRail, y as SidebarMenuSubItem } from "../../index58.js";
2
2
  export { Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, useSidebar };
@@ -1,2 +1,2 @@
1
- import { i as SkeletonObject, n as SkeletonAvatar, r as SkeletonLine, t as Skeleton } from "../../index54.cjs";
1
+ import { i as SkeletonObject, n as SkeletonAvatar, r as SkeletonLine, t as Skeleton } from "../../index59.cjs";
2
2
  export { Skeleton, SkeletonAvatar, SkeletonLine, SkeletonObject };
@@ -1,2 +1,2 @@
1
- import { i as SkeletonObject, n as SkeletonAvatar, r as SkeletonLine, t as Skeleton } from "../../index54.js";
1
+ import { i as SkeletonObject, n as SkeletonAvatar, r as SkeletonLine, t as Skeleton } from "../../index59.js";
2
2
  export { Skeleton, SkeletonAvatar, SkeletonLine, SkeletonObject };
@@ -1,2 +1,2 @@
1
- import { t as Slider } from "../../index55.cjs";
1
+ import { t as Slider } from "../../index60.cjs";
2
2
  export { Slider };
@@ -1,2 +1,2 @@
1
- import { t as Slider } from "../../index55.js";
1
+ import { t as Slider } from "../../index60.js";
2
2
  export { Slider };
@@ -1,2 +1,2 @@
1
- import { t as Toaster } from "../../index56.cjs";
1
+ import { t as Toaster } from "../../index61.cjs";
2
2
  export { Toaster };
@@ -1,2 +1,2 @@
1
- import { t as Toaster } from "../../index56.js";
1
+ import { t as Toaster } from "../../index61.js";
2
2
  export { Toaster };
@@ -1,2 +1,2 @@
1
- import { t as Spinner } from "../../index57.cjs";
1
+ import { t as Spinner } from "../../index62.cjs";
2
2
  export { Spinner };
@@ -1,2 +1,2 @@
1
- import { t as Spinner } from "../../index57.js";
1
+ import { t as Spinner } from "../../index62.js";
2
2
  export { Spinner };
@@ -1,2 +1,2 @@
1
- import { n as Switch, r as SwitchGroup, t as RichSwitchGroup } from "../../index58.cjs";
1
+ import { n as Switch, r as SwitchGroup, t as RichSwitchGroup } from "../../index63.cjs";
2
2
  export { RichSwitchGroup, Switch, SwitchGroup };
@@ -1,2 +1,2 @@
1
- import { n as Switch, r as SwitchGroup, t as RichSwitchGroup } from "../../index58.js";
1
+ import { n as Switch, r as SwitchGroup, t as RichSwitchGroup } from "../../index63.js";
2
2
  export { RichSwitchGroup, Switch, SwitchGroup };
@@ -1,2 +1,2 @@
1
- import { a as TableFooter, c as TableRow, i as TableCell, n as TableBody, o as TableHead, r as TableCaption, s as TableHeader, t as Table } from "../../index59.cjs";
1
+ import { a as TableFooter, c as TableRow, i as TableCell, n as TableBody, o as TableHead, r as TableCaption, s as TableHeader, t as Table } from "../../index64.cjs";
2
2
  export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };
@@ -1,2 +1,2 @@
1
- import { a as TableFooter, c as TableRow, i as TableCell, n as TableBody, o as TableHead, r as TableCaption, s as TableHeader, t as Table } from "../../index59.js";
1
+ import { a as TableFooter, c as TableRow, i as TableCell, n as TableBody, o as TableHead, r as TableCaption, s as TableHeader, t as Table } from "../../index64.js";
2
2
  export { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow };
@@ -1,6 +1,7 @@
1
1
  Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_chunk = require("../../chunk.cjs");
3
3
  const require_cn = require("../../cn.cjs");
4
+ const require_Icon = require("../../Icon.cjs");
4
5
  let class_variance_authority = require("class-variance-authority");
5
6
  let react = require("react");
6
7
  react = require_chunk.__toESM(react);
@@ -45,11 +46,11 @@ const tabsListVariants = (0, class_variance_authority.cva)("relative inline-flex
45
46
  line: "gap-1 bg-transparent",
46
47
  pill: "justify-center rounded-10 bg-muted-bg p-0.75",
47
48
  segmented: "justify-center rounded-12 bg-muted-bg p-1",
48
- fancy: "w-full items-stretch gap-1 bg-transparent"
49
+ fancy: "items-stretch gap-1 bg-transparent"
49
50
  },
50
51
  orientation: {
51
- horizontal: "",
52
- vertical: "h-fit flex-col"
52
+ horizontal: "w-max min-w-full",
53
+ vertical: "h-fit w-full flex-col"
53
54
  },
54
55
  size: {
55
56
  sm: "",
@@ -88,7 +89,79 @@ function TabsList({ className, children, tabPrefix, tabSuffix, ...props }) {
88
89
  const { variant, size, orientation } = react.useContext(TabsContext);
89
90
  const isSegmented = variant === "segmented";
90
91
  const listRef = react.useRef(null);
92
+ const scrollContainerRef = react.useRef(null);
91
93
  const [indicator, setIndicator] = react.useState(null);
94
+ const [scrollAffordance, setScrollAffordance] = react.useState({
95
+ hasOverflow: false,
96
+ canScrollLeft: false,
97
+ canScrollRight: false
98
+ });
99
+ const revealTrigger = react.useCallback((trigger) => {
100
+ if (!trigger || orientation !== "horizontal") return;
101
+ trigger.scrollIntoView({
102
+ block: "nearest",
103
+ inline: "nearest"
104
+ });
105
+ }, [orientation]);
106
+ react.useEffect(() => {
107
+ if (orientation !== "horizontal") return;
108
+ const list = listRef.current;
109
+ if (!list) return;
110
+ const revealActive = () => {
111
+ revealTrigger(list.querySelector("[data-slot=\"tabs-trigger\"][data-state=\"active\"]"));
112
+ };
113
+ const onFocusIn = (event) => {
114
+ const target = event.target;
115
+ if (!(target instanceof HTMLElement)) return;
116
+ if (!target.matches("[data-slot=\"tabs-trigger\"]")) return;
117
+ revealTrigger(target);
118
+ };
119
+ revealActive();
120
+ list.addEventListener("focusin", onFocusIn);
121
+ const mutation = new MutationObserver(revealActive);
122
+ mutation.observe(list, {
123
+ attributes: true,
124
+ attributeFilter: ["data-state"],
125
+ subtree: true
126
+ });
127
+ return () => {
128
+ list.removeEventListener("focusin", onFocusIn);
129
+ mutation.disconnect();
130
+ };
131
+ }, [orientation, revealTrigger]);
132
+ react.useLayoutEffect(() => {
133
+ if (orientation !== "horizontal") {
134
+ setScrollAffordance({
135
+ hasOverflow: false,
136
+ canScrollLeft: false,
137
+ canScrollRight: false
138
+ });
139
+ return;
140
+ }
141
+ const container = scrollContainerRef.current;
142
+ const list = listRef.current;
143
+ if (!container || !list) return;
144
+ const update = () => {
145
+ const hasOverflow = container.scrollWidth - container.clientWidth > 1;
146
+ const containerRect = container.getBoundingClientRect();
147
+ const listRect = list.getBoundingClientRect();
148
+ setScrollAffordance({
149
+ hasOverflow,
150
+ canScrollLeft: hasOverflow && listRect.left < containerRect.left - 1,
151
+ canScrollRight: hasOverflow && listRect.right > containerRect.right + 1
152
+ });
153
+ };
154
+ update();
155
+ const resize = new ResizeObserver(update);
156
+ resize.observe(container);
157
+ resize.observe(list);
158
+ container.addEventListener("scroll", update, { passive: true });
159
+ document.fonts?.ready.then(update);
160
+ return () => {
161
+ resize.disconnect();
162
+ container.removeEventListener("scroll", update);
163
+ };
164
+ }, [orientation]);
92
165
  react.useEffect(() => {
93
166
  if (!isSegmented) return;
94
167
  const list = listRef.current;
@@ -120,17 +193,39 @@ function TabsList({ className, children, tabPrefix, tabSuffix, ...props }) {
120
193
  resize.disconnect();
121
194
  };
122
195
  }, [isSegmented]);
123
- return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(radix_ui.Tabs.List, {
124
- ref: listRef,
125
- "data-slot": "tabs-list",
126
- className: require_cn.cn(tabsListVariants({
196
+ const scrollLeft = react.useCallback(() => {
197
+ const container = scrollContainerRef.current;
198
+ if (!container) return;
199
+ const scrollAmount = container.clientWidth * .8;
200
+ container.scrollBy({
201
+ left: -scrollAmount,
202
+ behavior: "smooth"
203
+ });
204
+ }, []);
205
+ const scrollRight = react.useCallback(() => {
206
+ const container = scrollContainerRef.current;
207
+ if (!container) return;
208
+ const scrollAmount = container.clientWidth * .8;
209
+ container.scrollBy({
210
+ left: scrollAmount,
211
+ behavior: "smooth"
212
+ });
213
+ }, []);
214
+ const getListClassName = () => {
215
+ if (orientation === "horizontal") return require_cn.cn("relative inline-flex h-full items-center text-muted-txt", variant === "line" && "gap-1 bg-transparent", variant === "pill" && "gap-0.5", variant === "segmented" && "gap-0.5", variant === "fancy" && "items-stretch gap-1 bg-transparent", "w-max min-w-full", className);
216
+ return require_cn.cn(tabsListVariants({
127
217
  variant,
128
218
  size,
129
219
  orientation
130
- }), className),
220
+ }), className);
221
+ };
222
+ const list = /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(radix_ui.Tabs.List, {
223
+ ref: listRef,
224
+ "data-slot": "tabs-list",
225
+ className: getListClassName(),
131
226
  ...props,
132
227
  children: [
133
- tabPrefix,
228
+ orientation !== "horizontal" && tabPrefix,
134
229
  isSegmented && indicator && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
135
230
  "data-slot": "tabs-indicator",
136
231
  "aria-hidden": true,
@@ -148,7 +243,55 @@ function TabsList({ className, children, tabPrefix, tabSuffix, ...props }) {
148
243
  }
149
244
  }),
150
245
  children,
151
- tabSuffix
246
+ orientation !== "horizontal" && tabSuffix
247
+ ]
248
+ });
249
+ if (orientation === "vertical") return list;
250
+ const { hasOverflow } = scrollAffordance;
251
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
252
+ className: require_cn.cn("flex w-full items-stretch", variant === "pill" && "rounded-10 bg-muted-bg p-0.75", variant === "segmented" && "rounded-12 bg-muted-bg p-1", variant === "pill" && size === "sm" && "h-6 p-0.5", variant === "pill" && size === "md" && "h-8.75", variant === "pill" && size === "lg" && "h-10 p-1", variant === "segmented" && size === "sm" && "h-6 p-0.5", variant === "segmented" && size === "md" && "h-8.75", variant === "segmented" && size === "lg" && "h-10 p-1"),
253
+ "data-slot": "tabs-wrapper",
254
+ children: [
255
+ tabPrefix && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
256
+ "data-slot": "tabs-prefix",
257
+ className: "flex shrink-0 items-center px-1",
258
+ children: tabPrefix
259
+ }),
260
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
261
+ type: "button",
262
+ onClick: scrollLeft,
263
+ disabled: !scrollAffordance.canScrollLeft,
264
+ "aria-label": "Scroll tabs left",
265
+ tabIndex: hasOverflow ? 0 : -1,
266
+ className: require_cn.cn("flex shrink-0 items-center justify-center overflow-hidden transition-all", hasOverflow ? "w-8" : "w-0", hasOverflow && (variant === "pill" || variant === "segmented") && "mr-0.5 border-r border-border/30", "disabled:cursor-not-allowed disabled:opacity-40", "enabled:hover:opacity-70 enabled:active:scale-95", "focus:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-inset"),
267
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
268
+ icon: "chevron-left",
269
+ className: "size-4 shrink-0 text-muted-txt"
270
+ })
271
+ }),
272
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
273
+ ref: scrollContainerRef,
274
+ "data-slot": "tabs-scroll-container",
275
+ className: require_cn.cn("min-w-0 flex-1 touch-pan-x overflow-x-auto overscroll-x-contain [-webkit-overflow-scrolling:touch]", "[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]", variant === "line" && "pb-1.5"),
276
+ children: list
277
+ }),
278
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
279
+ type: "button",
280
+ onClick: scrollRight,
281
+ disabled: !scrollAffordance.canScrollRight,
282
+ "aria-label": "Scroll tabs right",
283
+ tabIndex: hasOverflow ? 0 : -1,
284
+ className: require_cn.cn("flex shrink-0 items-center justify-center overflow-hidden transition-all", hasOverflow ? "w-8" : "w-0", hasOverflow && (variant === "pill" || variant === "segmented") && "ml-0.5 border-l border-border/30", "disabled:cursor-not-allowed disabled:opacity-40", "enabled:hover:opacity-70 enabled:active:scale-95", "focus:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-inset"),
285
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_Icon.Icon, {
286
+ icon: "chevron-right",
287
+ className: "size-4 shrink-0 text-muted-txt"
288
+ })
289
+ }),
290
+ tabSuffix && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
291
+ "data-slot": "tabs-suffix",
292
+ className: "flex shrink-0 items-center px-1",
293
+ children: tabSuffix
294
+ })
152
295
  ]
153
296
  });
154
297
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["React","TabsPrimitive","cn"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-txt\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-10 bg-muted-bg p-0.75\",\n segmented: \"justify-center rounded-12 bg-muted-bg p-1\",\n fancy: \"w-full items-stretch gap-1 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-6 p-0.5\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-8.75\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10 p-1\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n tabPrefix,\n tabSuffix,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & {\n tabPrefix?: React.ReactNode;\n tabSuffix?: React.ReactNode;\n}) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {tabPrefix}\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-8 bg-primary-bg shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n {tabSuffix}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-primary-txt outline-none transition-all focus-visible:ring-3 focus-visible:ring-focus disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-primary-txt [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-primary-bg data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-8\",\n // Fancy (Figma Components file, node 1:6831): default = glass-60→glass-20\n // vertical gradient card; hover = solid glass-none; selected = 4px taller,\n // flat-bottomed, glass-none→glass-40 (72.6% stop), semibold, with concave\n // 16px corner curves where it meets the panel.\n fancy: cn(\n \"mb-1 flex-1 justify-between rounded-16 font-normal backdrop-blur-glass\",\n \"bg-gradient-to-b from-glass-60-bg from-[3.4%] to-glass-20-bg\",\n \"data-[state=inactive]:hover:bg-none data-[state=inactive]:hover:bg-glass-none-bg\",\n \"data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:from-glass-none-bg data-[state=active]:to-glass-40-bg data-[state=active]:to-[72.6%] data-[state=active]:font-semibold\",\n \"data-[state=active]:before:absolute data-[state=active]:before:-left-4 data-[state=active]:before:bottom-0 data-[state=active]:before:size-4 data-[state=active]:before:bg-[radial-gradient(circle_at_top_left,transparent_15.5px,var(--glass-40-bg)_16px)]\",\n \"data-[state=active]:after:absolute data-[state=active]:after:-right-4 data-[state=active]:after:bottom-0 data-[state=active]:after:size-4 data-[state=active]:after:bg-[radial-gradient(circle_at_top_right,transparent_15.5px,var(--glass-40-bg)_16px)]\",\n // The curves flow into NEIGHBOURING tabs only — never past the group edge.\n \"first:before:hidden last:after:hidden\",\n ),\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n {\n variant: [\"line\", \"pill\", \"segmented\"],\n size: \"sm\",\n class: \"px-2 py-0.5 text-xs leading-4\",\n },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm leading-5\" },\n {\n variant: [\"line\", \"pill\", \"segmented\"],\n size: \"lg\",\n class: \"px-2 py-1.5 text-sm leading-5\",\n },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-6 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-6 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-16 rounded-t-none bg-glass-40-bg p-5 backdrop-blur-glass\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted-bg px-1 text-xs font-medium text-muted-txt\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-primary-invert-bg group-data-[variant=fancy]/tabs:px-2 group-data-[variant=fancy]/tabs:leading-4 group-data-[variant=fancy]/tabs:font-semibold group-data-[variant=fancy]/tabs:text-primary-invert-txt\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["React","TabsPrimitive","cn","Icon"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\nimport { Icon } from \"../Icon\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-txt\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-10 bg-muted-bg p-0.75\",\n segmented: \"justify-center rounded-12 bg-muted-bg p-1\",\n fancy: \"items-stretch gap-1 bg-transparent\",\n },\n orientation: {\n horizontal: \"w-max min-w-full\",\n vertical: \"h-fit w-full flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-6 p-0.5\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-8.75\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10 p-1\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n tabPrefix,\n tabSuffix,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List> & {\n tabPrefix?: React.ReactNode;\n tabSuffix?: React.ReactNode;\n}) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const scrollContainerRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n const [scrollAffordance, setScrollAffordance] = React.useState({\n hasOverflow: false,\n canScrollLeft: false,\n canScrollRight: false,\n });\n\n const revealTrigger = React.useCallback(\n (trigger: HTMLElement | null) => {\n if (!trigger || orientation !== \"horizontal\") return;\n trigger.scrollIntoView({ block: \"nearest\", inline: \"nearest\" });\n },\n [orientation],\n );\n\n React.useEffect(() => {\n if (orientation !== \"horizontal\") return;\n const list = listRef.current;\n if (!list) return;\n\n const revealActive = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n revealTrigger(active);\n };\n\n const onFocusIn = (event: FocusEvent) => {\n const target = event.target;\n if (!(target instanceof HTMLElement)) return;\n if (!target.matches('[data-slot=\"tabs-trigger\"]')) return;\n revealTrigger(target);\n };\n\n revealActive();\n list.addEventListener(\"focusin\", onFocusIn);\n\n const mutation = new MutationObserver(revealActive);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n\n return () => {\n list.removeEventListener(\"focusin\", onFocusIn);\n mutation.disconnect();\n };\n }, [orientation, revealTrigger]);\n\n // Layout effect (not a plain effect) so the very first paint already\n // reflects real overflow — a plain effect fires after paint, so the\n // arrows would mount hidden for one frame and then pop in, which is both\n // a visible flash and a race automated screenshot tools can catch mid-flight.\n React.useLayoutEffect(() => {\n if (orientation !== \"horizontal\") {\n setScrollAffordance({ hasOverflow: false, canScrollLeft: false, canScrollRight: false });\n return;\n }\n\n const container = scrollContainerRef.current;\n const list = listRef.current;\n if (!container || !list) return;\n\n const update = () => {\n const hasOverflow = container.scrollWidth - container.clientWidth > 1;\n // Measured from rendered position rather than `scrollLeft` — `scrollLeft`'s\n // zero point and sign flip in RTL, so a direct comparison would mislabel\n // which edge is scrollable. Comparing rects stays correct in both directions.\n const containerRect = container.getBoundingClientRect();\n const listRect = list.getBoundingClientRect();\n setScrollAffordance({\n hasOverflow,\n canScrollLeft: hasOverflow && listRect.left < containerRect.left - 1,\n canScrollRight: hasOverflow && listRect.right > containerRect.right + 1,\n });\n };\n\n update();\n // `list`'s size reacts to content changes (tabs added/removed, prefix/suffix\n // toggled), so observing it also covers those cases without depending on\n // `children`/`tabPrefix`/`tabSuffix` directly.\n const resize = new ResizeObserver(update);\n resize.observe(container);\n resize.observe(list);\n container.addEventListener(\"scroll\", update, { passive: true });\n\n // Web fonts can still be swapping in when this first `update()` runs, so\n // it may measure with fallback-font (narrower) text metrics and miss real\n // overflow. `list`'s width changes once the real font lands, which the\n // ResizeObserver above will also catch — this just makes the correction\n // immediate instead of waiting on that indirect signal.\n document.fonts?.ready.then(update);\n\n return () => {\n resize.disconnect();\n container.removeEventListener(\"scroll\", update);\n };\n }, [orientation]);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n const scrollLeft = React.useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n // Scroll by 80% of visible width for smooth navigation\n const scrollAmount = container.clientWidth * 0.8;\n container.scrollBy({ left: -scrollAmount, behavior: \"smooth\" });\n }, []);\n\n const scrollRight = React.useCallback(() => {\n const container = scrollContainerRef.current;\n if (!container) return;\n // Scroll by 80% of visible width for smooth navigation\n const scrollAmount = container.clientWidth * 0.8;\n container.scrollBy({ left: scrollAmount, behavior: \"smooth\" });\n }, []);\n\n // TabsList's own styling only ever needs the \"reduced\" (gap-only, no\n // bg/padding/rounding) look for horizontal orientation now — the track\n // background/padding lives on the always-mounted wrapper below instead, so\n // `tabPrefix`/`tabSuffix` (rendered as wrapper children, not list children)\n // sit on the same surface as the tabs whether or not there's overflow.\n // `h-full` fills the scroll container's height (itself stretched to the\n // wrapper's content box, see the wrapper below), giving TabsList a definite\n // height again — triggers size themselves via `h-[calc(100%-1px)]`, which\n // resolves to `auto` (collapsing to their own content height, shorter than\n // the track) against an indefinite parent height.\n const getListClassName = () => {\n if (orientation === \"horizontal\") {\n return cn(\n \"relative inline-flex h-full items-center text-muted-txt\",\n variant === \"line\" && \"gap-1 bg-transparent\",\n variant === \"pill\" && \"gap-0.5\",\n variant === \"segmented\" && \"gap-0.5\",\n variant === \"fancy\" && \"items-stretch gap-1 bg-transparent\",\n \"w-max min-w-full\",\n className,\n );\n }\n return cn(tabsListVariants({ variant, size, orientation }), className);\n };\n\n // `tabPrefix`/`tabSuffix` only render inline in the (non-scrolling)\n // vertical list; for horizontal they're rendered as fixed wrapper children\n // outside the scroll container below, so they never scroll with the tabs.\n const list = (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={getListClassName()}\n {...props}\n >\n {orientation !== \"horizontal\" && tabPrefix}\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-8 bg-primary-bg shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n {orientation !== \"horizontal\" && tabSuffix}\n </TabsPrimitive.List>\n );\n\n if (orientation === \"vertical\") {\n return list;\n }\n\n const { hasOverflow } = scrollAffordance;\n\n // Arrows and the scroll container are always mounted (never conditionally\n // swapped) so `scrollContainerRef`/`listRef` stay attached to the same DOM\n // nodes across overflow toggles — the ResizeObserver/MutationObserver\n // effects below only run once per `orientation` and would otherwise end up\n // watching detached elements after a remount. Arrows collapse to 0 width\n // instead of unmounting when there's no overflow. Track background/padding\n // is unconditional (not gated on `hasOverflow`) since it now lives here\n // rather than on TabsList, so `tabPrefix`/`tabSuffix` share the same\n // surface as the tabs regardless of overflow state.\n return (\n <div\n className={cn(\n \"flex w-full items-stretch\",\n variant === \"pill\" && \"rounded-10 bg-muted-bg p-0.75\",\n variant === \"segmented\" && \"rounded-12 bg-muted-bg p-1\",\n variant === \"pill\" && size === \"sm\" && \"h-6 p-0.5\",\n variant === \"pill\" && size === \"md\" && \"h-8.75\",\n variant === \"pill\" && size === \"lg\" && \"h-10 p-1\",\n variant === \"segmented\" && size === \"sm\" && \"h-6 p-0.5\",\n variant === \"segmented\" && size === \"md\" && \"h-8.75\",\n variant === \"segmented\" && size === \"lg\" && \"h-10 p-1\",\n )}\n data-slot=\"tabs-wrapper\"\n >\n {/* Fixed prefix — sits outside the scroll container, never scrolls */}\n {tabPrefix && (\n <div data-slot=\"tabs-prefix\" className=\"flex shrink-0 items-center px-1\">\n {tabPrefix}\n </div>\n )}\n\n {/* Left scroll arrow - collapses to 0 width when there's no overflow */}\n <button\n type=\"button\"\n onClick={scrollLeft}\n disabled={!scrollAffordance.canScrollLeft}\n aria-label=\"Scroll tabs left\"\n tabIndex={hasOverflow ? 0 : -1}\n className={cn(\n \"flex shrink-0 items-center justify-center overflow-hidden transition-all\",\n // Width\n hasOverflow ? \"w-8\" : \"w-0\",\n // Divider for pill/segmented variants\n hasOverflow &&\n (variant === \"pill\" || variant === \"segmented\") &&\n \"mr-0.5 border-r border-border/30\",\n // Disabled state\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n // Hover state (only when enabled)\n \"enabled:hover:opacity-70 enabled:active:scale-95\",\n // Focus state\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-inset\",\n )}\n >\n <Icon icon=\"chevron-left\" className=\"size-4 shrink-0 text-muted-txt\" />\n </button>\n\n {/* Scrollable container - flex-1 to fill space between arrows */}\n <div\n ref={scrollContainerRef}\n data-slot=\"tabs-scroll-container\"\n className={cn(\n \"min-w-0 flex-1 touch-pan-x overflow-x-auto overscroll-x-contain [-webkit-overflow-scrolling:touch]\",\n // Hide scrollbar\n \"[&::-webkit-scrollbar]:hidden [-ms-overflow-style:none] [scrollbar-width:none]\",\n variant === \"line\" && \"pb-1.5\",\n )}\n >\n {list}\n </div>\n\n {/* Right scroll arrow - collapses to 0 width when there's no overflow */}\n <button\n type=\"button\"\n onClick={scrollRight}\n disabled={!scrollAffordance.canScrollRight}\n aria-label=\"Scroll tabs right\"\n tabIndex={hasOverflow ? 0 : -1}\n className={cn(\n \"flex shrink-0 items-center justify-center overflow-hidden transition-all\",\n // Width\n hasOverflow ? \"w-8\" : \"w-0\",\n // Divider for pill/segmented variants\n hasOverflow &&\n (variant === \"pill\" || variant === \"segmented\") &&\n \"ml-0.5 border-l border-border/30\",\n // Disabled state\n \"disabled:cursor-not-allowed disabled:opacity-40\",\n // Hover state (only when enabled)\n \"enabled:hover:opacity-70 enabled:active:scale-95\",\n // Focus state\n \"focus:outline-none focus-visible:ring-2 focus-visible:ring-focus focus-visible:ring-inset\",\n )}\n >\n <Icon icon=\"chevron-right\" className=\"size-4 shrink-0 text-muted-txt\" />\n </button>\n\n {/* Fixed suffix — sits outside the scroll container, never scrolls */}\n {tabSuffix && (\n <div data-slot=\"tabs-suffix\" className=\"flex shrink-0 items-center px-1\">\n {tabSuffix}\n </div>\n )}\n </div>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-primary-txt outline-none transition-all focus-visible:ring-3 focus-visible:ring-focus disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-primary-txt [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-primary-bg data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-8\",\n // Fancy (Figma Components file, node 1:6831): default = glass-60→glass-20\n // vertical gradient card; hover = solid glass-none; selected = 4px taller,\n // flat-bottomed, glass-none→glass-40 (72.6% stop), semibold, with concave\n // 16px corner curves where it meets the panel.\n fancy: cn(\n \"mb-1 flex-1 justify-between rounded-16 font-normal backdrop-blur-glass\",\n \"bg-gradient-to-b from-glass-60-bg from-[3.4%] to-glass-20-bg\",\n \"data-[state=inactive]:hover:bg-none data-[state=inactive]:hover:bg-glass-none-bg\",\n \"data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:from-glass-none-bg data-[state=active]:to-glass-40-bg data-[state=active]:to-[72.6%] data-[state=active]:font-semibold\",\n \"data-[state=active]:before:absolute data-[state=active]:before:-left-4 data-[state=active]:before:bottom-0 data-[state=active]:before:size-4 data-[state=active]:before:bg-[radial-gradient(circle_at_top_left,transparent_15.5px,var(--glass-40-bg)_16px)]\",\n \"data-[state=active]:after:absolute data-[state=active]:after:-right-4 data-[state=active]:after:bottom-0 data-[state=active]:after:size-4 data-[state=active]:after:bg-[radial-gradient(circle_at_top_right,transparent_15.5px,var(--glass-40-bg)_16px)]\",\n // The curves flow into NEIGHBOURING tabs only — never past the group edge.\n \"first:before:hidden last:after:hidden\",\n ),\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n {\n variant: [\"line\", \"pill\", \"segmented\"],\n size: \"sm\",\n class: \"px-2 py-0.5 text-xs leading-4\",\n },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm leading-5\" },\n {\n variant: [\"line\", \"pill\", \"segmented\"],\n size: \"lg\",\n class: \"px-2 py-1.5 text-sm leading-5\",\n },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-6 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-6 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-primary-txt after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-16 rounded-t-none bg-glass-40-bg p-5 backdrop-blur-glass\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted-bg px-1 text-xs font-medium text-muted-txt\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-primary-invert-bg group-data-[variant=fancy]/tabs:px-2 group-data-[variant=fancy]/tabs:leading-4 group-data-[variant=fancy]/tabs:font-semibold group-data-[variant=fancy]/tabs:text-primary-invert-txt\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- import { a as TabsTrigger, i as TabsList, n as TabsContent, o as tabsListVariants, r as TabsCounter, s as tabsTriggerVariants, t as Tabs } from "../../index60.cjs";
1
+ import { a as TabsTrigger, i as TabsList, n as TabsContent, o as tabsListVariants, r as TabsCounter, s as tabsTriggerVariants, t as Tabs } from "../../index65.cjs";
2
2
  export { Tabs, TabsContent, TabsCounter, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants };