{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "sf-navigation-menu", "title": "SF NavigationMenu", "description": "Site navigation with desktop flyout panels and mobile SFSheet collapse, industrial DU/TDR styling", "dependencies": [ "lucide-react" ], "registryDependencies": [ "navigation-menu", "sheet" ], "files": [ { "path": "components/sf/sf-navigation-menu.tsx", "content": "\"use client\";\n\nimport * as React from \"react\";\nimport {\n NavigationMenu,\n NavigationMenuList,\n NavigationMenuItem,\n NavigationMenuContent,\n NavigationMenuTrigger,\n NavigationMenuLink,\n NavigationMenuViewport,\n} from \"@/components/ui/navigation-menu\";\nimport {\n SFSheet,\n SFSheetTrigger,\n SFSheetContent,\n SFSheetHeader,\n SFSheetTitle,\n} from \"@/components/sf/sf-sheet\";\nimport { cn } from \"@/lib/utils\";\nimport { Menu } from \"lucide-react\";\n\n/**\n * Site navigation — FRAME layer navigation primitive.\n *\n * Desktop (>=768px): Radix NavigationMenu with flyout viewport panels,\n * industrial DU/TDR styling — zero border-radius, 2px borders, mono uppercase.\n *\n * Mobile (<768px): SFSheet slide-out with hamburger trigger for vertical navigation.\n *\n * Compose desktop and mobile together for responsive navigation:\n *\n * @example\n * ```tsx\n * \n * ```\n */\n\n/** SF-wrapped NavigationMenu root with industrial styling. */\nfunction SFNavigationMenu({\n className,\n children,\n viewport = true,\n ...props\n}: React.ComponentProps & { viewport?: boolean }) {\n return (\n \n {children}\n \n );\n}\n\n/** Sub-component of SFNavigationMenu — list container for navigation items. */\nfunction SFNavigationMenuList({\n className,\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\n/** Sub-component of SFNavigationMenu — individual navigation item wrapper. */\nfunction SFNavigationMenuItem({\n className,\n ...props\n}: React.ComponentProps) {\n return ;\n}\n\n/** Sub-component of SFNavigationMenu — trigger button with chevron, industrial styling. */\nfunction SFNavigationMenuTrigger({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\n/** Sub-component of SFNavigationMenu — flyout content panel with preserved motion animations. */\nfunction SFNavigationMenuContent({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\n/** Sub-component of SFNavigationMenu — navigation link with inverted hover state. */\nfunction SFNavigationMenuLink({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\n/** Sub-component of SFNavigationMenu — viewport flyout container with 2px industrial border. */\nfunction SFNavigationMenuViewport({\n className,\n ...props\n}: React.ComponentProps) {\n return (\n \n );\n}\n\n/** Mobile navigation — SFSheet slide-out with hamburger trigger, visible only below md breakpoint. */\nfunction SFNavigationMenuMobile({\n children,\n className,\n title = \"NAVIGATION\",\n}: {\n children: React.ReactNode;\n className?: string;\n title?: string;\n}) {\n return (\n
\n \n \n \n \n \n \n {title}\n \n \n \n \n
\n );\n}\n\nexport {\n SFNavigationMenu,\n SFNavigationMenuList,\n SFNavigationMenuItem,\n SFNavigationMenuTrigger,\n SFNavigationMenuContent,\n SFNavigationMenuLink,\n SFNavigationMenuViewport,\n SFNavigationMenuMobile,\n};\n", "type": "registry:ui" } ], "meta": { "layer": "frame", "pattern": "A" }, "type": "registry:ui" }