@cl-light-ds/ui 0.2.0 → 0.3.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 (283) hide show
  1. package/README.md +45 -45
  2. package/package.json +1 -1
  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/card/CHANGELOG.md +162 -119
  40. package/src/components/card/Card.astro +197 -182
  41. package/src/components/card/CardAction.astro +26 -26
  42. package/src/components/card/CardContent.astro +28 -28
  43. package/src/components/card/CardDescription.astro +28 -28
  44. package/src/components/card/CardFooter.astro +24 -24
  45. package/src/components/card/CardHeader.astro +30 -30
  46. package/src/components/card/CardMedia.astro +27 -27
  47. package/src/components/card/CardMediaActions.astro +21 -0
  48. package/src/components/card/CardMediaSelect.astro +21 -0
  49. package/src/components/card/CardOverlay.astro +32 -32
  50. package/src/components/card/CardTitle.astro +21 -21
  51. package/src/components/card/index.ts +12 -10
  52. package/src/components/carousel/CHANGELOG.md +5 -5
  53. package/src/components/carousel/Carousel.astro +106 -106
  54. package/src/components/carousel/CarouselSlide.astro +22 -22
  55. package/src/components/carousel/index.ts +3 -3
  56. package/src/components/checkbox/CHANGELOG.md +58 -58
  57. package/src/components/checkbox/Checkbox.astro +159 -159
  58. package/src/components/checkbox/index.ts +1 -1
  59. package/src/components/collapsible/CHANGELOG.md +5 -5
  60. package/src/components/collapsible/Collapsible.astro +202 -202
  61. package/src/components/collapsible/CollapsibleContent.astro +36 -36
  62. package/src/components/collapsible/CollapsibleTrigger.astro +34 -34
  63. package/src/components/collapsible/index.ts +4 -4
  64. package/src/components/combobox/CHANGELOG.md +27 -27
  65. package/src/components/combobox/Combobox.astro +365 -365
  66. package/src/components/combobox/ComboboxContent.astro +37 -37
  67. package/src/components/combobox/ComboboxEmpty.astro +18 -18
  68. package/src/components/combobox/ComboboxGroup.astro +19 -19
  69. package/src/components/combobox/ComboboxInput.astro +74 -74
  70. package/src/components/combobox/ComboboxItem.astro +39 -39
  71. package/src/components/combobox/ComboboxLabel.astro +18 -18
  72. package/src/components/combobox/ComboboxList.astro +21 -21
  73. package/src/components/combobox/ComboboxSeparator.astro +17 -17
  74. package/src/components/combobox/ComboboxTrigger.astro +30 -30
  75. package/src/components/combobox/ComboboxValue.astro +22 -22
  76. package/src/components/combobox/index.ts +11 -11
  77. package/src/components/date/CHANGELOG.md +18 -18
  78. package/src/components/date/Date.astro +137 -137
  79. package/src/components/date/index.ts +2 -2
  80. package/src/components/dialog/CHANGELOG.md +39 -39
  81. package/src/components/dialog/Dialog.astro +196 -196
  82. package/src/components/dialog/DialogClose.astro +23 -23
  83. package/src/components/dialog/DialogContent.astro +42 -42
  84. package/src/components/dialog/DialogDescription.astro +18 -18
  85. package/src/components/dialog/DialogFooter.astro +18 -18
  86. package/src/components/dialog/DialogHeader.astro +18 -18
  87. package/src/components/dialog/DialogOverlay.astro +19 -19
  88. package/src/components/dialog/DialogTitle.astro +18 -18
  89. package/src/components/dialog/DialogTrigger.astro +37 -37
  90. package/src/components/dialog/index.ts +9 -9
  91. package/src/components/dropdown-menu/CHANGELOG.md +194 -194
  92. package/src/components/dropdown-menu/DropdownMenu.astro +226 -226
  93. package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -114
  94. package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -42
  95. package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -19
  96. package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -220
  97. package/src/components/dropdown-menu/DropdownMenuItemContent.astro +79 -79
  98. package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -20
  99. package/src/components/dropdown-menu/DropdownMenuPortal.astro +13 -13
  100. package/src/components/dropdown-menu/DropdownMenuRadioGroup.astro +13 -13
  101. package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -101
  102. package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -18
  103. package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -18
  104. package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -49
  105. package/src/components/dropdown-menu/dropdown-menu-item-variants.ts +24 -24
  106. package/src/components/dropdown-menu/index.ts +12 -12
  107. package/src/components/field/CHANGELOG.md +33 -33
  108. package/src/components/field/Field.astro +664 -664
  109. package/src/components/field/FieldContent.astro +20 -20
  110. package/src/components/field/FieldDescription.astro +22 -22
  111. package/src/components/field/FieldError.astro +51 -51
  112. package/src/components/field/FieldGroup.astro +20 -20
  113. package/src/components/field/FieldLabel.astro +22 -22
  114. package/src/components/field/FieldLegend.astro +23 -23
  115. package/src/components/field/FieldSeparator.astro +30 -30
  116. package/src/components/field/FieldSet.astro +20 -20
  117. package/src/components/field/FieldTitle.astro +20 -20
  118. package/src/components/field/index.ts +10 -10
  119. package/src/components/hover-card/CHANGELOG.md +20 -20
  120. package/src/components/hover-card/HoverCard.astro +235 -235
  121. package/src/components/hover-card/HoverCardContent.astro +54 -54
  122. package/src/components/hover-card/HoverCardTrigger.astro +38 -38
  123. package/src/components/hover-card/index.ts +3 -3
  124. package/src/components/input/CHANGELOG.md +29 -29
  125. package/src/components/input/Input.astro +130 -130
  126. package/src/components/input/index.ts +2 -2
  127. package/src/components/input-group/CHANGELOG.md +49 -49
  128. package/src/components/input-group/InputGroup.astro +135 -135
  129. package/src/components/input-group/InputGroupAddon.astro +49 -49
  130. package/src/components/input-group/InputGroupButton.astro +58 -58
  131. package/src/components/input-group/InputGroupInput.astro +18 -18
  132. package/src/components/input-group/InputGroupText.astro +21 -21
  133. package/src/components/input-group/InputGroupTextarea.astro +17 -17
  134. package/src/components/input-group/controlClasses.ts +2 -2
  135. package/src/components/input-group/index.ts +6 -6
  136. package/src/components/item/CHANGELOG.md +27 -27
  137. package/src/components/item/Item.astro +122 -122
  138. package/src/components/item/ItemActions.astro +21 -21
  139. package/src/components/item/ItemContent.astro +25 -25
  140. package/src/components/item/ItemDescription.astro +25 -25
  141. package/src/components/item/ItemFooter.astro +24 -24
  142. package/src/components/item/ItemGroup.astro +24 -24
  143. package/src/components/item/ItemHeader.astro +24 -24
  144. package/src/components/item/ItemMedia.astro +47 -47
  145. package/src/components/item/ItemSeparator.astro +21 -21
  146. package/src/components/item/ItemTitle.astro +25 -25
  147. package/src/components/item/index.ts +10 -10
  148. package/src/components/kbd/CHANGELOG.md +5 -5
  149. package/src/components/kbd/Kbd.astro +145 -145
  150. package/src/components/kbd/KbdGroup.astro +55 -55
  151. package/src/components/kbd/index.ts +2 -2
  152. package/src/components/label/CHANGELOG.md +28 -28
  153. package/src/components/label/Label.astro +97 -97
  154. package/src/components/label/index.ts +2 -2
  155. package/src/components/link-group/CHANGELOG.md +75 -75
  156. package/src/components/link-group/LinkGroup.astro +67 -67
  157. package/src/components/link-group/LinkGroupItem.astro +32 -32
  158. package/src/components/link-group/LinkGroupList.astro +25 -25
  159. package/src/components/link-group/LinkGroupTitle.astro +22 -22
  160. package/src/components/link-group/index.ts +5 -5
  161. package/src/components/link-group/link-group-list-variants.ts +15 -15
  162. package/src/components/marquee/CHANGELOG.md +5 -5
  163. package/src/components/marquee/Marquee.astro +119 -119
  164. package/src/components/marquee/index.ts +2 -2
  165. package/src/components/native-select/CHANGELOG.md +5 -5
  166. package/src/components/native-select/NativeSelect.astro +125 -125
  167. package/src/components/native-select/NativeSelectOptGroup.astro +14 -14
  168. package/src/components/native-select/NativeSelectOption.astro +9 -9
  169. package/src/components/native-select/index.ts +3 -3
  170. package/src/components/navigation-menu/CHANGELOG.md +63 -63
  171. package/src/components/navigation-menu/NavigationMenu.astro +414 -414
  172. package/src/components/navigation-menu/NavigationMenuContent.astro +37 -37
  173. package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -24
  174. package/src/components/navigation-menu/NavigationMenuItem.astro +22 -22
  175. package/src/components/navigation-menu/NavigationMenuLink.astro +18 -18
  176. package/src/components/navigation-menu/NavigationMenuList.astro +21 -21
  177. package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -44
  178. package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -30
  179. package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -19
  180. package/src/components/navigation-menu/index.ts +10 -10
  181. package/src/components/organisms/lightning-sidebar-nav/CHANGELOG.md +50 -0
  182. package/src/components/organisms/lightning-sidebar-nav/LightningSidebarNav.astro +176 -0
  183. package/src/components/organisms/lightning-sidebar-nav/SidebarNav.astro +50 -0
  184. package/src/components/organisms/lightning-sidebar-nav/SidebarNavGroup.astro +74 -0
  185. package/src/components/organisms/lightning-sidebar-nav/SidebarNavItem.astro +94 -0
  186. package/src/components/organisms/lightning-sidebar-nav/SidebarNavProBadge.astro +26 -0
  187. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSection.astro +71 -0
  188. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSkeleton.astro +67 -0
  189. package/src/components/organisms/lightning-sidebar-nav/SidebarNavSubItem.astro +69 -0
  190. package/src/components/organisms/lightning-sidebar-nav/SidebarNavUsage.astro +78 -0
  191. package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceAvatar.astro +46 -0
  192. package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceSwitcher.astro +130 -0
  193. package/src/components/organisms/lightning-sidebar-nav/icons.ts +46 -0
  194. package/src/components/organisms/lightning-sidebar-nav/index.ts +18 -0
  195. package/src/components/organisms/lightning-sidebar-nav/types.ts +77 -0
  196. package/src/components/popover/CHANGELOG.md +20 -20
  197. package/src/components/popover/Popover.astro +211 -211
  198. package/src/components/popover/PopoverClose.astro +18 -18
  199. package/src/components/popover/PopoverContent.astro +50 -50
  200. package/src/components/popover/PopoverDescription.astro +18 -18
  201. package/src/components/popover/PopoverHeader.astro +18 -18
  202. package/src/components/popover/PopoverTitle.astro +18 -18
  203. package/src/components/popover/PopoverTrigger.astro +35 -35
  204. package/src/components/popover/index.ts +7 -7
  205. package/src/components/radio-group/CHANGELOG.md +31 -31
  206. package/src/components/radio-group/RadioGroup.astro +81 -81
  207. package/src/components/radio-group/RadioGroupItem.astro +51 -51
  208. package/src/components/radio-group/index.ts +3 -3
  209. package/src/components/select/CHANGELOG.md +39 -39
  210. package/src/components/select/Select.astro +373 -373
  211. package/src/components/select/SelectContent.astro +91 -91
  212. package/src/components/select/SelectGroup.astro +19 -19
  213. package/src/components/select/SelectItem.astro +48 -48
  214. package/src/components/select/SelectLabel.astro +18 -18
  215. package/src/components/select/SelectSeparator.astro +17 -17
  216. package/src/components/select/SelectTrigger.astro +34 -34
  217. package/src/components/select/SelectValue.astro +22 -22
  218. package/src/components/select/index.ts +8 -8
  219. package/src/components/separator/CHANGELOG.md +5 -5
  220. package/src/components/separator/Separator.astro +60 -60
  221. package/src/components/separator/index.ts +2 -2
  222. package/src/components/skeleton/CHANGELOG.md +5 -5
  223. package/src/components/skeleton/Skeleton.astro +121 -121
  224. package/src/components/skeleton/index.ts +1 -1
  225. package/src/components/slider/CHANGELOG.md +5 -5
  226. package/src/components/slider/Slider.astro +198 -198
  227. package/src/components/slider/index.ts +1 -1
  228. package/src/components/spinner/CHANGELOG.md +18 -18
  229. package/src/components/spinner/Spinner.astro +135 -135
  230. package/src/components/spinner/index.ts +1 -1
  231. package/src/components/sticky-surface/CHANGELOG.md +5 -5
  232. package/src/components/sticky-surface/StickySurface.astro +152 -152
  233. package/src/components/sticky-surface/index.ts +2 -2
  234. package/src/components/switch/CHANGELOG.md +29 -29
  235. package/src/components/switch/Switch.astro +106 -106
  236. package/src/components/switch/index.ts +1 -1
  237. package/src/components/table/CHANGELOG.md +24 -24
  238. package/src/components/table/Table.astro +358 -251
  239. package/src/components/table/TableBody.astro +17 -18
  240. package/src/components/table/TableBulkToolbar.astro +37 -0
  241. package/src/components/table/TableCaption.astro +17 -17
  242. package/src/components/table/TableCell.astro +45 -21
  243. package/src/components/table/TableCellText.astro +17 -0
  244. package/src/components/table/TableColumnMenu.astro +50 -0
  245. package/src/components/table/TableEditableCell.astro +287 -0
  246. package/src/components/table/TableEmpty.astro +17 -0
  247. package/src/components/table/TableFolderCell.astro +38 -0
  248. package/src/components/table/TableFooter.astro +21 -21
  249. package/src/components/table/TableHead.astro +90 -21
  250. package/src/components/table/TableHeader.astro +17 -17
  251. package/src/components/table/TablePagination.astro +57 -0
  252. package/src/components/table/TableRow.astro +52 -21
  253. package/src/components/table/TableSelectAllBanner.astro +34 -0
  254. package/src/components/table/TableSelectCell.astro +50 -0
  255. package/src/components/table/TableSkeletonRow.astro +21 -0
  256. package/src/components/table/index.ts +19 -9
  257. package/src/components/table/table-cell-variants.ts +29 -0
  258. package/src/components/tabs/CHANGELOG.md +5 -5
  259. package/src/components/tabs/Tabs.astro +306 -306
  260. package/src/components/tabs/TabsContent.astro +47 -47
  261. package/src/components/tabs/TabsList.astro +69 -69
  262. package/src/components/tabs/TabsTrigger.astro +40 -40
  263. package/src/components/tabs/index.ts +6 -6
  264. package/src/components/textarea/CHANGELOG.md +22 -22
  265. package/src/components/textarea/Textarea.astro +58 -58
  266. package/src/components/textarea/index.ts +2 -2
  267. package/src/components/toggle/CHANGELOG.md +23 -23
  268. package/src/components/toggle/Toggle.astro +150 -150
  269. package/src/components/toggle/index.ts +1 -1
  270. package/src/components/toggle-group/CHANGELOG.md +18 -18
  271. package/src/components/toggle-group/ToggleGroup.astro +236 -236
  272. package/src/components/toggle-group/ToggleGroupItem.astro +48 -48
  273. package/src/components/toggle-group/index.ts +2 -2
  274. package/src/components/tooltip/CHANGELOG.md +22 -22
  275. package/src/components/tooltip/Tooltip.astro +357 -357
  276. package/src/components/tooltip/TooltipContent.astro +85 -85
  277. package/src/components/tooltip/TooltipTrigger.astro +34 -34
  278. package/src/components/tooltip/index.ts +3 -3
  279. package/src/lib/table-controller.ts +1090 -0
  280. package/src/lib/toggle-group-controller.ts +113 -113
  281. package/src/lib/toggle-shared.ts +27 -27
  282. package/src/lib/utils.ts +6 -6
  283. package/src/styles/globals.css +197 -177
@@ -1,28 +1,28 @@
1
- # Changelog
2
-
3
- All notable changes to the `Label` component will be documented in this file.
4
-
5
- ## Date 10th Sep 2026
6
- ## Figma alignment (node 7228-1290, prop table 7423-9892)
7
-
8
- ### Fixed
9
-
10
- - Removed a copy-paste duplicate class string passed twice into `cn()`.
11
- - Dropped `leading-none` on the label text — it collapsed the line-height to 1, whereas Figma's `text/md/md-medium` style specifies a 20px line-height, which Tailwind's `text-sm` already provides by default.
12
- - Added explicit `text-foreground` for the default-state text color, matching Figma's `var(--foreground)` token (previously relied on ambient inherited color).
13
-
14
- ### Added
15
-
16
- New props, matching Figma's Props Reference table:
17
-
18
- - `supportiveText?: string` — optional secondary text rendered below the label.
19
- - `showSupportiveText?: boolean` (default `false`) — shows the `supportiveText` line when both this and `supportiveText` are set.
20
- - `showHintIcon?: boolean` (default `false`) — shows a small `CircleQuestionMark` icon (`@lucide/astro`) beside the label text.
21
-
22
- Figma's table documents both new booleans defaulting to `true`, but they default to `false` here: defaulting to `true` would have made a hint icon appear next to every existing `<Label>` in the app that doesn't already opt out, since no current usage passes these props. Opt-in keeps every existing call site (including `Checkbox`'s and `FieldLabel`'s compositions) visually unchanged.
23
-
24
- The `label` prop documented in Figma's table was intentionally not added — every caller in this repo supplies label text via `<slot />` (e.g. `FieldLabel.astro`), so the slot remains the sole content API.
25
-
26
- The new layout (label text + icon row, supportive text below) only applies when `showHintIcon` or `showSupportiveText`+`supportiveText` are actually used (`hasExtras`); otherwise the label renders with the exact same classes as before (`flex items-center gap-2 ...`), so it doesn't disturb consumers that override the root layout themselves (e.g. the side-by-side custom composition in `Checkbox.astro`'s JSDoc preview).
27
-
28
- No explicit `disabled` prop was added — disabled styling continues to come from the existing `group-data-[disabled=true]` / `peer-disabled` CSS hooks tied to a sibling control, unchanged.
1
+ # Changelog
2
+
3
+ All notable changes to the `Label` component will be documented in this file.
4
+
5
+ ## Date 10th Sep 2026
6
+ ## Figma alignment (node 7228-1290, prop table 7423-9892)
7
+
8
+ ### Fixed
9
+
10
+ - Removed a copy-paste duplicate class string passed twice into `cn()`.
11
+ - Dropped `leading-none` on the label text — it collapsed the line-height to 1, whereas Figma's `text/md/md-medium` style specifies a 20px line-height, which Tailwind's `text-sm` already provides by default.
12
+ - Added explicit `text-foreground` for the default-state text color, matching Figma's `var(--foreground)` token (previously relied on ambient inherited color).
13
+
14
+ ### Added
15
+
16
+ New props, matching Figma's Props Reference table:
17
+
18
+ - `supportiveText?: string` — optional secondary text rendered below the label.
19
+ - `showSupportiveText?: boolean` (default `false`) — shows the `supportiveText` line when both this and `supportiveText` are set.
20
+ - `showHintIcon?: boolean` (default `false`) — shows a small `CircleQuestionMark` icon (`@lucide/astro`) beside the label text.
21
+
22
+ Figma's table documents both new booleans defaulting to `true`, but they default to `false` here: defaulting to `true` would have made a hint icon appear next to every existing `<Label>` in the app that doesn't already opt out, since no current usage passes these props. Opt-in keeps every existing call site (including `Checkbox`'s and `FieldLabel`'s compositions) visually unchanged.
23
+
24
+ The `label` prop documented in Figma's table was intentionally not added — every caller in this repo supplies label text via `<slot />` (e.g. `FieldLabel.astro`), so the slot remains the sole content API.
25
+
26
+ The new layout (label text + icon row, supportive text below) only applies when `showHintIcon` or `showSupportiveText`+`supportiveText` are actually used (`hasExtras`); otherwise the label renders with the exact same classes as before (`flex items-center gap-2 ...`), so it doesn't disturb consumers that override the root layout themselves (e.g. the side-by-side custom composition in `Checkbox.astro`'s JSDoc preview).
27
+
28
+ No explicit `disabled` prop was added — disabled styling continues to come from the existing `group-data-[disabled=true]` / `peer-disabled` CSS hooks tied to a sibling control, unchanged.
@@ -1,97 +1,97 @@
1
- ---
2
- /**
3
- * @component Label
4
- * @title Label
5
- * @description A text label for form controls.
6
- * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=7228-1290
7
- *
8
- * @preview
9
- *
10
- * <div class="flex items-center space-x-2">
11
- * <Checkbox id="terms" />
12
- * <Label for="terms">Accept terms and conditions</Label>
13
- * </div>
14
- *
15
- * @usage
16
- *
17
- * ```astro nocollapse
18
- * ---
19
- * import { Label } from '@bejamas/ui/components/label';
20
- * ---
21
- *
22
- * <Label for="terms">Accept terms and conditions</Label>
23
- * ```
24
- *
25
- * @examples
26
- *
27
- * ### With supportive text
28
- *
29
- * <Label for="first-name" supportiveText="Enter your legal first name" showSupportiveText>
30
- * First Name
31
- * </Label>
32
- *
33
- * ### With hint icon
34
- *
35
- * <Label for="corporate-id" showHintIcon>Corporate ID</Label>
36
- *
37
- * ### With hint icon and supportive text
38
- *
39
- * <Label
40
- * for="corporate-id-2"
41
- * showHintIcon
42
- * supportiveText="Contact admin to enable"
43
- * showSupportiveText
44
- * >
45
- * Corporate ID
46
- * </Label>
47
- */
48
-
49
- import { CircleQuestionMark } from "@lucide/astro";
50
- import { cn } from "@cl-light-ds/ui/lib/utils";
51
- import type { HTMLAttributes } from "astro/types";
52
-
53
- interface Props extends HTMLAttributes<"label"> {
54
- class?: string;
55
- supportiveText?: string;
56
- showSupportiveText?: boolean;
57
- showHintIcon?: boolean;
58
- }
59
-
60
- const {
61
- class: className = "",
62
- supportiveText,
63
- showSupportiveText = false,
64
- showHintIcon = false,
65
- ...props
66
- } = Astro.props as Props;
67
-
68
- const hasSupportiveText = showSupportiveText && !!supportiveText;
69
- const hasExtras = showHintIcon || hasSupportiveText;
70
- ---
71
-
72
- <label
73
- data-slot="label"
74
- class={cn(
75
- "flex items-center gap-2 text-sm font-medium text-foreground select-none",
76
- "group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed",
77
- hasExtras && "flex-col items-start gap-1",
78
- className,
79
- )}
80
- {...props}
81
- >
82
- {hasExtras ? (
83
- <span data-slot="label-text" class="flex items-center gap-2">
84
- <slot />
85
- {showHintIcon && (
86
- <CircleQuestionMark data-slot="label-hint-icon" class="size-3.5 shrink-0 text-muted-foreground" aria-hidden="true" />
87
- )}
88
- </span>
89
- ) : (
90
- <slot />
91
- )}
92
- {hasSupportiveText && (
93
- <span data-slot="label-supportive-text" class="text-xs font-medium text-muted-foreground">
94
- {supportiveText}
95
- </span>
96
- )}
97
- </label>
1
+ ---
2
+ /**
3
+ * @component Label
4
+ * @title Label
5
+ * @description A text label for form controls.
6
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=7228-1290
7
+ *
8
+ * @preview
9
+ *
10
+ * <div class="flex items-center space-x-2">
11
+ * <Checkbox id="terms" />
12
+ * <Label for="terms">Accept terms and conditions</Label>
13
+ * </div>
14
+ *
15
+ * @usage
16
+ *
17
+ * ```astro nocollapse
18
+ * ---
19
+ * import { Label } from '@bejamas/ui/components/label';
20
+ * ---
21
+ *
22
+ * <Label for="terms">Accept terms and conditions</Label>
23
+ * ```
24
+ *
25
+ * @examples
26
+ *
27
+ * ### With supportive text
28
+ *
29
+ * <Label for="first-name" supportiveText="Enter your legal first name" showSupportiveText>
30
+ * First Name
31
+ * </Label>
32
+ *
33
+ * ### With hint icon
34
+ *
35
+ * <Label for="corporate-id" showHintIcon>Corporate ID</Label>
36
+ *
37
+ * ### With hint icon and supportive text
38
+ *
39
+ * <Label
40
+ * for="corporate-id-2"
41
+ * showHintIcon
42
+ * supportiveText="Contact admin to enable"
43
+ * showSupportiveText
44
+ * >
45
+ * Corporate ID
46
+ * </Label>
47
+ */
48
+
49
+ import { CircleQuestionMark } from "@lucide/astro";
50
+ import { cn } from "@cl-light-ds/ui/lib/utils";
51
+ import type { HTMLAttributes } from "astro/types";
52
+
53
+ interface Props extends HTMLAttributes<"label"> {
54
+ class?: string;
55
+ supportiveText?: string;
56
+ showSupportiveText?: boolean;
57
+ showHintIcon?: boolean;
58
+ }
59
+
60
+ const {
61
+ class: className = "",
62
+ supportiveText,
63
+ showSupportiveText = false,
64
+ showHintIcon = false,
65
+ ...props
66
+ } = Astro.props as Props;
67
+
68
+ const hasSupportiveText = showSupportiveText && !!supportiveText;
69
+ const hasExtras = showHintIcon || hasSupportiveText;
70
+ ---
71
+
72
+ <label
73
+ data-slot="label"
74
+ class={cn(
75
+ "flex items-center gap-2 text-sm font-medium text-foreground select-none",
76
+ "group-data-[disabled=true]:opacity-50 peer-disabled:opacity-50 group-data-[disabled=true]:pointer-events-none peer-disabled:cursor-not-allowed",
77
+ hasExtras && "flex-col items-start gap-1",
78
+ className,
79
+ )}
80
+ {...props}
81
+ >
82
+ {hasExtras ? (
83
+ <span data-slot="label-text" class="flex items-center gap-2">
84
+ <slot />
85
+ {showHintIcon && (
86
+ <CircleQuestionMark data-slot="label-hint-icon" class="size-3.5 shrink-0 text-muted-foreground" aria-hidden="true" />
87
+ )}
88
+ </span>
89
+ ) : (
90
+ <slot />
91
+ )}
92
+ {hasSupportiveText && (
93
+ <span data-slot="label-supportive-text" class="text-xs font-medium text-muted-foreground">
94
+ {supportiveText}
95
+ </span>
96
+ )}
97
+ </label>
@@ -1,2 +1,2 @@
1
- export { default as Label } from "./Label.astro";
2
-
1
+ export { default as Label } from "./Label.astro";
2
+
@@ -1,75 +1,75 @@
1
- # Changelog
2
-
3
- All notable changes to the `LinkGroup` component will be documented in this file.
4
-
5
- ## Date 10th Sep 2026
6
- ## Figma alignment (node 2329-7942, item node 2166-5713)
7
-
8
- `LinkGroup`/`LinkGroupItem`/`LinkGroupList`/`LinkGroupTitle` had not yet gone through a Figma alignment
9
- pass — `@figmaUrl` still pointed at the old Bejamas source file, and most typography/padding/state classes
10
- were either missing entirely or on the wrong scale.
11
-
12
- ### Variants
13
-
14
- - Added an `orientation` prop to `LinkGroupList` (`"vertical" | "horizontal"`, default `"vertical"`) via a
15
- new `link-group-list-variants.ts` (`cva`), matching Figma's `Orientation=Vertical/Horizontal` variant
16
- property on the "Link Group" component — previously the list was hardcoded to a vertical `flex-col` with
17
- no way to render Figma's Horizontal variant at all.
18
-
19
- ### Sizing & Spacing
20
-
21
- - **`LinkGroupList`:** `gap-1` (4px) → `gap-2` (8px) — Figma's list uses `spacing/2` (8px) between items, not 4px.
22
- - **`LinkGroupItem`:** the slotted `<a>` had no font-size, weight, line-height, padding, or radius at all —
23
- added `text-sm font-medium leading-5` (Figma's `text/md/md-medium`, 14px/500/20px), `p-0.5 rounded-lg`
24
- (Figma's `padding/p-0.5` = 2px, `radius/rounded-lg` = 8px).
25
- - **`LinkGroupTitle`:** `text-lg` (18px) → `text-base` (16px) to match Figma's heading size; `text-current` →
26
- `text-foreground` for explicit token binding instead of relying on inherited color.
27
- - **Fixed a real spacing bug:** `LinkGroupTitle` had its own `mb-2` (8px) *on top of* `LinkGroup`'s wrapper
28
- `gap-2` (8px) between title and list, doubling the heading-to-list gap to 16px instead of Figma's single
29
- 8px gap. Removed `mb-2` — `LinkGroup`'s flex `gap-2` now does this alone.
30
- - `LinkGroup`'s wrapper gained `items-start` (was implicit `stretch`), matching Figma's root container and
31
- preventing the title/list from stretching to an unintended width.
32
-
33
- ### States
34
-
35
- - `LinkGroupItem`'s `<a>` kept its existing `hover:underline` (Default: no underline, Hover: underline, no
36
- color/background change — already matched Figma exactly).
37
- - Added `focus-visible:ring-2 focus-visible:ring-chart-1` (plus `outline-hidden`) — **not** documented in
38
- Figma, which only shows Default/Hover for this component, but added for keyboard-accessibility parity
39
- with every other interactive component in this library (Button/Input/DropdownMenuItem all have an explicit
40
- focus-visible ring). See "Flagged for the designer" below.
41
-
42
- ### Tokens (`globals.css`)
43
-
44
- - No new tokens needed — `radius-lg` and `muted-foreground`/`foreground` already existed and match Figma's
45
- values exactly (`muted-foreground` = `#71717a`, `foreground` = `#09090b` in light mode). `p-0.5`, `gap-2`,
46
- `text-sm`, `leading-5` all come from Tailwind's default scale, which happens to line up 1:1 with Figma's
47
- `padding/spacing/font-size` variables here.
48
-
49
- ### Storybook & Docs
50
-
51
- - Added `@figmaUrl`/`@component` JSDoc to `LinkGroupItem.astro` (didn't have one before) and repointed
52
- `LinkGroup.astro`'s `@figmaUrl` from the old Bejamas file to the ClickLearn Lightning Design Library.
53
- Added a "Horizontal orientation" example to `LinkGroup.astro`'s JSDoc.
54
- - `apps/web/src/pages/storybook/_sections/link-group.astro`: added an `orientation="horizontal"` preview and
55
- an `orientation` row to the `LinkGroupList` props table.
56
-
57
- ### Not changed
58
-
59
- - Kept the existing "style the slotted `<a>` via `[&_a]:` selectors" approach on `LinkGroupItem` rather than
60
- refactoring to a polymorphic `as="a"` component (like `Button`) — this was a visual alignment pass, not an
61
- architecture change. Worth a future discussion if consumers want a self-rendering anchor.
62
- - Did not add a `linkGroupLabel` boolean prop (Figma has one to toggle the heading) — Astro's `<slot>`
63
- presence already handles "heading shown only if provided" for free; a boolean prop would be redundant here.
64
-
65
- ### Flagged for the designer / engineering (not addressed in this pass)
66
-
67
- - The "Component / Link Group / Orientation" usage-example page in Figma shows a divider line under the
68
- "Link group name" heading in its Vertical sample, but the actual master component (the one with the real
69
- `Orientation` variant property) has no divider — heading, 8px gap, list. Followed the master component;
70
- worth cleaning up the usage-example frame in Figma so it doesn't raise the same question next time.
71
- - The Link component in Figma only documents Default/Hover states — no Focus state. Added a focus-visible
72
- ring anyway for accessibility (see "States" above); worth adding an explicit documented Focus variant to
73
- the Figma component so future passes don't have to guess the treatment.
74
-
75
- ## Unreleased
1
+ # Changelog
2
+
3
+ All notable changes to the `LinkGroup` component will be documented in this file.
4
+
5
+ ## Date 10th Sep 2026
6
+ ## Figma alignment (node 2329-7942, item node 2166-5713)
7
+
8
+ `LinkGroup`/`LinkGroupItem`/`LinkGroupList`/`LinkGroupTitle` had not yet gone through a Figma alignment
9
+ pass — `@figmaUrl` still pointed at the old Bejamas source file, and most typography/padding/state classes
10
+ were either missing entirely or on the wrong scale.
11
+
12
+ ### Variants
13
+
14
+ - Added an `orientation` prop to `LinkGroupList` (`"vertical" | "horizontal"`, default `"vertical"`) via a
15
+ new `link-group-list-variants.ts` (`cva`), matching Figma's `Orientation=Vertical/Horizontal` variant
16
+ property on the "Link Group" component — previously the list was hardcoded to a vertical `flex-col` with
17
+ no way to render Figma's Horizontal variant at all.
18
+
19
+ ### Sizing & Spacing
20
+
21
+ - **`LinkGroupList`:** `gap-1` (4px) → `gap-2` (8px) — Figma's list uses `spacing/2` (8px) between items, not 4px.
22
+ - **`LinkGroupItem`:** the slotted `<a>` had no font-size, weight, line-height, padding, or radius at all —
23
+ added `text-sm font-medium leading-5` (Figma's `text/md/md-medium`, 14px/500/20px), `p-0.5 rounded-lg`
24
+ (Figma's `padding/p-0.5` = 2px, `radius/rounded-lg` = 8px).
25
+ - **`LinkGroupTitle`:** `text-lg` (18px) → `text-base` (16px) to match Figma's heading size; `text-current` →
26
+ `text-foreground` for explicit token binding instead of relying on inherited color.
27
+ - **Fixed a real spacing bug:** `LinkGroupTitle` had its own `mb-2` (8px) *on top of* `LinkGroup`'s wrapper
28
+ `gap-2` (8px) between title and list, doubling the heading-to-list gap to 16px instead of Figma's single
29
+ 8px gap. Removed `mb-2` — `LinkGroup`'s flex `gap-2` now does this alone.
30
+ - `LinkGroup`'s wrapper gained `items-start` (was implicit `stretch`), matching Figma's root container and
31
+ preventing the title/list from stretching to an unintended width.
32
+
33
+ ### States
34
+
35
+ - `LinkGroupItem`'s `<a>` kept its existing `hover:underline` (Default: no underline, Hover: underline, no
36
+ color/background change — already matched Figma exactly).
37
+ - Added `focus-visible:ring-2 focus-visible:ring-chart-1` (plus `outline-hidden`) — **not** documented in
38
+ Figma, which only shows Default/Hover for this component, but added for keyboard-accessibility parity
39
+ with every other interactive component in this library (Button/Input/DropdownMenuItem all have an explicit
40
+ focus-visible ring). See "Flagged for the designer" below.
41
+
42
+ ### Tokens (`globals.css`)
43
+
44
+ - No new tokens needed — `radius-lg` and `muted-foreground`/`foreground` already existed and match Figma's
45
+ values exactly (`muted-foreground` = `#71717a`, `foreground` = `#09090b` in light mode). `p-0.5`, `gap-2`,
46
+ `text-sm`, `leading-5` all come from Tailwind's default scale, which happens to line up 1:1 with Figma's
47
+ `padding/spacing/font-size` variables here.
48
+
49
+ ### Storybook & Docs
50
+
51
+ - Added `@figmaUrl`/`@component` JSDoc to `LinkGroupItem.astro` (didn't have one before) and repointed
52
+ `LinkGroup.astro`'s `@figmaUrl` from the old Bejamas file to the ClickLearn Lightning Design Library.
53
+ Added a "Horizontal orientation" example to `LinkGroup.astro`'s JSDoc.
54
+ - `apps/web/src/pages/storybook/_sections/link-group.astro`: added an `orientation="horizontal"` preview and
55
+ an `orientation` row to the `LinkGroupList` props table.
56
+
57
+ ### Not changed
58
+
59
+ - Kept the existing "style the slotted `<a>` via `[&_a]:` selectors" approach on `LinkGroupItem` rather than
60
+ refactoring to a polymorphic `as="a"` component (like `Button`) — this was a visual alignment pass, not an
61
+ architecture change. Worth a future discussion if consumers want a self-rendering anchor.
62
+ - Did not add a `linkGroupLabel` boolean prop (Figma has one to toggle the heading) — Astro's `<slot>`
63
+ presence already handles "heading shown only if provided" for free; a boolean prop would be redundant here.
64
+
65
+ ### Flagged for the designer / engineering (not addressed in this pass)
66
+
67
+ - The "Component / Link Group / Orientation" usage-example page in Figma shows a divider line under the
68
+ "Link group name" heading in its Vertical sample, but the actual master component (the one with the real
69
+ `Orientation` variant property) has no divider — heading, 8px gap, list. Followed the master component;
70
+ worth cleaning up the usage-example frame in Figma so it doesn't raise the same question next time.
71
+ - The Link component in Figma only documents Default/Hover states — no Focus state. Added a focus-visible
72
+ ring anyway for accessibility (see "States" above); worth adding an explicit documented Focus variant to
73
+ the Figma component so future passes don't have to guess the treatment.
74
+
75
+ ## Unreleased
@@ -1,67 +1,67 @@
1
- ---
2
- /**
3
- * @component LinkGroup
4
- * @title Link Group
5
- * @description A group of related links with optional title for navigation or footer sections.
6
- * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=2329-7942
7
- *
8
- * @preview
9
- *
10
- * <LinkGroup>
11
- * <LinkGroupTitle>Company</LinkGroupTitle>
12
- * <LinkGroupList>
13
- * <LinkGroupItem><a href="/">Home</a></LinkGroupItem>
14
- * <LinkGroupItem><a href="#">About</a></LinkGroupItem>
15
- * </LinkGroupList>
16
- * </LinkGroup>
17
- *
18
- * @usage
19
- *
20
- * ```astro nocollapse
21
- * ---
22
- * import { LinkGroup, LinkGroupTitle, LinkGroupList, LinkGroupItem } from '@bejamas/ui/components/link-group';
23
- * ---
24
- *
25
- * <LinkGroup>
26
- * <LinkGroupTitle>Company</LinkGroupTitle>
27
- * <LinkGroupList>
28
- * <LinkGroupItem><a href="/">Home</a></LinkGroupItem>
29
- * </LinkGroupList>
30
- * </LinkGroup>
31
- * ```
32
- *
33
- * @examples
34
- *
35
- * ### Horizontal orientation
36
- *
37
- * <LinkGroup>
38
- * <LinkGroupTitle>Company</LinkGroupTitle>
39
- * <LinkGroupList orientation="horizontal">
40
- * <LinkGroupItem><a href="/">Home</a></LinkGroupItem>
41
- * <LinkGroupItem><a href="#">About</a></LinkGroupItem>
42
- * <LinkGroupItem><a href="#">Careers</a></LinkGroupItem>
43
- * </LinkGroupList>
44
- * </LinkGroup>
45
- */
46
-
47
- import type { HTMLAttributes } from "astro/types";
48
- import { cn } from "@cl-light-ds/ui/lib/utils";
49
-
50
- interface Props extends HTMLAttributes<"div"> {
51
- class?: string;
52
- }
53
-
54
- const {
55
- class: className = "",
56
- ...rest
57
- } = Astro.props as Props;
58
- ---
59
-
60
- <div
61
- {...rest}
62
- data-slot="link-group"
63
- class={cn("", "flex flex-col items-start gap-2", className)}
64
- >
65
- <slot />
66
- </div>
67
-
1
+ ---
2
+ /**
3
+ * @component LinkGroup
4
+ * @title Link Group
5
+ * @description A group of related links with optional title for navigation or footer sections.
6
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=2329-7942
7
+ *
8
+ * @preview
9
+ *
10
+ * <LinkGroup>
11
+ * <LinkGroupTitle>Company</LinkGroupTitle>
12
+ * <LinkGroupList>
13
+ * <LinkGroupItem><a href="/">Home</a></LinkGroupItem>
14
+ * <LinkGroupItem><a href="#">About</a></LinkGroupItem>
15
+ * </LinkGroupList>
16
+ * </LinkGroup>
17
+ *
18
+ * @usage
19
+ *
20
+ * ```astro nocollapse
21
+ * ---
22
+ * import { LinkGroup, LinkGroupTitle, LinkGroupList, LinkGroupItem } from '@bejamas/ui/components/link-group';
23
+ * ---
24
+ *
25
+ * <LinkGroup>
26
+ * <LinkGroupTitle>Company</LinkGroupTitle>
27
+ * <LinkGroupList>
28
+ * <LinkGroupItem><a href="/">Home</a></LinkGroupItem>
29
+ * </LinkGroupList>
30
+ * </LinkGroup>
31
+ * ```
32
+ *
33
+ * @examples
34
+ *
35
+ * ### Horizontal orientation
36
+ *
37
+ * <LinkGroup>
38
+ * <LinkGroupTitle>Company</LinkGroupTitle>
39
+ * <LinkGroupList orientation="horizontal">
40
+ * <LinkGroupItem><a href="/">Home</a></LinkGroupItem>
41
+ * <LinkGroupItem><a href="#">About</a></LinkGroupItem>
42
+ * <LinkGroupItem><a href="#">Careers</a></LinkGroupItem>
43
+ * </LinkGroupList>
44
+ * </LinkGroup>
45
+ */
46
+
47
+ import type { HTMLAttributes } from "astro/types";
48
+ import { cn } from "@cl-light-ds/ui/lib/utils";
49
+
50
+ interface Props extends HTMLAttributes<"div"> {
51
+ class?: string;
52
+ }
53
+
54
+ const {
55
+ class: className = "",
56
+ ...rest
57
+ } = Astro.props as Props;
58
+ ---
59
+
60
+ <div
61
+ {...rest}
62
+ data-slot="link-group"
63
+ class={cn("", "flex flex-col items-start gap-2", className)}
64
+ >
65
+ <slot />
66
+ </div>
67
+
@@ -1,32 +1,32 @@
1
- ---
2
- /**
3
- * @component LinkGroupItem
4
- * @title Link Group Item
5
- * @description A single link row inside a LinkGroupList, styling a slotted `<a>` with the group's link typography and states.
6
- * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=2166-5713
7
- */
8
-
9
- import { cn } from "@cl-light-ds/ui/lib/utils";
10
- import type { HTMLAttributes } from "astro/types";
11
-
12
- interface Props extends HTMLAttributes<"li"> {
13
- class?: string;
14
- }
15
-
16
- const {
17
- class: className = "",
18
- ...rest
19
- } = Astro.props as Props;
20
- ---
21
-
22
- <li
23
- {...rest}
24
- data-slot="link-group-item"
25
- class={cn(
26
- "[&_a]:inline-flex [&_a]:items-center [&_a]:rounded-lg [&_a]:p-0.5 [&_a]:text-sm [&_a]:font-medium [&_a]:leading-5 [&_a]:text-muted-foreground [&_a]:transition-colors [&_a]:underline-offset-4 [&_a:hover]:underline [&_a]:outline-hidden [&_a:focus-visible]:ring-2 [&_a:focus-visible]:ring-chart-1",
27
- className,
28
- )}
29
- >
30
- <slot />
31
- </li>
32
-
1
+ ---
2
+ /**
3
+ * @component LinkGroupItem
4
+ * @title Link Group Item
5
+ * @description A single link row inside a LinkGroupList, styling a slotted `<a>` with the group's link typography and states.
6
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=2166-5713
7
+ */
8
+
9
+ import { cn } from "@cl-light-ds/ui/lib/utils";
10
+ import type { HTMLAttributes } from "astro/types";
11
+
12
+ interface Props extends HTMLAttributes<"li"> {
13
+ class?: string;
14
+ }
15
+
16
+ const {
17
+ class: className = "",
18
+ ...rest
19
+ } = Astro.props as Props;
20
+ ---
21
+
22
+ <li
23
+ {...rest}
24
+ data-slot="link-group-item"
25
+ class={cn(
26
+ "[&_a]:inline-flex [&_a]:items-center [&_a]:rounded-lg [&_a]:p-0.5 [&_a]:text-sm [&_a]:font-medium [&_a]:leading-5 [&_a]:text-muted-foreground [&_a]:transition-colors [&_a]:underline-offset-4 [&_a:hover]:underline [&_a]:outline-hidden [&_a:focus-visible]:ring-2 [&_a:focus-visible]:ring-chart-1",
27
+ className,
28
+ )}
29
+ >
30
+ <slot />
31
+ </li>
32
+