@psnext/design-system 1.5.1 → 2.0.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 (647) 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 +25 -25
  6. package/dist/Header.cjs.map +1 -1
  7. package/dist/Header.js +25 -25
  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 +7 -7
  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/index25.d.ts.map +1 -1
  92. package/dist/index26.d.cts +14 -14
  93. package/dist/index26.d.cts.map +1 -1
  94. package/dist/index26.d.ts +14 -14
  95. package/dist/index26.d.ts.map +1 -1
  96. package/dist/index27.d.cts +7 -7
  97. package/dist/index27.d.ts +7 -7
  98. package/dist/index27.d.ts.map +1 -1
  99. package/dist/index28.d.cts +6 -6
  100. package/dist/index28.d.ts +5 -5
  101. package/dist/index28.d.ts.map +1 -1
  102. package/dist/index29.d.cts +4 -4
  103. package/dist/index29.d.ts +4 -4
  104. package/dist/index29.d.ts.map +1 -1
  105. package/dist/index3.d.cts +13 -13
  106. package/dist/index3.d.cts.map +1 -1
  107. package/dist/index3.d.ts +13 -13
  108. package/dist/index3.d.ts.map +1 -1
  109. package/dist/index30.d.cts +6 -6
  110. package/dist/index30.d.ts +4 -4
  111. package/dist/index31.d.cts +4 -4
  112. package/dist/index31.d.cts.map +1 -1
  113. package/dist/index31.d.ts +4 -4
  114. package/dist/index31.d.ts.map +1 -1
  115. package/dist/index32.d.cts +8 -5
  116. package/dist/index32.d.cts.map +1 -1
  117. package/dist/index32.d.ts +9 -6
  118. package/dist/index32.d.ts.map +1 -1
  119. package/dist/index33.d.cts +14 -10
  120. package/dist/index33.d.cts.map +1 -1
  121. package/dist/index33.d.ts +15 -11
  122. package/dist/index33.d.ts.map +1 -1
  123. package/dist/index34.d.cts +5 -5
  124. package/dist/index34.d.ts +5 -5
  125. package/dist/index34.d.ts.map +1 -1
  126. package/dist/index35.d.cts +14 -14
  127. package/dist/index35.d.ts +14 -14
  128. package/dist/index35.d.ts.map +1 -1
  129. package/dist/index36.d.cts +3 -3
  130. package/dist/index36.d.cts.map +1 -1
  131. package/dist/index36.d.ts +3 -3
  132. package/dist/index36.d.ts.map +1 -1
  133. package/dist/index37.d.cts +5 -5
  134. package/dist/index37.d.ts +4 -4
  135. package/dist/index37.d.ts.map +1 -1
  136. package/dist/index38.d.cts +2 -2
  137. package/dist/index38.d.ts +2 -2
  138. package/dist/index39.d.cts +17 -17
  139. package/dist/index39.d.cts.map +1 -1
  140. package/dist/index39.d.ts +17 -17
  141. package/dist/index39.d.ts.map +1 -1
  142. package/dist/index4.d.cts +2 -2
  143. package/dist/index4.d.cts.map +1 -1
  144. package/dist/index4.d.ts +2 -2
  145. package/dist/index4.d.ts.map +1 -1
  146. package/dist/index40.d.cts +4 -4
  147. package/dist/index40.d.cts.map +1 -1
  148. package/dist/index40.d.ts +5 -5
  149. package/dist/index40.d.ts.map +1 -1
  150. package/dist/index41.d.cts +11 -11
  151. package/dist/index41.d.cts.map +1 -1
  152. package/dist/index41.d.ts +11 -11
  153. package/dist/index41.d.ts.map +1 -1
  154. package/dist/index42.d.cts +8 -8
  155. package/dist/index42.d.cts.map +1 -1
  156. package/dist/index42.d.ts +8 -8
  157. package/dist/index42.d.ts.map +1 -1
  158. package/dist/index43.d.cts +10 -10
  159. package/dist/index43.d.cts.map +1 -1
  160. package/dist/index43.d.ts +10 -10
  161. package/dist/index43.d.ts.map +1 -1
  162. package/dist/index44.d.cts +1 -48
  163. package/dist/index44.d.ts +1 -48
  164. package/dist/index45.d.cts +42 -22
  165. package/dist/index45.d.cts.map +1 -1
  166. package/dist/index45.d.ts +42 -22
  167. package/dist/index45.d.ts.map +1 -1
  168. package/dist/index46.d.cts +21 -34
  169. package/dist/index46.d.cts.map +1 -1
  170. package/dist/index46.d.ts +21 -34
  171. package/dist/index46.d.ts.map +1 -1
  172. package/dist/index47.d.cts +33 -17
  173. package/dist/index47.d.cts.map +1 -1
  174. package/dist/index47.d.ts +33 -17
  175. package/dist/index47.d.ts.map +1 -1
  176. package/dist/index48.d.cts +18 -14
  177. package/dist/index48.d.cts.map +1 -1
  178. package/dist/index48.d.ts +18 -14
  179. package/dist/index48.d.ts.map +1 -1
  180. package/dist/index49.d.cts +12 -60
  181. package/dist/index49.d.cts.map +1 -1
  182. package/dist/index49.d.ts +12 -60
  183. package/dist/index49.d.ts.map +1 -1
  184. package/dist/index5.d.cts +7 -7
  185. package/dist/index5.d.cts.map +1 -1
  186. package/dist/index5.d.ts +7 -7
  187. package/dist/index5.d.ts.map +1 -1
  188. package/dist/index50.d.cts +55 -49
  189. package/dist/index50.d.cts.map +1 -1
  190. package/dist/index50.d.ts +55 -49
  191. package/dist/index50.d.ts.map +1 -1
  192. package/dist/index51.d.cts +56 -24
  193. package/dist/index51.d.cts.map +1 -1
  194. package/dist/index51.d.ts +56 -24
  195. package/dist/index51.d.ts.map +1 -1
  196. package/dist/index52.d.cts +25 -203
  197. package/dist/index52.d.cts.map +1 -1
  198. package/dist/index52.d.ts +25 -203
  199. package/dist/index52.d.ts.map +1 -1
  200. package/dist/index53.d.cts +198 -15
  201. package/dist/index53.d.cts.map +1 -1
  202. package/dist/index53.d.ts +198 -15
  203. package/dist/index53.d.ts.map +1 -1
  204. package/dist/index54.d.cts +21 -23
  205. package/dist/index54.d.cts.map +1 -1
  206. package/dist/index54.d.ts +21 -23
  207. package/dist/index54.d.ts.map +1 -1
  208. package/dist/index55.d.cts +21 -18
  209. package/dist/index55.d.cts.map +1 -1
  210. package/dist/index55.d.ts +21 -18
  211. package/dist/index55.d.ts.map +1 -1
  212. package/dist/index56.d.cts +21 -8
  213. package/dist/index56.d.cts.map +1 -1
  214. package/dist/index56.d.ts +21 -8
  215. package/dist/index56.d.ts.map +1 -1
  216. package/dist/index57.d.cts +6 -44
  217. package/dist/index57.d.cts.map +1 -1
  218. package/dist/index57.d.ts +6 -44
  219. package/dist/index57.d.ts.map +1 -1
  220. package/dist/index58.d.cts +46 -47
  221. package/dist/index58.d.cts.map +1 -1
  222. package/dist/index58.d.ts +46 -47
  223. package/dist/index58.d.ts.map +1 -1
  224. package/dist/index59.d.cts +47 -59
  225. package/dist/index59.d.cts.map +1 -1
  226. package/dist/index59.d.ts +47 -59
  227. package/dist/index59.d.ts.map +1 -1
  228. package/dist/index6.d.cts +7 -7
  229. package/dist/index6.d.cts.map +1 -1
  230. package/dist/index6.d.ts +7 -7
  231. package/dist/index6.d.ts.map +1 -1
  232. package/dist/index60.d.cts +56 -38
  233. package/dist/index60.d.cts.map +1 -1
  234. package/dist/index60.d.ts +56 -38
  235. package/dist/index60.d.ts.map +1 -1
  236. package/dist/index61.d.cts +38 -14
  237. package/dist/index61.d.cts.map +1 -1
  238. package/dist/index61.d.ts +38 -14
  239. package/dist/index61.d.ts.map +1 -1
  240. package/dist/index62.d.cts +20 -41
  241. package/dist/index62.d.cts.map +1 -1
  242. package/dist/index62.d.ts +20 -41
  243. package/dist/index62.d.ts.map +1 -1
  244. package/dist/index63.d.cts +41 -19
  245. package/dist/index63.d.cts.map +1 -1
  246. package/dist/index63.d.ts +41 -19
  247. package/dist/index63.d.ts.map +1 -1
  248. package/dist/index64.d.cts +14 -39
  249. package/dist/index64.d.cts.map +1 -1
  250. package/dist/index64.d.ts +14 -39
  251. package/dist/index64.d.ts.map +1 -1
  252. package/dist/index65.d.cts +39 -16
  253. package/dist/index65.d.cts.map +1 -1
  254. package/dist/index65.d.ts +39 -16
  255. package/dist/index65.d.ts.map +1 -1
  256. package/dist/index66.d.cts +18 -12
  257. package/dist/index66.d.cts.map +1 -1
  258. package/dist/index66.d.ts +18 -12
  259. package/dist/index66.d.ts.map +1 -1
  260. package/dist/index67.d.cts +12 -30
  261. package/dist/index67.d.cts.map +1 -1
  262. package/dist/index67.d.ts +12 -30
  263. package/dist/index67.d.ts.map +1 -1
  264. package/dist/index68.d.cts +28 -27
  265. package/dist/index68.d.cts.map +1 -1
  266. package/dist/index68.d.ts +28 -27
  267. package/dist/index68.d.ts.map +1 -1
  268. package/dist/index69.d.cts +36 -69
  269. package/dist/index69.d.cts.map +1 -0
  270. package/dist/index69.d.ts +36 -69
  271. package/dist/index69.d.ts.map +1 -0
  272. package/dist/index7.d.cts +8 -8
  273. package/dist/index7.d.cts.map +1 -1
  274. package/dist/index7.d.ts +8 -8
  275. package/dist/index70.d.cts +76 -237
  276. package/dist/index70.d.cts.map +1 -1
  277. package/dist/index70.d.ts +76 -237
  278. package/dist/index70.d.ts.map +1 -1
  279. package/dist/index71.d.cts +242 -0
  280. package/dist/index71.d.cts.map +1 -0
  281. package/dist/index71.d.ts +242 -0
  282. package/dist/index71.d.ts.map +1 -0
  283. package/dist/index8.d.cts +4 -4
  284. package/dist/index8.d.cts.map +1 -1
  285. package/dist/index8.d.ts +4 -4
  286. package/dist/index8.d.ts.map +1 -1
  287. package/dist/index9.d.cts +2 -2
  288. package/dist/index9.d.ts +2 -2
  289. package/dist/layouts/Container/index.cjs +4 -4
  290. package/dist/layouts/Container/index.cjs.map +1 -1
  291. package/dist/layouts/Container/index.d.cts +1 -1
  292. package/dist/layouts/Container/index.d.ts +1 -1
  293. package/dist/layouts/Container/index.js +4 -4
  294. package/dist/layouts/Container/index.js.map +1 -1
  295. package/dist/layouts/PageBackground/index.cjs +2 -2
  296. package/dist/layouts/PageBackground/index.cjs.map +1 -1
  297. package/dist/layouts/PageBackground/index.d.cts +1 -1
  298. package/dist/layouts/PageBackground/index.d.ts +1 -1
  299. package/dist/layouts/PageBackground/index.js +2 -2
  300. package/dist/layouts/PageBackground/index.js.map +1 -1
  301. package/dist/layouts/Stack/index.d.cts +1 -1
  302. package/dist/layouts/Stack/index.d.ts +1 -1
  303. package/dist/layouts/TwoColumn/index.d.cts +1 -1
  304. package/dist/layouts/TwoColumn/index.d.ts +1 -1
  305. package/dist/layouts/index.d.cts +4 -4
  306. package/dist/layouts/index.d.ts +4 -4
  307. package/dist/patterns/DataTable/index.cjs +12 -7
  308. package/dist/patterns/DataTable/index.cjs.map +1 -1
  309. package/dist/patterns/DataTable/index.d.cts +3 -3
  310. package/dist/patterns/DataTable/index.d.cts.map +1 -1
  311. package/dist/patterns/DataTable/index.d.ts +3 -3
  312. package/dist/patterns/DataTable/index.d.ts.map +1 -1
  313. package/dist/patterns/DataTable/index.js +12 -7
  314. package/dist/patterns/DataTable/index.js.map +1 -1
  315. package/dist/patterns/Footer/index.cjs +5 -5
  316. package/dist/patterns/Footer/index.cjs.map +1 -1
  317. package/dist/patterns/Footer/index.d.cts +9 -9
  318. package/dist/patterns/Footer/index.d.cts.map +1 -1
  319. package/dist/patterns/Footer/index.d.ts +9 -9
  320. package/dist/patterns/Footer/index.d.ts.map +1 -1
  321. package/dist/patterns/Footer/index.js +5 -5
  322. package/dist/patterns/Footer/index.js.map +1 -1
  323. package/dist/patterns/Header/index.d.cts +1 -1
  324. package/dist/patterns/Header/index.d.ts +1 -1
  325. package/dist/patterns/MediaObject/index.cjs +1 -1
  326. package/dist/patterns/MediaObject/index.cjs.map +1 -1
  327. package/dist/patterns/MediaObject/index.d.cts +12 -12
  328. package/dist/patterns/MediaObject/index.d.cts.map +1 -1
  329. package/dist/patterns/MediaObject/index.d.ts +13 -13
  330. package/dist/patterns/MediaObject/index.d.ts.map +1 -1
  331. package/dist/patterns/MediaObject/index.js +1 -1
  332. package/dist/patterns/MediaObject/index.js.map +1 -1
  333. package/dist/patterns/NavRail/index.cjs +195 -0
  334. package/dist/patterns/NavRail/index.cjs.map +1 -0
  335. package/dist/patterns/NavRail/index.d.cts +2 -0
  336. package/dist/patterns/NavRail/index.d.ts +2 -0
  337. package/dist/patterns/NavRail/index.js +185 -0
  338. package/dist/patterns/NavRail/index.js.map +1 -0
  339. package/dist/patterns/SectionCard/index.cjs +1 -1
  340. package/dist/patterns/SectionCard/index.cjs.map +1 -1
  341. package/dist/patterns/SectionCard/index.d.cts +2 -2
  342. package/dist/patterns/SectionCard/index.d.ts +2 -2
  343. package/dist/patterns/SectionCard/index.d.ts.map +1 -1
  344. package/dist/patterns/SectionCard/index.js +1 -1
  345. package/dist/patterns/SectionCard/index.js.map +1 -1
  346. package/dist/patterns/SectionHeading/index.d.cts +2 -2
  347. package/dist/patterns/SectionHeading/index.d.cts.map +1 -1
  348. package/dist/patterns/SectionHeading/index.d.ts +2 -2
  349. package/dist/patterns/SectionHeading/index.d.ts.map +1 -1
  350. package/dist/patterns/index.cjs +9 -0
  351. package/dist/patterns/index.d.cts +3 -2
  352. package/dist/patterns/index.d.ts +3 -2
  353. package/dist/patterns/index.js +2 -1
  354. package/dist/primitives/Accordion/index.cjs +6 -6
  355. package/dist/primitives/Accordion/index.cjs.map +1 -1
  356. package/dist/primitives/Accordion/index.js +6 -6
  357. package/dist/primitives/Accordion/index.js.map +1 -1
  358. package/dist/primitives/Alert/index.cjs +4 -4
  359. package/dist/primitives/Alert/index.cjs.map +1 -1
  360. package/dist/primitives/Alert/index.js +4 -4
  361. package/dist/primitives/Alert/index.js.map +1 -1
  362. package/dist/primitives/AlertDialog/index.cjs +4 -4
  363. package/dist/primitives/AlertDialog/index.cjs.map +1 -1
  364. package/dist/primitives/AlertDialog/index.js +4 -4
  365. package/dist/primitives/AlertDialog/index.js.map +1 -1
  366. package/dist/primitives/Avatar/index.cjs +5 -5
  367. package/dist/primitives/Avatar/index.cjs.map +1 -1
  368. package/dist/primitives/Avatar/index.js +5 -5
  369. package/dist/primitives/Avatar/index.js.map +1 -1
  370. package/dist/primitives/Badge/index.cjs +11 -10
  371. package/dist/primitives/Badge/index.cjs.map +1 -1
  372. package/dist/primitives/Badge/index.js +11 -10
  373. package/dist/primitives/Badge/index.js.map +1 -1
  374. package/dist/primitives/Breadcrumb/index.cjs +4 -4
  375. package/dist/primitives/Breadcrumb/index.cjs.map +1 -1
  376. package/dist/primitives/Breadcrumb/index.js +4 -4
  377. package/dist/primitives/Breadcrumb/index.js.map +1 -1
  378. package/dist/primitives/Button/index.cjs +20 -13
  379. package/dist/primitives/Button/index.cjs.map +1 -1
  380. package/dist/primitives/Button/index.js +20 -13
  381. package/dist/primitives/Button/index.js.map +1 -1
  382. package/dist/primitives/ButtonGroup/index.cjs +3 -3
  383. package/dist/primitives/ButtonGroup/index.cjs.map +1 -1
  384. package/dist/primitives/ButtonGroup/index.js +3 -3
  385. package/dist/primitives/ButtonGroup/index.js.map +1 -1
  386. package/dist/primitives/Calendar/index.cjs +22 -21
  387. package/dist/primitives/Calendar/index.cjs.map +1 -1
  388. package/dist/primitives/Calendar/index.js +22 -21
  389. package/dist/primitives/Calendar/index.js.map +1 -1
  390. package/dist/primitives/Card/index.cjs +18 -16
  391. package/dist/primitives/Card/index.cjs.map +1 -1
  392. package/dist/primitives/Card/index.js +18 -16
  393. package/dist/primitives/Card/index.js.map +1 -1
  394. package/dist/primitives/Carousel/index.cjs +2 -2
  395. package/dist/primitives/Carousel/index.cjs.map +1 -1
  396. package/dist/primitives/Carousel/index.js +2 -2
  397. package/dist/primitives/Carousel/index.js.map +1 -1
  398. package/dist/primitives/Chart/index.cjs +12 -12
  399. package/dist/primitives/Chart/index.cjs.map +1 -1
  400. package/dist/primitives/Chart/index.js +12 -12
  401. package/dist/primitives/Chart/index.js.map +1 -1
  402. package/dist/primitives/Checkbox/index.cjs +6 -6
  403. package/dist/primitives/Checkbox/index.cjs.map +1 -1
  404. package/dist/primitives/Checkbox/index.js +6 -6
  405. package/dist/primitives/Checkbox/index.js.map +1 -1
  406. package/dist/primitives/CheckboxTree/index.cjs +2 -2
  407. package/dist/primitives/CheckboxTree/index.cjs.map +1 -1
  408. package/dist/primitives/CheckboxTree/index.js +2 -2
  409. package/dist/primitives/CheckboxTree/index.js.map +1 -1
  410. package/dist/primitives/Command/index.cjs +9 -9
  411. package/dist/primitives/Command/index.cjs.map +1 -1
  412. package/dist/primitives/Command/index.js +9 -9
  413. package/dist/primitives/Command/index.js.map +1 -1
  414. package/dist/primitives/ContextMenu/index.cjs +10 -10
  415. package/dist/primitives/ContextMenu/index.cjs.map +1 -1
  416. package/dist/primitives/ContextMenu/index.js +10 -10
  417. package/dist/primitives/ContextMenu/index.js.map +1 -1
  418. package/dist/primitives/Credits/index.cjs +4 -4
  419. package/dist/primitives/Credits/index.cjs.map +1 -1
  420. package/dist/primitives/Credits/index.js +4 -4
  421. package/dist/primitives/Credits/index.js.map +1 -1
  422. package/dist/primitives/Dialog/index.cjs +5 -5
  423. package/dist/primitives/Dialog/index.cjs.map +1 -1
  424. package/dist/primitives/Dialog/index.js +5 -5
  425. package/dist/primitives/Dialog/index.js.map +1 -1
  426. package/dist/primitives/Drawer/index.cjs +5 -5
  427. package/dist/primitives/Drawer/index.cjs.map +1 -1
  428. package/dist/primitives/Drawer/index.js +5 -5
  429. package/dist/primitives/Drawer/index.js.map +1 -1
  430. package/dist/primitives/DropdownMenu/index.cjs +9 -9
  431. package/dist/primitives/DropdownMenu/index.cjs.map +1 -1
  432. package/dist/primitives/DropdownMenu/index.js +9 -9
  433. package/dist/primitives/DropdownMenu/index.js.map +1 -1
  434. package/dist/primitives/Empty/index.cjs +4 -4
  435. package/dist/primitives/Empty/index.cjs.map +1 -1
  436. package/dist/primitives/Empty/index.js +4 -4
  437. package/dist/primitives/Empty/index.js.map +1 -1
  438. package/dist/primitives/Field/index.cjs +5 -5
  439. package/dist/primitives/Field/index.cjs.map +1 -1
  440. package/dist/primitives/Field/index.js +5 -5
  441. package/dist/primitives/Field/index.js.map +1 -1
  442. package/dist/primitives/Form/index.cjs +1 -1
  443. package/dist/primitives/Form/index.cjs.map +1 -1
  444. package/dist/primitives/Form/index.js +1 -1
  445. package/dist/primitives/Form/index.js.map +1 -1
  446. package/dist/primitives/Heading/index.cjs +2 -2
  447. package/dist/primitives/Heading/index.cjs.map +1 -1
  448. package/dist/primitives/Heading/index.js +2 -2
  449. package/dist/primitives/Heading/index.js.map +1 -1
  450. package/dist/primitives/HoverCard/index.cjs +1 -1
  451. package/dist/primitives/HoverCard/index.cjs.map +1 -1
  452. package/dist/primitives/HoverCard/index.js +1 -1
  453. package/dist/primitives/HoverCard/index.js.map +1 -1
  454. package/dist/primitives/InfoBanner/index.cjs +12 -12
  455. package/dist/primitives/InfoBanner/index.cjs.map +1 -1
  456. package/dist/primitives/InfoBanner/index.js +12 -12
  457. package/dist/primitives/InfoBanner/index.js.map +1 -1
  458. package/dist/primitives/Input/index.cjs +13 -7
  459. package/dist/primitives/Input/index.cjs.map +1 -1
  460. package/dist/primitives/Input/index.js +13 -7
  461. package/dist/primitives/Input/index.js.map +1 -1
  462. package/dist/primitives/InputGroup/index.cjs +7 -7
  463. package/dist/primitives/InputGroup/index.cjs.map +1 -1
  464. package/dist/primitives/InputGroup/index.js +7 -7
  465. package/dist/primitives/InputGroup/index.js.map +1 -1
  466. package/dist/primitives/InputOtp/index.cjs +3 -3
  467. package/dist/primitives/InputOtp/index.cjs.map +1 -1
  468. package/dist/primitives/InputOtp/index.js +3 -3
  469. package/dist/primitives/InputOtp/index.js.map +1 -1
  470. package/dist/primitives/Item/index.cjs +6 -6
  471. package/dist/primitives/Item/index.cjs.map +1 -1
  472. package/dist/primitives/Item/index.js +6 -6
  473. package/dist/primitives/Item/index.js.map +1 -1
  474. package/dist/primitives/Kbd/index.cjs +1 -1
  475. package/dist/primitives/Kbd/index.cjs.map +1 -1
  476. package/dist/primitives/Kbd/index.js +1 -1
  477. package/dist/primitives/Kbd/index.js.map +1 -1
  478. package/dist/primitives/Link/index.cjs +4 -4
  479. package/dist/primitives/Link/index.cjs.map +1 -1
  480. package/dist/primitives/Link/index.js +4 -4
  481. package/dist/primitives/Link/index.js.map +1 -1
  482. package/dist/primitives/Menubar/index.cjs +12 -12
  483. package/dist/primitives/Menubar/index.cjs.map +1 -1
  484. package/dist/primitives/Menubar/index.js +12 -12
  485. package/dist/primitives/Menubar/index.js.map +1 -1
  486. package/dist/primitives/NativeSelect/index.cjs +5 -5
  487. package/dist/primitives/NativeSelect/index.cjs.map +1 -1
  488. package/dist/primitives/NativeSelect/index.js +5 -5
  489. package/dist/primitives/NativeSelect/index.js.map +1 -1
  490. package/dist/primitives/NavRail/index.cjs +9 -194
  491. package/dist/primitives/NavRail/index.d.cts +1 -0
  492. package/dist/primitives/NavRail/index.d.ts +1 -0
  493. package/dist/primitives/NavRail/index.js +1 -184
  494. package/dist/primitives/NavigationMenu/index.cjs +7 -7
  495. package/dist/primitives/NavigationMenu/index.cjs.map +1 -1
  496. package/dist/primitives/NavigationMenu/index.js +7 -7
  497. package/dist/primitives/NavigationMenu/index.js.map +1 -1
  498. package/dist/primitives/Pagination/index.cjs +7 -13
  499. package/dist/primitives/Pagination/index.cjs.map +1 -1
  500. package/dist/primitives/Pagination/index.d.cts +1 -1
  501. package/dist/primitives/Pagination/index.d.ts +1 -1
  502. package/dist/primitives/Pagination/index.js +8 -14
  503. package/dist/primitives/Pagination/index.js.map +1 -1
  504. package/dist/primitives/Popover/index.cjs +4 -4
  505. package/dist/primitives/Popover/index.cjs.map +1 -1
  506. package/dist/primitives/Popover/index.js +4 -4
  507. package/dist/primitives/Popover/index.js.map +1 -1
  508. package/dist/primitives/Progress/index.cjs +16 -16
  509. package/dist/primitives/Progress/index.cjs.map +1 -1
  510. package/dist/primitives/Progress/index.d.cts +1 -1
  511. package/dist/primitives/Progress/index.d.ts +1 -1
  512. package/dist/primitives/Progress/index.js +16 -16
  513. package/dist/primitives/Progress/index.js.map +1 -1
  514. package/dist/primitives/RadioGroup/index.cjs +7 -7
  515. package/dist/primitives/RadioGroup/index.cjs.map +1 -1
  516. package/dist/primitives/RadioGroup/index.d.cts +1 -1
  517. package/dist/primitives/RadioGroup/index.d.ts +1 -1
  518. package/dist/primitives/RadioGroup/index.js +7 -7
  519. package/dist/primitives/RadioGroup/index.js.map +1 -1
  520. package/dist/primitives/Resizable/index.cjs +2 -2
  521. package/dist/primitives/Resizable/index.cjs.map +1 -1
  522. package/dist/primitives/Resizable/index.d.cts +1 -1
  523. package/dist/primitives/Resizable/index.d.ts +1 -1
  524. package/dist/primitives/Resizable/index.js +2 -2
  525. package/dist/primitives/Resizable/index.js.map +1 -1
  526. package/dist/primitives/ScrollArea/index.cjs +2 -2
  527. package/dist/primitives/ScrollArea/index.cjs.map +1 -1
  528. package/dist/primitives/ScrollArea/index.d.cts +1 -1
  529. package/dist/primitives/ScrollArea/index.d.ts +1 -1
  530. package/dist/primitives/ScrollArea/index.js +2 -2
  531. package/dist/primitives/ScrollArea/index.js.map +1 -1
  532. package/dist/primitives/Select/index.cjs +8 -8
  533. package/dist/primitives/Select/index.cjs.map +1 -1
  534. package/dist/primitives/Select/index.d.cts +1 -1
  535. package/dist/primitives/Select/index.d.ts +1 -1
  536. package/dist/primitives/Select/index.js +8 -8
  537. package/dist/primitives/Select/index.js.map +1 -1
  538. package/dist/primitives/Separator/index.cjs +1 -1
  539. package/dist/primitives/Separator/index.cjs.map +1 -1
  540. package/dist/primitives/Separator/index.js +1 -1
  541. package/dist/primitives/Separator/index.js.map +1 -1
  542. package/dist/primitives/Sheet/index.cjs +8 -8
  543. package/dist/primitives/Sheet/index.cjs.map +1 -1
  544. package/dist/primitives/Sheet/index.d.cts +1 -1
  545. package/dist/primitives/Sheet/index.d.ts +1 -1
  546. package/dist/primitives/Sheet/index.js +8 -8
  547. package/dist/primitives/Sheet/index.js.map +1 -1
  548. package/dist/primitives/Sidebar/index.d.cts +1 -1
  549. package/dist/primitives/Sidebar/index.d.ts +1 -1
  550. package/dist/primitives/Skeleton/index.cjs +2 -2
  551. package/dist/primitives/Skeleton/index.cjs.map +1 -1
  552. package/dist/primitives/Skeleton/index.d.cts +1 -1
  553. package/dist/primitives/Skeleton/index.d.ts +1 -1
  554. package/dist/primitives/Skeleton/index.js +2 -2
  555. package/dist/primitives/Skeleton/index.js.map +1 -1
  556. package/dist/primitives/Slider/index.cjs +3 -3
  557. package/dist/primitives/Slider/index.cjs.map +1 -1
  558. package/dist/primitives/Slider/index.d.cts +1 -1
  559. package/dist/primitives/Slider/index.d.ts +1 -1
  560. package/dist/primitives/Slider/index.js +3 -3
  561. package/dist/primitives/Slider/index.js.map +1 -1
  562. package/dist/primitives/Sonner/index.cjs +13 -6
  563. package/dist/primitives/Sonner/index.cjs.map +1 -1
  564. package/dist/primitives/Sonner/index.d.cts +1 -1
  565. package/dist/primitives/Sonner/index.d.ts +1 -1
  566. package/dist/primitives/Sonner/index.js +13 -6
  567. package/dist/primitives/Sonner/index.js.map +1 -1
  568. package/dist/primitives/Spinner/index.d.cts +1 -1
  569. package/dist/primitives/Spinner/index.d.ts +1 -1
  570. package/dist/primitives/Switch/index.cjs +7 -7
  571. package/dist/primitives/Switch/index.cjs.map +1 -1
  572. package/dist/primitives/Switch/index.d.cts +1 -1
  573. package/dist/primitives/Switch/index.d.ts +1 -1
  574. package/dist/primitives/Switch/index.js +7 -7
  575. package/dist/primitives/Switch/index.js.map +1 -1
  576. package/dist/primitives/Table/index.cjs +7 -7
  577. package/dist/primitives/Table/index.cjs.map +1 -1
  578. package/dist/primitives/Table/index.d.cts +1 -1
  579. package/dist/primitives/Table/index.d.ts +1 -1
  580. package/dist/primitives/Table/index.js +7 -7
  581. package/dist/primitives/Table/index.js.map +1 -1
  582. package/dist/primitives/Tabs/index.cjs +21 -21
  583. package/dist/primitives/Tabs/index.cjs.map +1 -1
  584. package/dist/primitives/Tabs/index.d.cts +1 -1
  585. package/dist/primitives/Tabs/index.d.ts +1 -1
  586. package/dist/primitives/Tabs/index.js +21 -21
  587. package/dist/primitives/Tabs/index.js.map +1 -1
  588. package/dist/primitives/Text/index.cjs +5 -5
  589. package/dist/primitives/Text/index.cjs.map +1 -1
  590. package/dist/primitives/Text/index.d.cts +1 -1
  591. package/dist/primitives/Text/index.d.ts +1 -1
  592. package/dist/primitives/Text/index.js +5 -5
  593. package/dist/primitives/Text/index.js.map +1 -1
  594. package/dist/primitives/Textarea/index.cjs +20 -8
  595. package/dist/primitives/Textarea/index.cjs.map +1 -1
  596. package/dist/primitives/Textarea/index.d.cts +1 -1
  597. package/dist/primitives/Textarea/index.d.ts +1 -1
  598. package/dist/primitives/Textarea/index.js +20 -8
  599. package/dist/primitives/Textarea/index.js.map +1 -1
  600. package/dist/primitives/ThemeProvider/index.d.cts +1 -1
  601. package/dist/primitives/ThemeProvider/index.d.ts +1 -1
  602. package/dist/primitives/Toggle/index.cjs +11 -10
  603. package/dist/primitives/Toggle/index.cjs.map +1 -1
  604. package/dist/primitives/Toggle/index.d.cts +1 -1
  605. package/dist/primitives/Toggle/index.d.ts +1 -1
  606. package/dist/primitives/Toggle/index.js +11 -10
  607. package/dist/primitives/Toggle/index.js.map +1 -1
  608. package/dist/primitives/ToggleGroup/index.cjs +2 -2
  609. package/dist/primitives/ToggleGroup/index.cjs.map +1 -1
  610. package/dist/primitives/ToggleGroup/index.d.cts +1 -1
  611. package/dist/primitives/ToggleGroup/index.d.ts +1 -1
  612. package/dist/primitives/ToggleGroup/index.js +2 -2
  613. package/dist/primitives/ToggleGroup/index.js.map +1 -1
  614. package/dist/primitives/Tooltip/index.cjs +2 -2
  615. package/dist/primitives/Tooltip/index.cjs.map +1 -1
  616. package/dist/primitives/Tooltip/index.d.cts +1 -1
  617. package/dist/primitives/Tooltip/index.d.ts +1 -1
  618. package/dist/primitives/Tooltip/index.js +2 -2
  619. package/dist/primitives/Tooltip/index.js.map +1 -1
  620. package/dist/primitives/index.cjs +10 -10
  621. package/dist/primitives/index.d.cts +21 -21
  622. package/dist/primitives/index.d.ts +21 -21
  623. package/dist/primitives/index.js +2 -2
  624. package/dist/styles/base.css +23 -4
  625. package/dist/styles/brand-scopes.css +49 -0
  626. package/dist/styles/glass.css +13 -8
  627. package/dist/styles/index.css +8 -9
  628. package/dist/styles/theme.css +141 -90
  629. package/dist/styles/tokens/border-radius.css +8 -8
  630. package/dist/styles/tokens/mode-dark.css +71 -94
  631. package/dist/styles/tokens/mode-light.css +71 -94
  632. package/dist/styles/tokens/shadows.css +4 -7
  633. package/dist/styles/tokens/spacing.css +17 -37
  634. package/dist/styles/tokens/theme-bodhi.css +6 -28
  635. package/dist/styles/tokens/theme-slingshot.css +7 -28
  636. package/dist/styles/tokens/theme-sustain.css +6 -28
  637. package/dist/styles/typography.css +9 -9
  638. package/package.json +8 -2
  639. package/dist/index44.d.cts.map +0 -1
  640. package/dist/index44.d.ts.map +0 -1
  641. package/dist/primitives/NavRail/index.cjs.map +0 -1
  642. package/dist/primitives/NavRail/index.js.map +0 -1
  643. package/dist/styles/semantic.css +0 -178
  644. package/dist/styles/tokens/alpha.css +0 -39
  645. package/dist/styles/tokens/chart-colors-dark.css +0 -18
  646. package/dist/styles/tokens/chart-colors-light.css +0 -18
  647. package/dist/styles/tokens/colors.css +0 -251
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Calendar/Calendar.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport * as React from \"react\";\nimport { type DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\";\n\nimport { Button, buttonVariants } from \"@/primitives/Button\";\nimport { cn } from \"@/utils\";\n\n/** Date picker calendar built on react-day-picker, themed with the DS Button + tokens. */\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"ghost\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n /** Button variant used for the previous/next navigation controls. */\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"];\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"group/calendar bg-background p-3 [--cell-size:--spacing(8)] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\"relative flex flex-col gap-4 md:flex-row\", defaultClassNames.months),\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\n nav: cn(\n \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) p-0 select-none aria-disabled:opacity-50\",\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-(--cell-size) p-0 select-none aria-disabled:opacity-50\",\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n \"flex h-(--cell-size) w-full items-center justify-center px-(--cell-size)\",\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n \"flex h-(--cell-size) w-full items-center justify-center gap-1.5 text-sm font-medium\",\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n \"relative rounded-md border border-input shadow-xs has-focus:border-ring has-focus:ring-[3px] has-focus:ring-ring/50\",\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn(\"absolute inset-0 bg-popover opacity-0\", defaultClassNames.dropdown),\n caption_label: cn(\n \"font-medium select-none\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"flex h-8 items-center gap-1 rounded-md pr-1 pl-2 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-foreground\",\n defaultClassNames.caption_label,\n ),\n month_grid: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"flex-1 rounded-md text-[0.8rem] font-normal text-muted-foreground select-none\",\n defaultClassNames.weekday,\n ),\n week: cn(\"mt-2 flex w-full\", defaultClassNames.week),\n week_number_header: cn(\"w-(--cell-size) select-none\", defaultClassNames.week_number_header),\n week_number: cn(\n \"text-[0.8rem] text-muted-foreground select-none\",\n defaultClassNames.week_number,\n ),\n day: cn(\n \"group/day relative aspect-square h-full w-full p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-md\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-md\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-md\",\n defaultClassNames.day,\n ),\n range_start: cn(\"rounded-l-md bg-accent\", defaultClassNames.range_start),\n range_middle: cn(\"rounded-none\", defaultClassNames.range_middle),\n range_end: cn(\"rounded-r-md bg-accent\", defaultClassNames.range_end),\n today: cn(\n \"font-semibold text-foreground data-[selected=true]:rounded-none\",\n defaultClassNames.today,\n ),\n outside: cn(\n \"text-muted-foreground aria-selected:text-muted-foreground\",\n defaultClassNames.outside,\n ),\n disabled: cn(\"text-muted-foreground opacity-50\", defaultClassNames.disabled),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />;\n }\n\n if (orientation === \"right\") {\n return <ChevronRightIcon className={cn(\"size-4\", className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\n/** Single day cell button, applying selected/range styling from the day's modifiers. */\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n className={cn(\n \"flex aspect-square size-auto w-full min-w-(--cell-size) flex-col gap-1 leading-none font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:border-ring group-data-[focused=true]/day:ring-[3px] group-data-[focused=true]/day:ring-ring/50 data-[range-end=true]:rounded-md data-[range-end=true]:rounded-r-md data-[range-end=true]:bg-accent data-[range-end=true]:text-accent-foreground data-[range-middle=true]:rounded-none data-[range-middle=true]:bg-accent data-[range-middle=true]:text-accent-foreground data-[range-start=true]:rounded-md data-[range-start=true]:rounded-l-md data-[range-start=true]:bg-accent data-[range-start=true]:text-accent-foreground data-[selected-single=true]:bg-accent data-[selected-single=true]:text-accent-foreground [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Calendar/Calendar.tsx"],"sourcesContent":["import { ChevronDownIcon, ChevronLeftIcon, ChevronRightIcon } from \"lucide-react\";\nimport * as React from \"react\";\nimport { type DayButton, DayPicker, getDefaultClassNames } from \"react-day-picker\";\n\nimport { Button, buttonVariants } from \"@/primitives/Button\";\nimport { cn } from \"@/utils\";\n\n/** Date picker calendar built on react-day-picker, themed with the DS Button + tokens. */\nfunction Calendar({\n className,\n classNames,\n showOutsideDays = true,\n captionLayout = \"label\",\n buttonVariant = \"outline\",\n formatters,\n components,\n ...props\n}: React.ComponentProps<typeof DayPicker> & {\n /** Button variant used for the previous/next navigation controls. */\n buttonVariant?: React.ComponentProps<typeof Button>[\"variant\"];\n}) {\n const defaultClassNames = getDefaultClassNames();\n\n return (\n <DayPicker\n showOutsideDays={showOutsideDays}\n className={cn(\n \"group/calendar bg-glass-60-bg backdrop-blur-glass p-4 [--cell-size:48px] [[data-slot=card-content]_&]:bg-transparent [[data-slot=popover-content]_&]:bg-transparent rounded-16\",\n String.raw`rtl:**:[.rdp-button\\_next>svg]:rotate-180`,\n String.raw`rtl:**:[.rdp-button\\_previous>svg]:rotate-180`,\n className,\n )}\n captionLayout={captionLayout}\n formatters={{\n formatMonthDropdown: (date) => date.toLocaleString(\"default\", { month: \"short\" }),\n ...formatters,\n }}\n classNames={{\n root: cn(\"w-fit\", defaultClassNames.root),\n months: cn(\"relative flex flex-col gap-4 md:flex-row\", defaultClassNames.months),\n month: cn(\"flex w-full flex-col gap-4\", defaultClassNames.month),\n nav: cn(\n \"absolute inset-x-0 top-0 flex w-full items-center justify-between gap-1\",\n defaultClassNames.nav,\n ),\n button_previous: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-8 rounded-full p-0 select-none aria-disabled:opacity-50\",\n defaultClassNames.button_previous,\n ),\n button_next: cn(\n buttonVariants({ variant: buttonVariant }),\n \"size-8 rounded-full p-0 select-none aria-disabled:opacity-50\",\n defaultClassNames.button_next,\n ),\n month_caption: cn(\n \"flex h-8 w-full items-center justify-center px-8 text-sm leading-5 font-medium\",\n defaultClassNames.month_caption,\n ),\n dropdowns: cn(\n \"flex h-8 w-full items-center justify-center gap-1.5 text-sm font-medium\",\n defaultClassNames.dropdowns,\n ),\n dropdown_root: cn(\n \"relative rounded-8 border border-primary-border shadow-sm has-focus:border-primary-invert-border has-focus:ring-3 has-focus:ring-focus\",\n defaultClassNames.dropdown_root,\n ),\n dropdown: cn(\"absolute inset-0 opacity-0\", defaultClassNames.dropdown),\n caption_label: cn(\n \"font-medium select-none\",\n captionLayout === \"label\"\n ? \"text-sm\"\n : \"flex h-8 items-center gap-1 rounded-8 pr-1 pl-0.5 text-sm [&>svg]:size-3.5 [&>svg]:text-muted-txt\",\n defaultClassNames.caption_label,\n ),\n month_grid: \"w-full border-collapse\",\n weekdays: cn(\"flex\", defaultClassNames.weekdays),\n weekday: cn(\n \"flex h-8 flex-1 items-center justify-center rounded-8 text-xs leading-4 font-normal text-muted-txt select-none\",\n defaultClassNames.weekday,\n ),\n week: cn(\"mt-px flex w-full\", defaultClassNames.week),\n week_number_header: cn(\"w-(--cell-size) select-none\", defaultClassNames.week_number_header),\n week_number: cn(\n \"text-xs leading-4 text-muted-txt select-none\",\n defaultClassNames.week_number,\n ),\n day: cn(\n \"group/day relative flex h-12 w-(--cell-size) items-center justify-center p-0 text-center select-none [&:last-child[data-selected=true]_button]:rounded-r-full\",\n props.showWeekNumber\n ? \"[&:nth-child(2)[data-selected=true]_button]:rounded-l-full\"\n : \"[&:first-child[data-selected=true]_button]:rounded-l-full\",\n defaultClassNames.day,\n ),\n range_start: cn(\n \"bg-[linear-gradient(to_right,transparent_50%,var(--muted-bg)_50%)]\",\n defaultClassNames.range_start,\n ),\n range_middle: cn(\"rounded-none bg-muted-bg\", defaultClassNames.range_middle),\n range_end: cn(\n \"bg-[linear-gradient(to_right,var(--muted-bg)_50%,transparent_50%)]\",\n defaultClassNames.range_end,\n ),\n today: cn(\"data-[selected=true]:rounded-none\", defaultClassNames.today),\n outside: cn(\"text-muted-txt aria-selected:text-muted-txt\", defaultClassNames.outside),\n disabled: cn(\"text-muted-txt opacity-50\", defaultClassNames.disabled),\n hidden: cn(\"invisible\", defaultClassNames.hidden),\n ...classNames,\n }}\n components={{\n Root: ({ className, rootRef, ...props }) => {\n return <div data-slot=\"calendar\" ref={rootRef} className={cn(className)} {...props} />;\n },\n Chevron: ({ className, orientation, ...props }) => {\n if (orientation === \"left\") {\n return <ChevronLeftIcon className={cn(\"size-4\", className)} {...props} />;\n }\n\n if (orientation === \"right\") {\n return <ChevronRightIcon className={cn(\"size-4\", className)} {...props} />;\n }\n\n return <ChevronDownIcon className={cn(\"size-4\", className)} {...props} />;\n },\n DayButton: CalendarDayButton,\n WeekNumber: ({ children, ...props }) => {\n return (\n <td {...props}>\n <div className=\"flex size-(--cell-size) items-center justify-center text-center\">\n {children}\n </div>\n </td>\n );\n },\n ...components,\n }}\n {...props}\n />\n );\n}\n\n/** Single day cell button, applying selected/range styling from the day's modifiers. */\nfunction CalendarDayButton({\n className,\n day,\n modifiers,\n ...props\n}: React.ComponentProps<typeof DayButton>) {\n const defaultClassNames = getDefaultClassNames();\n\n const ref = React.useRef<HTMLButtonElement>(null);\n React.useEffect(() => {\n if (modifiers.focused) ref.current?.focus();\n }, [modifiers.focused]);\n\n return (\n <Button\n ref={ref}\n variant=\"ghost\"\n size=\"icon-sm\"\n data-day={day.date.toLocaleDateString()}\n data-selected-single={\n modifiers.selected &&\n !modifiers.range_start &&\n !modifiers.range_end &&\n !modifiers.range_middle\n }\n data-range-start={modifiers.range_start}\n data-range-end={modifiers.range_end}\n data-range-middle={modifiers.range_middle}\n data-today={modifiers.today}\n className={cn(\n // Figma .Date Picker/Day: 48px cell, 32px circular button; selected and\n // range endpoints are primary-invert circles, today a muted circle.\n \"flex size-8 flex-col gap-0 rounded-full p-0 text-sm leading-5 font-normal group-data-[focused=true]/day:relative group-data-[focused=true]/day:z-10 group-data-[focused=true]/day:ring-3 group-data-[focused=true]/day:ring-focus data-[today=true]:bg-muted-bg data-[range-end=true]:bg-primary-invert-bg! data-[range-end=true]:text-primary-invert-txt data-[range-middle=true]:bg-transparent data-[range-middle=true]:text-primary-txt data-[range-start=true]:bg-primary-invert-bg! data-[range-start=true]:text-primary-invert-txt data-[selected-single=true]:bg-primary-invert-bg! data-[selected-single=true]:text-primary-invert-txt [&>span]:text-xs [&>span]:opacity-70\",\n defaultClassNames.day,\n className,\n )}\n {...props}\n />\n );\n}\n\nexport { Calendar, CalendarDayButton };\n"],"mappings":"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"}
@@ -2,13 +2,14 @@ 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/Card/Card.tsx
5
- const cardVariants = (0, require("class-variance-authority").cva)("flex flex-col gap-6 rounded-xl border text-card-foreground", {
5
+ const cardVariants = (0, require("class-variance-authority").cva)("flex flex-col justify-between gap-6 rounded-8 border text-primary-txt", {
6
6
  variants: {
7
7
  variant: {
8
- default: "bg-card shadow-sm",
8
+ default: "bg-glass-none-bg shadow-sm",
9
9
  glass: "border-transparent backdrop-blur-glass",
10
- brand: "border-transparent bg-[image:var(--brand-surface-gradient)] text-brand-surface-foreground",
11
- inverted: "border-transparent bg-inverse text-inverse-foreground"
10
+ brand: "border-transparent bg-[image:linear-gradient(to_right,var(--theme-brand-700),var(--theme-brand-500-primary))] text-white",
11
+ ai: "ai-border [--ai-surface:var(--glass-none-bg)]",
12
+ inverted: "border-transparent bg-primary-invert-bg text-primary-invert-txt"
12
13
  },
13
14
  tint: {
14
15
  subtle: "",
@@ -21,22 +22,22 @@ const cardVariants = (0, require("class-variance-authority").cva)("flex flex-col
21
22
  {
22
23
  variant: "glass",
23
24
  tint: "subtle",
24
- class: "bg-[var(--glass-subtle)]"
25
+ class: "bg-glass-20-bg backdrop-blur-glass"
25
26
  },
26
27
  {
27
28
  variant: "glass",
28
29
  tint: "light",
29
- class: "bg-[var(--glass-light)]"
30
+ class: "bg-glass-40-bg backdrop-blur-glass"
30
31
  },
31
32
  {
32
33
  variant: "glass",
33
34
  tint: "medium",
34
- class: "bg-[var(--glass-medium)]"
35
+ class: "bg-glass-40-bg backdrop-blur-glass"
35
36
  },
36
37
  {
37
38
  variant: "glass",
38
39
  tint: "heavy",
39
- class: "bg-[var(--glass-heavy)]"
40
+ class: "bg-glass-60-bg backdrop-blur-glass"
40
41
  }
41
42
  ],
42
43
  defaultVariants: {
@@ -52,7 +53,7 @@ function Card({ className, variant, tint, ...props }) {
52
53
  className: require_cn.cn(cardVariants({
53
54
  variant,
54
55
  tint
55
- }), className, "justify-between"),
56
+ }), className),
56
57
  ...props
57
58
  });
58
59
  }
@@ -65,15 +66,16 @@ const cardHeaderAlign = {
65
66
  function CardHeader({ className, align = "center", ...props }) {
66
67
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
67
68
  "data-slot": "card-header",
68
- className: require_cn.cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] gap-1.5 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", cardHeaderAlign[align], className),
69
+ className: require_cn.cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] gap-1 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", cardHeaderAlign[align], className),
69
70
  ...props
70
71
  });
71
72
  }
72
- /** Card heading rendered as an `h4`. */
73
+ /** Card heading rendered as an `h4`. Figma binds the body font (Inter Semibold
74
+ 16/24), so we override the base heading styles explicitly. */
73
75
  function CardTitle({ className, ...props }) {
74
76
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("h4", {
75
77
  "data-slot": "card-title",
76
- className: require_cn.cn("leading-none", className),
78
+ className: require_cn.cn("font-sans text-base leading-6 font-semibold", className),
77
79
  ...props
78
80
  });
79
81
  }
@@ -81,7 +83,7 @@ function CardTitle({ className, ...props }) {
81
83
  function CardDescription({ className, ...props }) {
82
84
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("p", {
83
85
  "data-slot": "card-description",
84
- className: require_cn.cn("text-muted-foreground", className),
86
+ className: require_cn.cn("text-sm leading-5 text-muted-txt", className),
85
87
  ...props
86
88
  });
87
89
  }
@@ -103,9 +105,9 @@ function CardContent({ className, ...props }) {
103
105
  }
104
106
  const cardFooterTone = {
105
107
  default: "px-6 pb-6 [.border-t]:pt-6",
106
- brand: "justify-center rounded-b-xl bg-brand-accent px-6 py-3 text-brand-accent-foreground",
107
- muted: "justify-center rounded-b-xl bg-muted px-6 py-3 text-muted-foreground",
108
- card: "justify-center rounded-b-xl bg-card px-6 py-3 text-card-foreground"
108
+ brand: "justify-center rounded-b-8 bg-brand-200 px-6 py-3 text-brand-800",
109
+ muted: "justify-center rounded-b-8 bg-muted-bg px-6 py-3 text-muted-txt",
110
+ card: "justify-center rounded-b-8 bg-glass-none-bg px-6 py-3 text-primary-txt"
109
111
  };
110
112
  /** Bottom region of the card — typically holds actions or summary text. */
111
113
  function CardFooter({ className, tone = "default", ...props }) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Card/Card.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst cardVariants = cva(\"flex flex-col gap-6 rounded-xl border text-card-foreground\", {\n variants: {\n variant: {\n // Solid surface (default).\n default: \"bg-card shadow-sm\",\n // Translucent, backdrop-blurred glass surface — reads over a textured\n // background (e.g. PageBackground). `tint` picks the --glass-* token.\n glass: \"border-transparent backdrop-blur-glass\",\n // Filled brand surface with light foreground — the active product's colour,\n // as a left-to-right gradient (darker → lighter brand shade).\n brand:\n \"border-transparent bg-[image:var(--brand-surface-gradient)] text-brand-surface-foreground\",\n // Inverted surface — contrasts with the page (dark card in light mode,\n // light card in dark mode).\n inverted: \"border-transparent bg-inverse text-inverse-foreground\",\n },\n tint: {\n subtle: \"\",\n light: \"\",\n medium: \"\",\n heavy: \"\",\n },\n },\n compoundVariants: [\n { variant: \"glass\", tint: \"subtle\", class: \"bg-[var(--glass-subtle)]\" },\n { variant: \"glass\", tint: \"light\", class: \"bg-[var(--glass-light)]\" },\n { variant: \"glass\", tint: \"medium\", class: \"bg-[var(--glass-medium)]\" },\n { variant: \"glass\", tint: \"heavy\", class: \"bg-[var(--glass-heavy)]\" },\n ],\n defaultVariants: {\n variant: \"default\",\n tint: \"light\",\n },\n});\n\ntype CardProps = React.ComponentProps<\"div\"> &\n VariantProps<typeof cardVariants> & {\n /** Surface treatment of the card. Default `default` (solid `bg-card`). */\n variant?: VariantProps<typeof cardVariants>[\"variant\"];\n /** Glass opacity step — only applies to `variant=\"glass\"`. Default `light`. */\n tint?: VariantProps<typeof cardVariants>[\"tint\"];\n };\n\n/** Surface container with composable header/content/footer slots. */\nfunction Card({ className, variant, tint, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant ?? \"default\"}\n className={cn(cardVariants({ variant, tint }), className, \"justify-between\")}\n {...props}\n />\n );\n}\n\n// Vertical alignment of the header's items (title/description vs. the action).\nconst cardHeaderAlign = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n} as const;\n\n/** Top region of a card — holds the title, description, and optional action. */\nfunction CardHeader({\n className,\n align = \"center\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n /** Vertical alignment of the header items. Default `center`. */\n align?: keyof typeof cardHeaderAlign;\n}) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] gap-1.5 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n cardHeaderAlign[align],\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Card heading rendered as an `h4`. */\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return <h4 data-slot=\"card-title\" className={cn(\"leading-none\", className)} {...props} />;\n}\n\n/** Muted supporting text shown beneath the title. */\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <p data-slot=\"card-description\" className={cn(\"text-muted-foreground\", className)} {...props} />\n );\n}\n\n/** Action slot in the header row, aligned to the end alongside the title. */\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n // Sits in row 1 alongside the title (not spanning rows) and has no `self-*`,\n // so it shares the title's row and follows CardHeader's `align` — the title\n // and action then truly centre against each other regardless of height.\n className={cn(\"col-start-2 row-start-1 justify-self-end\", className)}\n {...props}\n />\n );\n}\n\n/** Main body region of the card. */\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 [&:last-child]:pb-6\", className)}\n {...props}\n />\n );\n}\n\n// Footer fill. `default` is transparent (the usual footer); `brand`/`muted`\n// render a full-width tinted band with the action centred — pair with\n// `<Card className=\"overflow-hidden\">` so the band clips to the card radius.\nconst cardFooterTone = {\n default: \"px-6 pb-6 [.border-t]:pt-6\",\n brand: \"justify-center rounded-b-xl bg-brand-accent px-6 py-3 text-brand-accent-foreground\",\n muted: \"justify-center rounded-b-xl bg-muted px-6 py-3 text-muted-foreground\",\n card: \"justify-center rounded-b-xl bg-card px-6 py-3 text-card-foreground\",\n} as const;\n\n/** Bottom region of the card — typically holds actions or summary text. */\nfunction CardFooter({\n className,\n tone = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n /** Footer fill. `brand`/`muted` render a full-width tinted band. */\n tone?: keyof typeof cardFooterTone;\n}) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center\", cardFooterTone[tone], className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n cardVariants,\n type CardProps,\n};\n"],"mappings":";;;;AAKA,MAAM,gBAAA,qCAAA,EAAA,KAAmB,8DAA8D;CACrF,UAAU;EACR,SAAS;GAEP,SAAS;GAGT,OAAO;GAGP,OACE;GAGF,UAAU;EACZ;EACA,MAAM;GACJ,QAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB;EAChB;GAAE,SAAS;GAAS,MAAM;GAAU,OAAO;EAA2B;EACtE;GAAE,SAAS;GAAS,MAAM;GAAS,OAAO;EAA0B;EACpE;GAAE,SAAS;GAAS,MAAM;GAAU,OAAO;EAA2B;EACtE;GAAE,SAAS;GAAS,MAAM;GAAS,OAAO;EAA0B;CACtE;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAWD,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,GAAG,SAAoB;CAC/D,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,gBAAc,WAAW;EACzB,WAAWA,WAAAA,GAAG,aAAa;GAAE;GAAS;EAAK,CAAC,GAAG,WAAW,iBAAiB;EAC3E,GAAI;CACL,CAAA;AAEL;AAGA,MAAM,kBAAkB;CACtB,OAAO;CACP,QAAQ;CACR,KAAK;AACP;;AAGA,SAAS,WAAW,EAClB,WACA,QAAQ,UACR,GAAG,SAIF;CACD,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GACT,uJACA,gBAAgB,QAChB,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;CACvE,OAAO,iBAAA,GAAA,kBAAA,KAAC,MAAD;EAAI,aAAU;EAAa,WAAWA,WAAAA,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC1F;;AAGA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;CAC7E,OACE,iBAAA,GAAA,kBAAA,KAAC,KAAD;EAAG,aAAU;EAAmB,WAAWA,WAAAA,GAAG,yBAAyB,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEnG;;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EAIV,WAAWA,WAAAA,GAAG,4CAA4C,SAAS;EACnE,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAKA,MAAM,iBAAiB;CACrB,SAAS;CACT,OAAO;CACP,OAAO;CACP,MAAM;AACR;;AAGA,SAAS,WAAW,EAClB,WACA,OAAO,WACP,GAAG,SAIF;CACD,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,qBAAqB,eAAe,OAAO,SAAS;EAClE,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Card/Card.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 → Card (288:122714): glass-none surface,\n border/primary, radius-8, shadow-sm, 24px padding/gaps. */\nconst cardVariants = cva(\"flex flex-col justify-between gap-6 rounded-8 border text-primary-txt\", {\n variants: {\n variant: {\n // Solid surface (default).\n default: \"bg-glass-none-bg shadow-sm\",\n // Translucent, backdrop-blurred glass surface — reads over a textured\n // background (e.g. PageBackground). `tint` picks the glass-*-bg step.\n glass: \"border-transparent backdrop-blur-glass\",\n // Filled brand surface with light foreground — the active product's colour,\n // as a left-to-right gradient (darker → lighter brand shade). Uses the\n // theme-layer stops so it does NOT flip in dark mode (matches pre-swap look).\n brand:\n \"border-transparent bg-[image:linear-gradient(to_right,var(--theme-brand-700),var(--theme-brand-500-primary))] text-white\",\n // AI affordance: gradient ring around the normal surface (accessible —\n // a full ai-gradient background fails contrast on the gray end).\n ai: \"ai-border [--ai-surface:var(--glass-none-bg)]\",\n // Inverted surface — contrasts with the page (dark card in light mode,\n // light card in dark mode).\n inverted: \"border-transparent bg-primary-invert-bg text-primary-invert-txt\",\n },\n tint: {\n subtle: \"\",\n light: \"\",\n medium: \"\",\n heavy: \"\",\n },\n },\n compoundVariants: [\n { variant: \"glass\", tint: \"subtle\", class: \"bg-glass-20-bg backdrop-blur-glass\" },\n { variant: \"glass\", tint: \"light\", class: \"bg-glass-40-bg backdrop-blur-glass\" },\n // No 0.5 step exists in the new glass tokens — medium maps to 40 until\n // design adds one (flagged).\n { variant: \"glass\", tint: \"medium\", class: \"bg-glass-40-bg backdrop-blur-glass\" },\n { variant: \"glass\", tint: \"heavy\", class: \"bg-glass-60-bg backdrop-blur-glass\" },\n ],\n defaultVariants: {\n variant: \"default\",\n tint: \"light\",\n },\n});\n\ntype CardProps = React.ComponentProps<\"div\"> &\n VariantProps<typeof cardVariants> & {\n /** Surface treatment of the card. Default `default` (solid surface). */\n variant?: VariantProps<typeof cardVariants>[\"variant\"];\n /** Glass opacity step — only applies to `variant=\"glass\"`. Default `light`. */\n tint?: VariantProps<typeof cardVariants>[\"tint\"];\n };\n\n/** Surface container with composable header/content/footer slots. */\nfunction Card({ className, variant, tint, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant ?? \"default\"}\n className={cn(cardVariants({ variant, tint }), className)}\n {...props}\n />\n );\n}\n\n// Vertical alignment of the header's items (title/description vs. the action).\nconst cardHeaderAlign = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n} as const;\n\n/** Top region of a card — holds the title, description, and optional action. */\nfunction CardHeader({\n className,\n align = \"center\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n /** Vertical alignment of the header items. Default `center`. */\n align?: keyof typeof cardHeaderAlign;\n}) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] gap-1 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n cardHeaderAlign[align],\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Card heading rendered as an `h4`. Figma binds the body font (Inter Semibold\n 16/24), so we override the base heading styles explicitly. */\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <h4\n data-slot=\"card-title\"\n className={cn(\"font-sans text-base leading-6 font-semibold\", className)}\n {...props}\n />\n );\n}\n\n/** Muted supporting text shown beneath the title. */\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <p\n data-slot=\"card-description\"\n className={cn(\"text-sm leading-5 text-muted-txt\", className)}\n {...props}\n />\n );\n}\n\n/** Action slot in the header row, aligned to the end alongside the title. */\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n // Sits in row 1 alongside the title (not spanning rows) and has no `self-*`,\n // so it shares the title's row and follows CardHeader's `align` — the title\n // and action then truly centre against each other regardless of height.\n className={cn(\"col-start-2 row-start-1 justify-self-end\", className)}\n {...props}\n />\n );\n}\n\n/** Main body region of the card. */\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 [&:last-child]:pb-6\", className)}\n {...props}\n />\n );\n}\n\n// Footer fill. `default` is transparent (the usual footer); `brand`/`muted`\n// render a full-width tinted band with the action centred — pair with\n// `<Card className=\"overflow-hidden\">` so the band clips to the card radius.\nconst cardFooterTone = {\n default: \"px-6 pb-6 [.border-t]:pt-6\",\n // Brand band = the light brand tint pair (brand-200 surface, brand-800 text).\n brand: \"justify-center rounded-b-8 bg-brand-200 px-6 py-3 text-brand-800\",\n muted: \"justify-center rounded-b-8 bg-muted-bg px-6 py-3 text-muted-txt\",\n card: \"justify-center rounded-b-8 bg-glass-none-bg px-6 py-3 text-primary-txt\",\n} as const;\n\n/** Bottom region of the card — typically holds actions or summary text. */\nfunction CardFooter({\n className,\n tone = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n /** Footer fill. `brand`/`muted` render a full-width tinted band. */\n tone?: keyof typeof cardFooterTone;\n}) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center\", cardFooterTone[tone], className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n cardVariants,\n type CardProps,\n};\n"],"mappings":";;;;AAOA,MAAM,gBAAA,qCAAA,EAAA,KAAmB,yEAAyE;CAChG,UAAU;EACR,SAAS;GAEP,SAAS;GAGT,OAAO;GAIP,OACE;GAGF,IAAI;GAGJ,UAAU;EACZ;EACA,MAAM;GACJ,QAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB;EAChB;GAAE,SAAS;GAAS,MAAM;GAAU,OAAO;EAAqC;EAChF;GAAE,SAAS;GAAS,MAAM;GAAS,OAAO;EAAqC;EAG/E;GAAE,SAAS;GAAS,MAAM;GAAU,OAAO;EAAqC;EAChF;GAAE,SAAS;GAAS,MAAM;GAAS,OAAO;EAAqC;CACjF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAWD,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,GAAG,SAAoB;CAC/D,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,gBAAc,WAAW;EACzB,WAAWA,WAAAA,GAAG,aAAa;GAAE;GAAS;EAAK,CAAC,GAAG,SAAS;EACxD,GAAI;CACL,CAAA;AAEL;AAGA,MAAM,kBAAkB;CACtB,OAAO;CACP,QAAQ;CACR,KAAK;AACP;;AAGA,SAAS,WAAW,EAClB,WACA,QAAQ,UACR,GAAG,SAIF;CACD,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GACT,qJACA,gBAAgB,QAChB,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;AAIA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;CACvE,OACE,iBAAA,GAAA,kBAAA,KAAC,MAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,+CAA+C,SAAS;EACtE,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;CAC7E,OACE,iBAAA,GAAA,kBAAA,KAAC,KAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EAIV,WAAWA,WAAAA,GAAG,4CAA4C,SAAS;EACnE,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAKA,MAAM,iBAAiB;CACrB,SAAS;CAET,OAAO;CACP,OAAO;CACP,MAAM;AACR;;AAGA,SAAS,WAAW,EAClB,WACA,OAAO,WACP,GAAG,SAIF;CACD,OACE,iBAAA,GAAA,kBAAA,KAAC,OAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,qBAAqB,eAAe,OAAO,SAAS;EAClE,GAAI;CACL,CAAA;AAEL"}
@@ -2,13 +2,14 @@ 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/Card/Card.tsx
5
- const cardVariants = cva("flex flex-col gap-6 rounded-xl border text-card-foreground", {
5
+ const cardVariants = cva("flex flex-col justify-between gap-6 rounded-8 border text-primary-txt", {
6
6
  variants: {
7
7
  variant: {
8
- default: "bg-card shadow-sm",
8
+ default: "bg-glass-none-bg shadow-sm",
9
9
  glass: "border-transparent backdrop-blur-glass",
10
- brand: "border-transparent bg-[image:var(--brand-surface-gradient)] text-brand-surface-foreground",
11
- inverted: "border-transparent bg-inverse text-inverse-foreground"
10
+ brand: "border-transparent bg-[image:linear-gradient(to_right,var(--theme-brand-700),var(--theme-brand-500-primary))] text-white",
11
+ ai: "ai-border [--ai-surface:var(--glass-none-bg)]",
12
+ inverted: "border-transparent bg-primary-invert-bg text-primary-invert-txt"
12
13
  },
13
14
  tint: {
14
15
  subtle: "",
@@ -21,22 +22,22 @@ const cardVariants = cva("flex flex-col gap-6 rounded-xl border text-card-foregr
21
22
  {
22
23
  variant: "glass",
23
24
  tint: "subtle",
24
- class: "bg-[var(--glass-subtle)]"
25
+ class: "bg-glass-20-bg backdrop-blur-glass"
25
26
  },
26
27
  {
27
28
  variant: "glass",
28
29
  tint: "light",
29
- class: "bg-[var(--glass-light)]"
30
+ class: "bg-glass-40-bg backdrop-blur-glass"
30
31
  },
31
32
  {
32
33
  variant: "glass",
33
34
  tint: "medium",
34
- class: "bg-[var(--glass-medium)]"
35
+ class: "bg-glass-40-bg backdrop-blur-glass"
35
36
  },
36
37
  {
37
38
  variant: "glass",
38
39
  tint: "heavy",
39
- class: "bg-[var(--glass-heavy)]"
40
+ class: "bg-glass-60-bg backdrop-blur-glass"
40
41
  }
41
42
  ],
42
43
  defaultVariants: {
@@ -52,7 +53,7 @@ function Card({ className, variant, tint, ...props }) {
52
53
  className: cn(cardVariants({
53
54
  variant,
54
55
  tint
55
- }), className, "justify-between"),
56
+ }), className),
56
57
  ...props
57
58
  });
58
59
  }
@@ -65,15 +66,16 @@ const cardHeaderAlign = {
65
66
  function CardHeader({ className, align = "center", ...props }) {
66
67
  return /* @__PURE__ */ jsx("div", {
67
68
  "data-slot": "card-header",
68
- className: cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] gap-1.5 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", cardHeaderAlign[align], className),
69
+ className: cn("@container/card-header grid auto-rows-min grid-rows-[auto_auto] gap-1 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6", cardHeaderAlign[align], className),
69
70
  ...props
70
71
  });
71
72
  }
72
- /** Card heading rendered as an `h4`. */
73
+ /** Card heading rendered as an `h4`. Figma binds the body font (Inter Semibold
74
+ 16/24), so we override the base heading styles explicitly. */
73
75
  function CardTitle({ className, ...props }) {
74
76
  return /* @__PURE__ */ jsx("h4", {
75
77
  "data-slot": "card-title",
76
- className: cn("leading-none", className),
78
+ className: cn("font-sans text-base leading-6 font-semibold", className),
77
79
  ...props
78
80
  });
79
81
  }
@@ -81,7 +83,7 @@ function CardTitle({ className, ...props }) {
81
83
  function CardDescription({ className, ...props }) {
82
84
  return /* @__PURE__ */ jsx("p", {
83
85
  "data-slot": "card-description",
84
- className: cn("text-muted-foreground", className),
86
+ className: cn("text-sm leading-5 text-muted-txt", className),
85
87
  ...props
86
88
  });
87
89
  }
@@ -103,9 +105,9 @@ function CardContent({ className, ...props }) {
103
105
  }
104
106
  const cardFooterTone = {
105
107
  default: "px-6 pb-6 [.border-t]:pt-6",
106
- brand: "justify-center rounded-b-xl bg-brand-accent px-6 py-3 text-brand-accent-foreground",
107
- muted: "justify-center rounded-b-xl bg-muted px-6 py-3 text-muted-foreground",
108
- card: "justify-center rounded-b-xl bg-card px-6 py-3 text-card-foreground"
108
+ brand: "justify-center rounded-b-8 bg-brand-200 px-6 py-3 text-brand-800",
109
+ muted: "justify-center rounded-b-8 bg-muted-bg px-6 py-3 text-muted-txt",
110
+ card: "justify-center rounded-b-8 bg-glass-none-bg px-6 py-3 text-primary-txt"
109
111
  };
110
112
  /** Bottom region of the card — typically holds actions or summary text. */
111
113
  function CardFooter({ className, tone = "default", ...props }) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Card/Card.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst cardVariants = cva(\"flex flex-col gap-6 rounded-xl border text-card-foreground\", {\n variants: {\n variant: {\n // Solid surface (default).\n default: \"bg-card shadow-sm\",\n // Translucent, backdrop-blurred glass surface — reads over a textured\n // background (e.g. PageBackground). `tint` picks the --glass-* token.\n glass: \"border-transparent backdrop-blur-glass\",\n // Filled brand surface with light foreground — the active product's colour,\n // as a left-to-right gradient (darker → lighter brand shade).\n brand:\n \"border-transparent bg-[image:var(--brand-surface-gradient)] text-brand-surface-foreground\",\n // Inverted surface — contrasts with the page (dark card in light mode,\n // light card in dark mode).\n inverted: \"border-transparent bg-inverse text-inverse-foreground\",\n },\n tint: {\n subtle: \"\",\n light: \"\",\n medium: \"\",\n heavy: \"\",\n },\n },\n compoundVariants: [\n { variant: \"glass\", tint: \"subtle\", class: \"bg-[var(--glass-subtle)]\" },\n { variant: \"glass\", tint: \"light\", class: \"bg-[var(--glass-light)]\" },\n { variant: \"glass\", tint: \"medium\", class: \"bg-[var(--glass-medium)]\" },\n { variant: \"glass\", tint: \"heavy\", class: \"bg-[var(--glass-heavy)]\" },\n ],\n defaultVariants: {\n variant: \"default\",\n tint: \"light\",\n },\n});\n\ntype CardProps = React.ComponentProps<\"div\"> &\n VariantProps<typeof cardVariants> & {\n /** Surface treatment of the card. Default `default` (solid `bg-card`). */\n variant?: VariantProps<typeof cardVariants>[\"variant\"];\n /** Glass opacity step — only applies to `variant=\"glass\"`. Default `light`. */\n tint?: VariantProps<typeof cardVariants>[\"tint\"];\n };\n\n/** Surface container with composable header/content/footer slots. */\nfunction Card({ className, variant, tint, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant ?? \"default\"}\n className={cn(cardVariants({ variant, tint }), className, \"justify-between\")}\n {...props}\n />\n );\n}\n\n// Vertical alignment of the header's items (title/description vs. the action).\nconst cardHeaderAlign = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n} as const;\n\n/** Top region of a card — holds the title, description, and optional action. */\nfunction CardHeader({\n className,\n align = \"center\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n /** Vertical alignment of the header items. Default `center`. */\n align?: keyof typeof cardHeaderAlign;\n}) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] gap-1.5 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n cardHeaderAlign[align],\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Card heading rendered as an `h4`. */\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return <h4 data-slot=\"card-title\" className={cn(\"leading-none\", className)} {...props} />;\n}\n\n/** Muted supporting text shown beneath the title. */\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <p data-slot=\"card-description\" className={cn(\"text-muted-foreground\", className)} {...props} />\n );\n}\n\n/** Action slot in the header row, aligned to the end alongside the title. */\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n // Sits in row 1 alongside the title (not spanning rows) and has no `self-*`,\n // so it shares the title's row and follows CardHeader's `align` — the title\n // and action then truly centre against each other regardless of height.\n className={cn(\"col-start-2 row-start-1 justify-self-end\", className)}\n {...props}\n />\n );\n}\n\n/** Main body region of the card. */\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 [&:last-child]:pb-6\", className)}\n {...props}\n />\n );\n}\n\n// Footer fill. `default` is transparent (the usual footer); `brand`/`muted`\n// render a full-width tinted band with the action centred — pair with\n// `<Card className=\"overflow-hidden\">` so the band clips to the card radius.\nconst cardFooterTone = {\n default: \"px-6 pb-6 [.border-t]:pt-6\",\n brand: \"justify-center rounded-b-xl bg-brand-accent px-6 py-3 text-brand-accent-foreground\",\n muted: \"justify-center rounded-b-xl bg-muted px-6 py-3 text-muted-foreground\",\n card: \"justify-center rounded-b-xl bg-card px-6 py-3 text-card-foreground\",\n} as const;\n\n/** Bottom region of the card — typically holds actions or summary text. */\nfunction CardFooter({\n className,\n tone = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n /** Footer fill. `brand`/`muted` render a full-width tinted band. */\n tone?: keyof typeof cardFooterTone;\n}) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center\", cardFooterTone[tone], className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n cardVariants,\n type CardProps,\n};\n"],"mappings":";;;;AAKA,MAAM,eAAe,IAAI,8DAA8D;CACrF,UAAU;EACR,SAAS;GAEP,SAAS;GAGT,OAAO;GAGP,OACE;GAGF,UAAU;EACZ;EACA,MAAM;GACJ,QAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB;EAChB;GAAE,SAAS;GAAS,MAAM;GAAU,OAAO;EAA2B;EACtE;GAAE,SAAS;GAAS,MAAM;GAAS,OAAO;EAA0B;EACpE;GAAE,SAAS;GAAS,MAAM;GAAU,OAAO;EAA2B;EACtE;GAAE,SAAS;GAAS,MAAM;GAAS,OAAO;EAA0B;CACtE;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAWD,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,GAAG,SAAoB;CAC/D,OACE,oBAAC,OAAD;EACE,aAAU;EACV,gBAAc,WAAW;EACzB,WAAW,GAAG,aAAa;GAAE;GAAS;EAAK,CAAC,GAAG,WAAW,iBAAiB;EAC3E,GAAI;CACL,CAAA;AAEL;AAGA,MAAM,kBAAkB;CACtB,OAAO;CACP,QAAQ;CACR,KAAK;AACP;;AAGA,SAAS,WAAW,EAClB,WACA,QAAQ,UACR,GAAG,SAIF;CACD,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,uJACA,gBAAgB,QAChB,SACF;EACA,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;CACvE,OAAO,oBAAC,MAAD;EAAI,aAAU;EAAa,WAAW,GAAG,gBAAgB,SAAS;EAAG,GAAI;CAAQ,CAAA;AAC1F;;AAGA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;CAC7E,OACE,oBAAC,KAAD;EAAG,aAAU;EAAmB,WAAW,GAAG,yBAAyB,SAAS;EAAG,GAAI;CAAQ,CAAA;AAEnG;;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EAIV,WAAW,GAAG,4CAA4C,SAAS;EACnE,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAKA,MAAM,iBAAiB;CACrB,SAAS;CACT,OAAO;CACP,OAAO;CACP,MAAM;AACR;;AAGA,SAAS,WAAW,EAClB,WACA,OAAO,WACP,GAAG,SAIF;CACD,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,qBAAqB,eAAe,OAAO,SAAS;EAClE,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Card/Card.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 → Card (288:122714): glass-none surface,\n border/primary, radius-8, shadow-sm, 24px padding/gaps. */\nconst cardVariants = cva(\"flex flex-col justify-between gap-6 rounded-8 border text-primary-txt\", {\n variants: {\n variant: {\n // Solid surface (default).\n default: \"bg-glass-none-bg shadow-sm\",\n // Translucent, backdrop-blurred glass surface — reads over a textured\n // background (e.g. PageBackground). `tint` picks the glass-*-bg step.\n glass: \"border-transparent backdrop-blur-glass\",\n // Filled brand surface with light foreground — the active product's colour,\n // as a left-to-right gradient (darker → lighter brand shade). Uses the\n // theme-layer stops so it does NOT flip in dark mode (matches pre-swap look).\n brand:\n \"border-transparent bg-[image:linear-gradient(to_right,var(--theme-brand-700),var(--theme-brand-500-primary))] text-white\",\n // AI affordance: gradient ring around the normal surface (accessible —\n // a full ai-gradient background fails contrast on the gray end).\n ai: \"ai-border [--ai-surface:var(--glass-none-bg)]\",\n // Inverted surface — contrasts with the page (dark card in light mode,\n // light card in dark mode).\n inverted: \"border-transparent bg-primary-invert-bg text-primary-invert-txt\",\n },\n tint: {\n subtle: \"\",\n light: \"\",\n medium: \"\",\n heavy: \"\",\n },\n },\n compoundVariants: [\n { variant: \"glass\", tint: \"subtle\", class: \"bg-glass-20-bg backdrop-blur-glass\" },\n { variant: \"glass\", tint: \"light\", class: \"bg-glass-40-bg backdrop-blur-glass\" },\n // No 0.5 step exists in the new glass tokens — medium maps to 40 until\n // design adds one (flagged).\n { variant: \"glass\", tint: \"medium\", class: \"bg-glass-40-bg backdrop-blur-glass\" },\n { variant: \"glass\", tint: \"heavy\", class: \"bg-glass-60-bg backdrop-blur-glass\" },\n ],\n defaultVariants: {\n variant: \"default\",\n tint: \"light\",\n },\n});\n\ntype CardProps = React.ComponentProps<\"div\"> &\n VariantProps<typeof cardVariants> & {\n /** Surface treatment of the card. Default `default` (solid surface). */\n variant?: VariantProps<typeof cardVariants>[\"variant\"];\n /** Glass opacity step — only applies to `variant=\"glass\"`. Default `light`. */\n tint?: VariantProps<typeof cardVariants>[\"tint\"];\n };\n\n/** Surface container with composable header/content/footer slots. */\nfunction Card({ className, variant, tint, ...props }: CardProps) {\n return (\n <div\n data-slot=\"card\"\n data-variant={variant ?? \"default\"}\n className={cn(cardVariants({ variant, tint }), className)}\n {...props}\n />\n );\n}\n\n// Vertical alignment of the header's items (title/description vs. the action).\nconst cardHeaderAlign = {\n start: \"items-start\",\n center: \"items-center\",\n end: \"items-end\",\n} as const;\n\n/** Top region of a card — holds the title, description, and optional action. */\nfunction CardHeader({\n className,\n align = \"center\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n /** Vertical alignment of the header items. Default `center`. */\n align?: keyof typeof cardHeaderAlign;\n}) {\n return (\n <div\n data-slot=\"card-header\"\n className={cn(\n \"@container/card-header grid auto-rows-min grid-rows-[auto_auto] gap-1 px-6 pt-6 has-data-[slot=card-action]:grid-cols-[1fr_auto] [.border-b]:pb-6\",\n cardHeaderAlign[align],\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Card heading rendered as an `h4`. Figma binds the body font (Inter Semibold\n 16/24), so we override the base heading styles explicitly. */\nfunction CardTitle({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <h4\n data-slot=\"card-title\"\n className={cn(\"font-sans text-base leading-6 font-semibold\", className)}\n {...props}\n />\n );\n}\n\n/** Muted supporting text shown beneath the title. */\nfunction CardDescription({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <p\n data-slot=\"card-description\"\n className={cn(\"text-sm leading-5 text-muted-txt\", className)}\n {...props}\n />\n );\n}\n\n/** Action slot in the header row, aligned to the end alongside the title. */\nfunction CardAction({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-action\"\n // Sits in row 1 alongside the title (not spanning rows) and has no `self-*`,\n // so it shares the title's row and follows CardHeader's `align` — the title\n // and action then truly centre against each other regardless of height.\n className={cn(\"col-start-2 row-start-1 justify-self-end\", className)}\n {...props}\n />\n );\n}\n\n/** Main body region of the card. */\nfunction CardContent({ className, ...props }: React.ComponentProps<\"div\">) {\n return (\n <div\n data-slot=\"card-content\"\n className={cn(\"px-6 [&:last-child]:pb-6\", className)}\n {...props}\n />\n );\n}\n\n// Footer fill. `default` is transparent (the usual footer); `brand`/`muted`\n// render a full-width tinted band with the action centred — pair with\n// `<Card className=\"overflow-hidden\">` so the band clips to the card radius.\nconst cardFooterTone = {\n default: \"px-6 pb-6 [.border-t]:pt-6\",\n // Brand band = the light brand tint pair (brand-200 surface, brand-800 text).\n brand: \"justify-center rounded-b-8 bg-brand-200 px-6 py-3 text-brand-800\",\n muted: \"justify-center rounded-b-8 bg-muted-bg px-6 py-3 text-muted-txt\",\n card: \"justify-center rounded-b-8 bg-glass-none-bg px-6 py-3 text-primary-txt\",\n} as const;\n\n/** Bottom region of the card — typically holds actions or summary text. */\nfunction CardFooter({\n className,\n tone = \"default\",\n ...props\n}: React.ComponentProps<\"div\"> & {\n /** Footer fill. `brand`/`muted` render a full-width tinted band. */\n tone?: keyof typeof cardFooterTone;\n}) {\n return (\n <div\n data-slot=\"card-footer\"\n className={cn(\"flex items-center\", cardFooterTone[tone], className)}\n {...props}\n />\n );\n}\n\nexport {\n Card,\n CardHeader,\n CardFooter,\n CardTitle,\n CardAction,\n CardDescription,\n CardContent,\n cardVariants,\n type CardProps,\n};\n"],"mappings":";;;;AAOA,MAAM,eAAe,IAAI,yEAAyE;CAChG,UAAU;EACR,SAAS;GAEP,SAAS;GAGT,OAAO;GAIP,OACE;GAGF,IAAI;GAGJ,UAAU;EACZ;EACA,MAAM;GACJ,QAAQ;GACR,OAAO;GACP,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB;EAChB;GAAE,SAAS;GAAS,MAAM;GAAU,OAAO;EAAqC;EAChF;GAAE,SAAS;GAAS,MAAM;GAAS,OAAO;EAAqC;EAG/E;GAAE,SAAS;GAAS,MAAM;GAAU,OAAO;EAAqC;EAChF;GAAE,SAAS;GAAS,MAAM;GAAS,OAAO;EAAqC;CACjF;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;CACR;AACF,CAAC;;AAWD,SAAS,KAAK,EAAE,WAAW,SAAS,MAAM,GAAG,SAAoB;CAC/D,OACE,oBAAC,OAAD;EACE,aAAU;EACV,gBAAc,WAAW;EACzB,WAAW,GAAG,aAAa;GAAE;GAAS;EAAK,CAAC,GAAG,SAAS;EACxD,GAAI;CACL,CAAA;AAEL;AAGA,MAAM,kBAAkB;CACtB,OAAO;CACP,QAAQ;CACR,KAAK;AACP;;AAGA,SAAS,WAAW,EAClB,WACA,QAAQ,UACR,GAAG,SAIF;CACD,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GACT,qJACA,gBAAgB,QAChB,SACF;EACA,GAAI;CACL,CAAA;AAEL;;;AAIA,SAAS,UAAU,EAAE,WAAW,GAAG,SAAsC;CACvE,OACE,oBAAC,MAAD;EACE,aAAU;EACV,WAAW,GAAG,+CAA+C,SAAS;EACtE,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,gBAAgB,EAAE,WAAW,GAAG,SAAsC;CAC7E,OACE,oBAAC,KAAD;EACE,aAAU;EACV,WAAW,GAAG,oCAAoC,SAAS;EAC3D,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,WAAW,EAAE,WAAW,GAAG,SAAsC;CACxE,OACE,oBAAC,OAAD;EACE,aAAU;EAIV,WAAW,GAAG,4CAA4C,SAAS;EACnE,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,YAAY,EAAE,WAAW,GAAG,SAAsC;CACzE,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,4BAA4B,SAAS;EACnD,GAAI;CACL,CAAA;AAEL;AAKA,MAAM,iBAAiB;CACrB,SAAS;CAET,OAAO;CACP,OAAO;CACP,MAAM;AACR;;AAGA,SAAS,WAAW,EAClB,WACA,OAAO,WACP,GAAG,SAIF;CACD,OACE,oBAAC,OAAD;EACE,aAAU;EACV,WAAW,GAAG,qBAAqB,eAAe,OAAO,SAAS;EAClE,GAAI;CACL,CAAA;AAEL"}
@@ -109,7 +109,7 @@ function CarouselPrevious({ className, variant = "outline", size = "icon", ...pr
109
109
  "data-slot": "carousel-previous",
110
110
  variant,
111
111
  size,
112
- className: require_cn.cn("absolute size-8 rounded-lg", orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90", className),
112
+ className: require_cn.cn("absolute size-9 rounded-8 border-primary-border", orientation === "horizontal" ? "top-1/2 -left-13 -translate-y-1/2" : "-top-13 left-1/2 -translate-x-1/2 rotate-90", className),
113
113
  disabled: !canScrollPrev,
114
114
  onClick: scrollPrev,
115
115
  ...props,
@@ -126,7 +126,7 @@ function CarouselNext({ className, variant = "outline", size = "icon", ...props
126
126
  "data-slot": "carousel-next",
127
127
  variant,
128
128
  size,
129
- className: require_cn.cn("absolute size-8 rounded-lg", orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90", className),
129
+ className: require_cn.cn("absolute size-9 rounded-8 border-primary-border", orientation === "horizontal" ? "top-1/2 -right-13 -translate-y-1/2" : "-bottom-13 left-1/2 -translate-x-1/2 rotate-90", className),
130
130
  disabled: !canScrollNext,
131
131
  onClick: scrollNext,
132
132
  ...props,
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["React","cn","Button","ArrowLeft","ArrowRight"],"sources":["../../../src/primitives/Carousel/Carousel.tsx"],"sourcesContent":["\"use client\";\n\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/primitives/Button\";\nimport { cn } from \"@/utils\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n /** Embla carousel options (loop, align, dragFree, etc.). */\n opts?: CarouselOptions;\n /** Embla plugins (e.g. Autoplay) to extend the carousel behaviour. */\n plugins?: CarouselPlugin;\n /** Scroll axis of the carousel. */\n orientation?: \"horizontal\" | \"vertical\";\n /** Receives the Embla API instance once initialised, for external control. */\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\n/** Embla-backed carousel root: provides context and arrow-key navigation for its slides. */\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/** Scroll viewport that lays out the slides along the carousel's axis. */\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div\n className={cn(\"flex\", orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\", className)}\n {...props}\n />\n </div>\n );\n}\n\n/** A single slide within `CarouselContent`. */\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Button that scrolls to the previous slide; auto-disables at the start. */\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-lg\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\n/** Button that scrolls to the next slide; auto-disables at the end. */\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-lg\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["React","cn","Button","ArrowLeft","ArrowRight"],"sources":["../../../src/primitives/Carousel/Carousel.tsx"],"sourcesContent":["\"use client\";\n\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/primitives/Button\";\nimport { cn } from \"@/utils\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n /** Embla carousel options (loop, align, dragFree, etc.). */\n opts?: CarouselOptions;\n /** Embla plugins (e.g. Autoplay) to extend the carousel behaviour. */\n plugins?: CarouselPlugin;\n /** Scroll axis of the carousel. */\n orientation?: \"horizontal\" | \"vertical\";\n /** Receives the Embla API instance once initialised, for external control. */\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\n/** Embla-backed carousel root: provides context and arrow-key navigation for its slides. */\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/** Scroll viewport that lays out the slides along the carousel's axis. */\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div\n className={cn(\"flex\", orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\", className)}\n {...props}\n />\n </div>\n );\n}\n\n/** A single slide within `CarouselContent`. */\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Button that scrolls to the previous slide; auto-disables at the start. */\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-9 rounded-8 border-primary-border\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-13 -translate-y-1/2\"\n : \"-top-13 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\n/** Button that scrolls to the next slide; auto-disables at the end. */\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-9 rounded-8 border-primary-border\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-13 -translate-y-1/2\"\n : \"-bottom-13 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"],"mappings":"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"}
@@ -105,7 +105,7 @@ function CarouselPrevious({ className, variant = "outline", size = "icon", ...pr
105
105
  "data-slot": "carousel-previous",
106
106
  variant,
107
107
  size,
108
- className: cn("absolute size-8 rounded-lg", orientation === "horizontal" ? "top-1/2 -left-12 -translate-y-1/2" : "-top-12 left-1/2 -translate-x-1/2 rotate-90", className),
108
+ className: cn("absolute size-9 rounded-8 border-primary-border", orientation === "horizontal" ? "top-1/2 -left-13 -translate-y-1/2" : "-top-13 left-1/2 -translate-x-1/2 rotate-90", className),
109
109
  disabled: !canScrollPrev,
110
110
  onClick: scrollPrev,
111
111
  ...props,
@@ -122,7 +122,7 @@ function CarouselNext({ className, variant = "outline", size = "icon", ...props
122
122
  "data-slot": "carousel-next",
123
123
  variant,
124
124
  size,
125
- className: cn("absolute size-8 rounded-lg", orientation === "horizontal" ? "top-1/2 -right-12 -translate-y-1/2" : "-bottom-12 left-1/2 -translate-x-1/2 rotate-90", className),
125
+ className: cn("absolute size-9 rounded-8 border-primary-border", orientation === "horizontal" ? "top-1/2 -right-13 -translate-y-1/2" : "-bottom-13 left-1/2 -translate-x-1/2 rotate-90", className),
126
126
  disabled: !canScrollNext,
127
127
  onClick: scrollNext,
128
128
  ...props,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Carousel/Carousel.tsx"],"sourcesContent":["\"use client\";\n\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/primitives/Button\";\nimport { cn } from \"@/utils\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n /** Embla carousel options (loop, align, dragFree, etc.). */\n opts?: CarouselOptions;\n /** Embla plugins (e.g. Autoplay) to extend the carousel behaviour. */\n plugins?: CarouselPlugin;\n /** Scroll axis of the carousel. */\n orientation?: \"horizontal\" | \"vertical\";\n /** Receives the Embla API instance once initialised, for external control. */\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\n/** Embla-backed carousel root: provides context and arrow-key navigation for its slides. */\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/** Scroll viewport that lays out the slides along the carousel's axis. */\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div\n className={cn(\"flex\", orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\", className)}\n {...props}\n />\n </div>\n );\n}\n\n/** A single slide within `CarouselContent`. */\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Button that scrolls to the previous slide; auto-disables at the start. */\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-lg\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-12 -translate-y-1/2\"\n : \"-top-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\n/** Button that scrolls to the next slide; auto-disables at the end. */\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-8 rounded-lg\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-12 -translate-y-1/2\"\n : \"-bottom-12 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Carousel/Carousel.tsx"],"sourcesContent":["\"use client\";\n\nimport useEmblaCarousel, { type UseEmblaCarouselType } from \"embla-carousel-react\";\nimport { ArrowLeft, ArrowRight } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { Button } from \"@/primitives/Button\";\nimport { cn } from \"@/utils\";\n\ntype CarouselApi = UseEmblaCarouselType[1];\ntype UseCarouselParameters = Parameters<typeof useEmblaCarousel>;\ntype CarouselOptions = UseCarouselParameters[0];\ntype CarouselPlugin = UseCarouselParameters[1];\n\ntype CarouselProps = {\n /** Embla carousel options (loop, align, dragFree, etc.). */\n opts?: CarouselOptions;\n /** Embla plugins (e.g. Autoplay) to extend the carousel behaviour. */\n plugins?: CarouselPlugin;\n /** Scroll axis of the carousel. */\n orientation?: \"horizontal\" | \"vertical\";\n /** Receives the Embla API instance once initialised, for external control. */\n setApi?: (api: CarouselApi) => void;\n};\n\ntype CarouselContextProps = {\n carouselRef: ReturnType<typeof useEmblaCarousel>[0];\n api: ReturnType<typeof useEmblaCarousel>[1];\n scrollPrev: () => void;\n scrollNext: () => void;\n canScrollPrev: boolean;\n canScrollNext: boolean;\n} & CarouselProps;\n\nconst CarouselContext = React.createContext<CarouselContextProps | null>(null);\n\nfunction useCarousel() {\n const context = React.useContext(CarouselContext);\n\n if (!context) {\n throw new Error(\"useCarousel must be used within a <Carousel />\");\n }\n\n return context;\n}\n\n/** Embla-backed carousel root: provides context and arrow-key navigation for its slides. */\nfunction Carousel({\n orientation = \"horizontal\",\n opts,\n setApi,\n plugins,\n className,\n children,\n ...props\n}: React.ComponentProps<\"div\"> & CarouselProps) {\n const [carouselRef, api] = useEmblaCarousel(\n {\n ...opts,\n axis: orientation === \"horizontal\" ? \"x\" : \"y\",\n },\n plugins,\n );\n const [canScrollPrev, setCanScrollPrev] = React.useState(false);\n const [canScrollNext, setCanScrollNext] = React.useState(false);\n\n const onSelect = React.useCallback((api: CarouselApi) => {\n if (!api) return;\n setCanScrollPrev(api.canScrollPrev());\n setCanScrollNext(api.canScrollNext());\n }, []);\n\n const scrollPrev = React.useCallback(() => {\n api?.scrollPrev();\n }, [api]);\n\n const scrollNext = React.useCallback(() => {\n api?.scrollNext();\n }, [api]);\n\n const handleKeyDown = React.useCallback(\n (event: React.KeyboardEvent<HTMLDivElement>) => {\n if (event.key === \"ArrowLeft\") {\n event.preventDefault();\n scrollPrev();\n } else if (event.key === \"ArrowRight\") {\n event.preventDefault();\n scrollNext();\n }\n },\n [scrollPrev, scrollNext],\n );\n\n React.useEffect(() => {\n if (!api || !setApi) return;\n setApi(api);\n }, [api, setApi]);\n\n React.useEffect(() => {\n if (!api) return;\n onSelect(api);\n api.on(\"reInit\", onSelect);\n api.on(\"select\", onSelect);\n\n return () => {\n api?.off(\"select\", onSelect);\n };\n }, [api, onSelect]);\n\n return (\n <CarouselContext.Provider\n value={{\n carouselRef,\n api: api,\n opts,\n orientation: orientation || (opts?.axis === \"y\" ? \"vertical\" : \"horizontal\"),\n scrollPrev,\n scrollNext,\n canScrollPrev,\n canScrollNext,\n }}\n >\n <div\n onKeyDownCapture={handleKeyDown}\n className={cn(\"relative\", className)}\n role=\"region\"\n aria-roledescription=\"carousel\"\n data-slot=\"carousel\"\n {...props}\n >\n {children}\n </div>\n </CarouselContext.Provider>\n );\n}\n\n/** Scroll viewport that lays out the slides along the carousel's axis. */\nfunction CarouselContent({ className, ...props }: React.ComponentProps<\"div\">) {\n const { carouselRef, orientation } = useCarousel();\n\n return (\n <div ref={carouselRef} className=\"overflow-hidden\" data-slot=\"carousel-content\">\n <div\n className={cn(\"flex\", orientation === \"horizontal\" ? \"-ml-4\" : \"-mt-4 flex-col\", className)}\n {...props}\n />\n </div>\n );\n}\n\n/** A single slide within `CarouselContent`. */\nfunction CarouselItem({ className, ...props }: React.ComponentProps<\"div\">) {\n const { orientation } = useCarousel();\n\n return (\n <div\n role=\"group\"\n aria-roledescription=\"slide\"\n data-slot=\"carousel-item\"\n className={cn(\n \"min-w-0 shrink-0 grow-0 basis-full\",\n orientation === \"horizontal\" ? \"pl-4\" : \"pt-4\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Button that scrolls to the previous slide; auto-disables at the start. */\nfunction CarouselPrevious({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollPrev, canScrollPrev } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-previous\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-9 rounded-8 border-primary-border\",\n orientation === \"horizontal\"\n ? \"top-1/2 -left-13 -translate-y-1/2\"\n : \"-top-13 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollPrev}\n onClick={scrollPrev}\n {...props}\n >\n <ArrowLeft />\n <span className=\"sr-only\">Previous slide</span>\n </Button>\n );\n}\n\n/** Button that scrolls to the next slide; auto-disables at the end. */\nfunction CarouselNext({\n className,\n variant = \"outline\",\n size = \"icon\",\n ...props\n}: React.ComponentProps<typeof Button>) {\n const { orientation, scrollNext, canScrollNext } = useCarousel();\n\n return (\n <Button\n data-slot=\"carousel-next\"\n variant={variant}\n size={size}\n className={cn(\n \"absolute size-9 rounded-8 border-primary-border\",\n orientation === \"horizontal\"\n ? \"top-1/2 -right-13 -translate-y-1/2\"\n : \"-bottom-13 left-1/2 -translate-x-1/2 rotate-90\",\n className,\n )}\n disabled={!canScrollNext}\n onClick={scrollNext}\n {...props}\n >\n <ArrowRight />\n <span className=\"sr-only\">Next slide</span>\n </Button>\n );\n}\n\nexport {\n type CarouselApi,\n Carousel,\n CarouselContent,\n CarouselItem,\n CarouselPrevious,\n CarouselNext,\n};\n"],"mappings":"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"}
@@ -30,7 +30,7 @@ function ChartContainer({ id, className, children, config, initialDimension = IN
30
30
  children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
31
31
  "data-slot": "chart",
32
32
  "data-chart": chartId,
33
- className: require_cn.cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-foreground [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-border [&_.recharts-radial-bar-background-sector]:fill-muted [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted [&_.recharts-reference-line_[stroke='#ccc']]:stroke-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
33
+ className: require_cn.cn("flex aspect-video justify-center text-xs [&_.recharts-cartesian-axis-tick_text]:fill-muted-txt [&_.recharts-cartesian-grid_line[stroke='#ccc']]:stroke-primary-border/50 [&_.recharts-curve.recharts-tooltip-cursor]:stroke-primary-border [&_.recharts-dot[stroke='#fff']]:stroke-transparent [&_.recharts-layer]:outline-hidden [&_.recharts-polar-grid_[stroke='#ccc']]:stroke-primary-border [&_.recharts-radial-bar-background-sector]:fill-muted-bg [&_.recharts-rectangle.recharts-tooltip-cursor]:fill-muted-bg [&_.recharts-reference-line_[stroke='#ccc']]:stroke-primary-border [&_.recharts-sector]:outline-hidden [&_.recharts-sector[stroke='#fff']]:stroke-transparent [&_.recharts-surface]:outline-hidden", className),
34
34
  ...props,
35
35
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(ChartStyle, {
36
36
  id: chartId,
@@ -66,12 +66,12 @@ function ChartTooltipContent({ active, payload, className, indicator = "dot", hi
66
66
  const itemConfig = getPayloadConfigFromPayload(config, item, `${labelKey ?? item?.dataKey ?? item?.name ?? "value"}`);
67
67
  const value = !labelKey && typeof label === "string" ? config[label]?.label ?? label : itemConfig?.label;
68
68
  if (labelFormatter) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
69
- className: require_cn.cn("font-medium", labelClassName),
69
+ className: require_cn.cn("font-semibold", labelClassName),
70
70
  children: labelFormatter(value, payload)
71
71
  });
72
72
  if (!value) return null;
73
73
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
74
- className: require_cn.cn("font-medium", labelClassName),
74
+ className: require_cn.cn("font-semibold", labelClassName),
75
75
  children: value
76
76
  });
77
77
  }, [
@@ -86,19 +86,19 @@ function ChartTooltipContent({ active, payload, className, indicator = "dot", hi
86
86
  if (!active || !payload?.length) return null;
87
87
  const nestLabel = payload.length === 1 && indicator !== "dot";
88
88
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
89
- className: require_cn.cn("grid min-w-[8rem] items-start gap-1.5 rounded-lg border border-border bg-popover px-2.5 py-1.5 text-xs shadow-xl", className),
89
+ className: require_cn.cn("grid min-w-32 items-start rounded-8 border border-primary-border bg-glass-none-bg px-3 py-2 text-xs leading-4", className),
90
90
  children: [!nestLabel ? tooltipLabel : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
91
91
  className: "grid gap-1.5",
92
92
  children: payload.filter((item) => item.type !== "none").map((item, index) => {
93
93
  const itemConfig = getPayloadConfigFromPayload(config, item, `${nameKey ?? item.name ?? item.dataKey ?? "value"}`);
94
94
  const indicatorColor = color ?? item.payload?.fill ?? item.color;
95
95
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
96
- className: require_cn.cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-foreground", indicator === "dot" && "items-center"),
96
+ className: require_cn.cn("flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-muted-txt", indicator === "dot" && "items-center"),
97
97
  children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [itemConfig?.icon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
98
- className: require_cn.cn("shrink-0 rounded-[2px] border-(--color-border) bg-(--color-bg)", {
98
+ className: require_cn.cn("shrink-0 rounded-2 border-(--color-border) bg-(--color-bg)", {
99
99
  "h-2.5 w-2.5": indicator === "dot",
100
- "w-1": indicator === "line",
101
- "w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
100
+ "w-0.75": indicator === "line",
101
+ "w-0 border-2 border-dashed bg-transparent": indicator === "dashed",
102
102
  "my-0.5": nestLabel && indicator === "dashed"
103
103
  }),
104
104
  style: {
@@ -110,11 +110,11 @@ function ChartTooltipContent({ active, payload, className, indicator = "dot", hi
110
110
  children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
111
111
  className: "grid gap-1.5",
112
112
  children: [nestLabel ? tooltipLabel : null, /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
113
- className: "text-muted-foreground",
113
+ className: "text-primary-txt",
114
114
  children: itemConfig?.label ?? item.name
115
115
  })]
116
116
  }), item.value != null && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
117
- className: "font-mono font-medium text-foreground tabular-nums",
117
+ className: "font-semibold text-primary-txt tabular-nums",
118
118
  children: typeof item.value === "number" ? item.value.toLocaleString() : String(item.value)
119
119
  })]
120
120
  })] })
@@ -134,9 +134,9 @@ function ChartLegendContent({ className, hideIcon = false, payload, verticalAlig
134
134
  children: payload.filter((item) => item.type !== "none").map((item, index) => {
135
135
  const itemConfig = getPayloadConfigFromPayload(config, item, `${nameKey ?? item.dataKey ?? "value"}`);
136
136
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
137
- className: require_cn.cn("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-foreground"),
137
+ className: require_cn.cn("flex items-center gap-1.5 [&>svg]:h-3 [&>svg]:w-3 [&>svg]:text-muted-txt"),
138
138
  children: [itemConfig?.icon && !hideIcon ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(itemConfig.icon, {}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
139
- className: "h-2 w-2 shrink-0 rounded-[2px]",
139
+ className: "h-2 w-2 shrink-0 rounded-2",
140
140
  style: { backgroundColor: item.color }
141
141
  }), itemConfig?.label]
142
142
  }, index);