@cl-light-ds/ui 0.1.0 → 0.2.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 (171) 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/alert/Alert.astro +167 -167
  8. package/src/components/alert/AlertDescription.astro +24 -24
  9. package/src/components/alert/AlertTitle.astro +24 -24
  10. package/src/components/avatar/Avatar.astro +197 -197
  11. package/src/components/avatar/AvatarBadge.astro +44 -44
  12. package/src/components/avatar/AvatarFallback.astro +26 -26
  13. package/src/components/avatar/AvatarGroup.astro +26 -26
  14. package/src/components/avatar/AvatarGroupCount.astro +30 -30
  15. package/src/components/avatar/AvatarImage.astro +46 -46
  16. package/src/components/badge/Badge.astro +167 -167
  17. package/src/components/breadcrumb/Breadcrumb.astro +76 -76
  18. package/src/components/breadcrumb/BreadcrumbItem.astro +32 -32
  19. package/src/components/breadcrumb/BreadcrumbList.astro +26 -26
  20. package/src/components/breadcrumb/BreadcrumbSeparator.astro +26 -26
  21. package/src/components/button/Button.astro +233 -233
  22. package/src/components/button-group/ButtonGroup.astro +130 -130
  23. package/src/components/button-group/ButtonGroupSeparator.astro +30 -30
  24. package/src/components/button-group/ButtonGroupText.astro +21 -21
  25. package/src/components/card/Card.astro +182 -182
  26. package/src/components/card/CardAction.astro +26 -26
  27. package/src/components/card/CardContent.astro +28 -28
  28. package/src/components/card/CardDescription.astro +28 -28
  29. package/src/components/card/CardFooter.astro +24 -24
  30. package/src/components/card/CardHeader.astro +30 -30
  31. package/src/components/card/CardMedia.astro +27 -27
  32. package/src/components/card/CardOverlay.astro +32 -32
  33. package/src/components/card/CardTitle.astro +21 -21
  34. package/src/components/carousel/Carousel.astro +106 -106
  35. package/src/components/carousel/CarouselSlide.astro +22 -22
  36. package/src/components/checkbox/Checkbox.astro +159 -159
  37. package/src/components/collapsible/Collapsible.astro +202 -202
  38. package/src/components/collapsible/CollapsibleContent.astro +36 -36
  39. package/src/components/collapsible/CollapsibleTrigger.astro +34 -34
  40. package/src/components/combobox/Combobox.astro +365 -365
  41. package/src/components/combobox/ComboboxContent.astro +37 -37
  42. package/src/components/combobox/ComboboxEmpty.astro +18 -18
  43. package/src/components/combobox/ComboboxGroup.astro +19 -19
  44. package/src/components/combobox/ComboboxInput.astro +74 -74
  45. package/src/components/combobox/ComboboxItem.astro +39 -39
  46. package/src/components/combobox/ComboboxLabel.astro +18 -18
  47. package/src/components/combobox/ComboboxList.astro +21 -21
  48. package/src/components/combobox/ComboboxSeparator.astro +17 -17
  49. package/src/components/combobox/ComboboxTrigger.astro +30 -30
  50. package/src/components/combobox/ComboboxValue.astro +22 -22
  51. package/src/components/date/Date.astro +137 -137
  52. package/src/components/dialog/Dialog.astro +196 -196
  53. package/src/components/dialog/DialogClose.astro +23 -23
  54. package/src/components/dialog/DialogContent.astro +42 -42
  55. package/src/components/dialog/DialogDescription.astro +18 -18
  56. package/src/components/dialog/DialogFooter.astro +18 -18
  57. package/src/components/dialog/DialogHeader.astro +18 -18
  58. package/src/components/dialog/DialogOverlay.astro +19 -19
  59. package/src/components/dialog/DialogTitle.astro +18 -18
  60. package/src/components/dialog/DialogTrigger.astro +37 -37
  61. package/src/components/dropdown-menu/DropdownMenu.astro +226 -226
  62. package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -114
  63. package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -42
  64. package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -19
  65. package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -220
  66. package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -20
  67. package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -101
  68. package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -18
  69. package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -18
  70. package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -49
  71. package/src/components/field/Field.astro +664 -664
  72. package/src/components/field/FieldContent.astro +20 -20
  73. package/src/components/field/FieldDescription.astro +22 -22
  74. package/src/components/field/FieldError.astro +51 -51
  75. package/src/components/field/FieldGroup.astro +20 -20
  76. package/src/components/field/FieldLabel.astro +22 -22
  77. package/src/components/field/FieldLegend.astro +23 -23
  78. package/src/components/field/FieldSeparator.astro +30 -30
  79. package/src/components/field/FieldSet.astro +20 -20
  80. package/src/components/field/FieldTitle.astro +20 -20
  81. package/src/components/hover-card/HoverCard.astro +235 -235
  82. package/src/components/hover-card/HoverCardContent.astro +54 -54
  83. package/src/components/hover-card/HoverCardTrigger.astro +38 -38
  84. package/src/components/input/Input.astro +130 -130
  85. package/src/components/input-group/InputGroup.astro +135 -135
  86. package/src/components/input-group/InputGroupAddon.astro +49 -49
  87. package/src/components/input-group/InputGroupButton.astro +58 -58
  88. package/src/components/input-group/InputGroupInput.astro +18 -18
  89. package/src/components/input-group/InputGroupText.astro +21 -21
  90. package/src/components/input-group/InputGroupTextarea.astro +17 -17
  91. package/src/components/item/Item.astro +122 -122
  92. package/src/components/item/ItemActions.astro +21 -21
  93. package/src/components/item/ItemContent.astro +25 -25
  94. package/src/components/item/ItemDescription.astro +25 -25
  95. package/src/components/item/ItemFooter.astro +24 -24
  96. package/src/components/item/ItemGroup.astro +24 -24
  97. package/src/components/item/ItemHeader.astro +24 -24
  98. package/src/components/item/ItemMedia.astro +47 -47
  99. package/src/components/item/ItemSeparator.astro +21 -21
  100. package/src/components/item/ItemTitle.astro +25 -25
  101. package/src/components/kbd/Kbd.astro +145 -145
  102. package/src/components/kbd/KbdGroup.astro +55 -55
  103. package/src/components/label/Label.astro +97 -97
  104. package/src/components/link-group/LinkGroup.astro +67 -67
  105. package/src/components/link-group/LinkGroupItem.astro +32 -32
  106. package/src/components/link-group/LinkGroupList.astro +25 -25
  107. package/src/components/link-group/LinkGroupTitle.astro +22 -22
  108. package/src/components/marquee/Marquee.astro +119 -119
  109. package/src/components/native-select/NativeSelect.astro +125 -125
  110. package/src/components/native-select/NativeSelectOptGroup.astro +14 -14
  111. package/src/components/navigation-menu/NavigationMenu.astro +414 -414
  112. package/src/components/navigation-menu/NavigationMenuContent.astro +37 -37
  113. package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -24
  114. package/src/components/navigation-menu/NavigationMenuItem.astro +22 -22
  115. package/src/components/navigation-menu/NavigationMenuLink.astro +18 -18
  116. package/src/components/navigation-menu/NavigationMenuList.astro +21 -21
  117. package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -44
  118. package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -30
  119. package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -19
  120. package/src/components/popover/CHANGELOG.md +17 -2
  121. package/src/components/popover/Popover.astro +211 -210
  122. package/src/components/popover/PopoverClose.astro +18 -18
  123. package/src/components/popover/PopoverContent.astro +50 -49
  124. package/src/components/popover/PopoverDescription.astro +18 -18
  125. package/src/components/popover/PopoverHeader.astro +18 -18
  126. package/src/components/popover/PopoverTitle.astro +18 -18
  127. package/src/components/popover/PopoverTrigger.astro +35 -29
  128. package/src/components/radio-group/CHANGELOG.md +23 -1
  129. package/src/components/radio-group/RadioGroup.astro +81 -81
  130. package/src/components/radio-group/RadioGroupItem.astro +51 -42
  131. package/src/components/select/Select.astro +373 -373
  132. package/src/components/select/SelectContent.astro +91 -91
  133. package/src/components/select/SelectGroup.astro +19 -19
  134. package/src/components/select/SelectItem.astro +48 -48
  135. package/src/components/select/SelectLabel.astro +18 -18
  136. package/src/components/select/SelectSeparator.astro +17 -17
  137. package/src/components/select/SelectTrigger.astro +34 -34
  138. package/src/components/select/SelectValue.astro +22 -22
  139. package/src/components/separator/Separator.astro +60 -60
  140. package/src/components/skeleton/Skeleton.astro +121 -121
  141. package/src/components/slider/Slider.astro +198 -198
  142. package/src/components/spinner/CHANGELOG.md +14 -1
  143. package/src/components/spinner/Spinner.astro +135 -134
  144. package/src/components/sticky-surface/StickySurface.astro +152 -152
  145. package/src/components/switch/CHANGELOG.md +20 -0
  146. package/src/components/switch/Switch.astro +106 -106
  147. package/src/components/table/CHANGELOG.md +21 -2
  148. package/src/components/table/Table.astro +251 -250
  149. package/src/components/table/TableBody.astro +18 -18
  150. package/src/components/table/TableCaption.astro +17 -17
  151. package/src/components/table/TableCell.astro +21 -21
  152. package/src/components/table/TableFooter.astro +21 -21
  153. package/src/components/table/TableHead.astro +21 -21
  154. package/src/components/table/TableHeader.astro +17 -17
  155. package/src/components/table/TableRow.astro +21 -21
  156. package/src/components/tabs/Tabs.astro +306 -306
  157. package/src/components/tabs/TabsContent.astro +47 -47
  158. package/src/components/tabs/TabsList.astro +69 -69
  159. package/src/components/tabs/TabsTrigger.astro +40 -40
  160. package/src/components/textarea/CHANGELOG.md +18 -1
  161. package/src/components/textarea/Textarea.astro +58 -36
  162. package/src/components/toggle/CHANGELOG.md +19 -1
  163. package/src/components/toggle/Toggle.astro +150 -138
  164. package/src/components/toggle-group/CHANGELOG.md +14 -1
  165. package/src/components/toggle-group/ToggleGroup.astro +236 -224
  166. package/src/components/toggle-group/ToggleGroupItem.astro +48 -48
  167. package/src/components/tooltip/CHANGELOG.md +19 -2
  168. package/src/components/tooltip/Tooltip.astro +357 -331
  169. package/src/components/tooltip/TooltipContent.astro +85 -60
  170. package/src/components/tooltip/TooltipTrigger.astro +34 -34
  171. package/src/lib/toggle-shared.ts +3 -2
@@ -1,18 +1,18 @@
1
- ---
2
- import type { HTMLAttributes } from "astro/types";
3
- import { cn } from "@cl-light-ds/ui/lib/utils";
4
-
5
- interface Props extends HTMLAttributes<"div"> {
6
- class?: string;
7
- }
8
-
9
- const { class: className = "", ...rest } = Astro.props as Props;
10
- ---
11
-
12
- <div
13
- {...rest}
14
- data-slot="popover-title"
15
- class={cn("font-medium", className)}
16
- >
17
- <slot />
18
- </div>
1
+ ---
2
+ import type { HTMLAttributes } from "astro/types";
3
+ import { cn } from "@cl-light-ds/ui/lib/utils";
4
+
5
+ interface Props extends HTMLAttributes<"div"> {
6
+ class?: string;
7
+ }
8
+
9
+ const { class: className = "", ...rest } = Astro.props as Props;
10
+ ---
11
+
12
+ <div
13
+ {...rest}
14
+ data-slot="popover-title"
15
+ class={cn("font-medium", className)}
16
+ >
17
+ <slot />
18
+ </div>
@@ -1,29 +1,35 @@
1
- ---
2
- import { cn } from "@cl-light-ds/ui/lib/utils";
3
- import { Button } from "../button";
4
- import type { Props as ButtonProps } from "../button/Button.astro";
5
-
6
- type Props = ButtonProps & {
7
- class?: string;
8
- /** Radix-like: render wrapper so the child can be the interactive element */
9
- asChild?: boolean;
10
- };
11
-
12
- const { class: className = "", asChild = false, ...rest } = Astro.props as Props;
13
- ---
14
-
15
- {
16
- asChild ? (
17
- <div data-slot="popover-trigger" data-as-child class={cn("", "inline-flex items-center", className)}>
18
- <slot />
19
- </div>
20
- ) : (
21
- <Button
22
- data-slot="popover-trigger"
23
- class={cn("", "inline-flex items-center", className)}
24
- {...rest as any}
25
- >
26
- <slot />
27
- </Button>
28
- )
29
- }
1
+ ---
2
+ import { cn } from "@cl-light-ds/ui/lib/utils";
3
+ import { Button } from "../button";
4
+ import type { Props as ButtonProps } from "../button/Button.astro";
5
+
6
+ type Props = ButtonProps & {
7
+ class?: string;
8
+ /** Radix-like: render wrapper so the child can be the interactive element */
9
+ asChild?: boolean;
10
+ };
11
+
12
+ const {
13
+ class: className = "",
14
+ asChild = false,
15
+ variant = "outline",
16
+ ...rest
17
+ } = Astro.props as Props;
18
+ ---
19
+
20
+ {
21
+ asChild ? (
22
+ <div data-slot="popover-trigger" data-as-child class={cn("", "inline-flex items-center", className)}>
23
+ <slot />
24
+ </div>
25
+ ) : (
26
+ <Button
27
+ data-slot="popover-trigger"
28
+ variant={variant}
29
+ class={cn("", "inline-flex items-center", className)}
30
+ {...rest as any}
31
+ >
32
+ <slot />
33
+ </Button>
34
+ )
35
+ }
@@ -1,9 +1,31 @@
1
1
  # Changelog
2
2
 
3
- All notable changes to the `RadioGroup` component will be documented in this file.
3
+ All notable changes to the `RadioGroup` component family (`RadioGroup`, `RadioGroupItem`) are documented in this file.
4
4
 
5
5
  ## Unreleased
6
6
 
7
7
  ### Fixed
8
8
 
9
9
  - Restored interactivity: `@data-slot/radio-group` (already the correct import in `RadioGroup.astro`) was never added as a dependency and was aliased to a no-op stub so builds wouldn't crash, leaving RadioGroup fully static. Added the real package as a dependency and removed the stub alias.
10
+
11
+ ## 2026-09-18 — Figma alignment (ClickLearn Lightning Design Library, node `50-3604`)
12
+
13
+ Figma documents Radio across four pages: Variants (Default, Checked), States (Default, Hover, Focus, Disabled), Sizes (Small 16px, Large 20px), and Contents (Clean, Label, Label and Caption).
14
+
15
+ ### Fixed
16
+
17
+ - Updated `@figmaUrl` from the old Bejamas file to the ClickLearn Lightning Design Library link.
18
+ - **Checked-state color was backwards** — the real, visually significant bug here. The code filled the whole circle with `bg-primary` + a white (`bg-primary-foreground`) center dot when checked. Figma shows the opposite: the circle stays white (`card`) with a `border-primary` ring, and only the small center dot is `bg-primary` — a standard bordered radio with a colored dot, not a filled disc. Fixed by removing `data-checked:bg-primary`/`data-checked:text-primary-foreground` and changing the indicator dot from `bg-primary-foreground` to `bg-primary`.
19
+ - Background: added an explicit, unconditional `bg-card` — previously the root only had `dark:bg-input/30` with nothing for light mode, same category of fix already made to `Input`/`InputGroup`/`DialogContent`.
20
+ - Added `size?: "default" | "lg"` to `RadioGroupItem` (16px / 20px, matching Figma's Small/Large) — previously hard-coded to `size-4` (16px) only. The indicator dot scales proportionally (8px / 10px, matching Figma's exact 0.5 dot-to-circle ratio at both sizes measured directly from the Figma node).
21
+
22
+ ### Added
23
+
24
+ - Storybook examples for Sizes, "Label and caption" (via `Field`/`FieldLabel`/`FieldDescription`, matching Figma's third content variant — `RadioGroupItem` already carries the `data-slot="radio-group-item"` marker that `Field`'s alignment selector targets, from the earlier Checkbox alignment work, so no additional alignment fix was needed here), and Disabled — none of these were previously demonstrated.
25
+
26
+ ### Notes
27
+
28
+ - Focus (`focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50`) and error/`aria-invalid` styling already matched Figma's tokens exactly (`ring` = `#5f9de6`) — no changes needed.
29
+ - Hover isn't implemented, per the standing project direction to skip hover states.
30
+ - Disabled's exact color treatment in Figma is ambiguous from the extracted tokens (bound to what look like incidental, non-muted swatch names at reduced opacity rather than a clear flat color swap like Checkbox/Input had) — left as the existing `disabled:opacity-50` fade rather than guessing a specific flat-color replacement.
31
+ - "Clean" and "Label" content variants were already fully supported (a bare `RadioGroupItem`, or paired with a sibling `Label`) — no changes needed.
@@ -1,81 +1,81 @@
1
- ---
2
- /**
3
- * @component RadioGroup
4
- * @title Radio Group
5
- * @description A group of options where users can select exactly one choice.
6
- * @figmaUrl https://www.figma.com/design/koxai7zw5vIuBzuVxe5T2l/bejamas-ui?node-id=2549-18817&t=YFStJ3V8fXEO8QD8-4
7
- *
8
- * @preview
9
- *
10
- * <RadioGroup name="plan" defaultValue="free">
11
- * <div class="flex items-center gap-2">
12
- * <RadioGroupItem value="free" id="free" />
13
- * <Label for="free">Free</Label>
14
- * </div>
15
- * <div class="flex items-center gap-2">
16
- * <RadioGroupItem value="pro" id="pro" />
17
- * <Label for="pro">Pro</Label>
18
- * </div>
19
- * </RadioGroup>
20
- *
21
- * @usage
22
- *
23
- * ```astro nocollapse
24
- * ---
25
- * import { RadioGroup, RadioGroupItem } from '@bejamas/ui/components/radio-group';
26
- * import { Label } from '@bejamas/ui/components/label';
27
- * ---
28
- *
29
- * <RadioGroup name="plan" defaultValue="free">
30
- * <div class="flex items-center gap-2">
31
- * <RadioGroupItem value="free" id="free" />
32
- * <Label for="free">Free</Label>
33
- * </div>
34
- * </RadioGroup>
35
- * ```
36
- */
37
- import type { HTMLAttributes } from "astro/types";
38
- import { cn } from "@cl-light-ds/ui/lib/utils";
39
-
40
- interface Props extends HTMLAttributes<"div"> {
41
- class?: string;
42
- defaultValue?: string;
43
- name?: string;
44
- disabled?: boolean;
45
- readOnly?: boolean;
46
- required?: boolean;
47
- "aria-label"?: string;
48
- "aria-labelledby"?: string;
49
- }
50
-
51
- const {
52
- class: className = "",
53
- defaultValue,
54
- name,
55
- disabled = false,
56
- readOnly = false,
57
- required = false,
58
- ...rest
59
- } = Astro.props as Props;
60
- ---
61
-
62
- <div
63
- {...rest}
64
- data-slot="radio-group"
65
- data-default-value={defaultValue}
66
- data-name={name}
67
- data-disabled={disabled ? "true" : undefined}
68
- data-read-only={readOnly ? "true" : undefined}
69
- data-required={required ? "true" : undefined}
70
- class={cn("grid gap-3", className)}
71
- >
72
- <slot />
73
- </div>
74
-
75
- <script>
76
- import { createRadioGroup } from "@data-slot/radio-group";
77
-
78
- document
79
- .querySelectorAll('[data-slot="radio-group"]')
80
- .forEach((el) => createRadioGroup(el));
81
- </script>
1
+ ---
2
+ /**
3
+ * @component RadioGroup
4
+ * @title Radio Group
5
+ * @description A group of options where users can select exactly one choice.
6
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=50-3604
7
+ *
8
+ * @preview
9
+ *
10
+ * <RadioGroup name="plan" defaultValue="free">
11
+ * <div class="flex items-center gap-2">
12
+ * <RadioGroupItem value="free" id="free" />
13
+ * <Label for="free">Free</Label>
14
+ * </div>
15
+ * <div class="flex items-center gap-2">
16
+ * <RadioGroupItem value="pro" id="pro" />
17
+ * <Label for="pro">Pro</Label>
18
+ * </div>
19
+ * </RadioGroup>
20
+ *
21
+ * @usage
22
+ *
23
+ * ```astro nocollapse
24
+ * ---
25
+ * import { RadioGroup, RadioGroupItem } from '@bejamas/ui/components/radio-group';
26
+ * import { Label } from '@bejamas/ui/components/label';
27
+ * ---
28
+ *
29
+ * <RadioGroup name="plan" defaultValue="free">
30
+ * <div class="flex items-center gap-2">
31
+ * <RadioGroupItem value="free" id="free" />
32
+ * <Label for="free">Free</Label>
33
+ * </div>
34
+ * </RadioGroup>
35
+ * ```
36
+ */
37
+ import type { HTMLAttributes } from "astro/types";
38
+ import { cn } from "@cl-light-ds/ui/lib/utils";
39
+
40
+ interface Props extends HTMLAttributes<"div"> {
41
+ class?: string;
42
+ defaultValue?: string;
43
+ name?: string;
44
+ disabled?: boolean;
45
+ readOnly?: boolean;
46
+ required?: boolean;
47
+ "aria-label"?: string;
48
+ "aria-labelledby"?: string;
49
+ }
50
+
51
+ const {
52
+ class: className = "",
53
+ defaultValue,
54
+ name,
55
+ disabled = false,
56
+ readOnly = false,
57
+ required = false,
58
+ ...rest
59
+ } = Astro.props as Props;
60
+ ---
61
+
62
+ <div
63
+ {...rest}
64
+ data-slot="radio-group"
65
+ data-default-value={defaultValue}
66
+ data-name={name}
67
+ data-disabled={disabled ? "true" : undefined}
68
+ data-read-only={readOnly ? "true" : undefined}
69
+ data-required={required ? "true" : undefined}
70
+ class={cn("grid gap-3", className)}
71
+ >
72
+ <slot />
73
+ </div>
74
+
75
+ <script>
76
+ import { createRadioGroup } from "@data-slot/radio-group";
77
+
78
+ document
79
+ .querySelectorAll('[data-slot="radio-group"]')
80
+ .forEach((el) => createRadioGroup(el));
81
+ </script>
@@ -1,42 +1,51 @@
1
- ---
2
- import { cn } from "@cl-light-ds/ui/lib/utils";
3
- import type { HTMLAttributes } from "astro/types";
4
-
5
- interface Props extends HTMLAttributes<"span"> {
6
- value: string;
7
- class?: string;
8
- disabled?: boolean;
9
- id?: string;
10
- "aria-invalid"?: boolean | "true" | "false";
11
- }
12
-
13
- const {
14
- class: className = "",
15
- id = "",
16
- value,
17
- disabled = false,
18
- "aria-invalid": ariaInvalid,
19
- ...rest
20
- } = Astro.props as Props;
21
- ---
22
-
23
- <span
24
- {...rest}
25
- id={id}
26
- data-slot="radio-group-item"
27
- data-value={value}
28
- data-disabled={disabled ? "true" : undefined}
29
- aria-invalid={ariaInvalid}
30
- class={cn(
31
- "border-input dark:bg-input/30 data-checked:bg-primary data-checked:text-primary-foreground dark:data-checked:bg-primary data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex size-4 rounded-full focus-visible:ring-3 aria-invalid:ring-3 group/radio-group-item peer relative aspect-square shrink-0 border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50",
32
- className,
33
- )}
34
- >
35
- <span
36
- aria-hidden="true"
37
- data-slot="radio-group-indicator"
38
- class="flex size-4 items-center justify-center data-unchecked:hidden"
39
- >
40
- <span class="bg-primary-foreground absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2 rounded-full"></span>
41
- </span>
42
- </span>
1
+ ---
2
+ import { cn } from "@cl-light-ds/ui/lib/utils";
3
+ import type { HTMLAttributes } from "astro/types";
4
+
5
+ interface Props extends HTMLAttributes<"span"> {
6
+ value: string;
7
+ size?: "default" | "lg";
8
+ class?: string;
9
+ disabled?: boolean;
10
+ id?: string;
11
+ "aria-invalid"?: boolean | "true" | "false";
12
+ }
13
+
14
+ const {
15
+ class: className = "",
16
+ id = "",
17
+ value,
18
+ size = "default",
19
+ disabled = false,
20
+ "aria-invalid": ariaInvalid,
21
+ ...rest
22
+ } = Astro.props as Props;
23
+ ---
24
+
25
+ <span
26
+ {...rest}
27
+ id={id}
28
+ data-slot="radio-group-item"
29
+ data-value={value}
30
+ data-size={size}
31
+ data-disabled={disabled ? "true" : undefined}
32
+ aria-invalid={ariaInvalid}
33
+ class={cn(
34
+ "border-input bg-card data-checked:border-primary aria-invalid:aria-checked:border-primary aria-invalid:border-destructive focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 dark:aria-invalid:border-destructive/50 flex rounded-full focus-visible:ring-3 aria-invalid:ring-3 group/radio-group-item peer relative aspect-square shrink-0 border outline-none after:absolute after:-inset-x-3 after:-inset-y-2 disabled:cursor-not-allowed disabled:opacity-50",
35
+ size === "lg" ? "size-5" : "size-4",
36
+ className,
37
+ )}
38
+ >
39
+ <span
40
+ aria-hidden="true"
41
+ data-slot="radio-group-indicator"
42
+ class={cn("flex items-center justify-center data-unchecked:hidden", size === "lg" ? "size-5" : "size-4")}
43
+ >
44
+ <span
45
+ class={cn(
46
+ "bg-primary absolute top-1/2 left-1/2 -translate-x-1/2 -translate-y-1/2 rounded-full",
47
+ size === "lg" ? "size-2.5" : "size-2",
48
+ )}
49
+ ></span>
50
+ </span>
51
+ </span>