@optionfactory/fml 8.0.3 → 9.0.0-rc10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. package/LICENSE.md +7 -0
  2. package/README.md +87 -0
  3. package/dist/client-errors.iife.js +30 -9
  4. package/dist/client-errors.iife.js.map +1 -1
  5. package/dist/client-errors.iife.min.js +1 -1
  6. package/dist/client-errors.iife.min.js.map +1 -1
  7. package/dist/custom-elements.json +1622 -415
  8. package/dist/fml.css +21 -10
  9. package/dist/fml.css.map +1 -1
  10. package/dist/fml.d.mts +3 -1322
  11. package/dist/fml.iife.js +5767 -2313
  12. package/dist/fml.iife.js.map +1 -1
  13. package/dist/fml.iife.min.js +1 -1
  14. package/dist/fml.iife.min.js.map +1 -1
  15. package/dist/fml.min.mjs +1 -1
  16. package/dist/fml.min.mjs.map +1 -1
  17. package/dist/fml.mjs +6 -8737
  18. package/dist/fml.mjs.map +1 -1
  19. package/dist/ftl.d.mts +430 -92
  20. package/dist/ftl.iife.js +1314 -809
  21. package/dist/ftl.iife.js.map +1 -1
  22. package/dist/ftl.iife.min.js +1 -1
  23. package/dist/ftl.iife.min.js.map +1 -1
  24. package/dist/ftl.min.mjs +1 -1
  25. package/dist/ftl.min.mjs.map +1 -1
  26. package/dist/ftl.mjs +1313 -810
  27. package/dist/ftl.mjs.map +1 -1
  28. package/dist/ful.css +21 -10
  29. package/dist/ful.css.map +1 -1
  30. package/dist/ful.d.mts +973 -252
  31. package/dist/ful.iife.js +4176 -1416
  32. package/dist/ful.iife.js.map +1 -1
  33. package/dist/ful.iife.min.js +1 -1
  34. package/dist/ful.iife.min.js.map +1 -1
  35. package/dist/ful.min.mjs +1 -1
  36. package/dist/ful.min.mjs.map +1 -1
  37. package/dist/ful.mjs +4163 -1416
  38. package/dist/ful.mjs.map +1 -1
  39. package/dist/httpc.d.mts +114 -19
  40. package/dist/httpc.iife.js +253 -83
  41. package/dist/httpc.iife.js.map +1 -1
  42. package/dist/httpc.iife.min.js +1 -1
  43. package/dist/httpc.iife.min.js.map +1 -1
  44. package/dist/httpc.min.mjs +1 -1
  45. package/dist/httpc.min.mjs.map +1 -1
  46. package/dist/httpc.mjs +250 -84
  47. package/dist/httpc.mjs.map +1 -1
  48. package/dist/vscode.html-custom-data.json +660 -58
  49. package/dist/web-types.json +1577 -354
  50. package/package.json +16 -8
@@ -2,22 +2,148 @@
2
2
  "version": 1.1,
3
3
  "tags": [
4
4
  {
5
- "name": "ful-spinner",
6
- "description": "A busy indicator. ful-form shows and hides the ones it contains while submitting.",
7
- "attributes": []
5
+ "name": "ful-tooltip",
6
+ "description": "An info affordance: a themed icon button toggling a small popover with a short explanation, opened by click and by keyboard like a button, dismissed by Escape or an outside click. placement picks the side the note sits on: top (default), bottom, left or right.",
7
+ "attributes": [
8
+ {
9
+ "name": "placement",
10
+ "description": "Which side of the trigger the note opens on: top (the default), bottom, left or right. Above by default because a note opening downwards covers the control the marker explains. The library places the note itself on every platform, so the side is the same everywhere. (string)"
11
+ },
12
+ {
13
+ "name": "icon",
14
+ "description": "The ful-icon the marker shows, for a tooltip meaning something other than plain information. Defaults to the page's Tooltip.config.icon; a name the library does not paint is declared by the page as ful-icon[name='...'] { mask-image: ... }. (string)"
15
+ },
16
+ {
17
+ "name": "describes",
18
+ "description": "For a tooltip standing in a field: the note joins the accessible description of that field's control, announced on reaching the field rather than only on opening the marker, and the marker leaves the tab order so a form of hinted fields costs no extra keystrokes to walk. The marker stays clickable, and keeps its tab stop wherever nothing took the note. (boolean)"
19
+ }
20
+ ]
21
+ },
22
+ {
23
+ "name": "ful-dialog",
24
+ "description": "A modal dialog on the native platform: header, body and buttons, the header attribute naming its heading, opened by any element carrying dialog-target set to its id, or programmatically through open()/ask(), which answer with how the dialog ended, or through update(callback), which opens it on a loading state and then shows either what the callback delivered or the problems of a rejection. Longer explanations belong here, shorter ones in ful-tooltip.",
25
+ "attributes": [
26
+ {
27
+ "name": "header",
28
+ "description": "The dialog's title, shown in its header. Text only; slot content into the body instead for anything richer. (string)"
29
+ },
30
+ {
31
+ "name": "requires-answer",
32
+ "description": "For the dialog that must be answered: the close button is not rendered and Escape is refused, so the only way out is a button carrying a result. Both, since a close button withheld while Escape still worked would be decoration rather than a rule. (boolean)"
33
+ },
34
+ {
35
+ "name": "close-on-submit",
36
+ "description": "For the dialog whose answer is a form succeeding rather than a button being pressed: its own form submitting successfully closes it and answers with the response. Opt in, and its own form only, a ful-form the body holds directly, since a ful-table wraps its filters in a form of its own and searching one is not the dialog being answered. Such a dialog renders no acknowledge button of its own, the form's submit being its answer. (boolean)"
37
+ }
38
+ ]
39
+ },
40
+ {
41
+ "name": "ful-drawer",
42
+ "description": "A side panel drawer on the native dialog platform: a header with its title (the title attribute, or update()'s own) and close button, and a body that opens in a loading state, then shows either the content delivered by update(title, callback) (or the slotted one, when it is never updated) or the error a rejecting callback carries. placement picks the side, end by default, start its mirror. Any element carrying dialog-target set to its id opens it too.",
43
+ "attributes": [
44
+ {
45
+ "name": "title",
46
+ "description": "The drawer's title, shown in its header. Text only, and also what update() re-titles the panel with. (string)"
47
+ },
48
+ {
49
+ "name": "placement",
50
+ "description": "Which edge the panel slides in from: end (the default) or start, following the page's writing direction. (string)"
51
+ },
52
+ {
53
+ "name": "close-on-submit",
54
+ "description": "For the drawer whose ending is a form succeeding rather than its close button being pressed: the form its content holds directly submitting successfully closes it, the close event carrying the response. Opt in, and its own form only, since a ful-table wraps its filters in a form of its own and searching one is not the drawer finishing. (boolean)"
55
+ }
56
+ ]
57
+ },
58
+ {
59
+ "name": "ful-toasts",
60
+ "description": "A transient feedback region, one per page: each show() (or a show-toast document event carrying the same detail) appends a toast that dismisses itself after its timeout, the element's timeout attribute or five seconds by default, and carries its own dismiss button. severity picks the theme and the announcement, info by default, success, warning and error, the error one announced as an alert; a Failure message shows its problems' reasons.",
61
+ "attributes": [
62
+ {
63
+ "name": "timeout",
64
+ "description": "How long a toast stands before it retires, in milliseconds; 5000 when absent. A show() may override it per toast. (number)"
65
+ }
66
+ ]
67
+ },
68
+ {
69
+ "name": "ful-tabs",
70
+ "description": "A tab panel: one visible panel at a time, announced through the tab pattern (a tablist of tab buttons, each panel a tabpanel named by its tab, the arrows and Home/End walking the tabs with automatic activation). The tabs are declared as tab elements in the tabs slot, the panels as the slotless children, paired in order; the chrome anchors on the ful-tablist style-only tag, so a subclass or foreign markup built from it keeps the look.",
71
+ "attributes": [
72
+ {
73
+ "name": "active",
74
+ "description": "The index of the visible panel, zero based, reflected as the active attribute. Clicks, the arrow keys and the property all move it, each move answering with a change event. (number)"
75
+ }
76
+ ]
77
+ },
78
+ {
79
+ "name": "ful-accordion",
80
+ "description": "An accordion over native details/summary disclosures: the platform carries the semantics, the keyboard and the toggling, the chrome paints the group (anchored on the ful-accordion-group style-only tag). With the exclusive claim the render assigns one shared name to every panel, which is the platform's own exclusive grouping: opening one closes the others.",
81
+ "attributes": [
82
+ {
83
+ "name": "exclusive",
84
+ "description": "When present, opening a panel closes the others: the native details name grouping, assigned (and assignable again) by the render. (boolean)"
85
+ }
86
+ ]
87
+ },
88
+ {
89
+ "name": "ful-wizard",
90
+ "description": "A wizard: a progress of steps over one-of-N sections. The steps are declared as step elements in the steps slot, the sections as the slotless children, paired in order; each section may carry a data-step name, which is what move() answers to, next() and prev() walk the neighbors, and the current step is the aria-current=step claim carried in lockstep by the step and its section, so the chrome, including which section is shown, follows the claim alone. Each move answers with a change event.",
91
+ "attributes": [
92
+ {
93
+ "name": "progress",
94
+ "description": "picks the progress chrome's shape over the same claims: the default shows the current step alone (any counter or dressing is the page's own), timeline the full timeline, dots a done/current/future strip, none leaves the chrome to the page. (string)"
95
+ }
96
+ ]
8
97
  },
9
98
  {
10
99
  "name": "ful-form",
11
- "description": "Wraps its content in a form, collects the values of the fields it contains and hands them to a loader on submit.",
12
- "attributes": []
100
+ "description": "Wraps its content in a form, collects the values of the fields it contains and hands them to the loader named by loader (loaders:form by default) on submit: with action the values travel as json (method, POST by default) through the request-mapper and response-mapper components when declared, without it the submit:requested listeners deliver the response themselves. Validation errors are announced politely without focus, or exactly once through focus management with scroll-on-error, and clear-invalid-on-change drops a field's problem as soon as the field changes again; global errors land in an author-provided ful-errors element, announced as an alert.",
101
+ "attributes": [
102
+ {
103
+ "name": "action",
104
+ "description": "The endpoint the values are submitted to. With it the form posts json through a RemoteJsonFormLoader; without it a LocalFormLoader hands the outcome to whatever a submit:requested listener resolves with. (string)"
105
+ },
106
+ {
107
+ "name": "method",
108
+ "description": "The http method of the remote loader, POST by default. (string)"
109
+ },
110
+ {
111
+ "name": "loader",
112
+ "description": "The registry component key of the form loader, loaders:form by default. A loader of your own implements prepare, submit and transform. (string)"
113
+ },
114
+ {
115
+ "name": "request-mapper",
116
+ "description": "A registry component key, (values, form) => request, applied to the extracted values before they are sent. (string)"
117
+ },
118
+ {
119
+ "name": "response-mapper",
120
+ "description": "A registry component key, (response, form) => mapped, applied to a successful response before it reaches submit:success. (string)"
121
+ },
122
+ {
123
+ "name": "clear-invalid-on-change",
124
+ "description": "Clears a field's custom validity as soon as that field changes again, so a server problem stops being shown the moment the user addresses it. (boolean)"
125
+ },
126
+ {
127
+ "name": "scroll-on-error",
128
+ "description": "Moves focus, and the viewport with it, to the topmost invalid field when errors land. The error live region is muted while focus moves, so each problem is announced once through the focused field rather than twice. (boolean)"
129
+ },
130
+ {
131
+ "name": "autocomplete",
132
+ "description": "The autofill token every field in the form takes unless it declares one of its own, copied onto the form element the host renders. A form cannot pass it down the way the platform would: each control carries form=\"\" so that the host is the only thing that submits, which leaves it with no form owner to inherit through, so the fields read it off the form instead. (string)"
133
+ }
134
+ ]
13
135
  },
14
136
  {
15
137
  "name": "ful-checkbox",
16
138
  "description": "A checkbox, or a switch with type=\"switch\". Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
17
139
  "attributes": [
18
140
  {
19
- "name": "value",
20
- "description": "Checked when the attribute is the string true. (boolean)"
141
+ "name": "type",
142
+ "description": "switch renders the control as a switch rather than a checkbox. The value and the semantics are unchanged. (string)"
143
+ },
144
+ {
145
+ "name": "disabled",
146
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
21
147
  },
22
148
  {
23
149
  "name": "readonly",
@@ -26,16 +152,48 @@
26
152
  {
27
153
  "name": "required",
28
154
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
155
+ },
156
+ {
157
+ "name": "value",
158
+ "description": "Checked when the attribute is the string true. (boolean)"
29
159
  }
30
160
  ]
31
161
  },
32
162
  {
33
163
  "name": "ful-input",
34
- "description": "A labelled text input. Use type to pick any native input type, or textarea. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
164
+ "description": "A labelled text input. Use type to pick any native input type, or textarea; keep names the characters that survive a keystroke and reject the ones that do not, the caret staying among the survivors, and the uppercase and trim claims shape the value before it is read; v-type=number decodes the value to a number, blank staying null and a value that does not decode kept as it is, an undeclared type defaulting to number. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
35
165
  "attributes": [
36
166
  {
37
- "name": "value",
38
- "description": "The current value. (string)"
167
+ "name": "type",
168
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
169
+ },
170
+ {
171
+ "name": "v-type",
172
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
173
+ },
174
+ {
175
+ "name": "keep",
176
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
177
+ },
178
+ {
179
+ "name": "reject",
180
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
181
+ },
182
+ {
183
+ "name": "uppercase",
184
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
185
+ },
186
+ {
187
+ "name": "trim",
188
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
189
+ },
190
+ {
191
+ "name": "autocomplete",
192
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
193
+ },
194
+ {
195
+ "name": "disabled",
196
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
39
197
  },
40
198
  {
41
199
  "name": "readonly",
@@ -45,6 +203,10 @@
45
203
  "name": "required",
46
204
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
47
205
  },
206
+ {
207
+ "name": "value",
208
+ "description": "The current value. (string)"
209
+ },
48
210
  {
49
211
  "name": "placeholder",
50
212
  "description": "Placeholder shown while the field is empty. (string)"
@@ -53,11 +215,39 @@
53
215
  },
54
216
  {
55
217
  "name": "ful-input-file",
56
- "description": "A file input with an optional dropzone and a list of the selected files, enforcing the size and count limits it declares. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
218
+ "description": "A file input with an optional dropzone and a list of the selected files, enforcing the size and count limits it declares; the noinput claim hides the picker control, the dropzone and the item list carrying the field alone. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
57
219
  "attributes": [
58
220
  {
59
- "name": "value",
60
- "description": "Only an empty value is honoured, to clear the selection: file inputs cannot be filled programmatically. (string)"
221
+ "name": "type",
222
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
223
+ },
224
+ {
225
+ "name": "v-type",
226
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
227
+ },
228
+ {
229
+ "name": "keep",
230
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
231
+ },
232
+ {
233
+ "name": "reject",
234
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
235
+ },
236
+ {
237
+ "name": "uppercase",
238
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
239
+ },
240
+ {
241
+ "name": "trim",
242
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
243
+ },
244
+ {
245
+ "name": "autocomplete",
246
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
247
+ },
248
+ {
249
+ "name": "disabled",
250
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
61
251
  },
62
252
  {
63
253
  "name": "readonly",
@@ -67,20 +257,24 @@
67
257
  "name": "required",
68
258
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
69
259
  },
260
+ {
261
+ "name": "value",
262
+ "description": "Only an empty value is honoured, to clear the selection: file inputs cannot be filled programmatically. (string)"
263
+ },
70
264
  {
71
265
  "name": "placeholder",
72
266
  "description": "Placeholder shown while the field is empty. (string)"
73
267
  },
74
268
  {
75
269
  "name": "accept",
76
- "description": "Comma separated list of accepted extensions. Files that do not match are dropped with a warning. (string)"
270
+ "description": "Comma separated list of accepted tokens: an extension (.pdf), a mime type (application/pdf) or a wildcard (image/*). Files that do not match are dropped with a warning. (string)"
77
271
  },
78
272
  {
79
273
  "name": "multiple",
80
274
  "description": "Allows selecting more than one file. (boolean)"
81
275
  },
82
276
  {
83
- "name": "itemlist",
277
+ "name": "item-list",
84
278
  "description": "Shows the list of selected files. (boolean)"
85
279
  },
86
280
  {
@@ -88,36 +282,82 @@
88
282
  "description": "Shows the dropzone. (boolean)"
89
283
  },
90
284
  {
91
- "name": "maxfiles",
285
+ "name": "max-files",
92
286
  "description": "Maximum number of files. Exceeding it clears the selection. (number)"
93
287
  },
94
288
  {
95
- "name": "maxfilesize",
289
+ "name": "max-file-size",
96
290
  "description": "Maximum size of a single file, in bytes. Larger files are dropped. (number)"
97
291
  },
98
292
  {
99
- "name": "maxtotalsize",
293
+ "name": "max-total-size",
100
294
  "description": "Maximum size of all the selected files, in bytes. Exceeding it clears the selection. (number)"
101
295
  }
102
296
  ]
103
297
  },
104
298
  {
105
299
  "name": "ful-local-date",
106
- "description": "Formats the date in its content, written as yyyy-mm-dd, in the locale of the page.",
107
- "attributes": []
300
+ "description": "Formats the date in its content, written as yyyy-mm-dd, in the locale of the page or the one its locale attribute names; default is shown when the content is empty.",
301
+ "attributes": [
302
+ {
303
+ "name": "locale",
304
+ "description": "The locale the date is formatted in, taking precedence over the page's. The platform default applies when neither names one. (string)"
305
+ },
306
+ {
307
+ "name": "default",
308
+ "description": "The text rendered when the content is blank or does not parse as a date. (string)"
309
+ }
310
+ ]
108
311
  },
109
312
  {
110
313
  "name": "ful-instant",
111
- "description": "Formats the ISO instant in its content in the locale and timezone of the page.",
112
- "attributes": []
314
+ "description": "Formats the ISO instant in its content in the locale and timezone of the page or the one its locale attribute names; default is shown when the content is empty.",
315
+ "attributes": [
316
+ {
317
+ "name": "locale",
318
+ "description": "The locale the instant is formatted in, taking precedence over the page's. The platform default applies when neither names one. (string)"
319
+ },
320
+ {
321
+ "name": "default",
322
+ "description": "The text rendered when the content is blank or does not parse as an instant. (string)"
323
+ }
324
+ ]
113
325
  },
114
326
  {
115
327
  "name": "ful-input-local-date",
116
328
  "description": "A date input. Its bounds accept a date, now, or an offset such as +1d, -2m or +3y. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
117
329
  "attributes": [
118
330
  {
119
- "name": "value",
120
- "description": "The current value. (string)"
331
+ "name": "type",
332
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
333
+ },
334
+ {
335
+ "name": "v-type",
336
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
337
+ },
338
+ {
339
+ "name": "keep",
340
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
341
+ },
342
+ {
343
+ "name": "reject",
344
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
345
+ },
346
+ {
347
+ "name": "uppercase",
348
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
349
+ },
350
+ {
351
+ "name": "trim",
352
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
353
+ },
354
+ {
355
+ "name": "autocomplete",
356
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
357
+ },
358
+ {
359
+ "name": "disabled",
360
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
121
361
  },
122
362
  {
123
363
  "name": "readonly",
@@ -127,10 +367,18 @@
127
367
  "name": "required",
128
368
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
129
369
  },
370
+ {
371
+ "name": "value",
372
+ "description": "The current value. (string)"
373
+ },
130
374
  {
131
375
  "name": "placeholder",
132
376
  "description": "Placeholder shown while the field is empty. (string)"
133
377
  },
378
+ {
379
+ "name": "step",
380
+ "description": "Step between selectable dates, in days. (string)"
381
+ },
134
382
  {
135
383
  "name": "min",
136
384
  "description": "Earliest selectable date. Accepts a date, now, or a day, month or year offset. (string)"
@@ -138,10 +386,6 @@
138
386
  {
139
387
  "name": "max",
140
388
  "description": "Latest selectable date. Accepts a date, now, or a day, month or year offset. (string)"
141
- },
142
- {
143
- "name": "step",
144
- "description": "Step between selectable dates, in days. (string)"
145
389
  }
146
390
  ]
147
391
  },
@@ -150,8 +394,36 @@
150
394
  "description": "A time input. Its bounds accept a time, now, or an hour or minute offset, snapped to the step grid. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
151
395
  "attributes": [
152
396
  {
153
- "name": "value",
154
- "description": "The current value. (string)"
397
+ "name": "type",
398
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
399
+ },
400
+ {
401
+ "name": "v-type",
402
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
403
+ },
404
+ {
405
+ "name": "keep",
406
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
407
+ },
408
+ {
409
+ "name": "reject",
410
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
411
+ },
412
+ {
413
+ "name": "uppercase",
414
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
415
+ },
416
+ {
417
+ "name": "trim",
418
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
419
+ },
420
+ {
421
+ "name": "autocomplete",
422
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
423
+ },
424
+ {
425
+ "name": "disabled",
426
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
155
427
  },
156
428
  {
157
429
  "name": "readonly",
@@ -161,10 +433,18 @@
161
433
  "name": "required",
162
434
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
163
435
  },
436
+ {
437
+ "name": "value",
438
+ "description": "The current value. (string)"
439
+ },
164
440
  {
165
441
  "name": "placeholder",
166
442
  "description": "Placeholder shown while the field is empty. (string)"
167
443
  },
444
+ {
445
+ "name": "step",
446
+ "description": "Step between selectable times, in seconds. The bounds are truncated to this grid. (string)"
447
+ },
168
448
  {
169
449
  "name": "min",
170
450
  "description": "Earliest selectable time. Accepts a time, now, or an offset such as +2h or -30m. (string)"
@@ -172,10 +452,6 @@
172
452
  {
173
453
  "name": "max",
174
454
  "description": "Latest selectable time. Accepts a time, now, or an offset such as +2h or -30m. (string)"
175
- },
176
- {
177
- "name": "step",
178
- "description": "Step between selectable times, in seconds. The bounds are truncated to this grid. (string)"
179
455
  }
180
456
  ]
181
457
  },
@@ -184,8 +460,36 @@
184
460
  "description": "A datetime input whose value is read and written as an ISO instant. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
185
461
  "attributes": [
186
462
  {
187
- "name": "value",
188
- "description": "The current value. (string)"
463
+ "name": "type",
464
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
465
+ },
466
+ {
467
+ "name": "v-type",
468
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
469
+ },
470
+ {
471
+ "name": "keep",
472
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
473
+ },
474
+ {
475
+ "name": "reject",
476
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
477
+ },
478
+ {
479
+ "name": "uppercase",
480
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
481
+ },
482
+ {
483
+ "name": "trim",
484
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
485
+ },
486
+ {
487
+ "name": "autocomplete",
488
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
489
+ },
490
+ {
491
+ "name": "disabled",
492
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
189
493
  },
190
494
  {
191
495
  "name": "readonly",
@@ -195,10 +499,18 @@
195
499
  "name": "required",
196
500
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
197
501
  },
502
+ {
503
+ "name": "value",
504
+ "description": "The current value. (string)"
505
+ },
198
506
  {
199
507
  "name": "placeholder",
200
508
  "description": "Placeholder shown while the field is empty. (string)"
201
509
  },
510
+ {
511
+ "name": "step",
512
+ "description": "Step between selectable instants, in seconds. (string)"
513
+ },
202
514
  {
203
515
  "name": "min",
204
516
  "description": "Earliest selectable instant, as an ISO instant. (string)"
@@ -206,10 +518,6 @@
206
518
  {
207
519
  "name": "max",
208
520
  "description": "Latest selectable instant, as an ISO instant. (string)"
209
- },
210
- {
211
- "name": "step",
212
- "description": "Step between selectable instants, in seconds. (string)"
213
521
  }
214
522
  ]
215
523
  },
@@ -218,8 +526,16 @@
218
526
  "description": "A group of radios, declared as ful-radio children. With type=\"boolean\" the value is a real boolean. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
219
527
  "attributes": [
220
528
  {
221
- "name": "value",
222
- "description": "The value of the selected radio. (string)"
529
+ "name": "name",
530
+ "description": "The name the radio inputs share, which is what makes them one group. Generated when absent, so a group only needs it to be addressed from outside. (string)"
531
+ },
532
+ {
533
+ "name": "type",
534
+ "description": "boolean maps the two declared radios onto true and false rather than onto their own values. (string)"
535
+ },
536
+ {
537
+ "name": "disabled",
538
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
223
539
  },
224
540
  {
225
541
  "name": "readonly",
@@ -228,18 +544,39 @@
228
544
  {
229
545
  "name": "required",
230
546
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
547
+ },
548
+ {
549
+ "name": "value",
550
+ "description": "The value of the selected radio. (string)"
231
551
  }
232
552
  ]
233
553
  },
234
554
  {
235
555
  "name": "ful-table",
236
- "description": "A table that loads its rows from a loader, with sorting, pagination and an optional filter form. Its columns are declared in a schema slot.",
237
- "attributes": []
556
+ "description": "A table that loads its rows from a loader, with sorting, pagination and an optional filter form. Its columns are declared in a schema slot; the rows come from src (method, GET by default) through the loader named by loader (loaders:table by default), page-size rows a page (10 by default), the first one loading on upgrade under the autoload claim.",
557
+ "attributes": [
558
+ {
559
+ "name": "loader",
560
+ "description": "The registered component name the table loads its rows through; loaders:table when absent. (string)"
561
+ },
562
+ {
563
+ "name": "autoload",
564
+ "description": "Loads the first page while upgrading, instead of waiting for a reload(). The load is not awaited, so a slow or failing loader cannot hold up the page. (boolean)"
565
+ },
566
+ {
567
+ "name": "page-size",
568
+ "description": "How many rows a page asks the loader for, 10 by default. Stays live: writing it reloads from the first page, a table that has not been asked to load yet only recording it. (number)"
569
+ }
570
+ ]
238
571
  },
239
572
  {
240
573
  "name": "ful-pagination",
241
- "description": "The pager of a ful-table. Rarely used on its own.",
574
+ "description": "The pager of a ful-table, its window rendering at most pages links (5 by default). Rarely used on its own.",
242
575
  "attributes": [
576
+ {
577
+ "name": "pages",
578
+ "description": "How many page buttons are rendered around the current one, 5 by default. (number)"
579
+ },
243
580
  {
244
581
  "name": "total",
245
582
  "description": "Number of pages. (number)"
@@ -252,8 +589,12 @@
252
589
  },
253
590
  {
254
591
  "name": "ful-sorter",
255
- "description": "The sort control rendered in a ful-table header. Rarely used on its own.",
592
+ "description": "The sort control rendered in a ful-table header, focusable and activated by Enter and Space, carrying aria-sort on its header cell. Rarely used on its own.",
256
593
  "attributes": [
594
+ {
595
+ "name": "sorter",
596
+ "description": "The field name this column sorts by, sent in the load request. A column without it is not sortable. (string)"
597
+ },
257
598
  {
258
599
  "name": "order",
259
600
  "description": "The sort currently applied, asc or desc, or absent when unsorted. (string)"
@@ -265,8 +606,36 @@
265
606
  "description": "A ful-table filter over an instant, with an operator and one or two bounds. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
266
607
  "attributes": [
267
608
  {
268
- "name": "value",
269
- "description": "JSON tuple of the operator and its bounds, for example [\"BETWEEN\", from, to]. (string)"
609
+ "name": "type",
610
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
611
+ },
612
+ {
613
+ "name": "v-type",
614
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
615
+ },
616
+ {
617
+ "name": "keep",
618
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
619
+ },
620
+ {
621
+ "name": "reject",
622
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
623
+ },
624
+ {
625
+ "name": "uppercase",
626
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
627
+ },
628
+ {
629
+ "name": "trim",
630
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
631
+ },
632
+ {
633
+ "name": "autocomplete",
634
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
635
+ },
636
+ {
637
+ "name": "disabled",
638
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
270
639
  },
271
640
  {
272
641
  "name": "readonly",
@@ -276,9 +645,17 @@
276
645
  "name": "required",
277
646
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
278
647
  },
648
+ {
649
+ "name": "value",
650
+ "description": "JSON tuple of the operator and its bounds, for example [\"BETWEEN\", from, to]. (string)"
651
+ },
279
652
  {
280
653
  "name": "placeholder",
281
654
  "description": "Placeholder shown while the field is empty. (string)"
655
+ },
656
+ {
657
+ "name": "operators",
658
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ, LT, GT, LTE, GTE, BETWEEN. Defaults to all of them. (string)"
282
659
  }
283
660
  ]
284
661
  },
@@ -286,10 +663,96 @@
286
663
  "name": "ful-filter-local-date",
287
664
  "description": "A ful-table filter over a date, with an operator and one or two bounds. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
288
665
  "attributes": [
666
+ {
667
+ "name": "type",
668
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
669
+ },
670
+ {
671
+ "name": "v-type",
672
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
673
+ },
674
+ {
675
+ "name": "keep",
676
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
677
+ },
678
+ {
679
+ "name": "reject",
680
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
681
+ },
682
+ {
683
+ "name": "uppercase",
684
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
685
+ },
686
+ {
687
+ "name": "trim",
688
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
689
+ },
690
+ {
691
+ "name": "autocomplete",
692
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
693
+ },
694
+ {
695
+ "name": "disabled",
696
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
697
+ },
698
+ {
699
+ "name": "readonly",
700
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form. (boolean)"
701
+ },
702
+ {
703
+ "name": "required",
704
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
705
+ },
289
706
  {
290
707
  "name": "value",
291
708
  "description": "JSON tuple of the operator and its bounds, for example [\"BETWEEN\", from, to]. (string)"
292
709
  },
710
+ {
711
+ "name": "placeholder",
712
+ "description": "Placeholder shown while the field is empty. (string)"
713
+ },
714
+ {
715
+ "name": "operators",
716
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ, LT, GT, LTE, GTE, BETWEEN. Defaults to all of them. (string)"
717
+ }
718
+ ]
719
+ },
720
+ {
721
+ "name": "ful-filter-number",
722
+ "description": "A ful-table filter over numbers, with an operator such as GTE or BETWEEN. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
723
+ "attributes": [
724
+ {
725
+ "name": "type",
726
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
727
+ },
728
+ {
729
+ "name": "v-type",
730
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
731
+ },
732
+ {
733
+ "name": "keep",
734
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
735
+ },
736
+ {
737
+ "name": "reject",
738
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
739
+ },
740
+ {
741
+ "name": "uppercase",
742
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
743
+ },
744
+ {
745
+ "name": "trim",
746
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
747
+ },
748
+ {
749
+ "name": "autocomplete",
750
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
751
+ },
752
+ {
753
+ "name": "disabled",
754
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
755
+ },
293
756
  {
294
757
  "name": "readonly",
295
758
  "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form. (boolean)"
@@ -298,19 +761,81 @@
298
761
  "name": "required",
299
762
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
300
763
  },
764
+ {
765
+ "name": "value",
766
+ "description": "JSON tuple of the operator and its bound(s). (string)"
767
+ },
301
768
  {
302
769
  "name": "placeholder",
303
770
  "description": "Placeholder shown while the field is empty. (string)"
771
+ },
772
+ {
773
+ "name": "operators",
774
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ, LT, GT, LTE, GTE, BETWEEN. Defaults to all of them. (string)"
304
775
  }
305
776
  ]
306
777
  },
307
778
  {
308
- "name": "ful-filter-text",
309
- "description": "A ful-table filter over text, with an operator such as CONTAINS or STARTS_WITH. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
779
+ "name": "ful-filter-boolean",
780
+ "description": "A ful-table filter over booleans, with the EQ or NEQ operator and a yes/no menu carrying the true and false tokens, plus an any entry that contributes nothing. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
310
781
  "attributes": [
782
+ {
783
+ "name": "disabled",
784
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
785
+ },
786
+ {
787
+ "name": "readonly",
788
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form. (boolean)"
789
+ },
790
+ {
791
+ "name": "required",
792
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
793
+ },
311
794
  {
312
795
  "name": "value",
313
- "description": "JSON tuple of the operator, the sensitivity and the text. (string)"
796
+ "description": "JSON tuple of the operator and the token. (string)"
797
+ },
798
+ {
799
+ "name": "operators",
800
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ. Defaults to both. (string)"
801
+ }
802
+ ]
803
+ },
804
+ {
805
+ "name": "ful-filter-text",
806
+ "description": "A ful-table filter over text, with an operator such as CONTAINS or STARTS_WITH and a case sensitivity. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only. A multiple ful-select used as a filter emits the bare value array the in-list annotations expect.",
807
+ "attributes": [
808
+ {
809
+ "name": "type",
810
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
811
+ },
812
+ {
813
+ "name": "v-type",
814
+ "description": "number decodes the value to a number on the way out: blank stays null and a value that does not decode is kept as it is. (string)"
815
+ },
816
+ {
817
+ "name": "keep",
818
+ "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
819
+ },
820
+ {
821
+ "name": "reject",
822
+ "description": "The same filter from the other side: a regular expression naming what is stripped from the value on every keystroke. Declaring both applies keep and warns once. (string)"
823
+ },
824
+ {
825
+ "name": "uppercase",
826
+ "description": "Upper-cases the value on the way out, leaving what was typed alone. (boolean)"
827
+ },
828
+ {
829
+ "name": "trim",
830
+ "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
831
+ },
832
+ {
833
+ "name": "autocomplete",
834
+ "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
835
+ },
836
+ {
837
+ "name": "disabled",
838
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
314
839
  },
315
840
  {
316
841
  "name": "readonly",
@@ -320,19 +845,83 @@
320
845
  "name": "required",
321
846
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
322
847
  },
848
+ {
849
+ "name": "value",
850
+ "description": "JSON tuple of the operator, the sensitivity and the text. (string)"
851
+ },
323
852
  {
324
853
  "name": "placeholder",
325
854
  "description": "Placeholder shown while the field is empty. (string)"
855
+ },
856
+ {
857
+ "name": "operators",
858
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ, LT, GT, LTE, GTE, BETWEEN, CONTAINS, STARTS_WITH, ENDS_WITH. Defaults to all of them. (string)"
859
+ },
860
+ {
861
+ "name": "sensitivities",
862
+ "description": "Comma separated list of the case sensitivity modes, IGNORE_CASE, CASE_SENSITIVE. A single entry pins every emitted tuple to it. (string)"
326
863
  }
327
864
  ]
328
865
  },
329
866
  {
330
867
  "name": "ful-select",
331
- "description": "A combobox backed by a loader, with badges for the current selection. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
868
+ "description": "A combobox backed by a loader that acts like a select: the field mirrors the label of a single selection, clicking anywhere on it toggles the dropdown, which opens highlighting the current selection, and Home, End, PageUp, PageDown and Alt+arrows navigate it. A multiple selection renders as ful-badge chips. Without src the slotted options are the vocabulary; with src the options are fetched once (method, POST by default, preload fetching them while upgrading, revision caching them in local storage) or asked per query under mode=chunked, the response shaped through the k-expr/l-expr/d-expr/m-expr expressions or a response-mapper component, and every key coerced as k-type declares. Disabled follows native semantics: the attribute is the field's own claim, honored together with a disabled fieldset ancestry through :disabled, while the property reflects the claim only.",
332
869
  "attributes": [
333
870
  {
334
- "name": "value",
335
- "description": "The selected key, or a comma separated list of keys when multiple. (string)"
871
+ "name": "name",
872
+ "description": "The field name the surrounding form submits the selection under. (string)"
873
+ },
874
+ {
875
+ "name": "loader",
876
+ "description": "The registered component name the select loads its vocabulary through; loaders:select when absent. (string)"
877
+ },
878
+ {
879
+ "name": "k-type",
880
+ "description": "How a key coerces when it arrives from the response or from the value attribute: number, string or bool. (string)"
881
+ },
882
+ {
883
+ "name": "src",
884
+ "description": "The url the vocabulary is fetched from. Without it the slotted <option> elements are the whole vocabulary, held in memory. (string)"
885
+ },
886
+ {
887
+ "name": "method",
888
+ "description": "The method the vocabulary is fetched with; POST when absent. (string)"
889
+ },
890
+ {
891
+ "name": "mode",
892
+ "description": "chunked asks the endpoint per query instead of fetching the vocabulary once, for a list too large to hold. (string)"
893
+ },
894
+ {
895
+ "name": "preload",
896
+ "description": "Fetches the vocabulary while the element upgrades rather than on first use. The field paints immediately either way; the options arrive when they arrive. (boolean)"
897
+ },
898
+ {
899
+ "name": "revision",
900
+ "description": "Caches the fetched vocabulary in local storage under this revision; a load under a different one is a miss that evicts the entry. It is the cache's namespace, so a vocabulary that differs per user wants the principal in it. (string)"
901
+ },
902
+ {
903
+ "name": "k-expr",
904
+ "description": "The expression yielding an option's key, evaluated against each row of the response. Set it together with l-expr to shape a response without a mapper component. (string)"
905
+ },
906
+ {
907
+ "name": "l-expr",
908
+ "description": "The expression yielding an option's label, evaluated against each row of the response. (string)"
909
+ },
910
+ {
911
+ "name": "d-expr",
912
+ "description": "The expression yielding the rows from the response body; the body itself when absent. (string)"
913
+ },
914
+ {
915
+ "name": "m-expr",
916
+ "description": "The expression yielding an option's metadata, evaluated against each row; the whole row when absent. (string)"
917
+ },
918
+ {
919
+ "name": "response-mapper",
920
+ "description": "The registered component name that turns a response into { key, label, metadata } entries. The k-expr/l-expr pair takes precedence; without either, the response is read as positional rows. (string)"
921
+ },
922
+ {
923
+ "name": "disabled",
924
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
336
925
  },
337
926
  {
338
927
  "name": "readonly",
@@ -343,15 +932,28 @@
343
932
  "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
344
933
  },
345
934
  {
346
- "name": "itemlist",
347
- "description": "Shows the selection as a list under the control as well as badges. (boolean)"
935
+ "name": "value",
936
+ "description": "The selected keys, comma separated, whether or not the select is multiple. A key given here is trimmed and cannot contain a comma; assign such a key through the property instead. The property answers a key for a single select and an array for a multiple one. (string)"
937
+ },
938
+ {
939
+ "name": "multiple",
940
+ "description": "Selects any number of options rather than one: the value is a comma separated list of keys and the selection renders as ful-badge chips. (boolean)"
941
+ },
942
+ {
943
+ "name": "item-list",
944
+ "description": "Shows the selection as a ful-item-list under the control as well, in addition to the field itself (the label for a single select, the ful-badge chips when multiple). (boolean)"
348
945
  }
349
946
  ]
350
947
  },
351
948
  {
352
949
  "name": "ful-dropdown",
353
- "description": "The options popup of a ful-select. Rarely used on its own.",
354
- "attributes": []
950
+ "description": "The options popup of a ful-select, with a localized no-results message when the search matches nothing. Rarely used on its own.",
951
+ "attributes": [
952
+ {
953
+ "name": "listbox",
954
+ "description": "The id to give the listbox, so a host can point aria-controls and aria-activedescendant at it before this element upgrades. (string)"
955
+ }
956
+ ]
355
957
  }
356
958
  ]
357
959
  }