import { ChevronLeft, Code } from 'lucide-react' import { useMemo, useState, type PropsWithChildren, type ReactNode } from 'react' import { Alert, AlertDescription, AlertTitle, Button, cn, Popover, PopoverContent, PopoverTrigger, } from 'ui' import { navigateToSection } from './Content/Content.utils' import { DOCS_RESOURCE_CONTENT } from './ProjectAPIDocs.constants' import { DocsButton } from '@/components/ui/DocsButton' import { useAppStateSnapshot } from '@/state/app-state' type DocsResourceContentItem = (typeof DOCS_RESOURCE_CONTENT)[keyof typeof DOCS_RESOURCE_CONTENT] export type MenuItemFilter = (item: DocsResourceContentItem) => boolean export type ResourcePickerRenderProps = { selectedResource?: string onSelect: (value: string) => void closePopover: () => void } type SecondLevelNavLayoutProps = { category: string title: string docsUrl: string menuItemFilter?: MenuItemFilter renderResourceList: (props: ResourcePickerRenderProps) => ReactNode } export const SecondLevelNavLayout = ({ category, title, docsUrl, menuItemFilter, renderResourceList, }: SecondLevelNavLayoutProps) => { const snap = useAppStateSnapshot() const [, resource] = snap.activeDocsSection return ( ) } const SecondLevelNavOuterContainer = ({ children }: PropsWithChildren) => { return
{children}
} type SecondLevelLevelNavInnerContainerProps = PropsWithChildren<{ className?: string }> const SecondLevelNavInnerContainer = ({ children, className, }: SecondLevelLevelNavInnerContainerProps) => { return
{children}
} type ResourcePickerProps = { category: string resource?: string renderResourceList: (props: ResourcePickerRenderProps) => ReactNode } type NavTitleProps = { title: string category: string } const NavTitle = ({ title, category }: NavTitleProps) => { const snap = useAppStateSnapshot() const handleBack = () => { snap.setActiveDocsSection([category]) } return (
) } const ResourcePicker = ({ category, resource, renderResourceList }: ResourcePickerProps) => { const snap = useAppStateSnapshot() const [open, setOpen] = useState(false) const handleSelect = (value: string) => { snap.setActiveDocsSection([category, value]) setOpen(false) } return ( {renderResourceList({ selectedResource: resource, onSelect: handleSelect, closePopover: () => setOpen(false), })} ) } type MenuItemsProps = { category: string menuItemFilter?: MenuItemFilter } const MenuItems = ({ category, menuItemFilter }: MenuItemsProps) => { const menuItems = useMemo(() => { const items = Object.values(DOCS_RESOURCE_CONTENT).filter( (content) => content.category === category ) return menuItemFilter ? items.filter(menuItemFilter) : items }, [category, menuItemFilter]) return (
{menuItems.map((item) => ( ))}
) } type MoreInformationProps = { docsUrl: string } const MoreInformation = ({ docsUrl }: MoreInformationProps) => { return (

Unable to find what you're looking for?

The API methods shown here are only the commonly used ones to get you started building quickly.

Head over to our docs site for the full API documentation.

) }