import { makeStyles } from '@mui/styles'; import React from 'react'; import type { CallSignatureReferenceNode, ClassReferenceNode, ConstructSignatureReferenceNode, InterfaceReferenceNode } from '../reference/index.js'; interface FunctionSignatureProps { signature: CallSignatureReferenceNode | ConstructSignatureReferenceNode; parent?: ClassReferenceNode | InterfaceReferenceNode; } const useStyles = makeStyles( theme => ({ root: { fontFamily: theme.fonts.code, margin: '0 0 .5em', display: 'inline-block' } }), { name: 'FunctionSignature' } ); const FunctionSignature: React.FC = ({ signature, parent }) => { const classes = useStyles(); let { name } = signature; if (signature.kind === 'constructSignature' && parent) { name = `new ${parent.name}`; } return (

{name} {signature.kind === 'callSignature' && signature.typeParameters?.length && ( <> < {signature.typeParameters.map((typeParam, idx) => ( {idx === 0 ? '' : ', '} {typeParam.name} ))} > )} ( {signature.parameters.map((param, idx) => ( {idx === 0 ? '' : ', '} {/^__\d+$/.test(param.name) ? 'params' : param.name} ))} )

); }; export default FunctionSignature;