Skip to content

Components ​

Every component a stream may use, with its arguments and the values each prop accepts. This page is section 6 of the specification, generated from the schema.

A component has exactly the props listed; any other prop is rejected ([5.9]). "Values" lists what each prop accepts; $state means a $key reference ([5.11]), and id means a component id. The styling of every value (what "muted" or "primary" looks like) belongs to the renderer. In each signature, positional props are written bare in their order, props written name=… can only be given by name, and props in [brackets] are optional: Image(asset, alt=…, [ratio=…]) is written Image("cabin-pines", alt="A cabin", ratio="16:9").

Stack ​

Stack(children, [direction=…], [gap=…], [align=…])
PropPositionRequiredValues
children1yes[id, …] (max 200)
directionnamed onlyno"row" | "column"
gapnamed onlyno"none" | "sm" | "md" | "lg"
alignnamed onlyno"start" | "center" | "end" | "stretch"

Card ​

Card(children, [title=…])
PropPositionRequiredValues
children1yes[id, …] (max 200)
titlenamed onlynotext (max 2000) | $state

Heading ​

Heading(text, [level=…])
PropPositionRequiredValues
text1yestext (max 2000) | $state
levelnamed onlyno1 | 2 | 3

Text ​

Text(text, [format=…], [currency=…], [tone=…])
PropPositionRequiredValues
text1yestext (max 2000) | number | $state
formatnamed onlyno"plain" | "currency" | "date"
currencynamed onlyno3-letter currency code
tonenamed onlyno"default" | "muted" | "strong"

Input ​

Input(value, label=…, [placeholder=…], [lines=…], [required=…], [format=…], [minLength=…], [maxLength=…])
PropPositionRequiredValues
value1yes$state
labelnamed onlyyestext (min 1, max 200)
placeholdernamed onlynotext (max 200)
linesnamed onlynowhole number 1-10
requirednamed onlynotrue | false
formatnamed onlyno"email" | "number" | "phone" | "url"
minLengthnamed onlynowhole number 1-2000
maxLengthnamed onlynowhole number 1-2000

Button ​

Button(label, [action=…], [variant=…])
PropPositionRequiredValues
label1yestext (max 2000) | $state
actionnamed onlynotext (max 64, matching /^[a-z][A-Za-z0-9_]*$/)
variantnamed onlyno"primary" | "secondary" | "danger"

Divider ​

Divider()

No props.

Badge ​

Badge(text, [tone=…])
PropPositionRequiredValues
text1yestext (max 2000) | $state
tonenamed onlyno"neutral" | "success" | "warning" | "danger"

Skeleton ​

Skeleton([lines=…])
PropPositionRequiredValues
linesnamed onlynowhole number 1-6

Image ​

Image(asset, alt=…, [ratio=…])
PropPositionRequiredValues
asset1yesimage name (max 64)
altnamed onlyyestext (min 1, max 300)
rationamed onlyno"1:1" | "4:3" | "3:2" | "16:9"

Rating ​

Rating(value, [max=…])
PropPositionRequiredValues
value1yesnumber | $state
maxnamed onlynowhole number 1-10

DateInput ​

DateInput(value, label=…, [min=…], [max=…], [required=…])
PropPositionRequiredValues
value1yes$state
labelnamed onlyyestext (min 1, max 200)
minnamed onlynodate "YYYY-MM-DD"
maxnamed onlynodate "YYYY-MM-DD"
requirednamed onlynotrue | false

List ​

List(children)
PropPositionRequiredValues
children1yes[id, …] (max 200)

ListItem ​

ListItem(title, [detail=…], [trailing=…], [image=…])
PropPositionRequiredValues
title1yestext (max 2000) | $state
detailnamed onlynotext (max 2000) | $state
trailingnamed onlynotext (max 2000) | $state
imagenamed onlynoimage name (max 64)

Message ​

Message(text, from=…)
PropPositionRequiredValues
text1yestext (max 2000) | $state
fromnamed onlyyes"user" | "assistant"

Select ​

Select(value, label=…, options=…, [placeholder=…], [required=…])
PropPositionRequiredValues
value1yes$state
labelnamed onlyyestext (min 1, max 200)
optionsnamed onlyyes[text (min 1, max 200), …] (max 50)
placeholdernamed onlynotext (max 200)
requirednamed onlynotrue | false

Switch ​

Switch(value, label=…, [required=…])
PropPositionRequiredValues
value1yes$state
labelnamed onlyyestext (min 1, max 200)
requirednamed onlynotrue | false

Table ​

Table(columns, children)
PropPositionRequiredValues
columns1yes[text (min 1, max 200), …] (max 8)
children2yes[id, …] (max 200)

TableRow ​

TableRow(cells)
PropPositionRequiredValues
cells1yes[text (max 2000) | number, …] (max 8)

Tabs ​

Tabs(children)
PropPositionRequiredValues
children1yes[id, …] (max 200)

Tab ​

Tab(label, children)
PropPositionRequiredValues
label1yestext (min 1, max 200)
children2yes[id, …] (max 200)

Notice ​

Notice(text, [tone=…], [title=…])
PropPositionRequiredValues
text1yestext (max 2000) | $state
tonenamed onlyno"info" | "success" | "warning" | "danger"
titlenamed onlynotext (max 2000) | $state

BarChart ​

BarChart(title, labels, children, [format=…], [currency=…])
PropPositionRequiredValues
title1yestext (min 1, max 200)
labels2yes[text (min 1, max 60), …] (max 24)
children3yes[id, …] (max 6)
formatnamed onlyno"number" | "currency" | "percent"
currencynamed onlyno3-letter currency code

LineChart ​

LineChart(title, labels, children, [format=…], [currency=…])
PropPositionRequiredValues
title1yestext (min 1, max 200)
labels2yes[text (min 1, max 60), …] (max 24)
children3yes[id, …] (max 6)
formatnamed onlyno"number" | "currency" | "percent"
currencynamed onlyno3-letter currency code

PieChart ​

PieChart(title, children, [format=…], [currency=…])
PropPositionRequiredValues
title1yestext (min 1, max 200)
children2yes[id, …] (max 8)
formatnamed onlyno"number" | "currency" | "percent"
currencynamed onlyno3-letter currency code

Series ​

Series(name, values)
PropPositionRequiredValues
name1yestext (min 1, max 200)
values2yes[number, …] (max 24)

Slice ​

Slice(name, value)
PropPositionRequiredValues
name1yestext (min 1, max 200)
value2yesnumber

McpMutation ​

McpMutation(target, tool=…, [params=…])
PropPositionRequiredValues
target1yesid of a Button with an action
toolnamed onlyyesa tool name in the app's registry, matching /^[a-z][A-Za-z0-9_]*(\.[a-z][A-Za-z0-9_]*)+$/ (for example payments.confirm)
paramsnamed onlyno{key: value or $state, …} ([5.16])

An McpMutation isn't displayed. It only approves one action for its Button.

Released under the Apache-2.0 licence.