import type {APIMember, APINamespace} from '@sanity/tsdoc'
import type {TSDocAppParams} from '@sanity/tsdoc/store'
import {Box, type CardTone, Flex} from '@sanity/ui'
import {useMemo} from 'react'
import {SyntaxText} from '../../components/ColoredCode'
import {useSize} from '../../lib/ui'
import {TSDocMemberTitle} from '../TSDocMemberTitle'
import {useMemberLink} from '../useMemberLink'
import {useTSDoc} from '../useTSDoc'
import {SyntaxTreeItem} from './SyntaxTreeItem'
export function MemberLink(props: {data: APIMember; namespace?: APINamespace}): React.ReactNode {
const {data, namespace} = props
const {basePath, path} = useTSDoc()
const fontSize = useSize()
const params: TSDocAppParams = useMemo(
() => ({
exportPath: data.export?.path || namespace?.export.path || '.',
memberName: data.name,
packageName: data.package.name,
packageScope: data.package.scope || null,
releaseVersion: data.release.version,
memberSlug: data.slug.current,
}),
[data, namespace],
)
const linkProps = useMemberLink({params})
const tone: CardTone | undefined = useMemo(() => {
if (data.releaseTag === 'beta') return 'caution'
if (data.releaseTag === 'alpha') return 'critical'
return undefined
}, [data.releaseTag])
const tag = useMemo(() => {
if (data.releaseTag === 'beta') {
return (
@beta
)
}
if (data.releaseTag === 'alpha') {
return (
@alpha
)
}
return null
}, [data.releaseTag])
const isSelected = `${basePath}${path}` === linkProps.href
return (
{tag}
}
// @ts-expect-error - fix this
tone={tone}
/>
)
}