open-standards/joule-ui/conformance/lang/v1/library.json
Transaction Science 8a0f6073f7 joule-ui: the line language (SPEC §11), a streaming ingest into validated widget trees
joule-ui takes in OpenUI Lang 1.0 the way it takes in A2UI: a model writes a
surface as a program, one widget a line, and joule-ui-lang builds a widget tree
against the host's registry as the program streams. After every chunk a snapshot
holds the tree as far as it can be built, each widget checked by joule-ui's own
validate, and every error with its source line and reason code. State, queries,
operators, conditionals, built-in functions and sequences of actions are parsed
and refused not-declarative. A canonical writer turns a tree back into the
language; it parses back to the same tree.

- joule-ui-core: WidgetSchema::positional, the order a positional call passes
  props in (SPEC §3); absent from the wire form when undeclared.
- joule-ui-interaction: begin_interaction and Pending::finish, the lifecycle's
  three phases in two steps for a host whose handler is asynchronous (SPEC §6);
  run_interaction is built on them and seals what it sealed before.
- conformance/lang/v1: L1 statements, L2 ingest, L3 streaming, L4 the canonical
  form, L5 refusals, with an independent Python verifier written from §11.
- docs/create.md: the design of Create.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
2026-10-27 04:46:19 -04:00

178 lines
3.3 KiB
JSON

{
"root": "Page",
"widgets": {
"Button": {
"allow_extra_props": false,
"children": {
"kind": "none"
},
"description": "a button",
"name": "Button",
"positional": [
"label",
"action",
"primary"
],
"props": {
"action": {
"required": false,
"ty": "action"
},
"label": {
"required": true,
"ty": "text"
},
"primary": {
"required": false,
"ty": "bool"
}
}
},
"Card": {
"allow_extra_props": false,
"children": {
"kind": "any"
},
"description": "a titled container",
"name": "Card",
"positional": [
"title",
"children",
"subtitle"
],
"props": {
"subtitle": {
"required": false,
"ty": "text"
},
"title": {
"required": true,
"ty": "text"
}
}
},
"Chart": {
"allow_extra_props": false,
"children": {
"kind": "none"
},
"description": "a chart of values",
"name": "Chart",
"positional": [
"labels",
"values",
"options"
],
"props": {
"labels": {
"required": true,
"ty": "list"
},
"options": {
"required": false,
"ty": "object"
},
"values": {
"required": true,
"ty": "list"
}
}
},
"Note": {
"allow_extra_props": false,
"children": {
"kind": "any"
},
"description": "a note",
"name": "Note",
"positional": [
"author",
"body",
"children"
],
"props": {
"author": {
"required": false,
"ty": "text"
},
"body": {
"required": true,
"ty": "text"
}
}
},
"Page": {
"allow_extra_props": false,
"children": {
"kind": "any"
},
"description": "the page",
"name": "Page",
"positional": [
"children",
"title"
],
"props": {
"title": {
"required": false,
"ty": "text"
}
}
},
"Tab": {
"allow_extra_props": false,
"children": {
"kind": "any"
},
"description": "one tab",
"name": "Tab",
"positional": [
"title",
"children"
],
"props": {
"title": {
"required": true,
"ty": "text"
}
}
},
"Tabs": {
"allow_extra_props": false,
"children": {
"kind": "only_of",
"value": [
"Tab"
]
},
"description": "a strip of tabs",
"name": "Tabs",
"positional": [
"children"
],
"props": {}
},
"Text": {
"allow_extra_props": false,
"children": {
"kind": "none"
},
"description": "a run of text",
"name": "Text",
"positional": [
"text",
"size"
],
"props": {
"size": {
"required": false,
"ty": "number"
},
"text": {
"required": true,
"ty": "text"
}
}
}
}
}