This component no longer exists. It was in cubby-ui’s manifest when we first indexed it and is not there now — the registry served its inventory on 2026-08-10 and this item was not on it. The install command below will fail. It is kept here because a tutorial somewhere still tells people to run it.
Menubar
cubby-ui/menubarRemovedComponent
A menubar component.
Live preview
live · rendered by the registry
Rendered by cubby-ui on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://cubby-ui.dev/r/menubar.jsonSource
1import { Menu as BaseMenu } from "@base-ui/react/menu";2import { Menubar as BaseMenubar } from "@base-ui/react/menubar";3import { cn } from "@/lib/utils";4import {5 solidSurface,6 type SurfaceLevel,7} from "@/registry/default/lib/elevated";89import { HugeiconsIcon } from "@hugeicons/react";10import { ArrowRight01Icon, Tick02Icon } from "@hugeicons/core-free-icons";11import {12 SwitchVisual,13 type SwitchVisualProps,14} from "@/registry/default/switch/switch";1516// Shared shell for checkbox and radio items. Padding matches the plain menu17// item so labels line up across every item type; the indicator lives in a18// reserved right-hand column so toggling never shifts the label.19const toggleItemClasses =20 "group/switch data-highlighted:bg-surface-hover data-highlighted:text-accent-foreground grid cursor-default items-center rounded-md px-2.5 py-1.5 text-sm outline-hidden select-none data-disabled:pointer-events-none data-disabled:opacity-60 data-inset:pl-8 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4";2122// The tick draws itself in on check. `pathLength` restates the path as 1 unit23// long, so the dash values are fractions of the stroke and survive a HugeIcons24// reshape. Deriving the icon array is the only way to reach the path.25const tickIcon = Tick02Icon.map(([tag, attrs]) => [26 tag,27 { ...attrs, pathLength: 1 },28]) as typeof Tick02Icon;2930const checkmarkClasses =31 "[&_path]:ease-out-expo [&_path]:transition-[stroke-dashoffset] [&_path]:duration-150 [&_path]:[stroke-dasharray:1] in-data-checked:[&_path]:[stroke-dashoffset:0] in-data-unchecked:[&_path]:[stroke-dashoffset:1] motion-reduce:[&_path]:transition-none";3233function Menubar({34 className,35 level = 2,36 shadowLevel = 2,37 ...props38}: React.ComponentProps<typeof BaseMenubar> & {39 /** Surface elevation level (1-8). Defaults to 2 — a subtle inline toolbar that sits just above the page. */40 level?: SurfaceLevel;41 /** Shadow weight (1-8). Defaults to 2. */42 shadowLevel?: SurfaceLevel;43}) {44 return (45 <BaseMenubar46 data-slot="menubar"47 data-level={level}48 className={cn(49 "relative flex h-9 items-center gap-1 rounded-lg p-1",50 solidSurface(level, shadowLevel),51 className,52 )}53 {...props}54 />55 );56}5758function MenubarMenu({ ...props }: React.ComponentProps<typeof BaseMenu.Root>) {59 return <BaseMenu.Root data-slot="menubar-menu" {...props} />;60}6162// … truncated
What it pulls in
npm packages
Other registry items
