import { For, Prose, Show, type Children } from "@alloy-js/core"; import type { ParameterDescriptor } from "../parameter-descriptor.js"; export interface JSDocParamsProps { parameters: ParameterDescriptor[] | string[]; } /** * A component that creates a JSDoc block with `@param` tags for each parameter. */ export function JSDocParams(props: JSDocParamsProps) { const parameters = normalizeParametersForDoc(props.parameters); return ( {(param) => ( {param.doc} )} ); } function normalizeParametersForDoc( parameters: ParameterDescriptor[] | string[], ): ParameterDescriptor[] { if (parameters.some((p) => typeof p === "string")) { return []; } return parameters as ParameterDescriptor[]; } export interface JSDocParamProps { name: Children; type?: Children; children?: Children; hyphen?: boolean; optional?: boolean; defaultValue?: Children; } /** * Create a JSDoc parameter set off with `@param`. */ export function JSDocParam(props: JSDocParamProps) { return ( <> {"@param "} ); } interface JSDocParamTypeProps { type?: Children; } function JSDocParamType(props: JSDocParamTypeProps) { return ( <> {"{"} {props.type} {"} "} ); } interface JSDocParamNameProps { name: Children; optional?: boolean; defaultValue?: Children; } function JSDocParamName(props: JSDocParamNameProps) { return ( <> {"["} {props.name} ={props.defaultValue} {"]"} ); } interface JSDocParamDescriptionProps { children?: Children; hyphen?: boolean; } function JSDocParamDescription(props: JSDocParamDescriptionProps) { return ( {props.children} ); }