{
"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 \n \n
\n\n \n \n \n\n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarContent.vue",
"content": "\n\n\n \n \n
\n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarFooter.vue",
"content": "\n\n\n \n \n
\n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarGroup.vue",
"content": "\n\n\n \n \n
\n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarGroupAction.vue",
"content": "\n\n\n svg]:size-4 [&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 after:md:hidden',\n 'group-data-[collapsible=icon]:hidden',\n props.class,\n )\"\n >\n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarGroupContent.vue",
"content": "\n\n\n \n \n
\n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarGroupLabel.vue",
"content": "\n\n\n svg]:size-4 [&>svg]:shrink-0',\n 'group-data-[collapsible=icon]:-mt-8 group-data-[collapsible=icon]:opacity-0',\n props.class)\"\n >\n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarHeader.vue",
"content": "\n\n\n \n \n
\n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarInput.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarInset.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenu.vue",
"content": "\n\n\n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuAction.vue",
"content": "\n\n\n svg]:size-4 [&>svg]:shrink-0',\n // Increases the hit area of the button on mobile.\n 'after:absolute after:-inset-2 after:md:hidden',\n 'peer-data-[size=sm]/menu-button:top-1',\n 'peer-data-[size=default]/menu-button:top-1.5',\n 'peer-data-[size=lg]/menu-button:top-2.5',\n 'group-data-[collapsible=icon]:hidden',\n showOnHover\n && 'group-focus-within/menu-item:opacity-100 group-hover/menu-item:opacity-100 data-[state=open]:opacity-100 peer-data-[active=true]/menu-button:text-sidebar-accent-foreground md:opacity-0',\n props.class,\n )\"\n :as=\"as\"\n :as-child=\"asChild\"\n >\n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuBadge.vue",
"content": "\n\n\n \n \n
\n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuButton.vue",
"content": "\n\n\n \n \n \n\n \n \n \n \n \n \n \n \n {{ tooltip }}\n \n \n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuButtonChild.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuItem.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuSkeleton.vue",
"content": "\n\n\n \n \n\n \n
\n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuSub.vue",
"content": "\n\n\n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuSubButton.vue",
"content": "\n\n\n span:last-child]:truncate [&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground',\n 'data-[active=true]:bg-sidebar-accent data-[active=true]:text-sidebar-accent-foreground',\n size === 'sm' && 'text-xs',\n size === 'md' && 'text-sm',\n 'group-data-[collapsible=icon]:hidden',\n props.class,\n )\"\n >\n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarMenuSubItem.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarProvider.vue",
"content": "\n\n\n \n \n \n
\n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarRail.vue",
"content": "\n\n\n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarSeparator.vue",
"content": "\n\n\n \n \n \n\n",
"type": "registry:ui",
"target": ""
},
{
"path": "ui/sidebar/SidebarTrigger.vue",
"content": "\n\n\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": ""
}
]
}