List
A tabular data display that renders rows of structured data with configurable columns. Rows are populated via sync and can be formatted per column.
Type
"list"
Relevant Fields
Inherits all Control Definition. Key fields:
| Field | Type | Default | Description |
|---|---|---|---|
label |
string | falls back to id |
Header label |
listColumns |
array | — | Column definitions: [{key, label, format}] |
listColumns[].key |
string | required | Field to read from each row. A dot path reaches into nested rows — see Column keys |
listColumns[].label |
string | required | Column header text |
listColumns[].format |
string | — | Number format applied to numeric cells (same formats as Label) |
tint |
color | "#FFFFFF" |
Header text color |
hideLabel |
bool | false |
Hide header label |
hideBackground |
bool | false |
Remove glass card background |
Column keys
A key is looked up flat on the row first, so "key": "name" reads row.name and a
row whose field name genuinely contains a dot still works.
If there's no flat match and the key contains dots, it's walked as a dot path:
"properties.title"→row.properties.title"geometry.coordinates.0"→ an integer segment indexes an array
That's what makes a nested public feed usable without a server in between: rows from
a GeoJSON features[] keep their data under properties, and a path key reads it
directly. A key that resolves to nothing renders as —.
Examples
Device status list
{
"type": "list",
"id": "device-list",
"position": [0, 0],
"span": [2, 4],
"label": "Connected Devices",
"listColumns": [
{ "key": "name", "label": "Name" },
{ "key": "status", "label": "Status" },
{ "key": "latency", "label": "Ping", "format": "number" }
],
"sync": { "method": "meshsocket", "event": "device_list" }
}
Nested feed rows (USGS GeoJSON, no server)
{
"type": "list",
"id": "quake-list",
"position": [2, 0],
"span": [3, 4],
"label": "Recent quakes",
"listColumns": [
{ "key": "properties.mag", "label": "M", "format": "number" },
{ "key": "properties.place", "label": "Place" },
{ "key": "geometry.coordinates.2", "label": "Depth", "format": "number" }
],
"sync": [{ "method": "http", "url": "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/all_hour.geojson", "interval": 300, "valuePath": "features" }]
}
valuePath picks the row array out of the document; each column key then reaches
into that row.
Related
- Control Definition — Base fields
- Sync — Real-time data sync