@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,36 +1,36 @@
1
- ---
2
- import { cn } from "@cl-light-ds/ui/lib/utils";
3
- import type { HTMLAttributes } from "astro/types";
4
-
5
- interface Props extends HTMLAttributes<"div"> {
6
- value: string;
7
- class?: string;
8
- disabled?: boolean;
9
- }
10
-
11
- const {
12
- value,
13
- class: className = "",
14
- disabled = false,
15
- ...rest
16
- } = Astro.props as Props;
17
- ---
18
-
19
- <div
20
- {...rest}
21
- data-value={value}
22
- data-slot="accordion-item"
23
- data-disabled={disabled ? "" : undefined}
24
- aria-disabled={disabled ? "true" : undefined}
25
- class={cn(
26
- "group/accordion-item",
27
- "[--accordion-indent:--spacing(3)] has-data-[slot=accordion-trigger-lead-icon]:[--accordion-indent:--spacing(9)]",
28
- "group-data-[shape=default]/accordion:not-last:border-b group-data-[shape=default]/accordion:border-border",
29
- "group-data-[shape=rounded]/accordion:rounded-lg group-data-[shape=rounded]/accordion:border group-data-[shape=rounded]/accordion:border-border group-data-[shape=rounded]/accordion:bg-card",
30
- "has-[[data-slot=accordion-trigger]:focus-visible]:relative has-[[data-slot=accordion-trigger]:focus-visible]:z-10 has-[[data-slot=accordion-trigger]:focus-visible]:border has-[[data-slot=accordion-trigger]:focus-visible]:border-ring has-[[data-slot=accordion-trigger]:focus-visible]:ring-3 has-[[data-slot=accordion-trigger]:focus-visible]:ring-ring/50 has-[[data-slot=accordion-trigger]:focus-visible]:bg-card",
31
- "data-disabled:opacity-50",
32
- className,
33
- )}
34
- >
35
- <slot />
36
- </div>
1
+ ---
2
+ import { cn } from "@cl-light-ds/ui/lib/utils";
3
+ import type { HTMLAttributes } from "astro/types";
4
+
5
+ interface Props extends HTMLAttributes<"div"> {
6
+ value: string;
7
+ class?: string;
8
+ disabled?: boolean;
9
+ }
10
+
11
+ const {
12
+ value,
13
+ class: className = "",
14
+ disabled = false,
15
+ ...rest
16
+ } = Astro.props as Props;
17
+ ---
18
+
19
+ <div
20
+ {...rest}
21
+ data-value={value}
22
+ data-slot="accordion-item"
23
+ data-disabled={disabled ? "" : undefined}
24
+ aria-disabled={disabled ? "true" : undefined}
25
+ class={cn(
26
+ "group/accordion-item",
27
+ "[--accordion-indent:--spacing(3)] has-data-[slot=accordion-trigger-lead-icon]:[--accordion-indent:--spacing(9)]",
28
+ "group-data-[shape=default]/accordion:not-last:border-b group-data-[shape=default]/accordion:border-border",
29
+ "group-data-[shape=rounded]/accordion:rounded-lg group-data-[shape=rounded]/accordion:border group-data-[shape=rounded]/accordion:border-border group-data-[shape=rounded]/accordion:bg-card",
30
+ "has-[[data-slot=accordion-trigger]:focus-visible]:relative has-[[data-slot=accordion-trigger]:focus-visible]:z-10 has-[[data-slot=accordion-trigger]:focus-visible]:border has-[[data-slot=accordion-trigger]:focus-visible]:border-ring has-[[data-slot=accordion-trigger]:focus-visible]:ring-3 has-[[data-slot=accordion-trigger]:focus-visible]:ring-ring/50 has-[[data-slot=accordion-trigger]:focus-visible]:bg-card",
31
+ "data-disabled:opacity-50",
32
+ className,
33
+ )}
34
+ >
35
+ <slot />
36
+ </div>
@@ -1,118 +1,118 @@
1
- ---
2
- import { cva } from "class-variance-authority";
3
- import { Plus, Minus, ChevronDown, ChevronUp } from "@lucide/astro";
4
- import type { AstroComponent } from "@lucide/astro";
5
- import Badge from "../badge/Badge.astro";
6
- import { cn } from "@cl-light-ds/ui/lib/utils";
7
- import type { HTMLAttributes } from "astro/types";
8
-
9
- type IndicatorIcon = "plus-minus" | "chevron";
10
-
11
- interface Props extends HTMLAttributes<"button"> {
12
- class?: string;
13
- /** Radix-like: render wrapper so the child can be the interactive element */
14
- asChild?: boolean;
15
- /** Leading icon rendered before the label (e.g. a lucide-astro icon). */
16
- icon?: AstroComponent;
17
- /** Optional badge/pill rendered next to the label. */
18
- badge?: string | number;
19
- disabled?: boolean;
20
- /** Style of the built-in expand/collapse indicator. Ignored when a custom `icon` slot is provided. */
21
- indicatorIcon?: IndicatorIcon;
22
- }
23
-
24
- const {
25
- class: className = "",
26
- asChild = false,
27
- type = "button",
28
- icon,
29
- badge,
30
- disabled = false,
31
- indicatorIcon = "plus-minus",
32
- ...rest
33
- } = Astro.props as Props;
34
-
35
- const Icon = icon;
36
- const hasBadge = badge !== undefined && badge !== null;
37
- const [CollapsedIndicator, ExpandedIndicator] =
38
- indicatorIcon === "chevron" ? [ChevronDown, ChevronUp] : [Plus, Minus];
39
-
40
- const triggerVariants = cva(
41
- "**:data-[slot=accordion-trigger-icon]:text-muted-foreground rounded-md p-3 aria-expanded:pb-1 text-left text-xs font-semibold hover:underline **:data-[slot=accordion-trigger-icon]:size-4 group/accordion-trigger relative flex flex-1 items-start justify-between gap-2 transition-all outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-disabled/accordion-item:pointer-events-none group-data-disabled/accordion-item:opacity-50",
42
- );
43
- ---
44
-
45
- {
46
- asChild ? (
47
- <div class="flex">
48
- <div
49
- data-slot="accordion-trigger"
50
- data-as-child
51
- class={cn(triggerVariants(), className)}
52
- >
53
- <slot />
54
- </div>
55
- </div>
56
- ) : (
57
- <div class="flex">
58
- <button
59
- {...rest}
60
- type={type}
61
- aria-disabled={disabled ? "true" : undefined}
62
- data-slot="accordion-trigger"
63
- class={cn(triggerVariants(), className)}
64
- >
65
- <span class="flex flex-1 items-center gap-2">
66
- {
67
- Icon && (
68
- <span
69
- data-slot="accordion-trigger-lead-icon"
70
- class="text-foreground pointer-events-none size-4 shrink-0"
71
- >
72
- <Icon class="size-4" />
73
- </span>
74
- )
75
- }
76
- <span class="flex items-center gap-1.5">
77
- <slot />
78
- {
79
- hasBadge && (
80
- <Badge
81
- data-slot="accordion-trigger-badge"
82
- variant="outline"
83
- shape="pill"
84
- size="sm"
85
- >
86
- {badge}
87
- </Badge>
88
- )
89
- }
90
- </span>
91
- </span>
92
- {
93
- Astro.slots.has("icon") ? (
94
- <span
95
- data-slot="accordion-trigger-icon"
96
- class="pointer-events-none shrink-0"
97
- >
98
- <slot name="icon" />
99
- </span>
100
- ) : (
101
- <>
102
- <CollapsedIndicator
103
- data-slot="accordion-trigger-icon"
104
- class="pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
105
- aria-hidden="true"
106
- />
107
- <ExpandedIndicator
108
- data-slot="accordion-trigger-icon"
109
- class="pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
110
- aria-hidden="true"
111
- />
112
- </>
113
- )
114
- }
115
- </button>
116
- </div>
117
- )
118
- }
1
+ ---
2
+ import { cva } from "class-variance-authority";
3
+ import { Plus, Minus, ChevronDown, ChevronUp } from "@lucide/astro";
4
+ import type { AstroComponent } from "@lucide/astro";
5
+ import Badge from "../badge/Badge.astro";
6
+ import { cn } from "@cl-light-ds/ui/lib/utils";
7
+ import type { HTMLAttributes } from "astro/types";
8
+
9
+ type IndicatorIcon = "plus-minus" | "chevron";
10
+
11
+ interface Props extends HTMLAttributes<"button"> {
12
+ class?: string;
13
+ /** Radix-like: render wrapper so the child can be the interactive element */
14
+ asChild?: boolean;
15
+ /** Leading icon rendered before the label (e.g. a lucide-astro icon). */
16
+ icon?: AstroComponent;
17
+ /** Optional badge/pill rendered next to the label. */
18
+ badge?: string | number;
19
+ disabled?: boolean;
20
+ /** Style of the built-in expand/collapse indicator. Ignored when a custom `icon` slot is provided. */
21
+ indicatorIcon?: IndicatorIcon;
22
+ }
23
+
24
+ const {
25
+ class: className = "",
26
+ asChild = false,
27
+ type = "button",
28
+ icon,
29
+ badge,
30
+ disabled = false,
31
+ indicatorIcon = "plus-minus",
32
+ ...rest
33
+ } = Astro.props as Props;
34
+
35
+ const Icon = icon;
36
+ const hasBadge = badge !== undefined && badge !== null;
37
+ const [CollapsedIndicator, ExpandedIndicator] =
38
+ indicatorIcon === "chevron" ? [ChevronDown, ChevronUp] : [Plus, Minus];
39
+
40
+ const triggerVariants = cva(
41
+ "**:data-[slot=accordion-trigger-icon]:text-muted-foreground rounded-md p-3 aria-expanded:pb-1 text-left text-xs font-semibold hover:underline **:data-[slot=accordion-trigger-icon]:size-4 group/accordion-trigger relative flex flex-1 items-start justify-between gap-2 transition-all outline-none aria-disabled:pointer-events-none aria-disabled:opacity-50 group-data-disabled/accordion-item:pointer-events-none group-data-disabled/accordion-item:opacity-50",
42
+ );
43
+ ---
44
+
45
+ {
46
+ asChild ? (
47
+ <div class="flex">
48
+ <div
49
+ data-slot="accordion-trigger"
50
+ data-as-child
51
+ class={cn(triggerVariants(), className)}
52
+ >
53
+ <slot />
54
+ </div>
55
+ </div>
56
+ ) : (
57
+ <div class="flex">
58
+ <button
59
+ {...rest}
60
+ type={type}
61
+ aria-disabled={disabled ? "true" : undefined}
62
+ data-slot="accordion-trigger"
63
+ class={cn(triggerVariants(), className)}
64
+ >
65
+ <span class="flex flex-1 items-center gap-2">
66
+ {
67
+ Icon && (
68
+ <span
69
+ data-slot="accordion-trigger-lead-icon"
70
+ class="text-foreground pointer-events-none size-4 shrink-0"
71
+ >
72
+ <Icon class="size-4" />
73
+ </span>
74
+ )
75
+ }
76
+ <span class="flex items-center gap-1.5">
77
+ <slot />
78
+ {
79
+ hasBadge && (
80
+ <Badge
81
+ data-slot="accordion-trigger-badge"
82
+ variant="outline"
83
+ shape="pill"
84
+ size="sm"
85
+ >
86
+ {badge}
87
+ </Badge>
88
+ )
89
+ }
90
+ </span>
91
+ </span>
92
+ {
93
+ Astro.slots.has("icon") ? (
94
+ <span
95
+ data-slot="accordion-trigger-icon"
96
+ class="pointer-events-none shrink-0"
97
+ >
98
+ <slot name="icon" />
99
+ </span>
100
+ ) : (
101
+ <>
102
+ <CollapsedIndicator
103
+ data-slot="accordion-trigger-icon"
104
+ class="pointer-events-none shrink-0 group-aria-expanded/accordion-trigger:hidden"
105
+ aria-hidden="true"
106
+ />
107
+ <ExpandedIndicator
108
+ data-slot="accordion-trigger-icon"
109
+ class="pointer-events-none hidden shrink-0 group-aria-expanded/accordion-trigger:inline"
110
+ aria-hidden="true"
111
+ />
112
+ </>
113
+ )
114
+ }
115
+ </button>
116
+ </div>
117
+ )
118
+ }
@@ -1,167 +1,167 @@
1
- ---
2
- /**
3
- * @component Alert
4
- * @title Alert
5
- * @description A prominent message that draws user attention to important information.
6
- * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=133-10053
7
- *
8
- * @preview
9
- *
10
- * <div class="grid w-full max-w-xl items-start gap-4">
11
- * <Alert icon={Info}>
12
- * <AlertTitle>Success! Your changes have been saved</AlertTitle>
13
- * </Alert>
14
- *
15
- * <Alert variant="destructive" size="large" icon={CircleAlertIcon}>
16
- * <AlertTitle>Unable to process your payment.</AlertTitle>
17
- * <AlertDescription>Please verify your billing information and try again.</AlertDescription>
18
- * <Fragment slot="actions">
19
- * <Button size="sm">Primary</Button>
20
- * <Button size="sm" variant="outline">Outline</Button>
21
- * </Fragment>
22
- * </Alert>
23
- *
24
- * <Alert variant="success" icon={CircleCheckIcon}>
25
- * <AlertTitle>Payment successful.</AlertTitle>
26
- * </Alert>
27
- * </div>
28
- *
29
- * @usage
30
- *
31
- * ```astro nocollapse
32
- * ---
33
- * import { Alert, AlertTitle, AlertDescription } from '@bejamas/ui/components/alert';
34
- * import { InfoIcon } from '@lucide/astro';
35
- * ---
36
- * <Alert variant="default" icon={InfoIcon}>
37
- * <AlertTitle>Heads up!</AlertTitle>
38
- * <AlertDescription>Something happened successfully.</AlertDescription>
39
- * </Alert>
40
- * ```
41
- */
42
- import { cva } from "class-variance-authority";
43
- import { X as XIcon } from "@lucide/astro";
44
- import type { AstroComponent } from "@lucide/astro";
45
- import { cn } from "@cl-light-ds/ui/lib/utils";
46
- import type { HTMLAttributes } from "astro/types";
47
-
48
- type AlertVariant = "default" | "destructive" | "success";
49
- type AlertSize = "default" | "large";
50
-
51
- interface Props extends HTMLAttributes<"div"> {
52
- variant?: AlertVariant;
53
- size?: AlertSize;
54
- icon?: AstroComponent;
55
- dismissible?: boolean;
56
- class?: string;
57
- }
58
-
59
- const {
60
- class: className = "",
61
- variant = "default",
62
- size = "default",
63
- icon,
64
- dismissible = true,
65
- ...rest
66
- } = Astro.props as Props;
67
-
68
- const Icon = icon;
69
- const hasIcon = Boolean(Icon);
70
- const hasActions = Astro.slots.has("actions");
71
-
72
- const alertVariants = cva(
73
- "group/alert relative flex w-full rounded-lg border border-border",
74
- {
75
- variants: {
76
- variant: {
77
- default: "bg-popover",
78
- destructive: "bg-card",
79
- success: "bg-card",
80
- },
81
- size: {
82
- default: "items-center gap-2 p-2",
83
- large: "items-start gap-4 p-4",
84
- },
85
- },
86
- defaultVariants: {
87
- variant: "default",
88
- size: "default",
89
- },
90
- },
91
- );
92
-
93
- const iconVariants = cva(
94
- "flex size-6 shrink-0 items-center justify-center rounded-full [&>svg]:size-4",
95
- {
96
- variants: {
97
- variant: {
98
- default: "bg-muted text-foreground",
99
- destructive: "bg-destructive text-destructive-foreground",
100
- success: "bg-success text-success-foreground",
101
- },
102
- },
103
- defaultVariants: {
104
- variant: "default",
105
- },
106
- },
107
- );
108
-
109
- const contentVariants = cva("flex flex-1 text-sm", {
110
- variants: {
111
- size: {
112
- default: "items-center py-0.5 pl-2",
113
- large: "flex-col gap-8 pt-0.5",
114
- },
115
- },
116
- defaultVariants: {
117
- size: "default",
118
- },
119
- });
120
- ---
121
-
122
- <div
123
- {...rest}
124
- data-slot="alert"
125
- data-variant={variant}
126
- data-size={size}
127
- role="alert"
128
- class={cn(alertVariants({ variant, size }), className)}
129
- >
130
- {
131
- hasIcon && (
132
- <div data-slot="alert-icon" class={iconVariants({ variant })}>
133
- <Icon />
134
- </div>
135
- )
136
- }
137
- <div data-slot="alert-content" class={contentVariants({ size })}>
138
- {
139
- size === "large" ? (
140
- <div class="flex flex-col gap-2">
141
- <slot />
142
- </div>
143
- ) : (
144
- <slot />
145
- )
146
- }
147
- {
148
- size === "large" && hasActions && (
149
- <div data-slot="alert-actions" class="flex w-full items-center gap-2">
150
- <slot name="actions" />
151
- </div>
152
- )
153
- }
154
- </div>
155
- {
156
- dismissible && (
157
- <button
158
- type="button"
159
- data-slot="alert-dismiss"
160
- class="flex shrink-0 items-center justify-center gap-0.5 rounded-lg bg-background p-2 [&>svg]:size-4"
161
- >
162
- <XIcon />
163
- <span class="sr-only">Dismiss</span>
164
- </button>
165
- )
166
- }
167
- </div>
1
+ ---
2
+ /**
3
+ * @component Alert
4
+ * @title Alert
5
+ * @description A prominent message that draws user attention to important information.
6
+ * @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=133-10053
7
+ *
8
+ * @preview
9
+ *
10
+ * <div class="grid w-full max-w-xl items-start gap-4">
11
+ * <Alert icon={Info}>
12
+ * <AlertTitle>Success! Your changes have been saved</AlertTitle>
13
+ * </Alert>
14
+ *
15
+ * <Alert variant="destructive" size="large" icon={CircleAlertIcon}>
16
+ * <AlertTitle>Unable to process your payment.</AlertTitle>
17
+ * <AlertDescription>Please verify your billing information and try again.</AlertDescription>
18
+ * <Fragment slot="actions">
19
+ * <Button size="sm">Primary</Button>
20
+ * <Button size="sm" variant="outline">Outline</Button>
21
+ * </Fragment>
22
+ * </Alert>
23
+ *
24
+ * <Alert variant="success" icon={CircleCheckIcon}>
25
+ * <AlertTitle>Payment successful.</AlertTitle>
26
+ * </Alert>
27
+ * </div>
28
+ *
29
+ * @usage
30
+ *
31
+ * ```astro nocollapse
32
+ * ---
33
+ * import { Alert, AlertTitle, AlertDescription } from '@bejamas/ui/components/alert';
34
+ * import { InfoIcon } from '@lucide/astro';
35
+ * ---
36
+ * <Alert variant="default" icon={InfoIcon}>
37
+ * <AlertTitle>Heads up!</AlertTitle>
38
+ * <AlertDescription>Something happened successfully.</AlertDescription>
39
+ * </Alert>
40
+ * ```
41
+ */
42
+ import { cva } from "class-variance-authority";
43
+ import { X as XIcon } from "@lucide/astro";
44
+ import type { AstroComponent } from "@lucide/astro";
45
+ import { cn } from "@cl-light-ds/ui/lib/utils";
46
+ import type { HTMLAttributes } from "astro/types";
47
+
48
+ type AlertVariant = "default" | "destructive" | "success";
49
+ type AlertSize = "default" | "large";
50
+
51
+ interface Props extends HTMLAttributes<"div"> {
52
+ variant?: AlertVariant;
53
+ size?: AlertSize;
54
+ icon?: AstroComponent;
55
+ dismissible?: boolean;
56
+ class?: string;
57
+ }
58
+
59
+ const {
60
+ class: className = "",
61
+ variant = "default",
62
+ size = "default",
63
+ icon,
64
+ dismissible = true,
65
+ ...rest
66
+ } = Astro.props as Props;
67
+
68
+ const Icon = icon;
69
+ const hasIcon = Boolean(Icon);
70
+ const hasActions = Astro.slots.has("actions");
71
+
72
+ const alertVariants = cva(
73
+ "group/alert relative flex w-full rounded-lg border border-border",
74
+ {
75
+ variants: {
76
+ variant: {
77
+ default: "bg-popover",
78
+ destructive: "bg-card",
79
+ success: "bg-card",
80
+ },
81
+ size: {
82
+ default: "items-center gap-2 p-2",
83
+ large: "items-start gap-4 p-4",
84
+ },
85
+ },
86
+ defaultVariants: {
87
+ variant: "default",
88
+ size: "default",
89
+ },
90
+ },
91
+ );
92
+
93
+ const iconVariants = cva(
94
+ "flex size-6 shrink-0 items-center justify-center rounded-full [&>svg]:size-4",
95
+ {
96
+ variants: {
97
+ variant: {
98
+ default: "bg-muted text-foreground",
99
+ destructive: "bg-destructive text-destructive-foreground",
100
+ success: "bg-success text-success-foreground",
101
+ },
102
+ },
103
+ defaultVariants: {
104
+ variant: "default",
105
+ },
106
+ },
107
+ );
108
+
109
+ const contentVariants = cva("flex flex-1 text-sm", {
110
+ variants: {
111
+ size: {
112
+ default: "items-center py-0.5 pl-2",
113
+ large: "flex-col gap-8 pt-0.5",
114
+ },
115
+ },
116
+ defaultVariants: {
117
+ size: "default",
118
+ },
119
+ });
120
+ ---
121
+
122
+ <div
123
+ {...rest}
124
+ data-slot="alert"
125
+ data-variant={variant}
126
+ data-size={size}
127
+ role="alert"
128
+ class={cn(alertVariants({ variant, size }), className)}
129
+ >
130
+ {
131
+ hasIcon && (
132
+ <div data-slot="alert-icon" class={iconVariants({ variant })}>
133
+ <Icon />
134
+ </div>
135
+ )
136
+ }
137
+ <div data-slot="alert-content" class={contentVariants({ size })}>
138
+ {
139
+ size === "large" ? (
140
+ <div class="flex flex-col gap-2">
141
+ <slot />
142
+ </div>
143
+ ) : (
144
+ <slot />
145
+ )
146
+ }
147
+ {
148
+ size === "large" && hasActions && (
149
+ <div data-slot="alert-actions" class="flex w-full items-center gap-2">
150
+ <slot name="actions" />
151
+ </div>
152
+ )
153
+ }
154
+ </div>
155
+ {
156
+ dismissible && (
157
+ <button
158
+ type="button"
159
+ data-slot="alert-dismiss"
160
+ class="flex shrink-0 items-center justify-center gap-0.5 rounded-lg bg-background p-2 [&>svg]:size-4"
161
+ >
162
+ <XIcon />
163
+ <span class="sr-only">Dismiss</span>
164
+ </button>
165
+ )
166
+ }
167
+ </div>