import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea, Skeleton } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { useRouter } from 'next/router'; import { Fragment, ReactNode } from 'react'; import { VscSymbolClass, VscSymbolMethod, VscSymbolEnum, VscSymbolInterface, VscSymbolVariable, VscListSelection, VscSymbolParameter, } from 'react-icons/vsc'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; import { TableOfContentItems } from './TableOfContentItems'; import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; import type { ApiClassJSON, ApiInterfaceJSON, ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; import type { TypeParameterData } from '~/DocModel/TypeParameterMixin'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; import type { TokenDocumentation } from '~/util/parse.server'; export interface DocContainerProps { name: string; kind: string; excerpt: string; summary?: ApiItemJSON['summary']; children?: ReactNode; extendsTokens?: TokenDocumentation[] | null; implementsTokens?: TokenDocumentation[][]; typeParams?: TypeParameterData[]; comment?: AnyDocNodeJSON | null; methods?: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] | null; properties?: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] | null; } function generateIcon(kind: string) { const icons = { Class: , Method: , Function: , Enum: , Interface: , TypeAlias: , }; return icons[kind as keyof typeof icons]; } export function DocContainer({ name, kind, excerpt, summary, typeParams, children, extendsTokens, implementsTokens, methods, properties, }: DocContainerProps) { const router = useRouter(); const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return ( <Group> {generateIcon(kind)} {name} </Group>
} padded dense={matches}> {summary ? : No summary provided.}
{excerpt} {extendsTokens?.length ? ( Extends ) : null} {implementsTokens?.length ? ( Implements {implementsTokens.map((token, idx) => ( {idx < implementsTokens.length - 1 ? ', ' : ''} ))} ) : null} {typeParams?.length ? (
} padded dense={matches} defaultClosed >
) : null} {children}
{(kind === 'Class' || kind === 'Interface') && (methods?.length || properties?.length) ? ( ) : null}
); }