diff --git a/apps/www/src/lib/registry/default/ui/sidebar/SidebarMenuSkeleton.vue b/apps/www/src/lib/registry/default/ui/sidebar/SidebarMenuSkeleton.vue
index 9bcad9d0..aef8bac7 100644
--- a/apps/www/src/lib/registry/default/ui/sidebar/SidebarMenuSkeleton.vue
+++ b/apps/www/src/lib/registry/default/ui/sidebar/SidebarMenuSkeleton.vue
@@ -1,5 +1,5 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarContent.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarContent.vue
new file mode 100644
index 00000000..4b6244a4
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarContent.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarFooter.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarFooter.vue
new file mode 100644
index 00000000..9d145c05
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarFooter.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroup.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroup.vue
new file mode 100644
index 00000000..adc6843c
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroup.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupAction.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupAction.vue
new file mode 100644
index 00000000..74cac4ea
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupAction.vue
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupContent.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupContent.vue
new file mode 100644
index 00000000..37390c93
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupContent.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupLabel.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupLabel.vue
new file mode 100644
index 00000000..83826c3e
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupLabel.vue
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarHeader.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarHeader.vue
new file mode 100644
index 00000000..eecaddb2
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarHeader.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarInput.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarInput.vue
new file mode 100644
index 00000000..909aff59
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarInput.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarInset.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarInset.vue
new file mode 100644
index 00000000..27d1db50
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarInset.vue
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenu.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenu.vue
new file mode 100644
index 00000000..3bfd73e6
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenu.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuAction.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuAction.vue
new file mode 100644
index 00000000..aa504c2f
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuAction.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuBadge.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuBadge.vue
new file mode 100644
index 00000000..f8789687
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuBadge.vue
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuButton.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuButton.vue
new file mode 100644
index 00000000..f11c90e2
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuButton.vue
@@ -0,0 +1,51 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ {{ tooltip }}
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuButtonChild.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuButtonChild.vue
new file mode 100644
index 00000000..1d438667
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuButtonChild.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuItem.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuItem.vue
new file mode 100644
index 00000000..b6000734
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuItem.vue
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSkeleton.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSkeleton.vue
new file mode 100644
index 00000000..9bcad9d0
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSkeleton.vue
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSub.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSub.vue
new file mode 100644
index 00000000..0bb5af79
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSub.vue
@@ -0,0 +1,21 @@
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSubButton.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSubButton.vue
new file mode 100644
index 00000000..0c63da14
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSubButton.vue
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSubItem.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSubItem.vue
new file mode 100644
index 00000000..a0cfb71d
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSubItem.vue
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarProvider.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarProvider.vue
new file mode 100644
index 00000000..2b1c4f19
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarProvider.vue
@@ -0,0 +1,79 @@
+
+
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarRail.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarRail.vue
new file mode 100644
index 00000000..9b644cdd
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarRail.vue
@@ -0,0 +1,32 @@
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarSeparator.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarSeparator.vue
new file mode 100644
index 00000000..0da3e269
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarSeparator.vue
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarTrigger.vue b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarTrigger.vue
new file mode 100644
index 00000000..aa5cd942
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/SidebarTrigger.vue
@@ -0,0 +1,26 @@
+
+
+
+
+
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/index.ts b/apps/www/src/lib/registry/new-york/ui/sidebar/index.ts
new file mode 100644
index 00000000..b137821c
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/index.ts
@@ -0,0 +1,51 @@
+import { cva, type VariantProps } 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-none 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',
+ },
+ },
+)
+
+export type SidebarMenuButtonVariants = VariantProps
diff --git a/apps/www/src/lib/registry/new-york/ui/sidebar/utils.ts b/apps/www/src/lib/registry/new-york/ui/sidebar/utils.ts
new file mode 100644
index 00000000..3ded66c4
--- /dev/null
+++ b/apps/www/src/lib/registry/new-york/ui/sidebar/utils.ts
@@ -0,0 +1,19 @@
+import type { ComputedRef, Ref } from 'vue'
+import { createContext } from 'radix-vue'
+
+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<{
+ state: ComputedRef<'expanded' | 'collapsed'>
+ open: Ref
+ setOpen: (value: boolean) => void
+ isMobile: Ref
+ openMobile: Ref
+ setOpenMobile: (value: boolean) => void
+ toggleSidebar: () => void
+}>('Sidebar')