@matta-trade/ui 0.0.0-stage → 0.2.2
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/DESIGN.md +217 -0
- package/README.md +91 -2
- package/dist/alert/Alert.vue.d.ts +19 -0
- package/dist/alert/AlertDescription.vue.d.ts +17 -0
- package/dist/alert/AlertTitle.vue.d.ts +17 -0
- package/dist/alert/index.d.ts +8 -0
- package/dist/alert/index.js +62 -0
- package/dist/alert-dialog/AlertDialog.vue.d.ts +18 -0
- package/dist/alert-dialog/AlertDialogAction.vue.d.ts +18 -0
- package/dist/alert-dialog/AlertDialogCancel.vue.d.ts +18 -0
- package/dist/alert-dialog/AlertDialogContent.vue.d.ts +32 -0
- package/dist/alert-dialog/AlertDialogDescription.vue.d.ts +18 -0
- package/dist/alert-dialog/AlertDialogFooter.vue.d.ts +17 -0
- package/dist/alert-dialog/AlertDialogHeader.vue.d.ts +17 -0
- package/dist/alert-dialog/AlertDialogTitle.vue.d.ts +18 -0
- package/dist/alert-dialog/AlertDialogTrigger.vue.d.ts +14 -0
- package/dist/alert-dialog/index.d.ts +9 -0
- package/dist/alert-dialog/index.js +177 -0
- package/dist/avatar/Avatar.vue.d.ts +27 -0
- package/dist/avatar/AvatarFallback.vue.d.ts +18 -0
- package/dist/avatar/AvatarImage.vue.d.ts +14 -0
- package/dist/avatar/index.d.ts +9 -0
- package/dist/avatar/index.js +120 -0
- package/dist/avatar-colors.d.ts +51 -0
- package/dist/badge/Badge.vue.d.ts +20 -0
- package/dist/badge/index.d.ts +6 -0
- package/dist/badge/index.js +58 -0
- package/dist/breadcrumb/Breadcrumb.vue.d.ts +17 -0
- package/dist/breadcrumb/BreadcrumbEllipsis.vue.d.ts +17 -0
- package/dist/breadcrumb/BreadcrumbItem.vue.d.ts +17 -0
- package/dist/breadcrumb/BreadcrumbLink.vue.d.ts +20 -0
- package/dist/breadcrumb/BreadcrumbList.vue.d.ts +17 -0
- package/dist/breadcrumb/BreadcrumbPage.vue.d.ts +17 -0
- package/dist/breadcrumb/BreadcrumbSeparator.vue.d.ts +17 -0
- package/dist/breadcrumb/index.d.ts +7 -0
- package/dist/breadcrumb/index.js +131 -0
- package/dist/button/Button.vue.d.ts +36 -0
- package/dist/button/index.d.ts +7 -0
- package/dist/button/index.js +2 -0
- package/dist/button-group/ButtonGroup.vue.d.ts +19 -0
- package/dist/button-group/ButtonGroupSeparator.vue.d.ts +10 -0
- package/dist/button-group/ButtonGroupText.vue.d.ts +22 -0
- package/dist/button-group/index.d.ts +8 -0
- package/dist/button-group/index.js +92 -0
- package/dist/calendar/Calendar.vue.d.ts +14 -0
- package/dist/calendar/CalendarCell.vue.d.ts +18 -0
- package/dist/calendar/CalendarCellTrigger.vue.d.ts +18 -0
- package/dist/calendar/CalendarGrid.vue.d.ts +18 -0
- package/dist/calendar/CalendarGridBody.vue.d.ts +14 -0
- package/dist/calendar/CalendarGridHead.vue.d.ts +14 -0
- package/dist/calendar/CalendarGridRow.vue.d.ts +18 -0
- package/dist/calendar/CalendarHeadCell.vue.d.ts +18 -0
- package/dist/calendar/CalendarHeader.vue.d.ts +18 -0
- package/dist/calendar/CalendarHeading.vue.d.ts +19 -0
- package/dist/calendar/CalendarNextButton.vue.d.ts +18 -0
- package/dist/calendar/CalendarPrevButton.vue.d.ts +18 -0
- package/dist/calendar/index.d.ts +12 -0
- package/dist/calendar/index.js +303 -0
- package/dist/card/Card.vue.d.ts +17 -0
- package/dist/card/CardContent.vue.d.ts +17 -0
- package/dist/card/CardDescription.vue.d.ts +17 -0
- package/dist/card/CardFooter.vue.d.ts +17 -0
- package/dist/card/CardHeader.vue.d.ts +17 -0
- package/dist/card/CardTitle.vue.d.ts +17 -0
- package/dist/card/index.d.ts +6 -0
- package/dist/card/index.js +2 -0
- package/dist/chart/ChartCrosshair.vue.d.ts +13 -0
- package/dist/chart/ChartLegend.vue.d.ts +15 -0
- package/dist/chart/ChartSingleTooltip.vue.d.ts +12 -0
- package/dist/chart/ChartTooltip.vue.d.ts +11 -0
- package/dist/chart/index.d.ts +6 -0
- package/dist/chart/index.js +177 -0
- package/dist/chart/interface.d.ts +63 -0
- package/dist/checkbox/Checkbox.vue.d.ts +22 -0
- package/dist/checkbox/index.d.ts +1 -0
- package/dist/checkbox/index.js +43 -0
- package/dist/chunks/avatar-colors-CCGh54Ve.js +37 -0
- package/dist/chunks/button-DcaKfSRM.js +100 -0
- package/dist/chunks/card-B9Fm3-hL.js +85 -0
- package/dist/chunks/dialog-Df5vNbNz.js +196 -0
- package/dist/chunks/input-BgkMak31.js +44 -0
- package/dist/chunks/scroll-area-COtrGbKj.js +68 -0
- package/dist/chunks/separator-DAL7ppX1.js +31 -0
- package/dist/chunks/sheet-tX6r4wAA.js +150 -0
- package/dist/chunks/tooltip-C80qPEs9.js +102 -0
- package/dist/chunks/utils-CX-Pz5p6.js +8 -0
- package/dist/combobox/Combobox.vue.d.ts +29 -0
- package/dist/combobox/ComboboxAnchor.vue.d.ts +18 -0
- package/dist/combobox/ComboboxEmpty.vue.d.ts +18 -0
- package/dist/combobox/ComboboxGroup.vue.d.ts +19 -0
- package/dist/combobox/ComboboxInput.vue.d.ts +22 -0
- package/dist/combobox/ComboboxItem.vue.d.ts +22 -0
- package/dist/combobox/ComboboxList.vue.d.ts +32 -0
- package/dist/combobox/ComboboxSeparator.vue.d.ts +18 -0
- package/dist/combobox/ComboboxTrigger.vue.d.ts +18 -0
- package/dist/combobox/index.d.ts +10 -0
- package/dist/combobox/index.js +262 -0
- package/dist/command/Command.vue.d.ts +36 -0
- package/dist/command/CommandDialog.vue.d.ts +18 -0
- package/dist/command/CommandEmpty.vue.d.ts +18 -0
- package/dist/command/CommandGroup.vue.d.ts +19 -0
- package/dist/command/CommandInput.vue.d.ts +8 -0
- package/dist/command/CommandItem.vue.d.ts +22 -0
- package/dist/command/CommandList.vue.d.ts +18 -0
- package/dist/command/CommandSeparator.vue.d.ts +18 -0
- package/dist/command/CommandShortcut.vue.d.ts +17 -0
- package/dist/command/index.d.ts +90 -0
- package/dist/command/index.js +297 -0
- package/dist/dialog/Dialog.vue.d.ts +18 -0
- package/dist/dialog/DialogClose.vue.d.ts +14 -0
- package/dist/dialog/DialogContent.vue.d.ts +32 -0
- package/dist/dialog/DialogDescription.vue.d.ts +18 -0
- package/dist/dialog/DialogFooter.vue.d.ts +17 -0
- package/dist/dialog/DialogHeader.vue.d.ts +17 -0
- package/dist/dialog/DialogScrollContent.vue.d.ts +32 -0
- package/dist/dialog/DialogTitle.vue.d.ts +18 -0
- package/dist/dialog/DialogTrigger.vue.d.ts +14 -0
- package/dist/dialog/index.d.ts +9 -0
- package/dist/dialog/index.js +2 -0
- package/dist/drawer/Drawer.vue.d.ts +30 -0
- package/dist/drawer/DrawerContent.vue.d.ts +32 -0
- package/dist/drawer/DrawerDescription.vue.d.ts +18 -0
- package/dist/drawer/DrawerFooter.vue.d.ts +17 -0
- package/dist/drawer/DrawerHeader.vue.d.ts +17 -0
- package/dist/drawer/DrawerOverlay.vue.d.ts +8 -0
- package/dist/drawer/DrawerTitle.vue.d.ts +18 -0
- package/dist/drawer/index.d.ts +8 -0
- package/dist/drawer/index.js +166 -0
- package/dist/dropdown-menu/DropdownMenu.vue.d.ts +18 -0
- package/dist/dropdown-menu/DropdownMenuContent.vue.d.ts +32 -0
- package/dist/dropdown-menu/DropdownMenuItem.vue.d.ts +22 -0
- package/dist/dropdown-menu/DropdownMenuLabel.vue.d.ts +18 -0
- package/dist/dropdown-menu/DropdownMenuSeparator.vue.d.ts +8 -0
- package/dist/dropdown-menu/DropdownMenuTrigger.vue.d.ts +14 -0
- package/dist/dropdown-menu/index.d.ts +6 -0
- package/dist/dropdown-menu/index.js +149 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -0
- package/dist/input/Input.vue.d.ts +19 -0
- package/dist/input/index.d.ts +1 -0
- package/dist/input/index.js +2 -0
- package/dist/label/Label.vue.d.ts +18 -0
- package/dist/label/index.d.ts +1 -0
- package/dist/label/index.js +29 -0
- package/dist/lib/utils.d.ts +2 -0
- package/dist/popover/Popover.vue.d.ts +18 -0
- package/dist/popover/PopoverContent.vue.d.ts +35 -0
- package/dist/popover/PopoverTrigger.vue.d.ts +14 -0
- package/dist/popover/index.d.ts +3 -0
- package/dist/popover/index.js +96 -0
- package/dist/range-calendar/RangeCalendar.vue.d.ts +18 -0
- package/dist/range-calendar/RangeCalendarCell.vue.d.ts +18 -0
- package/dist/range-calendar/RangeCalendarCellTrigger.vue.d.ts +18 -0
- package/dist/range-calendar/RangeCalendarGrid.vue.d.ts +18 -0
- package/dist/range-calendar/RangeCalendarGridBody.vue.d.ts +14 -0
- package/dist/range-calendar/RangeCalendarGridHead.vue.d.ts +14 -0
- package/dist/range-calendar/RangeCalendarGridRow.vue.d.ts +18 -0
- package/dist/range-calendar/RangeCalendarHeadCell.vue.d.ts +18 -0
- package/dist/range-calendar/RangeCalendarHeader.vue.d.ts +18 -0
- package/dist/range-calendar/RangeCalendarHeading.vue.d.ts +19 -0
- package/dist/range-calendar/RangeCalendarNextButton.vue.d.ts +18 -0
- package/dist/range-calendar/RangeCalendarPrevButton.vue.d.ts +18 -0
- package/dist/range-calendar/index.d.ts +12 -0
- package/dist/range-calendar/index.js +311 -0
- package/dist/scroll-area/ScrollArea.vue.d.ts +19 -0
- package/dist/scroll-area/ScrollBar.vue.d.ts +10 -0
- package/dist/scroll-area/index.d.ts +2 -0
- package/dist/scroll-area/index.js +2 -0
- package/dist/select/Select.vue.d.ts +21 -0
- package/dist/select/SelectContent.vue.d.ts +28 -0
- package/dist/select/SelectGroup.vue.d.ts +18 -0
- package/dist/select/SelectItem.vue.d.ts +18 -0
- package/dist/select/SelectItemText.vue.d.ts +14 -0
- package/dist/select/SelectLabel.vue.d.ts +18 -0
- package/dist/select/SelectScrollDownButton.vue.d.ts +18 -0
- package/dist/select/SelectScrollUpButton.vue.d.ts +18 -0
- package/dist/select/SelectSeparator.vue.d.ts +8 -0
- package/dist/select/SelectTrigger.vue.d.ts +18 -0
- package/dist/select/SelectValue.vue.d.ts +14 -0
- package/dist/select/index.d.ts +11 -0
- package/dist/select/index.js +276 -0
- package/dist/separator/Separator.vue.d.ts +11 -0
- package/dist/separator/index.d.ts +1 -0
- package/dist/separator/index.js +2 -0
- package/dist/sheet/Sheet.vue.d.ts +18 -0
- package/dist/sheet/SheetClose.vue.d.ts +14 -0
- package/dist/sheet/SheetContent.vue.d.ts +39 -0
- package/dist/sheet/SheetDescription.vue.d.ts +18 -0
- package/dist/sheet/SheetHeader.vue.d.ts +17 -0
- package/dist/sheet/SheetTitle.vue.d.ts +18 -0
- package/dist/sheet/SheetTrigger.vue.d.ts +14 -0
- package/dist/sheet/index.d.ts +7 -0
- package/dist/sheet/index.js +2 -0
- package/dist/sidebar/Sidebar.vue.d.ts +28 -0
- package/dist/sidebar/SidebarContent.vue.d.ts +17 -0
- package/dist/sidebar/SidebarFooter.vue.d.ts +17 -0
- package/dist/sidebar/SidebarGroup.vue.d.ts +17 -0
- package/dist/sidebar/SidebarGroupAction.vue.d.ts +20 -0
- package/dist/sidebar/SidebarGroupContent.vue.d.ts +17 -0
- package/dist/sidebar/SidebarGroupLabel.vue.d.ts +20 -0
- package/dist/sidebar/SidebarHeader.vue.d.ts +17 -0
- package/dist/sidebar/SidebarInput.vue.d.ts +17 -0
- package/dist/sidebar/SidebarInset.vue.d.ts +17 -0
- package/dist/sidebar/SidebarMenu.vue.d.ts +17 -0
- package/dist/sidebar/SidebarMenuAction.vue.d.ts +21 -0
- package/dist/sidebar/SidebarMenuBadge.vue.d.ts +17 -0
- package/dist/sidebar/SidebarMenuButton.vue.d.ts +29 -0
- package/dist/sidebar/SidebarMenuItem.vue.d.ts +17 -0
- package/dist/sidebar/SidebarMenuSub.vue.d.ts +17 -0
- package/dist/sidebar/SidebarMenuSubButton.vue.d.ts +23 -0
- package/dist/sidebar/SidebarMenuSubItem.vue.d.ts +17 -0
- package/dist/sidebar/SidebarProvider.vue.d.ts +26 -0
- package/dist/sidebar/SidebarRail.vue.d.ts +7 -0
- package/dist/sidebar/SidebarSeparator.vue.d.ts +7 -0
- package/dist/sidebar/SidebarTrigger.vue.d.ts +7 -0
- package/dist/sidebar/index.d.ts +45 -0
- package/dist/sidebar/index.js +595 -0
- package/dist/sonner/Sonner.vue.d.ts +4 -0
- package/dist/sonner/index.d.ts +1 -0
- package/dist/sonner/index.js +59 -0
- package/dist/stepper/Stepper.vue.d.ts +17 -0
- package/dist/stepper/index.d.ts +1 -0
- package/dist/stepper/index.js +57 -0
- package/dist/switch/Switch.vue.d.ts +12 -0
- package/dist/switch/index.d.ts +1 -0
- package/dist/switch/index.js +46 -0
- package/dist/table/Table.vue.d.ts +17 -0
- package/dist/table/TableBody.vue.d.ts +17 -0
- package/dist/table/TableCell.vue.d.ts +17 -0
- package/dist/table/TableHead.vue.d.ts +17 -0
- package/dist/table/TableHeader.vue.d.ts +17 -0
- package/dist/table/TableRow.vue.d.ts +17 -0
- package/dist/table/index.d.ts +6 -0
- package/dist/table/index.js +84 -0
- package/dist/tabs/Tabs.vue.d.ts +19 -0
- package/dist/tabs/TabsContent.vue.d.ts +18 -0
- package/dist/tabs/TabsList.vue.d.ts +18 -0
- package/dist/tabs/TabsTrigger.vue.d.ts +18 -0
- package/dist/tabs/index.d.ts +4 -0
- package/dist/tabs/index.js +93 -0
- package/dist/tags-input/TagsInput.vue.d.ts +28 -0
- package/dist/tags-input/TagsInputInput.vue.d.ts +8 -0
- package/dist/tags-input/TagsInputItem.vue.d.ts +18 -0
- package/dist/tags-input/TagsInputItemDelete.vue.d.ts +18 -0
- package/dist/tags-input/TagsInputItemText.vue.d.ts +8 -0
- package/dist/tags-input/index.d.ts +5 -0
- package/dist/tags-input/index.js +130 -0
- package/dist/textarea/Textarea.vue.d.ts +19 -0
- package/dist/textarea/index.d.ts +1 -0
- package/dist/textarea/index.js +43 -0
- package/dist/tooltip/Tooltip.vue.d.ts +18 -0
- package/dist/tooltip/TooltipContent.vue.d.ts +26 -0
- package/dist/tooltip/TooltipProvider.vue.d.ts +14 -0
- package/dist/tooltip/TooltipRoot.vue.d.ts +18 -0
- package/dist/tooltip/TooltipTrigger.vue.d.ts +14 -0
- package/dist/tooltip/index.d.ts +4 -0
- package/dist/tooltip/index.js +2 -0
- package/package.json +89 -5
- package/src/alert/Alert.vue +17 -0
- package/src/alert/AlertDescription.vue +14 -0
- package/src/alert/AlertTitle.vue +14 -0
- package/src/alert/index.ts +29 -0
- package/src/alert-dialog/AlertDialog.vue +15 -0
- package/src/alert-dialog/AlertDialogAction.vue +18 -0
- package/src/alert-dialog/AlertDialogCancel.vue +18 -0
- package/src/alert-dialog/AlertDialogContent.vue +33 -0
- package/src/alert-dialog/AlertDialogDescription.vue +17 -0
- package/src/alert-dialog/AlertDialogFooter.vue +14 -0
- package/src/alert-dialog/AlertDialogHeader.vue +14 -0
- package/src/alert-dialog/AlertDialogTitle.vue +17 -0
- package/src/alert-dialog/AlertDialogTrigger.vue +12 -0
- package/src/alert-dialog/index.ts +9 -0
- package/src/avatar/Avatar.vue +76 -0
- package/src/avatar/AvatarFallback.vue +18 -0
- package/src/avatar/AvatarImage.vue +12 -0
- package/src/avatar/index.ts +30 -0
- package/src/avatar-colors.ts +24 -0
- package/src/badge/Badge.vue +44 -0
- package/src/badge/index.ts +33 -0
- package/src/breadcrumb/Breadcrumb.vue +13 -0
- package/src/breadcrumb/BreadcrumbEllipsis.vue +18 -0
- package/src/breadcrumb/BreadcrumbItem.vue +14 -0
- package/src/breadcrumb/BreadcrumbLink.vue +16 -0
- package/src/breadcrumb/BreadcrumbList.vue +14 -0
- package/src/breadcrumb/BreadcrumbPage.vue +14 -0
- package/src/breadcrumb/BreadcrumbSeparator.vue +17 -0
- package/src/breadcrumb/index.ts +7 -0
- package/src/button/Button.vue +64 -0
- package/src/button/index.ts +40 -0
- package/src/button-group/ButtonGroup.vue +22 -0
- package/src/button-group/ButtonGroupSeparator.vue +21 -0
- package/src/button-group/ButtonGroupText.vue +34 -0
- package/src/button-group/index.ts +23 -0
- package/src/calendar/Calendar.vue +57 -0
- package/src/calendar/CalendarCell.vue +27 -0
- package/src/calendar/CalendarCellTrigger.vue +38 -0
- package/src/calendar/CalendarGrid.vue +19 -0
- package/src/calendar/CalendarGridBody.vue +12 -0
- package/src/calendar/CalendarGridHead.vue +12 -0
- package/src/calendar/CalendarGridRow.vue +19 -0
- package/src/calendar/CalendarHeadCell.vue +19 -0
- package/src/calendar/CalendarHeader.vue +19 -0
- package/src/calendar/CalendarHeading.vue +25 -0
- package/src/calendar/CalendarNextButton.vue +26 -0
- package/src/calendar/CalendarPrevButton.vue +26 -0
- package/src/calendar/index.ts +12 -0
- package/src/card/Card.vue +14 -0
- package/src/card/CardContent.vue +14 -0
- package/src/card/CardDescription.vue +14 -0
- package/src/card/CardFooter.vue +14 -0
- package/src/card/CardHeader.vue +14 -0
- package/src/card/CardTitle.vue +14 -0
- package/src/card/index.ts +6 -0
- package/src/chart/ChartCrosshair.vue +47 -0
- package/src/chart/ChartLegend.vue +63 -0
- package/src/chart/ChartSingleTooltip.vue +61 -0
- package/src/chart/ChartTooltip.vue +35 -0
- package/src/chart/index.ts +18 -0
- package/src/chart/interface.ts +64 -0
- package/src/checkbox/Checkbox.vue +33 -0
- package/src/checkbox/index.ts +1 -0
- package/src/combobox/Combobox.vue +15 -0
- package/src/combobox/ComboboxAnchor.vue +19 -0
- package/src/combobox/ComboboxEmpty.vue +17 -0
- package/src/combobox/ComboboxGroup.vue +33 -0
- package/src/combobox/ComboboxInput.vue +33 -0
- package/src/combobox/ComboboxItem.vue +28 -0
- package/src/combobox/ComboboxList.vue +36 -0
- package/src/combobox/ComboboxSeparator.vue +17 -0
- package/src/combobox/ComboboxTrigger.vue +23 -0
- package/src/combobox/index.ts +11 -0
- package/src/command/Command.vue +85 -0
- package/src/command/CommandDialog.vue +23 -0
- package/src/command/CommandEmpty.vue +22 -0
- package/src/command/CommandGroup.vue +50 -0
- package/src/command/CommandInput.vue +42 -0
- package/src/command/CommandItem.vue +79 -0
- package/src/command/CommandList.vue +25 -0
- package/src/command/CommandSeparator.vue +17 -0
- package/src/command/CommandShortcut.vue +14 -0
- package/src/command/index.ts +25 -0
- package/src/dialog/Dialog.vue +15 -0
- package/src/dialog/DialogClose.vue +12 -0
- package/src/dialog/DialogContent.vue +41 -0
- package/src/dialog/DialogDescription.vue +19 -0
- package/src/dialog/DialogFooter.vue +12 -0
- package/src/dialog/DialogHeader.vue +14 -0
- package/src/dialog/DialogScrollContent.vue +49 -0
- package/src/dialog/DialogTitle.vue +19 -0
- package/src/dialog/DialogTrigger.vue +12 -0
- package/src/dialog/index.ts +9 -0
- package/src/drawer/Drawer.vue +20 -0
- package/src/drawer/DrawerContent.vue +31 -0
- package/src/drawer/DrawerDescription.vue +17 -0
- package/src/drawer/DrawerFooter.vue +14 -0
- package/src/drawer/DrawerHeader.vue +14 -0
- package/src/drawer/DrawerOverlay.vue +15 -0
- package/src/drawer/DrawerTitle.vue +17 -0
- package/src/drawer/index.ts +8 -0
- package/src/dropdown-menu/DropdownMenu.vue +26 -0
- package/src/dropdown-menu/DropdownMenuContent.vue +28 -0
- package/src/dropdown-menu/DropdownMenuItem.vue +23 -0
- package/src/dropdown-menu/DropdownMenuLabel.vue +13 -0
- package/src/dropdown-menu/DropdownMenuSeparator.vue +11 -0
- package/src/dropdown-menu/DropdownMenuTrigger.vue +11 -0
- package/src/dropdown-menu/index.ts +6 -0
- package/src/index.ts +2 -0
- package/src/input/Input.vue +43 -0
- package/src/input/index.ts +1 -0
- package/src/label/Label.vue +16 -0
- package/src/label/index.ts +1 -0
- package/src/lib/utils.ts +6 -0
- package/src/popover/Popover.vue +15 -0
- package/src/popover/PopoverContent.vue +39 -0
- package/src/popover/PopoverTrigger.vue +11 -0
- package/src/popover/index.ts +3 -0
- package/src/range-calendar/RangeCalendar.vue +57 -0
- package/src/range-calendar/RangeCalendarCell.vue +27 -0
- package/src/range-calendar/RangeCalendarCellTrigger.vue +40 -0
- package/src/range-calendar/RangeCalendarGrid.vue +19 -0
- package/src/range-calendar/RangeCalendarGridBody.vue +12 -0
- package/src/range-calendar/RangeCalendarGridHead.vue +12 -0
- package/src/range-calendar/RangeCalendarGridRow.vue +19 -0
- package/src/range-calendar/RangeCalendarHeadCell.vue +19 -0
- package/src/range-calendar/RangeCalendarHeader.vue +19 -0
- package/src/range-calendar/RangeCalendarHeading.vue +25 -0
- package/src/range-calendar/RangeCalendarNextButton.vue +26 -0
- package/src/range-calendar/RangeCalendarPrevButton.vue +26 -0
- package/src/range-calendar/index.ts +12 -0
- package/src/scroll-area/ScrollArea.vue +22 -0
- package/src/scroll-area/ScrollBar.vue +29 -0
- package/src/scroll-area/index.ts +2 -0
- package/src/select/Select.vue +15 -0
- package/src/select/SelectContent.vue +43 -0
- package/src/select/SelectGroup.vue +17 -0
- package/src/select/SelectItem.vue +36 -0
- package/src/select/SelectItemText.vue +12 -0
- package/src/select/SelectLabel.vue +14 -0
- package/src/select/SelectScrollDownButton.vue +22 -0
- package/src/select/SelectScrollUpButton.vue +22 -0
- package/src/select/SelectSeparator.vue +15 -0
- package/src/select/SelectTrigger.vue +31 -0
- package/src/select/SelectValue.vue +12 -0
- package/src/select/index.ts +11 -0
- package/src/separator/Separator.vue +21 -0
- package/src/separator/index.ts +1 -0
- package/src/sheet/Sheet.vue +15 -0
- package/src/sheet/SheetClose.vue +11 -0
- package/src/sheet/SheetContent.vue +54 -0
- package/src/sheet/SheetDescription.vue +13 -0
- package/src/sheet/SheetHeader.vue +14 -0
- package/src/sheet/SheetTitle.vue +13 -0
- package/src/sheet/SheetTrigger.vue +11 -0
- package/src/sheet/index.ts +7 -0
- package/src/sidebar/Sidebar.vue +101 -0
- package/src/sidebar/SidebarContent.vue +21 -0
- package/src/sidebar/SidebarFooter.vue +16 -0
- package/src/sidebar/SidebarGroup.vue +16 -0
- package/src/sidebar/SidebarGroupAction.vue +31 -0
- package/src/sidebar/SidebarGroupContent.vue +16 -0
- package/src/sidebar/SidebarGroupLabel.vue +31 -0
- package/src/sidebar/SidebarHeader.vue +16 -0
- package/src/sidebar/SidebarInput.vue +20 -0
- package/src/sidebar/SidebarInset.vue +25 -0
- package/src/sidebar/SidebarMenu.vue +16 -0
- package/src/sidebar/SidebarMenuAction.vue +37 -0
- package/src/sidebar/SidebarMenuBadge.vue +29 -0
- package/src/sidebar/SidebarMenuButton.vue +64 -0
- package/src/sidebar/SidebarMenuItem.vue +16 -0
- package/src/sidebar/SidebarMenuSub.vue +25 -0
- package/src/sidebar/SidebarMenuSubButton.vue +39 -0
- package/src/sidebar/SidebarMenuSubItem.vue +16 -0
- package/src/sidebar/SidebarProvider.vue +74 -0
- package/src/sidebar/SidebarRail.vue +34 -0
- package/src/sidebar/SidebarSeparator.vue +15 -0
- package/src/sidebar/SidebarTrigger.vue +28 -0
- package/src/sidebar/index.ts +70 -0
- package/src/sonner/Sonner.vue +54 -0
- package/src/sonner/index.ts +1 -0
- package/src/stepper/Stepper.vue +58 -0
- package/src/stepper/index.ts +1 -0
- package/src/switch/Switch.vue +41 -0
- package/src/switch/index.ts +1 -0
- package/src/table/Table.vue +16 -0
- package/src/table/TableBody.vue +14 -0
- package/src/table/TableCell.vue +14 -0
- package/src/table/TableHead.vue +14 -0
- package/src/table/TableHeader.vue +14 -0
- package/src/table/TableRow.vue +14 -0
- package/src/table/index.ts +6 -0
- package/src/tabs/Tabs.vue +15 -0
- package/src/tabs/TabsContent.vue +16 -0
- package/src/tabs/TabsList.vue +16 -0
- package/src/tabs/TabsTrigger.vue +21 -0
- package/src/tabs/index.ts +4 -0
- package/src/tags-input/TagsInput.vue +23 -0
- package/src/tags-input/TagsInputInput.vue +17 -0
- package/src/tags-input/TagsInputItem.vue +27 -0
- package/src/tags-input/TagsInputItemDelete.vue +22 -0
- package/src/tags-input/TagsInputItemText.vue +17 -0
- package/src/tags-input/index.ts +5 -0
- package/src/textarea/Textarea.vue +41 -0
- package/src/textarea/index.ts +1 -0
- package/src/tooltip/Tooltip.vue +15 -0
- package/src/tooltip/TooltipContent.vue +37 -0
- package/src/tooltip/TooltipProvider.vue +12 -0
- package/src/tooltip/TooltipRoot.vue +14 -0
- package/src/tooltip/TooltipTrigger.vue +12 -0
- package/src/tooltip/index.ts +4 -0
- package/styles/kit.css +100 -0
- package/styles/theme.css +950 -0
- package/styles/typography.css +430 -0
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type SidebarMenuButtonVariants, sidebarMenuButtonVariants, useSidebar } from "./index";
|
|
3
|
+
import type { HTMLAttributes } from "vue";
|
|
4
|
+
import type { PrimitiveProps } from "reka-ui";
|
|
5
|
+
import { Primitive } from "reka-ui";
|
|
6
|
+
import { cn } from "../lib/utils";
|
|
7
|
+
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "../tooltip";
|
|
8
|
+
|
|
9
|
+
defineOptions({
|
|
10
|
+
inheritAttrs: false,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
interface Props extends PrimitiveProps {
|
|
14
|
+
variant?: SidebarMenuButtonVariants["variant"];
|
|
15
|
+
size?: SidebarMenuButtonVariants["size"];
|
|
16
|
+
isActive?: boolean;
|
|
17
|
+
class?: HTMLAttributes["class"];
|
|
18
|
+
tooltip?: string;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
22
|
+
as: "button",
|
|
23
|
+
variant: "default",
|
|
24
|
+
size: "default",
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
const { isMobile, state } = useSidebar();
|
|
28
|
+
</script>
|
|
29
|
+
|
|
30
|
+
<template>
|
|
31
|
+
<Primitive
|
|
32
|
+
v-if="!tooltip"
|
|
33
|
+
data-sidebar="menu-button"
|
|
34
|
+
:data-size="size"
|
|
35
|
+
:data-active="isActive"
|
|
36
|
+
:class="cn(sidebarMenuButtonVariants({ variant, size }), props.class)"
|
|
37
|
+
:as="as"
|
|
38
|
+
:as-child="asChild"
|
|
39
|
+
v-bind="$attrs"
|
|
40
|
+
>
|
|
41
|
+
<slot />
|
|
42
|
+
</Primitive>
|
|
43
|
+
|
|
44
|
+
<TooltipProvider v-else>
|
|
45
|
+
<Tooltip>
|
|
46
|
+
<TooltipTrigger as-child>
|
|
47
|
+
<Primitive
|
|
48
|
+
data-sidebar="menu-button"
|
|
49
|
+
:data-size="size"
|
|
50
|
+
:data-active="isActive"
|
|
51
|
+
:class="cn(sidebarMenuButtonVariants({ variant, size }), props.class)"
|
|
52
|
+
:as="as"
|
|
53
|
+
:as-child="asChild"
|
|
54
|
+
v-bind="$attrs"
|
|
55
|
+
>
|
|
56
|
+
<slot />
|
|
57
|
+
</Primitive>
|
|
58
|
+
</TooltipTrigger>
|
|
59
|
+
<TooltipContent v-if="state === 'collapsed' && !isMobile" side="right" align="center">
|
|
60
|
+
{{ tooltip }}
|
|
61
|
+
</TooltipContent>
|
|
62
|
+
</Tooltip>
|
|
63
|
+
</TooltipProvider>
|
|
64
|
+
</template>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const props = defineProps<Props>();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<li data-sidebar="menu-item" :class="cn('group/menu-item relative list-none', props.class)">
|
|
14
|
+
<slot />
|
|
15
|
+
</li>
|
|
16
|
+
</template>
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const props = defineProps<Props>();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<ul
|
|
14
|
+
data-sidebar="menu-sub"
|
|
15
|
+
:class="
|
|
16
|
+
cn(
|
|
17
|
+
'mx-3.5 min-w-0 gap-1 px-2.5 py-0.5 flex translate-x-px flex-col border-l border-border-secondary',
|
|
18
|
+
'group-data-[collapsible=icon]:hidden',
|
|
19
|
+
props.class,
|
|
20
|
+
)
|
|
21
|
+
"
|
|
22
|
+
>
|
|
23
|
+
<slot />
|
|
24
|
+
</ul>
|
|
25
|
+
</template>
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from "vue";
|
|
3
|
+
import type { PrimitiveProps } from "reka-ui";
|
|
4
|
+
import { Primitive } from "reka-ui";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
|
|
7
|
+
interface Props extends PrimitiveProps {
|
|
8
|
+
size?: "sm" | "md";
|
|
9
|
+
isActive?: boolean;
|
|
10
|
+
class?: HTMLAttributes["class"];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
14
|
+
as: "a",
|
|
15
|
+
size: "md",
|
|
16
|
+
});
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<template>
|
|
20
|
+
<Primitive
|
|
21
|
+
data-sidebar="menu-sub-button"
|
|
22
|
+
:as="as"
|
|
23
|
+
:as-child="asChild"
|
|
24
|
+
:data-size="size"
|
|
25
|
+
:data-active="isActive"
|
|
26
|
+
:class="
|
|
27
|
+
cn(
|
|
28
|
+
'h-7 min-w-0 gap-2 px-2 [&>svg]:size-4 flex -translate-x-px cursor-pointer items-center overflow-hidden rounded-md text-secondary ring-sidebar-ring outline-none hover:bg-secondary hover:text-primary focus-visible:ring-2 active:bg-secondary active:text-primary disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 [&>span:last-child]:truncate [&>svg]:shrink-0',
|
|
29
|
+
'data-[active=true]:font-medium data-[active=true]:bg-brand-50 data-[active=true]:text-brand-700',
|
|
30
|
+
size === 'sm' && 'text-xs',
|
|
31
|
+
size === 'md' && 'text-sm',
|
|
32
|
+
'group-data-[collapsible=icon]:hidden',
|
|
33
|
+
props.class,
|
|
34
|
+
)
|
|
35
|
+
"
|
|
36
|
+
>
|
|
37
|
+
<slot />
|
|
38
|
+
</Primitive>
|
|
39
|
+
</template>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
interface Props {
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const props = defineProps<Props>();
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<li :class="cn('list-none', props.class)">
|
|
14
|
+
<slot />
|
|
15
|
+
</li>
|
|
16
|
+
</template>
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { SIDEBAR_COOKIE_MAX_AGE, SIDEBAR_COOKIE_NAME, SIDEBAR_KEYBOARD_SHORTCUT, SIDEBAR_WIDTH, SIDEBAR_WIDTH_ICON, provideSidebarContext } from "./index";
|
|
3
|
+
import { type HTMLAttributes, type Ref, computed, ref } from "vue";
|
|
4
|
+
import { useEventListener, useMediaQuery, useVModel } from "@vueuse/core";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
|
|
7
|
+
interface Props {
|
|
8
|
+
defaultOpen?: boolean;
|
|
9
|
+
open?: boolean;
|
|
10
|
+
class?: HTMLAttributes["class"];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
const props = withDefaults(defineProps<Props>(), {
|
|
14
|
+
defaultOpen: true,
|
|
15
|
+
open: undefined,
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
const emits = defineEmits<{
|
|
19
|
+
(e: "update:open", value: boolean): void;
|
|
20
|
+
}>();
|
|
21
|
+
|
|
22
|
+
const isMobile = useMediaQuery("(max-width: 768px)");
|
|
23
|
+
const openMobile = ref(false);
|
|
24
|
+
|
|
25
|
+
const openState = useVModel(props, "open", emits, {
|
|
26
|
+
defaultValue: props.defaultOpen,
|
|
27
|
+
passive: (props.open === undefined) as false,
|
|
28
|
+
}) as Ref<boolean>;
|
|
29
|
+
|
|
30
|
+
function setOpen(value: boolean) {
|
|
31
|
+
openState.value = value;
|
|
32
|
+
// Set cookie for persistence
|
|
33
|
+
document.cookie = `${SIDEBAR_COOKIE_NAME}=${value}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function setOpenMobile(value: boolean) {
|
|
37
|
+
openMobile.value = value;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function toggleSidebar() {
|
|
41
|
+
return isMobile.value ? setOpenMobile(!openMobile.value) : setOpen(!openState.value);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
useEventListener("keydown", (event: KeyboardEvent) => {
|
|
45
|
+
if (event.key === SIDEBAR_KEYBOARD_SHORTCUT && (event.metaKey || event.ctrlKey)) {
|
|
46
|
+
event.preventDefault();
|
|
47
|
+
toggleSidebar();
|
|
48
|
+
}
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
const state = computed(() => (openState.value ? "expanded" : "collapsed"));
|
|
52
|
+
|
|
53
|
+
provideSidebarContext({
|
|
54
|
+
state,
|
|
55
|
+
open: openState,
|
|
56
|
+
setOpen,
|
|
57
|
+
isMobile,
|
|
58
|
+
openMobile,
|
|
59
|
+
setOpenMobile,
|
|
60
|
+
toggleSidebar,
|
|
61
|
+
});
|
|
62
|
+
</script>
|
|
63
|
+
|
|
64
|
+
<template>
|
|
65
|
+
<div
|
|
66
|
+
:style="{
|
|
67
|
+
'--sidebar-width': SIDEBAR_WIDTH,
|
|
68
|
+
'--sidebar-width-icon': SIDEBAR_WIDTH_ICON,
|
|
69
|
+
}"
|
|
70
|
+
:class="cn('group/sidebar-wrapper flex min-h-svh w-full has-[[data-variant=inset]]:bg-sidebar', props.class)"
|
|
71
|
+
>
|
|
72
|
+
<slot />
|
|
73
|
+
</div>
|
|
74
|
+
</template>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useSidebar } from "./index";
|
|
3
|
+
import type { HTMLAttributes } from "vue";
|
|
4
|
+
import { cn } from "../lib/utils";
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
class?: HTMLAttributes["class"];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const props = defineProps<Props>();
|
|
11
|
+
|
|
12
|
+
const { toggleSidebar } = useSidebar();
|
|
13
|
+
</script>
|
|
14
|
+
|
|
15
|
+
<template>
|
|
16
|
+
<button
|
|
17
|
+
data-sidebar="rail"
|
|
18
|
+
aria-label="Toggle Sidebar"
|
|
19
|
+
:tabindex="-1"
|
|
20
|
+
title="Toggle Sidebar"
|
|
21
|
+
:class="
|
|
22
|
+
cn(
|
|
23
|
+
'inset-y-0 w-4 after:inset-y-0 group-data-[side=left]:-right-4 group-data-[side=right]:left-0 sm:flex absolute z-20 hidden -translate-x-1/2 cursor-pointer transition-all ease-linear after:absolute after:left-1/2 after:w-[2px] hover:after:bg-border-secondary',
|
|
24
|
+
'[[data-side=left]_&]:cursor-w-resize [[data-side=right]_&]:cursor-e-resize',
|
|
25
|
+
'[[data-side=left][data-state=collapsed]_&]:cursor-e-resize [[data-side=right][data-state=collapsed]_&]:cursor-w-resize',
|
|
26
|
+
'group-data-[collapsible=offcanvas]:translate-x-0 group-data-[collapsible=offcanvas]:after:left-full group-data-[collapsible=offcanvas]:hover:bg-sidebar',
|
|
27
|
+
'[[data-side=left][data-collapsible=offcanvas]_&]:-right-2',
|
|
28
|
+
'[[data-side=right][data-collapsible=offcanvas]_&]:-left-2',
|
|
29
|
+
props.class,
|
|
30
|
+
)
|
|
31
|
+
"
|
|
32
|
+
@click="toggleSidebar"
|
|
33
|
+
/>
|
|
34
|
+
</template>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
import { Separator } from "../separator";
|
|
5
|
+
|
|
6
|
+
interface Props {
|
|
7
|
+
class?: HTMLAttributes["class"];
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const props = defineProps<Props>();
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<template>
|
|
14
|
+
<Separator data-sidebar="separator" :class="cn('mx-2 w-auto bg-border-secondary', props.class)" />
|
|
15
|
+
</template>
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { useSidebar } from "./index";
|
|
3
|
+
import type { HTMLAttributes } from "vue";
|
|
4
|
+
import { PanelLeft } from "lucide-vue-next";
|
|
5
|
+
import { Button } from "../button";
|
|
6
|
+
import { cn } from "../lib/utils";
|
|
7
|
+
|
|
8
|
+
interface Props {
|
|
9
|
+
class?: HTMLAttributes["class"];
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
const props = defineProps<Props>();
|
|
13
|
+
|
|
14
|
+
const { toggleSidebar } = useSidebar();
|
|
15
|
+
</script>
|
|
16
|
+
|
|
17
|
+
<template>
|
|
18
|
+
<Button
|
|
19
|
+
data-sidebar="trigger"
|
|
20
|
+
variant="ghost"
|
|
21
|
+
size="icon-sm"
|
|
22
|
+
:class="cn('h-8 w-8 cursor-pointer text-secondary hover:bg-secondary hover:text-primary', props.class)"
|
|
23
|
+
@click="toggleSidebar"
|
|
24
|
+
>
|
|
25
|
+
<PanelLeft class="h-4 w-4" />
|
|
26
|
+
<span class="sr-only">Toggle Sidebar</span>
|
|
27
|
+
</Button>
|
|
28
|
+
</template>
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { ComputedRef, Ref } from "vue";
|
|
2
|
+
import { type VariantProps, cva } from "class-variance-authority";
|
|
3
|
+
import { createContext } from "reka-ui";
|
|
4
|
+
|
|
5
|
+
export const SIDEBAR_COOKIE_NAME = "sidebar_state";
|
|
6
|
+
export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
|
|
7
|
+
export const SIDEBAR_WIDTH = "16rem";
|
|
8
|
+
export const SIDEBAR_WIDTH_MOBILE = "18rem";
|
|
9
|
+
export const SIDEBAR_WIDTH_ICON = "4.5rem";
|
|
10
|
+
export const SIDEBAR_KEYBOARD_SHORTCUT = "b";
|
|
11
|
+
|
|
12
|
+
export interface SidebarContext {
|
|
13
|
+
state: ComputedRef<"expanded" | "collapsed">;
|
|
14
|
+
open: Ref<boolean>;
|
|
15
|
+
setOpen: (open: boolean) => void;
|
|
16
|
+
openMobile: Ref<boolean>;
|
|
17
|
+
setOpenMobile: (open: boolean) => void;
|
|
18
|
+
isMobile: Ref<boolean>;
|
|
19
|
+
toggleSidebar: () => void;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export const [useSidebar, provideSidebarContext] = createContext<SidebarContext>("Sidebar");
|
|
23
|
+
|
|
24
|
+
export const sidebarMenuButtonVariants = cva(
|
|
25
|
+
"peer/menu-button gap-2 p-2 group-has-[[data-sidebar=menu-action]]/menu-item:pr-8 data-[active=true]:font-medium group-data-[collapsible=icon]:!size-8 group-data-[collapsible=icon]:!p-2 group-data-[collapsible=icon]:gap-0 [&>svg]:size-4 flex w-full cursor-pointer items-center overflow-hidden rounded-lg text-left text-sm ring-sidebar-ring transition-[width,height,padding] outline-none select-none group-data-[collapsible=icon]:mx-auto group-data-[collapsible=icon]:justify-center hover:bg-sidebar-accent hover:text-sidebar-accent-foreground focus-visible:ring-2 active:bg-sidebar-accent active:text-sidebar-accent-foreground disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground [&>span:last-child]:truncate group-data-[collapsible=icon]:[&>span:last-child]:hidden [&>svg]:shrink-0",
|
|
26
|
+
{
|
|
27
|
+
variants: {
|
|
28
|
+
variant: {
|
|
29
|
+
default:
|
|
30
|
+
"hover:bg-secondary hover:text-primary data-[active=true]:bg-brand-50 data-[active=true]:text-brand-700 data-[active=true]:dark:bg-brand-950/50 data-[active=true]:dark:text-brand-300",
|
|
31
|
+
outline:
|
|
32
|
+
"border border-border-secondary bg-primary shadow-xs hover:bg-secondary hover:text-primary data-[active=true]:border-brand-500 data-[active=true]:text-brand-700",
|
|
33
|
+
},
|
|
34
|
+
size: {
|
|
35
|
+
default: "h-9 text-sm",
|
|
36
|
+
sm: "h-8 text-xs",
|
|
37
|
+
lg: "h-12 group-data-[collapsible=icon]:!size-8 text-sm",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
defaultVariants: {
|
|
41
|
+
variant: "default",
|
|
42
|
+
size: "default",
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
export type SidebarMenuButtonVariants = VariantProps<typeof sidebarMenuButtonVariants>;
|
|
48
|
+
|
|
49
|
+
export { default as Sidebar } from "./Sidebar.vue";
|
|
50
|
+
export { default as SidebarContent } from "./SidebarContent.vue";
|
|
51
|
+
export { default as SidebarFooter } from "./SidebarFooter.vue";
|
|
52
|
+
export { default as SidebarGroup } from "./SidebarGroup.vue";
|
|
53
|
+
export { default as SidebarGroupAction } from "./SidebarGroupAction.vue";
|
|
54
|
+
export { default as SidebarGroupContent } from "./SidebarGroupContent.vue";
|
|
55
|
+
export { default as SidebarGroupLabel } from "./SidebarGroupLabel.vue";
|
|
56
|
+
export { default as SidebarHeader } from "./SidebarHeader.vue";
|
|
57
|
+
export { default as SidebarInput } from "./SidebarInput.vue";
|
|
58
|
+
export { default as SidebarInset } from "./SidebarInset.vue";
|
|
59
|
+
export { default as SidebarMenu } from "./SidebarMenu.vue";
|
|
60
|
+
export { default as SidebarMenuAction } from "./SidebarMenuAction.vue";
|
|
61
|
+
export { default as SidebarMenuBadge } from "./SidebarMenuBadge.vue";
|
|
62
|
+
export { default as SidebarMenuButton } from "./SidebarMenuButton.vue";
|
|
63
|
+
export { default as SidebarMenuItem } from "./SidebarMenuItem.vue";
|
|
64
|
+
export { default as SidebarMenuSub } from "./SidebarMenuSub.vue";
|
|
65
|
+
export { default as SidebarMenuSubButton } from "./SidebarMenuSubButton.vue";
|
|
66
|
+
export { default as SidebarMenuSubItem } from "./SidebarMenuSubItem.vue";
|
|
67
|
+
export { default as SidebarProvider } from "./SidebarProvider.vue";
|
|
68
|
+
export { default as SidebarRail } from "./SidebarRail.vue";
|
|
69
|
+
export { default as SidebarSeparator } from "./SidebarSeparator.vue";
|
|
70
|
+
export { default as SidebarTrigger } from "./SidebarTrigger.vue";
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { reactiveOmit } from "@vueuse/core";
|
|
3
|
+
import { CircleCheckIcon, InfoIcon, Loader2Icon, OctagonXIcon, TriangleAlertIcon, XIcon } from "lucide-vue-next";
|
|
4
|
+
import type { ToasterProps } from "vue-sonner";
|
|
5
|
+
import { Toaster as Sonner } from "vue-sonner";
|
|
6
|
+
import "vue-sonner/style.css";
|
|
7
|
+
|
|
8
|
+
const props = defineProps<ToasterProps>();
|
|
9
|
+
const delegatedProps = reactiveOmit(props, "toastOptions");
|
|
10
|
+
</script>
|
|
11
|
+
|
|
12
|
+
<template>
|
|
13
|
+
<Sonner
|
|
14
|
+
class="toaster group"
|
|
15
|
+
:toast-options="{
|
|
16
|
+
classes: {
|
|
17
|
+
toast: 'group toast group-[.toaster]:bg-white dark:group-[.toaster]:bg-gray-900 group-[.toaster]:text-gray-900 dark:group-[.toaster]:text-white group-[.toaster]:border-gray-200 dark:group-[.toaster]:border-gray-800 group-[.toaster]:shadow-xl group-[.toaster]:rounded-xl group-[.toaster]:p-4 group-[.toaster]:border',
|
|
18
|
+
description: 'group-[.toast]:text-gray-500 dark:group-[.toast]:text-gray-400 group-[.toast]:text-xs',
|
|
19
|
+
actionButton:
|
|
20
|
+
'group-[.toast]:bg-brand-600 group-[.toast]:text-white group-[.toast]:rounded-lg group-[.toast]:px-3 group-[.toast]:py-1.5 group-[.toast]:text-xs group-[.toast]:font-medium hover:group-[.toast]:bg-brand-700',
|
|
21
|
+
cancelButton:
|
|
22
|
+
'group-[.toast]:bg-gray-100 dark:group-[.toast]:bg-gray-800 group-[.toast]:text-gray-700 dark:group-[.toast]:text-gray-200 group-[.toast]:rounded-lg group-[.toast]:px-3 group-[.toast]:py-1.5 group-[.toast]:text-xs',
|
|
23
|
+
success:
|
|
24
|
+
'group-[.toaster]:!bg-utility-green-50 dark:group-[.toaster]:!bg-utility-green-950 group-[.toaster]:!text-utility-green-700 dark:group-[.toaster]:!text-utility-green-300 group-[.toaster]:!border-utility-green-200 dark:group-[.toaster]:!border-utility-green-800',
|
|
25
|
+
error: 'group-[.toaster]:!bg-utility-red-50 dark:group-[.toaster]:!bg-utility-red-950 group-[.toaster]:!text-utility-red-700 dark:group-[.toaster]:!text-utility-red-300 group-[.toaster]:!border-utility-red-200 dark:group-[.toaster]:!border-utility-red-800',
|
|
26
|
+
warning:
|
|
27
|
+
'group-[.toaster]:!bg-utility-orange-50 dark:group-[.toaster]:!bg-utility-orange-950 group-[.toaster]:!text-utility-orange-700 dark:group-[.toaster]:!text-utility-orange-300 group-[.toaster]:!border-utility-orange-200 dark:group-[.toaster]:!border-utility-orange-800',
|
|
28
|
+
info: 'group-[.toaster]:!bg-utility-blue-50 group-[.toaster]:!text-utility-blue-700 group-[.toaster]:!border-utility-blue-200',
|
|
29
|
+
},
|
|
30
|
+
}"
|
|
31
|
+
v-bind="delegatedProps"
|
|
32
|
+
>
|
|
33
|
+
<template #success-icon>
|
|
34
|
+
<CircleCheckIcon class="size-4 text-emerald-500" />
|
|
35
|
+
</template>
|
|
36
|
+
<template #info-icon>
|
|
37
|
+
<InfoIcon class="size-4 text-blue-500" />
|
|
38
|
+
</template>
|
|
39
|
+
<template #warning-icon>
|
|
40
|
+
<TriangleAlertIcon class="size-4 text-amber-500" />
|
|
41
|
+
</template>
|
|
42
|
+
<template #error-icon>
|
|
43
|
+
<OctagonXIcon class="size-4 text-rose-500" />
|
|
44
|
+
</template>
|
|
45
|
+
<template #loading-icon>
|
|
46
|
+
<div>
|
|
47
|
+
<Loader2Icon class="size-4 animate-spin text-brand-600" />
|
|
48
|
+
</div>
|
|
49
|
+
</template>
|
|
50
|
+
<template #close-icon>
|
|
51
|
+
<XIcon class="size-4 text-gray-400 hover:text-gray-600" />
|
|
52
|
+
</template>
|
|
53
|
+
</Sonner>
|
|
54
|
+
</template>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Toaster } from "./Sonner.vue";
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import type { HTMLAttributes } from "vue";
|
|
3
|
+
import { Check } from "lucide-vue-next";
|
|
4
|
+
import { cn } from "../lib/utils";
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* Horizontal step indicator for multi-step forms. `current` is 0-based; steps
|
|
8
|
+
* before it show a check and can be clicked to jump back.
|
|
9
|
+
*/
|
|
10
|
+
const props = defineProps<{
|
|
11
|
+
steps: readonly string[];
|
|
12
|
+
current: number;
|
|
13
|
+
class?: HTMLAttributes["class"];
|
|
14
|
+
}>();
|
|
15
|
+
|
|
16
|
+
const emit = defineEmits<{
|
|
17
|
+
(e: "select", index: number): void;
|
|
18
|
+
}>();
|
|
19
|
+
</script>
|
|
20
|
+
|
|
21
|
+
<template>
|
|
22
|
+
<ol :class="cn('flex w-full items-start', props.class)" aria-label="Progress">
|
|
23
|
+
<li
|
|
24
|
+
v-for="(label, index) in steps"
|
|
25
|
+
:key="label"
|
|
26
|
+
class="gap-2 relative flex flex-1 flex-col items-center text-center"
|
|
27
|
+
:aria-current="index === current ? 'step' : undefined"
|
|
28
|
+
>
|
|
29
|
+
<!-- Connector to the previous step -->
|
|
30
|
+
<span
|
|
31
|
+
v-if="index > 0"
|
|
32
|
+
class="h-0.5 absolute top-[13px] right-1/2 w-full transition duration-100 ease-linear"
|
|
33
|
+
:class="index <= current ? 'bg-brand-600' : 'bg-gray-200 dark:bg-gray-800'"
|
|
34
|
+
aria-hidden="true"
|
|
35
|
+
/>
|
|
36
|
+
|
|
37
|
+
<button
|
|
38
|
+
type="button"
|
|
39
|
+
class="size-7 font-semibold relative z-10 flex items-center justify-center rounded-full border-2 text-xs transition duration-100 ease-linear focus-visible:ring-2 focus-visible:ring-brand-500 focus-visible:ring-offset-2 focus-visible:outline-none disabled:cursor-default"
|
|
40
|
+
:class="[
|
|
41
|
+
index < current && 'cursor-pointer border-brand-600 bg-brand-600 text-white',
|
|
42
|
+
index === current && 'dark:bg-gray-900 border-brand-600 bg-white text-brand-700 dark:text-brand-300',
|
|
43
|
+
index > current && 'border-gray-200 text-gray-400 dark:border-gray-700 dark:bg-gray-900 bg-white',
|
|
44
|
+
]"
|
|
45
|
+
:disabled="index >= current"
|
|
46
|
+
:aria-label="`${label}${index < current ? ' (completed)' : ''}`"
|
|
47
|
+
@click="emit('select', index)"
|
|
48
|
+
>
|
|
49
|
+
<Check v-if="index < current" class="size-3.5" />
|
|
50
|
+
<span v-else>{{ index + 1 }}</span>
|
|
51
|
+
</button>
|
|
52
|
+
|
|
53
|
+
<span class="font-medium text-xs" :class="index <= current ? 'text-gray-900 dark:text-white' : 'text-gray-400 dark:text-gray-500'">
|
|
54
|
+
{{ label }}
|
|
55
|
+
</span>
|
|
56
|
+
</li>
|
|
57
|
+
</ol>
|
|
58
|
+
</template>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Stepper } from "./Stepper.vue";
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes } from "vue";
|
|
3
|
+
import { reactiveOmit, useVModel } from "@vueuse/core";
|
|
4
|
+
import { SwitchRoot, type SwitchRootEmits, type SwitchRootProps, SwitchThumb } from "reka-ui";
|
|
5
|
+
import { cn } from "../lib/utils";
|
|
6
|
+
|
|
7
|
+
interface Props extends SwitchRootProps {
|
|
8
|
+
class?: HTMLAttributes["class"];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
const props = defineProps<Props>();
|
|
12
|
+
const emits = defineEmits<SwitchRootEmits>();
|
|
13
|
+
|
|
14
|
+
const modelValue = useVModel(props, "modelValue", emits, {
|
|
15
|
+
passive: true,
|
|
16
|
+
defaultValue: props.defaultValue,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const delegatedProps = reactiveOmit(props, "modelValue", "class");
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<template>
|
|
23
|
+
<SwitchRoot
|
|
24
|
+
v-model="modelValue"
|
|
25
|
+
:class="
|
|
26
|
+
cn(
|
|
27
|
+
'peer h-5 w-9 inline-flex shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:ring-2 focus-visible:ring-brand-500/20 focus-visible:outline-none disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-brand-solid data-[state=unchecked]:bg-tertiary',
|
|
28
|
+
props.class,
|
|
29
|
+
)
|
|
30
|
+
"
|
|
31
|
+
v-bind="delegatedProps"
|
|
32
|
+
>
|
|
33
|
+
<SwitchThumb
|
|
34
|
+
:class="
|
|
35
|
+
cn(
|
|
36
|
+
'size-4 data-[state=checked]:translate-x-4 data-[state=unchecked]:translate-x-0 pointer-events-none block rounded-full bg-white shadow-xs ring-0 transition-transform',
|
|
37
|
+
)
|
|
38
|
+
"
|
|
39
|
+
/>
|
|
40
|
+
</SwitchRoot>
|
|
41
|
+
</template>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { default as Switch } from "./Switch.vue";
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}>();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<div class="relative w-full">
|
|
12
|
+
<table :class="cn('w-full caption-bottom border-collapse text-left text-sm', props.class)">
|
|
13
|
+
<slot />
|
|
14
|
+
</table>
|
|
15
|
+
</div>
|
|
16
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}>();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<tbody :class="cn('divide-y divide-border-secondary/60 [&_tr:last-child]:border-0', props.class)">
|
|
12
|
+
<slot />
|
|
13
|
+
</tbody>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}>();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<td :class="cn('p-4 [&:has([role=checkbox])]:pr-0 align-middle text-sm text-secondary', props.class)">
|
|
12
|
+
<slot />
|
|
13
|
+
</td>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}>();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<th :class="cn('h-10 px-4 font-semibold text-left align-middle text-xs text-quaternary select-none', props.class)">
|
|
12
|
+
<slot />
|
|
13
|
+
</th>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}>();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<thead :class="cn('border-border-secondary bg-secondary/50 [&_tr]:border-b', props.class)">
|
|
12
|
+
<slot />
|
|
13
|
+
</thead>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { type HTMLAttributes } from "vue";
|
|
3
|
+
import { cn } from "../lib/utils";
|
|
4
|
+
|
|
5
|
+
const props = defineProps<{
|
|
6
|
+
class?: HTMLAttributes["class"];
|
|
7
|
+
}>();
|
|
8
|
+
</script>
|
|
9
|
+
|
|
10
|
+
<template>
|
|
11
|
+
<tr :class="cn('border-b border-border-secondary/70 transition-colors hover:bg-secondary/40 data-[state=selected]:bg-secondary', props.class)">
|
|
12
|
+
<slot />
|
|
13
|
+
</tr>
|
|
14
|
+
</template>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { default as Table } from "./Table.vue";
|
|
2
|
+
export { default as TableHeader } from "./TableHeader.vue";
|
|
3
|
+
export { default as TableBody } from "./TableBody.vue";
|
|
4
|
+
export { default as TableRow } from "./TableRow.vue";
|
|
5
|
+
export { default as TableHead } from "./TableHead.vue";
|
|
6
|
+
export { default as TableCell } from "./TableCell.vue";
|