table
Tabular data with pagination.
| Field | Type | Description |
|---|---|---|
columns | [{id, title}] | columns |
rows_endpoint | string | /api/orders?page={page}, {page} starts at 1 |
rows | [row]? | alternative to endpoint for small static tables |
page_size | int? | default 50 |
row_action | action_template? | action with {row.<column_id>} substitution |
swipe_actions | [action]? | templates, like row_action |
context_menu | [action]? |
{
"type": "table",
"columns": [
{
"id": "order",
"title": "Order"
},
{
"id": "status",
"title": "Status"
}
],
"rows_endpoint": "/api/orders?page={page}",
"page_size": 50,
"row_action": {
"type": "navigate",
"endpoint": "/pages/orders/{row.id}"
}
}
rows_endpoint response format
{
"rows": [
{
"id": "142",
"cells": {
"order": "#142",
"status": "paid"
}
}
],
"has_more": true
}
has_more: false — end of the list. {page} starts at 1.
Platform branches
| Platform | View | Capabilities |
|---|---|---|
| iPhone | list | first column → title, second → subtitle/value, the rest collapse; lazy loading on scroll |
| iPad / Mac | table | real columns, sorting, row selection, context menu |
swipe_actions → native swipes on iOS/iPadOS, degrading to a context menu on Mac.
rows_endpoint is relative. An absolute URL is
rejected (see URLs and addresses).