@fuaran-ui/conformance 0.1.0 → 0.3.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 (46) hide show
  1. package/corpus/lenient/lenient-daterange-bare-array.expected.json +1 -0
  2. package/corpus/lenient/lenient-daterange-bare-array.json +1 -0
  3. package/corpus/lenient/lenient-daterange-static-envelope.expected.json +1 -0
  4. package/corpus/lenient/lenient-daterange-static-envelope.json +1 -0
  5. package/corpus/lenient/lenient-filterable-static-dashboard-compact.expected.json +1 -0
  6. package/corpus/lenient/lenient-filterable-static-dashboard-compact.json +1 -0
  7. package/corpus/lenient/lenient-grid-field-named-compact.expected.json +1 -0
  8. package/corpus/lenient/lenient-grid-field-named-compact.json +1 -0
  9. package/corpus/lenient/lenient-grid-transform-param-compact.expected.json +1 -0
  10. package/corpus/lenient/lenient-grid-transform-param-compact.json +1 -0
  11. package/corpus/lenient/lenient-master-detail-preselected-compact.expected.json +1 -0
  12. package/corpus/lenient/lenient-master-detail-preselected-compact.json +1 -0
  13. package/corpus/lenient/lenient-null-static-options.expected.json +1 -1
  14. package/corpus/lenient/lenient-opaque-static-values.expected.json +1 -1
  15. package/corpus/lenient/lenient-scalar-transform-composition-compact.expected.json +1 -0
  16. package/corpus/lenient/lenient-scalar-transform-composition-compact.json +1 -0
  17. package/corpus/manifest.json +114 -45
  18. package/corpus/nodes/btn-json-payloads.json +1 -0
  19. package/corpus/nodes/controls-closure.json +1 -1
  20. package/corpus/nodes/controls-declarative.json +1 -1
  21. package/corpus/nodes/filters-date-range.json +1 -0
  22. package/corpus/nodes/form-date-range.json +1 -0
  23. package/corpus/nodes/form-declarative.json +1 -1
  24. package/corpus/nodes/form-segmented.json +1 -1
  25. package/corpus/nodes/master-detail-preselected-second-row.json +1 -0
  26. package/corpus/nodes/multiselect-1.json +1 -1
  27. package/corpus/ops/op-insertchild.json +1 -1
  28. package/corpus/ops/op-movenode.json +1 -1
  29. package/corpus/reject/reject-daterange-unordered.json +1 -0
  30. package/corpus/reject/reject-wrongtype-box-children.json +1 -0
  31. package/corpus/schema.json +31 -13
  32. package/dist/cli.js.map +1 -1
  33. package/dist/index.cjs.map +1 -1
  34. package/dist/index.js.map +1 -1
  35. package/package.json +5 -4
  36. package/corpus/lenient/legacy-upgrade-card.expected.json +0 -1
  37. package/corpus/lenient/legacy-upgrade-card.json +0 -1
  38. package/corpus/lenient/legacy-upgrade-dashboard.expected.json +0 -1
  39. package/corpus/lenient/legacy-upgrade-dashboard.json +0 -1
  40. package/corpus/lenient/legacy-upgrade-gridlayout.expected.json +0 -1
  41. package/corpus/lenient/legacy-upgrade-gridlayout.json +0 -1
  42. package/corpus/lenient/legacy-upgrade-stack.expected.json +0 -1
  43. package/corpus/lenient/legacy-upgrade-stack.json +0 -1
  44. package/corpus/lenient/legacy-upgrade-table.expected.json +0 -1
  45. package/corpus/lenient/legacy-upgrade-table.json +0 -1
  46. package/corpus/reject/reject-wrongtype-dashboard-children.json +0 -1
@@ -0,0 +1 @@
1
+ {"id":"len-dr-arr","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":{"from":"2026-03-01","to":"2026-03-08"},"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"len-dr-arr","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":["2026-03-01","2026-03-08"],"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"len-dr-env","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":{"from":"2026-03-01","to":"2026-03-08"},"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"len-dr-env","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":{"$type":"Static","value":{"from":"2026-03-01","to":"2026-03-08"}},"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"filterable-static-dashboard","kind":{"$type":"Box","children":[{"id":"content-filters","kind":{"$type":"Filters","items":[{"kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"EMEA","value":"emea"},{"label":"Americas","value":"amer"}]}},"label":"Region","name":"region"},{"kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"Drama","value":"drama"},{"label":"Documentary","value":"docs"}]}},"label":"Genre","name":"genre"}]}},{"id":"retention-chart","kind":{"$type":"Chart","kind":"Line","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"region"},"name":"region"},{"from":{"$type":"Filter","name":"genre"},"name":"genre"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"region"},"op":"eq","right":{"$type":"param","name":"region"}}},{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"genre"},"op":"eq","right":{"$type":"param","name":"genre"}}}],"source":{"columns":{"genre":{"validity":[true,true],"values":["drama","docs"]},"month":{"validity":[true,true],"values":["jan","jan"]},"region":{"validity":[true,true],"values":["emea","amer"]},"retention":{"validity":[true,true],"values":[0.62,0.55]}},"schema":[{"name":"genre","type":"string"},{"name":"month","type":"string"},{"name":"region","type":"string"},{"name":"retention","type":"float"}]}},"stacked":false,"title":"Retention","xField":"month","yFields":["retention"]}},{"id":"episode-grid","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"retention","kind":{"$type":"Text"},"label":"Retention"}],"rowKeyField":"month","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"region"},"name":"region"},{"from":{"$type":"Filter","name":"genre"},"name":"genre"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"region"},"op":"eq","right":{"$type":"param","name":"region"}}},{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"genre"},"op":"eq","right":{"$type":"param","name":"genre"}}}],"source":{"columns":{"genre":{"validity":[true,true],"values":["drama","docs"]},"month":{"validity":[true,true],"values":["jan","jan"]},"region":{"validity":[true,true],"values":["emea","amer"]},"retention":{"validity":[true,true],"values":[0.62,0.55]}},"schema":[{"name":"genre","type":"string"},{"name":"month","type":"string"},{"name":"region","type":"string"},{"name":"retention","type":"float"}]}}}}],"heading":"Content performance","layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"filterable-static-dashboard","kind":{"$type":"Box","children":[{"id":"content-filters","kind":{"$type":"Filters","items":[{"kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"EMEA","value":"emea"},{"label":"Americas","value":"amer"}]}},"label":"Region","name":"region"},{"kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"Drama","value":"drama"},{"label":"Documentary","value":"docs"}]}},"label":"Genre","name":"genre"}]}},{"id":"retention-chart","kind":{"$type":"Chart","kind":"Line","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"region"},"name":"region"},{"from":{"$type":"Filter","name":"genre"},"name":"genre"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"region"},"op":"eq","right":{"$type":"param","name":"region"}}},{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"genre"},"op":"eq","right":{"$type":"param","name":"genre"}}}],"source":{"columns":{"genre":["drama","docs"],"month":["jan","jan"],"region":["emea","amer"],"retention":[0.62,0.55]}}},"stacked":false,"title":"Retention","xField":"month","yFields":["retention"]}},{"id":"episode-grid","kind":{"$type":"DataGrid","columns":[{"field":"month","kind":{"$type":"Text"},"label":"Month"},{"field":"retention","kind":{"$type":"Text"},"label":"Retention"}],"rowKeyField":"month","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"region"},"name":"region"},{"from":{"$type":"Filter","name":"genre"},"name":"genre"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"region"},"op":"eq","right":{"$type":"param","name":"region"}}},{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"genre"},"op":"eq","right":{"$type":"param","name":"genre"}}}],"source":{"columns":{"genre":["drama","docs"],"month":["jan","jan"],"region":["emea","amer"],"retention":[0.62,0.55]}}}}}],"heading":"Content performance","layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"grid-field-named","kind":{"$type":"DataGrid","columns":[{"field":"dept","kind":{"$type":"Text"},"label":"Dept"},{"field":"amount","kind":{"$type":"Text"},"label":"Amount"}],"rowKeyField":"dept","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"amount":{"validity":[true],"values":[100]},"dept":{"validity":[true],"values":["eng"]}},"schema":[{"name":"amount","type":"int"},{"name":"dept","type":"string"}]}}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-field-named","kind":{"$type":"DataGrid","columns":[{"field":"dept","kind":{"$type":"Text"},"label":"Dept"},{"field":"amount","kind":{"$type":"Text"},"label":"Amount"}],"rowKeyField":"dept","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"amount":[100],"dept":["eng"]}}}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-transform-param","kind":{"$type":"DataGrid","columns":[],"rowKey":"<closure>","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"dept"},"name":"dept"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"dept"},"op":"eq","right":{"$type":"param","name":"dept"}}}],"source":{"columns":{"amount":{"validity":[true,true],"values":[100,90]},"dept":{"validity":[true,true],"values":["eng","sales"]}},"schema":[{"name":"amount","type":"int"},{"name":"dept","type":"string"}]}}}}
@@ -0,0 +1 @@
1
+ {"id":"grid-transform-param","kind":{"$type":"DataGrid","columns":[],"rowKey":"<closure>","source":{"$type":"Transform","params":[{"from":{"$type":"Filter","name":"dept"},"name":"dept"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"dept"},"op":"eq","right":{"$type":"param","name":"dept"}}}],"source":{"columns":{"amount":[100,90],"dept":["eng","sales"]}}}}}
@@ -0,0 +1 @@
1
+ {"id":"master-detail-preselected","kind":{"$type":"Box","children":[{"id":"ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"id":{"validity":[true,true],"values":["TCK-2041","TCK-2042"]},"priority":{"validity":[true,true],"values":["high","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"}]}}}},{"id":"ticket-detail","kind":{"$type":"Box","children":[{"id":"detail-ticket","kind":{"$type":"Fact","emphasis":true,"label":"Selected ticket","value":{"$type":"Bound","binding":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"ticket-grid"}}}}],"heading":"Ticket detail","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}},{"id":"related-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"}],"rowKeyField":"id","source":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}}],"source":{"columns":{"id":{"validity":[true,true],"values":["TCK-2041","TCK-2042"]},"priority":{"validity":[true,true],"values":["high","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"}]}}}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"master-detail-preselected","kind":{"$type":"Box","children":[{"id":"ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"id":["TCK-2041","TCK-2042"],"priority":["high","low"]}}}}},{"id":"ticket-detail","kind":{"$type":"Box","children":[{"id":"detail-ticket","kind":{"$type":"Fact","emphasis":true,"label":"Selected ticket","value":{"$type":"Bound","binding":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"ticket-grid"}}}}],"heading":"Ticket detail","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}},{"id":"related-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"}],"rowKeyField":"id","source":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}}],"source":{"columns":{"id":["TCK-2041","TCK-2042"],"priority":["high","low"]}}}}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -1 +1 @@
1
- {"id":"len-nul","kind":{"$type":"Select","label":"Region","source":{"$type":"Static","value":[]},"value":{"$type":"Static","value":null}}}
1
+ {"id":"len-nul","kind":{"$type":"Select","label":"Region","source":{"$type":"Static","value":[]},"value":{"$type":"Static"}}}
@@ -1 +1 @@
1
- {"id":"len-val","kind":{"$type":"Select","label":"Regions","multiple":true,"source":{"$type":"Static","value":[{"label":"UK","value":"uk"}]},"value":{"$type":"Static","value":null},"values":{"$type":"Static","value":["<opaque>"]}}}
1
+ {"id":"len-val","kind":{"$type":"Select","label":"Regions","multiple":true,"source":{"$type":"Static","value":[{"label":"UK","value":"uk"}]},"value":{"$type":"Static"},"values":{"$type":"Static","value":["<opaque>"]}}}
@@ -0,0 +1 @@
1
+ {"id":"scalar-transform-composition","kind":{"$type":"Box","children":[{"id":"scalar-ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"severity","kind":{"$type":"Text"},"label":"Severity"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"alert":{"validity":[true,true,true],"values":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"]},"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"severity":{"validity":[true,true,true],"values":["critical","high","critical"]}},"schema":[{"name":"alert","type":"string"},{"name":"id","type":"string"},{"name":"severity","type":"string"}]}}}},{"id":"critical-count-badge","kind":{"$type":"Badge","label":{"$type":"Bound","binding":{"$type":"Transform","pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"severity"},"op":"eq","right":{"$type":"lit","cell":{"$type":"Str","value":"critical"}}}},{"$type":"groupBy","aggs":[{"fn":"count","name":"n","of":"id"}],"keys":[]}],"source":{"columns":{"alert":{"validity":[true,true,true],"values":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"]},"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"severity":{"validity":[true,true,true],"values":["critical","high","critical"]}},"schema":[{"name":"alert","type":"string"},{"name":"id","type":"string"},{"name":"severity","type":"string"}]}}},"variant":"Critical"}},{"id":"sla-warning","kind":{"$type":"Callout","body":{"$type":"Bound","binding":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"scalar-ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}},{"$type":"project","cols":[{"a":"alert","b":"alert"}]},{"$type":"limit","n":1,"offset":0}],"source":{"columns":{"alert":{"validity":[true,true,true],"values":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"]},"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"severity":{"validity":[true,true,true],"values":["critical","high","critical"]}},"schema":[{"name":"alert","type":"string"},{"name":"id","type":"string"},{"name":"severity","type":"string"}]}}},"heading":"SLA breach imminent","tone":"Warning"}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -0,0 +1 @@
1
+ {"id":"scalar-transform-composition","kind":{"$type":"Box","children":[{"id":"scalar-ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"severity","kind":{"$type":"Text"},"label":"Severity"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"alert":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"],"id":["TCK-2041","TCK-2042","TCK-2043"],"severity":["critical","high","critical"]}}}}},{"id":"critical-count-badge","kind":{"$type":"Badge","label":{"$type":"Bound","binding":{"$type":"Transform","pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"severity"},"op":"eq","right":{"$type":"lit","cell":{"$type":"Str","value":"critical"}}}},{"$type":"groupBy","aggs":[{"fn":"count","name":"n","of":"id"}],"keys":[]}],"source":{"columns":{"alert":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"],"id":["TCK-2041","TCK-2042","TCK-2043"],"severity":["critical","high","critical"]}}}},"variant":"Critical"}},{"id":"sla-warning","kind":{"$type":"Callout","body":{"$type":"Bound","binding":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2041","field":"id","nodeId":"scalar-ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}},{"$type":"project","cols":[{"a":"alert","b":"alert"}]},{"$type":"limit","n":1,"offset":0}],"source":{"columns":{"alert":["TCK-2041 breaches SLA in 2 hours","TCK-2042 breaches SLA in 5 hours","TCK-2043 breaches SLA in 9 hours"],"id":["TCK-2041","TCK-2042","TCK-2043"],"severity":["critical","high","critical"]}}}},"heading":"SLA breach imminent","tone":"Warning"}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 1,
3
3
  "schema": "schema.json",
4
- "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/docs/WIRE_FORMAT.md.",
4
+ "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
5
  "kinds": [
6
6
  "Badge",
7
7
  "Box",
@@ -43,6 +43,18 @@
43
43
  "Tabs",
44
44
  "Toast"
45
45
  ],
46
+ "formFieldKinds": [
47
+ "Checkbox",
48
+ "Choice",
49
+ "Date",
50
+ "DateRange",
51
+ "Number",
52
+ "Range",
53
+ "RangedNumber",
54
+ "SegmentedChoice",
55
+ "Text",
56
+ "TextArea"
57
+ ],
46
58
  "fixtures": [
47
59
  {
48
60
  "id": "elc-ans-accept-full",
@@ -372,46 +384,6 @@
372
384
  "expectedFile": "envelope/envelope-unknown-required-profile.json",
373
385
  "description": "Behind unknown kind declaring requiredProfile core@1.4 — preserved + degrade label surfaced (WIRE_FORMAT 15.3)"
374
386
  },
375
- {
376
- "id": "legacy-upgrade-card",
377
- "kind": "lenient-accept",
378
- "decoder": "node",
379
- "inputFile": "lenient/legacy-upgrade-card.json",
380
- "expectedFile": "lenient/legacy-upgrade-card.expected.json",
381
- "description": "Legacy `Card` tag decode-upgrades to a Flex/Card Box preserving the heading (Phase 390)"
382
- },
383
- {
384
- "id": "legacy-upgrade-dashboard",
385
- "kind": "lenient-accept",
386
- "decoder": "node",
387
- "inputFile": "lenient/legacy-upgrade-dashboard.json",
388
- "expectedFile": "lenient/legacy-upgrade-dashboard.expected.json",
389
- "description": "Legacy `Dashboard` tag decode-upgrades to an Auto/Dashboard Box (Phase 390)"
390
- },
391
- {
392
- "id": "legacy-upgrade-gridlayout",
393
- "kind": "lenient-accept",
394
- "decoder": "node",
395
- "inputFile": "lenient/legacy-upgrade-gridlayout.json",
396
- "expectedFile": "lenient/legacy-upgrade-gridlayout.expected.json",
397
- "description": "Legacy `GridLayout` tag decode-upgrades to a Grid/Group Box (Phase 390)"
398
- },
399
- {
400
- "id": "legacy-upgrade-stack",
401
- "kind": "lenient-accept",
402
- "decoder": "node",
403
- "inputFile": "lenient/legacy-upgrade-stack.json",
404
- "expectedFile": "lenient/legacy-upgrade-stack.expected.json",
405
- "description": "Legacy `Stack` tag decode-upgrades to a Flex/Group Box (Phase 390)"
406
- },
407
- {
408
- "id": "legacy-upgrade-table",
409
- "kind": "lenient-accept",
410
- "decoder": "node",
411
- "inputFile": "lenient/legacy-upgrade-table.json",
412
- "expectedFile": "lenient/legacy-upgrade-table.expected.json",
413
- "description": "Legacy `Table` tag decode-upgrades to a static read-only DataGrid (Phase 393)"
414
- },
415
387
  {
416
388
  "id": "lenient-022-lvr-emphasis-loud",
417
389
  "kind": "lenient-accept",
@@ -588,6 +560,22 @@
588
560
  "expectedFile": "lenient/lenient-binding-bound-wrapper.expected.json",
589
561
  "description": "pilot-5 n=3 gate — the Bound wrapper unwraps in bare-Binding slots (the TextSource.Bound convention transferred; one payload field, one-to-one); canonical stays the bare binding"
590
562
  },
563
+ {
564
+ "id": "lenient-daterange-bare-array",
565
+ "kind": "lenient-accept",
566
+ "decoder": "node",
567
+ "inputFile": "lenient/lenient-daterange-bare-array.json",
568
+ "expectedFile": "lenient/lenient-daterange-bare-array.expected.json",
569
+ "description": "Phase 725 — a DateRange Static pair may ride the [from, to] two-element array (the §3.6 bare-array coercion, mirroring `Range`); it normalises to the canonical bare {from, to} object"
570
+ },
571
+ {
572
+ "id": "lenient-daterange-static-envelope",
573
+ "kind": "lenient-accept",
574
+ "decoder": "node",
575
+ "inputFile": "lenient/lenient-daterange-static-envelope.json",
576
+ "expectedFile": "lenient/lenient-daterange-static-envelope.expected.json",
577
+ "description": "Phase 725 — a DateRange Static pair wrapped in the explicit {\"$type\":\"Static\"} envelope stays decode-accepted (the `Range` read-compat posture); the bare {from, to} object is the canonical output"
578
+ },
591
579
  {
592
580
  "id": "lenient-emphasis-cross-vocab",
593
581
  "kind": "lenient-accept",
@@ -604,6 +592,38 @@
604
592
  "expectedFile": "lenient/lenient-fact-explicit-defaults.expected.json",
605
593
  "description": "Fact (the new labeled text-fact kind) — explicit-default `tone`/`emphasis` decode and canonicalise away (omitted-when-default on both boundaries from day one), and the bare-string TextSource shorthand applies to `label`/`value`. The canonical minimal Fact is exactly the two-field form models want to write."
606
594
  },
595
+ {
596
+ "id": "lenient-filterable-static-dashboard-compact",
597
+ "kind": "lenient-accept",
598
+ "decoder": "node",
599
+ "inputFile": "lenient/lenient-filterable-static-dashboard-compact.json",
600
+ "expectedFile": "lenient/lenient-filterable-static-dashboard-compact.expected.json",
601
+ "description": "Phase 719 — the compact authoring twin of `filterable-static-dashboard`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
602
+ },
603
+ {
604
+ "id": "lenient-grid-field-named-compact",
605
+ "kind": "lenient-accept",
606
+ "decoder": "node",
607
+ "inputFile": "lenient/lenient-grid-field-named-compact.json",
608
+ "expectedFile": "lenient/lenient-grid-field-named-compact.expected.json",
609
+ "description": "Phase 719 — the compact authoring twin of `grid-field-named`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
610
+ },
611
+ {
612
+ "id": "lenient-grid-transform-param-compact",
613
+ "kind": "lenient-accept",
614
+ "decoder": "node",
615
+ "inputFile": "lenient/lenient-grid-transform-param-compact.json",
616
+ "expectedFile": "lenient/lenient-grid-transform-param-compact.expected.json",
617
+ "description": "Phase 719 — the compact authoring twin of `grid-transform-param`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
618
+ },
619
+ {
620
+ "id": "lenient-master-detail-preselected-compact",
621
+ "kind": "lenient-accept",
622
+ "decoder": "node",
623
+ "inputFile": "lenient/lenient-master-detail-preselected-compact.json",
624
+ "expectedFile": "lenient/lenient-master-detail-preselected-compact.expected.json",
625
+ "description": "Phase 719 — the compact authoring twin of `master-detail-preselected`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
626
+ },
607
627
  {
608
628
  "id": "lenient-null-static-options",
609
629
  "kind": "lenient-accept",
@@ -644,6 +664,14 @@
644
664
  "expectedFile": "lenient/lenient-opaque-static-values.expected.json",
645
665
  "description": "Pre-429 opaque multi-select values decode to the tagged placeholder list and re-encode typed"
646
666
  },
667
+ {
668
+ "id": "lenient-scalar-transform-composition-compact",
669
+ "kind": "lenient-accept",
670
+ "decoder": "node",
671
+ "inputFile": "lenient/lenient-scalar-transform-composition-compact.json",
672
+ "expectedFile": "lenient/lenient-scalar-transform-composition-compact.expected.json",
673
+ "description": "Phase 719 — the compact authoring twin of `scalar-transform-composition`: all-valid columns as bare arrays (Core#88) and the inferable schema omitted; the canonical envelope stays the encoder's output. The pack teaches this form by example — the exemplar/prose contradiction measurably taught the envelope (claude-opus 81% envelope share, 2026-07-28 census)."
674
+ },
647
675
  {
648
676
  "id": "lenient-shape-binding-scalar-fraction",
649
677
  "kind": "lenient-accept",
@@ -828,6 +856,14 @@
828
856
  "expectedFile": "nodes/btn-invoke.json",
829
857
  "description": "Input/Button (Phase 283 — Action.Invoke capability effect)"
830
858
  },
859
+ {
860
+ "id": "btn-json-payloads",
861
+ "kind": "node-round-trip",
862
+ "decoder": "node",
863
+ "inputFile": "nodes/btn-json-payloads.json",
864
+ "expectedFile": "nodes/btn-json-payloads.json",
865
+ "description": "Input/Button (Notify / SetState / AiTool — JSON payloads)"
866
+ },
831
867
  {
832
868
  "id": "btn-read-workbook",
833
869
  "kind": "node-round-trip",
@@ -980,6 +1016,14 @@
980
1016
  "expectedFile": "nodes/filters-1.json",
981
1017
  "description": "Input/Filters (text + choice)"
982
1018
  },
1019
+ {
1020
+ "id": "filters-date-range",
1021
+ "kind": "node-round-trip",
1022
+ "decoder": "node",
1023
+ "inputFile": "nodes/filters-date-range.json",
1024
+ "expectedFile": "nodes/filters-date-range.json",
1025
+ "description": "Input/Filters (Phase 725 — DateRange chip: one filter param carries the pair, value auto-bound)"
1026
+ },
983
1027
  {
984
1028
  "id": "filters-declarative",
985
1029
  "kind": "node-round-trip",
@@ -1012,6 +1056,14 @@
1012
1056
  "expectedFile": "nodes/form-date.json",
1013
1057
  "description": "Input/Form (Date — date/time/datetime variants + bounds)"
1014
1058
  },
1059
+ {
1060
+ "id": "form-date-range",
1061
+ "kind": "node-round-trip",
1062
+ "decoder": "node",
1063
+ "inputFile": "nodes/form-date-range.json",
1064
+ "expectedFile": "nodes/form-date-range.json",
1065
+ "description": "Input/Form (Phase 725 — DateRange: single-control date range, bare {from,to} pair + bounds)"
1066
+ },
1015
1067
  {
1016
1068
  "id": "form-declarative",
1017
1069
  "kind": "node-round-trip",
@@ -1228,6 +1280,14 @@
1228
1280
  "expectedFile": "nodes/master-detail-preselected.json",
1229
1281
  "description": "Layout/Box (master-detail — grid + detail card State-bound with a pre-selected defaultValue)"
1230
1282
  },
1283
+ {
1284
+ "id": "master-detail-preselected-second-row",
1285
+ "kind": "node-round-trip",
1286
+ "decoder": "node",
1287
+ "inputFile": "nodes/master-detail-preselected-second-row.json",
1288
+ "expectedFile": "nodes/master-detail-preselected-second-row.json",
1289
+ "description": "Layout/Box (master-detail — Selection defaultValue naming a NON-FIRST row: prune-vs-seed is observable)"
1290
+ },
1231
1291
  {
1232
1292
  "id": "math-1",
1233
1293
  "kind": "node-round-trip",
@@ -1426,7 +1486,7 @@
1426
1486
  "decoder": "node",
1427
1487
  "inputFile": "nodes/table-1.json",
1428
1488
  "expectedFile": "nodes/table-1.json",
1429
- "description": "Visualisation/Table"
1489
+ "description": "Visualisation/Grid (static-table mode — staticRows; absorbed the retired Table kind)"
1430
1490
  },
1431
1491
  {
1432
1492
  "id": "tabs-1",
@@ -1636,6 +1696,15 @@
1636
1696
  "expectedFile": "ops/op-updatestyle (phase 147 role=eyebrow + voice=structural).json",
1637
1697
  "description": "UpdateStyle (Phase 147 Role=Eyebrow + Voice=Structural)"
1638
1698
  },
1699
+ {
1700
+ "id": "reject-daterange-unordered",
1701
+ "kind": "reject",
1702
+ "decoder": "node",
1703
+ "inputFile": "reject/reject-daterange-unordered.json",
1704
+ "expectedErrorCode": "WRONG_TYPE",
1705
+ "expectedPath": "$.kind.fields[0].kind.value",
1706
+ "description": "DateRange literal pair with start after end — the ordered-pair rule (Phase 725)"
1707
+ },
1639
1708
  {
1640
1709
  "id": "reject-emptynodeid",
1641
1710
  "kind": "reject",
@@ -1943,13 +2012,13 @@
1943
2012
  "description": "Top-level kind 'Widget' is not a recognised node kind"
1944
2013
  },
1945
2014
  {
1946
- "id": "reject-wrongtype-dashboard-children",
2015
+ "id": "reject-wrongtype-box-children",
1947
2016
  "kind": "reject",
1948
2017
  "decoder": "node",
1949
- "inputFile": "reject/reject-wrongtype-dashboard-children.json",
2018
+ "inputFile": "reject/reject-wrongtype-box-children.json",
1950
2019
  "expectedErrorCode": "WRONG_TYPE",
1951
2020
  "expectedPath": "$.kind.children",
1952
- "description": "Dashboard children is object not array"
2021
+ "description": "Box children is object not array"
1953
2022
  },
1954
2023
  {
1955
2024
  "id": "reject-wrongtype-discriminator",
@@ -0,0 +1 @@
1
+ {"id":"btn-json-payloads","kind":{"$type":"Button","label":"Fire the JSON-payload actions","onClick":{"$type":"Chain","ops":[{"$type":"Notify","channel":"audit.channel","payload":{"alpha":1,"escapes":"quote\" back\\slash \u0001 astral-😀","float-whole":2,"nested":[{"a":1E-07,"b":true},[0,3],{},[]],"zeta":"last key authored first"}},{"$type":"SetState","key":"draft","value":{"alpha":1,"escapes":"quote\" back\\slash \u0001 astral-😀","float-whole":2,"nested":[{"a":1E-07,"b":true},[0,3],{},[]],"zeta":"last key authored first"}},{"$type":"AiTool","args":{"alpha":1,"escapes":"quote\" back\\slash \u0001 astral-😀","float-whole":2,"nested":[{"a":1E-07,"b":true},[0,3],{},[]],"zeta":"last key authored first"},"toolName":"summarise"}]},"variant":"Primary"}}
@@ -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","value":null},"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-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 +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","defaultValue":null,"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-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"}}
@@ -0,0 +1 @@
1
+ {"id":"filters-date-range","kind":{"$type":"Filters","items":[{"kind":{"$type":"DateRange","variant":"Date"},"label":"Stay","name":"stay"}]}}
@@ -0,0 +1 @@
1
+ {"id":"form-date-range","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","max":"2026-12-31","min":"2026-01-01","onChange":"<closure>","value":{"from":"2026-03-01","to":"2026-03-08"},"variant":"Date"},"label":"Stay","required":true},{"id":"shift","kind":{"$type":"DateRange","step":900,"value":{"$type":"State","defaultValue":{"from":"08:00","to":"17:00"},"key":"shift"},"variant":"Time"},"label":"Shift","required":false},{"id":"window","kind":{"$type":"DateRange","onChange":"<closure>","value":{"from":"2026-03-01T09:00","to":"2026-03-01T17:00"},"variant":"DateTime"},"label":"Window","required":false}],"onSubmit":{"$type":"Chain","ops":[]},"submitLabel":"Book"}}
@@ -1 +1 @@
1
- {"id":"form-declarative","kind":{"$type":"Form","fields":[{"id":"profile-name","kind":{"$type":"Text","value":{"$type":"State","defaultValue":"","key":"profileName"}},"label":"Name","required":true},{"id":"profile-age","kind":{"$type":"Number","value":{"$type":"State","defaultValue":0,"key":"profileAge"}},"label":"Age","required":false},{"id":"profile-agree","kind":{"$type":"Checkbox","value":{"$type":"State","defaultValue":false,"key":"profileAgree"}},"label":"I agree","required":true},{"id":"profile-tier","kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"Basic","value":"basic"},{"label":"Pro","value":"pro"}]},"value":{"$type":"State","defaultValue":null,"key":"profileTier"}},"label":"Tier","required":false}],"onSubmit":{"$type":"Chain","ops":[]},"submitLabel":"Save"}}
1
+ {"id":"form-declarative","kind":{"$type":"Form","fields":[{"id":"profile-name","kind":{"$type":"Text","value":{"$type":"State","defaultValue":"","key":"profileName"}},"label":"Name","required":true},{"id":"profile-age","kind":{"$type":"Number","value":{"$type":"State","defaultValue":0,"key":"profileAge"}},"label":"Age","required":false},{"id":"profile-agree","kind":{"$type":"Checkbox","value":{"$type":"State","defaultValue":false,"key":"profileAgree"}},"label":"I agree","required":true},{"id":"profile-tier","kind":{"$type":"Choice","options":{"$type":"Static","value":[{"label":"Basic","value":"basic"},{"label":"Pro","value":"pro"}]},"value":{"$type":"State","key":"profileTier"}},"label":"Tier","required":false}],"onSubmit":{"$type":"Chain","ops":[]},"submitLabel":"Save"}}
@@ -1 +1 @@
1
- {"id":"form-segmented","kind":{"$type":"Form","fields":[{"id":"metric","kind":{"$type":"SegmentedChoice","onChange":"<closure>","options":{"$type":"Static","value":[{"label":"Effective","value":"effective"},{"label":"Marginal","value":"marginal"},{"label":"Take-home","value":"takeHome"}]},"orientation":"Horizontal","value":{"$type":"Static","value":"effective"}},"label":"Metric","required":false},{"id":"tier","kind":{"$type":"SegmentedChoice","onChange":"<closure>","options":{"$type":"Static","value":[{"label":"Low","value":"low"},{"label":"High","value":"high"}]},"orientation":"Vertical","value":{"$type":"Static","value":null}},"label":"Tier","required":true}],"onSubmit":{"$type":"Chain","ops":[]},"submitLabel":"Save"}}
1
+ {"id":"form-segmented","kind":{"$type":"Form","fields":[{"id":"metric","kind":{"$type":"SegmentedChoice","onChange":"<closure>","options":{"$type":"Static","value":[{"label":"Effective","value":"effective"},{"label":"Marginal","value":"marginal"},{"label":"Take-home","value":"takeHome"}]},"orientation":"Horizontal","value":{"$type":"Static","value":"effective"}},"label":"Metric","required":false},{"id":"tier","kind":{"$type":"SegmentedChoice","onChange":"<closure>","options":{"$type":"Static","value":[{"label":"Low","value":"low"},{"label":"High","value":"high"}]},"orientation":"Vertical","value":{"$type":"Static"}},"label":"Tier","required":true}],"onSubmit":{"$type":"Chain","ops":[]},"submitLabel":"Save"}}
@@ -0,0 +1 @@
1
+ {"id":"master-detail-preselected-second-row","kind":{"$type":"Box","children":[{"id":"ticket-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"},{"field":"note","kind":{"$type":"Text"},"label":"Note"}],"rowKeyField":"id","source":{"$type":"Transform","pipeline":[],"source":{"columns":{"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"note":{"validity":[true,true,true],"values":["Payment gateway timeout","Search index stale","Avatar upload fails"]},"priority":{"validity":[true,true,true],"values":["high","medium","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"},{"name":"note","type":"string"}]}}}},{"id":"ticket-detail","kind":{"$type":"Box","children":[{"id":"detail-ticket","kind":{"$type":"Fact","emphasis":true,"label":"Selected ticket","value":{"$type":"Bound","binding":{"$type":"Selection","defaultValue":"TCK-2042","field":"id","nodeId":"ticket-grid"}}}}],"heading":"Ticket detail","layout":{"$type":"Flex","direction":"Vertical","wrap":false},"role":"Card"}},{"id":"related-grid","kind":{"$type":"DataGrid","columns":[{"field":"id","kind":{"$type":"Text"},"label":"Ticket"},{"field":"priority","kind":{"$type":"Text"},"label":"Priority"},{"field":"note","kind":{"$type":"Text"},"label":"Note"}],"rowKeyField":"id","source":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2042","field":"id","nodeId":"ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}}],"source":{"columns":{"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"note":{"validity":[true,true,true],"values":["Payment gateway timeout","Search index stale","Avatar upload fails"]},"priority":{"validity":[true,true,true],"values":["high","medium","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"},{"name":"note","type":"string"}]}}}},{"id":"detail-note","kind":{"$type":"Callout","body":{"$type":"Bound","binding":{"$type":"Transform","params":[{"from":{"$type":"Selection","defaultValue":"TCK-2042","field":"id","nodeId":"ticket-grid"},"name":"ticketId"}],"pipeline":[{"$type":"filter","pred":{"$type":"binary","left":{"$type":"col","name":"id"},"op":"eq","right":{"$type":"param","name":"ticketId"}}},{"$type":"project","cols":[{"a":"note","b":"note"}]},{"$type":"limit","n":1,"offset":0}],"source":{"columns":{"id":{"validity":[true,true,true],"values":["TCK-2041","TCK-2042","TCK-2043"]},"note":{"validity":[true,true,true],"values":["Payment gateway timeout","Search index stale","Avatar upload fails"]},"priority":{"validity":[true,true,true],"values":["high","medium","low"]}},"schema":[{"name":"id","type":"string"},{"name":"priority","type":"string"},{"name":"note","type":"string"}]}}},"heading":"Ticket note","tone":"Info"}}],"layout":{"$type":"Auto"},"role":"Dashboard"}}
@@ -1 +1 @@
1
- {"id":"multiselect-1","kind":{"$type":"Select","label":"Tags","multiple":true,"onChange":"<closure>","source":{"$type":"Static","value":[{"label":"Red","value":"red"},{"label":"Green","value":"green"}]},"value":{"$type":"Static","value":null},"values":{"$type":"Static","value":["red","green"]}}}
1
+ {"id":"multiselect-1","kind":{"$type":"Select","label":"Tags","multiple":true,"onChange":"<closure>","source":{"$type":"Static","value":[{"label":"Red","value":"red"},{"label":"Green","value":"green"}]},"value":{"$type":"Static"},"values":{"$type":"Static","value":["red","green"]}}}
@@ -1 +1 @@
1
- {"$type":"InsertChild","child":{"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}}},"parentId":"dash-empty","position":0}
1
+ {"$type":"InsertChild","child":{"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}}},"parentId":"dash-empty"}
@@ -1 +1 @@
1
- {"$type":"MoveNode","newParentId":"card-1","newPosition":0,"target":"metric-1"}
1
+ {"$type":"MoveNode","newParentId":"card-1","target":"metric-1"}
@@ -0,0 +1 @@
1
+ {"id":"f1","kind":{"$type":"Form","fields":[{"id":"stay","kind":{"$type":"DateRange","value":{"from":"2026-03-08","to":"2026-03-01"},"variant":"Date"},"label":"Stay","required":false}],"onSubmit":{"$type":"Dispatch"},"submitLabel":"Book"}}
@@ -0,0 +1 @@
1
+ {"id":"x","kind":{"$type":"Box","children":{},"layout":{"$type":"Auto"},"role":"Group"},"state":{},"style":{"emphasis":"Normal","tone":"Default","weight":"Standard"}}
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json-schema.org/draft/2020-12/schema",
3
3
  "$id": "https://fuaran.dev/wire-format/v1/schema.json",
4
4
  "title": "Fuaran UI wire format (v1)",
5
- "description": "Canonical JSON wire format for the Fuaran UI tree (Node) and tree edits (TreeOp), wire format v1. Generated from Fuaran.UI.Types via Fuaran.UI.Ops.SchemaGen; describes the output of CanonicalJson.encode* / the input JsonDecode.decode* accepts. See fuaran/docs/WIRE_FORMAT.md.",
5
+ "description": "Canonical JSON wire format for the Fuaran UI tree (Node) and tree edits (TreeOp), wire format v1. Generated from Fuaran.UI.Types via Fuaran.UI.Ops.SchemaGen; describes the output of CanonicalJson.encode* / the input JsonDecode.decode* accepts. See fuaran-dotnet/docs/WIRE_FORMAT.md.",
6
6
  "oneOf": [
7
7
  {
8
8
  "$ref": "#/$defs/Node"
@@ -260,8 +260,7 @@
260
260
  "value": true
261
261
  },
262
262
  "required": [
263
- "$type",
264
- "value"
263
+ "$type"
265
264
  ]
266
265
  },
267
266
  {
@@ -333,7 +332,6 @@
333
332
  },
334
333
  "required": [
335
334
  "$type",
336
- "defaultValue",
337
335
  "key"
338
336
  ]
339
337
  },
@@ -1311,6 +1309,34 @@
1311
1309
  "$type",
1312
1310
  "variant"
1313
1311
  ]
1312
+ },
1313
+ {
1314
+ "type": "object",
1315
+ "properties": {
1316
+ "$type": {
1317
+ "const": "DateRange"
1318
+ },
1319
+ "onChange": {
1320
+ "const": "<closure>"
1321
+ },
1322
+ "value": true,
1323
+ "variant": {
1324
+ "$ref": "#/$defs/DateVariant"
1325
+ },
1326
+ "min": {
1327
+ "type": "string"
1328
+ },
1329
+ "max": {
1330
+ "type": "string"
1331
+ },
1332
+ "step": {
1333
+ "type": "number"
1334
+ }
1335
+ },
1336
+ "required": [
1337
+ "$type",
1338
+ "variant"
1339
+ ]
1314
1340
  }
1315
1341
  ]
1316
1342
  },
@@ -4285,16 +4311,12 @@
4285
4311
  },
4286
4312
  "parentId": {
4287
4313
  "type": "string"
4288
- },
4289
- "position": {
4290
- "type": "integer"
4291
4314
  }
4292
4315
  },
4293
4316
  "required": [
4294
4317
  "$type",
4295
4318
  "child",
4296
- "parentId",
4297
- "position"
4319
+ "parentId"
4298
4320
  ]
4299
4321
  },
4300
4322
  {
@@ -4321,9 +4343,6 @@
4321
4343
  "newParentId": {
4322
4344
  "type": "string"
4323
4345
  },
4324
- "newPosition": {
4325
- "type": "integer"
4326
- },
4327
4346
  "target": {
4328
4347
  "type": "string"
4329
4348
  }
@@ -4331,7 +4350,6 @@
4331
4350
  "required": [
4332
4351
  "$type",
4333
4352
  "newParentId",
4334
- "newPosition",
4335
4353
  "target"
4336
4354
  ]
4337
4355
  },