diff --git a/packages/components/src/components/Markdown/Markdown.tsx b/packages/components/src/components/Markdown/Markdown.tsx index 4e19748eba..ebc14eda2e 100644 --- a/packages/components/src/components/Markdown/Markdown.tsx +++ b/packages/components/src/components/Markdown/Markdown.tsx @@ -22,6 +22,8 @@ export interface MarkdownProps color?: "default" | AlphaColor; /** Shifts all heading levels by the given offset. @default 0 */ headingOffset?: number; + /** Allows overriding markdown element renderers from outside. */ + components?: Components; /** @internal */ style?: CSSProperties; ref?: Ref; @@ -34,11 +36,12 @@ export const Markdown: FC = (props) => { color = "default", className, headingOffset = 0, + components: customComponents, ref, ...rest } = props; - const components: Components = { + const defaultComponents: Components = { a: (props) => ( {props.children} @@ -140,10 +143,14 @@ export const Markdown: FC = (props) => { }; const textContent = extractTextFromFirstChild(children); + const mergedComponents: Components = { + ...defaultComponents, + ...customComponents, + }; return (
- + {textContent}
diff --git a/packages/components/src/components/Markdown/stories/Default.stories.tsx b/packages/components/src/components/Markdown/stories/Default.stories.tsx index c4be4958be..3dc04f2156 100644 --- a/packages/components/src/components/Markdown/stories/Default.stories.tsx +++ b/packages/components/src/components/Markdown/stories/Default.stories.tsx @@ -13,7 +13,7 @@ const meta: Meta = { }, args: { color: "default", headingOffset: 0 }, parameters: { - controls: { exclude: ["style", "ref"] }, + controls: { exclude: ["style", "ref", "components"] }, }, render: (props, context) => ( @@ -44,3 +44,25 @@ export default meta; type Story = StoryObj; export const Default: Story = {}; + +export const CustomComponents: Story = { + render: (props, context) => ( + + ( +

+ {children} +

+ ), + }} + > + {"# Heading 1\n" + + "## Heading 2 overridden\n" + + "This story uses custom renderers for `h2`\n" + + "[Open docs](https://flowtide.dev)"} +
+
+ ), +}; diff --git a/packages/remote-elements/src/auto-generated/RemoteMarkdownElement.ts b/packages/remote-elements/src/auto-generated/RemoteMarkdownElement.ts index 6403ab9e98..b64402739d 100644 --- a/packages/remote-elements/src/auto-generated/RemoteMarkdownElement.ts +++ b/packages/remote-elements/src/auto-generated/RemoteMarkdownElement.ts @@ -15,6 +15,7 @@ export class RemoteMarkdownElement extends FlowRemoteElement