@polyxd/a2ui 0.1.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.
- package/LICENSE +202 -0
- package/NOTICE +177 -0
- package/README.md +101 -0
- package/catalog/catalog.json +2806 -0
- package/dist/a2ui.d.ts +22 -0
- package/dist/a2ui.js +28 -0
- package/dist/a2ui.js.map +1 -0
- package/dist/catalog.d.ts +33 -0
- package/dist/catalog.js +184 -0
- package/dist/catalog.js.map +1 -0
- package/dist/export.d.ts +79 -0
- package/dist/export.js +120 -0
- package/dist/export.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/mapping.d.ts +18 -0
- package/dist/mapping.js +133 -0
- package/dist/mapping.js.map +1 -0
- package/dist/validate.d.ts +18 -0
- package/dist/validate.js +83 -0
- package/dist/validate.js.map +1 -0
- package/package.json +36 -0
- package/vendor/a2ui/v1_0-04e6f07/LICENSE +227 -0
- package/vendor/a2ui/v1_0-04e6f07/README.md +29 -0
- package/vendor/a2ui/v1_0-04e6f07/catalogs/basic/catalog.json +1220 -0
- package/vendor/a2ui/v1_0-04e6f07/json/agent_to_renderer.json +216 -0
- package/vendor/a2ui/v1_0-04e6f07/json/catalog_definition.json +229 -0
- package/vendor/a2ui/v1_0-04e6f07/json/common_types.json +386 -0
|
@@ -0,0 +1,2806 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://polyxd.com/catalog/0.1/a2ui",
|
|
4
|
+
"protocolVersion": "1.0",
|
|
5
|
+
"title": "Polyxd catalog",
|
|
6
|
+
"description": "Polyxd semantic components as an A2UI v1.0 catalog. Every component is a faithful projection of the Polyxd component with the same name and props. Generated from @polyxd/spec components/*.json by @polyxd/a2ui (npm run build:catalog).",
|
|
7
|
+
"catalogId": "https://polyxd.com/catalog/0.1/a2ui",
|
|
8
|
+
"instructions": "# Polyxd catalog for A2UI\n\nSemantic components for just-in-time interfaces. The renderer maps each one onto its own native, design-system components and tokens. Pick components by meaning, not by look. Never send colours, sizes or fonts.\n\n## Rules for every surface\n\n1. The top-level component has `\"id\": \"root\"`. Children are referenced by id (flat adjacency list), never nested inline.\n2. Data always comes from the host through JSON Pointer bindings `{\"path\": \"/...\"}`. Never invent data or pre-format numbers and dates into strings. Set `format` instead.\n3. Inside a templated list (`Collection.items`), relative paths such as `{\"path\": \"title\"}` resolve against the current item. Absolute paths start with `/`.\n4. Actions are declared capability intents: `{\"event\": {\"name\": \"transfer.confirm\", \"context\": {...}}}`. Use `{\"functionCall\": {\"call\": \"dismiss\" | \"back\" | \"next\"}}` for navigation the renderer handles itself.\n5. At most one primary action is visible at a time. A Form's submit and a Steps finish count as primary.\n6. Destructive or consequential actions go through `Confirm`.\n7. Components carry their own roles and names. Use `accessibility` only to add to them.\n\n## Components\n\n### Action\n\nA button that triggers a host capability.\n\n- **Use when:**\n - Anything the user can do that isn't typing or choosing\n- **Don't use when:**\n - Navigating between views: use Views\n - Confirming something destructive: wrap in Confirm\n- **Rendering:**\n - At most one primary action visible at a time\n - danger tone uses color.action.danger.*\n- **Accessibility** (role: button):\n - Label describes the outcome\n - Target at least size.target.min\n - Disabled actions explain why nearby\n- **Agents:** Activate by label.\n\n### ActionBar\n\nThe set of actions for a surface or section; the renderer places it where that platform expects.\n\n- **Use when:**\n - Two or more actions that apply to the whole surface or section\n- **Don't use when:**\n - A single action inline with content: use Action directly\n- **Rendering:**\n - Web: bottom of the section, primary last on desktop and first on mobile stacks\n - iOS/Android: toolbar or bottom bar on compact screens\n- **Accessibility** (role: toolbar / group):\n - Order in the accessibility tree is order of importance\n- **Agents:** Actions are listed together.\n\n### Card\n\nOne self-contained entity (an account, an order, a place), optionally actionable as a whole.\n\n- **Use when:**\n - Items in a Collection that each represent an entity\n - A single entity summary in a larger surface\n- **Don't use when:**\n - Plain grouping: use Group\n - Tabular data with many attributes: use Table\n- **Rendering:**\n - If 'action' is set, the whole card opens it; controls in children (e.g. a habit's done Toggle) sit above that target and act on their own\n - Uses surface.raised and radius.default\n - 'progress' renders a progress bar with its label or percentage\n- **Accessibility** (role: article (or link/button when it has an action)):\n - Title is the accessible name\n - When actionable, the title is the card's one link; controls inside it (a Toggle, an Action) stay separate targets with their own names\n- **Agents:** Activate the card by its title; use controls inside it by their own labels.\n\n### Chart\n\nA visual summary of data, always paired with a text summary.\n\n- **Use when:**\n - A trend, comparison, share or spread matters more than exact values\n- **Don't use when:**\n - Exact values matter most: use Table or Metric\n - A single number: use Metric\n- **Rendering:**\n - trend → line, comparison → bar, composition → stacked bar (pie only for ≤ 4 parts), distribution → histogram\n - Series colors use color.data.categorical.N in order\n- **Accessibility** (role: img (figure) with the summary as description, plus a data-table alternative):\n - 'summary' states the takeaway in words\n - Series are distinguishable without color (labels, markers)\n - The underlying data is available as a table\n- **Agents:** Reads the summary, and the data through the table alternative.\n\n### Choice\n\nPick one or several options from a known set. The renderer chooses the control.\n\n- **Use when:**\n - Any choice from a known set of options\n- **Don't use when:**\n - On/off setting: use Toggle\n - Picking between rich entities by comparing attributes: use Comparison\n- **Rendering:**\n - single, 2–4 short options → segmented control or radios\n - single, 5–10 → radios (or select on compact screens)\n - single, > 10 → searchable select\n - multiple, ≤ 10 → checkboxes; > 10 → searchable multi-select\n - Option order comes from host data or remembers the last order used\n- **Accessibility** (role: radiogroup / group of checkboxes / listbox / combobox (depends on rendering)):\n - Visible group label\n - Every option has a text label\n- **Agents:** Select options by label.\n\n### Collection\n\nA list of items from host data, each rendered with the same template.\n\n- **Use when:**\n - Browsing a set of similar entities\n - Search results\n- **Don't use when:**\n - Attributes compared across items: use Table or Comparison\n - Choosing an option in a form: use Choice\n- **Rendering:**\n - Long lists are virtualized by the renderer\n - Items keep their order from host data\n - grid: 2 columns on phones, more as width allows; list: one item per row\n - auto: grid when the item template is a Card with media, otherwise list\n - 'timeline' marks each item on a line, newest first, for activity feeds\n- **Accessibility** (role: list / listitem (listbox when selectable)):\n - Announces the item count\n - An empty state is provided\n- **Agents:** Items are enumerated with their titles; each item exposes its own actions.\n\n### Comparison\n\nCompare a few options across the same attributes, and choose one.\n\n- **Use when:**\n - Choosing between 2–4 plans, products, routes or offers\n- **Don't use when:**\n - More than ~5 items: use Table with sorting\n - No decision needed: use Table\n- **Rendering:**\n - Wide: items as columns; compact: one card per item with the same attribute order\n - Best values per attribute are marked when 'better' is set\n - Exactly one item may be recommended; its badge carries recommendedReason\n - Attributes with the same group sit under one heading\n - Boolean values render as a check or a dash with text alternatives ('Included' / 'Not included')\n - On compact surfaces the recommended item comes first\n- **Accessibility** (role: table (items as columns on wide screens) or list of cards):\n - Attribute names are headers\n - 'better' is conveyed in text, not only color\n- **Agents:** Reads attributes per item; choose actions are named with the item title.\n\n### Confirm\n\nAsks the user to confirm a consequential or destructive action, showing what will happen.\n\n- **Use when:**\n - Moving money, deleting data, sending on someone's behalf, anything irreversible\n- **Don't use when:**\n - Routine reversible actions (prefer undo)\n - Information only: use Status\n- **Rendering:**\n - destructive uses color.action.danger.*\n - Capabilities with high risk level must use Confirm (enforced by the verifier)\n - the consequence sits directly above the confirm button\n - amount and subject lead the dialog when set\n - consequences render as an icon list, two columns on wide surfaces\n- **Accessibility** (role: alertdialog):\n - Focus starts on the least destructive option\n - Confirm label repeats the action verb\n - Escape cancels\n- **Agents:** Reads title and consequence; confirm and cancel are named buttons.\n\n### DateInput\n\nA date, time, date-time or date range.\n\n- **Use when:**\n - Any date or time entry\n- **Don't use when:**\n - Relative choices like 'This month / Last month': use Choice\n- **Rendering:**\n - Memorable dates (birthdays) use separate day/month/year fields; near dates use a calendar\n- **Accessibility** (role: group of spinbuttons or a date picker dialog):\n - Typing the date is always possible, not only picking from a calendar\n- **Agents:** Fill by label with an ISO date.\n\n### DetailList\n\nLabel/value pairs describing one thing (a summary, a receipt, a review step).\n\n- **Use when:**\n - Reviewing before submitting\n - Showing the attributes of one entity\n - Receipts\n - Fees, prices and totals before someone commits (variant 'receipt')\n- **Don't use when:**\n - Many entities with the same attributes: use Table\n - Comparing entities: use Comparison\n- **Rendering:**\n - Keeps the item order stable across generations (keys are remembered)\n - receipt: values right-aligned in tabular figures, the total row emphasised; people read amounts from the right\n - 'grid' lays fields out in columns by width, label above value\n- **Accessibility** (role: list of term/definition pairs (dl)):\n - Label and value are programmatically associated\n- **Agents:** Read each label with its value.\n\n### Disclosure\n\nProgressive disclosure: secondary content hidden behind a toggle.\n\n- **Use when:**\n - Details most people don't need (fees breakdown, advanced options, help text)\n- **Don't use when:**\n - Content everyone needs to complete the task\n - Primary navigation\n- **Rendering:**\n - Never hide required inputs or the primary action inside a closed Disclosure\n- **Accessibility** (role: button (aria-expanded) + region):\n - Summary is a button with expanded state\n - Hidden content is not in the tab order while closed\n- **Agents:** Expand by the summary text; state is exposed as expanded/collapsed.\n\n### FilterPanel\n\nFilters for a list of results, with the result count.\n\n- **Use when:**\n - Browsing results people narrow by several attributes\n - More than two filters, or filters that take space (ranges, long lists)\n- **Don't use when:**\n - One or two quick filters: put a Choice (chips) above the results\n - Filling in information: use Form\n- **Rendering:**\n - Wide: filters in a sidebar beside the results\n - Compact: a 'Filters · n' button opens a bottom sheet whose action says 'Show n results'\n - Active filters show as removable chips above the results\n - Filters apply as they change (no separate Apply on wide)\n- **Accessibility** (role: region (filters) plus the results):\n - The result count is announced politely when it changes\n - Each active filter can be removed with a named button ('Remove filter: Desk')\n- **Agents:** Set filter inputs by label; read the result count; remove filters by their Remove buttons.\n\n### Form\n\nCollects inputs and submits them together.\n\n- **Use when:**\n - Any set of inputs that are submitted together\n- **Don't use when:**\n - Settings that apply immediately: use Toggles with actions\n - Several distinct stages: use Steps\n- **Rendering:**\n - One column; labels above fields\n - Submit is the primary action; cancel is secondary\n - Submit context is built from the form's input bindings\n - 'horizontal' becomes stacked on compact surfaces\n - 'aside' sits beside the form on wide surfaces; on compact ones it comes first, before the fields, so people read what they are agreeing to\n- **Accessibility** (role: form):\n - Submit is a real submit button\n - On submit errors, focus moves to an error summary that links to each field\n- **Agents:** Fill fields by label, then activate the submit button by its label.\n\n### Group\n\nVisually groups closely related items without a heading (proximity).\n\n- **Use when:**\n - A few items that belong together (a key figure and its caption, several metrics)\n- **Don't use when:**\n - The group needs a heading: use Section\n - Choosing between items: use Choice or Comparison\n- **Rendering:**\n - 'inline' collapses to a stack below the compact breakpoint\n - Gap uses space.stack.default or space.inline.default\n- **Accessibility** (role: group):\n - Has an accessible name when it contains interactive items\n- **Agents:** Treated as one unit when its label is present.\n\n### Media\n\nAn image supplied by the host.\n\n- **Use when:**\n - Photos or illustrations that help identify something (a product, a place, a person)\n- **Don't use when:**\n - Decoration with no information\n - Icons for actions (renderer supplies those)\n- **Rendering:**\n - Images never convey information that is not also in text\n- **Accessibility** (role: img):\n - Has alt text unless decorative (then hidden from assistive technology)\n- **Agents:** Reads the alt text.\n\n### Metric\n\nA key figure with a label, and optionally its change.\n\n- **Use when:**\n - One to four headline numbers the user asked about\n- **Don't use when:**\n - Many numbers: use Table or DetailList\n - Trends over time: use Chart\n- **Rendering:**\n - Value uses type.numeric.display\n - Change uses color.data.positive / negative according to 'favorable'\n- **Accessibility** (role: group (label + value)):\n - Change direction is conveyed in text as well as color\n - Screen readers read label, value and change as one sentence\n- **Agents:** Read label and value.\n\n### Navigation\n\nThe product's main navigation.\n\n- **Use when:**\n - Software with sections people move between (B2B apps, dashboards)\n - Only when the host doesn't already provide navigation\n- **Don't use when:**\n - Steps of one task: use Steps\n - Sections of one record: use Views\n - A surface embedded in a host that has its own navigation\n- **Rendering:**\n - Wide: a side navigation with grouped items\n - Compact: a menu button that opens the navigation\n - Badges sit at the end of their item\n- **Accessibility** (role: navigation):\n - The current item carries aria-current=\"page\"\n - Badges say what they count ('12 overdue')\n- **Agents:** Move between sections by activating items by their labels.\n\n### RangeInput\n\nA number, or a range between two numbers, within known bounds.\n\n- **Use when:**\n - Approximate values within a range (budget cap, volume)\n - A price or date range for filtering (mode 'range')\n- **Don't use when:**\n - Exact values: use TextInput with kind 'number' or 'currency'\n- **Rendering:**\n - Shows min, max and the current formatted value\n - mode 'range' shows two thumbs and min/max fields that stay in sync\n- **Accessibility** (role: slider):\n - Current value is shown as text\n - Keyboard arrows change the value by step\n- **Agents:** Set the value directly by label.\n\n### Section\n\nA titled region of the surface that groups related content under a heading.\n\n- **Use when:**\n - The surface has two or more distinct topics (e.g. 'Recipient' and 'Amount')\n - Content would otherwise exceed one screen and needs signposting\n- **Don't use when:**\n - Only one topic: put content directly under the root\n - Visual grouping without a heading: use Group\n- **Rendering:**\n - Heading level follows nesting depth, never chosen by the model\n - Spacing between sections uses space.stack.section\n- **Accessibility** (role: region (with heading)):\n - Title is rendered as a real heading; nesting depth sets the heading level\n - Title is the region's accessible name\n- **Agents:** Navigate by heading; the title names the region.\n\n### Status\n\nFeedback about state: info, success, warning, error, empty or loading.\n\n- **Use when:**\n - Results of an action\n - Empty collections\n - Errors with a way to recover\n - Loading states\n - 'undo': after a reversible action ran, say what happened and offer Undo instead of asking first\n- **Don't use when:**\n - Validation errors on a field: inputs show their own errors\n - Confirmation before acting: use Confirm\n- **Rendering:**\n - error and warning use color.status.* tokens and an icon\n - empty states explain why and what to do next\n - loading shows a skeleton when layout is known, otherwise a progress indicator\n - 'undo' renders as a snackbar at the bottom of the surface, announced politely, with the Undo action\n - Empty states may carry an ActionBar: one primary and one secondary action\n - 'inline' renders a bordered notice with its action on the right\n- **Accessibility** (role: status or alert (live region)):\n - success/info/loading are polite live regions; error is assertive\n - Meaning is in text, not only color or icon\n- **Agents:** Reads the title and message; the recovery action is exposed.\n\n### Steps\n\nA task split into ordered steps with visible progress.\n\n- **Use when:**\n - Tasks with dependent stages or too many inputs for one view (checkout, onboarding)\n- **Don't use when:**\n - Independent views: use Views\n - Under ~6 inputs: a single Form\n- **Rendering:**\n - Renderer provides Back (ui.back) and Next (ui.next); the last step shows 'finish'\n - Each step validates before moving on\n- **Accessibility** (role: group with step progress (aria-current on the current step)):\n - Current step and total are announced\n - Back never loses entered data\n- **Agents:** Reads 'step N of M'; next/back are exposed as buttons.\n\n### Table\n\nTabular data: many items sharing the same attributes.\n\n- **Use when:**\n - Scanning or comparing many rows by several attributes\n - Records people scan, sort, select and act on in bulk (B2B lists)\n- **Don't use when:**\n - One entity: use DetailList\n - A few entities where the user must choose: use Comparison\n- **Rendering:**\n - On compact screens, rows become stacked cards with label/value pairs\n - Alignment follows the column format, never chosen by the model\n - Numbers and currency are right-aligned with tabular figures; 'status' renders as a tag using 'tones'\n - On compact surfaces the table becomes a list of rows: the entity, the key fields in one line, and the status\n - Selection replaces the toolbar with the bulk-action bar while rows are selected\n - Paging shows rows per page, the range and the total\n- **Accessibility** (role: table with caption and column headers):\n - Has a caption\n - Column headers are real header cells\n - Numeric columns are right-aligned by format\n - Sortable headers carry aria-sort and say what sorting does\n - The select-all checkbox is mixed when some rows are selected\n - The bulk-action bar names how many rows are selected, announced politely\n - Each row's action menu is named after its row\n- **Agents:** Read by row and column headers; rows with rowAction are activatable. Sort by activating a column header; select rows by their checkboxes; act in bulk from the bar that appears.\n\n### Text\n\nA run of text.\n\n- **Use when:**\n - Explanations, instructions, messages\n- **Don't use when:**\n - Headings: use Section title\n - Label/value pairs: use DetailList\n - Key figures: use Metric\n- **Rendering:**\n - 'supporting' uses color.text.muted\n - No inline styling; emphasis comes from structure\n- **Accessibility** (role: text):\n - Body text is at least 16px (type.body.default)\n - Line length is capped by measure.max\n- **Agents:** Read as text.\n\n### TextInput\n\nA single text-like value: text, number, email, phone, currency, search or long text.\n\n- **Use when:**\n - Free-form values the user types\n- **Don't use when:**\n - A value from a known set: use Choice\n - Dates: use DateInput\n - Secrets (passwords, card numbers): not generated; hosts provide their own secure flows\n- **Rendering:**\n - Width suggests expected length\n - Errors appear after the user leaves the field or submits, not while typing\n - kind 'search' renders as a pill search field with an icon; the label stays as its accessible name\n - size 'hero' renders a large centred amount with the currency symbol dimmed\n- **Accessibility** (role: textbox / searchbox / spinbutton):\n - Visible label, never placeholder-only\n - Help and errors are associated with the field\n - Kind sets the right keyboard and autocomplete\n- **Agents:** Fill by label.\n\n### Toggle\n\nAn on/off setting.\n\n- **Use when:**\n - Settings that take effect immediately\n - A single yes/no inside a form\n- **Don't use when:**\n - Choosing between named options: use Choice\n- **Rendering:**\n - With 'action' it renders as a switch; inside a Form without action, as a checkbox\n- **Accessibility** (role: switch (immediate) / checkbox (in a form)):\n - Label says what 'on' means\n- **Agents:** Toggle by label; state is exposed as on/off.\n\n### Views\n\nSwitch between alternative views of the same subject (tabs).\n\n- **Use when:**\n - 2–6 peer views of the same data (Overview / Transactions / Settings)\n- **Don't use when:**\n - Sequential steps: use Steps\n - Filtering one list: use Choice\n- **Rendering:**\n - More than 4 views on compact screens become a menu or scrollable tabs\n - Counts sit beside their labels and are part of the tab's accessible name\n- **Accessibility** (role: tablist / tab / tabpanel):\n - Each tab has a visible label\n - Arrow keys move between tabs\n- **Agents:** Select a view by its label.\n",
|
|
9
|
+
"components": {
|
|
10
|
+
"Action": {
|
|
11
|
+
"type": "object",
|
|
12
|
+
"description": "A button that triggers a host capability.",
|
|
13
|
+
"properties": {
|
|
14
|
+
"component": {
|
|
15
|
+
"const": "Action"
|
|
16
|
+
},
|
|
17
|
+
"visible": {
|
|
18
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
19
|
+
"description": "Hide the component when false"
|
|
20
|
+
},
|
|
21
|
+
"label": {
|
|
22
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
23
|
+
"description": "Verb-first label saying what happens ('Send £20', not 'OK')"
|
|
24
|
+
},
|
|
25
|
+
"action": {
|
|
26
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
27
|
+
},
|
|
28
|
+
"emphasis": {
|
|
29
|
+
"enum": [
|
|
30
|
+
"primary",
|
|
31
|
+
"secondary",
|
|
32
|
+
"tertiary"
|
|
33
|
+
],
|
|
34
|
+
"default": "secondary"
|
|
35
|
+
},
|
|
36
|
+
"tone": {
|
|
37
|
+
"enum": [
|
|
38
|
+
"default",
|
|
39
|
+
"danger"
|
|
40
|
+
],
|
|
41
|
+
"default": "default"
|
|
42
|
+
},
|
|
43
|
+
"disabled": {
|
|
44
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean"
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
"required": [
|
|
48
|
+
"component",
|
|
49
|
+
"label",
|
|
50
|
+
"action"
|
|
51
|
+
],
|
|
52
|
+
"metadata": {
|
|
53
|
+
"extensions": {
|
|
54
|
+
"com_polyxd": {
|
|
55
|
+
"category": "action",
|
|
56
|
+
"target": "custom",
|
|
57
|
+
"basicAnalog": "Button + Text child",
|
|
58
|
+
"why": "Button needs a synthesized Text child and has only default/primary/borderless; it has no danger tone and no disabled state."
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
},
|
|
63
|
+
"ActionBar": {
|
|
64
|
+
"type": "object",
|
|
65
|
+
"description": "The set of actions for a surface or section; the renderer places it where that platform expects.",
|
|
66
|
+
"properties": {
|
|
67
|
+
"component": {
|
|
68
|
+
"const": "ActionBar"
|
|
69
|
+
},
|
|
70
|
+
"visible": {
|
|
71
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
72
|
+
"description": "Hide the component when false"
|
|
73
|
+
},
|
|
74
|
+
"children": {
|
|
75
|
+
"$ref": "common_types.json#/$defs/ChildList",
|
|
76
|
+
"type": "array",
|
|
77
|
+
"minItems": 1,
|
|
78
|
+
"description": "Action component ids, in order of importance"
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"required": [
|
|
82
|
+
"component",
|
|
83
|
+
"children"
|
|
84
|
+
],
|
|
85
|
+
"allowedChildren": [
|
|
86
|
+
"Action"
|
|
87
|
+
],
|
|
88
|
+
"metadata": {
|
|
89
|
+
"extensions": {
|
|
90
|
+
"com_polyxd": {
|
|
91
|
+
"category": "action",
|
|
92
|
+
"target": "custom",
|
|
93
|
+
"basicAnalog": "Row of Button",
|
|
94
|
+
"why": "Row is pure layout. It loses the 'set of actions ordered by importance' semantics and the stacking on narrow screens."
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"Card": {
|
|
100
|
+
"type": "object",
|
|
101
|
+
"description": "One self-contained entity (an account, an order, a place), optionally actionable as a whole.",
|
|
102
|
+
"properties": {
|
|
103
|
+
"component": {
|
|
104
|
+
"const": "Card"
|
|
105
|
+
},
|
|
106
|
+
"visible": {
|
|
107
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
108
|
+
"description": "Hide the component when false"
|
|
109
|
+
},
|
|
110
|
+
"title": {
|
|
111
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
112
|
+
"description": "Name of the entity"
|
|
113
|
+
},
|
|
114
|
+
"subtitle": {
|
|
115
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
116
|
+
},
|
|
117
|
+
"media": {
|
|
118
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
119
|
+
"description": "Optional Media component id"
|
|
120
|
+
},
|
|
121
|
+
"badge": {
|
|
122
|
+
"type": "object",
|
|
123
|
+
"required": [
|
|
124
|
+
"text"
|
|
125
|
+
],
|
|
126
|
+
"properties": {
|
|
127
|
+
"text": {
|
|
128
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
129
|
+
},
|
|
130
|
+
"tone": {
|
|
131
|
+
"enum": [
|
|
132
|
+
"neutral",
|
|
133
|
+
"info",
|
|
134
|
+
"success",
|
|
135
|
+
"warning",
|
|
136
|
+
"danger"
|
|
137
|
+
]
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"additionalProperties": false
|
|
141
|
+
},
|
|
142
|
+
"children": {
|
|
143
|
+
"$ref": "common_types.json#/$defs/ChildList",
|
|
144
|
+
"type": "array",
|
|
145
|
+
"minItems": 1,
|
|
146
|
+
"description": "Ordered child component ids"
|
|
147
|
+
},
|
|
148
|
+
"action": {
|
|
149
|
+
"$ref": "common_types.json#/$defs/Action",
|
|
150
|
+
"description": "Activating the card as a whole (e.g. open details)"
|
|
151
|
+
},
|
|
152
|
+
"progress": {
|
|
153
|
+
"type": "object",
|
|
154
|
+
"required": [
|
|
155
|
+
"value"
|
|
156
|
+
],
|
|
157
|
+
"properties": {
|
|
158
|
+
"value": {
|
|
159
|
+
"type": "object",
|
|
160
|
+
"required": [
|
|
161
|
+
"path"
|
|
162
|
+
],
|
|
163
|
+
"properties": {
|
|
164
|
+
"path": {
|
|
165
|
+
"type": "string",
|
|
166
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
167
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
168
|
+
}
|
|
169
|
+
},
|
|
170
|
+
"additionalProperties": false,
|
|
171
|
+
"description": "Number from 0 to 1 in host data"
|
|
172
|
+
},
|
|
173
|
+
"label": {
|
|
174
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
175
|
+
"description": "Optional text, e.g. '120 of 320 pages'; the percentage is shown otherwise"
|
|
176
|
+
}
|
|
177
|
+
},
|
|
178
|
+
"additionalProperties": false,
|
|
179
|
+
"description": "Progress through the entity (reading, a course, a goal)"
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"required": [
|
|
183
|
+
"component",
|
|
184
|
+
"title"
|
|
185
|
+
],
|
|
186
|
+
"allowedChildren": [
|
|
187
|
+
"Action",
|
|
188
|
+
"ActionBar",
|
|
189
|
+
"DetailList",
|
|
190
|
+
"Group",
|
|
191
|
+
"Media",
|
|
192
|
+
"Metric",
|
|
193
|
+
"Status",
|
|
194
|
+
"Text",
|
|
195
|
+
"Toggle"
|
|
196
|
+
],
|
|
197
|
+
"metadata": {
|
|
198
|
+
"extensions": {
|
|
199
|
+
"com_polyxd": {
|
|
200
|
+
"category": "structure",
|
|
201
|
+
"target": "custom",
|
|
202
|
+
"basicAnalog": "Card > Column(Image, Text, Text, ...)",
|
|
203
|
+
"why": "Basic Card is a single-child container with no action. Title, subtitle, badge (with tone), media slot and whole-card action would need synthesized components or would be dropped."
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
},
|
|
208
|
+
"Chart": {
|
|
209
|
+
"type": "object",
|
|
210
|
+
"description": "A visual summary of data, always paired with a text summary.",
|
|
211
|
+
"properties": {
|
|
212
|
+
"component": {
|
|
213
|
+
"const": "Chart"
|
|
214
|
+
},
|
|
215
|
+
"visible": {
|
|
216
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
217
|
+
"description": "Hide the component when false"
|
|
218
|
+
},
|
|
219
|
+
"intent": {
|
|
220
|
+
"enum": [
|
|
221
|
+
"trend",
|
|
222
|
+
"comparison",
|
|
223
|
+
"composition",
|
|
224
|
+
"distribution"
|
|
225
|
+
],
|
|
226
|
+
"description": "What the chart should communicate; the renderer picks the chart type"
|
|
227
|
+
},
|
|
228
|
+
"data": {
|
|
229
|
+
"type": "object",
|
|
230
|
+
"required": [
|
|
231
|
+
"path"
|
|
232
|
+
],
|
|
233
|
+
"properties": {
|
|
234
|
+
"path": {
|
|
235
|
+
"type": "string",
|
|
236
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
237
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
238
|
+
}
|
|
239
|
+
},
|
|
240
|
+
"additionalProperties": false,
|
|
241
|
+
"description": "Array of data points in host data"
|
|
242
|
+
},
|
|
243
|
+
"title": {
|
|
244
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
245
|
+
},
|
|
246
|
+
"summary": {
|
|
247
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
248
|
+
"description": "Text alternative stating the takeaway (required)"
|
|
249
|
+
},
|
|
250
|
+
"x": {
|
|
251
|
+
"type": "object",
|
|
252
|
+
"required": [
|
|
253
|
+
"path",
|
|
254
|
+
"label"
|
|
255
|
+
],
|
|
256
|
+
"properties": {
|
|
257
|
+
"path": {
|
|
258
|
+
"type": "string",
|
|
259
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
260
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
261
|
+
},
|
|
262
|
+
"label": {
|
|
263
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
264
|
+
},
|
|
265
|
+
"format": {
|
|
266
|
+
"type": "object",
|
|
267
|
+
"required": [
|
|
268
|
+
"type"
|
|
269
|
+
],
|
|
270
|
+
"properties": {
|
|
271
|
+
"type": {
|
|
272
|
+
"enum": [
|
|
273
|
+
"text",
|
|
274
|
+
"number",
|
|
275
|
+
"currency",
|
|
276
|
+
"percent",
|
|
277
|
+
"date",
|
|
278
|
+
"time",
|
|
279
|
+
"datetime",
|
|
280
|
+
"relativeTime",
|
|
281
|
+
"duration"
|
|
282
|
+
]
|
|
283
|
+
},
|
|
284
|
+
"currency": {
|
|
285
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
286
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
287
|
+
},
|
|
288
|
+
"precision": {
|
|
289
|
+
"type": "integer",
|
|
290
|
+
"minimum": 0,
|
|
291
|
+
"maximum": 6
|
|
292
|
+
}
|
|
293
|
+
},
|
|
294
|
+
"additionalProperties": false,
|
|
295
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
296
|
+
}
|
|
297
|
+
},
|
|
298
|
+
"additionalProperties": false
|
|
299
|
+
},
|
|
300
|
+
"series": {
|
|
301
|
+
"type": "array",
|
|
302
|
+
"minItems": 1,
|
|
303
|
+
"maxItems": 6,
|
|
304
|
+
"items": {
|
|
305
|
+
"type": "object",
|
|
306
|
+
"required": [
|
|
307
|
+
"path",
|
|
308
|
+
"label"
|
|
309
|
+
],
|
|
310
|
+
"properties": {
|
|
311
|
+
"key": {
|
|
312
|
+
"type": "string",
|
|
313
|
+
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$",
|
|
314
|
+
"description": "Stable semantic key (e.g. 'fee', 'recipient.name'). The same thing gets the same key across generations; interface memory uses it to keep placement, order and labels consistent."
|
|
315
|
+
},
|
|
316
|
+
"path": {
|
|
317
|
+
"type": "string",
|
|
318
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
319
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
320
|
+
},
|
|
321
|
+
"label": {
|
|
322
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
323
|
+
},
|
|
324
|
+
"format": {
|
|
325
|
+
"type": "object",
|
|
326
|
+
"required": [
|
|
327
|
+
"type"
|
|
328
|
+
],
|
|
329
|
+
"properties": {
|
|
330
|
+
"type": {
|
|
331
|
+
"enum": [
|
|
332
|
+
"text",
|
|
333
|
+
"number",
|
|
334
|
+
"currency",
|
|
335
|
+
"percent",
|
|
336
|
+
"date",
|
|
337
|
+
"time",
|
|
338
|
+
"datetime",
|
|
339
|
+
"relativeTime",
|
|
340
|
+
"duration"
|
|
341
|
+
]
|
|
342
|
+
},
|
|
343
|
+
"currency": {
|
|
344
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
345
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
346
|
+
},
|
|
347
|
+
"precision": {
|
|
348
|
+
"type": "integer",
|
|
349
|
+
"minimum": 0,
|
|
350
|
+
"maximum": 6
|
|
351
|
+
}
|
|
352
|
+
},
|
|
353
|
+
"additionalProperties": false,
|
|
354
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
355
|
+
}
|
|
356
|
+
},
|
|
357
|
+
"additionalProperties": false
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
},
|
|
361
|
+
"required": [
|
|
362
|
+
"component",
|
|
363
|
+
"intent",
|
|
364
|
+
"data",
|
|
365
|
+
"title",
|
|
366
|
+
"summary",
|
|
367
|
+
"x",
|
|
368
|
+
"series"
|
|
369
|
+
],
|
|
370
|
+
"metadata": {
|
|
371
|
+
"extensions": {
|
|
372
|
+
"com_polyxd": {
|
|
373
|
+
"category": "content",
|
|
374
|
+
"target": "custom",
|
|
375
|
+
"basicAnalog": "Text(summary) + List",
|
|
376
|
+
"why": "Basic has no chart. Intent, axes, series and formats would be dropped."
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
},
|
|
381
|
+
"Choice": {
|
|
382
|
+
"type": "object",
|
|
383
|
+
"description": "Pick one or several options from a known set. The renderer chooses the control.",
|
|
384
|
+
"properties": {
|
|
385
|
+
"component": {
|
|
386
|
+
"const": "Choice"
|
|
387
|
+
},
|
|
388
|
+
"visible": {
|
|
389
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
390
|
+
"description": "Hide the component when false"
|
|
391
|
+
},
|
|
392
|
+
"label": {
|
|
393
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
394
|
+
},
|
|
395
|
+
"options": {
|
|
396
|
+
"oneOf": [
|
|
397
|
+
{
|
|
398
|
+
"type": "array",
|
|
399
|
+
"minItems": 2,
|
|
400
|
+
"items": {
|
|
401
|
+
"type": "object",
|
|
402
|
+
"required": [
|
|
403
|
+
"value",
|
|
404
|
+
"label"
|
|
405
|
+
],
|
|
406
|
+
"properties": {
|
|
407
|
+
"value": {
|
|
408
|
+
"type": [
|
|
409
|
+
"string",
|
|
410
|
+
"number",
|
|
411
|
+
"boolean"
|
|
412
|
+
]
|
|
413
|
+
},
|
|
414
|
+
"label": {
|
|
415
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
416
|
+
},
|
|
417
|
+
"description": {
|
|
418
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
419
|
+
}
|
|
420
|
+
},
|
|
421
|
+
"additionalProperties": false
|
|
422
|
+
}
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
"type": "object",
|
|
426
|
+
"required": [
|
|
427
|
+
"path",
|
|
428
|
+
"valuePath",
|
|
429
|
+
"labelPath"
|
|
430
|
+
],
|
|
431
|
+
"properties": {
|
|
432
|
+
"path": {
|
|
433
|
+
"type": "string",
|
|
434
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
435
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
436
|
+
},
|
|
437
|
+
"valuePath": {
|
|
438
|
+
"type": "string",
|
|
439
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
440
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
441
|
+
},
|
|
442
|
+
"labelPath": {
|
|
443
|
+
"type": "string",
|
|
444
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
445
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
446
|
+
},
|
|
447
|
+
"descriptionPath": {
|
|
448
|
+
"type": "string",
|
|
449
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
450
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
451
|
+
},
|
|
452
|
+
"avatarPath": {
|
|
453
|
+
"type": "string",
|
|
454
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
455
|
+
"description": "Initials or a media reference per option: renders people and places with a face"
|
|
456
|
+
},
|
|
457
|
+
"imagePath": {
|
|
458
|
+
"type": "string",
|
|
459
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
460
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
461
|
+
},
|
|
462
|
+
"recentPath": {
|
|
463
|
+
"type": "string",
|
|
464
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
465
|
+
"description": "Boolean per option: shown in a 'Recent' row above the full list"
|
|
466
|
+
}
|
|
467
|
+
},
|
|
468
|
+
"additionalProperties": false
|
|
469
|
+
}
|
|
470
|
+
],
|
|
471
|
+
"description": "Either a fixed list, or options read from host data"
|
|
472
|
+
},
|
|
473
|
+
"value": {
|
|
474
|
+
"type": "object",
|
|
475
|
+
"required": [
|
|
476
|
+
"path"
|
|
477
|
+
],
|
|
478
|
+
"properties": {
|
|
479
|
+
"path": {
|
|
480
|
+
"type": "string",
|
|
481
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
482
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
483
|
+
}
|
|
484
|
+
},
|
|
485
|
+
"additionalProperties": false,
|
|
486
|
+
"description": "Two-way binding into host data"
|
|
487
|
+
},
|
|
488
|
+
"mode": {
|
|
489
|
+
"enum": [
|
|
490
|
+
"single",
|
|
491
|
+
"multiple"
|
|
492
|
+
],
|
|
493
|
+
"default": "single"
|
|
494
|
+
},
|
|
495
|
+
"help": {
|
|
496
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
497
|
+
},
|
|
498
|
+
"required": {
|
|
499
|
+
"type": "boolean",
|
|
500
|
+
"default": false
|
|
501
|
+
}
|
|
502
|
+
},
|
|
503
|
+
"required": [
|
|
504
|
+
"component",
|
|
505
|
+
"label",
|
|
506
|
+
"options",
|
|
507
|
+
"value"
|
|
508
|
+
],
|
|
509
|
+
"metadata": {
|
|
510
|
+
"extensions": {
|
|
511
|
+
"com_polyxd": {
|
|
512
|
+
"category": "input",
|
|
513
|
+
"target": "custom",
|
|
514
|
+
"basicAnalog": "ChoicePicker",
|
|
515
|
+
"why": "ChoicePicker options must be literal (Polyxd options can come from host data), option descriptions are missing, the value must be a string list, and there is no help text."
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
"Collection": {
|
|
521
|
+
"type": "object",
|
|
522
|
+
"description": "A list of items from host data, each rendered with the same template.",
|
|
523
|
+
"properties": {
|
|
524
|
+
"component": {
|
|
525
|
+
"const": "Collection"
|
|
526
|
+
},
|
|
527
|
+
"visible": {
|
|
528
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
529
|
+
"description": "Hide the component when false"
|
|
530
|
+
},
|
|
531
|
+
"items": {
|
|
532
|
+
"$ref": "common_types.json#/$defs/ChildList",
|
|
533
|
+
"type": "object",
|
|
534
|
+
"description": "Same shape as A2UI templated children"
|
|
535
|
+
},
|
|
536
|
+
"label": {
|
|
537
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
538
|
+
"description": "What the list contains, e.g. 'Recent payments'"
|
|
539
|
+
},
|
|
540
|
+
"empty": {
|
|
541
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
542
|
+
"description": "Status component shown when there are no items"
|
|
543
|
+
},
|
|
544
|
+
"selection": {
|
|
545
|
+
"enum": [
|
|
546
|
+
"none",
|
|
547
|
+
"single",
|
|
548
|
+
"multiple"
|
|
549
|
+
],
|
|
550
|
+
"default": "none"
|
|
551
|
+
},
|
|
552
|
+
"selected": {
|
|
553
|
+
"type": "object",
|
|
554
|
+
"required": [
|
|
555
|
+
"path"
|
|
556
|
+
],
|
|
557
|
+
"properties": {
|
|
558
|
+
"path": {
|
|
559
|
+
"type": "string",
|
|
560
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
561
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
562
|
+
}
|
|
563
|
+
},
|
|
564
|
+
"additionalProperties": false,
|
|
565
|
+
"description": "Selected item value(s) in host data when selection is not 'none'"
|
|
566
|
+
},
|
|
567
|
+
"layout": {
|
|
568
|
+
"enum": [
|
|
569
|
+
"auto",
|
|
570
|
+
"list",
|
|
571
|
+
"grid",
|
|
572
|
+
"timeline"
|
|
573
|
+
],
|
|
574
|
+
"default": "auto",
|
|
575
|
+
"description": "'grid' for visual items (products, books); 'list' for rows; 'timeline' for dated activity; 'auto' lets the renderer choose from the item template"
|
|
576
|
+
}
|
|
577
|
+
},
|
|
578
|
+
"required": [
|
|
579
|
+
"component",
|
|
580
|
+
"items",
|
|
581
|
+
"label"
|
|
582
|
+
],
|
|
583
|
+
"metadata": {
|
|
584
|
+
"extensions": {
|
|
585
|
+
"com_polyxd": {
|
|
586
|
+
"category": "content",
|
|
587
|
+
"target": "custom",
|
|
588
|
+
"basicAnalog": "List (templated children)",
|
|
589
|
+
"why": "List has no label, no empty state and no selection model."
|
|
590
|
+
}
|
|
591
|
+
}
|
|
592
|
+
}
|
|
593
|
+
},
|
|
594
|
+
"Comparison": {
|
|
595
|
+
"type": "object",
|
|
596
|
+
"description": "Compare a few options across the same attributes, and choose one.",
|
|
597
|
+
"properties": {
|
|
598
|
+
"component": {
|
|
599
|
+
"const": "Comparison"
|
|
600
|
+
},
|
|
601
|
+
"visible": {
|
|
602
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
603
|
+
"description": "Hide the component when false"
|
|
604
|
+
},
|
|
605
|
+
"items": {
|
|
606
|
+
"type": "object",
|
|
607
|
+
"required": [
|
|
608
|
+
"path"
|
|
609
|
+
],
|
|
610
|
+
"properties": {
|
|
611
|
+
"path": {
|
|
612
|
+
"type": "string",
|
|
613
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
614
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
615
|
+
}
|
|
616
|
+
},
|
|
617
|
+
"additionalProperties": false,
|
|
618
|
+
"description": "Array of options in host data (2–4 recommended)"
|
|
619
|
+
},
|
|
620
|
+
"itemTitle": {
|
|
621
|
+
"type": "string",
|
|
622
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
623
|
+
"description": "Relative path to each item's name"
|
|
624
|
+
},
|
|
625
|
+
"attributes": {
|
|
626
|
+
"type": "array",
|
|
627
|
+
"minItems": 1,
|
|
628
|
+
"maxItems": 8,
|
|
629
|
+
"items": {
|
|
630
|
+
"type": "object",
|
|
631
|
+
"required": [
|
|
632
|
+
"key",
|
|
633
|
+
"label",
|
|
634
|
+
"path"
|
|
635
|
+
],
|
|
636
|
+
"properties": {
|
|
637
|
+
"key": {
|
|
638
|
+
"type": "string",
|
|
639
|
+
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$",
|
|
640
|
+
"description": "Stable semantic key (e.g. 'fee', 'recipient.name'). The same thing gets the same key across generations; interface memory uses it to keep placement, order and labels consistent."
|
|
641
|
+
},
|
|
642
|
+
"label": {
|
|
643
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
644
|
+
},
|
|
645
|
+
"path": {
|
|
646
|
+
"type": "string",
|
|
647
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
648
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
649
|
+
},
|
|
650
|
+
"format": {
|
|
651
|
+
"type": "object",
|
|
652
|
+
"required": [
|
|
653
|
+
"type"
|
|
654
|
+
],
|
|
655
|
+
"properties": {
|
|
656
|
+
"type": {
|
|
657
|
+
"enum": [
|
|
658
|
+
"text",
|
|
659
|
+
"number",
|
|
660
|
+
"currency",
|
|
661
|
+
"percent",
|
|
662
|
+
"date",
|
|
663
|
+
"time",
|
|
664
|
+
"datetime",
|
|
665
|
+
"relativeTime",
|
|
666
|
+
"duration"
|
|
667
|
+
]
|
|
668
|
+
},
|
|
669
|
+
"currency": {
|
|
670
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
671
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
672
|
+
},
|
|
673
|
+
"precision": {
|
|
674
|
+
"type": "integer",
|
|
675
|
+
"minimum": 0,
|
|
676
|
+
"maximum": 6
|
|
677
|
+
}
|
|
678
|
+
},
|
|
679
|
+
"additionalProperties": false,
|
|
680
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
681
|
+
},
|
|
682
|
+
"better": {
|
|
683
|
+
"enum": [
|
|
684
|
+
"higher",
|
|
685
|
+
"lower",
|
|
686
|
+
"none"
|
|
687
|
+
],
|
|
688
|
+
"default": "none"
|
|
689
|
+
},
|
|
690
|
+
"group": {
|
|
691
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
692
|
+
"description": "Heading that groups related attributes (e.g. 'Storage', 'Support')"
|
|
693
|
+
}
|
|
694
|
+
},
|
|
695
|
+
"additionalProperties": false
|
|
696
|
+
}
|
|
697
|
+
},
|
|
698
|
+
"choose": {
|
|
699
|
+
"type": "object",
|
|
700
|
+
"required": [
|
|
701
|
+
"label",
|
|
702
|
+
"action"
|
|
703
|
+
],
|
|
704
|
+
"properties": {
|
|
705
|
+
"label": {
|
|
706
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
707
|
+
},
|
|
708
|
+
"action": {
|
|
709
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
710
|
+
}
|
|
711
|
+
},
|
|
712
|
+
"additionalProperties": false,
|
|
713
|
+
"description": "Action per item; context bindings resolve against the item"
|
|
714
|
+
},
|
|
715
|
+
"recommended": {
|
|
716
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
717
|
+
"description": "Optional value of the recommended item's title, with a reason in 'summary'"
|
|
718
|
+
},
|
|
719
|
+
"summary": {
|
|
720
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
721
|
+
},
|
|
722
|
+
"recommendedReason": {
|
|
723
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
724
|
+
"description": "Why the recommended item fits, shown on its badge (one short sentence)"
|
|
725
|
+
}
|
|
726
|
+
},
|
|
727
|
+
"required": [
|
|
728
|
+
"component",
|
|
729
|
+
"items",
|
|
730
|
+
"itemTitle",
|
|
731
|
+
"attributes"
|
|
732
|
+
],
|
|
733
|
+
"metadata": {
|
|
734
|
+
"extensions": {
|
|
735
|
+
"com_polyxd": {
|
|
736
|
+
"category": "flow",
|
|
737
|
+
"target": "custom",
|
|
738
|
+
"basicAnalog": "List of Card",
|
|
739
|
+
"why": "Basic has no comparison. Attribute rows, 'better' direction, recommendation and per-item choose action would be flattened away."
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
},
|
|
744
|
+
"Confirm": {
|
|
745
|
+
"type": "object",
|
|
746
|
+
"description": "Asks the user to confirm a consequential or destructive action, showing what will happen.",
|
|
747
|
+
"properties": {
|
|
748
|
+
"component": {
|
|
749
|
+
"const": "Confirm"
|
|
750
|
+
},
|
|
751
|
+
"visible": {
|
|
752
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
753
|
+
"description": "Hide the component when false"
|
|
754
|
+
},
|
|
755
|
+
"title": {
|
|
756
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
757
|
+
"description": "Question naming the action ('Send £250 to Alex?')"
|
|
758
|
+
},
|
|
759
|
+
"message": {
|
|
760
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
761
|
+
},
|
|
762
|
+
"consequence": {
|
|
763
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
764
|
+
"description": "What happens and whether it can be undone"
|
|
765
|
+
},
|
|
766
|
+
"summary": {
|
|
767
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
768
|
+
"description": "Optional DetailList summarising what is being confirmed"
|
|
769
|
+
},
|
|
770
|
+
"severity": {
|
|
771
|
+
"enum": [
|
|
772
|
+
"consequential",
|
|
773
|
+
"destructive"
|
|
774
|
+
]
|
|
775
|
+
},
|
|
776
|
+
"confirm": {
|
|
777
|
+
"type": "object",
|
|
778
|
+
"required": [
|
|
779
|
+
"label",
|
|
780
|
+
"action"
|
|
781
|
+
],
|
|
782
|
+
"properties": {
|
|
783
|
+
"label": {
|
|
784
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
785
|
+
},
|
|
786
|
+
"action": {
|
|
787
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
788
|
+
}
|
|
789
|
+
},
|
|
790
|
+
"additionalProperties": false
|
|
791
|
+
},
|
|
792
|
+
"cancel": {
|
|
793
|
+
"type": "object",
|
|
794
|
+
"required": [
|
|
795
|
+
"label",
|
|
796
|
+
"action"
|
|
797
|
+
],
|
|
798
|
+
"properties": {
|
|
799
|
+
"label": {
|
|
800
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
801
|
+
},
|
|
802
|
+
"action": {
|
|
803
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
804
|
+
}
|
|
805
|
+
},
|
|
806
|
+
"additionalProperties": false,
|
|
807
|
+
"description": "Defaults to 'Cancel' → ui.dismiss"
|
|
808
|
+
},
|
|
809
|
+
"typeToConfirm": {
|
|
810
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
811
|
+
"description": "Text the user must type before confirming (for irreversible, high-impact actions)"
|
|
812
|
+
},
|
|
813
|
+
"amount": {
|
|
814
|
+
"type": "object",
|
|
815
|
+
"required": [
|
|
816
|
+
"value"
|
|
817
|
+
],
|
|
818
|
+
"properties": {
|
|
819
|
+
"value": {
|
|
820
|
+
"type": "object",
|
|
821
|
+
"required": [
|
|
822
|
+
"path"
|
|
823
|
+
],
|
|
824
|
+
"properties": {
|
|
825
|
+
"path": {
|
|
826
|
+
"type": "string",
|
|
827
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
828
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
829
|
+
}
|
|
830
|
+
},
|
|
831
|
+
"additionalProperties": false,
|
|
832
|
+
"description": "A value read from (and, for inputs, written to) host data. Data always comes from the host; the model never invents it."
|
|
833
|
+
},
|
|
834
|
+
"format": {
|
|
835
|
+
"type": "object",
|
|
836
|
+
"required": [
|
|
837
|
+
"type"
|
|
838
|
+
],
|
|
839
|
+
"properties": {
|
|
840
|
+
"type": {
|
|
841
|
+
"enum": [
|
|
842
|
+
"text",
|
|
843
|
+
"number",
|
|
844
|
+
"currency",
|
|
845
|
+
"percent",
|
|
846
|
+
"date",
|
|
847
|
+
"time",
|
|
848
|
+
"datetime",
|
|
849
|
+
"relativeTime",
|
|
850
|
+
"duration"
|
|
851
|
+
]
|
|
852
|
+
},
|
|
853
|
+
"currency": {
|
|
854
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
855
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
856
|
+
},
|
|
857
|
+
"precision": {
|
|
858
|
+
"type": "integer",
|
|
859
|
+
"minimum": 0,
|
|
860
|
+
"maximum": 6
|
|
861
|
+
}
|
|
862
|
+
},
|
|
863
|
+
"additionalProperties": false,
|
|
864
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
865
|
+
}
|
|
866
|
+
},
|
|
867
|
+
"additionalProperties": false,
|
|
868
|
+
"description": "The amount being committed, shown large at the top"
|
|
869
|
+
},
|
|
870
|
+
"subject": {
|
|
871
|
+
"type": "object",
|
|
872
|
+
"required": [
|
|
873
|
+
"title"
|
|
874
|
+
],
|
|
875
|
+
"properties": {
|
|
876
|
+
"title": {
|
|
877
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
878
|
+
},
|
|
879
|
+
"subtitle": {
|
|
880
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
881
|
+
},
|
|
882
|
+
"avatar": {
|
|
883
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
884
|
+
"description": "Initials, or a media reference in host data"
|
|
885
|
+
}
|
|
886
|
+
},
|
|
887
|
+
"additionalProperties": false,
|
|
888
|
+
"description": "Who or what the action is for, shown with a face or picture"
|
|
889
|
+
},
|
|
890
|
+
"consequences": {
|
|
891
|
+
"type": "array",
|
|
892
|
+
"minItems": 1,
|
|
893
|
+
"maxItems": 6,
|
|
894
|
+
"items": {
|
|
895
|
+
"type": "object",
|
|
896
|
+
"required": [
|
|
897
|
+
"title"
|
|
898
|
+
],
|
|
899
|
+
"properties": {
|
|
900
|
+
"title": {
|
|
901
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
902
|
+
},
|
|
903
|
+
"detail": {
|
|
904
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
905
|
+
},
|
|
906
|
+
"icon": {
|
|
907
|
+
"enum": [
|
|
908
|
+
"lock",
|
|
909
|
+
"trash",
|
|
910
|
+
"clock",
|
|
911
|
+
"tag",
|
|
912
|
+
"info",
|
|
913
|
+
"alert",
|
|
914
|
+
"mail",
|
|
915
|
+
"shield"
|
|
916
|
+
]
|
|
917
|
+
}
|
|
918
|
+
},
|
|
919
|
+
"additionalProperties": false
|
|
920
|
+
},
|
|
921
|
+
"description": "What will happen, as a short list (for destructive actions)"
|
|
922
|
+
}
|
|
923
|
+
},
|
|
924
|
+
"required": [
|
|
925
|
+
"component",
|
|
926
|
+
"title",
|
|
927
|
+
"severity",
|
|
928
|
+
"confirm"
|
|
929
|
+
],
|
|
930
|
+
"allowedChildren": [
|
|
931
|
+
"DetailList"
|
|
932
|
+
],
|
|
933
|
+
"metadata": {
|
|
934
|
+
"extensions": {
|
|
935
|
+
"com_polyxd": {
|
|
936
|
+
"category": "flow",
|
|
937
|
+
"target": "custom",
|
|
938
|
+
"basicAnalog": "Modal(trigger, content: Column(Text, Button, Button))",
|
|
939
|
+
"why": "Modal needs a trigger component. Severity, consequence, type-to-confirm and the default cancel behaviour have no Basic form."
|
|
940
|
+
}
|
|
941
|
+
}
|
|
942
|
+
}
|
|
943
|
+
},
|
|
944
|
+
"DateInput": {
|
|
945
|
+
"type": "object",
|
|
946
|
+
"description": "A date, time, date-time or date range.",
|
|
947
|
+
"properties": {
|
|
948
|
+
"component": {
|
|
949
|
+
"const": "DateInput"
|
|
950
|
+
},
|
|
951
|
+
"visible": {
|
|
952
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
953
|
+
"description": "Hide the component when false"
|
|
954
|
+
},
|
|
955
|
+
"label": {
|
|
956
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
957
|
+
},
|
|
958
|
+
"value": {
|
|
959
|
+
"type": "object",
|
|
960
|
+
"required": [
|
|
961
|
+
"path"
|
|
962
|
+
],
|
|
963
|
+
"properties": {
|
|
964
|
+
"path": {
|
|
965
|
+
"type": "string",
|
|
966
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
967
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
968
|
+
}
|
|
969
|
+
},
|
|
970
|
+
"additionalProperties": false,
|
|
971
|
+
"description": "ISO 8601 value(s) in host data"
|
|
972
|
+
},
|
|
973
|
+
"kind": {
|
|
974
|
+
"enum": [
|
|
975
|
+
"date",
|
|
976
|
+
"time",
|
|
977
|
+
"datetime",
|
|
978
|
+
"dateRange"
|
|
979
|
+
],
|
|
980
|
+
"default": "date"
|
|
981
|
+
},
|
|
982
|
+
"min": {
|
|
983
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
984
|
+
},
|
|
985
|
+
"max": {
|
|
986
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
987
|
+
},
|
|
988
|
+
"help": {
|
|
989
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
990
|
+
},
|
|
991
|
+
"required": {
|
|
992
|
+
"type": "boolean",
|
|
993
|
+
"default": false
|
|
994
|
+
}
|
|
995
|
+
},
|
|
996
|
+
"required": [
|
|
997
|
+
"component",
|
|
998
|
+
"label",
|
|
999
|
+
"value"
|
|
1000
|
+
],
|
|
1001
|
+
"metadata": {
|
|
1002
|
+
"extensions": {
|
|
1003
|
+
"com_polyxd": {
|
|
1004
|
+
"category": "input",
|
|
1005
|
+
"target": "custom",
|
|
1006
|
+
"basicAnalog": "DateTimeInput",
|
|
1007
|
+
"why": "DateTimeInput has no date-range kind and no help text, and 'required' becomes a check function."
|
|
1008
|
+
}
|
|
1009
|
+
}
|
|
1010
|
+
}
|
|
1011
|
+
},
|
|
1012
|
+
"DetailList": {
|
|
1013
|
+
"type": "object",
|
|
1014
|
+
"description": "Label/value pairs describing one thing (a summary, a receipt, a review step).",
|
|
1015
|
+
"properties": {
|
|
1016
|
+
"component": {
|
|
1017
|
+
"const": "DetailList"
|
|
1018
|
+
},
|
|
1019
|
+
"visible": {
|
|
1020
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1021
|
+
"description": "Hide the component when false"
|
|
1022
|
+
},
|
|
1023
|
+
"items": {
|
|
1024
|
+
"type": "array",
|
|
1025
|
+
"minItems": 1,
|
|
1026
|
+
"items": {
|
|
1027
|
+
"type": "object",
|
|
1028
|
+
"required": [
|
|
1029
|
+
"label",
|
|
1030
|
+
"value"
|
|
1031
|
+
],
|
|
1032
|
+
"properties": {
|
|
1033
|
+
"key": {
|
|
1034
|
+
"type": "string",
|
|
1035
|
+
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$",
|
|
1036
|
+
"description": "Stable semantic key (e.g. 'fee', 'recipient.name'). The same thing gets the same key across generations; interface memory uses it to keep placement, order and labels consistent."
|
|
1037
|
+
},
|
|
1038
|
+
"label": {
|
|
1039
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1040
|
+
},
|
|
1041
|
+
"value": {
|
|
1042
|
+
"$ref": "common_types.json#/$defs/DynamicValue"
|
|
1043
|
+
},
|
|
1044
|
+
"format": {
|
|
1045
|
+
"type": "object",
|
|
1046
|
+
"required": [
|
|
1047
|
+
"type"
|
|
1048
|
+
],
|
|
1049
|
+
"properties": {
|
|
1050
|
+
"type": {
|
|
1051
|
+
"enum": [
|
|
1052
|
+
"text",
|
|
1053
|
+
"number",
|
|
1054
|
+
"currency",
|
|
1055
|
+
"percent",
|
|
1056
|
+
"date",
|
|
1057
|
+
"time",
|
|
1058
|
+
"datetime",
|
|
1059
|
+
"relativeTime",
|
|
1060
|
+
"duration"
|
|
1061
|
+
]
|
|
1062
|
+
},
|
|
1063
|
+
"currency": {
|
|
1064
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1065
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
1066
|
+
},
|
|
1067
|
+
"precision": {
|
|
1068
|
+
"type": "integer",
|
|
1069
|
+
"minimum": 0,
|
|
1070
|
+
"maximum": 6
|
|
1071
|
+
}
|
|
1072
|
+
},
|
|
1073
|
+
"additionalProperties": false,
|
|
1074
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
1075
|
+
},
|
|
1076
|
+
"total": {
|
|
1077
|
+
"type": "boolean",
|
|
1078
|
+
"description": "The total row of a receipt, shown emphasised after a divider"
|
|
1079
|
+
}
|
|
1080
|
+
},
|
|
1081
|
+
"additionalProperties": false
|
|
1082
|
+
}
|
|
1083
|
+
},
|
|
1084
|
+
"title": {
|
|
1085
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1086
|
+
},
|
|
1087
|
+
"variant": {
|
|
1088
|
+
"enum": [
|
|
1089
|
+
"default",
|
|
1090
|
+
"receipt"
|
|
1091
|
+
],
|
|
1092
|
+
"default": "default",
|
|
1093
|
+
"description": "'receipt' for money: values right-aligned in tabular figures, with an optional total row"
|
|
1094
|
+
},
|
|
1095
|
+
"layout": {
|
|
1096
|
+
"enum": [
|
|
1097
|
+
"rows",
|
|
1098
|
+
"grid"
|
|
1099
|
+
],
|
|
1100
|
+
"default": "rows",
|
|
1101
|
+
"description": "'grid' packs many short fields into columns (record pages); 'rows' keeps one per line"
|
|
1102
|
+
}
|
|
1103
|
+
},
|
|
1104
|
+
"required": [
|
|
1105
|
+
"component",
|
|
1106
|
+
"items"
|
|
1107
|
+
],
|
|
1108
|
+
"metadata": {
|
|
1109
|
+
"extensions": {
|
|
1110
|
+
"com_polyxd": {
|
|
1111
|
+
"category": "content",
|
|
1112
|
+
"target": "custom",
|
|
1113
|
+
"basicAnalog": "Column of Row(Text, Text)",
|
|
1114
|
+
"why": "The label/value pairing (a description list for assistive tech), stable item keys and value formats would be lost."
|
|
1115
|
+
}
|
|
1116
|
+
}
|
|
1117
|
+
}
|
|
1118
|
+
},
|
|
1119
|
+
"Disclosure": {
|
|
1120
|
+
"type": "object",
|
|
1121
|
+
"description": "Progressive disclosure: secondary content hidden behind a toggle.",
|
|
1122
|
+
"properties": {
|
|
1123
|
+
"component": {
|
|
1124
|
+
"const": "Disclosure"
|
|
1125
|
+
},
|
|
1126
|
+
"visible": {
|
|
1127
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1128
|
+
"description": "Hide the component when false"
|
|
1129
|
+
},
|
|
1130
|
+
"summary": {
|
|
1131
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1132
|
+
"description": "Always-visible label describing what is hidden"
|
|
1133
|
+
},
|
|
1134
|
+
"children": {
|
|
1135
|
+
"$ref": "common_types.json#/$defs/ChildList",
|
|
1136
|
+
"type": "array",
|
|
1137
|
+
"minItems": 1,
|
|
1138
|
+
"description": "Ordered child component ids"
|
|
1139
|
+
},
|
|
1140
|
+
"open": {
|
|
1141
|
+
"type": "boolean",
|
|
1142
|
+
"default": false
|
|
1143
|
+
}
|
|
1144
|
+
},
|
|
1145
|
+
"required": [
|
|
1146
|
+
"component",
|
|
1147
|
+
"summary",
|
|
1148
|
+
"children"
|
|
1149
|
+
],
|
|
1150
|
+
"metadata": {
|
|
1151
|
+
"extensions": {
|
|
1152
|
+
"com_polyxd": {
|
|
1153
|
+
"category": "structure",
|
|
1154
|
+
"target": "custom",
|
|
1155
|
+
"basicAnalog": "Column (content always shown)",
|
|
1156
|
+
"why": "Basic has no expand/collapse."
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
}
|
|
1160
|
+
},
|
|
1161
|
+
"FilterPanel": {
|
|
1162
|
+
"type": "object",
|
|
1163
|
+
"description": "Filters for a list of results, with the result count.",
|
|
1164
|
+
"properties": {
|
|
1165
|
+
"component": {
|
|
1166
|
+
"const": "FilterPanel"
|
|
1167
|
+
},
|
|
1168
|
+
"visible": {
|
|
1169
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1170
|
+
"description": "Hide the component when false"
|
|
1171
|
+
},
|
|
1172
|
+
"label": {
|
|
1173
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1174
|
+
"description": "Defaults to 'Filters'"
|
|
1175
|
+
},
|
|
1176
|
+
"children": {
|
|
1177
|
+
"$ref": "common_types.json#/$defs/ChildList",
|
|
1178
|
+
"type": "array",
|
|
1179
|
+
"minItems": 1,
|
|
1180
|
+
"description": "The filter inputs (Choice, RangeInput, Toggle, DateInput, TextInput)"
|
|
1181
|
+
},
|
|
1182
|
+
"results": {
|
|
1183
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
1184
|
+
"description": "The Collection or Table the filters narrow"
|
|
1185
|
+
},
|
|
1186
|
+
"resultCount": {
|
|
1187
|
+
"type": "object",
|
|
1188
|
+
"required": [
|
|
1189
|
+
"path"
|
|
1190
|
+
],
|
|
1191
|
+
"properties": {
|
|
1192
|
+
"path": {
|
|
1193
|
+
"type": "string",
|
|
1194
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
1195
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
1196
|
+
}
|
|
1197
|
+
},
|
|
1198
|
+
"additionalProperties": false,
|
|
1199
|
+
"description": "Number of results with the current filters, from host data"
|
|
1200
|
+
},
|
|
1201
|
+
"clear": {
|
|
1202
|
+
"$ref": "common_types.json#/$defs/Action",
|
|
1203
|
+
"description": "Optional action that resets the filters on the host"
|
|
1204
|
+
}
|
|
1205
|
+
},
|
|
1206
|
+
"required": [
|
|
1207
|
+
"component",
|
|
1208
|
+
"children",
|
|
1209
|
+
"results"
|
|
1210
|
+
],
|
|
1211
|
+
"allowedChildren": [
|
|
1212
|
+
"Choice",
|
|
1213
|
+
"Collection",
|
|
1214
|
+
"DateInput",
|
|
1215
|
+
"RangeInput",
|
|
1216
|
+
"Table",
|
|
1217
|
+
"TextInput",
|
|
1218
|
+
"Toggle"
|
|
1219
|
+
],
|
|
1220
|
+
"metadata": {
|
|
1221
|
+
"extensions": {
|
|
1222
|
+
"com_polyxd": {
|
|
1223
|
+
"category": "layout",
|
|
1224
|
+
"target": "custom",
|
|
1225
|
+
"basicAnalog": "Column of inputs beside a List, with a Modal on narrow screens",
|
|
1226
|
+
"why": "Column and Modal are layout. They lose the link between filters and the results they narrow, the result count, removable active-filter chips and the sidebar-or-sheet behaviour."
|
|
1227
|
+
}
|
|
1228
|
+
}
|
|
1229
|
+
}
|
|
1230
|
+
},
|
|
1231
|
+
"Form": {
|
|
1232
|
+
"type": "object",
|
|
1233
|
+
"description": "Collects inputs and submits them together.",
|
|
1234
|
+
"properties": {
|
|
1235
|
+
"component": {
|
|
1236
|
+
"const": "Form"
|
|
1237
|
+
},
|
|
1238
|
+
"visible": {
|
|
1239
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1240
|
+
"description": "Hide the component when false"
|
|
1241
|
+
},
|
|
1242
|
+
"children": {
|
|
1243
|
+
"$ref": "common_types.json#/$defs/ChildList",
|
|
1244
|
+
"type": "array",
|
|
1245
|
+
"minItems": 1,
|
|
1246
|
+
"description": "Ordered child component ids"
|
|
1247
|
+
},
|
|
1248
|
+
"submit": {
|
|
1249
|
+
"type": "object",
|
|
1250
|
+
"required": [
|
|
1251
|
+
"label",
|
|
1252
|
+
"action"
|
|
1253
|
+
],
|
|
1254
|
+
"properties": {
|
|
1255
|
+
"label": {
|
|
1256
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1257
|
+
},
|
|
1258
|
+
"action": {
|
|
1259
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
1260
|
+
}
|
|
1261
|
+
},
|
|
1262
|
+
"additionalProperties": false
|
|
1263
|
+
},
|
|
1264
|
+
"cancel": {
|
|
1265
|
+
"type": "object",
|
|
1266
|
+
"required": [
|
|
1267
|
+
"label",
|
|
1268
|
+
"action"
|
|
1269
|
+
],
|
|
1270
|
+
"properties": {
|
|
1271
|
+
"label": {
|
|
1272
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1273
|
+
},
|
|
1274
|
+
"action": {
|
|
1275
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
1276
|
+
}
|
|
1277
|
+
},
|
|
1278
|
+
"additionalProperties": false,
|
|
1279
|
+
"description": "Optional; defaults to ui.dismiss when omitted and the surface is dismissible"
|
|
1280
|
+
},
|
|
1281
|
+
"aside": {
|
|
1282
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
1283
|
+
"description": "Optional summary (DetailList, Card or Group) kept beside the form, e.g. the running total"
|
|
1284
|
+
},
|
|
1285
|
+
"layout": {
|
|
1286
|
+
"enum": [
|
|
1287
|
+
"stacked",
|
|
1288
|
+
"horizontal"
|
|
1289
|
+
],
|
|
1290
|
+
"default": "stacked",
|
|
1291
|
+
"description": "'horizontal' puts label and help on the left and the control on the right (settings pages), on wide surfaces"
|
|
1292
|
+
}
|
|
1293
|
+
},
|
|
1294
|
+
"required": [
|
|
1295
|
+
"component",
|
|
1296
|
+
"children",
|
|
1297
|
+
"submit"
|
|
1298
|
+
],
|
|
1299
|
+
"metadata": {
|
|
1300
|
+
"extensions": {
|
|
1301
|
+
"com_polyxd": {
|
|
1302
|
+
"category": "input",
|
|
1303
|
+
"target": "custom",
|
|
1304
|
+
"basicAnalog": "Column + Button",
|
|
1305
|
+
"why": "Submit/cancel semantics (Enter submits, cancel defaults to dismiss) and form grouping have no Basic form."
|
|
1306
|
+
}
|
|
1307
|
+
}
|
|
1308
|
+
}
|
|
1309
|
+
},
|
|
1310
|
+
"Group": {
|
|
1311
|
+
"type": "object",
|
|
1312
|
+
"description": "Visually groups closely related items without a heading (proximity).",
|
|
1313
|
+
"properties": {
|
|
1314
|
+
"component": {
|
|
1315
|
+
"const": "Group"
|
|
1316
|
+
},
|
|
1317
|
+
"visible": {
|
|
1318
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1319
|
+
"description": "Hide the component when false"
|
|
1320
|
+
},
|
|
1321
|
+
"children": {
|
|
1322
|
+
"$ref": "common_types.json#/$defs/ChildList",
|
|
1323
|
+
"type": "array",
|
|
1324
|
+
"minItems": 1,
|
|
1325
|
+
"description": "Ordered child component ids"
|
|
1326
|
+
},
|
|
1327
|
+
"label": {
|
|
1328
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1329
|
+
"description": "Accessible name for the group when it isn't obvious from its content"
|
|
1330
|
+
},
|
|
1331
|
+
"arrangement": {
|
|
1332
|
+
"enum": [
|
|
1333
|
+
"auto",
|
|
1334
|
+
"inline",
|
|
1335
|
+
"grid"
|
|
1336
|
+
],
|
|
1337
|
+
"default": "auto",
|
|
1338
|
+
"description": "Hint only. 'inline' for a few short peers (e.g. metrics); renderers stack on narrow screens."
|
|
1339
|
+
}
|
|
1340
|
+
},
|
|
1341
|
+
"required": [
|
|
1342
|
+
"component",
|
|
1343
|
+
"children"
|
|
1344
|
+
],
|
|
1345
|
+
"metadata": {
|
|
1346
|
+
"extensions": {
|
|
1347
|
+
"com_polyxd": {
|
|
1348
|
+
"category": "structure",
|
|
1349
|
+
"target": "custom",
|
|
1350
|
+
"basicAnalog": "Column or Row",
|
|
1351
|
+
"why": "Basic forces one axis. The adaptive 'auto'/'inline'/'grid' arrangement hint would be lost."
|
|
1352
|
+
}
|
|
1353
|
+
}
|
|
1354
|
+
}
|
|
1355
|
+
},
|
|
1356
|
+
"Media": {
|
|
1357
|
+
"type": "object",
|
|
1358
|
+
"description": "An image supplied by the host.",
|
|
1359
|
+
"properties": {
|
|
1360
|
+
"component": {
|
|
1361
|
+
"const": "Media"
|
|
1362
|
+
},
|
|
1363
|
+
"visible": {
|
|
1364
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1365
|
+
"description": "Hide the component when false"
|
|
1366
|
+
},
|
|
1367
|
+
"src": {
|
|
1368
|
+
"type": "object",
|
|
1369
|
+
"required": [
|
|
1370
|
+
"path"
|
|
1371
|
+
],
|
|
1372
|
+
"properties": {
|
|
1373
|
+
"path": {
|
|
1374
|
+
"type": "string",
|
|
1375
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
1376
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
1377
|
+
}
|
|
1378
|
+
},
|
|
1379
|
+
"additionalProperties": false,
|
|
1380
|
+
"description": "Image reference in host data; generated UI never contains URLs"
|
|
1381
|
+
},
|
|
1382
|
+
"alt": {
|
|
1383
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1384
|
+
"description": "Required unless decorative"
|
|
1385
|
+
},
|
|
1386
|
+
"decorative": {
|
|
1387
|
+
"type": "boolean",
|
|
1388
|
+
"default": false
|
|
1389
|
+
},
|
|
1390
|
+
"aspect": {
|
|
1391
|
+
"enum": [
|
|
1392
|
+
"square",
|
|
1393
|
+
"landscape",
|
|
1394
|
+
"portrait",
|
|
1395
|
+
"auto"
|
|
1396
|
+
],
|
|
1397
|
+
"default": "auto"
|
|
1398
|
+
}
|
|
1399
|
+
},
|
|
1400
|
+
"required": [
|
|
1401
|
+
"component",
|
|
1402
|
+
"src"
|
|
1403
|
+
],
|
|
1404
|
+
"metadata": {
|
|
1405
|
+
"extensions": {
|
|
1406
|
+
"com_polyxd": {
|
|
1407
|
+
"category": "content",
|
|
1408
|
+
"target": "custom",
|
|
1409
|
+
"basicAnalog": "Image",
|
|
1410
|
+
"why": "Image takes a URL string. Polyxd's src is a host-data binding, and 'decorative' and the aspect hint have no Image equivalent (Image.variant is a size, not an aspect)."
|
|
1411
|
+
}
|
|
1412
|
+
}
|
|
1413
|
+
}
|
|
1414
|
+
},
|
|
1415
|
+
"Metric": {
|
|
1416
|
+
"type": "object",
|
|
1417
|
+
"description": "A key figure with a label, and optionally its change.",
|
|
1418
|
+
"properties": {
|
|
1419
|
+
"component": {
|
|
1420
|
+
"const": "Metric"
|
|
1421
|
+
},
|
|
1422
|
+
"visible": {
|
|
1423
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1424
|
+
"description": "Hide the component when false"
|
|
1425
|
+
},
|
|
1426
|
+
"label": {
|
|
1427
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1428
|
+
},
|
|
1429
|
+
"value": {
|
|
1430
|
+
"type": "object",
|
|
1431
|
+
"required": [
|
|
1432
|
+
"path"
|
|
1433
|
+
],
|
|
1434
|
+
"properties": {
|
|
1435
|
+
"path": {
|
|
1436
|
+
"type": "string",
|
|
1437
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
1438
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
1439
|
+
}
|
|
1440
|
+
},
|
|
1441
|
+
"additionalProperties": false,
|
|
1442
|
+
"description": "Always bound to host data"
|
|
1443
|
+
},
|
|
1444
|
+
"format": {
|
|
1445
|
+
"type": "object",
|
|
1446
|
+
"required": [
|
|
1447
|
+
"type"
|
|
1448
|
+
],
|
|
1449
|
+
"properties": {
|
|
1450
|
+
"type": {
|
|
1451
|
+
"enum": [
|
|
1452
|
+
"text",
|
|
1453
|
+
"number",
|
|
1454
|
+
"currency",
|
|
1455
|
+
"percent",
|
|
1456
|
+
"date",
|
|
1457
|
+
"time",
|
|
1458
|
+
"datetime",
|
|
1459
|
+
"relativeTime",
|
|
1460
|
+
"duration"
|
|
1461
|
+
]
|
|
1462
|
+
},
|
|
1463
|
+
"currency": {
|
|
1464
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1465
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
1466
|
+
},
|
|
1467
|
+
"precision": {
|
|
1468
|
+
"type": "integer",
|
|
1469
|
+
"minimum": 0,
|
|
1470
|
+
"maximum": 6
|
|
1471
|
+
}
|
|
1472
|
+
},
|
|
1473
|
+
"additionalProperties": false,
|
|
1474
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
1475
|
+
},
|
|
1476
|
+
"change": {
|
|
1477
|
+
"type": "object",
|
|
1478
|
+
"required": [
|
|
1479
|
+
"value"
|
|
1480
|
+
],
|
|
1481
|
+
"properties": {
|
|
1482
|
+
"value": {
|
|
1483
|
+
"type": "object",
|
|
1484
|
+
"required": [
|
|
1485
|
+
"path"
|
|
1486
|
+
],
|
|
1487
|
+
"properties": {
|
|
1488
|
+
"path": {
|
|
1489
|
+
"type": "string",
|
|
1490
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
1491
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
1492
|
+
}
|
|
1493
|
+
},
|
|
1494
|
+
"additionalProperties": false,
|
|
1495
|
+
"description": "A value read from (and, for inputs, written to) host data. Data always comes from the host; the model never invents it."
|
|
1496
|
+
},
|
|
1497
|
+
"format": {
|
|
1498
|
+
"type": "object",
|
|
1499
|
+
"required": [
|
|
1500
|
+
"type"
|
|
1501
|
+
],
|
|
1502
|
+
"properties": {
|
|
1503
|
+
"type": {
|
|
1504
|
+
"enum": [
|
|
1505
|
+
"text",
|
|
1506
|
+
"number",
|
|
1507
|
+
"currency",
|
|
1508
|
+
"percent",
|
|
1509
|
+
"date",
|
|
1510
|
+
"time",
|
|
1511
|
+
"datetime",
|
|
1512
|
+
"relativeTime",
|
|
1513
|
+
"duration"
|
|
1514
|
+
]
|
|
1515
|
+
},
|
|
1516
|
+
"currency": {
|
|
1517
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1518
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
1519
|
+
},
|
|
1520
|
+
"precision": {
|
|
1521
|
+
"type": "integer",
|
|
1522
|
+
"minimum": 0,
|
|
1523
|
+
"maximum": 6
|
|
1524
|
+
}
|
|
1525
|
+
},
|
|
1526
|
+
"additionalProperties": false,
|
|
1527
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
1528
|
+
},
|
|
1529
|
+
"favorable": {
|
|
1530
|
+
"enum": [
|
|
1531
|
+
"increase",
|
|
1532
|
+
"decrease",
|
|
1533
|
+
"none"
|
|
1534
|
+
],
|
|
1535
|
+
"default": "increase",
|
|
1536
|
+
"description": "Which direction is good, so color follows meaning, not sign"
|
|
1537
|
+
}
|
|
1538
|
+
},
|
|
1539
|
+
"additionalProperties": false
|
|
1540
|
+
},
|
|
1541
|
+
"caption": {
|
|
1542
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1543
|
+
}
|
|
1544
|
+
},
|
|
1545
|
+
"required": [
|
|
1546
|
+
"component",
|
|
1547
|
+
"label",
|
|
1548
|
+
"value"
|
|
1549
|
+
],
|
|
1550
|
+
"metadata": {
|
|
1551
|
+
"extensions": {
|
|
1552
|
+
"com_polyxd": {
|
|
1553
|
+
"category": "content",
|
|
1554
|
+
"target": "custom",
|
|
1555
|
+
"basicAnalog": "Column of Text",
|
|
1556
|
+
"why": "Value format, change value and favourable direction (the colour follows the meaning) would be lost."
|
|
1557
|
+
}
|
|
1558
|
+
}
|
|
1559
|
+
}
|
|
1560
|
+
},
|
|
1561
|
+
"Navigation": {
|
|
1562
|
+
"type": "object",
|
|
1563
|
+
"description": "The product's main navigation.",
|
|
1564
|
+
"properties": {
|
|
1565
|
+
"component": {
|
|
1566
|
+
"const": "Navigation"
|
|
1567
|
+
},
|
|
1568
|
+
"visible": {
|
|
1569
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1570
|
+
"description": "Hide the component when false"
|
|
1571
|
+
},
|
|
1572
|
+
"label": {
|
|
1573
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1574
|
+
"description": "Names the navigation, e.g. 'Main'"
|
|
1575
|
+
},
|
|
1576
|
+
"items": {
|
|
1577
|
+
"type": "array",
|
|
1578
|
+
"minItems": 2,
|
|
1579
|
+
"maxItems": 20,
|
|
1580
|
+
"items": {
|
|
1581
|
+
"type": "object",
|
|
1582
|
+
"required": [
|
|
1583
|
+
"key",
|
|
1584
|
+
"label",
|
|
1585
|
+
"action"
|
|
1586
|
+
],
|
|
1587
|
+
"properties": {
|
|
1588
|
+
"key": {
|
|
1589
|
+
"type": "string",
|
|
1590
|
+
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$",
|
|
1591
|
+
"description": "Stable semantic key (e.g. 'fee', 'recipient.name'). The same thing gets the same key across generations; interface memory uses it to keep placement, order and labels consistent."
|
|
1592
|
+
},
|
|
1593
|
+
"label": {
|
|
1594
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1595
|
+
},
|
|
1596
|
+
"group": {
|
|
1597
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1598
|
+
"description": "Heading that groups items (e.g. 'Billing')"
|
|
1599
|
+
},
|
|
1600
|
+
"icon": {
|
|
1601
|
+
"enum": [
|
|
1602
|
+
"home",
|
|
1603
|
+
"search",
|
|
1604
|
+
"inbox",
|
|
1605
|
+
"book",
|
|
1606
|
+
"tag",
|
|
1607
|
+
"clock",
|
|
1608
|
+
"shield",
|
|
1609
|
+
"lock",
|
|
1610
|
+
"mail",
|
|
1611
|
+
"settings",
|
|
1612
|
+
"chart",
|
|
1613
|
+
"people",
|
|
1614
|
+
"card",
|
|
1615
|
+
"file"
|
|
1616
|
+
]
|
|
1617
|
+
},
|
|
1618
|
+
"badge": {
|
|
1619
|
+
"type": "object",
|
|
1620
|
+
"required": [
|
|
1621
|
+
"path"
|
|
1622
|
+
],
|
|
1623
|
+
"properties": {
|
|
1624
|
+
"path": {
|
|
1625
|
+
"type": "string",
|
|
1626
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
1627
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
1628
|
+
}
|
|
1629
|
+
},
|
|
1630
|
+
"additionalProperties": false,
|
|
1631
|
+
"description": "Count needing attention, e.g. overdue invoices"
|
|
1632
|
+
},
|
|
1633
|
+
"action": {
|
|
1634
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
1635
|
+
}
|
|
1636
|
+
},
|
|
1637
|
+
"additionalProperties": false
|
|
1638
|
+
}
|
|
1639
|
+
},
|
|
1640
|
+
"current": {
|
|
1641
|
+
"type": "object",
|
|
1642
|
+
"required": [
|
|
1643
|
+
"path"
|
|
1644
|
+
],
|
|
1645
|
+
"properties": {
|
|
1646
|
+
"path": {
|
|
1647
|
+
"type": "string",
|
|
1648
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
1649
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
1650
|
+
}
|
|
1651
|
+
},
|
|
1652
|
+
"additionalProperties": false,
|
|
1653
|
+
"description": "Key of the current item in host data"
|
|
1654
|
+
}
|
|
1655
|
+
},
|
|
1656
|
+
"required": [
|
|
1657
|
+
"component",
|
|
1658
|
+
"items",
|
|
1659
|
+
"current"
|
|
1660
|
+
],
|
|
1661
|
+
"metadata": {
|
|
1662
|
+
"extensions": {
|
|
1663
|
+
"com_polyxd": {
|
|
1664
|
+
"category": "layout",
|
|
1665
|
+
"target": "custom",
|
|
1666
|
+
"basicAnalog": "Column of Button",
|
|
1667
|
+
"why": "A column of buttons loses which section you are in, the grouping, the counts needing attention, and the side-navigation-or-menu behaviour."
|
|
1668
|
+
}
|
|
1669
|
+
}
|
|
1670
|
+
}
|
|
1671
|
+
},
|
|
1672
|
+
"RangeInput": {
|
|
1673
|
+
"type": "object",
|
|
1674
|
+
"description": "A number, or a range between two numbers, within known bounds.",
|
|
1675
|
+
"properties": {
|
|
1676
|
+
"component": {
|
|
1677
|
+
"const": "RangeInput"
|
|
1678
|
+
},
|
|
1679
|
+
"visible": {
|
|
1680
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1681
|
+
"description": "Hide the component when false"
|
|
1682
|
+
},
|
|
1683
|
+
"label": {
|
|
1684
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1685
|
+
},
|
|
1686
|
+
"value": {
|
|
1687
|
+
"type": "object",
|
|
1688
|
+
"required": [
|
|
1689
|
+
"path"
|
|
1690
|
+
],
|
|
1691
|
+
"properties": {
|
|
1692
|
+
"path": {
|
|
1693
|
+
"type": "string",
|
|
1694
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
1695
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
1696
|
+
}
|
|
1697
|
+
},
|
|
1698
|
+
"additionalProperties": false,
|
|
1699
|
+
"description": "Number in host data, or [min, max] when mode is 'range'"
|
|
1700
|
+
},
|
|
1701
|
+
"min": {
|
|
1702
|
+
"type": "number"
|
|
1703
|
+
},
|
|
1704
|
+
"max": {
|
|
1705
|
+
"type": "number"
|
|
1706
|
+
},
|
|
1707
|
+
"step": {
|
|
1708
|
+
"type": "number",
|
|
1709
|
+
"exclusiveMinimum": 0
|
|
1710
|
+
},
|
|
1711
|
+
"format": {
|
|
1712
|
+
"type": "object",
|
|
1713
|
+
"required": [
|
|
1714
|
+
"type"
|
|
1715
|
+
],
|
|
1716
|
+
"properties": {
|
|
1717
|
+
"type": {
|
|
1718
|
+
"enum": [
|
|
1719
|
+
"text",
|
|
1720
|
+
"number",
|
|
1721
|
+
"currency",
|
|
1722
|
+
"percent",
|
|
1723
|
+
"date",
|
|
1724
|
+
"time",
|
|
1725
|
+
"datetime",
|
|
1726
|
+
"relativeTime",
|
|
1727
|
+
"duration"
|
|
1728
|
+
]
|
|
1729
|
+
},
|
|
1730
|
+
"currency": {
|
|
1731
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1732
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
1733
|
+
},
|
|
1734
|
+
"precision": {
|
|
1735
|
+
"type": "integer",
|
|
1736
|
+
"minimum": 0,
|
|
1737
|
+
"maximum": 6
|
|
1738
|
+
}
|
|
1739
|
+
},
|
|
1740
|
+
"additionalProperties": false,
|
|
1741
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
1742
|
+
},
|
|
1743
|
+
"mode": {
|
|
1744
|
+
"enum": [
|
|
1745
|
+
"single",
|
|
1746
|
+
"range"
|
|
1747
|
+
],
|
|
1748
|
+
"default": "single",
|
|
1749
|
+
"description": "'range' picks a lower and upper bound; value is then [min, max]"
|
|
1750
|
+
}
|
|
1751
|
+
},
|
|
1752
|
+
"required": [
|
|
1753
|
+
"component",
|
|
1754
|
+
"label",
|
|
1755
|
+
"value",
|
|
1756
|
+
"min",
|
|
1757
|
+
"max"
|
|
1758
|
+
],
|
|
1759
|
+
"metadata": {
|
|
1760
|
+
"extensions": {
|
|
1761
|
+
"com_polyxd": {
|
|
1762
|
+
"category": "input",
|
|
1763
|
+
"target": "custom",
|
|
1764
|
+
"basicAnalog": "Slider",
|
|
1765
|
+
"why": "Slider has a step count, not a step size, and no value format."
|
|
1766
|
+
}
|
|
1767
|
+
}
|
|
1768
|
+
}
|
|
1769
|
+
},
|
|
1770
|
+
"Section": {
|
|
1771
|
+
"type": "object",
|
|
1772
|
+
"description": "A titled region of the surface that groups related content under a heading.",
|
|
1773
|
+
"properties": {
|
|
1774
|
+
"component": {
|
|
1775
|
+
"const": "Section"
|
|
1776
|
+
},
|
|
1777
|
+
"visible": {
|
|
1778
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1779
|
+
"description": "Hide the component when false"
|
|
1780
|
+
},
|
|
1781
|
+
"title": {
|
|
1782
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1783
|
+
"description": "Heading for the section"
|
|
1784
|
+
},
|
|
1785
|
+
"description": {
|
|
1786
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1787
|
+
"description": "Optional one-line explanation under the heading"
|
|
1788
|
+
},
|
|
1789
|
+
"children": {
|
|
1790
|
+
"$ref": "common_types.json#/$defs/ChildList",
|
|
1791
|
+
"type": "array",
|
|
1792
|
+
"minItems": 1,
|
|
1793
|
+
"description": "Ordered child component ids"
|
|
1794
|
+
}
|
|
1795
|
+
},
|
|
1796
|
+
"required": [
|
|
1797
|
+
"component",
|
|
1798
|
+
"title",
|
|
1799
|
+
"children"
|
|
1800
|
+
],
|
|
1801
|
+
"metadata": {
|
|
1802
|
+
"extensions": {
|
|
1803
|
+
"com_polyxd": {
|
|
1804
|
+
"category": "structure",
|
|
1805
|
+
"target": "custom",
|
|
1806
|
+
"basicAnalog": "Column with a Text heading",
|
|
1807
|
+
"why": "Basic Text has no heading level, so the section heading and landmark would be lost."
|
|
1808
|
+
}
|
|
1809
|
+
}
|
|
1810
|
+
}
|
|
1811
|
+
},
|
|
1812
|
+
"Status": {
|
|
1813
|
+
"type": "object",
|
|
1814
|
+
"description": "Feedback about state: info, success, warning, error, empty or loading.",
|
|
1815
|
+
"properties": {
|
|
1816
|
+
"component": {
|
|
1817
|
+
"const": "Status"
|
|
1818
|
+
},
|
|
1819
|
+
"visible": {
|
|
1820
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1821
|
+
"description": "Hide the component when false"
|
|
1822
|
+
},
|
|
1823
|
+
"kind": {
|
|
1824
|
+
"enum": [
|
|
1825
|
+
"info",
|
|
1826
|
+
"success",
|
|
1827
|
+
"warning",
|
|
1828
|
+
"error",
|
|
1829
|
+
"empty",
|
|
1830
|
+
"loading",
|
|
1831
|
+
"undo"
|
|
1832
|
+
]
|
|
1833
|
+
},
|
|
1834
|
+
"title": {
|
|
1835
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1836
|
+
},
|
|
1837
|
+
"message": {
|
|
1838
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1839
|
+
},
|
|
1840
|
+
"action": {
|
|
1841
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
1842
|
+
"description": "Optional Action (or ActionBar for a primary and a secondary) to recover or continue, e.g. 'Try again'; for 'undo', the Undo action"
|
|
1843
|
+
},
|
|
1844
|
+
"icon": {
|
|
1845
|
+
"enum": [
|
|
1846
|
+
"lock",
|
|
1847
|
+
"trash",
|
|
1848
|
+
"clock",
|
|
1849
|
+
"tag",
|
|
1850
|
+
"info",
|
|
1851
|
+
"alert",
|
|
1852
|
+
"mail",
|
|
1853
|
+
"shield",
|
|
1854
|
+
"search",
|
|
1855
|
+
"book",
|
|
1856
|
+
"inbox",
|
|
1857
|
+
"check"
|
|
1858
|
+
],
|
|
1859
|
+
"description": "Optional icon for empty states; the renderer picks one by kind otherwise"
|
|
1860
|
+
},
|
|
1861
|
+
"variant": {
|
|
1862
|
+
"enum": [
|
|
1863
|
+
"default",
|
|
1864
|
+
"inline"
|
|
1865
|
+
],
|
|
1866
|
+
"default": "default",
|
|
1867
|
+
"description": "'inline' is a notice inside a page (a warning above a record) rather than a block of its own"
|
|
1868
|
+
}
|
|
1869
|
+
},
|
|
1870
|
+
"required": [
|
|
1871
|
+
"component",
|
|
1872
|
+
"kind",
|
|
1873
|
+
"title"
|
|
1874
|
+
],
|
|
1875
|
+
"allowedChildren": [
|
|
1876
|
+
"Action",
|
|
1877
|
+
"ActionBar"
|
|
1878
|
+
],
|
|
1879
|
+
"metadata": {
|
|
1880
|
+
"extensions": {
|
|
1881
|
+
"com_polyxd": {
|
|
1882
|
+
"category": "feedback",
|
|
1883
|
+
"target": "custom",
|
|
1884
|
+
"basicAnalog": "Row(Icon, Text)",
|
|
1885
|
+
"why": "Status kinds (loading, empty, error, ...) and their live-region semantics would be lost."
|
|
1886
|
+
}
|
|
1887
|
+
}
|
|
1888
|
+
}
|
|
1889
|
+
},
|
|
1890
|
+
"Steps": {
|
|
1891
|
+
"type": "object",
|
|
1892
|
+
"description": "A task split into ordered steps with visible progress.",
|
|
1893
|
+
"properties": {
|
|
1894
|
+
"component": {
|
|
1895
|
+
"const": "Steps"
|
|
1896
|
+
},
|
|
1897
|
+
"visible": {
|
|
1898
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1899
|
+
"description": "Hide the component when false"
|
|
1900
|
+
},
|
|
1901
|
+
"steps": {
|
|
1902
|
+
"type": "array",
|
|
1903
|
+
"minItems": 2,
|
|
1904
|
+
"maxItems": 7,
|
|
1905
|
+
"items": {
|
|
1906
|
+
"type": "object",
|
|
1907
|
+
"required": [
|
|
1908
|
+
"key",
|
|
1909
|
+
"title",
|
|
1910
|
+
"content"
|
|
1911
|
+
],
|
|
1912
|
+
"properties": {
|
|
1913
|
+
"key": {
|
|
1914
|
+
"type": "string",
|
|
1915
|
+
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$",
|
|
1916
|
+
"description": "Stable semantic key (e.g. 'fee', 'recipient.name'). The same thing gets the same key across generations; interface memory uses it to keep placement, order and labels consistent."
|
|
1917
|
+
},
|
|
1918
|
+
"title": {
|
|
1919
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1920
|
+
},
|
|
1921
|
+
"content": {
|
|
1922
|
+
"$ref": "common_types.json#/$defs/ComponentId"
|
|
1923
|
+
}
|
|
1924
|
+
},
|
|
1925
|
+
"additionalProperties": false
|
|
1926
|
+
}
|
|
1927
|
+
},
|
|
1928
|
+
"current": {
|
|
1929
|
+
"$ref": "common_types.json#/$defs/DynamicNumber",
|
|
1930
|
+
"description": "Index of the current step (default 0)"
|
|
1931
|
+
},
|
|
1932
|
+
"finish": {
|
|
1933
|
+
"type": "object",
|
|
1934
|
+
"required": [
|
|
1935
|
+
"label",
|
|
1936
|
+
"action"
|
|
1937
|
+
],
|
|
1938
|
+
"properties": {
|
|
1939
|
+
"label": {
|
|
1940
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
1941
|
+
},
|
|
1942
|
+
"action": {
|
|
1943
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
1944
|
+
}
|
|
1945
|
+
},
|
|
1946
|
+
"additionalProperties": false
|
|
1947
|
+
}
|
|
1948
|
+
},
|
|
1949
|
+
"required": [
|
|
1950
|
+
"component",
|
|
1951
|
+
"steps",
|
|
1952
|
+
"finish"
|
|
1953
|
+
],
|
|
1954
|
+
"metadata": {
|
|
1955
|
+
"extensions": {
|
|
1956
|
+
"com_polyxd": {
|
|
1957
|
+
"category": "flow",
|
|
1958
|
+
"target": "custom",
|
|
1959
|
+
"basicAnalog": "Column of the current step",
|
|
1960
|
+
"why": "Basic has no stepper. Step keys, progress and the finish action would be lost."
|
|
1961
|
+
}
|
|
1962
|
+
}
|
|
1963
|
+
}
|
|
1964
|
+
},
|
|
1965
|
+
"Table": {
|
|
1966
|
+
"type": "object",
|
|
1967
|
+
"description": "Tabular data: many items sharing the same attributes.",
|
|
1968
|
+
"properties": {
|
|
1969
|
+
"component": {
|
|
1970
|
+
"const": "Table"
|
|
1971
|
+
},
|
|
1972
|
+
"visible": {
|
|
1973
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
1974
|
+
"description": "Hide the component when false"
|
|
1975
|
+
},
|
|
1976
|
+
"rows": {
|
|
1977
|
+
"type": "object",
|
|
1978
|
+
"required": [
|
|
1979
|
+
"path"
|
|
1980
|
+
],
|
|
1981
|
+
"properties": {
|
|
1982
|
+
"path": {
|
|
1983
|
+
"type": "string",
|
|
1984
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
1985
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
1986
|
+
}
|
|
1987
|
+
},
|
|
1988
|
+
"additionalProperties": false,
|
|
1989
|
+
"description": "Array of row objects in host data"
|
|
1990
|
+
},
|
|
1991
|
+
"caption": {
|
|
1992
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
1993
|
+
"description": "What the table shows (required for accessibility)"
|
|
1994
|
+
},
|
|
1995
|
+
"columns": {
|
|
1996
|
+
"type": "array",
|
|
1997
|
+
"minItems": 1,
|
|
1998
|
+
"maxItems": 8,
|
|
1999
|
+
"items": {
|
|
2000
|
+
"type": "object",
|
|
2001
|
+
"required": [
|
|
2002
|
+
"key",
|
|
2003
|
+
"label",
|
|
2004
|
+
"path"
|
|
2005
|
+
],
|
|
2006
|
+
"properties": {
|
|
2007
|
+
"key": {
|
|
2008
|
+
"type": "string",
|
|
2009
|
+
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$",
|
|
2010
|
+
"description": "Stable semantic key (e.g. 'fee', 'recipient.name'). The same thing gets the same key across generations; interface memory uses it to keep placement, order and labels consistent."
|
|
2011
|
+
},
|
|
2012
|
+
"label": {
|
|
2013
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
2014
|
+
},
|
|
2015
|
+
"path": {
|
|
2016
|
+
"type": "string",
|
|
2017
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2018
|
+
"description": "Relative to the row"
|
|
2019
|
+
},
|
|
2020
|
+
"format": {
|
|
2021
|
+
"type": "object",
|
|
2022
|
+
"required": [
|
|
2023
|
+
"type"
|
|
2024
|
+
],
|
|
2025
|
+
"properties": {
|
|
2026
|
+
"type": {
|
|
2027
|
+
"enum": [
|
|
2028
|
+
"text",
|
|
2029
|
+
"number",
|
|
2030
|
+
"currency",
|
|
2031
|
+
"percent",
|
|
2032
|
+
"date",
|
|
2033
|
+
"time",
|
|
2034
|
+
"datetime",
|
|
2035
|
+
"relativeTime",
|
|
2036
|
+
"duration"
|
|
2037
|
+
]
|
|
2038
|
+
},
|
|
2039
|
+
"currency": {
|
|
2040
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
2041
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
2042
|
+
},
|
|
2043
|
+
"precision": {
|
|
2044
|
+
"type": "integer",
|
|
2045
|
+
"minimum": 0,
|
|
2046
|
+
"maximum": 6
|
|
2047
|
+
}
|
|
2048
|
+
},
|
|
2049
|
+
"additionalProperties": false,
|
|
2050
|
+
"description": "How to present a value. The renderer localizes it; the model never pre-formats numbers or dates into strings."
|
|
2051
|
+
},
|
|
2052
|
+
"kind": {
|
|
2053
|
+
"enum": [
|
|
2054
|
+
"text",
|
|
2055
|
+
"number",
|
|
2056
|
+
"currency",
|
|
2057
|
+
"date",
|
|
2058
|
+
"status",
|
|
2059
|
+
"entity",
|
|
2060
|
+
"link"
|
|
2061
|
+
],
|
|
2062
|
+
"default": "text",
|
|
2063
|
+
"description": "What the cell holds; drives alignment, tabular figures and status tags"
|
|
2064
|
+
},
|
|
2065
|
+
"align": {
|
|
2066
|
+
"enum": [
|
|
2067
|
+
"start",
|
|
2068
|
+
"end"
|
|
2069
|
+
],
|
|
2070
|
+
"description": "Overrides the alignment the kind implies"
|
|
2071
|
+
},
|
|
2072
|
+
"tones": {
|
|
2073
|
+
"type": "object",
|
|
2074
|
+
"additionalProperties": {
|
|
2075
|
+
"enum": [
|
|
2076
|
+
"neutral",
|
|
2077
|
+
"info",
|
|
2078
|
+
"success",
|
|
2079
|
+
"warning",
|
|
2080
|
+
"danger"
|
|
2081
|
+
]
|
|
2082
|
+
},
|
|
2083
|
+
"description": "For 'status': value → tone, e.g. {\"Past due\": \"danger\"}"
|
|
2084
|
+
},
|
|
2085
|
+
"sortable": {
|
|
2086
|
+
"type": "boolean",
|
|
2087
|
+
"description": "Whether people can sort by this column"
|
|
2088
|
+
},
|
|
2089
|
+
"avatarPath": {
|
|
2090
|
+
"type": "string",
|
|
2091
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2092
|
+
"description": "For 'entity': relative path to the picture or initials"
|
|
2093
|
+
},
|
|
2094
|
+
"secondaryPath": {
|
|
2095
|
+
"type": "string",
|
|
2096
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2097
|
+
"description": "For 'entity': a second line, e.g. an email address"
|
|
2098
|
+
}
|
|
2099
|
+
},
|
|
2100
|
+
"additionalProperties": false
|
|
2101
|
+
}
|
|
2102
|
+
},
|
|
2103
|
+
"rowAction": {
|
|
2104
|
+
"$ref": "common_types.json#/$defs/Action",
|
|
2105
|
+
"description": "Activated per row; context bindings resolve against the row"
|
|
2106
|
+
},
|
|
2107
|
+
"empty": {
|
|
2108
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
2109
|
+
"description": "Status component shown when there are no rows"
|
|
2110
|
+
},
|
|
2111
|
+
"sort": {
|
|
2112
|
+
"type": "object",
|
|
2113
|
+
"required": [
|
|
2114
|
+
"column"
|
|
2115
|
+
],
|
|
2116
|
+
"properties": {
|
|
2117
|
+
"column": {
|
|
2118
|
+
"type": "object",
|
|
2119
|
+
"required": [
|
|
2120
|
+
"path"
|
|
2121
|
+
],
|
|
2122
|
+
"properties": {
|
|
2123
|
+
"path": {
|
|
2124
|
+
"type": "string",
|
|
2125
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2126
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2127
|
+
}
|
|
2128
|
+
},
|
|
2129
|
+
"additionalProperties": false,
|
|
2130
|
+
"description": "Key of the sorted column in host data"
|
|
2131
|
+
},
|
|
2132
|
+
"direction": {
|
|
2133
|
+
"type": "object",
|
|
2134
|
+
"required": [
|
|
2135
|
+
"path"
|
|
2136
|
+
],
|
|
2137
|
+
"properties": {
|
|
2138
|
+
"path": {
|
|
2139
|
+
"type": "string",
|
|
2140
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2141
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2142
|
+
}
|
|
2143
|
+
},
|
|
2144
|
+
"additionalProperties": false,
|
|
2145
|
+
"description": "'ascending' or 'descending' in host data"
|
|
2146
|
+
},
|
|
2147
|
+
"action": {
|
|
2148
|
+
"$ref": "common_types.json#/$defs/Action",
|
|
2149
|
+
"description": "Sent when someone sorts, so the host can re-query"
|
|
2150
|
+
}
|
|
2151
|
+
},
|
|
2152
|
+
"additionalProperties": false,
|
|
2153
|
+
"description": "Sorting state, owned by the host"
|
|
2154
|
+
},
|
|
2155
|
+
"selection": {
|
|
2156
|
+
"enum": [
|
|
2157
|
+
"none",
|
|
2158
|
+
"multiple"
|
|
2159
|
+
],
|
|
2160
|
+
"default": "none",
|
|
2161
|
+
"description": "'multiple' adds a checkbox column and a select-all"
|
|
2162
|
+
},
|
|
2163
|
+
"selected": {
|
|
2164
|
+
"type": "object",
|
|
2165
|
+
"required": [
|
|
2166
|
+
"path"
|
|
2167
|
+
],
|
|
2168
|
+
"properties": {
|
|
2169
|
+
"path": {
|
|
2170
|
+
"type": "string",
|
|
2171
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2172
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2173
|
+
}
|
|
2174
|
+
},
|
|
2175
|
+
"additionalProperties": false,
|
|
2176
|
+
"description": "Array of selected row values in host data"
|
|
2177
|
+
},
|
|
2178
|
+
"rowValuePath": {
|
|
2179
|
+
"type": "string",
|
|
2180
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2181
|
+
"description": "Relative path to each row's id, used for selection"
|
|
2182
|
+
},
|
|
2183
|
+
"bulkActions": {
|
|
2184
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
2185
|
+
"description": "ActionBar shown instead of the toolbar while rows are selected"
|
|
2186
|
+
},
|
|
2187
|
+
"rowActions": {
|
|
2188
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
2189
|
+
"description": "ActionBar offered per row, in a menu named after the row"
|
|
2190
|
+
},
|
|
2191
|
+
"toolbar": {
|
|
2192
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
2193
|
+
"description": "ActionBar above the table (e.g. New, Import, Export)"
|
|
2194
|
+
},
|
|
2195
|
+
"search": {
|
|
2196
|
+
"$ref": "common_types.json#/$defs/ComponentId",
|
|
2197
|
+
"description": "TextInput (kind 'search') above the table"
|
|
2198
|
+
},
|
|
2199
|
+
"views": {
|
|
2200
|
+
"type": "array",
|
|
2201
|
+
"minItems": 2,
|
|
2202
|
+
"maxItems": 8,
|
|
2203
|
+
"items": {
|
|
2204
|
+
"type": "object",
|
|
2205
|
+
"required": [
|
|
2206
|
+
"key",
|
|
2207
|
+
"label"
|
|
2208
|
+
],
|
|
2209
|
+
"properties": {
|
|
2210
|
+
"key": {
|
|
2211
|
+
"type": "string",
|
|
2212
|
+
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$",
|
|
2213
|
+
"description": "Stable semantic key (e.g. 'fee', 'recipient.name'). The same thing gets the same key across generations; interface memory uses it to keep placement, order and labels consistent."
|
|
2214
|
+
},
|
|
2215
|
+
"label": {
|
|
2216
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
2217
|
+
},
|
|
2218
|
+
"count": {
|
|
2219
|
+
"type": "object",
|
|
2220
|
+
"required": [
|
|
2221
|
+
"path"
|
|
2222
|
+
],
|
|
2223
|
+
"properties": {
|
|
2224
|
+
"path": {
|
|
2225
|
+
"type": "string",
|
|
2226
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2227
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2228
|
+
}
|
|
2229
|
+
},
|
|
2230
|
+
"additionalProperties": false,
|
|
2231
|
+
"description": "A value read from (and, for inputs, written to) host data. Data always comes from the host; the model never invents it."
|
|
2232
|
+
},
|
|
2233
|
+
"action": {
|
|
2234
|
+
"$ref": "common_types.json#/$defs/Action"
|
|
2235
|
+
}
|
|
2236
|
+
},
|
|
2237
|
+
"additionalProperties": false
|
|
2238
|
+
},
|
|
2239
|
+
"description": "Saved views (All, Mine, Past due…), shown as tabs with counts"
|
|
2240
|
+
},
|
|
2241
|
+
"view": {
|
|
2242
|
+
"type": "object",
|
|
2243
|
+
"required": [
|
|
2244
|
+
"path"
|
|
2245
|
+
],
|
|
2246
|
+
"properties": {
|
|
2247
|
+
"path": {
|
|
2248
|
+
"type": "string",
|
|
2249
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2250
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2251
|
+
}
|
|
2252
|
+
},
|
|
2253
|
+
"additionalProperties": false,
|
|
2254
|
+
"description": "Key of the selected saved view in host data"
|
|
2255
|
+
},
|
|
2256
|
+
"page": {
|
|
2257
|
+
"type": "object",
|
|
2258
|
+
"properties": {
|
|
2259
|
+
"index": {
|
|
2260
|
+
"type": "object",
|
|
2261
|
+
"required": [
|
|
2262
|
+
"path"
|
|
2263
|
+
],
|
|
2264
|
+
"properties": {
|
|
2265
|
+
"path": {
|
|
2266
|
+
"type": "string",
|
|
2267
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2268
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2269
|
+
}
|
|
2270
|
+
},
|
|
2271
|
+
"additionalProperties": false,
|
|
2272
|
+
"description": "1-based page number in host data"
|
|
2273
|
+
},
|
|
2274
|
+
"size": {
|
|
2275
|
+
"type": "object",
|
|
2276
|
+
"required": [
|
|
2277
|
+
"path"
|
|
2278
|
+
],
|
|
2279
|
+
"properties": {
|
|
2280
|
+
"path": {
|
|
2281
|
+
"type": "string",
|
|
2282
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2283
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2284
|
+
}
|
|
2285
|
+
},
|
|
2286
|
+
"additionalProperties": false,
|
|
2287
|
+
"description": "A value read from (and, for inputs, written to) host data. Data always comes from the host; the model never invents it."
|
|
2288
|
+
},
|
|
2289
|
+
"total": {
|
|
2290
|
+
"type": "object",
|
|
2291
|
+
"required": [
|
|
2292
|
+
"path"
|
|
2293
|
+
],
|
|
2294
|
+
"properties": {
|
|
2295
|
+
"path": {
|
|
2296
|
+
"type": "string",
|
|
2297
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2298
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2299
|
+
}
|
|
2300
|
+
},
|
|
2301
|
+
"additionalProperties": false,
|
|
2302
|
+
"description": "Total number of rows, all pages"
|
|
2303
|
+
},
|
|
2304
|
+
"action": {
|
|
2305
|
+
"$ref": "common_types.json#/$defs/Action",
|
|
2306
|
+
"description": "Sent when someone changes page or page size"
|
|
2307
|
+
}
|
|
2308
|
+
},
|
|
2309
|
+
"additionalProperties": false,
|
|
2310
|
+
"description": "Paging state, owned by the host"
|
|
2311
|
+
}
|
|
2312
|
+
},
|
|
2313
|
+
"required": [
|
|
2314
|
+
"component",
|
|
2315
|
+
"rows",
|
|
2316
|
+
"caption",
|
|
2317
|
+
"columns"
|
|
2318
|
+
],
|
|
2319
|
+
"allowedChildren": [
|
|
2320
|
+
"ActionBar",
|
|
2321
|
+
"Status",
|
|
2322
|
+
"TextInput"
|
|
2323
|
+
],
|
|
2324
|
+
"metadata": {
|
|
2325
|
+
"extensions": {
|
|
2326
|
+
"com_polyxd": {
|
|
2327
|
+
"category": "content",
|
|
2328
|
+
"target": "custom",
|
|
2329
|
+
"basicAnalog": "List of Row",
|
|
2330
|
+
"why": "Basic has no table. Caption, column headers, formats, row action and empty state would be lost."
|
|
2331
|
+
}
|
|
2332
|
+
}
|
|
2333
|
+
}
|
|
2334
|
+
},
|
|
2335
|
+
"Text": {
|
|
2336
|
+
"type": "object",
|
|
2337
|
+
"description": "A run of text.",
|
|
2338
|
+
"properties": {
|
|
2339
|
+
"component": {
|
|
2340
|
+
"const": "Text"
|
|
2341
|
+
},
|
|
2342
|
+
"visible": {
|
|
2343
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
2344
|
+
"description": "Hide the component when false"
|
|
2345
|
+
},
|
|
2346
|
+
"text": {
|
|
2347
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
2348
|
+
},
|
|
2349
|
+
"variant": {
|
|
2350
|
+
"enum": [
|
|
2351
|
+
"body",
|
|
2352
|
+
"supporting",
|
|
2353
|
+
"caption"
|
|
2354
|
+
],
|
|
2355
|
+
"default": "body"
|
|
2356
|
+
},
|
|
2357
|
+
"format": {
|
|
2358
|
+
"type": "object",
|
|
2359
|
+
"required": [
|
|
2360
|
+
"type"
|
|
2361
|
+
],
|
|
2362
|
+
"properties": {
|
|
2363
|
+
"type": {
|
|
2364
|
+
"enum": [
|
|
2365
|
+
"text",
|
|
2366
|
+
"number",
|
|
2367
|
+
"currency",
|
|
2368
|
+
"percent",
|
|
2369
|
+
"date",
|
|
2370
|
+
"time",
|
|
2371
|
+
"datetime",
|
|
2372
|
+
"relativeTime",
|
|
2373
|
+
"duration"
|
|
2374
|
+
]
|
|
2375
|
+
},
|
|
2376
|
+
"currency": {
|
|
2377
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
2378
|
+
"description": "ISO 4217 code, required for type 'currency'"
|
|
2379
|
+
},
|
|
2380
|
+
"precision": {
|
|
2381
|
+
"type": "integer",
|
|
2382
|
+
"minimum": 0,
|
|
2383
|
+
"maximum": 6
|
|
2384
|
+
}
|
|
2385
|
+
},
|
|
2386
|
+
"additionalProperties": false,
|
|
2387
|
+
"description": "Only when 'text' is bound to a non-string value"
|
|
2388
|
+
}
|
|
2389
|
+
},
|
|
2390
|
+
"required": [
|
|
2391
|
+
"component",
|
|
2392
|
+
"text"
|
|
2393
|
+
],
|
|
2394
|
+
"metadata": {
|
|
2395
|
+
"extensions": {
|
|
2396
|
+
"com_polyxd": {
|
|
2397
|
+
"category": "content",
|
|
2398
|
+
"target": "custom",
|
|
2399
|
+
"basicAnalog": "Text",
|
|
2400
|
+
"why": "Basic Text interprets Markdown (Polyxd text is plain), has no 'supporting' variant and no value format."
|
|
2401
|
+
}
|
|
2402
|
+
}
|
|
2403
|
+
}
|
|
2404
|
+
},
|
|
2405
|
+
"TextInput": {
|
|
2406
|
+
"type": "object",
|
|
2407
|
+
"description": "A single text-like value: text, number, email, phone, currency, search or long text.",
|
|
2408
|
+
"properties": {
|
|
2409
|
+
"component": {
|
|
2410
|
+
"const": "TextInput"
|
|
2411
|
+
},
|
|
2412
|
+
"visible": {
|
|
2413
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
2414
|
+
"description": "Hide the component when false"
|
|
2415
|
+
},
|
|
2416
|
+
"label": {
|
|
2417
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
2418
|
+
},
|
|
2419
|
+
"value": {
|
|
2420
|
+
"type": "object",
|
|
2421
|
+
"required": [
|
|
2422
|
+
"path"
|
|
2423
|
+
],
|
|
2424
|
+
"properties": {
|
|
2425
|
+
"path": {
|
|
2426
|
+
"type": "string",
|
|
2427
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2428
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2429
|
+
}
|
|
2430
|
+
},
|
|
2431
|
+
"additionalProperties": false,
|
|
2432
|
+
"description": "Two-way binding into host data"
|
|
2433
|
+
},
|
|
2434
|
+
"kind": {
|
|
2435
|
+
"enum": [
|
|
2436
|
+
"text",
|
|
2437
|
+
"multiline",
|
|
2438
|
+
"number",
|
|
2439
|
+
"currency",
|
|
2440
|
+
"email",
|
|
2441
|
+
"phone",
|
|
2442
|
+
"url",
|
|
2443
|
+
"search"
|
|
2444
|
+
],
|
|
2445
|
+
"default": "text"
|
|
2446
|
+
},
|
|
2447
|
+
"currency": {
|
|
2448
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
2449
|
+
"description": "ISO 4217 code when kind is 'currency'"
|
|
2450
|
+
},
|
|
2451
|
+
"help": {
|
|
2452
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
2453
|
+
"description": "Hint shown below the label (not a placeholder)"
|
|
2454
|
+
},
|
|
2455
|
+
"required": {
|
|
2456
|
+
"type": "boolean",
|
|
2457
|
+
"default": false
|
|
2458
|
+
},
|
|
2459
|
+
"validation": {
|
|
2460
|
+
"type": "object",
|
|
2461
|
+
"properties": {
|
|
2462
|
+
"min": {
|
|
2463
|
+
"type": "number"
|
|
2464
|
+
},
|
|
2465
|
+
"max": {
|
|
2466
|
+
"type": "number"
|
|
2467
|
+
},
|
|
2468
|
+
"minLength": {
|
|
2469
|
+
"type": "integer",
|
|
2470
|
+
"minimum": 0
|
|
2471
|
+
},
|
|
2472
|
+
"maxLength": {
|
|
2473
|
+
"type": "integer",
|
|
2474
|
+
"minimum": 1
|
|
2475
|
+
},
|
|
2476
|
+
"message": {
|
|
2477
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
2478
|
+
"description": "Error message shown when validation fails"
|
|
2479
|
+
}
|
|
2480
|
+
},
|
|
2481
|
+
"additionalProperties": false
|
|
2482
|
+
},
|
|
2483
|
+
"autocomplete": {
|
|
2484
|
+
"type": "string",
|
|
2485
|
+
"description": "HTML autocomplete token hint (e.g. 'email', 'postal-code')"
|
|
2486
|
+
},
|
|
2487
|
+
"placeholder": {
|
|
2488
|
+
"$ref": "common_types.json#/$defs/DynamicString",
|
|
2489
|
+
"description": "Only for kind 'search', shown inside the field. Never a substitute for the label."
|
|
2490
|
+
},
|
|
2491
|
+
"size": {
|
|
2492
|
+
"enum": [
|
|
2493
|
+
"default",
|
|
2494
|
+
"hero"
|
|
2495
|
+
],
|
|
2496
|
+
"default": "default",
|
|
2497
|
+
"description": "'hero' for the one number a surface is about (an amount to send): large and centred"
|
|
2498
|
+
}
|
|
2499
|
+
},
|
|
2500
|
+
"required": [
|
|
2501
|
+
"component",
|
|
2502
|
+
"label",
|
|
2503
|
+
"value"
|
|
2504
|
+
],
|
|
2505
|
+
"metadata": {
|
|
2506
|
+
"extensions": {
|
|
2507
|
+
"com_polyxd": {
|
|
2508
|
+
"category": "input",
|
|
2509
|
+
"target": "custom",
|
|
2510
|
+
"basicAnalog": "TextField",
|
|
2511
|
+
"why": "TextField has no currency/email/phone/url/search kinds, help text or autocomplete hint, and validation becomes Basic check functions."
|
|
2512
|
+
}
|
|
2513
|
+
}
|
|
2514
|
+
}
|
|
2515
|
+
},
|
|
2516
|
+
"Toggle": {
|
|
2517
|
+
"type": "object",
|
|
2518
|
+
"description": "An on/off setting.",
|
|
2519
|
+
"properties": {
|
|
2520
|
+
"component": {
|
|
2521
|
+
"const": "Toggle"
|
|
2522
|
+
},
|
|
2523
|
+
"visible": {
|
|
2524
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
2525
|
+
"description": "Hide the component when false"
|
|
2526
|
+
},
|
|
2527
|
+
"label": {
|
|
2528
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
2529
|
+
},
|
|
2530
|
+
"value": {
|
|
2531
|
+
"type": "object",
|
|
2532
|
+
"required": [
|
|
2533
|
+
"path"
|
|
2534
|
+
],
|
|
2535
|
+
"properties": {
|
|
2536
|
+
"path": {
|
|
2537
|
+
"type": "string",
|
|
2538
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2539
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2540
|
+
}
|
|
2541
|
+
},
|
|
2542
|
+
"additionalProperties": false,
|
|
2543
|
+
"description": "Boolean in host data"
|
|
2544
|
+
},
|
|
2545
|
+
"description": {
|
|
2546
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
2547
|
+
},
|
|
2548
|
+
"action": {
|
|
2549
|
+
"$ref": "common_types.json#/$defs/Action",
|
|
2550
|
+
"description": "Set when the change applies immediately (a setting); omit inside a Form"
|
|
2551
|
+
}
|
|
2552
|
+
},
|
|
2553
|
+
"required": [
|
|
2554
|
+
"component",
|
|
2555
|
+
"label",
|
|
2556
|
+
"value"
|
|
2557
|
+
],
|
|
2558
|
+
"metadata": {
|
|
2559
|
+
"extensions": {
|
|
2560
|
+
"com_polyxd": {
|
|
2561
|
+
"category": "input",
|
|
2562
|
+
"target": "custom",
|
|
2563
|
+
"basicAnalog": "CheckBox",
|
|
2564
|
+
"why": "CheckBox has no description and no immediate-apply action (a setting that saves on change)."
|
|
2565
|
+
}
|
|
2566
|
+
}
|
|
2567
|
+
}
|
|
2568
|
+
},
|
|
2569
|
+
"Views": {
|
|
2570
|
+
"type": "object",
|
|
2571
|
+
"description": "Switch between alternative views of the same subject (tabs).",
|
|
2572
|
+
"properties": {
|
|
2573
|
+
"component": {
|
|
2574
|
+
"const": "Views"
|
|
2575
|
+
},
|
|
2576
|
+
"visible": {
|
|
2577
|
+
"$ref": "common_types.json#/$defs/DynamicBoolean",
|
|
2578
|
+
"description": "Hide the component when false"
|
|
2579
|
+
},
|
|
2580
|
+
"views": {
|
|
2581
|
+
"type": "array",
|
|
2582
|
+
"minItems": 2,
|
|
2583
|
+
"maxItems": 6,
|
|
2584
|
+
"items": {
|
|
2585
|
+
"type": "object",
|
|
2586
|
+
"required": [
|
|
2587
|
+
"key",
|
|
2588
|
+
"label",
|
|
2589
|
+
"content"
|
|
2590
|
+
],
|
|
2591
|
+
"properties": {
|
|
2592
|
+
"key": {
|
|
2593
|
+
"type": "string",
|
|
2594
|
+
"pattern": "^[a-z][a-z0-9_]*(\\.[a-z][a-z0-9_]*)*$",
|
|
2595
|
+
"description": "Stable semantic key (e.g. 'fee', 'recipient.name'). The same thing gets the same key across generations; interface memory uses it to keep placement, order and labels consistent."
|
|
2596
|
+
},
|
|
2597
|
+
"label": {
|
|
2598
|
+
"$ref": "common_types.json#/$defs/DynamicString"
|
|
2599
|
+
},
|
|
2600
|
+
"content": {
|
|
2601
|
+
"$ref": "common_types.json#/$defs/ComponentId"
|
|
2602
|
+
},
|
|
2603
|
+
"count": {
|
|
2604
|
+
"type": "object",
|
|
2605
|
+
"required": [
|
|
2606
|
+
"path"
|
|
2607
|
+
],
|
|
2608
|
+
"properties": {
|
|
2609
|
+
"path": {
|
|
2610
|
+
"type": "string",
|
|
2611
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2612
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2613
|
+
}
|
|
2614
|
+
},
|
|
2615
|
+
"additionalProperties": false,
|
|
2616
|
+
"description": "How many items the view holds, shown beside its label"
|
|
2617
|
+
}
|
|
2618
|
+
},
|
|
2619
|
+
"additionalProperties": false
|
|
2620
|
+
}
|
|
2621
|
+
},
|
|
2622
|
+
"selected": {
|
|
2623
|
+
"type": "object",
|
|
2624
|
+
"required": [
|
|
2625
|
+
"path"
|
|
2626
|
+
],
|
|
2627
|
+
"properties": {
|
|
2628
|
+
"path": {
|
|
2629
|
+
"type": "string",
|
|
2630
|
+
"pattern": "^(/([^/~]|~[01])*)+$|^[A-Za-z0-9_]([^/~]|~[01])*(/([^/~]|~[01])*)*$",
|
|
2631
|
+
"description": "RFC 6901 JSON Pointer into host-provided data. Absolute ('/account/balance') or, inside a template, relative to the current item ('amount')."
|
|
2632
|
+
}
|
|
2633
|
+
},
|
|
2634
|
+
"additionalProperties": false,
|
|
2635
|
+
"description": "Key of the selected view in host data"
|
|
2636
|
+
},
|
|
2637
|
+
"variant": {
|
|
2638
|
+
"enum": [
|
|
2639
|
+
"tabs",
|
|
2640
|
+
"segmented"
|
|
2641
|
+
],
|
|
2642
|
+
"default": "tabs",
|
|
2643
|
+
"description": "'tabs' for sections of a record; 'segmented' for switching how the same thing is shown"
|
|
2644
|
+
}
|
|
2645
|
+
},
|
|
2646
|
+
"required": [
|
|
2647
|
+
"component",
|
|
2648
|
+
"views"
|
|
2649
|
+
],
|
|
2650
|
+
"metadata": {
|
|
2651
|
+
"extensions": {
|
|
2652
|
+
"com_polyxd": {
|
|
2653
|
+
"category": "structure",
|
|
2654
|
+
"target": "custom",
|
|
2655
|
+
"basicAnalog": "Tabs",
|
|
2656
|
+
"why": "Tabs has no stable view keys and no binding for the selected view."
|
|
2657
|
+
}
|
|
2658
|
+
}
|
|
2659
|
+
}
|
|
2660
|
+
}
|
|
2661
|
+
},
|
|
2662
|
+
"functions": {
|
|
2663
|
+
"dismiss": {
|
|
2664
|
+
"type": "object",
|
|
2665
|
+
"description": "Closes the surface without doing anything (Polyxd 'ui.dismiss').",
|
|
2666
|
+
"returnType": "void",
|
|
2667
|
+
"allowedCallers": "rendererOnly",
|
|
2668
|
+
"properties": {
|
|
2669
|
+
"call": {
|
|
2670
|
+
"const": "dismiss"
|
|
2671
|
+
}
|
|
2672
|
+
},
|
|
2673
|
+
"required": [
|
|
2674
|
+
"call"
|
|
2675
|
+
]
|
|
2676
|
+
},
|
|
2677
|
+
"back": {
|
|
2678
|
+
"type": "object",
|
|
2679
|
+
"description": "Returns to the previous step or surface (Polyxd 'ui.back').",
|
|
2680
|
+
"returnType": "void",
|
|
2681
|
+
"allowedCallers": "rendererOnly",
|
|
2682
|
+
"properties": {
|
|
2683
|
+
"call": {
|
|
2684
|
+
"const": "back"
|
|
2685
|
+
}
|
|
2686
|
+
},
|
|
2687
|
+
"required": [
|
|
2688
|
+
"call"
|
|
2689
|
+
]
|
|
2690
|
+
},
|
|
2691
|
+
"next": {
|
|
2692
|
+
"type": "object",
|
|
2693
|
+
"description": "Advances to the next step (Polyxd 'ui.next').",
|
|
2694
|
+
"returnType": "void",
|
|
2695
|
+
"allowedCallers": "rendererOnly",
|
|
2696
|
+
"properties": {
|
|
2697
|
+
"call": {
|
|
2698
|
+
"const": "next"
|
|
2699
|
+
}
|
|
2700
|
+
},
|
|
2701
|
+
"required": [
|
|
2702
|
+
"call"
|
|
2703
|
+
]
|
|
2704
|
+
}
|
|
2705
|
+
},
|
|
2706
|
+
"$defs": {
|
|
2707
|
+
"anyComponent": {
|
|
2708
|
+
"oneOf": [
|
|
2709
|
+
{
|
|
2710
|
+
"$ref": "#/components/Action"
|
|
2711
|
+
},
|
|
2712
|
+
{
|
|
2713
|
+
"$ref": "#/components/ActionBar"
|
|
2714
|
+
},
|
|
2715
|
+
{
|
|
2716
|
+
"$ref": "#/components/Card"
|
|
2717
|
+
},
|
|
2718
|
+
{
|
|
2719
|
+
"$ref": "#/components/Chart"
|
|
2720
|
+
},
|
|
2721
|
+
{
|
|
2722
|
+
"$ref": "#/components/Choice"
|
|
2723
|
+
},
|
|
2724
|
+
{
|
|
2725
|
+
"$ref": "#/components/Collection"
|
|
2726
|
+
},
|
|
2727
|
+
{
|
|
2728
|
+
"$ref": "#/components/Comparison"
|
|
2729
|
+
},
|
|
2730
|
+
{
|
|
2731
|
+
"$ref": "#/components/Confirm"
|
|
2732
|
+
},
|
|
2733
|
+
{
|
|
2734
|
+
"$ref": "#/components/DateInput"
|
|
2735
|
+
},
|
|
2736
|
+
{
|
|
2737
|
+
"$ref": "#/components/DetailList"
|
|
2738
|
+
},
|
|
2739
|
+
{
|
|
2740
|
+
"$ref": "#/components/Disclosure"
|
|
2741
|
+
},
|
|
2742
|
+
{
|
|
2743
|
+
"$ref": "#/components/FilterPanel"
|
|
2744
|
+
},
|
|
2745
|
+
{
|
|
2746
|
+
"$ref": "#/components/Form"
|
|
2747
|
+
},
|
|
2748
|
+
{
|
|
2749
|
+
"$ref": "#/components/Group"
|
|
2750
|
+
},
|
|
2751
|
+
{
|
|
2752
|
+
"$ref": "#/components/Media"
|
|
2753
|
+
},
|
|
2754
|
+
{
|
|
2755
|
+
"$ref": "#/components/Metric"
|
|
2756
|
+
},
|
|
2757
|
+
{
|
|
2758
|
+
"$ref": "#/components/Navigation"
|
|
2759
|
+
},
|
|
2760
|
+
{
|
|
2761
|
+
"$ref": "#/components/RangeInput"
|
|
2762
|
+
},
|
|
2763
|
+
{
|
|
2764
|
+
"$ref": "#/components/Section"
|
|
2765
|
+
},
|
|
2766
|
+
{
|
|
2767
|
+
"$ref": "#/components/Status"
|
|
2768
|
+
},
|
|
2769
|
+
{
|
|
2770
|
+
"$ref": "#/components/Steps"
|
|
2771
|
+
},
|
|
2772
|
+
{
|
|
2773
|
+
"$ref": "#/components/Table"
|
|
2774
|
+
},
|
|
2775
|
+
{
|
|
2776
|
+
"$ref": "#/components/Text"
|
|
2777
|
+
},
|
|
2778
|
+
{
|
|
2779
|
+
"$ref": "#/components/TextInput"
|
|
2780
|
+
},
|
|
2781
|
+
{
|
|
2782
|
+
"$ref": "#/components/Toggle"
|
|
2783
|
+
},
|
|
2784
|
+
{
|
|
2785
|
+
"$ref": "#/components/Views"
|
|
2786
|
+
}
|
|
2787
|
+
],
|
|
2788
|
+
"discriminator": {
|
|
2789
|
+
"propertyName": "component"
|
|
2790
|
+
}
|
|
2791
|
+
},
|
|
2792
|
+
"anyFunction": {
|
|
2793
|
+
"oneOf": [
|
|
2794
|
+
{
|
|
2795
|
+
"$ref": "#/functions/dismiss"
|
|
2796
|
+
},
|
|
2797
|
+
{
|
|
2798
|
+
"$ref": "#/functions/back"
|
|
2799
|
+
},
|
|
2800
|
+
{
|
|
2801
|
+
"$ref": "#/functions/next"
|
|
2802
|
+
}
|
|
2803
|
+
]
|
|
2804
|
+
}
|
|
2805
|
+
}
|
|
2806
|
+
}
|