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)
+ );
});
}
}