'use client'; import { cn } from '../../../lib'; import { DropdownMenu, DropdownMenuContent, DropdownMenuTrigger, } from '../dropdown-menu'; import { renderItems } from './render-items'; import type { MenuBuilderProps } from './types'; /** * MenuBuilder — declarative menu. * * Pass `items: MenuItem[]` and a trigger; it renders a fully accessible * menu through the existing Radix `DropdownMenu*` primitives (items, * submenus, radio groups, checkboxes, separators, section labels, * shortcuts, icons, descriptions). * * @example * * * */ export function MenuBuilder({ items, children, open, onOpenChange, defaultOpen, side, align = 'start', sideOffset, alignOffset, contentClassName, showDescriptions = true, }: MenuBuilderProps) { return ( {/* The trigger opens the menu on click; suppress its focus-visible ring so there's no stray outline around the avatar/button. */} {children} {renderItems(items, { showDescriptions })} ); }