@verdify/ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (443) hide show
  1. package/LICENSE +12 -0
  2. package/README.md +117 -0
  3. package/dist/components/accordion/accordion.d.ts +66 -0
  4. package/dist/components/accordion/accordion.d.ts.map +1 -0
  5. package/dist/components/accordion/accordion.js +97 -0
  6. package/dist/components/accordion/accordion.js.map +1 -0
  7. package/dist/components/accordion/accordion.variants.d.ts +9 -0
  8. package/dist/components/accordion/accordion.variants.d.ts.map +1 -0
  9. package/dist/components/accordion/accordion.variants.js +54 -0
  10. package/dist/components/accordion/accordion.variants.js.map +1 -0
  11. package/dist/components/accordion/index.d.ts +3 -0
  12. package/dist/components/accordion/index.d.ts.map +1 -0
  13. package/dist/components/accordion/index.js +25 -0
  14. package/dist/components/accordion/index.js.map +1 -0
  15. package/dist/components/agent-badge/agent-badge.d.ts +56 -0
  16. package/dist/components/agent-badge/agent-badge.d.ts.map +1 -0
  17. package/dist/components/agent-badge/agent-badge.js +35 -0
  18. package/dist/components/agent-badge/agent-badge.js.map +1 -0
  19. package/dist/components/agent-badge/agent-badge.variants.d.ts +7 -0
  20. package/dist/components/agent-badge/agent-badge.variants.d.ts.map +1 -0
  21. package/dist/components/agent-badge/agent-badge.variants.js +35 -0
  22. package/dist/components/agent-badge/agent-badge.variants.js.map +1 -0
  23. package/dist/components/agent-badge/index.d.ts +3 -0
  24. package/dist/components/agent-badge/index.d.ts.map +1 -0
  25. package/dist/components/agent-badge/index.js +11 -0
  26. package/dist/components/agent-badge/index.js.map +1 -0
  27. package/dist/components/alert/alert.d.ts +94 -0
  28. package/dist/components/alert/alert.d.ts.map +1 -0
  29. package/dist/components/alert/alert.js +105 -0
  30. package/dist/components/alert/alert.js.map +1 -0
  31. package/dist/components/alert/alert.variants.d.ts +15 -0
  32. package/dist/components/alert/alert.variants.d.ts.map +1 -0
  33. package/dist/components/alert/alert.variants.js +74 -0
  34. package/dist/components/alert/alert.variants.js.map +1 -0
  35. package/dist/components/alert/index.d.ts +3 -0
  36. package/dist/components/alert/index.d.ts.map +1 -0
  37. package/dist/components/alert/index.js +37 -0
  38. package/dist/components/alert/index.js.map +1 -0
  39. package/dist/components/avatar/avatar.d.ts +56 -0
  40. package/dist/components/avatar/avatar.d.ts.map +1 -0
  41. package/dist/components/avatar/avatar.js +107 -0
  42. package/dist/components/avatar/avatar.js.map +1 -0
  43. package/dist/components/avatar/avatar.variants.d.ts +11 -0
  44. package/dist/components/avatar/avatar.variants.d.ts.map +1 -0
  45. package/dist/components/avatar/avatar.variants.js +48 -0
  46. package/dist/components/avatar/avatar.variants.js.map +1 -0
  47. package/dist/components/avatar/index.d.ts +3 -0
  48. package/dist/components/avatar/index.d.ts.map +1 -0
  49. package/dist/components/avatar/index.js +15 -0
  50. package/dist/components/avatar/index.js.map +1 -0
  51. package/dist/components/badge/badge.d.ts +30 -0
  52. package/dist/components/badge/badge.d.ts.map +1 -0
  53. package/dist/components/badge/badge.js +33 -0
  54. package/dist/components/badge/badge.js.map +1 -0
  55. package/dist/components/badge/badge.variants.d.ts +7 -0
  56. package/dist/components/badge/badge.variants.d.ts.map +1 -0
  57. package/dist/components/badge/badge.variants.js +33 -0
  58. package/dist/components/badge/badge.variants.js.map +1 -0
  59. package/dist/components/badge/index.d.ts +3 -0
  60. package/dist/components/badge/index.d.ts.map +1 -0
  61. package/dist/components/badge/index.js +8 -0
  62. package/dist/components/badge/index.js.map +1 -0
  63. package/dist/components/breadcrumb/breadcrumb.d.ts +90 -0
  64. package/dist/components/breadcrumb/breadcrumb.d.ts.map +1 -0
  65. package/dist/components/breadcrumb/breadcrumb.js +143 -0
  66. package/dist/components/breadcrumb/breadcrumb.js.map +1 -0
  67. package/dist/components/breadcrumb/breadcrumb.variants.d.ts +10 -0
  68. package/dist/components/breadcrumb/breadcrumb.variants.d.ts.map +1 -0
  69. package/dist/components/breadcrumb/breadcrumb.variants.js +41 -0
  70. package/dist/components/breadcrumb/breadcrumb.variants.js.map +1 -0
  71. package/dist/components/breadcrumb/index.d.ts +3 -0
  72. package/dist/components/breadcrumb/index.d.ts.map +1 -0
  73. package/dist/components/breadcrumb/index.js +35 -0
  74. package/dist/components/breadcrumb/index.js.map +1 -0
  75. package/dist/components/button/button.d.ts +10 -0
  76. package/dist/components/button/button.d.ts.map +1 -0
  77. package/dist/components/button/button.js +42 -0
  78. package/dist/components/button/button.js.map +1 -0
  79. package/dist/components/button/button.variants.d.ts +6 -0
  80. package/dist/components/button/button.variants.d.ts.map +1 -0
  81. package/dist/components/button/button.variants.js +45 -0
  82. package/dist/components/button/button.variants.js.map +1 -0
  83. package/dist/components/button/index.d.ts +3 -0
  84. package/dist/components/button/index.d.ts.map +1 -0
  85. package/dist/components/button/index.js +7 -0
  86. package/dist/components/button/index.js.map +1 -0
  87. package/dist/components/card/card.d.ts +59 -0
  88. package/dist/components/card/card.d.ts.map +1 -0
  89. package/dist/components/card/card.js +101 -0
  90. package/dist/components/card/card.js.map +1 -0
  91. package/dist/components/card/card.variants.d.ts +13 -0
  92. package/dist/components/card/card.variants.d.ts.map +1 -0
  93. package/dist/components/card/card.variants.js +64 -0
  94. package/dist/components/card/card.variants.js.map +1 -0
  95. package/dist/components/card/index.d.ts +3 -0
  96. package/dist/components/card/index.d.ts.map +1 -0
  97. package/dist/components/card/index.js +35 -0
  98. package/dist/components/card/index.js.map +1 -0
  99. package/dist/components/checkbox/checkbox.d.ts +20 -0
  100. package/dist/components/checkbox/checkbox.d.ts.map +1 -0
  101. package/dist/components/checkbox/checkbox.js +102 -0
  102. package/dist/components/checkbox/checkbox.js.map +1 -0
  103. package/dist/components/checkbox/checkbox.variants.d.ts +15 -0
  104. package/dist/components/checkbox/checkbox.variants.d.ts.map +1 -0
  105. package/dist/components/checkbox/checkbox.variants.js +70 -0
  106. package/dist/components/checkbox/checkbox.variants.js.map +1 -0
  107. package/dist/components/checkbox/index.d.ts +3 -0
  108. package/dist/components/checkbox/index.d.ts.map +1 -0
  109. package/dist/components/checkbox/index.js +11 -0
  110. package/dist/components/checkbox/index.js.map +1 -0
  111. package/dist/components/command-palette/command-palette.d.ts +76 -0
  112. package/dist/components/command-palette/command-palette.d.ts.map +1 -0
  113. package/dist/components/command-palette/command-palette.js +271 -0
  114. package/dist/components/command-palette/command-palette.js.map +1 -0
  115. package/dist/components/command-palette/command-palette.variants.d.ts +18 -0
  116. package/dist/components/command-palette/command-palette.variants.d.ts.map +1 -0
  117. package/dist/components/command-palette/command-palette.variants.js +62 -0
  118. package/dist/components/command-palette/command-palette.variants.js.map +1 -0
  119. package/dist/components/command-palette/index.d.ts +3 -0
  120. package/dist/components/command-palette/index.d.ts.map +1 -0
  121. package/dist/components/command-palette/index.js +35 -0
  122. package/dist/components/command-palette/index.js.map +1 -0
  123. package/dist/components/consent-toggle/consent-toggle.d.ts +107 -0
  124. package/dist/components/consent-toggle/consent-toggle.d.ts.map +1 -0
  125. package/dist/components/consent-toggle/consent-toggle.js +68 -0
  126. package/dist/components/consent-toggle/consent-toggle.js.map +1 -0
  127. package/dist/components/consent-toggle/consent-toggle.variants.d.ts +10 -0
  128. package/dist/components/consent-toggle/consent-toggle.variants.d.ts.map +1 -0
  129. package/dist/components/consent-toggle/consent-toggle.variants.js +29 -0
  130. package/dist/components/consent-toggle/consent-toggle.variants.js.map +1 -0
  131. package/dist/components/consent-toggle/index.d.ts +3 -0
  132. package/dist/components/consent-toggle/index.d.ts.map +1 -0
  133. package/dist/components/consent-toggle/index.js +19 -0
  134. package/dist/components/consent-toggle/index.js.map +1 -0
  135. package/dist/components/credential-card/credential-card.d.ts +144 -0
  136. package/dist/components/credential-card/credential-card.d.ts.map +1 -0
  137. package/dist/components/credential-card/credential-card.js +117 -0
  138. package/dist/components/credential-card/credential-card.js.map +1 -0
  139. package/dist/components/credential-card/credential-card.variants.d.ts +15 -0
  140. package/dist/components/credential-card/credential-card.variants.d.ts.map +1 -0
  141. package/dist/components/credential-card/credential-card.variants.js +48 -0
  142. package/dist/components/credential-card/credential-card.variants.js.map +1 -0
  143. package/dist/components/credential-card/index.d.ts +3 -0
  144. package/dist/components/credential-card/index.d.ts.map +1 -0
  145. package/dist/components/credential-card/index.js +29 -0
  146. package/dist/components/credential-card/index.js.map +1 -0
  147. package/dist/components/data-grid/data-grid.d.ts +247 -0
  148. package/dist/components/data-grid/data-grid.d.ts.map +1 -0
  149. package/dist/components/data-grid/data-grid.js +529 -0
  150. package/dist/components/data-grid/data-grid.js.map +1 -0
  151. package/dist/components/data-grid/data-grid.variants.d.ts +29 -0
  152. package/dist/components/data-grid/data-grid.variants.d.ts.map +1 -0
  153. package/dist/components/data-grid/data-grid.variants.js +110 -0
  154. package/dist/components/data-grid/data-grid.variants.js.map +1 -0
  155. package/dist/components/data-grid/index.d.ts +3 -0
  156. package/dist/components/data-grid/index.d.ts.map +1 -0
  157. package/dist/components/data-grid/index.js +59 -0
  158. package/dist/components/data-grid/index.js.map +1 -0
  159. package/dist/components/dialog/dialog.d.ts +98 -0
  160. package/dist/components/dialog/dialog.d.ts.map +1 -0
  161. package/dist/components/dialog/dialog.js +121 -0
  162. package/dist/components/dialog/dialog.js.map +1 -0
  163. package/dist/components/dialog/dialog.variants.d.ts +14 -0
  164. package/dist/components/dialog/dialog.variants.d.ts.map +1 -0
  165. package/dist/components/dialog/dialog.variants.js +71 -0
  166. package/dist/components/dialog/dialog.variants.js.map +1 -0
  167. package/dist/components/dialog/index.d.ts +3 -0
  168. package/dist/components/dialog/index.d.ts.map +1 -0
  169. package/dist/components/dialog/index.js +31 -0
  170. package/dist/components/dialog/index.js.map +1 -0
  171. package/dist/components/identity-chip/identity-chip.d.ts +121 -0
  172. package/dist/components/identity-chip/identity-chip.d.ts.map +1 -0
  173. package/dist/components/identity-chip/identity-chip.js +203 -0
  174. package/dist/components/identity-chip/identity-chip.js.map +1 -0
  175. package/dist/components/identity-chip/identity-chip.variants.d.ts +11 -0
  176. package/dist/components/identity-chip/identity-chip.variants.d.ts.map +1 -0
  177. package/dist/components/identity-chip/identity-chip.variants.js +61 -0
  178. package/dist/components/identity-chip/identity-chip.variants.js.map +1 -0
  179. package/dist/components/identity-chip/index.d.ts +3 -0
  180. package/dist/components/identity-chip/index.d.ts.map +1 -0
  181. package/dist/components/identity-chip/index.js +21 -0
  182. package/dist/components/identity-chip/index.js.map +1 -0
  183. package/dist/components/input/index.d.ts +3 -0
  184. package/dist/components/input/index.d.ts.map +1 -0
  185. package/dist/components/input/index.js +11 -0
  186. package/dist/components/input/index.js.map +1 -0
  187. package/dist/components/input/input.d.ts +17 -0
  188. package/dist/components/input/input.d.ts.map +1 -0
  189. package/dist/components/input/input.js +71 -0
  190. package/dist/components/input/input.js.map +1 -0
  191. package/dist/components/input/input.variants.d.ts +11 -0
  192. package/dist/components/input/input.variants.d.ts.map +1 -0
  193. package/dist/components/input/input.variants.js +64 -0
  194. package/dist/components/input/input.variants.js.map +1 -0
  195. package/dist/components/label/index.d.ts +3 -0
  196. package/dist/components/label/index.d.ts.map +1 -0
  197. package/dist/components/label/index.js +13 -0
  198. package/dist/components/label/index.js.map +1 -0
  199. package/dist/components/label/label.d.ts +16 -0
  200. package/dist/components/label/label.d.ts.map +1 -0
  201. package/dist/components/label/label.js +27 -0
  202. package/dist/components/label/label.js.map +1 -0
  203. package/dist/components/label/label.variants.d.ts +8 -0
  204. package/dist/components/label/label.variants.d.ts.map +1 -0
  205. package/dist/components/label/label.variants.js +27 -0
  206. package/dist/components/label/label.variants.js.map +1 -0
  207. package/dist/components/menu/index.d.ts +3 -0
  208. package/dist/components/menu/index.d.ts.map +1 -0
  209. package/dist/components/menu/index.js +43 -0
  210. package/dist/components/menu/index.js.map +1 -0
  211. package/dist/components/menu/menu.d.ts +115 -0
  212. package/dist/components/menu/menu.d.ts.map +1 -0
  213. package/dist/components/menu/menu.js +130 -0
  214. package/dist/components/menu/menu.js.map +1 -0
  215. package/dist/components/menu/menu.variants.d.ts +13 -0
  216. package/dist/components/menu/menu.variants.d.ts.map +1 -0
  217. package/dist/components/menu/menu.variants.js +56 -0
  218. package/dist/components/menu/menu.variants.js.map +1 -0
  219. package/dist/components/pagination/index.d.ts +3 -0
  220. package/dist/components/pagination/index.d.ts.map +1 -0
  221. package/dist/components/pagination/index.js +37 -0
  222. package/dist/components/pagination/index.js.map +1 -0
  223. package/dist/components/pagination/pagination.d.ts +118 -0
  224. package/dist/components/pagination/pagination.d.ts.map +1 -0
  225. package/dist/components/pagination/pagination.js +204 -0
  226. package/dist/components/pagination/pagination.js.map +1 -0
  227. package/dist/components/pagination/pagination.variants.d.ts +13 -0
  228. package/dist/components/pagination/pagination.variants.d.ts.map +1 -0
  229. package/dist/components/pagination/pagination.variants.js +63 -0
  230. package/dist/components/pagination/pagination.variants.js.map +1 -0
  231. package/dist/components/popover/index.d.ts +3 -0
  232. package/dist/components/popover/index.d.ts.map +1 -0
  233. package/dist/components/popover/index.js +39 -0
  234. package/dist/components/popover/index.js.map +1 -0
  235. package/dist/components/popover/popover.d.ts +92 -0
  236. package/dist/components/popover/popover.d.ts.map +1 -0
  237. package/dist/components/popover/popover.js +135 -0
  238. package/dist/components/popover/popover.js.map +1 -0
  239. package/dist/components/popover/popover.variants.d.ts +9 -0
  240. package/dist/components/popover/popover.variants.d.ts.map +1 -0
  241. package/dist/components/popover/popover.variants.js +19 -0
  242. package/dist/components/popover/popover.variants.js.map +1 -0
  243. package/dist/components/progress/index.d.ts +3 -0
  244. package/dist/components/progress/index.d.ts.map +1 -0
  245. package/dist/components/progress/index.js +23 -0
  246. package/dist/components/progress/index.js.map +1 -0
  247. package/dist/components/progress/progress.d.ts +71 -0
  248. package/dist/components/progress/progress.d.ts.map +1 -0
  249. package/dist/components/progress/progress.js +91 -0
  250. package/dist/components/progress/progress.js.map +1 -0
  251. package/dist/components/progress/progress.variants.d.ts +14 -0
  252. package/dist/components/progress/progress.variants.d.ts.map +1 -0
  253. package/dist/components/progress/progress.variants.js +37 -0
  254. package/dist/components/progress/progress.variants.js.map +1 -0
  255. package/dist/components/radio/index.d.ts +3 -0
  256. package/dist/components/radio/index.d.ts.map +1 -0
  257. package/dist/components/radio/index.js +22 -0
  258. package/dist/components/radio/index.js.map +1 -0
  259. package/dist/components/radio/radio.d.ts +23 -0
  260. package/dist/components/radio/radio.d.ts.map +1 -0
  261. package/dist/components/radio/radio.js +183 -0
  262. package/dist/components/radio/radio.js.map +1 -0
  263. package/dist/components/radio/radio.variants.d.ts +17 -0
  264. package/dist/components/radio/radio.variants.d.ts.map +1 -0
  265. package/dist/components/radio/radio.variants.js +60 -0
  266. package/dist/components/radio/radio.variants.js.map +1 -0
  267. package/dist/components/select/index.d.ts +3 -0
  268. package/dist/components/select/index.d.ts.map +1 -0
  269. package/dist/components/select/index.js +9 -0
  270. package/dist/components/select/index.js.map +1 -0
  271. package/dist/components/select/select.d.ts +27 -0
  272. package/dist/components/select/select.d.ts.map +1 -0
  273. package/dist/components/select/select.js +145 -0
  274. package/dist/components/select/select.js.map +1 -0
  275. package/dist/components/select/select.variants.d.ts +18 -0
  276. package/dist/components/select/select.variants.d.ts.map +1 -0
  277. package/dist/components/select/select.variants.js +102 -0
  278. package/dist/components/select/select.variants.js.map +1 -0
  279. package/dist/components/separator/index.d.ts +3 -0
  280. package/dist/components/separator/index.d.ts.map +1 -0
  281. package/dist/components/separator/index.js +15 -0
  282. package/dist/components/separator/index.js.map +1 -0
  283. package/dist/components/separator/separator.d.ts +23 -0
  284. package/dist/components/separator/separator.d.ts.map +1 -0
  285. package/dist/components/separator/separator.js +61 -0
  286. package/dist/components/separator/separator.js.map +1 -0
  287. package/dist/components/separator/separator.variants.d.ts +13 -0
  288. package/dist/components/separator/separator.variants.d.ts.map +1 -0
  289. package/dist/components/separator/separator.variants.js +46 -0
  290. package/dist/components/separator/separator.variants.js.map +1 -0
  291. package/dist/components/sheet/index.d.ts +3 -0
  292. package/dist/components/sheet/index.d.ts.map +1 -0
  293. package/dist/components/sheet/index.js +31 -0
  294. package/dist/components/sheet/index.js.map +1 -0
  295. package/dist/components/sheet/sheet.d.ts +102 -0
  296. package/dist/components/sheet/sheet.d.ts.map +1 -0
  297. package/dist/components/sheet/sheet.js +120 -0
  298. package/dist/components/sheet/sheet.js.map +1 -0
  299. package/dist/components/sheet/sheet.variants.d.ts +15 -0
  300. package/dist/components/sheet/sheet.variants.d.ts.map +1 -0
  301. package/dist/components/sheet/sheet.variants.js +97 -0
  302. package/dist/components/sheet/sheet.variants.js.map +1 -0
  303. package/dist/components/sidebar/index.d.ts +3 -0
  304. package/dist/components/sidebar/index.d.ts.map +1 -0
  305. package/dist/components/sidebar/index.js +43 -0
  306. package/dist/components/sidebar/index.js.map +1 -0
  307. package/dist/components/sidebar/sidebar.d.ts +114 -0
  308. package/dist/components/sidebar/sidebar.d.ts.map +1 -0
  309. package/dist/components/sidebar/sidebar.js +202 -0
  310. package/dist/components/sidebar/sidebar.js.map +1 -0
  311. package/dist/components/sidebar/sidebar.variants.d.ts +19 -0
  312. package/dist/components/sidebar/sidebar.variants.d.ts.map +1 -0
  313. package/dist/components/sidebar/sidebar.variants.js +93 -0
  314. package/dist/components/sidebar/sidebar.variants.js.map +1 -0
  315. package/dist/components/skeleton/index.d.ts +3 -0
  316. package/dist/components/skeleton/index.d.ts.map +1 -0
  317. package/dist/components/skeleton/index.js +15 -0
  318. package/dist/components/skeleton/index.js.map +1 -0
  319. package/dist/components/skeleton/skeleton.d.ts +42 -0
  320. package/dist/components/skeleton/skeleton.d.ts.map +1 -0
  321. package/dist/components/skeleton/skeleton.js +54 -0
  322. package/dist/components/skeleton/skeleton.js.map +1 -0
  323. package/dist/components/skeleton/skeleton.variants.d.ts +9 -0
  324. package/dist/components/skeleton/skeleton.variants.d.ts.map +1 -0
  325. package/dist/components/skeleton/skeleton.variants.js +31 -0
  326. package/dist/components/skeleton/skeleton.variants.js.map +1 -0
  327. package/dist/components/spinner/index.d.ts +3 -0
  328. package/dist/components/spinner/index.d.ts.map +1 -0
  329. package/dist/components/spinner/index.js +13 -0
  330. package/dist/components/spinner/index.js.map +1 -0
  331. package/dist/components/spinner/spinner.d.ts +41 -0
  332. package/dist/components/spinner/spinner.d.ts.map +1 -0
  333. package/dist/components/spinner/spinner.js +48 -0
  334. package/dist/components/spinner/spinner.js.map +1 -0
  335. package/dist/components/spinner/spinner.variants.d.ts +8 -0
  336. package/dist/components/spinner/spinner.variants.d.ts.map +1 -0
  337. package/dist/components/spinner/spinner.variants.js +32 -0
  338. package/dist/components/spinner/spinner.variants.js.map +1 -0
  339. package/dist/components/switch/index.d.ts +3 -0
  340. package/dist/components/switch/index.d.ts.map +1 -0
  341. package/dist/components/switch/index.js +15 -0
  342. package/dist/components/switch/index.js.map +1 -0
  343. package/dist/components/switch/switch.d.ts +20 -0
  344. package/dist/components/switch/switch.d.ts.map +1 -0
  345. package/dist/components/switch/switch.js +107 -0
  346. package/dist/components/switch/switch.js.map +1 -0
  347. package/dist/components/switch/switch.variants.d.ts +14 -0
  348. package/dist/components/switch/switch.variants.d.ts.map +1 -0
  349. package/dist/components/switch/switch.variants.js +69 -0
  350. package/dist/components/switch/switch.variants.js.map +1 -0
  351. package/dist/components/table/index.d.ts +3 -0
  352. package/dist/components/table/index.d.ts.map +1 -0
  353. package/dist/components/table/index.js +51 -0
  354. package/dist/components/table/index.js.map +1 -0
  355. package/dist/components/table/table.d.ts +173 -0
  356. package/dist/components/table/table.d.ts.map +1 -0
  357. package/dist/components/table/table.js +172 -0
  358. package/dist/components/table/table.js.map +1 -0
  359. package/dist/components/table/table.variants.d.ts +39 -0
  360. package/dist/components/table/table.variants.d.ts.map +1 -0
  361. package/dist/components/table/table.variants.js +124 -0
  362. package/dist/components/table/table.variants.js.map +1 -0
  363. package/dist/components/tabs/index.d.ts +3 -0
  364. package/dist/components/tabs/index.d.ts.map +1 -0
  365. package/dist/components/tabs/index.js +21 -0
  366. package/dist/components/tabs/index.js.map +1 -0
  367. package/dist/components/tabs/tabs.d.ts +66 -0
  368. package/dist/components/tabs/tabs.d.ts.map +1 -0
  369. package/dist/components/tabs/tabs.js +81 -0
  370. package/dist/components/tabs/tabs.js.map +1 -0
  371. package/dist/components/tabs/tabs.variants.d.ts +15 -0
  372. package/dist/components/tabs/tabs.variants.d.ts.map +1 -0
  373. package/dist/components/tabs/tabs.variants.js +98 -0
  374. package/dist/components/tabs/tabs.variants.js.map +1 -0
  375. package/dist/components/textarea/index.d.ts +3 -0
  376. package/dist/components/textarea/index.d.ts.map +1 -0
  377. package/dist/components/textarea/index.js +7 -0
  378. package/dist/components/textarea/index.js.map +1 -0
  379. package/dist/components/textarea/textarea.d.ts +18 -0
  380. package/dist/components/textarea/textarea.d.ts.map +1 -0
  381. package/dist/components/textarea/textarea.js +136 -0
  382. package/dist/components/textarea/textarea.js.map +1 -0
  383. package/dist/components/textarea/textarea.variants.d.ts +6 -0
  384. package/dist/components/textarea/textarea.variants.d.ts.map +1 -0
  385. package/dist/components/textarea/textarea.variants.js +53 -0
  386. package/dist/components/textarea/textarea.variants.js.map +1 -0
  387. package/dist/components/toast/index.d.ts +3 -0
  388. package/dist/components/toast/index.d.ts.map +1 -0
  389. package/dist/components/toast/index.js +43 -0
  390. package/dist/components/toast/index.js.map +1 -0
  391. package/dist/components/toast/toast.d.ts +140 -0
  392. package/dist/components/toast/toast.d.ts.map +1 -0
  393. package/dist/components/toast/toast.js +123 -0
  394. package/dist/components/toast/toast.js.map +1 -0
  395. package/dist/components/toast/toast.variants.d.ts +16 -0
  396. package/dist/components/toast/toast.variants.d.ts.map +1 -0
  397. package/dist/components/toast/toast.variants.js +77 -0
  398. package/dist/components/toast/toast.variants.js.map +1 -0
  399. package/dist/components/tooltip/index.d.ts +3 -0
  400. package/dist/components/tooltip/index.d.ts.map +1 -0
  401. package/dist/components/tooltip/index.js +16 -0
  402. package/dist/components/tooltip/index.js.map +1 -0
  403. package/dist/components/tooltip/tooltip.d.ts +81 -0
  404. package/dist/components/tooltip/tooltip.d.ts.map +1 -0
  405. package/dist/components/tooltip/tooltip.js +44 -0
  406. package/dist/components/tooltip/tooltip.js.map +1 -0
  407. package/dist/components/tooltip/tooltip.variants.d.ts +3 -0
  408. package/dist/components/tooltip/tooltip.variants.d.ts.map +1 -0
  409. package/dist/components/tooltip/tooltip.variants.js +7 -0
  410. package/dist/components/tooltip/tooltip.variants.js.map +1 -0
  411. package/dist/components/trust-score/index.d.ts +3 -0
  412. package/dist/components/trust-score/index.d.ts.map +1 -0
  413. package/dist/components/trust-score/index.js +11 -0
  414. package/dist/components/trust-score/index.js.map +1 -0
  415. package/dist/components/trust-score/trust-score.d.ts +100 -0
  416. package/dist/components/trust-score/trust-score.d.ts.map +1 -0
  417. package/dist/components/trust-score/trust-score.js +146 -0
  418. package/dist/components/trust-score/trust-score.js.map +1 -0
  419. package/dist/components/trust-score/trust-score.variants.d.ts +16 -0
  420. package/dist/components/trust-score/trust-score.variants.d.ts.map +1 -0
  421. package/dist/components/trust-score/trust-score.variants.js +50 -0
  422. package/dist/components/trust-score/trust-score.variants.js.map +1 -0
  423. package/dist/components/verified-badge/index.d.ts +3 -0
  424. package/dist/components/verified-badge/index.d.ts.map +1 -0
  425. package/dist/components/verified-badge/index.js +15 -0
  426. package/dist/components/verified-badge/index.js.map +1 -0
  427. package/dist/components/verified-badge/verified-badge.d.ts +55 -0
  428. package/dist/components/verified-badge/verified-badge.d.ts.map +1 -0
  429. package/dist/components/verified-badge/verified-badge.js +67 -0
  430. package/dist/components/verified-badge/verified-badge.js.map +1 -0
  431. package/dist/components/verified-badge/verified-badge.variants.d.ts +11 -0
  432. package/dist/components/verified-badge/verified-badge.variants.d.ts.map +1 -0
  433. package/dist/components/verified-badge/verified-badge.variants.js +45 -0
  434. package/dist/components/verified-badge/verified-badge.variants.js.map +1 -0
  435. package/dist/index.d.ts +39 -0
  436. package/dist/index.d.ts.map +1 -0
  437. package/dist/index.js +322 -0
  438. package/dist/index.js.map +1 -0
  439. package/dist/lib/cn.d.ts +3 -0
  440. package/dist/lib/cn.d.ts.map +1 -0
  441. package/dist/lib/cn.js +24 -0
  442. package/dist/lib/cn.js.map +1 -0
  443. package/package.json +74 -0
@@ -0,0 +1,173 @@
1
+ import * as React from "react";
2
+ import { type TableCellVariantProps } from "./table.variants";
3
+ /** The row density (spec §3): `comfortable` (default) for general reading, `compact` for dense console views. */
4
+ export type TableDensity = "comfortable" | "compact";
5
+ /** The rule treatment (spec §3): row hairlines (`horizontal`, default), `grid` (rows + columns), or `zebra` (alternating tint). */
6
+ export type TableRule = "horizontal" | "grid" | "zebra";
7
+ /** A cell's reported state (spec §3/§4): a status color appears only inside a cell that reports a real state, paired with text. */
8
+ export type TableCellStatus = NonNullable<TableCellVariantProps["status"]>;
9
+ /** A sort direction (spec §4/§7): reflected as `aria-sort` on the header and a non-color caret. */
10
+ export type TableSortDirection = "ascending" | "descending" | "none";
11
+ export interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {
12
+ /** Row density (spec §3). `comfortable` (default) or `compact`. Applies to all cells via context. */
13
+ density?: TableDensity;
14
+ /** Rule treatment (spec §3). `horizontal` (default), `grid`, or `zebra`. Applies to rows/cells via context. */
15
+ rule?: TableRule;
16
+ /**
17
+ * Pin the header row while the body scrolls (spec §3 sticky-header). The header gets the stronger
18
+ * border-strong divider where a heavier separation reads better. Selection and sort are unchanged.
19
+ */
20
+ stickyHeader?: boolean;
21
+ /**
22
+ * The polite live-region message (spec §7/§8, WCAG 4.1.3 Status Messages). When a sort or a filter
23
+ * changes the visible rows, set this to the result so it is announced — for example
24
+ * "Sorted by status, ascending. 42 rows." The visual reorder is not announced on its own, so a
25
+ * silent re-sort breaks §8 ("Don't re-sort silently"). The caller owns the count (mirroring
26
+ * CommandPalette): pass the new string whenever the visible rows change. Rendered into an sr-only
27
+ * `role="status" aria-live="polite"` node, so it reaches assistive tech as text, never color alone.
28
+ */
29
+ announcement?: string;
30
+ }
31
+ /**
32
+ * A Table presents structured data in rows and columns so you can read, compare, and sort records —
33
+ * a list of API keys, verification events, or registered agents (spec §1). It is a SEMANTIC
34
+ * `<table>`: the data has a real row-and-column relationship and the native markup carries that
35
+ * relationship into the accessibility tree (1.3.1), not just the pixels. Reach for a DataGrid when
36
+ * the data needs virtualized rows, in-cell editing, column resizing, or roving-focus cell navigation.
37
+ *
38
+ * Neutrals carry the table — it is a reading surface, not an accent surface (spec §3): most of it is
39
+ * neutral text and hairline borders. A status color appears ONLY inside a cell that reports a real
40
+ * state, paired with text (never a header, a whole row, or a decoration); the brand violet is NEVER
41
+ * a Table variant — the brand is not a status, so it never tints a row, header, sort, or selection
42
+ * (brand != state). For a first-class verified result in a cell, use the VerifiedBadge molecule.
43
+ *
44
+ * Name the table with a `<caption>` (preferred) or `aria-labelledby`/`aria-label`. It owns no
45
+ * keyboard model of its own — focus belongs to the controls it hosts (a sortable header, a row
46
+ * Checkbox, a row action), which keep their native tab stops in reading order (spec §6).
47
+ */
48
+ export declare const Table: React.ForwardRefExoticComponent<TableProps & React.RefAttributes<HTMLTableElement>>;
49
+ export type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;
50
+ /**
51
+ * The table's accessible name (spec §2/§7) — a `<caption>` naming what the data is, for example
52
+ * "Verification events, last 30 days". Prefer it over a detached heading; add `className="sr-only"`
53
+ * to keep the name in the accessibility tree while hiding it visually.
54
+ */
55
+ export declare const TableCaption: React.ForwardRefExoticComponent<TableCaptionProps & React.RefAttributes<HTMLTableCaptionElement>>;
56
+ export type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>;
57
+ /**
58
+ * The `<thead>` holding the column-header row (spec §2). When the table's `stickyHeader` is set, the
59
+ * header pins to the top of the scroll container with the stronger divider (spec §3/§5). The pinning
60
+ * is read from the Table via context, so callers set it once on the Table.
61
+ */
62
+ export declare const TableHeader: React.ForwardRefExoticComponent<TableHeaderProps & React.RefAttributes<HTMLTableSectionElement>>;
63
+ export interface TableBodyProps extends React.HTMLAttributes<HTMLTableSectionElement> {
64
+ /**
65
+ * The body is resolving (spec §4 Loading). Renders `skeletonRows` × `columns` Skeleton cells in the
66
+ * table's own column layout — keeping the header and column widths stable so the table does not
67
+ * reflow when data arrives — and marks the body `aria-busy="true"`. A wait is a plain wait, not
68
+ * theatre: the deliberate verified-check duration is never spent here.
69
+ */
70
+ loading?: boolean;
71
+ /** How many skeleton rows to show while loading (spec §4 Loading). Default `3`. */
72
+ skeletonRows?: number;
73
+ /** How many columns the skeleton rows span, so the placeholder matches the real column layout. Default `1`. */
74
+ columns?: number;
75
+ }
76
+ /**
77
+ * The `<tbody>` holding the data rows (spec §2). In the `zebra` rule it alternates a neutral
78
+ * raised-surface tint on even rows (read from the Table via context). While `loading`, it is
79
+ * `aria-busy` and shows Skeleton rows in the column layout; the skeletons are decorative and the
80
+ * body owns the wait (the Skeleton itself announces nothing, spec §4 Loading / §7).
81
+ */
82
+ export declare const TableBody: React.ForwardRefExoticComponent<TableBodyProps & React.RefAttributes<HTMLTableSectionElement>>;
83
+ export type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;
84
+ /**
85
+ * The `<tfoot>` summary row (spec §2) — a total or an aggregate. It is DATA, not pagination;
86
+ * pagination is a separate Pagination control beside the table.
87
+ */
88
+ export declare const TableFooter: React.ForwardRefExoticComponent<TableFooterProps & React.RefAttributes<HTMLTableSectionElement>>;
89
+ export interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {
90
+ /**
91
+ * A selectable row is currently selected (spec §4 Selected). Sets `aria-selected="true"` and the
92
+ * restrained neutral raised-surface fill. Selection is encoded by the row Checkbox's checked state
93
+ * AND `aria-selected`, never by the fill alone, and NEVER a brand or status tint (brand != state).
94
+ */
95
+ selected?: boolean;
96
+ }
97
+ /**
98
+ * A `<tr>` (spec §2/§4). A body row gets the restrained raised-surface hover fill (an affordance, to
99
+ * track the eye across a wide row — nothing is selected until you act) and, when `selected`, the same
100
+ * neutral fill plus `aria-selected`. The rule treatment (hairline / grid / zebra) is read from the
101
+ * Table via context. Used inside `<thead>`, `<tbody>`, and `<tfoot>`.
102
+ */
103
+ export declare const TableRow: React.ForwardRefExoticComponent<TableRowProps & React.RefAttributes<HTMLTableRowElement>>;
104
+ export interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {
105
+ /**
106
+ * This column can be re-sorted from its header (spec §3 sortable). Renders the header label as a
107
+ * real `<button>` (the control it is) with a direction caret, and reflects `aria-sort` on the
108
+ * `<th>`. Enable per column, not table-wide, so only meaningfully sortable columns advertise it.
109
+ */
110
+ sortable?: boolean;
111
+ /**
112
+ * The current sort direction for this column (spec §4 Sorted), reflected as `aria-sort` on the
113
+ * `<th>` and as the caret glyph. Only one column is the sort column at a time — set `"ascending"`
114
+ * or `"descending"` on it and `"none"` (the default) on the rest.
115
+ */
116
+ sortDirection?: TableSortDirection;
117
+ /** Fired when the sortable header is activated (click / Enter / Space), so the caller re-sorts and updates `sortDirection`. */
118
+ onSort?: () => void;
119
+ /**
120
+ * The column name used in the sort control's accessible name ("Sort by {label}, {direction}"),
121
+ * when it differs from the visible children. Defaults to the children's text.
122
+ */
123
+ sortLabel?: string;
124
+ }
125
+ /**
126
+ * A `<th scope="col">` column header (spec §2/§7). A plain header is a quiet, tracked label in the
127
+ * secondary text color. A `sortable` header wraps that label in a real `<button>` carrying the
128
+ * ghost-action accent, a visible focus ring, the target-size floor, and a direction caret, and the
129
+ * `<th>` reflects `aria-sort` — so sort direction reaches assistive tech as data and never rests on
130
+ * color alone (1.4.1). The sort button's accessible name names the action and the column ("Sort by
131
+ * status, ascending"). Density + grid rule are read from the Table via context.
132
+ */
133
+ export declare const TableHead: React.ForwardRefExoticComponent<TableHeadProps & React.RefAttributes<HTMLTableCellElement>>;
134
+ export type TableRowHeaderProps = React.ThHTMLAttributes<HTMLTableCellElement>;
135
+ /**
136
+ * A `<th scope="row">` row-header cell (spec §2/§7) — the row's natural label (an identifier, a
137
+ * name), tying the row's cells to it. It reads at the same body weight as a data cell but is promoted
138
+ * to a header for the relationship (1.3.1). Density + grid rule are read from the Table via context.
139
+ */
140
+ export declare const TableRowHeader: React.ForwardRefExoticComponent<TableRowHeaderProps & React.RefAttributes<HTMLTableCellElement>>;
141
+ export interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {
142
+ /**
143
+ * The cell reports a real STATE (spec §3/§4): `verified`, `signal`, `caution`, or `critical`. The
144
+ * status color lives in the CELL only (never the row or header), paired with text — so a grayscale
145
+ * reader still reads the state from the words. NEVER a brand token. For a first-class verified
146
+ * result use the VerifiedBadge molecule inside a plain cell, not a hand-tinted cell.
147
+ */
148
+ status?: TableCellStatus;
149
+ /** A numeric cell (spec §4/§5): tabular figures so digits align down the column, end-aligned, in the PRIMARY data text role. */
150
+ numeric?: boolean;
151
+ /** De-emphasized AUXILIARY cell text (spec §5) — a timestamp, a unit. Takes the muted role; independent of `numeric`. */
152
+ auxiliary?: boolean;
153
+ }
154
+ /**
155
+ * A `<td>` data cell (spec §2 cell). Holds text, a number, a Badge, an Avatar, or a small inline
156
+ * control. A plain cell is neutral primary text. A `numeric` cell uses tabular figures and stays in
157
+ * the PRIMARY data text role (the muted role is reserved for `auxiliary` text — a timestamp, a unit —
158
+ * per spec §5); a cell that reports a real state takes a `status` treatment (the status fg paired with
159
+ * text). It is NOT a focus stop — focus belongs to any interactive control inside it (spec §6).
160
+ * Density + grid rule are read from the Table via context.
161
+ */
162
+ export declare const TableCell: React.ForwardRefExoticComponent<TableCellProps & React.RefAttributes<HTMLTableCellElement>>;
163
+ export interface TableEmptyProps extends React.TdHTMLAttributes<HTMLTableCellElement> {
164
+ /** How many columns the empty line spans, so it fills the table's own width (spec §2/§4 Empty). */
165
+ colSpan?: number;
166
+ }
167
+ /**
168
+ * The empty-state row (spec §2/§4 Empty): a single full-width cell stating there is nothing yet and
169
+ * what to do next, in plain words ending in a period. An empty table is NOT an error and never reads
170
+ * as one — no status color. Render it inside the `<tbody>` when there are zero rows after loading.
171
+ */
172
+ export declare const TableEmpty: React.ForwardRefExoticComponent<TableEmptyProps & React.RefAttributes<HTMLTableCellElement>>;
173
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/components/table/table.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,172 @@
1
+ "use client";
2
+ import { jsx, jsxs } from "react/jsx-runtime";
3
+ import * as React from "react";
4
+ import { cn } from "../../lib/cn";
5
+ import { Skeleton } from "../skeleton";
6
+ import {
7
+ tableVariants,
8
+ tableCaptionClass,
9
+ tableHeaderVariants,
10
+ tableBodyVariants,
11
+ tableRowVariants,
12
+ tableCellVariants,
13
+ tableRowHeaderVariants,
14
+ tableHeadVariants,
15
+ tableSortButtonClass,
16
+ tableSortCaretClass,
17
+ tableEmptyClass,
18
+ tableSkeletonCellClass
19
+ } from "./table.variants";
20
+ const TableContext = React.createContext({
21
+ density: "comfortable",
22
+ rule: "horizontal"
23
+ });
24
+ const Table = React.forwardRef(function Table2({ className, density = "comfortable", rule = "horizontal", stickyHeader = false, announcement, children, ...props }, ref) {
25
+ const ctx = React.useMemo(() => ({ density, rule }), [density, rule]);
26
+ const stickyCtx = React.useMemo(() => ({ sticky: stickyHeader }), [stickyHeader]);
27
+ return /* @__PURE__ */ jsx(TableContext.Provider, { value: ctx, children: /* @__PURE__ */ jsxs(TableStickyContext.Provider, { value: stickyCtx, children: [
28
+ /* @__PURE__ */ jsx("table", { ref, className: cn(tableVariants(), className), ...props, children }),
29
+ /* @__PURE__ */ jsx("span", { role: "status", "aria-live": "polite", className: "sr-only", children: announcement })
30
+ ] }) });
31
+ });
32
+ const TableStickyContext = React.createContext({ sticky: false });
33
+ const TableCaption = React.forwardRef(
34
+ function TableCaption2({ className, ...props }, ref) {
35
+ return /* @__PURE__ */ jsx("caption", { ref, className: cn(tableCaptionClass, className), ...props });
36
+ }
37
+ );
38
+ const TableHeader = React.forwardRef(
39
+ function TableHeader2({ className, ...props }, ref) {
40
+ const { sticky } = React.useContext(TableStickyContext);
41
+ return /* @__PURE__ */ jsx("thead", { ref, className: cn(tableHeaderVariants({ sticky }), className), ...props });
42
+ }
43
+ );
44
+ const TableBody = React.forwardRef(
45
+ function TableBody2({ className, loading = false, skeletonRows = 3, columns = 1, children, ...props }, ref) {
46
+ const { rule } = React.useContext(TableContext);
47
+ return /* @__PURE__ */ jsx(
48
+ "tbody",
49
+ {
50
+ ref,
51
+ "aria-busy": loading || void 0,
52
+ className: cn(tableBodyVariants({ rule }), className),
53
+ ...props,
54
+ children: loading ? Array.from({ length: Math.max(1, skeletonRows) }, (_, r) => /* @__PURE__ */ jsx(TableRow, { children: Array.from({ length: Math.max(1, columns) }, (_2, c) => (
55
+ // a placeholder data cell in the column layout; decorative, so the wait is owned by
56
+ // the body's aria-busy, not the skeleton (spec §4 Loading / §7).
57
+ /* @__PURE__ */ jsx("td", { "data-testid": "table-skeleton-cell", className: tableSkeletonCellClass, children: /* @__PURE__ */ jsx(Skeleton, { variant: "text" }) }, c)
58
+ )) }, `skeleton-${r}`)) : children
59
+ }
60
+ );
61
+ }
62
+ );
63
+ const TableFooter = React.forwardRef(
64
+ function TableFooter2({ className, ...props }, ref) {
65
+ return /* @__PURE__ */ jsx("tfoot", { ref, className: cn("border-t border-border-default", className), ...props });
66
+ }
67
+ );
68
+ const TableRow = React.forwardRef(
69
+ function TableRow2({ className, selected = false, ...props }, ref) {
70
+ const { rule } = React.useContext(TableContext);
71
+ return /* @__PURE__ */ jsx(
72
+ "tr",
73
+ {
74
+ ref,
75
+ "aria-selected": selected || void 0,
76
+ className: cn(tableRowVariants({ rule }), className),
77
+ ...props
78
+ }
79
+ );
80
+ }
81
+ );
82
+ function SortCaret({ direction }) {
83
+ return /* @__PURE__ */ jsx(
84
+ "span",
85
+ {
86
+ "data-testid": "table-sort-caret",
87
+ "data-direction": direction,
88
+ "aria-hidden": "true",
89
+ className: tableSortCaretClass,
90
+ children: /* @__PURE__ */ jsx("svg", { viewBox: "0 0 16 16", fill: "none", stroke: "currentColor", strokeWidth: "1.5", focusable: "false", "aria-hidden": "true", children: direction === "ascending" ? /* @__PURE__ */ jsx("path", { d: "M4 10l4-4 4 4", strokeLinecap: "round", strokeLinejoin: "round" }) : direction === "descending" ? /* @__PURE__ */ jsx("path", { d: "M4 6l4 4 4-4", strokeLinecap: "round", strokeLinejoin: "round" }) : (
91
+ // sortable but not the active column: a quiet both-directions glyph
92
+ /* @__PURE__ */ jsx("path", { d: "M5 6.5l3-3 3 3M5 9.5l3 3 3-3", strokeLinecap: "round", strokeLinejoin: "round" })
93
+ ) })
94
+ }
95
+ );
96
+ }
97
+ const NEXT_DIRECTION_WORD = {
98
+ none: "ascending",
99
+ ascending: "descending",
100
+ descending: "ascending"
101
+ };
102
+ const TableHead = React.forwardRef(function TableHead2({ className, sortable = false, sortDirection = "none", onSort, sortLabel, children, ...props }, ref) {
103
+ const { density, rule } = React.useContext(TableContext);
104
+ const ariaSort = sortable ? sortDirection : void 0;
105
+ const label = sortLabel ?? (typeof children === "string" ? children : void 0);
106
+ return /* @__PURE__ */ jsx(
107
+ "th",
108
+ {
109
+ ref,
110
+ scope: "col",
111
+ "aria-sort": ariaSort,
112
+ className: cn(tableHeadVariants({ density, rule }), className),
113
+ ...props,
114
+ children: sortable ? /* @__PURE__ */ jsxs(
115
+ "button",
116
+ {
117
+ type: "button",
118
+ onClick: onSort,
119
+ "aria-label": label ? `Sort by ${label}, ${NEXT_DIRECTION_WORD[sortDirection]}` : void 0,
120
+ className: tableSortButtonClass,
121
+ children: [
122
+ children,
123
+ /* @__PURE__ */ jsx(SortCaret, { direction: sortDirection })
124
+ ]
125
+ }
126
+ ) : children
127
+ }
128
+ );
129
+ });
130
+ const TableRowHeader = React.forwardRef(
131
+ function TableRowHeader2({ className, ...props }, ref) {
132
+ const { density, rule } = React.useContext(TableContext);
133
+ return /* @__PURE__ */ jsx(
134
+ "th",
135
+ {
136
+ ref,
137
+ scope: "row",
138
+ className: cn(tableRowHeaderVariants({ density, rule }), className),
139
+ ...props
140
+ }
141
+ );
142
+ }
143
+ );
144
+ const TableCell = React.forwardRef(function TableCell2({ className, status = "none", numeric = false, auxiliary = false, ...props }, ref) {
145
+ const { density, rule } = React.useContext(TableContext);
146
+ return /* @__PURE__ */ jsx(
147
+ "td",
148
+ {
149
+ ref,
150
+ className: cn(tableCellVariants({ density, rule, numeric, auxiliary, status }), className),
151
+ ...props
152
+ }
153
+ );
154
+ });
155
+ const TableEmpty = React.forwardRef(
156
+ function TableEmpty2({ className, colSpan = 1, children, ...props }, ref) {
157
+ return /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { ref, colSpan, className: cn(tableEmptyClass, className), ...props, children }) });
158
+ }
159
+ );
160
+ export {
161
+ Table,
162
+ TableBody,
163
+ TableCaption,
164
+ TableCell,
165
+ TableEmpty,
166
+ TableFooter,
167
+ TableHead,
168
+ TableHeader,
169
+ TableRow,
170
+ TableRowHeader
171
+ };
172
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/table/table.tsx"],"sourcesContent":["\"use client\";\n\nimport * as React from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { Skeleton } from \"../skeleton\";\nimport {\n tableVariants,\n tableCaptionClass,\n tableHeaderVariants,\n tableBodyVariants,\n tableRowVariants,\n tableCellVariants,\n tableRowHeaderVariants,\n tableHeadVariants,\n tableSortButtonClass,\n tableSortCaretClass,\n tableEmptyClass,\n tableSkeletonCellClass,\n type TableCellVariantProps,\n} from \"./table.variants\";\n\n/** The row density (spec §3): `comfortable` (default) for general reading, `compact` for dense console views. */\nexport type TableDensity = \"comfortable\" | \"compact\";\n/** The rule treatment (spec §3): row hairlines (`horizontal`, default), `grid` (rows + columns), or `zebra` (alternating tint). */\nexport type TableRule = \"horizontal\" | \"grid\" | \"zebra\";\n/** A cell's reported state (spec §3/§4): a status color appears only inside a cell that reports a real state, paired with text. */\nexport type TableCellStatus = NonNullable<TableCellVariantProps[\"status\"]>;\n/** A sort direction (spec §4/§7): reflected as `aria-sort` on the header and a non-color caret. */\nexport type TableSortDirection = \"ascending\" | \"descending\" | \"none\";\n\n// The presentation axes set ONCE on the root <table> travel to every cell via context (the proven\n// Dialog/Sheet/Tabs root-context pattern), so callers set density/rule on the Table and never repeat\n// them on each cell. `sticky` is read by the header. This is why the file is `'use client'` — it\n// uses React context (a hook). No cell roving is wired: a static Table's cells are read, not\n// operated; focus belongs to the interactive controls only (spec §6) — cell-by-cell arrow movement\n// is DataGrid behavior, not Table behavior, so there is no hand-rolled roving layer here.\ntype TableContextValue = { density: TableDensity; rule: TableRule };\nconst TableContext = React.createContext<TableContextValue>({\n density: \"comfortable\",\n rule: \"horizontal\",\n});\n\nexport interface TableProps extends React.TableHTMLAttributes<HTMLTableElement> {\n /** Row density (spec §3). `comfortable` (default) or `compact`. Applies to all cells via context. */\n density?: TableDensity;\n /** Rule treatment (spec §3). `horizontal` (default), `grid`, or `zebra`. Applies to rows/cells via context. */\n rule?: TableRule;\n /**\n * Pin the header row while the body scrolls (spec §3 sticky-header). The header gets the stronger\n * border-strong divider where a heavier separation reads better. Selection and sort are unchanged.\n */\n stickyHeader?: boolean;\n /**\n * The polite live-region message (spec §7/§8, WCAG 4.1.3 Status Messages). When a sort or a filter\n * changes the visible rows, set this to the result so it is announced — for example\n * \"Sorted by status, ascending. 42 rows.\" The visual reorder is not announced on its own, so a\n * silent re-sort breaks §8 (\"Don't re-sort silently\"). The caller owns the count (mirroring\n * CommandPalette): pass the new string whenever the visible rows change. Rendered into an sr-only\n * `role=\"status\" aria-live=\"polite\"` node, so it reaches assistive tech as text, never color alone.\n */\n announcement?: string;\n}\n\n/**\n * A Table presents structured data in rows and columns so you can read, compare, and sort records —\n * a list of API keys, verification events, or registered agents (spec §1). It is a SEMANTIC\n * `<table>`: the data has a real row-and-column relationship and the native markup carries that\n * relationship into the accessibility tree (1.3.1), not just the pixels. Reach for a DataGrid when\n * the data needs virtualized rows, in-cell editing, column resizing, or roving-focus cell navigation.\n *\n * Neutrals carry the table — it is a reading surface, not an accent surface (spec §3): most of it is\n * neutral text and hairline borders. A status color appears ONLY inside a cell that reports a real\n * state, paired with text (never a header, a whole row, or a decoration); the brand violet is NEVER\n * a Table variant — the brand is not a status, so it never tints a row, header, sort, or selection\n * (brand != state). For a first-class verified result in a cell, use the VerifiedBadge molecule.\n *\n * Name the table with a `<caption>` (preferred) or `aria-labelledby`/`aria-label`. It owns no\n * keyboard model of its own — focus belongs to the controls it hosts (a sortable header, a row\n * Checkbox, a row action), which keep their native tab stops in reading order (spec §6).\n */\nexport const Table = React.forwardRef<HTMLTableElement, TableProps>(function Table(\n { className, density = \"comfortable\", rule = \"horizontal\", stickyHeader = false, announcement, children, ...props },\n ref,\n) {\n const ctx = React.useMemo<TableContextValue>(() => ({ density, rule }), [density, rule]);\n // sticky is read by the header through a second, header-only context so the <thead> can pin\n // without the cell context carrying a presentation flag it does not use.\n const stickyCtx = React.useMemo(() => ({ sticky: stickyHeader }), [stickyHeader]);\n return (\n <TableContext.Provider value={ctx}>\n <TableStickyContext.Provider value={stickyCtx}>\n <table ref={ref} className={cn(tableVariants(), className)} {...props}>\n {children}\n </table>\n {/* The polite live region (spec §7/§8, WCAG 4.1.3): the result of a sort or filter — the new\n order and row count — announced as text, since the visual reorder is not announced on its\n own (a silent re-sort is the §8 \"Don't\"). Always present (the live region must exist before\n its text changes to be announced); sr-only so it never paints, and a sibling of the <table>,\n not a child, since a <span> is not valid table content. The caller feeds `announcement`. */}\n <span role=\"status\" aria-live=\"polite\" className=\"sr-only\">\n {announcement}\n </span>\n </TableStickyContext.Provider>\n </TableContext.Provider>\n );\n});\n\nconst TableStickyContext = React.createContext<{ sticky: boolean }>({ sticky: false });\n\nexport type TableCaptionProps = React.HTMLAttributes<HTMLTableCaptionElement>;\n\n/**\n * The table's accessible name (spec §2/§7) — a `<caption>` naming what the data is, for example\n * \"Verification events, last 30 days\". Prefer it over a detached heading; add `className=\"sr-only\"`\n * to keep the name in the accessibility tree while hiding it visually.\n */\nexport const TableCaption = React.forwardRef<HTMLTableCaptionElement, TableCaptionProps>(\n function TableCaption({ className, ...props }, ref) {\n return <caption ref={ref} className={cn(tableCaptionClass, className)} {...props} />;\n },\n);\n\nexport type TableHeaderProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\n/**\n * The `<thead>` holding the column-header row (spec §2). When the table's `stickyHeader` is set, the\n * header pins to the top of the scroll container with the stronger divider (spec §3/§5). The pinning\n * is read from the Table via context, so callers set it once on the Table.\n */\nexport const TableHeader = React.forwardRef<HTMLTableSectionElement, TableHeaderProps>(\n function TableHeader({ className, ...props }, ref) {\n const { sticky } = React.useContext(TableStickyContext);\n return <thead ref={ref} className={cn(tableHeaderVariants({ sticky }), className)} {...props} />;\n },\n);\n\nexport interface TableBodyProps extends React.HTMLAttributes<HTMLTableSectionElement> {\n /**\n * The body is resolving (spec §4 Loading). Renders `skeletonRows` × `columns` Skeleton cells in the\n * table's own column layout — keeping the header and column widths stable so the table does not\n * reflow when data arrives — and marks the body `aria-busy=\"true\"`. A wait is a plain wait, not\n * theatre: the deliberate verified-check duration is never spent here.\n */\n loading?: boolean;\n /** How many skeleton rows to show while loading (spec §4 Loading). Default `3`. */\n skeletonRows?: number;\n /** How many columns the skeleton rows span, so the placeholder matches the real column layout. Default `1`. */\n columns?: number;\n}\n\n/**\n * The `<tbody>` holding the data rows (spec §2). In the `zebra` rule it alternates a neutral\n * raised-surface tint on even rows (read from the Table via context). While `loading`, it is\n * `aria-busy` and shows Skeleton rows in the column layout; the skeletons are decorative and the\n * body owns the wait (the Skeleton itself announces nothing, spec §4 Loading / §7).\n */\nexport const TableBody = React.forwardRef<HTMLTableSectionElement, TableBodyProps>(\n function TableBody({ className, loading = false, skeletonRows = 3, columns = 1, children, ...props }, ref) {\n const { rule } = React.useContext(TableContext);\n return (\n <tbody\n ref={ref}\n aria-busy={loading || undefined}\n className={cn(tableBodyVariants({ rule }), className)}\n {...props}\n >\n {loading\n ? Array.from({ length: Math.max(1, skeletonRows) }, (_, r) => (\n <TableRow key={`skeleton-${r}`}>\n {Array.from({ length: Math.max(1, columns) }, (_, c) => (\n // a placeholder data cell in the column layout; decorative, so the wait is owned by\n // the body's aria-busy, not the skeleton (spec §4 Loading / §7).\n <td key={c} data-testid=\"table-skeleton-cell\" className={tableSkeletonCellClass}>\n <Skeleton variant=\"text\" />\n </td>\n ))}\n </TableRow>\n ))\n : children}\n </tbody>\n );\n },\n);\n\nexport type TableFooterProps = React.HTMLAttributes<HTMLTableSectionElement>;\n\n/**\n * The `<tfoot>` summary row (spec §2) — a total or an aggregate. It is DATA, not pagination;\n * pagination is a separate Pagination control beside the table.\n */\nexport const TableFooter = React.forwardRef<HTMLTableSectionElement, TableFooterProps>(\n function TableFooter({ className, ...props }, ref) {\n return (\n <tfoot ref={ref} className={cn(\"border-t border-border-default\", className)} {...props} />\n );\n },\n);\n\nexport interface TableRowProps extends React.HTMLAttributes<HTMLTableRowElement> {\n /**\n * A selectable row is currently selected (spec §4 Selected). Sets `aria-selected=\"true\"` and the\n * restrained neutral raised-surface fill. Selection is encoded by the row Checkbox's checked state\n * AND `aria-selected`, never by the fill alone, and NEVER a brand or status tint (brand != state).\n */\n selected?: boolean;\n}\n\n/**\n * A `<tr>` (spec §2/§4). A body row gets the restrained raised-surface hover fill (an affordance, to\n * track the eye across a wide row — nothing is selected until you act) and, when `selected`, the same\n * neutral fill plus `aria-selected`. The rule treatment (hairline / grid / zebra) is read from the\n * Table via context. Used inside `<thead>`, `<tbody>`, and `<tfoot>`.\n */\nexport const TableRow = React.forwardRef<HTMLTableRowElement, TableRowProps>(\n function TableRow({ className, selected = false, ...props }, ref) {\n const { rule } = React.useContext(TableContext);\n return (\n <tr\n ref={ref}\n aria-selected={selected || undefined}\n className={cn(tableRowVariants({ rule }), className)}\n {...props}\n />\n );\n },\n);\n\nexport interface TableHeadProps extends React.ThHTMLAttributes<HTMLTableCellElement> {\n /**\n * This column can be re-sorted from its header (spec §3 sortable). Renders the header label as a\n * real `<button>` (the control it is) with a direction caret, and reflects `aria-sort` on the\n * `<th>`. Enable per column, not table-wide, so only meaningfully sortable columns advertise it.\n */\n sortable?: boolean;\n /**\n * The current sort direction for this column (spec §4 Sorted), reflected as `aria-sort` on the\n * `<th>` and as the caret glyph. Only one column is the sort column at a time — set `\"ascending\"`\n * or `\"descending\"` on it and `\"none\"` (the default) on the rest.\n */\n sortDirection?: TableSortDirection;\n /** Fired when the sortable header is activated (click / Enter / Space), so the caller re-sorts and updates `sortDirection`. */\n onSort?: () => void;\n /**\n * The column name used in the sort control's accessible name (\"Sort by {label}, {direction}\"),\n * when it differs from the visible children. Defaults to the children's text.\n */\n sortLabel?: string;\n}\n\n// The direction caret (spec §4 Sorted): decorative — aria-sort on the th + the glyph SHAPE\n// (data-direction) encode the direction, so it never rests on color alone (1.4.1). Inline SVG, no\n// icon dep; it points up for ascending, down for descending, and shows a neutral both-ways glyph\n// when the column is sortable but not the active sort column.\nfunction SortCaret({ direction }: { direction: TableSortDirection }) {\n return (\n <span\n data-testid=\"table-sort-caret\"\n data-direction={direction}\n aria-hidden=\"true\"\n className={tableSortCaretClass}\n >\n <svg viewBox=\"0 0 16 16\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"1.5\" focusable=\"false\" aria-hidden=\"true\">\n {direction === \"ascending\" ? (\n <path d=\"M4 10l4-4 4 4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n ) : direction === \"descending\" ? (\n <path d=\"M4 6l4 4 4-4\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n ) : (\n // sortable but not the active column: a quiet both-directions glyph\n <path d=\"M5 6.5l3-3 3 3M5 9.5l3 3 3-3\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n )}\n </svg>\n </span>\n );\n}\n\nconst NEXT_DIRECTION_WORD: Record<TableSortDirection, string> = {\n none: \"ascending\",\n ascending: \"descending\",\n descending: \"ascending\",\n};\n\n/**\n * A `<th scope=\"col\">` column header (spec §2/§7). A plain header is a quiet, tracked label in the\n * secondary text color. A `sortable` header wraps that label in a real `<button>` carrying the\n * ghost-action accent, a visible focus ring, the target-size floor, and a direction caret, and the\n * `<th>` reflects `aria-sort` — so sort direction reaches assistive tech as data and never rests on\n * color alone (1.4.1). The sort button's accessible name names the action and the column (\"Sort by\n * status, ascending\"). Density + grid rule are read from the Table via context.\n */\nexport const TableHead = React.forwardRef<HTMLTableCellElement, TableHeadProps>(function TableHead(\n { className, sortable = false, sortDirection = \"none\", onSort, sortLabel, children, ...props },\n ref,\n) {\n const { density, rule } = React.useContext(TableContext);\n const ariaSort = sortable ? sortDirection : undefined;\n const label = sortLabel ?? (typeof children === \"string\" ? children : undefined);\n return (\n <th\n ref={ref}\n scope=\"col\"\n // exactly one header carries aria-sort at a time (spec §4 Sorted); the rest are \"none\"/absent\n aria-sort={ariaSort}\n className={cn(tableHeadVariants({ density, rule }), className)}\n {...props}\n >\n {sortable ? (\n <button\n type=\"button\"\n onClick={onSort}\n // the control's name includes the ACTION and the COLUMN, plus the NEXT direction it will\n // sort to — so a screen-reader user knows what activating it does (spec §7). aria-sort on\n // the th already exposes the CURRENT state.\n aria-label={label ? `Sort by ${label}, ${NEXT_DIRECTION_WORD[sortDirection]}` : undefined}\n className={tableSortButtonClass}\n >\n {children}\n <SortCaret direction={sortDirection} />\n </button>\n ) : (\n children\n )}\n </th>\n );\n});\n\nexport type TableRowHeaderProps = React.ThHTMLAttributes<HTMLTableCellElement>;\n\n/**\n * A `<th scope=\"row\">` row-header cell (spec §2/§7) — the row's natural label (an identifier, a\n * name), tying the row's cells to it. It reads at the same body weight as a data cell but is promoted\n * to a header for the relationship (1.3.1). Density + grid rule are read from the Table via context.\n */\nexport const TableRowHeader = React.forwardRef<HTMLTableCellElement, TableRowHeaderProps>(\n function TableRowHeader({ className, ...props }, ref) {\n const { density, rule } = React.useContext(TableContext);\n return (\n <th\n ref={ref}\n scope=\"row\"\n className={cn(tableRowHeaderVariants({ density, rule }), className)}\n {...props}\n />\n );\n },\n);\n\nexport interface TableCellProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n /**\n * The cell reports a real STATE (spec §3/§4): `verified`, `signal`, `caution`, or `critical`. The\n * status color lives in the CELL only (never the row or header), paired with text — so a grayscale\n * reader still reads the state from the words. NEVER a brand token. For a first-class verified\n * result use the VerifiedBadge molecule inside a plain cell, not a hand-tinted cell.\n */\n status?: TableCellStatus;\n /** A numeric cell (spec §4/§5): tabular figures so digits align down the column, end-aligned, in the PRIMARY data text role. */\n numeric?: boolean;\n /** De-emphasized AUXILIARY cell text (spec §5) — a timestamp, a unit. Takes the muted role; independent of `numeric`. */\n auxiliary?: boolean;\n}\n\n/**\n * A `<td>` data cell (spec §2 cell). Holds text, a number, a Badge, an Avatar, or a small inline\n * control. A plain cell is neutral primary text. A `numeric` cell uses tabular figures and stays in\n * the PRIMARY data text role (the muted role is reserved for `auxiliary` text — a timestamp, a unit —\n * per spec §5); a cell that reports a real state takes a `status` treatment (the status fg paired with\n * text). It is NOT a focus stop — focus belongs to any interactive control inside it (spec §6).\n * Density + grid rule are read from the Table via context.\n */\nexport const TableCell = React.forwardRef<HTMLTableCellElement, TableCellProps>(function TableCell(\n { className, status = \"none\", numeric = false, auxiliary = false, ...props },\n ref,\n) {\n const { density, rule } = React.useContext(TableContext);\n return (\n <td\n ref={ref}\n className={cn(tableCellVariants({ density, rule, numeric, auxiliary, status }), className)}\n {...props}\n />\n );\n});\n\nexport interface TableEmptyProps extends React.TdHTMLAttributes<HTMLTableCellElement> {\n /** How many columns the empty line spans, so it fills the table's own width (spec §2/§4 Empty). */\n colSpan?: number;\n}\n\n/**\n * The empty-state row (spec §2/§4 Empty): a single full-width cell stating there is nothing yet and\n * what to do next, in plain words ending in a period. An empty table is NOT an error and never reads\n * as one — no status color. Render it inside the `<tbody>` when there are zero rows after loading.\n */\nexport const TableEmpty = React.forwardRef<HTMLTableCellElement, TableEmptyProps>(\n function TableEmpty({ className, colSpan = 1, children, ...props }, ref) {\n return (\n <tr>\n <td ref={ref} colSpan={colSpan} className={cn(tableEmptyClass, className)} {...props}>\n {children}\n </td>\n </tr>\n );\n },\n);\n"],"mappings":"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","names":["Table","TableCaption","TableHeader","TableBody","_","TableFooter","TableRow","TableHead","TableRowHeader","TableCell","TableEmpty"]}
@@ -0,0 +1,39 @@
1
+ import { type VariantProps } from "class-variance-authority";
2
+ export declare const tableVariants: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
3
+ export type TableVariantProps = VariantProps<typeof tableVariants>;
4
+ export declare const tableCaptionClass = "text-start text-label text-text-secondary mb-(--space-2)";
5
+ export declare const tableHeaderVariants: (props?: ({
6
+ sticky?: boolean | null | undefined;
7
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
8
+ export type TableHeaderVariantProps = VariantProps<typeof tableHeaderVariants>;
9
+ export declare const tableBodyVariants: (props?: ({
10
+ rule?: "grid" | "horizontal" | "zebra" | null | undefined;
11
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
12
+ export type TableBodyVariantProps = VariantProps<typeof tableBodyVariants>;
13
+ export declare const tableRowVariants: (props?: ({
14
+ rule?: "grid" | "horizontal" | "zebra" | null | undefined;
15
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
16
+ export type TableRowVariantProps = VariantProps<typeof tableRowVariants>;
17
+ export declare const tableCellVariants: (props?: ({
18
+ numeric?: boolean | null | undefined;
19
+ auxiliary?: boolean | null | undefined;
20
+ status?: "none" | "verified" | "signal" | "caution" | "critical" | null | undefined;
21
+ density?: "compact" | "comfortable" | null | undefined;
22
+ rule?: "grid" | "horizontal" | "zebra" | null | undefined;
23
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
24
+ export type TableCellVariantProps = VariantProps<typeof tableCellVariants>;
25
+ export declare const tableRowHeaderVariants: (props?: ({
26
+ density?: "compact" | "comfortable" | null | undefined;
27
+ rule?: "grid" | "horizontal" | "zebra" | null | undefined;
28
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
29
+ export type TableRowHeaderVariantProps = VariantProps<typeof tableRowHeaderVariants>;
30
+ export declare const tableHeadVariants: (props?: ({
31
+ density?: "compact" | "comfortable" | null | undefined;
32
+ rule?: "grid" | "horizontal" | "zebra" | null | undefined;
33
+ } & import("class-variance-authority/types").ClassProp) | undefined) => string;
34
+ export type TableHeadVariantProps = VariantProps<typeof tableHeadVariants>;
35
+ export declare const tableSortButtonClass: string;
36
+ export declare const tableSortCaretClass = "inline-flex h-(--size-icon-sm) w-(--size-icon-sm) shrink-0 items-center justify-center";
37
+ export declare const tableEmptyClass = "px-(--space-3) py-(--space-4) text-center text-body text-text-secondary";
38
+ export declare const tableSkeletonCellClass = "px-(--space-3) py-(--space-3)";
39
+ //# sourceMappingURL=table.variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.variants.d.ts","sourceRoot":"","sources":["../../../src/components/table/table.variants.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAclE,eAAO,MAAM,aAAa,oFAGxB,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,YAAY,CAAC,OAAO,aAAa,CAAC,CAAC;AAInE,eAAO,MAAM,iBAAiB,6DAA6D,CAAC;AAM5F,eAAO,MAAM,mBAAmB;;8EAQ9B,CAAC;AAEH,MAAM,MAAM,uBAAuB,GAAG,YAAY,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAQ/E,eAAO,MAAM,iBAAiB;;8EAW5B,CAAC;AAEH,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAU3E,eAAO,MAAM,gBAAgB;;8EAiB5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,YAAY,CAAC,OAAO,gBAAgB,CAAC,CAAC;AA4BzE,eAAO,MAAM,iBAAiB;;;;;;8EAiC7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAK3E,eAAO,MAAM,sBAAsB;;;8EAMlC,CAAC;AAEF,MAAM,MAAM,0BAA0B,GAAG,YAAY,CAAC,OAAO,sBAAsB,CAAC,CAAC;AAKrF,eAAO,MAAM,iBAAiB;;;8EAM7B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG,YAAY,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAU3E,eAAO,MAAM,oBAAoB,QAOgE,CAAC;AAKlG,eAAO,MAAM,mBAAmB,2FAC0D,CAAC;AAI3F,eAAO,MAAM,eAAe,4EAC+C,CAAC;AAM5E,eAAO,MAAM,sBAAsB,kCAAkC,CAAC"}
@@ -0,0 +1,124 @@
1
+ import { cva } from "class-variance-authority";
2
+ const tableVariants = cva([
3
+ "w-full border-collapse text-start",
4
+ "bg-surface-canvas text-body text-text-primary"
5
+ ]);
6
+ const tableCaptionClass = "text-start text-label text-text-secondary mb-(--space-2)";
7
+ const tableHeaderVariants = cva("border-b border-border-default", {
8
+ variants: {
9
+ sticky: {
10
+ true: "sticky top-0 z-(--z-index-sticky) bg-surface-canvas border-b-border-strong",
11
+ false: ""
12
+ }
13
+ },
14
+ defaultVariants: { sticky: false }
15
+ });
16
+ const tableBodyVariants = cva("", {
17
+ variants: {
18
+ rule: {
19
+ // hairlines/grid carry their rules on the rows + cells, so the body adds nothing
20
+ horizontal: "",
21
+ grid: "",
22
+ // zebra: the neutral raised surface step on even rows (no rules)
23
+ zebra: "[&>tr:nth-child(even)]:bg-surface-raised"
24
+ }
25
+ },
26
+ defaultVariants: { rule: "horizontal" }
27
+ });
28
+ const tableRowVariants = cva(
29
+ [
30
+ "hover:bg-surface-raised",
31
+ "aria-selected:bg-surface-raised",
32
+ "transition-colors duration-(--motion-duration-fast) ease-(--motion-easing-verdify)",
33
+ "motion-reduce:duration-(--motion-duration-instant)"
34
+ ],
35
+ {
36
+ variants: {
37
+ rule: {
38
+ horizontal: "border-b border-border-default",
39
+ grid: "border-b border-border-default",
40
+ zebra: ""
41
+ }
42
+ },
43
+ defaultVariants: { rule: "horizontal" }
44
+ }
45
+ );
46
+ const cellPaddingVariants = {
47
+ density: {
48
+ comfortable: "py-(--space-3)",
49
+ compact: "py-(--space-1)"
50
+ },
51
+ rule: {
52
+ horizontal: "",
53
+ // a logical column rule on each cell, for a wide numeric table's column guide (spec §3 grid)
54
+ grid: "border-e border-border-default last:border-e-0",
55
+ zebra: ""
56
+ }
57
+ };
58
+ const tableCellVariants = cva(
59
+ ["px-(--space-3) align-middle text-start text-body text-text-primary"],
60
+ {
61
+ variants: {
62
+ ...cellPaddingVariants,
63
+ numeric: {
64
+ // tabular figures + end-aligned numbers down the column — primary data text, not muted
65
+ true: "text-end tabular-nums",
66
+ false: ""
67
+ },
68
+ auxiliary: {
69
+ // de-emphasized auxiliary cell text — a timestamp, a unit (spec §5 --color-text-muted)
70
+ true: "text-text-muted",
71
+ false: ""
72
+ },
73
+ status: {
74
+ none: "",
75
+ // each status is the fg only, paired with the cell's text — the cell's words carry the
76
+ // meaning, the fg reinforces it (spec §3/§5); never a saturated -bg fill, never the brand
77
+ verified: "text-status-verified-fg",
78
+ signal: "text-status-signal-fg",
79
+ caution: "text-status-caution-fg",
80
+ critical: "text-status-critical-fg"
81
+ }
82
+ },
83
+ defaultVariants: {
84
+ density: "comfortable",
85
+ rule: "horizontal",
86
+ numeric: false,
87
+ auxiliary: false,
88
+ status: "none"
89
+ }
90
+ }
91
+ );
92
+ const tableRowHeaderVariants = cva(
93
+ ["px-(--space-3) align-middle text-start font-normal text-body text-text-primary"],
94
+ {
95
+ variants: { ...cellPaddingVariants },
96
+ defaultVariants: { density: "comfortable", rule: "horizontal" }
97
+ }
98
+ );
99
+ const tableHeadVariants = cva(
100
+ ["px-(--space-3) align-middle text-start text-label text-text-secondary"],
101
+ {
102
+ variants: { ...cellPaddingVariants },
103
+ defaultVariants: { density: "comfortable", rule: "horizontal" }
104
+ }
105
+ );
106
+ const tableSortButtonClass = "inline-flex items-center gap-(--space-1) -mx-(--space-1) px-(--space-1) rounded-(--radius-sm) text-label text-action-ghost-fg cursor-pointer select-none hover:bg-action-ghost-bg-hover transition-colors duration-(--motion-duration-fast) ease-(--motion-easing-verdify) motion-reduce:duration-(--motion-duration-instant) min-h-(--size-target-mobile) sm:min-h-(--size-target-desktop) outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2";
107
+ const tableSortCaretClass = "inline-flex h-(--size-icon-sm) w-(--size-icon-sm) shrink-0 items-center justify-center";
108
+ const tableEmptyClass = "px-(--space-3) py-(--space-4) text-center text-body text-text-secondary";
109
+ const tableSkeletonCellClass = "px-(--space-3) py-(--space-3)";
110
+ export {
111
+ tableBodyVariants,
112
+ tableCaptionClass,
113
+ tableCellVariants,
114
+ tableEmptyClass,
115
+ tableHeadVariants,
116
+ tableHeaderVariants,
117
+ tableRowHeaderVariants,
118
+ tableRowVariants,
119
+ tableSkeletonCellClass,
120
+ tableSortButtonClass,
121
+ tableSortCaretClass,
122
+ tableVariants
123
+ };
124
+ //# sourceMappingURL=table.variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/components/table/table.variants.ts"],"sourcesContent":["import { cva, type VariantProps } from \"class-variance-authority\";\n\n// A Table presents structured data in rows and columns (spec §1). Neutrals carry the table —\n// restraint over volume (spec §3): it is a READING surface, not an accent surface. It paints from\n// the surface, text, and border roles only; it reaches the --color-action-* tier ONLY for the\n// controls it hosts (a sortable header's ghost accent + focus affordances) and the --color-status-*\n// tier ONLY for a cell that reports a real state, paired with text — never for a row, a header, or\n// a selected state, and NEVER a brand token at all (brand != state, G-U2). The status meaning lives\n// in the cell's words + the status fg, so a grayscale or color-blind reader still reads it (1.4.1).\n\n// The <table> container (spec §2): the neutral canvas surface and the default cell text role. It\n// collapses its borders so the row/column hairline rules read as single lines, and aligns text on\n// the logical start edge so it mirrors under dir=\"rtl\" (G-U6). The table NEVER wears the brand\n// violet or a status fill (spec §3/§8) — those belong to the controls and badges inside cells.\nexport const tableVariants = cva([\n \"w-full border-collapse text-start\",\n \"bg-surface-canvas text-body text-text-primary\",\n]);\n\nexport type TableVariantProps = VariantProps<typeof tableVariants>;\n\n// The <caption> (spec §2/§7): the table's accessible name, in the secondary text color at the\n// label type role. A reading caption, not an accent — never the brand or a status color.\nexport const tableCaptionClass = \"text-start text-label text-text-secondary mb-(--space-2)\";\n\n// The <thead> (spec §2). The header divider is a hairline by default; on a sticky-header table the\n// header pins to the top of the scroll container and the divider strengthens to border-strong,\n// where a heavier separation reads better as the body scrolls under it (spec §4/§5). z on the\n// sticky layer so a scrolled body cell never paints over the pinned header.\nexport const tableHeaderVariants = cva(\"border-b border-border-default\", {\n variants: {\n sticky: {\n true: \"sticky top-0 z-(--z-index-sticky) bg-surface-canvas border-b-border-strong\",\n false: \"\",\n },\n },\n defaultVariants: { sticky: false },\n});\n\nexport type TableHeaderVariantProps = VariantProps<typeof tableHeaderVariants>;\n\n// The <tbody> (spec §3 rule). The `zebra` rule replaces row hairlines with an alternating NEUTRAL\n// surface step on even rows, for a long table — the tint is a surface step, NEVER a status or brand\n// color (spec §3/§8). The arbitrary selector `[&>tr:nth-child(even)]` is a SELECTOR (its body\n// starts with `&`, not a raw value or a bare `--token`), so it is gate-legitimate, not an arbitrary\n// VALUE. While loading, the body is aria-busy (set on the element, not bound here) and shows\n// skeleton rows in the column layout (spec §4 Loading).\nexport const tableBodyVariants = cva(\"\", {\n variants: {\n rule: {\n // hairlines/grid carry their rules on the rows + cells, so the body adds nothing\n horizontal: \"\",\n grid: \"\",\n // zebra: the neutral raised surface step on even rows (no rules)\n zebra: \"[&>tr:nth-child(even)]:bg-surface-raised\",\n },\n },\n defaultVariants: { rule: \"horizontal\" },\n});\n\nexport type TableBodyVariantProps = VariantProps<typeof tableBodyVariants>;\n\n// A <tr> body row (spec §4 Default/Hover/Selected). RESTING: no fill, on the canvas. HOVER: a\n// restrained raised-surface fill to track the eye across a wide row — an AFFORDANCE, not a\n// selection (nothing is selected until you act, spec §4 Hover). SELECTED (aria-selected): the same\n// restrained raised-surface fill, encoded by the Checkbox state + aria-selected, NEVER a brand or\n// status tint (brand != state, G-U2) — so a grayscale reader reads selection from the checkbox, not\n// the fill. Motion is the fast token transition on the verdify easing, instant under reduced motion\n// — never the 350ms VerifiedBadge-only theatre (a row hover/select is a plain transition, G-U3).\n// The `zebra` rule turns off the per-row hairline; `horizontal`/`grid` keep the bottom hairline.\nexport const tableRowVariants = cva(\n [\n \"hover:bg-surface-raised\",\n \"aria-selected:bg-surface-raised\",\n \"transition-colors duration-(--motion-duration-fast) ease-(--motion-easing-verdify)\",\n \"motion-reduce:duration-(--motion-duration-instant)\",\n ],\n {\n variants: {\n rule: {\n horizontal: \"border-b border-border-default\",\n grid: \"border-b border-border-default\",\n zebra: \"\",\n },\n },\n defaultVariants: { rule: \"horizontal\" },\n },\n);\n\nexport type TableRowVariantProps = VariantProps<typeof tableRowVariants>;\n\n// The shared cell padding by density (spec §3 density / §5 --space-*). Density tightens the VERTICAL\n// padding only, ABOVE the a11y floor — the row controls keep their own --size-target-* floor (DEC-B:\n// never a fixed height below the floor). The grid rule adds a logical inline-end column rule so it\n// mirrors under dir=\"rtl\" (G-U6). Horizontal inline padding is constant.\nconst cellPaddingVariants = {\n density: {\n comfortable: \"py-(--space-3)\",\n compact: \"py-(--space-1)\",\n },\n rule: {\n horizontal: \"\",\n // a logical column rule on each cell, for a wide numeric table's column guide (spec §3 grid)\n grid: \"border-e border-border-default last:border-e-0\",\n zebra: \"\",\n },\n} as const;\n\n// A <td> data cell (spec §2 cell, §4/§5). Default: the primary text color at the body type role.\n// A `numeric` cell uses TABULAR figures so digits align down the column and end-aligns them (spec §4\n// Default/§5) — numeric DATA is primary text, NOT muted (spec §4 assigns cell text the primary role;\n// the muted role is reserved by spec §5 for de-emphasized AUXILIARY text, a timestamp or a unit). An\n// `auxiliary` cell takes the muted role explicitly (spec §5 --color-text-muted), independent of\n// `numeric`. A cell that reports a real STATE carries the status fg paired with text — the status\n// color lives in the CELL only, never the row or header (spec §3), and NEVER a brand token (brand !=\n// state, G-U2). status-*-bg is the one neutral raised surface, so meaning is carried by the fg + the\n// cell's words, not a saturated fill.\nexport const tableCellVariants = cva(\n [\"px-(--space-3) align-middle text-start text-body text-text-primary\"],\n {\n variants: {\n ...cellPaddingVariants,\n numeric: {\n // tabular figures + end-aligned numbers down the column — primary data text, not muted\n true: \"text-end tabular-nums\",\n false: \"\",\n },\n auxiliary: {\n // de-emphasized auxiliary cell text — a timestamp, a unit (spec §5 --color-text-muted)\n true: \"text-text-muted\",\n false: \"\",\n },\n status: {\n none: \"\",\n // each status is the fg only, paired with the cell's text — the cell's words carry the\n // meaning, the fg reinforces it (spec §3/§5); never a saturated -bg fill, never the brand\n verified: \"text-status-verified-fg\",\n signal: \"text-status-signal-fg\",\n caution: \"text-status-caution-fg\",\n critical: \"text-status-critical-fg\",\n },\n },\n defaultVariants: {\n density: \"comfortable\",\n rule: \"horizontal\",\n numeric: false,\n auxiliary: false,\n status: \"none\",\n },\n },\n);\n\nexport type TableCellVariantProps = VariantProps<typeof tableCellVariants>;\n\n// A <th scope=\"row\"> row-header cell (spec §2/§7): the row's natural label (an identifier, a name),\n// tying its cells to the row. The primary text color at the body type role — the same reading weight\n// as a data cell, just promoted to a header for the relationship (1.3.1). Density + grid rule apply.\nexport const tableRowHeaderVariants = cva(\n [\"px-(--space-3) align-middle text-start font-normal text-body text-text-primary\"],\n {\n variants: { ...cellPaddingVariants },\n defaultVariants: { density: \"comfortable\", rule: \"horizontal\" },\n },\n);\n\nexport type TableRowHeaderVariantProps = VariantProps<typeof tableRowHeaderVariants>;\n\n// A <th scope=\"col\"> column header (spec §2/§4/§5). The header LABEL is the SECONDARY text color at\n// the label type role (the quiet, tracked column label), on the canvas — a header NEVER wears a\n// status or brand tint (spec §3/§8). Density + grid rule apply to the cell padding.\nexport const tableHeadVariants = cva(\n [\"px-(--space-3) align-middle text-start text-label text-text-secondary\"],\n {\n variants: { ...cellPaddingVariants },\n defaultVariants: { density: \"comfortable\", rule: \"horizontal\" },\n },\n);\n\nexport type TableHeadVariantProps = VariantProps<typeof tableHeadVariants>;\n\n// The SORTABLE-header control (spec §2/§4/§6/§7): a real <button> inside the <th>, so it reads as\n// the control it is and re-sorts on Enter/Space. It is the GHOST action accent — the label + caret\n// in the ghost fg with the restrained ghost hover fill (spec §4 Sortable-header hover / §5) — the\n// action tier is legitimate here because it is a control the table HOSTS, not a row/header tint. It\n// carries the visible 2px focus ring (never removed) and the target-size floor (40px desktop / 44px\n// touch, spec §7). Motion is the fast token transition, never the deliberate verified-check theatre\n// (G-U3). aria-sort lives on the parent <th>, and the direction caret encodes direction alongside\n// it so it never rests on color alone (spec §4 Sorted / 1.4.1).\nexport const tableSortButtonClass =\n \"inline-flex items-center gap-(--space-1) -mx-(--space-1) px-(--space-1) rounded-(--radius-sm) \" +\n \"text-label text-action-ghost-fg cursor-pointer select-none \" +\n \"hover:bg-action-ghost-bg-hover \" +\n \"transition-colors duration-(--motion-duration-fast) ease-(--motion-easing-verdify) \" +\n \"motion-reduce:duration-(--motion-duration-instant) \" +\n \"min-h-(--size-target-mobile) sm:min-h-(--size-target-desktop) \" +\n \"outline-none focus-visible:ring-2 focus-visible:ring-border-focus focus-visible:ring-offset-2\";\n\n// The sort-direction caret (spec §4 Sorted / §5): the sm icon role, decorative (the direction is\n// also encoded by aria-sort on the th + the glyph's shape via data-direction, so it never rests on\n// color alone — 1.4.1). It inherits the ghost accent color from the button.\nexport const tableSortCaretClass =\n \"inline-flex h-(--size-icon-sm) w-(--size-icon-sm) shrink-0 items-center justify-center\";\n\n// The empty-state cell (spec §2/§4 Empty): a plain line spanning the full table width, in the\n// secondary text color — an empty table is not an error and never reads as one (no status color).\nexport const tableEmptyClass =\n \"px-(--space-3) py-(--space-4) text-center text-body text-text-secondary\";\n\n// One skeleton placeholder cell while the body resolves (spec §4 Loading): keeps the column layout\n// stable so the table does not reflow when data arrives. The Skeleton itself is decorative + neutral\n// (it binds no brand/status — that invariant lives in the Skeleton component); this is just the cell\n// padding wrapping it.\nexport const tableSkeletonCellClass = \"px-(--space-3) py-(--space-3)\";\n"],"mappings":"AAAA,SAAS,WAA8B;AAchC,MAAM,gBAAgB,IAAI;AAAA,EAC/B;AAAA,EACA;AACF,CAAC;AAMM,MAAM,oBAAoB;AAM1B,MAAM,sBAAsB,IAAI,kCAAkC;AAAA,EACvE,UAAU;AAAA,IACR,QAAQ;AAAA,MACN,MAAM;AAAA,MACN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,QAAQ,MAAM;AACnC,CAAC;AAUM,MAAM,oBAAoB,IAAI,IAAI;AAAA,EACvC,UAAU;AAAA,IACR,MAAM;AAAA;AAAA,MAEJ,YAAY;AAAA,MACZ,MAAM;AAAA;AAAA,MAEN,OAAO;AAAA,IACT;AAAA,EACF;AAAA,EACA,iBAAiB,EAAE,MAAM,aAAa;AACxC,CAAC;AAYM,MAAM,mBAAmB;AAAA,EAC9B;AAAA,IACE;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AAAA,EACA;AAAA,IACE,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,YAAY;AAAA,QACZ,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,iBAAiB,EAAE,MAAM,aAAa;AAAA,EACxC;AACF;AAQA,MAAM,sBAAsB;AAAA,EAC1B,SAAS;AAAA,IACP,aAAa;AAAA,IACb,SAAS;AAAA,EACX;AAAA,EACA,MAAM;AAAA,IACJ,YAAY;AAAA;AAAA,IAEZ,MAAM;AAAA,IACN,OAAO;AAAA,EACT;AACF;AAWO,MAAM,oBAAoB;AAAA,EAC/B,CAAC,oEAAoE;AAAA,EACrE;AAAA,IACE,UAAU;AAAA,MACR,GAAG;AAAA,MACH,SAAS;AAAA;AAAA,QAEP,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,WAAW;AAAA;AAAA,QAET,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA;AAAA;AAAA,QAGN,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,QACT,UAAU;AAAA,MACZ;AAAA,IACF;AAAA,IACA,iBAAiB;AAAA,MACf,SAAS;AAAA,MACT,MAAM;AAAA,MACN,SAAS;AAAA,MACT,WAAW;AAAA,MACX,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAOO,MAAM,yBAAyB;AAAA,EACpC,CAAC,gFAAgF;AAAA,EACjF;AAAA,IACE,UAAU,EAAE,GAAG,oBAAoB;AAAA,IACnC,iBAAiB,EAAE,SAAS,eAAe,MAAM,aAAa;AAAA,EAChE;AACF;AAOO,MAAM,oBAAoB;AAAA,EAC/B,CAAC,uEAAuE;AAAA,EACxE;AAAA,IACE,UAAU,EAAE,GAAG,oBAAoB;AAAA,IACnC,iBAAiB,EAAE,SAAS,eAAe,MAAM,aAAa;AAAA,EAChE;AACF;AAYO,MAAM,uBACX;AAWK,MAAM,sBACX;AAIK,MAAM,kBACX;AAMK,MAAM,yBAAyB;","names":[]}
@@ -0,0 +1,3 @@
1
+ export { Tabs, TabsList, TabsTab, TabsPanel, type TabsProps, type TabsListProps, type TabsTabProps, type TabsPanelProps, } from "./tabs";
2
+ export { tabsListVariants, tabsTabVariants, tabsPanelVariants, type TabsListVariantProps, type TabsTabVariantProps, type TabsPanelVariantProps, } from "./tabs.variants";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/tabs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,QAAQ,EACR,OAAO,EACP,SAAS,EACT,KAAK,SAAS,EACd,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,QAAQ,CAAC;AAChB,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,iBAAiB,CAAC"}