{
  "$schema": "https://shadcn-vue.com/schema/registry-item.json",
  "name": "menubar",
  "title": "Menubar",
  "type": "registry:ui",
  "files": [
    {
      "path": "packages/registry-vue/components/menubar/Menubar.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarRootEmits, MenubarRootProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { MenubarRoot, useForwardPropsEmits } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<MenubarRootProps & { class?: HTMLAttributes['class'] }>()\nconst emits = defineEmits<MenubarRootEmits>()\n\nconst delegatedProps = reactiveOmit(props, 'class')\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n  <MenubarRoot\n    v-slot=\"slotProps\"\n    data-uipkge\n    data-slot=\"menubar\"\n    v-bind=\"forwarded\"\n    :class=\"cn('bg-background flex h-9 items-center gap-1 rounded-md border p-1 shadow-xs', props.class)\"\n  >\n    <slot v-bind=\"slotProps\" />\n  </MenubarRoot>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/Menubar.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarCheckboxItem.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarCheckboxItemEmits, MenubarCheckboxItemProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { Check } from 'lucide-vue-next'\nimport { MenubarCheckboxItem, MenubarItemIndicator, useForwardPropsEmits } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<MenubarCheckboxItemProps & { class?: HTMLAttributes['class'] }>()\nconst emits = defineEmits<MenubarCheckboxItemEmits>()\n\nconst delegatedProps = reactiveOmit(props, 'class')\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n  <MenubarCheckboxItem\n    data-uipkge\n    data-slot=\"menubar-checkbox-item\"\n    v-bind=\"forwarded\"\n    :class=\"\n      cn(\n        'focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus-visible:ring-2 focus-visible:ring-inset data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\n        props.class\n      )\n    \"\n  >\n    <span class=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n      <MenubarItemIndicator>\n        <slot name=\"indicator-icon\">\n          <Check class=\"size-4\" aria-hidden=\"true\" />\n        </slot>\n      </MenubarItemIndicator>\n    </span>\n    <slot />\n  </MenubarCheckboxItem>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarCheckboxItem.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarContent.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarContentProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { MenubarContent, MenubarPortal, useForwardProps } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = withDefaults(defineProps<MenubarContentProps & { class?: HTMLAttributes['class'] }>(), {\n  align: 'start',\n  alignOffset: -4,\n  sideOffset: 8,\n})\n\nconst delegatedProps = reactiveOmit(props, 'class')\n\nconst forwardedProps = useForwardProps(delegatedProps)\n</script>\n\n<template>\n  <MenubarPortal>\n    <MenubarContent\n      data-uipkge\n      data-slot=\"menubar-content\"\n      v-bind=\"{ ...$attrs, ...forwardedProps }\"\n      :class=\"\n        cn(\n          'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[12rem] origin-(--reka-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-md',\n          props.class,\n        )\n      \"\n    >\n      <slot />\n    </MenubarContent>\n  </MenubarPortal>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarContent.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarGroup.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarGroupProps } from 'reka-ui'\nimport { MenubarGroup } from 'reka-ui'\n\nconst props = defineProps<MenubarGroupProps>()\n</script>\n\n<template>\n  <MenubarGroup data-uipkge data-slot=\"menubar-group\" v-bind=\"props\">\n    <slot />\n  </MenubarGroup>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarGroup.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarItem.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarItemEmits, MenubarItemProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { MenubarItem, useForwardPropsEmits } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<\n  MenubarItemProps & {\n    class?: HTMLAttributes['class']\n    inset?: boolean\n    variant?: 'default' | 'destructive'\n  }\n>()\n\nconst emits = defineEmits<MenubarItemEmits>()\n\nconst delegatedProps = reactiveOmit(props, 'class', 'inset', 'variant')\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n  <MenubarItem\n    data-uipkge\n    data-slot=\"menubar-item\"\n    :data-inset=\"inset ? '' : undefined\"\n    :data-variant=\"variant\"\n    v-bind=\"forwarded\"\n    :class=\"\n      cn(\n        'focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring data-[variant=destructive]:text-destructive data-[variant=destructive]:focus:bg-destructive/10 dark:data-[variant=destructive]:focus:bg-destructive/40 data-[variant=destructive]:focus:text-destructive data-[variant=destructive]:*:[svg]:!text-destructive [&_svg:not([class*=\\'text-\\'])]:text-muted-foreground relative flex cursor-default items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-hidden select-none focus-visible:ring-2 focus-visible:ring-inset data-[disabled]:pointer-events-none data-[disabled]:opacity-50 data-[inset]:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\n        props.class\n      )\n    \"\n  >\n    <slot />\n  </MenubarItem>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarItem.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarLabel.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarLabelProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { MenubarLabel } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<MenubarLabelProps & { class?: HTMLAttributes['class']; inset?: boolean }>()\nconst delegatedProps = reactiveOmit(props, 'class', 'inset')\n</script>\n\n<template>\n  <MenubarLabel\n    :data-inset=\"inset ? '' : undefined\"\n    v-bind=\"delegatedProps\"\n    :class=\"cn('px-2 py-1.5 text-sm font-medium data-[inset]:pl-8', props.class)\"\n  >\n    <slot />\n  </MenubarLabel>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarLabel.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarMenu.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarMenuProps } from 'reka-ui'\nimport { MenubarMenu } from 'reka-ui'\n\nconst props = defineProps<MenubarMenuProps>()\n</script>\n\n<template>\n  <MenubarMenu data-uipkge data-slot=\"menubar-menu\" v-bind=\"props\">\n    <slot />\n  </MenubarMenu>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarMenu.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarRadioGroup.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarRadioGroupEmits, MenubarRadioGroupProps } from 'reka-ui'\nimport { MenubarRadioGroup, useForwardPropsEmits } from 'reka-ui'\n\nconst props = defineProps<MenubarRadioGroupProps>()\nconst emits = defineEmits<MenubarRadioGroupEmits>()\n\nconst forwarded = useForwardPropsEmits(props, emits)\n</script>\n\n<template>\n  <MenubarRadioGroup data-uipkge data-slot=\"menubar-radio-group\" v-bind=\"forwarded\">\n    <slot />\n  </MenubarRadioGroup>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarRadioGroup.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarRadioItem.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarRadioItemEmits, MenubarRadioItemProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { Circle } from 'lucide-vue-next'\nimport { MenubarItemIndicator, MenubarRadioItem, useForwardPropsEmits } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<MenubarRadioItemProps & { class?: HTMLAttributes['class'] }>()\nconst emits = defineEmits<MenubarRadioItemEmits>()\n\nconst delegatedProps = reactiveOmit(props, 'class')\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n  <MenubarRadioItem\n    data-uipkge\n    data-slot=\"menubar-radio-item\"\n    v-bind=\"forwarded\"\n    :class=\"\n      cn(\n        'focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring relative flex cursor-default items-center gap-2 rounded-xs py-1.5 pr-2 pl-8 text-sm outline-hidden select-none focus-visible:ring-2 focus-visible:ring-inset data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*=\\'size-\\'])]:size-4',\n        props.class\n      )\n    \"\n  >\n    <span class=\"pointer-events-none absolute left-2 flex size-3.5 items-center justify-center\">\n      <MenubarItemIndicator>\n        <slot name=\"indicator-icon\">\n          <Circle class=\"size-2 fill-current\" />\n        </slot>\n      </MenubarItemIndicator>\n    </span>\n    <slot />\n  </MenubarRadioItem>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarRadioItem.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarSeparator.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarSeparatorProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { MenubarSeparator, useForwardProps } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<MenubarSeparatorProps & { class?: HTMLAttributes['class'] }>()\n\nconst delegatedProps = reactiveOmit(props, 'class')\n\nconst forwardedProps = useForwardProps(delegatedProps)\n</script>\n\n<template>\n  <MenubarSeparator\n    data-uipkge\n    data-slot=\"menubar-separator\"\n    :class=\"cn('bg-border -mx-1 my-1 h-px', props.class)\"\n    v-bind=\"forwardedProps\"\n  />\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarSeparator.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarShortcut.vue",
      "content": "<script setup lang=\"ts\">\nimport type { HTMLAttributes } from 'vue'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<{\n  class?: HTMLAttributes['class']\n}>()\n</script>\n\n<template>\n  <span\n    data-uipkge\n    data-slot=\"menubar-shortcut\"\n    :class=\"cn('text-muted-foreground ml-auto text-xs tracking-widest', props.class)\"\n  >\n    <slot />\n  </span>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarShortcut.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarSub.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarSubEmits } from 'reka-ui'\nimport { MenubarSub, useForwardPropsEmits } from 'reka-ui'\n\ninterface MenubarSubRootProps {\n  defaultOpen?: boolean\n  open?: boolean\n}\n\nconst props = defineProps<MenubarSubRootProps>()\nconst emits = defineEmits<MenubarSubEmits>()\n\nconst forwarded = useForwardPropsEmits(props, emits)\n</script>\n\n<template>\n  <MenubarSub v-slot=\"slotProps\" data-uipkge data-slot=\"menubar-sub\" v-bind=\"forwarded\">\n    <slot v-bind=\"slotProps\" />\n  </MenubarSub>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarSub.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarSubContent.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarSubContentEmits, MenubarSubContentProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { MenubarPortal, MenubarSubContent, useForwardPropsEmits } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\ndefineOptions({\n  inheritAttrs: false,\n})\n\nconst props = defineProps<MenubarSubContentProps & { class?: HTMLAttributes['class'] }>()\nconst emits = defineEmits<MenubarSubContentEmits>()\n\nconst delegatedProps = reactiveOmit(props, 'class')\n\nconst forwarded = useForwardPropsEmits(delegatedProps, emits)\n</script>\n\n<template>\n  <MenubarPortal>\n    <MenubarSubContent\n      data-uipkge\n      data-slot=\"menubar-sub-content\"\n      v-bind=\"{ ...$attrs, ...forwarded }\"\n      :class=\"\n        cn(\n          'bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 z-50 min-w-[8rem] origin-(--reka-menubar-content-transform-origin) overflow-hidden rounded-md border p-1 shadow-lg',\n          props.class,\n        )\n      \"\n    >\n      <slot />\n    </MenubarSubContent>\n  </MenubarPortal>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarSubContent.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarSubTrigger.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarSubTriggerProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { ChevronRight } from 'lucide-vue-next'\nimport { MenubarSubTrigger, useForwardProps } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<MenubarSubTriggerProps & { class?: HTMLAttributes['class']; inset?: boolean }>()\n\nconst delegatedProps = reactiveOmit(props, 'class', 'inset')\nconst forwardedProps = useForwardProps(delegatedProps)\n</script>\n\n<template>\n  <MenubarSubTrigger\n    data-uipkge\n    data-slot=\"menubar-sub-trigger\"\n    :data-inset=\"inset ? '' : undefined\"\n    v-bind=\"forwardedProps\"\n    :class=\"\n      cn(\n        'focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex cursor-default items-center rounded-sm px-2 py-1.5 text-sm outline-none select-none focus-visible:ring-2 focus-visible:ring-inset data-[inset]:pl-8',\n        props.class,\n      )\n    \"\n  >\n    <slot />\n    <ChevronRight class=\"ml-auto size-4\" />\n  </MenubarSubTrigger>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarSubTrigger.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/MenubarTrigger.vue",
      "content": "<script setup lang=\"ts\">\nimport type { MenubarTriggerProps } from 'reka-ui'\nimport type { HTMLAttributes } from 'vue'\nimport { reactiveOmit } from '@vueuse/core'\nimport { MenubarTrigger, useForwardProps } from 'reka-ui'\nimport { cn } from '@/lib/utils'\n\nconst props = defineProps<MenubarTriggerProps & { class?: HTMLAttributes['class'] }>()\n\nconst delegatedProps = reactiveOmit(props, 'class')\n\nconst forwardedProps = useForwardProps(delegatedProps)\n</script>\n\n<template>\n  <MenubarTrigger\n    data-uipkge\n    data-slot=\"menubar-trigger\"\n    v-bind=\"forwardedProps\"\n    :class=\"\n      cn(\n        'focus:bg-accent focus:text-accent-foreground data-[state=open]:bg-accent data-[state=open]:text-accent-foreground flex items-center rounded-sm px-2 py-1 text-sm font-medium outline-hidden select-none',\n        props.class,\n      )\n    \"\n  >\n    <slot />\n  </MenubarTrigger>\n</template>\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/MenubarTrigger.vue"
    },
    {
      "path": "packages/registry-vue/components/menubar/index.ts",
      "content": "export { default as Menubar } from './Menubar.vue'\nexport { default as MenubarCheckboxItem } from './MenubarCheckboxItem.vue'\nexport { default as MenubarContent } from './MenubarContent.vue'\nexport { default as MenubarGroup } from './MenubarGroup.vue'\nexport { default as MenubarItem } from './MenubarItem.vue'\nexport { default as MenubarLabel } from './MenubarLabel.vue'\nexport { default as MenubarMenu } from './MenubarMenu.vue'\nexport { default as MenubarRadioGroup } from './MenubarRadioGroup.vue'\nexport { default as MenubarRadioItem } from './MenubarRadioItem.vue'\nexport { default as MenubarSeparator } from './MenubarSeparator.vue'\nexport { default as MenubarShortcut } from './MenubarShortcut.vue'\nexport { default as MenubarSub } from './MenubarSub.vue'\nexport { default as MenubarSubContent } from './MenubarSubContent.vue'\nexport { default as MenubarSubTrigger } from './MenubarSubTrigger.vue'\nexport { default as MenubarTrigger } from './MenubarTrigger.vue'\n",
      "type": "registry:ui",
      "target": "~/app/components/ui/menubar/index.ts"
    }
  ],
  "dependencies": [
    "@vueuse/core",
    "lucide-vue-next",
    "reka-ui"
  ],
  "devDependencies": [],
  "registryDependencies": [],
  "description": "Top-level menu bar — File / Edit / View — for desktop-style apps. Same primitives as Dropdown Menu but laid out horizontally and keyboard-navigable across siblings (left/right arrows).",
  "categories": [
    "navigation"
  ]
}