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 @@
+
+
+
+
+
+
+
+
+
+
+ Close
+
+
+
+
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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tooltip }}
+
+
+
+
+
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');