@cl-light-ds/ui 0.2.0 → 0.4.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 (293) hide show
  1. package/README.md +45 -45
  2. package/package.json +2 -2
  3. package/src/components/accordion/Accordion.astro +248 -248
  4. package/src/components/accordion/AccordionContent.astro +26 -26
  5. package/src/components/accordion/AccordionItem.astro +36 -36
  6. package/src/components/accordion/AccordionTrigger.astro +118 -118
  7. package/src/components/accordion/CHANGELOG.md +41 -41
  8. package/src/components/accordion/index.ts +4 -4
  9. package/src/components/alert/Alert.astro +167 -167
  10. package/src/components/alert/AlertDescription.astro +24 -24
  11. package/src/components/alert/AlertTitle.astro +24 -24
  12. package/src/components/alert/CHANGELOG.md +5 -5
  13. package/src/components/alert/index.ts +4 -4
  14. package/src/components/avatar/Avatar.astro +197 -197
  15. package/src/components/avatar/AvatarBadge.astro +44 -44
  16. package/src/components/avatar/AvatarFallback.astro +26 -26
  17. package/src/components/avatar/AvatarGroup.astro +26 -26
  18. package/src/components/avatar/AvatarGroupCount.astro +30 -30
  19. package/src/components/avatar/AvatarImage.astro +46 -46
  20. package/src/components/avatar/CHANGELOG.md +44 -44
  21. package/src/components/avatar/index.ts +6 -6
  22. package/src/components/badge/Badge.astro +167 -167
  23. package/src/components/badge/CHANGELOG.md +49 -49
  24. package/src/components/badge/index.ts +2 -2
  25. package/src/components/breadcrumb/Breadcrumb.astro +76 -76
  26. package/src/components/breadcrumb/BreadcrumbItem.astro +32 -32
  27. package/src/components/breadcrumb/BreadcrumbList.astro +26 -26
  28. package/src/components/breadcrumb/BreadcrumbSeparator.astro +26 -26
  29. package/src/components/breadcrumb/CHANGELOG.md +24 -24
  30. package/src/components/breadcrumb/index.ts +5 -5
  31. package/src/components/button/Button.astro +233 -233
  32. package/src/components/button/CHANGELOG.md +41 -41
  33. package/src/components/button/index.ts +2 -2
  34. package/src/components/button-group/ButtonGroup.astro +130 -130
  35. package/src/components/button-group/ButtonGroupSeparator.astro +30 -30
  36. package/src/components/button-group/ButtonGroupText.astro +21 -21
  37. package/src/components/button-group/CHANGELOG.md +34 -34
  38. package/src/components/button-group/index.ts +3 -3
  39. package/src/components/callout/CHANGELOG.md +32 -0
  40. package/src/components/callout/Callout.astro +147 -0
  41. package/src/components/callout/CalloutDescription.astro +16 -0
  42. package/src/components/callout/CalloutTitle.astro +16 -0
  43. package/src/components/callout/index.ts +3 -0
  44. package/src/components/card/CHANGELOG.md +162 -119
  45. package/src/components/card/Card.astro +197 -182
  46. package/src/components/card/CardAction.astro +26 -26
  47. package/src/components/card/CardContent.astro +28 -28
  48. package/src/components/card/CardDescription.astro +28 -28
  49. package/src/components/card/CardFooter.astro +24 -24
  50. package/src/components/card/CardHeader.astro +30 -30
  51. package/src/components/card/CardMedia.astro +27 -27
  52. package/src/components/card/CardMediaActions.astro +21 -0
  53. package/src/components/card/CardMediaSelect.astro +21 -0
  54. package/src/components/card/CardOverlay.astro +32 -32
  55. package/src/components/card/CardTitle.astro +21 -21
  56. package/src/components/card/index.ts +12 -10
  57. package/src/components/carousel/CHANGELOG.md +5 -5
  58. package/src/components/carousel/Carousel.astro +106 -106
  59. package/src/components/carousel/CarouselSlide.astro +22 -22
  60. package/src/components/carousel/index.ts +3 -3
  61. package/src/components/checkbox/CHANGELOG.md +58 -58
  62. package/src/components/checkbox/Checkbox.astro +159 -159
  63. package/src/components/checkbox/index.ts +1 -1
  64. package/src/components/collapsible/CHANGELOG.md +5 -5
  65. package/src/components/collapsible/Collapsible.astro +202 -202
  66. package/src/components/collapsible/CollapsibleContent.astro +36 -36
  67. package/src/components/collapsible/CollapsibleTrigger.astro +34 -34
  68. package/src/components/collapsible/index.ts +4 -4
  69. package/src/components/combobox/CHANGELOG.md +27 -27
  70. package/src/components/combobox/Combobox.astro +365 -365
  71. package/src/components/combobox/ComboboxContent.astro +37 -37
  72. package/src/components/combobox/ComboboxEmpty.astro +18 -18
  73. package/src/components/combobox/ComboboxGroup.astro +19 -19
  74. package/src/components/combobox/ComboboxInput.astro +74 -74
  75. package/src/components/combobox/ComboboxItem.astro +39 -39
  76. package/src/components/combobox/ComboboxLabel.astro +18 -18
  77. package/src/components/combobox/ComboboxList.astro +21 -21
  78. package/src/components/combobox/ComboboxSeparator.astro +17 -17
  79. package/src/components/combobox/ComboboxTrigger.astro +30 -30
  80. package/src/components/combobox/ComboboxValue.astro +22 -22
  81. package/src/components/combobox/index.ts +11 -11
  82. package/src/components/date/CHANGELOG.md +18 -18
  83. package/src/components/date/Date.astro +137 -137
  84. package/src/components/date/index.ts +2 -2
  85. package/src/components/dialog/CHANGELOG.md +39 -39
  86. package/src/components/dialog/Dialog.astro +196 -196
  87. package/src/components/dialog/DialogClose.astro +23 -23
  88. package/src/components/dialog/DialogContent.astro +42 -42
  89. package/src/components/dialog/DialogDescription.astro +18 -18
  90. package/src/components/dialog/DialogFooter.astro +18 -18
  91. package/src/components/dialog/DialogHeader.astro +18 -18
  92. package/src/components/dialog/DialogOverlay.astro +19 -19
  93. package/src/components/dialog/DialogTitle.astro +18 -18
  94. package/src/components/dialog/DialogTrigger.astro +37 -37
  95. package/src/components/dialog/index.ts +9 -9
  96. package/src/components/dropdown-menu/CHANGELOG.md +194 -194
  97. package/src/components/dropdown-menu/DropdownMenu.astro +226 -226
  98. package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -114
  99. package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -42
  100. package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -19
  101. package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -220
  102. package/src/components/dropdown-menu/DropdownMenuItemContent.astro +79 -79
  103. package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -20
  104. package/src/components/dropdown-menu/DropdownMenuPortal.astro +13 -13
  105. package/src/components/dropdown-menu/DropdownMenuRadioGroup.astro +13 -13
  106. package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -101
  107. package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -18
  108. package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -18
  109. package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -49
  110. package/src/components/dropdown-menu/dropdown-menu-item-variants.ts +24 -24
  111. package/src/components/dropdown-menu/index.ts +12 -12
  112. package/src/components/field/CHANGELOG.md +33 -33
  113. package/src/components/field/Field.astro +664 -664
  114. package/src/components/field/FieldContent.astro +20 -20
  115. package/src/components/field/FieldDescription.astro +22 -22
  116. package/src/components/field/FieldError.astro +51 -51
  117. package/src/components/field/FieldGroup.astro +20 -20
  118. package/src/components/field/FieldLabel.astro +22 -22
  119. package/src/components/field/FieldLegend.astro +23 -23
  120. package/src/components/field/FieldSeparator.astro +30 -30
  121. package/src/components/field/FieldSet.astro +20 -20
  122. package/src/components/field/FieldTitle.astro +20 -20
  123. package/src/components/field/index.ts +10 -10
  124. package/src/components/hover-card/CHANGELOG.md +20 -20
  125. package/src/components/hover-card/HoverCard.astro +235 -235
  126. package/src/components/hover-card/HoverCardContent.astro +54 -54
  127. package/src/components/hover-card/HoverCardTrigger.astro +38 -38
  128. package/src/components/hover-card/index.ts +3 -3
  129. package/src/components/input/CHANGELOG.md +44 -29
  130. package/src/components/input/Input.astro +130 -130
  131. package/src/components/input/InputOTP.astro +211 -0
  132. package/src/components/input/index.ts +2 -2
  133. package/src/components/input-group/CHANGELOG.md +49 -49
  134. package/src/components/input-group/InputGroup.astro +135 -135
  135. package/src/components/input-group/InputGroupAddon.astro +49 -49
  136. package/src/components/input-group/InputGroupButton.astro +58 -58
  137. package/src/components/input-group/InputGroupInput.astro +18 -18
  138. package/src/components/input-group/InputGroupText.astro +21 -21
  139. package/src/components/input-group/InputGroupTextarea.astro +17 -17
  140. package/src/components/input-group/controlClasses.ts +2 -2
  141. package/src/components/input-group/index.ts +6 -6
  142. package/src/components/item/CHANGELOG.md +27 -27
  143. package/src/components/item/Item.astro +122 -122
  144. package/src/components/item/ItemActions.astro +21 -21
  145. package/src/components/item/ItemContent.astro +25 -25
  146. package/src/components/item/ItemDescription.astro +25 -25
  147. package/src/components/item/ItemFooter.astro +24 -24
  148. package/src/components/item/ItemGroup.astro +24 -24
  149. package/src/components/item/ItemHeader.astro +24 -24
  150. package/src/components/item/ItemMedia.astro +47 -47
  151. package/src/components/item/ItemSeparator.astro +21 -21
  152. package/src/components/item/ItemTitle.astro +25 -25
  153. package/src/components/item/index.ts +10 -10
  154. package/src/components/kbd/CHANGELOG.md +5 -5
  155. package/src/components/kbd/Kbd.astro +145 -145
  156. package/src/components/kbd/KbdGroup.astro +55 -55
  157. package/src/components/kbd/index.ts +2 -2
  158. package/src/components/label/CHANGELOG.md +28 -28
  159. package/src/components/label/Label.astro +97 -97
  160. package/src/components/label/index.ts +2 -2
  161. package/src/components/link-group/CHANGELOG.md +75 -75
  162. package/src/components/link-group/LinkGroup.astro +67 -67
  163. package/src/components/link-group/LinkGroupItem.astro +32 -32
  164. package/src/components/link-group/LinkGroupList.astro +25 -25
  165. package/src/components/link-group/LinkGroupTitle.astro +22 -22
  166. package/src/components/link-group/index.ts +5 -5
  167. package/src/components/link-group/link-group-list-variants.ts +15 -15
  168. package/src/components/logo/CHANGELOG.md +17 -0
  169. package/src/components/logo/Logo.astro +90 -0
  170. package/src/components/logo/index.ts +3 -0
  171. package/src/components/logo/logo-paths.ts +57 -0
  172. package/src/components/marquee/CHANGELOG.md +5 -5
  173. package/src/components/marquee/Marquee.astro +119 -119
  174. package/src/components/marquee/index.ts +2 -2
  175. package/src/components/native-select/CHANGELOG.md +5 -5
  176. package/src/components/native-select/NativeSelect.astro +125 -125
  177. package/src/components/native-select/NativeSelectOptGroup.astro +14 -14
  178. package/src/components/native-select/NativeSelectOption.astro +9 -9
  179. package/src/components/native-select/index.ts +3 -3
  180. package/src/components/navigation-menu/CHANGELOG.md +63 -63
  181. package/src/components/navigation-menu/NavigationMenu.astro +414 -414
  182. package/src/components/navigation-menu/NavigationMenuContent.astro +37 -37
  183. package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -24
  184. package/src/components/navigation-menu/NavigationMenuItem.astro +22 -22
  185. package/src/components/navigation-menu/NavigationMenuLink.astro +18 -18
  186. package/src/components/navigation-menu/NavigationMenuList.astro +21 -21
  187. package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -44
  188. package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -30
  189. package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -19
  190. package/src/components/navigation-menu/index.ts +10 -10
  191. package/src/components/organisms/lightning-sidebar-nav/CHANGELOG.md +50 -0
  192. package/src/components/organisms/lightning-sidebar-nav/LightningSidebarNav.astro +176 -0
  193. package/src/components/organisms/lightning-sidebar-nav/SidebarNav.astro +50 -0
  194. package/src/components/organisms/lightning-sidebar-nav/SidebarNavGroup.astro +74 -0
  195. package/src/components/organisms/lightning-sidebar-nav/SidebarNavItem.astro +94 -0
  196. package/src/components/organisms/lightning-sidebar-nav/SidebarNavProBadge.astro +26 -0
  197. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSection.astro +71 -0
  198. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSkeleton.astro +67 -0
  199. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSubItem.astro +69 -0
  200. package/src/components/organisms/lightning-sidebar-nav/SidebarNavUsage.astro +78 -0
  201. package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceAvatar.astro +46 -0
  202. package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceSwitcher.astro +130 -0
  203. package/src/components/organisms/lightning-sidebar-nav/icons.ts +46 -0
  204. package/src/components/organisms/lightning-sidebar-nav/index.ts +18 -0
  205. package/src/components/organisms/lightning-sidebar-nav/types.ts +77 -0
  206. package/src/components/popover/CHANGELOG.md +20 -20
  207. package/src/components/popover/Popover.astro +211 -211
  208. package/src/components/popover/PopoverClose.astro +18 -18
  209. package/src/components/popover/PopoverContent.astro +50 -50
  210. package/src/components/popover/PopoverDescription.astro +18 -18
  211. package/src/components/popover/PopoverHeader.astro +18 -18
  212. package/src/components/popover/PopoverTitle.astro +18 -18
  213. package/src/components/popover/PopoverTrigger.astro +35 -35
  214. package/src/components/popover/index.ts +7 -7
  215. package/src/components/radio-group/CHANGELOG.md +31 -31
  216. package/src/components/radio-group/RadioGroup.astro +81 -81
  217. package/src/components/radio-group/RadioGroupItem.astro +51 -51
  218. package/src/components/radio-group/index.ts +3 -3
  219. package/src/components/select/CHANGELOG.md +39 -39
  220. package/src/components/select/Select.astro +373 -373
  221. package/src/components/select/SelectContent.astro +91 -91
  222. package/src/components/select/SelectGroup.astro +19 -19
  223. package/src/components/select/SelectItem.astro +48 -48
  224. package/src/components/select/SelectLabel.astro +18 -18
  225. package/src/components/select/SelectSeparator.astro +17 -17
  226. package/src/components/select/SelectTrigger.astro +34 -34
  227. package/src/components/select/SelectValue.astro +22 -22
  228. package/src/components/select/index.ts +8 -8
  229. package/src/components/separator/CHANGELOG.md +5 -5
  230. package/src/components/separator/Separator.astro +60 -60
  231. package/src/components/separator/index.ts +2 -2
  232. package/src/components/skeleton/CHANGELOG.md +5 -5
  233. package/src/components/skeleton/Skeleton.astro +121 -121
  234. package/src/components/skeleton/index.ts +1 -1
  235. package/src/components/slider/CHANGELOG.md +5 -5
  236. package/src/components/slider/Slider.astro +198 -198
  237. package/src/components/slider/index.ts +1 -1
  238. package/src/components/spinner/CHANGELOG.md +18 -18
  239. package/src/components/spinner/Spinner.astro +135 -135
  240. package/src/components/spinner/index.ts +1 -1
  241. package/src/components/sticky-surface/CHANGELOG.md +5 -5
  242. package/src/components/sticky-surface/StickySurface.astro +152 -152
  243. package/src/components/sticky-surface/index.ts +2 -2
  244. package/src/components/switch/CHANGELOG.md +29 -29
  245. package/src/components/switch/Switch.astro +106 -106
  246. package/src/components/switch/index.ts +1 -1
  247. package/src/components/table/CHANGELOG.md +24 -24
  248. package/src/components/table/Table.astro +358 -251
  249. package/src/components/table/TableBody.astro +17 -18
  250. package/src/components/table/TableBulkToolbar.astro +37 -0
  251. package/src/components/table/TableCaption.astro +17 -17
  252. package/src/components/table/TableCell.astro +45 -21
  253. package/src/components/table/TableCellText.astro +17 -0
  254. package/src/components/table/TableColumnMenu.astro +50 -0
  255. package/src/components/table/TableEditableCell.astro +287 -0
  256. package/src/components/table/TableEmpty.astro +17 -0
  257. package/src/components/table/TableFolderCell.astro +38 -0
  258. package/src/components/table/TableFooter.astro +21 -21
  259. package/src/components/table/TableHead.astro +90 -21
  260. package/src/components/table/TableHeader.astro +17 -17
  261. package/src/components/table/TablePagination.astro +57 -0
  262. package/src/components/table/TableRow.astro +52 -21
  263. package/src/components/table/TableSelectAllBanner.astro +34 -0
  264. package/src/components/table/TableSelectCell.astro +50 -0
  265. package/src/components/table/TableSkeletonRow.astro +21 -0
  266. package/src/components/table/index.ts +19 -9
  267. package/src/components/table/table-cell-variants.ts +29 -0
  268. package/src/components/tabs/CHANGELOG.md +5 -5
  269. package/src/components/tabs/Tabs.astro +306 -306
  270. package/src/components/tabs/TabsContent.astro +47 -47
  271. package/src/components/tabs/TabsList.astro +69 -69
  272. package/src/components/tabs/TabsTrigger.astro +40 -40
  273. package/src/components/tabs/index.ts +6 -6
  274. package/src/components/textarea/CHANGELOG.md +22 -22
  275. package/src/components/textarea/Textarea.astro +58 -58
  276. package/src/components/textarea/index.ts +2 -2
  277. package/src/components/toggle/CHANGELOG.md +23 -23
  278. package/src/components/toggle/Toggle.astro +150 -150
  279. package/src/components/toggle/index.ts +1 -1
  280. package/src/components/toggle-group/CHANGELOG.md +18 -18
  281. package/src/components/toggle-group/ToggleGroup.astro +236 -236
  282. package/src/components/toggle-group/ToggleGroupItem.astro +48 -48
  283. package/src/components/toggle-group/index.ts +2 -2
  284. package/src/components/tooltip/CHANGELOG.md +22 -22
  285. package/src/components/tooltip/Tooltip.astro +357 -357
  286. package/src/components/tooltip/TooltipContent.astro +85 -85
  287. package/src/components/tooltip/TooltipTrigger.astro +34 -34
  288. package/src/components/tooltip/index.ts +3 -3
  289. package/src/lib/table-controller.ts +1090 -0
  290. package/src/lib/toggle-group-controller.ts +113 -113
  291. package/src/lib/toggle-shared.ts +27 -27
  292. package/src/lib/utils.ts +6 -6
  293. package/src/styles/globals.css +209 -177
@@ -1,233 +1,233 @@
1
- ---
2
- /**
3
- * @component Button
4
- * @title Button
5
- * @description A clickable element for triggering actions or submitting forms.
6
- * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=74-1461
7
- *
8
- * @preview
9
- *
10
- * <div class="flex flex-wrap items-center gap-2 md:flex-row">
11
- * <Button>Button</Button>
12
- * <Button variant="outline" size="icon" aria-label="Submit">
13
- * <ArrowUpIcon />
14
- * </Button>
15
- * </div>
16
- *
17
- * @usage
18
- *
19
- * ```astro nocollapse
20
- * ---
21
- * import { Button } from '@bejamas/ui/components/button';
22
- * ---
23
- *
24
- * <Button>Click me</Button>
25
- * ```
26
- *
27
- * ## Link
28
- *
29
- * You can use the `as` prop to render the component as an anchor.
30
- *
31
- * ```astro nocollapse
32
- * ---
33
- * import { Button } from '@bejamas/ui/components/button';
34
- * ---
35
- *
36
- * <Button as="a" href="https://bejamas.com">Click me</Button>
37
- * ```
38
- *
39
- * @examples
40
- *
41
- * ### Variants
42
- *
43
- * <div class="flex flex-col items-start gap-8 sm:flex-row">
44
- * <Button variant="default">Default</Button>
45
- * <Button variant="secondary">Secondary</Button>
46
- * <Button variant="outline">Outline</Button>
47
- * <Button variant="ghost">Ghost</Button>
48
- * <Button variant="destructive">Destructive</Button>
49
- * </div>
50
- *
51
- * ### Sizes
52
- *
53
- * <div class="flex flex-col items-start gap-8 sm:flex-row">
54
- * <div class="flex items-start gap-2">
55
- * <Button size="sm" variant="outline">
56
- * Small
57
- * </Button>
58
- * <Button size="icon-sm" aria-label="Submit" variant="outline">
59
- * <ArrowUpRightIcon />
60
- * </Button>
61
- * </div>
62
- * <div class="flex items-start gap-2">
63
- * <Button variant="outline">Default</Button>
64
- * <Button size="icon" aria-label="Submit" variant="outline">
65
- * <ArrowUpRightIcon />
66
- * </Button>
67
- * </div>
68
- * <div class="flex items-start gap-2">
69
- * <Button variant="outline" size="lg">
70
- * Large
71
- * </Button>
72
- * <Button size="icon-lg" aria-label="Submit" variant="outline">
73
- * <ArrowUpRightIcon />
74
- * </Button>
75
- * </div>
76
- * </div>
77
- *
78
- * ### With icons
79
- *
80
- * <div class="flex flex-wrap items-center gap-2">
81
- * <Button leadIcon>
82
- * <ArrowUpIcon slot="lead-icon" />
83
- * Click me
84
- * </Button>
85
- * <Button variant="outline" tailIcon>
86
- * Click me
87
- * <ArrowUpRightIcon slot="tail-icon" />
88
- * </Button>
89
- * </div>
90
- *
91
- * ### With badge
92
- *
93
- * <Button variant="default" badge>
94
- * Click me
95
- * <Badge slot="badge" variant="secondary" shape="sharp" size="sm">Value</Badge>
96
- * </Button>
97
- *
98
- * ### Destructive
99
- *
100
- * <Button variant="destructive">Click me</Button>
101
- *
102
- * ### Outline
103
- *
104
- * <Button variant="outline">Click me</Button>
105
- *
106
- * ### Secondary
107
- *
108
- * <Button variant="secondary">Click me</Button>
109
- *
110
- * ### Ghost
111
- *
112
- * <Button variant="ghost">Click me</Button>
113
- *
114
- * ### Link
115
- *
116
- * <Button variant="link">Click me</Button>
117
- *
118
- * ### Default
119
- *
120
- * <Button>Click me</Button>
121
- *
122
- */
123
-
124
- import type { HTMLAttributes } from "astro/types";
125
- import { cva, type VariantProps } from "class-variance-authority";
126
-
127
- import { cn } from "@cl-light-ds/ui/lib/utils";
128
-
129
- const buttonVariants = cva(
130
- "group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:border-transparent disabled:bg-muted disabled:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0",
131
- {
132
- variants: {
133
- variant: {
134
- default: "bg-primary text-primary-foreground hover:bg-primary/80",
135
- destructive: "bg-destructive text-destructive-foreground hover:bg-destructive-hover",
136
- outline: "border border-border bg-background text-foreground hover:bg-background-hover",
137
- secondary: "bg-secondary text-secondary-foreground hover:bg-background-button-hover",
138
- ghost: "text-foreground hover:bg-background-hover",
139
- link: "text-primary hover:bg-background-hover hover:underline",
140
- },
141
- size: {
142
- default: "h-9 gap-1 px-2.5 text-xs [&_svg]:size-4",
143
- sm: "h-8 gap-1 px-2 text-xs [&_svg]:size-3.5",
144
- lg: "h-10 gap-1 px-2.5 text-sm [&_svg]:size-5",
145
- icon: "size-9 [&_svg]:size-4",
146
- "icon-sm": "size-8 [&_svg]:size-3.5",
147
- "icon-lg": "size-10 [&_svg]:size-5",
148
- },
149
- },
150
- defaultVariants: {
151
- variant: "default",
152
- size: "default",
153
- },
154
- },
155
- );
156
-
157
- type ButtonVariantProps = VariantProps<typeof buttonVariants>;
158
-
159
- type ButtonAsButton = {
160
- as?: "button";
161
- } & HTMLAttributes<"button">;
162
-
163
- type ButtonAsAnchor = {
164
- as: "a";
165
- } & HTMLAttributes<"a">;
166
-
167
- type ButtonOwnProps = ButtonVariantProps & {
168
- leadIcon?: boolean;
169
- tailIcon?: boolean;
170
- badge?: boolean;
171
- };
172
-
173
- export type Props = (ButtonAsButton | ButtonAsAnchor) & ButtonOwnProps;
174
-
175
- const hasLeadIconSlot = Astro.slots.has("lead-icon");
176
- const hasTailIconSlot = Astro.slots.has("tail-icon");
177
- const hasBadgeSlot = Astro.slots.has("badge");
178
-
179
- const {
180
- as: Tag = "button",
181
- variant = "default",
182
- size = "default",
183
- leadIcon = hasLeadIconSlot,
184
- tailIcon = hasTailIconSlot,
185
- badge = hasBadgeSlot,
186
- class: className = "",
187
- ...rest
188
- } = Astro.props as Props;
189
- ---
190
-
191
- {
192
- /*
193
- TS can't reconcile our discriminated union props with a dynamic intrinsic Tag.
194
- The public Props type *is* strict (href only allowed when as="a"),
195
- but JSX wants an intersection of button+anchor attributes here.
196
- We deliberately suppress this internal error and rely on Props for caller safety.
197
- */
198
- }
199
- <!-- @ts-expect-error – union Props + dynamic Tag confuse JSX typing (see comment above) -->
200
- <Tag
201
- data-slot="button"
202
- data-variant={variant}
203
- data-size={size}
204
- class={cn(
205
- "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-chart-1 in-data-[slot=button-group]:hover:bg-background-hover in-data-[slot=button-group]:hover:border-badge-accent aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding font-semibold aria-invalid:ring-3 ease-out duration-150 active:scale-98",
206
- buttonVariants({ variant, size }),
207
- className,
208
- )}
209
- {...rest}
210
- >
211
- {
212
- leadIcon && (
213
- <span data-slot="button-lead-icon" class="inline-flex shrink-0 items-center">
214
- <slot name="lead-icon" />
215
- </span>
216
- )
217
- }
218
- <slot />
219
- {
220
- badge && (
221
- <span data-slot="button-badge" class="inline-flex shrink-0 items-center">
222
- <slot name="badge" />
223
- </span>
224
- )
225
- }
226
- {
227
- tailIcon && (
228
- <span data-slot="button-tail-icon" class="inline-flex shrink-0 items-center">
229
- <slot name="tail-icon" />
230
- </span>
231
- )
232
- }
233
- </Tag>
1
+ ---
2
+ /**
3
+ * @component Button
4
+ * @title Button
5
+ * @description A clickable element for triggering actions or submitting forms.
6
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=74-1461
7
+ *
8
+ * @preview
9
+ *
10
+ * <div class="flex flex-wrap items-center gap-2 md:flex-row">
11
+ * <Button>Button</Button>
12
+ * <Button variant="outline" size="icon" aria-label="Submit">
13
+ * <ArrowUpIcon />
14
+ * </Button>
15
+ * </div>
16
+ *
17
+ * @usage
18
+ *
19
+ * ```astro nocollapse
20
+ * ---
21
+ * import { Button } from '@bejamas/ui/components/button';
22
+ * ---
23
+ *
24
+ * <Button>Click me</Button>
25
+ * ```
26
+ *
27
+ * ## Link
28
+ *
29
+ * You can use the `as` prop to render the component as an anchor.
30
+ *
31
+ * ```astro nocollapse
32
+ * ---
33
+ * import { Button } from '@bejamas/ui/components/button';
34
+ * ---
35
+ *
36
+ * <Button as="a" href="https://bejamas.com">Click me</Button>
37
+ * ```
38
+ *
39
+ * @examples
40
+ *
41
+ * ### Variants
42
+ *
43
+ * <div class="flex flex-col items-start gap-8 sm:flex-row">
44
+ * <Button variant="default">Default</Button>
45
+ * <Button variant="secondary">Secondary</Button>
46
+ * <Button variant="outline">Outline</Button>
47
+ * <Button variant="ghost">Ghost</Button>
48
+ * <Button variant="destructive">Destructive</Button>
49
+ * </div>
50
+ *
51
+ * ### Sizes
52
+ *
53
+ * <div class="flex flex-col items-start gap-8 sm:flex-row">
54
+ * <div class="flex items-start gap-2">
55
+ * <Button size="sm" variant="outline">
56
+ * Small
57
+ * </Button>
58
+ * <Button size="icon-sm" aria-label="Submit" variant="outline">
59
+ * <ArrowUpRightIcon />
60
+ * </Button>
61
+ * </div>
62
+ * <div class="flex items-start gap-2">
63
+ * <Button variant="outline">Default</Button>
64
+ * <Button size="icon" aria-label="Submit" variant="outline">
65
+ * <ArrowUpRightIcon />
66
+ * </Button>
67
+ * </div>
68
+ * <div class="flex items-start gap-2">
69
+ * <Button variant="outline" size="lg">
70
+ * Large
71
+ * </Button>
72
+ * <Button size="icon-lg" aria-label="Submit" variant="outline">
73
+ * <ArrowUpRightIcon />
74
+ * </Button>
75
+ * </div>
76
+ * </div>
77
+ *
78
+ * ### With icons
79
+ *
80
+ * <div class="flex flex-wrap items-center gap-2">
81
+ * <Button leadIcon>
82
+ * <ArrowUpIcon slot="lead-icon" />
83
+ * Click me
84
+ * </Button>
85
+ * <Button variant="outline" tailIcon>
86
+ * Click me
87
+ * <ArrowUpRightIcon slot="tail-icon" />
88
+ * </Button>
89
+ * </div>
90
+ *
91
+ * ### With badge
92
+ *
93
+ * <Button variant="default" badge>
94
+ * Click me
95
+ * <Badge slot="badge" variant="secondary" shape="sharp" size="sm">Value</Badge>
96
+ * </Button>
97
+ *
98
+ * ### Destructive
99
+ *
100
+ * <Button variant="destructive">Click me</Button>
101
+ *
102
+ * ### Outline
103
+ *
104
+ * <Button variant="outline">Click me</Button>
105
+ *
106
+ * ### Secondary
107
+ *
108
+ * <Button variant="secondary">Click me</Button>
109
+ *
110
+ * ### Ghost
111
+ *
112
+ * <Button variant="ghost">Click me</Button>
113
+ *
114
+ * ### Link
115
+ *
116
+ * <Button variant="link">Click me</Button>
117
+ *
118
+ * ### Default
119
+ *
120
+ * <Button>Click me</Button>
121
+ *
122
+ */
123
+
124
+ import type { HTMLAttributes } from "astro/types";
125
+ import { cva, type VariantProps } from "class-variance-authority";
126
+
127
+ import { cn } from "@cl-light-ds/ui/lib/utils";
128
+
129
+ const buttonVariants = cva(
130
+ "group/button inline-flex shrink-0 items-center justify-center whitespace-nowrap transition-all outline-none select-none disabled:pointer-events-none disabled:border-transparent disabled:bg-muted disabled:text-muted-foreground [&_svg]:pointer-events-none [&_svg]:shrink-0",
131
+ {
132
+ variants: {
133
+ variant: {
134
+ default: "bg-primary text-primary-foreground hover:bg-primary/80",
135
+ destructive: "bg-destructive text-destructive-foreground hover:bg-destructive-hover",
136
+ outline: "border border-border bg-background text-foreground hover:bg-background-hover",
137
+ secondary: "bg-secondary text-secondary-foreground hover:bg-background-button-hover",
138
+ ghost: "text-foreground hover:bg-background-hover",
139
+ link: "text-primary hover:bg-background-hover hover:underline",
140
+ },
141
+ size: {
142
+ default: "h-9 gap-1 px-2.5 text-xs [&_svg]:size-4",
143
+ sm: "h-8 gap-1 px-2 text-xs [&_svg]:size-3.5",
144
+ lg: "h-10 gap-1 px-2.5 text-sm [&_svg]:size-5",
145
+ icon: "size-9 [&_svg]:size-4",
146
+ "icon-sm": "size-8 [&_svg]:size-3.5",
147
+ "icon-lg": "size-10 [&_svg]:size-5",
148
+ },
149
+ },
150
+ defaultVariants: {
151
+ variant: "default",
152
+ size: "default",
153
+ },
154
+ },
155
+ );
156
+
157
+ type ButtonVariantProps = VariantProps<typeof buttonVariants>;
158
+
159
+ type ButtonAsButton = {
160
+ as?: "button";
161
+ } & HTMLAttributes<"button">;
162
+
163
+ type ButtonAsAnchor = {
164
+ as: "a";
165
+ } & HTMLAttributes<"a">;
166
+
167
+ type ButtonOwnProps = ButtonVariantProps & {
168
+ leadIcon?: boolean;
169
+ tailIcon?: boolean;
170
+ badge?: boolean;
171
+ };
172
+
173
+ export type Props = (ButtonAsButton | ButtonAsAnchor) & ButtonOwnProps;
174
+
175
+ const hasLeadIconSlot = Astro.slots.has("lead-icon");
176
+ const hasTailIconSlot = Astro.slots.has("tail-icon");
177
+ const hasBadgeSlot = Astro.slots.has("badge");
178
+
179
+ const {
180
+ as: Tag = "button",
181
+ variant = "default",
182
+ size = "default",
183
+ leadIcon = hasLeadIconSlot,
184
+ tailIcon = hasTailIconSlot,
185
+ badge = hasBadgeSlot,
186
+ class: className = "",
187
+ ...rest
188
+ } = Astro.props as Props;
189
+ ---
190
+
191
+ {
192
+ /*
193
+ TS can't reconcile our discriminated union props with a dynamic intrinsic Tag.
194
+ The public Props type *is* strict (href only allowed when as="a"),
195
+ but JSX wants an intersection of button+anchor attributes here.
196
+ We deliberately suppress this internal error and rely on Props for caller safety.
197
+ */
198
+ }
199
+ <!-- @ts-expect-error – union Props + dynamic Tag confuse JSX typing (see comment above) -->
200
+ <Tag
201
+ data-slot="button"
202
+ data-variant={variant}
203
+ data-size={size}
204
+ class={cn(
205
+ "focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-chart-1 in-data-[slot=button-group]:hover:bg-background-hover in-data-[slot=button-group]:hover:border-badge-accent aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:aria-invalid:border-destructive/50 rounded-lg border border-transparent bg-clip-padding font-semibold aria-invalid:ring-3 ease-out duration-150 active:scale-98",
206
+ buttonVariants({ variant, size }),
207
+ className,
208
+ )}
209
+ {...rest}
210
+ >
211
+ {
212
+ leadIcon && (
213
+ <span data-slot="button-lead-icon" class="inline-flex shrink-0 items-center">
214
+ <slot name="lead-icon" />
215
+ </span>
216
+ )
217
+ }
218
+ <slot />
219
+ {
220
+ badge && (
221
+ <span data-slot="button-badge" class="inline-flex shrink-0 items-center">
222
+ <slot name="badge" />
223
+ </span>
224
+ )
225
+ }
226
+ {
227
+ tailIcon && (
228
+ <span data-slot="button-tail-icon" class="inline-flex shrink-0 items-center">
229
+ <slot name="tail-icon" />
230
+ </span>
231
+ )
232
+ }
233
+ </Tag>
@@ -1,41 +1,41 @@
1
- # Changelog for Button.astro
2
-
3
- All notable changes to the `Button` component will be documented in this file.
4
-
5
- ## Date 8th Sep 2026
6
- ## Figma alignment (node 114-6897, prop table 7185-13418)
7
-
8
- ### Variants
9
-
10
- - **Primary:** removed the duplicated/conflicting hover utilities (`hover:bg-primary/80` next to `hover:bg-primary/90`); Figma's hover state resolves to `#3785e0cc`, i.e. `bg-primary` at 80% opacity. Kept `hover:bg-primary/80` only.
11
- - **Destructive:** completely rebuilt. It previously mixed `text-destructive` and `text-white`, and stacked four different hover opacities (`/20`, `/30`, `/60`, `/90`) across light/dark. Figma's destructive is flat: `bg-destructive text-destructive-foreground`, hover `bg-destructive-hover` (`#ef4444`, already an existing token).
12
- - **Outline:** dropped the leftover `dark:bg-input/30 dark:border-input dark:hover:bg-input/50` and the duplicate `border`/`shadow-xs shadow-none` pair. Now `border border-border bg-background text-foreground`, hover `bg-background-hover`.
13
- - **Secondary:** hover changed from `hover:bg-secondary/80` to `hover:bg-background-button-hover` (`#e4e4e7`), matching the resolved Figma value and the same token Badge already uses for its secondary hover.
14
- - **Ghost:** dropped the implicit `bg-secondary`/`bg-muted` hover mix; now `text-foreground hover:bg-background-hover`, matching Figma exactly.
15
- - **Link:** was rendered with `p-0` (no padding box) and no hover treatment beyond `hover:underline`. Figma's Link symbol keeps the same padding box as every other variant and adds a `hover:bg-background-hover` wash in addition to the underline. Removed `p-0`.
16
- - Dropped `aria-expanded:*` variant styling that had no corresponding Figma state — components should express open/active state through `variant`/`class`, not baked into every variant.
17
-
18
- ### States
19
-
20
- - **Disabled:** was `disabled:opacity-50` (just dims whatever variant color). Figma switches every variant to the same flat `bg-muted`/`text-muted-foreground`/`border-transparent`, confirmed identical across Primary, Secondary, Outline, Ghost and Destructive. Moved to the shared base class so it applies uniformly.
21
- - **Focus:** ring was `focus-visible:ring-ring/50` (translucent). Figma's focus ring is a solid 2px ring in `chart-1` (`#afcef3`, = `primary-200`) plus a `border-ring` border — both already existing tokens. Now `focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-chart-1`.
22
-
23
- ### Sizing & Spacing
24
-
25
- - **Radius:** unified to `rounded-lg` (8px) for every size. Previously `sm` used a one-off `rounded-[min(var(--radius-md),10px)]` and only `lg`/`default` used `rounded-lg` — Figma uses the same 8px radius across all three sizes and both icon-only and labeled buttons.
26
- - **Font size:** `default`/`sm` were rendering at Tailwind's `text-sm` (14px) but Figma's token for those sizes is 12px (`text-xs` in this Tailwind scale). `lg` was `text-base` (16px) but Figma's large text token is 14px (`text-sm`). Fixed both.
27
- - **Icon size:** replaced the single blanket `[&_svg:not([class*='size-'])]:size-4` (16px for every size) with per-size rules: `size-3.5` (14px) for `sm`, `size-4` (16px) for `default`, `size-5` (20px) for `lg` — confirmed against Figma's lead/tail icon dimensions per size.
28
- - **Gap:** simplified nested Figma auto-layout spacing (2px flex gap + 2px label padding on each side ≈ 4px effective gap) down to a single `gap-1` (4px) on the root, applied uniformly across sizes.
29
- - **Horizontal padding:** `sm` uses `px-2` (8px), `default`/`lg` both use `px-2.5` (10px) — confirmed from Figma's resolved padding tokens (large's extra height comes from its bigger icon/font/fixed `h-10`, not extra horizontal padding).
30
-
31
- ### New Props
32
-
33
- - `leadIcon` / `tailIcon` / `badge` (`boolean`): render the `lead-icon` / `tail-icon` / `badge` named slots before/after the label. Auto-detected from slot presence if not explicitly passed — same pattern as Badge's `leadIcon`/`tailIcon`.
34
- - This replaces the previous implicit convention of dropping an icon in as a bare child with a `data-icon="inline-start"|"inline-end"` attribute and relying on `has-data-[icon=...]`/`has-[.badge:last-child]` selectors for spacing. No existing usages in the repo relied on that convention (grepped for `data-icon=`), so this is a clean cutover.
35
- - Docs updated: the "With badge" example now also sets `shape="sharp" size="sm"` on the nested `Badge`, matching the compact/square badge Figma nests inside a Button (`rounded-xs`, `px-1 py-0.5`) rather than Badge's own pill/default sizing.
36
-
37
- ### Tokens (`globals.css`)
38
-
39
- No new tokens were needed — every color Button uses already exists: `primary`/`primary-foreground`, `secondary`/`secondary-foreground`, `background`/`background-hover`/`background-button-hover`, `destructive`/`destructive-foreground`/`destructive-hover`, `muted`/`muted-foreground`, `border`, `ring`, `chart-1`.
40
-
41
- ## Unreleased
1
+ # Changelog for Button.astro
2
+
3
+ All notable changes to the `Button` component will be documented in this file.
4
+
5
+ ## Date 8th Sep 2026
6
+ ## Figma alignment (node 114-6897, prop table 7185-13418)
7
+
8
+ ### Variants
9
+
10
+ - **Primary:** removed the duplicated/conflicting hover utilities (`hover:bg-primary/80` next to `hover:bg-primary/90`); Figma's hover state resolves to `#3785e0cc`, i.e. `bg-primary` at 80% opacity. Kept `hover:bg-primary/80` only.
11
+ - **Destructive:** completely rebuilt. It previously mixed `text-destructive` and `text-white`, and stacked four different hover opacities (`/20`, `/30`, `/60`, `/90`) across light/dark. Figma's destructive is flat: `bg-destructive text-destructive-foreground`, hover `bg-destructive-hover` (`#ef4444`, already an existing token).
12
+ - **Outline:** dropped the leftover `dark:bg-input/30 dark:border-input dark:hover:bg-input/50` and the duplicate `border`/`shadow-xs shadow-none` pair. Now `border border-border bg-background text-foreground`, hover `bg-background-hover`.
13
+ - **Secondary:** hover changed from `hover:bg-secondary/80` to `hover:bg-background-button-hover` (`#e4e4e7`), matching the resolved Figma value and the same token Badge already uses for its secondary hover.
14
+ - **Ghost:** dropped the implicit `bg-secondary`/`bg-muted` hover mix; now `text-foreground hover:bg-background-hover`, matching Figma exactly.
15
+ - **Link:** was rendered with `p-0` (no padding box) and no hover treatment beyond `hover:underline`. Figma's Link symbol keeps the same padding box as every other variant and adds a `hover:bg-background-hover` wash in addition to the underline. Removed `p-0`.
16
+ - Dropped `aria-expanded:*` variant styling that had no corresponding Figma state — components should express open/active state through `variant`/`class`, not baked into every variant.
17
+
18
+ ### States
19
+
20
+ - **Disabled:** was `disabled:opacity-50` (just dims whatever variant color). Figma switches every variant to the same flat `bg-muted`/`text-muted-foreground`/`border-transparent`, confirmed identical across Primary, Secondary, Outline, Ghost and Destructive. Moved to the shared base class so it applies uniformly.
21
+ - **Focus:** ring was `focus-visible:ring-ring/50` (translucent). Figma's focus ring is a solid 2px ring in `chart-1` (`#afcef3`, = `primary-200`) plus a `border-ring` border — both already existing tokens. Now `focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-chart-1`.
22
+
23
+ ### Sizing & Spacing
24
+
25
+ - **Radius:** unified to `rounded-lg` (8px) for every size. Previously `sm` used a one-off `rounded-[min(var(--radius-md),10px)]` and only `lg`/`default` used `rounded-lg` — Figma uses the same 8px radius across all three sizes and both icon-only and labeled buttons.
26
+ - **Font size:** `default`/`sm` were rendering at Tailwind's `text-sm` (14px) but Figma's token for those sizes is 12px (`text-xs` in this Tailwind scale). `lg` was `text-base` (16px) but Figma's large text token is 14px (`text-sm`). Fixed both.
27
+ - **Icon size:** replaced the single blanket `[&_svg:not([class*='size-'])]:size-4` (16px for every size) with per-size rules: `size-3.5` (14px) for `sm`, `size-4` (16px) for `default`, `size-5` (20px) for `lg` — confirmed against Figma's lead/tail icon dimensions per size.
28
+ - **Gap:** simplified nested Figma auto-layout spacing (2px flex gap + 2px label padding on each side ≈ 4px effective gap) down to a single `gap-1` (4px) on the root, applied uniformly across sizes.
29
+ - **Horizontal padding:** `sm` uses `px-2` (8px), `default`/`lg` both use `px-2.5` (10px) — confirmed from Figma's resolved padding tokens (large's extra height comes from its bigger icon/font/fixed `h-10`, not extra horizontal padding).
30
+
31
+ ### New Props
32
+
33
+ - `leadIcon` / `tailIcon` / `badge` (`boolean`): render the `lead-icon` / `tail-icon` / `badge` named slots before/after the label. Auto-detected from slot presence if not explicitly passed — same pattern as Badge's `leadIcon`/`tailIcon`.
34
+ - This replaces the previous implicit convention of dropping an icon in as a bare child with a `data-icon="inline-start"|"inline-end"` attribute and relying on `has-data-[icon=...]`/`has-[.badge:last-child]` selectors for spacing. No existing usages in the repo relied on that convention (grepped for `data-icon=`), so this is a clean cutover.
35
+ - Docs updated: the "With badge" example now also sets `shape="sharp" size="sm"` on the nested `Badge`, matching the compact/square badge Figma nests inside a Button (`rounded-xs`, `px-1 py-0.5`) rather than Badge's own pill/default sizing.
36
+
37
+ ### Tokens (`globals.css`)
38
+
39
+ No new tokens were needed — every color Button uses already exists: `primary`/`primary-foreground`, `secondary`/`secondary-foreground`, `background`/`background-hover`/`background-button-hover`, `destructive`/`destructive-foreground`/`destructive-hover`, `muted`/`muted-foreground`, `border`, `ring`, `chart-1`.
40
+
41
+ ## Unreleased
@@ -1,2 +1,2 @@
1
- export { default as Button } from "./Button.astro";
2
-
1
+ export { default as Button } from "./Button.astro";
2
+