@cl-light-ds/ui 0.1.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 -0
- package/package.json +59 -0
- package/src/components/accordion/Accordion.astro +248 -0
- package/src/components/accordion/AccordionContent.astro +26 -0
- package/src/components/accordion/AccordionItem.astro +36 -0
- package/src/components/accordion/AccordionTrigger.astro +118 -0
- package/src/components/accordion/CHANGELOG.md +41 -0
- package/src/components/accordion/index.ts +4 -0
- package/src/components/alert/Alert.astro +167 -0
- package/src/components/alert/AlertDescription.astro +24 -0
- package/src/components/alert/AlertTitle.astro +24 -0
- package/src/components/alert/CHANGELOG.md +5 -0
- package/src/components/alert/index.ts +4 -0
- package/src/components/avatar/Avatar.astro +197 -0
- package/src/components/avatar/AvatarBadge.astro +44 -0
- package/src/components/avatar/AvatarFallback.astro +26 -0
- package/src/components/avatar/AvatarGroup.astro +26 -0
- package/src/components/avatar/AvatarGroupCount.astro +30 -0
- package/src/components/avatar/AvatarImage.astro +46 -0
- package/src/components/avatar/CHANGELOG.md +44 -0
- package/src/components/avatar/index.ts +6 -0
- package/src/components/badge/Badge.astro +167 -0
- package/src/components/badge/CHANGELOG.md +49 -0
- package/src/components/badge/index.ts +2 -0
- package/src/components/breadcrumb/Breadcrumb.astro +76 -0
- package/src/components/breadcrumb/BreadcrumbItem.astro +32 -0
- package/src/components/breadcrumb/BreadcrumbList.astro +26 -0
- package/src/components/breadcrumb/BreadcrumbSeparator.astro +26 -0
- package/src/components/breadcrumb/CHANGELOG.md +24 -0
- package/src/components/breadcrumb/index.ts +5 -0
- package/src/components/button/Button.astro +233 -0
- package/src/components/button/CHANGELOG.md +41 -0
- package/src/components/button/index.ts +2 -0
- package/src/components/button-group/ButtonGroup.astro +130 -0
- package/src/components/button-group/ButtonGroupSeparator.astro +30 -0
- package/src/components/button-group/ButtonGroupText.astro +21 -0
- package/src/components/button-group/CHANGELOG.md +34 -0
- package/src/components/button-group/index.ts +3 -0
- package/src/components/card/CHANGELOG.md +119 -0
- package/src/components/card/Card.astro +182 -0
- package/src/components/card/CardAction.astro +26 -0
- package/src/components/card/CardContent.astro +28 -0
- package/src/components/card/CardDescription.astro +28 -0
- package/src/components/card/CardFooter.astro +24 -0
- package/src/components/card/CardHeader.astro +30 -0
- package/src/components/card/CardMedia.astro +27 -0
- package/src/components/card/CardOverlay.astro +32 -0
- package/src/components/card/CardTitle.astro +21 -0
- package/src/components/card/index.ts +10 -0
- package/src/components/carousel/CHANGELOG.md +5 -0
- package/src/components/carousel/Carousel.astro +106 -0
- package/src/components/carousel/CarouselSlide.astro +22 -0
- package/src/components/carousel/index.ts +3 -0
- package/src/components/checkbox/CHANGELOG.md +58 -0
- package/src/components/checkbox/Checkbox.astro +159 -0
- package/src/components/checkbox/index.ts +1 -0
- package/src/components/collapsible/CHANGELOG.md +5 -0
- package/src/components/collapsible/Collapsible.astro +202 -0
- package/src/components/collapsible/CollapsibleContent.astro +36 -0
- package/src/components/collapsible/CollapsibleTrigger.astro +34 -0
- package/src/components/collapsible/index.ts +4 -0
- package/src/components/combobox/CHANGELOG.md +27 -0
- package/src/components/combobox/Combobox.astro +365 -0
- package/src/components/combobox/ComboboxContent.astro +37 -0
- package/src/components/combobox/ComboboxEmpty.astro +18 -0
- package/src/components/combobox/ComboboxGroup.astro +19 -0
- package/src/components/combobox/ComboboxInput.astro +74 -0
- package/src/components/combobox/ComboboxItem.astro +39 -0
- package/src/components/combobox/ComboboxLabel.astro +18 -0
- package/src/components/combobox/ComboboxList.astro +21 -0
- package/src/components/combobox/ComboboxSeparator.astro +17 -0
- package/src/components/combobox/ComboboxTrigger.astro +30 -0
- package/src/components/combobox/ComboboxValue.astro +22 -0
- package/src/components/combobox/index.ts +11 -0
- package/src/components/date/CHANGELOG.md +18 -0
- package/src/components/date/Date.astro +137 -0
- package/src/components/date/index.ts +2 -0
- package/src/components/dialog/CHANGELOG.md +39 -0
- package/src/components/dialog/Dialog.astro +196 -0
- package/src/components/dialog/DialogClose.astro +23 -0
- package/src/components/dialog/DialogContent.astro +42 -0
- package/src/components/dialog/DialogDescription.astro +18 -0
- package/src/components/dialog/DialogFooter.astro +18 -0
- package/src/components/dialog/DialogHeader.astro +18 -0
- package/src/components/dialog/DialogOverlay.astro +19 -0
- package/src/components/dialog/DialogTitle.astro +18 -0
- package/src/components/dialog/DialogTrigger.astro +37 -0
- package/src/components/dialog/index.ts +9 -0
- package/src/components/dropdown-menu/CHANGELOG.md +194 -0
- package/src/components/dropdown-menu/DropdownMenu.astro +226 -0
- package/src/components/dropdown-menu/DropdownMenuCheckboxItem.astro +114 -0
- package/src/components/dropdown-menu/DropdownMenuContent.astro +42 -0
- package/src/components/dropdown-menu/DropdownMenuGroup.astro +19 -0
- package/src/components/dropdown-menu/DropdownMenuItem.astro +220 -0
- package/src/components/dropdown-menu/DropdownMenuItemContent.astro +79 -0
- package/src/components/dropdown-menu/DropdownMenuLabel.astro +20 -0
- package/src/components/dropdown-menu/DropdownMenuPortal.astro +13 -0
- package/src/components/dropdown-menu/DropdownMenuRadioGroup.astro +13 -0
- package/src/components/dropdown-menu/DropdownMenuRadioItem.astro +101 -0
- package/src/components/dropdown-menu/DropdownMenuSeparator.astro +18 -0
- package/src/components/dropdown-menu/DropdownMenuShortcut.astro +18 -0
- package/src/components/dropdown-menu/DropdownMenuTrigger.astro +49 -0
- package/src/components/dropdown-menu/dropdown-menu-item-variants.ts +24 -0
- package/src/components/dropdown-menu/index.ts +12 -0
- package/src/components/field/CHANGELOG.md +33 -0
- package/src/components/field/Field.astro +664 -0
- package/src/components/field/FieldContent.astro +20 -0
- package/src/components/field/FieldDescription.astro +22 -0
- package/src/components/field/FieldError.astro +51 -0
- package/src/components/field/FieldGroup.astro +20 -0
- package/src/components/field/FieldLabel.astro +22 -0
- package/src/components/field/FieldLegend.astro +23 -0
- package/src/components/field/FieldSeparator.astro +30 -0
- package/src/components/field/FieldSet.astro +20 -0
- package/src/components/field/FieldTitle.astro +20 -0
- package/src/components/field/index.ts +10 -0
- package/src/components/hover-card/CHANGELOG.md +20 -0
- package/src/components/hover-card/HoverCard.astro +235 -0
- package/src/components/hover-card/HoverCardContent.astro +54 -0
- package/src/components/hover-card/HoverCardTrigger.astro +38 -0
- package/src/components/hover-card/index.ts +3 -0
- package/src/components/input/CHANGELOG.md +29 -0
- package/src/components/input/Input.astro +130 -0
- package/src/components/input/index.ts +2 -0
- package/src/components/input-group/CHANGELOG.md +49 -0
- package/src/components/input-group/InputGroup.astro +135 -0
- package/src/components/input-group/InputGroupAddon.astro +49 -0
- package/src/components/input-group/InputGroupButton.astro +58 -0
- package/src/components/input-group/InputGroupInput.astro +18 -0
- package/src/components/input-group/InputGroupText.astro +21 -0
- package/src/components/input-group/InputGroupTextarea.astro +17 -0
- package/src/components/input-group/controlClasses.ts +2 -0
- package/src/components/input-group/index.ts +6 -0
- package/src/components/item/CHANGELOG.md +27 -0
- package/src/components/item/Item.astro +122 -0
- package/src/components/item/ItemActions.astro +21 -0
- package/src/components/item/ItemContent.astro +25 -0
- package/src/components/item/ItemDescription.astro +25 -0
- package/src/components/item/ItemFooter.astro +24 -0
- package/src/components/item/ItemGroup.astro +24 -0
- package/src/components/item/ItemHeader.astro +24 -0
- package/src/components/item/ItemMedia.astro +47 -0
- package/src/components/item/ItemSeparator.astro +21 -0
- package/src/components/item/ItemTitle.astro +25 -0
- package/src/components/item/index.ts +10 -0
- package/src/components/kbd/CHANGELOG.md +5 -0
- package/src/components/kbd/Kbd.astro +145 -0
- package/src/components/kbd/KbdGroup.astro +55 -0
- package/src/components/kbd/index.ts +2 -0
- package/src/components/label/CHANGELOG.md +28 -0
- package/src/components/label/Label.astro +97 -0
- package/src/components/label/index.ts +2 -0
- package/src/components/link-group/CHANGELOG.md +75 -0
- package/src/components/link-group/LinkGroup.astro +67 -0
- package/src/components/link-group/LinkGroupItem.astro +32 -0
- package/src/components/link-group/LinkGroupList.astro +25 -0
- package/src/components/link-group/LinkGroupTitle.astro +22 -0
- package/src/components/link-group/index.ts +5 -0
- package/src/components/link-group/link-group-list-variants.ts +15 -0
- package/src/components/marquee/CHANGELOG.md +5 -0
- package/src/components/marquee/Marquee.astro +119 -0
- package/src/components/marquee/index.ts +2 -0
- package/src/components/native-select/CHANGELOG.md +5 -0
- package/src/components/native-select/NativeSelect.astro +125 -0
- package/src/components/native-select/NativeSelectOptGroup.astro +14 -0
- package/src/components/native-select/NativeSelectOption.astro +9 -0
- package/src/components/native-select/index.ts +3 -0
- package/src/components/navigation-menu/CHANGELOG.md +63 -0
- package/src/components/navigation-menu/NavigationMenu.astro +414 -0
- package/src/components/navigation-menu/NavigationMenuContent.astro +37 -0
- package/src/components/navigation-menu/NavigationMenuIndicator.astro +24 -0
- package/src/components/navigation-menu/NavigationMenuItem.astro +22 -0
- package/src/components/navigation-menu/NavigationMenuLink.astro +18 -0
- package/src/components/navigation-menu/NavigationMenuList.astro +21 -0
- package/src/components/navigation-menu/NavigationMenuPositioner.astro +44 -0
- package/src/components/navigation-menu/NavigationMenuTrigger.astro +30 -0
- package/src/components/navigation-menu/NavigationMenuViewport.astro +19 -0
- package/src/components/navigation-menu/index.ts +10 -0
- package/src/components/popover/CHANGELOG.md +5 -0
- package/src/components/popover/Popover.astro +210 -0
- package/src/components/popover/PopoverClose.astro +18 -0
- package/src/components/popover/PopoverContent.astro +49 -0
- package/src/components/popover/PopoverDescription.astro +18 -0
- package/src/components/popover/PopoverHeader.astro +18 -0
- package/src/components/popover/PopoverTitle.astro +18 -0
- package/src/components/popover/PopoverTrigger.astro +29 -0
- package/src/components/popover/index.ts +7 -0
- package/src/components/radio-group/CHANGELOG.md +9 -0
- package/src/components/radio-group/RadioGroup.astro +81 -0
- package/src/components/radio-group/RadioGroupItem.astro +42 -0
- package/src/components/radio-group/index.ts +3 -0
- package/src/components/select/CHANGELOG.md +39 -0
- package/src/components/select/Select.astro +373 -0
- package/src/components/select/SelectContent.astro +91 -0
- package/src/components/select/SelectGroup.astro +19 -0
- package/src/components/select/SelectItem.astro +48 -0
- package/src/components/select/SelectLabel.astro +18 -0
- package/src/components/select/SelectSeparator.astro +17 -0
- package/src/components/select/SelectTrigger.astro +34 -0
- package/src/components/select/SelectValue.astro +22 -0
- package/src/components/select/index.ts +8 -0
- package/src/components/separator/CHANGELOG.md +5 -0
- package/src/components/separator/Separator.astro +60 -0
- package/src/components/separator/index.ts +2 -0
- package/src/components/skeleton/CHANGELOG.md +5 -0
- package/src/components/skeleton/Skeleton.astro +121 -0
- package/src/components/skeleton/index.ts +1 -0
- package/src/components/slider/CHANGELOG.md +5 -0
- package/src/components/slider/Slider.astro +198 -0
- package/src/components/slider/index.ts +1 -0
- package/src/components/spinner/CHANGELOG.md +5 -0
- package/src/components/spinner/Spinner.astro +134 -0
- package/src/components/spinner/index.ts +1 -0
- package/src/components/sticky-surface/CHANGELOG.md +5 -0
- package/src/components/sticky-surface/StickySurface.astro +152 -0
- package/src/components/sticky-surface/index.ts +2 -0
- package/src/components/switch/CHANGELOG.md +9 -0
- package/src/components/switch/Switch.astro +106 -0
- package/src/components/switch/index.ts +1 -0
- package/src/components/table/CHANGELOG.md +5 -0
- package/src/components/table/Table.astro +250 -0
- package/src/components/table/TableBody.astro +18 -0
- package/src/components/table/TableCaption.astro +17 -0
- package/src/components/table/TableCell.astro +21 -0
- package/src/components/table/TableFooter.astro +21 -0
- package/src/components/table/TableHead.astro +21 -0
- package/src/components/table/TableHeader.astro +17 -0
- package/src/components/table/TableRow.astro +21 -0
- package/src/components/table/index.ts +9 -0
- package/src/components/tabs/CHANGELOG.md +5 -0
- package/src/components/tabs/Tabs.astro +306 -0
- package/src/components/tabs/TabsContent.astro +47 -0
- package/src/components/tabs/TabsList.astro +69 -0
- package/src/components/tabs/TabsTrigger.astro +40 -0
- package/src/components/tabs/index.ts +6 -0
- package/src/components/textarea/CHANGELOG.md +5 -0
- package/src/components/textarea/Textarea.astro +36 -0
- package/src/components/textarea/index.ts +2 -0
- package/src/components/toggle/CHANGELOG.md +5 -0
- package/src/components/toggle/Toggle.astro +138 -0
- package/src/components/toggle/index.ts +1 -0
- package/src/components/toggle-group/CHANGELOG.md +5 -0
- package/src/components/toggle-group/ToggleGroup.astro +224 -0
- package/src/components/toggle-group/ToggleGroupItem.astro +48 -0
- package/src/components/toggle-group/index.ts +2 -0
- package/src/components/tooltip/CHANGELOG.md +5 -0
- package/src/components/tooltip/Tooltip.astro +331 -0
- package/src/components/tooltip/TooltipContent.astro +60 -0
- package/src/components/tooltip/TooltipTrigger.astro +34 -0
- package/src/components/tooltip/index.ts +3 -0
- package/src/lib/toggle-group-controller.ts +113 -0
- package/src/lib/toggle-shared.ts +26 -0
- package/src/lib/utils.ts +6 -0
- package/src/styles/globals.css +177 -0
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* @component Separator
|
|
4
|
+
* @title Separator
|
|
5
|
+
* @description Visual separator for grouping content, supporting horizontal and vertical orientation.
|
|
6
|
+
* @status stable
|
|
7
|
+
* @figmaUrl https://www.figma.com/design/koxai7zw5vIuBzuVxe5T2l/bejamas-ui?node-id=2511-5829&t=YFStJ3V8fXEO8QD8-4
|
|
8
|
+
*
|
|
9
|
+
* @preview
|
|
10
|
+
* <div>
|
|
11
|
+
* <div class="space-y-1">
|
|
12
|
+
* <h4 class="text-sm leading-none font-medium">bejamas/ui</h4>
|
|
13
|
+
* <p class="text-muted-foreground text-sm">
|
|
14
|
+
* An open-source UI component library.
|
|
15
|
+
* </p>
|
|
16
|
+
* </div>
|
|
17
|
+
* <Separator class="my-4" />
|
|
18
|
+
* <div class="flex h-5 items-center space-x-4 text-sm">
|
|
19
|
+
* <div>Blog</div>
|
|
20
|
+
* <Separator orientation="vertical" />
|
|
21
|
+
* <div>Docs</div>
|
|
22
|
+
* <Separator orientation="vertical" />
|
|
23
|
+
* <div>Source</div>
|
|
24
|
+
* </div>
|
|
25
|
+
* </div>
|
|
26
|
+
*
|
|
27
|
+
* @usage
|
|
28
|
+
*
|
|
29
|
+
* ```astro nocollapse
|
|
30
|
+
* ---
|
|
31
|
+
* import { Separator } from '@bejamas/ui/components/separator';
|
|
32
|
+
* ---
|
|
33
|
+
*
|
|
34
|
+
* <Separator />
|
|
35
|
+
* <Separator orientation="vertical" />
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
|
|
39
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
40
|
+
|
|
41
|
+
const {
|
|
42
|
+
class: className = "",
|
|
43
|
+
orientation = "horizontal",
|
|
44
|
+
decorative = true,
|
|
45
|
+
...props
|
|
46
|
+
} = Astro.props;
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
<div
|
|
50
|
+
aria-orientation={orientation}
|
|
51
|
+
aria-hidden={decorative ? "true" : undefined}
|
|
52
|
+
class={cn(
|
|
53
|
+
"bg-border shrink-0",
|
|
54
|
+
orientation === "vertical" ? "h-full w-px" : "h-px w-full",
|
|
55
|
+
"shrink-0",
|
|
56
|
+
className,
|
|
57
|
+
)}
|
|
58
|
+
{...props}
|
|
59
|
+
>
|
|
60
|
+
</div>
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* @component Skeleton
|
|
4
|
+
* @title Skeleton
|
|
5
|
+
* @description A loading placeholder component that displays animated pulse effect, commonly used to indicate content is being loaded.
|
|
6
|
+
* @status stable
|
|
7
|
+
*
|
|
8
|
+
* Works great with Astro Server Islands as a fallback for loading content.
|
|
9
|
+
*
|
|
10
|
+
* @preview
|
|
11
|
+
*
|
|
12
|
+
* <div class="flex items-center gap-4">
|
|
13
|
+
* <Skeleton class="h-12 w-12 rounded-full" />
|
|
14
|
+
* <div class="space-y-2">
|
|
15
|
+
* <Skeleton class="h-4 w-[250px]" />
|
|
16
|
+
* <Skeleton class="h-4 w-[200px]" />
|
|
17
|
+
* </div>
|
|
18
|
+
* </div>
|
|
19
|
+
*
|
|
20
|
+
* @usage
|
|
21
|
+
*
|
|
22
|
+
* ```astro
|
|
23
|
+
* ---
|
|
24
|
+
* import { Skeleton } from '@bejamas/ui/components/skeleton';
|
|
25
|
+
* ---
|
|
26
|
+
*
|
|
27
|
+
* <Skeleton class="h-4 w-[250px]" />
|
|
28
|
+
* ```
|
|
29
|
+
*
|
|
30
|
+
* @examples
|
|
31
|
+
*
|
|
32
|
+
* ### Avatar
|
|
33
|
+
*
|
|
34
|
+
* <div class="flex w-fit items-center gap-4">
|
|
35
|
+
* <Skeleton class="size-10 shrink-0 rounded-full" />
|
|
36
|
+
* <div class="grid gap-2">
|
|
37
|
+
* <Skeleton class="h-4 w-[150px]" />
|
|
38
|
+
* <Skeleton class="h-4 w-[100px]" />
|
|
39
|
+
* </div>
|
|
40
|
+
* </div>
|
|
41
|
+
*
|
|
42
|
+
* ### Card
|
|
43
|
+
*
|
|
44
|
+
* <Card class="w-full max-w-xs">
|
|
45
|
+
* <CardHeader>
|
|
46
|
+
* <Skeleton class="h-4 w-2/3" />
|
|
47
|
+
* <Skeleton class="h-4 w-1/2" />
|
|
48
|
+
* </CardHeader>
|
|
49
|
+
* <CardContent>
|
|
50
|
+
* <Skeleton class="aspect-video w-full" />
|
|
51
|
+
* </CardContent>
|
|
52
|
+
* </Card>
|
|
53
|
+
*
|
|
54
|
+
* ### Text
|
|
55
|
+
*
|
|
56
|
+
* <div class="flex w-full max-w-xs flex-col gap-2">
|
|
57
|
+
* <Skeleton class="h-4 w-full" />
|
|
58
|
+
* <Skeleton class="h-4 w-full" />
|
|
59
|
+
* <Skeleton class="h-4 w-3/4" />
|
|
60
|
+
* </div>
|
|
61
|
+
*
|
|
62
|
+
* ### Form
|
|
63
|
+
*
|
|
64
|
+
* <div class="flex w-full max-w-xs flex-col gap-7">
|
|
65
|
+
* <div class="flex flex-col gap-3">
|
|
66
|
+
* <Skeleton class="h-4 w-20" />
|
|
67
|
+
* <Skeleton class="h-8 w-full" />
|
|
68
|
+
* </div>
|
|
69
|
+
* <div class="flex flex-col gap-3">
|
|
70
|
+
* <Skeleton class="h-4 w-24" />
|
|
71
|
+
* <Skeleton class="h-8 w-full" />
|
|
72
|
+
* </div>
|
|
73
|
+
* <Skeleton class="h-8 w-24" />
|
|
74
|
+
* </div>
|
|
75
|
+
*
|
|
76
|
+
* ### Table
|
|
77
|
+
*
|
|
78
|
+
* <div class="flex w-full max-w-sm flex-col gap-2">
|
|
79
|
+
* <div class="flex gap-4">
|
|
80
|
+
* <Skeleton class="h-4 flex-1" />
|
|
81
|
+
* <Skeleton class="h-4 w-24" />
|
|
82
|
+
* <Skeleton class="h-4 w-20" />
|
|
83
|
+
* </div>
|
|
84
|
+
* <div class="flex gap-4">
|
|
85
|
+
* <Skeleton class="h-4 flex-1" />
|
|
86
|
+
* <Skeleton class="h-4 w-24" />
|
|
87
|
+
* <Skeleton class="h-4 w-20" />
|
|
88
|
+
* </div>
|
|
89
|
+
* <div class="flex gap-4">
|
|
90
|
+
* <Skeleton class="h-4 flex-1" />
|
|
91
|
+
* <Skeleton class="h-4 w-24" />
|
|
92
|
+
* <Skeleton class="h-4 w-20" />
|
|
93
|
+
* </div>
|
|
94
|
+
* <div class="flex gap-4">
|
|
95
|
+
* <Skeleton class="h-4 flex-1" />
|
|
96
|
+
* <Skeleton class="h-4 w-24" />
|
|
97
|
+
* <Skeleton class="h-4 w-20" />
|
|
98
|
+
* </div>
|
|
99
|
+
* <div class="flex gap-4">
|
|
100
|
+
* <Skeleton class="h-4 flex-1" />
|
|
101
|
+
* <Skeleton class="h-4 w-24" />
|
|
102
|
+
* <Skeleton class="h-4 w-20" />
|
|
103
|
+
* </div>
|
|
104
|
+
* </div>
|
|
105
|
+
*
|
|
106
|
+
* @props
|
|
107
|
+
* - class?: string — Additional classes for styling.
|
|
108
|
+
*/
|
|
109
|
+
|
|
110
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
111
|
+
|
|
112
|
+
const { class: className = "", ...props } = Astro.props;
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
<div
|
|
116
|
+
data-slot="skeleton"
|
|
117
|
+
class={cn("bg-muted rounded-md animate-pulse", className)}
|
|
118
|
+
{...props}
|
|
119
|
+
>
|
|
120
|
+
<slot />
|
|
121
|
+
</div>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Skeleton } from "./Skeleton.astro";
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* @component Slider
|
|
4
|
+
* @title Slider
|
|
5
|
+
* @description An input component that allows users to select a value from a range by dragging a thumb along a track.
|
|
6
|
+
* @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=5455-17811
|
|
7
|
+
*
|
|
8
|
+
* @preview
|
|
9
|
+
*
|
|
10
|
+
* <Slider class="w-full max-w-sm" defaultValue={50} max={100} />
|
|
11
|
+
*
|
|
12
|
+
* @usage
|
|
13
|
+
*
|
|
14
|
+
* ```astro nocollapse
|
|
15
|
+
* ---
|
|
16
|
+
* import { Slider } from '@bejamas/ui/components/slider';
|
|
17
|
+
* ---
|
|
18
|
+
*
|
|
19
|
+
* <Slider defaultValue={50} max={100} />
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @examples
|
|
23
|
+
*
|
|
24
|
+
* ### Range
|
|
25
|
+
*
|
|
26
|
+
* Use two thumbs to create a range slider for selecting a min and max value.
|
|
27
|
+
*
|
|
28
|
+
* <Slider class="w-full max-w-sm" defaultValue={[25, 75]} max={100} />
|
|
29
|
+
*
|
|
30
|
+
* ### Vertical
|
|
31
|
+
*
|
|
32
|
+
* Set orientation to vertical for a vertical slider.
|
|
33
|
+
*
|
|
34
|
+
* <div class="h-48">
|
|
35
|
+
* <Slider class="h-full" orientation="vertical" defaultValue={50} max={100} />
|
|
36
|
+
* </div>
|
|
37
|
+
*
|
|
38
|
+
* ### Disabled
|
|
39
|
+
*
|
|
40
|
+
* Disable the slider to prevent interaction.
|
|
41
|
+
*
|
|
42
|
+
* <Slider class="w-full max-w-sm" defaultValue={50} max={100} disabled />
|
|
43
|
+
*
|
|
44
|
+
* ### Step
|
|
45
|
+
*
|
|
46
|
+
* Set a custom step increment.
|
|
47
|
+
*
|
|
48
|
+
* <Slider class="w-full max-w-sm" defaultValue={50} max={100} step={10} />
|
|
49
|
+
*
|
|
50
|
+
* @api
|
|
51
|
+
*
|
|
52
|
+
* ### Events
|
|
53
|
+
*
|
|
54
|
+
* The slider emits custom events that you can listen to:
|
|
55
|
+
*
|
|
56
|
+
* | Event | Detail | Description |
|
|
57
|
+
* |-------|--------|-------------|
|
|
58
|
+
* | `slider:change` | `{ value: number \| [number, number] }` | Fired on every value change (during drag) |
|
|
59
|
+
* | `slider:commit` | `{ value: number \| [number, number] }` | Fired when value is committed (pointer up or keyboard blur) |
|
|
60
|
+
*
|
|
61
|
+
* ```astro nocollapse
|
|
62
|
+
* <Slider id="my-slider" defaultValue={50} max={100} />
|
|
63
|
+
* ```
|
|
64
|
+
*
|
|
65
|
+
* ```js nocollapse
|
|
66
|
+
* const slider = document.getElementById('my-slider');
|
|
67
|
+
*
|
|
68
|
+
* slider.addEventListener('slider:change', (e) => {
|
|
69
|
+
* console.log('Value changing:', e.detail.value);
|
|
70
|
+
* });
|
|
71
|
+
*
|
|
72
|
+
* slider.addEventListener('slider:commit', (e) => {
|
|
73
|
+
* console.log('Value committed:', e.detail.value);
|
|
74
|
+
* });
|
|
75
|
+
* ```
|
|
76
|
+
*
|
|
77
|
+
* ### Programmatic Control
|
|
78
|
+
*
|
|
79
|
+
* You can set the slider value programmatically by dispatching a `slider:set` event:
|
|
80
|
+
*
|
|
81
|
+
* ```js nocollapse
|
|
82
|
+
* // Set single value
|
|
83
|
+
* slider.dispatchEvent(new CustomEvent('slider:set', {
|
|
84
|
+
* detail: { value: 75 }
|
|
85
|
+
* }));
|
|
86
|
+
*
|
|
87
|
+
* // Set range values
|
|
88
|
+
* slider.dispatchEvent(new CustomEvent('slider:set', {
|
|
89
|
+
* detail: { value: [25, 75] }
|
|
90
|
+
* }));
|
|
91
|
+
* ```
|
|
92
|
+
*
|
|
93
|
+
* ### Data Attributes
|
|
94
|
+
*
|
|
95
|
+
* The slider sets these data attributes that you can use for styling or querying state:
|
|
96
|
+
*
|
|
97
|
+
* | Attribute | Element | Description |
|
|
98
|
+
* |-----------|---------|-------------|
|
|
99
|
+
* | `data-orientation` | slider | Current orientation (`horizontal` or `vertical`) |
|
|
100
|
+
* | `data-disabled` | slider | Present when slider is disabled |
|
|
101
|
+
* | `data-dragging` | slider, thumb | Present during drag interaction |
|
|
102
|
+
* | `data-value` | slider | Current value(s) as string (e.g., `"50"` or `"25,75"`) |
|
|
103
|
+
*
|
|
104
|
+
*/
|
|
105
|
+
|
|
106
|
+
import type { HTMLAttributes } from "astro/types";
|
|
107
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
108
|
+
|
|
109
|
+
type SliderValue = number | [number, number];
|
|
110
|
+
|
|
111
|
+
interface Props extends HTMLAttributes<"div"> {
|
|
112
|
+
class?: string;
|
|
113
|
+
value?: SliderValue;
|
|
114
|
+
defaultValue?: SliderValue;
|
|
115
|
+
min?: number;
|
|
116
|
+
max?: number;
|
|
117
|
+
step?: number;
|
|
118
|
+
orientation?: "horizontal" | "vertical";
|
|
119
|
+
disabled?: boolean;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const {
|
|
123
|
+
class: className = "",
|
|
124
|
+
value,
|
|
125
|
+
defaultValue,
|
|
126
|
+
min = 0,
|
|
127
|
+
max = 100,
|
|
128
|
+
step = 1,
|
|
129
|
+
orientation = "horizontal",
|
|
130
|
+
disabled = false,
|
|
131
|
+
...rest
|
|
132
|
+
} = Astro.props as Props;
|
|
133
|
+
|
|
134
|
+
const resolvedValue = value ?? defaultValue ?? min;
|
|
135
|
+
const defaultValueAttribute = Array.isArray(resolvedValue)
|
|
136
|
+
? resolvedValue.join(",")
|
|
137
|
+
: String(resolvedValue);
|
|
138
|
+
const thumbCount = Array.isArray(resolvedValue) ? 2 : 1;
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
<div
|
|
142
|
+
{...rest}
|
|
143
|
+
data-slot="slider"
|
|
144
|
+
data-default-value={defaultValueAttribute}
|
|
145
|
+
data-min={min}
|
|
146
|
+
data-max={max}
|
|
147
|
+
data-step={step}
|
|
148
|
+
data-orientation={orientation}
|
|
149
|
+
data-thumb-alignment="edge"
|
|
150
|
+
data-disabled={disabled ? "true" : undefined}
|
|
151
|
+
class={cn("data-horizontal:w-full data-vertical:h-full", className)}
|
|
152
|
+
>
|
|
153
|
+
<div
|
|
154
|
+
data-disabled={disabled ? "true" : undefined}
|
|
155
|
+
class="data-vertical:min-h-40 relative flex w-full touch-none items-center select-none data-disabled:cursor-not-allowed data-vertical:h-full data-vertical:w-auto data-vertical:flex-col"
|
|
156
|
+
>
|
|
157
|
+
<div
|
|
158
|
+
data-slot="slider-track"
|
|
159
|
+
class="bg-muted rounded-full data-horizontal:h-1 data-horizontal:w-full data-vertical:h-full data-vertical:w-1 relative grow overflow-hidden select-none data-disabled:opacity-40"
|
|
160
|
+
>
|
|
161
|
+
<div
|
|
162
|
+
data-slot="slider-range"
|
|
163
|
+
class="bg-primary select-none data-horizontal:h-full data-vertical:w-full data-disabled:bg-slider-background-disabled"
|
|
164
|
+
>
|
|
165
|
+
</div>
|
|
166
|
+
</div>
|
|
167
|
+
{
|
|
168
|
+
Array.from({ length: thumbCount }, (_, index) => (
|
|
169
|
+
<div
|
|
170
|
+
data-slot="slider-thumb"
|
|
171
|
+
data-index={index}
|
|
172
|
+
data-disabled={disabled ? "true" : undefined}
|
|
173
|
+
class="border-primary size-4 rounded-full border-2 bg-background transition-[color,box-shadow] hover:ring-3 hover:ring-ring/50 focus-visible:ring-3 focus-visible:ring-ring/50 focus-visible:outline-hidden block shrink-0 select-none data-disabled:pointer-events-none data-disabled:bg-[linear-gradient(var(--slider-dot-background-disabled),var(--slider-dot-background-disabled))] data-disabled:border-[var(--primary-50)]"
|
|
174
|
+
/>
|
|
175
|
+
))
|
|
176
|
+
}
|
|
177
|
+
</div>
|
|
178
|
+
</div>
|
|
179
|
+
|
|
180
|
+
<script>
|
|
181
|
+
import { createSlider } from "@data-slot/slider";
|
|
182
|
+
|
|
183
|
+
document.querySelectorAll('[data-slot="slider"]').forEach((el) => {
|
|
184
|
+
const element = el as HTMLElement;
|
|
185
|
+
|
|
186
|
+
// Don't pass defaultValue in options - let the library read from
|
|
187
|
+
// data-default-value directly so single and range sliders stay aligned.
|
|
188
|
+
createSlider(element, {
|
|
189
|
+
min: Number(element.dataset.min) || 0,
|
|
190
|
+
max: Number(element.dataset.max) || 100,
|
|
191
|
+
step: Number(element.dataset.step) || 1,
|
|
192
|
+
orientation:
|
|
193
|
+
(element.dataset.orientation as "horizontal" | "vertical") ||
|
|
194
|
+
"horizontal",
|
|
195
|
+
disabled: element.dataset.disabled === "true",
|
|
196
|
+
});
|
|
197
|
+
});
|
|
198
|
+
</script>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Slider } from "./Slider.astro";
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* @component Spinner
|
|
4
|
+
* @title Spinner
|
|
5
|
+
* @description A loading indicator component that displays an animated spinning icon.
|
|
6
|
+
*
|
|
7
|
+
* @preview
|
|
8
|
+
*
|
|
9
|
+
* <Item variant="muted" class="w-full max-w-xs">
|
|
10
|
+
* <ItemMedia>
|
|
11
|
+
* <Spinner />
|
|
12
|
+
* </ItemMedia>
|
|
13
|
+
* <ItemContent>
|
|
14
|
+
* <ItemTitle class="line-clamp-1">Submitting Contact Form...</ItemTitle>
|
|
15
|
+
* </ItemContent>
|
|
16
|
+
* </Item>
|
|
17
|
+
*
|
|
18
|
+
* @usage
|
|
19
|
+
*
|
|
20
|
+
* ```astro nocollapse
|
|
21
|
+
* ---
|
|
22
|
+
* import { Spinner } from '@bejamas/ui/components/spinner';
|
|
23
|
+
* ---
|
|
24
|
+
*
|
|
25
|
+
* <Spinner />
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* ## Customization
|
|
29
|
+
*
|
|
30
|
+
* You can replace the default spinner icon with any other icon by editing the `Spinner` component.
|
|
31
|
+
*
|
|
32
|
+
* ```astro showLineNumbers title="components/ui/spinner/Spinner.astro" nocollapse nopreview
|
|
33
|
+
* ---
|
|
34
|
+
* import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
35
|
+
* import { Loader as LoaderIcon } from "@lucide/astro";
|
|
36
|
+
*
|
|
37
|
+
* const { class: className = "", ...props } = Astro.props;
|
|
38
|
+
* ---
|
|
39
|
+
*
|
|
40
|
+
* <LoaderIcon
|
|
41
|
+
* data-slot="spinner"
|
|
42
|
+
* role="status"
|
|
43
|
+
* aria-label="Loading"
|
|
44
|
+
* class={cn("cn-spinner", "size-4 animate-spin", className)}
|
|
45
|
+
* {...props}
|
|
46
|
+
* />
|
|
47
|
+
* ```
|
|
48
|
+
*
|
|
49
|
+
* @examples
|
|
50
|
+
*
|
|
51
|
+
* ### Size
|
|
52
|
+
*
|
|
53
|
+
* Use the `size-*` utility class to change the size of the spinner.
|
|
54
|
+
*
|
|
55
|
+
* <div class="flex items-center gap-6">
|
|
56
|
+
* <Spinner class="size-3" />
|
|
57
|
+
* <Spinner class="size-4" />
|
|
58
|
+
* <Spinner class="size-6" />
|
|
59
|
+
* <Spinner class="size-8" />
|
|
60
|
+
* </div>
|
|
61
|
+
*
|
|
62
|
+
* ### Button
|
|
63
|
+
*
|
|
64
|
+
* Add a spinner to a button to indicate a loading state. Remember to use the `data-icon` attribute for proper spacing.
|
|
65
|
+
*
|
|
66
|
+
* <div class="flex flex-col items-center gap-4">
|
|
67
|
+
* <Button disabled size="sm">
|
|
68
|
+
* <Spinner data-icon />
|
|
69
|
+
* Loading...
|
|
70
|
+
* </Button>
|
|
71
|
+
* <Button variant="outline" disabled size="sm">
|
|
72
|
+
* <Spinner data-icon />
|
|
73
|
+
* Please wait
|
|
74
|
+
* </Button>
|
|
75
|
+
* <Button variant="secondary" disabled size="sm">
|
|
76
|
+
* <Spinner data-icon />
|
|
77
|
+
* Processing
|
|
78
|
+
* </Button>
|
|
79
|
+
* </div>
|
|
80
|
+
*
|
|
81
|
+
* ### Badge
|
|
82
|
+
*
|
|
83
|
+
* Add a spinner to a badge to indicate a loading state.
|
|
84
|
+
*
|
|
85
|
+
* <div class="flex items-center gap-4 [--radius:1.2rem]">
|
|
86
|
+
* <Badge>
|
|
87
|
+
* <Spinner data-icon />
|
|
88
|
+
* Syncing
|
|
89
|
+
* </Badge>
|
|
90
|
+
* <Badge variant="secondary">
|
|
91
|
+
* <Spinner data-icon />
|
|
92
|
+
* Updating
|
|
93
|
+
* </Badge>
|
|
94
|
+
* <Badge variant="outline">
|
|
95
|
+
* <Spinner data-icon />
|
|
96
|
+
* Processing
|
|
97
|
+
* </Badge>
|
|
98
|
+
* </div>
|
|
99
|
+
*
|
|
100
|
+
* ### Input Group
|
|
101
|
+
*
|
|
102
|
+
* <div class="flex w-full max-w-md flex-col gap-4">
|
|
103
|
+
* <InputGroup>
|
|
104
|
+
* <InputGroupInput placeholder="Send a message..." disabled />
|
|
105
|
+
* <InputGroupAddon align="inline-end">
|
|
106
|
+
* <Spinner />
|
|
107
|
+
* </InputGroupAddon>
|
|
108
|
+
* </InputGroup>
|
|
109
|
+
* <InputGroup>
|
|
110
|
+
* <InputGroupTextarea placeholder="Send a message..." disabled />
|
|
111
|
+
* <InputGroupAddon align="block-end">
|
|
112
|
+
* <Spinner /> Validating...
|
|
113
|
+
* <InputGroupButton class="ml-auto" variant="default">
|
|
114
|
+
* <ArrowUpIcon />
|
|
115
|
+
* <span class="sr-only">Send</span>
|
|
116
|
+
* </InputGroupButton>
|
|
117
|
+
* </InputGroupAddon>
|
|
118
|
+
* </InputGroup>
|
|
119
|
+
* </div>
|
|
120
|
+
*
|
|
121
|
+
* @props
|
|
122
|
+
* - class?: string — Additional classes for styling (e.g., size-3, size-6).
|
|
123
|
+
*/
|
|
124
|
+
|
|
125
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
126
|
+
|
|
127
|
+
const { class: className = "", ...props } = Astro.props;
|
|
128
|
+
---
|
|
129
|
+
|
|
130
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" data-slot="spinner"
|
|
131
|
+
role="status"
|
|
132
|
+
aria-label="Loading"
|
|
133
|
+
class={cn("", "size-4 animate-spin", className)}
|
|
134
|
+
{...props}><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M21 12a9 9 0 1 1-6.219-8.56"/></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Spinner } from "./Spinner.astro";
|