@giddaa-housing/ui 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (334) hide show
  1. package/README.md +18 -6
  2. package/css/base.css +37 -0
  3. package/css/components.css +135 -0
  4. package/css/generated/shared.css +1 -0
  5. package/css/giddaa.css +402 -0
  6. package/css/preset.css +77 -0
  7. package/css/styles.css +2 -0
  8. package/css/theme.css +255 -0
  9. package/dist/accordion.js +5 -35
  10. package/dist/accordion.js.map +1 -1
  11. package/dist/activity-timeline.d.ts +33 -0
  12. package/dist/activity-timeline.js +212 -0
  13. package/dist/activity-timeline.js.map +1 -0
  14. package/dist/alert.js +5 -35
  15. package/dist/alert.js.map +1 -1
  16. package/dist/auth-layout.d.ts +23 -0
  17. package/dist/auth-layout.js +304 -0
  18. package/dist/auth-layout.js.map +1 -0
  19. package/dist/avatar.js +10 -142
  20. package/dist/avatar.js.map +1 -1
  21. package/dist/badge.d.ts +3 -2
  22. package/dist/badge.js +6 -114
  23. package/dist/badge.js.map +1 -1
  24. package/dist/bar-chart.d.ts +101 -77
  25. package/dist/bar-chart.js +142 -220
  26. package/dist/bar-chart.js.map +1 -1
  27. package/dist/breadcrumb.js +5 -35
  28. package/dist/breadcrumb.js.map +1 -1
  29. package/dist/bullet-chart.js +15 -48
  30. package/dist/bullet-chart.js.map +1 -1
  31. package/dist/button-group.js +14 -90
  32. package/dist/button-group.js.map +1 -1
  33. package/dist/button.d.ts +5 -5
  34. package/dist/button.js +7 -140
  35. package/dist/button.js.map +1 -1
  36. package/dist/calendar.js +12 -287
  37. package/dist/calendar.js.map +1 -1
  38. package/dist/card.js +5 -35
  39. package/dist/card.js.map +1 -1
  40. package/dist/carousel.js +12 -386
  41. package/dist/carousel.js.map +1 -1
  42. package/dist/chart.js +16 -480
  43. package/dist/chart.js.map +1 -1
  44. package/dist/checkbox.d.ts +1 -1
  45. package/dist/checkbox.js +13 -48
  46. package/dist/checkbox.js.map +1 -1
  47. package/dist/chunk-322YCNVL.js +278 -0
  48. package/dist/chunk-322YCNVL.js.map +1 -0
  49. package/dist/chunk-3ACQVT7A.js +25 -0
  50. package/dist/chunk-3ACQVT7A.js.map +1 -0
  51. package/dist/chunk-3T65TLJX.js +334 -0
  52. package/dist/chunk-3T65TLJX.js.map +1 -0
  53. package/dist/chunk-6ZSGQHH2.js +192 -0
  54. package/dist/chunk-6ZSGQHH2.js.map +1 -0
  55. package/dist/chunk-7TBMLFGW.js +41 -0
  56. package/dist/chunk-7TBMLFGW.js.map +1 -0
  57. package/dist/chunk-B4H6RNDH.js +135 -0
  58. package/dist/chunk-B4H6RNDH.js.map +1 -0
  59. package/dist/chunk-BUXCGZ6X.js +219 -0
  60. package/dist/chunk-BUXCGZ6X.js.map +1 -0
  61. package/dist/chunk-CHII2QHH.js +58 -0
  62. package/dist/chunk-CHII2QHH.js.map +1 -0
  63. package/dist/chunk-DMNOXRRW.js +147 -0
  64. package/dist/chunk-DMNOXRRW.js.map +1 -0
  65. package/dist/chunk-EFSOSSIC.js +130 -0
  66. package/dist/chunk-EFSOSSIC.js.map +1 -0
  67. package/dist/chunk-FZDSVMKY.js +363 -0
  68. package/dist/chunk-FZDSVMKY.js.map +1 -0
  69. package/dist/chunk-GJOFIJS3.js +246 -0
  70. package/dist/chunk-GJOFIJS3.js.map +1 -0
  71. package/dist/chunk-HL3ZSYES.js +23 -0
  72. package/dist/chunk-HL3ZSYES.js.map +1 -0
  73. package/dist/chunk-JVLUBAPB.js +129 -0
  74. package/dist/chunk-JVLUBAPB.js.map +1 -0
  75. package/dist/chunk-KDPYSOYZ.js +64 -0
  76. package/dist/chunk-KDPYSOYZ.js.map +1 -0
  77. package/dist/chunk-KSMDANKI.js +43 -0
  78. package/dist/chunk-KSMDANKI.js.map +1 -0
  79. package/dist/chunk-MEKCCOP5.js +46 -0
  80. package/dist/chunk-MEKCCOP5.js.map +1 -0
  81. package/dist/chunk-NOFXVRWL.js +451 -0
  82. package/dist/chunk-NOFXVRWL.js.map +1 -0
  83. package/dist/chunk-PC5MHNVA.js +171 -0
  84. package/dist/chunk-PC5MHNVA.js.map +1 -0
  85. package/dist/chunk-QKAQZ2GU.js +122 -0
  86. package/dist/chunk-QKAQZ2GU.js.map +1 -0
  87. package/dist/chunk-QZHSHSVV.js +26 -0
  88. package/dist/chunk-QZHSHSVV.js.map +1 -0
  89. package/dist/chunk-RBMK26XD.js +19 -0
  90. package/dist/chunk-RBMK26XD.js.map +1 -0
  91. package/dist/chunk-SFNJGF6M.js +262 -0
  92. package/dist/chunk-SFNJGF6M.js.map +1 -0
  93. package/dist/chunk-UJJNLGTM.js +112 -0
  94. package/dist/chunk-UJJNLGTM.js.map +1 -0
  95. package/dist/chunk-VGR4ZWJ3.js +418 -0
  96. package/dist/chunk-VGR4ZWJ3.js.map +1 -0
  97. package/dist/chunk-XG47P6D4.js +99 -0
  98. package/dist/chunk-XG47P6D4.js.map +1 -0
  99. package/dist/chunk-XZZAHNVM.js +21 -0
  100. package/dist/chunk-XZZAHNVM.js.map +1 -0
  101. package/dist/chunk-Y4TTYVNE.js +36 -0
  102. package/dist/chunk-Y4TTYVNE.js.map +1 -0
  103. package/dist/chunk-YDWIHW6Q.js +69 -0
  104. package/dist/chunk-YDWIHW6Q.js.map +1 -0
  105. package/dist/collapsible.js +6 -35
  106. package/dist/collapsible.js.map +1 -1
  107. package/dist/combobox.js +26 -694
  108. package/dist/combobox.js.map +1 -1
  109. package/dist/cta.d.ts +66 -0
  110. package/dist/cta.js +358 -0
  111. package/dist/cta.js.map +1 -0
  112. package/dist/currency-selector.d.ts +42 -0
  113. package/dist/currency-selector.js +192 -0
  114. package/dist/currency-selector.js.map +1 -0
  115. package/dist/date-picker.d.ts +18 -10
  116. package/dist/date-picker.js +105 -430
  117. package/dist/date-picker.js.map +1 -1
  118. package/dist/details-card.d.ts +19 -0
  119. package/dist/details-card.js +267 -0
  120. package/dist/details-card.js.map +1 -0
  121. package/dist/dialog.js +36 -146
  122. package/dist/dialog.js.map +1 -1
  123. package/dist/dropdown-menu.d.ts +1 -1
  124. package/dist/dropdown-menu.js +20 -358
  125. package/dist/dropdown-menu.js.map +1 -1
  126. package/dist/dropzone.js +13 -40
  127. package/dist/dropzone.js.map +1 -1
  128. package/dist/editorial-card.d.ts +29 -0
  129. package/dist/editorial-card.js +311 -0
  130. package/dist/editorial-card.js.map +1 -0
  131. package/dist/empty-state.js +5 -35
  132. package/dist/empty-state.js.map +1 -1
  133. package/dist/field.js +30 -135
  134. package/dist/field.js.map +1 -1
  135. package/dist/footer.d.ts +47 -0
  136. package/dist/footer.js +430 -0
  137. package/dist/footer.js.map +1 -0
  138. package/dist/funnel-chart.js +42 -415
  139. package/dist/funnel-chart.js.map +1 -1
  140. package/dist/gallery-indicator.d.ts +18 -0
  141. package/dist/gallery-indicator.js +12 -0
  142. package/dist/gallery-indicator.js.map +1 -0
  143. package/dist/heatmap-chart.d.ts +98 -0
  144. package/dist/heatmap-chart.js +248 -0
  145. package/dist/heatmap-chart.js.map +1 -0
  146. package/dist/infotip.d.ts +11 -0
  147. package/dist/infotip.js +66 -0
  148. package/dist/infotip.js.map +1 -0
  149. package/dist/input-group.d.ts +2 -1
  150. package/dist/input-group.js +15 -371
  151. package/dist/input-group.js.map +1 -1
  152. package/dist/input-size-context.js +5 -19
  153. package/dist/input-size-context.js.map +1 -1
  154. package/dist/input.js +6 -78
  155. package/dist/input.js.map +1 -1
  156. package/dist/item.js +5 -35
  157. package/dist/item.js.map +1 -1
  158. package/dist/kpi-card.js +12 -52
  159. package/dist/kpi-card.js.map +1 -1
  160. package/dist/label.js +5 -64
  161. package/dist/label.js.map +1 -1
  162. package/dist/line-chart.js +9 -166
  163. package/dist/line-chart.js.map +1 -1
  164. package/dist/logo.js +4 -141
  165. package/dist/logo.js.map +1 -1
  166. package/dist/map-indicator.d.ts +13 -0
  167. package/dist/map-indicator.js +109 -0
  168. package/dist/map-indicator.js.map +1 -0
  169. package/dist/match.d.ts +16 -0
  170. package/dist/match.js +113 -0
  171. package/dist/match.js.map +1 -0
  172. package/dist/media-gallery-hero.d.ts +60 -0
  173. package/dist/media-gallery-hero.js +362 -0
  174. package/dist/media-gallery-hero.js.map +1 -0
  175. package/dist/media-player.d.ts +60 -0
  176. package/dist/media-player.js +1394 -0
  177. package/dist/media-player.js.map +1 -0
  178. package/dist/number-input.js +30 -325
  179. package/dist/number-input.js.map +1 -1
  180. package/dist/page-header.js +4 -32
  181. package/dist/page-header.js.map +1 -1
  182. package/dist/pagination.d.ts +1 -0
  183. package/dist/pagination.js +27 -161
  184. package/dist/pagination.js.map +1 -1
  185. package/dist/password-input.d.ts +1 -0
  186. package/dist/password-input.js +21 -319
  187. package/dist/password-input.js.map +1 -1
  188. package/dist/phone-input.d.ts +2 -1
  189. package/dist/phone-input.js +148 -359
  190. package/dist/phone-input.js.map +1 -1
  191. package/dist/photo-gallery.d.ts +1 -1
  192. package/dist/photo-gallery.js +97 -393
  193. package/dist/photo-gallery.js.map +1 -1
  194. package/dist/pie-chart.js +17 -52
  195. package/dist/pie-chart.js.map +1 -1
  196. package/dist/popover.js +13 -158
  197. package/dist/popover.js.map +1 -1
  198. package/dist/price-tag.d.ts +35 -0
  199. package/dist/price-tag.js +178 -0
  200. package/dist/price-tag.js.map +1 -0
  201. package/dist/progress.d.ts +5 -2
  202. package/dist/progress.js +14 -303
  203. package/dist/progress.js.map +1 -1
  204. package/dist/property-listing-card.d.ts +32 -0
  205. package/dist/property-listing-card.js +235 -0
  206. package/dist/property-listing-card.js.map +1 -0
  207. package/dist/radar-chart.d.ts +110 -0
  208. package/dist/radar-chart.js +147 -0
  209. package/dist/radar-chart.js.map +1 -0
  210. package/dist/radio-group.js +15 -50
  211. package/dist/radio-group.js.map +1 -1
  212. package/dist/review-block.d.ts +20 -0
  213. package/dist/review-block.js +10 -0
  214. package/dist/review-block.js.map +1 -0
  215. package/dist/rich-text-editor.js +172 -433
  216. package/dist/rich-text-editor.js.map +1 -1
  217. package/dist/scatter-chart.d.ts +142 -0
  218. package/dist/scatter-chart.js +252 -0
  219. package/dist/scatter-chart.js.map +1 -0
  220. package/dist/search-input.d.ts +1 -0
  221. package/dist/search-input.js +22 -320
  222. package/dist/search-input.js.map +1 -1
  223. package/dist/select.js +15 -292
  224. package/dist/select.js.map +1 -1
  225. package/dist/separator.js +5 -68
  226. package/dist/separator.js.map +1 -1
  227. package/dist/sheet.js +14 -271
  228. package/dist/sheet.js.map +1 -1
  229. package/dist/sidebar.d.ts +1 -1
  230. package/dist/sidebar.js +89 -494
  231. package/dist/sidebar.js.map +1 -1
  232. package/dist/size-context.js +5 -17
  233. package/dist/size-context.js.map +1 -1
  234. package/dist/skeleton.js +4 -44
  235. package/dist/skeleton.js.map +1 -1
  236. package/dist/slider.d.ts +28 -0
  237. package/dist/slider.js +152 -0
  238. package/dist/slider.js.map +1 -0
  239. package/dist/sparkline.js +33 -341
  240. package/dist/sparkline.js.map +1 -1
  241. package/dist/stepper.js +5 -35
  242. package/dist/stepper.js.map +1 -1
  243. package/dist/styles.css +9593 -2
  244. package/dist/switch.js +13 -48
  245. package/dist/switch.js.map +1 -1
  246. package/dist/tab-list.js +35 -306
  247. package/dist/tab-list.js.map +1 -1
  248. package/dist/table.js +5 -32
  249. package/dist/table.js.map +1 -1
  250. package/dist/tabs.js +10 -150
  251. package/dist/tabs.js.map +1 -1
  252. package/dist/tag.d.ts +7 -6
  253. package/dist/tag.js +101 -97
  254. package/dist/tag.js.map +1 -1
  255. package/dist/testimonial-block.d.ts +34 -0
  256. package/dist/testimonial-block.js +377 -0
  257. package/dist/testimonial-block.js.map +1 -0
  258. package/dist/textarea.js +6 -73
  259. package/dist/textarea.js.map +1 -1
  260. package/dist/time-picker.js +119 -279
  261. package/dist/time-picker.js.map +1 -1
  262. package/dist/toast.js +27 -132
  263. package/dist/toast.js.map +1 -1
  264. package/dist/tooltip.d.ts +5 -5
  265. package/dist/tooltip.js +7 -90
  266. package/dist/tooltip.js.map +1 -1
  267. package/dist/tree-map.js +41 -414
  268. package/dist/tree-map.js.map +1 -1
  269. package/dist/waterfall-chart.d.ts +129 -0
  270. package/dist/waterfall-chart.js +577 -0
  271. package/dist/waterfall-chart.js.map +1 -0
  272. package/package.json +98 -28
  273. package/dist/base.css +0 -32
  274. package/dist/files/red-hat-display-latin-300-italic.woff +0 -0
  275. package/dist/files/red-hat-display-latin-300-italic.woff2 +0 -0
  276. package/dist/files/red-hat-display-latin-300-normal.woff +0 -0
  277. package/dist/files/red-hat-display-latin-300-normal.woff2 +0 -0
  278. package/dist/files/red-hat-display-latin-400-italic.woff +0 -0
  279. package/dist/files/red-hat-display-latin-400-italic.woff2 +0 -0
  280. package/dist/files/red-hat-display-latin-400-normal.woff +0 -0
  281. package/dist/files/red-hat-display-latin-400-normal.woff2 +0 -0
  282. package/dist/files/red-hat-display-latin-500-italic.woff +0 -0
  283. package/dist/files/red-hat-display-latin-500-italic.woff2 +0 -0
  284. package/dist/files/red-hat-display-latin-500-normal.woff +0 -0
  285. package/dist/files/red-hat-display-latin-500-normal.woff2 +0 -0
  286. package/dist/files/red-hat-display-latin-600-italic.woff +0 -0
  287. package/dist/files/red-hat-display-latin-600-italic.woff2 +0 -0
  288. package/dist/files/red-hat-display-latin-600-normal.woff +0 -0
  289. package/dist/files/red-hat-display-latin-600-normal.woff2 +0 -0
  290. package/dist/files/red-hat-display-latin-700-italic.woff +0 -0
  291. package/dist/files/red-hat-display-latin-700-italic.woff2 +0 -0
  292. package/dist/files/red-hat-display-latin-700-normal.woff +0 -0
  293. package/dist/files/red-hat-display-latin-700-normal.woff2 +0 -0
  294. package/dist/files/red-hat-display-latin-800-italic.woff +0 -0
  295. package/dist/files/red-hat-display-latin-800-italic.woff2 +0 -0
  296. package/dist/files/red-hat-display-latin-800-normal.woff +0 -0
  297. package/dist/files/red-hat-display-latin-800-normal.woff2 +0 -0
  298. package/dist/files/red-hat-display-latin-900-italic.woff +0 -0
  299. package/dist/files/red-hat-display-latin-900-italic.woff2 +0 -0
  300. package/dist/files/red-hat-display-latin-900-normal.woff +0 -0
  301. package/dist/files/red-hat-display-latin-900-normal.woff2 +0 -0
  302. package/dist/files/red-hat-display-latin-ext-300-italic.woff +0 -0
  303. package/dist/files/red-hat-display-latin-ext-300-italic.woff2 +0 -0
  304. package/dist/files/red-hat-display-latin-ext-300-normal.woff +0 -0
  305. package/dist/files/red-hat-display-latin-ext-300-normal.woff2 +0 -0
  306. package/dist/files/red-hat-display-latin-ext-400-italic.woff +0 -0
  307. package/dist/files/red-hat-display-latin-ext-400-italic.woff2 +0 -0
  308. package/dist/files/red-hat-display-latin-ext-400-normal.woff +0 -0
  309. package/dist/files/red-hat-display-latin-ext-400-normal.woff2 +0 -0
  310. package/dist/files/red-hat-display-latin-ext-500-italic.woff +0 -0
  311. package/dist/files/red-hat-display-latin-ext-500-italic.woff2 +0 -0
  312. package/dist/files/red-hat-display-latin-ext-500-normal.woff +0 -0
  313. package/dist/files/red-hat-display-latin-ext-500-normal.woff2 +0 -0
  314. package/dist/files/red-hat-display-latin-ext-600-italic.woff +0 -0
  315. package/dist/files/red-hat-display-latin-ext-600-italic.woff2 +0 -0
  316. package/dist/files/red-hat-display-latin-ext-600-normal.woff +0 -0
  317. package/dist/files/red-hat-display-latin-ext-600-normal.woff2 +0 -0
  318. package/dist/files/red-hat-display-latin-ext-700-italic.woff +0 -0
  319. package/dist/files/red-hat-display-latin-ext-700-italic.woff2 +0 -0
  320. package/dist/files/red-hat-display-latin-ext-700-normal.woff +0 -0
  321. package/dist/files/red-hat-display-latin-ext-700-normal.woff2 +0 -0
  322. package/dist/files/red-hat-display-latin-ext-800-italic.woff +0 -0
  323. package/dist/files/red-hat-display-latin-ext-800-italic.woff2 +0 -0
  324. package/dist/files/red-hat-display-latin-ext-800-normal.woff +0 -0
  325. package/dist/files/red-hat-display-latin-ext-800-normal.woff2 +0 -0
  326. package/dist/files/red-hat-display-latin-ext-900-italic.woff +0 -0
  327. package/dist/files/red-hat-display-latin-ext-900-italic.woff2 +0 -0
  328. package/dist/files/red-hat-display-latin-ext-900-normal.woff +0 -0
  329. package/dist/files/red-hat-display-latin-ext-900-normal.woff2 +0 -0
  330. package/dist/index.d.ts +0 -87
  331. package/dist/index.js +0 -10448
  332. package/dist/index.js.map +0 -1
  333. package/dist/red-hat-display.css +0 -2
  334. package/dist/theme/giddaa.css +0 -2
package/dist/table.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/cn.ts","../src/components/ui/table.tsx"],"sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [\n\t\t\t\t{\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t\"gdt-display\",\n\t\t\t\t\t\t\"gdt-h1\",\n\t\t\t\t\t\t\"gdt-h2\",\n\t\t\t\t\t\t\"gdt-h3\",\n\t\t\t\t\t\t\"gdt-h4\",\n\t\t\t\t\t\t\"gdt-h5\",\n\t\t\t\t\t\t\"gdt-xl\",\n\t\t\t\t\t\t\"gdt-lg\",\n\t\t\t\t\t\t\"gdt-md\",\n\t\t\t\t\t\t\"gdt-sm\",\n\t\t\t\t\t\t\"gdt-xs\",\n\t\t\t\t\t\t\"gdt-subtext\",\n\t\t\t\t\t\t\"gdt-capitalized\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n});\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport type * as React from \"react\";\n\nimport { cn } from \"../../lib/cn\";\n\n/**\n * Outer card wrapper.\n *\n * Tokens: bg-surface-overlay (container fill), border-line (container border).\n * Pass `containerClassName` to override scroll, sizing, or rounding for\n * individual call-sites (e.g. the data-table's max-height + rounded-[20px]).\n */\nfunction Table({\n\tclassName,\n\tcontainerClassName,\n\t...props\n}: React.ComponentProps<\"table\"> & { containerClassName?: string }) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"table-container\"\n\t\t\tclassName={cn(\n\t\t\t\t\"relative w-full overflow-x-auto rounded-xl border border-line bg-surface-overlay\",\n\t\t\t\tcontainerClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<table\n\t\t\t\tdata-slot=\"table\"\n\t\t\t\tclassName={cn(\"min-w-full caption-bottom\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\n/**\n * Header band (thead).\n *\n * Token: bg-surface-raised (header fill).\n * Add `sticky` to pin the header and show Shadow-2 elevation while scrolled.\n */\nfunction TableHeader({\n\tclassName,\n\tsticky = false,\n\t...props\n}: React.ComponentProps<\"thead\"> & { sticky?: boolean }) {\n\treturn (\n\t\t<thead\n\t\t\tdata-slot=\"table-header\"\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-surface-raised\",\n\t\t\t\tsticky && \"sticky top-0 z-2 shadow-(--elevation-e2-shadow)\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n\treturn (\n\t\t<tbody\n\t\t\tdata-slot=\"table-body\"\n\t\t\tclassName={cn(\"[&_tr:last-child]:border-0\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Footer band (tfoot).\n *\n * Shares the same raised surface as the header.\n */\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n\treturn (\n\t\t<tfoot\n\t\t\tdata-slot=\"table-footer\"\n\t\t\tclassName={cn(\n\t\t\t\t\"border-t border-line bg-surface-raised font-medium [&>tr]:last:border-b-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Table row (tr).\n *\n * Token: border-line-subtle (row divider). The last body row has no border\n * via the [&_tr:last-child]:border-0 rule on TableBody.\n */\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n\treturn (\n\t\t<tr\n\t\t\tdata-slot=\"table-row\"\n\t\t\tclassName={cn(\n\t\t\t\t\"group border-b border-line-subtle transition-colors\",\n\t\t\t\t\"hover:bg-surface has-aria-expanded:bg-surface\",\n\t\t\t\t\"data-[state=selected]:bg-surface-brand-subtle\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Header cell (th).\n *\n * Tokens: bg-surface-raised (always applied so sticky/pinned th cells correctly\n * cover scrolling content), text-fg-secondary, text-gdt-capitalized + uppercase\n * for the tiny-caps column label style described in the design system.\n */\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n\treturn (\n\t\t<th\n\t\t\tdata-slot=\"table-head\"\n\t\t\tclassName={cn(\n\t\t\t\t\"h-11 px-5 py-3.5 text-left align-middle bg-surface-raised\",\n\t\t\t\t\"text-gdt-capitalized font-bold uppercase tracking-wide text-fg-secondary\",\n\t\t\t\t\"whitespace-nowrap has-[[role=checkbox]]:pr-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Standard body cell (td).\n *\n * Token: text-fg-primary (body cell text), text-gdt-sm.\n * Pass `pinned` when the column is sticky. Pinned cells get an opaque\n * bg-canvas cover so scrolling content doesn't bleed through, and they\n * mirror the parent row's hover/selected states via group variants.\n * Non-pinned cells are left transparent so the parent row's surface shows through.\n */\nfunction TableCell({\n\tclassName,\n\tpinned = false,\n\t...props\n}: React.ComponentProps<\"td\"> & { pinned?: boolean }) {\n\treturn (\n\t\t<td\n\t\t\tdata-slot=\"table-cell\"\n\t\t\tclassName={cn(\n\t\t\t\t\"px-5 py-3.5 align-middle text-gdt-sm text-fg-primary\",\n\t\t\t\t\"whitespace-nowrap\",\n\t\t\t\tpinned &&\n\t\t\t\t\t\"bg-surface-raised group-hover:bg-surface group-data-[state=selected]:bg-surface-brand-subtle\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Formatted cell title, for use within a TableCell\n */\nfunction TableCellTitle({ className, ...props }: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"table-cell-title\"\n\t\t\tclassName={cn(\"text-gdt-sm font-semibold\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Formatted cell caption, for use within a TableCell. Usually for auxiliary info below the title, uses the secondary text token and smaller size.\n */\nfunction TableCellCaption({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"table-cell-caption\"\n\t\t\tclassName={cn(\"text-gdt-xs text-fg-secondary\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Caption — rendered below the table, uses secondary text token.\n */\nfunction TableCaption({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"caption\">) {\n\treturn (\n\t\t<caption\n\t\t\tdata-slot=\"table-caption\"\n\t\t\tclassName={cn(\"mt-4 text-gdt-sm text-fg-secondary\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tTable,\n\tTableHeader,\n\tTableBody,\n\tTableFooter,\n\tTableHead,\n\tTableRow,\n\tTableCell,\n\tTableCellTitle,\n\tTableCellCaption,\n\tTableCaption,\n};\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/table.tsx"],"sourcesContent":["\"use client\";\n\nimport type * as React from \"react\";\n\nimport { cn } from \"./lib/cn\";\n\n/**\n * Outer card wrapper.\n *\n * Tokens: bg-surface-overlay (container fill), border-line (container border).\n * Pass `containerClassName` to override scroll, sizing, or rounding for\n * individual call-sites (e.g. the data-table's max-height + rounded-[20px]).\n */\nfunction Table({\n\tclassName,\n\tcontainerClassName,\n\t...props\n}: React.ComponentProps<\"table\"> & { containerClassName?: string }) {\n\treturn (\n\t\t<div\n\t\t\tdata-slot=\"table-container\"\n\t\t\tclassName={cn(\n\t\t\t\t\"relative w-full overflow-x-auto rounded-xl border border-line bg-surface-overlay\",\n\t\t\t\tcontainerClassName,\n\t\t\t)}\n\t\t>\n\t\t\t<table\n\t\t\t\tdata-slot=\"table\"\n\t\t\t\tclassName={cn(\"min-w-full caption-bottom\", className)}\n\t\t\t\t{...props}\n\t\t\t/>\n\t\t</div>\n\t);\n}\n\n/**\n * Header band (thead).\n *\n * Token: bg-surface-raised (header fill).\n * Add `sticky` to pin the header and show Shadow-2 elevation while scrolled.\n */\nfunction TableHeader({\n\tclassName,\n\tsticky = false,\n\t...props\n}: React.ComponentProps<\"thead\"> & { sticky?: boolean }) {\n\treturn (\n\t\t<thead\n\t\t\tdata-slot=\"table-header\"\n\t\t\tclassName={cn(\n\t\t\t\t\"bg-surface-raised\",\n\t\t\t\tsticky && \"sticky top-0 z-2 shadow-(--elevation-e2-shadow)\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction TableBody({ className, ...props }: React.ComponentProps<\"tbody\">) {\n\treturn (\n\t\t<tbody\n\t\t\tdata-slot=\"table-body\"\n\t\t\tclassName={cn(\"[&_tr:last-child]:border-0\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Footer band (tfoot).\n *\n * Shares the same raised surface as the header.\n */\nfunction TableFooter({ className, ...props }: React.ComponentProps<\"tfoot\">) {\n\treturn (\n\t\t<tfoot\n\t\t\tdata-slot=\"table-footer\"\n\t\t\tclassName={cn(\n\t\t\t\t\"border-t border-line bg-surface-raised font-medium [&>tr]:last:border-b-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Table row (tr).\n *\n * Token: border-line-subtle (row divider). The last body row has no border\n * via the [&_tr:last-child]:border-0 rule on TableBody.\n */\nfunction TableRow({ className, ...props }: React.ComponentProps<\"tr\">) {\n\treturn (\n\t\t<tr\n\t\t\tdata-slot=\"table-row\"\n\t\t\tclassName={cn(\n\t\t\t\t\"group border-b border-line-subtle transition-colors\",\n\t\t\t\t\"hover:bg-surface has-aria-expanded:bg-surface\",\n\t\t\t\t\"data-[state=selected]:bg-surface-brand-subtle\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Header cell (th).\n *\n * Tokens: bg-surface-raised (always applied so sticky/pinned th cells correctly\n * cover scrolling content), text-fg-secondary, text-gdt-capitalized + uppercase\n * for the tiny-caps column label style described in the design system.\n */\nfunction TableHead({ className, ...props }: React.ComponentProps<\"th\">) {\n\treturn (\n\t\t<th\n\t\t\tdata-slot=\"table-head\"\n\t\t\tclassName={cn(\n\t\t\t\t\"h-11 px-5 py-3.5 text-left align-middle bg-surface-raised\",\n\t\t\t\t\"text-gdt-capitalized font-bold uppercase tracking-wide text-fg-secondary\",\n\t\t\t\t\"whitespace-nowrap has-[[role=checkbox]]:pr-0\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Standard body cell (td).\n *\n * Token: text-fg-primary (body cell text), text-gdt-sm.\n * Pass `pinned` when the column is sticky. Pinned cells get an opaque\n * bg-canvas cover so scrolling content doesn't bleed through, and they\n * mirror the parent row's hover/selected states via group variants.\n * Non-pinned cells are left transparent so the parent row's surface shows through.\n */\nfunction TableCell({\n\tclassName,\n\tpinned = false,\n\t...props\n}: React.ComponentProps<\"td\"> & { pinned?: boolean }) {\n\treturn (\n\t\t<td\n\t\t\tdata-slot=\"table-cell\"\n\t\t\tclassName={cn(\n\t\t\t\t\"px-5 py-3.5 align-middle text-gdt-sm text-fg-primary\",\n\t\t\t\t\"whitespace-nowrap\",\n\t\t\t\tpinned &&\n\t\t\t\t\t\"bg-surface-raised group-hover:bg-surface group-data-[state=selected]:bg-surface-brand-subtle\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Formatted cell title, for use within a TableCell\n */\nfunction TableCellTitle({ className, ...props }: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"table-cell-title\"\n\t\t\tclassName={cn(\"text-gdt-sm font-semibold\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Formatted cell caption, for use within a TableCell. Usually for auxiliary info below the title, uses the secondary text token and smaller size.\n */\nfunction TableCellCaption({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"table-cell-caption\"\n\t\t\tclassName={cn(\"text-gdt-xs text-fg-secondary\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\n/**\n * Caption — rendered below the table, uses secondary text token.\n */\nfunction TableCaption({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"caption\">) {\n\treturn (\n\t\t<caption\n\t\t\tdata-slot=\"table-caption\"\n\t\t\tclassName={cn(\"mt-4 text-gdt-sm text-fg-secondary\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tTable,\n\tTableHeader,\n\tTableBody,\n\tTableFooter,\n\tTableHead,\n\tTableRow,\n\tTableCell,\n\tTableCellTitle,\n\tTableCellCaption,\n\tTableCaption,\n};\n"],"mappings":";;;;;;AA0BG;AAbH,SAAS,MAAM;AAAA,EACd;AAAA,EACA;AAAA,EACA,GAAG;AACJ,GAAoE;AACnE,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MACD;AAAA,MAEA;AAAA,QAAC;AAAA;AAAA,UACA,aAAU;AAAA,UACV,WAAW,GAAG,6BAA6B,SAAS;AAAA,UACnD,GAAG;AAAA;AAAA,MACL;AAAA;AAAA,EACD;AAEF;AAQA,SAAS,YAAY;AAAA,EACpB;AAAA,EACA,SAAS;AAAA,EACT,GAAG;AACJ,GAAyD;AACxD,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACV;AAAA,QACA,UAAU;AAAA,QACV;AAAA,MACD;AAAA,MACC,GAAG;AAAA;AAAA,EACL;AAEF;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAkC;AAC1E,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW,GAAG,8BAA8B,SAAS;AAAA,MACpD,GAAG;AAAA;AAAA,EACL;AAEF;AAOA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAAkC;AAC5E,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MACD;AAAA,MACC,GAAG;AAAA;AAAA,EACL;AAEF;AAQA,SAAS,SAAS,EAAE,WAAW,GAAG,MAAM,GAA+B;AACtE,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MACC,GAAG;AAAA;AAAA,EACL;AAEF;AASA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAA+B;AACvE,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MACC,GAAG;AAAA;AAAA,EACL;AAEF;AAWA,SAAS,UAAU;AAAA,EAClB;AAAA,EACA,SAAS;AAAA,EACT,GAAG;AACJ,GAAsD;AACrD,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACV;AAAA,QACA;AAAA,QACA,UACC;AAAA,QACD;AAAA,MACD;AAAA,MACC,GAAG;AAAA;AAAA,EACL;AAEF;AAKA,SAAS,eAAe,EAAE,WAAW,GAAG,MAAM,GAAiC;AAC9E,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW,GAAG,6BAA6B,SAAS;AAAA,MACnD,GAAG;AAAA;AAAA,EACL;AAEF;AAKA,SAAS,iBAAiB;AAAA,EACzB;AAAA,EACA,GAAG;AACJ,GAAiC;AAChC,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW,GAAG,iCAAiC,SAAS;AAAA,MACvD,GAAG;AAAA;AAAA,EACL;AAEF;AAKA,SAAS,aAAa;AAAA,EACrB;AAAA,EACA,GAAG;AACJ,GAAoC;AACnC,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW,GAAG,sCAAsC,SAAS;AAAA,MAC5D,GAAG;AAAA;AAAA,EACL;AAEF;","names":[]}
package/dist/tabs.js CHANGED
@@ -1,153 +1,13 @@
1
- // src/components/ui/tabs.tsx
2
- import { Tabs as TabsPrimitive } from "@base-ui/react/tabs";
3
- import { cva } from "class-variance-authority";
4
-
5
- // src/lib/cn.ts
6
- import { clsx } from "clsx";
7
- import { extendTailwindMerge } from "tailwind-merge";
8
- var twMerge = extendTailwindMerge({
9
- extend: {
10
- classGroups: {
11
- "font-size": [
12
- {
13
- text: [
14
- "gdt-display",
15
- "gdt-h1",
16
- "gdt-h2",
17
- "gdt-h3",
18
- "gdt-h4",
19
- "gdt-h5",
20
- "gdt-xl",
21
- "gdt-lg",
22
- "gdt-md",
23
- "gdt-sm",
24
- "gdt-xs",
25
- "gdt-subtext",
26
- "gdt-capitalized"
27
- ]
28
- }
29
- ]
30
- }
31
- }
32
- });
33
- function cn(...inputs) {
34
- return twMerge(clsx(inputs));
35
- }
36
-
37
- // src/components/ui/tabs.tsx
38
- import { jsx, jsxs } from "react/jsx-runtime";
39
- function resolveTabsListVariant(variant) {
40
- return variant === "default" ? "secondary" : variant === "line" ? "underline" : variant;
41
- }
42
- function Tabs({
43
- className,
44
- orientation = "horizontal",
45
- ...props
46
- }) {
47
- return /* @__PURE__ */ jsx(
48
- TabsPrimitive.Root,
49
- {
50
- "data-slot": "tabs",
51
- "data-orientation": orientation,
52
- className: cn(
53
- "group/tabs flex gap-3 data-[orientation=horizontal]:flex-col",
54
- className
55
- ),
56
- ...props
57
- }
58
- );
59
- }
60
- var tabsListVariants = cva(
61
- "group/tabs-list relative inline-flex w-fit shrink-0 items-center gap-1 text-fg-secondary group-data-[orientation=horizontal]/tabs:border-b group-data-[orientation=horizontal]/tabs:border-line-subtle group-data-[orientation=vertical]/tabs:flex-col group-data-[orientation=vertical]/tabs:border-l group-data-[orientation=vertical]/tabs:border-line-subtle",
62
- {
63
- variants: {
64
- variant: {
65
- underline: "rounded-none bg-transparent p-0",
66
- secondary: "rounded-4xl bg-transparent p-0"
67
- }
68
- },
69
- defaultVariants: {
70
- variant: "underline"
71
- }
72
- }
73
- );
74
- function TabsList({
75
- className,
76
- variant = "underline",
77
- children,
78
- ...props
79
- }) {
80
- const resolvedVariant = resolveTabsListVariant(variant);
81
- return /* @__PURE__ */ jsxs(
82
- TabsPrimitive.List,
83
- {
84
- "data-slot": "tabs-list",
85
- "data-variant": resolvedVariant,
86
- className: cn(tabsListVariants({ variant: resolvedVariant }), className),
87
- ...props,
88
- children: [
89
- children,
90
- /* @__PURE__ */ jsx(
91
- TabsPrimitive.Indicator,
92
- {
93
- className: cn(
94
- "pointer-events-none absolute left-0 top-0 z-0 h-(--active-tab-height) w-(--active-tab-width) translate-x-(--active-tab-left) translate-y-(--active-tab-top) transition-[transform,width,height] duration-200 ease-in-out",
95
- "group-data-[variant=secondary]/tabs-list:hidden",
96
- "group-data-[variant=underline]/tabs-list:rounded-none group-data-[variant=underline]/tabs-list:bg-line-focus group-data-[variant=underline]/tabs-list:shadow-none",
97
- "group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:top-auto group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:bottom-[-1px] group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:h-0.5! group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:translate-y-0",
98
- "group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:left-auto group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:right-[-1px] group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:w-0.5! group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:translate-x-0"
99
- )
100
- }
101
- )
102
- ]
103
- }
104
- );
105
- }
106
- function TabsTrigger({
107
- className,
108
- nativeButton = true,
109
- ...props
110
- }) {
111
- return /* @__PURE__ */ jsx(
112
- TabsPrimitive.Tab,
113
- {
114
- "data-slot": "tabs-trigger",
115
- nativeButton,
116
- className: cn(
117
- "group/tabs-trigger relative inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap border border-transparent font-semibold outline-none transition-[background-color,color,box-shadow] focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4",
118
- "group-data-[variant=underline]/tabs-list:-mb-px group-data-[variant=underline]/tabs-list:rounded-none group-data-[variant=underline]/tabs-list:px-4 group-data-[variant=underline]/tabs-list:py-3 group-data-[variant=underline]/tabs-list:text-gdt-md group-data-[variant=underline]/tabs-list:text-fg-secondary group-data-[variant=underline]/tabs-list:hover:text-fg-primary group-data-[variant=underline]/tabs-list:data-active:text-fg-primary max-sm:group-data-[variant=underline]/tabs-list:px-3 max-sm:group-data-[variant=underline]/tabs-list:py-2.5 max-sm:group-data-[variant=underline]/tabs-list:text-gdt-sm",
119
- "group-data-[variant=secondary]/tabs-list:rounded-4xl group-data-[variant=secondary]/tabs-list:bg-surface-raised group-data-[variant=secondary]/tabs-list:px-4 group-data-[variant=secondary]/tabs-list:py-3 group-data-[variant=secondary]/tabs-list:text-gdt-md group-data-[variant=secondary]/tabs-list:text-fg-secondary group-data-[variant=secondary]/tabs-list:hover:bg-surface group-data-[variant=secondary]/tabs-list:hover:text-fg-primary group-data-[variant=secondary]/tabs-list:data-active:bg-surface-brand group-data-[variant=secondary]/tabs-list:data-active:text-fg-on-brand group-data-[variant=secondary]/tabs-list:data-active:shadow-(--elevation-e1-shadow) group-data-[variant=secondary]/tabs-list:data-active:hover:bg-surface-brand group-data-[variant=secondary]/tabs-list:data-active:hover:text-fg-on-brand max-sm:group-data-[variant=secondary]/tabs-list:px-3 max-sm:group-data-[variant=secondary]/tabs-list:py-2.5 max-sm:group-data-[variant=secondary]/tabs-list:text-gdt-sm",
120
- className
121
- ),
122
- ...props
123
- }
124
- );
125
- }
126
- function TabsCount({ className, ...props }) {
127
- return /* @__PURE__ */ jsx(
128
- "span",
129
- {
130
- "data-slot": "tabs-count",
131
- className: cn(
132
- "inline-flex min-w-5 items-center justify-center rounded-full px-1.5 py-0.5 text-[11px] leading-none font-semibold transition-[background-color,color]",
133
- "group-data-[variant=underline]/tabs-list:bg-surface-raised group-data-[variant=underline]/tabs-list:text-fg-secondary group-data-[variant=underline]/tabs-list:group-data-[active]/tabs-trigger:bg-surface-brand-subtle group-data-[variant=underline]/tabs-list:group-data-[active]/tabs-trigger:text-fg-brand",
134
- "group-data-[variant=secondary]/tabs-list:bg-surface-overlay group-data-[variant=secondary]/tabs-list:text-fg-secondary group-data-[variant=secondary]/tabs-list:group-data-[active]/tabs-trigger:bg-surface-brand-subtle group-data-[variant=secondary]/tabs-list:group-data-[active]/tabs-trigger:text-fg-brand",
135
- className
136
- ),
137
- ...props
138
- }
139
- );
140
- }
141
- function TabsContent({ className, ...props }) {
142
- return /* @__PURE__ */ jsx(
143
- TabsPrimitive.Panel,
144
- {
145
- "data-slot": "tabs-content",
146
- className: cn("flex-1 text-sm outline-none", className),
147
- ...props
148
- }
149
- );
150
- }
1
+ "use client";
2
+ import {
3
+ Tabs,
4
+ TabsContent,
5
+ TabsCount,
6
+ TabsList,
7
+ TabsTrigger,
8
+ tabsListVariants
9
+ } from "./chunk-EFSOSSIC.js";
10
+ import "./chunk-Y4TTYVNE.js";
151
11
  export {
152
12
  Tabs,
153
13
  TabsContent,
package/dist/tabs.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/tabs.tsx","../src/lib/cn.ts"],"sourcesContent":["\"use client\";\n\nimport { Tabs as TabsPrimitive } from \"@base-ui/react/tabs\";\nimport { cva } from \"class-variance-authority\";\nimport type { ComponentPropsWithoutRef } from \"react\";\n\nimport { cn } from \"../../lib/cn\";\n\ntype TabsListVariant = \"default\" | \"line\" | \"secondary\" | \"underline\";\n\nfunction resolveTabsListVariant(variant: TabsListVariant) {\n\treturn variant === \"default\"\n\t\t? \"secondary\"\n\t\t: variant === \"line\"\n\t\t\t? \"underline\"\n\t\t\t: variant;\n}\n\nfunction Tabs({\n\tclassName,\n\torientation = \"horizontal\",\n\t...props\n}: TabsPrimitive.Root.Props) {\n\treturn (\n\t\t<TabsPrimitive.Root\n\t\t\tdata-slot=\"tabs\"\n\t\t\tdata-orientation={orientation}\n\t\t\tclassName={cn(\n\t\t\t\t\"group/tabs flex gap-3 data-[orientation=horizontal]:flex-col\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nconst tabsListVariants = cva(\n\t\"group/tabs-list relative inline-flex w-fit shrink-0 items-center gap-1 text-fg-secondary group-data-[orientation=horizontal]/tabs:border-b group-data-[orientation=horizontal]/tabs:border-line-subtle group-data-[orientation=vertical]/tabs:flex-col group-data-[orientation=vertical]/tabs:border-l group-data-[orientation=vertical]/tabs:border-line-subtle\",\n\t{\n\t\tvariants: {\n\t\t\tvariant: {\n\t\t\t\tunderline: \"rounded-none bg-transparent p-0\",\n\t\t\t\tsecondary: \"rounded-4xl bg-transparent p-0\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tvariant: \"underline\",\n\t\t},\n\t},\n);\n\nfunction TabsList({\n\tclassName,\n\tvariant = \"underline\",\n\tchildren,\n\t...props\n}: TabsPrimitive.List.Props & {\n\tvariant?: TabsListVariant;\n}) {\n\tconst resolvedVariant = resolveTabsListVariant(variant);\n\n\treturn (\n\t\t<TabsPrimitive.List\n\t\t\tdata-slot=\"tabs-list\"\n\t\t\tdata-variant={resolvedVariant}\n\t\t\tclassName={cn(tabsListVariants({ variant: resolvedVariant }), className)}\n\t\t\t{...props}\n\t\t>\n\t\t\t{children}\n\t\t\t<TabsPrimitive.Indicator\n\t\t\t\tclassName={cn(\n\t\t\t\t\t\"pointer-events-none absolute left-0 top-0 z-0 h-(--active-tab-height) w-(--active-tab-width) translate-x-(--active-tab-left) translate-y-(--active-tab-top) transition-[transform,width,height] duration-200 ease-in-out\",\n\t\t\t\t\t\"group-data-[variant=secondary]/tabs-list:hidden\",\n\t\t\t\t\t\"group-data-[variant=underline]/tabs-list:rounded-none group-data-[variant=underline]/tabs-list:bg-line-focus group-data-[variant=underline]/tabs-list:shadow-none\",\n\t\t\t\t\t\"group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:top-auto group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:bottom-[-1px] group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:h-0.5! group-data-[orientation=horizontal]/tabs:group-data-[variant=underline]/tabs-list:translate-y-0\",\n\t\t\t\t\t\"group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:left-auto group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:right-[-1px] group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:w-0.5! group-data-[orientation=vertical]/tabs:group-data-[variant=underline]/tabs-list:translate-x-0\",\n\t\t\t\t)}\n\t\t\t/>\n\t\t</TabsPrimitive.List>\n\t);\n}\n\nfunction TabsTrigger({\n\tclassName,\n\tnativeButton = true,\n\t...props\n}: TabsPrimitive.Tab.Props) {\n\treturn (\n\t\t<TabsPrimitive.Tab\n\t\t\tdata-slot=\"tabs-trigger\"\n\t\t\tnativeButton={nativeButton}\n\t\t\tclassName={cn(\n\t\t\t\t\"group/tabs-trigger relative inline-flex shrink-0 items-center justify-center gap-2 whitespace-nowrap border border-transparent font-semibold outline-none transition-[background-color,color,box-shadow] focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-[orientation=vertical]/tabs:w-full group-data-[orientation=vertical]/tabs:justify-start [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg]:text-current [&_svg:not([class*='size-'])]:size-4\",\n\t\t\t\t\"group-data-[variant=underline]/tabs-list:-mb-px group-data-[variant=underline]/tabs-list:rounded-none group-data-[variant=underline]/tabs-list:px-4 group-data-[variant=underline]/tabs-list:py-3 group-data-[variant=underline]/tabs-list:text-gdt-md group-data-[variant=underline]/tabs-list:text-fg-secondary group-data-[variant=underline]/tabs-list:hover:text-fg-primary group-data-[variant=underline]/tabs-list:data-active:text-fg-primary max-sm:group-data-[variant=underline]/tabs-list:px-3 max-sm:group-data-[variant=underline]/tabs-list:py-2.5 max-sm:group-data-[variant=underline]/tabs-list:text-gdt-sm\",\n\t\t\t\t\"group-data-[variant=secondary]/tabs-list:rounded-4xl group-data-[variant=secondary]/tabs-list:bg-surface-raised group-data-[variant=secondary]/tabs-list:px-4 group-data-[variant=secondary]/tabs-list:py-3 group-data-[variant=secondary]/tabs-list:text-gdt-md group-data-[variant=secondary]/tabs-list:text-fg-secondary group-data-[variant=secondary]/tabs-list:hover:bg-surface group-data-[variant=secondary]/tabs-list:hover:text-fg-primary group-data-[variant=secondary]/tabs-list:data-active:bg-surface-brand group-data-[variant=secondary]/tabs-list:data-active:text-fg-on-brand group-data-[variant=secondary]/tabs-list:data-active:shadow-(--elevation-e1-shadow) group-data-[variant=secondary]/tabs-list:data-active:hover:bg-surface-brand group-data-[variant=secondary]/tabs-list:data-active:hover:text-fg-on-brand max-sm:group-data-[variant=secondary]/tabs-list:px-3 max-sm:group-data-[variant=secondary]/tabs-list:py-2.5 max-sm:group-data-[variant=secondary]/tabs-list:text-gdt-sm\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction TabsCount({ className, ...props }: ComponentPropsWithoutRef<\"span\">) {\n\treturn (\n\t\t<span\n\t\t\tdata-slot=\"tabs-count\"\n\t\t\tclassName={cn(\n\t\t\t\t\"inline-flex min-w-5 items-center justify-center rounded-full px-1.5 py-0.5 text-[11px] leading-none font-semibold transition-[background-color,color]\",\n\t\t\t\t\"group-data-[variant=underline]/tabs-list:bg-surface-raised group-data-[variant=underline]/tabs-list:text-fg-secondary group-data-[variant=underline]/tabs-list:group-data-[active]/tabs-trigger:bg-surface-brand-subtle group-data-[variant=underline]/tabs-list:group-data-[active]/tabs-trigger:text-fg-brand\",\n\t\t\t\t\"group-data-[variant=secondary]/tabs-list:bg-surface-overlay group-data-[variant=secondary]/tabs-list:text-fg-secondary group-data-[variant=secondary]/tabs-list:group-data-[active]/tabs-trigger:bg-surface-brand-subtle group-data-[variant=secondary]/tabs-list:group-data-[active]/tabs-trigger:text-fg-brand\",\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nfunction TabsContent({ className, ...props }: TabsPrimitive.Panel.Props) {\n\treturn (\n\t\t<TabsPrimitive.Panel\n\t\t\tdata-slot=\"tabs-content\"\n\t\t\tclassName={cn(\"flex-1 text-sm outline-none\", className)}\n\t\t\t{...props}\n\t\t/>\n\t);\n}\n\nexport {\n\tTabs,\n\tTabsList,\n\tTabsTrigger,\n\tTabsCount,\n\tTabsContent,\n\ttabsListVariants,\n};\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [\n\t\t\t\t{\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t\"gdt-display\",\n\t\t\t\t\t\t\"gdt-h1\",\n\t\t\t\t\t\t\"gdt-h2\",\n\t\t\t\t\t\t\"gdt-h3\",\n\t\t\t\t\t\t\"gdt-h4\",\n\t\t\t\t\t\t\"gdt-h5\",\n\t\t\t\t\t\t\"gdt-xl\",\n\t\t\t\t\t\t\"gdt-lg\",\n\t\t\t\t\t\t\"gdt-md\",\n\t\t\t\t\t\t\"gdt-sm\",\n\t\t\t\t\t\t\"gdt-xs\",\n\t\t\t\t\t\t\"gdt-subtext\",\n\t\t\t\t\t\t\"gdt-capitalized\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n});\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n"],"mappings":";AAEA,SAAS,QAAQ,qBAAqB;AACtC,SAAS,WAAW;;;ACHpB,SAA0B,YAAY;AACtC,SAAS,2BAA2B;AAEpC,IAAM,UAAU,oBAAoB;AAAA,EACnC,QAAQ;AAAA,IACP,aAAa;AAAA,MACZ,aAAa;AAAA,QACZ;AAAA,UACC,MAAM;AAAA,YACL;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,YACA;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AAAA,EACD;AACD,CAAC;AAEM,SAAS,MAAM,QAAsB;AAC3C,SAAO,QAAQ,KAAK,MAAM,CAAC;AAC5B;;;ADPE,cAsCA,YAtCA;AAdF,SAAS,uBAAuB,SAA0B;AACzD,SAAO,YAAY,YAChB,cACA,YAAY,SACX,cACA;AACL;AAEA,SAAS,KAAK;AAAA,EACb;AAAA,EACA,cAAc;AAAA,EACd,GAAG;AACJ,GAA6B;AAC5B,SACC;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACA,aAAU;AAAA,MACV,oBAAkB;AAAA,MAClB,WAAW;AAAA,QACV;AAAA,QACA;AAAA,MACD;AAAA,MACC,GAAG;AAAA;AAAA,EACL;AAEF;AAEA,IAAM,mBAAmB;AAAA,EACxB;AAAA,EACA;AAAA,IACC,UAAU;AAAA,MACT,SAAS;AAAA,QACR,WAAW;AAAA,QACX,WAAW;AAAA,MACZ;AAAA,IACD;AAAA,IACA,iBAAiB;AAAA,MAChB,SAAS;AAAA,IACV;AAAA,EACD;AACD;AAEA,SAAS,SAAS;AAAA,EACjB;AAAA,EACA,UAAU;AAAA,EACV;AAAA,EACA,GAAG;AACJ,GAEG;AACF,QAAM,kBAAkB,uBAAuB,OAAO;AAEtD,SACC;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACA,aAAU;AAAA,MACV,gBAAc;AAAA,MACd,WAAW,GAAG,iBAAiB,EAAE,SAAS,gBAAgB,CAAC,GAAG,SAAS;AAAA,MACtE,GAAG;AAAA,MAEH;AAAA;AAAA,QACD;AAAA,UAAC,cAAc;AAAA,UAAd;AAAA,YACA,WAAW;AAAA,cACV;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,cACA;AAAA,YACD;AAAA;AAAA,QACD;AAAA;AAAA;AAAA,EACD;AAEF;AAEA,SAAS,YAAY;AAAA,EACpB;AAAA,EACA,eAAe;AAAA,EACf,GAAG;AACJ,GAA4B;AAC3B,SACC;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACA,aAAU;AAAA,MACV;AAAA,MACA,WAAW;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MACC,GAAG;AAAA;AAAA,EACL;AAEF;AAEA,SAAS,UAAU,EAAE,WAAW,GAAG,MAAM,GAAqC;AAC7E,SACC;AAAA,IAAC;AAAA;AAAA,MACA,aAAU;AAAA,MACV,WAAW;AAAA,QACV;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,MACC,GAAG;AAAA;AAAA,EACL;AAEF;AAEA,SAAS,YAAY,EAAE,WAAW,GAAG,MAAM,GAA8B;AACxE,SACC;AAAA,IAAC,cAAc;AAAA,IAAd;AAAA,MACA,aAAU;AAAA,MACV,WAAW,GAAG,+BAA+B,SAAS;AAAA,MACrD,GAAG;AAAA;AAAA,EACL;AAEF;","names":[]}
1
+ {"version":3,"sources":[],"sourcesContent":[],"mappings":"","names":[]}
package/dist/tag.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import * as React from 'react';
2
- import { ReactNode, MouseEvent } from 'react';
2
+ import { ButtonHTMLAttributes, ReactNode, MouseEvent } from 'react';
3
3
  import * as class_variance_authority_types from 'class-variance-authority/types';
4
4
  import { ComponentSize } from './size-context.js';
5
5
 
@@ -9,17 +9,18 @@ declare const tagVariants: (props?: ({
9
9
  clickable?: boolean | null | undefined;
10
10
  disabled?: boolean | null | undefined;
11
11
  } & class_variance_authority_types.ClassProp) | undefined) => string;
12
- interface TagProps {
12
+ interface TagProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "disabled" | "onClick" | "type"> {
13
13
  label: string;
14
14
  leadingIcon?: ReactNode;
15
15
  onClose?: (e: MouseEvent<HTMLButtonElement>) => void;
16
- onClick?: () => void;
16
+ closeButtonProps?: Omit<ButtonHTMLAttributes<HTMLButtonElement>, "children" | "disabled" | "onClick" | "type">;
17
+ onClick?: (e: MouseEvent<HTMLButtonElement>) => void;
17
18
  size?: ComponentSize;
19
+ shape?: "full" | "box";
18
20
  border?: boolean;
19
21
  clickable?: boolean;
20
22
  disabled?: boolean;
21
- className?: string;
22
23
  }
23
- declare function Tag({ label, leadingIcon, onClose, onClick, size, border, clickable, disabled, className, }: TagProps): React.JSX.Element;
24
+ declare function Tag({ label, leadingIcon, onClose, closeButtonProps, onClick, size, shape, border, clickable, disabled, className, ...props }: TagProps): React.JSX.Element;
24
25
 
25
- export { Tag, tagVariants };
26
+ export { Tag, type TagProps, tagVariants };
package/dist/tag.js CHANGED
@@ -1,52 +1,17 @@
1
- // src/components/ui/tag.tsx
1
+ "use client";
2
+ import {
3
+ useComponentSize
4
+ } from "./chunk-HL3ZSYES.js";
5
+ import {
6
+ cn
7
+ } from "./chunk-Y4TTYVNE.js";
8
+
9
+ // src/tag.tsx
2
10
  import { cva } from "class-variance-authority";
3
11
  import { X } from "lucide-react";
4
-
5
- // src/lib/cn.ts
6
- import { clsx } from "clsx";
7
- import { extendTailwindMerge } from "tailwind-merge";
8
- var twMerge = extendTailwindMerge({
9
- extend: {
10
- classGroups: {
11
- "font-size": [
12
- {
13
- text: [
14
- "gdt-display",
15
- "gdt-h1",
16
- "gdt-h2",
17
- "gdt-h3",
18
- "gdt-h4",
19
- "gdt-h5",
20
- "gdt-xl",
21
- "gdt-lg",
22
- "gdt-md",
23
- "gdt-sm",
24
- "gdt-xs",
25
- "gdt-subtext",
26
- "gdt-capitalized"
27
- ]
28
- }
29
- ]
30
- }
31
- }
32
- });
33
- function cn(...inputs) {
34
- return twMerge(clsx(inputs));
35
- }
36
-
37
- // src/components/ui/size-context.tsx
38
- import { createContext, useContext } from "react";
39
- import { Fragment, jsx } from "react/jsx-runtime";
40
- var SizeContext = createContext(void 0);
41
- function useComponentSize(size, fallback = "md") {
42
- const inheritedSize = useContext(SizeContext);
43
- return size ?? inheritedSize ?? fallback;
44
- }
45
-
46
- // src/components/ui/tag.tsx
47
- import { jsx as jsx2, jsxs } from "react/jsx-runtime";
12
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
48
13
  var tagVariants = cva(
49
- "group/tag inline-flex w-fit shrink-0 items-center font-bold leading-none whitespace-nowrap rounded-4xl border bg-surface-raised text-fg-secondary transition-[background-color,border-color] select-none",
14
+ "group/tag inline-flex w-full shrink-0 items-center border bg-surface-raised font-bold leading-none text-fg-primary whitespace-nowrap transition-[background-color,border-color,color,box-shadow] select-none data-[shape=full]:rounded-4xl data-[shape=box]:data-[size=sm]:rounded-md data-[shape=box]:data-[size=md]:rounded-lg data-[shape=box]:data-[size=lg]:rounded-xl data-[has-close=true]:data-[size=sm]:pr-5 data-[has-close=true]:data-[size=md]:pr-7 data-[has-close=true]:data-[size=lg]:pr-8",
50
15
  {
51
16
  variants: {
52
17
  size: {
@@ -59,11 +24,11 @@ var tagVariants = cva(
59
24
  false: "border-transparent"
60
25
  },
61
26
  clickable: {
62
- true: "cursor-pointer hover:bg-action-tertiary-hover active:bg-action-tertiary-pressed outline-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)]",
27
+ true: "cursor-pointer hover:border-line-strong hover:bg-action-tertiary-hover active:border-line-strong active:bg-action-tertiary-pressed outline-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)]",
63
28
  false: "cursor-default"
64
29
  },
65
30
  disabled: {
66
- true: "opacity-50 pointer-events-none",
31
+ true: "border-line-subtle bg-surface text-fg-caption-placeholder",
67
32
  false: ""
68
33
  }
69
34
  },
@@ -76,13 +41,13 @@ var tagVariants = cva(
76
41
  }
77
42
  );
78
43
  var tagCloseVariants = cva(
79
- "inline-flex shrink-0 items-center justify-center rounded-full text-fg-secondary transition-[background-color,color] outline-none hover:bg-action-tertiary-hover hover:text-fg-primary focus-visible:bg-action-tertiary-hover focus-visible:text-fg-primary focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:bg-action-tertiary-pressed disabled:pointer-events-none",
44
+ "absolute top-1/2 inline-flex shrink-0 -translate-y-1/2 items-center justify-center rounded-full text-current transition-[background-color,color] outline-none hover:bg-action-tertiary-hover hover:text-fg-primary focus-visible:bg-action-tertiary-hover focus-visible:text-fg-primary focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:bg-action-tertiary-pressed disabled:pointer-events-none disabled:text-fg-caption-placeholder",
80
45
  {
81
46
  variants: {
82
47
  size: {
83
- sm: "size-4 [&>svg]:size-2.5",
84
- md: "size-5 [&>svg]:size-3",
85
- lg: "size-5 [&>svg]:size-3.5"
48
+ sm: "right-1 size-4 [&>svg]:size-2.5",
49
+ md: "right-1.5 size-5 [&>svg]:size-3",
50
+ lg: "right-2 size-5 [&>svg]:size-3.5"
86
51
  }
87
52
  },
88
53
  defaultVariants: {
@@ -94,64 +59,103 @@ function Tag({
94
59
  label,
95
60
  leadingIcon,
96
61
  onClose,
62
+ closeButtonProps,
97
63
  onClick,
98
64
  size,
65
+ shape = "full",
99
66
  border = false,
100
67
  clickable = false,
101
68
  disabled = false,
102
- className
69
+ className,
70
+ ...props
103
71
  }) {
104
72
  const resolvedSize = useComponentSize(size);
105
- const handleKeyDown = (e) => {
106
- if (e.key === "Enter" || e.key === " ") {
107
- e.preventDefault();
108
- onClick?.();
109
- }
110
- };
111
- return (
112
- // biome-ignore lint/a11y/noStaticElementInteractions: clickable tags set button semantics, focus, and keyboard activation while still allowing a nested close action.
113
- /* @__PURE__ */ jsxs(
114
- "div",
73
+ const isInteractive = clickable && !disabled;
74
+ const {
75
+ "aria-label": closeAriaLabel = `Remove ${label}`,
76
+ className: closeClassName,
77
+ onKeyDown: onCloseKeyDown,
78
+ ...resolvedCloseButtonProps
79
+ } = closeButtonProps ?? {};
80
+ return /* @__PURE__ */ jsxs("div", { "data-slot": "tag", className: "relative inline-flex w-fit shrink-0", children: [
81
+ clickable ? /* @__PURE__ */ jsx(
82
+ "button",
115
83
  {
116
- role: clickable ? "button" : void 0,
117
- tabIndex: clickable && !disabled ? 0 : void 0,
118
- "aria-disabled": disabled ? true : void 0,
119
- "data-slot": "tag",
84
+ type: "button",
85
+ "data-slot": "tag-surface",
86
+ "data-shape": shape,
87
+ "data-size": resolvedSize,
88
+ "data-has-close": Boolean(onClose),
89
+ disabled,
120
90
  className: cn(
121
- tagVariants({ size: resolvedSize, border, clickable, disabled }),
91
+ tagVariants({
92
+ size: resolvedSize,
93
+ border,
94
+ clickable: isInteractive,
95
+ disabled
96
+ }),
122
97
  className
123
98
  ),
124
- onClick: clickable ? onClick : void 0,
125
- onKeyDown: clickable ? handleKeyDown : void 0,
126
- children: [
127
- leadingIcon && /* @__PURE__ */ jsx2(
128
- "span",
129
- {
130
- "aria-hidden": "true",
131
- "data-slot": "tag-leading-icon",
132
- className: "inline-flex shrink-0 items-center [&>svg]:size-[1em]",
133
- children: leadingIcon
134
- }
135
- ),
136
- /* @__PURE__ */ jsx2("span", { children: label }),
137
- /* @__PURE__ */ jsx2(
138
- "button",
139
- {
140
- type: "button",
141
- "aria-label": `Remove ${label}`,
142
- disabled,
143
- className: cn(tagCloseVariants({ size: resolvedSize })),
144
- onClick: (e) => {
145
- e.stopPropagation();
146
- onClose?.(e);
147
- },
148
- children: /* @__PURE__ */ jsx2(X, { "aria-hidden": "true" })
149
- }
150
- )
151
- ]
99
+ onClick,
100
+ ...props,
101
+ children: /* @__PURE__ */ jsx(TagContent, { label, leadingIcon })
102
+ }
103
+ ) : /* @__PURE__ */ jsx(
104
+ "span",
105
+ {
106
+ "data-slot": "tag-surface",
107
+ "data-shape": shape,
108
+ "data-size": resolvedSize,
109
+ "data-has-close": Boolean(onClose),
110
+ className: cn(
111
+ tagVariants({
112
+ size: resolvedSize,
113
+ border,
114
+ clickable: false,
115
+ disabled
116
+ }),
117
+ className
118
+ ),
119
+ children: /* @__PURE__ */ jsx(TagContent, { label, leadingIcon })
120
+ }
121
+ ),
122
+ onClose && /* @__PURE__ */ jsx(
123
+ "button",
124
+ {
125
+ type: "button",
126
+ "aria-label": closeAriaLabel,
127
+ disabled,
128
+ className: cn(
129
+ tagCloseVariants({ size: resolvedSize }),
130
+ closeClassName
131
+ ),
132
+ onClick: (e) => {
133
+ e.stopPropagation();
134
+ onClose(e);
135
+ },
136
+ onKeyDown: onCloseKeyDown,
137
+ ...resolvedCloseButtonProps,
138
+ children: /* @__PURE__ */ jsx(X, { "aria-hidden": "true" })
152
139
  }
153
140
  )
154
- );
141
+ ] });
142
+ }
143
+ function TagContent({
144
+ label,
145
+ leadingIcon
146
+ }) {
147
+ return /* @__PURE__ */ jsxs(Fragment, { children: [
148
+ leadingIcon && /* @__PURE__ */ jsx(
149
+ "span",
150
+ {
151
+ "aria-hidden": "true",
152
+ "data-slot": "tag-leading-icon",
153
+ className: "inline-flex shrink-0 items-center [&>svg]:size-[1em]",
154
+ children: leadingIcon
155
+ }
156
+ ),
157
+ /* @__PURE__ */ jsx("span", { children: label })
158
+ ] });
155
159
  }
156
160
  export {
157
161
  Tag,
package/dist/tag.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/components/ui/tag.tsx","../src/lib/cn.ts","../src/components/ui/size-context.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport type { KeyboardEvent, MouseEvent, ReactNode } from \"react\";\nimport { cn } from \"../../lib/cn\";\nimport { type ComponentSize, useComponentSize } from \"./size-context\";\n\nconst tagVariants = cva(\n\t\"group/tag inline-flex w-fit shrink-0 items-center font-bold leading-none whitespace-nowrap rounded-4xl border bg-surface-raised text-fg-secondary transition-[background-color,border-color] select-none\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"gap-1 py-0.5 pl-2 pr-1 text-gdt-xs\",\n\t\t\t\tmd: \"gap-1.5 py-1 pl-2.5 pr-1.5 text-gdt-sm\",\n\t\t\t\tlg: \"gap-2 py-1.5 pl-3 pr-2 text-gdt-md\",\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\ttrue: \"border-line\",\n\t\t\t\tfalse: \"border-transparent\",\n\t\t\t},\n\t\t\tclickable: {\n\t\t\t\ttrue: \"cursor-pointer hover:bg-action-tertiary-hover active:bg-action-tertiary-pressed outline-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)]\",\n\t\t\t\tfalse: \"cursor-default\",\n\t\t\t},\n\t\t\tdisabled: {\n\t\t\t\ttrue: \"opacity-50 pointer-events-none\",\n\t\t\t\tfalse: \"\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t\tborder: false,\n\t\t\tclickable: false,\n\t\t\tdisabled: false,\n\t\t},\n\t},\n);\n\nconst tagCloseVariants = cva(\n\t\"inline-flex shrink-0 items-center justify-center rounded-full text-fg-secondary transition-[background-color,color] outline-none hover:bg-action-tertiary-hover hover:text-fg-primary focus-visible:bg-action-tertiary-hover focus-visible:text-fg-primary focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:bg-action-tertiary-pressed disabled:pointer-events-none\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"size-4 [&>svg]:size-2.5\",\n\t\t\t\tmd: \"size-5 [&>svg]:size-3\",\n\t\t\t\tlg: \"size-5 [&>svg]:size-3.5\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t},\n\t},\n);\n\ninterface TagProps {\n\tlabel: string;\n\tleadingIcon?: ReactNode;\n\tonClose?: (e: MouseEvent<HTMLButtonElement>) => void;\n\tonClick?: () => void;\n\tsize?: ComponentSize;\n\tborder?: boolean;\n\tclickable?: boolean;\n\tdisabled?: boolean;\n\tclassName?: string;\n}\n\nfunction Tag({\n\tlabel,\n\tleadingIcon,\n\tonClose,\n\tonClick,\n\tsize,\n\tborder = false,\n\tclickable = false,\n\tdisabled = false,\n\tclassName,\n}: TagProps) {\n\tconst resolvedSize = useComponentSize(size);\n\n\tconst handleKeyDown = (e: KeyboardEvent<HTMLDivElement>) => {\n\t\tif (e.key === \"Enter\" || e.key === \" \") {\n\t\t\te.preventDefault();\n\t\t\tonClick?.();\n\t\t}\n\t};\n\n\treturn (\n\t\t// biome-ignore lint/a11y/noStaticElementInteractions: clickable tags set button semantics, focus, and keyboard activation while still allowing a nested close action.\n\t\t<div\n\t\t\trole={clickable ? \"button\" : undefined}\n\t\t\ttabIndex={clickable && !disabled ? 0 : undefined}\n\t\t\taria-disabled={disabled ? true : undefined}\n\t\t\tdata-slot=\"tag\"\n\t\t\tclassName={cn(\n\t\t\t\ttagVariants({ size: resolvedSize, border, clickable, disabled }),\n\t\t\t\tclassName,\n\t\t\t)}\n\t\t\tonClick={clickable ? onClick : undefined}\n\t\t\tonKeyDown={clickable ? handleKeyDown : undefined}\n\t\t>\n\t\t\t{leadingIcon && (\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tdata-slot=\"tag-leading-icon\"\n\t\t\t\t\tclassName=\"inline-flex shrink-0 items-center [&>svg]:size-[1em]\"\n\t\t\t\t>\n\t\t\t\t\t{leadingIcon}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<span>{label}</span>\n\t\t\t<button\n\t\t\t\ttype=\"button\"\n\t\t\t\taria-label={`Remove ${label}`}\n\t\t\t\tdisabled={disabled}\n\t\t\t\tclassName={cn(tagCloseVariants({ size: resolvedSize }))}\n\t\t\t\tonClick={(e) => {\n\t\t\t\t\te.stopPropagation();\n\t\t\t\t\tonClose?.(e);\n\t\t\t\t}}\n\t\t\t>\n\t\t\t\t<X aria-hidden=\"true\" />\n\t\t\t</button>\n\t\t</div>\n\t);\n}\n\nexport { Tag, tagVariants };\n","import { type ClassValue, clsx } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n\textend: {\n\t\tclassGroups: {\n\t\t\t\"font-size\": [\n\t\t\t\t{\n\t\t\t\t\ttext: [\n\t\t\t\t\t\t\"gdt-display\",\n\t\t\t\t\t\t\"gdt-h1\",\n\t\t\t\t\t\t\"gdt-h2\",\n\t\t\t\t\t\t\"gdt-h3\",\n\t\t\t\t\t\t\"gdt-h4\",\n\t\t\t\t\t\t\"gdt-h5\",\n\t\t\t\t\t\t\"gdt-xl\",\n\t\t\t\t\t\t\"gdt-lg\",\n\t\t\t\t\t\t\"gdt-md\",\n\t\t\t\t\t\t\"gdt-sm\",\n\t\t\t\t\t\t\"gdt-xs\",\n\t\t\t\t\t\t\"gdt-subtext\",\n\t\t\t\t\t\t\"gdt-capitalized\",\n\t\t\t\t\t],\n\t\t\t\t},\n\t\t\t],\n\t\t},\n\t},\n});\n\nexport function cn(...inputs: ClassValue[]) {\n\treturn twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport { createContext, type ReactNode, useContext } from \"react\";\n\ntype ComponentSize = \"sm\" | \"md\" | \"lg\";\n\nconst SizeContext = createContext<ComponentSize | undefined>(undefined);\n\nfunction SizeProvider({\n\tchildren,\n\tsize,\n}: {\n\tchildren: ReactNode;\n\tsize?: ComponentSize | null;\n}) {\n\tif (!size) {\n\t\treturn <>{children}</>;\n\t}\n\n\treturn <SizeContext.Provider value={size}>{children}</SizeContext.Provider>;\n}\n\nfunction useComponentSize(\n\tsize?: ComponentSize | null,\n\tfallback: ComponentSize = \"md\",\n) {\n\tconst inheritedSize = useContext(SizeContext);\n\treturn size ?? inheritedSize ?? fallback;\n}\n\nexport { SizeProvider, useComponentSize, type ComponentSize };\n"],"mappings":"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","names":["jsx"]}
1
+ {"version":3,"sources":["../src/tag.tsx"],"sourcesContent":["\"use client\";\n\nimport { cva } from \"class-variance-authority\";\nimport { X } from \"lucide-react\";\nimport type { ButtonHTMLAttributes, MouseEvent, ReactNode } from \"react\";\nimport { cn } from \"./lib/cn\";\nimport { type ComponentSize, useComponentSize } from \"./size-context\";\n\nconst tagVariants = cva(\n\t\"group/tag inline-flex w-full shrink-0 items-center border bg-surface-raised font-bold leading-none text-fg-primary whitespace-nowrap transition-[background-color,border-color,color,box-shadow] select-none data-[shape=full]:rounded-4xl data-[shape=box]:data-[size=sm]:rounded-md data-[shape=box]:data-[size=md]:rounded-lg data-[shape=box]:data-[size=lg]:rounded-xl data-[has-close=true]:data-[size=sm]:pr-5 data-[has-close=true]:data-[size=md]:pr-7 data-[has-close=true]:data-[size=lg]:pr-8\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"gap-1 py-0.5 pl-2 pr-1 text-gdt-xs\",\n\t\t\t\tmd: \"gap-1.5 py-1 pl-2.5 pr-1.5 text-gdt-sm\",\n\t\t\t\tlg: \"gap-2 py-1.5 pl-3 pr-2 text-gdt-md\",\n\t\t\t},\n\t\t\tborder: {\n\t\t\t\ttrue: \"border-line\",\n\t\t\t\tfalse: \"border-transparent\",\n\t\t\t},\n\t\t\tclickable: {\n\t\t\t\ttrue: \"cursor-pointer hover:border-line-strong hover:bg-action-tertiary-hover active:border-line-strong active:bg-action-tertiary-pressed outline-none focus-visible:border-line-focus focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)]\",\n\t\t\t\tfalse: \"cursor-default\",\n\t\t\t},\n\t\t\tdisabled: {\n\t\t\t\ttrue: \"border-line-subtle bg-surface text-fg-caption-placeholder\",\n\t\t\t\tfalse: \"\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t\tborder: false,\n\t\t\tclickable: false,\n\t\t\tdisabled: false,\n\t\t},\n\t},\n);\n\nconst tagCloseVariants = cva(\n\t\"absolute top-1/2 inline-flex shrink-0 -translate-y-1/2 items-center justify-center rounded-full text-current transition-[background-color,color] outline-none hover:bg-action-tertiary-hover hover:text-fg-primary focus-visible:bg-action-tertiary-hover focus-visible:text-fg-primary focus-visible:shadow-[0px_0px_0px_2px_var(--color-line-focus)] active:bg-action-tertiary-pressed disabled:pointer-events-none disabled:text-fg-caption-placeholder\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\tsm: \"right-1 size-4 [&>svg]:size-2.5\",\n\t\t\t\tmd: \"right-1.5 size-5 [&>svg]:size-3\",\n\t\t\t\tlg: \"right-2 size-5 [&>svg]:size-3.5\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: {\n\t\t\tsize: \"md\",\n\t\t},\n\t},\n);\n\ninterface TagProps\n\textends Omit<\n\t\tButtonHTMLAttributes<HTMLButtonElement>,\n\t\t\"children\" | \"disabled\" | \"onClick\" | \"type\"\n\t> {\n\tlabel: string;\n\tleadingIcon?: ReactNode;\n\tonClose?: (e: MouseEvent<HTMLButtonElement>) => void;\n\tcloseButtonProps?: Omit<\n\t\tButtonHTMLAttributes<HTMLButtonElement>,\n\t\t\"children\" | \"disabled\" | \"onClick\" | \"type\"\n\t>;\n\tonClick?: (e: MouseEvent<HTMLButtonElement>) => void;\n\tsize?: ComponentSize;\n\tshape?: \"full\" | \"box\";\n\tborder?: boolean;\n\tclickable?: boolean;\n\tdisabled?: boolean;\n}\n\nfunction Tag({\n\tlabel,\n\tleadingIcon,\n\tonClose,\n\tcloseButtonProps,\n\tonClick,\n\tsize,\n\tshape = \"full\",\n\tborder = false,\n\tclickable = false,\n\tdisabled = false,\n\tclassName,\n\t...props\n}: TagProps) {\n\tconst resolvedSize = useComponentSize(size);\n\tconst isInteractive = clickable && !disabled;\n\n\tconst {\n\t\t\"aria-label\": closeAriaLabel = `Remove ${label}`,\n\t\tclassName: closeClassName,\n\t\tonKeyDown: onCloseKeyDown,\n\t\t...resolvedCloseButtonProps\n\t} = closeButtonProps ?? {};\n\n\treturn (\n\t\t<div data-slot=\"tag\" className=\"relative inline-flex w-fit shrink-0\">\n\t\t\t{clickable ? (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\tdata-slot=\"tag-surface\"\n\t\t\t\t\tdata-shape={shape}\n\t\t\t\t\tdata-size={resolvedSize}\n\t\t\t\t\tdata-has-close={Boolean(onClose)}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\ttagVariants({\n\t\t\t\t\t\t\tsize: resolvedSize,\n\t\t\t\t\t\t\tborder,\n\t\t\t\t\t\t\tclickable: isInteractive,\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t\tonClick={onClick}\n\t\t\t\t\t{...props}\n\t\t\t\t>\n\t\t\t\t\t<TagContent label={label} leadingIcon={leadingIcon} />\n\t\t\t\t</button>\n\t\t\t) : (\n\t\t\t\t<span\n\t\t\t\t\tdata-slot=\"tag-surface\"\n\t\t\t\t\tdata-shape={shape}\n\t\t\t\t\tdata-size={resolvedSize}\n\t\t\t\t\tdata-has-close={Boolean(onClose)}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\ttagVariants({\n\t\t\t\t\t\t\tsize: resolvedSize,\n\t\t\t\t\t\t\tborder,\n\t\t\t\t\t\t\tclickable: false,\n\t\t\t\t\t\t\tdisabled,\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tclassName,\n\t\t\t\t\t)}\n\t\t\t\t>\n\t\t\t\t\t<TagContent label={label} leadingIcon={leadingIcon} />\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t{onClose && (\n\t\t\t\t<button\n\t\t\t\t\ttype=\"button\"\n\t\t\t\t\taria-label={closeAriaLabel}\n\t\t\t\t\tdisabled={disabled}\n\t\t\t\t\tclassName={cn(\n\t\t\t\t\t\ttagCloseVariants({ size: resolvedSize }),\n\t\t\t\t\t\tcloseClassName,\n\t\t\t\t\t)}\n\t\t\t\t\tonClick={(e) => {\n\t\t\t\t\t\te.stopPropagation();\n\t\t\t\t\t\tonClose(e);\n\t\t\t\t\t}}\n\t\t\t\t\tonKeyDown={onCloseKeyDown}\n\t\t\t\t\t{...resolvedCloseButtonProps}\n\t\t\t\t>\n\t\t\t\t\t<X aria-hidden=\"true\" />\n\t\t\t\t</button>\n\t\t\t)}\n\t\t</div>\n\t);\n}\n\nfunction TagContent({\n\tlabel,\n\tleadingIcon,\n}: Pick<TagProps, \"label\" | \"leadingIcon\">) {\n\treturn (\n\t\t<>\n\t\t\t{leadingIcon && (\n\t\t\t\t<span\n\t\t\t\t\taria-hidden=\"true\"\n\t\t\t\t\tdata-slot=\"tag-leading-icon\"\n\t\t\t\t\tclassName=\"inline-flex shrink-0 items-center [&>svg]:size-[1em]\"\n\t\t\t\t>\n\t\t\t\t\t{leadingIcon}\n\t\t\t\t</span>\n\t\t\t)}\n\t\t\t<span>{label}</span>\n\t\t</>\n\t);\n}\n\nexport { Tag, tagVariants, type TagProps };\n"],"mappings":"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","names":[]}
@@ -0,0 +1,34 @@
1
+ import * as class_variance_authority_types from 'class-variance-authority/types';
2
+ import { useRender } from '@base-ui/react/use-render';
3
+ import { VariantProps } from 'class-variance-authority';
4
+ import * as React from 'react';
5
+
6
+ declare const testimonialBlockVariants: (props?: ({
7
+ tone?: "brand" | "neutral" | null | undefined;
8
+ orientation?: "horizontal" | "vertical" | null | undefined;
9
+ size?: "sm" | "md" | "lg" | null | undefined;
10
+ } & class_variance_authority_types.ClassProp) | undefined) => string;
11
+ type TestimonialBlockProps = useRender.ComponentProps<"article"> & VariantProps<typeof testimonialBlockVariants>;
12
+ declare function TestimonialBlock({ className, orientation, render, size, tone, ...props }: TestimonialBlockProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
13
+ declare function TestimonialBlockContent({ className, render, ...props }: useRender.ComponentProps<"div">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
14
+ declare function TestimonialBlockMedia({ className, render, ...props }: useRender.ComponentProps<"div">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
15
+ declare function TestimonialBlockPlayButton({ "aria-label": ariaLabel, children, className, render, ...props }: useRender.ComponentProps<"button">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
16
+ type TestimonialBlockRatingProps = Omit<useRender.ComponentProps<"div">, "children"> & {
17
+ rating: number;
18
+ source?: React.ReactNode;
19
+ totalReviews?: number;
20
+ reviewLabel?: string;
21
+ showScore?: boolean;
22
+ };
23
+ declare function TestimonialBlockRating({ className, rating, render, reviewLabel, showScore, source, totalReviews, ...props }: TestimonialBlockRatingProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
24
+ declare function TestimonialBlockQuote({ className, render, ...props }: useRender.ComponentProps<"blockquote">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
25
+ declare function TestimonialBlockFooter({ className, render, ...props }: useRender.ComponentProps<"div">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
26
+ type TestimonialBlockReviewerProps = Omit<useRender.ComponentProps<"div">, "children"> & {
27
+ name: string;
28
+ photo?: string;
29
+ reviewerRole?: React.ReactNode;
30
+ };
31
+ declare function TestimonialBlockReviewer({ className, name, photo, render, reviewerRole, ...props }: TestimonialBlockReviewerProps): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
32
+ declare function TestimonialBlockAction({ "aria-label": ariaLabel, children, className, render, ...props }: useRender.ComponentProps<"a">): React.ReactElement<unknown, string | React.JSXElementConstructor<any>>;
33
+
34
+ export { TestimonialBlock, TestimonialBlockAction, TestimonialBlockContent, TestimonialBlockFooter, TestimonialBlockMedia, TestimonialBlockPlayButton, type TestimonialBlockProps, TestimonialBlockQuote, TestimonialBlockRating, TestimonialBlockReviewer, type TestimonialBlockReviewerProps, testimonialBlockVariants };