{ "root": "App", "widgets": { "App": { "allow_extra_props": false, "children": { "kind": "only_of", "value": [ "Room", "WatchTogether", "Show", "Text", "Receipts", "EnergyMeter" ] }, "description": "The app: its title and what it holds. An app holds one room (a Room, a WatchTogether or a Show), and text, receipts and an energy meter beside it.", "name": "App", "positional": [ "children", "title" ], "props": { "title": { "required": false, "ty": "text" } } }, "Chat": { "allow_extra_props": false, "children": { "kind": "none" }, "description": "The room's chat: each message a signed event, verified before it is shown. Those who joined write; those who watch read.", "name": "Chat", "positional": [ "title" ], "props": { "title": { "required": false, "ty": "text" } } }, "EnergyMeter": { "allow_extra_props": false, "children": { "kind": "none" }, "description": "What each action cost in energy, and how the figure was obtained (a page has no meter, so its figures are estimates, labelled so).", "name": "EnergyMeter", "positional": [ "title" ], "props": { "title": { "required": false, "ty": "text" } } }, "Participants": { "allow_extra_props": false, "children": { "kind": "none" }, "description": "Who is in the room now, from the room's signed lifecycle.", "name": "Participants", "positional": [ "title" ], "props": { "title": { "required": false, "ty": "text" } } }, "Player": { "allow_extra_props": false, "children": { "kind": "none" }, "description": "The room's video: each participant's camera laid out from the room's signed record, every frame checked before it is shown.", "name": "Player", "positional": [ "title" ], "props": { "title": { "required": false, "ty": "text" } } }, "Poll": { "allow_extra_props": false, "children": { "kind": "none" }, "description": "A vote in a Show: the lead opens it, each viewer chooses one option, and the room's clock closes it and signs the result. `options` is a list of 2 to 32 texts; `seconds` how long it stays open (5 to 300; 30 when left out).", "name": "Poll", "positional": [ "question", "options", "seconds" ], "props": { "options": { "required": true, "ty": "list" }, "question": { "required": true, "ty": "text" }, "seconds": { "required": false, "ty": "number" } } }, "Receipts": { "allow_extra_props": false, "children": { "kind": "none" }, "description": "This page's receipts: every action a person takes here is sealed into a hash-chained log this page signs and verifies, and the room's objects checked against their receipts are counted.", "name": "Receipts", "positional": [ "title" ], "props": { "title": { "required": false, "ty": "text" } } }, "Room": { "allow_extra_props": false, "children": { "kind": "only_of", "value": [ "Player", "Chat", "Participants", "Receipts", "EnergyMeter", "Text" ] }, "description": "A live room: people join with their camera and microphone, or watch. Every audio and video object is checked against its signed receipt before it is shown. Holds a Player for the room's video and a Chat; those who join can chat, those who watch read it.", "name": "Room", "positional": [ "children", "title" ], "props": { "title": { "required": false, "ty": "text" } } }, "Show": { "allow_extra_props": false, "children": { "kind": "only_of", "value": [ "Player", "Chat", "Poll", "Participants", "Receipts", "EnergyMeter", "Text" ] }, "description": "A show: hosts on camera, the first of them leading; an audience that watches and votes. Holds a Player for the hosts' video, a Chat for the hosts, and Polls the lead opens and the audience answers. `audience` is how many inputs each viewer may send to one poll (1 to 255; 1 when left out).", "name": "Show", "positional": [ "children", "title", "audience" ], "props": { "audience": { "required": false, "ty": "number" }, "title": { "required": false, "ty": "text" } } }, "Text": { "allow_extra_props": false, "children": { "kind": "none" }, "description": "A paragraph of text.", "name": "Text", "positional": [ "text" ], "props": { "text": { "required": true, "ty": "text" } } }, "WatchTogether": { "allow_extra_props": false, "children": { "kind": "only_of", "value": [ "Participants", "Receipts", "EnergyMeter", "Text" ] }, "description": "A watch room: everyone watches one file together, in sync; anyone may play, pause, seek or change the speed for everyone. `source` is the file's name within the app (for example \"film.mp4\"). A watch room carries the shared controls alone: it holds no Chat and no Poll.", "name": "WatchTogether", "positional": [ "source", "children", "title" ], "props": { "source": { "required": true, "ty": "text" }, "title": { "required": false, "ty": "text" } } } } }