import { ChevronDown } from 'lucide-react' import { useTheme } from 'next-themes' import Image from 'next/legacy/image' import Link from 'next/link' import { usePathname } from 'next/navigation' import { Accordion } from 'radix-ui' import React, { useEffect, useRef } from 'react' import MenuIconPicker from './MenuIconPicker' const HeaderLink = React.memo(function HeaderLink(props: { title: string id: string url: string }) { const pathname = usePathname() return ( {props.title ?? props.id} ) }) const ContentAccordionLink = React.memo(function ContentAccordionLink(props: any) { const pathname = usePathname() const { resolvedTheme } = useTheme() const activeItem = props.subItem.url === pathname const activeItemRef = useRef(null) const isChildActive = props.subItem.items && props.subItem.items.some((child: any) => child.url === pathname) const LinkContainer = (props) => { const isExternal = props.url.startsWith('https://') return ( {props.children} ) } useEffect(() => { // scroll to active item if (activeItem && activeItemRef.current) { // this is a hack, but seems a common one on Stackoverflow setTimeout(() => { activeItemRef.current?.scrollIntoView({ behavior: 'smooth', block: 'nearest' }) }, 0) } }) return ( <> {props.subItemIndex === 0 && ( <>
{props.parent.name} )} {props.subItem.items && props.subItem.items.length > 0 ? (
{props.subItem.icon && ( {props.subItem.name} )} {props.subItem.name}
{props.subItem.items .filter((subItem) => subItem.enabled !== false) .map((subSubItem) => { return (
  • {subSubItem.name}
  • ) })}
    ) : (
  • {props.subItem.icon && ( {props.subItem.name} )} {props.subItem.name}
  • )} ) }) const ContentLink = React.memo(function ContentLink(props: any) { const pathname = usePathname() return (
  • {props.icon && ( {props.icon} )} {props.name}
  • ) }) const Content = (props) => { const { menu, id } = props if (menu.enabled === false) { return null } return ( ) } export default React.memo(Content)