@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 @@
|
|
|
1
|
+
export { default as Toggle } from "./Toggle.astro";
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* @component ToggleGroup
|
|
4
|
+
* @title Toggle Group
|
|
5
|
+
* @description A set of two-state buttons that can be toggled on or off. Supports single or multiple selection.
|
|
6
|
+
*
|
|
7
|
+
* @preview
|
|
8
|
+
*
|
|
9
|
+
* <ToggleGroup defaultValue="center" variant="outline">
|
|
10
|
+
* <ToggleGroupItem value="left" aria-label="Align left">
|
|
11
|
+
* <AlignLeftIcon />
|
|
12
|
+
* </ToggleGroupItem>
|
|
13
|
+
* <ToggleGroupItem value="center" aria-label="Align center">
|
|
14
|
+
* <AlignCenterIcon />
|
|
15
|
+
* </ToggleGroupItem>
|
|
16
|
+
* <ToggleGroupItem value="right" aria-label="Align right">
|
|
17
|
+
* <AlignRightIcon />
|
|
18
|
+
* </ToggleGroupItem>
|
|
19
|
+
* </ToggleGroup>
|
|
20
|
+
*
|
|
21
|
+
* @usage
|
|
22
|
+
*
|
|
23
|
+
* ```astro nocollapse
|
|
24
|
+
* ---
|
|
25
|
+
* import { ToggleGroup, ToggleGroupItem } from '@bejamas/ui/components/toggle-group';
|
|
26
|
+
* import { BoldIcon, ItalicIcon, UnderlineIcon } from '@lucide/astro';
|
|
27
|
+
* ---
|
|
28
|
+
*
|
|
29
|
+
* <ToggleGroup defaultValue="bold" variant="outline">
|
|
30
|
+
* <ToggleGroupItem value="bold" aria-label="Toggle bold">
|
|
31
|
+
* <BoldIcon />
|
|
32
|
+
* </ToggleGroupItem>
|
|
33
|
+
* <ToggleGroupItem value="italic" aria-label="Toggle italic">
|
|
34
|
+
* <ItalicIcon />
|
|
35
|
+
* </ToggleGroupItem>
|
|
36
|
+
* <ToggleGroupItem value="underline" aria-label="Toggle underline">
|
|
37
|
+
* <UnderlineIcon />
|
|
38
|
+
* </ToggleGroupItem>
|
|
39
|
+
* </ToggleGroup>
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @api
|
|
43
|
+
*
|
|
44
|
+
* ### Events
|
|
45
|
+
*
|
|
46
|
+
* | Event | Detail | Description |
|
|
47
|
+
* |-------|--------|-------------|
|
|
48
|
+
* | `toggle-group:change` | `{ value: string[] }` | Fired when the selection changes |
|
|
49
|
+
*
|
|
50
|
+
* ### Programmatic Control
|
|
51
|
+
*
|
|
52
|
+
* ```js nocollapse
|
|
53
|
+
* // Set selected values programmatically
|
|
54
|
+
* element.dispatchEvent(new CustomEvent('toggle-group:set', {
|
|
55
|
+
* detail: { value: ['bold', 'italic'] }
|
|
56
|
+
* }));
|
|
57
|
+
* ```
|
|
58
|
+
*
|
|
59
|
+
* ### Data Attributes
|
|
60
|
+
*
|
|
61
|
+
* | Attribute | Element | Description |
|
|
62
|
+
* |-----------|---------|-------------|
|
|
63
|
+
* | `data-state` | toggle-group-item | Current state: `on` or `off` |
|
|
64
|
+
* | `data-disabled` | toggle-group | Present when group is disabled |
|
|
65
|
+
* | `data-orientation` | toggle-group | Orientation: `horizontal` or `vertical` |
|
|
66
|
+
* | `data-spacing` | toggle-group | Gap value used by style packs |
|
|
67
|
+
* | `data-variant` | toggle-group | Visual variant: `default` or `outline` |
|
|
68
|
+
* | `data-size` | toggle-group | Size: `sm`, `default`, or `lg` |
|
|
69
|
+
*
|
|
70
|
+
* @examples
|
|
71
|
+
*
|
|
72
|
+
* ### Multiple Selection
|
|
73
|
+
*
|
|
74
|
+
* <ToggleGroup multiple defaultValue={["bold", "italic"]} variant="outline">
|
|
75
|
+
* <ToggleGroupItem value="bold" aria-label="Toggle bold">
|
|
76
|
+
* <BoldIcon />
|
|
77
|
+
* </ToggleGroupItem>
|
|
78
|
+
* <ToggleGroupItem value="italic" aria-label="Toggle italic">
|
|
79
|
+
* <ItalicIcon />
|
|
80
|
+
* </ToggleGroupItem>
|
|
81
|
+
* <ToggleGroupItem value="underline" aria-label="Toggle underline">
|
|
82
|
+
* <UnderlineIcon />
|
|
83
|
+
* </ToggleGroupItem>
|
|
84
|
+
* </ToggleGroup>
|
|
85
|
+
*
|
|
86
|
+
* ### Outline Variant
|
|
87
|
+
*
|
|
88
|
+
* <ToggleGroup variant="outline" defaultValue="center">
|
|
89
|
+
* <ToggleGroupItem value="left" aria-label="Align left">
|
|
90
|
+
* <AlignLeftIcon />
|
|
91
|
+
* </ToggleGroupItem>
|
|
92
|
+
* <ToggleGroupItem value="center" aria-label="Align center">
|
|
93
|
+
* <AlignCenterIcon />
|
|
94
|
+
* </ToggleGroupItem>
|
|
95
|
+
* <ToggleGroupItem value="right" aria-label="Align right">
|
|
96
|
+
* <AlignRightIcon />
|
|
97
|
+
* </ToggleGroupItem>
|
|
98
|
+
* </ToggleGroup>
|
|
99
|
+
*
|
|
100
|
+
* ### Sizes
|
|
101
|
+
*
|
|
102
|
+
* <div class="flex flex-col gap-4">
|
|
103
|
+
* <ToggleGroup size="sm" variant="outline" defaultValue="center">
|
|
104
|
+
* <ToggleGroupItem value="left" aria-label="Align left">
|
|
105
|
+
* <AlignLeftIcon />
|
|
106
|
+
* </ToggleGroupItem>
|
|
107
|
+
* <ToggleGroupItem value="center" aria-label="Align center">
|
|
108
|
+
* <AlignCenterIcon />
|
|
109
|
+
* </ToggleGroupItem>
|
|
110
|
+
* <ToggleGroupItem value="right" aria-label="Align right">
|
|
111
|
+
* <AlignRightIcon />
|
|
112
|
+
* </ToggleGroupItem>
|
|
113
|
+
* </ToggleGroup>
|
|
114
|
+
* <ToggleGroup size="default" variant="outline" defaultValue="center">
|
|
115
|
+
* <ToggleGroupItem value="left" aria-label="Align left">
|
|
116
|
+
* <AlignLeftIcon />
|
|
117
|
+
* </ToggleGroupItem>
|
|
118
|
+
* <ToggleGroupItem value="center" aria-label="Align center">
|
|
119
|
+
* <AlignCenterIcon />
|
|
120
|
+
* </ToggleGroupItem>
|
|
121
|
+
* <ToggleGroupItem value="right" aria-label="Align right">
|
|
122
|
+
* <AlignRightIcon />
|
|
123
|
+
* </ToggleGroupItem>
|
|
124
|
+
* </ToggleGroup>
|
|
125
|
+
* <ToggleGroup size="lg" variant="outline" defaultValue="center">
|
|
126
|
+
* <ToggleGroupItem value="left" aria-label="Align left">
|
|
127
|
+
* <AlignLeftIcon />
|
|
128
|
+
* </ToggleGroupItem>
|
|
129
|
+
* <ToggleGroupItem value="center" aria-label="Align center">
|
|
130
|
+
* <AlignCenterIcon />
|
|
131
|
+
* </ToggleGroupItem>
|
|
132
|
+
* <ToggleGroupItem value="right" aria-label="Align right">
|
|
133
|
+
* <AlignRightIcon />
|
|
134
|
+
* </ToggleGroupItem>
|
|
135
|
+
* </ToggleGroup>
|
|
136
|
+
* </div>
|
|
137
|
+
*
|
|
138
|
+
* ### Vertical Orientation
|
|
139
|
+
*
|
|
140
|
+
* <ToggleGroup orientation="vertical" variant="outline" defaultValue="middle">
|
|
141
|
+
* <ToggleGroupItem value="top" aria-label="Align top">
|
|
142
|
+
* <AlignVerticalJustifyStartIcon />
|
|
143
|
+
* </ToggleGroupItem>
|
|
144
|
+
* <ToggleGroupItem value="middle" aria-label="Align middle">
|
|
145
|
+
* <AlignVerticalJustifyCenterIcon />
|
|
146
|
+
* </ToggleGroupItem>
|
|
147
|
+
* <ToggleGroupItem value="bottom" aria-label="Align bottom">
|
|
148
|
+
* <AlignVerticalJustifyEndIcon />
|
|
149
|
+
* </ToggleGroupItem>
|
|
150
|
+
* </ToggleGroup>
|
|
151
|
+
*
|
|
152
|
+
* ### Disabled
|
|
153
|
+
*
|
|
154
|
+
* <ToggleGroup disabled variant="outline" defaultValue="center">
|
|
155
|
+
* <ToggleGroupItem value="left" aria-label="Align left">
|
|
156
|
+
* <AlignLeftIcon />
|
|
157
|
+
* </ToggleGroupItem>
|
|
158
|
+
* <ToggleGroupItem value="center" aria-label="Align center">
|
|
159
|
+
* <AlignCenterIcon />
|
|
160
|
+
* </ToggleGroupItem>
|
|
161
|
+
* <ToggleGroupItem value="right" aria-label="Align right">
|
|
162
|
+
* <AlignRightIcon />
|
|
163
|
+
* </ToggleGroupItem>
|
|
164
|
+
* </ToggleGroup>
|
|
165
|
+
*
|
|
166
|
+
*/
|
|
167
|
+
|
|
168
|
+
import type { HTMLAttributes } from "astro/types";
|
|
169
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
170
|
+
|
|
171
|
+
interface Props extends Omit<HTMLAttributes<"div">, "class"> {
|
|
172
|
+
variant?: "default" | "outline";
|
|
173
|
+
size?: "default" | "sm" | "lg";
|
|
174
|
+
spacing?: number;
|
|
175
|
+
defaultValue?: string | string[];
|
|
176
|
+
multiple?: boolean;
|
|
177
|
+
orientation?: "horizontal" | "vertical";
|
|
178
|
+
disabled?: boolean;
|
|
179
|
+
class?: string;
|
|
180
|
+
style?: string;
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
const {
|
|
184
|
+
variant = "default",
|
|
185
|
+
size = "default",
|
|
186
|
+
spacing = 0,
|
|
187
|
+
defaultValue,
|
|
188
|
+
multiple = false,
|
|
189
|
+
orientation = "horizontal",
|
|
190
|
+
disabled = false,
|
|
191
|
+
class: className = "",
|
|
192
|
+
style = "",
|
|
193
|
+
...rest
|
|
194
|
+
} = Astro.props as Props;
|
|
195
|
+
---
|
|
196
|
+
|
|
197
|
+
<div
|
|
198
|
+
data-slot="toggle-group"
|
|
199
|
+
data-horizontal={orientation === "horizontal" ? "" : undefined}
|
|
200
|
+
data-variant={variant}
|
|
201
|
+
data-spacing={String(spacing)}
|
|
202
|
+
data-size={size}
|
|
203
|
+
data-orientation={orientation}
|
|
204
|
+
data-vertical={orientation === "vertical" ? "" : undefined}
|
|
205
|
+
data-disabled={disabled ? "true" : undefined}
|
|
206
|
+
data-default-value={Array.isArray(defaultValue) ? defaultValue.join(",") : defaultValue}
|
|
207
|
+
data-multiple={multiple ? "true" : undefined}
|
|
208
|
+
class={cn(
|
|
209
|
+
"rounded-lg data-[spacing=0]:data-[variant=outline]:shadow-xs",
|
|
210
|
+
"group/toggle-group flex w-fit flex-row items-center gap-[--spacing(var(--gap))] data-vertical:flex-col data-vertical:items-stretch",
|
|
211
|
+
className
|
|
212
|
+
)}
|
|
213
|
+
style={`--gap:${spacing};${style}`}
|
|
214
|
+
{...rest}
|
|
215
|
+
>
|
|
216
|
+
<slot />
|
|
217
|
+
</div>
|
|
218
|
+
|
|
219
|
+
<script>
|
|
220
|
+
import { createToggleGroup } from "@cl-light-ds/ui/lib/toggle-group-controller";
|
|
221
|
+
document.querySelectorAll<HTMLElement>('[data-slot="toggle-group"]').forEach((el) => {
|
|
222
|
+
createToggleGroup(el);
|
|
223
|
+
});
|
|
224
|
+
</script>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
import {
|
|
5
|
+
toggleVariants,
|
|
6
|
+
type ToggleVariantProps,
|
|
7
|
+
} from "@cl-light-ds/ui/lib/toggle-shared";
|
|
8
|
+
|
|
9
|
+
interface Props extends ToggleVariantProps, Omit<HTMLAttributes<"button">, "class"> {
|
|
10
|
+
value: string;
|
|
11
|
+
disabled?: boolean;
|
|
12
|
+
class?: string;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
const {
|
|
16
|
+
value,
|
|
17
|
+
variant,
|
|
18
|
+
size,
|
|
19
|
+
disabled,
|
|
20
|
+
class: className = "",
|
|
21
|
+
...rest
|
|
22
|
+
} = Astro.props as Props;
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
<button
|
|
26
|
+
type="button"
|
|
27
|
+
data-slot="toggle-group-item"
|
|
28
|
+
data-size={size ?? undefined}
|
|
29
|
+
data-value={value}
|
|
30
|
+
data-variant={variant ?? undefined}
|
|
31
|
+
disabled={disabled}
|
|
32
|
+
class={cn(
|
|
33
|
+
"data-[state=on]:bg-muted group-data-[spacing=0]/toggle-group:rounded-none group-data-[spacing=0]/toggle-group:px-2 group-data-[spacing=0]/toggle-group:shadow-none group-data-horizontal/toggle-group:data-[spacing=0]:first:rounded-l-md group-data-vertical/toggle-group:data-[spacing=0]:first:rounded-t-md group-data-horizontal/toggle-group:data-[spacing=0]:last:rounded-r-md group-data-vertical/toggle-group:data-[spacing=0]:last:rounded-b-md rounded-none group-data-[orientation=horizontal]/toggle-group:first:rounded-s-md group-data-[orientation=horizontal]/toggle-group:last:rounded-e-md group-data-[orientation=vertical]/toggle-group:first:rounded-t-md group-data-[orientation=vertical]/toggle-group:last:rounded-b-md",
|
|
34
|
+
toggleVariants({
|
|
35
|
+
variant: variant ?? "default",
|
|
36
|
+
size: size ?? "default",
|
|
37
|
+
}),
|
|
38
|
+
"shrink-0 focus:z-10 focus-visible:z-10",
|
|
39
|
+
"group-data-horizontal/toggle-group:group-data-[spacing=0]/toggle-group:group-data-[variant=outline]/toggle-group:border-s-0",
|
|
40
|
+
"group-data-vertical/toggle-group:group-data-[spacing=0]/toggle-group:group-data-[variant=outline]/toggle-group:border-t-0",
|
|
41
|
+
"group-data-horizontal/toggle-group:group-data-[spacing=0]/toggle-group:group-data-[variant=outline]/toggle-group:first:border-s",
|
|
42
|
+
"group-data-vertical/toggle-group:group-data-[spacing=0]/toggle-group:group-data-[variant=outline]/toggle-group:first:border-t",
|
|
43
|
+
className
|
|
44
|
+
)}
|
|
45
|
+
{...rest}
|
|
46
|
+
>
|
|
47
|
+
<slot />
|
|
48
|
+
</button>
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* @component Tooltip
|
|
4
|
+
* @title Tooltip
|
|
5
|
+
* @description A small popup that appears when hovering over or focusing on an element. Positioning is computed in JavaScript.
|
|
6
|
+
*
|
|
7
|
+
* @preview
|
|
8
|
+
*
|
|
9
|
+
* <Tooltip>
|
|
10
|
+
* <TooltipTrigger asChild>
|
|
11
|
+
* <Button variant="outline">Hover</Button>
|
|
12
|
+
* </TooltipTrigger>
|
|
13
|
+
* <TooltipContent>
|
|
14
|
+
* <p>Add to library</p>
|
|
15
|
+
* </TooltipContent>
|
|
16
|
+
* </Tooltip>
|
|
17
|
+
*
|
|
18
|
+
* @usage
|
|
19
|
+
*
|
|
20
|
+
* ```astro nocollapse
|
|
21
|
+
* ---
|
|
22
|
+
* import { Tooltip, TooltipTrigger, TooltipContent } from '@bejamas/ui/components/tooltip';
|
|
23
|
+
* import { Button } from '@bejamas/ui/components/button';
|
|
24
|
+
* ---
|
|
25
|
+
*
|
|
26
|
+
* <Tooltip>
|
|
27
|
+
* <TooltipTrigger asChild>
|
|
28
|
+
* <Button variant="outline">Hover</Button>
|
|
29
|
+
* </TooltipTrigger>
|
|
30
|
+
* <TooltipContent>
|
|
31
|
+
* <p>Add to library</p>
|
|
32
|
+
* </TooltipContent>
|
|
33
|
+
* </Tooltip>
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @examples
|
|
37
|
+
*
|
|
38
|
+
* ### With delay
|
|
39
|
+
*
|
|
40
|
+
* <Tooltip delay={1000}>
|
|
41
|
+
* <TooltipTrigger asChild>
|
|
42
|
+
* <Button variant="outline">Hover with delay</Button>
|
|
43
|
+
* </TooltipTrigger>
|
|
44
|
+
* <TooltipContent>
|
|
45
|
+
* <p>This tooltip appears after 1000ms</p>
|
|
46
|
+
* </TooltipContent>
|
|
47
|
+
* </Tooltip>
|
|
48
|
+
*
|
|
49
|
+
* ### Skip delay on subsequent tooltips
|
|
50
|
+
*
|
|
51
|
+
* When a tooltip is shown, hovering over other tooltip triggers will show their tooltips immediately without delay. Try hovering over the first button, then quickly move to the others.
|
|
52
|
+
*
|
|
53
|
+
* <div class="flex gap-2">
|
|
54
|
+
* <Tooltip delay={500}>
|
|
55
|
+
* <TooltipTrigger asChild>
|
|
56
|
+
* <Button variant="outline">Bold</Button>
|
|
57
|
+
* </TooltipTrigger>
|
|
58
|
+
* <TooltipContent>
|
|
59
|
+
* <p>Bold (Ctrl+B)</p>
|
|
60
|
+
* </TooltipContent>
|
|
61
|
+
* </Tooltip>
|
|
62
|
+
* <Tooltip delay={500}>
|
|
63
|
+
* <TooltipTrigger asChild>
|
|
64
|
+
* <Button variant="outline">Italic</Button>
|
|
65
|
+
* </TooltipTrigger>
|
|
66
|
+
* <TooltipContent>
|
|
67
|
+
* <p>Italic (Ctrl+I)</p>
|
|
68
|
+
* </TooltipContent>
|
|
69
|
+
* </Tooltip>
|
|
70
|
+
* <Tooltip delay={500}>
|
|
71
|
+
* <TooltipTrigger asChild>
|
|
72
|
+
* <Button variant="outline">Underline</Button>
|
|
73
|
+
* </TooltipTrigger>
|
|
74
|
+
* <TooltipContent>
|
|
75
|
+
* <p>Underline (Ctrl+U)</p>
|
|
76
|
+
* </TooltipContent>
|
|
77
|
+
* </Tooltip>
|
|
78
|
+
* </div>
|
|
79
|
+
*
|
|
80
|
+
* ### Different sides
|
|
81
|
+
*
|
|
82
|
+
* Use the `side` prop to control which side the tooltip appears on.
|
|
83
|
+
*
|
|
84
|
+
* <div class="grid gap-4 py-8">
|
|
85
|
+
* <div class="flex gap-4 items-center justify-center">
|
|
86
|
+
* <Tooltip>
|
|
87
|
+
* <TooltipTrigger asChild>
|
|
88
|
+
* <Button variant="outline">Left</Button>
|
|
89
|
+
* </TooltipTrigger>
|
|
90
|
+
* <TooltipContent side="left">
|
|
91
|
+
* <p>Tooltip on left</p>
|
|
92
|
+
* </TooltipContent>
|
|
93
|
+
* </Tooltip>
|
|
94
|
+
* <Tooltip>
|
|
95
|
+
* <TooltipTrigger asChild>
|
|
96
|
+
* <Button variant="outline">Top</Button>
|
|
97
|
+
* </TooltipTrigger>
|
|
98
|
+
* <TooltipContent side="top">
|
|
99
|
+
* <p>Tooltip on top</p>
|
|
100
|
+
* </TooltipContent>
|
|
101
|
+
* </Tooltip>
|
|
102
|
+
* <Tooltip>
|
|
103
|
+
* <TooltipTrigger asChild>
|
|
104
|
+
* <Button variant="outline">Bottom</Button>
|
|
105
|
+
* </TooltipTrigger>
|
|
106
|
+
* <TooltipContent side="bottom">
|
|
107
|
+
* <p>Tooltip on bottom</p>
|
|
108
|
+
* </TooltipContent>
|
|
109
|
+
* </Tooltip>
|
|
110
|
+
* <Tooltip>
|
|
111
|
+
* <TooltipTrigger asChild>
|
|
112
|
+
* <Button variant="outline">Right</Button>
|
|
113
|
+
* </TooltipTrigger>
|
|
114
|
+
* <TooltipContent side="right">
|
|
115
|
+
* <p>Tooltip on right</p>
|
|
116
|
+
* </TooltipContent>
|
|
117
|
+
* </Tooltip>
|
|
118
|
+
* </div>
|
|
119
|
+
* <div class="flex gap-4 items-center justify-center">
|
|
120
|
+
* <Tooltip>
|
|
121
|
+
* <TooltipTrigger asChild>
|
|
122
|
+
* <Button variant="outline">Inline Start</Button>
|
|
123
|
+
* </TooltipTrigger>
|
|
124
|
+
* <TooltipContent side="inline-start">
|
|
125
|
+
* <p>Tooltip on inline start</p>
|
|
126
|
+
* </TooltipContent>
|
|
127
|
+
* </Tooltip>
|
|
128
|
+
* <Tooltip>
|
|
129
|
+
* <TooltipTrigger asChild>
|
|
130
|
+
* <Button variant="outline">Inline End</Button>
|
|
131
|
+
* </TooltipTrigger>
|
|
132
|
+
* <TooltipContent side="inline-end">
|
|
133
|
+
* <p>Tooltip on inline end</p>
|
|
134
|
+
* </TooltipContent>
|
|
135
|
+
* </Tooltip>
|
|
136
|
+
* </div>
|
|
137
|
+
* </div>
|
|
138
|
+
*
|
|
139
|
+
* ### Alignment options
|
|
140
|
+
*
|
|
141
|
+
* Use the `align` prop to control how the tooltip aligns relative to the trigger.
|
|
142
|
+
*
|
|
143
|
+
* <div class="flex flex-col gap-4 items-center py-8">
|
|
144
|
+
* <div class="flex gap-4">
|
|
145
|
+
* <Tooltip>
|
|
146
|
+
* <TooltipTrigger asChild>
|
|
147
|
+
* <Button variant="outline">Top Start</Button>
|
|
148
|
+
* </TooltipTrigger>
|
|
149
|
+
* <TooltipContent side="top" align="start">
|
|
150
|
+
* <p>Aligned to start</p>
|
|
151
|
+
* </TooltipContent>
|
|
152
|
+
* </Tooltip>
|
|
153
|
+
* <Tooltip>
|
|
154
|
+
* <TooltipTrigger asChild>
|
|
155
|
+
* <Button variant="outline">Top Center</Button>
|
|
156
|
+
* </TooltipTrigger>
|
|
157
|
+
* <TooltipContent side="top" align="center">
|
|
158
|
+
* <p>Aligned to center</p>
|
|
159
|
+
* </TooltipContent>
|
|
160
|
+
* </Tooltip>
|
|
161
|
+
* <Tooltip>
|
|
162
|
+
* <TooltipTrigger asChild>
|
|
163
|
+
* <Button variant="outline">Top End</Button>
|
|
164
|
+
* </TooltipTrigger>
|
|
165
|
+
* <TooltipContent side="top" align="end">
|
|
166
|
+
* <p>Aligned to end</p>
|
|
167
|
+
* </TooltipContent>
|
|
168
|
+
* </Tooltip>
|
|
169
|
+
* </div>
|
|
170
|
+
* <div class="flex gap-4">
|
|
171
|
+
* <Tooltip>
|
|
172
|
+
* <TooltipTrigger asChild>
|
|
173
|
+
* <Button variant="outline">Bottom Start</Button>
|
|
174
|
+
* </TooltipTrigger>
|
|
175
|
+
* <TooltipContent side="bottom" align="start">
|
|
176
|
+
* <p>Aligned to start</p>
|
|
177
|
+
* </TooltipContent>
|
|
178
|
+
* </Tooltip>
|
|
179
|
+
* <Tooltip>
|
|
180
|
+
* <TooltipTrigger asChild>
|
|
181
|
+
* <Button variant="outline">Bottom Center</Button>
|
|
182
|
+
* </TooltipTrigger>
|
|
183
|
+
* <TooltipContent side="bottom" align="center">
|
|
184
|
+
* <p>Aligned to center</p>
|
|
185
|
+
* </TooltipContent>
|
|
186
|
+
* </Tooltip>
|
|
187
|
+
* <Tooltip>
|
|
188
|
+
* <TooltipTrigger asChild>
|
|
189
|
+
* <Button variant="outline">Bottom End</Button>
|
|
190
|
+
* </TooltipTrigger>
|
|
191
|
+
* <TooltipContent side="bottom" align="end">
|
|
192
|
+
* <p>Aligned to end</p>
|
|
193
|
+
* </TooltipContent>
|
|
194
|
+
* </Tooltip>
|
|
195
|
+
* </div>
|
|
196
|
+
* </div>
|
|
197
|
+
*
|
|
198
|
+
* ### Positioning Options
|
|
199
|
+
*
|
|
200
|
+
* Use `TooltipContent` props to configure placement:
|
|
201
|
+
*
|
|
202
|
+
* <div class="flex gap-3">
|
|
203
|
+
* <Tooltip>
|
|
204
|
+
* <TooltipTrigger asChild>
|
|
205
|
+
* <Button variant="outline">Offset</Button>
|
|
206
|
+
* </TooltipTrigger>
|
|
207
|
+
* <TooltipContent sideOffset={8}>
|
|
208
|
+
* <p>More distance from trigger</p>
|
|
209
|
+
* </TooltipContent>
|
|
210
|
+
* </Tooltip>
|
|
211
|
+
* <Tooltip>
|
|
212
|
+
* <TooltipTrigger asChild>
|
|
213
|
+
* <Button variant="outline">Align offset</Button>
|
|
214
|
+
* </TooltipTrigger>
|
|
215
|
+
* <TooltipContent side="bottom" align="start" alignOffset={12}>
|
|
216
|
+
* <p>Shifted on alignment axis</p>
|
|
217
|
+
* </TooltipContent>
|
|
218
|
+
* </Tooltip>
|
|
219
|
+
* </div>
|
|
220
|
+
*
|
|
221
|
+
* ### Disabled
|
|
222
|
+
*
|
|
223
|
+
* <Tooltip>
|
|
224
|
+
* <TooltipTrigger asChild>
|
|
225
|
+
* <Button variant="outline" disabled>Disabled</Button>
|
|
226
|
+
* </TooltipTrigger>
|
|
227
|
+
* <TooltipContent>
|
|
228
|
+
* <p>This feature is currently unavailable</p>
|
|
229
|
+
* </TooltipContent>
|
|
230
|
+
* </Tooltip>
|
|
231
|
+
*
|
|
232
|
+
* @api
|
|
233
|
+
*
|
|
234
|
+
* ### Events
|
|
235
|
+
*
|
|
236
|
+
* The tooltip emits custom events that you can listen to:
|
|
237
|
+
*
|
|
238
|
+
* | Event | Detail | Description |
|
|
239
|
+
* |-------|--------|-------------|
|
|
240
|
+
* | `tooltip:change` | `{ open: boolean, trigger: HTMLElement, content: HTMLElement, reason: string }` | Fired when visibility changes |
|
|
241
|
+
*
|
|
242
|
+
* ```astro nocollapse
|
|
243
|
+
* <Tooltip id="my-tooltip">
|
|
244
|
+
* <TooltipTrigger asChild>
|
|
245
|
+
* <Button variant="outline">Hover me</Button>
|
|
246
|
+
* </TooltipTrigger>
|
|
247
|
+
* <TooltipContent>
|
|
248
|
+
* <p>Tooltip content</p>
|
|
249
|
+
* </TooltipContent>
|
|
250
|
+
* </Tooltip>
|
|
251
|
+
* ```
|
|
252
|
+
*
|
|
253
|
+
* ```js nocollapse
|
|
254
|
+
* const tooltip = document.getElementById('my-tooltip');
|
|
255
|
+
*
|
|
256
|
+
* tooltip.addEventListener('tooltip:change', (e) => {
|
|
257
|
+
* console.log('Is open:', e.detail.open);
|
|
258
|
+
* console.log('Reason:', e.detail.reason);
|
|
259
|
+
* });
|
|
260
|
+
* ```
|
|
261
|
+
*
|
|
262
|
+
* ### Programmatic Control
|
|
263
|
+
*
|
|
264
|
+
* You can control the tooltip programmatically by dispatching a `tooltip:set` event:
|
|
265
|
+
*
|
|
266
|
+
* ```js nocollapse
|
|
267
|
+
* const tooltip = document.getElementById('my-tooltip');
|
|
268
|
+
*
|
|
269
|
+
* // Show the tooltip
|
|
270
|
+
* tooltip.dispatchEvent(new CustomEvent('tooltip:set', {
|
|
271
|
+
* detail: { open: true }
|
|
272
|
+
* }));
|
|
273
|
+
*
|
|
274
|
+
* // Hide the tooltip
|
|
275
|
+
* tooltip.dispatchEvent(new CustomEvent('tooltip:set', {
|
|
276
|
+
* detail: { open: false }
|
|
277
|
+
* }));
|
|
278
|
+
* ```
|
|
279
|
+
*
|
|
280
|
+
* The deprecated `{ value: boolean }` detail shape is still supported temporarily for compatibility, but new code should always use `{ open: boolean }`.
|
|
281
|
+
*
|
|
282
|
+
* ### Data Attributes
|
|
283
|
+
*
|
|
284
|
+
* The tooltip sets these data attributes that you can use for styling or querying state:
|
|
285
|
+
*
|
|
286
|
+
* | Attribute | Element | Description |
|
|
287
|
+
* |-----------|---------|-------------|
|
|
288
|
+
* | `data-state` | tooltip, tooltip-content | Legacy `"open"` / `"closed"` compatibility shim. Prefer `data-open` / `data-closed`. |
|
|
289
|
+
* | `data-open` / `data-closed` | tooltip, tooltip-content, tooltip-positioner, tooltip-arrow | Present while open/closed |
|
|
290
|
+
* | `data-starting-style` / `data-ending-style` | tooltip-content | Present while opening or closing |
|
|
291
|
+
* | `data-instant` | tooltip, tooltip-content, tooltip-positioner, tooltip-arrow | Interaction reason: `"delay"`, `"focus"`, or `"dismiss"` |
|
|
292
|
+
* | `data-side` | tooltip-content, tooltip-positioner, tooltip-arrow | Runtime side (`top`, `right`, `bottom`, `left`, `inline-start`, or `inline-end`) after collision handling |
|
|
293
|
+
* | `data-align` | tooltip-content, tooltip-positioner, tooltip-arrow | Runtime alignment (`start`, `center`, or `end`) |
|
|
294
|
+
* | `data-side-offset` | tooltip-content | Distance from trigger in pixels (default `4`) |
|
|
295
|
+
* | `data-align-offset` | tooltip-content | Alignment-axis offset in pixels (default `0`) |
|
|
296
|
+
*/
|
|
297
|
+
|
|
298
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
299
|
+
import type { HTMLAttributes } from "astro/types";
|
|
300
|
+
|
|
301
|
+
interface Props extends HTMLAttributes<"div"> {
|
|
302
|
+
class?: string;
|
|
303
|
+
delay?: number;
|
|
304
|
+
skipDelayDuration?: number;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
const {
|
|
308
|
+
class: className = "",
|
|
309
|
+
delay = 300,
|
|
310
|
+
skipDelayDuration = 300,
|
|
311
|
+
...rest
|
|
312
|
+
} = Astro.props as Props;
|
|
313
|
+
---
|
|
314
|
+
|
|
315
|
+
<div
|
|
316
|
+
{...rest}
|
|
317
|
+
data-slot="tooltip"
|
|
318
|
+
data-delay={delay}
|
|
319
|
+
data-skip-delay-duration={skipDelayDuration}
|
|
320
|
+
class={cn("", "inline-block", className)}
|
|
321
|
+
>
|
|
322
|
+
<slot />
|
|
323
|
+
</div>
|
|
324
|
+
|
|
325
|
+
<script>
|
|
326
|
+
import { createTooltip } from "@data-slot/tooltip";
|
|
327
|
+
|
|
328
|
+
document
|
|
329
|
+
.querySelectorAll('[data-slot="tooltip"]')
|
|
330
|
+
.forEach((el) => createTooltip(el));
|
|
331
|
+
</script>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
3
|
+
import type { HTMLAttributes } from "astro/types";
|
|
4
|
+
|
|
5
|
+
type TooltipSide =
|
|
6
|
+
| "top"
|
|
7
|
+
| "bottom"
|
|
8
|
+
| "left"
|
|
9
|
+
| "right"
|
|
10
|
+
| "inline-start"
|
|
11
|
+
| "inline-end";
|
|
12
|
+
|
|
13
|
+
interface Props extends HTMLAttributes<"div"> {
|
|
14
|
+
class?: string;
|
|
15
|
+
sideOffset?: number;
|
|
16
|
+
side?: TooltipSide;
|
|
17
|
+
align?: "start" | "center" | "end";
|
|
18
|
+
alignOffset?: number;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const {
|
|
22
|
+
class: className = "",
|
|
23
|
+
sideOffset,
|
|
24
|
+
side = "top",
|
|
25
|
+
align = "center",
|
|
26
|
+
alignOffset,
|
|
27
|
+
...rest
|
|
28
|
+
} = Astro.props as Props;
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
<div data-slot="tooltip-portal">
|
|
32
|
+
<div data-slot="tooltip-positioner" class="isolate z-50">
|
|
33
|
+
<div
|
|
34
|
+
{...rest}
|
|
35
|
+
hidden
|
|
36
|
+
data-slot="tooltip-content"
|
|
37
|
+
data-side={side}
|
|
38
|
+
data-side-offset={sideOffset}
|
|
39
|
+
data-align={align}
|
|
40
|
+
data-align-offset={alignOffset}
|
|
41
|
+
class={cn(
|
|
42
|
+
"relative pointer-events-none data-open:pointer-events-auto data-closed:pointer-events-none data-open:animate-in data-open:fade-in-0 data-open:zoom-in-95 data-[state=delayed-open]:animate-in data-[state=delayed-open]:fade-in-0 data-[state=delayed-open]:zoom-in-95 data-closed:animate-out data-closed:fade-out-0 data-closed:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 inline-flex items-center gap-1 px-2 py-1 text-xs has-data-[slot=kbd]:pr-1.5 **:data-[slot=kbd]:relative **:data-[slot=kbd]:isolate **:data-[slot=kbd]:z-50 **:data-[slot=kbd]:rounded-sm rounded-lg shadow-md data-[side=inline-start]:slide-in-from-right-2 data-[side=inline-end]:slide-in-from-left-2 z-50 w-fit max-w-xs origin-(--transform-origin) bg-foreground text-background",
|
|
43
|
+
className,
|
|
44
|
+
)}
|
|
45
|
+
>
|
|
46
|
+
<slot />
|
|
47
|
+
<div
|
|
48
|
+
data-slot="tooltip-arrow"
|
|
49
|
+
class={cn(
|
|
50
|
+
"absolute size-2.5 rotate-45 rounded-[2px] data-[side=top]:-bottom-1 data-[side=bottom]:-top-1 data-[side=left]:-right-1 data-[side=left]:translate-x-[-1.5px] data-[side=right]:-left-1 data-[side=right]:translate-x-[1.5px] data-[side=inline-start]:-right-1 data-[side=inline-start]:translate-x-[-1.5px] data-[side=inline-end]:-left-1 data-[side=inline-end]:translate-x-[1.5px] z-50 bg-foreground fill-foreground",
|
|
51
|
+
"data-[side=top]:-bottom-1",
|
|
52
|
+
"data-[side=bottom]:-top-1",
|
|
53
|
+
"data-[side=left]:-right-1",
|
|
54
|
+
"data-[side=right]:-left-1",
|
|
55
|
+
)}
|
|
56
|
+
>
|
|
57
|
+
</div>
|
|
58
|
+
</div>
|
|
59
|
+
</div>
|
|
60
|
+
</div>
|