@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,414 @@
|
|
|
1
|
+
---
|
|
2
|
+
/**
|
|
3
|
+
* @component NavigationMenu
|
|
4
|
+
* @title Navigation Menu
|
|
5
|
+
* @description A menu with dropdown content and optional viewport transitions.
|
|
6
|
+
* @figmaUrl https://www.figma.com/design/qXkzdqZ3QPQqgckU3AwIAH/ClickLearn-Lightning-Design-Library?node-id=5548-10862
|
|
7
|
+
*
|
|
8
|
+
* @preview
|
|
9
|
+
*
|
|
10
|
+
* <NavigationMenu>
|
|
11
|
+
* <NavigationMenuList>
|
|
12
|
+
* <NavigationMenuItem value="products">
|
|
13
|
+
* <NavigationMenuTrigger>Products</NavigationMenuTrigger>
|
|
14
|
+
* <NavigationMenuContent>
|
|
15
|
+
* <div class="grid grid-cols-2 gap-2 w-[380px] p-2">
|
|
16
|
+
* <NavigationMenuLink href="#">
|
|
17
|
+
* <div class="flex flex-col gap-1">
|
|
18
|
+
* <div class="text-base font-medium">Analytics</div>
|
|
19
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Real-time insights</div>
|
|
20
|
+
* </div>
|
|
21
|
+
* </NavigationMenuLink>
|
|
22
|
+
* <NavigationMenuLink href="#">
|
|
23
|
+
* <div class="flex flex-col gap-1">
|
|
24
|
+
* <div class="text-base font-medium">Automation</div>
|
|
25
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Workflow builders</div>
|
|
26
|
+
* </div>
|
|
27
|
+
* </NavigationMenuLink>
|
|
28
|
+
* <NavigationMenuLink href="#">
|
|
29
|
+
* <div class="flex flex-col gap-1">
|
|
30
|
+
* <div class="text-base font-medium">Security</div>
|
|
31
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Enterprise-grade</div>
|
|
32
|
+
* </div>
|
|
33
|
+
* </NavigationMenuLink>
|
|
34
|
+
* <NavigationMenuLink href="#">
|
|
35
|
+
* <div class="flex flex-col gap-1">
|
|
36
|
+
* <div class="text-base font-medium">Integrations</div>
|
|
37
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Connect tools</div>
|
|
38
|
+
* </div>
|
|
39
|
+
* </NavigationMenuLink>
|
|
40
|
+
* </div>
|
|
41
|
+
* </NavigationMenuContent>
|
|
42
|
+
* </NavigationMenuItem>
|
|
43
|
+
* <NavigationMenuItem value="solutions">
|
|
44
|
+
* <NavigationMenuTrigger>Solutions</NavigationMenuTrigger>
|
|
45
|
+
* <NavigationMenuContent align="center">
|
|
46
|
+
* <div class="grid grid-cols-2 gap-2 w-[380px] p-2">
|
|
47
|
+
* <NavigationMenuLink href="#">
|
|
48
|
+
* <div class="flex flex-col gap-1">
|
|
49
|
+
* <div class="text-base font-medium">Startups</div>
|
|
50
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Move fast</div>
|
|
51
|
+
* </div>
|
|
52
|
+
* </NavigationMenuLink>
|
|
53
|
+
* <NavigationMenuLink href="#">
|
|
54
|
+
* <div class="flex flex-col gap-1">
|
|
55
|
+
* <div class="text-base font-medium">Enterprise</div>
|
|
56
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Scale securely</div>
|
|
57
|
+
* </div>
|
|
58
|
+
* </NavigationMenuLink>
|
|
59
|
+
* <NavigationMenuLink href="#">
|
|
60
|
+
* <div class="flex flex-col gap-1">
|
|
61
|
+
* <div class="text-base font-medium">Agencies</div>
|
|
62
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Client delivery</div>
|
|
63
|
+
* </div>
|
|
64
|
+
* </NavigationMenuLink>
|
|
65
|
+
* <NavigationMenuLink href="#">
|
|
66
|
+
* <div class="flex flex-col gap-1">
|
|
67
|
+
* <div class="text-base font-medium">E-commerce</div>
|
|
68
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Sell online</div>
|
|
69
|
+
* </div>
|
|
70
|
+
* </NavigationMenuLink>
|
|
71
|
+
* </div>
|
|
72
|
+
* </NavigationMenuContent>
|
|
73
|
+
* </NavigationMenuItem>
|
|
74
|
+
* <NavigationMenuItem value="resources">
|
|
75
|
+
* <NavigationMenuTrigger>Resources</NavigationMenuTrigger>
|
|
76
|
+
* <NavigationMenuContent align="center">
|
|
77
|
+
* <div class="grid grid-cols-3 gap-2 w-[520px] p-2">
|
|
78
|
+
* <NavigationMenuLink href="/docs">
|
|
79
|
+
* <div class="flex flex-col gap-1">
|
|
80
|
+
* <div class="text-base font-medium">Docs</div>
|
|
81
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Get started</div>
|
|
82
|
+
* </div>
|
|
83
|
+
* </NavigationMenuLink>
|
|
84
|
+
* <NavigationMenuLink href="#">
|
|
85
|
+
* <div class="flex flex-col gap-1">
|
|
86
|
+
* <div class="text-base font-medium">Blog</div>
|
|
87
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Latest updates</div>
|
|
88
|
+
* </div>
|
|
89
|
+
* </NavigationMenuLink>
|
|
90
|
+
* <NavigationMenuLink href="#">
|
|
91
|
+
* <div class="flex flex-col gap-1">
|
|
92
|
+
* <div class="text-base font-medium">Support</div>
|
|
93
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Get help</div>
|
|
94
|
+
* </div>
|
|
95
|
+
* </NavigationMenuLink>
|
|
96
|
+
* <NavigationMenuLink href="#">
|
|
97
|
+
* <div class="flex flex-col gap-1">
|
|
98
|
+
* <div class="text-base font-medium">Events</div>
|
|
99
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Upcoming webinars</div>
|
|
100
|
+
* </div>
|
|
101
|
+
* </NavigationMenuLink>
|
|
102
|
+
* <NavigationMenuLink href="#">
|
|
103
|
+
* <div class="flex flex-col gap-1">
|
|
104
|
+
* <div class="text-base font-medium">Guides</div>
|
|
105
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Best practices</div>
|
|
106
|
+
* </div>
|
|
107
|
+
* </NavigationMenuLink>
|
|
108
|
+
* <NavigationMenuLink href="#">
|
|
109
|
+
* <div class="flex flex-col gap-1">
|
|
110
|
+
* <div class="text-base font-medium">Contact</div>
|
|
111
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Talk to us</div>
|
|
112
|
+
* </div>
|
|
113
|
+
* </NavigationMenuLink>
|
|
114
|
+
* </div>
|
|
115
|
+
* </NavigationMenuContent>
|
|
116
|
+
* </NavigationMenuItem>
|
|
117
|
+
* <NavigationMenuItem value="company">
|
|
118
|
+
* <NavigationMenuTrigger>Company</NavigationMenuTrigger>
|
|
119
|
+
* <NavigationMenuContent align="end">
|
|
120
|
+
* <div class="w-[180px] p-2">
|
|
121
|
+
* <NavigationMenuLink href="#">
|
|
122
|
+
* <div class="flex flex-col gap-1">
|
|
123
|
+
* <div class="text-base font-medium">About</div>
|
|
124
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Our story</div>
|
|
125
|
+
* </div>
|
|
126
|
+
* </NavigationMenuLink>
|
|
127
|
+
* <NavigationMenuLink href="#">
|
|
128
|
+
* <div class="flex flex-col gap-1">
|
|
129
|
+
* <div class="text-base font-medium">Careers</div>
|
|
130
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Join the team</div>
|
|
131
|
+
* </div>
|
|
132
|
+
* </NavigationMenuLink>
|
|
133
|
+
* </div>
|
|
134
|
+
* </NavigationMenuContent>
|
|
135
|
+
* </NavigationMenuItem>
|
|
136
|
+
* <NavigationMenuIndicator />
|
|
137
|
+
* </NavigationMenuList>
|
|
138
|
+
* </NavigationMenu>
|
|
139
|
+
*
|
|
140
|
+
* @usage
|
|
141
|
+
*
|
|
142
|
+
* ```astro nocollapse
|
|
143
|
+
* ---
|
|
144
|
+
* import {
|
|
145
|
+
* NavigationMenu,
|
|
146
|
+
* NavigationMenuList,
|
|
147
|
+
* NavigationMenuItem,
|
|
148
|
+
* NavigationMenuTrigger,
|
|
149
|
+
* NavigationMenuContent,
|
|
150
|
+
* NavigationMenuLink,
|
|
151
|
+
* } from '@bejamas/ui/components/navigation-menu';
|
|
152
|
+
* ---
|
|
153
|
+
*
|
|
154
|
+
* <NavigationMenu>
|
|
155
|
+
* <NavigationMenuList>
|
|
156
|
+
* <NavigationMenuItem value="products">
|
|
157
|
+
* <NavigationMenuTrigger>Products</NavigationMenuTrigger>
|
|
158
|
+
* <NavigationMenuContent>
|
|
159
|
+
* <div class="grid grid-cols-2 gap-2 w-[380px] p-2">
|
|
160
|
+
* <NavigationMenuLink href="#">
|
|
161
|
+
* <div class="flex flex-col gap-1">
|
|
162
|
+
* <div class="text-base font-medium">Analytics</div>
|
|
163
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Real-time insights</div>
|
|
164
|
+
* </div>
|
|
165
|
+
* </NavigationMenuLink>
|
|
166
|
+
* <NavigationMenuLink href="#">
|
|
167
|
+
* <div class="flex flex-col gap-1">
|
|
168
|
+
* <div class="text-base font-medium">Automation</div>
|
|
169
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Workflow builders</div>
|
|
170
|
+
* </div>
|
|
171
|
+
* </NavigationMenuLink>
|
|
172
|
+
* </div>
|
|
173
|
+
* </NavigationMenuContent>
|
|
174
|
+
* </NavigationMenuItem>
|
|
175
|
+
* <NavigationMenuItem value="resources">
|
|
176
|
+
* <NavigationMenuTrigger>Resources</NavigationMenuTrigger>
|
|
177
|
+
* <NavigationMenuContent align="center">
|
|
178
|
+
* <div class="grid grid-cols-2 gap-2 w-[380px] p-2">
|
|
179
|
+
* <NavigationMenuLink href="/docs">
|
|
180
|
+
* <div class="flex flex-col gap-1">
|
|
181
|
+
* <div class="text-base font-medium">Docs</div>
|
|
182
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Get started</div>
|
|
183
|
+
* </div>
|
|
184
|
+
* </NavigationMenuLink>
|
|
185
|
+
* <NavigationMenuLink href="#">
|
|
186
|
+
* <div class="flex flex-col gap-1">
|
|
187
|
+
* <div class="text-base font-medium">Support</div>
|
|
188
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Get help</div>
|
|
189
|
+
* </div>
|
|
190
|
+
* </NavigationMenuLink>
|
|
191
|
+
* </div>
|
|
192
|
+
* </NavigationMenuContent>
|
|
193
|
+
* </NavigationMenuItem>
|
|
194
|
+
* <NavigationMenuIndicator />
|
|
195
|
+
* </NavigationMenuList>
|
|
196
|
+
* </NavigationMenu>
|
|
197
|
+
* ```
|
|
198
|
+
*
|
|
199
|
+
* @api
|
|
200
|
+
*
|
|
201
|
+
* ### NavigationMenu Props
|
|
202
|
+
*
|
|
203
|
+
* | Prop | Type | Default | Description |
|
|
204
|
+
* |------|------|---------|-------------|
|
|
205
|
+
* | `align` | `"start" \| "center" \| "end"` | `"start"` | Viewport alignment relative to the trigger row |
|
|
206
|
+
* | `viewport` | `boolean` | `true` | Enable animated viewport container for content |
|
|
207
|
+
* | `delayOpen` | `number` | `0` | Delay in ms before opening menu |
|
|
208
|
+
* | `delayClose` | `number` | `0` | Delay in ms before closing menu |
|
|
209
|
+
* | `openOnFocus` | `boolean` | `false` | Open menu on keyboard focus |
|
|
210
|
+
*
|
|
211
|
+
* ### NavigationMenuItem Props
|
|
212
|
+
*
|
|
213
|
+
* | Prop | Type | Default | Description |
|
|
214
|
+
* |------|------|---------|-------------|
|
|
215
|
+
* | `value` | `string` | — | Unique identifier for the item |
|
|
216
|
+
* | `align` | `"start" \| "center" \| "end"` | `"start"` | Content alignment relative to trigger |
|
|
217
|
+
*
|
|
218
|
+
* ### Events
|
|
219
|
+
*
|
|
220
|
+
* | Event | Detail | Description |
|
|
221
|
+
* |-------|--------|-------------|
|
|
222
|
+
* | `navigation-menu:change` | `{ value: string \| null }` | Fired when active item changes |
|
|
223
|
+
*
|
|
224
|
+
* ### Programmatic Control
|
|
225
|
+
*
|
|
226
|
+
* ```js nocollapse
|
|
227
|
+
* // Open a specific item
|
|
228
|
+
* element.dispatchEvent(
|
|
229
|
+
* new CustomEvent("navigation-menu:set", { detail: { value: "products" } })
|
|
230
|
+
* );
|
|
231
|
+
*
|
|
232
|
+
* // Close the menu
|
|
233
|
+
* element.dispatchEvent(
|
|
234
|
+
* new CustomEvent("navigation-menu:set", { detail: { value: null } })
|
|
235
|
+
* );
|
|
236
|
+
* ```
|
|
237
|
+
*
|
|
238
|
+
* @examples
|
|
239
|
+
*
|
|
240
|
+
* ### With Icons
|
|
241
|
+
*
|
|
242
|
+
* Links with Lucide icons for visual enhancement.
|
|
243
|
+
*
|
|
244
|
+
* <NavigationMenu>
|
|
245
|
+
* <NavigationMenuList>
|
|
246
|
+
* <NavigationMenuItem value="features">
|
|
247
|
+
* <NavigationMenuTrigger>Features</NavigationMenuTrigger>
|
|
248
|
+
* <NavigationMenuContent>
|
|
249
|
+
* <div class="grid gap-2 w-[320px] p-2">
|
|
250
|
+
* <NavigationMenuLink href="#">
|
|
251
|
+
* <ChartBarIcon class="size-5 mt-1 text-muted-foreground" />
|
|
252
|
+
* <div class="flex flex-col gap-1">
|
|
253
|
+
* <div class="text-base font-medium">Analytics</div>
|
|
254
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Track your metrics</div>
|
|
255
|
+
* </div>
|
|
256
|
+
* </NavigationMenuLink>
|
|
257
|
+
* <NavigationMenuLink href="#">
|
|
258
|
+
* <ZapIcon class="size-5 mt-1 text-muted-foreground" />
|
|
259
|
+
* <div class="flex flex-col gap-1">
|
|
260
|
+
* <div class="text-base font-medium">Automation</div>
|
|
261
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Streamline workflows</div>
|
|
262
|
+
* </div>
|
|
263
|
+
* </NavigationMenuLink>
|
|
264
|
+
* <NavigationMenuLink href="#">
|
|
265
|
+
* <ShieldIcon class="size-5 mt-1 text-muted-foreground" />
|
|
266
|
+
* <div class="flex flex-col gap-1">
|
|
267
|
+
* <div class="text-base font-medium">Security</div>
|
|
268
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Enterprise-grade protection</div>
|
|
269
|
+
* </div>
|
|
270
|
+
* </NavigationMenuLink>
|
|
271
|
+
* </div>
|
|
272
|
+
* </NavigationMenuContent>
|
|
273
|
+
* </NavigationMenuItem>
|
|
274
|
+
* <NavigationMenuIndicator />
|
|
275
|
+
* </NavigationMenuList>
|
|
276
|
+
* </NavigationMenu>
|
|
277
|
+
*
|
|
278
|
+
* ### Featured Card
|
|
279
|
+
*
|
|
280
|
+
* Hero-style layout with a featured item alongside regular links.
|
|
281
|
+
*
|
|
282
|
+
* <NavigationMenu>
|
|
283
|
+
* <NavigationMenuList>
|
|
284
|
+
* <NavigationMenuItem value="getting-started">
|
|
285
|
+
* <NavigationMenuTrigger>Getting Started</NavigationMenuTrigger>
|
|
286
|
+
* <NavigationMenuContent>
|
|
287
|
+
* <div class="grid grid-cols-[1fr_200px] gap-2 w-[480px] p-2">
|
|
288
|
+
* <div class="row-span-3">
|
|
289
|
+
* <NavigationMenuLink href="#" class="flex h-full flex-col items-start rounded-lg bg-accent p-4 no-underline">
|
|
290
|
+
* <div class="mb-2 text-base font-medium">Introduction</div>
|
|
291
|
+
* <p class="text-sm font-medium text-muted-foreground">Learn the basics and get up to speed quickly with our comprehensive guides.</p>
|
|
292
|
+
* </NavigationMenuLink>
|
|
293
|
+
* </div>
|
|
294
|
+
* <NavigationMenuLink href="#">
|
|
295
|
+
* <div class="flex flex-col gap-1">
|
|
296
|
+
* <div class="text-base font-medium">Installation</div>
|
|
297
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Step-by-step setup</div>
|
|
298
|
+
* </div>
|
|
299
|
+
* </NavigationMenuLink>
|
|
300
|
+
* <NavigationMenuLink href="#">
|
|
301
|
+
* <div class="flex flex-col gap-1">
|
|
302
|
+
* <div class="text-base font-medium">Configuration</div>
|
|
303
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Customize settings</div>
|
|
304
|
+
* </div>
|
|
305
|
+
* </NavigationMenuLink>
|
|
306
|
+
* <NavigationMenuLink href="#">
|
|
307
|
+
* <div class="flex flex-col gap-1">
|
|
308
|
+
* <div class="text-base font-medium">Examples</div>
|
|
309
|
+
* <div class="line-clamp-2 font-medium text-muted-foreground">Code samples</div>
|
|
310
|
+
* </div>
|
|
311
|
+
* </NavigationMenuLink>
|
|
312
|
+
* </div>
|
|
313
|
+
* </NavigationMenuContent>
|
|
314
|
+
* </NavigationMenuItem>
|
|
315
|
+
* <NavigationMenuIndicator />
|
|
316
|
+
* </NavigationMenuList>
|
|
317
|
+
* </NavigationMenu>
|
|
318
|
+
*
|
|
319
|
+
* ### With Simple Links
|
|
320
|
+
*
|
|
321
|
+
* Use `navigationMenuTriggerStyle()` to style regular links to match triggers.
|
|
322
|
+
*
|
|
323
|
+
* <NavigationMenu>
|
|
324
|
+
* <NavigationMenuList>
|
|
325
|
+
* <NavigationMenuItem value="products">
|
|
326
|
+
* <NavigationMenuTrigger>Products</NavigationMenuTrigger>
|
|
327
|
+
* <NavigationMenuContent>
|
|
328
|
+
* <div class="w-[200px] p-2">
|
|
329
|
+
* <NavigationMenuLink href="#">Product One</NavigationMenuLink>
|
|
330
|
+
* <NavigationMenuLink href="#">Product Two</NavigationMenuLink>
|
|
331
|
+
* </div>
|
|
332
|
+
* </NavigationMenuContent>
|
|
333
|
+
* </NavigationMenuItem>
|
|
334
|
+
* <NavigationMenuItem>
|
|
335
|
+
* <NavigationMenuLink href="#" class={navigationMenuTriggerStyle()}>
|
|
336
|
+
* Pricing
|
|
337
|
+
* </NavigationMenuLink>
|
|
338
|
+
* </NavigationMenuItem>
|
|
339
|
+
* <NavigationMenuItem>
|
|
340
|
+
* <NavigationMenuLink href="/docs" class={navigationMenuTriggerStyle()}>
|
|
341
|
+
* Docs
|
|
342
|
+
* </NavigationMenuLink>
|
|
343
|
+
* </NavigationMenuItem>
|
|
344
|
+
* <NavigationMenuIndicator />
|
|
345
|
+
* </NavigationMenuList>
|
|
346
|
+
* </NavigationMenu>
|
|
347
|
+
*
|
|
348
|
+
* ### Without Viewport
|
|
349
|
+
*
|
|
350
|
+
* Set `viewport={false}` to render content directly without the animated viewport container.
|
|
351
|
+
*
|
|
352
|
+
* <NavigationMenu viewport={false}>
|
|
353
|
+
* <NavigationMenuList>
|
|
354
|
+
* <NavigationMenuItem value="menu">
|
|
355
|
+
* <NavigationMenuTrigger>Menu</NavigationMenuTrigger>
|
|
356
|
+
* <NavigationMenuContent>
|
|
357
|
+
* <div class="w-[200px] p-2 rounded-md border bg-popover shadow-md">
|
|
358
|
+
* <NavigationMenuLink href="#">Option One</NavigationMenuLink>
|
|
359
|
+
* <NavigationMenuLink href="#">Option Two</NavigationMenuLink>
|
|
360
|
+
* </div>
|
|
361
|
+
* </NavigationMenuContent>
|
|
362
|
+
* </NavigationMenuItem>
|
|
363
|
+
* </NavigationMenuList>
|
|
364
|
+
* </NavigationMenu>
|
|
365
|
+
*/
|
|
366
|
+
import type { HTMLAttributes } from "astro/types";
|
|
367
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
368
|
+
import NavigationMenuPositioner from "./NavigationMenuPositioner.astro";
|
|
369
|
+
|
|
370
|
+
interface Props extends HTMLAttributes<"nav"> {
|
|
371
|
+
class?: string;
|
|
372
|
+
align?: "start" | "center" | "end";
|
|
373
|
+
viewport?: boolean;
|
|
374
|
+
delayOpen?: number;
|
|
375
|
+
delayClose?: number;
|
|
376
|
+
openOnFocus?: boolean;
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const {
|
|
380
|
+
class: className = "",
|
|
381
|
+
align = "start",
|
|
382
|
+
viewport = true,
|
|
383
|
+
delayOpen = 0,
|
|
384
|
+
delayClose = 0,
|
|
385
|
+
openOnFocus,
|
|
386
|
+
...rest
|
|
387
|
+
} = Astro.props as Props;
|
|
388
|
+
---
|
|
389
|
+
|
|
390
|
+
<nav
|
|
391
|
+
{...rest}
|
|
392
|
+
data-slot="navigation-menu"
|
|
393
|
+
data-viewport={viewport}
|
|
394
|
+
data-delay-open={delayOpen}
|
|
395
|
+
data-delay-close={delayClose}
|
|
396
|
+
data-open-on-focus={openOnFocus}
|
|
397
|
+
class={cn(
|
|
398
|
+
"max-w-max group/navigation-menu relative flex flex-1 items-center justify-center",
|
|
399
|
+
className,
|
|
400
|
+
)}
|
|
401
|
+
>
|
|
402
|
+
<slot />
|
|
403
|
+
{viewport && <NavigationMenuPositioner align={align} />}
|
|
404
|
+
</nav>
|
|
405
|
+
|
|
406
|
+
<script>
|
|
407
|
+
import { createNavigationMenu } from "@data-slot/navigation-menu";
|
|
408
|
+
|
|
409
|
+
document
|
|
410
|
+
.querySelectorAll<HTMLElement>('[data-slot="navigation-menu"]')
|
|
411
|
+
.forEach((el) => {
|
|
412
|
+
createNavigationMenu(el);
|
|
413
|
+
});
|
|
414
|
+
</script>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"div"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
align?: "start" | "center" | "end";
|
|
8
|
+
alignOffset?: number;
|
|
9
|
+
side?: "top" | "bottom";
|
|
10
|
+
sideOffset?: number;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const {
|
|
14
|
+
class: className = "",
|
|
15
|
+
align,
|
|
16
|
+
alignOffset,
|
|
17
|
+
side,
|
|
18
|
+
sideOffset = 6,
|
|
19
|
+
...rest
|
|
20
|
+
} = Astro.props as Props;
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
<div
|
|
24
|
+
{...rest}
|
|
25
|
+
data-slot="navigation-menu-content"
|
|
26
|
+
data-align={align}
|
|
27
|
+
data-align-offset={alignOffset}
|
|
28
|
+
data-side={side}
|
|
29
|
+
data-side-offset={sideOffset}
|
|
30
|
+
hidden
|
|
31
|
+
class={cn(
|
|
32
|
+
"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-open:animate-in group-data-[viewport=false]/navigation-menu:data-closed:animate-out group-data-[viewport=false]/navigation-menu:data-closed:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-open:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-open:fade-in-0 group-data-[viewport=false]/navigation-menu:data-closed:fade-out-0 group-data-[viewport=false]/navigation-menu:border-border p-2 ease-[cubic-bezier(0.22,1,0.36,1)] group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:shadow-[0px_1px_1px_0px_rgba(5,23,41,0.06)] group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:duration-300 data-[ending-style]:data-[activation-direction=left]:translate-x-[50%] data-[ending-style]:data-[activation-direction=right]:translate-x-[-50%] data-[starting-style]:data-[activation-direction=left]:translate-x-[-50%] data-[starting-style]:data-[activation-direction=right]:translate-x-[50%] h-full w-auto transition-[opacity,transform,translate] duration-200 ease data-[ending-style]:opacity-0 data-[starting-style]:opacity-0 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none",
|
|
33
|
+
className,
|
|
34
|
+
)}
|
|
35
|
+
>
|
|
36
|
+
<slot />
|
|
37
|
+
</div>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"div"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const { class: className = "", ...rest } = Astro.props as Props;
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<div
|
|
13
|
+
{...rest}
|
|
14
|
+
data-slot="navigation-menu-indicator"
|
|
15
|
+
class={cn(
|
|
16
|
+
"rounded-md data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in absolute left-0 top-0 z-0 pointer-events-none opacity-0 transition-[translate,width,height,opacity] duration-150 ease data-instant:transition-none data-[state=visible]:opacity-100",
|
|
17
|
+
"translate-x-(--indicator-left,0px) translate-y-(--indicator-top,0px)",
|
|
18
|
+
"w-(--indicator-width,0) h-(--indicator-height,0)",
|
|
19
|
+
className,
|
|
20
|
+
)}
|
|
21
|
+
>
|
|
22
|
+
<div class="bg-muted/60 ring-border/40 ring-1 absolute inset-0 rounded-[inherit]"></div>
|
|
23
|
+
<div class="hidden bg-border rounded-tl-sm shadow-md absolute top-full left-1/2 h-2 w-2 -translate-x-1/2 -translate-y-[40%] rotate-45"></div>
|
|
24
|
+
</div>
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"li"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
value?: string;
|
|
8
|
+
align?: "start" | "center" | "end";
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const { class: className = "", value, align, ...rest } = Astro.props as Props;
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
<li
|
|
15
|
+
{...rest}
|
|
16
|
+
data-slot="navigation-menu-item"
|
|
17
|
+
data-value={value}
|
|
18
|
+
data-align={align}
|
|
19
|
+
class={cn("relative z-10", className)}
|
|
20
|
+
>
|
|
21
|
+
<slot />
|
|
22
|
+
</li>
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"a"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const { class: className = "", ...rest } = Astro.props as Props;
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<a
|
|
13
|
+
{...rest}
|
|
14
|
+
data-slot="navigation-menu-link"
|
|
15
|
+
class={cn("data-[active=true]:focus:bg-muted data-[active=true]:hover:bg-muted data-[active=true]:bg-muted/50 focus-visible:ring-ring/50 hover:bg-muted focus:bg-muted flex items-start gap-4 rounded-lg p-3 text-sm transition-all outline-none focus-visible:ring-3 focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4", className)}
|
|
16
|
+
>
|
|
17
|
+
<slot />
|
|
18
|
+
</a>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"ul"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const { class: className = "", ...rest } = Astro.props as Props;
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<ul
|
|
13
|
+
{...rest}
|
|
14
|
+
data-slot="navigation-menu-list"
|
|
15
|
+
class={cn(
|
|
16
|
+
"gap-0 group flex flex-1 list-none items-center justify-center relative",
|
|
17
|
+
className,
|
|
18
|
+
)}
|
|
19
|
+
>
|
|
20
|
+
<slot />
|
|
21
|
+
</ul>
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
import NavigationMenuViewport from "./NavigationMenuViewport.astro";
|
|
5
|
+
|
|
6
|
+
interface Props extends HTMLAttributes<"div"> {
|
|
7
|
+
class?: string;
|
|
8
|
+
align?: "start" | "center" | "end";
|
|
9
|
+
alignOffset?: number;
|
|
10
|
+
side?: "top" | "bottom";
|
|
11
|
+
sideOffset?: number;
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
const {
|
|
15
|
+
class: className = "",
|
|
16
|
+
side = "bottom",
|
|
17
|
+
sideOffset = 8,
|
|
18
|
+
align = "start",
|
|
19
|
+
alignOffset = 0,
|
|
20
|
+
...rest
|
|
21
|
+
} = Astro.props as Props;
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
<div data-slot="navigation-menu-portal">
|
|
25
|
+
<div
|
|
26
|
+
{...rest}
|
|
27
|
+
data-slot="navigation-menu-positioner"
|
|
28
|
+
data-side={side}
|
|
29
|
+
data-side-offset={sideOffset}
|
|
30
|
+
data-align={align}
|
|
31
|
+
data-align-offset={alignOffset}
|
|
32
|
+
class={cn(
|
|
33
|
+
"transition-[top,left,right,bottom] duration-300 ease-[cubic-bezier(0.22,1,0.36,1)] data-[side=bottom]:before:top-[-10px] data-[side=bottom]:before:right-0 data-[side=bottom]:before:left-0 isolate z-50 h-(--positioner-height) w-(--positioner-width) max-w-(--available-width) duration-[0.35s] data-instant:transition-none",
|
|
34
|
+
className,
|
|
35
|
+
)}
|
|
36
|
+
>
|
|
37
|
+
<div
|
|
38
|
+
data-slot="navigation-menu-popup"
|
|
39
|
+
class="bg-popover text-popover-foreground border border-border rounded-lg shadow-[0px_1px_1px_0px_rgba(5,23,41,0.06)] transition-all ease-[cubic-bezier(0.22,1,0.36,1)] outline-none data-ending-style:scale-90 data-ending-style:opacity-0 data-ending-style:duration-150 data-starting-style:scale-90 data-starting-style:opacity-0 data-[ending-style]:easing-[ease] xs:w-(--popup-width) relative h-(--popup-height) w-(--popup-width) origin-(--transform-origin) transition-[opacity,transform,width,height,scale,translate] duration-[0.35s]"
|
|
40
|
+
>
|
|
41
|
+
<NavigationMenuViewport />
|
|
42
|
+
</div>
|
|
43
|
+
</div>
|
|
44
|
+
</div>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
5
|
+
|
|
6
|
+
interface Props extends HTMLAttributes<"button"> {
|
|
7
|
+
class?: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export const navigationMenuTriggerStyle = cva(
|
|
11
|
+
"bg-background text-foreground hover:bg-muted focus:bg-muted data-open:hover:bg-muted data-open:focus:bg-muted data-open:bg-muted/50 focus-visible:ring-ring/50 data-popup-open:bg-muted/50 data-popup-open:hover:bg-muted rounded-lg gap-1.5 px-4 py-2.5 text-base font-medium transition-all focus-visible:ring-3 focus-visible:outline-1 disabled:opacity-50 group/navigation-menu-trigger inline-flex h-11 w-max items-center justify-center outline-none disabled:pointer-events-none",
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
const {
|
|
15
|
+
class: className = "",
|
|
16
|
+
type = "button",
|
|
17
|
+
...rest
|
|
18
|
+
} = Astro.props as Props;
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
<button
|
|
22
|
+
{...rest}
|
|
23
|
+
data-slot="navigation-menu-trigger"
|
|
24
|
+
type={type}
|
|
25
|
+
class={cn(navigationMenuTriggerStyle(), "group", className)}
|
|
26
|
+
>
|
|
27
|
+
<slot />
|
|
28
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" class="relative top-px size-3 transition duration-300 group-data-open/navigation-menu-trigger:rotate-180 group-data-popup-open/navigation-menu-trigger:rotate-180"
|
|
29
|
+
aria-hidden="true"><path fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="m6 9l6 6l6-6"/></svg>
|
|
30
|
+
</button>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
---
|
|
2
|
+
import type { HTMLAttributes } from "astro/types";
|
|
3
|
+
import { cn } from "@cl-light-ds/ui/lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props extends HTMLAttributes<"div"> {
|
|
6
|
+
class?: string;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const { class: className = "", ...rest } = Astro.props as Props;
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
<div
|
|
13
|
+
{...rest}
|
|
14
|
+
data-slot="navigation-menu-viewport"
|
|
15
|
+
class={cn(
|
|
16
|
+
"bg-popover text-popover-foreground data-open:animate-in data-closed:animate-out data-closed:zoom-out-90 data-open:zoom-in-90 border border-border rounded-lg shadow-[0px_1px_1px_0px_rgba(5,23,41,0.06)] duration-100 relative size-full overflow-hidden",
|
|
17
|
+
className,
|
|
18
|
+
)}
|
|
19
|
+
></div>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { default as NavigationMenu } from "./NavigationMenu.astro";
|
|
2
|
+
export { default as NavigationMenuList } from "./NavigationMenuList.astro";
|
|
3
|
+
export { default as NavigationMenuItem } from "./NavigationMenuItem.astro";
|
|
4
|
+
export { default as NavigationMenuTrigger } from "./NavigationMenuTrigger.astro";
|
|
5
|
+
export { default as NavigationMenuContent } from "./NavigationMenuContent.astro";
|
|
6
|
+
export { default as NavigationMenuPositioner } from "./NavigationMenuPositioner.astro";
|
|
7
|
+
export { default as NavigationMenuViewport } from "./NavigationMenuViewport.astro";
|
|
8
|
+
export { default as NavigationMenuLink } from "./NavigationMenuLink.astro";
|
|
9
|
+
export { default as NavigationMenuIndicator } from "./NavigationMenuIndicator.astro";
|
|
10
|
+
export { navigationMenuTriggerStyle } from "./NavigationMenuTrigger.astro";
|