{ "name": "sidebar", "type": "registry:ui", "dependencies": [ "@vueuse/core" ], "registryDependencies": [ "utils", "sheet", "input", "tooltip", "skeleton", "separator", "button" ], "files": [ { "path": "ui/sidebar/Sidebar.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarFooter.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarGroup.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarGroupAction.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarGroupContent.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarGroupLabel.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarHeader.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarInput.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarInset.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenu.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuAction.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuBadge.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuButtonChild.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuSkeleton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuSub.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuSubButton.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarMenuSubItem.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarProvider.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarRail.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarSeparator.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/SidebarTrigger.vue", "content": "\n\n\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/index.ts", "content": "import type { HTMLAttributes } from 'vue'\nimport { cva, type VariantProps } from 'class-variance-authority'\n\nexport interface SidebarProps {\n side?: 'left' | 'right'\n variant?: 'sidebar' | 'floating' | 'inset'\n collapsible?: 'offcanvas' | 'icon' | 'none'\n class?: HTMLAttributes['class']\n}\n\nexport { default as Sidebar } from './Sidebar.vue'\nexport { default as SidebarContent } from './SidebarContent.vue'\nexport { default as SidebarFooter } from './SidebarFooter.vue'\nexport { default as SidebarGroup } from './SidebarGroup.vue'\nexport { default as SidebarGroupAction } from './SidebarGroupAction.vue'\nexport { default as SidebarGroupContent } from './SidebarGroupContent.vue'\nexport { default as SidebarGroupLabel } from './SidebarGroupLabel.vue'\nexport { default as SidebarHeader } from './SidebarHeader.vue'\nexport { default as SidebarInput } from './SidebarInput.vue'\nexport { default as SidebarInset } from './SidebarInset.vue'\nexport { default as SidebarMenu } from './SidebarMenu.vue'\nexport { default as SidebarMenuAction } from './SidebarMenuAction.vue'\nexport { default as SidebarMenuBadge } from './SidebarMenuBadge.vue'\nexport { default as SidebarMenuButton } from './SidebarMenuButton.vue'\nexport { default as SidebarMenuItem } from './SidebarMenuItem.vue'\nexport { default as SidebarMenuSkeleton } from './SidebarMenuSkeleton.vue'\nexport { default as SidebarMenuSub } from './SidebarMenuSub.vue'\nexport { default as SidebarMenuSubButton } from './SidebarMenuSubButton.vue'\nexport { default as SidebarMenuSubItem } from './SidebarMenuSubItem.vue'\nexport { default as SidebarProvider } from './SidebarProvider.vue'\nexport { default as SidebarRail } from './SidebarRail.vue'\nexport { default as SidebarSeparator } from './SidebarSeparator.vue'\nexport { default as SidebarTrigger } from './SidebarTrigger.vue'\n\nexport { useSidebar } from './utils'\n\nexport const sidebarMenuButtonVariants = cva(\n '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',\n {\n variants: {\n variant: {\n default: 'hover:bg-sidebar-accent hover:text-sidebar-accent-foreground',\n outline:\n '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))]',\n },\n size: {\n default: 'h-8 text-sm',\n sm: 'h-7 text-xs',\n lg: 'h-12 text-sm group-data-[collapsible=icon]:!p-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n },\n)\n\nexport type SidebarMenuButtonVariants = VariantProps\n", "type": "registry:ui", "target": "" }, { "path": "ui/sidebar/utils.ts", "content": "import type { ComputedRef, Ref } from 'vue'\nimport { createContext } from 'reka-ui'\n\nexport const SIDEBAR_COOKIE_NAME = 'sidebar:state'\nexport const SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7\nexport const SIDEBAR_WIDTH = '16rem'\nexport const SIDEBAR_WIDTH_MOBILE = '18rem'\nexport const SIDEBAR_WIDTH_ICON = '3rem'\nexport const SIDEBAR_KEYBOARD_SHORTCUT = 'b'\n\nexport const [useSidebar, provideSidebarContext] = createContext<{\n state: ComputedRef<'expanded' | 'collapsed'>\n open: Ref\n setOpen: (value: boolean) => void\n isMobile: Ref\n openMobile: Ref\n setOpenMobile: (value: boolean) => void\n toggleSidebar: () => void\n}>('Sidebar')\n", "type": "registry:ui", "target": "" } ] }