ARIA · table fallbackAccessibility
Canvas ARIA metadata is paired with a text summary and table fallback.
Graflume · Alpha
Render rows and columns as a Scene table for exact-value comparison. These tabs come from Graflume's public catalog. Every mode owns runnable data, options, a Quick API, and source-backed feature claims.
Chart family · Default families
Render rows and columns as a Scene table for exact-value comparison.
table()graflumetableChart-specific features
Run the canonical Table mode and focused tabs for columns, styling, conditions, merges, in-cell visuals, editing, date/time, sorting, grouping, pivoting, data/history/export, and virtualization.
Table chart uses runnable data and options to demonstrate Canvas header and cells; declarative column layout and locale-aware formatting.
StatusLoading
tableCanvas header and cellsdeclarative column layout and locale-aware formattinglayered table/header/row/column/cell stylesclosed conditional formattingexplicit and repeated-value mergesdata bar/heatmap/progress/sparkline/status-badge cellsexact cell hitbounded native semantic HTML mirrorroving keyboard navigation with focus, tooltip and selection synchronizationinteractive sort/filter/group/pivot controlsgrouped summaries and paging windowsvirtualization and frozen regionscell-level keyboard grid navigationtyped editing and validationimmutable view/source data APIsbounded reset/undo/redosafe CSV/JSON exportformatter registryLoading
Row data and zero-copy TypedArray columns share one data contract.
categoryordinal | valuequantitative | targetquantitative | previousquantitative |
|---|---|---|---|
| Insights | 86 | 88 | 74 |
| Dashboards | 78 | 82 | 69 |
| Reports | 69 | 74 | 65 |
| Alerts | 61 | 66 | 48 |
| Models | 48 | 55 | 41 |
| Exports | 37 | 44 | 34 |
Browser API
const data = [
{
"category": "Insights",
"high": 91,
"low": 81,
"previous": 74,
"target": 88,
"value": 86,
"width": 24
},
{
"category": "Dashboards",
"high": 84,
"low": 72,
"previous": 69,
"target": 82,
"value": 78,
"width": 21
},
{
"category": "Reports",
"high": 76,
"low": 63,
"previous": 65,
"target": 74,
"value": 69,
"width": 18
},
{
"category": "Alerts",
"high": 68,
"low": 55,
"previous": 48,
"target": 66,
"value": 61,
"width": 15
},
{
"category": "Models",
"high": 56,
"low": 42,
"previous": 41,
"target": 55,
"value": 48,
"width": 12
},
{
"category": "Exports",
"high": 45,
"low": 31,
"previous": 34,
"target": 44,
"value": 37,
"width": 10
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
}
],
"title": "Table",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Table chart uses runnable data and options to demonstrate Canvas header and cells; declarative column layout and locale-aware formatting.",
"text": "Table"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
}
],
"title": "Table",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
"category",
"value",
"target",
"previous"
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Table chart uses runnable data and options to demonstrate Canvas header and cells; declarative column layout and locale-aware formatting.",
"text": "Table"
},
"width": "container",
"x": {
"field": "category",
"title": "Capability",
"type": "ordinal"
},
"y": {
"field": "value",
"title": "Current value",
"type": "quantitative"
}
}Configure column headers, widths, bounds, alignment and formatters together with row, header, padding and grid geometry.
StatusLoading
columns-layoutLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Columns and layout example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Columns and layout",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"cellPadding": 11,
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"grid": {
"color": "#dbe4f0",
"columns": true,
"rows": true,
"width": 1
},
"headerHeight": 48,
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Configure column headers, widths, bounds, alignment and formatters together with row, header, padding and grid geometry.",
"text": "Table · Columns and layout"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Columns and layout example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Columns and layout",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"cellPadding": 11,
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"grid": {
"color": "#dbe4f0",
"columns": true,
"rows": true,
"width": 1
},
"headerHeight": 48,
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Configure column headers, widths, bounds, alignment and formatters together with row, header, padding and grid geometry.",
"text": "Table · Columns and layout"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Layer safe table, header, column, row, and individual-cell color, typography, border, opacity, and alignment styles.
StatusLoading
cell-stylesLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Cell, row, and column styles example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Cell, row, and column styles",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"cellStyles": [
{
"field": "status",
"row": 1,
"style": {
"fill": "#fff7ed",
"fontWeight": 700,
"textColor": "#c2410c"
}
}
],
"columnStyles": {
"actual": {
"fill": "#eff6ff",
"fontWeight": 700,
"textColor": "#1d4ed8"
}
},
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"headerStyle": {
"fill": "#172554",
"fontWeight": 800,
"textColor": "#ffffff"
},
"rowHeight": 43,
"rowStyles": [
{
"row": 0,
"style": {
"fill": "#ecfdf5",
"textColor": "#065f46"
}
}
],
"style": {
"stroke": "#dbe4f0"
}
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Layer safe table, header, column, row, and individual-cell color, typography, border, opacity, and alignment styles.",
"text": "Table · Cell, row, and column styles"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Cell, row, and column styles example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Cell, row, and column styles",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"cellStyles": [
{
"field": "status",
"row": 1,
"style": {
"fill": "#fff7ed",
"fontWeight": 700,
"textColor": "#c2410c"
}
}
],
"columnStyles": {
"actual": {
"fill": "#eff6ff",
"fontWeight": 700,
"textColor": "#1d4ed8"
}
},
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"headerStyle": {
"fill": "#172554",
"fontWeight": 800,
"textColor": "#ffffff"
},
"rowHeight": 43,
"rowStyles": [
{
"row": 0,
"style": {
"fill": "#ecfdf5",
"textColor": "#065f46"
}
}
],
"style": {
"stroke": "#dbe4f0"
}
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Layer safe table, header, column, row, and individual-cell color, typography, border, opacity, and alignment styles.",
"text": "Table · Cell, row, and column styles"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Apply predictable cell, row, or column styling with closed equality, range, membership, text, and null conditions.
StatusLoading
conditional-formattingLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Conditional formatting example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Conditional formatting",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"conditionalFormats": [
{
"style": {
"fill": "#fef2f2",
"textColor": "#991b1b"
},
"target": "row",
"when": {
"field": "status",
"operator": "equals",
"value": "At risk"
}
},
{
"field": "actual",
"style": {
"fill": "#dcfce7",
"fontWeight": 800,
"textColor": "#166534"
},
"target": "cell",
"when": {
"operator": "greater-or-equal",
"value": 90
}
},
{
"field": "actual",
"style": {
"fill": "#fee2e2",
"fontWeight": 800,
"textColor": "#b91c1c"
},
"target": "cell",
"when": {
"operator": "less",
"value": 75
}
}
],
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Apply predictable cell, row, or column styling with closed equality, range, membership, text, and null conditions.",
"text": "Table · Conditional formatting"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Conditional formatting example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Conditional formatting",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"conditionalFormats": [
{
"style": {
"fill": "#fef2f2",
"textColor": "#991b1b"
},
"target": "row",
"when": {
"field": "status",
"operator": "equals",
"value": "At risk"
}
},
{
"field": "actual",
"style": {
"fill": "#dcfce7",
"fontWeight": 800,
"textColor": "#166534"
},
"target": "cell",
"when": {
"operator": "greater-or-equal",
"value": 90
}
},
{
"field": "actual",
"style": {
"fill": "#fee2e2",
"fontWeight": 800,
"textColor": "#b91c1c"
},
"target": "cell",
"when": {
"operator": "less",
"value": 75
}
}
],
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Apply predictable cell, row, or column styling with closed equality, range, membership, text, and null conditions.",
"text": "Table · Conditional formatting"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Use explicit row/column spans and consecutive-value merging; overlap, overflow, and frozen-boundary crossings fail closed.
StatusLoading
merged-cellsLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Merged cells and repeated values example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Merged cells and repeated values",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "region",
"header": "Region",
"style": {
"fill": "#eef2ff",
"fontWeight": 800
},
"width": 120
},
{
"field": "team",
"header": "Team",
"width": 190
},
{
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Score",
"width": 100
}
],
"mergeRepeats": [
"region"
],
"merges": [
{
"column": "team",
"columnSpan": 2,
"row": 0
}
],
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Use explicit row/column spans and consecutive-value merging; overlap, overflow, and frozen-boundary crossings fail closed.",
"text": "Table · Merged cells and repeated values"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Merged cells and repeated values example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Merged cells and repeated values",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "region",
"header": "Region",
"style": {
"fill": "#eef2ff",
"fontWeight": 800
},
"width": 120
},
{
"field": "team",
"header": "Team",
"width": 190
},
{
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Score",
"width": 100
}
],
"mergeRepeats": [
"region"
],
"merges": [
{
"column": "team",
"columnSpan": 2,
"row": 0
}
],
"rowHeight": 43
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Use explicit row/column spans and consecutive-value merging; overlap, overflow, and frozen-boundary crossings fail closed.",
"text": "Table · Merged cells and repeated values"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Keep exact text while adding data bars, heatmaps, progress tracks, sparklines, and status badges inside cells.
StatusLoading
in-cell-visualsLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · In-cell visuals example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · In-cell visuals",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"cellPadding": 9,
"columns": [
{
"field": "team",
"header": "Team",
"style": {
"fontWeight": 700
},
"width": 165
},
{
"field": "actual",
"formatter": "integer",
"header": "Actual",
"visual": {
"color": "#3b82f6",
"max": 100,
"min": 0,
"negativeColor": "#ef4444",
"type": "data-bar"
},
"width": 145
},
{
"field": "target",
"formatter": "integer",
"header": "Target",
"visual": {
"color": "#10b981",
"max": 100,
"min": 0,
"trackColor": "#d1fae5",
"type": "progress"
},
"width": 135
},
{
"field": "delta",
"formatter": "integer",
"header": "Delta",
"visual": {
"highColor": "#bbf7d0",
"lowColor": "#fecaca",
"max": 10,
"min": -20,
"type": "heatmap"
},
"width": 120
},
{
"field": "trend",
"header": "5-period trend",
"visual": {
"color": "#4f46e5",
"fill": "#e0e7ff",
"type": "sparkline"
},
"width": 180
},
{
"field": "status",
"header": "Status",
"visual": {
"colors": {
"At risk": "#dc2626",
"On track": "#15803d",
"Watch": "#d97706"
},
"defaultColor": "#64748b",
"type": "status-badge"
},
"width": 135
}
],
"headerHeight": 46,
"rowHeight": 48
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Keep exact text while adding data bars, heatmaps, progress tracks, sparklines, and status badges inside cells.",
"text": "Table · In-cell visuals"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · In-cell visuals example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · In-cell visuals",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"cellPadding": 9,
"columns": [
{
"field": "team",
"header": "Team",
"style": {
"fontWeight": 700
},
"width": 165
},
{
"field": "actual",
"formatter": "integer",
"header": "Actual",
"visual": {
"color": "#3b82f6",
"max": 100,
"min": 0,
"negativeColor": "#ef4444",
"type": "data-bar"
},
"width": 145
},
{
"field": "target",
"formatter": "integer",
"header": "Target",
"visual": {
"color": "#10b981",
"max": 100,
"min": 0,
"trackColor": "#d1fae5",
"type": "progress"
},
"width": 135
},
{
"field": "delta",
"formatter": "integer",
"header": "Delta",
"visual": {
"highColor": "#bbf7d0",
"lowColor": "#fecaca",
"max": 10,
"min": -20,
"type": "heatmap"
},
"width": 120
},
{
"field": "trend",
"header": "5-period trend",
"visual": {
"color": "#4f46e5",
"fill": "#e0e7ff",
"type": "sparkline"
},
"width": 180
},
{
"field": "status",
"header": "Status",
"visual": {
"colors": {
"At risk": "#dc2626",
"On track": "#15803d",
"Watch": "#d97706"
},
"defaultColor": "#64748b",
"type": "status-badge"
},
"width": 135
}
],
"headerHeight": 46,
"rowHeight": 48
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Keep exact text while adding data bars, heatmaps, progress tracks, sparklines, and status badges inside cells.",
"text": "Table · In-cell visuals"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Edit by pointer or keyboard with text-pattern, number, integer, select, date, datetime, and boolean editors plus required, range, and allow-list validation; the playground below invokes the same API.
StatusLoading
editing-validationLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Table · live API
Invoke validated editing, history, data, and export APIs on the chart instance currently visible in this panel.
Latest result
waiting
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Editing and validation example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Editing and validation",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"editable": true,
"editor": {
"type": "text"
},
"field": "owner",
"header": "Owner · text",
"validation": {
"maxLength": 24,
"minLength": 2,
"pattern": "^[A-Za-z][A-Za-z '-]{1,23}$",
"required": true
},
"width": 155
},
{
"align": "right",
"editable": true,
"editor": {
"type": "number"
},
"field": "target",
"formatter": "number",
"header": "Target · number",
"validation": {
"max": 100,
"min": 0,
"required": true
},
"width": 150
},
{
"align": "right",
"editable": true,
"editor": {
"type": "integer"
},
"field": "actual",
"formatter": "integer",
"header": "Actual · integer",
"validation": {
"max": 100,
"min": 0,
"required": true
},
"width": 155
},
{
"editable": true,
"editor": {
"options": [
"On track",
"Watch",
"At risk"
],
"type": "select"
},
"field": "status",
"header": "Status · select",
"validation": {
"values": [
"On track",
"Watch",
"At risk"
]
},
"width": 165
},
{
"dateStyle": "medium",
"editable": true,
"editor": {
"type": "date"
},
"field": "reviewDate",
"formatter": "date",
"header": "Review · date",
"timeZone": "UTC",
"validation": {
"required": true
},
"width": 175
},
{
"dateStyle": "short",
"editable": true,
"editor": {
"type": "datetime"
},
"field": "updated",
"formatter": "datetime",
"header": "Updated · datetime",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"validation": {
"required": true
},
"width": 215
},
{
"editable": true,
"editor": {
"type": "boolean"
},
"field": "approved",
"header": "Approved · boolean",
"width": 175
}
],
"editing": {
"commit": "enter-or-blur",
"enabled": true,
"key": "id"
},
"rowHeight": 46
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Edit by pointer or keyboard with text-pattern, number, integer, select, date, datetime, and boolean editors plus required, range, and allow-list validation; the playground below invokes the same API.",
"text": "Table · Editing and validation"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
chart.on('tableeditchange', ({ field, newValue, valid, reason }) => {
console.log({ field, newValue, valid, reason });
});
// Programmatic edits use the same editor and validation contract.
chart.setTableCellValue('layer-0', { key: 'KR-01' }, 'actual', 97);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Editing and validation example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Editing and validation",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"editable": true,
"editor": {
"type": "text"
},
"field": "owner",
"header": "Owner · text",
"validation": {
"maxLength": 24,
"minLength": 2,
"pattern": "^[A-Za-z][A-Za-z '-]{1,23}$",
"required": true
},
"width": 155
},
{
"align": "right",
"editable": true,
"editor": {
"type": "number"
},
"field": "target",
"formatter": "number",
"header": "Target · number",
"validation": {
"max": 100,
"min": 0,
"required": true
},
"width": 150
},
{
"align": "right",
"editable": true,
"editor": {
"type": "integer"
},
"field": "actual",
"formatter": "integer",
"header": "Actual · integer",
"validation": {
"max": 100,
"min": 0,
"required": true
},
"width": 155
},
{
"editable": true,
"editor": {
"options": [
"On track",
"Watch",
"At risk"
],
"type": "select"
},
"field": "status",
"header": "Status · select",
"validation": {
"values": [
"On track",
"Watch",
"At risk"
]
},
"width": 165
},
{
"dateStyle": "medium",
"editable": true,
"editor": {
"type": "date"
},
"field": "reviewDate",
"formatter": "date",
"header": "Review · date",
"timeZone": "UTC",
"validation": {
"required": true
},
"width": 175
},
{
"dateStyle": "short",
"editable": true,
"editor": {
"type": "datetime"
},
"field": "updated",
"formatter": "datetime",
"header": "Updated · datetime",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"validation": {
"required": true
},
"width": 215
},
{
"editable": true,
"editor": {
"type": "boolean"
},
"field": "approved",
"header": "Approved · boolean",
"width": 175
}
],
"editing": {
"commit": "enter-or-blur",
"enabled": true,
"key": "id"
},
"rowHeight": 46
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Edit by pointer or keyboard with text-pattern, number, integer, select, date, datetime, and boolean editors plus required, range, and allow-list validation; the playground below invokes the same API.",
"text": "Table · Editing and validation"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Preserve date-only calendar values while authors choose locale styles and an IANA time zone for instants.
StatusLoading
date-time-formatLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Date and time formatting example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Date and time formatting",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "team",
"header": "Team",
"width": 175
},
{
"dateStyle": "long",
"field": "reviewDate",
"formatter": "date",
"header": "Review date",
"timeZone": "UTC",
"width": 180
},
{
"dateStyle": "medium",
"field": "updated",
"formatter": "datetime",
"header": "Updated in Seoul",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 235
},
{
"field": "status",
"header": "Status",
"width": 135
}
],
"headerHeight": 46,
"rowHeight": 44
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Preserve date-only calendar values while authors choose locale styles and an IANA time zone for instants.",
"text": "Table · Date and time formatting"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Date and time formatting example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Date and time formatting",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "team",
"header": "Team",
"width": 175
},
{
"dateStyle": "long",
"field": "reviewDate",
"formatter": "date",
"header": "Review date",
"timeZone": "UTC",
"width": 180
},
{
"dateStyle": "medium",
"field": "updated",
"formatter": "datetime",
"header": "Updated in Seoul",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 235
},
{
"field": "status",
"header": "Status",
"width": 135
}
],
"headerHeight": 46,
"rowHeight": 44
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Preserve date-only calendar values while authors choose locale styles and an IANA time zone for instants.",
"text": "Table · Date and time formatting"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Apply bounded stable multi-column sorting and closed filters, with header clicks cycling ascending, descending, and source order.
StatusLoading
sort-filterLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Sort and filter example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Sort and filter",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 75
}
],
"rowHeight": 45,
"sort": [
{
"direction": "ascending",
"field": "status"
},
{
"direction": "descending",
"field": "actual"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Apply bounded stable multi-column sorting and closed filters, with header clicks cycling ascending, descending, and source order.",
"text": "Table · Sort and filter"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Sort and filter example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Sort and filter",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"align": "left",
"field": "team",
"header": "Team",
"maxWidth": 280,
"minWidth": 130,
"style": {
"fontWeight": 700
},
"width": 190
},
{
"align": "left",
"field": "owner",
"header": "Owner",
"width": 120
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual",
"width": 105
},
{
"align": "right",
"field": "target",
"formatter": "integer",
"header": "Target",
"width": 105
},
{
"align": "left",
"field": "status",
"header": "Status",
"width": 140
},
{
"field": "approved",
"header": "Approved",
"visible": false,
"width": 110
}
],
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 75
}
],
"rowHeight": 45,
"sort": [
{
"direction": "ascending",
"field": "status"
},
{
"direction": "descending",
"field": "actual"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Apply bounded stable multi-column sorting and closed filters, with header clicks cycling ascending, descending, and source order.",
"text": "Table · Sort and filter"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Group rows and compute count, sum, mean, minimum, and maximum aggregates as a separate summary view.
StatusLoading
group-subtotalLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Groups and subtotals example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Groups and subtotals",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"group": {
"aggregates": [
{
"as": "average_score",
"field": "actual",
"op": "mean"
},
{
"as": "target_total",
"field": "target",
"op": "sum"
},
{
"as": "team_count",
"field": "actual",
"op": "count"
}
],
"fields": [
"region"
]
},
"rowHeight": 54,
"sort": [
{
"direction": "descending",
"field": "average_score"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Group rows and compute count, sum, mean, minimum, and maximum aggregates as a separate summary view.",
"text": "Table · Groups and subtotals"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Groups and subtotals example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Groups and subtotals",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"group": {
"aggregates": [
{
"as": "average_score",
"field": "actual",
"op": "mean"
},
{
"as": "target_total",
"field": "target",
"op": "sum"
},
{
"as": "team_count",
"field": "actual",
"op": "count"
}
],
"fields": [
"region"
]
},
"rowHeight": 54,
"sort": [
{
"direction": "descending",
"field": "average_score"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Group rows and compute count, sum, mean, minimum, and maximum aggregates as a separate summary view.",
"text": "Table · Groups and subtotals"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Turn long-form data into a cross-tab by declaring row, column, value, and aggregate operation.
StatusLoading
pivotLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Pivot example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Pivot",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"headerHeight": 48,
"pivot": {
"column": "quarter",
"op": "mean",
"row": "region",
"value": "actual"
},
"rowHeight": 56
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Turn long-form data into a cross-tab by declaring row, column, value, and aggregate operation.",
"text": "Table · Pivot"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Pivot example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Pivot",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"headerHeight": 48,
"pivot": {
"column": "quarter",
"op": "mean",
"row": "region",
"value": "actual"
},
"rowHeight": 56
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Turn long-form data into a cross-tab by declaring row, column, value, and aggregate operation.",
"text": "Table · Pivot"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Read current-view or source rows, apply validated programmatic edits with undo and redo, and export safe CSV or JSON.
StatusLoading
data-history-exportLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Table · live API
Invoke validated editing, history, data, and export APIs on the chart instance currently visible in this panel.
Latest result
waiting
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Data, edit history, and export example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Data, edit history, and export",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "id",
"header": "ID",
"style": {
"fontWeight": 800
},
"width": 95
},
{
"field": "team",
"header": "Team",
"width": 175
},
{
"editable": true,
"editor": {
"type": "text"
},
"field": "owner",
"header": "Owner",
"validation": {
"required": true
},
"width": 125
},
{
"align": "right",
"editable": true,
"editor": {
"type": "integer"
},
"field": "actual",
"formatter": "integer",
"header": "Actual",
"validation": {
"max": 100,
"min": 0
},
"width": 115
},
{
"field": "status",
"header": "Status",
"width": 140
}
],
"editing": {
"commit": "enter-or-blur",
"enabled": true,
"key": "id"
},
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 70
}
],
"rowHeight": 45,
"sort": [
{
"direction": "descending",
"field": "actual"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Read current-view or source rows, apply validated programmatic edits with undo and redo, and export safe CSV or JSON.",
"text": "Table · Data, edit history, and export"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
const visibleRows = chart.getTableData('layer-0', 'view');
const sourceRows = chart.getTableData('layer-0', 'source');
chart.setTableCellValue('layer-0', { key: 'KR-02' }, 'actual', 86);
chart.undoTableEdit('layer-0');
chart.redoTableEdit('layer-0');
const csv = chart.exportTableCSV('layer-0', 'view');
const json = chart.exportTableJSON('layer-0', 'source');
chart.resetTableData('layer-0');
console.log({ visibleRows, sourceRows, csv, json });Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Data, edit history, and export example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Data, edit history, and export",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "id",
"header": "ID",
"style": {
"fontWeight": 800
},
"width": 95
},
{
"field": "team",
"header": "Team",
"width": 175
},
{
"editable": true,
"editor": {
"type": "text"
},
"field": "owner",
"header": "Owner",
"validation": {
"required": true
},
"width": 125
},
{
"align": "right",
"editable": true,
"editor": {
"type": "integer"
},
"field": "actual",
"formatter": "integer",
"header": "Actual",
"validation": {
"max": 100,
"min": 0
},
"width": 115
},
{
"field": "status",
"header": "Status",
"width": 140
}
],
"editing": {
"commit": "enter-or-blur",
"enabled": true,
"key": "id"
},
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 70
}
],
"rowHeight": 45,
"sort": [
{
"direction": "descending",
"field": "actual"
}
]
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Read current-view or source rows, apply validated programmatic edits with undo and redo, and export safe CSV or JSON.",
"text": "Table · Data, edit history, and export"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Render only the active row and column window while keeping leading regions frozen; offsets and limits support pages or continuous windows.
StatusLoading
virtual-freezeLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Virtualization, frozen regions, and pages example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Virtualization, frozen regions, and pages",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columnLimit": 6,
"columnOffset": 2,
"columns": [
"id",
"region",
"team",
"owner",
"actual",
"target",
"delta",
"status",
"reviewDate",
"updated"
],
"frozenColumns": 2,
"frozenRows": 1,
"headerHeight": 47,
"rowHeight": 45,
"windowLimit": 7,
"windowOffset": 3
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Render only the active row and column window while keeping leading regions frozen; offsets and limits support pages or continuous windows.",
"text": "Table · Virtualization, frozen regions, and pages"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
Graflume.table('#chart', data, options);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Virtualization, frozen regions, and pages example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Virtualization, frozen regions, and pages",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columnLimit": 6,
"columnOffset": 2,
"columns": [
"id",
"region",
"team",
"owner",
"actual",
"target",
"delta",
"status",
"reviewDate",
"updated"
],
"frozenColumns": 2,
"frozenRows": 1,
"headerHeight": 47,
"rowHeight": 45,
"windowLimit": 7,
"windowOffset": 3
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Render only the active row and column window while keeping leading regions frozen; offsets and limits support pages or continuous windows.",
"text": "Table · Virtualization, frozen regions, and pages"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Bind string, number, integer, percent, date, time, datetime, and JSON formatter ids to columns, with host formatters registered safely in a separate RuntimeRegistry.
StatusLoading
formatter-registryLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Formatter registry example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Formatter registry",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "team",
"formatter": "string",
"header": "Team · string",
"width": 155
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual · integer",
"width": 145
},
{
"align": "right",
"field": "target",
"formatter": "number",
"header": "Target · number",
"width": 150
},
{
"align": "right",
"field": "completion",
"formatter": "percent",
"header": "Complete · percent",
"width": 170
},
{
"field": "updated",
"formatter": "time",
"header": "Seoul time",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 155
},
{
"field": "trend",
"header": "Trend · JSON",
"width": 205
}
],
"formatters": {
"trend": "json"
},
"headerHeight": 47,
"rowHeight": 45
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Bind string, number, integer, percent, date, time, datetime, and JSON formatter ids to columns, with host formatters registered safely in a separate RuntimeRegistry.",
"text": "Table · Formatter registry"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
console.log(Graflume.capabilities().tableFormatters);
// Hosts can create an isolated registry without putting callbacks in ChartSpec.
const registry = Graflume.createRegistry();
registry.registerTableFormatter('score-label', (value, row, locale) =>
new Intl.NumberFormat(locale, { maximumFractionDigits: 0 }).format(value) + ' pts'
);
console.log(registry.capabilities().tableFormatters);Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Formatter registry example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Formatter registry",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "team",
"formatter": "string",
"header": "Team · string",
"width": 155
},
{
"align": "right",
"field": "actual",
"formatter": "integer",
"header": "Actual · integer",
"width": 145
},
{
"align": "right",
"field": "target",
"formatter": "number",
"header": "Target · number",
"width": 150
},
{
"align": "right",
"field": "completion",
"formatter": "percent",
"header": "Complete · percent",
"width": 170
},
{
"field": "updated",
"formatter": "time",
"header": "Seoul time",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 155
},
{
"field": "trend",
"header": "Trend · JSON",
"width": 205
}
],
"formatters": {
"trend": "json"
},
"headerHeight": 47,
"rowHeight": 45
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Bind string, number, integer, percent, date, time, datetime, and JSON formatter ids to columns, with host formatters registered safely in a separate RuntimeRegistry.",
"text": "Table · Formatter registry"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Read and update filters, multi-sort, grouping, pivoting, row/column windows, and focus at runtime, with tablechange events and reset.
StatusLoading
live-runtimeLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Live table state APIs example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Live table state APIs",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columnLimit": 6,
"columnOffset": 1,
"columns": [
"id",
"region",
"team",
"owner",
"actual",
"target",
"status",
"quarter"
],
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 75
}
],
"frozenColumns": 1,
"rowHeight": 45,
"sort": [
{
"direction": "ascending",
"field": "region"
},
{
"direction": "descending",
"field": "actual"
}
],
"windowLimit": 8,
"windowOffset": 1
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Read and update filters, multi-sort, grouping, pivoting, row/column windows, and focus at runtime, with tablechange events and reset.",
"text": "Table · Live table state APIs"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
chart.on('tablechange', ({ state, reason }) => console.log({ state, reason }));
chart.setTableFilters('layer-0', [
{ field: 'actual', operator: 'greater-or-equal', value: 80 },
]);
chart.setTableSort('layer-0', [
{ field: 'region', direction: 'ascending' },
{ field: 'actual', direction: 'descending' },
]);
chart.setTableGroup('layer-0', {
fields: ['region'],
aggregates: [{ field: 'actual', op: 'mean', as: 'average_score' }],
});
chart.setTablePivot('layer-0', {
row: 'region', column: 'quarter', value: 'actual', op: 'mean',
});
chart.setTableRuntimeState('layer-0', {
windowOffset: 1, windowLimit: 8, columnOffset: 1, columnLimit: 6,
});
chart.focusTableCell('layer-0', 0, 0);
console.log(chart.getTableRuntimeState('layer-0'));
chart.resetTableRuntime('layer-0');Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Live table state APIs example"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Live table state APIs",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columnLimit": 6,
"columnOffset": 1,
"columns": [
"id",
"region",
"team",
"owner",
"actual",
"target",
"status",
"quarter"
],
"filters": [
{
"field": "actual",
"operator": "greater-or-equal",
"value": 75
}
],
"frozenColumns": 1,
"rowHeight": 45,
"sort": [
{
"direction": "ascending",
"field": "region"
},
{
"direction": "descending",
"field": "actual"
}
],
"windowLimit": 8,
"windowOffset": 1
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Read and update filters, multi-sort, grouping, pivoting, row/column windows, and focus at runtime, with tablechange events and reset.",
"text": "Table · Live table state APIs"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Expose a bounded native table that preserves merged and formatted cells, with cell focus and Arrow, Home/End, and PageUp/PageDown navigation.
StatusLoading
semantic-keyboardLoading
Row data and zero-copy TypedArray columns share one data contract.
idordinal | regionordinal | teamordinal | ownerordinal | actualquantitative | targetquantitative | deltaquantitative | statusordinal | reviewDatetemporal | updatedtemporal | quarterordinal | trendnominal | completionquantitative | approvednominal |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| KR-01 | Korea | Insights | Minji | 96 | 92.5 | 4 | On track | 2026-08-28 | 2026-08-27T09:15:00Z | Q3 | [78 82 86 91 96] | 0.96 | true |
| KR-02 | Korea | Dashboards | Joon | 84 | 88.5 | -4 | Watch | 2026-08-29 | 2026-08-27T10:40:00Z | Q3 | [75 80 79 82 84] | 0.84 | false |
| KR-03 | Korea | Forecasting | Sora | 73 | 86.5 | -13 | At risk | 2026-08-30 | 2026-08-27T11:20:00Z | Q4 | [81 79 77 75 73] | 0.73 | false |
| KR-04 | Korea | Quality | Hyun | 91 | 90.5 | 1 | On track | 2026-09-01 | 2026-08-27T12:05:00Z | Q4 | [85 86 88 90 91] | 0.91 | true |
| AP-01 | APAC | Research | Aiko | 89 | 87.5 | 2 | On track | 2026-09-02 | 2026-08-27T13:25:00Z | Q3 | [80 83 85 87 89] | 0.89 | true |
| AP-02 | APAC | Operations | Wei | 67 | 82.5 | -15 | At risk | 2026-09-03 | 2026-08-27T14:10:00Z | Q3 | [76 74 72 69 67] | 0.67 | false |
| AP-03 | APAC | Automation | Noor | 81 | 80.5 | 1 | On track | 2026-09-04 | 2026-08-27T15:45:00Z | Q4 | [70 73 76 79 81] | 0.81 | true |
| AP-04 | APAC | Exports | Maya | 78 | 84.5 | -6 | Watch | 2026-09-05 | 2026-08-27T16:30:00Z | Q4 | [72 74 77 76 78] | 0.78 | false |
| EU-01 | Europe | Governance | Lena | 94 | 90.5 | 4 | On track | 2026-09-06 | 2026-08-27T17:05:00Z | Q3 | [83 86 89 92 94] | 0.94 | true |
| EU-02 | Europe | Metadata | Omar | 76 | 81.5 | -5 | Watch | 2026-09-07 | 2026-08-27T18:20:00Z | Q3 | [71 73 75 77 76] | 0.76 | false |
| EU-03 | Europe | Privacy | Eva | 88 | 88.5 | 0 | On track | 2026-09-08 | 2026-08-27T19:10:00Z | Q4 | [82 84 86 87 88] | 0.88 | true |
| EU-04 | Europe | Reliability | Theo | 69 | 85.5 | -16 | At risk | 2026-09-09 | 2026-08-27T20:35:00Z | Q4 | [79 76 74 71 69] | 0.69 | false |
Browser API
const data = [
{
"actual": 96,
"approved": true,
"completion": 0.96,
"delta": 4,
"id": "KR-01",
"owner": "Minji",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-28",
"status": "On track",
"target": 92.5,
"team": "Insights",
"trend": [
78,
82,
86,
91,
96
],
"updated": "2026-08-27T09:15:00Z"
},
{
"actual": 84,
"approved": false,
"completion": 0.84,
"delta": -4,
"id": "KR-02",
"owner": "Joon",
"quarter": "Q3",
"region": "Korea",
"reviewDate": "2026-08-29",
"status": "Watch",
"target": 88.5,
"team": "Dashboards",
"trend": [
75,
80,
79,
82,
84
],
"updated": "2026-08-27T10:40:00Z"
},
{
"actual": 73,
"approved": false,
"completion": 0.73,
"delta": -13,
"id": "KR-03",
"owner": "Sora",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-08-30",
"status": "At risk",
"target": 86.5,
"team": "Forecasting",
"trend": [
81,
79,
77,
75,
73
],
"updated": "2026-08-27T11:20:00Z"
},
{
"actual": 91,
"approved": true,
"completion": 0.91,
"delta": 1,
"id": "KR-04",
"owner": "Hyun",
"quarter": "Q4",
"region": "Korea",
"reviewDate": "2026-09-01",
"status": "On track",
"target": 90.5,
"team": "Quality",
"trend": [
85,
86,
88,
90,
91
],
"updated": "2026-08-27T12:05:00Z"
},
{
"actual": 89,
"approved": true,
"completion": 0.89,
"delta": 2,
"id": "AP-01",
"owner": "Aiko",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-02",
"status": "On track",
"target": 87.5,
"team": "Research",
"trend": [
80,
83,
85,
87,
89
],
"updated": "2026-08-27T13:25:00Z"
},
{
"actual": 67,
"approved": false,
"completion": 0.67,
"delta": -15,
"id": "AP-02",
"owner": "Wei",
"quarter": "Q3",
"region": "APAC",
"reviewDate": "2026-09-03",
"status": "At risk",
"target": 82.5,
"team": "Operations",
"trend": [
76,
74,
72,
69,
67
],
"updated": "2026-08-27T14:10:00Z"
},
{
"actual": 81,
"approved": true,
"completion": 0.81,
"delta": 1,
"id": "AP-03",
"owner": "Noor",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-04",
"status": "On track",
"target": 80.5,
"team": "Automation",
"trend": [
70,
73,
76,
79,
81
],
"updated": "2026-08-27T15:45:00Z"
},
{
"actual": 78,
"approved": false,
"completion": 0.78,
"delta": -6,
"id": "AP-04",
"owner": "Maya",
"quarter": "Q4",
"region": "APAC",
"reviewDate": "2026-09-05",
"status": "Watch",
"target": 84.5,
"team": "Exports",
"trend": [
72,
74,
77,
76,
78
],
"updated": "2026-08-27T16:30:00Z"
},
{
"actual": 94,
"approved": true,
"completion": 0.94,
"delta": 4,
"id": "EU-01",
"owner": "Lena",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-06",
"status": "On track",
"target": 90.5,
"team": "Governance",
"trend": [
83,
86,
89,
92,
94
],
"updated": "2026-08-27T17:05:00Z"
},
{
"actual": 76,
"approved": false,
"completion": 0.76,
"delta": -5,
"id": "EU-02",
"owner": "Omar",
"quarter": "Q3",
"region": "Europe",
"reviewDate": "2026-09-07",
"status": "Watch",
"target": 81.5,
"team": "Metadata",
"trend": [
71,
73,
75,
77,
76
],
"updated": "2026-08-27T18:20:00Z"
},
{
"actual": 88,
"approved": true,
"completion": 0.88,
"delta": 0,
"id": "EU-03",
"owner": "Eva",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-08",
"status": "On track",
"target": 88.5,
"team": "Privacy",
"trend": [
82,
84,
86,
87,
88
],
"updated": "2026-08-27T19:10:00Z"
},
{
"actual": 69,
"approved": false,
"completion": 0.69,
"delta": -16,
"id": "EU-04",
"owner": "Theo",
"quarter": "Q4",
"region": "Europe",
"reviewDate": "2026-09-09",
"status": "At risk",
"target": 85.5,
"team": "Reliability",
"trend": [
79,
76,
74,
71,
69
],
"updated": "2026-08-27T20:35:00Z"
}
];
const options = {
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Semantic table and keyboard example",
"maxRows": 12,
"navigation": true,
"table": "visible"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Semantic table and keyboard",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "region",
"header": "Region",
"style": {
"fontWeight": 800
},
"width": 125
},
{
"field": "team",
"header": "Team",
"width": 190
},
{
"field": "status",
"header": "Status",
"width": 135
},
{
"dateStyle": "medium",
"field": "updated",
"formatter": "datetime",
"header": "Updated in Seoul",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 235
}
],
"mergeRepeats": [
"region"
],
"rowHeight": 44
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Expose a bounded native table that preserves merged and formatted cells, with cell focus and Arrow, Home/End, and PageUp/PageDown navigation.",
"text": "Table · Semantic table and keyboard"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
};
const chart = Graflume.table('#chart', data, options);
chart.focusTableCell('layer-0', 0, 0);
const semanticRows = chart.toAccessibleRows(12);
const accessibility = chart.getAccessibilityState();
console.log({ semanticRows, accessibility });Portable schema
{
"accessibility": {
"description": "Zoom and pan inspect the rendered surface without changing data axes or values. When playback controls are available, they move through real steps in the order each unique value first appears in the source data.",
"label": "Table · Semantic table and keyboard example",
"maxRows": 12,
"navigation": true,
"table": "visible"
},
"height": 620,
"interaction": {
"controls": {
"annotations": false,
"export": true,
"fullscreen": true,
"labels": {
"controls": "Chart controls",
"enterFullscreen": "Enter fullscreen",
"exitFullscreen": "Exit fullscreen",
"exportPng": "Download PNG",
"hideAnnotations": "Hide callouts",
"loop": "Loop playback",
"nextFrame": "Next frame",
"pause": "Pause",
"play": "Play",
"previousFrame": "Previous frame",
"reset": "Reset view",
"seek": "Playback position",
"showAnnotations": "Show callouts",
"speed": "Playback speed",
"zoomIn": "Zoom in",
"zoomOut": "Zoom out"
},
"playback": false,
"reset": true,
"zoom": true
},
"hover": true,
"navigation": {
"drag": true,
"keyboard": true,
"maxZoom": 6,
"minZoom": 1,
"pinch": true,
"wheel": "modifier"
},
"tooltip": {
"fields": [
{
"field": "column",
"format": "auto",
"label": "Column"
},
{
"field": "formatted",
"format": "auto",
"label": "Formatted"
},
{
"dateStyle": "long",
"field": "reviewDate",
"format": "date",
"label": "ReviewDate",
"timeZone": "UTC"
},
{
"dateStyle": "medium",
"field": "updated",
"format": "datetime",
"label": "Updated",
"timeStyle": "short",
"timeZone": "UTC"
}
],
"title": "Table · Semantic table and keyboard",
"trigger": "mark"
}
},
"locale": "en",
"mark": {
"options": {
"columns": [
{
"field": "region",
"header": "Region",
"style": {
"fontWeight": 800
},
"width": 125
},
{
"field": "team",
"header": "Team",
"width": 190
},
{
"field": "status",
"header": "Status",
"width": 135
},
{
"dateStyle": "medium",
"field": "updated",
"formatter": "datetime",
"header": "Updated in Seoul",
"timeStyle": "short",
"timeZone": "Asia/Seoul",
"width": 235
}
],
"mergeRepeats": [
"region"
],
"rowHeight": 44
}
},
"padding": {
"top": 52
},
"theme": "graflume-light",
"title": {
"subtitle": "Expose a bounded native table that preserves merged and formatted cells, with cell focus and Arrow, Home/End, and PageUp/PageDown navigation.",
"text": "Table · Semantic table and keyboard"
},
"width": "container",
"x": {
"field": "team",
"title": "Team",
"type": "ordinal"
},
"y": {
"field": "actual",
"title": "Score",
"type": "quantitative"
}
}Catalog
The source-controlled catalog maps callable modes in this family and compatibility identifiers to their canonical modes. This table contains executable entries only.
1 modes · 0 compatibility identifiers
| ID | Name | Quick API | mode | mark | renderer |
|---|---|---|---|---|---|
table | Table chart | table() | default | table | canvas |
Manual
ARIA · table fallbackCanvas ARIA metadata is paired with a text summary and table fallback.
standard · large · ultraStandard, large, and ultra profiles bound rendering work.