import { useRouter } from 'next/router' import clsx from 'clsx' import { ActivePageMarker, NavLink, TopLevelNavItem, VisibleSectionHighlight } from "@/components/NavigationAPI"; import {AnimatePresence, motion} from "framer-motion"; import {Button} from "@/components/mdx"; import {useState} from "react"; import {NavigationStateProvider, useNavigationState} from "@/components/NavigationState"; import ChevronDownIcon from "@/components/icons/ChevronDownIcon"; export const docsNavigation = [ { title: 'ABOUT', links: [ { title: 'How NetBird works', href: '/about-netbird/how-netbird-works'}, { title: 'NetBird vs. traditional VPN', href: '/about-netbird/netbird-vs-traditional-vpn' }, { title: 'Why WireGuard with NetBird', href: '/about-netbird/why-wireguard-with-netbird' }, { title: 'FAQ', href: '/about-netbird/faq' }, /*{ title: 'Whats new in version xx', href: '/welcome/how-netbird-works' }, { title: 'Release notes', href: '/about-netbird/netbird-vs-traditional-vpn' },*/ ], }, { title: 'GET STARTED', links: [ { title: 'Quickstart Guide', href: '/how-to/getting-started' }, {title: 'Install NetBird', href: '/how-to/installation' }, { title: 'CLI', href: '/how-to/cli' }, /* { title: 'Update NetBird', href: '/how-to/enforce-periodic-user-authentication' },*/ ], }, { title: 'MANAGE NETBIRD', links: [ { title: 'Peers', isOpen: false, links: [ { title: 'Add peers to your network', href: '/how-to/add-machines-to-your-network' }, { title: 'Approve peers', href: '/how-to/approve-peers' }, { title: 'Setup keys', href: '/how-to/register-machines-using-setup-keys' }, ] }, { title: 'Access Control', isOpen: false, links: [ { title: 'Manage Network Access', href: '/how-to/manage-network-access' }, { title: 'Posture Checks', href: '/how-to/manage-posture-checks' }, ] }, { title: 'Network Routes', isOpen: false, links: [ { title: 'Routing traffic to private networks', href: '/how-to/routing-traffic-to-private-networks' }, ] }, { title: 'DNS', isOpen: false, links: [ { title: 'Manage DNS in your network', href: '/how-to/manage-dns-in-your-network' }, ] }, { title: 'Team', isOpen: false, links: [ { title: 'Add users to your network', href: '/how-to/add-users-to-your-network' }, ] }, { title: 'Activity', links: [ { title: 'Activity Events', href: '/how-to/monitor-system-and-network-activity' }, ], }, { title: 'Settings', isOpen: false, links: [ {title: 'Authentication', href: '/how-to/enforce-periodic-user-authentication' }, {title: 'Delete Account/Danger Zone', href: '/how-to/delete-account' } /*{title: 'Groups', href: '/about-netbird/netbird-vs-traditional-vpn' }, {title: 'Plans & Billing', href: '/about-netbird/netbird-vs-traditional-vpn' },*/ ] }, { title: 'Integrations', isOpen: false, links: [ {title: 'Activity Event Streaming', href: '/how-to/activity-event-streaming' }, {title: 'Identity Provider', href: '/how-to/idp-sync' }, {title: 'Enable Post Quantum Cryptography', href: '/how-to/enable-post-quantum-cryptography' }, ] }, ], }, { title: 'USE CASES', links: [ { title: 'NetBird on FaaS', href: '/how-to/netbird-on-faas' }, { title: 'Routing peers and Kubernetes', href: '/how-to/routing-peers-and-kubernetes'}, { title: 'NetBird Client on AWS ECS', href: '/how-to/examples'}, ], }, { title: 'SELF-HOST NETBIRD', links: [ { title: 'Quickstart guide', href: '/selfhosted/selfhosted-quickstart' }, { title: 'Advanced guide', href: '/selfhosted/selfhosted-guide' }, { title: 'Management SQLite Store', href: '/selfhosted/sqlite-store'}, { title: 'Supported IdPs', href: '/selfhosted/identity-providers' }, { title: 'Management Geolocation', href: '/selfhosted/geo-support' }, { title: 'Troubleshooting', href: '/selfhosted/troubleshooting' }, ], }, { title: 'PUBLIC API', links: [ { title: 'NetBird API', href: '/how-to/access-netbird-public-api' }, ], }, { title: 'GET MORE HELP', links: [ { title: 'Troubleshooting client issues', href: '/how-to/troubleshooting-client' }, { title: 'Report bugs and issues', href: '/how-to/report-bug-issues' }, ], }, ] export function NavigationDocs({className}) { return ( ) } const findActiveGroupIndex = (group, pathname) => { let activeIndex = -1; group.links.forEach((link, index) => { if (link.href === pathname) { activeIndex = index; } else if (link.links) { const childIndex = findActiveGroupIndex(link, pathname); if (childIndex !== -1) { activeIndex = index; } } }); return activeIndex; } function NavigationGroup({ group, className, hasChildren }) { let router = useRouter() let isActiveGroup = findActiveGroupIndex(group, router.pathname) !== -1; const [isOpen, setIsOpen] = useState(group.isOpen ? group.isOpen :!hasChildren); const [, setActiveHighlight] = useNavigationState(); return (
  • { setIsOpen(!isOpen) if(!isOpen) { router.push(group.links[0].href) setActiveHighlight() }else { setActiveHighlight(group.title) } }} data-nb-link={group.title} > {group.title} {hasChildren && }
    {!hasChildren && <> {isActiveGroup && ( )} {isActiveGroup && ( )} } {isOpen && {group.links.map((link) => { return link.href ? {link.title} : })} }
  • ) }