@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,26 +1,26 @@
1
- ---
2
- import { cn } from "@cl-light-ds/ui/lib/utils";
3
- import type { HTMLAttributes, HTMLTag } from "astro/types";
4
-
5
- interface Props extends HTMLAttributes<"div"> {
6
- as?: HTMLTag;
7
- class?: string;
8
- }
9
-
10
- const {
11
- as: Tag = "div",
12
- class: className = "",
13
- ...rest
14
- } = Astro.props as Props;
15
- ---
16
-
17
- <Tag
18
- {...rest}
19
- data-slot="avatar-group"
20
- class={cn("",
21
- "group/avatar-group flex -space-x-2 [&_[data-slot=avatar]]:ring-2 [&_[data-slot=avatar]]:ring-background",
22
- className,
23
- )}
24
- >
25
- <slot />
26
- </Tag>
1
+ ---
2
+ import { cn } from "@cl-light-ds/ui/lib/utils";
3
+ import type { HTMLAttributes, HTMLTag } from "astro/types";
4
+
5
+ interface Props extends HTMLAttributes<"div"> {
6
+ as?: HTMLTag;
7
+ class?: string;
8
+ }
9
+
10
+ const {
11
+ as: Tag = "div",
12
+ class: className = "",
13
+ ...rest
14
+ } = Astro.props as Props;
15
+ ---
16
+
17
+ <Tag
18
+ {...rest}
19
+ data-slot="avatar-group"
20
+ class={cn("",
21
+ "group/avatar-group flex -space-x-2 [&_[data-slot=avatar]]:ring-2 [&_[data-slot=avatar]]:ring-background",
22
+ className,
23
+ )}
24
+ >
25
+ <slot />
26
+ </Tag>
@@ -1,30 +1,30 @@
1
- ---
2
- import { cn } from "@cl-light-ds/ui/lib/utils";
3
- import type { HTMLAttributes, HTMLTag } from "astro/types";
4
-
5
- interface Props extends HTMLAttributes<"div"> {
6
- as?: HTMLTag;
7
- class?: string;
8
- }
9
-
10
- const {
11
- as: Tag = "div",
12
- class: className = "",
13
- ...rest
14
- } = Astro.props as Props;
15
- ---
16
-
17
- <Tag
18
- {...rest}
19
- data-slot="avatar-group-count"
20
- class={cn(
21
- "bg-muted text-muted-foreground size-8 rounded-full text-sm group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
22
- "bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2",
23
- "[&>svg]:size-4",
24
- "group-has-data-[size=sm]/avatar-group:size-6 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
25
- "group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5",
26
- className,
27
- )}
28
- >
29
- <slot />
30
- </Tag>
1
+ ---
2
+ import { cn } from "@cl-light-ds/ui/lib/utils";
3
+ import type { HTMLAttributes, HTMLTag } from "astro/types";
4
+
5
+ interface Props extends HTMLAttributes<"div"> {
6
+ as?: HTMLTag;
7
+ class?: string;
8
+ }
9
+
10
+ const {
11
+ as: Tag = "div",
12
+ class: className = "",
13
+ ...rest
14
+ } = Astro.props as Props;
15
+ ---
16
+
17
+ <Tag
18
+ {...rest}
19
+ data-slot="avatar-group-count"
20
+ class={cn(
21
+ "bg-muted text-muted-foreground size-8 rounded-full text-sm group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=sm]/avatar-group:size-6 [&>svg]:size-4 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
22
+ "bg-muted text-muted-foreground ring-background relative flex size-8 shrink-0 items-center justify-center rounded-full text-sm ring-2",
23
+ "[&>svg]:size-4",
24
+ "group-has-data-[size=sm]/avatar-group:size-6 group-has-data-[size=sm]/avatar-group:[&>svg]:size-3",
25
+ "group-has-data-[size=lg]/avatar-group:size-10 group-has-data-[size=lg]/avatar-group:[&>svg]:size-5",
26
+ className,
27
+ )}
28
+ >
29
+ <slot />
30
+ </Tag>
@@ -1,46 +1,46 @@
1
- ---
2
- import { cn } from "@cl-light-ds/ui/lib/utils";
3
- import type { HTMLAttributes } from "astro/types";
4
-
5
- interface Props extends HTMLAttributes<"img"> {
6
- class?: string;
7
- src?: string;
8
- alt?: string;
9
- }
10
-
11
- const {
12
- class: className = "",
13
- src,
14
- alt = "",
15
- ...rest
16
- } = Astro.props as Props;
17
- ---
18
-
19
- {
20
- src ? (
21
- <img
22
- {...rest}
23
- data-slot="avatar-image"
24
- src={src}
25
- alt={alt}
26
- class={cn(
27
- "rounded-full",
28
- "relative z-10 aspect-square size-full object-cover",
29
- className,
30
- )}
31
- />
32
- ) : (
33
- <div
34
- {...rest}
35
- data-slot="avatar-image"
36
- class={cn(
37
- "rounded-full",
38
- "relative z-10 aspect-square size-full overflow-hidden",
39
- "[&_img]:size-full [&_img]:object-cover",
40
- className,
41
- )}
42
- >
43
- <slot />
44
- </div>
45
- )
46
- }
1
+ ---
2
+ import { cn } from "@cl-light-ds/ui/lib/utils";
3
+ import type { HTMLAttributes } from "astro/types";
4
+
5
+ interface Props extends HTMLAttributes<"img"> {
6
+ class?: string;
7
+ src?: string;
8
+ alt?: string;
9
+ }
10
+
11
+ const {
12
+ class: className = "",
13
+ src,
14
+ alt = "",
15
+ ...rest
16
+ } = Astro.props as Props;
17
+ ---
18
+
19
+ {
20
+ src ? (
21
+ <img
22
+ {...rest}
23
+ data-slot="avatar-image"
24
+ src={src}
25
+ alt={alt}
26
+ class={cn(
27
+ "rounded-full",
28
+ "relative z-10 aspect-square size-full object-cover",
29
+ className,
30
+ )}
31
+ />
32
+ ) : (
33
+ <div
34
+ {...rest}
35
+ data-slot="avatar-image"
36
+ class={cn(
37
+ "rounded-full",
38
+ "relative z-10 aspect-square size-full overflow-hidden",
39
+ "[&_img]:size-full [&_img]:object-cover",
40
+ className,
41
+ )}
42
+ >
43
+ <slot />
44
+ </div>
45
+ )
46
+ }
@@ -1,167 +1,167 @@
1
- ---
2
- /**
3
- * @component Badge
4
- * @description A small label for status, categories, or counts.
5
- * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=80-1462
6
- * @preview
7
- *
8
- * <div class="flex flex-col items-center gap-3">
9
- * <div class="flex w-full flex-wrap items-center gap-3">
10
- * <Badge>Badge</Badge>
11
- * <Badge variant="secondary">Secondary</Badge>
12
- * <Badge variant="outline">Outline</Badge>
13
- * <Badge variant="destructive">Destructive</Badge>
14
- * <Badge variant="success">Success</Badge>
15
- * <Badge variant="warning">Warning</Badge>
16
- * <Badge variant="accent">Accent</Badge>
17
- * <Badge variant="ghost">Ghost</Badge>
18
- * </div>
19
- * <div class="flex w-full flex-wrap items-center gap-3">
20
- * <Badge shape="pill">Pill</Badge>
21
- * <Badge shape="rounded">Rounded</Badge>
22
- * <Badge shape="sharp">Sharp</Badge>
23
- * </div>
24
- * <div class="flex w-full flex-wrap items-center gap-3">
25
- * <Badge leadIcon>
26
- * <BadgeCheckIcon slot="lead-icon" />
27
- * Verified
28
- * </Badge>
29
- * <Badge variant="secondary" tailIcon>
30
- * Dismissible
31
- * <XIcon slot="tail-icon" />
32
- * </Badge>
33
- * <Badge size="sm">8</Badge>
34
- * </div>
35
- * </div>
36
- *
37
- * @usage
38
- *
39
- * ```astro nocollapse
40
- * ---
41
- * import { Badge } from '@bejamas/ui/components/badge';
42
- * ---
43
- *
44
- * <Badge>Badge</Badge>
45
- * <Badge variant="secondary">Secondary</Badge>
46
- * ```
47
- */
48
-
49
- import type { HTMLTag } from "astro/types";
50
- import { cva } from "class-variance-authority";
51
- import { cn } from "@cl-light-ds/ui/lib/utils";
52
-
53
- type BadgeVariant =
54
- | "default"
55
- | "secondary"
56
- | "destructive"
57
- | "outline"
58
- | "success"
59
- | "warning"
60
- | "accent"
61
- | "ghost";
62
- type BadgeShape = "sharp" | "pill" | "rounded";
63
- type BadgeSize = "default" | "sm";
64
-
65
- interface Props {
66
- as?: HTMLTag;
67
- variant?: BadgeVariant;
68
- shape?: BadgeShape;
69
- size?: BadgeSize;
70
- leadIcon?: boolean;
71
- tailIcon?: boolean;
72
- class?: string;
73
- }
74
-
75
- const hasLeadIconSlot = Astro.slots.has("lead-icon");
76
- const hasTailIconSlot = Astro.slots.has("tail-icon");
77
-
78
- const {
79
- as = "span",
80
- variant = "default",
81
- shape = "pill",
82
- size = "default",
83
- leadIcon = hasLeadIconSlot,
84
- tailIcon = hasTailIconSlot,
85
- class: className = "",
86
- ...rest
87
- } = Astro.props as Props;
88
-
89
- const badgeVariants = cva(
90
- [
91
- "inline-flex w-fit shrink-0 items-center justify-center gap-0.5 overflow-hidden border whitespace-nowrap transition-[color,box-shadow]",
92
- "font-semibold [&_svg]:pointer-events-none [&_svg]:shrink-0",
93
- "outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",
94
- "disabled:pointer-events-none disabled:border-transparent disabled:bg-muted disabled:text-muted-foreground",
95
- ],
96
- {
97
- variants: {
98
- variant: {
99
- default:
100
- "border-primary bg-primary text-primary-foreground [a]:hover:bg-primary/80 [a]:hover:border-primary/80 [button]:hover:bg-primary/80 [button]:hover:border-primary/80",
101
- secondary:
102
- "border-border bg-secondary text-secondary-foreground [a]:hover:bg-background-button-hover [button]:hover:bg-background-button-hover",
103
- outline:
104
- "border-border bg-transparent text-foreground [a]:hover:bg-background-hover [button]:hover:bg-background-hover",
105
- destructive:
106
- "border-destructive bg-destructive text-destructive-foreground [a]:hover:bg-destructive-hover [button]:hover:bg-destructive-hover",
107
- success:
108
- "border-badge-success bg-badge-success text-badge-success-foreground [a]:hover:bg-badge-success/90 [a]:hover:border-badge-success/90 [button]:hover:bg-badge-success/90 [button]:hover:border-badge-success/90",
109
- warning:
110
- "border-badge-warning bg-badge-warning text-badge-warning-foreground [a]:hover:bg-badge-warning/80 [button]:hover:bg-badge-warning/80",
111
- accent:
112
- "border-badge-accent bg-badge-accent text-badge-accent-foreground [a]:hover:bg-badge-accent-hover [a]:hover:border-badge-accent-hover [button]:hover:bg-badge-accent-hover [button]:hover:border-badge-accent-hover",
113
- ghost:
114
- "border-transparent bg-card text-foreground [a]:hover:bg-background-hover [button]:hover:bg-background-hover",
115
- },
116
- shape: {
117
- sharp: "rounded-xs",
118
- rounded: "rounded-md",
119
- pill: "rounded-full",
120
- },
121
- size: {
122
- default: "h-6 px-1.5 py-0.5 text-sm",
123
- sm: "h-5 px-1 py-0.5 text-xs",
124
- },
125
- },
126
- defaultVariants: {
127
- variant: "default",
128
- shape: "pill",
129
- size: "default",
130
- },
131
- },
132
- );
133
-
134
- const iconVariants = cva("[&>svg]:size-full", {
135
- variants: {
136
- size: {
137
- default: "size-3.5",
138
- sm: "size-3",
139
- },
140
- },
141
- defaultVariants: {
142
- size: "default",
143
- },
144
- });
145
-
146
- const Tag = as;
147
- const classes = cn(badgeVariants({ variant, shape, size }), className);
148
- const iconClass = iconVariants({ size });
149
- ---
150
-
151
- <Tag data-slot="badge" data-variant={variant} data-shape={shape} data-size={size} class={classes} {...rest}>
152
- {
153
- leadIcon && (
154
- <span data-slot="badge-lead-icon" class={iconClass}>
155
- <slot name="lead-icon" />
156
- </span>
157
- )
158
- }
159
- <slot />
160
- {
161
- tailIcon && (
162
- <span data-slot="badge-tail-icon" class={iconClass}>
163
- <slot name="tail-icon" />
164
- </span>
165
- )
166
- }
167
- </Tag>
1
+ ---
2
+ /**
3
+ * @component Badge
4
+ * @description A small label for status, categories, or counts.
5
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=80-1462
6
+ * @preview
7
+ *
8
+ * <div class="flex flex-col items-center gap-3">
9
+ * <div class="flex w-full flex-wrap items-center gap-3">
10
+ * <Badge>Badge</Badge>
11
+ * <Badge variant="secondary">Secondary</Badge>
12
+ * <Badge variant="outline">Outline</Badge>
13
+ * <Badge variant="destructive">Destructive</Badge>
14
+ * <Badge variant="success">Success</Badge>
15
+ * <Badge variant="warning">Warning</Badge>
16
+ * <Badge variant="accent">Accent</Badge>
17
+ * <Badge variant="ghost">Ghost</Badge>
18
+ * </div>
19
+ * <div class="flex w-full flex-wrap items-center gap-3">
20
+ * <Badge shape="pill">Pill</Badge>
21
+ * <Badge shape="rounded">Rounded</Badge>
22
+ * <Badge shape="sharp">Sharp</Badge>
23
+ * </div>
24
+ * <div class="flex w-full flex-wrap items-center gap-3">
25
+ * <Badge leadIcon>
26
+ * <BadgeCheckIcon slot="lead-icon" />
27
+ * Verified
28
+ * </Badge>
29
+ * <Badge variant="secondary" tailIcon>
30
+ * Dismissible
31
+ * <XIcon slot="tail-icon" />
32
+ * </Badge>
33
+ * <Badge size="sm">8</Badge>
34
+ * </div>
35
+ * </div>
36
+ *
37
+ * @usage
38
+ *
39
+ * ```astro nocollapse
40
+ * ---
41
+ * import { Badge } from '@bejamas/ui/components/badge';
42
+ * ---
43
+ *
44
+ * <Badge>Badge</Badge>
45
+ * <Badge variant="secondary">Secondary</Badge>
46
+ * ```
47
+ */
48
+
49
+ import type { HTMLTag } from "astro/types";
50
+ import { cva } from "class-variance-authority";
51
+ import { cn } from "@cl-light-ds/ui/lib/utils";
52
+
53
+ type BadgeVariant =
54
+ | "default"
55
+ | "secondary"
56
+ | "destructive"
57
+ | "outline"
58
+ | "success"
59
+ | "warning"
60
+ | "accent"
61
+ | "ghost";
62
+ type BadgeShape = "sharp" | "pill" | "rounded";
63
+ type BadgeSize = "default" | "sm";
64
+
65
+ interface Props {
66
+ as?: HTMLTag;
67
+ variant?: BadgeVariant;
68
+ shape?: BadgeShape;
69
+ size?: BadgeSize;
70
+ leadIcon?: boolean;
71
+ tailIcon?: boolean;
72
+ class?: string;
73
+ }
74
+
75
+ const hasLeadIconSlot = Astro.slots.has("lead-icon");
76
+ const hasTailIconSlot = Astro.slots.has("tail-icon");
77
+
78
+ const {
79
+ as = "span",
80
+ variant = "default",
81
+ shape = "pill",
82
+ size = "default",
83
+ leadIcon = hasLeadIconSlot,
84
+ tailIcon = hasTailIconSlot,
85
+ class: className = "",
86
+ ...rest
87
+ } = Astro.props as Props;
88
+
89
+ const badgeVariants = cva(
90
+ [
91
+ "inline-flex w-fit shrink-0 items-center justify-center gap-0.5 overflow-hidden border whitespace-nowrap transition-[color,box-shadow]",
92
+ "font-semibold [&_svg]:pointer-events-none [&_svg]:shrink-0",
93
+ "outline-none focus-visible:border-ring focus-visible:ring-3 focus-visible:ring-ring/50",
94
+ "disabled:pointer-events-none disabled:border-transparent disabled:bg-muted disabled:text-muted-foreground",
95
+ ],
96
+ {
97
+ variants: {
98
+ variant: {
99
+ default:
100
+ "border-primary bg-primary text-primary-foreground [a]:hover:bg-primary/80 [a]:hover:border-primary/80 [button]:hover:bg-primary/80 [button]:hover:border-primary/80",
101
+ secondary:
102
+ "border-border bg-secondary text-secondary-foreground [a]:hover:bg-background-button-hover [button]:hover:bg-background-button-hover",
103
+ outline:
104
+ "border-border bg-transparent text-foreground [a]:hover:bg-background-hover [button]:hover:bg-background-hover",
105
+ destructive:
106
+ "border-destructive bg-destructive text-destructive-foreground [a]:hover:bg-destructive-hover [button]:hover:bg-destructive-hover",
107
+ success:
108
+ "border-badge-success bg-badge-success text-badge-success-foreground [a]:hover:bg-badge-success/90 [a]:hover:border-badge-success/90 [button]:hover:bg-badge-success/90 [button]:hover:border-badge-success/90",
109
+ warning:
110
+ "border-badge-warning bg-badge-warning text-badge-warning-foreground [a]:hover:bg-badge-warning/80 [button]:hover:bg-badge-warning/80",
111
+ accent:
112
+ "border-badge-accent bg-badge-accent text-badge-accent-foreground [a]:hover:bg-badge-accent-hover [a]:hover:border-badge-accent-hover [button]:hover:bg-badge-accent-hover [button]:hover:border-badge-accent-hover",
113
+ ghost:
114
+ "border-transparent bg-card text-foreground [a]:hover:bg-background-hover [button]:hover:bg-background-hover",
115
+ },
116
+ shape: {
117
+ sharp: "rounded-xs",
118
+ rounded: "rounded-md",
119
+ pill: "rounded-full",
120
+ },
121
+ size: {
122
+ default: "h-6 px-1.5 py-0.5 text-sm",
123
+ sm: "h-5 px-1 py-0.5 text-xs",
124
+ },
125
+ },
126
+ defaultVariants: {
127
+ variant: "default",
128
+ shape: "pill",
129
+ size: "default",
130
+ },
131
+ },
132
+ );
133
+
134
+ const iconVariants = cva("[&>svg]:size-full", {
135
+ variants: {
136
+ size: {
137
+ default: "size-3.5",
138
+ sm: "size-3",
139
+ },
140
+ },
141
+ defaultVariants: {
142
+ size: "default",
143
+ },
144
+ });
145
+
146
+ const Tag = as;
147
+ const classes = cn(badgeVariants({ variant, shape, size }), className);
148
+ const iconClass = iconVariants({ size });
149
+ ---
150
+
151
+ <Tag data-slot="badge" data-variant={variant} data-shape={shape} data-size={size} class={classes} {...rest}>
152
+ {
153
+ leadIcon && (
154
+ <span data-slot="badge-lead-icon" class={iconClass}>
155
+ <slot name="lead-icon" />
156
+ </span>
157
+ )
158
+ }
159
+ <slot />
160
+ {
161
+ tailIcon && (
162
+ <span data-slot="badge-tail-icon" class={iconClass}>
163
+ <slot name="tail-icon" />
164
+ </span>
165
+ )
166
+ }
167
+ </Tag>