Browse documentation
Docs/Build

App block and action reference

Source-generated reference for every Grid 0.65.0 App Builder block, prop, binding, condition, action, and capability boundary.

App block and action reference

This is the exhaustive App Builder contract for Grid 0.65.0. It is generated from Grid's TypeScript catalog, inspector action schema, framework metadata, responsive CSS, and model-binding ABI. Do not edit this page or its companion JSON by hand. Run node scripts/generate-app-block-reference.mjs after changing the source contract.

For a task-oriented explanation, start with Build Grid apps. For a complete build, follow Build your first Grid app.

Coverage and provenance

Family Blocks
Layout 12
Display 11
Navigation 4
Input 11
Data 5

The catalog contains 43 blocks, including 15 containers. The generator fails if the Button action catalog, inspector action-property map, and normalized action semantics stop agreeing.

Grid source SHA-256 prefix
web/frontend/src/components/workbookSurfaces/appDocument.ts fe18025d8fa2e557
web/frontend/src/components/workbookSurfaces/appFramework.ts 3aa0e51062e1de97
web/frontend/src/components/workbookSurfaces/AppNodeInspector.tsx f9776d615f7c9c0b
web/frontend/src/components/workbookSurfaces/AppNodeRenderer.tsx 9f51965497178808
web/frontend/src/styles.css ff8d0d16c8b36fea
web/shared/modelBindingAbi.ts 481a9ff02380d365

The full normalized fixture is committed at content/docs/build/app-block-contract.generated.json. Hashes cover source contents, not local paths or generation time, so repeated generation is deterministic.

How bindings become capabilities

Bindings declare symbol access; published packages translate that access into reviewable capabilities. Row-scope references such as @item.id resolve inside a Repeater and do not enter the global read/write allowlist.

Binding direction Meaning Published capability request
read Read one model symbol. model.read
write Write one allowlisted model symbol. model.read + model.write
readwrite Read and write the same model symbol. model.read + model.write
range Read a row/range source. model.read

Grid's App packaging path requests model.read whenever the document declares a read or a write, then adds model.write when it declares a write. The ABI still gates individual write verbs with model.write; the per-symbol bindings.writes allowlist is a separate enforcement boundary.

ABI method Kind Required capability Mutates Symbol allowlist
grid.capabilities handshake None in ABI v1 No No
model.manifest read model.read No No
model.range read model.read No No
model.symbols read model.read No No
model.subscribe read model.read No No
model.unsubscribe read model.read No No
model.setInput write model.write Yes Yes
model.setBatchInput write model.write Yes Yes
model.setFormula write model.write Yes Yes
app.location route None in ABI v1 No No
app.setPath route None in ABI v1 Yes No
job.run job job.run Yes No
connector.call connector connector.call Yes No
app.enterDevMode lifecycle None in ABI v1 No No
app.exitDevMode lifecycle None in ABI v1 No No
app.unload lifecycle None in ABI v1 No No

app.route is declared and reviewed for navigation. In ABI v1, app.location and app.setPath remain ungated for compatibility, while package metadata still requests app.route when an App action navigates.

Shared props on every block

Conditions

Prop Label Type Guidance
visibleWhen Visible when condition e.g. "Flag is true", "Qty > 0", or "Status == done".
disabledWhen Disabled when condition Same syntax; disables inputs/buttons in the subtree.

Supported condition operators are ==, !=, >, >=, <, <=, isTrue, isFalse, isEmpty, isSet. Author-facing forms are SYMBOL is true, is false, is empty, is set, or SYMBOL ==|!=|>|>=|<|<= OPERAND. Quoted operands are accepted. A valid condition reads its symbol and therefore contributes model.read; disabledWhen disables the node or subtree, while visibleWhen removes it from display when false.

Responsive visibility

Prop Label Type Default
hideOnMobile Hide on mobile boolean false
hideOnTablet Hide on tablet boolean false
hideOnDesktop Hide on desktop boolean false

The breakpoint bands are mobile at 640 px or below, tablet from 641–1024 px, and desktop at 1025 px or above. These props are presentational and do not affect binding or capability review.

Button actions

All Button actions use label, action, validation, and feedbackMessage. The table lists those common props plus the action-specific props active in the inspector. When validation fails, any action writes a non-empty feedback message to a bound feedback slot. Successful set, increment, decrement, formula, append-row, validate, job, and connector actions also write it; a successful route action does not. Binding feedback is still a declared write for every action and therefore adds the model read/write capability pair.

Action Target binding Active inspector props Effect Capability conditions
set Required label, action, validation, feedbackMessage, value, successRoute Write value to the target symbol. model.read + model.write when target is bound; app.route when successRoute is set
increment Required label, action, validation, feedbackMessage, value, successRoute Read the target, add value, and write the result. model.read + model.write when target is bound; app.route when successRoute is set
decrement Required label, action, validation, feedbackMessage, value, successRoute Read the target, subtract value, and write the result. model.read + model.write when target is bound; app.route when successRoute is set
formula Required label, action, validation, feedbackMessage, formula, successRoute Set the target formula from formula. model.read + model.write when target is bound; app.route when successRoute is set
appendRow Required range label, action, validation, feedbackMessage, row, successRoute Append the parsed row fields to the target row source. model.read + model.write when target is bound; app.route when successRoute is set
validate Not used label, action, validation, feedbackMessage, successRoute Evaluate validation; continue to feedback or successRoute only when it passes. model.read when validation reads a model symbol; model.read + model.write when feedback is bound; app.route when successRoute is set
route Only with writeValue label, action, validation, feedbackMessage, value, writeValue Optionally write writeValue to target, then navigate to the path in value. app.route; model.read + model.write when target and writeValue are set; model.read + model.write when feedback is bound; model.read when validation reads a model symbol
runJob Not used label, action, validation, feedbackMessage, jobName, successRoute Run jobName after validation passes; normal inspector authoring sends an empty payload. job.run; model.read when validation reads a model symbol; model.read + model.write when feedback is bound; app.route when successRoute is set
callConnector Not used label, action, validation, feedbackMessage, connectorName, connectorPayload, successRoute Call connectorName with the optional JSON connectorPayload after validation passes. connector.call; model.read when validation reads a model symbol; model.read + model.write when feedback is bound; app.route when successRoute is set

The Button catalog declares two binding slots: target (write, scalar, action-dependent) and feedback (optional write, text). For appendRow, target is validated as a range. A route target is required only when writeValue is non-empty.

Append rows use one field = value entry per row line. Values may be literals or Repeater scope references such as @item.id. Connector payloads must be valid JSON to be sent as structured data.

SubmitButton transaction

SubmitButton is a separate batch-transaction action rather than a Button action choice. Its writes prop accepts one entry per line:

  • Target = value writes a literal.
  • Target = @current reads the target's current value and writes it back.
  • Target = @item.field resolves a Repeater row-scope value.
  • Target = =FORMULA() sets a formula.

A non-empty transaction requests model.read and model.write; its optional route adds app.route. Its optional feedback binding is a text write. An empty writes list is not advertised as an executable transaction.

Block summary

Type Family Container Props Bindings Purpose
Stack Layout Yes 3 0 Vertical container.
Row Layout Yes 3 0 Horizontal container.
Card Layout Yes 2 0 Bordered container with optional title.
Form Layout Yes 3 0 Groups inputs and a submit action.
Section Layout Yes 5 0 Page section with title, subtitle, spacing, and surface treatment.
Grid Layout Yes 4 0 Responsive columns for dashboard cards, form groups, and repeated panels.
SidebarLayout Layout Yes 3 0 Two-region workspace with a sidebar child and main content that collapses on smaller screens.
Modal Layout Yes 3 1 An overlay dialog shown when a bound boolean cell is true; a button sets it to open.
Drawer Layout Yes 4 1 A side panel that slides in when a bound boolean cell is true.
Menu Navigation Yes 2 1 A dropdown: a trigger button reveals a panel of items when a bound boolean cell is true.
Tabs Layout Yes 1 1 A tab bar over swappable panels; the bound cell holds the active tab and each child is a panel.
Accordion Layout Yes 1 1 Stacked collapsible sections; the bound cell holds the open section and each child is a panel.
Tooltip Layout Yes 2 1 Wraps a child and shows a hint on hover.
Progress Display No 2 1 A progress bar read from a cell (0–max).
Avatar Display No 2 2 A circular avatar showing an image or initials.
Image Display No 4 1 An image from a URL prop or bound cell.
Link Navigation No 3 2 A hyperlink to an external URL (use a Button with the route action for app pages).
Heading Display No 2 1 Section heading.
Text Display No 1 1 Paragraph or label text.
Metric Display No 2 1 Labelled value read from a cell.
Stats Display Yes 1 0 Groups Stat items into a stats band (daisyUI stats).
Stat Display No 3 2 A single titled statistic read from a cell, with an optional description.
Steps Navigation No 1 1 A step progress indicator; the bound value marks the current step.
Divider Display No 1 1 A horizontal rule with an optional centered label.
Badge Display No 2 1 Compact status pill.
Alert Display No 3 2 Model-driven status, warning, or validation feedback.
Nav Navigation No 2 0 Page navigation generated from this app's pages.
NumberInput Input No 4 1 Numeric field bound to a cell.
TextInput Input No 2 1 Text field bound to a cell.
TextArea Input No 3 1 Multi-line text field bound to a cell.
DateInput Input No 3 1 Date field bound to a cell (ISO yyyy-mm-dd).
FileInput Input No 2 1 File picker; writes the chosen file to the bound cell as a data: URL (pair with an Image to preview). Files over 5 MB are rejected.
Toggle Input No 1 1 Boolean switch bound to a cell.
Slider Input No 4 1 Range slider bound to a cell.
Select Input No 2 1 Dropdown bound to a cell.
SegmentedControl Input No 2 1 Button group bound to a model state cell.
Button Input No 12 2 Writes a target cell or navigates an app route when clicked.
SubmitButton Input No 4 1 Writes a group of cells in one click.
Table Data No 10 4 Rows from a bound range.
Detail Data No 4 2 Shows fields from the currently selected row.
BarChart Data No 6 1 Bar, line, area, or pie chart from a bound row source.
List Data No 5 2 Renders one templated line per row of a range.
Repeater Data Yes 5 2 Renders its child template once per row of a range. Children bind to row fields via the item scope; leave it empty for an automatic labelled card.

Layout blocks

Stack

Vertical container. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
gap Gap number 12 min 0; max 64; step 1 —
padding Padding number 0 min 0; max 64; step 1 —
align Align select "stretch" stretch, start, center, end —

Bindings:

This block has no binding slots.

Row

Horizontal container. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
gap Gap number 12 min 0; max 64; step 1 —
align Align select "center" start, center, end, stretch —
justify Justify select "start" start, center, end, space-between —

Bindings:

This block has no binding slots.

Card

Bordered container with optional title. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "" — —
padding Padding number 16 min 0; max 64; step 1 —

Bindings:

This block has no binding slots.

Form

Groups inputs and a submit action. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "Form" — —
gap Gap number 12 min 0; max 64; step 1 —
padding Padding number 16 min 0; max 64; step 1 —

Bindings:

This block has no binding slots.

Section

Page section with title, subtitle, spacing, and surface treatment. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "Section" — —
subtitle Subtitle textarea "" — —
gap Gap number 16 min 0; max 64; step 1 —
padding Padding number 20 min 0; max 64; step 1 —
variant Style select "plain" plain, surface, accent —

Bindings:

This block has no binding slots.

Grid

Responsive columns for dashboard cards, form groups, and repeated panels. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
gap Gap number 12 min 0; max 64; step 1 —
columns Columns select "auto" auto, 2, 3, 4 Auto uses the minimum column width and collapses naturally.
minColumnWidth Min column width number 220 min 120; max 520; step 10 —
align Align select "stretch" stretch, start, center, end —

Bindings:

This block has no binding slots.

SidebarLayout

Two-region workspace with a sidebar child and main content that collapses on smaller screens. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
gap Gap number 16 min 0; max 64; step 1 —
sidebarWidth Sidebar width number 280 min 160; max 520; step 10 —
collapseAt Collapse below select "768" 640, 768, 960, never The packaged app stacks regions below this width.

Bindings:

This block has no binding slots.

An overlay dialog shown when a bound boolean cell is true; a button sets it to open. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "Dialog" — —
gap Gap number 12 min 0; max 64; step 1 —
dismissible Close on backdrop click boolean true — —

Bindings:

Slot Label Direction Shape Required Published capability request
open Open when readwrite boolean Required model.read + model.write

Drawer

A side panel that slides in when a bound boolean cell is true. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "Panel" — —
side Side select "right" left, right —
gap Gap number 12 min 0; max 64; step 1 —
dismissible Close on backdrop click boolean true — —

Bindings:

Slot Label Direction Shape Required Published capability request
open Open when readwrite boolean Required model.read + model.write

Tabs

A tab bar over swappable panels; the bound cell holds the active tab and each child is a panel. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
tabs Tabs options ["Overview","Details"] — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Active tab readwrite text Required model.read + model.write

Accordion

Stacked collapsible sections; the bound cell holds the open section and each child is a panel. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
sections Sections options ["Section 1","Section 2"] — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Open section readwrite text Required model.read + model.write

Tooltip

Wraps a child and shows a hint on hover. Family: Layout. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
text Tip text "Tooltip" — —
position Position select "top" top, bottom, left, right —

Bindings:

Slot Label Direction Shape Required Published capability request
text Tip from cell read text Optional model.read

Display blocks

Progress

A progress bar read from a cell (0–max). Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
max Max number 100 min 1; step 1 —
variant Variant select "default" default, success, warning, danger —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value read number Required model.read

Avatar

A circular avatar showing an image or initials. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Name / initials text "GR" — —
size Size select "md" sm, md, lg —

Bindings:

Slot Label Direction Shape Required Published capability request
src Image URL from cell read text Optional model.read
label Name from cell read text Optional model.read

Image

An image from a URL prop or bound cell. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
src Image URL text "" — —
alt Alt text text "" — —
fit Fit select "cover" cover, contain —
height Height number 160 min 24; max 720; step 8 —

Bindings:

Slot Label Direction Shape Required Published capability request
src Image URL from cell read text Optional model.read

Heading

Section heading. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
text Text text "Heading" — —
level Level select "2" 1, 2, 3 —

Bindings:

Slot Label Direction Shape Required Published capability request
text Text from cell read scalar Optional model.read

Text

Paragraph or label text. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
text Text textarea "Text" — —

Bindings:

Slot Label Direction Shape Required Published capability request
text Text from cell read scalar Optional model.read

Metric

Labelled value read from a cell. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Metric" — —
format Format select "number" number, currency, percent, text —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value read scalar Required model.read

Stats

Groups Stat items into a stats band (daisyUI stats). Family: Display. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
gap Gap number 16 min 0; max 64; step 1 —

Bindings:

This block has no binding slots.

Stat

A single titled statistic read from a cell, with an optional description. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "Stat" — —
format Format select "number" number, currency, percent, text —
desc Description text "" — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value read scalar Required model.read
desc Description from cell read text Optional model.read

Divider

A horizontal rule with an optional centered label. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "" — —

Bindings:

Slot Label Direction Shape Required Published capability request
label Label from cell read text Optional model.read

Badge

Compact status pill. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
text Text text "Badge" — —
variant Variant select "default" default, success, warning, danger —

Bindings:

Slot Label Direction Shape Required Published capability request
text Text from cell read scalar Optional model.read

Alert

Model-driven status, warning, or validation feedback. Family: Display. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "Status" — —
message Message textarea "Message" — —
variant Variant select "info" info, success, warning, danger —

Bindings:

Slot Label Direction Shape Required Published capability request
title Title from cell read text Optional model.read
message Message from cell read text Optional model.read

A dropdown: a trigger button reveals a panel of items when a bound boolean cell is true. Family: Navigation. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
label Trigger label text "Menu" — —
align Align select "left" left, right —

Bindings:

Slot Label Direction Shape Required Published capability request
open Open when readwrite boolean Required model.read + model.write

A hyperlink to an external URL (use a Button with the route action for app pages). Family: Navigation. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
text Text text "Link" — —
href URL text "https://" — —
newTab Open in new tab boolean true — —

Bindings:

Slot Label Direction Shape Required Published capability request
text Text from cell read text Optional model.read
href URL from cell read text Optional model.read

Steps

A step progress indicator; the bound value marks the current step. Family: Navigation. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
options Steps options ["Step 1","Step 2","Step 3"] — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Current step read number Optional model.read

Page navigation generated from this app's pages. Family: Navigation. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
variant Style select "tabs" tabs, pills, list —
includeHome Include home boolean true — Show the page marked as this app's home.

Bindings:

This block has no binding slots.

Input blocks

NumberInput

Numeric field bound to a cell. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Number" — —
min Min number — — —
max Max number — — —
step Step number 1 — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite number Required model.read + model.write

TextInput

Text field bound to a cell. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Text" — —
placeholder Placeholder text "" — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite text Required model.read + model.write

TextArea

Multi-line text field bound to a cell. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Notes" — —
placeholder Placeholder text "" — —
rows Rows number 4 min 2; max 20; step 1 —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite text Required model.read + model.write

DateInput

Date field bound to a cell (ISO yyyy-mm-dd). Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Date" — —
min Min text "" — —
max Max text "" — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite text Required model.read + model.write

FileInput

File picker; writes the chosen file to the bound cell as a data: URL (pair with an Image to preview). Files over 5 MB are rejected. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "File" — —
accept Accept text "" — e.g. image/* — limits the picker.

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite text Required model.read + model.write

Toggle

Boolean switch bound to a cell. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Toggle" — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite boolean Required model.read + model.write

Slider

Range slider bound to a cell. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Slider" — —
min Min number 0 — —
max Max number 100 — —
step Step number 1 — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite number Required model.read + model.write

Select

Dropdown bound to a cell. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Select" — —
options Options options ["Option A","Option B"] — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite scalar Required model.read + model.write

SegmentedControl

Button group bound to a model state cell. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Mode" — —
options Options options ["Option A","Option B"] — —

Bindings:

Slot Label Direction Shape Required Published capability request
value Value readwrite scalar Required model.read + model.write

Button

Writes a target cell or navigates an app route when clicked. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Button" — —
action Action select "increment" set, increment, decrement, formula, appendRow, validate, route, runJob, callConnector —
value Value / amount / route text "1" — For route, enter a package-relative appPath such as "dist/customer/1".
writeValue Write before route text "" — Optional for route actions: write this value to the target cell before navigating.
row Append row options [] — For append row actions, one per line: field = value or field = @item.field.
validation Validate condition "" — Optional action guard, e.g. "Approved is true" or "Amount > 0".
successRoute Route after success text "" — Optional package-relative appPath after a successful write, append, or validation.
feedbackMessage Feedback message text "" — —
jobName Job text "" — —
connectorName Connector text "" — —
connectorPayload Connector payload textarea "" — Optional JSON payload for connector-call action planning.
formula Formula text "" — —

Bindings:

Slot Label Direction Shape Required Published capability request
target Target cell write scalar Action-dependent; see the Button action table model.read + model.write
feedback Feedback cell write text Optional model.read + model.write

SubmitButton

Writes a group of cells in one click. Family: Input. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
label Label text "Submit" — —
writes Writes options [] — One per line: Target = value, Target = @current, Target = @item.field, or Target = =FORMULA().
route Route after submit text "" — Optional package-relative appPath such as "dist/records".
feedbackMessage Feedback message text "" — —

Bindings:

Slot Label Direction Shape Required Published capability request
feedback Feedback cell write text Optional model.read + model.write

Data blocks

Table

Rows from a bound range. Family: Data. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
columns Columns (blank = all) options [] — One per line: column, or column:Label.
rowLimit Max rows number 50 min 1; max 1000; step 1 —
striped Striped rows boolean true — —
sortable Sortable columns boolean true — —
pageSize Rows per page number 0 min 0; max 500; step 1 0 shows all rows (no pager).
selectValue Select value column text "" — Optional column written to the selected binding when a row is clicked. Blank writes the 1-based row number.
filterColumns Filter columns (blank = shown) options [] — Columns searched by the filter binding. Blank searches the shown columns.
viewColumn View column text "" — Optional column matched exactly against the bound view value.
viewAllValue All view value text "All" — A bound view value that disables the exact view-column filter.
empty Empty message text "No rows." — —

Bindings:

Slot Label Direction Shape Required Published capability request
rows Rows range range Required model.read
filter Filter text read text Optional model.read
view View value read scalar Optional model.read
selected Selected value readwrite scalar Optional model.read + model.write

Detail

Shows fields from the currently selected row. Family: Data. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "Detail" — —
fields Fields (blank = all) options [] — One per line: column, or column:Label.
selectValue Select value column text "" — Must match the Table's select value. Blank uses the 1-based row number.
empty Empty message text "Select a row." — —

Bindings:

Slot Label Direction Shape Required Published capability request
rows Rows range range Required model.read
selected Selected value read scalar Required model.read

BarChart

Bar, line, area, or pie chart from a bound row source. Family: Data. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
title Title text "Chart" — —
type Chart type select "bar" bar, line, area, pie —
labelColumn Label column text "" — Blank uses the first column.
valueColumn Value column text "" — Blank uses the first numeric-looking column.
maxBars Max bars number 8 min 1; max 50; step 1 —
empty Empty message text "No chart data." — —

Bindings:

Slot Label Direction Shape Required Published capability request
rows Rows range range Required model.read

List

Renders one templated line per row of a range. Family: Data. Container: no.

Props:

Key Label Type Default Choices / limits Author guidance
template Line template text "{0}" — Use {0}, {1}… for columns, or {Header} when the range has headers.
ordered Numbered boolean false — —
rowLimit Max rows number 50 min 1; max 1000; step 1 —
selectValue Select value column text "" — Optional column written to the selected binding. Blank writes the 1-based row number.
empty Empty message text "No items." — —

Bindings:

Slot Label Direction Shape Required Published capability request
rows Rows range range Required model.read
selected Selected value readwrite scalar Optional model.read + model.write

Repeater

Renders its child template once per row of a range. Children bind to row fields via the item scope; leave it empty for an automatic labelled card. Family: Data. Container: yes.

Props:

Key Label Type Default Choices / limits Author guidance
itemAlias Item name text "item" — Children reference this row's fields as @item.column.
fields Fields (empty template only) options [] — One per line: column, or column:Label. Used only when the template is empty.
filterColumns Filter columns (blank = fields/all) options [] — Columns searched by the filter binding. Blank searches declared fields or all row fields.
rowLimit Max rows number 25 min 1; max 500; step 1 —
empty Empty message text "No records." — —

Bindings:

Slot Label Direction Shape Required Published capability request
rows Rows range range Required model.read
filter Filter text read text Optional model.read