@cl-light-ds/ui 0.2.0 → 0.4.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.
- package/README.md +45 -45
- package/package.json +2 -2
- package/src/components/accordion/Accordion.astro +248 -248
- package/src/components/accordion/AccordionContent.astro +26 -26
- package/src/components/accordion/AccordionItem.astro +36 -36
- package/src/components/accordion/AccordionTrigger.astro +118 -118
- package/src/components/accordion/CHANGELOG.md +41 -41
- package/src/components/accordion/index.ts +4 -4
- package/src/components/alert/Alert.astro +167 -167
- package/src/components/alert/AlertDescription.astro +24 -24
- package/src/components/alert/AlertTitle.astro +24 -24
- package/src/components/alert/CHANGELOG.md +5 -5
- package/src/components/alert/index.ts +4 -4
- package/src/components/avatar/Avatar.astro +197 -197
- package/src/components/avatar/AvatarBadge.astro +44 -44
- package/src/components/avatar/AvatarFallback.astro +26 -26
- package/src/components/avatar/AvatarGroup.astro +26 -26
- package/src/components/avatar/AvatarGroupCount.astro +30 -30
- package/src/components/avatar/AvatarImage.astro +46 -46
- package/src/components/avatar/CHANGELOG.md +44 -44
- package/src/components/avatar/index.ts +6 -6
- package/src/components/badge/Badge.astro +167 -167
- package/src/components/badge/CHANGELOG.md +49 -49
- package/src/components/badge/index.ts +2 -2
- package/src/components/breadcrumb/Breadcrumb.astro +76 -76
- package/src/components/breadcrumb/BreadcrumbItem.astro +32 -32
- package/src/components/breadcrumb/BreadcrumbList.astro +26 -26
- package/src/components/breadcrumb/BreadcrumbSeparator.astro +26 -26
- package/src/components/breadcrumb/CHANGELOG.md +24 -24
- package/src/components/breadcrumb/index.ts +5 -5
- package/src/components/button/Button.astro +233 -233
- package/src/components/button/CHANGELOG.md +41 -41
- package/src/components/button/index.ts +2 -2
- package/src/components/button-group/ButtonGroup.astro +130 -130
- package/src/components/button-group/ButtonGroupSeparator.astro +30 -30
- package/src/components/button-group/ButtonGroupText.astro +21 -21
- package/src/components/button-group/CHANGELOG.md +34 -34
- package/src/components/button-group/index.ts +3 -3
- package/src/components/callout/CHANGELOG.md +32 -0
- package/src/components/callout/Callout.astro +147 -0
- package/src/components/callout/CalloutDescription.astro +16 -0
- package/src/components/callout/CalloutTitle.astro +16 -0
- package/src/components/callout/index.ts +3 -0
- package/src/components/card/CHANGELOG.md +162 -119
- package/src/components/card/Card.astro +197 -182
- package/src/components/card/CardAction.astro +26 -26
- package/src/components/card/CardContent.astro +28 -28
- package/src/components/card/CardDescription.astro +28 -28
- package/src/components/card/CardFooter.astro +24 -24
- package/src/components/card/CardHeader.astro +30 -30
- package/src/components/card/CardMedia.astro +27 -27
- package/src/components/card/CardMediaActions.astro +21 -0
- package/src/components/card/CardMediaSelect.astro +21 -0
- package/src/components/card/CardOverlay.astro +32 -32
- package/src/components/card/CardTitle.astro +21 -21
- package/src/components/card/index.ts +12 -10
- package/src/components/carousel/CHANGELOG.md +5 -5
- package/src/components/carousel/Carousel.astro +106 -106
- package/src/components/carousel/CarouselSlide.astro +22 -22
- package/src/components/carousel/index.ts +3 -3
- package/src/components/checkbox/CHANGELOG.md +58 -58
- package/src/components/checkbox/Checkbox.astro +159 -159
- package/src/components/checkbox/index.ts +1 -1
- package/src/components/collapsible/CHANGELOG.md +5 -5
- package/src/components/collapsible/Collapsible.astro +202 -202
- package/src/components/collapsible/CollapsibleContent.astro +36 -36
- package/src/components/collapsible/CollapsibleTrigger.astro +34 -34
- package/src/components/collapsible/index.ts +4 -4
- package/src/components/combobox/CHANGELOG.md +27 -27
- package/src/components/combobox/Combobox.astro +365 -365
- package/src/components/combobox/ComboboxContent.astro +37 -37
- package/src/components/combobox/ComboboxEmpty.astro +18 -18
- package/src/components/combobox/ComboboxGroup.astro +19 -19
- package/src/components/combobox/ComboboxInput.astro +74 -74
- package/src/components/combobox/ComboboxItem.astro +39 -39
- package/src/components/combobox/ComboboxLabel.astro +18 -18
- package/src/components/combobox/ComboboxList.astro +21 -21
- package/src/components/combobox/ComboboxSeparator.astro +17 -17
- package/src/components/combobox/ComboboxTrigger.astro +30 -30
- package/src/components/combobox/ComboboxValue.astro +22 -22
- package/src/components/combobox/index.ts +11 -11
- package/src/components/date/CHANGELOG.md +18 -18
- package/src/components/date/Date.astro +137 -137
- package/src/components/date/index.ts +2 -2
- package/src/components/dialog/CHANGELOG.md +39 -39
- package/src/components/dialog/Dialog.astro +196 -196
- package/src/components/dialog/DialogClose.astro +23 -23
- package/src/components/dialog/DialogContent.astro +42 -42
- package/src/components/dialog/DialogDescription.astro +18 -18
- package/src/components/dialog/DialogFooter.astro +18 -18
- package/src/components/dialog/DialogHeader.astro +18 -18
- package/src/components/dialog/DialogOverlay.astro +19 -19
- package/src/components/dialog/DialogTitle.astro +18 -18
- package/src/components/dialog/DialogTrigger.astro +37 -37
- package/src/components/dialog/index.ts +9 -9
- package/src/components/dropdown-menu/CHANGELOG.md +194 -194
- package/src/components/dropdown-menu/DropdownMenu.astro +226 -226
- package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -114
- package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -42
- package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -19
- package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -220
- package/src/components/dropdown-menu/DropdownMenuItemContent.astro +79 -79
- package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -20
- package/src/components/dropdown-menu/DropdownMenuPortal.astro +13 -13
- package/src/components/dropdown-menu/DropdownMenuRadioGroup.astro +13 -13
- package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -101
- package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -18
- package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -18
- package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -49
- package/src/components/dropdown-menu/dropdown-menu-item-variants.ts +24 -24
- package/src/components/dropdown-menu/index.ts +12 -12
- package/src/components/field/CHANGELOG.md +33 -33
- package/src/components/field/Field.astro +664 -664
- package/src/components/field/FieldContent.astro +20 -20
- package/src/components/field/FieldDescription.astro +22 -22
- package/src/components/field/FieldError.astro +51 -51
- package/src/components/field/FieldGroup.astro +20 -20
- package/src/components/field/FieldLabel.astro +22 -22
- package/src/components/field/FieldLegend.astro +23 -23
- package/src/components/field/FieldSeparator.astro +30 -30
- package/src/components/field/FieldSet.astro +20 -20
- package/src/components/field/FieldTitle.astro +20 -20
- package/src/components/field/index.ts +10 -10
- package/src/components/hover-card/CHANGELOG.md +20 -20
- package/src/components/hover-card/HoverCard.astro +235 -235
- package/src/components/hover-card/HoverCardContent.astro +54 -54
- package/src/components/hover-card/HoverCardTrigger.astro +38 -38
- package/src/components/hover-card/index.ts +3 -3
- package/src/components/input/CHANGELOG.md +44 -29
- package/src/components/input/Input.astro +130 -130
- package/src/components/input/InputOTP.astro +211 -0
- package/src/components/input/index.ts +2 -2
- package/src/components/input-group/CHANGELOG.md +49 -49
- package/src/components/input-group/InputGroup.astro +135 -135
- package/src/components/input-group/InputGroupAddon.astro +49 -49
- package/src/components/input-group/InputGroupButton.astro +58 -58
- package/src/components/input-group/InputGroupInput.astro +18 -18
- package/src/components/input-group/InputGroupText.astro +21 -21
- package/src/components/input-group/InputGroupTextarea.astro +17 -17
- package/src/components/input-group/controlClasses.ts +2 -2
- package/src/components/input-group/index.ts +6 -6
- package/src/components/item/CHANGELOG.md +27 -27
- package/src/components/item/Item.astro +122 -122
- package/src/components/item/ItemActions.astro +21 -21
- package/src/components/item/ItemContent.astro +25 -25
- package/src/components/item/ItemDescription.astro +25 -25
- package/src/components/item/ItemFooter.astro +24 -24
- package/src/components/item/ItemGroup.astro +24 -24
- package/src/components/item/ItemHeader.astro +24 -24
- package/src/components/item/ItemMedia.astro +47 -47
- package/src/components/item/ItemSeparator.astro +21 -21
- package/src/components/item/ItemTitle.astro +25 -25
- package/src/components/item/index.ts +10 -10
- package/src/components/kbd/CHANGELOG.md +5 -5
- package/src/components/kbd/Kbd.astro +145 -145
- package/src/components/kbd/KbdGroup.astro +55 -55
- package/src/components/kbd/index.ts +2 -2
- package/src/components/label/CHANGELOG.md +28 -28
- package/src/components/label/Label.astro +97 -97
- package/src/components/label/index.ts +2 -2
- package/src/components/link-group/CHANGELOG.md +75 -75
- package/src/components/link-group/LinkGroup.astro +67 -67
- package/src/components/link-group/LinkGroupItem.astro +32 -32
- package/src/components/link-group/LinkGroupList.astro +25 -25
- package/src/components/link-group/LinkGroupTitle.astro +22 -22
- package/src/components/link-group/index.ts +5 -5
- package/src/components/link-group/link-group-list-variants.ts +15 -15
- package/src/components/logo/CHANGELOG.md +17 -0
- package/src/components/logo/Logo.astro +90 -0
- package/src/components/logo/index.ts +3 -0
- package/src/components/logo/logo-paths.ts +57 -0
- package/src/components/marquee/CHANGELOG.md +5 -5
- package/src/components/marquee/Marquee.astro +119 -119
- package/src/components/marquee/index.ts +2 -2
- package/src/components/native-select/CHANGELOG.md +5 -5
- package/src/components/native-select/NativeSelect.astro +125 -125
- package/src/components/native-select/NativeSelectOptGroup.astro +14 -14
- package/src/components/native-select/NativeSelectOption.astro +9 -9
- package/src/components/native-select/index.ts +3 -3
- package/src/components/navigation-menu/CHANGELOG.md +63 -63
- package/src/components/navigation-menu/NavigationMenu.astro +414 -414
- package/src/components/navigation-menu/NavigationMenuContent.astro +37 -37
- package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -24
- package/src/components/navigation-menu/NavigationMenuItem.astro +22 -22
- package/src/components/navigation-menu/NavigationMenuLink.astro +18 -18
- package/src/components/navigation-menu/NavigationMenuList.astro +21 -21
- package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -44
- package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -30
- package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -19
- package/src/components/navigation-menu/index.ts +10 -10
- package/src/components/organisms/lightning-sidebar-nav/CHANGELOG.md +50 -0
- package/src/components/organisms/lightning-sidebar-nav/LightningSidebarNav.astro +176 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNav.astro +50 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavGroup.astro +74 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavItem.astro +94 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavProBadge.astro +26 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavSection.astro +71 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavSkeleton.astro +67 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavSubItem.astro +69 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavUsage.astro +78 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceAvatar.astro +46 -0
- package/src/components/organisms/lightning-sidebar-nav/SidebarNavWorkspaceSwitcher.astro +130 -0
- package/src/components/organisms/lightning-sidebar-nav/icons.ts +46 -0
- package/src/components/organisms/lightning-sidebar-nav/index.ts +18 -0
- package/src/components/organisms/lightning-sidebar-nav/types.ts +77 -0
- package/src/components/popover/CHANGELOG.md +20 -20
- package/src/components/popover/Popover.astro +211 -211
- package/src/components/popover/PopoverClose.astro +18 -18
- package/src/components/popover/PopoverContent.astro +50 -50
- package/src/components/popover/PopoverDescription.astro +18 -18
- package/src/components/popover/PopoverHeader.astro +18 -18
- package/src/components/popover/PopoverTitle.astro +18 -18
- package/src/components/popover/PopoverTrigger.astro +35 -35
- package/src/components/popover/index.ts +7 -7
- package/src/components/radio-group/CHANGELOG.md +31 -31
- package/src/components/radio-group/RadioGroup.astro +81 -81
- package/src/components/radio-group/RadioGroupItem.astro +51 -51
- package/src/components/radio-group/index.ts +3 -3
- package/src/components/select/CHANGELOG.md +39 -39
- package/src/components/select/Select.astro +373 -373
- package/src/components/select/SelectContent.astro +91 -91
- package/src/components/select/SelectGroup.astro +19 -19
- package/src/components/select/SelectItem.astro +48 -48
- package/src/components/select/SelectLabel.astro +18 -18
- package/src/components/select/SelectSeparator.astro +17 -17
- package/src/components/select/SelectTrigger.astro +34 -34
- package/src/components/select/SelectValue.astro +22 -22
- package/src/components/select/index.ts +8 -8
- package/src/components/separator/CHANGELOG.md +5 -5
- package/src/components/separator/Separator.astro +60 -60
- package/src/components/separator/index.ts +2 -2
- package/src/components/skeleton/CHANGELOG.md +5 -5
- package/src/components/skeleton/Skeleton.astro +121 -121
- package/src/components/skeleton/index.ts +1 -1
- package/src/components/slider/CHANGELOG.md +5 -5
- package/src/components/slider/Slider.astro +198 -198
- package/src/components/slider/index.ts +1 -1
- package/src/components/spinner/CHANGELOG.md +18 -18
- package/src/components/spinner/Spinner.astro +135 -135
- package/src/components/spinner/index.ts +1 -1
- package/src/components/sticky-surface/CHANGELOG.md +5 -5
- package/src/components/sticky-surface/StickySurface.astro +152 -152
- package/src/components/sticky-surface/index.ts +2 -2
- package/src/components/switch/CHANGELOG.md +29 -29
- package/src/components/switch/Switch.astro +106 -106
- package/src/components/switch/index.ts +1 -1
- package/src/components/table/CHANGELOG.md +24 -24
- package/src/components/table/Table.astro +358 -251
- package/src/components/table/TableBody.astro +17 -18
- package/src/components/table/TableBulkToolbar.astro +37 -0
- package/src/components/table/TableCaption.astro +17 -17
- package/src/components/table/TableCell.astro +45 -21
- package/src/components/table/TableCellText.astro +17 -0
- package/src/components/table/TableColumnMenu.astro +50 -0
- package/src/components/table/TableEditableCell.astro +287 -0
- package/src/components/table/TableEmpty.astro +17 -0
- package/src/components/table/TableFolderCell.astro +38 -0
- package/src/components/table/TableFooter.astro +21 -21
- package/src/components/table/TableHead.astro +90 -21
- package/src/components/table/TableHeader.astro +17 -17
- package/src/components/table/TablePagination.astro +57 -0
- package/src/components/table/TableRow.astro +52 -21
- package/src/components/table/TableSelectAllBanner.astro +34 -0
- package/src/components/table/TableSelectCell.astro +50 -0
- package/src/components/table/TableSkeletonRow.astro +21 -0
- package/src/components/table/index.ts +19 -9
- package/src/components/table/table-cell-variants.ts +29 -0
- package/src/components/tabs/CHANGELOG.md +5 -5
- package/src/components/tabs/Tabs.astro +306 -306
- package/src/components/tabs/TabsContent.astro +47 -47
- package/src/components/tabs/TabsList.astro +69 -69
- package/src/components/tabs/TabsTrigger.astro +40 -40
- package/src/components/tabs/index.ts +6 -6
- package/src/components/textarea/CHANGELOG.md +22 -22
- package/src/components/textarea/Textarea.astro +58 -58
- package/src/components/textarea/index.ts +2 -2
- package/src/components/toggle/CHANGELOG.md +23 -23
- package/src/components/toggle/Toggle.astro +150 -150
- package/src/components/toggle/index.ts +1 -1
- package/src/components/toggle-group/CHANGELOG.md +18 -18
- package/src/components/toggle-group/ToggleGroup.astro +236 -236
- package/src/components/toggle-group/ToggleGroupItem.astro +48 -48
- package/src/components/toggle-group/index.ts +2 -2
- package/src/components/tooltip/CHANGELOG.md +22 -22
- package/src/components/tooltip/Tooltip.astro +357 -357
- package/src/components/tooltip/TooltipContent.astro +85 -85
- package/src/components/tooltip/TooltipTrigger.astro +34 -34
- package/src/components/tooltip/index.ts +3 -3
- package/src/lib/table-controller.ts +1090 -0
- package/src/lib/toggle-group-controller.ts +113 -113
- package/src/lib/toggle-shared.ts +27 -27
- package/src/lib/utils.ts +6 -6
- package/src/styles/globals.css +209 -177
|
@@ -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,44 +1,44 @@
|
|
|
1
|
-
# Changelog Avatar
|
|
2
|
-
|
|
3
|
-
All notable changes to the `Avatar` component will be documented in this file.
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
## New props
|
|
7
|
-
|
|
8
|
-
| Prop | Type | Default | Purpose |
|
|
9
|
-
| :--- | :--- | :--- | :--- |
|
|
10
|
-
| `variant` | `"image" | "initials" | "icon"` | `"image"` | Sets `data-variant`; gates the new inline icon rendering. Image/Initials still render via whichever child (`<AvatarImage>`/`<AvatarFallback>`) you slot in — this doesn't replace that. |
|
|
11
|
-
| `icon` | `AstroComponent` (from `@lucide/astro`) | — | Icon to render when `variant="icon"`, same pattern as `Alert`'s icon prop. |
|
|
12
|
-
| `status` | `"active" | "inactive"` | `undefined` (no badge) | Renders an internal status dot — green for active/online, red for inactive/offline. |
|
|
13
|
-
|
|
14
|
-
## Styling
|
|
15
|
-
|
|
16
|
-
- Migrated the root class string to `cva` (size × variant), matching the pattern `Alert.astro` already uses, instead of the old chained `data-[size=...]:` selectors.
|
|
17
|
-
- Added a border to the circle at every size, bound to the `border-border` token: 1px (sm), 1.5px (default), 2px (lg) — previously there was no border at all.
|
|
18
|
-
- `variant="icon"` adds `bg-primary-foreground` (white fill) since there's no child component supplying it.
|
|
19
|
-
|
|
20
|
-
## Markup
|
|
21
|
-
|
|
22
|
-
- Added `data-variant` and `data-status` attributes alongside the existing `data-slot`/`data-size`.
|
|
23
|
-
- Icon is rendered inline (centered, sized 14/16/20px per size) when `variant="icon"` — no new subcomponent file needed.
|
|
24
|
-
- Status badge is now rendered internally via `<AvatarBadge status={status} />` when status is set, instead of requiring the consumer to manually slot `<AvatarBadge />`.
|
|
25
|
-
|
|
26
|
-
## Docs (JSDoc block)
|
|
27
|
-
|
|
28
|
-
- `@figmaUrl` corrected — it was pointing at the old generic BejamasUI template file; now points at your ClickLearn Lightning node (`node-id=113-1145`).
|
|
29
|
-
- `@description` updated to mention initials/icon/status.
|
|
30
|
-
- Replaced the old "Badge" example with a "Variants" example (image/initials/icon) and a "Status" example (active/inactive).
|
|
31
|
-
- `@preview` / `@usage` updated to use `status="active"` instead of a bare `<AvatarBadge />` child.
|
|
32
|
-
|
|
33
|
-
## Sibling files (part of the same alignment)
|
|
34
|
-
|
|
35
|
-
- `AvatarBadge.astro` — added `status?: "active" | "inactive"` (default `"active"`, keeps old bare `<AvatarBadge />` usage looking the same); color now `bg-success`/`bg-destructive` by status; size now scales 6/10/12px per avatar size; swapped `ring-background` for an explicit `border-primary-foreground` to match Figma's literal token.
|
|
36
|
-
- `AvatarFallback.astro` (the Initials variant) — recolored from `bg-muted`/`text-muted-foreground` to `bg-primary-foreground`/`text-foreground`/`font-semibold`; text size now scales with avatar size.
|
|
37
|
-
- `Avatar.stories.ts` / `AvatarStory.astro` — added Initials, Icon, StatusActive, StatusInactive stories.
|
|
38
|
-
- `apps/web/.../_sections/avatar.astro` — props table updated with variant/icon/status; added "Variants" and "Status" preview sections.
|
|
39
|
-
|
|
40
|
-
## Not changed
|
|
41
|
-
|
|
42
|
-
- `AvatarImage.astro`, `AvatarGroup.astro`, `AvatarGroupCount.astro` — diameters were already correct, and group-stacking behavior was verified visually to still look right after the border change.
|
|
43
|
-
|
|
44
|
-
## Unreleased
|
|
1
|
+
# Changelog Avatar
|
|
2
|
+
|
|
3
|
+
All notable changes to the `Avatar` component will be documented in this file.
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
## New props
|
|
7
|
+
|
|
8
|
+
| Prop | Type | Default | Purpose |
|
|
9
|
+
| :--- | :--- | :--- | :--- |
|
|
10
|
+
| `variant` | `"image" | "initials" | "icon"` | `"image"` | Sets `data-variant`; gates the new inline icon rendering. Image/Initials still render via whichever child (`<AvatarImage>`/`<AvatarFallback>`) you slot in — this doesn't replace that. |
|
|
11
|
+
| `icon` | `AstroComponent` (from `@lucide/astro`) | — | Icon to render when `variant="icon"`, same pattern as `Alert`'s icon prop. |
|
|
12
|
+
| `status` | `"active" | "inactive"` | `undefined` (no badge) | Renders an internal status dot — green for active/online, red for inactive/offline. |
|
|
13
|
+
|
|
14
|
+
## Styling
|
|
15
|
+
|
|
16
|
+
- Migrated the root class string to `cva` (size × variant), matching the pattern `Alert.astro` already uses, instead of the old chained `data-[size=...]:` selectors.
|
|
17
|
+
- Added a border to the circle at every size, bound to the `border-border` token: 1px (sm), 1.5px (default), 2px (lg) — previously there was no border at all.
|
|
18
|
+
- `variant="icon"` adds `bg-primary-foreground` (white fill) since there's no child component supplying it.
|
|
19
|
+
|
|
20
|
+
## Markup
|
|
21
|
+
|
|
22
|
+
- Added `data-variant` and `data-status` attributes alongside the existing `data-slot`/`data-size`.
|
|
23
|
+
- Icon is rendered inline (centered, sized 14/16/20px per size) when `variant="icon"` — no new subcomponent file needed.
|
|
24
|
+
- Status badge is now rendered internally via `<AvatarBadge status={status} />` when status is set, instead of requiring the consumer to manually slot `<AvatarBadge />`.
|
|
25
|
+
|
|
26
|
+
## Docs (JSDoc block)
|
|
27
|
+
|
|
28
|
+
- `@figmaUrl` corrected — it was pointing at the old generic BejamasUI template file; now points at your ClickLearn Lightning node (`node-id=113-1145`).
|
|
29
|
+
- `@description` updated to mention initials/icon/status.
|
|
30
|
+
- Replaced the old "Badge" example with a "Variants" example (image/initials/icon) and a "Status" example (active/inactive).
|
|
31
|
+
- `@preview` / `@usage` updated to use `status="active"` instead of a bare `<AvatarBadge />` child.
|
|
32
|
+
|
|
33
|
+
## Sibling files (part of the same alignment)
|
|
34
|
+
|
|
35
|
+
- `AvatarBadge.astro` — added `status?: "active" | "inactive"` (default `"active"`, keeps old bare `<AvatarBadge />` usage looking the same); color now `bg-success`/`bg-destructive` by status; size now scales 6/10/12px per avatar size; swapped `ring-background` for an explicit `border-primary-foreground` to match Figma's literal token.
|
|
36
|
+
- `AvatarFallback.astro` (the Initials variant) — recolored from `bg-muted`/`text-muted-foreground` to `bg-primary-foreground`/`text-foreground`/`font-semibold`; text size now scales with avatar size.
|
|
37
|
+
- `Avatar.stories.ts` / `AvatarStory.astro` — added Initials, Icon, StatusActive, StatusInactive stories.
|
|
38
|
+
- `apps/web/.../_sections/avatar.astro` — props table updated with variant/icon/status; added "Variants" and "Status" preview sections.
|
|
39
|
+
|
|
40
|
+
## Not changed
|
|
41
|
+
|
|
42
|
+
- `AvatarImage.astro`, `AvatarGroup.astro`, `AvatarGroupCount.astro` — diameters were already correct, and group-stacking behavior was verified visually to still look right after the border change.
|
|
43
|
+
|
|
44
|
+
## Unreleased
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
export { default as Avatar } from "./Avatar.astro";
|
|
2
|
-
export { default as AvatarImage } from "./AvatarImage.astro";
|
|
3
|
-
export { default as AvatarFallback } from "./AvatarFallback.astro";
|
|
4
|
-
export { default as AvatarBadge } from "./AvatarBadge.astro";
|
|
5
|
-
export { default as AvatarGroup } from "./AvatarGroup.astro";
|
|
6
|
-
export { default as AvatarGroupCount } from "./AvatarGroupCount.astro";
|
|
1
|
+
export { default as Avatar } from "./Avatar.astro";
|
|
2
|
+
export { default as AvatarImage } from "./AvatarImage.astro";
|
|
3
|
+
export { default as AvatarFallback } from "./AvatarFallback.astro";
|
|
4
|
+
export { default as AvatarBadge } from "./AvatarBadge.astro";
|
|
5
|
+
export { default as AvatarGroup } from "./AvatarGroup.astro";
|
|
6
|
+
export { default as AvatarGroupCount } from "./AvatarGroupCount.astro";
|
|
@@ -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>
|
|
@@ -1,49 +1,49 @@
|
|
|
1
|
-
# Changelog for Badge.astro
|
|
2
|
-
|
|
3
|
-
## Variants
|
|
4
|
-
|
|
5
|
-
- Added 4 new variants: `success`, `warning`, `accent`, and `ghost` (previously only `default`, `secondary`, `destructive`, and `outline`).
|
|
6
|
-
- **Destructive restyled:** Now uses a solid red background with white text (previously a soft/light red-on-red-tint style).
|
|
7
|
-
- **Ghost:** Matches its name by using `bg-card` with no border, seamlessly blending into the surface.
|
|
8
|
-
|
|
9
|
-
## Shapes
|
|
10
|
-
|
|
11
|
-
- Renamed `shape="default"` to `shape="sharp"` (breaking rename, approved).
|
|
12
|
-
- Added `shape="rounded"` (6px radius).
|
|
13
|
-
- Default shape changed from `"default"` to `"pill"`.
|
|
14
|
-
|
|
15
|
-
## Sizing & Spacing
|
|
16
|
-
|
|
17
|
-
- Fixed a padding bug where both sizes shared the same horizontal padding. Sizes are now distinctly mapped per Figma: `sm` uses `px-1`, and `default` uses `px-1.5`.
|
|
18
|
-
- Tightened the icon/label gap from `gap-1` (4px) to `gap-0.5` (2px).
|
|
19
|
-
|
|
20
|
-
## New Props
|
|
21
|
-
|
|
22
|
-
- `leadIcon` / `tailIcon` (`boolean`): Renders a lead-icon / tail-icon named slot before/after the label. This is auto-detected from slot presence if not explicitly passed (matching the pattern used for `Alert`'s `hasActions`).
|
|
23
|
-
- Icon sizing now dynamically scales with the badge size (12px for small / 14px for default).
|
|
24
|
-
|
|
25
|
-
## States
|
|
26
|
-
|
|
27
|
-
- **Focus:** Added `focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3` (replacing dead code where the old `has-data-[icon=...]` selectors never matched).
|
|
28
|
-
- **Disabled:** Added `disabled:bg-muted disabled:text-muted-foreground disabled:border-transparent`.
|
|
29
|
-
- **Hover:** Added in a follow-up pass to align with new Figma designs.
|
|
30
|
-
- Every variant now has its own hover fill, which fires on both `as="a"` and `as="button"` elements. Plain `<span>` badges remain static.
|
|
31
|
-
- Fixed a selector bug (`[a]:hover:` is confirmed working) and removed an incorrect text-color hover change on the outline variant.
|
|
32
|
-
|
|
33
|
-
## Tokens (`globals.css`)
|
|
34
|
-
|
|
35
|
-
New CSS variables were added. None of these conflict with or touch the shared `--accent` / `--success` tokens used elsewhere in the app:
|
|
36
|
-
- **Solid variant colors:** `--badge-success`, `--badge-warning`, `--badge-accent` (plus their respective foregrounds).
|
|
37
|
-
- **Hover-only colors:** `--background-button-hover`, `--destructive-hover`, `--badge-accent-hover` (used for hover states that require specific colors rather than simple opacity fades of existing tokens).
|
|
38
|
-
|
|
39
|
-
## Storybook & Docs (`_sections/badge.astro`)
|
|
40
|
-
|
|
41
|
-
- Rebuilt the prop table to include the new variants, shape values, and `leadIcon` / `tailIcon` rows.
|
|
42
|
-
- Added new preview blocks: **Shapes**, **Sizes**, and **With icons**.
|
|
43
|
-
- Added an **Interactive states** block. All variants are rendered `as="button"` alongside a disabled example, so hover, focus, and disabled states can be previewed live rather than just described.
|
|
44
|
-
|
|
45
|
-
## Not Changed
|
|
46
|
-
|
|
47
|
-
- Disabled and Focus states were already correct from the initial pass. They were confirmed against the latest Figma updates and left as-is.
|
|
48
|
-
|
|
49
|
-
## Unreleased
|
|
1
|
+
# Changelog for Badge.astro
|
|
2
|
+
|
|
3
|
+
## Variants
|
|
4
|
+
|
|
5
|
+
- Added 4 new variants: `success`, `warning`, `accent`, and `ghost` (previously only `default`, `secondary`, `destructive`, and `outline`).
|
|
6
|
+
- **Destructive restyled:** Now uses a solid red background with white text (previously a soft/light red-on-red-tint style).
|
|
7
|
+
- **Ghost:** Matches its name by using `bg-card` with no border, seamlessly blending into the surface.
|
|
8
|
+
|
|
9
|
+
## Shapes
|
|
10
|
+
|
|
11
|
+
- Renamed `shape="default"` to `shape="sharp"` (breaking rename, approved).
|
|
12
|
+
- Added `shape="rounded"` (6px radius).
|
|
13
|
+
- Default shape changed from `"default"` to `"pill"`.
|
|
14
|
+
|
|
15
|
+
## Sizing & Spacing
|
|
16
|
+
|
|
17
|
+
- Fixed a padding bug where both sizes shared the same horizontal padding. Sizes are now distinctly mapped per Figma: `sm` uses `px-1`, and `default` uses `px-1.5`.
|
|
18
|
+
- Tightened the icon/label gap from `gap-1` (4px) to `gap-0.5` (2px).
|
|
19
|
+
|
|
20
|
+
## New Props
|
|
21
|
+
|
|
22
|
+
- `leadIcon` / `tailIcon` (`boolean`): Renders a lead-icon / tail-icon named slot before/after the label. This is auto-detected from slot presence if not explicitly passed (matching the pattern used for `Alert`'s `hasActions`).
|
|
23
|
+
- Icon sizing now dynamically scales with the badge size (12px for small / 14px for default).
|
|
24
|
+
|
|
25
|
+
## States
|
|
26
|
+
|
|
27
|
+
- **Focus:** Added `focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-3` (replacing dead code where the old `has-data-[icon=...]` selectors never matched).
|
|
28
|
+
- **Disabled:** Added `disabled:bg-muted disabled:text-muted-foreground disabled:border-transparent`.
|
|
29
|
+
- **Hover:** Added in a follow-up pass to align with new Figma designs.
|
|
30
|
+
- Every variant now has its own hover fill, which fires on both `as="a"` and `as="button"` elements. Plain `<span>` badges remain static.
|
|
31
|
+
- Fixed a selector bug (`[a]:hover:` is confirmed working) and removed an incorrect text-color hover change on the outline variant.
|
|
32
|
+
|
|
33
|
+
## Tokens (`globals.css`)
|
|
34
|
+
|
|
35
|
+
New CSS variables were added. None of these conflict with or touch the shared `--accent` / `--success` tokens used elsewhere in the app:
|
|
36
|
+
- **Solid variant colors:** `--badge-success`, `--badge-warning`, `--badge-accent` (plus their respective foregrounds).
|
|
37
|
+
- **Hover-only colors:** `--background-button-hover`, `--destructive-hover`, `--badge-accent-hover` (used for hover states that require specific colors rather than simple opacity fades of existing tokens).
|
|
38
|
+
|
|
39
|
+
## Storybook & Docs (`_sections/badge.astro`)
|
|
40
|
+
|
|
41
|
+
- Rebuilt the prop table to include the new variants, shape values, and `leadIcon` / `tailIcon` rows.
|
|
42
|
+
- Added new preview blocks: **Shapes**, **Sizes**, and **With icons**.
|
|
43
|
+
- Added an **Interactive states** block. All variants are rendered `as="button"` alongside a disabled example, so hover, focus, and disabled states can be previewed live rather than just described.
|
|
44
|
+
|
|
45
|
+
## Not Changed
|
|
46
|
+
|
|
47
|
+
- Disabled and Focus states were already correct from the initial pass. They were confirmed against the latest Figma updates and left as-is.
|
|
48
|
+
|
|
49
|
+
## Unreleased
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { default as Badge } from "./Badge.astro";
|
|
2
|
-
|
|
1
|
+
export { default as Badge } from "./Badge.astro";
|
|
2
|
+
|