ReferenceComponents

key_value

Label-and-value rows: the detail sheet for one thing.

What a thing is. key_value answers "tell me about order 1042" with the order's own facts, one label and one value per row.

It exists because the alternative is a paragraph. A shipping date buried in prose has to be read; the same date on its own row is found.

Order 1042
Placed21 Aug
ItemsAero Glide 2, size 43
StatusShipped

Re-rendered in the browser from the SDK’s own scales. Not a screenshot.

Rendered natively by the Flutter SDK and the Web SDK, both since 0.1.0.

When not to use it

Do not use it for several things that share the same fields, which is table: three orders with a date and a status each are rows in a table, not three detail sheets.

Do not use it for a delivery's progress, which is order_tracker, and do not use it for money that adds up, which is receipt. A receipt has a total, and a total is arithmetic the reader should not have to do.

Props

Every block also carries type and a required fallback_text of 1 to 300 characters.

PropTypeRequiredConstraints
titlestringNoUp to 120 characters.
rowsarrayYes1 to 12 entries.
rows[].labelstringYes1 to 60 characters.
rows[].valuestringYes1 to 200 characters.
rows[].emphasisbooleanNoLifts one row out of the ramp.
ctaobjectNoNone
cta.labelstringYes1 to 60 characters.
cta.actionactionYes{ kind: "reply", text } or { kind: "open_url", url }. See Actions.

On the wire

{
  "id": "blk_21",
  "type": "key_value",
  "fallback_text": "Order 1042, placed 21 August, one pair, shipped.",
  "props": {
    "title": "Order #1042",
    "rows": [
      { "label": "Placed", "value": "21 Aug" },
      { "label": "Items", "value": "Aero Glide 2, size 43" },
      { "label": "Status", "value": "Shipped", "emphasis": true }
    ],
    "cta": { "label": "Track it", "action": { "kind": "reply", "text": "Track order 1042" } }
  }
}

Interaction

Only the optional cta. The rows themselves are a readout and are not tappable.

States

StateWhat the SDK draws
LoadingLabel and value bars at the real row height.
Long valueThe value wraps and stays right-aligned; the label never truncates.
EmptyAn empty rows array renders fallback_text inside the plate.

Accessibility

Each row is announced as its label followed by its value, so the pairing survives being read aloud in one pass. emphasis changes weight, never colour alone.

Use emphasis once at most. A sheet where every row is emphasised has no answer in it, only twelve equal facts.