diff --git a/src/components/ui/sheet/Sheet.vue b/src/components/ui/sheet/Sheet.vue new file mode 100644 index 00000000..3fdf5942 --- /dev/null +++ b/src/components/ui/sheet/Sheet.vue @@ -0,0 +1,18 @@ + + + diff --git a/src/components/ui/sheet/SheetClose.vue b/src/components/ui/sheet/SheetClose.vue new file mode 100644 index 00000000..339a2e95 --- /dev/null +++ b/src/components/ui/sheet/SheetClose.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/components/ui/sheet/SheetContent.vue b/src/components/ui/sheet/SheetContent.vue new file mode 100644 index 00000000..6de775b0 --- /dev/null +++ b/src/components/ui/sheet/SheetContent.vue @@ -0,0 +1,64 @@ + + + diff --git a/src/components/ui/sheet/SheetDescription.vue b/src/components/ui/sheet/SheetDescription.vue new file mode 100644 index 00000000..3e00ce58 --- /dev/null +++ b/src/components/ui/sheet/SheetDescription.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/components/ui/sheet/SheetFooter.vue b/src/components/ui/sheet/SheetFooter.vue new file mode 100644 index 00000000..97f7c37a --- /dev/null +++ b/src/components/ui/sheet/SheetFooter.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/components/ui/sheet/SheetHeader.vue b/src/components/ui/sheet/SheetHeader.vue new file mode 100644 index 00000000..23474aac --- /dev/null +++ b/src/components/ui/sheet/SheetHeader.vue @@ -0,0 +1,13 @@ + + + diff --git a/src/components/ui/sheet/SheetOverlay.vue b/src/components/ui/sheet/SheetOverlay.vue new file mode 100644 index 00000000..8e0b515a --- /dev/null +++ b/src/components/ui/sheet/SheetOverlay.vue @@ -0,0 +1,28 @@ + + + diff --git a/src/components/ui/sheet/SheetTitle.vue b/src/components/ui/sheet/SheetTitle.vue new file mode 100644 index 00000000..e5a302ed --- /dev/null +++ b/src/components/ui/sheet/SheetTitle.vue @@ -0,0 +1,22 @@ + + + diff --git a/src/components/ui/sheet/SheetTrigger.vue b/src/components/ui/sheet/SheetTrigger.vue new file mode 100644 index 00000000..98834c4f --- /dev/null +++ b/src/components/ui/sheet/SheetTrigger.vue @@ -0,0 +1,14 @@ + + + diff --git a/src/components/ui/sheet/index.js b/src/components/ui/sheet/index.js new file mode 100644 index 00000000..37498e1d --- /dev/null +++ b/src/components/ui/sheet/index.js @@ -0,0 +1,8 @@ +export { default as Sheet } from './Sheet.vue'; +export { default as SheetClose } from './SheetClose.vue'; +export { default as SheetContent } from './SheetContent.vue'; +export { default as SheetDescription } from './SheetDescription.vue'; +export { default as SheetFooter } from './SheetFooter.vue'; +export { default as SheetHeader } from './SheetHeader.vue'; +export { default as SheetTitle } from './SheetTitle.vue'; +export { default as SheetTrigger } from './SheetTrigger.vue'; diff --git a/src/components/ui/sidebar/Sidebar.vue b/src/components/ui/sidebar/Sidebar.vue new file mode 100644 index 00000000..6b584f68 --- /dev/null +++ b/src/components/ui/sidebar/Sidebar.vue @@ -0,0 +1,108 @@ + + + diff --git a/src/components/ui/sidebar/SidebarContent.vue b/src/components/ui/sidebar/SidebarContent.vue new file mode 100644 index 00000000..90f4efb8 --- /dev/null +++ b/src/components/ui/sidebar/SidebarContent.vue @@ -0,0 +1,24 @@ + + + diff --git a/src/components/ui/sidebar/SidebarFooter.vue b/src/components/ui/sidebar/SidebarFooter.vue new file mode 100644 index 00000000..fe979914 --- /dev/null +++ b/src/components/ui/sidebar/SidebarFooter.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/ui/sidebar/SidebarGroup.vue b/src/components/ui/sidebar/SidebarGroup.vue new file mode 100644 index 00000000..3b603ba0 --- /dev/null +++ b/src/components/ui/sidebar/SidebarGroup.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/components/ui/sidebar/SidebarGroupAction.vue b/src/components/ui/sidebar/SidebarGroupAction.vue new file mode 100644 index 00000000..26308032 --- /dev/null +++ b/src/components/ui/sidebar/SidebarGroupAction.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/components/ui/sidebar/SidebarGroupContent.vue b/src/components/ui/sidebar/SidebarGroupContent.vue new file mode 100644 index 00000000..1cdf025e --- /dev/null +++ b/src/components/ui/sidebar/SidebarGroupContent.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/ui/sidebar/SidebarGroupLabel.vue b/src/components/ui/sidebar/SidebarGroupLabel.vue new file mode 100644 index 00000000..8bd90ff7 --- /dev/null +++ b/src/components/ui/sidebar/SidebarGroupLabel.vue @@ -0,0 +1,36 @@ + + + diff --git a/src/components/ui/sidebar/SidebarHeader.vue b/src/components/ui/sidebar/SidebarHeader.vue new file mode 100644 index 00000000..17541cb1 --- /dev/null +++ b/src/components/ui/sidebar/SidebarHeader.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/ui/sidebar/SidebarInput.vue b/src/components/ui/sidebar/SidebarInput.vue new file mode 100644 index 00000000..6d03ac06 --- /dev/null +++ b/src/components/ui/sidebar/SidebarInput.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/components/ui/sidebar/SidebarInset.vue b/src/components/ui/sidebar/SidebarInset.vue new file mode 100644 index 00000000..1583ae83 --- /dev/null +++ b/src/components/ui/sidebar/SidebarInset.vue @@ -0,0 +1,24 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenu.vue b/src/components/ui/sidebar/SidebarMenu.vue new file mode 100644 index 00000000..b92d9e02 --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenu.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuAction.vue b/src/components/ui/sidebar/SidebarMenuAction.vue new file mode 100644 index 00000000..4d6d5598 --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuAction.vue @@ -0,0 +1,46 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuBadge.vue b/src/components/ui/sidebar/SidebarMenuBadge.vue new file mode 100644 index 00000000..423baa41 --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuBadge.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuButton.vue b/src/components/ui/sidebar/SidebarMenuButton.vue new file mode 100644 index 00000000..e048dd3d --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuButton.vue @@ -0,0 +1,67 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuButtonChild.vue b/src/components/ui/sidebar/SidebarMenuButtonChild.vue new file mode 100644 index 00000000..575dcd18 --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuButtonChild.vue @@ -0,0 +1,47 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuItem.vue b/src/components/ui/sidebar/SidebarMenuItem.vue new file mode 100644 index 00000000..331d5a31 --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuItem.vue @@ -0,0 +1,16 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuSkeleton.vue b/src/components/ui/sidebar/SidebarMenuSkeleton.vue new file mode 100644 index 00000000..e2bdfb95 --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuSkeleton.vue @@ -0,0 +1,34 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuSub.vue b/src/components/ui/sidebar/SidebarMenuSub.vue new file mode 100644 index 00000000..f2333d68 --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuSub.vue @@ -0,0 +1,25 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuSubButton.vue b/src/components/ui/sidebar/SidebarMenuSubButton.vue new file mode 100644 index 00000000..7d0689c4 --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuSubButton.vue @@ -0,0 +1,49 @@ + + + diff --git a/src/components/ui/sidebar/SidebarMenuSubItem.vue b/src/components/ui/sidebar/SidebarMenuSubItem.vue new file mode 100644 index 00000000..d6f820ac --- /dev/null +++ b/src/components/ui/sidebar/SidebarMenuSubItem.vue @@ -0,0 +1,19 @@ + + + diff --git a/src/components/ui/sidebar/SidebarProvider.vue b/src/components/ui/sidebar/SidebarProvider.vue new file mode 100644 index 00000000..06638729 --- /dev/null +++ b/src/components/ui/sidebar/SidebarProvider.vue @@ -0,0 +1,92 @@ + + + diff --git a/src/components/ui/sidebar/SidebarRail.vue b/src/components/ui/sidebar/SidebarRail.vue new file mode 100644 index 00000000..9cbff413 --- /dev/null +++ b/src/components/ui/sidebar/SidebarRail.vue @@ -0,0 +1,37 @@ + + + diff --git a/src/components/ui/sidebar/SidebarSeparator.vue b/src/components/ui/sidebar/SidebarSeparator.vue new file mode 100644 index 00000000..c258678a --- /dev/null +++ b/src/components/ui/sidebar/SidebarSeparator.vue @@ -0,0 +1,20 @@ + + + diff --git a/src/components/ui/sidebar/SidebarTrigger.vue b/src/components/ui/sidebar/SidebarTrigger.vue new file mode 100644 index 00000000..ae397179 --- /dev/null +++ b/src/components/ui/sidebar/SidebarTrigger.vue @@ -0,0 +1,29 @@ + + + diff --git a/src/components/ui/sidebar/index.js b/src/components/ui/sidebar/index.js new file mode 100644 index 00000000..8c30202f --- /dev/null +++ b/src/components/ui/sidebar/index.js @@ -0,0 +1,50 @@ +import { cva } from 'class-variance-authority'; + +export { default as Sidebar } from './Sidebar.vue'; +export { default as SidebarContent } from './SidebarContent.vue'; +export { default as SidebarFooter } from './SidebarFooter.vue'; +export { default as SidebarGroup } from './SidebarGroup.vue'; +export { default as SidebarGroupAction } from './SidebarGroupAction.vue'; +export { default as SidebarGroupContent } from './SidebarGroupContent.vue'; +export { default as SidebarGroupLabel } from './SidebarGroupLabel.vue'; +export { default as SidebarHeader } from './SidebarHeader.vue'; +export { default as SidebarInput } from './SidebarInput.vue'; +export { default as SidebarInset } from './SidebarInset.vue'; +export { default as SidebarMenu } from './SidebarMenu.vue'; +export { default as SidebarMenuAction } from './SidebarMenuAction.vue'; +export { default as SidebarMenuBadge } from './SidebarMenuBadge.vue'; +export { default as SidebarMenuButton } from './SidebarMenuButton.vue'; +export { default as SidebarMenuItem } from './SidebarMenuItem.vue'; +export { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue'; +export { default as SidebarMenuSub } from './SidebarMenuSub.vue'; +export { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue'; +export { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue'; +export { default as SidebarProvider } from './SidebarProvider.vue'; +export { default as SidebarRail } from './SidebarRail.vue'; +export { default as SidebarSeparator } from './SidebarSeparator.vue'; +export { default as SidebarTrigger } from './SidebarTrigger.vue'; + +export { useSidebar } from './utils'; + +export const sidebarMenuButtonVariants = cva( + 'peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2 text-left text-sm outline-hidden ring-sidebar-ring transition-[width,height,padding] 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 group-has-data-[sidebar=menu-action]/menu-item:pr-8 aria-disabled:pointer-events-none aria-disabled:opacity-50 data-[active=true]:bg-sidebar-accent data-[active=true]:font-medium data-[active=true]:text-sidebar-accent-foreground data-[state=open]:hover:bg-sidebar-accent data-[state=open]:hover:text-sidebar-accent-foreground group-data-[collapsible=icon]:size-8! group-data-[collapsible=icon]:p-2! [&>span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0', + { + variants: { + variant: { + default: + 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground', + outline: + 'bg-background shadow-[0_0_0_1px_hsl(var(--sidebar-border))] hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:shadow-[0_0_0_1px_hsl(var(--sidebar-accent))]' + }, + size: { + default: 'h-8 text-sm', + sm: 'h-7 text-xs', + lg: 'h-12 text-sm group-data-[collapsible=icon]:p-0!' + } + }, + defaultVariants: { + variant: 'default', + size: 'default' + } + } +); diff --git a/src/components/ui/sidebar/utils.js b/src/components/ui/sidebar/utils.js new file mode 100644 index 00000000..46d93a13 --- /dev/null +++ b/src/components/ui/sidebar/utils.js @@ -0,0 +1,10 @@ +import { createContext } from 'reka-ui'; + +export const SIDEBAR_COOKIE_NAME = 'sidebar_state'; +export const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7; +export const SIDEBAR_WIDTH = '16rem'; +export const SIDEBAR_WIDTH_MOBILE = '18rem'; +export const SIDEBAR_WIDTH_ICON = '3rem'; +export const SIDEBAR_KEYBOARD_SHORTCUT = 'b'; + +export const [useSidebar, provideSidebarContext] = createContext('Sidebar');