UNPKG

@birhaus/navigation

Version:

BIRHAUS Navigation Components - FourThreeOneNav implementing 4-3-1 cognitive rule

1 lines 50.5 kB
{"version":3,"sources":["../src/components/DesktopNavigation.tsx","../src/components/MobileNavigation.tsx","../src/components/LogoSection.tsx","../src/components/MobileMenuButton.tsx","../src/components/SearchAndCommandPalette.tsx","../src/components/ContextualActions.tsx","../src/components/FourThreeOneNav.tsx"],"names":["cn","classes","DesktopBadge","children","variant","className","jsx","v","Submenu","items","onClose","subitem","jsxs","NavItem","item","activeSubmenu","onItemClick","onSubmenuToggle","ChevronDown","OverflowMenu","overflowLabel","DesktopNavigation","visibleNavItems","overflowNavItems","overflowBehavior","bp","hasOverflow","MobileButton","disabled","loading","onClick","MobileBadge","MobileNavigation","navigationItems","contextualActions","primaryAction","onCloseMobileMenu","action","LogoSection","logo","logoHref","onLogoClick","MobileMenuButton","isOpen","onToggle","collapsible","menuLabel","closeMenuLabel","X","Menu","SearchAndCommandPalette","showSearch","onSearchClick","searchLabel","searchPlaceholder","showCommandPalette","onCommandPaletteToggle","commandPaletteLabel","commandPaletteShortcut","Fragment","Search","Command","ActionButton","size","baseClasses","getVariantClass","getSizeClass","s","ContextualActions","ActionsSection","FourThreeOneNav","mobileBreakpoint","isMobileMenuOpen","setIsMobileMenuOpen","useState","setActiveSubmenu","useEffect","visibleContextualActions","breakpoint","getNavVariantClass","handleNavItemClick","handleKeyDown","useCallback","e","useFourThreeOneNav","activeItem","setActiveItem","itemId","prev"],"mappings":"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","file":"index.mjs","sourcesContent":["'use client'\n\nimport { ChevronDown } from 'lucide-react'\nimport { NavigationItem } from './FourThreeOneNav'\n\n// BIRHAUS: Utility function (replaces @/lib/utils cn)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\n// BIRHAUS: Self-contained Badge component\nfunction DesktopBadge({\n children,\n variant = 'default',\n className = ''\n}: {\n children: React.ReactNode\n variant?: 'default' | 'secondary' | 'destructive'\n className?: string\n}) {\n const baseClasses = \"inline-flex items-center rounded-full px-2 py-1 text-xs font-medium\"\n \n const getVariantClass = (v: typeof variant): string => {\n switch (v) {\n case 'default': return \"bg-blue-100 text-blue-800\"\n case 'secondary': return \"bg-gray-100 text-gray-800\"\n case 'destructive': return \"bg-red-100 text-red-800\"\n default: return \"bg-blue-100 text-blue-800\"\n }\n }\n\n return (\n <span className={cn(baseClasses, getVariantClass(variant), className)}>\n {children}\n </span>\n )\n}\n\n// Helper component for submenu rendering\nfunction Submenu({ \n items, \n onClose \n}: {\n items: NavigationItem[]\n onClose: () => void\n}) {\n return (\n <div className=\"absolute top-full left-0 mt-1 w-64 bg-white border border-gray-200 rounded-md shadow-lg z-50\">\n <div className=\"py-1\">\n {items.map((subitem) => (\n <button\n key={subitem.id}\n onClick={() => {\n subitem.onClick?.()\n onClose()\n }}\n disabled={subitem.disabled}\n className={cn(\n \"w-full text-left px-4 py-2 text-sm transition-colors\",\n \"hover:bg-gray-50 focus:outline-none focus:bg-gray-50\",\n subitem.active && \"text-blue-700 bg-blue-50\",\n subitem.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n <div className=\"flex items-center space-x-2\">\n {subitem.icon && <span className=\"flex-shrink-0\">{subitem.icon}</span>}\n <span>{subitem.label}</span>\n {subitem.badge && (\n <DesktopBadge variant=\"secondary\" className=\"ml-auto\">\n {subitem.badge}\n </DesktopBadge>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )\n}\n\n// Helper component for navigation item rendering\nfunction NavItem({ \n item, \n activeSubmenu, \n onItemClick, \n onSubmenuToggle \n}: {\n item: NavigationItem\n activeSubmenu: string | null\n onItemClick: (item: NavigationItem) => void\n onSubmenuToggle: (itemId: string | null) => void\n}) {\n return (\n <div className=\"relative\">\n <button\n onClick={() => onItemClick(item)}\n disabled={item.disabled}\n className={cn(\n \"flex items-center space-x-1 px-3 py-2 rounded-md text-sm font-medium transition-colors\",\n \"focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\",\n item.active \n ? \"text-blue-700 bg-blue-50\"\n : \"text-gray-700 hover:text-gray-900 hover:bg-gray-50\",\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n aria-current={item.active ? 'page' : undefined}\n aria-expanded={item.submenu ? activeSubmenu === item.id : undefined}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n {item.badge && (\n <DesktopBadge variant=\"default\" className=\"ml-1\">\n {item.badge}\n </DesktopBadge>\n )}\n {item.submenu && (\n <ChevronDown className=\"ml-1 h-4 w-4 flex-shrink-0\" />\n )}\n </button>\n \n {/* Submenu */}\n {item.submenu && activeSubmenu === item.id && (\n <Submenu \n items={item.submenu} \n onClose={() => onSubmenuToggle(null)}\n />\n )}\n </div>\n )\n}\n\n// Overflow menu component\nfunction OverflowMenu({\n items,\n activeSubmenu,\n onItemClick,\n onSubmenuToggle,\n overflowLabel\n}: {\n items: NavigationItem[]\n activeSubmenu: string | null\n onItemClick: (item: NavigationItem) => void\n onSubmenuToggle: (itemId: string | null) => void\n overflowLabel: string\n}) {\n if (items.length === 0) return null\n\n return (\n <div className=\"relative\">\n <button\n onClick={() => onSubmenuToggle(activeSubmenu === 'overflow' ? null : 'overflow')}\n className=\"flex items-center space-x-1 px-3 py-2 rounded-md text-sm font-medium text-gray-700 hover:text-gray-900 hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\"\n >\n <span>{overflowLabel}</span>\n <ChevronDown className=\"ml-1 h-4 w-4\" />\n </button>\n \n {activeSubmenu === 'overflow' && (\n <div className=\"absolute top-full right-0 mt-1 w-64 bg-white border border-gray-200 rounded-md shadow-lg z-50\">\n <div className=\"py-1\">\n {items.map((item) => (\n <button\n key={item.id}\n onClick={() => {\n onItemClick(item)\n onSubmenuToggle(null)\n }}\n disabled={item.disabled}\n className={cn(\n \"w-full text-left px-4 py-2 text-sm transition-colors\",\n \"hover:bg-gray-50 focus:outline-none focus:bg-gray-50\",\n item.active && \"text-blue-700 bg-blue-50\",\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n >\n <div className=\"flex items-center space-x-2\">\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span>{item.label}</span>\n {item.badge && (\n <DesktopBadge variant=\"secondary\" className=\"ml-auto\">\n {item.badge}\n </DesktopBadge>\n )}\n </div>\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n )\n}\n\ninterface DesktopNavigationProps {\n visibleNavItems: NavigationItem[]\n overflowNavItems: NavigationItem[]\n activeSubmenu: string | null\n onItemClick: (item: NavigationItem) => void\n onSubmenuToggle: (itemId: string | null) => void\n overflowBehavior: 'hide' | 'collapse' | 'scroll'\n overflowLabel: string\n bp: string\n}\n\nexport function DesktopNavigation({\n visibleNavItems,\n overflowNavItems,\n activeSubmenu,\n onItemClick,\n onSubmenuToggle,\n overflowBehavior,\n overflowLabel,\n bp\n}: DesktopNavigationProps) {\n const hasOverflow = overflowNavItems.length > 0\n\n return (\n <div className={cn('hidden', `${bp}:flex`, 'items-center space-x-8')}>\n {visibleNavItems.map((item) => (\n <NavItem\n key={item.id}\n item={item}\n activeSubmenu={activeSubmenu}\n onItemClick={onItemClick}\n onSubmenuToggle={onSubmenuToggle}\n />\n ))}\n \n {/* BIRHAUS: Overflow menu for items > 4 */}\n {hasOverflow && overflowBehavior === 'collapse' && (\n <OverflowMenu\n items={overflowNavItems}\n activeSubmenu={activeSubmenu}\n onItemClick={onItemClick}\n onSubmenuToggle={onSubmenuToggle}\n overflowLabel={overflowLabel}\n />\n )}\n </div>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { NavigationItem, ContextualAction, PrimaryAction } from './FourThreeOneNav'\n\n// BIRHAUS: Utility function (replaces @/lib/utils cn)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\n// BIRHAUS: Self-contained Button component for mobile\nfunction MobileButton({\n children,\n variant = 'default',\n disabled = false,\n loading = false,\n onClick,\n className = ''\n}: {\n children: ReactNode\n variant?: 'default' | 'secondary' | 'destructive' | 'primary'\n disabled?: boolean\n loading?: boolean\n onClick?: () => void\n className?: string\n}) {\n const baseClasses = \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\"\n \n const getVariantClass = (v: typeof variant): string => {\n switch (v) {\n case 'default': return \"bg-white border border-gray-300 text-gray-900 hover:bg-gray-50 focus-visible:ring-blue-500\"\n case 'secondary': return \"bg-gray-100 text-gray-900 hover:bg-gray-200 focus-visible:ring-gray-500\"\n case 'destructive': return \"bg-red-600 text-white hover:bg-red-700 focus-visible:ring-red-500\"\n case 'primary': return \"bg-blue-600 text-white hover:bg-blue-700 focus-visible:ring-blue-500\"\n default: return \"bg-white border border-gray-300 text-gray-900 hover:bg-gray-50 focus-visible:ring-blue-500\"\n }\n }\n\n return (\n <button\n onClick={onClick}\n disabled={disabled || loading}\n className={cn(baseClasses, getVariantClass(variant), \"h-10 px-4 py-2 text-sm rounded-md\", className)}\n >\n {loading ? (\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-current mr-2\"></div>\n ) : null}\n {children}\n </button>\n )\n}\n\n// BIRHAUS: Self-contained Badge component for mobile\nfunction MobileBadge({\n children,\n variant = 'default',\n className = ''\n}: {\n children: ReactNode\n variant?: 'default' | 'secondary' | 'destructive'\n className?: string\n}) {\n const baseClasses = \"inline-flex items-center rounded-full px-2 py-1 text-xs font-medium\"\n \n const getVariantClass = (v: typeof variant): string => {\n switch (v) {\n case 'default': return \"bg-blue-100 text-blue-800\"\n case 'secondary': return \"bg-gray-100 text-gray-800\"\n case 'destructive': return \"bg-red-100 text-red-800\"\n default: return \"bg-blue-100 text-blue-800\"\n }\n }\n\n return (\n <span className={cn(baseClasses, getVariantClass(variant), className)}>\n {children}\n </span>\n )\n}\n\ninterface MobileNavigationProps {\n navigationItems: NavigationItem[]\n contextualActions: ContextualAction[]\n primaryAction?: PrimaryAction\n onItemClick: (item: NavigationItem) => void\n onCloseMobileMenu: () => void\n bp: string\n}\n\nexport function MobileNavigation({\n navigationItems,\n contextualActions,\n primaryAction,\n onItemClick,\n onCloseMobileMenu,\n bp\n}: MobileNavigationProps) {\n return (\n <div className={cn(`${bp}:hidden`, 'border-t border-gray-200 pt-4 pb-4')}>\n <div className=\"space-y-1\">\n {navigationItems.map((item) => (\n <button\n key={item.id}\n onClick={() => onItemClick(item)}\n disabled={item.disabled}\n className={cn(\n \"w-full text-left flex items-center space-x-3 px-3 py-2 rounded-md text-base font-medium transition-colors\",\n \"focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500\",\n item.active \n ? \"text-blue-700 bg-blue-50\"\n : \"text-gray-700 hover:text-gray-900 hover:bg-gray-50\",\n item.disabled && \"opacity-50 cursor-not-allowed\"\n )}\n aria-current={item.active ? 'page' : undefined}\n >\n {item.icon && <span className=\"flex-shrink-0\">{item.icon}</span>}\n <span className=\"flex-1\">{item.label}</span>\n {item.badge && (\n <MobileBadge variant=\"default\">\n {item.badge}\n </MobileBadge>\n )}\n </button>\n ))}\n </div>\n \n {/* Mobile Actions */}\n {(contextualActions.length > 0 || primaryAction) && (\n <div className=\"mt-4 pt-4 border-t border-gray-200 space-y-2\">\n {contextualActions.map((action) => (\n <MobileButton\n key={action.id}\n onClick={() => {\n action.onClick()\n onCloseMobileMenu()\n }}\n variant={action.variant === 'destructive' ? 'destructive' : 'secondary'}\n disabled={action.disabled}\n loading={action.loading}\n className=\"w-full justify-center\"\n >\n {action.icon && <span className=\"mr-2\">{action.icon}</span>}\n {action.label}\n </MobileButton>\n ))}\n \n {primaryAction && (\n <MobileButton\n onClick={() => {\n primaryAction.onClick()\n onCloseMobileMenu()\n }}\n variant=\"primary\"\n disabled={primaryAction.disabled}\n loading={primaryAction.loading}\n className=\"w-full justify-center\"\n >\n {primaryAction.icon && <span className=\"mr-2\">{primaryAction.icon}</span>}\n {primaryAction.label}\n </MobileButton>\n )}\n </div>\n )}\n </div>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\n\ninterface LogoSectionProps {\n logo?: ReactNode\n logoHref?: string\n onLogoClick?: () => void\n}\n\nexport function LogoSection({ logo, logoHref, onLogoClick }: LogoSectionProps) {\n if (!logo) return null\n\n return (\n <div className=\"flex-shrink-0\">\n <div className=\"flex items-center\">\n {logoHref ? (\n <a href={logoHref} className=\"flex items-center\">\n {logo}\n </a>\n ) : (\n <button \n onClick={onLogoClick}\n className=\"flex items-center focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded\"\n >\n {logo}\n </button>\n )}\n </div>\n </div>\n )\n}\n","'use client'\n\nimport { Menu, X } from 'lucide-react'\n\n// BIRHAUS: Utility function (replaces @/lib/utils cn)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\ninterface MobileMenuButtonProps {\n isOpen: boolean\n onToggle: () => void\n collapsible: boolean\n menuLabel: string\n closeMenuLabel: string\n bp: string\n}\n\nexport function MobileMenuButton({\n isOpen,\n onToggle,\n collapsible,\n menuLabel,\n closeMenuLabel,\n bp\n}: MobileMenuButtonProps) {\n if (!collapsible) return null\n\n return (\n <button\n onClick={onToggle}\n className={cn(\n `${bp}:hidden`,\n 'p-2 text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded'\n )}\n aria-expanded={isOpen}\n aria-label={isOpen ? closeMenuLabel : menuLabel}\n >\n {isOpen ? (\n <X className=\"h-6 w-6\" />\n ) : (\n <Menu className=\"h-6 w-6\" />\n )}\n </button>\n )\n}\n","'use client'\n\nimport { Search, Command } from 'lucide-react'\n\n// BIRHAUS: Utility function (replaces @/lib/utils cn)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\ninterface SearchAndCommandPaletteProps {\n showSearch: boolean\n onSearchClick?: () => void\n searchLabel: string\n searchPlaceholder: string\n showCommandPalette: boolean\n onCommandPaletteToggle?: () => void\n commandPaletteLabel: string\n commandPaletteShortcut: string\n bp: string\n}\n\nexport function SearchAndCommandPalette({\n showSearch,\n onSearchClick,\n searchLabel,\n searchPlaceholder,\n showCommandPalette,\n onCommandPaletteToggle,\n commandPaletteLabel,\n commandPaletteShortcut,\n bp\n}: SearchAndCommandPaletteProps) {\n return (\n <>\n {/* Search */}\n {showSearch && (\n <button\n onClick={onSearchClick}\n className=\"p-2 text-gray-400 hover:text-gray-600 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 rounded\"\n aria-label={searchLabel}\n title={searchPlaceholder}\n >\n <Search className=\"h-5 w-5\" />\n </button>\n )}\n \n {/* Command Palette */}\n {showCommandPalette && (\n <button\n onClick={onCommandPaletteToggle}\n className={cn(\n 'hidden', `${bp}:flex`,\n 'items-center space-x-2 px-3 py-1 text-sm text-gray-600 bg-gray-50 hover:bg-gray-100 rounded-md transition-colors',\n 'focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500'\n )}\n aria-label={commandPaletteLabel}\n >\n <Command className=\"h-4 w-4\" />\n <span className=\"text-xs\">{commandPaletteShortcut}</span>\n </button>\n )}\n </>\n )\n}\n","'use client'\n\nimport { ReactNode } from 'react'\nimport { ContextualAction, PrimaryAction } from './FourThreeOneNav'\n\n// BIRHAUS: Utility function (replaces @/lib/utils cn)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\n// BIRHAUS: Self-contained Button component for actions\nfunction ActionButton({\n children,\n variant = 'default',\n size = 'default',\n disabled = false,\n loading = false,\n onClick,\n className = ''\n}: {\n children: ReactNode\n variant?: 'default' | 'secondary' | 'destructive' | 'ghost' | 'primary'\n size?: 'sm' | 'default' | 'lg'\n disabled?: boolean\n loading?: boolean\n onClick?: () => void\n className?: string\n}) {\n const baseClasses = \"inline-flex items-center justify-center font-medium transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\"\n \n const getVariantClass = (v: typeof variant): string => {\n switch (v) {\n case 'default': return \"bg-white border border-gray-300 text-gray-900 hover:bg-gray-50 focus-visible:ring-blue-500\"\n case 'secondary': return \"bg-gray-100 text-gray-900 hover:bg-gray-200 focus-visible:ring-gray-500\"\n case 'destructive': return \"bg-red-600 text-white hover:bg-red-700 focus-visible:ring-red-500\"\n case 'ghost': return \"text-gray-600 hover:text-gray-900 hover:bg-gray-100 focus-visible:ring-gray-500\"\n case 'primary': return \"bg-blue-600 text-white hover:bg-blue-700 focus-visible:ring-blue-500\"\n default: return \"bg-white border border-gray-300 text-gray-900 hover:bg-gray-50 focus-visible:ring-blue-500\"\n }\n }\n\n const getSizeClass = (s: typeof size): string => {\n switch (s) {\n case 'sm': return \"h-8 px-3 text-sm rounded-md\"\n case 'default': return \"h-10 px-4 py-2 text-sm rounded-md\"\n case 'lg': return \"h-12 px-6 text-base rounded-lg\"\n default: return \"h-10 px-4 py-2 text-sm rounded-md\"\n }\n }\n\n return (\n <button\n onClick={onClick}\n disabled={disabled || loading}\n className={cn(baseClasses, getVariantClass(variant), getSizeClass(size), className)}\n >\n {loading ? (\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-current mr-2\"></div>\n ) : null}\n {children}\n </button>\n )\n}\n\ninterface ContextualActionsProps {\n contextualActions: ContextualAction[]\n primaryAction?: PrimaryAction\n bp: string\n}\n\nexport function ContextualActions({\n contextualActions,\n primaryAction,\n bp\n}: ContextualActionsProps) {\n return (\n <>\n {/* BIRHAUS: Contextual Actions (max 3) */}\n <div className={cn('hidden', `${bp}:flex`, 'items-center space-x-2')}>\n {contextualActions.map((action) => (\n <ActionButton\n key={action.id}\n onClick={action.onClick}\n variant={action.variant === 'destructive' ? 'destructive' : 'ghost'}\n disabled={action.disabled}\n loading={action.loading}\n size=\"sm\"\n >\n {action.icon && <span className=\"mr-1\">{action.icon}</span>}\n {action.label}\n </ActionButton>\n ))}\n </div>\n \n {/* BIRHAUS: Primary Action */}\n {primaryAction && (\n <ActionButton\n onClick={primaryAction.onClick}\n variant=\"primary\"\n disabled={primaryAction.disabled}\n loading={primaryAction.loading}\n className={cn('hidden', `${bp}:inline-flex`)}\n >\n {primaryAction.icon && <span className=\"mr-2\">{primaryAction.icon}</span>}\n {primaryAction.label}\n </ActionButton>\n )}\n </>\n )\n}\n","'use client'\n\nimport { useState, ReactNode, useEffect, useCallback } from 'react'\nimport { DesktopNavigation } from './DesktopNavigation'\nimport { MobileNavigation } from './MobileNavigation'\nimport { LogoSection } from './LogoSection'\nimport { MobileMenuButton } from './MobileMenuButton'\nimport { SearchAndCommandPalette } from './SearchAndCommandPalette'\nimport { ContextualActions } from './ContextualActions'\n\n/**\n * BIRHAUS FourThreeOneNav Component\n * \n * Implements BIRHAUS principle #1: \"Form serves flow\" with 4-3-1 cognitive rule:\n * - Maximum 4 primary navigation items (Miller's Law: 7±2, optimized for 4)\n * - Maximum 3 contextual actions per view\n * - 1 primary action (clearly highlighted)\n * \n * Features:\n * - Spanish-first internationalization\n * - Mobile-first responsive design\n * - Progressive disclosure for overflow items\n * - WCAG AA+ accessibility compliance\n * - Command palette integration (⌘K)\n */\n\n// BIRHAUS: Utility function (replaces @/lib/utils cn)\nfunction cn(...classes: (string | undefined | null | false)[]): string {\n return classes.filter(Boolean).join(' ')\n}\n\nexport interface NavigationItem {\n id: string\n label: string\n labelEn?: string // Optional English translation\n icon?: ReactNode\n href?: string\n onClick?: () => void\n active?: boolean\n disabled?: boolean\n badge?: string | number // Notification count/label\n submenu?: NavigationItem[]\n}\n\nexport interface ContextualAction {\n id: string\n label: string\n labelEn?: string\n icon?: ReactNode\n onClick: () => void\n variant?: 'default' | 'secondary' | 'destructive'\n disabled?: boolean\n loading?: boolean\n}\n\nexport interface PrimaryAction {\n label: string\n labelEn?: string\n icon?: ReactNode\n onClick: () => void\n disabled?: boolean\n loading?: boolean\n}\n\nexport interface FourThreeOneNavProps {\n // BIRHAUS: Maximum 4 navigation items\n navigationItems: NavigationItem[]\n \n // BIRHAUS: Maximum 3 contextual actions \n contextualActions?: ContextualAction[]\n \n // BIRHAUS: 1 primary action\n primaryAction?: PrimaryAction\n \n // Logo/Brand\n logo?: ReactNode\n logoHref?: string\n onLogoClick?: () => void\n \n // Search integration\n searchPlaceholder?: string\n onSearchClick?: () => void\n showSearch?: boolean\n \n // Command palette\n showCommandPalette?: boolean\n onCommandPaletteToggle?: () => void\n commandPaletteShortcut?: string\n \n // Mobile behavior\n mobileBreakpoint?: 'sm' | 'md' | 'lg'\n collapsible?: boolean\n \n // Spanish-first labels\n menuLabel?: string\n closeMenuLabel?: string\n searchLabel?: string\n commandPaletteLabel?: string\n \n // Styling\n className?: string\n variant?: 'default' | 'minimal' | 'elevated'\n \n // Overflow behavior (when > 4 nav items)\n overflowBehavior?: 'hide' | 'collapse' | 'scroll'\n overflowLabel?: string\n}\n\n\n\n\n\n\n\n// Helper component for actions section\nfunction ActionsSection({\n showSearch,\n onSearchClick,\n searchLabel,\n searchPlaceholder,\n showCommandPalette,\n onCommandPaletteToggle,\n commandPaletteLabel,\n commandPaletteShortcut,\n contextualActions,\n primaryAction,\n bp\n}: {\n showSearch: boolean\n onSearchClick?: () => void\n searchLabel: string\n searchPlaceholder: string\n showCommandPalette: boolean\n onCommandPaletteToggle?: () => void\n commandPaletteLabel: string\n commandPaletteShortcut: string\n contextualActions: ContextualAction[]\n primaryAction?: PrimaryAction\n bp: string\n}) {\n return (\n <div className=\"flex items-center space-x-3\">\n <SearchAndCommandPalette\n showSearch={showSearch}\n onSearchClick={onSearchClick}\n searchLabel={searchLabel}\n searchPlaceholder={searchPlaceholder}\n showCommandPalette={showCommandPalette}\n onCommandPaletteToggle={onCommandPaletteToggle}\n commandPaletteLabel={commandPaletteLabel}\n commandPaletteShortcut={commandPaletteShortcut}\n bp={bp}\n />\n\n <ContextualActions\n contextualActions={contextualActions}\n primaryAction={primaryAction}\n bp={bp}\n />\n </div>\n )\n}\n\n// eslint-disable-next-line max-lines-per-function -- Main navigation component requires comprehensive layout logic\nexport function FourThreeOneNav({\n navigationItems,\n contextualActions = [],\n primaryAction,\n logo,\n logoHref,\n onLogoClick,\n searchPlaceholder = 'Buscar...', // Used for aria-label and placeholder text\n onSearchClick,\n showSearch = true,\n showCommandPalette = true,\n onCommandPaletteToggle,\n commandPaletteShortcut = '⌘K',\n mobileBreakpoint = 'md',\n collapsible = true,\n menuLabel = 'Menú',\n closeMenuLabel = 'Cerrar menú',\n searchLabel = 'Buscar',\n commandPaletteLabel = 'Abrir paleta de comandos',\n className = '',\n variant = 'default',\n overflowBehavior = 'collapse',\n overflowLabel = 'Más opciones'\n}: FourThreeOneNavProps) {\n \n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false)\n const [activeSubmenu, setActiveSubmenu] = useState<string | null>(null)\n \n // BIRHAUS: Enforce 4-3-1 rule with warnings\n useEffect(() => {\n if (navigationItems.length > 4) {\n console.warn(\n `BIRHAUS 4-3-1 Rule Violation: Navigation has ${navigationItems.length} items (max 4). ` +\n `Consider using overflowBehavior to handle excess items.`\n )\n }\n \n if (contextualActions.length > 3) {\n console.warn(\n `BIRHAUS 4-3-1 Rule Violation: ${contextualActions.length} contextual actions (max 3). ` +\n `Reduce cognitive load by consolidating actions.`\n )\n }\n }, [navigationItems.length, contextualActions.length])\n \n // BIRHAUS: Handle overflow navigation items\n const visibleNavItems = navigationItems.slice(0, 4)\n const overflowNavItems = navigationItems.slice(4)\n \n // BIRHAUS: Limit contextual actions to 3\n const visibleContextualActions = contextualActions.slice(0, 3)\n \n // Fix object injection by using explicit property access\n const getBreakpointClass = (breakpoint: typeof mobileBreakpoint): string => {\n switch (breakpoint) {\n case 'sm': return 'sm'\n case 'md': return 'md'\n case 'lg': return 'lg'\n default: return 'md'\n }\n }\n const bp = getBreakpointClass(mobileBreakpoint)\n \n // Fix object injection by using explicit property access\n const getNavVariantClass = (v: typeof variant): string => {\n switch (v) {\n case 'default': return 'bg-white border-b border-gray-200'\n case 'minimal': return 'bg-transparent'\n case 'elevated': return 'bg-white shadow-sm border-b border-gray-200'\n default: return 'bg-white border-b border-gray-200'\n }\n }\n \n const handleNavItemClick = (item: NavigationItem) => {\n if (item.disabled) return\n \n if (item.submenu && item.submenu.length > 0) {\n setActiveSubmenu(activeSubmenu === item.id ? null : item.id)\n } else {\n item.onClick?.()\n setIsMobileMenuOpen(false)\n }\n }\n \n const handleKeyDown = useCallback((e: KeyboardEvent) => {\n // Command palette shortcut\n if ((e.metaKey || e.ctrlKey) && e.key === 'k' && showCommandPalette) {\n e.preventDefault()\n onCommandPaletteToggle?.()\n }\n }, [showCommandPalette, onCommandPaletteToggle])\n\n useEffect(() => {\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [handleKeyDown])\n \n return (\n <nav \n className={cn(\n 'relative w-full',\n getNavVariantClass(variant),\n className\n )}\n data-birhaus-component=\"four-three-one-nav\"\n aria-label=\"Navegación principal\"\n >\n <div className=\"max-w-7xl mx-auto px-4 sm:px-6 lg:px-8\">\n <div className=\"flex items-center justify-between h-16\">\n \n {/* Logo/Brand */}\n <LogoSection\n logo={logo}\n logoHref={logoHref}\n onLogoClick={onLogoClick}\n />\n \n {/* BIRHAUS: Desktop Navigation (max 4 items) */}\n <DesktopNavigation\n visibleNavItems={visibleNavItems}\n overflowNavItems={overflowNavItems}\n activeSubmenu={activeSubmenu}\n onItemClick={handleNavItemClick}\n onSubmenuToggle={setActiveSubmenu}\n overflowBehavior={overflowBehavior}\n overflowLabel={overflowLabel}\n bp={bp}\n />\n \n {/* BIRHAUS: Actions Section (Search + 3 contextual + 1 primary) */}\n <div className=\"flex items-center space-x-3\">\n <ActionsSection\n showSearch={showSearch}\n onSearchClick={onSearchClick}\n searchLabel={searchLabel}\n searchPlaceholder={searchPlaceholder}\n showCommandPalette={showCommandPalette}\n onCommandPaletteToggle={onCommandPaletteToggle}\n commandPaletteLabel={commandPaletteLabel}\n commandPaletteShortcut={commandPaletteShortcut}\n contextualActions={visibleContextualActions}\n primaryAction={primaryAction}\n bp={bp}\n />\n\n {/* Mobile menu button */}\n <MobileMenuButton\n isOpen={isMobileMenuOpen}\n onToggle={() => setIsMobileMenuOpen(!isMobileMenuOpen)}\n collapsible={collapsible}\n menuLabel={menuLabel}\n closeMenuLabel={closeMenuLabel}\n bp={bp}\n />\n </div>\n </div>\n \n {/* BIRHAUS: Mobile Navigation */}\n {collapsible && isMobileMenuOpen && (\n <MobileNavigation\n navigationItems={navigationItems}\n contextualActions={visibleContextualActions}\n primaryAction={primaryAction}\n onItemClick={handleNavItemClick}\n onCloseMobileMenu={() => setIsMobileMenuOpen(false)}\n bp={bp}\n />\n )}\n </div>\n </nav>\n )\n}\n\n// BIRHAUS: Hook for managing navigation state\nexport function useFourThreeOneNav() {\n const [activeItem, setActiveItem] = useState<string | null>(null)\n const [isMobileMenuOpen, setIsMobileMenuOpen] = useState(false)\n \n const activateItem = (itemId: string) => {\n setActiveItem(itemId)\n setIsMobileMenuOpen(false)\n }\n \n const toggleMobileMenu = () => {\n setIsMobileMenuOpen(prev => !prev)\n }\n \n const closeMobileMe