@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,159 +1,159 @@
1
- ---
2
- /**
3
- * @component Checkbox
4
- * @title Checkbox
5
- * @description An accessible control for toggling between checked and unchecked states. Built on native HTML checkbox.
6
- * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=46-976
7
- *
8
- * @preview
9
- *
10
- * <div class="flex flex-col gap-6 not-content">
11
- * <div class="flex items-center gap-3">
12
- * <Checkbox id="terms" />
13
- * <Label for="terms">Accept terms and conditions</Label>
14
- * </div>
15
- *
16
- * <Field orientation="horizontal" class="max-w-sm">
17
- * <Checkbox id="terms-2" checked />
18
- * <FieldContent>
19
- * <FieldLabel for="terms-2">Accept terms and conditions</FieldLabel>
20
- * <FieldDescription>
21
- * By clicking this checkbox, you agree to the terms and conditions.
22
- * </FieldDescription>
23
- * </FieldContent>
24
- * </Field>
25
- *
26
- * <div class="group flex items-center gap-3">
27
- * <Checkbox id="toggle" disabled />
28
- * <Label for="toggle" class="group-has-disabled:opacity-50">Enable notifications</Label>
29
- * </div>
30
- *
31
- * <Label
32
- * class="hover:bg-accent/5 border-border flex items-start gap-3 rounded-lg border p-3 has-[:checked]:border-primary/30 has-[:checked]:bg-primary/5 dark:has-[:checked]:border-primary/20 dark:has-[:checked]:bg-primary/10 [&_[data-slot=checkbox]]:mt-0.5"
33
- * >
34
- * <Checkbox id="toggle-2" checked />
35
- * <div class="grid gap-1.5 font-normal">
36
- * <p class="text-sm leading-5 font-medium">Enable notifications</p>
37
- * <p class="text-muted-foreground text-sm">
38
- * You can enable or disable notifications at any time.
39
- * </p>
40
- * </div>
41
- * </Label>
42
- * </div>
43
- *
44
- * @usage
45
- *
46
- * ```astro nocollapse
47
- * ---
48
- * import { Checkbox } from '@bejamas/ui/components/checkbox';
49
- * import { Label } from '@bejamas/ui/components/label';
50
- * ---
51
- *
52
- * <div class="flex items-center gap-3">
53
- * <Checkbox id="terms" />
54
- * <Label for="terms">Accept terms and conditions</Label>
55
- * </div>
56
- * ```
57
- *
58
- * @examples
59
- *
60
- * ### Sizes
61
- *
62
- * <div class="flex items-center gap-6">
63
- * <Checkbox id="size-default" checked />
64
- * <Checkbox id="size-lg" size="lg" checked />
65
- * </div>
66
- *
67
- * ### Indeterminate
68
- *
69
- * <Checkbox id="indeterminate-example" indeterminate />
70
- */
71
- import { cva } from "class-variance-authority";
72
- import { cn } from "@cl-light-ds/ui/lib/utils";
73
- import type { HTMLAttributes } from "astro/types";
74
-
75
- interface Props extends HTMLAttributes<"input"> {
76
- class?: string;
77
- id?: string;
78
- name?: string;
79
- size?: "default" | "lg";
80
- indeterminate?: boolean;
81
- }
82
-
83
- const {
84
- class: className = "",
85
- id = "",
86
- name = id,
87
- size = "default",
88
- indeterminate = false,
89
- ...props
90
- } = Astro.props as Props;
91
-
92
- const checkboxVariants = cva(
93
- "peer appearance-none shrink-0 rounded-sm border border-input shadow-xs outline-none transition-colors checked:bg-primary checked:border-primary indeterminate:bg-primary indeterminate:border-primary dark:bg-input/30 dark:checked:bg-primary dark:checked:border-primary dark:indeterminate:bg-primary dark:indeterminate:border-primary focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:border-ring aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:checked:border-primary disabled:cursor-not-allowed disabled:bg-muted disabled:border-input group-has-disabled/field:opacity-50 relative after:absolute after:-inset-x-3 after:-inset-y-2",
94
- {
95
- variants: {
96
- size: {
97
- default: "size-4",
98
- lg: "size-5",
99
- },
100
- },
101
- defaultVariants: {
102
- size: "default",
103
- },
104
- },
105
- );
106
-
107
- const indicatorVariants = cva(
108
- "pointer-events-none absolute inset-0 grid place-content-center transition-opacity peer-disabled:text-muted-foreground text-primary-foreground",
109
- {
110
- variants: {
111
- size: {
112
- default: "[&>svg]:size-3",
113
- lg: "[&>svg]:size-4",
114
- },
115
- },
116
- defaultVariants: {
117
- size: "default",
118
- },
119
- },
120
- );
121
-
122
- // Icon geometry matches Figma exactly per size (viewBox = native px, stroke-width 1.5)
123
- // rather than scaling a single 24px icon, which rendered the stroke ~33% thinner than Figma.
124
- const iconViewBox = size === "lg" ? "0 0 16 16" : "0 0 12 12";
125
- const checkPath = size === "lg" ? "M13.3333 4L6 11.3333L2.66667 8" : "M10 3L4.5 8.5L2 6";
126
- const dashPath = size === "lg" ? "M3.33333 8H12.6667" : "M2.5 6H9.5";
127
- ---
128
-
129
- <label data-slot="checkbox" class="inline-flex items-center gap-2 cursor-pointer">
130
- <span class="relative inline-flex items-center justify-center">
131
- <input
132
- id={id}
133
- name={name}
134
- type="checkbox"
135
- data-indeterminate={indeterminate ? "" : undefined}
136
- class={cn(checkboxVariants({ size }), className)}
137
- {...props}
138
- />
139
- <span
140
- data-slot="checkbox-indicator"
141
- class={cn(indicatorVariants({ size }), "opacity-0 peer-checked:opacity-100 peer-indeterminate:opacity-0")}
142
- >
143
- <svg xmlns="http://www.w3.org/2000/svg" viewBox={iconViewBox}><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d={checkPath}/></svg>
144
- </span>
145
- <span
146
- data-slot="checkbox-indeterminate-indicator"
147
- class={cn(indicatorVariants({ size }), "opacity-0 peer-indeterminate:opacity-100")}
148
- >
149
- <svg xmlns="http://www.w3.org/2000/svg" viewBox={iconViewBox}><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d={dashPath}/></svg>
150
- </span>
151
- </span>
152
- <slot />
153
- </label>
154
-
155
- <script>
156
- document.querySelectorAll("input[data-indeterminate]").forEach((el) => {
157
- (el as HTMLInputElement).indeterminate = true;
158
- });
159
- </script>
1
+ ---
2
+ /**
3
+ * @component Checkbox
4
+ * @title Checkbox
5
+ * @description An accessible control for toggling between checked and unchecked states. Built on native HTML checkbox.
6
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=46-976
7
+ *
8
+ * @preview
9
+ *
10
+ * <div class="flex flex-col gap-6 not-content">
11
+ * <div class="flex items-center gap-3">
12
+ * <Checkbox id="terms" />
13
+ * <Label for="terms">Accept terms and conditions</Label>
14
+ * </div>
15
+ *
16
+ * <Field orientation="horizontal" class="max-w-sm">
17
+ * <Checkbox id="terms-2" checked />
18
+ * <FieldContent>
19
+ * <FieldLabel for="terms-2">Accept terms and conditions</FieldLabel>
20
+ * <FieldDescription>
21
+ * By clicking this checkbox, you agree to the terms and conditions.
22
+ * </FieldDescription>
23
+ * </FieldContent>
24
+ * </Field>
25
+ *
26
+ * <div class="group flex items-center gap-3">
27
+ * <Checkbox id="notifications-checkbox-disabled" disabled />
28
+ * <Label for="notifications-checkbox-disabled" class="group-has-disabled:opacity-50">Enable notifications</Label>
29
+ * </div>
30
+ *
31
+ * <Label
32
+ * class="hover:bg-accent/5 border-border flex items-start gap-3 rounded-lg border p-3 has-[:checked]:border-primary/30 has-[:checked]:bg-primary/5 dark:has-[:checked]:border-primary/20 dark:has-[:checked]:bg-primary/10 [&_[data-slot=checkbox]]:mt-0.5"
33
+ * >
34
+ * <Checkbox id="toggle-2" checked />
35
+ * <div class="grid gap-1.5 font-normal">
36
+ * <p class="text-sm leading-5 font-medium">Enable notifications</p>
37
+ * <p class="text-muted-foreground text-sm">
38
+ * You can enable or disable notifications at any time.
39
+ * </p>
40
+ * </div>
41
+ * </Label>
42
+ * </div>
43
+ *
44
+ * @usage
45
+ *
46
+ * ```astro nocollapse
47
+ * ---
48
+ * import { Checkbox } from '@bejamas/ui/components/checkbox';
49
+ * import { Label } from '@bejamas/ui/components/label';
50
+ * ---
51
+ *
52
+ * <div class="flex items-center gap-3">
53
+ * <Checkbox id="terms" />
54
+ * <Label for="terms">Accept terms and conditions</Label>
55
+ * </div>
56
+ * ```
57
+ *
58
+ * @examples
59
+ *
60
+ * ### Sizes
61
+ *
62
+ * <div class="flex items-center gap-6">
63
+ * <Checkbox id="size-default" checked />
64
+ * <Checkbox id="size-lg" size="lg" checked />
65
+ * </div>
66
+ *
67
+ * ### Indeterminate
68
+ *
69
+ * <Checkbox id="indeterminate-example" indeterminate />
70
+ */
71
+ import { cva } from "class-variance-authority";
72
+ import { cn } from "@cl-light-ds/ui/lib/utils";
73
+ import type { HTMLAttributes } from "astro/types";
74
+
75
+ interface Props extends HTMLAttributes<"input"> {
76
+ class?: string;
77
+ id?: string;
78
+ name?: string;
79
+ size?: "default" | "lg";
80
+ indeterminate?: boolean;
81
+ }
82
+
83
+ const {
84
+ class: className = "",
85
+ id = "",
86
+ name = id,
87
+ size = "default",
88
+ indeterminate = false,
89
+ ...props
90
+ } = Astro.props as Props;
91
+
92
+ const checkboxVariants = cva(
93
+ "peer appearance-none shrink-0 rounded-sm border border-input shadow-xs outline-none transition-colors checked:bg-primary checked:border-primary indeterminate:bg-primary indeterminate:border-primary dark:bg-input/30 dark:checked:bg-primary dark:checked:border-primary dark:indeterminate:bg-primary dark:indeterminate:border-primary focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:border-ring aria-invalid:border-destructive aria-invalid:ring-3 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:checked:border-primary disabled:cursor-not-allowed disabled:bg-muted disabled:border-input group-has-disabled/field:opacity-50 relative after:absolute after:-inset-x-3 after:-inset-y-2",
94
+ {
95
+ variants: {
96
+ size: {
97
+ default: "size-4",
98
+ lg: "size-5",
99
+ },
100
+ },
101
+ defaultVariants: {
102
+ size: "default",
103
+ },
104
+ },
105
+ );
106
+
107
+ const indicatorVariants = cva(
108
+ "pointer-events-none absolute inset-0 grid place-content-center transition-opacity peer-disabled:text-muted-foreground text-primary-foreground",
109
+ {
110
+ variants: {
111
+ size: {
112
+ default: "[&>svg]:size-3",
113
+ lg: "[&>svg]:size-4",
114
+ },
115
+ },
116
+ defaultVariants: {
117
+ size: "default",
118
+ },
119
+ },
120
+ );
121
+
122
+ // Icon geometry matches Figma exactly per size (viewBox = native px, stroke-width 1.5)
123
+ // rather than scaling a single 24px icon, which rendered the stroke ~33% thinner than Figma.
124
+ const iconViewBox = size === "lg" ? "0 0 16 16" : "0 0 12 12";
125
+ const checkPath = size === "lg" ? "M13.3333 4L6 11.3333L2.66667 8" : "M10 3L4.5 8.5L2 6";
126
+ const dashPath = size === "lg" ? "M3.33333 8H12.6667" : "M2.5 6H9.5";
127
+ ---
128
+
129
+ <label data-slot="checkbox" class="inline-flex items-center gap-2 cursor-pointer">
130
+ <span class="relative inline-flex items-center justify-center">
131
+ <input
132
+ id={id}
133
+ name={name}
134
+ type="checkbox"
135
+ data-indeterminate={indeterminate ? "" : undefined}
136
+ class={cn(checkboxVariants({ size }), className)}
137
+ {...props}
138
+ />
139
+ <span
140
+ data-slot="checkbox-indicator"
141
+ class={cn(indicatorVariants({ size }), "opacity-0 peer-checked:opacity-100 peer-indeterminate:opacity-0")}
142
+ >
143
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox={iconViewBox}><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d={checkPath}/></svg>
144
+ </span>
145
+ <span
146
+ data-slot="checkbox-indeterminate-indicator"
147
+ class={cn(indicatorVariants({ size }), "opacity-0 peer-indeterminate:opacity-100")}
148
+ >
149
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox={iconViewBox}><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="1.5" d={dashPath}/></svg>
150
+ </span>
151
+ </span>
152
+ <slot />
153
+ </label>
154
+
155
+ <script>
156
+ document.querySelectorAll("input[data-indeterminate]").forEach((el) => {
157
+ (el as HTMLInputElement).indeterminate = true;
158
+ });
159
+ </script>