@psnext/design-system 1.5.1 → 2.1.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 (646) hide show
  1. package/DESIGN.md +639 -0
  2. package/README.md +39 -2
  3. package/SKILL.md +101 -0
  4. package/bin/install-agent-skill.mjs +54 -0
  5. package/dist/Header.cjs +32 -29
  6. package/dist/Header.cjs.map +1 -1
  7. package/dist/Header.js +32 -29
  8. package/dist/Header.js.map +1 -1
  9. package/dist/Icon.cjs +19 -19
  10. package/dist/Icon.cjs.map +1 -1
  11. package/dist/Icon.js +19 -19
  12. package/dist/Icon.js.map +1 -1
  13. package/dist/Logo.cjs +4 -14
  14. package/dist/Logo.cjs.map +1 -1
  15. package/dist/Logo.js +4 -14
  16. package/dist/Logo.js.map +1 -1
  17. package/dist/Sidebar.cjs +26 -20
  18. package/dist/Sidebar.cjs.map +1 -1
  19. package/dist/Sidebar.js +21 -21
  20. package/dist/Sidebar.js.map +1 -1
  21. package/dist/cn.cjs +14 -1
  22. package/dist/cn.cjs.map +1 -1
  23. package/dist/cn.js +14 -1
  24. package/dist/cn.js.map +1 -1
  25. package/dist/index.cjs +13 -10
  26. package/dist/index.d.cts +5 -5
  27. package/dist/index.d.cts.map +1 -1
  28. package/dist/index.d.ts +5 -5
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +5 -4
  31. package/dist/index10.d.cts +4 -4
  32. package/dist/index10.d.cts.map +1 -1
  33. package/dist/index10.d.ts +7 -7
  34. package/dist/index11.d.cts +3 -3
  35. package/dist/index11.d.cts.map +1 -1
  36. package/dist/index11.d.ts +3 -3
  37. package/dist/index11.d.ts.map +1 -1
  38. package/dist/index12.d.cts +18 -17
  39. package/dist/index12.d.cts.map +1 -1
  40. package/dist/index12.d.ts +18 -17
  41. package/dist/index12.d.ts.map +1 -1
  42. package/dist/index13.d.cts +6 -6
  43. package/dist/index13.d.cts.map +1 -1
  44. package/dist/index13.d.ts +6 -6
  45. package/dist/index14.d.cts +5 -5
  46. package/dist/index14.d.cts.map +1 -1
  47. package/dist/index14.d.ts +5 -5
  48. package/dist/index14.d.ts.map +1 -1
  49. package/dist/index15.d.cts +3 -3
  50. package/dist/index15.d.cts.map +1 -1
  51. package/dist/index15.d.ts +3 -3
  52. package/dist/index15.d.ts.map +1 -1
  53. package/dist/index16.d.cts +2 -2
  54. package/dist/index16.d.cts.map +1 -1
  55. package/dist/index16.d.ts +2 -2
  56. package/dist/index17.d.cts +4 -4
  57. package/dist/index17.d.cts.map +1 -1
  58. package/dist/index17.d.ts +4 -4
  59. package/dist/index17.d.ts.map +1 -1
  60. package/dist/index18.d.cts +11 -11
  61. package/dist/index18.d.cts.map +1 -1
  62. package/dist/index18.d.ts +11 -11
  63. package/dist/index19.d.cts +10 -10
  64. package/dist/index19.d.cts.map +1 -1
  65. package/dist/index19.d.ts +10 -10
  66. package/dist/index19.d.ts.map +1 -1
  67. package/dist/index2.d.cts +8 -8
  68. package/dist/index2.d.cts.map +1 -1
  69. package/dist/index2.d.ts +8 -8
  70. package/dist/index2.d.ts.map +1 -1
  71. package/dist/index20.d.cts +16 -16
  72. package/dist/index20.d.cts.map +1 -1
  73. package/dist/index20.d.ts +16 -16
  74. package/dist/index20.d.ts.map +1 -1
  75. package/dist/index21.d.cts +4 -4
  76. package/dist/index21.d.cts.map +1 -1
  77. package/dist/index21.d.ts +4 -4
  78. package/dist/index22.d.cts +11 -11
  79. package/dist/index22.d.cts.map +1 -1
  80. package/dist/index22.d.ts +11 -11
  81. package/dist/index22.d.ts.map +1 -1
  82. package/dist/index23.d.cts +16 -16
  83. package/dist/index23.d.cts.map +1 -1
  84. package/dist/index23.d.ts +16 -16
  85. package/dist/index23.d.ts.map +1 -1
  86. package/dist/index24.d.cts +10 -10
  87. package/dist/index24.d.cts.map +1 -1
  88. package/dist/index24.d.ts +10 -10
  89. package/dist/index25.d.cts +2 -2
  90. package/dist/index25.d.ts +2 -2
  91. package/dist/index26.d.cts +13 -13
  92. package/dist/index26.d.ts +14 -14
  93. package/dist/index26.d.ts.map +1 -1
  94. package/dist/index27.d.cts +7 -7
  95. package/dist/index27.d.cts.map +1 -1
  96. package/dist/index27.d.ts +7 -7
  97. package/dist/index27.d.ts.map +1 -1
  98. package/dist/index28.d.cts +5 -5
  99. package/dist/index28.d.ts +5 -5
  100. package/dist/index28.d.ts.map +1 -1
  101. package/dist/index29.d.cts +4 -4
  102. package/dist/index29.d.ts +4 -4
  103. package/dist/index29.d.ts.map +1 -1
  104. package/dist/index3.d.cts +13 -13
  105. package/dist/index3.d.cts.map +1 -1
  106. package/dist/index3.d.ts +13 -13
  107. package/dist/index3.d.ts.map +1 -1
  108. package/dist/index30.d.cts +5 -5
  109. package/dist/index30.d.ts +5 -5
  110. package/dist/index31.d.cts +5 -5
  111. package/dist/index31.d.cts.map +1 -1
  112. package/dist/index31.d.ts +5 -5
  113. package/dist/index31.d.ts.map +1 -1
  114. package/dist/index32.d.cts +8 -5
  115. package/dist/index32.d.cts.map +1 -1
  116. package/dist/index32.d.ts +9 -6
  117. package/dist/index32.d.ts.map +1 -1
  118. package/dist/index33.d.cts +14 -10
  119. package/dist/index33.d.cts.map +1 -1
  120. package/dist/index33.d.ts +14 -10
  121. package/dist/index33.d.ts.map +1 -1
  122. package/dist/index34.d.cts +5 -5
  123. package/dist/index34.d.ts +5 -5
  124. package/dist/index35.d.cts +14 -14
  125. package/dist/index35.d.ts +16 -16
  126. package/dist/index35.d.ts.map +1 -1
  127. package/dist/index36.d.cts +3 -3
  128. package/dist/index36.d.cts.map +1 -1
  129. package/dist/index36.d.ts +3 -3
  130. package/dist/index36.d.ts.map +1 -1
  131. package/dist/index37.d.cts +5 -5
  132. package/dist/index37.d.cts.map +1 -1
  133. package/dist/index37.d.ts +4 -4
  134. package/dist/index37.d.ts.map +1 -1
  135. package/dist/index38.d.cts +2 -2
  136. package/dist/index38.d.ts +2 -2
  137. package/dist/index39.d.cts +17 -17
  138. package/dist/index39.d.cts.map +1 -1
  139. package/dist/index39.d.ts +17 -17
  140. package/dist/index39.d.ts.map +1 -1
  141. package/dist/index4.d.cts +2 -2
  142. package/dist/index4.d.cts.map +1 -1
  143. package/dist/index4.d.ts +2 -2
  144. package/dist/index4.d.ts.map +1 -1
  145. package/dist/index40.d.cts +4 -4
  146. package/dist/index40.d.ts +5 -5
  147. package/dist/index40.d.ts.map +1 -1
  148. package/dist/index41.d.cts +11 -11
  149. package/dist/index41.d.cts.map +1 -1
  150. package/dist/index41.d.ts +11 -11
  151. package/dist/index41.d.ts.map +1 -1
  152. package/dist/index42.d.cts +8 -8
  153. package/dist/index42.d.cts.map +1 -1
  154. package/dist/index42.d.ts +8 -8
  155. package/dist/index42.d.ts.map +1 -1
  156. package/dist/index43.d.cts +10 -10
  157. package/dist/index43.d.cts.map +1 -1
  158. package/dist/index43.d.ts +10 -10
  159. package/dist/index43.d.ts.map +1 -1
  160. package/dist/index44.d.cts +1 -48
  161. package/dist/index44.d.ts +1 -48
  162. package/dist/index45.d.cts +42 -22
  163. package/dist/index45.d.cts.map +1 -1
  164. package/dist/index45.d.ts +42 -22
  165. package/dist/index45.d.ts.map +1 -1
  166. package/dist/index46.d.cts +21 -34
  167. package/dist/index46.d.cts.map +1 -1
  168. package/dist/index46.d.ts +21 -34
  169. package/dist/index46.d.ts.map +1 -1
  170. package/dist/index47.d.cts +33 -17
  171. package/dist/index47.d.cts.map +1 -1
  172. package/dist/index47.d.ts +33 -17
  173. package/dist/index47.d.ts.map +1 -1
  174. package/dist/index48.d.cts +18 -14
  175. package/dist/index48.d.cts.map +1 -1
  176. package/dist/index48.d.ts +18 -14
  177. package/dist/index48.d.ts.map +1 -1
  178. package/dist/index49.d.cts +12 -60
  179. package/dist/index49.d.cts.map +1 -1
  180. package/dist/index49.d.ts +12 -60
  181. package/dist/index49.d.ts.map +1 -1
  182. package/dist/index5.d.cts +7 -7
  183. package/dist/index5.d.cts.map +1 -1
  184. package/dist/index5.d.ts +7 -7
  185. package/dist/index5.d.ts.map +1 -1
  186. package/dist/index50.d.cts +55 -49
  187. package/dist/index50.d.cts.map +1 -1
  188. package/dist/index50.d.ts +55 -49
  189. package/dist/index50.d.ts.map +1 -1
  190. package/dist/index51.d.cts +56 -24
  191. package/dist/index51.d.cts.map +1 -1
  192. package/dist/index51.d.ts +56 -24
  193. package/dist/index51.d.ts.map +1 -1
  194. package/dist/index52.d.cts +25 -203
  195. package/dist/index52.d.cts.map +1 -1
  196. package/dist/index52.d.ts +25 -203
  197. package/dist/index52.d.ts.map +1 -1
  198. package/dist/index53.d.cts +198 -15
  199. package/dist/index53.d.cts.map +1 -1
  200. package/dist/index53.d.ts +198 -15
  201. package/dist/index53.d.ts.map +1 -1
  202. package/dist/index54.d.cts +21 -23
  203. package/dist/index54.d.cts.map +1 -1
  204. package/dist/index54.d.ts +21 -23
  205. package/dist/index54.d.ts.map +1 -1
  206. package/dist/index55.d.cts +21 -18
  207. package/dist/index55.d.cts.map +1 -1
  208. package/dist/index55.d.ts +21 -18
  209. package/dist/index55.d.ts.map +1 -1
  210. package/dist/index56.d.cts +21 -8
  211. package/dist/index56.d.cts.map +1 -1
  212. package/dist/index56.d.ts +21 -8
  213. package/dist/index56.d.ts.map +1 -1
  214. package/dist/index57.d.cts +6 -44
  215. package/dist/index57.d.cts.map +1 -1
  216. package/dist/index57.d.ts +6 -44
  217. package/dist/index57.d.ts.map +1 -1
  218. package/dist/index58.d.cts +46 -47
  219. package/dist/index58.d.cts.map +1 -1
  220. package/dist/index58.d.ts +46 -47
  221. package/dist/index58.d.ts.map +1 -1
  222. package/dist/index59.d.cts +47 -59
  223. package/dist/index59.d.cts.map +1 -1
  224. package/dist/index59.d.ts +47 -59
  225. package/dist/index59.d.ts.map +1 -1
  226. package/dist/index6.d.cts +7 -7
  227. package/dist/index6.d.cts.map +1 -1
  228. package/dist/index6.d.ts +7 -7
  229. package/dist/index6.d.ts.map +1 -1
  230. package/dist/index60.d.cts +55 -37
  231. package/dist/index60.d.cts.map +1 -1
  232. package/dist/index60.d.ts +56 -38
  233. package/dist/index60.d.ts.map +1 -1
  234. package/dist/index61.d.cts +38 -14
  235. package/dist/index61.d.cts.map +1 -1
  236. package/dist/index61.d.ts +38 -14
  237. package/dist/index61.d.ts.map +1 -1
  238. package/dist/index62.d.cts +20 -41
  239. package/dist/index62.d.cts.map +1 -1
  240. package/dist/index62.d.ts +20 -41
  241. package/dist/index62.d.ts.map +1 -1
  242. package/dist/index63.d.cts +41 -19
  243. package/dist/index63.d.cts.map +1 -1
  244. package/dist/index63.d.ts +41 -19
  245. package/dist/index63.d.ts.map +1 -1
  246. package/dist/index64.d.cts +14 -39
  247. package/dist/index64.d.cts.map +1 -1
  248. package/dist/index64.d.ts +14 -39
  249. package/dist/index64.d.ts.map +1 -1
  250. package/dist/index65.d.cts +39 -16
  251. package/dist/index65.d.cts.map +1 -1
  252. package/dist/index65.d.ts +39 -16
  253. package/dist/index65.d.ts.map +1 -1
  254. package/dist/index66.d.cts +18 -12
  255. package/dist/index66.d.cts.map +1 -1
  256. package/dist/index66.d.ts +18 -12
  257. package/dist/index66.d.ts.map +1 -1
  258. package/dist/index67.d.cts +12 -30
  259. package/dist/index67.d.cts.map +1 -1
  260. package/dist/index67.d.ts +12 -30
  261. package/dist/index67.d.ts.map +1 -1
  262. package/dist/index68.d.cts +26 -25
  263. package/dist/index68.d.cts.map +1 -1
  264. package/dist/index68.d.ts +28 -27
  265. package/dist/index68.d.ts.map +1 -1
  266. package/dist/index69.d.cts +36 -69
  267. package/dist/index69.d.cts.map +1 -0
  268. package/dist/index69.d.ts +36 -69
  269. package/dist/index69.d.ts.map +1 -0
  270. package/dist/index7.d.cts +8 -8
  271. package/dist/index7.d.cts.map +1 -1
  272. package/dist/index7.d.ts +8 -8
  273. package/dist/index70.d.cts +76 -237
  274. package/dist/index70.d.cts.map +1 -1
  275. package/dist/index70.d.ts +76 -237
  276. package/dist/index70.d.ts.map +1 -1
  277. package/dist/index71.d.cts +249 -0
  278. package/dist/index71.d.cts.map +1 -0
  279. package/dist/index71.d.ts +249 -0
  280. package/dist/index71.d.ts.map +1 -0
  281. package/dist/index8.d.cts +4 -4
  282. package/dist/index8.d.cts.map +1 -1
  283. package/dist/index8.d.ts +4 -4
  284. package/dist/index8.d.ts.map +1 -1
  285. package/dist/index9.d.cts +2 -2
  286. package/dist/index9.d.cts.map +1 -1
  287. package/dist/index9.d.ts +2 -2
  288. package/dist/layouts/Container/index.cjs +4 -4
  289. package/dist/layouts/Container/index.cjs.map +1 -1
  290. package/dist/layouts/Container/index.d.cts +1 -1
  291. package/dist/layouts/Container/index.d.ts +1 -1
  292. package/dist/layouts/Container/index.js +4 -4
  293. package/dist/layouts/Container/index.js.map +1 -1
  294. package/dist/layouts/PageBackground/index.cjs +2 -2
  295. package/dist/layouts/PageBackground/index.cjs.map +1 -1
  296. package/dist/layouts/PageBackground/index.d.cts +1 -1
  297. package/dist/layouts/PageBackground/index.d.ts +1 -1
  298. package/dist/layouts/PageBackground/index.js +2 -2
  299. package/dist/layouts/PageBackground/index.js.map +1 -1
  300. package/dist/layouts/Stack/index.d.cts +1 -1
  301. package/dist/layouts/Stack/index.d.ts +1 -1
  302. package/dist/layouts/TwoColumn/index.d.cts +1 -1
  303. package/dist/layouts/TwoColumn/index.d.ts +1 -1
  304. package/dist/layouts/index.d.cts +4 -4
  305. package/dist/layouts/index.d.ts +4 -4
  306. package/dist/patterns/DataTable/index.cjs +12 -7
  307. package/dist/patterns/DataTable/index.cjs.map +1 -1
  308. package/dist/patterns/DataTable/index.d.cts +3 -3
  309. package/dist/patterns/DataTable/index.d.cts.map +1 -1
  310. package/dist/patterns/DataTable/index.d.ts +3 -3
  311. package/dist/patterns/DataTable/index.d.ts.map +1 -1
  312. package/dist/patterns/DataTable/index.js +12 -7
  313. package/dist/patterns/DataTable/index.js.map +1 -1
  314. package/dist/patterns/Footer/index.cjs +5 -5
  315. package/dist/patterns/Footer/index.cjs.map +1 -1
  316. package/dist/patterns/Footer/index.d.cts +9 -9
  317. package/dist/patterns/Footer/index.d.cts.map +1 -1
  318. package/dist/patterns/Footer/index.d.ts +9 -9
  319. package/dist/patterns/Footer/index.d.ts.map +1 -1
  320. package/dist/patterns/Footer/index.js +5 -5
  321. package/dist/patterns/Footer/index.js.map +1 -1
  322. package/dist/patterns/Header/index.d.cts +1 -1
  323. package/dist/patterns/Header/index.d.ts +1 -1
  324. package/dist/patterns/MediaObject/index.cjs +1 -1
  325. package/dist/patterns/MediaObject/index.cjs.map +1 -1
  326. package/dist/patterns/MediaObject/index.d.cts +13 -13
  327. package/dist/patterns/MediaObject/index.d.cts.map +1 -1
  328. package/dist/patterns/MediaObject/index.d.ts +10 -10
  329. package/dist/patterns/MediaObject/index.js +1 -1
  330. package/dist/patterns/MediaObject/index.js.map +1 -1
  331. package/dist/patterns/NavRail/index.cjs +195 -0
  332. package/dist/patterns/NavRail/index.cjs.map +1 -0
  333. package/dist/patterns/NavRail/index.d.cts +2 -0
  334. package/dist/patterns/NavRail/index.d.ts +2 -0
  335. package/dist/patterns/NavRail/index.js +185 -0
  336. package/dist/patterns/NavRail/index.js.map +1 -0
  337. package/dist/patterns/SectionCard/index.cjs +1 -1
  338. package/dist/patterns/SectionCard/index.cjs.map +1 -1
  339. package/dist/patterns/SectionCard/index.d.cts +2 -2
  340. package/dist/patterns/SectionCard/index.d.cts.map +1 -1
  341. package/dist/patterns/SectionCard/index.d.ts +2 -2
  342. package/dist/patterns/SectionCard/index.d.ts.map +1 -1
  343. package/dist/patterns/SectionCard/index.js +1 -1
  344. package/dist/patterns/SectionCard/index.js.map +1 -1
  345. package/dist/patterns/SectionHeading/index.d.cts +2 -2
  346. package/dist/patterns/SectionHeading/index.d.cts.map +1 -1
  347. package/dist/patterns/SectionHeading/index.d.ts +2 -2
  348. package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
  349. package/dist/patterns/index.cjs +9 -0
  350. package/dist/patterns/index.d.cts +3 -2
  351. package/dist/patterns/index.d.ts +3 -2
  352. package/dist/patterns/index.js +2 -1
  353. package/dist/primitives/Accordion/index.cjs +6 -6
  354. package/dist/primitives/Accordion/index.cjs.map +1 -1
  355. package/dist/primitives/Accordion/index.js +6 -6
  356. package/dist/primitives/Accordion/index.js.map +1 -1
  357. package/dist/primitives/Alert/index.cjs +4 -4
  358. package/dist/primitives/Alert/index.cjs.map +1 -1
  359. package/dist/primitives/Alert/index.js +4 -4
  360. package/dist/primitives/Alert/index.js.map +1 -1
  361. package/dist/primitives/AlertDialog/index.cjs +4 -4
  362. package/dist/primitives/AlertDialog/index.cjs.map +1 -1
  363. package/dist/primitives/AlertDialog/index.js +4 -4
  364. package/dist/primitives/AlertDialog/index.js.map +1 -1
  365. package/dist/primitives/Avatar/index.cjs +5 -5
  366. package/dist/primitives/Avatar/index.cjs.map +1 -1
  367. package/dist/primitives/Avatar/index.js +5 -5
  368. package/dist/primitives/Avatar/index.js.map +1 -1
  369. package/dist/primitives/Badge/index.cjs +11 -10
  370. package/dist/primitives/Badge/index.cjs.map +1 -1
  371. package/dist/primitives/Badge/index.js +11 -10
  372. package/dist/primitives/Badge/index.js.map +1 -1
  373. package/dist/primitives/Breadcrumb/index.cjs +4 -4
  374. package/dist/primitives/Breadcrumb/index.cjs.map +1 -1
  375. package/dist/primitives/Breadcrumb/index.js +4 -4
  376. package/dist/primitives/Breadcrumb/index.js.map +1 -1
  377. package/dist/primitives/Button/index.cjs +20 -13
  378. package/dist/primitives/Button/index.cjs.map +1 -1
  379. package/dist/primitives/Button/index.js +20 -13
  380. package/dist/primitives/Button/index.js.map +1 -1
  381. package/dist/primitives/ButtonGroup/index.cjs +3 -3
  382. package/dist/primitives/ButtonGroup/index.cjs.map +1 -1
  383. package/dist/primitives/ButtonGroup/index.js +3 -3
  384. package/dist/primitives/ButtonGroup/index.js.map +1 -1
  385. package/dist/primitives/Calendar/index.cjs +22 -21
  386. package/dist/primitives/Calendar/index.cjs.map +1 -1
  387. package/dist/primitives/Calendar/index.js +22 -21
  388. package/dist/primitives/Calendar/index.js.map +1 -1
  389. package/dist/primitives/Card/index.cjs +18 -16
  390. package/dist/primitives/Card/index.cjs.map +1 -1
  391. package/dist/primitives/Card/index.js +18 -16
  392. package/dist/primitives/Card/index.js.map +1 -1
  393. package/dist/primitives/Carousel/index.cjs +2 -2
  394. package/dist/primitives/Carousel/index.cjs.map +1 -1
  395. package/dist/primitives/Carousel/index.js +2 -2
  396. package/dist/primitives/Carousel/index.js.map +1 -1
  397. package/dist/primitives/Chart/index.cjs +12 -12
  398. package/dist/primitives/Chart/index.cjs.map +1 -1
  399. package/dist/primitives/Chart/index.js +12 -12
  400. package/dist/primitives/Chart/index.js.map +1 -1
  401. package/dist/primitives/Checkbox/index.cjs +6 -6
  402. package/dist/primitives/Checkbox/index.cjs.map +1 -1
  403. package/dist/primitives/Checkbox/index.js +6 -6
  404. package/dist/primitives/Checkbox/index.js.map +1 -1
  405. package/dist/primitives/CheckboxTree/index.cjs +2 -2
  406. package/dist/primitives/CheckboxTree/index.cjs.map +1 -1
  407. package/dist/primitives/CheckboxTree/index.js +2 -2
  408. package/dist/primitives/CheckboxTree/index.js.map +1 -1
  409. package/dist/primitives/Command/index.cjs +9 -9
  410. package/dist/primitives/Command/index.cjs.map +1 -1
  411. package/dist/primitives/Command/index.js +9 -9
  412. package/dist/primitives/Command/index.js.map +1 -1
  413. package/dist/primitives/ContextMenu/index.cjs +10 -10
  414. package/dist/primitives/ContextMenu/index.cjs.map +1 -1
  415. package/dist/primitives/ContextMenu/index.js +10 -10
  416. package/dist/primitives/ContextMenu/index.js.map +1 -1
  417. package/dist/primitives/Credits/index.cjs +4 -4
  418. package/dist/primitives/Credits/index.cjs.map +1 -1
  419. package/dist/primitives/Credits/index.js +4 -4
  420. package/dist/primitives/Credits/index.js.map +1 -1
  421. package/dist/primitives/Dialog/index.cjs +5 -5
  422. package/dist/primitives/Dialog/index.cjs.map +1 -1
  423. package/dist/primitives/Dialog/index.js +5 -5
  424. package/dist/primitives/Dialog/index.js.map +1 -1
  425. package/dist/primitives/Drawer/index.cjs +5 -5
  426. package/dist/primitives/Drawer/index.cjs.map +1 -1
  427. package/dist/primitives/Drawer/index.js +5 -5
  428. package/dist/primitives/Drawer/index.js.map +1 -1
  429. package/dist/primitives/DropdownMenu/index.cjs +9 -9
  430. package/dist/primitives/DropdownMenu/index.cjs.map +1 -1
  431. package/dist/primitives/DropdownMenu/index.js +9 -9
  432. package/dist/primitives/DropdownMenu/index.js.map +1 -1
  433. package/dist/primitives/Empty/index.cjs +4 -4
  434. package/dist/primitives/Empty/index.cjs.map +1 -1
  435. package/dist/primitives/Empty/index.js +4 -4
  436. package/dist/primitives/Empty/index.js.map +1 -1
  437. package/dist/primitives/Field/index.cjs +5 -5
  438. package/dist/primitives/Field/index.cjs.map +1 -1
  439. package/dist/primitives/Field/index.js +5 -5
  440. package/dist/primitives/Field/index.js.map +1 -1
  441. package/dist/primitives/Form/index.cjs +1 -1
  442. package/dist/primitives/Form/index.cjs.map +1 -1
  443. package/dist/primitives/Form/index.js +1 -1
  444. package/dist/primitives/Form/index.js.map +1 -1
  445. package/dist/primitives/Heading/index.cjs +2 -2
  446. package/dist/primitives/Heading/index.cjs.map +1 -1
  447. package/dist/primitives/Heading/index.js +2 -2
  448. package/dist/primitives/Heading/index.js.map +1 -1
  449. package/dist/primitives/HoverCard/index.cjs +1 -1
  450. package/dist/primitives/HoverCard/index.cjs.map +1 -1
  451. package/dist/primitives/HoverCard/index.js +1 -1
  452. package/dist/primitives/HoverCard/index.js.map +1 -1
  453. package/dist/primitives/InfoBanner/index.cjs +12 -12
  454. package/dist/primitives/InfoBanner/index.cjs.map +1 -1
  455. package/dist/primitives/InfoBanner/index.js +12 -12
  456. package/dist/primitives/InfoBanner/index.js.map +1 -1
  457. package/dist/primitives/Input/index.cjs +13 -7
  458. package/dist/primitives/Input/index.cjs.map +1 -1
  459. package/dist/primitives/Input/index.js +13 -7
  460. package/dist/primitives/Input/index.js.map +1 -1
  461. package/dist/primitives/InputGroup/index.cjs +7 -7
  462. package/dist/primitives/InputGroup/index.cjs.map +1 -1
  463. package/dist/primitives/InputGroup/index.js +7 -7
  464. package/dist/primitives/InputGroup/index.js.map +1 -1
  465. package/dist/primitives/InputOtp/index.cjs +3 -3
  466. package/dist/primitives/InputOtp/index.cjs.map +1 -1
  467. package/dist/primitives/InputOtp/index.js +3 -3
  468. package/dist/primitives/InputOtp/index.js.map +1 -1
  469. package/dist/primitives/Item/index.cjs +6 -6
  470. package/dist/primitives/Item/index.cjs.map +1 -1
  471. package/dist/primitives/Item/index.js +6 -6
  472. package/dist/primitives/Item/index.js.map +1 -1
  473. package/dist/primitives/Kbd/index.cjs +1 -1
  474. package/dist/primitives/Kbd/index.cjs.map +1 -1
  475. package/dist/primitives/Kbd/index.js +1 -1
  476. package/dist/primitives/Kbd/index.js.map +1 -1
  477. package/dist/primitives/Link/index.cjs +4 -4
  478. package/dist/primitives/Link/index.cjs.map +1 -1
  479. package/dist/primitives/Link/index.js +4 -4
  480. package/dist/primitives/Link/index.js.map +1 -1
  481. package/dist/primitives/Menubar/index.cjs +12 -12
  482. package/dist/primitives/Menubar/index.cjs.map +1 -1
  483. package/dist/primitives/Menubar/index.js +12 -12
  484. package/dist/primitives/Menubar/index.js.map +1 -1
  485. package/dist/primitives/NativeSelect/index.cjs +5 -5
  486. package/dist/primitives/NativeSelect/index.cjs.map +1 -1
  487. package/dist/primitives/NativeSelect/index.js +5 -5
  488. package/dist/primitives/NativeSelect/index.js.map +1 -1
  489. package/dist/primitives/NavRail/index.cjs +9 -194
  490. package/dist/primitives/NavRail/index.d.cts +1 -0
  491. package/dist/primitives/NavRail/index.d.ts +1 -0
  492. package/dist/primitives/NavRail/index.js +1 -184
  493. package/dist/primitives/NavigationMenu/index.cjs +7 -7
  494. package/dist/primitives/NavigationMenu/index.cjs.map +1 -1
  495. package/dist/primitives/NavigationMenu/index.js +7 -7
  496. package/dist/primitives/NavigationMenu/index.js.map +1 -1
  497. package/dist/primitives/Pagination/index.cjs +7 -13
  498. package/dist/primitives/Pagination/index.cjs.map +1 -1
  499. package/dist/primitives/Pagination/index.d.cts +1 -1
  500. package/dist/primitives/Pagination/index.d.ts +1 -1
  501. package/dist/primitives/Pagination/index.js +8 -14
  502. package/dist/primitives/Pagination/index.js.map +1 -1
  503. package/dist/primitives/Popover/index.cjs +4 -4
  504. package/dist/primitives/Popover/index.cjs.map +1 -1
  505. package/dist/primitives/Popover/index.js +4 -4
  506. package/dist/primitives/Popover/index.js.map +1 -1
  507. package/dist/primitives/Progress/index.cjs +16 -16
  508. package/dist/primitives/Progress/index.cjs.map +1 -1
  509. package/dist/primitives/Progress/index.d.cts +1 -1
  510. package/dist/primitives/Progress/index.d.ts +1 -1
  511. package/dist/primitives/Progress/index.js +16 -16
  512. package/dist/primitives/Progress/index.js.map +1 -1
  513. package/dist/primitives/RadioGroup/index.cjs +7 -7
  514. package/dist/primitives/RadioGroup/index.cjs.map +1 -1
  515. package/dist/primitives/RadioGroup/index.d.cts +1 -1
  516. package/dist/primitives/RadioGroup/index.d.ts +1 -1
  517. package/dist/primitives/RadioGroup/index.js +7 -7
  518. package/dist/primitives/RadioGroup/index.js.map +1 -1
  519. package/dist/primitives/Resizable/index.cjs +2 -2
  520. package/dist/primitives/Resizable/index.cjs.map +1 -1
  521. package/dist/primitives/Resizable/index.d.cts +1 -1
  522. package/dist/primitives/Resizable/index.d.ts +1 -1
  523. package/dist/primitives/Resizable/index.js +2 -2
  524. package/dist/primitives/Resizable/index.js.map +1 -1
  525. package/dist/primitives/ScrollArea/index.cjs +2 -2
  526. package/dist/primitives/ScrollArea/index.cjs.map +1 -1
  527. package/dist/primitives/ScrollArea/index.d.cts +1 -1
  528. package/dist/primitives/ScrollArea/index.d.ts +1 -1
  529. package/dist/primitives/ScrollArea/index.js +2 -2
  530. package/dist/primitives/ScrollArea/index.js.map +1 -1
  531. package/dist/primitives/Select/index.cjs +8 -8
  532. package/dist/primitives/Select/index.cjs.map +1 -1
  533. package/dist/primitives/Select/index.d.cts +1 -1
  534. package/dist/primitives/Select/index.d.ts +1 -1
  535. package/dist/primitives/Select/index.js +8 -8
  536. package/dist/primitives/Select/index.js.map +1 -1
  537. package/dist/primitives/Separator/index.cjs +1 -1
  538. package/dist/primitives/Separator/index.cjs.map +1 -1
  539. package/dist/primitives/Separator/index.js +1 -1
  540. package/dist/primitives/Separator/index.js.map +1 -1
  541. package/dist/primitives/Sheet/index.cjs +8 -8
  542. package/dist/primitives/Sheet/index.cjs.map +1 -1
  543. package/dist/primitives/Sheet/index.d.cts +1 -1
  544. package/dist/primitives/Sheet/index.d.ts +1 -1
  545. package/dist/primitives/Sheet/index.js +8 -8
  546. package/dist/primitives/Sheet/index.js.map +1 -1
  547. package/dist/primitives/Sidebar/index.d.cts +1 -1
  548. package/dist/primitives/Sidebar/index.d.ts +1 -1
  549. package/dist/primitives/Skeleton/index.cjs +2 -2
  550. package/dist/primitives/Skeleton/index.cjs.map +1 -1
  551. package/dist/primitives/Skeleton/index.d.cts +1 -1
  552. package/dist/primitives/Skeleton/index.d.ts +1 -1
  553. package/dist/primitives/Skeleton/index.js +2 -2
  554. package/dist/primitives/Skeleton/index.js.map +1 -1
  555. package/dist/primitives/Slider/index.cjs +3 -3
  556. package/dist/primitives/Slider/index.cjs.map +1 -1
  557. package/dist/primitives/Slider/index.d.cts +1 -1
  558. package/dist/primitives/Slider/index.d.ts +1 -1
  559. package/dist/primitives/Slider/index.js +3 -3
  560. package/dist/primitives/Slider/index.js.map +1 -1
  561. package/dist/primitives/Sonner/index.cjs +13 -6
  562. package/dist/primitives/Sonner/index.cjs.map +1 -1
  563. package/dist/primitives/Sonner/index.d.cts +1 -1
  564. package/dist/primitives/Sonner/index.d.ts +1 -1
  565. package/dist/primitives/Sonner/index.js +13 -6
  566. package/dist/primitives/Sonner/index.js.map +1 -1
  567. package/dist/primitives/Spinner/index.d.cts +1 -1
  568. package/dist/primitives/Spinner/index.d.ts +1 -1
  569. package/dist/primitives/Switch/index.cjs +7 -7
  570. package/dist/primitives/Switch/index.cjs.map +1 -1
  571. package/dist/primitives/Switch/index.d.cts +1 -1
  572. package/dist/primitives/Switch/index.d.ts +1 -1
  573. package/dist/primitives/Switch/index.js +7 -7
  574. package/dist/primitives/Switch/index.js.map +1 -1
  575. package/dist/primitives/Table/index.cjs +7 -7
  576. package/dist/primitives/Table/index.cjs.map +1 -1
  577. package/dist/primitives/Table/index.d.cts +1 -1
  578. package/dist/primitives/Table/index.d.ts +1 -1
  579. package/dist/primitives/Table/index.js +7 -7
  580. package/dist/primitives/Table/index.js.map +1 -1
  581. package/dist/primitives/Tabs/index.cjs +21 -21
  582. package/dist/primitives/Tabs/index.cjs.map +1 -1
  583. package/dist/primitives/Tabs/index.d.cts +1 -1
  584. package/dist/primitives/Tabs/index.d.ts +1 -1
  585. package/dist/primitives/Tabs/index.js +21 -21
  586. package/dist/primitives/Tabs/index.js.map +1 -1
  587. package/dist/primitives/Text/index.cjs +5 -5
  588. package/dist/primitives/Text/index.cjs.map +1 -1
  589. package/dist/primitives/Text/index.d.cts +1 -1
  590. package/dist/primitives/Text/index.d.ts +1 -1
  591. package/dist/primitives/Text/index.js +5 -5
  592. package/dist/primitives/Text/index.js.map +1 -1
  593. package/dist/primitives/Textarea/index.cjs +20 -8
  594. package/dist/primitives/Textarea/index.cjs.map +1 -1
  595. package/dist/primitives/Textarea/index.d.cts +1 -1
  596. package/dist/primitives/Textarea/index.d.ts +1 -1
  597. package/dist/primitives/Textarea/index.js +20 -8
  598. package/dist/primitives/Textarea/index.js.map +1 -1
  599. package/dist/primitives/ThemeProvider/index.d.cts +1 -1
  600. package/dist/primitives/ThemeProvider/index.d.ts +1 -1
  601. package/dist/primitives/Toggle/index.cjs +11 -10
  602. package/dist/primitives/Toggle/index.cjs.map +1 -1
  603. package/dist/primitives/Toggle/index.d.cts +1 -1
  604. package/dist/primitives/Toggle/index.d.ts +1 -1
  605. package/dist/primitives/Toggle/index.js +11 -10
  606. package/dist/primitives/Toggle/index.js.map +1 -1
  607. package/dist/primitives/ToggleGroup/index.cjs +2 -2
  608. package/dist/primitives/ToggleGroup/index.cjs.map +1 -1
  609. package/dist/primitives/ToggleGroup/index.d.cts +1 -1
  610. package/dist/primitives/ToggleGroup/index.d.ts +1 -1
  611. package/dist/primitives/ToggleGroup/index.js +2 -2
  612. package/dist/primitives/ToggleGroup/index.js.map +1 -1
  613. package/dist/primitives/Tooltip/index.cjs +2 -2
  614. package/dist/primitives/Tooltip/index.cjs.map +1 -1
  615. package/dist/primitives/Tooltip/index.d.cts +1 -1
  616. package/dist/primitives/Tooltip/index.d.ts +1 -1
  617. package/dist/primitives/Tooltip/index.js +2 -2
  618. package/dist/primitives/Tooltip/index.js.map +1 -1
  619. package/dist/primitives/index.cjs +10 -10
  620. package/dist/primitives/index.d.cts +21 -21
  621. package/dist/primitives/index.d.ts +21 -21
  622. package/dist/primitives/index.js +2 -2
  623. package/dist/styles/base.css +23 -4
  624. package/dist/styles/brand-scopes.css +49 -0
  625. package/dist/styles/glass.css +13 -8
  626. package/dist/styles/index.css +8 -9
  627. package/dist/styles/theme.css +141 -90
  628. package/dist/styles/tokens/border-radius.css +8 -8
  629. package/dist/styles/tokens/mode-dark.css +71 -94
  630. package/dist/styles/tokens/mode-light.css +71 -94
  631. package/dist/styles/tokens/shadows.css +4 -7
  632. package/dist/styles/tokens/spacing.css +17 -37
  633. package/dist/styles/tokens/theme-bodhi.css +6 -28
  634. package/dist/styles/tokens/theme-slingshot.css +7 -28
  635. package/dist/styles/tokens/theme-sustain.css +6 -28
  636. package/dist/styles/typography.css +9 -9
  637. package/package.json +8 -2
  638. package/dist/index44.d.cts.map +0 -1
  639. package/dist/index44.d.ts.map +0 -1
  640. package/dist/primitives/NavRail/index.cjs.map +0 -1
  641. package/dist/primitives/NavRail/index.js.map +0 -1
  642. package/dist/styles/semantic.css +0 -178
  643. package/dist/styles/tokens/alpha.css +0 -39
  644. package/dist/styles/tokens/chart-colors-dark.css +0 -18
  645. package/dist/styles/tokens/chart-colors-light.css +0 -18
  646. package/dist/styles/tokens/colors.css +0 -251
@@ -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-foreground\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-lg bg-muted p-[3px]\",\n segmented: \"justify-center rounded-xl bg-muted p-1\",\n fancy: \"w-full items-stretch gap-2 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-8\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-9\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10\" },\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-lg bg-background 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-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_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-background data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-lg\",\n fancy:\n \"mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]\",\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 { variant: [\"line\", \"pill\", \"segmented\"], size: \"sm\", class: \"px-1.5 py-1 text-xs\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"lg\", class: \"px-3 py-1 text-base\" },\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-4 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-4 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-foreground 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-foreground 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-xl rounded-t-none bg-[var(--glass-light)] 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 px-1 text-xs font-medium text-muted-foreground\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground\",\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"],"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,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 "../../index59.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 "../../index60.cjs";
2
2
  export { Tabs, TabsContent, TabsCounter, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants };
@@ -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 "../../index59.js";
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.js";
2
2
  export { Tabs, TabsContent, TabsCounter, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants };
@@ -36,13 +36,13 @@ function Tabs({ className, variant = "pill", size = "md", orientation = "horizon
36
36
  })
37
37
  });
38
38
  }
39
- const tabsListVariants = cva("relative inline-flex items-center text-muted-foreground", {
39
+ const tabsListVariants = cva("relative inline-flex items-center text-muted-txt", {
40
40
  variants: {
41
41
  variant: {
42
42
  line: "gap-1 bg-transparent",
43
- pill: "justify-center rounded-lg bg-muted p-[3px]",
44
- segmented: "justify-center rounded-xl bg-muted p-1",
45
- fancy: "w-full items-stretch gap-2 bg-transparent"
43
+ pill: "justify-center rounded-10 bg-muted-bg p-0.75",
44
+ segmented: "justify-center rounded-12 bg-muted-bg p-1",
45
+ fancy: "w-full items-stretch gap-1 bg-transparent"
46
46
  },
47
47
  orientation: {
48
48
  horizontal: "",
@@ -59,19 +59,19 @@ const tabsListVariants = cva("relative inline-flex items-center text-muted-foreg
59
59
  variant: ["pill", "segmented"],
60
60
  orientation: "horizontal",
61
61
  size: "sm",
62
- class: "h-8"
62
+ class: "h-6 p-0.5"
63
63
  },
64
64
  {
65
65
  variant: ["pill", "segmented"],
66
66
  orientation: "horizontal",
67
67
  size: "md",
68
- class: "h-9"
68
+ class: "h-8.75"
69
69
  },
70
70
  {
71
71
  variant: ["pill", "segmented"],
72
72
  orientation: "horizontal",
73
73
  size: "lg",
74
- class: "h-10"
74
+ class: "h-10 p-1"
75
75
  }
76
76
  ],
77
77
  defaultVariants: {
@@ -131,7 +131,7 @@ function TabsList({ className, children, tabPrefix, tabSuffix, ...props }) {
131
131
  isSegmented && indicator && /* @__PURE__ */ jsx("span", {
132
132
  "data-slot": "tabs-indicator",
133
133
  "aria-hidden": true,
134
- className: "absolute z-0 rounded-lg bg-background shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none",
134
+ className: "absolute z-0 rounded-8 bg-primary-bg shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none",
135
135
  style: orientation === "vertical" ? {
136
136
  top: indicator.top,
137
137
  height: indicator.height,
@@ -149,13 +149,13 @@ function TabsList({ className, children, tabPrefix, tabSuffix, ...props }) {
149
149
  ]
150
150
  });
151
151
  }
152
- const tabsTriggerVariants = cva("relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4", {
152
+ const tabsTriggerVariants = cva("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", {
153
153
  variants: {
154
154
  variant: {
155
155
  line: "h-[calc(100%-1px)] flex-1 rounded-none",
156
- pill: "h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm",
157
- segmented: "z-[1] h-[calc(100%-1px)] flex-1 rounded-lg",
158
- fancy: "mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]"
156
+ pill: "h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-primary-bg data-[state=active]:shadow-sm",
157
+ segmented: "z-[1] h-[calc(100%-1px)] flex-1 rounded-8",
158
+ fancy: cn("mb-1 flex-1 justify-between rounded-16 font-normal backdrop-blur-glass", "bg-gradient-to-b from-glass-60-bg from-[3.4%] to-glass-20-bg", "data-[state=inactive]:hover:bg-none data-[state=inactive]:hover:bg-glass-none-bg", "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", "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)]", "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)]", "first:before:hidden last:after:hidden")
159
159
  },
160
160
  orientation: {
161
161
  horizontal: "",
@@ -175,7 +175,7 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
175
175
  "segmented"
176
176
  ],
177
177
  size: "sm",
178
- class: "px-1.5 py-1 text-xs"
178
+ class: "px-2 py-0.5 text-xs leading-4"
179
179
  },
180
180
  {
181
181
  variant: [
@@ -184,7 +184,7 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
184
184
  "segmented"
185
185
  ],
186
186
  size: "md",
187
- class: "px-2 py-1 text-sm"
187
+ class: "px-2 py-1 text-sm leading-5"
188
188
  },
189
189
  {
190
190
  variant: [
@@ -193,7 +193,7 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
193
193
  "segmented"
194
194
  ],
195
195
  size: "lg",
196
- class: "px-3 py-1 text-base"
196
+ class: "px-2 py-1.5 text-sm leading-5"
197
197
  },
198
198
  {
199
199
  variant: "fancy",
@@ -203,22 +203,22 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
203
203
  {
204
204
  variant: "fancy",
205
205
  size: "md",
206
- class: "px-4 py-3 text-sm"
206
+ class: "px-6 py-3 text-sm"
207
207
  },
208
208
  {
209
209
  variant: "fancy",
210
210
  size: "lg",
211
- class: "px-4 py-4 text-base"
211
+ class: "px-6 py-4 text-base"
212
212
  },
213
213
  {
214
214
  variant: "line",
215
215
  orientation: "horizontal",
216
- class: "after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100"
216
+ class: "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"
217
217
  },
218
218
  {
219
219
  variant: "line",
220
220
  orientation: "vertical",
221
- class: "after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100"
221
+ class: "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"
222
222
  }
223
223
  ],
224
224
  defaultVariants: {
@@ -245,7 +245,7 @@ function TabsContent({ className, ...props }) {
245
245
  const { variant } = React.useContext(TabsContext);
246
246
  return /* @__PURE__ */ jsx(Tabs$1.Content, {
247
247
  "data-slot": "tabs-content",
248
- className: cn("flex-1 outline-none", variant === "fancy" && "flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-glass", className),
248
+ className: cn("flex-1 outline-none", variant === "fancy" && "flex-none rounded-16 rounded-t-none bg-glass-40-bg p-5 backdrop-blur-glass", className),
249
249
  ...props
250
250
  });
251
251
  }
@@ -253,7 +253,7 @@ function TabsContent({ className, ...props }) {
253
253
  function TabsCounter({ className, ...props }) {
254
254
  return /* @__PURE__ */ jsx("span", {
255
255
  "data-slot": "tabs-counter",
256
- className: cn("ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground", "group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground", className),
256
+ className: cn("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", "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", className),
257
257
  ...props
258
258
  });
259
259
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TabsPrimitive"],"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-foreground\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-lg bg-muted p-[3px]\",\n segmented: \"justify-center rounded-xl bg-muted p-1\",\n fancy: \"w-full items-stretch gap-2 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-8\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-9\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10\" },\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-lg bg-background 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-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_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-background data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-lg\",\n fancy:\n \"mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]\",\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 { variant: [\"line\", \"pill\", \"segmented\"], size: \"sm\", class: \"px-1.5 py-1 text-xs\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"lg\", class: \"px-3 py-1 text-base\" },\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-4 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-4 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-foreground 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-foreground 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-xl rounded-t-none bg-[var(--glass-light)] 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 px-1 text-xs font-medium text-muted-foreground\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground\",\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.js","names":["TabsPrimitive"],"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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"}
@@ -17,11 +17,11 @@ const textVariants = (0, require("class-variance-authority").cva)("", {
17
17
  semibold: "font-semibold"
18
18
  },
19
19
  variant: {
20
- default: "text-foreground",
21
- muted: "text-muted-foreground",
22
- primary: "text-primary",
23
- destructive: "text-destructive",
24
- success: "text-[var(--content-success)]"
20
+ default: "text-primary-txt",
21
+ muted: "text-muted-txt",
22
+ primary: "text-primary-txt",
23
+ destructive: "text-danger-txt",
24
+ success: "text-success-txt"
25
25
  },
26
26
  font: {
27
27
  body: "font-sans",
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Text/Text.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n primary: \"text-primary\",\n destructive: \"text-destructive\",\n success: \"text-[var(--content-success)]\",\n },\n font: {\n body: \"font-sans\",\n heading: \"font-heading\",\n mono: \"font-mono\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n truncate: {\n true: \"truncate\",\n },\n },\n defaultVariants: {\n size: \"regular\",\n weight: \"normal\",\n variant: \"default\",\n font: \"body\",\n },\n});\n\ntype TextProps = Omit<React.ComponentProps<\"p\">, \"color\"> &\n VariantProps<typeof textVariants> & {\n /** Element/component to render. Defaults to `p`. */\n as?: React.ElementType;\n /** Body type-scale step (font-size + line-height). Defaults to `regular`. */\n size?: VariantProps<typeof textVariants>[\"size\"];\n /** Font weight. Defaults to `normal`. */\n weight?: VariantProps<typeof textVariants>[\"weight\"];\n /** Foreground colour token. Defaults to `default` (text-foreground). */\n variant?: VariantProps<typeof textVariants>[\"variant\"];\n /** Font family. Defaults to `body` (sans). */\n font?: VariantProps<typeof textVariants>[\"font\"];\n /** Horizontal text alignment. */\n align?: VariantProps<typeof textVariants>[\"align\"];\n /** Truncate to a single line with an ellipsis. */\n truncate?: VariantProps<typeof textVariants>[\"truncate\"];\n };\n\n/** The typography primitive: renders any element via `as` and drives size/weight/colour from the body type scale. */\nfunction Text({\n as,\n className,\n size,\n weight,\n variant,\n font,\n align,\n truncate,\n ...props\n}: TextProps) {\n const Comp = as ?? \"p\";\n return (\n <Comp\n data-slot=\"text\"\n className={cn(textVariants({ size, weight, variant, font, align, truncate }), className)}\n {...props}\n />\n );\n}\n\nexport { Text, textVariants, type TextProps };\n"],"mappings":";;;;AASA,MAAM,gBAAA,qCAAA,EAAA,KAAmB,IAAI;CAC3B,UAAU;EAER,MAAM;GACJ,OACE;GACF,SACE;GACF,OACE;GACF,MAAM;GACN,SACE;EACJ;EACA,QAAQ;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;EACA,SAAS;GACP,SAAS;GACT,OAAO;GACP,SAAS;GACT,aAAa;GACb,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;GACT,MAAM;EACR;EACA,OAAO;GACL,MAAM;GACN,QAAQ;GACR,OAAO;EACT;EACA,UAAU,EACR,MAAM,WACR;CACF;CACA,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAqBD,SAAS,KAAK,EACZ,IACA,WACA,MACA,QACA,SACA,MACA,OACA,UACA,GAAG,SACS;CAEZ,OACE,iBAAA,GAAA,kBAAA,KAFW,MAAM,KAEjB;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,aAAa;GAAE;GAAM;GAAQ;GAAS;GAAM;GAAO;EAAS,CAAC,GAAG,SAAS;EACvF,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Text/Text.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-primary-txt\",\n muted: \"text-muted-txt\",\n primary: \"text-primary-txt\",\n destructive: \"text-danger-txt\",\n success: \"text-success-txt\",\n },\n font: {\n body: \"font-sans\",\n heading: \"font-heading\",\n mono: \"font-mono\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n truncate: {\n true: \"truncate\",\n },\n },\n defaultVariants: {\n size: \"regular\",\n weight: \"normal\",\n variant: \"default\",\n font: \"body\",\n },\n});\n\ntype TextProps = Omit<React.ComponentProps<\"p\">, \"color\"> &\n VariantProps<typeof textVariants> & {\n /** Element/component to render. Defaults to `p`. */\n as?: React.ElementType;\n /** Body type-scale step (font-size + line-height). Defaults to `regular`. */\n size?: VariantProps<typeof textVariants>[\"size\"];\n /** Font weight. Defaults to `normal`. */\n weight?: VariantProps<typeof textVariants>[\"weight\"];\n /** Foreground colour token. Defaults to `default` (text-primary-txt). */\n variant?: VariantProps<typeof textVariants>[\"variant\"];\n /** Font family. Defaults to `body` (sans). */\n font?: VariantProps<typeof textVariants>[\"font\"];\n /** Horizontal text alignment. */\n align?: VariantProps<typeof textVariants>[\"align\"];\n /** Truncate to a single line with an ellipsis. */\n truncate?: VariantProps<typeof textVariants>[\"truncate\"];\n };\n\n/** The typography primitive: renders any element via `as` and drives size/weight/colour from the body type scale. */\nfunction Text({\n as,\n className,\n size,\n weight,\n variant,\n font,\n align,\n truncate,\n ...props\n}: TextProps) {\n const Comp = as ?? \"p\";\n return (\n <Comp\n data-slot=\"text\"\n className={cn(textVariants({ size, weight, variant, font, align, truncate }), className)}\n {...props}\n />\n );\n}\n\nexport { Text, textVariants, type TextProps };\n"],"mappings":";;;;AASA,MAAM,gBAAA,qCAAA,EAAA,KAAmB,IAAI;CAC3B,UAAU;EAER,MAAM;GACJ,OACE;GACF,SACE;GACF,OACE;GACF,MAAM;GACN,SACE;EACJ;EACA,QAAQ;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;EACA,SAAS;GACP,SAAS;GACT,OAAO;GACP,SAAS;GACT,aAAa;GACb,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;GACT,MAAM;EACR;EACA,OAAO;GACL,MAAM;GACN,QAAQ;GACR,OAAO;EACT;EACA,UAAU,EACR,MAAM,WACR;CACF;CACA,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAqBD,SAAS,KAAK,EACZ,IACA,WACA,MACA,QACA,SACA,MACA,OACA,UACA,GAAG,SACS;CAEZ,OACE,iBAAA,GAAA,kBAAA,KAFW,MAAM,KAEjB;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,aAAa;GAAE;GAAM;GAAQ;GAAS;GAAM;GAAO;EAAS,CAAC,GAAG,SAAS;EACvF,GAAI;CACL,CAAA;AAEL"}
@@ -1,2 +1,2 @@
1
- import { n as TextProps, r as textVariants, t as Text } from "../../index60.cjs";
1
+ import { n as TextProps, r as textVariants, t as Text } from "../../index61.cjs";
2
2
  export { Text, TextProps, textVariants };
@@ -1,2 +1,2 @@
1
- import { n as TextProps, r as textVariants, t as Text } from "../../index60.js";
1
+ import { n as TextProps, r as textVariants, t as Text } from "../../index61.js";
2
2
  export { Text, TextProps, textVariants };
@@ -17,11 +17,11 @@ const textVariants = cva("", {
17
17
  semibold: "font-semibold"
18
18
  },
19
19
  variant: {
20
- default: "text-foreground",
21
- muted: "text-muted-foreground",
22
- primary: "text-primary",
23
- destructive: "text-destructive",
24
- success: "text-[var(--content-success)]"
20
+ default: "text-primary-txt",
21
+ muted: "text-muted-txt",
22
+ primary: "text-primary-txt",
23
+ destructive: "text-danger-txt",
24
+ success: "text-success-txt"
25
25
  },
26
26
  font: {
27
27
  body: "font-sans",
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Text/Text.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-foreground\",\n muted: \"text-muted-foreground\",\n primary: \"text-primary\",\n destructive: \"text-destructive\",\n success: \"text-[var(--content-success)]\",\n },\n font: {\n body: \"font-sans\",\n heading: \"font-heading\",\n mono: \"font-mono\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n truncate: {\n true: \"truncate\",\n },\n },\n defaultVariants: {\n size: \"regular\",\n weight: \"normal\",\n variant: \"default\",\n font: \"body\",\n },\n});\n\ntype TextProps = Omit<React.ComponentProps<\"p\">, \"color\"> &\n VariantProps<typeof textVariants> & {\n /** Element/component to render. Defaults to `p`. */\n as?: React.ElementType;\n /** Body type-scale step (font-size + line-height). Defaults to `regular`. */\n size?: VariantProps<typeof textVariants>[\"size\"];\n /** Font weight. Defaults to `normal`. */\n weight?: VariantProps<typeof textVariants>[\"weight\"];\n /** Foreground colour token. Defaults to `default` (text-foreground). */\n variant?: VariantProps<typeof textVariants>[\"variant\"];\n /** Font family. Defaults to `body` (sans). */\n font?: VariantProps<typeof textVariants>[\"font\"];\n /** Horizontal text alignment. */\n align?: VariantProps<typeof textVariants>[\"align\"];\n /** Truncate to a single line with an ellipsis. */\n truncate?: VariantProps<typeof textVariants>[\"truncate\"];\n };\n\n/** The typography primitive: renders any element via `as` and drives size/weight/colour from the body type scale. */\nfunction Text({\n as,\n className,\n size,\n weight,\n variant,\n font,\n align,\n truncate,\n ...props\n}: TextProps) {\n const Comp = as ?? \"p\";\n return (\n <Comp\n data-slot=\"text\"\n className={cn(textVariants({ size, weight, variant, font, align, truncate }), className)}\n {...props}\n />\n );\n}\n\nexport { Text, textVariants, type TextProps };\n"],"mappings":";;;;AASA,MAAM,eAAe,IAAI,IAAI;CAC3B,UAAU;EAER,MAAM;GACJ,OACE;GACF,SACE;GACF,OACE;GACF,MAAM;GACN,SACE;EACJ;EACA,QAAQ;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;EACA,SAAS;GACP,SAAS;GACT,OAAO;GACP,SAAS;GACT,aAAa;GACb,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;GACT,MAAM;EACR;EACA,OAAO;GACL,MAAM;GACN,QAAQ;GACR,OAAO;EACT;EACA,UAAU,EACR,MAAM,WACR;CACF;CACA,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAqBD,SAAS,KAAK,EACZ,IACA,WACA,MACA,QACA,SACA,MACA,OACA,UACA,GAAG,SACS;CAEZ,OACE,oBAFW,MAAM,KAEjB;EACE,aAAU;EACV,WAAW,GAAG,aAAa;GAAE;GAAM;GAAQ;GAAS;GAAM;GAAO;EAAS,CAAC,GAAG,SAAS;EACvF,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Text/Text.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Text — the typography primitive. Renders any element via `as` and drives\n// size/line-height from the design-system BODY type scale (Inter): the Figma\n// \"paragraph large/regular/small/mini\" + caption steps (tokens in\n// styles/tokens/typography.css). Inline links compose as children.\nconst textVariants = cva(\"\", {\n variants: {\n // Body scale — font-size + line-height come straight from the type tokens.\n size: {\n large:\n \"text-[length:var(--paragraph-large-font-size)] leading-[var(--paragraph-large-line-height)]\",\n regular:\n \"text-[length:var(--paragraph-regular-font-size)] leading-[var(--paragraph-regular-line-height)]\",\n small:\n \"text-[length:var(--paragraph-small-font-size)] leading-[var(--paragraph-small-line-height)]\",\n mini: \"text-[length:var(--paragraph-mini-font-size)] leading-[var(--paragraph-mini-line-height)]\",\n caption:\n \"text-[length:var(--caption-font-size)] leading-[var(--caption-line-height)] tracking-[var(--caption-letter-spacing)] uppercase\",\n },\n weight: {\n normal: \"font-normal\",\n medium: \"font-medium\",\n semibold: \"font-semibold\",\n },\n variant: {\n default: \"text-primary-txt\",\n muted: \"text-muted-txt\",\n primary: \"text-primary-txt\",\n destructive: \"text-danger-txt\",\n success: \"text-success-txt\",\n },\n font: {\n body: \"font-sans\",\n heading: \"font-heading\",\n mono: \"font-mono\",\n },\n align: {\n left: \"text-left\",\n center: \"text-center\",\n right: \"text-right\",\n },\n truncate: {\n true: \"truncate\",\n },\n },\n defaultVariants: {\n size: \"regular\",\n weight: \"normal\",\n variant: \"default\",\n font: \"body\",\n },\n});\n\ntype TextProps = Omit<React.ComponentProps<\"p\">, \"color\"> &\n VariantProps<typeof textVariants> & {\n /** Element/component to render. Defaults to `p`. */\n as?: React.ElementType;\n /** Body type-scale step (font-size + line-height). Defaults to `regular`. */\n size?: VariantProps<typeof textVariants>[\"size\"];\n /** Font weight. Defaults to `normal`. */\n weight?: VariantProps<typeof textVariants>[\"weight\"];\n /** Foreground colour token. Defaults to `default` (text-primary-txt). */\n variant?: VariantProps<typeof textVariants>[\"variant\"];\n /** Font family. Defaults to `body` (sans). */\n font?: VariantProps<typeof textVariants>[\"font\"];\n /** Horizontal text alignment. */\n align?: VariantProps<typeof textVariants>[\"align\"];\n /** Truncate to a single line with an ellipsis. */\n truncate?: VariantProps<typeof textVariants>[\"truncate\"];\n };\n\n/** The typography primitive: renders any element via `as` and drives size/weight/colour from the body type scale. */\nfunction Text({\n as,\n className,\n size,\n weight,\n variant,\n font,\n align,\n truncate,\n ...props\n}: TextProps) {\n const Comp = as ?? \"p\";\n return (\n <Comp\n data-slot=\"text\"\n className={cn(textVariants({ size, weight, variant, font, align, truncate }), className)}\n {...props}\n />\n );\n}\n\nexport { Text, textVariants, type TextProps };\n"],"mappings":";;;;AASA,MAAM,eAAe,IAAI,IAAI;CAC3B,UAAU;EAER,MAAM;GACJ,OACE;GACF,SACE;GACF,OACE;GACF,MAAM;GACN,SACE;EACJ;EACA,QAAQ;GACN,QAAQ;GACR,QAAQ;GACR,UAAU;EACZ;EACA,SAAS;GACP,SAAS;GACT,OAAO;GACP,SAAS;GACT,aAAa;GACb,SAAS;EACX;EACA,MAAM;GACJ,MAAM;GACN,SAAS;GACT,MAAM;EACR;EACA,OAAO;GACL,MAAM;GACN,QAAQ;GACR,OAAO;EACT;EACA,UAAU,EACR,MAAM,WACR;CACF;CACA,iBAAiB;EACf,MAAM;EACN,QAAQ;EACR,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAqBD,SAAS,KAAK,EACZ,IACA,WACA,MACA,QACA,SACA,MACA,OACA,UACA,GAAG,SACS;CAEZ,OACE,oBAFW,MAAM,KAEjB;EACE,aAAU;EACV,WAAW,GAAG,aAAa;GAAE;GAAM;GAAQ;GAAS;GAAM;GAAO;EAAS,CAAC,GAAG,SAAS;EACvF,GAAI;CACL,CAAA;AAEL"}
@@ -2,18 +2,30 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_cn = require("../../cn.cjs");
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
4
  //#region src/primitives/Textarea/Textarea.tsx
5
- const textareaVariants = (0, require("class-variance-authority").cva)("border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-ring-error aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-sm transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", {
6
- variants: { shape: {
7
- default: "rounded-xl",
8
- round: "rounded-2xl"
9
- } },
10
- defaultVariants: { shape: "default" }
5
+ const textareaVariants = (0, require("class-variance-authority").cva)("text-primary-txt placeholder:text-muted-txt focus-visible:ring-focus aria-invalid:ring-focus-error flex field-sizing-content min-h-19 w-full px-3 py-2 text-sm leading-5 transition-[color,box-shadow] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50", {
6
+ variants: {
7
+ variant: {
8
+ default: "border border-primary-border bg-input-bg focus-visible:border-primary-invert-border aria-invalid:border-danger-border",
9
+ ai: "ai-border [--ai-surface:var(--input-bg)]"
10
+ },
11
+ shape: {
12
+ default: "rounded-12",
13
+ round: "rounded-16"
14
+ }
15
+ },
16
+ defaultVariants: {
17
+ variant: "default",
18
+ shape: "default"
19
+ }
11
20
  });
12
21
  /** Multi-line text input that auto-grows with its content and supports validation + disabled states. */
13
- function Textarea({ className, shape, ...props }) {
22
+ function Textarea({ className, variant, shape, ...props }) {
14
23
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("textarea", {
15
24
  "data-slot": "textarea",
16
- className: require_cn.cn(textareaVariants({ shape }), className),
25
+ className: require_cn.cn(textareaVariants({
26
+ variant,
27
+ shape
28
+ }), className),
17
29
  ...props
18
30
  });
19
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst textareaVariants = cva(\n \"border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-ring-error aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-sm transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n shape: {\n default: \"rounded-xl\",\n round: \"rounded-2xl\",\n },\n },\n defaultVariants: {\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (rounded-md) or `round` (rounded-2xl). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAKA,MAAM,oBAAA,qCAAA,EAAA,KACJ,gXACA;CACE,UAAU,EACR,OAAO;EACL,SAAS;EACT,OAAO;CACT,EACF;CACA,iBAAiB,EACf,OAAO,UACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WACA,OACA,GAAG,SAKA;CACH,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,iBAAiB,EAAE,MAAM,CAAC,GAAG,SAAS;EACpD,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/* Figma: PS AI Helix – Core → Textarea (node 16:1745). Chrome matches Input. */\nconst textareaVariants = cva(\n \"text-primary-txt placeholder:text-muted-txt focus-visible:ring-focus aria-invalid:ring-focus-error flex field-sizing-content min-h-19 w-full px-3 py-2 text-sm leading-5 transition-[color,box-shadow] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n // `ai` swaps the border for the AI gradient; text/placeholder are unchanged.\n variant: {\n default:\n \"border border-primary-border bg-input-bg focus-visible:border-primary-invert-border aria-invalid:border-danger-border\",\n ai: \"ai-border [--ai-surface:var(--input-bg)]\",\n },\n shape: {\n default: \"rounded-12\",\n // Figma drew 18px here (off the radius scale, flagged to design); code rounds\n // to the nearest token step, rounded-16.\n round: \"rounded-16\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n /** Chrome style — `default` bordered field or `ai` (AI gradient border). */\n variant,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (12px) or `round` (16px). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ variant, shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAMA,MAAM,oBAAA,qCAAA,EAAA,KACJ,4RACA;CACE,UAAU;EAER,SAAS;GACP,SACE;GACF,IAAI;EACN;EACA,OAAO;GACL,SAAS;GAGT,OAAO;EACT;CACF;CACA,iBAAiB;EACf,SAAS;EACT,OAAO;CACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WAEA,SACA,OACA,GAAG,SAKA;CACH,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,iBAAiB;GAAE;GAAS;EAAM,CAAC,GAAG,SAAS;EAC7D,GAAI;CACL,CAAA;AAEL"}
@@ -1,2 +1,2 @@
1
- import { n as textareaVariants, t as Textarea } from "../../index61.cjs";
1
+ import { n as textareaVariants, t as Textarea } from "../../index62.cjs";
2
2
  export { Textarea, textareaVariants };
@@ -1,2 +1,2 @@
1
- import { n as textareaVariants, t as Textarea } from "../../index61.js";
1
+ import { n as textareaVariants, t as Textarea } from "../../index62.js";
2
2
  export { Textarea, textareaVariants };
@@ -2,18 +2,30 @@ import { t as cn } from "../../cn.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { cva } from "class-variance-authority";
4
4
  //#region src/primitives/Textarea/Textarea.tsx
5
- const textareaVariants = cva("border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-ring-error aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-sm transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", {
6
- variants: { shape: {
7
- default: "rounded-xl",
8
- round: "rounded-2xl"
9
- } },
10
- defaultVariants: { shape: "default" }
5
+ const textareaVariants = cva("text-primary-txt placeholder:text-muted-txt focus-visible:ring-focus aria-invalid:ring-focus-error flex field-sizing-content min-h-19 w-full px-3 py-2 text-sm leading-5 transition-[color,box-shadow] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50", {
6
+ variants: {
7
+ variant: {
8
+ default: "border border-primary-border bg-input-bg focus-visible:border-primary-invert-border aria-invalid:border-danger-border",
9
+ ai: "ai-border [--ai-surface:var(--input-bg)]"
10
+ },
11
+ shape: {
12
+ default: "rounded-12",
13
+ round: "rounded-16"
14
+ }
15
+ },
16
+ defaultVariants: {
17
+ variant: "default",
18
+ shape: "default"
19
+ }
11
20
  });
12
21
  /** Multi-line text input that auto-grows with its content and supports validation + disabled states. */
13
- function Textarea({ className, shape, ...props }) {
22
+ function Textarea({ className, variant, shape, ...props }) {
14
23
  return /* @__PURE__ */ jsx("textarea", {
15
24
  "data-slot": "textarea",
16
- className: cn(textareaVariants({ shape }), className),
25
+ className: cn(textareaVariants({
26
+ variant,
27
+ shape
28
+ }), className),
17
29
  ...props
18
30
  });
19
31
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst textareaVariants = cva(\n \"border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-ring-error aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-sm transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n shape: {\n default: \"rounded-xl\",\n round: \"rounded-2xl\",\n },\n },\n defaultVariants: {\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (rounded-md) or `round` (rounded-2xl). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAKA,MAAM,mBAAmB,IACvB,gXACA;CACE,UAAU,EACR,OAAO;EACL,SAAS;EACT,OAAO;CACT,EACF;CACA,iBAAiB,EACf,OAAO,UACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WACA,OACA,GAAG,SAKA;CACH,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GAAG,iBAAiB,EAAE,MAAM,CAAC,GAAG,SAAS;EACpD,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/* Figma: PS AI Helix – Core → Textarea (node 16:1745). Chrome matches Input. */\nconst textareaVariants = cva(\n \"text-primary-txt placeholder:text-muted-txt focus-visible:ring-focus aria-invalid:ring-focus-error flex field-sizing-content min-h-19 w-full px-3 py-2 text-sm leading-5 transition-[color,box-shadow] outline-none focus-visible:ring-3 disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n // `ai` swaps the border for the AI gradient; text/placeholder are unchanged.\n variant: {\n default:\n \"border border-primary-border bg-input-bg focus-visible:border-primary-invert-border aria-invalid:border-danger-border\",\n ai: \"ai-border [--ai-surface:var(--input-bg)]\",\n },\n shape: {\n default: \"rounded-12\",\n // Figma drew 18px here (off the radius scale, flagged to design); code rounds\n // to the nearest token step, rounded-16.\n round: \"rounded-16\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n /** Chrome style — `default` bordered field or `ai` (AI gradient border). */\n variant,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (12px) or `round` (16px). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ variant, shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAMA,MAAM,mBAAmB,IACvB,4RACA;CACE,UAAU;EAER,SAAS;GACP,SACE;GACF,IAAI;EACN;EACA,OAAO;GACL,SAAS;GAGT,OAAO;EACT;CACF;CACA,iBAAiB;EACf,SAAS;EACT,OAAO;CACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WAEA,SACA,OACA,GAAG,SAKA;CACH,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GAAG,iBAAiB;GAAE;GAAS;EAAM,CAAC,GAAG,SAAS;EAC7D,GAAI;CACL,CAAA;AAEL"}
@@ -1,2 +1,2 @@
1
- import { a as useTheme, i as ThemeProvider, n as ThemeMode, r as ThemeProduct, t as ThemeContext } from "../../index62.cjs";
1
+ import { a as useTheme, i as ThemeProvider, n as ThemeMode, r as ThemeProduct, t as ThemeContext } from "../../index63.cjs";
2
2
  export { ThemeContext, ThemeMode, ThemeProduct, ThemeProvider, useTheme };
@@ -1,2 +1,2 @@
1
- import { a as useTheme, i as ThemeProvider, n as ThemeMode, r as ThemeProduct, t as ThemeContext } from "../../index62.js";
1
+ import { a as useTheme, i as ThemeProvider, n as ThemeMode, r as ThemeProduct, t as ThemeContext } from "../../index63.js";
2
2
  export { ThemeContext, ThemeMode, ThemeProduct, ThemeProvider, useTheme };
@@ -3,25 +3,26 @@ const require_cn = require("../../cn.cjs");
3
3
  let radix_ui = require("radix-ui");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  //#region src/primitives/Toggle/Toggle.tsx
6
- const toggleVariants = (0, require("class-variance-authority").cva)("inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-ring-error aria-invalid:border-destructive whitespace-nowrap", {
6
+ const toggleVariants = (0, require("class-variance-authority").cva)("inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer text-primary-txt hover:bg-ghost-hover-bg disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-toggle-active-bg [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:ring-focus focus-visible:ring-3 outline-none transition-[color,box-shadow] aria-invalid:ring-focus-error aria-invalid:border-danger-border whitespace-nowrap", {
7
7
  variants: {
8
- /** Visual style: `default` (transparent) or `outline` (bordered). */
8
+ /** Visual style: `default` (transparent/ghost) or `outline` (bordered). */
9
9
  variant: {
10
- default: "bg-transparent",
11
- outline: "border border-border bg-transparent hover:bg-accent hover:text-accent-foreground"
10
+ default: "bg-ghost-bg",
11
+ outline: "border border-primary-border bg-ghost-bg"
12
12
  },
13
- /** Control size: `sm`, `default`, or `lg`. */
13
+ /** Control size: `xs` (Mini 24), `sm` (32), `default` (36), or `lg` (40). */
14
14
  size: {
15
+ xs: "h-6 px-1 min-w-6",
16
+ sm: "h-8 px-2 min-w-8",
15
17
  default: "h-9 px-2 min-w-9",
16
- sm: "h-8 px-1.5 min-w-8",
17
- lg: "h-10 px-2.5 min-w-10"
18
+ lg: "h-10 px-2 min-w-10"
18
19
  },
19
20
  shape: {
20
- default: "rounded-md",
21
+ default: "rounded-8",
21
22
  round: "rounded-full",
22
- left: "rounded-l-md rounded-r-none",
23
+ left: "rounded-l-8 rounded-r-none",
23
24
  middle: "rounded-none",
24
- right: "rounded-r-md rounded-l-none"
25
+ right: "rounded-r-8 rounded-l-none"
25
26
  }
26
27
  },
27
28
  compoundVariants: [{
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["TogglePrimitive","cn"],"sources":["../../../src/primitives/Toggle/Toggle.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Toggle as TogglePrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-ring-error aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n /** Visual style: `default` (transparent) or `outline` (bordered). */\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-border bg-transparent hover:bg-accent hover:text-accent-foreground\",\n },\n /** Control size: `sm`, `default`, or `lg`. */\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n // Shape (Figma): `default` (rounded-md) and `round` (pill) are standalone\n // shapes; `left`/`middle`/`right` join into a segmented group, rounding\n // only the outer edge.\n shape: {\n default: \"rounded-md\",\n round: \"rounded-full\",\n left: \"rounded-l-md rounded-r-none\",\n middle: \"rounded-none\",\n right: \"rounded-r-md rounded-l-none\",\n },\n },\n compoundVariants: [\n // Outlined segments collapse the shared border between adjacent items.\n { variant: \"outline\", shape: \"middle\", class: \"border-l-0\" },\n { variant: \"outline\", shape: \"right\", class: \"border-l-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** A two-state button that can be toggled on or off, built on Radix Toggle. */\nfunction Toggle({\n className,\n variant,\n size,\n shape,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, shape, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n"],"mappings":";;;;;AAMA,MAAM,kBAAA,qCAAA,EAAA,KACJ,uiBACA;CACE,UAAU;;EAER,SAAS;GACP,SAAS;GACT,SAAS;EACX;;EAEA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;EACN;EAIA,OAAO;GACL,SAAS;GACT,OAAO;GACP,MAAM;GACN,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB,CAEhB;EAAE,SAAS;EAAW,OAAO;EAAU,OAAO;CAAa,GAC3D;EAAE,SAAS;EAAW,OAAO;EAAS,OAAO;CAAa,CAC5D;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;EACN,OAAO;CACT;AACF,CACF;;AAGA,SAAS,OAAO,EACd,WACA,SACA,MACA,OACA,GAAG,SACuF;CAC1F,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAgB,MAAjB;EACE,aAAU;EACV,WAAWC,WAAAA,GAAG,eAAe;GAAE;GAAS;GAAM;GAAO;EAAU,CAAC,CAAC;EACjE,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.cjs","names":["TogglePrimitive","cn"],"sources":["../../../src/primitives/Toggle/Toggle.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Toggle as TogglePrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/* Figma: PS AI Helix – Core → Toggle & Toggle Group (274:53016). Active state\n is bg/interaction/toggle-active; Figma defines no hover state, so hover keeps\n the subtle ghost tint. */\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer text-primary-txt hover:bg-ghost-hover-bg disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-toggle-active-bg [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:ring-focus focus-visible:ring-3 outline-none transition-[color,box-shadow] aria-invalid:ring-focus-error aria-invalid:border-danger-border whitespace-nowrap\",\n {\n variants: {\n /** Visual style: `default` (transparent/ghost) or `outline` (bordered). */\n variant: {\n default: \"bg-ghost-bg\",\n outline: \"border border-primary-border bg-ghost-bg\",\n },\n /** Control size: `xs` (Mini 24), `sm` (32), `default` (36), or `lg` (40). */\n size: {\n xs: \"h-6 px-1 min-w-6\",\n sm: \"h-8 px-2 min-w-8\",\n default: \"h-9 px-2 min-w-9\",\n lg: \"h-10 px-2 min-w-10\",\n },\n // Shape (Figma): `default` (8px) and `round` (pill) are standalone\n // shapes; `left`/`middle`/`right` join into a segmented group, rounding\n // only the outer edge.\n shape: {\n default: \"rounded-8\",\n round: \"rounded-full\",\n left: \"rounded-l-8 rounded-r-none\",\n middle: \"rounded-none\",\n right: \"rounded-r-8 rounded-l-none\",\n },\n },\n compoundVariants: [\n // Outlined segments collapse the shared border between adjacent items.\n { variant: \"outline\", shape: \"middle\", class: \"border-l-0\" },\n { variant: \"outline\", shape: \"right\", class: \"border-l-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** A two-state button that can be toggled on or off, built on Radix Toggle. */\nfunction Toggle({\n className,\n variant,\n size,\n shape,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, shape, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n"],"mappings":";;;;;AASA,MAAM,kBAAA,qCAAA,EAAA,KACJ,2eACA;CACE,UAAU;;EAER,SAAS;GACP,SAAS;GACT,SAAS;EACX;;EAEA,MAAM;GACJ,IAAI;GACJ,IAAI;GACJ,SAAS;GACT,IAAI;EACN;EAIA,OAAO;GACL,SAAS;GACT,OAAO;GACP,MAAM;GACN,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB,CAEhB;EAAE,SAAS;EAAW,OAAO;EAAU,OAAO;CAAa,GAC3D;EAAE,SAAS;EAAW,OAAO;EAAS,OAAO;CAAa,CAC5D;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;EACN,OAAO;CACT;AACF,CACF;;AAGA,SAAS,OAAO,EACd,WACA,SACA,MACA,OACA,GAAG,SACuF;CAC1F,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAgB,MAAjB;EACE,aAAU;EACV,WAAWC,WAAAA,GAAG,eAAe;GAAE;GAAS;GAAM;GAAO;EAAU,CAAC,CAAC;EACjE,GAAI;CACL,CAAA;AAEL"}