import {APIMember} from '@sanity/tsdoc' import {TSDocAppParams} from '@sanity/tsdoc/store' import {Card, CardProps, Text, Tooltip, TooltipProps} from '@sanity/ui' import {useMemo} from 'react' import {styled} from 'styled-components' import {UnformattedCode} from '../components/UnformattedCode' import {_fontSize} from '../helpers' import {Size} from '../lib/ui' import {ReferenceTooltipContent} from '../tooltip' import {TSDocMemberTitle} from './TSDocMemberTitle' import {useMemberLink} from './useMemberLink' import {useSymbol} from './useSymbol' const Root = styled(Card)` &:not([hidden]) { display: inline-block; } &:hover { text-decoration: none; } ` /** @beta */ export function TSDocSymbol( props: Omit & { member?: APIMember fontSize?: number name: string packageScope?: string | null packageName?: string | null tooltip?: Omit }, ): React.ReactNode { const {member, fontSize = 2, name, packageScope, packageName, tooltip, ...restProps} = props const {data} = useSymbol({ member, name, packageName, packageScope, }) const symbolMembers = data?.members const content = useMemo(() => { if (!symbolMembers || symbolMembers.length === 0) return null return ( ) }, [symbolMembers]) const child = useMemo(() => { if (!symbolMembers || symbolMembers.length === 0) return … const member = symbolMembers[0]! return }, [symbolMembers]) const params: TSDocAppParams | null = useMemo(() => { if (!symbolMembers || symbolMembers.length === 0) return null const member = symbolMembers[0]! return { exportPath: member.export?.path, memberName: member.name, packageName: member.package.name, packageScope: member.package.scope || null, releaseVersion: member.release.version, } }, [symbolMembers]) const linkProps = useMemberLink({params}) return ( {child} ) }