@polyxd/runtime 0.4.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 +224 -0
- package/README.md +85 -0
- package/dist/adapters/anthropic.d.ts +22 -0
- package/dist/adapters/anthropic.js +48 -0
- package/dist/adapters/anthropic.js.map +1 -0
- package/dist/adapters/gemini.d.ts +14 -0
- package/dist/adapters/gemini.js +42 -0
- package/dist/adapters/gemini.js.map +1 -0
- package/dist/adapters/http.d.ts +25 -0
- package/dist/adapters/http.js +92 -0
- package/dist/adapters/http.js.map +1 -0
- package/dist/adapters/openai.d.ts +31 -0
- package/dist/adapters/openai.js +89 -0
- package/dist/adapters/openai.js.map +1 -0
- package/dist/audit.d.ts +17 -0
- package/dist/audit.js +48 -0
- package/dist/audit.js.map +1 -0
- package/dist/catalog.generated.d.ts +4 -0
- package/dist/catalog.generated.js +618 -0
- package/dist/catalog.generated.js.map +1 -0
- package/dist/direction.d.ts +22 -0
- package/dist/direction.js +95 -0
- package/dist/direction.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/memory.d.ts +25 -0
- package/dist/memory.js +38 -0
- package/dist/memory.js.map +1 -0
- package/dist/parse.d.ts +15 -0
- package/dist/parse.js +35 -0
- package/dist/parse.js.map +1 -0
- package/dist/prompt.d.ts +47 -0
- package/dist/prompt.js +242 -0
- package/dist/prompt.js.map +1 -0
- package/dist/runtime.d.ts +131 -0
- package/dist/runtime.js +190 -0
- package/dist/runtime.js.map +1 -0
- package/dist/types.d.ts +104 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -0
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
export const SPEC_VERSION = "0.3.0";
|
|
2
|
+
export const COMPONENTS = [
|
|
3
|
+
{
|
|
4
|
+
"name": "Action",
|
|
5
|
+
"shell": false,
|
|
6
|
+
"line": "- Action(label*: text|{path}, action*: {event:{name,context?}}, emphasis: primary|secondary|tertiary, tone: default|danger, disabled: bool|{path}, description: text|{path}, copy: text|{path}, shortcut: string)\n A button that triggers a host capability. Use for: Anything the user can do that isn't typing or choosing."
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
"name": "ActionBar",
|
|
10
|
+
"shell": false,
|
|
11
|
+
"line": "- ActionBar(children*: [ids])\n The set of actions for a surface or section; the renderer places it where that platform expects. Use for: Two or more actions that apply to the whole surface or section."
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
"name": "ActionMenu",
|
|
15
|
+
"shell": false,
|
|
16
|
+
"line": "- ActionMenu(label*: text|{path}, kind: overflow|dropdown|split|context, children*: [ids], primary: id)\n Secondary actions behind one control: an overflow menu, a dropdown, a split button or a context menu. Use for: Three or more secondary actions on a row, a card or a page header; One usual action with rarer alternatives (split: 'Save' with 'Save as draft')."
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
"name": "AppBar",
|
|
20
|
+
"shell": true,
|
|
21
|
+
"line": "- AppBar(title*: text|{path}, brand: text|{path}, leading: id, search: id, actions: id, account: id, variant: standard|large|compact, sticky: boolean)\n The bar at the top of the product: brand or title, a leading action, search, trailing actions and the account. Use for: The header region of a Frame; A product that needs a persistent place for search, notifications and the account."
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "Card",
|
|
25
|
+
"shell": false,
|
|
26
|
+
"line": "- Card(title*: text|{path}, subtitle: text|{path}, media: id, badge: {text,tone?}, children: [ids], action: {event:{name,context?}}, progress: {value,label?})\n One self-contained entity (an account, an order, a place), optionally actionable as a whole. Use for: Items in a Collection that each represent an entity; A single entity summary in a larger surface."
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
"name": "Chart",
|
|
30
|
+
"shell": false,
|
|
31
|
+
"line": "- Chart(intent*: trend|comparison|composition|distribution|relationship|flow|hierarchy|matrix|range, data*: {path}, title*: text|{path}, summary*: text|{path}, x*: {path,label,format?}, series*: [{key?,path,label,format?}])\n A visual summary of data, always paired with a text summary. Use for: A trend, comparison, share or spread matters more than exact values."
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
"name": "Choice",
|
|
35
|
+
"shell": false,
|
|
36
|
+
"line": "- Choice(label*: text|{path}, options*: [{value,label}]|{path,valuePath,labelPath}, value*: {path}, mode: single|multiple, help: text|{path}, required: boolean)\n Pick one or several options from a known set. The renderer chooses the control. Use for: Any choice from a known set of options."
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
"name": "Code",
|
|
40
|
+
"shell": false,
|
|
41
|
+
"line": "- Code(text*: text|{path}, label: text|{path}, language: string, copyable: boolean, wrap: boolean, secret: bool|{path})\n Code, a command or preformatted text, shown as written and copyable. Use for: A command to run, a snippet to paste, an identifier to copy; Structured text whose spacing matters."
|
|
42
|
+
},
|
|
43
|
+
{
|
|
44
|
+
"name": "CodeInput",
|
|
45
|
+
"shell": false,
|
|
46
|
+
"line": "- CodeInput(label*: text|{path}, value*: {path}, length: integer, kind: numeric|alphanumeric, help: text|{path}, required: bool|{path}, action: {event:{name,context?}})\n A one-time code or PIN, typed into one box per character. Use for: A verification code from email or SMS; A PIN or a short recovery code."
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"name": "Collection",
|
|
50
|
+
"shell": false,
|
|
51
|
+
"line": "- Collection(items*: {path,componentId}, label*: text|{path}, empty: id, selection: none|single|multiple, selected: {path}, layout: auto|list|grid|timeline|carousel|calendar, datePath: path, page: {index?,size?,total?,action?}, bulkActions: id, reorderable: boolean, order: {path})\n A list of items from host data, each rendered with the same template. Use for: Browsing a set of similar entities; Search results."
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
"name": "ColorInput",
|
|
55
|
+
"shell": false,
|
|
56
|
+
"line": "- ColorInput(label*: text|{path}, value*: {path}, swatches: [{value,label}]|{path,valuePath,labelPath}, format: hex|rgb|hsl, alpha: boolean, help: text|{path}, required: bool|{path})\n Pick a colour: from swatches the host offers, or any colour. Use for: A colour for a label, a tag, a calendar, a theme; Choosing from a set of brand colours."
|
|
57
|
+
},
|
|
58
|
+
{
|
|
59
|
+
"name": "Columns",
|
|
60
|
+
"shell": false,
|
|
61
|
+
"line": "- Columns(children*: [ids], layout: two-thirds|one-third|halves|thirds|sidebar-start|sidebar-end, collapse: compact|medium|never, align: start|center|stretch)\n Side-by-side columns that collapse to a stack on compact layouts: a main column with a narrower one beside it, or equal halves. Use for: A form with help beside it; a record with a summary beside it; a list beside a preview; Anywhere a wide screen should use its width without the compact screen paying for it."
|
|
62
|
+
},
|
|
63
|
+
{
|
|
64
|
+
"name": "Comparison",
|
|
65
|
+
"shell": false,
|
|
66
|
+
"line": "- Comparison(items*: {path}, itemTitle*: path, attributes*: [{key,label,path,format?,better?,group?}], choose: {label,action}, recommended: text|{path}, summary: text|{path}, recommendedReason: text|{path})\n Compare a few options across the same attributes, and choose one. Use for: Choosing between 2–4 plans, products, routes or offers."
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"name": "Confirm",
|
|
70
|
+
"shell": false,
|
|
71
|
+
"line": "- Confirm(title*: text|{path}, message: text|{path}, consequence: text|{path}, summary: id, severity*: consequential|destructive, confirm*: {label,action}, cancel: {label,action}, typeToConfirm: text|{path}, amount: {value,format?}, subject: {title,subtitle?,avatar?}, consequences: [{title,detail?,icon?}])\n Asks the user to confirm a consequential or destructive action, showing what will happen. Use for: Moving money, deleting data, sending on someone's behalf, anything irreversible."
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
"name": "Custom",
|
|
75
|
+
"shell": true,
|
|
76
|
+
"line": "- Custom(name*: string, props: {}, fallback*: id, label: text|{path})\n A slot for a component the host implements itself: a logo, a brand moment, a bespoke widget. The document names it and gives it props; the product renders it, and a fallback stands in when it can't. Use for: The parts of a product that are truly its own: a logo, an illustration system, a map, a chart type the spec doesn't have; Only in authored documents: a shell or a screen a person wrote for that product."
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
"name": "DateInput",
|
|
80
|
+
"shell": false,
|
|
81
|
+
"line": "- DateInput(label*: text|{path}, value*: {path}, kind: date|time|datetime|dateRange|month|year, multiple: boolean, min: text|{path}, max: text|{path}, help: text|{path}, required: boolean)\n A date, time, date-time or date range. Use for: Any date or time entry."
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
"name": "DetailList",
|
|
85
|
+
"shell": false,
|
|
86
|
+
"line": "- DetailList(items*: [{key?,label,value,format?,total?}], title: text|{path}, variant: default|receipt, layout: rows|grid, rowAction: {event:{name,context?}})\n Label/value pairs describing one thing (a summary, a receipt, a review step). Use for: Reviewing before submitting; Showing the attributes of one entity."
|
|
87
|
+
},
|
|
88
|
+
{
|
|
89
|
+
"name": "Disclosure",
|
|
90
|
+
"shell": false,
|
|
91
|
+
"line": "- Disclosure(summary*: text|{path}, children*: [ids], open: boolean)\n Progressive disclosure: secondary content hidden behind a toggle. Use for: Details most people don't need (fees breakdown, advanced options, help text)."
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
"name": "FileInput",
|
|
95
|
+
"shell": false,
|
|
96
|
+
"line": "- FileInput(label*: text|{path}, value*: {path}, accept: [string], multiple: boolean, maxSize: integer, help: text|{path}, required: bool|{path})\n Choose or drop files to attach or upload. Use for: Attaching a document, a receipt, a photo; Importing a file the product reads."
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
"name": "FilterPanel",
|
|
100
|
+
"shell": false,
|
|
101
|
+
"line": "- FilterPanel(label: text|{path}, children*: [ids], results*: id, resultCount: {path}, clear: {event:{name,context?}})\n Filters for a list of results, with the result count. Use for: Browsing results people narrow by several attributes; More than two filters, or filters that take space (ranges, long lists)."
|
|
102
|
+
},
|
|
103
|
+
{
|
|
104
|
+
"name": "Footer",
|
|
105
|
+
"shell": true,
|
|
106
|
+
"line": "- Footer(groups: [{key,label,items}], legal*: text|{path}, aside: id)\n The bar at the bottom of the product: link groups, the legal line, locale or status. Use for: The footer region of a Frame; Public services and marketing-adjacent products where legal and help links belong at the bottom."
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
"name": "Form",
|
|
110
|
+
"shell": false,
|
|
111
|
+
"line": "- Form(children*: [ids], submit*: {label,action}, cancel: {label,action}, aside: id, layout: stacked|horizontal)\n Collects inputs and submits them together. Use for: Any set of inputs that are submitted together."
|
|
112
|
+
},
|
|
113
|
+
{
|
|
114
|
+
"name": "Frame",
|
|
115
|
+
"shell": true,
|
|
116
|
+
"line": "- Frame(header: id, navigation: id, main*: id, aside: id, footer: id, banner: id, skipTarget: boolean, width: full|contained)\n The product's frame: the regions around its screens (header, navigation, main, aside, footer, banner), with an outlet where screens and generated surfaces appear. Use for: The root of a shell document: the product's frame, authored once, that every screen sits in; A product whose navigation, header and footer should render in its design system like everything else."
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
"name": "Group",
|
|
120
|
+
"shell": false,
|
|
121
|
+
"line": "- Group(children*: [ids], label: text|{path}, arrangement: auto|inline|grid)\n Visually groups closely related items without a heading (proximity). Use for: A few items that belong together (a key figure and its caption, several metrics)."
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
"name": "Identity",
|
|
125
|
+
"shell": false,
|
|
126
|
+
"line": "- Identity(name*: text|{path}, detail: text|{path}, image: text|{path}, kind: person|team|organization, size: small|default|large, action: {event:{name,context?}}, group: {path,namePath,imagePath?,max?})\n A person, team or organisation: picture, name and details, or several of them together. Use for: Who something belongs to, was sent by or is assigned to; The recipient on a payment, the owner on a record, the members on a team."
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
"name": "Media",
|
|
130
|
+
"shell": false,
|
|
131
|
+
"line": "- Media(src: {path}, alt: text|{path}, decorative: boolean, aspect: square|landscape|portrait|auto, kind: image|video|audio|gallery|qr, poster: text|{path}, transcript: text|{path}, items: {path}, imagePath: path, altPath: path, value: text|{path})\n An image, video, audio clip, gallery or QR code supplied by the host. Use for: Photos or illustrations that help identify something (a product, a place, a person); A recording people play, or a code they scan."
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"name": "Metric",
|
|
135
|
+
"shell": false,
|
|
136
|
+
"line": "- Metric(label*: text|{path}, value*: {path}, format: {type:currency|number|percent|date|time|datetime|relativeTime|color|bytes,currency?}, change: {value,format?,favorable?}, caption: text|{path})\n A key figure with a label, and optionally its change. Use for: One to four headline numbers the user asked about."
|
|
137
|
+
},
|
|
138
|
+
{
|
|
139
|
+
"name": "Navigation",
|
|
140
|
+
"shell": false,
|
|
141
|
+
"line": "- Navigation(label: text|{path}, items*: [{key,label,group?,icon?,badge?,action}], current*: {path}, kind: main|breadcrumb|nested|toc|local, placement: auto|side|rail|bar|drawer)\n The product's main navigation. Use for: Software with sections people move between (B2B apps, dashboards); Only when the host doesn't already provide navigation."
|
|
142
|
+
},
|
|
143
|
+
{
|
|
144
|
+
"name": "Outlet",
|
|
145
|
+
"shell": true,
|
|
146
|
+
"line": "- Outlet(label: text|{path}, loading: id)\n Where the current screen renders inside a Frame: the host fills it with a screen document or a generated surface. Use for: The main region of a Frame."
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
"name": "Panel",
|
|
150
|
+
"shell": false,
|
|
151
|
+
"line": "- Panel(kind: dialog|drawer|sheet|popover, title*: text|{path}, children*: [ids], actions: id, open: bool|{path}, dismissible: boolean, size: small|default|large)\n Content over the current view: a dialog, a drawer, a bottom sheet or a popover, opened from an action and dismissed to return. Use for: A short task on top of the page: edit one thing, pick one thing, see one record; Detail the person asked for that shouldn't replace where they are."
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"name": "Progress",
|
|
155
|
+
"shell": false,
|
|
156
|
+
"line": "- Progress(label*: text|{path}, value*: number|{path}, max: number|{path}, kind: bar|ring|meter, caption: text|{path}, format: {type:currency|number|percent|date|time|datetime|relativeTime|color|bytes,currency?}, tone: neutral|info|success|warning|danger, thresholds: {warning?,danger?}, indeterminate: bool|{path})\n How far along something is, or how much of a bounded amount is used: a bar, a ring or a meter. Use for: A task that takes time, with a known share done; How much of a quota, budget or capacity is used."
|
|
157
|
+
},
|
|
158
|
+
{
|
|
159
|
+
"name": "RangeInput",
|
|
160
|
+
"shell": false,
|
|
161
|
+
"line": "- RangeInput(label*: text|{path}, value*: {path}, min*: number, max*: number, step: number, format: {type:currency|number|percent|date|time|datetime|relativeTime|color|bytes,currency?}, mode: single|range)\n A number, or a range between two numbers, within known bounds. Use for: Approximate values within a range (budget cap, volume); A price or date range for filtering (mode 'range')."
|
|
162
|
+
},
|
|
163
|
+
{
|
|
164
|
+
"name": "Rating",
|
|
165
|
+
"shell": false,
|
|
166
|
+
"line": "- Rating(label*: text|{path}, value*: {path}, max: integer, readOnly: bool|{path}, count: number|{path}, help: text|{path}, required: bool|{path}, action: {event:{name,context?}})\n A score out of N: given by the person, or shown as others gave it. Use for: Asking how something went, out of five; Showing a product's or place's rating with the count behind it."
|
|
167
|
+
},
|
|
168
|
+
{
|
|
169
|
+
"name": "Section",
|
|
170
|
+
"shell": false,
|
|
171
|
+
"line": "- Section(title*: text|{path}, description: text|{path}, children*: [ids])\n A titled region of the surface that groups related content under a heading. Use for: The surface has two or more distinct topics (e.g. 'Recipient' and 'Amount'); Content would otherwise exceed one screen and needs signposting."
|
|
172
|
+
},
|
|
173
|
+
{
|
|
174
|
+
"name": "Split",
|
|
175
|
+
"shell": false,
|
|
176
|
+
"line": "- Split(primary*: id, detail*: id, selected*: {path}, empty: id, ratio: narrow|balanced|wide, resizable: boolean)\n Master and detail side by side: a list that stays while the chosen item's detail shows beside it; on compact layouts the detail replaces the list. Use for: Mail, tickets, messages, files: a list people move through while reading; Settings with many sections on wide screens."
|
|
177
|
+
},
|
|
178
|
+
{
|
|
179
|
+
"name": "Status",
|
|
180
|
+
"shell": false,
|
|
181
|
+
"line": "- Status(kind*: info|success|warning|error|empty|loading|undo, title*: text|{path}, message: text|{path}, action: id, icon: lock|trash|clock|tag|info|alert|mail|shield|search|book|inbox|check, variant: default|inline)\n Feedback about state: info, success, warning, error, empty or loading. Use for: Results of an action; Empty collections."
|
|
182
|
+
},
|
|
183
|
+
{
|
|
184
|
+
"name": "Steps",
|
|
185
|
+
"shell": false,
|
|
186
|
+
"line": "- Steps(steps*: [{key,title,content,status?}], kind: wizard|tasklist|guide, current: number|{path}, finish*: {label,action})\n A task split into ordered steps with visible progress. Use for: Tasks with dependent stages or too many inputs for one view (checkout, onboarding)."
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
"name": "Table",
|
|
190
|
+
"shell": false,
|
|
191
|
+
"line": "- Table(rows*: {path}, caption*: text|{path}, columns*: [{key,label,path,format?,kind?,align?,tones?,sortable?,avatarPath?,secondaryPath?}], rowAction: {event:{name,context?}}, empty: id, sort: {column,direction?,action?}, selection: none|multiple, selected: {path}, rowValuePath: path, bulkActions: id, rowActions: id, expandable: boolean, detail: id, toolbar: id, search: id, views: [{key,label,count?,action?}], view: {path}, page: {index?,size?,total?,action?})\n Tabular data: many items sharing the same attributes. Use for: Scanning or comparing many rows by several attributes; Records people scan, sort, select and act on in bulk (B2B lists)."
|
|
192
|
+
},
|
|
193
|
+
{
|
|
194
|
+
"name": "Tag",
|
|
195
|
+
"shell": false,
|
|
196
|
+
"line": "- Tag(label*: text|{path}, kind: label|status|count, tone: neutral|info|success|warning|danger, count: number|{path}, remove: {event:{name,context?}})\n A short label, status or count attached to something else. Use for: The state of a record, next to its name: 'Past due', 'Draft', 'Live'; A category or label a thing carries."
|
|
197
|
+
},
|
|
198
|
+
{
|
|
199
|
+
"name": "Text",
|
|
200
|
+
"shell": false,
|
|
201
|
+
"line": "- Text(text*: text|{path}, variant: body|supporting|caption|rich|list|quote, format: {type:currency|number|percent|date|time|datetime|relativeTime|color|bytes,currency?}, items: {path}, itemPath: path, ordered: boolean, cite: text|{path})\n A run of text. Use for: Explanations, instructions, messages."
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
"name": "TextInput",
|
|
205
|
+
"shell": false,
|
|
206
|
+
"line": "- TextInput(label*: text|{path}, value*: {path}, kind: text|multiline|number|currency|email|phone|url|search|suggestions|richtext|tags|mentions|code|masked|inline, options: [{value,label}]|{path,valuePath,labelPath}, mask: string, currency: text|{path}, help: text|{path}, required: boolean, validation: {min?,max?,minLength?,maxLength?,message?}, autocomplete: string, placeholder: text|{path}, size: default|hero)\n A single text-like value: text, number, email, phone, currency, search or long text. Use for: Free-form values the user types."
|
|
207
|
+
},
|
|
208
|
+
{
|
|
209
|
+
"name": "Toggle",
|
|
210
|
+
"shell": false,
|
|
211
|
+
"line": "- Toggle(label*: text|{path}, value*: {path}, description: text|{path}, action: {event:{name,context?}})\n An on/off setting. Use for: Settings that take effect immediately; A single yes/no inside a form."
|
|
212
|
+
},
|
|
213
|
+
{
|
|
214
|
+
"name": "Tree",
|
|
215
|
+
"shell": false,
|
|
216
|
+
"line": "- Tree(label*: text|{path}, items*: {path}, labelPath*: path, childrenPath*: path, valuePath: path, detailPath: path, selection: none|single|multiple, selected: {path}, expanded: {path}, action: {event:{name,context?}})\n A hierarchy people expand, browse and pick from: folders, an org chart, nested categories. Use for: Things that contain things: folders and files, an organisation, nested categories; Picking a place in a hierarchy (move to folder, choose a category)."
|
|
217
|
+
},
|
|
218
|
+
{
|
|
219
|
+
"name": "Views",
|
|
220
|
+
"shell": false,
|
|
221
|
+
"line": "- Views(views*: [{key,label,content,count?}], selected: {path}, variant: tabs|segmented)\n Switch between alternative views of the same subject (tabs). Use for: 2–6 peer views of the same data (Overview / Transactions / Settings)."
|
|
222
|
+
}
|
|
223
|
+
];
|
|
224
|
+
export const PATTERNS = [
|
|
225
|
+
{
|
|
226
|
+
"id": "compare-and-choose",
|
|
227
|
+
"name": "Compare and choose",
|
|
228
|
+
"summary": "Put a few options side by side on the same attributes, mark what is better, recommend when there's a clear fit, and let the user choose.",
|
|
229
|
+
"whenToUse": [
|
|
230
|
+
"Choosing between 2–4 plans, products, routes or offers"
|
|
231
|
+
],
|
|
232
|
+
"structure": [
|
|
233
|
+
"Comparison with attributes in the same order for every option",
|
|
234
|
+
"Optional recommendation with a one-line reason",
|
|
235
|
+
"A choose action per option"
|
|
236
|
+
],
|
|
237
|
+
"checks": [
|
|
238
|
+
{
|
|
239
|
+
"id": "one-comparison",
|
|
240
|
+
"description": "Exactly one Comparison",
|
|
241
|
+
"severity": "error",
|
|
242
|
+
"rule": {
|
|
243
|
+
"check": "contains",
|
|
244
|
+
"component": "Comparison",
|
|
245
|
+
"min": 1,
|
|
246
|
+
"max": 1
|
|
247
|
+
}
|
|
248
|
+
},
|
|
249
|
+
{
|
|
250
|
+
"id": "can-choose",
|
|
251
|
+
"description": "Each option can be chosen",
|
|
252
|
+
"severity": "error",
|
|
253
|
+
"rule": {
|
|
254
|
+
"check": "requires",
|
|
255
|
+
"component": "Comparison",
|
|
256
|
+
"props": [
|
|
257
|
+
"choose"
|
|
258
|
+
]
|
|
259
|
+
}
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
"id": "explains",
|
|
263
|
+
"description": "A one-line summary or the recommendation's reason helps the decision",
|
|
264
|
+
"severity": "warning",
|
|
265
|
+
"rule": {
|
|
266
|
+
"check": "anyOf",
|
|
267
|
+
"checks": [
|
|
268
|
+
{
|
|
269
|
+
"check": "requires",
|
|
270
|
+
"component": "Comparison",
|
|
271
|
+
"props": [
|
|
272
|
+
"summary"
|
|
273
|
+
]
|
|
274
|
+
},
|
|
275
|
+
{
|
|
276
|
+
"check": "requires",
|
|
277
|
+
"component": "Comparison",
|
|
278
|
+
"props": [
|
|
279
|
+
"recommendedReason"
|
|
280
|
+
]
|
|
281
|
+
}
|
|
282
|
+
]
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
]
|
|
286
|
+
},
|
|
287
|
+
{
|
|
288
|
+
"id": "confirm-destructive",
|
|
289
|
+
"name": "Confirm a consequential or destructive action",
|
|
290
|
+
"summary": "Before something that is hard or impossible to undo, say exactly what will happen and ask for an explicit, specific confirmation.",
|
|
291
|
+
"whenToUse": [
|
|
292
|
+
"Moving money",
|
|
293
|
+
"Deleting data or accounts",
|
|
294
|
+
"Sending or publishing on someone's behalf",
|
|
295
|
+
"Any capability with risk level 'consequential' or 'destructive'"
|
|
296
|
+
],
|
|
297
|
+
"structure": [
|
|
298
|
+
"Confirm (title names the action and object)",
|
|
299
|
+
"Consequence: what happens and whether it can be undone",
|
|
300
|
+
"Optional DetailList summary of what is being confirmed",
|
|
301
|
+
"Cancel (least destructive, focused first) and a confirm button that repeats the verb"
|
|
302
|
+
],
|
|
303
|
+
"checks": [
|
|
304
|
+
{
|
|
305
|
+
"id": "root-is-confirm",
|
|
306
|
+
"description": "The surface is a confirmation dialog",
|
|
307
|
+
"severity": "error",
|
|
308
|
+
"rule": {
|
|
309
|
+
"check": "rootIs",
|
|
310
|
+
"components": [
|
|
311
|
+
"Confirm"
|
|
312
|
+
]
|
|
313
|
+
}
|
|
314
|
+
},
|
|
315
|
+
{
|
|
316
|
+
"id": "states-consequence",
|
|
317
|
+
"description": "It says what will happen and whether it can be undone",
|
|
318
|
+
"severity": "error",
|
|
319
|
+
"rule": {
|
|
320
|
+
"check": "requires",
|
|
321
|
+
"component": "Confirm",
|
|
322
|
+
"props": [
|
|
323
|
+
"consequence"
|
|
324
|
+
]
|
|
325
|
+
}
|
|
326
|
+
},
|
|
327
|
+
{
|
|
328
|
+
"id": "specific-confirm-label",
|
|
329
|
+
"description": "The confirm button says what it does, never just 'OK' or 'Yes'",
|
|
330
|
+
"severity": "error",
|
|
331
|
+
"rule": {
|
|
332
|
+
"check": "noLabelMatches",
|
|
333
|
+
"pattern": "^(OK|Ok|Yes|Confirm|Submit|Done)$"
|
|
334
|
+
}
|
|
335
|
+
},
|
|
336
|
+
{
|
|
337
|
+
"id": "typed-for-destructive",
|
|
338
|
+
"description": "Irreversible, high-impact deletions ask the user to type a confirmation",
|
|
339
|
+
"severity": "warning",
|
|
340
|
+
"rule": {
|
|
341
|
+
"check": "requires",
|
|
342
|
+
"component": "Confirm",
|
|
343
|
+
"where": {
|
|
344
|
+
"severity": "destructive"
|
|
345
|
+
},
|
|
346
|
+
"props": [
|
|
347
|
+
"typeToConfirm"
|
|
348
|
+
]
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
]
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"id": "filter-and-browse",
|
|
355
|
+
"name": "Filter and browse",
|
|
356
|
+
"summary": "Narrow a large set with a few filters placed before the results, and explain empty results.",
|
|
357
|
+
"whenToUse": [
|
|
358
|
+
"Searching or browsing many items"
|
|
359
|
+
],
|
|
360
|
+
"structure": [
|
|
361
|
+
"Filters (search, Choice, RangeInput) before the results",
|
|
362
|
+
"Result count in the results label",
|
|
363
|
+
"Collection or Table of results with an empty state that says how to widen the search"
|
|
364
|
+
],
|
|
365
|
+
"checks": [
|
|
366
|
+
{
|
|
367
|
+
"id": "has-results",
|
|
368
|
+
"description": "Results are shown as a Collection or Table",
|
|
369
|
+
"severity": "error",
|
|
370
|
+
"rule": {
|
|
371
|
+
"check": "anyOf",
|
|
372
|
+
"checks": [
|
|
373
|
+
{
|
|
374
|
+
"check": "contains",
|
|
375
|
+
"component": "Collection"
|
|
376
|
+
},
|
|
377
|
+
{
|
|
378
|
+
"check": "contains",
|
|
379
|
+
"component": "Table"
|
|
380
|
+
}
|
|
381
|
+
]
|
|
382
|
+
}
|
|
383
|
+
},
|
|
384
|
+
{
|
|
385
|
+
"id": "filters-first",
|
|
386
|
+
"description": "Filters come before the results",
|
|
387
|
+
"severity": "error",
|
|
388
|
+
"rule": {
|
|
389
|
+
"check": "precedes",
|
|
390
|
+
"before": [
|
|
391
|
+
"TextInput",
|
|
392
|
+
"Choice",
|
|
393
|
+
"RangeInput",
|
|
394
|
+
"DateInput"
|
|
395
|
+
],
|
|
396
|
+
"after": [
|
|
397
|
+
"Collection",
|
|
398
|
+
"Table"
|
|
399
|
+
]
|
|
400
|
+
}
|
|
401
|
+
},
|
|
402
|
+
{
|
|
403
|
+
"id": "empty-state",
|
|
404
|
+
"description": "Empty results explain what to do",
|
|
405
|
+
"severity": "error",
|
|
406
|
+
"rule": {
|
|
407
|
+
"check": "allOf",
|
|
408
|
+
"checks": [
|
|
409
|
+
{
|
|
410
|
+
"check": "requires",
|
|
411
|
+
"component": "Collection",
|
|
412
|
+
"props": [
|
|
413
|
+
"empty"
|
|
414
|
+
]
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
"check": "requires",
|
|
418
|
+
"component": "Table",
|
|
419
|
+
"props": [
|
|
420
|
+
"empty"
|
|
421
|
+
]
|
|
422
|
+
}
|
|
423
|
+
]
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
]
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"id": "multi-step-form",
|
|
430
|
+
"name": "Multi-step form",
|
|
431
|
+
"summary": "Collect information in small, ordered chunks: one form when short, Steps when long or dependent.",
|
|
432
|
+
"whenToUse": [
|
|
433
|
+
"Any data entry task",
|
|
434
|
+
"Tasks whose later questions depend on earlier answers"
|
|
435
|
+
],
|
|
436
|
+
"structure": [
|
|
437
|
+
"Form (≤ 6 inputs) or Steps with one topic per step",
|
|
438
|
+
"Labels above inputs, help text under labels",
|
|
439
|
+
"Verb-first submit label as the single primary action"
|
|
440
|
+
],
|
|
441
|
+
"checks": [
|
|
442
|
+
{
|
|
443
|
+
"id": "form-or-steps",
|
|
444
|
+
"description": "Inputs are collected in a Form or in Steps",
|
|
445
|
+
"severity": "error",
|
|
446
|
+
"rule": {
|
|
447
|
+
"check": "anyOf",
|
|
448
|
+
"checks": [
|
|
449
|
+
{
|
|
450
|
+
"check": "contains",
|
|
451
|
+
"component": "Form"
|
|
452
|
+
},
|
|
453
|
+
{
|
|
454
|
+
"check": "contains",
|
|
455
|
+
"component": "Steps"
|
|
456
|
+
}
|
|
457
|
+
]
|
|
458
|
+
}
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
"id": "short-views",
|
|
462
|
+
"description": "No more than 6 inputs are visible at once; longer tasks are split into steps",
|
|
463
|
+
"severity": "error",
|
|
464
|
+
"rule": {
|
|
465
|
+
"check": "maxInputsPerView",
|
|
466
|
+
"max": 6
|
|
467
|
+
}
|
|
468
|
+
},
|
|
469
|
+
{
|
|
470
|
+
"id": "specific-submit",
|
|
471
|
+
"description": "The submit button says what happens next",
|
|
472
|
+
"severity": "warning",
|
|
473
|
+
"rule": {
|
|
474
|
+
"check": "noLabelMatches",
|
|
475
|
+
"pattern": "^(OK|Ok|Yes|Confirm|Submit|Done)$"
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
]
|
|
479
|
+
},
|
|
480
|
+
{
|
|
481
|
+
"id": "review-and-submit",
|
|
482
|
+
"name": "Review and submit",
|
|
483
|
+
"summary": "Before committing, show everything that will be submitted in a scannable summary, then one clear submit action.",
|
|
484
|
+
"whenToUse": [
|
|
485
|
+
"Bookings, orders, applications: any multi-field commitment"
|
|
486
|
+
],
|
|
487
|
+
"structure": [
|
|
488
|
+
"Sections with DetailLists summarising what will be submitted",
|
|
489
|
+
"Any final acknowledgements (terms)",
|
|
490
|
+
"Submit label states the commitment ('Book and pay £312')"
|
|
491
|
+
],
|
|
492
|
+
"checks": [
|
|
493
|
+
{
|
|
494
|
+
"id": "has-summary",
|
|
495
|
+
"description": "What will be submitted is shown as label/value pairs",
|
|
496
|
+
"severity": "error",
|
|
497
|
+
"rule": {
|
|
498
|
+
"check": "contains",
|
|
499
|
+
"component": "DetailList"
|
|
500
|
+
}
|
|
501
|
+
},
|
|
502
|
+
{
|
|
503
|
+
"id": "submits",
|
|
504
|
+
"description": "There is a way to submit",
|
|
505
|
+
"severity": "error",
|
|
506
|
+
"rule": {
|
|
507
|
+
"check": "anyOf",
|
|
508
|
+
"checks": [
|
|
509
|
+
{
|
|
510
|
+
"check": "contains",
|
|
511
|
+
"component": "Form"
|
|
512
|
+
},
|
|
513
|
+
{
|
|
514
|
+
"check": "contains",
|
|
515
|
+
"component": "Steps"
|
|
516
|
+
}
|
|
517
|
+
]
|
|
518
|
+
}
|
|
519
|
+
},
|
|
520
|
+
{
|
|
521
|
+
"id": "summary-before-inputs",
|
|
522
|
+
"description": "Review content comes before any last inputs",
|
|
523
|
+
"severity": "warning",
|
|
524
|
+
"rule": {
|
|
525
|
+
"check": "anyOf",
|
|
526
|
+
"checks": [
|
|
527
|
+
{
|
|
528
|
+
"check": "not",
|
|
529
|
+
"checks": [
|
|
530
|
+
{
|
|
531
|
+
"check": "contains",
|
|
532
|
+
"component": "Toggle"
|
|
533
|
+
}
|
|
534
|
+
]
|
|
535
|
+
},
|
|
536
|
+
{
|
|
537
|
+
"check": "precedes",
|
|
538
|
+
"before": [
|
|
539
|
+
"DetailList"
|
|
540
|
+
],
|
|
541
|
+
"after": [
|
|
542
|
+
"Toggle"
|
|
543
|
+
]
|
|
544
|
+
}
|
|
545
|
+
]
|
|
546
|
+
}
|
|
547
|
+
},
|
|
548
|
+
{
|
|
549
|
+
"id": "commitment-label",
|
|
550
|
+
"description": "The submit label states the commitment, not 'Submit'",
|
|
551
|
+
"severity": "error",
|
|
552
|
+
"rule": {
|
|
553
|
+
"check": "noLabelMatches",
|
|
554
|
+
"pattern": "^(OK|Ok|Yes|Confirm|Submit|Done|Continue)$"
|
|
555
|
+
}
|
|
556
|
+
}
|
|
557
|
+
]
|
|
558
|
+
},
|
|
559
|
+
{
|
|
560
|
+
"id": "undo-over-confirm",
|
|
561
|
+
"name": "Undo instead of confirm",
|
|
562
|
+
"summary": "For everyday actions that can be reversed, do them straight away and offer Undo, instead of asking 'Are you sure?' every time.",
|
|
563
|
+
"whenToUse": [
|
|
564
|
+
"Archiving, removing from a list, marking done, moving to trash",
|
|
565
|
+
"Any capability with risk 'none' or 'low' that names an 'undo' capability"
|
|
566
|
+
],
|
|
567
|
+
"structure": [
|
|
568
|
+
"The action runs when chosen",
|
|
569
|
+
"Status (kind 'undo') says what happened, naming the thing",
|
|
570
|
+
"Its action is Undo, wired to the reversing capability"
|
|
571
|
+
],
|
|
572
|
+
"checks": [
|
|
573
|
+
{
|
|
574
|
+
"id": "has-undo-status",
|
|
575
|
+
"description": "An undo notice says what happened",
|
|
576
|
+
"severity": "error",
|
|
577
|
+
"rule": {
|
|
578
|
+
"check": "contains",
|
|
579
|
+
"component": "Status",
|
|
580
|
+
"where": {
|
|
581
|
+
"kind": "undo"
|
|
582
|
+
},
|
|
583
|
+
"min": 1
|
|
584
|
+
}
|
|
585
|
+
},
|
|
586
|
+
{
|
|
587
|
+
"id": "undo-has-action",
|
|
588
|
+
"description": "The notice offers Undo",
|
|
589
|
+
"severity": "error",
|
|
590
|
+
"rule": {
|
|
591
|
+
"check": "requires",
|
|
592
|
+
"component": "Status",
|
|
593
|
+
"where": {
|
|
594
|
+
"kind": "undo"
|
|
595
|
+
},
|
|
596
|
+
"props": [
|
|
597
|
+
"action"
|
|
598
|
+
]
|
|
599
|
+
}
|
|
600
|
+
},
|
|
601
|
+
{
|
|
602
|
+
"id": "no-confirm",
|
|
603
|
+
"description": "Nothing asks for confirmation first",
|
|
604
|
+
"severity": "warning",
|
|
605
|
+
"rule": {
|
|
606
|
+
"check": "not",
|
|
607
|
+
"checks": [
|
|
608
|
+
{
|
|
609
|
+
"check": "contains",
|
|
610
|
+
"component": "Confirm"
|
|
611
|
+
}
|
|
612
|
+
]
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
]
|
|
616
|
+
}
|
|
617
|
+
];
|
|
618
|
+
//# sourceMappingURL=catalog.generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"catalog.generated.js","sourceRoot":"","sources":["../src/catalog.generated.ts"],"names":[],"mappings":"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"}
|