@otl-core/next-navigation 1.1.18 → 1.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/dist/components/icons/chevron-icon.d.ts +10 -0
  2. package/dist/components/icons/chevron-icon.js +30 -0
  3. package/dist/components/icons/chevron-icon.js.map +1 -0
  4. package/dist/components/icons/grid-icon.d.ts +12 -0
  5. package/dist/components/icons/grid-icon.js +95 -0
  6. package/dist/components/icons/grid-icon.js.map +1 -0
  7. package/dist/components/icons/hamburger-icon.d.ts +12 -0
  8. package/dist/components/icons/hamburger-icon.js +78 -0
  9. package/dist/components/icons/hamburger-icon.js.map +1 -0
  10. package/dist/components/icons/kebab-icon.d.ts +12 -0
  11. package/dist/components/icons/kebab-icon.js +81 -0
  12. package/dist/components/icons/kebab-icon.js.map +1 -0
  13. package/dist/components/icons/meatballs-icon.d.ts +12 -0
  14. package/dist/components/icons/meatballs-icon.js +81 -0
  15. package/dist/components/icons/meatballs-icon.js.map +1 -0
  16. package/dist/components/icons/plus-icon.d.ts +12 -0
  17. package/dist/components/icons/plus-icon.js +64 -0
  18. package/dist/components/icons/plus-icon.js.map +1 -0
  19. package/dist/components/icons/toggle-icon-map.d.ts +14 -0
  20. package/dist/components/icons/toggle-icon-map.js +22 -0
  21. package/dist/components/icons/toggle-icon-map.js.map +1 -0
  22. package/dist/components/icons/toggle-icon.d.ts +14 -0
  23. package/dist/components/icons/toggle-icon.js +39 -0
  24. package/dist/components/icons/toggle-icon.js.map +1 -0
  25. package/dist/components/items/animated-toggle-icon.d.ts +15 -0
  26. package/dist/components/items/animated-toggle-icon.js +39 -0
  27. package/dist/components/items/animated-toggle-icon.js.map +1 -0
  28. package/dist/components/items/dropdown-content-item.d.ts +12 -0
  29. package/dist/components/items/dropdown-content-item.js +223 -0
  30. package/dist/components/items/dropdown-content-item.js.map +1 -0
  31. package/dist/components/items/logo.d.ts +11 -0
  32. package/dist/components/items/logo.js +42 -0
  33. package/dist/components/items/logo.js.map +1 -0
  34. package/dist/components/mobile/mobile-menu-toggle.d.ts +12 -0
  35. package/dist/components/mobile/mobile-menu-toggle.js +53 -0
  36. package/dist/components/mobile/mobile-menu-toggle.js.map +1 -0
  37. package/dist/components/mobile/navigation-header-wrapper.d.ts +11 -0
  38. package/dist/components/mobile/navigation-header-wrapper.js +15 -0
  39. package/dist/components/mobile/navigation-header-wrapper.js.map +1 -0
  40. package/dist/components/navigation/dropdown.d.ts +19 -0
  41. package/dist/components/navigation/dropdown.js +258 -0
  42. package/dist/components/navigation/dropdown.js.map +1 -0
  43. package/dist/components/navigation/header.d.ts +13 -0
  44. package/dist/components/navigation/header.js +305 -0
  45. package/dist/components/navigation/header.js.map +1 -0
  46. package/dist/components/navigation/navbar.d.ts +21 -0
  47. package/dist/components/navigation/navbar.js +66 -0
  48. package/dist/components/navigation/navbar.js.map +1 -0
  49. package/dist/components/sections/navbar-sections.d.ts +23 -0
  50. package/dist/components/sections/navbar-sections.js +103 -0
  51. package/dist/components/sections/navbar-sections.js.map +1 -0
  52. package/dist/components/sections/navigation-item.d.ts +13 -0
  53. package/dist/components/sections/navigation-item.js +171 -0
  54. package/dist/components/sections/navigation-item.js.map +1 -0
  55. package/dist/components/ui/button.d.ts +14 -0
  56. package/dist/components/ui/button.js +51 -0
  57. package/dist/components/ui/button.js.map +1 -0
  58. package/dist/context/navigation-context.d.ts +17 -0
  59. package/dist/context/navigation-context.js +93 -0
  60. package/dist/context/navigation-context.js.map +1 -0
  61. package/dist/index.d.ts +12 -86
  62. package/dist/index.js +19 -2077
  63. package/dist/index.js.map +1 -1
  64. package/dist/lib/footer.utils.d.ts +20 -0
  65. package/dist/lib/footer.utils.js +84 -0
  66. package/dist/lib/footer.utils.js.map +1 -0
  67. package/dist/lib/navigation.utils.d.ts +34 -0
  68. package/dist/lib/navigation.utils.js +387 -0
  69. package/dist/lib/navigation.utils.js.map +1 -0
  70. package/package.json +5 -5
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/context/navigation-context.tsx","../src/lib/navigation.utils.ts","../src/components/mobile/navigation-header-wrapper.tsx","../src/components/ui/button.tsx","../src/components/items/dropdown-content-item.tsx","../src/components/navigation/dropdown.tsx","../src/components/icons/hamburger-icon.tsx","../src/components/icons/chevron-icon.tsx","../src/components/icons/grid-icon.tsx","../src/components/icons/kebab-icon.tsx","../src/components/icons/meatballs-icon.tsx","../src/components/icons/plus-icon.tsx","../src/components/icons/toggle-icon-map.tsx","../src/components/icons/toggle-icon.tsx","../src/components/items/animated-toggle-icon.tsx","../src/components/mobile/mobile-menu-toggle.tsx","../src/components/items/logo.tsx","../src/components/sections/navigation-item.tsx","../src/components/sections/navbar-sections.tsx","../src/components/navigation/navbar.tsx","../src/components/navigation/header.tsx"],"names":["jsx","variantMap","sizeMap","useState","useRef","useMemo","useEffect","config","panels","jsxs","Link","hasLogo","cn","resolveColorsToCSS","resolveColorToCSS","Fragment","navbarContent","navbarWithContainer","headerContent"],"mappings":"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","file":"index.js","sourcesContent":["\"use client\";\n\nimport { usePathname } from \"next/navigation\";\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\n\ninterface NavigationContextType {\n headerRef: React.RefObject<HTMLElement | null>;\n isDropdownOpen: boolean;\n activeDropdown: string | null;\n openDropdown: (dropdownId: string) => void;\n closeDropdown: () => void;\n toggleDropdown: (dropdownId: string) => void;\n}\n\nconst NavigationContext = createContext<NavigationContextType | undefined>(\n undefined,\n);\n\nexport function NavigationProvider({\n children,\n}: {\n children: React.ReactNode;\n}) {\n const [activeDropdown, setActiveDropdown] = useState<string | null>(null);\n const headerRef = useRef<HTMLElement | null>(null);\n const pathname = usePathname();\n\n const openDropdown = useCallback(\n (dropdownId: string) => setActiveDropdown(dropdownId),\n [],\n );\n const closeDropdown = useCallback(() => setActiveDropdown(null), []);\n const toggleDropdown = useCallback(\n (dropdownId: string) =>\n setActiveDropdown((prev) => (prev === dropdownId ? null : dropdownId)),\n [],\n );\n\n // Close dropdown on route change (render-time derivation, not an effect)\n const prevPathname = useRef(pathname);\n if (pathname !== prevPathname.current) {\n prevPathname.current = pathname;\n if (activeDropdown) {\n setActiveDropdown(null);\n }\n }\n\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === \"Escape\" && activeDropdown) {\n closeDropdown();\n }\n };\n\n document.addEventListener(\"keydown\", handleEscape);\n return () => document.removeEventListener(\"keydown\", handleEscape);\n }, [activeDropdown, closeDropdown]);\n\n useEffect(() => {\n if (!activeDropdown) return;\n\n const handleClickOutside = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n\n // Check if click is on an internal navigation element (back button, nested dropdown triggers)\n if (target.closest(\"[data-navigation-internal]\")) {\n return;\n }\n\n // Check if click is outside the header\n if (!headerRef.current?.contains(target)) {\n closeDropdown();\n }\n };\n\n // Use capture phase to handle clicks before they bubble\n document.addEventListener(\"click\", handleClickOutside, true);\n\n return () => {\n document.removeEventListener(\"click\", handleClickOutside, true);\n };\n }, [activeDropdown, closeDropdown]);\n\n const isDropdownOpen = useMemo(\n () => activeDropdown !== null,\n [activeDropdown],\n );\n\n return (\n <NavigationContext.Provider\n value={{\n headerRef,\n isDropdownOpen,\n activeDropdown,\n openDropdown,\n closeDropdown,\n toggleDropdown,\n }}\n >\n {children}\n </NavigationContext.Provider>\n );\n}\n\nexport function useNavigation() {\n const context = useContext(NavigationContext);\n if (!context) {\n throw new Error(\"useNavigation must be used within NavigationProvider\");\n }\n return context;\n}\n","import {\n Site,\n HeaderConfig,\n HeaderDropdownButtonConfig,\n HeaderDropdownContent,\n HeaderDropdownNavigationItemConfig,\n HeaderNavigationItem,\n HeaderNavigationItemButtonConfig,\n HeaderNavigationItemDropdownConfig,\n HeaderNavigationItemImageConfig,\n HeaderNavigationItemLinkConfig,\n HeaderNavigationItemMarkdownConfig,\n HeaderSection,\n LocalizedString,\n ResponsiveValue,\n ShadowConfig,\n} from \"@otl-core/cms-types\";\nimport { marked } from \"marked\";\nimport {\n generateDesktopDropdownAnimations,\n generateMobileMenuAnimations,\n generateResponsiveSpacingCSS,\n generateSameLayerDropdownAnimations,\n generateScrollbarStyles,\n generateToggleIconAnimations,\n minifyCSS,\n} from \"@otl-core/style-utils\";\n\n/**\n * Convert ShadowConfig to CSS box-shadow string\n */\nexport function shadowConfigToCSS(shadow: ShadowConfig): string {\n const { offsetX, offsetY, blurRadius, spreadRadius, color, inset } = shadow;\n const parts = [offsetX, offsetY, blurRadius, spreadRadius, color];\n if (inset) {\n return `inset ${parts.join(\" \")}`;\n }\n return parts.join(\" \");\n}\n\nexport function calculateNavigationWidth(\n sections: HeaderSection[],\n site?: Site,\n): number {\n let totalWidth = 150;\n\n for (const section of sections) {\n for (const item of section?.items || []) {\n if (item.type === \"logo\") continue;\n\n const label =\n typeof item.label === \"string\"\n ? item.label\n : getLocalizedString(item.label, site) || \"\";\n const labelLength = label.length;\n\n if (item.type === \"button\") {\n totalWidth += labelLength * 8 + 48;\n } else if (\n item.type === \"link\" ||\n item.type === \"dropdown\" ||\n item.type === \"markdown\"\n ) {\n totalWidth += labelLength * 8 + 24;\n } else if (item.type === \"image\") {\n const imgConfig = item.config as { width?: string };\n const imgWidth = imgConfig?.width\n ? parseInt(imgConfig.width, 10) || 100\n : 100;\n totalWidth += imgWidth + 16;\n }\n }\n }\n\n return totalWidth;\n}\n\nexport type Breakpoint = \"sm\" | \"md\" | \"lg\" | \"xl\" | \"2xl\" | null;\n\nexport function getBreakpointForWidth(estimatedWidth: number): Breakpoint {\n const MAX_USABLE_WIDTH = 1400;\n\n if (estimatedWidth > MAX_USABLE_WIDTH) return null;\n\n if (estimatedWidth <= 640) return \"sm\";\n if (estimatedWidth <= 768) return \"md\";\n if (estimatedWidth <= 1024) return \"lg\";\n if (estimatedWidth <= 1280) return \"xl\";\n return \"2xl\";\n}\n\nconst RESPONSIVE_BREAKPOINTS = [\n { key: \"sm\", minWidth: \"640px\" },\n { key: \"md\", minWidth: \"768px\" },\n { key: \"lg\", minWidth: \"1024px\" },\n { key: \"xl\", minWidth: \"1280px\" },\n] as const;\n\nfunction generateResponsiveCustomProps(\n className: string,\n props: Record<string, ResponsiveValue<string> | undefined>,\n): string[] {\n const css: string[] = [];\n const baseVars: string[] = [];\n const bpVars: Record<string, string[]> = {};\n\n for (const [prop, value] of Object.entries(props)) {\n if (!value) continue;\n if (typeof value === \"string\") {\n baseVars.push(`${prop}:${value}`);\n } else {\n if (value.base) baseVars.push(`${prop}:${value.base}`);\n for (const { key } of RESPONSIVE_BREAKPOINTS) {\n const bpVal = value[key as keyof typeof value];\n if (bpVal && typeof bpVal === \"string\") {\n if (!bpVars[key]) bpVars[key] = [];\n bpVars[key].push(`${prop}:${bpVal}`);\n }\n }\n }\n }\n\n const target = `.${className}`;\n if (baseVars.length > 0) {\n css.push(`${target}{${baseVars.join(\";\")}}`);\n }\n for (const { key, minWidth } of RESPONSIVE_BREAKPOINTS) {\n if (bpVars[key]?.length) {\n css.push(\n `@media(min-width:${minWidth}){${target}{${bpVars[key].join(\";\")}}}`,\n );\n }\n }\n return css;\n}\n\nexport function generateNavigationCSS(\n id: string,\n navigation: HeaderConfig,\n resolvedColors: Record<string, string | undefined>,\n dropdownIds: string[] = [],\n): string {\n const cssBlocks: (string | null)[] = [];\n const isSameLayer = navigation.style?.dropdown?.layer === \"same\";\n\n // Margins are now applied inline, no CSS generation needed\n\n if (navigation.style) {\n if (isSameLayer) {\n // Same layer: navbar wrapper gets border/padding/shadow, navbar itself only gets inner styles\n const wrapperCSS = generateResponsiveSpacingCSS(`navbar-wrapper-${id}`, {\n border: navigation.style.border,\n padding: navigation.style.layout?.padding,\n shadow: navigation.style.shadow,\n });\n if (wrapperCSS) cssBlocks.push(wrapperCSS);\n } else {\n const navbarCSS = generateResponsiveSpacingCSS(`navbar-${id}`, {\n border: navigation.style.border,\n padding: navigation.style.layout?.padding,\n shadow: navigation.style.shadow,\n });\n if (navbarCSS) cssBlocks.push(navbarCSS);\n }\n\n const navbarInnerCSS = generateResponsiveSpacingCSS(`navbar-inner-${id}`, {\n gap: navigation.style.layout?.sectionGap,\n fontSize: navigation.style.fontSize?.navbar,\n });\n if (navbarInnerCSS) cssBlocks.push(navbarInnerCSS);\n\n const btnFontSize = navigation.style.fontSize?.buttonFontSize;\n if (btnFontSize) {\n cssBlocks.push(\n ...generateResponsiveCustomProps(`navbar-inner-${id}`, {\n \"--btn-font-sm\": btnFontSize.sm,\n \"--btn-font-md\": btnFontSize.md,\n \"--btn-font-lg\": btnFontSize.lg,\n }),\n );\n }\n }\n\n if (navigation.style && dropdownIds.length > 0) {\n dropdownIds.forEach((dropdownId) => {\n if (isSameLayer) {\n // Same layer: dropdown only gets gap/fontSize, no border/padding/shadow (inherited from wrapper)\n const dropdownContentCSS = generateResponsiveSpacingCSS(\n `dropdown-content-${dropdownId}`,\n {\n gap: navigation.style?.dropdown?.sectionGap,\n fontSize: navigation.style?.fontSize?.dropdown,\n },\n );\n if (dropdownContentCSS) cssBlocks.push(dropdownContentCSS);\n } else {\n const dropdownCSS = generateResponsiveSpacingCSS(\n `navigation-dropdown-${dropdownId}`,\n {\n padding: navigation.style?.dropdown?.padding,\n border: navigation.style?.dropdown?.border,\n shadow: navigation.style?.dropdown?.shadow,\n },\n );\n if (dropdownCSS) cssBlocks.push(dropdownCSS);\n\n const dropdownContentCSS = generateResponsiveSpacingCSS(\n `dropdown-content-${dropdownId}`,\n {\n gap: navigation.style?.dropdown?.sectionGap,\n fontSize: navigation.style?.fontSize?.dropdown,\n },\n );\n if (dropdownContentCSS) cssBlocks.push(dropdownContentCSS);\n }\n\n const btnFontSize = navigation.style?.fontSize?.buttonFontSize;\n if (btnFontSize) {\n cssBlocks.push(\n ...generateResponsiveCustomProps(`dropdown-content-${dropdownId}`, {\n \"--btn-font-sm\": btnFontSize.sm,\n \"--btn-font-md\": btnFontSize.md,\n \"--btn-font-lg\": btnFontSize.lg,\n }),\n );\n }\n });\n }\n\n if (resolvedColors.burgerButtonBackgroundHover) {\n cssBlocks.push(\n `.mobile-menu-toggle-${id}:hover{background-color:${resolvedColors.burgerButtonBackgroundHover}!important}`,\n );\n }\n\n if (\n resolvedColors.dropdownMenuLinkHoverColor ||\n resolvedColors.dropdownMenuLinkHoverBackground\n ) {\n const hoverStyles: string[] = [];\n if (resolvedColors.dropdownMenuLinkHoverBackground) {\n hoverStyles.push(\n `background-color:${resolvedColors.dropdownMenuLinkHoverBackground}!important`,\n );\n }\n if (resolvedColors.dropdownMenuLinkHoverColor) {\n hoverStyles.push(\n `color:${resolvedColors.dropdownMenuLinkHoverColor}!important`,\n );\n }\n cssBlocks.push(\n `#mobile-menu-dropdown-${id} a:hover{${hoverStyles.join(\";\")}}`,\n );\n }\n\n cssBlocks.push(...generateToggleIconAnimations());\n cssBlocks.push(...generateMobileMenuAnimations());\n cssBlocks.push(...generateScrollbarStyles());\n cssBlocks.push(...generateDesktopDropdownAnimations());\n if (isSameLayer) {\n cssBlocks.push(...generateSameLayerDropdownAnimations());\n }\n\n return minifyCSS(cssBlocks.filter(Boolean).join(\"\"));\n}\n\nexport function sectionsToDropdownContent(\n sections: HeaderSection[],\n): HeaderDropdownContent[] {\n const result: HeaderDropdownContent[] = [];\n let lastSectionHadContent = false;\n\n sections.forEach((section: HeaderSection, index: number) => {\n const items = section?.items?.filter((item: HeaderNavigationItem) => {\n if (item.type === \"logo\") return false;\n if (resolveItemVisibility(item) === \"navbar-only\") return false;\n return true;\n });\n\n if (items?.length === 0) {\n return; // Skip this section, don't update lastSectionHadContent\n }\n\n // Add divider if the previous section had content and this isn't the first section with content\n if (lastSectionHadContent && result.length > 0) {\n result.push({\n id: `divider-${sections[index - 1].id}`,\n type: \"divider\",\n config: {},\n });\n }\n\n items?.forEach((item: HeaderNavigationItem) => {\n if (item.type === \"link\") {\n const config = item.config as HeaderNavigationItemLinkConfig;\n const navConfig: HeaderDropdownNavigationItemConfig = {\n label: item.label || \"\",\n href: config.href,\n icon: config.icon,\n external: config.external,\n };\n result.push({\n id: item.id,\n type: \"navigation-item\",\n config: navConfig,\n });\n } else if (item.type === \"button\") {\n const config = item.config as HeaderNavigationItemButtonConfig;\n const btnConfig: HeaderDropdownButtonConfig = {\n label: item.label || \"\",\n href: config.href,\n icon: config.icon,\n external: config.external,\n variant: config.variant,\n size: config.size,\n };\n result.push({\n id: item.id,\n type: \"button\",\n config: btnConfig,\n });\n } else if (item.type === \"dropdown\") {\n const config = item.config as HeaderNavigationItemDropdownConfig;\n result.push({\n id: item.id,\n type: \"dropdown\",\n label: item.label || \"\",\n config,\n });\n } else if (item.type === \"markdown\") {\n const config = item.config as HeaderNavigationItemMarkdownConfig;\n result.push({\n id: item.id,\n type: \"markdown\",\n config: { content: config.content || item.label || \"\" },\n });\n } else if (item.type === \"image\") {\n const config = item.config as HeaderNavigationItemImageConfig;\n result.push({\n id: item.id,\n type: \"image\",\n config: {\n src: config.src,\n alt: config.alt,\n width: config.width ? { base: config.width } : { base: \"100%\" },\n height: config.height ? { base: config.height } : { base: \"auto\" },\n objectFit: config.objectFit,\n href: config.href,\n },\n });\n }\n });\n\n lastSectionHadContent = true;\n });\n\n return result;\n}\n\nexport function resolveDropdownColor(\n colorRef: { type: string; value: string } | undefined,\n resolvedColors: Record<string, string | undefined>,\n fallback?: string,\n): string | undefined {\n if (!colorRef) return fallback;\n\n if (colorRef.type === \"custom\") {\n return colorRef.value;\n }\n\n if (colorRef.type === \"theme\") {\n return resolvedColors[colorRef.value] || fallback;\n }\n\n if (colorRef.type === \"variable\") {\n // For variables, construct the CSS variable reference\n return `var(--color-${colorRef.value})`;\n }\n\n return fallback;\n}\n\nfunction getBrowserPreferredLocales(options = {}) {\n const defaultOptions = {\n languageCodeOnly: false,\n };\n const opt = {\n ...defaultOptions,\n ...options,\n };\n const browserLocales =\n navigator.languages === undefined\n ? [navigator.language]\n : navigator.languages;\n if (!browserLocales) {\n return undefined;\n }\n return browserLocales.map((locale) => {\n const trimmedLocale = locale.trim();\n return opt.languageCodeOnly ? trimmedLocale.split(/-|_/)[0] : trimmedLocale;\n });\n}\n\nexport function getLocalizedString(\n value: string | LocalizedString | null | undefined,\n options?:\n | Site\n | {\n preferredLocale?: string;\n defaultLocale?: string;\n supportedLocales?: string[];\n },\n): string {\n // Handle null/undefined\n if (value === null || value === undefined) return \"\";\n\n // If it's already a string, return it\n if (typeof value === \"string\") return value;\n\n // Normalize options to handle both Site and simple options object\n const preferredLocale =\n options && \"preferredLocale\" in options\n ? options.preferredLocale\n : undefined;\n function getDefaultLocale(): string | undefined {\n if (options && \"defaultLocale\" in options) return options.defaultLocale;\n if (options && \"default_locale\" in options) return options.default_locale;\n return undefined;\n }\n function getSupportedLocales(): string[] | undefined {\n if (options && \"supportedLocales\" in options)\n return options.supportedLocales;\n if (options && \"supported_locales\" in options)\n return options.supported_locales;\n return undefined;\n }\n const defaultLocale = getDefaultLocale();\n const supportedLocales = getSupportedLocales();\n\n // Try preferred locale first (if explicitly provided)\n if (preferredLocale && preferredLocale in value && value[preferredLocale]) {\n return value[preferredLocale];\n }\n\n // Try browser locales if no explicit preferred locale\n if (!preferredLocale) {\n const browserLocales = getBrowserPreferredLocales();\n if (browserLocales) {\n for (const locale of browserLocales) {\n if (locale in value && value[locale]) {\n return value[locale];\n }\n }\n }\n }\n\n // Try default locale\n if (defaultLocale && defaultLocale in value && value[defaultLocale]) {\n return value[defaultLocale];\n }\n\n // Try 'en' as fallback\n if (\"en\" in value && value.en) {\n return value.en;\n }\n\n // Try any supported locale\n if (supportedLocales) {\n for (const locale of supportedLocales) {\n if (locale in value && value[locale]) {\n return value[locale];\n }\n }\n }\n\n // Return first available value as last resort\n const keys = Object.keys(value);\n if (keys.length > 0 && value[keys[0]]) {\n return value[keys[0]];\n }\n\n return \"\";\n}\n\n/**\n * Resolve the effective visibility for a navigation item.\n * Supports the new `visibility` field and the legacy `collapse` field.\n * collapse: false → \"navbar-only\", collapse: true/undefined → \"responsive\"\n */\nexport function resolveItemVisibility(\n item: HeaderNavigationItem,\n): HeaderNavigationItem[\"visibility\"] {\n if (item.visibility) return item.visibility;\n const legacy = (item as unknown as Record<string, unknown>).collapse;\n if (legacy === false) return \"navbar-only\";\n return undefined;\n}\n\nconst VISIBILITY_CLASSES: Record<string, string> = {\n \"navbar-only\": \"flex\",\n \"mobile-only\": \"hidden\",\n both: \"flex\",\n};\n\n/**\n * Get the CSS class for an item's visibility, falling back to the\n * responsive breakpoint class when no explicit visibility is set.\n */\nexport function getVisibilityClass(\n item: HeaderNavigationItem,\n fallback?: string,\n): string {\n const vis = resolveItemVisibility(item);\n return (vis && VISIBILITY_CLASSES[vis]) || fallback || \"\";\n}\n\nexport function parseMarkdownToHTML(markdown: string): string {\n // Parse markdown to HTML\n const html = marked.parse(markdown, { async: false }) as string;\n\n // Transform h1-h6 elements to divs with corresponding classes\n return html\n .replace(/<h1>/g, '<div class=\"h1\">')\n .replace(/<\\/h1>/g, \"</div>\")\n .replace(/<h2>/g, '<div class=\"h2\">')\n .replace(/<\\/h2>/g, \"</div>\")\n .replace(/<h3>/g, '<div class=\"h3\">')\n .replace(/<\\/h3>/g, \"</div>\")\n .replace(/<h4>/g, '<div class=\"h4\">')\n .replace(/<\\/h4>/g, \"</div>\")\n .replace(/<h5>/g, '<div class=\"h5\">')\n .replace(/<\\/h5>/g, \"</div>\")\n .replace(/<h6>/g, '<div class=\"h6\">')\n .replace(/<\\/h6>/g, \"</div>\");\n}\n","\"use client\";\n\nimport React from \"react\";\nimport { useNavigation } from \"../../context/navigation-context\";\n\ninterface NavigationHeaderWrapperProps {\n children: React.ReactNode;\n className?: string;\n style?: React.CSSProperties;\n}\n\nexport function NavigationHeaderWrapper({\n children,\n className,\n style,\n}: NavigationHeaderWrapperProps) {\n const { headerRef } = useNavigation();\n\n return (\n <header ref={headerRef} className={className} style={style}>\n {children}\n </header>\n );\n}\n","import * as React from \"react\";\nimport { Slot } from \"@radix-ui/react-slot\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\nimport { cn } from \"@otl-core/style-utils\";\n\nconst buttonVariants = cva(\n \"inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive\",\n {\n variants: {\n variant: {\n default:\n \"bg-primary text-primary-foreground shadow-xs hover:bg-primary/90\",\n destructive:\n \"bg-destructive text-white shadow-xs hover:bg-destructive/90 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 dark:bg-destructive/60\",\n outline:\n \"border bg-surface shadow-xs hover:bg-accent hover:text-accent-foreground dark:bg-input/30 dark:border-gray-200 dark:hover:bg-input/50\",\n secondary:\n \"bg-secondary text-secondary-foreground shadow-xs hover:bg-secondary/80\",\n ghost:\n \"hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50\",\n link: \"text-primary underline-offset-4 hover:underline\",\n },\n size: {\n default: \"h-9 px-4 py-2 has-[>svg]:px-3\",\n sm: \"h-8 rounded-md gap-1.5 px-3 has-[>svg]:px-2.5\",\n lg: \"h-10 rounded-md px-6 has-[>svg]:px-4\",\n icon: \"size-9\",\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"default\",\n },\n },\n);\n\nfunction Button({\n className,\n variant,\n size,\n asChild = false,\n ...props\n}: React.ComponentProps<\"button\"> &\n VariantProps<typeof buttonVariants> & {\n asChild?: boolean;\n }) {\n const Comp = asChild ? Slot : \"button\";\n\n return (\n <Comp\n data-slot=\"button\"\n className={cn(buttonVariants({ variant, size, className }))}\n {...props}\n />\n );\n}\n\nexport { Button, buttonVariants };\n","import {\n Site,\n HeaderConfig,\n HeaderDropdownButtonConfig,\n HeaderDropdownContent,\n HeaderDropdownDividerConfig,\n HeaderDropdownImageConfig,\n HeaderDropdownMarkdownConfig,\n HeaderDropdownNavigationItemConfig,\n HeaderDropdownGroupConfig,\n LocalizedString,\n} from \"@otl-core/cms-types\";\nimport { resolveColorToCSS } from \"@otl-core/style-utils\";\nimport Link from \"next/link\";\nimport {\n getLocalizedString,\n parseMarkdownToHTML,\n} from \"../../lib/navigation.utils\";\nimport { Button } from \"../ui/button\";\n\ninterface DropdownContentItemProps {\n content: HeaderDropdownContent;\n resolvedColors: Record<string, string | undefined>;\n onNavigate?: (contentId: string) => void;\n navigation: HeaderConfig;\n site: Site;\n}\n\nexport const DropdownContentItem: React.FC<DropdownContentItemProps> = ({\n content,\n resolvedColors,\n onNavigate,\n navigation,\n site,\n}) => {\n if (content.type === \"markdown\") {\n const config = content.config as HeaderDropdownMarkdownConfig;\n const markdownContent = getLocalizedString(config.content, site);\n const parsedHTML = parseMarkdownToHTML(markdownContent);\n\n return (\n <div\n dangerouslySetInnerHTML={{ __html: parsedHTML }}\n style={{\n color: resolvedColors.text,\n }}\n className=\"[&_*]:text-inherit\"\n />\n );\n }\n\n // Image content\n if (content.type === \"image\") {\n const config = content.config as HeaderDropdownImageConfig;\n\n const getBaseValue = (\n val: string | { base: string } | number | undefined,\n fallback: string,\n ): string => {\n if (val === undefined || val === null) return fallback;\n if (typeof val === \"number\") return `${val}px`;\n if (typeof val === \"string\") return val;\n if (typeof val === \"object\" && \"base\" in val) return val.base;\n return fallback;\n };\n\n const width = getBaseValue(config.width, \"300px\");\n const height = getBaseValue(config.height, \"auto\");\n const objectFit = config.objectFit || \"cover\";\n\n if (!config.src) {\n return null;\n }\n\n const imgElement = (\n <img\n src={config.src}\n alt={config.alt || \"\"}\n style={{\n display: \"block\",\n width,\n height,\n objectFit,\n }}\n />\n );\n\n if (config.href) {\n return (\n <div>\n <Link href={config.href}>{imgElement}</Link>\n </div>\n );\n }\n\n return <div>{imgElement}</div>;\n }\n\n // Navigation item (link)\n if (content.type === \"navigation-item\") {\n const config = content.config as HeaderDropdownNavigationItemConfig;\n const label = getLocalizedString(config.label, site);\n\n return (\n <Link\n href={config.href}\n className=\"block px-3 py-2 rounded-md text-sm transition-colors whitespace-nowrap\"\n style={{\n color:\n resolvedColors.dropdownMenuLinkColor || resolvedColors.linkColor,\n backgroundColor: \"transparent\",\n }}\n target={config.external ? \"_blank\" : undefined}\n rel={config.external ? \"noopener noreferrer\" : undefined}\n >\n {config.icon && <span className=\"mr-2\">{config.icon}</span>}\n {label}\n </Link>\n );\n }\n\n // Button\n if (content.type === \"button\") {\n const config = content.config as HeaderDropdownButtonConfig;\n const label = getLocalizedString(config.label, site);\n\n const variantMap: Record<\n string,\n \"default\" | \"secondary\" | \"outline\" | \"ghost\"\n > = {\n primary: \"default\",\n secondary: \"secondary\",\n outline: \"outline\",\n ghost: \"ghost\",\n };\n\n const sizeMap: Record<string, \"sm\" | \"default\" | \"lg\"> = {\n sm: \"sm\",\n md: \"default\",\n lg: \"lg\",\n };\n\n return (\n <Button\n asChild\n variant={config.variant ? variantMap[config.variant] : \"default\"}\n size={config.size ? sizeMap[config.size] : \"default\"}\n className=\"w-full whitespace-nowrap\"\n style={{\n fontSize: `var(--btn-font-${config.size || \"md\"})`,\n }}\n >\n <Link\n href={config.href}\n target={config.external ? \"_blank\" : undefined}\n rel={config.external ? \"noopener noreferrer\" : undefined}\n >\n {config.icon && <span className=\"mr-2\">{config.icon}</span>}\n {label}\n </Link>\n </Button>\n );\n }\n\n // Nested dropdown - switch content\n if (content.type === \"dropdown\") {\n const label = content.label\n ? getLocalizedString(content.label, site)\n : \"Submenu\";\n\n return (\n <button\n onClick={(e) => {\n e.preventDefault();\n onNavigate?.(content.id);\n }}\n type=\"button\"\n data-navigation-internal=\"true\"\n className=\"block w-full text-left px-3 py-2 rounded-md text-sm transition-colors whitespace-nowrap\"\n style={{\n color:\n resolvedColors.dropdownMenuLinkColor || resolvedColors.linkColor,\n backgroundColor: \"transparent\",\n }}\n >\n <span className=\"flex items-center justify-between\">\n <span>{label}</span>\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n >\n <polyline points=\"9 18 15 12 9 6\" />\n </svg>\n </span>\n </button>\n );\n }\n\n // Section with content\n if (content.type === \"section\") {\n const config = content.config as HeaderDropdownGroupConfig;\n\n // Get label as string\n const getLabel = (value: string | LocalizedString | undefined): string => {\n if (!value) return \"\";\n if (typeof value === \"string\") return value;\n return (value as LocalizedString).en || \"\";\n };\n\n const title = config.title ? getLabel(config.title) : undefined;\n\n return (\n <div\n className=\"flex flex-col\"\n style={{\n gap: config.gap || \"0.25rem\",\n justifyContent: config.justify || \"flex-start\",\n alignItems: config.align || \"flex-start\",\n }}\n >\n {title && (\n <div\n className=\"text-sm font-semibold mb-1\"\n style={{ color: resolvedColors.text }}\n >\n {title}\n </div>\n )}\n {config.content?.map((item: HeaderDropdownContent) => (\n <DropdownContentItem\n key={item.id}\n content={item}\n resolvedColors={resolvedColors}\n onNavigate={onNavigate}\n navigation={navigation}\n site={site}\n />\n ))}\n </div>\n );\n }\n\n // Divider\n if (content.type === \"divider\") {\n const dividerConfig = content.config as HeaderDropdownDividerConfig;\n const dividerColor = dividerConfig?.color\n ? resolveColorToCSS(dividerConfig.color)\n : resolvedColors.border;\n const thickness = dividerConfig?.thickness || \"1px\";\n const margin = dividerConfig?.margin || \"0.5rem\";\n const borderStyle = dividerConfig?.style || \"solid\";\n\n return (\n <div\n style={{\n borderTopWidth: thickness,\n borderTopStyle: borderStyle,\n borderTopColor: dividerColor,\n marginTop: margin,\n marginBottom: margin,\n }}\n />\n );\n }\n\n return null;\n};\n","\"use client\";\n\nimport type {\n Site,\n HeaderConfig,\n HeaderDropdownGroupConfig,\n HeaderNavigationItemConfig,\n HeaderNavigationItemDropdownConfig,\n} from \"@otl-core/cms-types\";\nimport { HeaderDropdownContent } from \"@otl-core/cms-types\";\nimport { getBreakpointValue } from \"@otl-core/cms-utils\";\nimport React, { useEffect, useMemo, useRef, useState } from \"react\";\nimport { CSSTransition } from \"react-transition-group\";\nimport { useNavigation } from \"../../context/navigation-context\";\nimport { resolveBorderToCSS, resolveColorsToCSS } from \"@otl-core/style-utils\";\nimport { DropdownContentItem } from \"../items/dropdown-content-item\";\n\nfunction getDropdownTimeout(isMobileMenu: boolean): number {\n return isMobileMenu ? 300 : 200;\n}\n\nfunction getDropdownClassNames(isMobileMenu: boolean): string {\n return isMobileMenu ? \"mobile-menu\" : \"desktop-dropdown\";\n}\n\nfunction getDropdownZIndex(\n isSameLayer: boolean,\n layer?: string,\n): number | undefined {\n if (isSameLayer) return undefined;\n return layer === \"above\" ? 9999 : undefined;\n}\n\ninterface NavigationDropdownProps {\n itemId: string;\n config: HeaderNavigationItemConfig;\n navigation: HeaderConfig;\n resolvedColors: Record<string, string | undefined>;\n styles: React.CSSProperties;\n linkStyle: React.CSSProperties;\n dropdownId: string;\n site: Site;\n containerContent?: boolean;\n isSameLayer?: boolean;\n}\nexport function NavigationDropdown({\n itemId,\n config,\n navigation,\n resolvedColors,\n dropdownId,\n site,\n containerContent = false,\n isSameLayer = false,\n}: NavigationDropdownProps) {\n const { activeDropdown } = useNavigation();\n const [navigationStack, setNavigationStack] = useState<string[]>([]);\n const nodeRef = useRef(null);\n const backButtonRef = useRef<HTMLButtonElement>(null);\n\n const isMobileMenu = useMemo(\n () => itemId.startsWith(\"mobile-menu\"),\n [itemId],\n );\n const isOpen = useMemo(\n () => activeDropdown === itemId,\n [activeDropdown, itemId],\n );\n const content: HeaderDropdownContent[] = useMemo(\n () => (config as HeaderNavigationItemDropdownConfig).content || [],\n [config],\n );\n\n // Reset nested content when dropdown closes (derived during render, no effect needed)\n const prevIsOpen = useRef(isOpen);\n if (prevIsOpen.current && !isOpen) {\n setNavigationStack([]);\n }\n prevIsOpen.current = isOpen;\n\n // Focus back button when navigating to nested content (DOM side effect, needs useEffect)\n useEffect(() => {\n if (navigationStack.length > 0 && backButtonRef.current) {\n backButtonRef.current.focus();\n }\n }, [navigationStack.length]);\n\n const handleNavigate = (contentId: string) => {\n setNavigationStack((prev) => [...prev, contentId]);\n };\n\n const handleBack = () => {\n setNavigationStack((prev) => prev.slice(0, -1));\n };\n\n // Helper to recursively find a dropdown by ID in content (including inside sections)\n const findDropdownById = (\n contentArray: HeaderDropdownContent[],\n id: string,\n ): HeaderDropdownContent | undefined => {\n for (const item of contentArray) {\n if (item.id === id && item.type === \"dropdown\") {\n return item;\n }\n // Search inside sections\n if (item.type === \"section\") {\n const config = item.config as HeaderDropdownGroupConfig;\n const found = findDropdownById(config.content, id);\n if (found) return found;\n }\n }\n return undefined;\n };\n\n // Build the navigation panels based on the stack\n const buildNavigationPanels = () => {\n const panels: Array<{\n content: HeaderDropdownContent[];\n depth: number;\n }> = [];\n\n // Root panel\n panels.push({ content: content, depth: 0 });\n\n // Build nested panels\n let currentContent = content;\n for (let i = 0; i < navigationStack.length; i++) {\n const contentId = navigationStack[i];\n const dropdownItem = findDropdownById(currentContent, contentId);\n\n if (dropdownItem && dropdownItem.config) {\n const nestedContent = (\n dropdownItem.config as HeaderNavigationItemDropdownConfig\n ).content;\n panels.push({ content: nestedContent, depth: i + 1 });\n currentContent = nestedContent;\n } else {\n break;\n }\n }\n\n return panels;\n };\n\n const panels = buildNavigationPanels();\n\n // Use the same color resolution as the rest of the system\n const dropdownColors = resolveColorsToCSS({\n dropdownMenuBackground: navigation.style?.dropdown?.background,\n dropdownMenuLinkColor: navigation.style?.dropdown?.link?.color,\n dropdownMenuLinkHoverColor: navigation.style?.dropdown?.link?.hoverColor,\n dropdownMenuLinkHoverBackground:\n navigation.style?.dropdown?.link?.hoverBackground,\n dropdownMenuTextColor: navigation.style?.dropdown?.textColor,\n });\n\n const dropdownMenuBackground = dropdownColors.dropdownMenuBackground;\n const dropdownMenuLinkColor = dropdownColors.dropdownMenuLinkColor;\n const dropdownMenuLinkHoverColor = dropdownColors.dropdownMenuLinkHoverColor;\n const dropdownMenuLinkHoverBackground =\n dropdownColors.dropdownMenuLinkHoverBackground || \"transparent\";\n const dropdownMenuTextColor = dropdownColors.dropdownMenuTextColor;\n\n const dropdownMenuBorder = useMemo(() => {\n if (!navigation.style?.dropdown?.border) return undefined;\n return resolveBorderToCSS(navigation.style.dropdown.border);\n }, [navigation.style?.dropdown?.border]);\n\n // Shadow is now handled via responsive CSS generation (generateResponsiveSpacingCSS)\n\n // Early return AFTER all hooks\n if (content.length === 0) return null;\n\n // Enhanced resolved colors for dropdown, using dropdown-specific text color if available\n const dropdownResolvedColors = {\n ...resolvedColors,\n text: dropdownMenuTextColor || resolvedColors.text,\n dropdownMenuLinkColor,\n };\n\n const useSameLayerMode = isSameLayer && !isMobileMenu;\n\n const dropdownStyles: React.CSSProperties = {\n backgroundColor: useSameLayerMode ? undefined : dropdownMenuBackground,\n color: dropdownMenuTextColor || dropdownMenuLinkColor,\n ...(useSameLayerMode ? {} : dropdownMenuBorder),\n };\n\n const linkHoverStyle = {\n \"--dropdown-link-hover-color\": dropdownMenuLinkHoverColor,\n \"--dropdown-link-hover-background\": dropdownMenuLinkHoverBackground,\n } as React.CSSProperties;\n\n return (\n <>\n <CSSTransition\n in={isOpen}\n nodeRef={nodeRef}\n timeout={useSameLayerMode ? 250 : getDropdownTimeout(isMobileMenu)}\n classNames={\n useSameLayerMode\n ? \"same-layer-dropdown\"\n : getDropdownClassNames(isMobileMenu)\n }\n unmountOnExit={!useSameLayerMode}\n >\n <div\n ref={nodeRef}\n className={`relative w-full navigation-dropdown-${dropdownId}`}\n style={{\n ...dropdownStyles,\n ...(useSameLayerMode\n ? { display: \"grid\", overflow: \"hidden\" }\n : { overflow: \"hidden\" }),\n zIndex: getDropdownZIndex(\n useSameLayerMode,\n navigation.style?.dropdown?.layer,\n ),\n marginTop: navigation.style?.dropdown?.offset?.y\n ? getBreakpointValue(navigation.style.dropdown.offset.y, \"base\")\n : \"0\",\n marginLeft: navigation.style?.dropdown?.offset?.left\n ? getBreakpointValue(\n navigation.style.dropdown.offset.left,\n \"base\",\n )\n : \"0\",\n marginRight: navigation.style?.dropdown?.offset?.right\n ? getBreakpointValue(\n navigation.style.dropdown.offset.right,\n \"base\",\n )\n : \"0\",\n }}\n >\n <div\n style={\n useSameLayerMode\n ? { overflow: \"hidden\", minHeight: 0 }\n : undefined\n }\n >\n <div\n style={{\n display: \"flex\",\n width: \"100%\",\n transform: `translateX(-${navigationStack.length * 100}%)`,\n transition: \"transform 300ms ease-in-out\",\n }}\n >\n {panels.map((panel, panelIndex) => {\n const isActive = panelIndex === navigationStack.length;\n const isToRight = panelIndex > navigationStack.length;\n\n const panelContent = (\n <>\n {panel.depth > 0 && (\n <button\n ref={\n panelIndex === navigationStack.length\n ? backButtonRef\n : null\n }\n onClick={(e) => {\n e.preventDefault();\n handleBack();\n }}\n type=\"button\"\n data-navigation-internal=\"true\"\n className=\"flex items-center px-3 py-2 text-sm rounded-md transition-colors mb-2\"\n style={{\n color:\n resolvedColors.dropdownMenuLinkColor ||\n resolvedColors.linkColor,\n }}\n >\n <svg\n width=\"16\"\n height=\"16\"\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className=\"mr-2\"\n >\n <polyline points=\"15 18 9 12 15 6\" />\n </svg>\n Back\n </button>\n )}\n\n <div className=\"flex flex-wrap gap-4\">\n {panel.content?.map((item: HeaderDropdownContent) => {\n if (item.type === \"section\") {\n return (\n <div key={item.id} className=\"flex-1 min-w-[200px]\">\n <DropdownContentItem\n content={item}\n resolvedColors={dropdownResolvedColors}\n onNavigate={handleNavigate}\n navigation={navigation}\n site={site}\n />\n </div>\n );\n }\n return (\n <div key={item.id} className=\"w-full\">\n <DropdownContentItem\n content={item}\n resolvedColors={dropdownResolvedColors}\n onNavigate={handleNavigate}\n navigation={navigation}\n site={site}\n />\n </div>\n );\n })}\n </div>\n </>\n );\n\n return (\n <nav\n key={panelIndex}\n className={`flex flex-col p-2 dropdown-content-${dropdownId}`}\n style={{\n ...linkHoverStyle,\n width: \"100%\",\n flexShrink: 0,\n transform: isToRight\n ? \"translateX(30px)\"\n : \"translateX(0)\",\n opacity: isActive ? 1 : 0.95,\n transition:\n \"transform 300ms ease-in-out, opacity 300ms ease-in-out\",\n }}\n inert={!isActive ? true : undefined}\n >\n {containerContent ? (\n <div className=\"container mx-auto\">{panelContent}</div>\n ) : (\n panelContent\n )}\n </nav>\n );\n })}\n </div>\n </div>\n </div>\n </CSSTransition>\n </>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\ninterface HamburgerIconProps {\n isOpen: boolean;\n className?: string;\n size?: number;\n animationDuration?: number;\n animationTiming?: string;\n}\n\nexport function HamburgerIcon({\n isOpen,\n className = \"\",\n size = 24,\n animationDuration = 300,\n animationTiming = \"ease-in-out\",\n}: HamburgerIconProps) {\n const duration = `${animationDuration}ms`;\n const hasMountedRef = useRef(false);\n\n useEffect(() => {\n hasMountedRef.current = true;\n }, []);\n\n return (\n <div\n className={className}\n style={{\n width: size,\n height: size,\n position: \"relative\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: \"25%\",\n width: size,\n height: \"12.5%\",\n backgroundColor: \"currentColor\",\n transform: \"translateY(-50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"hamburger-top-open\" : \"hamburger-top-close\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: \"50%\",\n width: size,\n height: \"12.5%\",\n backgroundColor: \"currentColor\",\n transform: \"translateY(-50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"hamburger-middle-hide\" : \"hamburger-middle-show\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: 0,\n top: \"75%\",\n width: size,\n height: \"12.5%\",\n backgroundColor: \"currentColor\",\n transform: \"translateY(-50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"hamburger-bottom-open\" : \"hamburger-bottom-close\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n </div>\n );\n}\n","interface ChevronIconProps {\n isOpen: boolean;\n className?: string;\n size?: number;\n}\n\nexport function ChevronIcon({\n isOpen,\n className = \"\",\n size = 24,\n}: ChevronIconProps) {\n return (\n <svg\n width={size}\n height={size}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n className={className}\n style={{\n transform: isOpen ? \"rotate(180deg)\" : \"rotate(0deg)\",\n transition: \"transform 200ms ease-in-out\",\n }}\n >\n <polyline points=\"6 9 12 15 18 9\" />\n </svg>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\ninterface GridIconProps {\n isOpen: boolean;\n className?: string;\n size?: number;\n animationDuration?: number;\n animationTiming?: string;\n}\n\nexport function GridIcon({\n isOpen,\n className = \"\",\n size = 24,\n animationDuration = 300,\n animationTiming = \"ease-in-out\",\n}: GridIconProps) {\n const duration = `${animationDuration}ms`;\n const hasMountedRef = useRef(false);\n\n useEffect(() => {\n hasMountedRef.current = true;\n }, []);\n\n return (\n <div\n className={className}\n style={{\n width: size,\n height: size,\n position: \"relative\",\n // @ts-expect-error - CSS custom property\n \"--square-size\": \"40%\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n left: \"25%\",\n top: \"25%\",\n width: \"40%\",\n height: \"40%\",\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"grid-tl-open\" : \"grid-tl-close\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: \"75%\",\n top: \"25%\",\n width: \"40%\",\n height: \"40%\",\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"grid-tr-hide\" : \"grid-tr-show\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: \"25%\",\n top: \"75%\",\n width: \"40%\",\n height: \"40%\",\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"grid-bl-hide\" : \"grid-bl-show\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: \"75%\",\n top: \"75%\",\n width: \"40%\",\n height: \"40%\",\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"grid-br-open\" : \"grid-br-close\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\ninterface KebabIconProps {\n isOpen: boolean;\n className?: string;\n size?: number;\n animationDuration?: number;\n animationTiming?: string;\n}\n\nexport function KebabIcon({\n isOpen,\n className = \"\",\n size = 24,\n animationDuration = 300,\n animationTiming = \"ease-in-out\",\n}: KebabIconProps) {\n const duration = `${animationDuration}ms`;\n const hasMountedRef = useRef(false);\n\n useEffect(() => {\n hasMountedRef.current = true;\n }, []);\n\n const dotSize = size * 0.125;\n\n return (\n <div\n className={className}\n style={{\n width: size,\n height: size,\n position: \"relative\",\n // @ts-expect-error - CSS custom property\n \"--dot-width\": \"12.5%\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"25%\",\n width: \"12.5%\",\n height: dotSize,\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"kebab-top-open\" : \"kebab-top-close\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n width: \"12.5%\",\n height: dotSize,\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"kebab-middle-hide\" : \"kebab-middle-show\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"75%\",\n width: \"12.5%\",\n height: dotSize,\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"kebab-bottom-open\" : \"kebab-bottom-close\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\ninterface MeatballsIconProps {\n isOpen: boolean;\n className?: string;\n size?: number;\n animationDuration?: number;\n animationTiming?: string;\n}\n\nexport function MeatballsIcon({\n isOpen,\n className = \"\",\n size = 24,\n animationDuration = 300,\n animationTiming = \"ease-in-out\",\n}: MeatballsIconProps) {\n const duration = `${animationDuration}ms`;\n const hasMountedRef = useRef(false);\n\n useEffect(() => {\n hasMountedRef.current = true;\n }, []);\n\n const dotSize = size * 0.125;\n\n return (\n <div\n className={className}\n style={{\n width: size,\n height: size,\n position: \"relative\",\n // @ts-expect-error - CSS custom property\n \"--dot-height\": \"12.5%\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n left: \"25%\",\n top: \"50%\",\n width: dotSize,\n height: \"12.5%\",\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"meatballs-left-open\" : \"meatballs-left-close\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n width: dotSize,\n height: \"12.5%\",\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"meatballs-middle-hide\" : \"meatballs-middle-show\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: \"75%\",\n top: \"50%\",\n width: dotSize,\n height: \"12.5%\",\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n animation: hasMountedRef.current\n ? `${isOpen ? \"meatballs-right-open\" : \"meatballs-right-close\"} ${duration} ${animationTiming} forwards`\n : \"none\",\n }}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport { useEffect, useRef } from \"react\";\n\ninterface PlusIconProps {\n isOpen: boolean;\n className?: string;\n size?: number;\n animationDuration?: number;\n animationTiming?: string;\n}\n\nexport function PlusIcon({\n isOpen,\n className = \"\",\n size = 24,\n animationDuration = 300,\n animationTiming = \"ease-in-out\",\n}: PlusIconProps) {\n const duration = `${animationDuration}ms`;\n const hasMountedRef = useRef(false);\n\n useEffect(() => {\n hasMountedRef.current = true;\n }, []);\n\n const lineThickness = size * 0.125;\n const lineLength = size;\n\n return (\n <div\n className={className}\n style={{\n width: size,\n height: size,\n position: \"relative\",\n }}\n >\n <div\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n width: lineThickness,\n height: lineLength,\n backgroundColor: \"currentColor\",\n transform: isOpen\n ? \"translate(-50%, -50%) rotate(90deg)\"\n : \"translate(-50%, -50%) rotate(0deg)\",\n transition: hasMountedRef.current\n ? `transform ${duration} ${animationTiming}`\n : \"none\",\n }}\n />\n <div\n style={{\n position: \"absolute\",\n left: \"50%\",\n top: \"50%\",\n width: lineLength,\n height: lineThickness,\n backgroundColor: \"currentColor\",\n transform: \"translate(-50%, -50%)\",\n }}\n />\n </div>\n );\n}\n","import type { ToggleIconType } from \"@otl-core/cms-types\";\nimport { ChevronIcon } from \"./chevron-icon\";\nimport { GridIcon } from \"./grid-icon\";\nimport { HamburgerIcon } from \"./hamburger-icon\";\nimport { KebabIcon } from \"./kebab-icon\";\nimport { MeatballsIcon } from \"./meatballs-icon\";\nimport { PlusIcon } from \"./plus-icon\";\n\ninterface ToggleIconProps {\n isOpen: boolean;\n className?: string;\n size?: number;\n animationDuration?: number;\n animationTiming?: string;\n}\n\nexport const toggleIconMap = new Map<\n ToggleIconType,\n React.ComponentType<ToggleIconProps>\n>([\n [\"hamburger\", HamburgerIcon],\n [\"kebab\", KebabIcon],\n [\"meatballs\", MeatballsIcon],\n [\"grid\", GridIcon],\n [\"chevron\", ChevronIcon],\n [\"plus\", PlusIcon],\n]);\n\nexport function getToggleIcon(\n type: ToggleIconType,\n): React.ComponentType<ToggleIconProps> | undefined {\n return toggleIconMap.get(type);\n}\n","import type { ToggleIconType } from \"@otl-core/cms-types\";\nimport { HamburgerIcon } from \"./hamburger-icon\";\nimport { toggleIconMap } from \"./toggle-icon-map\";\n\ninterface ToggleIconProps {\n type: ToggleIconType;\n isOpen: boolean;\n className?: string;\n size?: number;\n animationDuration?: number;\n animationTiming?: string;\n}\n\nexport function ToggleIcon({\n type,\n isOpen,\n className = \"\",\n size = 24,\n animationDuration,\n animationTiming,\n}: ToggleIconProps) {\n const IconComponent = toggleIconMap.get(type);\n if (!IconComponent) {\n return (\n <HamburgerIcon\n isOpen={isOpen}\n className={className}\n size={size}\n animationDuration={animationDuration}\n animationTiming={animationTiming}\n />\n );\n }\n return (\n <IconComponent\n isOpen={isOpen}\n className={className}\n size={size}\n animationDuration={animationDuration}\n animationTiming={animationTiming}\n />\n );\n}\n","\"use client\";\n\nimport type { ToggleIconType } from \"@otl-core/cms-types\";\nimport React from \"react\";\nimport { ToggleIcon } from \"../icons/toggle-icon\";\n\ninterface AnimatedToggleIconProps {\n type: ToggleIconType;\n isOpen: boolean;\n className?: string;\n size?: number;\n iconId?: string;\n animationDuration?: number;\n animationTiming?: string;\n}\n\nexport function AnimatedToggleIcon({\n type,\n isOpen,\n className = \"\",\n size = 24,\n iconId = \"default\",\n animationDuration,\n animationTiming,\n}: AnimatedToggleIconProps) {\n const containerStyle: React.CSSProperties = {\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n };\n\n return (\n <div\n style={containerStyle}\n className={`animated-toggle-icon-${iconId} ${className}`}\n >\n <ToggleIcon\n type={type}\n isOpen={isOpen}\n size={size}\n animationDuration={animationDuration}\n animationTiming={animationTiming}\n />\n </div>\n );\n}\n","\"use client\";\n\nimport type { HeaderConfig } from \"@otl-core/cms-types\";\nimport { useRef } from \"react\";\nimport { useNavigation } from \"../../context/navigation-context\";\nimport { AnimatedToggleIcon } from \"../items/animated-toggle-icon\";\n\ninterface MobileMenuToggleProps {\n navigation: HeaderConfig;\n resolvedColors: Record<string, string | undefined>;\n toggleId: string;\n mobileMenuId: string;\n}\n\nexport function MobileMenuToggle({\n navigation,\n resolvedColors,\n toggleId,\n mobileMenuId,\n}: MobileMenuToggleProps) {\n const { activeDropdown, toggleDropdown } = useNavigation();\n const buttonRef = useRef<HTMLButtonElement>(null);\n const isMobileMenuOpen = activeDropdown === mobileMenuId;\n\n return (\n <button\n ref={buttonRef}\n onClick={() => toggleDropdown(mobileMenuId)}\n className={`mobile-menu-toggle-${toggleId} transition-colors group flex items-center justify-center`}\n style={{\n backgroundColor: resolvedColors.burgerButtonBackground,\n color: resolvedColors.burgerIconColor,\n padding: navigation.style?.burger?.toggleButton?.padding || \"0.5rem\",\n borderRadius:\n navigation.style?.burger?.toggleButton?.borderRadius || \"0.375rem\",\n fontSize: 0,\n lineHeight: 0,\n font: \"0/0 a\",\n // @ts-expect-error - CSS custom properties\n \"--icon-hover\": resolvedColors.burgerIconHover,\n }}\n aria-label=\"Toggle navigation menu\"\n aria-expanded={isMobileMenuOpen}\n aria-controls=\"mobile-menu-dropdown\"\n >\n <AnimatedToggleIcon\n type={navigation.style?.burger?.toggleIcon?.type || \"hamburger\"}\n isOpen={isMobileMenuOpen}\n size={navigation.style?.burger?.toggleIcon?.size || 24}\n iconId={toggleId}\n animationDuration={\n navigation.style?.burger?.toggleIcon?.animationDuration\n }\n animationTiming={navigation.style?.burger?.toggleIcon?.animationTiming}\n className=\"group-hover:text-[var(--icon-hover)]\"\n />\n </button>\n );\n}\n","import { HeaderConfig } from \"@otl-core/cms-types\";\nimport Link from \"next/link\";\n\ninterface LogoProps {\n navigation: HeaderConfig;\n siteName: string;\n logoTextColor?: string;\n}\n\nfunction LogoContent({ navigation, siteName, logoTextColor }: LogoProps) {\n if (navigation.logo?.url) {\n return (\n <img\n src={navigation.logo.url}\n alt={navigation.logo.alt || siteName}\n width={navigation.logo.width}\n height={navigation.logo.height}\n className=\"h-auto w-auto\"\n style={{\n height: navigation.logo.height\n ? `${navigation.logo.height}px`\n : \"40px\",\n }}\n />\n );\n }\n\n const text = navigation.logo?.alt || siteName;\n return (\n <span\n className=\"text-xl font-bold\"\n style={logoTextColor ? { color: logoTextColor } : undefined}\n >\n {text}\n </span>\n );\n}\n\nexport function Logo({ navigation, siteName, logoTextColor }: LogoProps) {\n return (\n <Link href=\"/\" className=\"flex-shrink-0\">\n <LogoContent\n navigation={navigation}\n siteName={siteName}\n logoTextColor={logoTextColor}\n />\n </Link>\n );\n}\n","\"use client\";\n\nimport {\n Site,\n HeaderConfig,\n HeaderNavigationItem,\n HeaderNavigationItemButtonConfig,\n HeaderNavigationItemImageConfig,\n HeaderNavigationItemLinkConfig,\n HeaderNavigationItemMarkdownConfig,\n} from \"@otl-core/cms-types\";\nimport Link from \"next/link\";\nimport React from \"react\";\nimport { useNavigation } from \"../../context/navigation-context\";\nimport {\n getLocalizedString,\n getVisibilityClass,\n parseMarkdownToHTML,\n} from \"../../lib/navigation.utils\";\nimport { ChevronIcon } from \"../icons/chevron-icon\";\nimport { Logo } from \"../items/logo\";\nimport { Button } from \"../ui/button\";\n\ninterface NavigationItemProps {\n item: HeaderNavigationItem;\n navigation?: HeaderConfig;\n resolvedColors: Record<string, string | undefined>;\n itemsShowClass?: string;\n site: Site;\n}\n\n// Map button variants to Button component variants\nconst variantMap: Record<\n string,\n \"default\" | \"secondary\" | \"outline\" | \"ghost\"\n> = {\n primary: \"default\",\n secondary: \"secondary\",\n outline: \"outline\",\n ghost: \"ghost\",\n};\n\n// Map button sizes to Button component sizes\nconst sizeMap: Record<string, \"default\" | \"sm\" | \"lg\"> = {\n sm: \"sm\",\n md: \"default\",\n lg: \"lg\",\n};\n\nexport const NavigationItem: React.FC<NavigationItemProps> = ({\n item,\n navigation,\n resolvedColors,\n itemsShowClass,\n site,\n}) => {\n const label = getLocalizedString(item.label, site);\n\n const visibilityClass = getVisibilityClass(item, itemsShowClass);\n\n // Render logo\n if (item.type === \"logo\") {\n if (!navigation?.logo) return null;\n return (\n <Logo\n navigation={navigation}\n siteName={navigation.logo.alt || \"Logo\"}\n logoTextColor={resolvedColors.logoText}\n />\n );\n }\n\n if (item.type === \"link\") {\n const config = item.config as HeaderNavigationItemLinkConfig;\n const linkStyle: React.CSSProperties = {\n color: resolvedColors.linkColor,\n };\n\n return (\n <Link\n href={config.href}\n style={linkStyle}\n target={config.external ? \"_blank\" : undefined}\n rel={config.external ? \"noopener noreferrer\" : undefined}\n className={`${visibilityClass} items-center whitespace-nowrap`}\n >\n {config.icon && <span>{config.icon}</span>}\n {label}\n </Link>\n );\n }\n\n // Render button — wrapped in a div to avoid CSS specificity conflict\n // between Button's base `inline-flex` and visibility `hidden` classes\n if (item.type === \"button\") {\n const config = item.config as HeaderNavigationItemButtonConfig;\n\n return (\n <div className={`${visibilityClass} items-center`}>\n <Button\n asChild\n variant={config.variant ? variantMap[config.variant] : \"default\"}\n size={config.size ? sizeMap[config.size] : \"default\"}\n className=\"whitespace-nowrap\"\n style={{\n fontSize: `var(--btn-font-${config.size || \"md\"})`,\n }}\n >\n <Link\n href={config.href}\n target={config.external ? \"_blank\" : undefined}\n rel={config.external ? \"noopener noreferrer\" : undefined}\n >\n {config.icon && <span>{config.icon}</span>}\n {label}\n </Link>\n </Button>\n </div>\n );\n }\n\n // Render dropdown trigger\n if (item.type === \"dropdown\") {\n const { toggleDropdown, activeDropdown } = useNavigation();\n const isOpen = activeDropdown === item.id;\n\n const linkStyle: React.CSSProperties = {\n color: resolvedColors.linkColor,\n };\n\n return (\n <button\n onClick={() => toggleDropdown(item.id)}\n style={linkStyle}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n className={`${visibilityClass} items-center gap-1 whitespace-nowrap`}\n >\n {label}\n <ChevronIcon isOpen={isOpen} size={16} />\n </button>\n );\n }\n\n // Render markdown\n if (item.type === \"markdown\") {\n const config = item.config as HeaderNavigationItemMarkdownConfig;\n const content = getLocalizedString(config.content, site);\n const html = parseMarkdownToHTML(content);\n\n const textStyle: React.CSSProperties = {};\n if (config.color) {\n if (typeof config.color === \"string\") {\n textStyle.color = config.color;\n } else if (config.color.type === \"custom\" && config.color.value) {\n textStyle.color =\n typeof config.color.value === \"string\"\n ? config.color.value\n : config.color.value.background;\n } else if (config.color.type === \"variable\" && config.color.value) {\n textStyle.color = `var(${config.color.value})`;\n } else if (config.color.type === \"theme\" && config.color.value) {\n textStyle.color = `var(--${config.color.value})`;\n }\n } else {\n textStyle.color = resolvedColors.text;\n }\n\n return (\n <div\n dangerouslySetInnerHTML={{ __html: html }}\n className={`${visibilityClass} items-center whitespace-nowrap [&_*]:text-inherit`}\n style={textStyle}\n />\n );\n }\n\n // Render image\n if (item.type === \"image\") {\n const config = item.config as HeaderNavigationItemImageConfig;\n if (!config.src) return null;\n\n const imgElement = (\n <img\n src={config.src}\n alt={config.alt || \"\"}\n style={{\n display: \"block\",\n width: config.width || \"auto\",\n height: config.height || \"auto\",\n objectFit: config.objectFit || \"contain\",\n }}\n />\n );\n\n const wrapped = config.href ? (\n <Link\n href={config.href}\n target={config.external ? \"_blank\" : undefined}\n rel={config.external ? \"noopener noreferrer\" : undefined}\n >\n {imgElement}\n </Link>\n ) : (\n imgElement\n );\n\n return <div className={`${visibilityClass} items-center`}>{wrapped}</div>;\n }\n\n return null;\n};\n","import {\n Site,\n HeaderConfig,\n HeaderNavigationItem,\n HeaderSection,\n} from \"@otl-core/cms-types\";\nimport React, { useMemo } from \"react\";\nimport { resolveItemVisibility } from \"../../lib/navigation.utils\";\nimport { MobileMenuToggle } from \"../mobile/mobile-menu-toggle\";\nimport { NavigationItem } from \"./navigation-item\";\n\ninterface NavbarSectionProps {\n section: HeaderSection;\n logo?: {\n text?: string;\n url?: string;\n alt?: string;\n width?: number;\n height?: number;\n };\n navigation?: HeaderConfig;\n resolvedColors: Record<string, string | undefined>;\n itemsShowClass?: string;\n togglerHideClass?: string;\n isTogglerSection?: boolean;\n site: Site;\n mobileMenuId?: string;\n}\n\nexport const NavbarSections: React.FC<NavbarSectionProps> = ({\n section,\n navigation,\n resolvedColors,\n itemsShowClass,\n togglerHideClass,\n isTogglerSection,\n site,\n mobileMenuId,\n}) => {\n // Check if this section contains a logo\n const hasLogo = useMemo(() => {\n return section?.items?.some(\n (item: HeaderNavigationItem) => item.type === \"logo\",\n );\n }, [section.items]);\n\n const sectionStyle: React.CSSProperties = useMemo(() => {\n let flexValue = section.flex;\n\n // Smart flex handling for better logo and navigation behavior\n if (flexValue === \"0\" || flexValue === undefined) {\n if (hasLogo) {\n // Logo section: Don't shrink, take natural size\n flexValue = \"0 0 auto\";\n } else {\n // Other sections with flex: 0 - allow shrinking if needed\n flexValue = \"0 1 auto\";\n }\n }\n\n return {\n flex: flexValue,\n justifyContent: section.justify || \"flex-start\",\n alignItems: section.align || \"center\",\n gap: section.gap || \"0\",\n // For non-logo sections, ensure they can shrink below content width\n ...(!hasLogo ? { minWidth: 0 } : {}),\n };\n }, [section, hasLogo]);\n\n // Check if section should be hidden when empty\n const shouldHide = useMemo(() => {\n if (!section.hideWhenEmpty) return false;\n\n // Never hide if there's a logo - logos are always visible\n const hasLogo = section.items?.some(\n (item: HeaderNavigationItem) => item.type === \"logo\",\n );\n if (hasLogo) return false;\n\n // Never hide if there are items with visibility: navbar-only or both - they're always visible\n const hasAlwaysVisibleItems = section.items?.some(\n (item: HeaderNavigationItem) =>\n resolveItemVisibility(item) === \"navbar-only\" ||\n resolveItemVisibility(item) === \"both\",\n );\n if (hasAlwaysVisibleItems) return false;\n\n // Check if there are any collapsible items (responsive or mobile-only)\n const collapsibleItems = section.items?.filter(\n (item: HeaderNavigationItem) =>\n item.type !== \"logo\" &&\n resolveItemVisibility(item) !== \"navbar-only\" &&\n resolveItemVisibility(item) !== \"both\",\n );\n\n // If there are collapsible items, section is not empty\n if (collapsibleItems && collapsibleItems.length > 0) return false;\n\n // Don't hide if this is the toggler section (toggler button should show)\n if (isTogglerSection) return false;\n\n return true;\n }, [section.hideWhenEmpty, section.items, isTogglerSection]);\n\n // Apply the same visibility class as items if hideWhenEmpty is enabled\n const sectionVisibilityClass = useMemo(() => {\n if (!section.hideWhenEmpty) return \"\";\n\n // Check if there are any items that are always visible (logos or navbar-only/both)\n const alwaysVisibleItems = section.items?.filter(\n (item: HeaderNavigationItem) =>\n item.type === \"logo\" ||\n resolveItemVisibility(item) === \"navbar-only\" ||\n resolveItemVisibility(item) === \"both\",\n );\n\n // If there are always visible items, don't apply visibility class\n if (alwaysVisibleItems && alwaysVisibleItems.length > 0) return \"\";\n\n // If all items collapse, apply the same visibility class\n return itemsShowClass;\n }, [section.hideWhenEmpty, section.items, itemsShowClass]);\n\n if (shouldHide) {\n return null;\n }\n\n return (\n <div\n className={`flex flex-row ${sectionVisibilityClass}`}\n style={sectionStyle}\n data-section-id={section.id}\n >\n {section.items?.map((item: HeaderNavigationItem) => {\n return (\n <NavigationItem\n key={item.id}\n item={item}\n navigation={navigation}\n resolvedColors={resolvedColors}\n itemsShowClass={itemsShowClass}\n site={site}\n />\n );\n })}\n {isTogglerSection && navigation && mobileMenuId && (\n <div className={`flex flex-shrink-0 ${togglerHideClass}`}>\n <MobileMenuToggle\n navigation={navigation}\n resolvedColors={resolvedColors}\n toggleId={`toggler-${section.id}`}\n mobileMenuId={mobileMenuId}\n />\n </div>\n )}\n </div>\n );\n};\n","import { Site, HeaderConfig, HeaderSection } from \"@otl-core/cms-types\";\nimport { cn } from \"@otl-core/style-utils\";\nimport { ReactNode } from \"react\";\nimport { NavbarSections } from \"../sections/navbar-sections\";\n\ninterface NavbarProps {\n id: string;\n className: string;\n headerStyles: React.CSSProperties;\n sortedSections: HeaderSection[];\n navigation: HeaderConfig;\n resolvedColors: Record<string, string | undefined>;\n itemsShowClass: string;\n togglerHideClass: string;\n togglerSectionId: string;\n site: Site;\n mobileMenuId?: string;\n containerContent?: boolean;\n isSameLayer?: boolean;\n}\n\nexport function Navbar({\n id,\n className,\n headerStyles,\n sortedSections,\n navigation,\n resolvedColors,\n itemsShowClass,\n togglerHideClass,\n togglerSectionId,\n site,\n mobileMenuId,\n containerContent = false,\n isSameLayer = false,\n}: NavbarProps): ReactNode {\n const dropdownLayer = navigation.style?.dropdown?.layer || \"below\";\n\n function getNavbarZ(): string {\n if (isSameLayer) return \"\";\n return dropdownLayer === \"above\" ? \"z-[1]\" : \"z-[9999]\";\n }\n const navbarZ = getNavbarZ();\n\n const sectionsContent = sortedSections.map((section) => (\n <NavbarSections\n key={section.id}\n section={section}\n site={site}\n navigation={navigation}\n resolvedColors={resolvedColors}\n itemsShowClass={itemsShowClass}\n togglerHideClass={togglerHideClass}\n isTogglerSection={section.id === togglerSectionId}\n mobileMenuId={mobileMenuId}\n />\n ));\n\n return (\n <div\n className={cn(\n `navbar-${id}`,\n `relative flex items-center justify-between`,\n navbarZ,\n !containerContent && `navbar-inner-${id}`,\n className,\n )}\n style={isSameLayer ? undefined : headerStyles}\n >\n {containerContent ? (\n <div\n className={cn(\n \"container mx-auto flex items-center justify-between w-full\",\n `navbar-inner-${id}`,\n )}\n >\n {sectionsContent}\n </div>\n ) : (\n sectionsContent\n )}\n </div>\n );\n}\n","import {\n ColorReference,\n Site,\n HeaderConfig,\n HeaderNavigationItem,\n HeaderNavigationItemConfig,\n} from \"@otl-core/cms-types\";\nimport React from \"react\";\nimport { NavigationProvider } from \"../../context/navigation-context\";\nimport {\n cn,\n resolveColorToCSS,\n resolveColorsToCSS,\n} from \"@otl-core/style-utils\";\nimport {\n calculateNavigationWidth,\n generateNavigationCSS,\n getBreakpointForWidth,\n sectionsToDropdownContent,\n} from \"../../lib/navigation.utils\";\nimport { NavigationHeaderWrapper } from \"../mobile/navigation-header-wrapper\";\nimport { NavigationDropdown } from \"./dropdown\";\nimport { Navbar } from \"./navbar\";\n\nconst SHOW_CLASSES = {\n sm: \"hidden sm:flex\",\n md: \"hidden md:flex\",\n lg: \"hidden lg:flex\",\n xl: \"hidden xl:flex\",\n \"2xl\": \"hidden 2xl:flex\",\n} as const;\n\nconst HIDE_CLASSES = {\n sm: \"sm:hidden\",\n md: \"md:hidden\",\n lg: \"lg:hidden\",\n xl: \"xl:hidden\",\n \"2xl\": \"2xl:hidden\",\n} as const;\n\ninterface NavigationHeaderProps {\n navigation: HeaderConfig;\n site: Site;\n className?: string;\n siteName?: string;\n id?: string;\n}\n\nexport const Header: React.FC<NavigationHeaderProps> = ({\n navigation,\n site = {\n default_locale: \"en\",\n supported_locales: [\"en\"],\n } as Site,\n className = \"\",\n siteName: _siteName = \"Logo\",\n id = \"default\",\n}) => {\n const isFixed = navigation.style?.position === \"fixed\";\n const containerBehavior = navigation.style?.container || \"edged\";\n const safeZone = navigation.style?.safeZone;\n const safeZoneHeight =\n typeof safeZone === \"object\" && \"base\" in safeZone\n ? safeZone.base\n : safeZone || \"0\";\n\n const estimatedWidth = calculateNavigationWidth(\n navigation.sections || [],\n site,\n );\n const breakpoint = getBreakpointForWidth(estimatedWidth);\n\n const styleType = navigation.style?.type || \"default\";\n\n const showClass = breakpoint ? SHOW_CLASSES[breakpoint] : \"\";\n const hideClass = breakpoint ? HIDE_CLASSES[breakpoint] : \"\";\n\n const resolvedColors: Record<string, string | undefined> = navigation.style\n ? {\n ...resolveColorsToCSS(\n Object.fromEntries(\n Object.entries(navigation.style).filter(\n ([key]) =>\n key !== \"type\" &&\n key !== \"position\" &&\n key !== \"container\" &&\n key !== \"safeZone\" &&\n key !== \"layout\" &&\n key !== \"border\" &&\n key !== \"shadow\" &&\n key !== \"link\" &&\n key !== \"burger\" &&\n key !== \"dropdown\" &&\n key !== \"background\" &&\n key !== \"text\",\n ),\n ) as Record<string, ColorReference | undefined>,\n ),\n // Manually resolve background and text colors\n background: resolveColorToCSS(navigation.style.background),\n text: resolveColorToCSS(navigation.style.text),\n // Manually resolve link colors\n linkColor: resolveColorToCSS(navigation.style.link?.color),\n linkHoverColor: resolveColorToCSS(navigation.style.link?.hoverColor),\n // Manually resolve burger colors\n burgerButtonBackground: resolveColorToCSS(\n navigation.style.burger?.button?.background,\n ),\n burgerButtonBackgroundHover: resolveColorToCSS(\n navigation.style.burger?.button?.backgroundHover,\n ),\n burgerIconColor: resolveColorToCSS(\n navigation.style.burger?.icon?.color,\n ),\n burgerIconHover: resolveColorToCSS(\n navigation.style.burger?.icon?.hoverColor,\n ),\n }\n : {};\n\n const headerStyles: React.CSSProperties = {\n ...(resolvedColors.background && {\n backgroundColor: resolvedColors.background,\n }),\n ...(resolvedColors.text && {\n color: resolvedColors.text,\n }),\n };\n\n const linkStyle: React.CSSProperties = {\n ...(resolvedColors.linkColor && { color: resolvedColors.linkColor }),\n };\n\n // Extract margin for inline styles\n const marginValue =\n typeof navigation.style?.layout?.margin === \"object\" &&\n \"base\" in navigation.style.layout.margin\n ? navigation.style.layout.margin.base\n : navigation.style?.layout?.margin || \"0\";\n\n const sortedSections = [...(navigation.sections || [])].sort(\n (a, b) => a.order - b.order,\n );\n\n // Determine which section should have the toggler\n let togglerSectionId = navigation.togglerSectionId;\n\n // \"none\" means explicitly no mobile toggler at all\n if (togglerSectionId === \"none\") {\n togglerSectionId = \"\";\n } else if (!togglerSectionId) {\n // If no togglerSectionId specified, auto-assign to last non-logo section if there's content\n const hasContent = sortedSections.some((section) =>\n section.items?.some((item: HeaderNavigationItem) => item.type !== \"logo\"),\n );\n\n if (hasContent) {\n const nonLogoSections = sortedSections.filter(\n (section) =>\n !section.items?.some(\n (item: HeaderNavigationItem) => item.type === \"logo\",\n ),\n );\n\n if (nonLogoSections.length > 0) {\n togglerSectionId = nonLogoSections[nonLogoSections.length - 1].id;\n }\n }\n }\n\n const dropdownItems: Array<{\n item: HeaderNavigationItem;\n config: HeaderNavigationItemConfig;\n }> = [];\n sortedSections.forEach((section) => {\n section.items?.forEach((item: HeaderNavigationItem) => {\n if (item.type === \"dropdown\") {\n dropdownItems.push({\n item: item,\n config: item.config || {},\n });\n }\n });\n });\n\n // Collect all dropdown IDs for CSS generation (including mobile menu)\n const dropdownIds = [\n `mobile-menu-${id}`,\n ...(dropdownItems || []).map((d) => d.item.id),\n ];\n\n // Generate all CSS once at the header level\n const styles = generateNavigationCSS(\n id,\n navigation,\n resolvedColors,\n dropdownIds,\n );\n\n const isSameLayer = navigation.style?.dropdown?.layer === \"same\";\n\n if (styleType === \"minimal\") {\n // Minimal mode: All items render in navbar, but items without collapse:false get \"hidden\" class\n // This means only logo and collapse:false items are VISIBLE\n const navbarAndDropdowns = (\n <>\n <Navbar\n id={id}\n className={className}\n headerStyles={isSameLayer ? {} : headerStyles}\n sortedSections={sortedSections}\n navigation={navigation}\n resolvedColors={resolvedColors}\n togglerSectionId={togglerSectionId || \"navbar\"}\n itemsShowClass=\"hidden\" // All items hidden by default in minimal mode\n togglerHideClass=\"\" // Always show toggler in minimal mode\n site={site}\n mobileMenuId={`mobile-menu-${id}`}\n containerContent={containerBehavior === \"edged\"}\n isSameLayer={isSameLayer}\n />\n <NavigationDropdown\n itemId={`mobile-menu-${id}`}\n config={{ content: sectionsToDropdownContent(sortedSections) }}\n navigation={navigation}\n resolvedColors={resolvedColors}\n styles={headerStyles}\n linkStyle={linkStyle}\n dropdownId={`mobile-menu-${id}`}\n site={site}\n containerContent={containerBehavior === \"edged\"}\n isSameLayer={isSameLayer}\n />\n {dropdownItems?.map(({ item, config }) => (\n <NavigationDropdown\n key={item.id}\n itemId={item.id}\n config={config}\n navigation={navigation}\n resolvedColors={resolvedColors}\n styles={headerStyles}\n linkStyle={linkStyle}\n dropdownId={item.id}\n site={site}\n containerContent={containerBehavior === \"edged\"}\n isSameLayer={isSameLayer}\n />\n ))}\n </>\n );\n\n const navbarContent = isSameLayer ? (\n <div className={`navbar-wrapper-${id}`} style={headerStyles}>\n {navbarAndDropdowns}\n </div>\n ) : (\n navbarAndDropdowns\n );\n\n const navbarWithContainer =\n containerBehavior === \"boxed\" ? (\n <div className=\"container mx-auto\">{navbarContent}</div>\n ) : (\n navbarContent\n );\n\n const headerContent = (\n <NavigationHeaderWrapper\n className={cn(\n \"relative\",\n isFixed\n ? \"fixed top-0 left-0 right-0 z-50\"\n : \"absolute top-0 left-0 right-0 z-50\",\n )}\n style={{ margin: marginValue }}\n data-container={containerBehavior}\n >\n {navbarWithContainer}\n </NavigationHeaderWrapper>\n );\n\n return (\n <>\n {styles && <style>{styles}</style>}\n <NavigationProvider>\n {headerContent}\n {safeZoneHeight && safeZoneHeight !== \"0\" && (\n <div\n className=\"header-safe-zone bg-surface\"\n style={{ height: safeZoneHeight }}\n aria-hidden=\"true\"\n />\n )}\n </NavigationProvider>\n </>\n );\n }\n\n const defaultNavbarAndDropdowns = (\n <>\n <Navbar\n id={id}\n className={className}\n headerStyles={isSameLayer ? {} : headerStyles}\n sortedSections={sortedSections}\n navigation={navigation}\n resolvedColors={resolvedColors}\n togglerSectionId={togglerSectionId || \"navbar\"}\n itemsShowClass={showClass}\n togglerHideClass={hideClass}\n site={site}\n mobileMenuId={`mobile-menu-${id}`}\n containerContent={containerBehavior === \"edged\"}\n isSameLayer={isSameLayer}\n />\n <NavigationDropdown\n itemId={`mobile-menu-${id}`}\n config={{ content: sectionsToDropdownContent(sortedSections) }}\n navigation={navigation}\n resolvedColors={resolvedColors}\n styles={headerStyles}\n linkStyle={linkStyle}\n dropdownId={`mobile-menu-${id}`}\n site={site}\n containerContent={containerBehavior === \"edged\"}\n isSameLayer={isSameLayer}\n />\n {dropdownItems?.map(\n ({\n item,\n config,\n }: {\n item: HeaderNavigationItem;\n config: HeaderNavigationItemConfig;\n }) => (\n <NavigationDropdown\n config={config}\n key={item.id}\n itemId={item.id}\n navigation={navigation}\n resolvedColors={resolvedColors}\n styles={headerStyles}\n linkStyle={linkStyle}\n dropdownId={item.id}\n site={site}\n containerContent={containerBehavior === \"edged\"}\n isSameLayer={isSameLayer}\n />\n ),\n )}\n </>\n );\n\n const navbarContent = isSameLayer ? (\n <div className={`navbar-wrapper-${id}`} style={headerStyles}>\n {defaultNavbarAndDropdowns}\n </div>\n ) : (\n defaultNavbarAndDropdowns\n );\n\n const navbarWithContainer =\n containerBehavior === \"boxed\" ? (\n <div className=\"container mx-auto\">{navbarContent}</div>\n ) : (\n navbarContent\n );\n\n const headerContent = (\n <NavigationHeaderWrapper\n className={cn(\n \"relative\",\n isFixed\n ? \"fixed top-0 left-0 right-0 z-50\"\n : \"absolute top-0 left-0 right-0 z-50\",\n )}\n style={{ margin: marginValue }}\n data-container={containerBehavior}\n >\n {navbarWithContainer}\n </NavigationHeaderWrapper>\n );\n\n return (\n <>\n {styles && <style>{styles}</style>}\n <NavigationProvider>\n {headerContent}\n {safeZoneHeight && safeZoneHeight !== \"0\" && (\n <div\n className=\"header-safe-zone bg-surface\"\n style={{ height: safeZoneHeight }}\n aria-hidden=\"true\"\n />\n )}\n </NavigationProvider>\n </>\n );\n};\n"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["export { Header } from \"./components/navigation/header\";\n\nexport { ChevronIcon } from \"./components/icons/chevron-icon\";\nexport { GridIcon } from \"./components/icons/grid-icon\";\nexport { HamburgerIcon } from \"./components/icons/hamburger-icon\";\nexport { KebabIcon } from \"./components/icons/kebab-icon\";\nexport { MeatballsIcon } from \"./components/icons/meatballs-icon\";\nexport { PlusIcon } from \"./components/icons/plus-icon\";\nexport { ToggleIcon } from \"./components/icons/toggle-icon\";\nexport { toggleIconMap } from \"./components/icons/toggle-icon-map\";\n"],"mappings":"AAAA,SAAS,cAAc;AAEvB,SAAS,mBAAmB;AAC5B,SAAS,gBAAgB;AACzB,SAAS,qBAAqB;AAC9B,SAAS,iBAAiB;AAC1B,SAAS,qBAAqB;AAC9B,SAAS,gBAAgB;AACzB,SAAS,kBAAkB;AAC3B,SAAS,qBAAqB;","names":[]}
@@ -0,0 +1,20 @@
1
+ import { FooterConfig, FooterSection, FooterContentSection } from '@otl-core/cms-types';
2
+
3
+ /**
4
+ * Resolve all colors in the footer configuration to CSS values
5
+ */
6
+ declare function resolveFooterColors(style: FooterConfig["style"]): Record<string, string | undefined>;
7
+ /**
8
+ * Generate CSS for the footer configuration
9
+ */
10
+ declare function generateFooterCSS(id: string, footer: FooterConfig, resolvedColors: Record<string, string | undefined>): string;
11
+ /**
12
+ * Check if a section has nested sections (is a container section)
13
+ */
14
+ declare function isContainerSection(section: FooterSection | FooterContentSection): section is FooterSection;
15
+ /**
16
+ * Check if a section is a content section (has items)
17
+ */
18
+ declare function isContentSection(section: FooterSection | FooterContentSection): section is FooterContentSection;
19
+
20
+ export { generateFooterCSS, isContainerSection, isContentSection, resolveFooterColors };
@@ -0,0 +1,84 @@
1
+ import { isResponsiveConfig } from "@otl-core/cms-utils";
2
+ import { resolveColorToCSS } from "@otl-core/style-utils";
3
+ function resolveFooterColors(style) {
4
+ const resolved = {
5
+ background: resolveColorToCSS(style.background),
6
+ text: resolveColorToCSS(style.text),
7
+ linkColor: resolveColorToCSS(style.link.color),
8
+ linkHoverColor: resolveColorToCSS(style.link.hoverColor)
9
+ };
10
+ return resolved;
11
+ }
12
+ function getResponsiveBase(value) {
13
+ if (typeof value === "object" && value !== null && "base" in value) {
14
+ return value.base;
15
+ }
16
+ return value;
17
+ }
18
+ function resolveBorder(border) {
19
+ if (!border) return "";
20
+ const base = getResponsiveBase(border);
21
+ if (!base) return "";
22
+ const width = base.width ?? "0";
23
+ const style = base.style ?? "solid";
24
+ const color = base.color ? resolveColorToCSS(base.color) : "transparent";
25
+ return `${width} ${style} ${color}`;
26
+ }
27
+ function generateFooterCSS(id, footer, resolvedColors) {
28
+ const cssBlocks = [];
29
+ const baseMargin = getResponsiveBase(footer.style.layout.margin);
30
+ const basePadding = getResponsiveBase(footer.style.layout.padding);
31
+ const baseSectionGap = getResponsiveBase(footer.style.layout.sectionGap);
32
+ const borderCSS = resolveBorder(footer.style.border);
33
+ const baseStyles = `
34
+ .footer-${id} {
35
+ ${resolvedColors.background ? `background-color: ${resolvedColors.background};` : ""}
36
+ ${resolvedColors.text ? `color: ${resolvedColors.text};` : ""}
37
+ ${baseMargin ? `margin: ${baseMargin};` : ""}
38
+ ${basePadding ? `padding: ${basePadding};` : ""}
39
+ ${borderCSS ? `border: ${borderCSS};` : ""}
40
+ ${footer.style.shadow ? `box-shadow: ${formatShadow(isResponsiveConfig(footer.style.shadow) ? footer.style.shadow.base : footer.style.shadow)};` : ""}
41
+ }
42
+ `;
43
+ cssBlocks.push(baseStyles);
44
+ if (resolvedColors.linkColor || resolvedColors.linkHoverColor) {
45
+ cssBlocks.push(`
46
+ .footer-${id} a {
47
+ ${resolvedColors.linkColor ? `color: ${resolvedColors.linkColor};` : ""}
48
+ text-decoration: none;
49
+ transition: color 0.2s;
50
+ }
51
+ .footer-${id} a:hover {
52
+ ${resolvedColors.linkHoverColor ? `color: ${resolvedColors.linkHoverColor};` : ""}
53
+ }
54
+ `);
55
+ }
56
+ if (baseSectionGap) {
57
+ cssBlocks.push(`
58
+ .footer-${id} > .footer-section {
59
+ gap: ${baseSectionGap};
60
+ }
61
+ `);
62
+ }
63
+ return minifyCSS(cssBlocks.filter(Boolean).join(""));
64
+ }
65
+ function formatShadow(shadow) {
66
+ const insetStr = shadow.inset ? "inset " : "";
67
+ return `${insetStr}${shadow.offsetX} ${shadow.offsetY} ${shadow.blurRadius} ${shadow.spreadRadius} ${shadow.color}`;
68
+ }
69
+ function minifyCSS(css) {
70
+ return css.replace(/\s+/g, " ").replace(/\s*{\s*/g, "{").replace(/\s*}\s*/g, "}").replace(/\s*:\s*/g, ":").replace(/\s*;\s*/g, ";").replace(/;\s*}/g, "}").trim();
71
+ }
72
+ function isContainerSection(section) {
73
+ return "sections" in section && Array.isArray(section.sections);
74
+ }
75
+ function isContentSection(section) {
76
+ return "items" in section && Array.isArray(section.items);
77
+ }
78
+ export {
79
+ generateFooterCSS,
80
+ isContainerSection,
81
+ isContentSection,
82
+ resolveFooterColors
83
+ };
84
+ //# sourceMappingURL=footer.utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/lib/footer.utils.ts"],"sourcesContent":["import {\n BorderConfig,\n FooterConfig,\n FooterContentSection,\n FooterSection,\n ResponsiveValue,\n ShadowConfig,\n} from \"@otl-core/cms-types\";\nimport { isResponsiveConfig } from \"@otl-core/cms-utils\";\nimport { resolveColorToCSS } from \"@otl-core/style-utils\";\n\n/**\n * Resolve all colors in the footer configuration to CSS values\n */\nexport function resolveFooterColors(\n style: FooterConfig[\"style\"],\n): Record<string, string | undefined> {\n const resolved: Record<string, string | undefined> = {\n background: resolveColorToCSS(style.background),\n text: resolveColorToCSS(style.text),\n linkColor: resolveColorToCSS(style.link.color),\n linkHoverColor: resolveColorToCSS(style.link.hoverColor),\n };\n\n return resolved;\n}\n\n/**\n * Resolve a responsive value to get the base value\n */\nfunction getResponsiveBase<T>(value: ResponsiveValue<T> | T): T {\n if (typeof value === \"object\" && value !== null && \"base\" in value) {\n return value.base;\n }\n return value as T;\n}\n\n/**\n * Resolve border config to CSS string\n */\nfunction resolveBorder(\n border: ResponsiveValue<BorderConfig> | undefined,\n): string {\n if (!border) return \"\";\n\n const base = getResponsiveBase(border);\n if (!base) return \"\";\n\n const width = base.width ?? \"0\";\n const style = base.style ?? \"solid\";\n const color = base.color ? resolveColorToCSS(base.color) : \"transparent\";\n\n return `${width} ${style} ${color}`;\n}\n\n/**\n * Generate CSS for the footer configuration\n */\nexport function generateFooterCSS(\n id: string,\n footer: FooterConfig,\n resolvedColors: Record<string, string | undefined>,\n): string {\n const cssBlocks: string[] = [];\n\n // Base footer styles\n const baseMargin = getResponsiveBase(footer.style.layout.margin);\n const basePadding = getResponsiveBase(footer.style.layout.padding);\n const baseSectionGap = getResponsiveBase(footer.style.layout.sectionGap);\n const borderCSS = resolveBorder(footer.style.border);\n\n const baseStyles = `\n .footer-${id} {\n ${resolvedColors.background ? `background-color: ${resolvedColors.background};` : \"\"}\n ${resolvedColors.text ? `color: ${resolvedColors.text};` : \"\"}\n ${baseMargin ? `margin: ${baseMargin};` : \"\"}\n ${basePadding ? `padding: ${basePadding};` : \"\"}\n ${borderCSS ? `border: ${borderCSS};` : \"\"}\n ${footer.style.shadow ? `box-shadow: ${formatShadow(isResponsiveConfig(footer.style.shadow) ? footer.style.shadow.base : footer.style.shadow)};` : \"\"}\n }\n `;\n cssBlocks.push(baseStyles);\n\n // Link styles\n if (resolvedColors.linkColor || resolvedColors.linkHoverColor) {\n cssBlocks.push(`\n .footer-${id} a {\n ${resolvedColors.linkColor ? `color: ${resolvedColors.linkColor};` : \"\"}\n text-decoration: none;\n transition: color 0.2s;\n }\n .footer-${id} a:hover {\n ${resolvedColors.linkHoverColor ? `color: ${resolvedColors.linkHoverColor};` : \"\"}\n }\n `);\n }\n\n // Section gap\n if (baseSectionGap) {\n cssBlocks.push(`\n .footer-${id} > .footer-section {\n gap: ${baseSectionGap};\n }\n `);\n }\n\n return minifyCSS(cssBlocks.filter(Boolean).join(\"\"));\n}\n\n/**\n * Format shadow config to CSS box-shadow value\n */\nfunction formatShadow(shadow: ShadowConfig): string {\n const insetStr = shadow.inset ? \"inset \" : \"\";\n return `${insetStr}${shadow.offsetX} ${shadow.offsetY} ${shadow.blurRadius} ${shadow.spreadRadius} ${shadow.color}`;\n}\n\n/**\n * Minify CSS by removing extra whitespace\n */\nfunction minifyCSS(css: string): string {\n return css\n .replace(/\\s+/g, \" \")\n .replace(/\\s*{\\s*/g, \"{\")\n .replace(/\\s*}\\s*/g, \"}\")\n .replace(/\\s*:\\s*/g, \":\")\n .replace(/\\s*;\\s*/g, \";\")\n .replace(/;\\s*}/g, \"}\")\n .trim();\n}\n\n/**\n * Check if a section has nested sections (is a container section)\n */\nexport function isContainerSection(\n section: FooterSection | FooterContentSection,\n): section is FooterSection {\n return \"sections\" in section && Array.isArray(section.sections);\n}\n\n/**\n * Check if a section is a content section (has items)\n */\nexport function isContentSection(\n section: FooterSection | FooterContentSection,\n): section is FooterContentSection {\n return \"items\" in section && Array.isArray(section.items);\n}\n"],"mappings":"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","names":[]}
@@ -0,0 +1,34 @@
1
+ import { ShadowConfig, HeaderSection, Site, HeaderConfig, HeaderDropdownContent, LocalizedString, HeaderNavigationItem } from '@otl-core/cms-types';
2
+
3
+ /**
4
+ * Convert ShadowConfig to CSS box-shadow string
5
+ */
6
+ declare function shadowConfigToCSS(shadow: ShadowConfig): string;
7
+ declare function calculateNavigationWidth(sections: HeaderSection[], site?: Site): number;
8
+ type Breakpoint = "sm" | "md" | "lg" | "xl" | "2xl" | null;
9
+ declare function getBreakpointForWidth(estimatedWidth: number): Breakpoint;
10
+ declare function generateNavigationCSS(id: string, navigation: HeaderConfig, resolvedColors: Record<string, string | undefined>, dropdownIds?: string[]): string;
11
+ declare function sectionsToDropdownContent(sections: HeaderSection[]): HeaderDropdownContent[];
12
+ declare function resolveDropdownColor(colorRef: {
13
+ type: string;
14
+ value: string;
15
+ } | undefined, resolvedColors: Record<string, string | undefined>, fallback?: string): string | undefined;
16
+ declare function getLocalizedString(value: string | LocalizedString | null | undefined, options?: Site | {
17
+ preferredLocale?: string;
18
+ defaultLocale?: string;
19
+ supportedLocales?: string[];
20
+ }): string;
21
+ /**
22
+ * Resolve the effective visibility for a navigation item.
23
+ * Supports the new `visibility` field and the legacy `collapse` field.
24
+ * collapse: false → "navbar-only", collapse: true/undefined → "responsive"
25
+ */
26
+ declare function resolveItemVisibility(item: HeaderNavigationItem): HeaderNavigationItem["visibility"];
27
+ /**
28
+ * Get the CSS class for an item's visibility, falling back to the
29
+ * responsive breakpoint class when no explicit visibility is set.
30
+ */
31
+ declare function getVisibilityClass(item: HeaderNavigationItem, fallback?: string): string;
32
+ declare function parseMarkdownToHTML(markdown: string): string;
33
+
34
+ export { type Breakpoint, calculateNavigationWidth, generateNavigationCSS, getBreakpointForWidth, getLocalizedString, getVisibilityClass, parseMarkdownToHTML, resolveDropdownColor, resolveItemVisibility, sectionsToDropdownContent, shadowConfigToCSS };