diff --git a/scopes/api-reference/renderers/inference-type/inference-type.module.scss b/scopes/api-reference/renderers/inference-type/inference-type.module.scss index b99158cda6c0..3cb3d0828bc6 100644 --- a/scopes/api-reference/renderers/inference-type/inference-type.module.scss +++ b/scopes/api-reference/renderers/inference-type/inference-type.module.scss @@ -1,4 +1,5 @@ .inferenceWrapper { + position: relative; > pre { > code { // override syntax highlighter code font size @@ -6,3 +7,9 @@ } } } + +.isSpread { + > span { + font-style: italic; + } +} diff --git a/scopes/api-reference/renderers/inference-type/inference-type.renderer.tsx b/scopes/api-reference/renderers/inference-type/inference-type.renderer.tsx index 5c01becb29e2..1a4d49320372 100644 --- a/scopes/api-reference/renderers/inference-type/inference-type.renderer.tsx +++ b/scopes/api-reference/renderers/inference-type/inference-type.renderer.tsx @@ -5,6 +5,8 @@ import SyntaxHighlighter from 'react-syntax-highlighter/dist/esm/prism-light'; import tsxSyntax from 'react-syntax-highlighter/dist/esm/languages/prism/tsx'; import defaultTheme from 'react-syntax-highlighter/dist/esm/styles/prism/vsc-dark-plus'; import classNames from 'classnames'; +import { Tooltip } from '@teambit/design.ui.tooltip'; + import styles from './inference-type.module.scss'; SyntaxHighlighter.registerLanguage('tsx', tsxSyntax); @@ -24,8 +26,9 @@ function InferenceTypeComponent(props: APINodeRenderProps) { } = props; const inferenceTypeNode = api as InferenceTypeSchema; + const isSpread = inferenceTypeNode.isSpread; const typeToRender = (inferenceTypeNode.type || inferenceTypeNode.name) ?? ''; - // ugly - but we need to make an educated guess if this is an object or not to decide if we should highlight it or not + const maybeObject = typeToRender.includes('{'); const disableHighlight = metadata?.[inferenceTypeNode.__schema]?.disableHighlight || !maybeObject; @@ -39,24 +42,48 @@ function InferenceTypeComponent(props: APINodeRenderProps) { return (
- {!disableHighlight && ( - + {typeToRender} + + } > - {typeToRender} - + {`...rest`} + )} - {disableHighlight && (inferenceTypeNode.type || inferenceTypeNode.name)} + {!isSpread && + (!disableHighlight ? ( + + {typeToRender} + + ) : ( + inferenceTypeNode.type || inferenceTypeNode.name + ))}
); } diff --git a/scopes/semantics/entities/semantic-schema/schemas/inference-type.ts b/scopes/semantics/entities/semantic-schema/schemas/inference-type.ts index d35e27ccaf61..b57fd02df3c2 100644 --- a/scopes/semantics/entities/semantic-schema/schemas/inference-type.ts +++ b/scopes/semantics/entities/semantic-schema/schemas/inference-type.ts @@ -8,7 +8,8 @@ export class InferenceTypeSchema extends SchemaNode { readonly location: SchemaLocation, readonly type: string, readonly name?: string, - readonly defaultValue?: string + readonly defaultValue?: string, + readonly isSpread?: boolean ) { super(); } @@ -25,6 +26,7 @@ export class InferenceTypeSchema extends SchemaNode { ...super.toObject(), type: this.type, defaultValue: this.defaultValue, + isSpread: this.isSpread, }; } @@ -33,6 +35,7 @@ export class InferenceTypeSchema extends SchemaNode { const type = obj.type; const name = obj.name; const defaultValue = obj.defaultValue; - return new InferenceTypeSchema(location, type, name, defaultValue); + const isSpread = obj.isSpread; + return new InferenceTypeSchema(location, type, name, defaultValue, isSpread); } } diff --git a/scopes/typescript/typescript/transformers/parameter.ts b/scopes/typescript/typescript/transformers/parameter.ts index 18322f1fb406..690213a58c09 100644 --- a/scopes/typescript/typescript/transformers/parameter.ts +++ b/scopes/typescript/typescript/transformers/parameter.ts @@ -100,7 +100,13 @@ export class ParameterTransformer implements SchemaTransformer { const info = await context.getQuickInfo(elem.name); const parsed = info ? parseTypeFromQuickInfo(info) : elem.getText(); const defaultValue = elem.initializer ? elem.initializer.getText() : undefined; - return new InferenceTypeSchema(context.getLocation(elem.name), parsed, elem.name.getText(), defaultValue); + return new InferenceTypeSchema( + context.getLocation(elem.name), + parsed, + elem.name.getText(), + defaultValue, + Boolean(elem.dotDotDotToken) + ); }); } }