From c03d0bedc2a7e0cfa06e0a3ca50dd4c153703fee Mon Sep 17 00:00:00 2001 From: zernonia Date: Tue, 22 Oct 2024 00:30:48 +0200 Subject: [PATCH] feat: add new-york style --- .../ui/sidebar/SidebarMenuSkeleton.vue | 2 +- .../registry/new-york/ui/sidebar/Sidebar.vue | 90 +++++++++++++++++++ .../new-york/ui/sidebar/SidebarContent.vue | 17 ++++ .../new-york/ui/sidebar/SidebarFooter.vue | 17 ++++ .../new-york/ui/sidebar/SidebarGroup.vue | 17 ++++ .../ui/sidebar/SidebarGroupAction.vue | 27 ++++++ .../ui/sidebar/SidebarGroupContent.vue | 17 ++++ .../new-york/ui/sidebar/SidebarGroupLabel.vue | 24 +++++ .../new-york/ui/sidebar/SidebarHeader.vue | 17 ++++ .../new-york/ui/sidebar/SidebarInput.vue | 21 +++++ .../new-york/ui/sidebar/SidebarInset.vue | 20 +++++ .../new-york/ui/sidebar/SidebarMenu.vue | 17 ++++ .../new-york/ui/sidebar/SidebarMenuAction.vue | 32 +++++++ .../new-york/ui/sidebar/SidebarMenuBadge.vue | 25 ++++++ .../new-york/ui/sidebar/SidebarMenuButton.vue | 51 +++++++++++ .../ui/sidebar/SidebarMenuButtonChild.vue | 33 +++++++ .../new-york/ui/sidebar/SidebarMenuItem.vue | 17 ++++ .../ui/sidebar/SidebarMenuSkeleton.vue | 33 +++++++ .../new-york/ui/sidebar/SidebarMenuSub.vue | 21 +++++ .../ui/sidebar/SidebarMenuSubButton.vue | 35 ++++++++ .../ui/sidebar/SidebarMenuSubItem.vue | 8 ++ .../new-york/ui/sidebar/SidebarProvider.vue | 79 ++++++++++++++++ .../new-york/ui/sidebar/SidebarRail.vue | 32 +++++++ .../new-york/ui/sidebar/SidebarSeparator.vue | 18 ++++ .../new-york/ui/sidebar/SidebarTrigger.vue | 26 ++++++ .../lib/registry/new-york/ui/sidebar/index.ts | 51 +++++++++++ .../lib/registry/new-york/ui/sidebar/utils.ts | 19 ++++ 27 files changed, 765 insertions(+), 1 deletion(-) create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/Sidebar.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarContent.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarFooter.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroup.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupAction.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupContent.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarGroupLabel.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarHeader.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarInput.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarInset.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenu.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuAction.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuBadge.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuButton.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuButtonChild.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuItem.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSkeleton.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSub.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSubButton.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarMenuSubItem.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarProvider.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarRail.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarSeparator.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/SidebarTrigger.vue create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/index.ts create mode 100644 apps/www/src/lib/registry/new-york/ui/sidebar/utils.ts 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 @@ + + + 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')