'use client' import type { NavMenuSection } from '~/components/Navigation/Navigation.types' import DefaultNavigationMenu, { type MenuId, } from '~/components/Navigation/NavigationMenu/NavigationMenu' import { getMenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu.utils' import TopNavBar from '~/components/Navigation/NavigationMenu/TopNavBar' import { DOCS_CONTENT_CONTAINER_ID } from '~/features/ui/helpers.constants' import { menuState, useMenuMobileOpen } from '~/hooks/useMenuState' // End of third-party imports import { isFeatureEnabled } from 'common' import dynamic from 'next/dynamic' import { usePathname } from 'next/navigation' import { memo, useEffect, type PropsWithChildren, type ReactNode } from 'react' import { cn } from 'ui' const Footer = dynamic(() => import('~/components/Navigation/Footer')) const footerEnabled = isFeatureEnabled('docs:footer') const levelsData = { home: { icon: 'home', name: 'Home', }, gettingstarted: { icon: 'getting-started', name: 'Getting Started', }, database: { icon: 'database', name: 'Database', }, cron: { icon: 'cron', name: 'Cron', }, queues: { icon: 'queues', name: 'Queues', }, api: { icon: 'rest', name: 'REST API', }, graphql: { icon: 'graphql', name: 'GraphQL', }, auth: { icon: 'auth', name: 'Auth', }, functions: { icon: 'edge-functions', name: 'Edge Functions', }, telemetry: { icon: 'telemetry', name: 'Observability', }, realtime: { icon: 'realtime', name: 'Realtime', }, analytics: { icon: 'analytics', name: 'Analytics', }, storage: { icon: 'storage', name: 'Storage', }, ai: { icon: 'ai', name: 'AI & Vectors', }, local_development: { icon: 'reference-cli', name: 'Local Development', }, security: { icon: 'platform', name: 'Security', }, platform: { icon: 'platform', name: 'Platform', }, contributing: { icon: 'contributing', name: 'Contributing', }, resources: { icon: 'resources', name: 'Resources', }, self_hosting: { icon: 'self-hosting', name: 'Self-Hosting', }, integrations: { icon: 'integrations', name: 'Integrations', }, reference_server_v1: { icon: 'reference-javascript', name: 'Server Reference v1.0', }, reference_middleware_v1: { icon: 'reference-javascript', name: 'Middleware Reference v1.0', }, reference_javascript_v1: { icon: 'reference-javascript', name: 'JavaScript Reference v1.0', }, reference_javascript_v2: { icon: 'reference-javascript', name: 'JavaScript Reference v2.0', }, reference_dart_v1: { icon: 'reference-dart', name: 'Dart Reference v1.0', }, reference_dart_v2: { icon: 'reference-dart', name: 'Dart Reference v2.0', }, reference_csharp_v0: { icon: 'reference-csharp', name: 'C# Reference v0.0', }, reference_csharp_v1: { icon: 'reference-csharp', name: 'C# Reference v1.0', }, reference_csharp_v8: { icon: 'reference-csharp', name: 'C# Reference v8.0', }, reference_python_v2: { icon: 'reference-python', name: 'Python Reference v2.0', }, reference_swift_v1: { icon: 'reference-swift', name: 'Swift Reference v1.0', }, reference_swift_v2: { icon: 'reference-swift', name: 'Swift Reference v2.0', }, reference_kotlin_v1: { icon: 'reference-kotlin', name: 'Kotlin Reference v1.0', }, reference_kotlin_v2: { icon: 'reference-kotlin', name: 'Kotlin Reference v2.0', }, reference_kotlin_v3: { icon: 'reference-kotlin', name: 'Kotlin Reference v3.0', }, reference_cli: { icon: 'reference-cli', name: 'CLI Reference', }, reference_api: { icon: 'reference-api', name: 'Management API Reference', }, reference_self_hosting_auth: { icon: 'reference-auth', name: 'Auth Server Reference', }, reference_self_hosting_storage: { icon: 'reference-storage', name: 'Storage Server Reference', }, reference_self_hosting_realtime: { icon: 'reference-realtime', name: 'Realtime Server Reference', }, reference_self_hosting_analytics: { icon: 'reference-analytics', name: 'Analytics Server Reference', }, reference_self_hosting_functions: { icon: 'reference-functions', name: 'Functions Server Reference', }, } type MobileHeaderProps = { menuId: MenuId } | { menuName: string } const MobileHeader = memo(function MobileHeader(props: MobileHeaderProps) { const mobileMenuOpen = useMenuMobileOpen() return (