@fuaran-ui/conformance 0.5.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/corpus/lenient/lenient-transform-source-rowmajor.expected.json +1 -0
  2. package/corpus/lenient/lenient-transform-source-rowmajor.json +1 -0
  3. package/corpus/lenient/lenient-transform-source-state-rows.expected.json +1 -0
  4. package/corpus/lenient/lenient-transform-source-state-rows.json +1 -0
  5. package/corpus/manifest.json +311 -1
  6. package/corpus/nodes/badge-transform-live.json +1 -0
  7. package/corpus/nodes/button-setstate-valuefrom.json +1 -0
  8. package/corpus/nodes/chart-axis-titles.json +1 -0
  9. package/corpus/nodes/chart-data-labels.json +1 -0
  10. package/corpus/nodes/chart-legend-position.json +1 -0
  11. package/corpus/nodes/chart-temporal-x.json +1 -0
  12. package/corpus/nodes/chart-value-format.json +1 -0
  13. package/corpus/nodes/composite-root.json +1 -1
  14. package/corpus/nodes/composite-tabs-panels.json +1 -0
  15. package/corpus/nodes/controls-closure.json +1 -1
  16. package/corpus/nodes/controls-declarative.json +1 -1
  17. package/corpus/nodes/drawing-rotated-labels.json +1 -0
  18. package/corpus/nodes/drawing-tipped-shapes.json +1 -0
  19. package/corpus/nodes/empty-state-card.json +1 -0
  20. package/corpus/nodes/form-toggle.json +1 -0
  21. package/corpus/nodes/grid-bound-sort.json +1 -0
  22. package/corpus/nodes/grid-declared-edit.json +1 -0
  23. package/corpus/nodes/grid-paged-sorted.json +1 -0
  24. package/corpus/nodes/grid-paged.json +1 -0
  25. package/corpus/nodes/grid-sort-state-key.json +1 -0
  26. package/corpus/nodes/icon-1.json +1 -0
  27. package/corpus/nodes/link-protected-1.json +1 -0
  28. package/corpus/nodes/master-detail-multi-field.json +1 -0
  29. package/corpus/nodes/metric-duration-1.json +1 -0
  30. package/corpus/nodes/now-environment-binding.json +1 -0
  31. package/corpus/nodes/step-1.json +1 -1
  32. package/corpus/nodes/switch-on-selection.json +1 -0
  33. package/corpus/nodes/table-sortable-1.json +1 -0
  34. package/corpus/ops/op-replaceroot.json +1 -1
  35. package/corpus/reject/reject-nearmiss-column-readonly.json +1 -0
  36. package/corpus/reject/reject-nearmiss-grid-behaviour-record.json +1 -0
  37. package/corpus/reject/reject-nearmiss-grid-current-page.json +1 -0
  38. package/corpus/reject/reject-nearmiss-grid-sortable.json +1 -0
  39. package/corpus/reject/reject-setstate-value-and-valuefrom.json +1 -0
  40. package/corpus/reject/reject-transform-source-empty-wrapper.json +1 -0
  41. package/corpus/reject/reject-unknown-link-protection.json +1 -0
  42. package/corpus/reject/reject-unknown-static-sort-direction.json +1 -0
  43. package/corpus/reject/reject-wrongtype-grid-default-sort-column.json +1 -0
  44. package/corpus/reject/reject-wrongtype-grid-page-size-zero.json +1 -0
  45. package/corpus/reject/reject-wrongtype-static-sort-column.json +1 -0
  46. package/corpus/schema.json +411 -47
  47. package/package.json +3 -3
@@ -0,0 +1 @@
1
+ {"id":"len-tf-rowmajor","kind":{"$type":"DataGrid","columns":[{"field":"dept","kind":{"$type":"Text"},"label":"Dept"}],"rowKeyField":"dept","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"amount":{"validity":[true,true],"values":[100,200]},"dept":{"validity":[true,true],"values":["ops","eng"]}},"schema":[{"name":"amount","type":"int"},{"name":"dept","type":"string"}]}}}}
@@ -0,0 +1 @@
1
+ {"id":"len-tf-rowmajor","kind":{"$type":"DataGrid","columns":[{"field":"dept","kind":{"$type":"Text"},"label":"Dept"}],"rowKeyField":"dept","source":{"$type":"Transform","pipeline":[],"source":[{"dept":"ops","amount":100},{"dept":"eng","amount":200}]}}}
@@ -0,0 +1 @@
1
+ {"id":"len-tf-state-rows","kind":{"$type":"Badge","label":{"$type":"Bound","binding":{"$type":"Transform","pipeline":[],"source":{"$type":"State","defaultValue":[{"dept":"ops","waitMins":12},{"dept":"eng","waitMins":31}],"key":"waitTimes"}}},"variant":"Neutral"}}
@@ -0,0 +1 @@
1
+ {"id":"len-tf-state-rows","kind":{"$type":"Badge","label":{"$type":"Bound","binding":{"$type":"Transform","pipeline":[],"source":{"$type":"State","defaultValue":[{"dept":"ops","waitMins":12},{"dept":"eng","waitMins":31}],"key":"waitTimes"}}},"variant":"Neutral"}}
@@ -1,6 +1,7 @@
1
1
  {
2
2
  "version": 1,
3
3
  "schema": "schema.json",
4
+ "idl": "idl.json",
4
5
  "description": "Fuaran canonical wire-format conformance corpus. node-round-trip / op-round-trip fixtures: decode inputFile, re-encode, assert byte-equal to expectedFile. reject fixtures: decode inputFile, assert DecodeError.Code = expectedErrorCode and DecodeError.Path starts with expectedPath. lenient-accept fixtures (WIRE_FORMAT 16): decode the SHORTHAND inputFile, re-encode, assert byte-equal to expectedFile (the verbose canonical form) — a conformant host MUST accept the shorthand and normalise it; rejecting it, or decoding it to different bytes, is non-conformant. envelope-round-trip / envelope-reject fixtures (WIRE_FORMAT 15): read the $profile/$payload envelope, negotiate the authored profile against the host's own core@1.0, then either re-render byte-equal to expectedFile (Current/Behind — unknown kinds preserved verbatim, must-ignore-but-preserve) or refuse a Foreign profile with expectedErrorCode FOREIGN_PROFILE at expectedPath. elicitation-round-trip / elicitation-reject fixtures (WIRE_FORMAT 18): decode with the decoder-named entry point (elicitation = the envelope codec, elicitation-outcome = the outcome codec), then either re-encode byte-equal to expectedFile or assert the structured refusal (expectedErrorCode at a path starting with expectedPath). elicitation-answer-accept / elicitation-answer-reject fixtures (WIRE_FORMAT 18.4): the inputFile pairs {answer, contract}; run the host's answer-conformance validation and assert acceptance or the expected refusal. See fuaran-dotnet/docs/WIRE_FORMAT.md.",
5
6
  "kinds": [
6
7
  "Badge",
@@ -21,6 +22,7 @@
21
22
  "FragmentDecl",
22
23
  "FragmentRef",
23
24
  "Heading",
25
+ "Icon",
24
26
  "Image",
25
27
  "LabelValueRow",
26
28
  "Link",
@@ -53,7 +55,8 @@
53
55
  "RangedNumber",
54
56
  "SegmentedChoice",
55
57
  "Text",
56
- "TextArea"
58
+ "TextArea",
59
+ "Toggle"
57
60
  ],
58
61
  "fixtures": [
59
62
  {
@@ -824,6 +827,22 @@
824
827
  "expectedFile": "lenient/lenient-transform-schemaless.expected.json",
825
828
  "description": "fuaran-core#88 — an embedded Transform source may omit schema; column types infer from the cells (int/float/bool/string only)"
826
829
  },
830
+ {
831
+ "id": "lenient-transform-source-rowmajor",
832
+ "kind": "lenient-accept",
833
+ "decoder": "node",
834
+ "inputFile": "lenient/lenient-transform-source-rowmajor.json",
835
+ "expectedFile": "lenient/lenient-transform-source-rowmajor.expected.json",
836
+ "description": "fuaran#815 — ROW-MAJOR Transform source (an array of row objects) transposes to canonical columnar: first-row key set, absent cells null"
837
+ },
838
+ {
839
+ "id": "lenient-transform-source-state-rows",
840
+ "kind": "lenient-accept",
841
+ "decoder": "node",
842
+ "inputFile": "lenient/lenient-transform-source-state-rows.json",
843
+ "expectedFile": "lenient/lenient-transform-source-state-rows.expected.json",
844
+ "description": "fuaran#815/fuaran#818 — the Tier-D pilot shape: a State binding as the Transform source is preserved as a LIVE source (subscription semantics; the carried defaultValue is the initial snapshot) and round-trips byte-for-byte — the canonical spelling, not a shorthand"
845
+ },
827
846
  {
828
847
  "id": "lenient-transform-step-aliases",
829
848
  "kind": "lenient-accept",
@@ -856,6 +875,14 @@
856
875
  "expectedFile": "nodes/badge-1.json",
857
876
  "description": "Display/Badge"
858
877
  },
878
+ {
879
+ "id": "badge-transform-live",
880
+ "kind": "node-round-trip",
881
+ "decoder": "node",
882
+ "inputFile": "nodes/badge-transform-live.json",
883
+ "expectedFile": "nodes/badge-transform-live.json",
884
+ "description": "Display/Badge (Phase 818 — LIVE State-sourced Transform: the Tier-D count badge, preserved source + initial snapshot)"
885
+ },
859
886
  {
860
887
  "id": "boundary-1",
861
888
  "kind": "node-round-trip",
@@ -904,6 +931,14 @@
904
931
  "expectedFile": "nodes/btn-read-workbook.json",
905
932
  "description": "Input/Button (Action.ReadFileBody base64)"
906
933
  },
934
+ {
935
+ "id": "button-setstate-valuefrom",
936
+ "kind": "node-round-trip",
937
+ "decoder": "node",
938
+ "inputFile": "nodes/button-setstate-valuefrom.json",
939
+ "expectedFile": "nodes/button-setstate-valuefrom.json",
940
+ "description": "Input/Button (Phase 818 — SetState.valueFrom: a derived state write from the selected row's field)"
941
+ },
907
942
  {
908
943
  "id": "call-into",
909
944
  "kind": "node-round-trip",
@@ -936,6 +971,30 @@
936
971
  "expectedFile": "nodes/chart-1.json",
937
972
  "description": "Visualisation/Chart"
938
973
  },
974
+ {
975
+ "id": "chart-axis-titles",
976
+ "kind": "node-round-trip",
977
+ "decoder": "node",
978
+ "inputFile": "nodes/chart-axis-titles.json",
979
+ "expectedFile": "nodes/chart-axis-titles.json",
980
+ "description": "Visualisation/Chart (Phase 878 — xTitle/yTitle/subtitle: the axis names + the muted subtitle)"
981
+ },
982
+ {
983
+ "id": "chart-data-labels",
984
+ "kind": "node-round-trip",
985
+ "decoder": "node",
986
+ "inputFile": "nodes/chart-data-labels.json",
987
+ "expectedFile": "nodes/chart-data-labels.json",
988
+ "description": "Visualisation/Chart (Phase 881 — dataLabels: values written onto the picture)"
989
+ },
990
+ {
991
+ "id": "chart-legend-position",
992
+ "kind": "node-round-trip",
993
+ "decoder": "node",
994
+ "inputFile": "nodes/chart-legend-position.json",
995
+ "expectedFile": "nodes/chart-legend-position.json",
996
+ "description": "Visualisation/Chart (Phase 880 — legendPosition: the legend's declared edge)"
997
+ },
939
998
  {
940
999
  "id": "chart-state-rows",
941
1000
  "kind": "node-round-trip",
@@ -944,6 +1003,22 @@
944
1003
  "expectedFile": "nodes/chart-state-rows.json",
945
1004
  "description": "Visualisation/Chart (Phase 663/665 — chart on the editable grid's state key)"
946
1005
  },
1006
+ {
1007
+ "id": "chart-temporal-x",
1008
+ "kind": "node-round-trip",
1009
+ "decoder": "node",
1010
+ "inputFile": "nodes/chart-temporal-x.json",
1011
+ "expectedFile": "nodes/chart-temporal-x.json",
1012
+ "description": "Visualisation/Chart (Phase 882 — xScale: a temporal x-axis over ISO-8601 date cells)"
1013
+ },
1014
+ {
1015
+ "id": "chart-value-format",
1016
+ "kind": "node-round-trip",
1017
+ "decoder": "node",
1018
+ "inputFile": "nodes/chart-value-format.json",
1019
+ "expectedFile": "nodes/chart-value-format.json",
1020
+ "description": "Visualisation/Chart (Phase 876 — valueFormat: the value axis's declared number format)"
1021
+ },
947
1022
  {
948
1023
  "id": "code-1",
949
1024
  "kind": "node-round-trip",
@@ -960,6 +1035,14 @@
960
1035
  "expectedFile": "nodes/composite-root.json",
961
1036
  "description": "Composite (Dashboard ⊃ Card ⊃ Metric + Stack)"
962
1037
  },
1038
+ {
1039
+ "id": "composite-tabs-panels",
1040
+ "kind": "node-round-trip",
1041
+ "decoder": "node",
1042
+ "inputFile": "nodes/composite-tabs-panels.json",
1043
+ "expectedFile": "nodes/composite-tabs-panels.json",
1044
+ "description": "Layout/Tabs (composite — containers inside a wrapper, grid panel, pre-filled controls)"
1045
+ },
963
1046
  {
964
1047
  "id": "controls-closure",
965
1048
  "kind": "node-round-trip",
@@ -1032,6 +1115,30 @@
1032
1115
  "expectedFile": "nodes/drawing-empty.json",
1033
1116
  "description": "Display/Drawing (degenerate — empty)"
1034
1117
  },
1118
+ {
1119
+ "id": "drawing-rotated-labels",
1120
+ "kind": "node-round-trip",
1121
+ "decoder": "node",
1122
+ "inputFile": "nodes/drawing-rotated-labels.json",
1123
+ "expectedFile": "nodes/drawing-rotated-labels.json",
1124
+ "description": "Display/Drawing (Phase 877 — rotated Labels, incl. explicit 0 and 2-dp fraction)"
1125
+ },
1126
+ {
1127
+ "id": "drawing-tipped-shapes",
1128
+ "kind": "node-round-trip",
1129
+ "decoder": "node",
1130
+ "inputFile": "nodes/drawing-tipped-shapes.json",
1131
+ "expectedFile": "nodes/drawing-tipped-shapes.json",
1132
+ "description": "Display/Drawing (Phase 883 — tipped shapes, incl. hostile text, Bound tip and explicit empty)"
1133
+ },
1134
+ {
1135
+ "id": "empty-state-card",
1136
+ "kind": "node-round-trip",
1137
+ "decoder": "node",
1138
+ "inputFile": "nodes/empty-state-card.json",
1139
+ "expectedFile": "nodes/empty-state-card.json",
1140
+ "description": "Layout/Box (Phase 767 — the canonical empty state with a CTA: one Card region, no nested Callout)"
1141
+ },
1035
1142
  {
1036
1143
  "id": "fact-1",
1037
1144
  "kind": "node-round-trip",
@@ -1152,6 +1259,14 @@
1152
1259
  "expectedFile": "nodes/form-segmented.json",
1153
1260
  "description": "Input/Form (SegmentedChoice horizontal + vertical)"
1154
1261
  },
1262
+ {
1263
+ "id": "form-toggle",
1264
+ "kind": "node-round-trip",
1265
+ "decoder": "node",
1266
+ "inputFile": "nodes/form-toggle.json",
1267
+ "expectedFile": "nodes/form-toggle.json",
1268
+ "description": "Input/Form (Phase 766 — the Toggle switch affordance beside a Checkbox)"
1269
+ },
1155
1270
  {
1156
1271
  "id": "format-bindings",
1157
1272
  "kind": "node-round-trip",
@@ -1232,6 +1347,22 @@
1232
1347
  "expectedFile": "nodes/grid-1.json",
1233
1348
  "description": "Visualisation/Grid"
1234
1349
  },
1350
+ {
1351
+ "id": "grid-bound-sort",
1352
+ "kind": "node-round-trip",
1353
+ "decoder": "node",
1354
+ "inputFile": "nodes/grid-bound-sort.json",
1355
+ "expectedFile": "nodes/grid-bound-sort.json",
1356
+ "description": "Visualisation/Grid (Phase 861 — bound-path sort: per-column sortable narrowing + a declared initial order)"
1357
+ },
1358
+ {
1359
+ "id": "grid-declared-edit",
1360
+ "kind": "node-round-trip",
1361
+ "decoder": "node",
1362
+ "inputFile": "nodes/grid-declared-edit.json",
1363
+ "expectedFile": "nodes/grid-declared-edit.json",
1364
+ "description": "Visualisation/Grid (Phase 863 — declared edit destination + per-column read-only narrowing)"
1365
+ },
1235
1366
  {
1236
1367
  "id": "grid-editable-state",
1237
1368
  "kind": "node-round-trip",
@@ -1248,6 +1379,30 @@
1248
1379
  "expectedFile": "nodes/grid-field-named.json",
1249
1380
  "description": "Visualisation/Grid (Phase 425 — field-named columns + RowKeyField, closure-free)"
1250
1381
  },
1382
+ {
1383
+ "id": "grid-paged",
1384
+ "kind": "node-round-trip",
1385
+ "decoder": "node",
1386
+ "inputFile": "nodes/grid-paged.json",
1387
+ "expectedFile": "nodes/grid-paged.json",
1388
+ "description": "Visualisation/Grid (Phase 862 — pageStateKey + pageSize: declarative pagination, renderer-owned pager)"
1389
+ },
1390
+ {
1391
+ "id": "grid-paged-sorted",
1392
+ "kind": "node-round-trip",
1393
+ "decoder": "node",
1394
+ "inputFile": "nodes/grid-paged-sorted.json",
1395
+ "expectedFile": "nodes/grid-paged-sorted.json",
1396
+ "description": "Visualisation/Grid (Phase 862 — paging and sorting composed: two behaviours, two state keys, one rule)"
1397
+ },
1398
+ {
1399
+ "id": "grid-sort-state-key",
1400
+ "kind": "node-round-trip",
1401
+ "decoder": "node",
1402
+ "inputFile": "nodes/grid-sort-state-key.json",
1403
+ "expectedFile": "nodes/grid-sort-state-key.json",
1404
+ "description": "Visualisation/Grid (Phase 818 — sortStateKey: the data-bound grid-sort header affordance)"
1405
+ },
1251
1406
  {
1252
1407
  "id": "grid-toned-pill",
1253
1408
  "kind": "node-round-trip",
@@ -1280,6 +1435,14 @@
1280
1435
  "expectedFile": "nodes/heading-1.json",
1281
1436
  "description": "Display/Heading"
1282
1437
  },
1438
+ {
1439
+ "id": "icon-1",
1440
+ "kind": "node-round-trip",
1441
+ "decoder": "node",
1442
+ "inputFile": "nodes/icon-1.json",
1443
+ "expectedFile": "nodes/icon-1.json",
1444
+ "description": "Display/Icon (Phase 821 — decorative, no label, Large)"
1445
+ },
1283
1446
  {
1284
1447
  "id": "image-1",
1285
1448
  "kind": "node-round-trip",
@@ -1296,6 +1459,14 @@
1296
1459
  "expectedFile": "nodes/link-1.json",
1297
1460
  "description": "Display/Link"
1298
1461
  },
1462
+ {
1463
+ "id": "link-protected-1",
1464
+ "kind": "node-round-trip",
1465
+ "decoder": "node",
1466
+ "inputFile": "nodes/link-protected-1.json",
1467
+ "expectedFile": "nodes/link-protected-1.json",
1468
+ "description": "Display/Link (protected email — Phase 812 protection field)"
1469
+ },
1299
1470
  {
1300
1471
  "id": "list-1",
1301
1472
  "kind": "node-round-trip",
@@ -1328,6 +1499,14 @@
1328
1499
  "expectedFile": "nodes/markdown-1.json",
1329
1500
  "description": "Display/Markdown"
1330
1501
  },
1502
+ {
1503
+ "id": "master-detail-multi-field",
1504
+ "kind": "node-round-trip",
1505
+ "decoder": "node",
1506
+ "inputFile": "nodes/master-detail-multi-field.json",
1507
+ "expectedFile": "nodes/master-detail-multi-field.json",
1508
+ "description": "Layout/Box (master-detail — ONE selection feeding N slots, each projecting a DIFFERENT field)"
1509
+ },
1331
1510
  {
1332
1511
  "id": "master-detail-preselected",
1333
1512
  "kind": "node-round-trip",
@@ -1360,6 +1539,14 @@
1360
1539
  "expectedFile": "nodes/metric-1.json",
1361
1540
  "description": "Display/Metric"
1362
1541
  },
1542
+ {
1543
+ "id": "metric-duration-1",
1544
+ "kind": "node-round-trip",
1545
+ "decoder": "node",
1546
+ "inputFile": "nodes/metric-duration-1.json",
1547
+ "expectedFile": "nodes/metric-duration-1.json",
1548
+ "description": "Display/Metric (Phase 819 — CellFormat.Duration value + cell RelativeTime trend)"
1549
+ },
1363
1550
  {
1364
1551
  "id": "metric-float-17sig",
1365
1552
  "kind": "node-round-trip",
@@ -1432,6 +1619,14 @@
1432
1619
  "expectedFile": "nodes/multiselect-1.json",
1433
1620
  "description": "Input/Select (multi-select — list value)"
1434
1621
  },
1622
+ {
1623
+ "id": "now-environment-binding",
1624
+ "kind": "node-round-trip",
1625
+ "decoder": "node",
1626
+ "inputFile": "nodes/now-environment-binding.json",
1627
+ "expectedFile": "nodes/now-environment-binding.json",
1628
+ "description": "Binding/Now (Phase 765 — the host-furnished instant: a text slot + a Transform param feeding dateDiffDays)"
1629
+ },
1435
1630
  {
1436
1631
  "id": "progress-1",
1437
1632
  "kind": "node-round-trip",
@@ -1536,6 +1731,14 @@
1536
1731
  "expectedFile": "nodes/switch-1.json",
1537
1732
  "description": "Switch (view state → details/summary cases + info default)"
1538
1733
  },
1734
+ {
1735
+ "id": "switch-on-selection",
1736
+ "kind": "node-round-trip",
1737
+ "decoder": "node",
1738
+ "inputFile": "nodes/switch-on-selection.json",
1739
+ "expectedFile": "nodes/switch-on-selection.json",
1740
+ "description": "Meta/Switch (Phase 768 — the selector widened: `on` takes a Selection, the branch follows the clicked row)"
1741
+ },
1539
1742
  {
1540
1743
  "id": "table-1",
1541
1744
  "kind": "node-round-trip",
@@ -1544,6 +1747,14 @@
1544
1747
  "expectedFile": "nodes/table-1.json",
1545
1748
  "description": "Visualisation/Grid (static-table mode — staticRows; absorbed the retired Table kind)"
1546
1749
  },
1750
+ {
1751
+ "id": "table-sortable-1",
1752
+ "kind": "node-round-trip",
1753
+ "decoder": "node",
1754
+ "inputFile": "nodes/table-sortable-1.json",
1755
+ "expectedFile": "nodes/table-sortable-1.json",
1756
+ "description": "Visualisation/Grid (Phase 801 — static-table mode declaring sort intent: sortable + defaultSort)"
1757
+ },
1547
1758
  {
1548
1759
  "id": "tabs-1",
1549
1760
  "kind": "node-round-trip",
@@ -1887,6 +2098,42 @@
1887
2098
  "expectedPath": "$.kind.stateKey",
1888
2099
  "description": "Switch missing stateKey"
1889
2100
  },
2101
+ {
2102
+ "id": "reject-nearmiss-column-readonly",
2103
+ "kind": "reject",
2104
+ "decoder": "node",
2105
+ "inputFile": "reject/reject-nearmiss-column-readonly.json",
2106
+ "expectedErrorCode": "WRONG_TYPE",
2107
+ "expectedPath": "$.kind.columns[0].readOnly",
2108
+ "description": "column 'readOnly' — named by the census row itself; deliberately NOT aliased to editable:false, because an inverting alias that guesses wrong makes a read-only column editable (Phase 863)"
2109
+ },
2110
+ {
2111
+ "id": "reject-nearmiss-grid-behaviour-record",
2112
+ "kind": "reject",
2113
+ "decoder": "node",
2114
+ "inputFile": "reject/reject-nearmiss-grid-behaviour-record.json",
2115
+ "expectedErrorCode": "WRONG_TYPE",
2116
+ "expectedPath": "$.kind.behaviour",
2117
+ "description": "grid 'behaviour' record — charter option O1-C, rejected by design: three optional sibling fields, not a nested record (Phase 860 charter / 863)"
2118
+ },
2119
+ {
2120
+ "id": "reject-nearmiss-grid-current-page",
2121
+ "kind": "reject",
2122
+ "decoder": "node",
2123
+ "inputFile": "reject/reject-nearmiss-grid-current-page.json",
2124
+ "expectedErrorCode": "WRONG_TYPE",
2125
+ "expectedPath": "$.kind.currentPage",
2126
+ "description": "grid 'currentPage' — the sharpest near miss: a LITERAL page number is not expressible, the position lives in State so a pager can move it (Phase 863)"
2127
+ },
2128
+ {
2129
+ "id": "reject-nearmiss-grid-sortable",
2130
+ "kind": "reject",
2131
+ "decoder": "node",
2132
+ "inputFile": "reject/reject-nearmiss-grid-sortable.json",
2133
+ "expectedErrorCode": "WRONG_TYPE",
2134
+ "expectedPath": "$.kind.sortable",
2135
+ "description": "grid-level 'sortable' — the staticRows spelling reached for on the bound path, where sortability is sortStateKey + per-column narrowing (Phase 863)"
2136
+ },
1890
2137
  {
1891
2138
  "id": "reject-null-action-aitool-args",
1892
2139
  "kind": "reject",
@@ -1995,6 +2242,15 @@
1995
2242
  "expectedPath": "$.path",
1996
2243
  "description": "UpdateProp missing path"
1997
2244
  },
2245
+ {
2246
+ "id": "reject-setstate-value-and-valuefrom",
2247
+ "kind": "reject",
2248
+ "decoder": "node",
2249
+ "inputFile": "reject/reject-setstate-value-and-valuefrom.json",
2250
+ "expectedErrorCode": "WRONG_TYPE",
2251
+ "expectedPath": "$.kind.onClick.valueFrom",
2252
+ "description": "SetState carrying BOTH 'value' and 'valueFrom' — exactly one is allowed; the didactic names both fields and how each is used (Phase 818)"
2253
+ },
1998
2254
  {
1999
2255
  "id": "reject-tonedpill-unknown-tone",
2000
2256
  "kind": "reject",
@@ -2004,6 +2260,15 @@
2004
2260
  "expectedPath": "$.kind.columns[0].kind.map.Delayed",
2005
2261
  "description": "TonedPill tone-map value outside ToneVariant — the message names the seven legal tones (Phase 750)"
2006
2262
  },
2263
+ {
2264
+ "id": "reject-transform-source-empty-wrapper",
2265
+ "kind": "reject",
2266
+ "decoder": "node",
2267
+ "inputFile": "reject/reject-transform-source-empty-wrapper.json",
2268
+ "expectedErrorCode": "WRONG_TYPE",
2269
+ "expectedPath": "$.kind.source.source",
2270
+ "description": "fuaran#815 — a State wrapper carrying only a key (no defaultValue/value) is NOT unwrappable: the Transform source stays a binding object and the columnar decode refuses it"
2271
+ },
2007
2272
  {
2008
2273
  "id": "reject-unknown-binding",
2009
2274
  "kind": "reject",
@@ -2031,6 +2296,15 @@
2031
2296
  "expectedPath": "$.kind.shapes[0].$type",
2032
2297
  "description": "Drawing Shape $type 'Blob' — the closed-shape default-deny (Phase 524)"
2033
2298
  },
2299
+ {
2300
+ "id": "reject-unknown-link-protection",
2301
+ "kind": "reject",
2302
+ "decoder": "node",
2303
+ "inputFile": "reject/reject-unknown-link-protection.json",
2304
+ "expectedErrorCode": "UNKNOWN_DU_CASE",
2305
+ "expectedPath": "$.kind.protection",
2306
+ "description": "LinkProtection value 'rot13' — the closed protection DU default-denies (Phase 812)"
2307
+ },
2034
2308
  {
2035
2309
  "id": "reject-unknown-mount-direction",
2036
2310
  "kind": "reject",
@@ -2040,6 +2314,15 @@
2040
2314
  "expectedPath": "$.kind.channel.direction",
2041
2315
  "description": "Mount ChannelDirection value 'Sideways' (§4o)"
2042
2316
  },
2317
+ {
2318
+ "id": "reject-unknown-static-sort-direction",
2319
+ "kind": "reject",
2320
+ "decoder": "node",
2321
+ "inputFile": "reject/reject-unknown-static-sort-direction.json",
2322
+ "expectedErrorCode": "UNKNOWN_DU_CASE",
2323
+ "expectedPath": "$.kind.staticRows.defaultSort.direction",
2324
+ "description": "staticRows defaultSort direction 'sideways' — the closed asc|desc pair default-denies (Phase 801)"
2325
+ },
2043
2326
  {
2044
2327
  "id": "reject-unknown-textsource",
2045
2328
  "kind": "reject",
@@ -2094,6 +2377,24 @@
2094
2377
  "expectedPath": "$.kind.text.$type",
2095
2378
  "description": "Discriminator under Style is number"
2096
2379
  },
2380
+ {
2381
+ "id": "reject-wrongtype-grid-default-sort-column",
2382
+ "kind": "reject",
2383
+ "decoder": "node",
2384
+ "inputFile": "reject/reject-wrongtype-grid-default-sort-column.json",
2385
+ "expectedErrorCode": "WRONG_TYPE",
2386
+ "expectedPath": "$.kind.defaultSort.column",
2387
+ "description": "bound-grid defaultSort column -1 — the same non-negative bound the staticRows spelling carries, same record, same message (Phase 861)"
2388
+ },
2389
+ {
2390
+ "id": "reject-wrongtype-grid-page-size-zero",
2391
+ "kind": "reject",
2392
+ "decoder": "node",
2393
+ "inputFile": "reject/reject-wrongtype-grid-page-size-zero.json",
2394
+ "expectedErrorCode": "WRONG_TYPE",
2395
+ "expectedPath": "$.kind.pageSize",
2396
+ "description": "grid pageSize 0 — a page of no rows names no page; the schema says the same with minimum:1 (Phase 862)"
2397
+ },
2097
2398
  {
2098
2399
  "id": "reject-wrongtype-heading-level",
2099
2400
  "kind": "reject",
@@ -2121,6 +2422,15 @@
2121
2422
  "expectedPath": "$.kind",
2122
2423
  "description": "Node kind is a bare string not an object"
2123
2424
  },
2425
+ {
2426
+ "id": "reject-wrongtype-static-sort-column",
2427
+ "kind": "reject",
2428
+ "decoder": "node",
2429
+ "inputFile": "reject/reject-wrongtype-static-sort-column.json",
2430
+ "expectedErrorCode": "WRONG_TYPE",
2431
+ "expectedPath": "$.kind.staticRows.defaultSort.column",
2432
+ "description": "staticRows defaultSort column -1 — a header index is non-negative; the schema says the same with minimum:0 (Phase 801)"
2433
+ },
2124
2434
  {
2125
2435
  "id": "reject-wrongtype-style-tone",
2126
2436
  "kind": "reject",
@@ -0,0 +1 @@
1
+ {"id":"badge-transform-live","kind":{"$type":"Badge","label":{"$type":"Bound","binding":{"$type":"Transform","pipeline":[{"$type":"groupBy","aggs":[{"fn":"count","name":"n","of":"medication"}],"keys":[]}],"source":{"$type":"State","defaultValue":[{"medication":"Amoxicillin","quantity":20},{"medication":"Ibuprofen","quantity":50}],"key":"request-log"}}},"variant":"Info"}}
@@ -0,0 +1 @@
1
+ {"id":"button-setstate-valuefrom","kind":{"$type":"Button","label":"Track this order","onClick":{"$type":"SetState","key":"chosen-id","valueFrom":{"$type":"Selection","field":"id","nodeId":"orders-grid"}},"variant":"Secondary"}}
@@ -0,0 +1 @@
1
+ {"id":"chart-axis-titles","kind":{"$type":"Chart","kind":"Bar","source":{"$type":"Static","value":[{"quarter":"Q1","revenue":12500000},{"quarter":"Q2","revenue":15200000}]},"stacked":false,"subtitle":"Millions of £","title":"Revenue by quarter","valueFormat":{"$type":"Currency","isoCode":"GBP"},"xField":"quarter","xTitle":"Quarter","yFields":["revenue"],"yTitle":"Revenue"}}
@@ -0,0 +1 @@
1
+ {"id":"chart-data-labels","kind":{"$type":"Chart","dataLabels":"Ends","kind":"Bar","source":{"$type":"Static","value":[{"quarter":"Q1","revenue":120},{"quarter":"Q2","revenue":150}]},"stacked":false,"title":"Revenue by quarter","xField":"quarter","yFields":["revenue"]}}
@@ -0,0 +1 @@
1
+ {"id":"chart-legend-position","kind":{"$type":"Chart","kind":"Bar","legendPosition":"Bottom","source":{"$type":"Static","value":[{"region":"North","sales":80,"target":100},{"region":"South","sales":130,"target":110}]},"stacked":false,"title":"Sales vs target","xField":"region","yFields":["sales","target"]}}
@@ -0,0 +1 @@
1
+ {"id":"chart-temporal-x","kind":{"$type":"Chart","kind":"Line","source":{"$type":"Static","value":[{"day":"2026-01-05","sessions":1200},{"day":"2026-01-12","sessions":1450},{"day":"2026-01-19","sessions":1310},{"day":"2026-01-26","sessions":1580}]},"stacked":false,"title":"Sessions by week","xField":"day","xScale":"Temporal","yFields":["sessions"]}}
@@ -0,0 +1 @@
1
+ {"id":"chart-value-format","kind":{"$type":"Chart","kind":"Bar","source":{"$type":"Static","value":[{"month":"Jan","revenue":12500000},{"month":"Feb","revenue":15200000}]},"stacked":false,"title":"Revenue","valueFormat":{"$type":"Currency","isoCode":"GBP"},"xField":"month","yFields":["revenue"]}}
@@ -1 +1 @@
1
- {"id":"composite-root","kind":{"$type":"Box","children":[{"id":"composite-card","kind":{"$type":"Box","children":[{"id":"metric-1","kind":{"$type":"Metric","format":{"$type":"Currency","code":"GBP"},"icon":"trending-up","label":"Revenue","subtext":"vs last month","tone":"Brand","trend":{"$type":"Static","value":0.07},"trendFormat":{"$type":"Percent","decimals":1},"value":{"$type":"Static","value":1234.5}}},{"id":"lvr-1","kind":{"$type":"LabelValueRow","emphasis":true,"format":{"$type":"Number","decimals":2},"help":"Last 30 days","label":"Total","value":{"$type":"Static","value":42}}}],"heading":"Composite","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}},{"id":"stack-1","kind":{"$type":"Box","children":[{"id":"metric-1","kind":{"$type":"Metric","format":{"$type":"Currency","code":"GBP"},"icon":"trending-up","label":"Revenue","subtext":"vs last month","tone":"Brand","trend":{"$type":"Static","value":0.07},"trendFormat":{"$type":"Percent","decimals":1},"value":{"$type":"Static","value":1234.5}}},{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}}],"layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Group"}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
1
+ {"id":"composite-root","kind":{"$type":"Box","children":[{"id":"composite-card","kind":{"$type":"Box","children":[{"id":"metric-2","kind":{"$type":"Metric","format":{"$type":"Currency","code":"GBP"},"icon":"trending-up","label":"Revenue","subtext":"vs last month","tone":"Brand","trend":{"$type":"Static","value":0.07},"trendFormat":{"$type":"Percent","decimals":1},"value":{"$type":"Static","value":1234.5}}},{"id":"lvr-1","kind":{"$type":"LabelValueRow","emphasis":true,"format":{"$type":"Number","decimals":2},"help":"Last 30 days","label":"Total","value":{"$type":"Static","value":42}}}],"heading":"Composite","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}},{"id":"stack-1","kind":{"$type":"Box","children":[{"id":"metric-1","kind":{"$type":"Metric","format":{"$type":"Currency","code":"GBP"},"icon":"trending-up","label":"Revenue","subtext":"vs last month","tone":"Brand","trend":{"$type":"Static","value":0.07},"trendFormat":{"$type":"Percent","decimals":1},"value":{"$type":"Static","value":1234.5}}},{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}}],"layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Group"}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"composite-tabs-panels","kind":{"$type":"Tabs","activeIndex":{"$type":"Static","value":0},"activeTag":{"$type":"Static","value":"overview"},"children":[{"id":"overview-panel","kind":{"$type":"Box","children":[{"id":"spark-1","kind":{"$type":"Sparkline","source":{"$type":"Static","value":[1,2,3,2,4]}}},{"id":"badge-1","kind":{"$type":"Badge","label":"Beta","variant":"Info"}}],"heading":"This month","layout":{"$type":"Grid","cols":2,"gap":16},"role":"Card"}},{"id":"settings-panel","kind":{"$type":"Box","children":[{"id":"preferences-form","kind":{"$type":"Form","fields":[{"id":"displayName","kind":{"$type":"Text","value":{"$type":"Static","value":"Ada Lovelace"}},"label":"Display name","required":true},{"id":"theme","kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"Light","value":"light"},{"label":"Dark","value":"dark"}]},"value":{"$type":"Static","value":"dark"}},"label":"Theme","required":true}],"onSubmit":{"$type":"Call","endpoint":"/api/preferences"},"submitLabel":"Save preferences"}}],"heading":"Preferences","layout":{"$type":"Flex","direction":"Vertical","gap":12,"wrap":false},"role":"Card"}}],"tabHeaders":[{"icon":"chart-glyph","label":"Overview"},{"disabled":{"$type":"Static","value":false},"label":"Settings"}],"tabTags":["overview","settings"]}}
@@ -1 +1 @@
1
- {"id":"controls-closure","kind":{"$type":"Box","children":[{"id":"closure-tabs","kind":{"$type":"Tabs","activeIndex":{"$type":"Static","value":0},"activeTag":{"$type":"Static","value":"overview"},"children":[{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}},{"id":"spark-1","kind":{"$type":"Sparkline","source":{"$type":"Static","value":[1,2,3,2,4]}}}],"onSelect":"<closure>","onSelectTag":"<closure>","tabTags":["overview","detail"]}},{"id":"closure-disclosure","kind":{"$type":"Disclosure","children":[{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}}],"defaultOpen":false,"heading":"Advanced","onToggle":"<closure>","open":{"$type":"Static","value":false}}},{"id":"closure-multiselect","kind":{"$type":"Select","label":"Tags","multiple":true,"onChange":"<closure>","onChangeMulti":"<closure>","source":{"$type":"Static","value":[{"label":"Red","value":"red"}]},"value":{"$type":"Static"},"values":{"$type":"Static","value":["red"]}}}],"layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Group"}}
1
+ {"id":"controls-closure","kind":{"$type":"Box","children":[{"id":"closure-tabs","kind":{"$type":"Tabs","activeIndex":{"$type":"Static","value":0},"activeTag":{"$type":"Static","value":"overview"},"children":[{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}},{"id":"spark-1","kind":{"$type":"Sparkline","source":{"$type":"Static","value":[1,2,3,2,4]}}}],"onSelect":"<closure>","onSelectTag":"<closure>","tabTags":["overview","detail"]}},{"id":"closure-disclosure","kind":{"$type":"Disclosure","children":[{"id":"markdown-2","kind":{"$type":"Markdown","text":"Updated hourly."}}],"defaultOpen":false,"heading":"Advanced","onToggle":"<closure>","open":{"$type":"Static","value":false}}},{"id":"closure-multiselect","kind":{"$type":"Select","label":"Tags","multiple":true,"onChange":"<closure>","onChangeMulti":"<closure>","source":{"$type":"Static","value":[{"label":"Red","value":"red"}]},"value":{"$type":"Static"},"values":{"$type":"Static","value":["red"]}}}],"layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Group"}}
@@ -1 +1 @@
1
- {"id":"controls-declarative","kind":{"$type":"Box","children":[{"id":"decl-tabs","kind":{"$type":"Tabs","activeIndex":{"$type":"State","defaultValue":0,"key":"activePane"},"children":[{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}}]}},{"id":"decl-modal","kind":{"$type":"Modal","children":[{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}}],"dismissable":true,"heading":"Confirm","open":{"$type":"State","defaultValue":false,"key":"modalOpen"}}},{"id":"decl-disclosure","kind":{"$type":"Disclosure","children":[{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}}],"defaultOpen":false,"heading":"Advanced","open":{"$type":"State","defaultValue":false,"key":"advancedOpen"}}},{"id":"decl-select","kind":{"$type":"Select","label":"Region","placeholder":"Choose one","source":{"$type":"Static","value":[{"label":"UK","value":"uk"}]},"value":{"$type":"State","key":"region"}}}],"layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Group"}}
1
+ {"id":"controls-declarative","kind":{"$type":"Box","children":[{"id":"decl-tabs","kind":{"$type":"Tabs","activeIndex":{"$type":"State","defaultValue":0,"key":"activePane"},"children":[{"id":"markdown-1","kind":{"$type":"Markdown","text":"Updated hourly."}}]}},{"id":"decl-modal","kind":{"$type":"Modal","children":[{"id":"markdown-2","kind":{"$type":"Markdown","text":"Updated hourly."}}],"dismissable":true,"heading":"Confirm","open":{"$type":"State","defaultValue":false,"key":"modalOpen"}}},{"id":"decl-disclosure","kind":{"$type":"Disclosure","children":[{"id":"markdown-3","kind":{"$type":"Markdown","text":"Updated hourly."}}],"defaultOpen":false,"heading":"Advanced","open":{"$type":"State","defaultValue":false,"key":"advancedOpen"}}},{"id":"decl-select","kind":{"$type":"Select","label":"Region","placeholder":"Choose one","source":{"$type":"Static","value":[{"label":"UK","value":"uk"}]},"value":{"$type":"State","key":"region"}}}],"layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Group"}}
@@ -0,0 +1 @@
1
+ {"id":"drawing-rotated-labels","kind":{"$type":"Drawing","shapes":[{"$type":"Label","style":{"emphasis":"Loud","fill":{"$type":"Static","value":"#111111"},"fontFamily":"system-ui, sans-serif","fontSize":14,"rotation":-30,"textAnchor":"Middle"},"text":"Q1 2026","x":30,"y":100},{"$type":"Label","style":{"emphasis":"Loud","fill":{"$type":"Static","value":"#111111"},"fontFamily":"system-ui, sans-serif","fontSize":14,"rotation":-90,"textAnchor":"End"},"text":"Q2 2026","x":70,"y":100},{"$type":"Label","style":{"emphasis":"Loud","fill":{"$type":"Static","value":"#111111"},"fontFamily":"system-ui, sans-serif","fontSize":14,"rotation":90,"textAnchor":"Middle"},"text":"Revenue","x":8,"y":60},{"$type":"Label","style":{"emphasis":"Loud","fill":{"$type":"Static","value":"#111111"},"fontFamily":"system-ui, sans-serif","fontSize":14,"rotation":12.34,"textAnchor":"Start"},"text":"Fractional","x":110,"y":100},{"$type":"Label","style":{"emphasis":"Loud","fill":{"$type":"Static","value":"#111111"},"fontFamily":"system-ui, sans-serif","fontSize":14,"rotation":0,"textAnchor":"Middle"},"text":"Explicit zero","x":150,"y":100},{"$type":"Label","style":{"emphasis":"Loud","fill":{"$type":"Static","value":"#111111"},"fontFamily":"system-ui, sans-serif","fontSize":14,"rotation":-0.5,"textAnchor":"End"},"text":"Hairline","x":180,"y":100},{"$type":"Label","style":{"emphasis":"Loud","fill":{"$type":"Static","value":"#111111"},"fontFamily":"system-ui, sans-serif","fontSize":14,"textAnchor":"Middle"},"text":"Upright","x":100,"y":20}],"style":{},"title":"Rotated axis labels","viewBox":{"height":120,"minX":0,"minY":0,"width":200}}}
@@ -0,0 +1 @@
1
+ {"id":"drawing-tipped-shapes","kind":{"$type":"Drawing","shapes":[{"$type":"Rectangle","height":60,"style":{"fill":{"$type":"Static","value":"#3366cc"},"tip":"revenue · Q1 2026 · 1,234,567.89"},"width":30,"x":10,"y":40},{"$type":"Circle","cx":70,"cy":60,"r":5,"style":{"fill":{"$type":"Static","value":"#3366cc"},"tip":"revenue · Q2 2026 · -0.5%"}},{"$type":"Curve","commands":[{"$type":"MoveTo","to":{"x":100,"y":60}},{"$type":"LineTo","to":{"x":130,"y":60}},{"$type":"Close"}],"style":{"fill":{"$type":"Static","value":"#3366cc"},"tip":"share · Other · £42.00"}},{"$type":"Polyline","points":[{"x":140,"y":20},{"x":160,"y":80}],"style":{"stroke":{"$type":"Static","value":"#cc6633"},"tip":"revenue"}},{"$type":"Group","children":[{"$type":"Circle","cx":170,"cy":100,"r":3,"style":{}}],"style":{"tip":{"$type":"Bound","binding":{"$type":"Static","value":"resolved at render time"}}}},{"$type":"Label","style":{"emphasis":"Loud","fill":{"$type":"Static","value":"#111111"},"fontFamily":"system-ui, sans-serif","fontSize":14,"textAnchor":"Middle","tip":"<script>alert(\"xss\") & 'done'</script>"},"text":"Hover me","x":100,"y":110},{"$type":"Ellipse","cx":30,"cy":110,"rx":6,"ry":3,"style":{"tip":""}},{"$type":"Line","style":{},"x1":0,"x2":200,"y1":0,"y2":0}],"style":{},"title":"Tipped marks","viewBox":{"height":120,"minX":0,"minY":0,"width":200}}}
@@ -0,0 +1 @@
1
+ {"id":"empty-state-card","kind":{"$type":"Box","children":[{"id":"empty-state-note","kind":{"$type":"Markdown","text":"Searches you save will appear here so you can re-run them with one click."}},{"id":"empty-state-cta","kind":{"$type":"Button","icon":"search","label":"Browse jobs","onClick":{"$type":"Chain","ops":[]},"variant":"Primary"}}],"heading":"No saved searches yet","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}}
@@ -0,0 +1 @@
1
+ {"id":"form-toggle","kind":{"$type":"Form","fields":[{"id":"irrigation-running","kind":{"$type":"Toggle"},"label":"Irrigation","required":false},{"id":"accept-terms","kind":{"$type":"Checkbox"},"label":"I accept the terms","required":true}],"onSubmit":{"$type":"Chain","ops":[]},"submitLabel":"Save"}}
@@ -0,0 +1 @@
1
+ {"id":"grid-bound-sort","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"revenue","kind":{"$type":"Text"},"label":"Revenue"},{"field":"note","kind":{"$type":"Text"},"label":"Note","sortable":false}],"defaultSort":{"column":1,"direction":"desc"},"rowKeyField":"month","sortStateKey":"ledger-sort","source":{"$type":"State","defaultValue":[{"month":"Jan","revenue":980},{"month":"Feb","revenue":1105}],"key":"ledger"}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-declared-edit","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"revenue","kind":{"$type":"Text"},"label":"Revenue"},{"editable":false,"field":"note","kind":{"$type":"Text"},"label":"Note"}],"editStateKey":"stock-adjustments","editable":true,"rowKeyField":"month","source":{"$type":"Query","name":"stock"}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-paged-sorted","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"revenue","kind":{"$type":"Numeric"},"label":"Revenue"}],"pageSize":10,"pageStateKey":"ledger-page","rowKeyField":"month","sortStateKey":"ledger-sort","source":{"$type":"State","defaultValue":[{"month":"Jan","revenue":980},{"month":"Feb","revenue":1105}],"key":"ledger"}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-paged","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"revenue","kind":{"$type":"Numeric"},"label":"Revenue"}],"pageSize":20,"pageStateKey":"members-page","rowKeyField":"month","source":{"$type":"State","defaultValue":[{"month":"Jan","revenue":980},{"month":"Feb","revenue":1105}],"key":"members"}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-sort-state-key","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"revenue","kind":{"$type":"Numeric"},"label":"Revenue"}],"rowKeyField":"month","sortStateKey":"inventory-sort","source":{"$type":"State","defaultValue":[{"month":"Jan","revenue":980},{"month":"Feb","revenue":1105}],"key":"inventory"}}}