import { useMantineTheme, AppShell, Navbar, MediaQuery, Aside, Header, Burger, Anchor, Breadcrumbs, ScrollArea, Group, Text, ThemeIcon, Box, UnstyledButton, createStyles, Menu, ActionIcon, useMantineColorScheme, } from '@mantine/core'; import { NextLink } from '@mantine/next'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { type PropsWithChildren, useState } from 'react'; import { VscChevronDown, VscPackage } from 'react-icons/vsc'; import { WiDaySunny, WiNightClear } from 'react-icons/wi'; import { SidebarItems } from './SidebarItems'; import { TableOfContentsItems } from './TableOfContentsItems'; import type { DocClass } from '~/DocModel/DocClass'; import type { DocItem } from '~/DocModel/DocItem'; import type { findMember } from '~/util/model.server'; import type { getMembers } from '~/util/parse.server'; export interface SidebarLayoutProps { packageName: string; data: { members: ReturnType; member: ReturnType; }; selectedMember?: ReturnType | undefined; } export type Members = SidebarLayoutProps['data']['members']; export interface GroupedMembers { Classes: Members; Functions: Members; Enums: Members; Interfaces: Members; Types: Members; Variables: Members; } const useStyles = createStyles((theme, { opened }: { opened: boolean }) => ({ control: { display: 'block', width: '100%', padding: theme.spacing.xs, color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], color: theme.colorScheme === 'dark' ? theme.white : theme.black, }, }, icon: { transition: 'transform 150ms ease', transform: opened ? 'rotate(180deg)' : 'rotate(0deg)', }, })); const libraries = [ { label: 'builders', value: 'builders' }, { label: 'collection', value: 'collection' }, { label: 'discord.js', value: 'discord.js' }, { label: 'proxy', value: 'proxy' }, { label: 'rest', value: 'rest' }, { label: 'voice', value: 'voice' }, { label: 'ws', value: 'ws' }, ]; export function SidebarLayout({ packageName, data, children }: PropsWithChildren>) { const router = useRouter(); const theme = useMantineTheme(); const { colorScheme, toggleColorScheme } = useMantineColorScheme(); const dark = colorScheme === 'dark'; const [opened, setOpened] = useState(false); const [openedPicker, setOpenedPicker] = useState(false); const { classes } = useStyles({ opened: openedPicker }); const libraryMenuItems = libraries.map((item) => ( {item.label} )); const asPathWithoutQuery = router.asPath.split('?')[0]; const breadcrumbs = asPathWithoutQuery?.split('/').map((path, idx, original) => ( {path} )); return ( ); }