{"version":3,"file":"Sidebar.mjs","sources":["../../../../src/lib/ui/layout/Sidebar.tsx"],"sourcesContent":["/**\n * @file Sidebar Layout Component\n * @description Reusable sidebar layout component\n * Performance optimized: static styles extracted, dynamic styles memoized\n */\n\nimport React, {\n  type ReactNode,\n  useState,\n  useCallback,\n  useMemo,\n  memo,\n  type CSSProperties,\n  type KeyboardEvent as ReactKeyboardEvent,\n  useRef,\n} from 'react';\n\n/**\n * Custom hook for keyboard navigation in sidebar menu\n * Handles ArrowUp, ArrowDown, Home, End keys for menu item navigation\n */\nfunction useSidebarKeyboardNavigation(\n  containerRef: React.RefObject<HTMLElement | null>,\n  onToggleExpand?: (itemId: string) => void\n): (event: ReactKeyboardEvent, item: SidebarItem) => void {\n  return useCallback(\n    (event: ReactKeyboardEvent, item: SidebarItem) => {\n      if (!containerRef.current) return;\n\n      const menuItems =\n        containerRef.current.querySelectorAll<HTMLElement>('button:not([disabled])');\n      if (menuItems.length === 0) return;\n\n      const currentIndex = Array.from(menuItems).findIndex(\n        (menuItem) => menuItem === event.currentTarget\n      );\n\n      switch (event.key) {\n        case 'ArrowDown':\n          event.preventDefault();\n          if (currentIndex < menuItems.length - 1) {\n            menuItems[currentIndex + 1]?.focus();\n          } else {\n            menuItems[0]?.focus(); // Wrap to start\n          }\n          break;\n        case 'ArrowUp':\n          event.preventDefault();\n          if (currentIndex <= 0) {\n            menuItems[menuItems.length - 1]?.focus(); // Wrap to end\n          } else {\n            menuItems[currentIndex - 1]?.focus();\n          }\n          break;\n        case 'Home':\n          event.preventDefault();\n          menuItems[0]?.focus();\n          break;\n        case 'End':\n          event.preventDefault();\n          menuItems[menuItems.length - 1]?.focus();\n          break;\n        case 'ArrowRight':\n          // Expand item with children\n          if (item.items && item.items.length > 0) {\n            event.preventDefault();\n            onToggleExpand?.(item.id);\n          }\n          break;\n        case 'ArrowLeft':\n          // Collapse item with children\n          if (item.items && item.items.length > 0) {\n            event.preventDefault();\n            onToggleExpand?.(item.id);\n          }\n          break;\n      }\n    },\n    [containerRef, onToggleExpand]\n  );\n}\n\n/**\n * Sidebar item definition\n */\nexport interface SidebarItem {\n  id: string;\n  label: string;\n  icon?: ReactNode;\n  href?: string;\n  onClick?: () => void;\n  items?: SidebarItem[];\n  badge?: string | number;\n  disabled?: boolean;\n}\n\n/**\n * Sidebar props\n */\nexport interface SidebarProps {\n  /** Sidebar items */\n  items: SidebarItem[];\n\n  /** Currently active item ID */\n  activeId?: string;\n\n  /** Item click handler */\n  onItemClick?: (item: SidebarItem) => void;\n\n  /** Header content */\n  header?: ReactNode;\n\n  /** Footer content */\n  footer?: ReactNode;\n\n  /** Whether sidebar is collapsed */\n  collapsed?: boolean;\n\n  /** Collapse toggle handler */\n  onCollapsedChange?: (collapsed: boolean) => void;\n\n  /** Width when expanded */\n  width?: number;\n\n  /** Width when collapsed */\n  collapsedWidth?: number;\n}\n\n// ============================================================================\n// STATIC STYLES - Extracted outside component to prevent re-creation\n// ============================================================================\n\nconst baseSidebarStyle: CSSProperties = {\n  height: '100vh',\n  display: 'flex',\n  flexDirection: 'column',\n  backgroundColor: '#1f2937',\n  color: '#f3f4f6',\n  transition: 'width 0.2s ease-in-out',\n  overflow: 'hidden',\n};\n\nconst navStyle: CSSProperties = {\n  flex: 1,\n  overflow: 'auto',\n  padding: '0.5rem',\n};\n\nconst collapseButtonStyle: CSSProperties = {\n  display: 'flex',\n  alignItems: 'center',\n  justifyContent: 'center',\n  padding: '0.75rem',\n  border: 'none',\n  backgroundColor: 'transparent',\n  color: '#9ca3af',\n  cursor: 'pointer',\n  borderTop: '1px solid #374151',\n};\n\nconst iconContainerStyle: CSSProperties = {\n  flexShrink: 0,\n};\n\nconst labelContainerStyle: CSSProperties = {\n  flex: 1,\n};\n\nconst badgeStyle: CSSProperties = {\n  padding: '0.125rem 0.5rem',\n  fontSize: '0.75rem',\n  backgroundColor: '#4b5563',\n  borderRadius: '9999px',\n};\n\nconst nestedContainerStyle: CSSProperties = {\n  marginTop: '0.25rem',\n};\n\n// ============================================================================\n// SUB-COMPONENTS\n// ============================================================================\n\n/**\n * Props for SidebarNavItem component\n */\ninterface SidebarNavItemProps {\n  item: SidebarItem;\n  isActive: boolean;\n  isExpanded: boolean;\n  collapsed: boolean;\n  onItemClick: (item: SidebarItem) => void;\n  onKeyDown?: (event: ReactKeyboardEvent, item: SidebarItem) => void;\n  activeId?: string;\n  depth?: number;\n}\n\n/**\n * Sidebar navigation item - memoized for performance\n */\nconst SidebarNavItem = memo(function SidebarNavItem({\n  item,\n  isActive,\n  isExpanded,\n  collapsed,\n  onItemClick,\n  onKeyDown,\n  activeId,\n  depth = 0,\n}: SidebarNavItemProps): React.ReactElement {\n  const hasChildren = item.items !== undefined && item.items.length > 0;\n\n  // Memoize button style based on state\n  const buttonStyle = useMemo(\n    (): CSSProperties => ({\n      display: 'flex',\n      alignItems: 'center',\n      gap: '0.75rem',\n      width: '100%',\n      padding: collapsed ? '0.75rem' : '0.75rem 1rem',\n      paddingLeft: collapsed ? undefined : `${1 + depth * 0.75}rem`,\n      border: 'none',\n      backgroundColor: isActive ? '#374151' : 'transparent',\n      color: isActive ? '#f9fafb' : '#d1d5db',\n      cursor: (item.disabled ?? false) ? 'not-allowed' : 'pointer',\n      opacity: (item.disabled ?? false) ? 0.5 : 1,\n      borderRadius: '0.375rem',\n      textAlign: 'left',\n      fontSize: '0.875rem',\n      justifyContent: collapsed ? 'center' : 'flex-start',\n    }),\n    [collapsed, depth, isActive, item.disabled]\n  );\n\n  // Memoize chevron style\n  const chevronStyle = useMemo(\n    (): CSSProperties => ({\n      transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n      transition: 'transform 0.2s',\n    }),\n    [isExpanded]\n  );\n\n  // Memoize click handler\n  const handleClick = useCallback(() => {\n    onItemClick(item);\n  }, [onItemClick, item]);\n\n  // Memoize keyboard handler\n  const handleKeyDown = useCallback(\n    (event: ReactKeyboardEvent) => {\n      onKeyDown?.(event, item);\n    },\n    [onKeyDown, item]\n  );\n\n  return (\n    <div>\n      <button\n        onClick={handleClick}\n        onKeyDown={handleKeyDown}\n        disabled={item.disabled === true}\n        aria-label={collapsed ? item.label : undefined}\n        aria-expanded={hasChildren ? isExpanded : undefined}\n        aria-current={isActive ? 'page' : undefined}\n        title={collapsed ? item.label : undefined}\n        style={buttonStyle}\n      >\n        {item.icon !== undefined && (\n          <span style={iconContainerStyle} aria-hidden={!collapsed ? 'true' : undefined}>\n            {item.icon}\n          </span>\n        )}\n\n        {!collapsed && (\n          <>\n            <span style={labelContainerStyle}>{item.label}</span>\n\n            {item.badge !== undefined && (\n              <span style={badgeStyle} aria-label={`${item.badge} items`}>\n                {item.badge}\n              </span>\n            )}\n\n            {hasChildren && (\n              <svg\n                width=\"16\"\n                height=\"16\"\n                viewBox=\"0 0 20 20\"\n                fill=\"currentColor\"\n                aria-hidden=\"true\"\n                style={chevronStyle}\n              >\n                <path\n                  fillRule=\"evenodd\"\n                  d=\"M7.293 14.707a1 1 0 010-1.414L10.586 10 7.293 6.707a1 1 0 011.414-1.414l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414 0z\"\n                  clipRule=\"evenodd\"\n                />\n              </svg>\n            )}\n          </>\n        )}\n      </button>\n\n      {/* Nested items */}\n      {hasChildren && isExpanded && !collapsed && item.items !== undefined && (\n        <div role=\"group\" aria-label={`${item.label} submenu`} style={nestedContainerStyle}>\n          {item.items.map((child) => (\n            <SidebarNavItem\n              key={child.id}\n              item={child}\n              isActive={activeId === child.id}\n              isExpanded={false}\n              collapsed={collapsed}\n              onItemClick={onItemClick}\n              onKeyDown={onKeyDown}\n              activeId={activeId}\n              depth={depth + 1}\n            />\n          ))}\n        </div>\n      )}\n    </div>\n  );\n});\n\nSidebarNavItem.displayName = 'SidebarNavItem';\n\n// ============================================================================\n// MAIN COMPONENT\n// ============================================================================\n\n/**\n * Sidebar component - memoized for performance\n */\nexport const Sidebar = memo(\n  ({\n    items,\n    activeId,\n    onItemClick,\n    header,\n    footer,\n    collapsed = false,\n    onCollapsedChange,\n    width = 256,\n    collapsedWidth = 64,\n  }: SidebarProps): React.ReactElement => {\n    const [expandedGroups, setExpandedGroups] = useState<Set<string>>(new Set());\n    const navRef = useRef<HTMLElement>(null);\n\n    // Memoize toggle handler\n    const toggleGroup = useCallback((groupId: string) => {\n      setExpandedGroups((prev) => {\n        const next = new Set(prev);\n        if (next.has(groupId)) {\n          next.delete(groupId);\n        } else {\n          next.add(groupId);\n        }\n        return next;\n      });\n    }, []);\n\n    // Keyboard navigation handler for sidebar menu items\n    const handleKeyDown = useSidebarKeyboardNavigation(navRef, toggleGroup);\n\n    // Memoize item click handler\n    const handleItemClick = useCallback(\n      (item: SidebarItem) => {\n        if (item.items !== undefined && item.items.length > 0 && item.items.length !== 0) {\n          toggleGroup(item.id);\n        } else {\n          item.onClick?.();\n          onItemClick?.(item);\n        }\n      },\n      [onItemClick, toggleGroup]\n    );\n\n    // Memoize collapse toggle handler\n    const handleCollapseToggle = useCallback(() => {\n      onCollapsedChange?.(!collapsed);\n    }, [onCollapsedChange, collapsed]);\n\n    // Memoize current width\n    const currentWidth = useMemo(\n      () => (collapsed ? collapsedWidth : width),\n      [collapsed, collapsedWidth, width]\n    );\n\n    // Memoize sidebar style with dynamic width\n    const sidebarStyle = useMemo(\n      (): CSSProperties => ({\n        ...baseSidebarStyle,\n        width: currentWidth,\n        minWidth: currentWidth,\n      }),\n      [currentWidth]\n    );\n\n    // Memoize header padding style\n    const headerStyle = useMemo(\n      (): CSSProperties => ({\n        padding: collapsed ? '1rem 0.5rem' : '1rem',\n        borderBottom: '1px solid #374151',\n      }),\n      [collapsed]\n    );\n\n    // Memoize footer padding style\n    const footerStyle = useMemo(\n      (): CSSProperties => ({\n        padding: collapsed ? '1rem 0.5rem' : '1rem',\n        borderTop: '1px solid #374151',\n      }),\n      [collapsed]\n    );\n\n    // Memoize collapse icon style\n    const collapseIconStyle = useMemo(\n      (): CSSProperties => ({\n        transform: collapsed ? 'rotate(180deg)' : 'rotate(0deg)',\n        transition: 'transform 0.2s',\n      }),\n      [collapsed]\n    );\n\n    return (\n      <aside style={sidebarStyle}>\n        {/* Header */}\n        {header !== undefined && <div style={headerStyle}>{header}</div>}\n\n        {/* Navigation */}\n        <nav ref={navRef} aria-label=\"Main navigation\" style={navStyle}>\n          {items.map((item) => (\n            <SidebarNavItem\n              key={item.id}\n              item={item}\n              isActive={activeId === item.id}\n              isExpanded={expandedGroups.has(item.id)}\n              collapsed={collapsed}\n              onItemClick={handleItemClick}\n              onKeyDown={handleKeyDown}\n              activeId={activeId}\n            />\n          ))}\n        </nav>\n\n        {/* Collapse toggle */}\n        {onCollapsedChange !== undefined && (\n          <button\n            onClick={handleCollapseToggle}\n            style={collapseButtonStyle}\n            aria-label={collapsed ? 'Expand sidebar' : 'Collapse sidebar'}\n          >\n            <svg\n              width=\"20\"\n              height=\"20\"\n              viewBox=\"0 0 20 20\"\n              fill=\"currentColor\"\n              style={collapseIconStyle}\n            >\n              <path\n                fillRule=\"evenodd\"\n                d=\"M12.707 5.293a1 1 0 010 1.414L9.414 10l3.293 3.293a1 1 0 01-1.414 1.414l-4-4a1 1 0 010-1.414l4-4a1 1 0 011.414 0z\"\n                clipRule=\"evenodd\"\n              />\n            </svg>\n          </button>\n        )}\n\n        {/* Footer */}\n        {footer !== undefined && <div style={footerStyle}>{footer}</div>}\n      </aside>\n    );\n  }\n);\n"],"names":["useSidebarKeyboardNavigation","containerRef","onToggleExpand","useCallback","event","item","menuItems","currentIndex","menuItem","baseSidebarStyle","navStyle","collapseButtonStyle","iconContainerStyle","labelContainerStyle","badgeStyle","nestedContainerStyle","SidebarNavItem","memo","isActive","isExpanded","collapsed","onItemClick","onKeyDown","activeId","depth","hasChildren","buttonStyle","useMemo","chevronStyle","handleClick","handleKeyDown","jsxs","jsx","Fragment","child","Sidebar","items","header","footer","onCollapsedChange","width","collapsedWidth","expandedGroups","setExpandedGroups","useState","navRef","useRef","toggleGroup","groupId","prev","next","handleItemClick","handleCollapseToggle","currentWidth","sidebarStyle","headerStyle","footerStyle","collapseIconStyle"],"mappings":"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"}