Components/Content

Markdown

Markdown renders a string of markdown as formatted text — headings, lists, tables, links and fenced code — styled to match the rest of the interface. It is how prose that arrives already written, most often a model’s answer, reaches the reader looking like part of the product, with anything unsafe stripped out on the way.

import { Markdown } from '@growth-protocol-ai/alpha';

On this page

Supplier risk summary

Kestrel Components is single-source, with no qualified alternate. Two other suppliers carry exposure worth watching, neither of them urgent.

  • Kestrel Components — single-source, no qualified alternate
  • Nordwerk GmbH — dual-source, alternate at partial capacity
  • Halcyon Materials — dual-source, no immediate concern
SupplierRegionSpend
Kestrel ComponentsAPAC$1.24m
Nordwerk GmbHEMEA$860k
Halcyon MaterialsAMER$412k

The same total comes back from a query filtered to the region:

SELECT SUM(spend) AS apac_spend
FROM supplier_spend
WHERE region = 'APAC';

See the supplier risk model for how the exposure score is derived.

variant
Markdown.tsxtsx
1import { Markdown } from '@growth-protocol-ai/alpha';
2
3const ANSWER = `## Supplier risk summary
25See the [supplier risk model](#) for how the exposure score is derived.`;
26
27<Markdown variant="regular">{ANSWER}</Markdown>

When to use

Reach for it when the text was authored somewhere other than your component tree — a model’s answer, a release note, a description somebody typed — and you want it to read like the product rather than like a raw string. Pass the source through as it arrives: an empty or half-finished value renders sensibly, so there is nothing to hold back until the whole answer has landed.

When not to use

Do not use it for words you are writing yourself in JSX, where markup you control is clearer than a parser between you and your own sentences. Where the reader is the one writing the markdown, the control is a text area and this renders the preview beside it — the two are easy to mix up because both hold the same string, so ask which side of it you are on: collecting, or showing. And a response that has not begun arriving wants a skeleton in its place, because this renders nothing at all rather than a placeholder.

variant3 values

Variant is how much typography the component brings, not how big it is. Regular and compact both keep the structure — list markers, code background, table borders, the quote rule — and differ only in how large and how spaced the text is. Plain drops the typography layer entirely, so the surface around it sets the type instead.

Kestrel Components

Single-source on a part with a long lead time, and no qualified alternate today.

  • Spend: $1.24m
  • Region: APAC
  • Exposure: high
regular

Kestrel Components

Single-source on a part with a long lead time, and no qualified alternate today.

  • Spend: $1.24m
  • Region: APAC
  • Exposure: high
compact

Kestrel Components

Single-source on a part with a long lead time, and no qualified alternate today.

  • Spend: $1.24m
  • Region: APAC
  • Exposure: high
plain
variantWhen to use
regularThe default. Body text at the interface’s usual measure with headings scaled above it, for markdown that is the content of its surface rather than a note inside one.
compactDenser: smaller headings and body text, tighter list and table spacing. For an answer rendered inside a surface that is already busy — a card body, a chat bubble, a side panel.
plainNo headings or body type of its own; only the structural rules survive. Reach for it inside a surface that already sets its own typography, and nowhere else.