@psnext/design-system 1.2.0 → 1.2.1

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 (416) hide show
  1. package/dist/Header.cjs +2 -2
  2. package/dist/Header.cjs.map +1 -1
  3. package/dist/Header.js +2 -2
  4. package/dist/Header.js.map +1 -1
  5. package/dist/Icon.cjs +8 -8
  6. package/dist/Icon.cjs.map +1 -1
  7. package/dist/Icon.js +8 -8
  8. package/dist/Icon.js.map +1 -1
  9. package/dist/Logo.cjs +163 -137
  10. package/dist/Logo.cjs.map +1 -1
  11. package/dist/Logo.js +163 -137
  12. package/dist/Logo.js.map +1 -1
  13. package/dist/index.cjs +1 -1
  14. package/dist/index.d.cts +5 -5
  15. package/dist/index.d.ts +5 -5
  16. package/dist/index.js +1 -1
  17. package/dist/index10.d.cts +7 -7
  18. package/dist/index10.d.cts.map +1 -1
  19. package/dist/index10.d.ts +6 -6
  20. package/dist/index10.d.ts.map +1 -1
  21. package/dist/index11.d.cts +3 -3
  22. package/dist/index11.d.ts +3 -3
  23. package/dist/index11.d.ts.map +1 -1
  24. package/dist/index12.d.cts +12 -12
  25. package/dist/index12.d.ts +11 -11
  26. package/dist/index12.d.ts.map +1 -1
  27. package/dist/index13.d.cts +6 -6
  28. package/dist/index13.d.ts +6 -6
  29. package/dist/index13.d.ts.map +1 -1
  30. package/dist/index14.d.cts +5 -5
  31. package/dist/index14.d.ts +5 -5
  32. package/dist/index15.d.cts +3 -3
  33. package/dist/index15.d.cts.map +1 -1
  34. package/dist/index15.d.ts +3 -3
  35. package/dist/index15.d.ts.map +1 -1
  36. package/dist/index16.d.cts +2 -2
  37. package/dist/index16.d.cts.map +1 -1
  38. package/dist/index16.d.ts +2 -2
  39. package/dist/index16.d.ts.map +1 -1
  40. package/dist/index17.d.cts +4 -4
  41. package/dist/index17.d.cts.map +1 -1
  42. package/dist/index17.d.ts +4 -4
  43. package/dist/index17.d.ts.map +1 -1
  44. package/dist/index18.d.cts +11 -11
  45. package/dist/index18.d.cts.map +1 -1
  46. package/dist/index18.d.ts +11 -11
  47. package/dist/index18.d.ts.map +1 -1
  48. package/dist/index19.d.cts +10 -10
  49. package/dist/index19.d.ts +10 -10
  50. package/dist/index2.d.cts +8 -8
  51. package/dist/index2.d.cts.map +1 -1
  52. package/dist/index2.d.ts +8 -8
  53. package/dist/index20.d.cts +16 -16
  54. package/dist/index20.d.ts +16 -16
  55. package/dist/index20.d.ts.map +1 -1
  56. package/dist/index21.d.cts +4 -4
  57. package/dist/index21.d.ts +4 -4
  58. package/dist/index21.d.ts.map +1 -1
  59. package/dist/index22.d.cts +11 -11
  60. package/dist/index22.d.cts.map +1 -1
  61. package/dist/index22.d.ts +11 -11
  62. package/dist/index23.d.cts +16 -16
  63. package/dist/index23.d.ts +16 -16
  64. package/dist/index24.d.cts +10 -10
  65. package/dist/index24.d.ts +10 -10
  66. package/dist/index25.d.cts +2 -2
  67. package/dist/index25.d.cts.map +1 -1
  68. package/dist/index25.d.ts +2 -2
  69. package/dist/index26.d.cts +14 -14
  70. package/dist/index26.d.cts.map +1 -1
  71. package/dist/index26.d.ts +11 -11
  72. package/dist/index27.d.cts +7 -7
  73. package/dist/index27.d.cts.map +1 -1
  74. package/dist/index27.d.ts +7 -7
  75. package/dist/index28.d.cts +4 -4
  76. package/dist/index28.d.ts +6 -6
  77. package/dist/index28.d.ts.map +1 -1
  78. package/dist/index29.d.cts +4 -4
  79. package/dist/index29.d.cts.map +1 -1
  80. package/dist/index29.d.ts +4 -4
  81. package/dist/index3.d.cts +13 -13
  82. package/dist/index3.d.cts.map +1 -1
  83. package/dist/index3.d.ts +13 -13
  84. package/dist/index3.d.ts.map +1 -1
  85. package/dist/index30.d.cts +6 -6
  86. package/dist/index30.d.cts.map +1 -1
  87. package/dist/index30.d.ts +5 -5
  88. package/dist/index30.d.ts.map +1 -1
  89. package/dist/index31.d.cts +5 -5
  90. package/dist/index31.d.ts +5 -5
  91. package/dist/index31.d.ts.map +1 -1
  92. package/dist/index32.d.cts +6 -6
  93. package/dist/index32.d.ts +3 -3
  94. package/dist/index33.d.cts +10 -10
  95. package/dist/index33.d.cts.map +1 -1
  96. package/dist/index33.d.ts +10 -10
  97. package/dist/index33.d.ts.map +1 -1
  98. package/dist/index34.d.cts +5 -5
  99. package/dist/index34.d.cts.map +1 -1
  100. package/dist/index34.d.ts +5 -5
  101. package/dist/index35.d.cts +16 -16
  102. package/dist/index35.d.cts.map +1 -1
  103. package/dist/index35.d.ts +14 -14
  104. package/dist/index35.d.ts.map +1 -1
  105. package/dist/index36.d.cts +3 -3
  106. package/dist/index36.d.ts +3 -3
  107. package/dist/index37.d.cts +4 -4
  108. package/dist/index37.d.cts.map +1 -1
  109. package/dist/index37.d.ts +5 -5
  110. package/dist/index37.d.ts.map +1 -1
  111. package/dist/index38.d.cts +2 -2
  112. package/dist/index38.d.ts +2 -2
  113. package/dist/index39.d.cts +17 -17
  114. package/dist/index39.d.ts +17 -17
  115. package/dist/index4.d.cts +2 -2
  116. package/dist/index4.d.cts.map +1 -1
  117. package/dist/index4.d.ts +2 -2
  118. package/dist/index40.d.cts +5 -5
  119. package/dist/index40.d.cts.map +1 -1
  120. package/dist/index40.d.ts +4 -4
  121. package/dist/index41.d.cts +11 -11
  122. package/dist/index41.d.ts +11 -11
  123. package/dist/index42.d.cts +8 -8
  124. package/dist/index42.d.ts +8 -8
  125. package/dist/index42.d.ts.map +1 -1
  126. package/dist/index43.d.cts +9 -9
  127. package/dist/index43.d.cts.map +1 -1
  128. package/dist/index43.d.ts +9 -9
  129. package/dist/index44.d.cts +8 -8
  130. package/dist/index44.d.cts.map +1 -1
  131. package/dist/index44.d.ts +8 -8
  132. package/dist/index44.d.ts.map +1 -1
  133. package/dist/index45.d.cts +2 -2
  134. package/dist/index45.d.cts.map +1 -1
  135. package/dist/index45.d.ts +2 -2
  136. package/dist/index45.d.ts.map +1 -1
  137. package/dist/index46.d.cts +4 -4
  138. package/dist/index46.d.ts +4 -4
  139. package/dist/index46.d.ts.map +1 -1
  140. package/dist/index47.d.cts +4 -4
  141. package/dist/index47.d.cts.map +1 -1
  142. package/dist/index47.d.ts +4 -4
  143. package/dist/index47.d.ts.map +1 -1
  144. package/dist/index48.d.cts +3 -3
  145. package/dist/index48.d.ts +3 -3
  146. package/dist/index49.d.cts +11 -11
  147. package/dist/index49.d.cts.map +1 -1
  148. package/dist/index49.d.ts +11 -11
  149. package/dist/index5.d.cts +7 -7
  150. package/dist/index5.d.cts.map +1 -1
  151. package/dist/index5.d.ts +7 -7
  152. package/dist/index5.d.ts.map +1 -1
  153. package/dist/index50.d.cts +9 -9
  154. package/dist/index50.d.ts +9 -9
  155. package/dist/index50.d.ts.map +1 -1
  156. package/dist/index51.d.cts +5 -5
  157. package/dist/index51.d.ts +5 -5
  158. package/dist/index52.d.cts +27 -27
  159. package/dist/index52.d.cts.map +1 -1
  160. package/dist/index52.d.ts +26 -26
  161. package/dist/index53.d.cts +5 -5
  162. package/dist/index53.d.ts +5 -5
  163. package/dist/index53.d.ts.map +1 -1
  164. package/dist/index54.d.cts +2 -2
  165. package/dist/index54.d.ts +2 -2
  166. package/dist/index55.d.cts +2 -2
  167. package/dist/index55.d.ts +2 -2
  168. package/dist/index55.d.ts.map +1 -1
  169. package/dist/index56.d.cts +2 -2
  170. package/dist/index56.d.ts +2 -2
  171. package/dist/index57.d.cts +4 -4
  172. package/dist/index57.d.ts +4 -4
  173. package/dist/index58.d.cts +9 -9
  174. package/dist/index58.d.ts +9 -9
  175. package/dist/index59.d.cts +11 -11
  176. package/dist/index59.d.cts.map +1 -1
  177. package/dist/index59.d.ts +9 -9
  178. package/dist/index6.d.cts +5 -5
  179. package/dist/index6.d.cts.map +1 -1
  180. package/dist/index6.d.ts +5 -5
  181. package/dist/index6.d.ts.map +1 -1
  182. package/dist/index60.d.cts +5 -5
  183. package/dist/index60.d.cts.map +1 -1
  184. package/dist/index60.d.ts +6 -6
  185. package/dist/index60.d.ts.map +1 -1
  186. package/dist/index61.d.cts +4 -4
  187. package/dist/index61.d.cts.map +1 -1
  188. package/dist/index61.d.ts +4 -4
  189. package/dist/index62.d.cts +2 -2
  190. package/dist/index62.d.ts +2 -2
  191. package/dist/index63.d.cts +6 -6
  192. package/dist/index63.d.ts +5 -5
  193. package/dist/index63.d.ts.map +1 -1
  194. package/dist/index64.d.cts +3 -3
  195. package/dist/index64.d.ts +3 -3
  196. package/dist/index65.d.cts +4 -4
  197. package/dist/index65.d.cts.map +1 -1
  198. package/dist/index65.d.ts +4 -4
  199. package/dist/index65.d.ts.map +1 -1
  200. package/dist/index66.d.cts +2 -2
  201. package/dist/index66.d.ts +2 -2
  202. package/dist/index67.d.cts +8 -8
  203. package/dist/index67.d.cts.map +1 -1
  204. package/dist/index67.d.ts +6 -6
  205. package/dist/index67.d.ts.map +1 -1
  206. package/dist/index68.d.cts +7 -7
  207. package/dist/index68.d.ts +6 -6
  208. package/dist/index68.d.ts.map +1 -1
  209. package/dist/index7.d.cts +8 -8
  210. package/dist/index7.d.ts +8 -8
  211. package/dist/index7.d.ts.map +1 -1
  212. package/dist/index70.d.cts +8 -8
  213. package/dist/index70.d.ts +8 -8
  214. package/dist/index8.d.cts +4 -4
  215. package/dist/index8.d.ts +2 -2
  216. package/dist/index9.d.cts +2 -2
  217. package/dist/index9.d.ts +2 -2
  218. package/dist/layouts/Container/index.cjs +1 -1
  219. package/dist/layouts/Container/index.cjs.map +1 -1
  220. package/dist/layouts/Container/index.js +1 -1
  221. package/dist/layouts/Container/index.js.map +1 -1
  222. package/dist/layouts/PageBackground/index.cjs +1 -1
  223. package/dist/layouts/PageBackground/index.cjs.map +1 -1
  224. package/dist/layouts/PageBackground/index.js +1 -1
  225. package/dist/layouts/PageBackground/index.js.map +1 -1
  226. package/dist/patterns/DataTable/index.d.cts +3 -3
  227. package/dist/patterns/DataTable/index.d.ts +3 -3
  228. package/dist/patterns/Footer/index.cjs +1 -1
  229. package/dist/patterns/Footer/index.cjs.map +1 -1
  230. package/dist/patterns/Footer/index.d.cts +8 -8
  231. package/dist/patterns/Footer/index.d.cts.map +1 -1
  232. package/dist/patterns/Footer/index.d.ts +8 -8
  233. package/dist/patterns/Footer/index.d.ts.map +1 -1
  234. package/dist/patterns/Footer/index.js +1 -1
  235. package/dist/patterns/Footer/index.js.map +1 -1
  236. package/dist/patterns/MediaObject/index.d.cts +11 -11
  237. package/dist/patterns/MediaObject/index.d.ts +11 -11
  238. package/dist/patterns/SectionCard/index.d.cts +2 -2
  239. package/dist/patterns/SectionCard/index.d.ts +2 -2
  240. package/dist/patterns/SectionHeading/index.d.cts +2 -2
  241. package/dist/patterns/SectionHeading/index.d.ts +2 -2
  242. package/dist/primitives/Accordion/index.cjs +1 -1
  243. package/dist/primitives/Accordion/index.cjs.map +1 -1
  244. package/dist/primitives/Accordion/index.js +1 -1
  245. package/dist/primitives/Accordion/index.js.map +1 -1
  246. package/dist/primitives/Alert/index.cjs +2 -2
  247. package/dist/primitives/Alert/index.cjs.map +1 -1
  248. package/dist/primitives/Alert/index.js +2 -2
  249. package/dist/primitives/Alert/index.js.map +1 -1
  250. package/dist/primitives/AlertDialog/index.cjs +2 -2
  251. package/dist/primitives/AlertDialog/index.cjs.map +1 -1
  252. package/dist/primitives/AlertDialog/index.js +2 -2
  253. package/dist/primitives/AlertDialog/index.js.map +1 -1
  254. package/dist/primitives/Avatar/index.cjs +2 -2
  255. package/dist/primitives/Avatar/index.cjs.map +1 -1
  256. package/dist/primitives/Avatar/index.js +2 -2
  257. package/dist/primitives/Avatar/index.js.map +1 -1
  258. package/dist/primitives/Badge/index.cjs +4 -4
  259. package/dist/primitives/Badge/index.cjs.map +1 -1
  260. package/dist/primitives/Badge/index.js +4 -4
  261. package/dist/primitives/Badge/index.js.map +1 -1
  262. package/dist/primitives/Button/index.cjs +5 -5
  263. package/dist/primitives/Button/index.cjs.map +1 -1
  264. package/dist/primitives/Button/index.js +5 -5
  265. package/dist/primitives/Button/index.js.map +1 -1
  266. package/dist/primitives/ButtonGroup/index.cjs +2 -2
  267. package/dist/primitives/ButtonGroup/index.cjs.map +1 -1
  268. package/dist/primitives/ButtonGroup/index.js +2 -2
  269. package/dist/primitives/ButtonGroup/index.js.map +1 -1
  270. package/dist/primitives/Calendar/index.cjs +1 -1
  271. package/dist/primitives/Calendar/index.cjs.map +1 -1
  272. package/dist/primitives/Calendar/index.js +1 -1
  273. package/dist/primitives/Calendar/index.js.map +1 -1
  274. package/dist/primitives/Card/index.cjs +4 -4
  275. package/dist/primitives/Card/index.cjs.map +1 -1
  276. package/dist/primitives/Card/index.js +4 -4
  277. package/dist/primitives/Card/index.js.map +1 -1
  278. package/dist/primitives/Chart/index.cjs +1 -1
  279. package/dist/primitives/Chart/index.cjs.map +1 -1
  280. package/dist/primitives/Chart/index.js +1 -1
  281. package/dist/primitives/Chart/index.js.map +1 -1
  282. package/dist/primitives/Checkbox/index.cjs +1 -1
  283. package/dist/primitives/Checkbox/index.cjs.map +1 -1
  284. package/dist/primitives/Checkbox/index.js +1 -1
  285. package/dist/primitives/Checkbox/index.js.map +1 -1
  286. package/dist/primitives/Command/index.cjs +1 -1
  287. package/dist/primitives/Command/index.cjs.map +1 -1
  288. package/dist/primitives/Command/index.js +1 -1
  289. package/dist/primitives/Command/index.js.map +1 -1
  290. package/dist/primitives/ContextMenu/index.cjs +1 -1
  291. package/dist/primitives/ContextMenu/index.cjs.map +1 -1
  292. package/dist/primitives/ContextMenu/index.js +1 -1
  293. package/dist/primitives/ContextMenu/index.js.map +1 -1
  294. package/dist/primitives/Credits/index.cjs +1 -1
  295. package/dist/primitives/Credits/index.cjs.map +1 -1
  296. package/dist/primitives/Credits/index.js +1 -1
  297. package/dist/primitives/Credits/index.js.map +1 -1
  298. package/dist/primitives/Dialog/index.cjs +2 -2
  299. package/dist/primitives/Dialog/index.cjs.map +1 -1
  300. package/dist/primitives/Dialog/index.js +2 -2
  301. package/dist/primitives/Dialog/index.js.map +1 -1
  302. package/dist/primitives/Drawer/index.cjs +1 -1
  303. package/dist/primitives/Drawer/index.cjs.map +1 -1
  304. package/dist/primitives/Drawer/index.js +1 -1
  305. package/dist/primitives/Drawer/index.js.map +1 -1
  306. package/dist/primitives/DropdownMenu/index.cjs +1 -1
  307. package/dist/primitives/DropdownMenu/index.cjs.map +1 -1
  308. package/dist/primitives/DropdownMenu/index.js +1 -1
  309. package/dist/primitives/DropdownMenu/index.js.map +1 -1
  310. package/dist/primitives/Field/index.cjs +1 -1
  311. package/dist/primitives/Field/index.cjs.map +1 -1
  312. package/dist/primitives/Field/index.js +1 -1
  313. package/dist/primitives/Field/index.js.map +1 -1
  314. package/dist/primitives/HoverCard/index.cjs +1 -1
  315. package/dist/primitives/HoverCard/index.cjs.map +1 -1
  316. package/dist/primitives/HoverCard/index.js +1 -1
  317. package/dist/primitives/HoverCard/index.js.map +1 -1
  318. package/dist/primitives/Input/index.cjs +4 -4
  319. package/dist/primitives/Input/index.cjs.map +1 -1
  320. package/dist/primitives/Input/index.js +4 -4
  321. package/dist/primitives/Input/index.js.map +1 -1
  322. package/dist/primitives/InputGroup/index.cjs +6 -6
  323. package/dist/primitives/InputGroup/index.cjs.map +1 -1
  324. package/dist/primitives/InputGroup/index.js +6 -6
  325. package/dist/primitives/InputGroup/index.js.map +1 -1
  326. package/dist/primitives/InputOtp/index.cjs +1 -1
  327. package/dist/primitives/InputOtp/index.cjs.map +1 -1
  328. package/dist/primitives/InputOtp/index.js +1 -1
  329. package/dist/primitives/InputOtp/index.js.map +1 -1
  330. package/dist/primitives/Item/index.cjs +2 -2
  331. package/dist/primitives/Item/index.cjs.map +1 -1
  332. package/dist/primitives/Item/index.js +2 -2
  333. package/dist/primitives/Item/index.js.map +1 -1
  334. package/dist/primitives/Kbd/index.cjs +1 -1
  335. package/dist/primitives/Kbd/index.cjs.map +1 -1
  336. package/dist/primitives/Kbd/index.js +1 -1
  337. package/dist/primitives/Kbd/index.js.map +1 -1
  338. package/dist/primitives/Menubar/index.cjs +1 -1
  339. package/dist/primitives/Menubar/index.cjs.map +1 -1
  340. package/dist/primitives/Menubar/index.js +1 -1
  341. package/dist/primitives/Menubar/index.js.map +1 -1
  342. package/dist/primitives/NativeSelect/index.cjs +1 -1
  343. package/dist/primitives/NativeSelect/index.cjs.map +1 -1
  344. package/dist/primitives/NativeSelect/index.js +1 -1
  345. package/dist/primitives/NativeSelect/index.js.map +1 -1
  346. package/dist/primitives/NavRail/index.cjs +2 -2
  347. package/dist/primitives/NavRail/index.cjs.map +1 -1
  348. package/dist/primitives/NavRail/index.js +2 -2
  349. package/dist/primitives/NavRail/index.js.map +1 -1
  350. package/dist/primitives/NavigationMenu/index.cjs +1 -1
  351. package/dist/primitives/NavigationMenu/index.cjs.map +1 -1
  352. package/dist/primitives/NavigationMenu/index.js +1 -1
  353. package/dist/primitives/NavigationMenu/index.js.map +1 -1
  354. package/dist/primitives/Popover/index.cjs +1 -1
  355. package/dist/primitives/Popover/index.cjs.map +1 -1
  356. package/dist/primitives/Popover/index.js +1 -1
  357. package/dist/primitives/Popover/index.js.map +1 -1
  358. package/dist/primitives/Progress/index.cjs +1 -1
  359. package/dist/primitives/Progress/index.cjs.map +1 -1
  360. package/dist/primitives/Progress/index.js +1 -1
  361. package/dist/primitives/Progress/index.js.map +1 -1
  362. package/dist/primitives/RadioGroup/index.cjs +1 -1
  363. package/dist/primitives/RadioGroup/index.cjs.map +1 -1
  364. package/dist/primitives/RadioGroup/index.js +1 -1
  365. package/dist/primitives/RadioGroup/index.js.map +1 -1
  366. package/dist/primitives/ScrollArea/index.cjs +1 -1
  367. package/dist/primitives/ScrollArea/index.cjs.map +1 -1
  368. package/dist/primitives/ScrollArea/index.js +1 -1
  369. package/dist/primitives/ScrollArea/index.js.map +1 -1
  370. package/dist/primitives/Select/index.cjs +1 -1
  371. package/dist/primitives/Select/index.cjs.map +1 -1
  372. package/dist/primitives/Select/index.js +1 -1
  373. package/dist/primitives/Select/index.js.map +1 -1
  374. package/dist/primitives/Skeleton/index.cjs +2 -2
  375. package/dist/primitives/Skeleton/index.cjs.map +1 -1
  376. package/dist/primitives/Skeleton/index.js +2 -2
  377. package/dist/primitives/Skeleton/index.js.map +1 -1
  378. package/dist/primitives/Slider/index.cjs +1 -1
  379. package/dist/primitives/Slider/index.cjs.map +1 -1
  380. package/dist/primitives/Slider/index.js +1 -1
  381. package/dist/primitives/Slider/index.js.map +1 -1
  382. package/dist/primitives/Sonner/index.cjs +1 -1
  383. package/dist/primitives/Sonner/index.cjs.map +1 -1
  384. package/dist/primitives/Sonner/index.js +1 -1
  385. package/dist/primitives/Sonner/index.js.map +1 -1
  386. package/dist/primitives/Switch/index.cjs +3 -3
  387. package/dist/primitives/Switch/index.cjs.map +1 -1
  388. package/dist/primitives/Switch/index.js +3 -3
  389. package/dist/primitives/Switch/index.js.map +1 -1
  390. package/dist/primitives/Table/index.cjs +3 -3
  391. package/dist/primitives/Table/index.cjs.map +1 -1
  392. package/dist/primitives/Table/index.js +3 -3
  393. package/dist/primitives/Table/index.js.map +1 -1
  394. package/dist/primitives/Tabs/index.cjs +4 -4
  395. package/dist/primitives/Tabs/index.cjs.map +1 -1
  396. package/dist/primitives/Tabs/index.js +4 -4
  397. package/dist/primitives/Tabs/index.js.map +1 -1
  398. package/dist/primitives/Textarea/index.cjs +2 -2
  399. package/dist/primitives/Textarea/index.cjs.map +1 -1
  400. package/dist/primitives/Textarea/index.js +2 -2
  401. package/dist/primitives/Textarea/index.js.map +1 -1
  402. package/dist/primitives/Toggle/index.cjs +2 -2
  403. package/dist/primitives/Toggle/index.cjs.map +1 -1
  404. package/dist/primitives/Toggle/index.js +2 -2
  405. package/dist/primitives/Toggle/index.js.map +1 -1
  406. package/dist/primitives/Tooltip/index.cjs +2 -2
  407. package/dist/primitives/Tooltip/index.cjs.map +1 -1
  408. package/dist/primitives/Tooltip/index.js +2 -2
  409. package/dist/primitives/Tooltip/index.js.map +1 -1
  410. package/dist/primitives/index.cjs +1 -1
  411. package/dist/primitives/index.js +1 -1
  412. package/dist/styles/semantic.css +23 -12
  413. package/dist/styles/theme.css +32 -1
  414. package/dist/styles/tokens/border-radius.css +2 -1
  415. package/dist/styles/tokens/mode-dark.css +1 -1
  416. package/package.json +7 -2
@@ -151,9 +151,9 @@ const tabsTriggerVariants = (0, class_variance_authority.cva)("relative inline-f
151
151
  variants: {
152
152
  variant: {
153
153
  line: "h-[calc(100%-1px)] flex-1 rounded-none",
154
- pill: "h-[calc(100%-1px)] flex-1 rounded-md border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30",
154
+ pill: "h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm",
155
155
  segmented: "z-[1] h-[calc(100%-1px)] flex-1 rounded-lg",
156
- fancy: "mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-[var(--glass-blur)] hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]"
156
+ fancy: "mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]"
157
157
  },
158
158
  orientation: {
159
159
  horizontal: "",
@@ -243,7 +243,7 @@ function TabsContent({ className, ...props }) {
243
243
  const { variant } = react.useContext(TabsContext);
244
244
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Tabs.Content, {
245
245
  "data-slot": "tabs-content",
246
- className: require_cn.cn("flex-1 outline-none", variant === "fancy" && "flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-[var(--glass-blur)]", className),
246
+ className: require_cn.cn("flex-1 outline-none", variant === "fancy" && "flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-glass", className),
247
247
  ...props
248
248
  });
249
249
  }
@@ -251,7 +251,7 @@ function TabsContent({ className, ...props }) {
251
251
  function TabsCounter({ className, ...props }) {
252
252
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
253
253
  "data-slot": "tabs-counter",
254
- className: require_cn.cn("ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground", "group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-foreground group-data-[variant=fancy]/tabs:text-background", className),
254
+ className: require_cn.cn("ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground", "group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground", className),
255
255
  ...props
256
256
  });
257
257
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["React","TabsPrimitive","cn"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-foreground\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-lg bg-muted p-[3px]\",\n segmented: \"justify-center rounded-xl bg-muted p-1\",\n fancy: \"w-full items-stretch gap-2 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-8\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-9\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-lg bg-background shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-md border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-lg\",\n fancy:\n \"mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-[var(--glass-blur)] hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]\",\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"sm\", class: \"px-1.5 py-1 text-xs\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"lg\", class: \"px-3 py-1 text-base\" },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-4 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-4 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-[var(--glass-blur)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-foreground group-data-[variant=fancy]/tabs:text-background\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","names":["React","TabsPrimitive","cn"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-foreground\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-lg bg-muted p-[3px]\",\n segmented: \"justify-center rounded-xl bg-muted p-1\",\n fancy: \"w-full items-stretch gap-2 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-8\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-9\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-lg bg-background shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-lg\",\n fancy:\n \"mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]\",\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"sm\", class: \"px-1.5 py-1 text-xs\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"lg\", class: \"px-3 py-1 text-base\" },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-4 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-4 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-glass\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
@@ -148,9 +148,9 @@ const tabsTriggerVariants = cva("relative inline-flex items-center justify-cente
148
148
  variants: {
149
149
  variant: {
150
150
  line: "h-[calc(100%-1px)] flex-1 rounded-none",
151
- pill: "h-[calc(100%-1px)] flex-1 rounded-md border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30",
151
+ pill: "h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm",
152
152
  segmented: "z-[1] h-[calc(100%-1px)] flex-1 rounded-lg",
153
- fancy: "mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-[var(--glass-blur)] hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]"
153
+ fancy: "mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]"
154
154
  },
155
155
  orientation: {
156
156
  horizontal: "",
@@ -240,7 +240,7 @@ function TabsContent({ className, ...props }) {
240
240
  const { variant } = React.useContext(TabsContext);
241
241
  return /* @__PURE__ */ jsx(Tabs$1.Content, {
242
242
  "data-slot": "tabs-content",
243
- className: cn("flex-1 outline-none", variant === "fancy" && "flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-[var(--glass-blur)]", className),
243
+ className: cn("flex-1 outline-none", variant === "fancy" && "flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-glass", className),
244
244
  ...props
245
245
  });
246
246
  }
@@ -248,7 +248,7 @@ function TabsContent({ className, ...props }) {
248
248
  function TabsCounter({ className, ...props }) {
249
249
  return /* @__PURE__ */ jsx("span", {
250
250
  "data-slot": "tabs-counter",
251
- className: cn("ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground", "group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-foreground group-data-[variant=fancy]/tabs:text-background", className),
251
+ className: cn("ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground", "group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground", className),
252
252
  ...props
253
253
  });
254
254
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TabsPrimitive"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-foreground\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-lg bg-muted p-[3px]\",\n segmented: \"justify-center rounded-xl bg-muted p-1\",\n fancy: \"w-full items-stretch gap-2 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-8\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-9\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-lg bg-background shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-md border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm dark:data-[state=active]:border-input dark:data-[state=active]:bg-input/30\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-lg\",\n fancy:\n \"mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-[var(--glass-blur)] hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]\",\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"sm\", class: \"px-1.5 py-1 text-xs\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"lg\", class: \"px-3 py-1 text-base\" },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-4 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-4 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-[var(--glass-blur)]\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-foreground group-data-[variant=fancy]/tabs:text-background\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":["TabsPrimitive"],"sources":["../../../src/primitives/Tabs/Tabs.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { Tabs as TabsPrimitive } from \"radix-ui\";\nimport * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n// Tabs — built on Radix Tabs (content panels + roving-focus keyboard nav + a11y).\n// One component, four visual `variant`s, each supporting horizontal/vertical\n// `orientation`:\n// - \"line\": underline under the active tab.\n// - \"pill\" (default): a muted track; the active tab is an elevated pill.\n// - \"segmented\": a muted track with a single sliding indicator that animates\n// between tabs.\n// - \"fancy\": translucent glass card tabs; the active tab merges into the glass\n// content panel below (login-style). `size` controls the fancy vertical padding.\n// `variant`/`size`/`orientation` are set on the root and shared via context.\n\ntype TabsVariant = \"line\" | \"pill\" | \"segmented\" | \"fancy\";\ntype TabsSize = \"sm\" | \"md\" | \"lg\";\ntype TabsOrientation = \"horizontal\" | \"vertical\";\n\nconst TabsContext = React.createContext<{\n variant: TabsVariant;\n size: TabsSize;\n orientation: TabsOrientation;\n}>({ variant: \"pill\", size: \"md\", orientation: \"horizontal\" });\n\n/**\n * Tabbed interface root: holds the active value and shares `variant`/`size`/\n * `orientation` with its `TabsList`/`TabsTrigger`/`TabsContent` via context.\n */\nfunction Tabs({\n className,\n variant = \"pill\",\n size = \"md\",\n orientation = \"horizontal\",\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.Root> & {\n /** Visual style of the tabs: underline, pill track, sliding segmented, or glass cards. */\n variant?: TabsVariant;\n /** Control density — drives padding and text size of the triggers. */\n size?: TabsSize;\n}) {\n const resolvedOrientation: TabsOrientation =\n orientation === \"vertical\" ? \"vertical\" : \"horizontal\";\n const ctx = React.useMemo(\n () => ({ variant, size, orientation: resolvedOrientation }),\n [variant, size, resolvedOrientation],\n );\n return (\n <TabsContext.Provider value={ctx}>\n <TabsPrimitive.Root\n data-slot=\"tabs\"\n data-variant={variant}\n data-orientation={resolvedOrientation}\n orientation={resolvedOrientation}\n className={cn(\n \"group/tabs flex data-[orientation=horizontal]:flex-col\",\n variant === \"fancy\" ? \"gap-0\" : \"gap-2\",\n className,\n )}\n {...props}\n />\n </TabsContext.Provider>\n );\n}\n\nconst tabsListVariants = cva(\"relative inline-flex items-center text-muted-foreground\", {\n variants: {\n variant: {\n line: \"gap-1 bg-transparent\",\n pill: \"justify-center rounded-lg bg-muted p-[3px]\",\n segmented: \"justify-center rounded-xl bg-muted p-1\",\n fancy: \"w-full items-stretch gap-2 bg-transparent\",\n },\n orientation: {\n horizontal: \"\",\n vertical: \"h-fit flex-col\",\n },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Track height for the horizontal pill/segmented variants.\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"sm\", class: \"h-8\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"md\", class: \"h-9\" },\n { variant: [\"pill\", \"segmented\"], orientation: \"horizontal\", size: \"lg\", class: \"h-10\" },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n});\n\n/** Row (or column) of tab triggers; renders the sliding indicator for the `segmented` variant. */\nfunction TabsList({\n className,\n children,\n ...props\n}: React.ComponentProps<typeof TabsPrimitive.List>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n const isSegmented = variant === \"segmented\";\n const listRef = React.useRef<HTMLDivElement>(null);\n const [indicator, setIndicator] = React.useState<{\n left: number;\n top: number;\n width: number;\n height: number;\n } | null>(null);\n\n React.useEffect(() => {\n if (!isSegmented) return;\n const list = listRef.current;\n if (!list) return;\n const update = () => {\n const active = list.querySelector<HTMLElement>(\n '[data-slot=\"tabs-trigger\"][data-state=\"active\"]',\n );\n if (!active) {\n setIndicator(null);\n return;\n }\n setIndicator({\n left: active.offsetLeft,\n top: active.offsetTop,\n width: active.offsetWidth,\n height: active.offsetHeight,\n });\n };\n update();\n const mutation = new MutationObserver(update);\n mutation.observe(list, { attributes: true, attributeFilter: [\"data-state\"], subtree: true });\n const resize = new ResizeObserver(update);\n resize.observe(list);\n return () => {\n mutation.disconnect();\n resize.disconnect();\n };\n }, [isSegmented]);\n\n return (\n <TabsPrimitive.List\n ref={listRef}\n data-slot=\"tabs-list\"\n className={cn(tabsListVariants({ variant, size, orientation }), className)}\n {...props}\n >\n {isSegmented && indicator && (\n <span\n data-slot=\"tabs-indicator\"\n aria-hidden\n className=\"absolute z-0 rounded-lg bg-background shadow-sm transition-all duration-200 ease-out motion-reduce:transition-none\"\n style={\n orientation === \"vertical\"\n ? { top: indicator.top, height: indicator.height, left: 4, right: 4 }\n : { left: indicator.left, width: indicator.width, top: 4, bottom: 4 }\n }\n />\n )}\n {children}\n </TabsPrimitive.List>\n );\n}\n\nconst tabsTriggerVariants = cva(\n \"relative inline-flex items-center justify-center gap-1.5 font-medium whitespace-nowrap text-foreground/70 outline-none transition-all hover:text-foreground focus-visible:ring-[3px] focus-visible:ring-ring/50 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:text-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n {\n variants: {\n variant: {\n line: \"h-[calc(100%-1px)] flex-1 rounded-none\",\n pill: \"h-[calc(100%-1px)] flex-1 rounded-10 border border-transparent data-[state=active]:bg-background data-[state=active]:shadow-sm\",\n segmented: \"z-[1] h-[calc(100%-1px)] flex-1 rounded-lg\",\n fancy:\n \"mb-1.5 flex-1 justify-between rounded-xl bg-[var(--glass-subtle)] backdrop-blur-glass hover:bg-[var(--glass-light)] data-[state=active]:mb-0 data-[state=active]:rounded-b-none data-[state=active]:bg-[var(--glass-light)]\",\n },\n orientation: { horizontal: \"\", vertical: \"w-full justify-start\" },\n size: { sm: \"\", md: \"\", lg: \"\" },\n },\n compoundVariants: [\n // Padding + text size for the track variants.\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"sm\", class: \"px-1.5 py-1 text-xs\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"md\", class: \"px-2 py-1 text-sm\" },\n { variant: [\"line\", \"pill\", \"segmented\"], size: \"lg\", class: \"px-3 py-1 text-base\" },\n // Fancy footprint scales with size; the active tab adds bottom padding so it\n // merges into the panel while inactive tabs stay shorter (gap above content).\n { variant: \"fancy\", size: \"sm\", class: \"px-4 py-2 text-sm\" },\n { variant: \"fancy\", size: \"md\", class: \"px-4 py-3 text-sm\" },\n { variant: \"fancy\", size: \"lg\", class: \"px-4 py-4 text-base\" },\n // Underline position for the line variant (per orientation).\n {\n variant: \"line\",\n orientation: \"horizontal\",\n class:\n \"after:absolute after:inset-x-0 after:bottom-[-5px] after:h-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n {\n variant: \"line\",\n orientation: \"vertical\",\n class:\n \"after:absolute after:inset-y-0 after:right-[-5px] after:w-0.5 after:bg-foreground after:opacity-0 after:transition-opacity data-[state=active]:after:opacity-100\",\n },\n ],\n defaultVariants: { variant: \"pill\", orientation: \"horizontal\", size: \"md\" },\n },\n);\n\n/** Clickable tab button; its `value` selects the matching `TabsContent` panel. */\nfunction TabsTrigger({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Trigger>) {\n const { variant, size, orientation } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Trigger\n data-slot=\"tabs-trigger\"\n className={cn(tabsTriggerVariants({ variant, size, orientation }), className)}\n {...props}\n />\n );\n}\n\n/** Panel shown when its `value` matches the active tab; styled as a glass panel for the `fancy` variant. */\nfunction TabsContent({ className, ...props }: React.ComponentProps<typeof TabsPrimitive.Content>) {\n const { variant } = React.useContext(TabsContext);\n return (\n <TabsPrimitive.Content\n data-slot=\"tabs-content\"\n className={cn(\n \"flex-1 outline-none\",\n // Fancy: a glass panel the active tab merges into (flat top, matching tint).\n variant === \"fancy\" &&\n \"flex-none rounded-xl rounded-t-none bg-[var(--glass-light)] p-5 backdrop-blur-glass\",\n className,\n )}\n {...props}\n />\n );\n}\n\n/** Trailing count badge for a tab trigger; goes dark on the `fancy` variant to match its cards. */\nfunction TabsCounter({ className, ...props }: React.ComponentProps<\"span\">) {\n return (\n <span\n data-slot=\"tabs-counter\"\n className={cn(\n \"ml-1 inline-flex h-4 min-w-4 items-center justify-center rounded-full bg-muted px-1 text-xs font-medium text-muted-foreground\",\n \"group-data-[variant=fancy]/tabs:h-5 group-data-[variant=fancy]/tabs:min-w-5 group-data-[variant=fancy]/tabs:bg-inverse group-data-[variant=fancy]/tabs:text-inverse-foreground\",\n className,\n )}\n {...props}\n />\n );\n}\n\nexport {\n Tabs,\n TabsList,\n TabsTrigger,\n TabsContent,\n TabsCounter,\n tabsListVariants,\n tabsTriggerVariants,\n};\n"],"mappings":"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"}
@@ -2,9 +2,9 @@ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
2
  const require_cn = require("../../cn.cjs");
3
3
  let react_jsx_runtime = require("react/jsx-runtime");
4
4
  //#region src/primitives/Textarea/Textarea.tsx
5
- const textareaVariants = (0, require("class-variance-authority").cva)("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-base transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", {
5
+ const textareaVariants = (0, require("class-variance-authority").cva)("border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-ring-error aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-sm transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", {
6
6
  variants: { shape: {
7
- default: "rounded-md",
7
+ default: "rounded-xl",
8
8
  round: "rounded-2xl"
9
9
  } },
10
10
  defaultVariants: { shape: "default" }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst textareaVariants = cva(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-base transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n {\n variants: {\n shape: {\n default: \"rounded-md\",\n round: \"rounded-2xl\",\n },\n },\n defaultVariants: {\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (rounded-md) or `round` (rounded-2xl). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAKA,MAAM,oBAAA,qCAAA,EAAA,KACJ,ubACA;CACE,UAAU,EACR,OAAO;EACL,SAAS;EACT,OAAO;CACT,EACF;CACA,iBAAiB,EACf,OAAO,UACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WACA,OACA,GAAG,SAKA;CACH,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,iBAAiB,EAAE,MAAM,CAAC,GAAG,SAAS;EACpD,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.cjs","names":["cn"],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst textareaVariants = cva(\n \"border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-ring-error aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-sm transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n shape: {\n default: \"rounded-xl\",\n round: \"rounded-2xl\",\n },\n },\n defaultVariants: {\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (rounded-md) or `round` (rounded-2xl). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAKA,MAAM,oBAAA,qCAAA,EAAA,KACJ,gXACA;CACE,UAAU,EACR,OAAO;EACL,SAAS;EACT,OAAO;CACT,EACF;CACA,iBAAiB,EACf,OAAO,UACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WACA,OACA,GAAG,SAKA;CACH,OACE,iBAAA,GAAA,kBAAA,KAAC,YAAD;EACE,aAAU;EACV,WAAWA,WAAAA,GAAG,iBAAiB,EAAE,MAAM,CAAC,GAAG,SAAS;EACpD,GAAI;CACL,CAAA;AAEL"}
@@ -2,9 +2,9 @@ import { t as cn } from "../../cn.js";
2
2
  import { jsx } from "react/jsx-runtime";
3
3
  import { cva } from "class-variance-authority";
4
4
  //#region src/primitives/Textarea/Textarea.tsx
5
- const textareaVariants = cva("border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-base transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm", {
5
+ const textareaVariants = cva("border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-ring-error aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-sm transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50", {
6
6
  variants: { shape: {
7
- default: "rounded-md",
7
+ default: "rounded-xl",
8
8
  round: "rounded-2xl"
9
9
  } },
10
10
  defaultVariants: { shape: "default" }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst textareaVariants = cva(\n \"border-input placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-base transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n {\n variants: {\n shape: {\n default: \"rounded-md\",\n round: \"rounded-2xl\",\n },\n },\n defaultVariants: {\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (rounded-md) or `round` (rounded-2xl). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAKA,MAAM,mBAAmB,IACvB,ubACA;CACE,UAAU,EACR,OAAO;EACL,SAAS;EACT,OAAO;CACT,EACF;CACA,iBAAiB,EACf,OAAO,UACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WACA,OACA,GAAG,SAKA;CACH,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GAAG,iBAAiB,EAAE,MAAM,CAAC,GAAG,SAAS;EACpD,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/primitives/Textarea/Textarea.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst textareaVariants = cva(\n \"border-border placeholder:text-muted-foreground focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-ring-error aria-invalid:border-destructive flex field-sizing-content min-h-16 w-full border bg-input-background px-3 py-2 text-sm transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50\",\n {\n variants: {\n shape: {\n default: \"rounded-xl\",\n round: \"rounded-2xl\",\n },\n },\n defaultVariants: {\n shape: \"default\",\n },\n },\n);\n\n/** Multi-line text input that auto-grows with its content and supports validation + disabled states. */\nfunction Textarea({\n className,\n shape,\n ...props\n}: React.ComponentProps<\"textarea\"> &\n VariantProps<typeof textareaVariants> & {\n /** Corner radius: `default` (rounded-md) or `round` (rounded-2xl). */\n shape?: VariantProps<typeof textareaVariants>[\"shape\"];\n }) {\n return (\n <textarea\n data-slot=\"textarea\"\n className={cn(textareaVariants({ shape }), className)}\n {...props}\n />\n );\n}\n\nexport { Textarea, textareaVariants };\n"],"mappings":";;;;AAKA,MAAM,mBAAmB,IACvB,gXACA;CACE,UAAU,EACR,OAAO;EACL,SAAS;EACT,OAAO;CACT,EACF;CACA,iBAAiB,EACf,OAAO,UACT;AACF,CACF;;AAGA,SAAS,SAAS,EAChB,WACA,OACA,GAAG,SAKA;CACH,OACE,oBAAC,YAAD;EACE,aAAU;EACV,WAAW,GAAG,iBAAiB,EAAE,MAAM,CAAC,GAAG,SAAS;EACpD,GAAI;CACL,CAAA;AAEL"}
@@ -3,12 +3,12 @@ const require_cn = require("../../cn.cjs");
3
3
  let radix_ui = require("radix-ui");
4
4
  let react_jsx_runtime = require("react/jsx-runtime");
5
5
  //#region src/primitives/Toggle/Toggle.tsx
6
- const toggleVariants = (0, require("class-variance-authority").cva)("inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap", {
6
+ const toggleVariants = (0, require("class-variance-authority").cva)("inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-ring-error aria-invalid:border-destructive whitespace-nowrap", {
7
7
  variants: {
8
8
  /** Visual style: `default` (transparent) or `outline` (bordered). */
9
9
  variant: {
10
10
  default: "bg-transparent",
11
- outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
11
+ outline: "border border-border bg-transparent hover:bg-accent hover:text-accent-foreground"
12
12
  },
13
13
  /** Control size: `sm`, `default`, or `lg`. */
14
14
  size: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["TogglePrimitive","cn"],"sources":["../../../src/primitives/Toggle/Toggle.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Toggle as TogglePrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n /** Visual style: `default` (transparent) or `outline` (bordered). */\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground\",\n },\n /** Control size: `sm`, `default`, or `lg`. */\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n // Shape (Figma): `default` (rounded-md) and `round` (pill) are standalone\n // shapes; `left`/`middle`/`right` join into a segmented group, rounding\n // only the outer edge.\n shape: {\n default: \"rounded-md\",\n round: \"rounded-full\",\n left: \"rounded-l-md rounded-r-none\",\n middle: \"rounded-none\",\n right: \"rounded-r-md rounded-l-none\",\n },\n },\n compoundVariants: [\n // Outlined segments collapse the shared border between adjacent items.\n { variant: \"outline\", shape: \"middle\", class: \"border-l-0\" },\n { variant: \"outline\", shape: \"right\", class: \"border-l-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** A two-state button that can be toggled on or off, built on Radix Toggle. */\nfunction Toggle({\n className,\n variant,\n size,\n shape,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, shape, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n"],"mappings":";;;;;AAMA,MAAM,kBAAA,qCAAA,EAAA,KACJ,ilBACA;CACE,UAAU;;EAER,SAAS;GACP,SAAS;GACT,SAAS;EACX;;EAEA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;EACN;EAIA,OAAO;GACL,SAAS;GACT,OAAO;GACP,MAAM;GACN,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB,CAEhB;EAAE,SAAS;EAAW,OAAO;EAAU,OAAO;CAAa,GAC3D;EAAE,SAAS;EAAW,OAAO;EAAS,OAAO;CAAa,CAC5D;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;EACN,OAAO;CACT;AACF,CACF;;AAGA,SAAS,OAAO,EACd,WACA,SACA,MACA,OACA,GAAG,SACuF;CAC1F,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAgB,MAAjB;EACE,aAAU;EACV,WAAWC,WAAAA,GAAG,eAAe;GAAE;GAAS;GAAM;GAAO;EAAU,CAAC,CAAC;EACjE,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.cjs","names":["TogglePrimitive","cn"],"sources":["../../../src/primitives/Toggle/Toggle.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Toggle as TogglePrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-ring-error aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n /** Visual style: `default` (transparent) or `outline` (bordered). */\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-border bg-transparent hover:bg-accent hover:text-accent-foreground\",\n },\n /** Control size: `sm`, `default`, or `lg`. */\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n // Shape (Figma): `default` (rounded-md) and `round` (pill) are standalone\n // shapes; `left`/`middle`/`right` join into a segmented group, rounding\n // only the outer edge.\n shape: {\n default: \"rounded-md\",\n round: \"rounded-full\",\n left: \"rounded-l-md rounded-r-none\",\n middle: \"rounded-none\",\n right: \"rounded-r-md rounded-l-none\",\n },\n },\n compoundVariants: [\n // Outlined segments collapse the shared border between adjacent items.\n { variant: \"outline\", shape: \"middle\", class: \"border-l-0\" },\n { variant: \"outline\", shape: \"right\", class: \"border-l-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** A two-state button that can be toggled on or off, built on Radix Toggle. */\nfunction Toggle({\n className,\n variant,\n size,\n shape,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, shape, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n"],"mappings":";;;;;AAMA,MAAM,kBAAA,qCAAA,EAAA,KACJ,uiBACA;CACE,UAAU;;EAER,SAAS;GACP,SAAS;GACT,SAAS;EACX;;EAEA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;EACN;EAIA,OAAO;GACL,SAAS;GACT,OAAO;GACP,MAAM;GACN,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB,CAEhB;EAAE,SAAS;EAAW,OAAO;EAAU,OAAO;CAAa,GAC3D;EAAE,SAAS;EAAW,OAAO;EAAS,OAAO;CAAa,CAC5D;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;EACN,OAAO;CACT;AACF,CACF;;AAGA,SAAS,OAAO,EACd,WACA,SACA,MACA,OACA,GAAG,SACuF;CAC1F,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,OAAgB,MAAjB;EACE,aAAU;EACV,WAAWC,WAAAA,GAAG,eAAe;GAAE;GAAS;GAAM;GAAO;EAAU,CAAC,CAAC;EACjE,GAAI;CACL,CAAA;AAEL"}
@@ -3,12 +3,12 @@ import { Toggle as Toggle$1 } from "radix-ui";
3
3
  import { jsx } from "react/jsx-runtime";
4
4
  import { cva } from "class-variance-authority";
5
5
  //#region src/primitives/Toggle/Toggle.tsx
6
- const toggleVariants = cva("inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap", {
6
+ const toggleVariants = cva("inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-ring-error aria-invalid:border-destructive whitespace-nowrap", {
7
7
  variants: {
8
8
  /** Visual style: `default` (transparent) or `outline` (bordered). */
9
9
  variant: {
10
10
  default: "bg-transparent",
11
- outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground"
11
+ outline: "border border-border bg-transparent hover:bg-accent hover:text-accent-foreground"
12
12
  },
13
13
  /** Control size: `sm`, `default`, or `lg`. */
14
14
  size: {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TogglePrimitive"],"sources":["../../../src/primitives/Toggle/Toggle.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Toggle as TogglePrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n /** Visual style: `default` (transparent) or `outline` (bordered). */\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-input bg-transparent hover:bg-accent hover:text-accent-foreground\",\n },\n /** Control size: `sm`, `default`, or `lg`. */\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n // Shape (Figma): `default` (rounded-md) and `round` (pill) are standalone\n // shapes; `left`/`middle`/`right` join into a segmented group, rounding\n // only the outer edge.\n shape: {\n default: \"rounded-md\",\n round: \"rounded-full\",\n left: \"rounded-l-md rounded-r-none\",\n middle: \"rounded-none\",\n right: \"rounded-r-md rounded-l-none\",\n },\n },\n compoundVariants: [\n // Outlined segments collapse the shared border between adjacent items.\n { variant: \"outline\", shape: \"middle\", class: \"border-l-0\" },\n { variant: \"outline\", shape: \"right\", class: \"border-l-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** A two-state button that can be toggled on or off, built on Radix Toggle. */\nfunction Toggle({\n className,\n variant,\n size,\n shape,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, shape, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n"],"mappings":";;;;;AAMA,MAAM,iBAAiB,IACrB,ilBACA;CACE,UAAU;;EAER,SAAS;GACP,SAAS;GACT,SAAS;EACX;;EAEA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;EACN;EAIA,OAAO;GACL,SAAS;GACT,OAAO;GACP,MAAM;GACN,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB,CAEhB;EAAE,SAAS;EAAW,OAAO;EAAU,OAAO;CAAa,GAC3D;EAAE,SAAS;EAAW,OAAO;EAAS,OAAO;CAAa,CAC5D;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;EACN,OAAO;CACT;AACF,CACF;;AAGA,SAAS,OAAO,EACd,WACA,SACA,MACA,OACA,GAAG,SACuF;CAC1F,OACE,oBAACA,SAAgB,MAAjB;EACE,aAAU;EACV,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;GAAO;EAAU,CAAC,CAAC;EACjE,GAAI;CACL,CAAA;AAEL"}
1
+ {"version":3,"file":"index.js","names":["TogglePrimitive"],"sources":["../../../src/primitives/Toggle/Toggle.tsx"],"sourcesContent":["import { type VariantProps, cva } from \"class-variance-authority\";\nimport { Toggle as TogglePrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\nconst toggleVariants = cva(\n \"inline-flex items-center justify-center gap-2 text-sm font-medium cursor-pointer hover:bg-muted hover:text-muted-foreground disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=on]:bg-accent data-[state=on]:text-accent-foreground [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0 focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] outline-none transition-[color,box-shadow] aria-invalid:ring-ring-error aria-invalid:border-destructive whitespace-nowrap\",\n {\n variants: {\n /** Visual style: `default` (transparent) or `outline` (bordered). */\n variant: {\n default: \"bg-transparent\",\n outline: \"border border-border bg-transparent hover:bg-accent hover:text-accent-foreground\",\n },\n /** Control size: `sm`, `default`, or `lg`. */\n size: {\n default: \"h-9 px-2 min-w-9\",\n sm: \"h-8 px-1.5 min-w-8\",\n lg: \"h-10 px-2.5 min-w-10\",\n },\n // Shape (Figma): `default` (rounded-md) and `round` (pill) are standalone\n // shapes; `left`/`middle`/`right` join into a segmented group, rounding\n // only the outer edge.\n shape: {\n default: \"rounded-md\",\n round: \"rounded-full\",\n left: \"rounded-l-md rounded-r-none\",\n middle: \"rounded-none\",\n right: \"rounded-r-md rounded-l-none\",\n },\n },\n compoundVariants: [\n // Outlined segments collapse the shared border between adjacent items.\n { variant: \"outline\", shape: \"middle\", class: \"border-l-0\" },\n { variant: \"outline\", shape: \"right\", class: \"border-l-0\" },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n shape: \"default\",\n },\n },\n);\n\n/** A two-state button that can be toggled on or off, built on Radix Toggle. */\nfunction Toggle({\n className,\n variant,\n size,\n shape,\n ...props\n}: React.ComponentProps<typeof TogglePrimitive.Root> & VariantProps<typeof toggleVariants>) {\n return (\n <TogglePrimitive.Root\n data-slot=\"toggle\"\n className={cn(toggleVariants({ variant, size, shape, className }))}\n {...props}\n />\n );\n}\n\nexport { Toggle, toggleVariants };\n"],"mappings":";;;;;AAMA,MAAM,iBAAiB,IACrB,uiBACA;CACE,UAAU;;EAER,SAAS;GACP,SAAS;GACT,SAAS;EACX;;EAEA,MAAM;GACJ,SAAS;GACT,IAAI;GACJ,IAAI;EACN;EAIA,OAAO;GACL,SAAS;GACT,OAAO;GACP,MAAM;GACN,QAAQ;GACR,OAAO;EACT;CACF;CACA,kBAAkB,CAEhB;EAAE,SAAS;EAAW,OAAO;EAAU,OAAO;CAAa,GAC3D;EAAE,SAAS;EAAW,OAAO;EAAS,OAAO;CAAa,CAC5D;CACA,iBAAiB;EACf,SAAS;EACT,MAAM;EACN,OAAO;CACT;AACF,CACF;;AAGA,SAAS,OAAO,EACd,WACA,SACA,MACA,OACA,GAAG,SACuF;CAC1F,OACE,oBAACA,SAAgB,MAAjB;EACE,aAAU;EACV,WAAW,GAAG,eAAe;GAAE;GAAS;GAAM;GAAO;EAAU,CAAC,CAAC;EACjE,GAAI;CACL,CAAA;AAEL"}
@@ -30,11 +30,11 @@ function TooltipContent({ className, sideOffset = 0, children, ...props }) {
30
30
  return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Tooltip.Portal, { children: /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(radix_ui.Tooltip.Content, {
31
31
  "data-slot": "tooltip-content",
32
32
  sideOffset,
33
- className: require_cn.cn("z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", className),
33
+ className: require_cn.cn("z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-lg bg-inverse px-3 py-1.5 text-xs text-balance text-inverse-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", className),
34
34
  ...props,
35
35
  children: [children, /* @__PURE__ */ (0, react_jsx_runtime.jsx)(radix_ui.Tooltip.Arrow, {
36
36
  "data-slot": "tooltip-arrow",
37
- className: "z-50 size-2.5 fill-foreground"
37
+ className: "z-50 size-2.5 fill-inverse"
38
38
  })]
39
39
  }) });
40
40
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","names":["TooltipPrimitive","cn"],"sources":["../../../src/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Provides shared tooltip context (delay/skip timings) to all tooltips inside it. */\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\n/** Root tooltip: wraps a trigger + content and manages open state. Self-provides a TooltipProvider. */\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\n/** The element that opens the tooltip on hover/focus. Use `asChild` to render your own control. */\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\n/** The floating tooltip surface (portalled) with an arrow; carries the tooltip text. */\nfunction TooltipContent({\n /** Extra classes merged onto the content surface. */\n className,\n /** Gap in px between the trigger and the content. Defaults to 0. */\n sideOffset = 0,\n /** Tooltip body content. */\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow\n data-slot=\"tooltip-arrow\"\n className=\"z-50 size-2.5 fill-foreground\"\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],"mappings":";;;;;;AAMA,SAAS,gBAAgB,EACvB,gBAAgB,GAChB,GAAG,SACsD;CACzD,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,QAAiB,UAAlB;EACE,aAAU;EACK;EACf,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,QAAQ,EAAE,GAAG,SAA6D;CACjF,OACE,iBAAA,GAAA,kBAAA,KAAC,iBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,QAAiB,MAAlB;EAAuB,aAAU;EAAU,GAAI;CAAQ,CAAA,EACxC,CAAA;AAErB;;AAGA,SAAS,eAAe,EAAE,GAAG,SAAgE;CAC3F,OAAO,iBAAA,GAAA,kBAAA,KAACA,SAAAA,QAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;;AAGA,SAAS,eAAe,EAEtB,WAEA,aAAa,GAEb,UACA,GAAG,SACqD;CACxD,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,QAAiB,QAAlB,EAAA,UACE,iBAAA,GAAA,kBAAA,MAACA,SAAAA,QAAiB,SAAlB;EACE,aAAU;EACE;EACZ,WAAWC,WAAAA,GACT,qaACA,SACF;EACA,GAAI;YAPN,CASG,UACD,iBAAA,GAAA,kBAAA,KAACD,SAAAA,QAAiB,OAAlB;GACE,aAAU;GACV,WAAU;EACX,CAAA,CACuB;IACH,CAAA;AAE7B"}
1
+ {"version":3,"file":"index.cjs","names":["TooltipPrimitive","cn"],"sources":["../../../src/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Provides shared tooltip context (delay/skip timings) to all tooltips inside it. */\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\n/** Root tooltip: wraps a trigger + content and manages open state. Self-provides a TooltipProvider. */\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\n/** The element that opens the tooltip on hover/focus. Use `asChild` to render your own control. */\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\n/** The floating tooltip surface (portalled) with an arrow; carries the tooltip text. */\nfunction TooltipContent({\n /** Extra classes merged onto the content surface. */\n className,\n /** Gap in px between the trigger and the content. Defaults to 0. */\n sideOffset = 0,\n /** Tooltip body content. */\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-lg bg-inverse px-3 py-1.5 text-xs text-balance text-inverse-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow data-slot=\"tooltip-arrow\" className=\"z-50 size-2.5 fill-inverse\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],"mappings":";;;;;;AAMA,SAAS,gBAAgB,EACvB,gBAAgB,GAChB,GAAG,SACsD;CACzD,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,QAAiB,UAAlB;EACE,aAAU;EACK;EACf,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,QAAQ,EAAE,GAAG,SAA6D;CACjF,OACE,iBAAA,GAAA,kBAAA,KAAC,iBAAD,EAAA,UACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,QAAiB,MAAlB;EAAuB,aAAU;EAAU,GAAI;CAAQ,CAAA,EACxC,CAAA;AAErB;;AAGA,SAAS,eAAe,EAAE,GAAG,SAAgE;CAC3F,OAAO,iBAAA,GAAA,kBAAA,KAACA,SAAAA,QAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;;AAGA,SAAS,eAAe,EAEtB,WAEA,aAAa,GAEb,UACA,GAAG,SACqD;CACxD,OACE,iBAAA,GAAA,kBAAA,KAACA,SAAAA,QAAiB,QAAlB,EAAA,UACE,iBAAA,GAAA,kBAAA,MAACA,SAAAA,QAAiB,SAAlB;EACE,aAAU;EACE;EACZ,WAAWC,WAAAA,GACT,0aACA,SACF;EACA,GAAI;YAPN,CASG,UACD,iBAAA,GAAA,kBAAA,KAACD,SAAAA,QAAiB,OAAlB;GAAwB,aAAU;GAAgB,WAAU;EAA8B,CAAA,CAClE;IACH,CAAA;AAE7B"}
@@ -29,11 +29,11 @@ function TooltipContent({ className, sideOffset = 0, children, ...props }) {
29
29
  return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsxs(Tooltip$1.Content, {
30
30
  "data-slot": "tooltip-content",
31
31
  sideOffset,
32
- className: cn("z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", className),
32
+ className: cn("z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-lg bg-inverse px-3 py-1.5 text-xs text-balance text-inverse-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95", className),
33
33
  ...props,
34
34
  children: [children, /* @__PURE__ */ jsx(Tooltip$1.Arrow, {
35
35
  "data-slot": "tooltip-arrow",
36
- className: "z-50 size-2.5 fill-foreground"
36
+ className: "z-50 size-2.5 fill-inverse"
37
37
  })]
38
38
  }) });
39
39
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["TooltipPrimitive"],"sources":["../../../src/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Provides shared tooltip context (delay/skip timings) to all tooltips inside it. */\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\n/** Root tooltip: wraps a trigger + content and manages open state. Self-provides a TooltipProvider. */\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\n/** The element that opens the tooltip on hover/focus. Use `asChild` to render your own control. */\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\n/** The floating tooltip surface (portalled) with an arrow; carries the tooltip text. */\nfunction TooltipContent({\n /** Extra classes merged onto the content surface. */\n className,\n /** Gap in px between the trigger and the content. Defaults to 0. */\n sideOffset = 0,\n /** Tooltip body content. */\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-md bg-foreground px-3 py-1.5 text-xs text-balance text-background fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow\n data-slot=\"tooltip-arrow\"\n className=\"z-50 size-2.5 fill-foreground\"\n />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],"mappings":";;;;;AAMA,SAAS,gBAAgB,EACvB,gBAAgB,GAChB,GAAG,SACsD;CACzD,OACE,oBAACA,UAAiB,UAAlB;EACE,aAAU;EACK;EACf,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,QAAQ,EAAE,GAAG,SAA6D;CACjF,OACE,oBAAC,iBAAD,EAAA,UACE,oBAACA,UAAiB,MAAlB;EAAuB,aAAU;EAAU,GAAI;CAAQ,CAAA,EACxC,CAAA;AAErB;;AAGA,SAAS,eAAe,EAAE,GAAG,SAAgE;CAC3F,OAAO,oBAACA,UAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;;AAGA,SAAS,eAAe,EAEtB,WAEA,aAAa,GAEb,UACA,GAAG,SACqD;CACxD,OACE,oBAACA,UAAiB,QAAlB,EAAA,UACE,qBAACA,UAAiB,SAAlB;EACE,aAAU;EACE;EACZ,WAAW,GACT,qaACA,SACF;EACA,GAAI;YAPN,CASG,UACD,oBAACA,UAAiB,OAAlB;GACE,aAAU;GACV,WAAU;EACX,CAAA,CACuB;IACH,CAAA;AAE7B"}
1
+ {"version":3,"file":"index.js","names":["TooltipPrimitive"],"sources":["../../../src/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":["import { Tooltip as TooltipPrimitive } from \"radix-ui\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/utils\";\n\n/** Provides shared tooltip context (delay/skip timings) to all tooltips inside it. */\nfunction TooltipProvider({\n delayDuration = 0,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Provider>) {\n return (\n <TooltipPrimitive.Provider\n data-slot=\"tooltip-provider\"\n delayDuration={delayDuration}\n {...props}\n />\n );\n}\n\n/** Root tooltip: wraps a trigger + content and manages open state. Self-provides a TooltipProvider. */\nfunction Tooltip({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Root>) {\n return (\n <TooltipProvider>\n <TooltipPrimitive.Root data-slot=\"tooltip\" {...props} />\n </TooltipProvider>\n );\n}\n\n/** The element that opens the tooltip on hover/focus. Use `asChild` to render your own control. */\nfunction TooltipTrigger({ ...props }: React.ComponentProps<typeof TooltipPrimitive.Trigger>) {\n return <TooltipPrimitive.Trigger data-slot=\"tooltip-trigger\" {...props} />;\n}\n\n/** The floating tooltip surface (portalled) with an arrow; carries the tooltip text. */\nfunction TooltipContent({\n /** Extra classes merged onto the content surface. */\n className,\n /** Gap in px between the trigger and the content. Defaults to 0. */\n sideOffset = 0,\n /** Tooltip body content. */\n children,\n ...props\n}: React.ComponentProps<typeof TooltipPrimitive.Content>) {\n return (\n <TooltipPrimitive.Portal>\n <TooltipPrimitive.Content\n data-slot=\"tooltip-content\"\n sideOffset={sideOffset}\n className={cn(\n \"z-50 w-fit origin-(--radix-tooltip-content-transform-origin) animate-in rounded-lg bg-inverse px-3 py-1.5 text-xs text-balance text-inverse-foreground fade-in-0 zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95\",\n className,\n )}\n {...props}\n >\n {children}\n <TooltipPrimitive.Arrow data-slot=\"tooltip-arrow\" className=\"z-50 size-2.5 fill-inverse\" />\n </TooltipPrimitive.Content>\n </TooltipPrimitive.Portal>\n );\n}\n\nexport { Tooltip, TooltipTrigger, TooltipContent, TooltipProvider };\n"],"mappings":";;;;;AAMA,SAAS,gBAAgB,EACvB,gBAAgB,GAChB,GAAG,SACsD;CACzD,OACE,oBAACA,UAAiB,UAAlB;EACE,aAAU;EACK;EACf,GAAI;CACL,CAAA;AAEL;;AAGA,SAAS,QAAQ,EAAE,GAAG,SAA6D;CACjF,OACE,oBAAC,iBAAD,EAAA,UACE,oBAACA,UAAiB,MAAlB;EAAuB,aAAU;EAAU,GAAI;CAAQ,CAAA,EACxC,CAAA;AAErB;;AAGA,SAAS,eAAe,EAAE,GAAG,SAAgE;CAC3F,OAAO,oBAACA,UAAiB,SAAlB;EAA0B,aAAU;EAAkB,GAAI;CAAQ,CAAA;AAC3E;;AAGA,SAAS,eAAe,EAEtB,WAEA,aAAa,GAEb,UACA,GAAG,SACqD;CACxD,OACE,oBAACA,UAAiB,QAAlB,EAAA,UACE,qBAACA,UAAiB,SAAlB;EACE,aAAU;EACE;EACZ,WAAW,GACT,0aACA,SACF;EACA,GAAI;YAPN,CASG,UACD,oBAACA,UAAiB,OAAlB;GAAwB,aAAU;GAAgB,WAAU;EAA8B,CAAA,CAClE;IACH,CAAA;AAE7B"}
@@ -40,6 +40,7 @@ const require_primitives_Item_index = require("./Item/index.cjs");
40
40
  const require_primitives_Kbd_index = require("./Kbd/index.cjs");
41
41
  const require_primitives_Link_index = require("./Link/index.cjs");
42
42
  const require_Logo = require("../Logo.cjs");
43
+ const require_primitives_ThemeProvider_index = require("./ThemeProvider/index.cjs");
43
44
  const require_primitives_Menubar_index = require("./Menubar/index.cjs");
44
45
  const require_primitives_NativeSelect_index = require("./NativeSelect/index.cjs");
45
46
  const require_primitives_NavigationMenu_index = require("./NavigationMenu/index.cjs");
@@ -60,7 +61,6 @@ const require_primitives_Switch_index = require("./Switch/index.cjs");
60
61
  const require_primitives_Table_index = require("./Table/index.cjs");
61
62
  const require_primitives_Tabs_index = require("./Tabs/index.cjs");
62
63
  const require_primitives_Text_index = require("./Text/index.cjs");
63
- const require_primitives_ThemeProvider_index = require("./ThemeProvider/index.cjs");
64
64
  const require_primitives_Toggle_index = require("./Toggle/index.cjs");
65
65
  const require_primitives_ToggleGroup_index = require("./ToggleGroup/index.cjs");
66
66
  exports.Accordion = require_primitives_Accordion_index.Accordion;
@@ -39,6 +39,7 @@ import { Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup,
39
39
  import { Kbd, KbdGroup } from "./Kbd/index.js";
40
40
  import { Link, linkVariants } from "./Link/index.js";
41
41
  import { t as Logo } from "../Logo.js";
42
+ import { ThemeContext, ThemeProvider, useTheme } from "./ThemeProvider/index.js";
42
43
  import { Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger } from "./Menubar/index.js";
43
44
  import { NativeSelect, nativeSelectVariants } from "./NativeSelect/index.js";
44
45
  import { NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, navigationMenuTriggerStyle } from "./NavigationMenu/index.js";
@@ -59,7 +60,6 @@ import { RichSwitchGroup, Switch, SwitchGroup } from "./Switch/index.js";
59
60
  import { Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow } from "./Table/index.js";
60
61
  import { Tabs, TabsContent, TabsCounter, TabsList, TabsTrigger, tabsListVariants, tabsTriggerVariants } from "./Tabs/index.js";
61
62
  import { Text, textVariants } from "./Text/index.js";
62
- import { ThemeContext, ThemeProvider, useTheme } from "./ThemeProvider/index.js";
63
63
  import { Toggle, toggleVariants } from "./Toggle/index.js";
64
64
  import { ToggleGroup, ToggleGroupItem } from "./ToggleGroup/index.js";
65
65
  export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertAction, AlertContent, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertTitle, AspectRatio, Avatar, AvatarBadge, AvatarFallback, AvatarGroup, AvatarGroupCount, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonGroup, ButtonGroupSeparator, ButtonGroupText, Calendar, CalendarDayButton, Card, CardAction, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Carousel, CarouselContent, CarouselItem, CarouselNext, CarouselPrevious, ChartContainer, ChartLegend, ChartLegendContent, ChartStyle, ChartTooltip, ChartTooltipContent, Checkbox, CheckboxTree, Collapsible, CollapsibleContent, CollapsibleTrigger, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuPortal, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, Credits, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, Empty, EmptyContent, EmptyDescription, EmptyHeader, EmptyMedia, EmptyTitle, Field, FieldContent, FieldDescription, FieldError, FieldGroup, FieldLabel, FieldLegend, FieldSeparator, FieldSet, FieldTitle, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Heading, HoverCard, HoverCardContent, HoverCardTrigger, ICON_NAMES, Icon, InfoBanner, Input, InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText, InputGroupTextarea, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Item, ItemActions, ItemContent, ItemDescription, ItemFooter, ItemGroup, ItemHeader, ItemMedia, ItemSeparator, ItemTitle, Kbd, KbdGroup, Label, Link, Logo, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, NativeSelect, NavRail, NavRailItem, NavRailMenu, NavRailMenuContent, NavRailMenuItem, NavRailMenuTrigger, NavRailSeparator, NavRailUser, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Pagination, PaginationContent, PaginationEllipsis, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, Popover, PopoverAnchor, PopoverContent, PopoverDescription, PopoverHeader, PopoverTitle, PopoverTrigger, Progress, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, RichCheckbox, RichRadioItem, RichSwitchGroup, ScrollArea, ScrollBar, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator, Sheet, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetTitle, SheetTrigger, Sidebar, SidebarContent, SidebarFooter, SidebarGroup, SidebarGroupAction, SidebarGroupContent, SidebarGroupLabel, SidebarHeader, SidebarInput, SidebarInset, SidebarMenu, SidebarMenuAction, SidebarMenuBadge, SidebarMenuButton, SidebarMenuItem, SidebarMenuSkeleton, SidebarMenuSub, SidebarMenuSubButton, SidebarMenuSubItem, SidebarProvider, SidebarRail, SidebarSeparator, SidebarTrigger, Skeleton, SkeletonAvatar, SkeletonLine, SkeletonObject, Slider, Spinner, Switch, SwitchGroup, Table, TableBody, TableCaption, TableCell, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsCounter, TabsList, TabsTrigger, Text, Textarea, ThemeContext, ThemeProvider, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, badgeVariants, buttonGroupVariants, buttonVariants, cardVariants, creditsVariants, emptyVariants, headingVariants, infoBannerVariants, inputVariants, linkVariants, nativeSelectVariants, navigationMenuTriggerStyle, tabsListVariants, tabsTriggerVariants, textVariants, textareaVariants, toggleVariants, useFormField, useSidebar, useTheme };
@@ -33,7 +33,28 @@
33
33
 
34
34
  /* ── States ───────────────────────────────────────────── */
35
35
  --destructive: var(--bg-destructive);
36
- --destructive-foreground: var(--content-destructive-foreground);
36
+ /* NOTE: `--destructive-foreground` resolves to the destructive *content* red
37
+ (Figma content/destructive) — i.e. `text-destructive-foreground` is the red
38
+ text/icon color. The on-destructive foreground (white, for text ON a filled
39
+ destructive surface) is `--destructive-content-foreground`. */
40
+ --destructive-foreground: var(--content-destructive);
41
+ --destructive-content-foreground: var(--content-destructive-foreground);
42
+ --destructive-subtle: var(--bg-destructive-subtle);
43
+ --destructive-subtle-foreground: var(--content-destructive-subtle);
44
+ --destructive-alpha: var(--bg-destructive-alpha);
45
+ --destructive-border: var(--border-destructive-border);
46
+ --error: var(--bg-error);
47
+ --error-subtle: var(--bg-error-subtle);
48
+ --error-foreground: var(--content-error);
49
+ --error-bold-foreground: var(--content-error-bold);
50
+
51
+ /* Inverse surface — a dark fill + light text in light mode (flips in dark).
52
+ For tooltips, inverted cards/badges, and solid icon chips. Bound to the Figma
53
+ popover/popover token, which IS the design's inverse surface (#1f2832 light /
54
+ #ffffff dark) — note --popover (the menu/popover *semantic*) is deliberately
55
+ aliased to --card instead (tech-debt #6), so we reference the raw token here. */
56
+ --inverse: var(--popover-popover);
57
+ --inverse-foreground: var(--popover-popover-foreground);
37
58
 
38
59
  /* ── UI structure ─────────────────────────────────────── */
39
60
  --border: var(--border-border-2);
@@ -44,6 +65,7 @@
44
65
  --switch-background: var(--gray-200);
45
66
  --overlay: var(--bg-backdrop);
46
67
  --ring: var(--focus-ring);
68
+ --ring-error: var(--focus-ring-error);
47
69
 
48
70
  /* ── Sidebar ──────────────────────────────────────────── */
49
71
  --sidebar: var(--sidebar-sidebar);
@@ -87,7 +109,6 @@
87
109
  /* ── Component tokens ─────────────────────────────────── */
88
110
  --progress-analyzing: var(--sky-200);
89
111
  --progress-ingesting: var(--orange-200);
90
- --logo-accent: var(--white);
91
112
 
92
113
  /* Gradient heading fill (Heading `gradient` variant). */
93
114
  --gradient-heading-from: var(--sky-600);
@@ -105,19 +126,9 @@
105
126
  .dark {
106
127
  --progress-analyzing: var(--sky-800);
107
128
  --progress-ingesting: var(--orange-800);
108
- --logo-accent: var(--gray-200);
109
129
 
110
130
  --page-gradient-edge: var(--gray-950);
111
131
  --page-gradient-mid: var(--red-950);
112
-
113
- /* The Figma dark `bg/destructive` (#6C0016) is near-black. `--destructive` is
114
- used as BOTH the destructive button fill AND the text/icon/border colour, so
115
- in dark mode every destructive component (button, alert, icon, field errors)
116
- reads as too dark. Point the all-purpose token at the palette's vivid error
117
- red instead. CSS-only override — the Figma token is left untouched.
118
- TODO(design): revisit the Figma `bg/destructive` dark value so this override
119
- can be removed — see docs/tech-debt.md. */
120
- --destructive: var(--content-error);
121
132
  }
122
133
 
123
134
  /* Brand-aware page gradient: the middle stop is each brand's secondary tint. */
@@ -34,12 +34,27 @@
34
34
  --color-accent: var(--accent);
35
35
  --color-accent-foreground: var(--accent-foreground);
36
36
  --color-destructive: var(--destructive);
37
+ /* `*-destructive-foreground` = the destructive content red; the on-destructive
38
+ foreground (white) is `*-destructive-content-foreground`. See semantic.css. */
37
39
  --color-destructive-foreground: var(--destructive-foreground);
38
- --color-border: var(--border);
40
+ --color-destructive-content-foreground: var(--destructive-content-foreground);
41
+ --color-destructive-subtle: var(--destructive-subtle);
42
+ --color-destructive-subtle-foreground: var(--destructive-subtle-foreground);
43
+ --color-destructive-alpha: var(--destructive-alpha);
44
+ --color-destructive-border: var(--destructive-border);
45
+ --color-error: var(--error);
46
+ --color-error-subtle: var(--error-subtle);
47
+ --color-error-foreground: var(--error-foreground);
48
+ --color-error-bold-foreground: var(--error-bold-foreground);
49
+ /* Inverse surface pair (→ bg-inverse / text-inverse-foreground / fill-inverse). */
50
+ --color-inverse: var(--inverse);
51
+ --color-inverse-foreground: var(--inverse-foreground);
52
+ --color-border: var(--border); /* this is good */
39
53
  --color-input: var(--input);
40
54
  --color-switch-background: var(--switch-background);
41
55
  --color-input-background: var(--input-background);
42
56
  --color-ring: var(--ring);
57
+ --color-ring-error: var(--ring-error);
43
58
 
44
59
  /* ── Sidebar ──────────────────────────────────────────── */
45
60
  --color-sidebar: var(--sidebar);
@@ -70,11 +85,27 @@
70
85
  --color-brand-accent: var(--brand-accent);
71
86
  --color-brand-accent-foreground: var(--brand-accent-foreground);
72
87
 
88
+ /* ── Page Gradient ───────────────────── */
89
+ --color-page-gradient-edge: var(--page-gradient-edge);
90
+ --color-page-gradient-mid: var(--page-gradient-mid);
91
+
92
+ /* ── Glass Colors ───────────────────── */
93
+ --color-glass-heavy: var(--glass-heavy);
94
+ --color-glass-strong: var(--glass-strong);
95
+ --color-glass-subtle: var(--glass-subtle);
96
+ --color-glass-light: var(--glass-light);
97
+ --color-glass-medium: var(--glass-medium);
98
+
99
+ /* ── Blur ───────────────────── */
100
+ --blur-glass: var(--glass-blur);
101
+
73
102
  /* ── Radius (→ rounded-* utilities) ───────────────────── */
74
103
  --radius-xs: var(--rounded-xs);
75
104
  --radius-sm: var(--rounded-sm);
76
105
  --radius-md: var(--rounded-md);
77
106
  --radius-lg: var(--rounded-lg);
107
+ --radius-5: var(--rounded-5);
108
+ --radius-10: var(--rounded-10);
78
109
  --radius-xl: var(--rounded-xl);
79
110
  --radius-2xl: var(--rounded-2xl);
80
111
  --radius-3xl: var(--rounded-3xl);
@@ -7,9 +7,10 @@
7
7
  --rounded-none: 0;
8
8
  --rounded-xs: 2px;
9
9
  --rounded-sm: 4px;
10
+ --rounded-5: 5px;
10
11
  --rounded-md: 6px;
11
12
  --rounded-lg: 8px;
12
- --radius: 10px;
13
+ --rounded-10: 10px;
13
14
  --rounded-xl: 12px;
14
15
  --rounded-2xl: 16px;
15
16
  --rounded-3xl: 24px;