@optionfactory/fml 8.0.3 → 9.0.0-rc1

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 +88 -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 +1529 -435
  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 +5267 -2276
  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 +801 -252
  31. package/dist/ful.iife.js +3677 -1378
  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 +3666 -1378
  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 +600 -58
  49. package/dist/web-types.json +1475 -380
  50. package/package.json +16 -8
@@ -8,52 +8,63 @@
8
8
  "declarations": [
9
9
  {
10
10
  "kind": "class",
11
- "name": "Spinner",
12
- "tagName": "ful-spinner",
11
+ "name": "Tooltip",
12
+ "tagName": "ful-tooltip",
13
13
  "customElement": true,
14
- "description": "A busy indicator. ful-form shows and hides the ones it contains while submitting.",
15
- "attributes": [],
14
+ "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: bottom (default), top, left or right.",
15
+ "attributes": [
16
+ {
17
+ "name": "placement",
18
+ "description": "Which side of the trigger the note opens on: bottom (the default), top, start or end. The library places the note itself on every platform, so the side is the same everywhere.",
19
+ "type": {
20
+ "text": "string"
21
+ }
22
+ }
23
+ ],
16
24
  "slots": [
17
25
  {
18
26
  "name": "",
19
- "description": "Text shown next to the spinner."
27
+ "description": "The short explanation shown in the popover."
20
28
  }
21
29
  ],
22
30
  "events": []
23
31
  },
24
32
  {
25
33
  "kind": "class",
26
- "name": "Form",
27
- "tagName": "ful-form",
34
+ "name": "Dialog",
35
+ "tagName": "ful-dialog",
28
36
  "customElement": true,
29
- "description": "Wraps its content in a form, collects the values of the fields it contains and hands them to a loader on submit.",
30
- "attributes": [],
31
- "slots": [],
32
- "events": [
37
+ "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 resolve with the data-result of the button that closed the dialog (null on Escape). Longer explanations belong here, shorter ones in ful-tooltip.",
38
+ "attributes": [
33
39
  {
34
- "name": "submit",
35
- "description": "Cancelable. Fired before anything is sent: preventDefault aborts the submit.",
40
+ "name": "header",
41
+ "description": "The dialog's title, shown in its header. Text only; slot content into the body instead for anything richer.",
36
42
  "type": {
37
- "text": "CustomEvent"
43
+ "text": "string"
38
44
  }
39
- },
45
+ }
46
+ ],
47
+ "slots": [
40
48
  {
41
- "name": "submit:requested",
42
- "description": "Fired after the submit was accepted, to let a listener resolve the response itself.",
43
- "type": {
44
- "text": "CustomEvent"
45
- }
49
+ "name": "",
50
+ "description": "The dialog body."
46
51
  },
47
52
  {
48
- "name": "submit:success",
49
- "description": "Fired with the submitted values and the mapped response.",
53
+ "name": "buttons",
54
+ "description": "Buttons closing the dialog; each carries a data-result that ask() resolves with. Without this slot a localized acknowledge button is shown."
55
+ }
56
+ ],
57
+ "events": [
58
+ {
59
+ "name": "close",
60
+ "description": "Fired when the dialog closes, carrying the data-result of the button that closed it, or null on Escape; ask() and open() resolve with the same answer, and a dialog leaving the document while open answers its waiters with null.",
50
61
  "type": {
51
62
  "text": "CustomEvent"
52
63
  }
53
64
  },
54
65
  {
55
- "name": "submit:failure",
56
- "description": "Fired with the exception when the submit fails. The form does not rethrow.",
66
+ "name": "section:requested",
67
+ "description": "Fired by the disclosure when it opens (bubbling): answer through AsyncEvents.asyncOn with the body's delivery; the open awaits the answers under the loading chrome, and a failed delivery paints the body's problems.",
57
68
  "type": {
58
69
  "text": "CustomEvent"
59
70
  }
@@ -62,47 +73,43 @@
62
73
  },
63
74
  {
64
75
  "kind": "class",
65
- "name": "Checkbox",
66
- "tagName": "ful-checkbox",
76
+ "name": "Drawer",
77
+ "tagName": "ful-drawer",
67
78
  "customElement": true,
68
- "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.",
79
+ "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.",
69
80
  "attributes": [
70
81
  {
71
- "name": "value",
72
- "description": "Checked when the attribute is the string true.",
73
- "type": {
74
- "text": "boolean"
75
- }
76
- },
77
- {
78
- "name": "readonly",
79
- "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
82
+ "name": "title",
83
+ "description": "The drawer's title, shown in its header. Text only, and also what update() re-titles the panel with.",
80
84
  "type": {
81
- "text": "boolean"
85
+ "text": "string"
82
86
  }
83
87
  },
84
88
  {
85
- "name": "required",
86
- "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
89
+ "name": "placement",
90
+ "description": "Which edge the panel slides in from: end (the default) or start, following the page's writing direction.",
87
91
  "type": {
88
- "text": "boolean"
92
+ "text": "string"
89
93
  }
90
94
  }
91
95
  ],
92
96
  "slots": [
93
97
  {
94
98
  "name": "",
95
- "description": "The label of the field."
96
- },
97
- {
98
- "name": "info",
99
- "description": "Extra content rendered next to the label, for a hint or a help icon."
99
+ "description": "The drawer body, shown when update() never replaced it."
100
100
  }
101
101
  ],
102
102
  "events": [
103
103
  {
104
- "name": "change",
105
- "description": "Fired with the new checked state when the box or its label is clicked.",
104
+ "name": "close",
105
+ "description": "Fired when the drawer closes, by its close button or Escape.",
106
+ "type": {
107
+ "text": "CustomEvent"
108
+ }
109
+ },
110
+ {
111
+ "name": "section:requested",
112
+ "description": "Fired by the disclosure when it opens (bubbling): answer through AsyncEvents.asyncOn with the body's delivery; the open awaits the answers under the loading chrome, and a failed delivery paints the body's problems.",
106
113
  "type": {
107
114
  "text": "CustomEvent"
108
115
  }
@@ -111,70 +118,123 @@
111
118
  },
112
119
  {
113
120
  "kind": "class",
114
- "name": "Input",
115
- "tagName": "ful-input",
121
+ "name": "Toasts",
122
+ "tagName": "ful-toasts",
116
123
  "customElement": true,
117
- "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.",
124
+ "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.",
118
125
  "attributes": [
119
126
  {
120
- "name": "value",
121
- "description": "The current value.",
127
+ "name": "timeout",
128
+ "description": "How long a toast stands before it retires, in milliseconds; 5000 when absent. A show() may override it per toast.",
122
129
  "type": {
123
- "text": "string"
130
+ "text": "number"
124
131
  }
125
- },
132
+ }
133
+ ],
134
+ "slots": [],
135
+ "events": []
136
+ },
137
+ {
138
+ "kind": "class",
139
+ "name": "Tabs",
140
+ "tagName": "ful-tabs",
141
+ "customElement": true,
142
+ "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.",
143
+ "attributes": [
126
144
  {
127
- "name": "readonly",
128
- "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
145
+ "name": "active",
146
+ "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.",
129
147
  "type": {
130
- "text": "boolean"
148
+ "text": "number"
131
149
  }
150
+ }
151
+ ],
152
+ "slots": [
153
+ {
154
+ "name": "tabs",
155
+ "description": "The tab declarations, one tab element per panel, carrying the tab's label."
132
156
  },
133
157
  {
134
- "name": "required",
135
- "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
158
+ "name": "",
159
+ "description": "The panels, one element per declared tab, paired in order: each becomes a tabpanel announced by its tab."
160
+ }
161
+ ],
162
+ "events": [
163
+ {
164
+ "name": "change",
165
+ "description": "Fired with the active index and the previous one whenever the visible panel moves.",
136
166
  "type": {
137
- "text": "boolean"
167
+ "text": "CustomEvent"
138
168
  }
139
169
  },
140
170
  {
141
- "name": "placeholder",
142
- "description": "Placeholder shown while the field is empty.",
171
+ "name": "section:requested",
172
+ "description": "Fired by the component when one of its sections is entered (bubbling): the generic type of the family, joined by section:requested:#index and by section:requested:name when the section carries a data-step. Answer through AsyncEvents.asyncOn with the section's delivery; the component awaits the answers under its loading chrome, and a failed delivery paints the section's problems.",
143
173
  "type": {
144
- "text": "string"
174
+ "text": "CustomEvent"
175
+ }
176
+ }
177
+ ]
178
+ },
179
+ {
180
+ "kind": "class",
181
+ "name": "Accordion",
182
+ "tagName": "ful-accordion",
183
+ "customElement": true,
184
+ "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.",
185
+ "attributes": [
186
+ {
187
+ "name": "exclusive",
188
+ "description": "When present, opening a panel closes the others: the native details name grouping, assigned (and assignable again) by the render.",
189
+ "type": {
190
+ "text": "boolean"
145
191
  }
146
192
  }
147
193
  ],
148
194
  "slots": [
149
195
  {
150
196
  "name": "",
151
- "description": "The label of the field."
152
- },
153
- {
154
- "name": "info",
155
- "description": "Extra content rendered next to the label, for a hint or a help icon."
156
- },
157
- {
158
- "name": "ibefore",
159
- "description": "An addon rendered inside the input group, before the control."
160
- },
197
+ "description": "The native details/summary disclosures, one per panel, rendered inside the group."
198
+ }
199
+ ],
200
+ "events": []
201
+ },
202
+ {
203
+ "kind": "class",
204
+ "name": "Wizard",
205
+ "tagName": "ful-wizard",
206
+ "customElement": true,
207
+ "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.",
208
+ "attributes": [
161
209
  {
162
- "name": "before",
163
- "description": "Content rendered before the control, outside the addon styling."
164
- },
210
+ "name": "progress",
211
+ "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.",
212
+ "type": {
213
+ "text": "string"
214
+ }
215
+ }
216
+ ],
217
+ "slots": [
165
218
  {
166
- "name": "after",
167
- "description": "Content rendered after the control, outside the addon styling."
219
+ "name": "steps",
220
+ "description": "The step declarations, one step element per section, carrying the step's label."
168
221
  },
169
222
  {
170
- "name": "iafter",
171
- "description": "An addon rendered inside the input group, after the control."
223
+ "name": "",
224
+ "description": "The sections, one per declared step: only the current one is shown, and each may carry a data-step name for move()."
172
225
  }
173
226
  ],
174
227
  "events": [
175
228
  {
176
229
  "name": "change",
177
- "description": "Fired with the current value when the field is committed.",
230
+ "description": "Fired with the index and the data-step name after next(), prev() or move() land on a different step.",
231
+ "type": {
232
+ "text": "CustomEvent"
233
+ }
234
+ },
235
+ {
236
+ "name": "section:requested",
237
+ "description": "Fired by the component when one of its sections is entered (bubbling): the generic type of the family, joined by section:requested:#index and by section:requested:name when the section carries a data-step. Answer through AsyncEvents.asyncOn with the section's delivery; the component awaits the answers under its loading chrome, and a failed delivery paints the section's problems.",
178
238
  "type": {
179
239
  "text": "CustomEvent"
180
240
  }
@@ -183,123 +243,150 @@
183
243
  },
184
244
  {
185
245
  "kind": "class",
186
- "name": "InputFile",
187
- "tagName": "ful-input-file",
246
+ "name": "Form",
247
+ "tagName": "ful-form",
188
248
  "customElement": true,
189
- "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.",
249
+ "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.",
190
250
  "attributes": [
191
251
  {
192
- "name": "value",
193
- "description": "Only an empty value is honoured, to clear the selection: file inputs cannot be filled programmatically.",
252
+ "name": "action",
253
+ "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.",
194
254
  "type": {
195
255
  "text": "string"
196
256
  }
197
257
  },
198
258
  {
199
- "name": "readonly",
200
- "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
259
+ "name": "method",
260
+ "description": "The http method of the remote loader, POST by default.",
201
261
  "type": {
202
- "text": "boolean"
262
+ "text": "string"
203
263
  }
204
264
  },
205
265
  {
206
- "name": "required",
207
- "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
266
+ "name": "loader",
267
+ "description": "The registry component key of the form loader, loaders:form by default. A loader of your own implements prepare, submit and transform.",
208
268
  "type": {
209
- "text": "boolean"
269
+ "text": "string"
210
270
  }
211
271
  },
212
272
  {
213
- "name": "placeholder",
214
- "description": "Placeholder shown while the field is empty.",
273
+ "name": "request-mapper",
274
+ "description": "A registry component key, (values, form) => request, applied to the extracted values before they are sent.",
215
275
  "type": {
216
276
  "text": "string"
217
277
  }
218
278
  },
219
279
  {
220
- "name": "accept",
221
- "description": "Comma separated list of accepted extensions. Files that do not match are dropped with a warning.",
280
+ "name": "response-mapper",
281
+ "description": "A registry component key, (response, form) => mapped, applied to a successful response before it reaches submit:success.",
222
282
  "type": {
223
283
  "text": "string"
224
284
  }
225
285
  },
226
286
  {
227
- "name": "multiple",
228
- "description": "Allows selecting more than one file.",
287
+ "name": "clear-invalid-on-change",
288
+ "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.",
229
289
  "type": {
230
290
  "text": "boolean"
231
291
  }
232
292
  },
233
293
  {
234
- "name": "itemlist",
235
- "description": "Shows the list of selected files.",
294
+ "name": "scroll-on-error",
295
+ "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.",
236
296
  "type": {
237
297
  "text": "boolean"
238
298
  }
239
- },
299
+ }
300
+ ],
301
+ "slots": [],
302
+ "events": [
240
303
  {
241
- "name": "dropzone",
242
- "description": "Shows the dropzone.",
304
+ "name": "submit",
305
+ "description": "Cancelable. Fired before anything is sent: preventDefault aborts the submit.",
243
306
  "type": {
244
- "text": "boolean"
307
+ "text": "CustomEvent"
245
308
  }
246
309
  },
247
310
  {
248
- "name": "maxfiles",
249
- "description": "Maximum number of files. Exceeding it clears the selection.",
311
+ "name": "submit:requested",
312
+ "description": "Fired after the submit was accepted, to let a listener resolve the response itself.",
250
313
  "type": {
251
- "text": "number"
314
+ "text": "CustomEvent"
252
315
  }
253
316
  },
254
317
  {
255
- "name": "maxfilesize",
256
- "description": "Maximum size of a single file, in bytes. Larger files are dropped.",
318
+ "name": "submit:success",
319
+ "description": "Fired with the submitted values and the mapped response.",
257
320
  "type": {
258
- "text": "number"
321
+ "text": "CustomEvent"
259
322
  }
260
323
  },
261
324
  {
262
- "name": "maxtotalsize",
263
- "description": "Maximum size of all the selected files, in bytes. Exceeding it clears the selection.",
325
+ "name": "submit:failure",
326
+ "description": "Fired with the exception when the submit fails. The form does not rethrow.",
264
327
  "type": {
265
- "text": "number"
328
+ "text": "CustomEvent"
266
329
  }
267
330
  }
268
- ],
269
- "slots": [
331
+ ]
332
+ },
333
+ {
334
+ "kind": "class",
335
+ "name": "Checkbox",
336
+ "tagName": "ful-checkbox",
337
+ "customElement": true,
338
+ "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.",
339
+ "attributes": [
270
340
  {
271
- "name": "",
272
- "description": "The label of the field."
341
+ "name": "type",
342
+ "description": "switch renders the control as a switch rather than a checkbox. The value and the semantics are unchanged.",
343
+ "type": {
344
+ "text": "string"
345
+ }
273
346
  },
274
347
  {
275
- "name": "info",
276
- "description": "Extra content rendered next to the label, for a hint or a help icon."
348
+ "name": "disabled",
349
+ "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.",
350
+ "type": {
351
+ "text": "boolean"
352
+ }
277
353
  },
278
354
  {
279
- "name": "ibefore",
280
- "description": "An addon rendered inside the input group, before the control."
355
+ "name": "readonly",
356
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
357
+ "type": {
358
+ "text": "boolean"
359
+ }
281
360
  },
282
361
  {
283
- "name": "before",
284
- "description": "Content rendered before the control, outside the addon styling."
362
+ "name": "required",
363
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
364
+ "type": {
365
+ "text": "boolean"
366
+ }
285
367
  },
286
368
  {
287
- "name": "after",
288
- "description": "Content rendered after the control, outside the addon styling."
289
- },
369
+ "name": "value",
370
+ "description": "Checked when the attribute is the string true.",
371
+ "type": {
372
+ "text": "boolean"
373
+ }
374
+ }
375
+ ],
376
+ "slots": [
290
377
  {
291
- "name": "iafter",
292
- "description": "An addon rendered inside the input group, after the control."
378
+ "name": "",
379
+ "description": "The label of the field."
293
380
  },
294
381
  {
295
- "name": "dropzone",
296
- "description": "Replaces the contents of the default dropzone."
382
+ "name": "info",
383
+ "description": "Extra content rendered next to the label, for a hint or a help icon."
297
384
  }
298
385
  ],
299
386
  "events": [
300
387
  {
301
388
  "name": "change",
302
- "description": "Fired with the names of the selected files.",
389
+ "description": "Fired with the new checked state when the box or its label is clicked.",
303
390
  "type": {
304
391
  "text": "CustomEvent"
305
392
  }
@@ -308,38 +395,763 @@
308
395
  },
309
396
  {
310
397
  "kind": "class",
311
- "name": "LocalDate",
312
- "tagName": "ful-local-date",
398
+ "name": "Input",
399
+ "tagName": "ful-input",
313
400
  "customElement": true,
314
- "description": "Formats the date in its content, written as yyyy-mm-dd, in the locale of the page.",
315
- "attributes": [],
316
- "slots": [],
317
- "events": []
318
- },
319
- {
320
- "kind": "class",
321
- "name": "Instant",
322
- "tagName": "ful-instant",
401
+ "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.",
402
+ "attributes": [
403
+ {
404
+ "name": "type",
405
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
406
+ "type": {
407
+ "text": "string"
408
+ }
409
+ },
410
+ {
411
+ "name": "v-type",
412
+ "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.",
413
+ "type": {
414
+ "text": "string"
415
+ }
416
+ },
417
+ {
418
+ "name": "keep",
419
+ "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.",
420
+ "type": {
421
+ "text": "string"
422
+ }
423
+ },
424
+ {
425
+ "name": "reject",
426
+ "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.",
427
+ "type": {
428
+ "text": "string"
429
+ }
430
+ },
431
+ {
432
+ "name": "uppercase",
433
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
434
+ "type": {
435
+ "text": "boolean"
436
+ }
437
+ },
438
+ {
439
+ "name": "trim",
440
+ "description": "Trims the value on the way out, leaving what was typed alone.",
441
+ "type": {
442
+ "text": "boolean"
443
+ }
444
+ },
445
+ {
446
+ "name": "disabled",
447
+ "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.",
448
+ "type": {
449
+ "text": "boolean"
450
+ }
451
+ },
452
+ {
453
+ "name": "readonly",
454
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
455
+ "type": {
456
+ "text": "boolean"
457
+ }
458
+ },
459
+ {
460
+ "name": "required",
461
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
462
+ "type": {
463
+ "text": "boolean"
464
+ }
465
+ },
466
+ {
467
+ "name": "value",
468
+ "description": "The current value.",
469
+ "type": {
470
+ "text": "string"
471
+ }
472
+ },
473
+ {
474
+ "name": "placeholder",
475
+ "description": "Placeholder shown while the field is empty.",
476
+ "type": {
477
+ "text": "string"
478
+ }
479
+ }
480
+ ],
481
+ "slots": [
482
+ {
483
+ "name": "",
484
+ "description": "The label of the field."
485
+ },
486
+ {
487
+ "name": "info",
488
+ "description": "Extra content rendered next to the label, for a hint or a help icon."
489
+ },
490
+ {
491
+ "name": "before",
492
+ "description": "An addon rendered inside the input group, before the control."
493
+ },
494
+ {
495
+ "name": "after",
496
+ "description": "An addon rendered inside the input group, after the control."
497
+ }
498
+ ],
499
+ "events": [
500
+ {
501
+ "name": "change",
502
+ "description": "Fired with the current value when the field is committed.",
503
+ "type": {
504
+ "text": "CustomEvent"
505
+ }
506
+ }
507
+ ]
508
+ },
509
+ {
510
+ "kind": "class",
511
+ "name": "InputFile",
512
+ "tagName": "ful-input-file",
513
+ "customElement": true,
514
+ "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.",
515
+ "attributes": [
516
+ {
517
+ "name": "type",
518
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
519
+ "type": {
520
+ "text": "string"
521
+ }
522
+ },
523
+ {
524
+ "name": "v-type",
525
+ "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.",
526
+ "type": {
527
+ "text": "string"
528
+ }
529
+ },
530
+ {
531
+ "name": "keep",
532
+ "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.",
533
+ "type": {
534
+ "text": "string"
535
+ }
536
+ },
537
+ {
538
+ "name": "reject",
539
+ "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.",
540
+ "type": {
541
+ "text": "string"
542
+ }
543
+ },
544
+ {
545
+ "name": "uppercase",
546
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
547
+ "type": {
548
+ "text": "boolean"
549
+ }
550
+ },
551
+ {
552
+ "name": "trim",
553
+ "description": "Trims the value on the way out, leaving what was typed alone.",
554
+ "type": {
555
+ "text": "boolean"
556
+ }
557
+ },
558
+ {
559
+ "name": "disabled",
560
+ "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.",
561
+ "type": {
562
+ "text": "boolean"
563
+ }
564
+ },
565
+ {
566
+ "name": "readonly",
567
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
568
+ "type": {
569
+ "text": "boolean"
570
+ }
571
+ },
572
+ {
573
+ "name": "required",
574
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
575
+ "type": {
576
+ "text": "boolean"
577
+ }
578
+ },
579
+ {
580
+ "name": "value",
581
+ "description": "Only an empty value is honoured, to clear the selection: file inputs cannot be filled programmatically.",
582
+ "type": {
583
+ "text": "string"
584
+ }
585
+ },
586
+ {
587
+ "name": "placeholder",
588
+ "description": "Placeholder shown while the field is empty.",
589
+ "type": {
590
+ "text": "string"
591
+ }
592
+ },
593
+ {
594
+ "name": "accept",
595
+ "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.",
596
+ "type": {
597
+ "text": "string"
598
+ }
599
+ },
600
+ {
601
+ "name": "multiple",
602
+ "description": "Allows selecting more than one file.",
603
+ "type": {
604
+ "text": "boolean"
605
+ }
606
+ },
607
+ {
608
+ "name": "item-list",
609
+ "description": "Shows the list of selected files.",
610
+ "type": {
611
+ "text": "boolean"
612
+ }
613
+ },
614
+ {
615
+ "name": "dropzone",
616
+ "description": "Shows the dropzone.",
617
+ "type": {
618
+ "text": "boolean"
619
+ }
620
+ },
621
+ {
622
+ "name": "max-files",
623
+ "description": "Maximum number of files. Exceeding it clears the selection.",
624
+ "type": {
625
+ "text": "number"
626
+ }
627
+ },
628
+ {
629
+ "name": "max-file-size",
630
+ "description": "Maximum size of a single file, in bytes. Larger files are dropped.",
631
+ "type": {
632
+ "text": "number"
633
+ }
634
+ },
635
+ {
636
+ "name": "max-total-size",
637
+ "description": "Maximum size of all the selected files, in bytes. Exceeding it clears the selection.",
638
+ "type": {
639
+ "text": "number"
640
+ }
641
+ }
642
+ ],
643
+ "slots": [
644
+ {
645
+ "name": "",
646
+ "description": "The label of the field."
647
+ },
648
+ {
649
+ "name": "info",
650
+ "description": "Extra content rendered next to the label, for a hint or a help icon."
651
+ },
652
+ {
653
+ "name": "before",
654
+ "description": "An addon rendered inside the input group, before the control."
655
+ },
656
+ {
657
+ "name": "after",
658
+ "description": "An addon rendered inside the input group, after the control."
659
+ },
660
+ {
661
+ "name": "dropzone",
662
+ "description": "Replaces the contents of the default dropzone."
663
+ }
664
+ ],
665
+ "events": [
666
+ {
667
+ "name": "change",
668
+ "description": "Fired with the names of the selected files.",
669
+ "type": {
670
+ "text": "CustomEvent"
671
+ }
672
+ }
673
+ ]
674
+ },
675
+ {
676
+ "kind": "class",
677
+ "name": "LocalDate",
678
+ "tagName": "ful-local-date",
323
679
  "customElement": true,
324
- "description": "Formats the ISO instant in its content in the locale and timezone of the page.",
325
- "attributes": [],
680
+ "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.",
681
+ "attributes": [
682
+ {
683
+ "name": "locale",
684
+ "description": "The locale the date is formatted in, taking precedence over the page's. The platform default applies when neither names one.",
685
+ "type": {
686
+ "text": "string"
687
+ }
688
+ },
689
+ {
690
+ "name": "default",
691
+ "description": "The text rendered when the content is blank or does not parse as a date.",
692
+ "type": {
693
+ "text": "string"
694
+ }
695
+ }
696
+ ],
326
697
  "slots": [],
327
698
  "events": []
328
699
  },
329
700
  {
330
701
  "kind": "class",
331
- "name": "InputLocalDate",
332
- "tagName": "ful-input-local-date",
702
+ "name": "Instant",
703
+ "tagName": "ful-instant",
704
+ "customElement": true,
705
+ "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.",
706
+ "attributes": [
707
+ {
708
+ "name": "locale",
709
+ "description": "The locale the instant is formatted in, taking precedence over the page's. The platform default applies when neither names one.",
710
+ "type": {
711
+ "text": "string"
712
+ }
713
+ },
714
+ {
715
+ "name": "default",
716
+ "description": "The text rendered when the content is blank or does not parse as an instant.",
717
+ "type": {
718
+ "text": "string"
719
+ }
720
+ }
721
+ ],
722
+ "slots": [],
723
+ "events": []
724
+ },
725
+ {
726
+ "kind": "class",
727
+ "name": "InputLocalDate",
728
+ "tagName": "ful-input-local-date",
729
+ "customElement": true,
730
+ "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.",
731
+ "attributes": [
732
+ {
733
+ "name": "type",
734
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
735
+ "type": {
736
+ "text": "string"
737
+ }
738
+ },
739
+ {
740
+ "name": "v-type",
741
+ "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.",
742
+ "type": {
743
+ "text": "string"
744
+ }
745
+ },
746
+ {
747
+ "name": "keep",
748
+ "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.",
749
+ "type": {
750
+ "text": "string"
751
+ }
752
+ },
753
+ {
754
+ "name": "reject",
755
+ "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.",
756
+ "type": {
757
+ "text": "string"
758
+ }
759
+ },
760
+ {
761
+ "name": "uppercase",
762
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
763
+ "type": {
764
+ "text": "boolean"
765
+ }
766
+ },
767
+ {
768
+ "name": "trim",
769
+ "description": "Trims the value on the way out, leaving what was typed alone.",
770
+ "type": {
771
+ "text": "boolean"
772
+ }
773
+ },
774
+ {
775
+ "name": "disabled",
776
+ "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.",
777
+ "type": {
778
+ "text": "boolean"
779
+ }
780
+ },
781
+ {
782
+ "name": "readonly",
783
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
784
+ "type": {
785
+ "text": "boolean"
786
+ }
787
+ },
788
+ {
789
+ "name": "required",
790
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
791
+ "type": {
792
+ "text": "boolean"
793
+ }
794
+ },
795
+ {
796
+ "name": "value",
797
+ "description": "The current value.",
798
+ "type": {
799
+ "text": "string"
800
+ }
801
+ },
802
+ {
803
+ "name": "placeholder",
804
+ "description": "Placeholder shown while the field is empty.",
805
+ "type": {
806
+ "text": "string"
807
+ }
808
+ },
809
+ {
810
+ "name": "step",
811
+ "description": "Step between selectable dates, in days.",
812
+ "type": {
813
+ "text": "string"
814
+ }
815
+ },
816
+ {
817
+ "name": "min",
818
+ "description": "Earliest selectable date. Accepts a date, now, or a day, month or year offset.",
819
+ "type": {
820
+ "text": "string"
821
+ }
822
+ },
823
+ {
824
+ "name": "max",
825
+ "description": "Latest selectable date. Accepts a date, now, or a day, month or year offset.",
826
+ "type": {
827
+ "text": "string"
828
+ }
829
+ }
830
+ ],
831
+ "slots": [
832
+ {
833
+ "name": "",
834
+ "description": "The label of the field."
835
+ },
836
+ {
837
+ "name": "info",
838
+ "description": "Extra content rendered next to the label, for a hint or a help icon."
839
+ },
840
+ {
841
+ "name": "before",
842
+ "description": "An addon rendered inside the input group, before the control."
843
+ },
844
+ {
845
+ "name": "after",
846
+ "description": "An addon rendered inside the input group, after the control."
847
+ }
848
+ ],
849
+ "events": [
850
+ {
851
+ "name": "change",
852
+ "description": "Fired with the current date.",
853
+ "type": {
854
+ "text": "CustomEvent"
855
+ }
856
+ }
857
+ ]
858
+ },
859
+ {
860
+ "kind": "class",
861
+ "name": "InputLocalTime",
862
+ "tagName": "ful-input-local-time",
863
+ "customElement": true,
864
+ "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.",
865
+ "attributes": [
866
+ {
867
+ "name": "type",
868
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
869
+ "type": {
870
+ "text": "string"
871
+ }
872
+ },
873
+ {
874
+ "name": "v-type",
875
+ "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.",
876
+ "type": {
877
+ "text": "string"
878
+ }
879
+ },
880
+ {
881
+ "name": "keep",
882
+ "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.",
883
+ "type": {
884
+ "text": "string"
885
+ }
886
+ },
887
+ {
888
+ "name": "reject",
889
+ "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.",
890
+ "type": {
891
+ "text": "string"
892
+ }
893
+ },
894
+ {
895
+ "name": "uppercase",
896
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
897
+ "type": {
898
+ "text": "boolean"
899
+ }
900
+ },
901
+ {
902
+ "name": "trim",
903
+ "description": "Trims the value on the way out, leaving what was typed alone.",
904
+ "type": {
905
+ "text": "boolean"
906
+ }
907
+ },
908
+ {
909
+ "name": "disabled",
910
+ "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.",
911
+ "type": {
912
+ "text": "boolean"
913
+ }
914
+ },
915
+ {
916
+ "name": "readonly",
917
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
918
+ "type": {
919
+ "text": "boolean"
920
+ }
921
+ },
922
+ {
923
+ "name": "required",
924
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
925
+ "type": {
926
+ "text": "boolean"
927
+ }
928
+ },
929
+ {
930
+ "name": "value",
931
+ "description": "The current value.",
932
+ "type": {
933
+ "text": "string"
934
+ }
935
+ },
936
+ {
937
+ "name": "placeholder",
938
+ "description": "Placeholder shown while the field is empty.",
939
+ "type": {
940
+ "text": "string"
941
+ }
942
+ },
943
+ {
944
+ "name": "step",
945
+ "description": "Step between selectable times, in seconds. The bounds are truncated to this grid.",
946
+ "type": {
947
+ "text": "string"
948
+ }
949
+ },
950
+ {
951
+ "name": "min",
952
+ "description": "Earliest selectable time. Accepts a time, now, or an offset such as +2h or -30m.",
953
+ "type": {
954
+ "text": "string"
955
+ }
956
+ },
957
+ {
958
+ "name": "max",
959
+ "description": "Latest selectable time. Accepts a time, now, or an offset such as +2h or -30m.",
960
+ "type": {
961
+ "text": "string"
962
+ }
963
+ }
964
+ ],
965
+ "slots": [
966
+ {
967
+ "name": "",
968
+ "description": "The label of the field."
969
+ },
970
+ {
971
+ "name": "info",
972
+ "description": "Extra content rendered next to the label, for a hint or a help icon."
973
+ },
974
+ {
975
+ "name": "before",
976
+ "description": "An addon rendered inside the input group, before the control."
977
+ },
978
+ {
979
+ "name": "after",
980
+ "description": "An addon rendered inside the input group, after the control."
981
+ }
982
+ ],
983
+ "events": [
984
+ {
985
+ "name": "change",
986
+ "description": "Fired with the current time.",
987
+ "type": {
988
+ "text": "CustomEvent"
989
+ }
990
+ }
991
+ ]
992
+ },
993
+ {
994
+ "kind": "class",
995
+ "name": "InputInstant",
996
+ "tagName": "ful-input-instant",
997
+ "customElement": true,
998
+ "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.",
999
+ "attributes": [
1000
+ {
1001
+ "name": "type",
1002
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
1003
+ "type": {
1004
+ "text": "string"
1005
+ }
1006
+ },
1007
+ {
1008
+ "name": "v-type",
1009
+ "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.",
1010
+ "type": {
1011
+ "text": "string"
1012
+ }
1013
+ },
1014
+ {
1015
+ "name": "keep",
1016
+ "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.",
1017
+ "type": {
1018
+ "text": "string"
1019
+ }
1020
+ },
1021
+ {
1022
+ "name": "reject",
1023
+ "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.",
1024
+ "type": {
1025
+ "text": "string"
1026
+ }
1027
+ },
1028
+ {
1029
+ "name": "uppercase",
1030
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
1031
+ "type": {
1032
+ "text": "boolean"
1033
+ }
1034
+ },
1035
+ {
1036
+ "name": "trim",
1037
+ "description": "Trims the value on the way out, leaving what was typed alone.",
1038
+ "type": {
1039
+ "text": "boolean"
1040
+ }
1041
+ },
1042
+ {
1043
+ "name": "disabled",
1044
+ "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.",
1045
+ "type": {
1046
+ "text": "boolean"
1047
+ }
1048
+ },
1049
+ {
1050
+ "name": "readonly",
1051
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
1052
+ "type": {
1053
+ "text": "boolean"
1054
+ }
1055
+ },
1056
+ {
1057
+ "name": "required",
1058
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
1059
+ "type": {
1060
+ "text": "boolean"
1061
+ }
1062
+ },
1063
+ {
1064
+ "name": "value",
1065
+ "description": "The current value.",
1066
+ "type": {
1067
+ "text": "string"
1068
+ }
1069
+ },
1070
+ {
1071
+ "name": "placeholder",
1072
+ "description": "Placeholder shown while the field is empty.",
1073
+ "type": {
1074
+ "text": "string"
1075
+ }
1076
+ },
1077
+ {
1078
+ "name": "step",
1079
+ "description": "Step between selectable instants, in seconds.",
1080
+ "type": {
1081
+ "text": "string"
1082
+ }
1083
+ },
1084
+ {
1085
+ "name": "min",
1086
+ "description": "Earliest selectable instant, as an ISO instant.",
1087
+ "type": {
1088
+ "text": "string"
1089
+ }
1090
+ },
1091
+ {
1092
+ "name": "max",
1093
+ "description": "Latest selectable instant, as an ISO instant.",
1094
+ "type": {
1095
+ "text": "string"
1096
+ }
1097
+ }
1098
+ ],
1099
+ "slots": [
1100
+ {
1101
+ "name": "",
1102
+ "description": "The label of the field."
1103
+ },
1104
+ {
1105
+ "name": "info",
1106
+ "description": "Extra content rendered next to the label, for a hint or a help icon."
1107
+ },
1108
+ {
1109
+ "name": "before",
1110
+ "description": "An addon rendered inside the input group, before the control."
1111
+ },
1112
+ {
1113
+ "name": "after",
1114
+ "description": "An addon rendered inside the input group, after the control."
1115
+ }
1116
+ ],
1117
+ "events": [
1118
+ {
1119
+ "name": "change",
1120
+ "description": "Fired with the current instant.",
1121
+ "type": {
1122
+ "text": "CustomEvent"
1123
+ }
1124
+ }
1125
+ ]
1126
+ },
1127
+ {
1128
+ "kind": "class",
1129
+ "name": "RadioGroup",
1130
+ "tagName": "ful-radio-group",
333
1131
  "customElement": true,
334
- "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.",
1132
+ "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.",
335
1133
  "attributes": [
336
1134
  {
337
- "name": "value",
338
- "description": "The current value.",
1135
+ "name": "name",
1136
+ "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.",
1137
+ "type": {
1138
+ "text": "string"
1139
+ }
1140
+ },
1141
+ {
1142
+ "name": "type",
1143
+ "description": "boolean maps the two declared radios onto true and false rather than onto their own values.",
339
1144
  "type": {
340
1145
  "text": "string"
341
1146
  }
342
1147
  },
1148
+ {
1149
+ "name": "disabled",
1150
+ "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.",
1151
+ "type": {
1152
+ "text": "boolean"
1153
+ }
1154
+ },
343
1155
  {
344
1156
  "name": "readonly",
345
1157
  "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
@@ -348,89 +1160,216 @@
348
1160
  }
349
1161
  },
350
1162
  {
351
- "name": "required",
352
- "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
1163
+ "name": "required",
1164
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
1165
+ "type": {
1166
+ "text": "boolean"
1167
+ }
1168
+ },
1169
+ {
1170
+ "name": "value",
1171
+ "description": "The value of the selected radio.",
1172
+ "type": {
1173
+ "text": "string"
1174
+ }
1175
+ }
1176
+ ],
1177
+ "slots": [
1178
+ {
1179
+ "name": "",
1180
+ "description": "The legend of the group, and its ful-radio children."
1181
+ },
1182
+ {
1183
+ "name": "header",
1184
+ "description": "Content rendered above the radios."
1185
+ },
1186
+ {
1187
+ "name": "footer",
1188
+ "description": "Content rendered below the radios."
1189
+ }
1190
+ ],
1191
+ "events": [
1192
+ {
1193
+ "name": "change",
1194
+ "description": "Fired with the value of the selected radio.",
1195
+ "type": {
1196
+ "text": "CustomEvent"
1197
+ }
1198
+ }
1199
+ ]
1200
+ },
1201
+ {
1202
+ "kind": "class",
1203
+ "name": "Table",
1204
+ "tagName": "ful-table",
1205
+ "customElement": true,
1206
+ "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.",
1207
+ "attributes": [
1208
+ {
1209
+ "name": "loader",
1210
+ "description": "The registered component name the table loads its rows through; loaders:table when absent.",
1211
+ "type": {
1212
+ "text": "string"
1213
+ }
1214
+ },
1215
+ {
1216
+ "name": "autoload",
1217
+ "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.",
1218
+ "type": {
1219
+ "text": "boolean"
1220
+ }
1221
+ },
1222
+ {
1223
+ "name": "page-size",
1224
+ "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.",
1225
+ "type": {
1226
+ "text": "number"
1227
+ }
1228
+ }
1229
+ ],
1230
+ "slots": [
1231
+ {
1232
+ "name": "filters",
1233
+ "description": "Fields wrapped in a ful-form, submitted to filter the table."
1234
+ },
1235
+ {
1236
+ "name": "caption",
1237
+ "description": "The caption of the table."
1238
+ },
1239
+ {
1240
+ "name": "footer",
1241
+ "description": "Content rendered in the table footer."
1242
+ }
1243
+ ],
1244
+ "events": []
1245
+ },
1246
+ {
1247
+ "kind": "class",
1248
+ "name": "Pagination",
1249
+ "tagName": "ful-pagination",
1250
+ "customElement": true,
1251
+ "description": "The pager of a ful-table, its window rendering at most pages links (5 by default). Rarely used on its own.",
1252
+ "attributes": [
1253
+ {
1254
+ "name": "pages",
1255
+ "description": "How many page buttons are rendered around the current one, 5 by default.",
1256
+ "type": {
1257
+ "text": "number"
1258
+ }
1259
+ },
1260
+ {
1261
+ "name": "total",
1262
+ "description": "Number of pages.",
1263
+ "type": {
1264
+ "text": "number"
1265
+ }
1266
+ },
1267
+ {
1268
+ "name": "current",
1269
+ "description": "Zero based index of the page being shown.",
1270
+ "type": {
1271
+ "text": "number"
1272
+ }
1273
+ }
1274
+ ],
1275
+ "slots": [],
1276
+ "events": [
1277
+ {
1278
+ "name": "page:requested",
1279
+ "description": "Fired with the zero based index of the page the user asked for.",
1280
+ "type": {
1281
+ "text": "CustomEvent"
1282
+ }
1283
+ }
1284
+ ]
1285
+ },
1286
+ {
1287
+ "kind": "class",
1288
+ "name": "SortButton",
1289
+ "tagName": "ful-sorter",
1290
+ "customElement": true,
1291
+ "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.",
1292
+ "attributes": [
1293
+ {
1294
+ "name": "sorter",
1295
+ "description": "The field name this column sorts by, sent in the load request. A column without it is not sortable.",
1296
+ "type": {
1297
+ "text": "string"
1298
+ }
1299
+ },
1300
+ {
1301
+ "name": "order",
1302
+ "description": "The sort currently applied, asc or desc, or absent when unsorted.",
1303
+ "type": {
1304
+ "text": "string"
1305
+ }
1306
+ }
1307
+ ],
1308
+ "slots": [],
1309
+ "events": [
1310
+ {
1311
+ "name": "sort:requested",
1312
+ "description": "Fired with the sorter and the next order when activated.",
1313
+ "type": {
1314
+ "text": "CustomEvent"
1315
+ }
1316
+ }
1317
+ ]
1318
+ },
1319
+ {
1320
+ "kind": "class",
1321
+ "name": "InstantFilter",
1322
+ "tagName": "ful-filter-instant",
1323
+ "customElement": true,
1324
+ "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.",
1325
+ "attributes": [
1326
+ {
1327
+ "name": "type",
1328
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
353
1329
  "type": {
354
- "text": "boolean"
1330
+ "text": "string"
355
1331
  }
356
1332
  },
357
1333
  {
358
- "name": "placeholder",
359
- "description": "Placeholder shown while the field is empty.",
1334
+ "name": "v-type",
1335
+ "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.",
360
1336
  "type": {
361
1337
  "text": "string"
362
1338
  }
363
1339
  },
364
1340
  {
365
- "name": "min",
366
- "description": "Earliest selectable date. Accepts a date, now, or a day, month or year offset.",
1341
+ "name": "keep",
1342
+ "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.",
367
1343
  "type": {
368
1344
  "text": "string"
369
1345
  }
370
1346
  },
371
1347
  {
372
- "name": "max",
373
- "description": "Latest selectable date. Accepts a date, now, or a day, month or year offset.",
1348
+ "name": "reject",
1349
+ "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.",
374
1350
  "type": {
375
1351
  "text": "string"
376
1352
  }
377
1353
  },
378
1354
  {
379
- "name": "step",
380
- "description": "Step between selectable dates, in days.",
1355
+ "name": "uppercase",
1356
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
381
1357
  "type": {
382
- "text": "string"
1358
+ "text": "boolean"
383
1359
  }
384
- }
385
- ],
386
- "slots": [
387
- {
388
- "name": "",
389
- "description": "The label of the field."
390
- },
391
- {
392
- "name": "info",
393
- "description": "Extra content rendered next to the label, for a hint or a help icon."
394
- },
395
- {
396
- "name": "ibefore",
397
- "description": "An addon rendered inside the input group, before the control."
398
- },
399
- {
400
- "name": "before",
401
- "description": "Content rendered before the control, outside the addon styling."
402
1360
  },
403
1361
  {
404
- "name": "after",
405
- "description": "Content rendered after the control, outside the addon styling."
406
- },
407
- {
408
- "name": "iafter",
409
- "description": "An addon rendered inside the input group, after the control."
410
- }
411
- ],
412
- "events": [
413
- {
414
- "name": "change",
415
- "description": "Fired with the current date.",
1362
+ "name": "trim",
1363
+ "description": "Trims the value on the way out, leaving what was typed alone.",
416
1364
  "type": {
417
- "text": "CustomEvent"
1365
+ "text": "boolean"
418
1366
  }
419
- }
420
- ]
421
- },
422
- {
423
- "kind": "class",
424
- "name": "InputLocalTime",
425
- "tagName": "ful-input-local-time",
426
- "customElement": true,
427
- "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.",
428
- "attributes": [
1367
+ },
429
1368
  {
430
- "name": "value",
431
- "description": "The current value.",
1369
+ "name": "disabled",
1370
+ "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.",
432
1371
  "type": {
433
- "text": "string"
1372
+ "text": "boolean"
434
1373
  }
435
1374
  },
436
1375
  {
@@ -448,29 +1387,22 @@
448
1387
  }
449
1388
  },
450
1389
  {
451
- "name": "placeholder",
452
- "description": "Placeholder shown while the field is empty.",
453
- "type": {
454
- "text": "string"
455
- }
456
- },
457
- {
458
- "name": "min",
459
- "description": "Earliest selectable time. Accepts a time, now, or an offset such as +2h or -30m.",
1390
+ "name": "value",
1391
+ "description": "JSON tuple of the operator and its bounds, for example [\"BETWEEN\", from, to].",
460
1392
  "type": {
461
1393
  "text": "string"
462
1394
  }
463
1395
  },
464
1396
  {
465
- "name": "max",
466
- "description": "Latest selectable time. Accepts a time, now, or an offset such as +2h or -30m.",
1397
+ "name": "placeholder",
1398
+ "description": "Placeholder shown while the field is empty.",
467
1399
  "type": {
468
1400
  "text": "string"
469
1401
  }
470
1402
  },
471
1403
  {
472
- "name": "step",
473
- "description": "Step between selectable times, in seconds. The bounds are truncated to this grid.",
1404
+ "name": "operators",
1405
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ, LT, GT, LTE, GTE, BETWEEN. Defaults to all of them.",
474
1406
  "type": {
475
1407
  "text": "string"
476
1408
  }
@@ -485,27 +1417,19 @@
485
1417
  "name": "info",
486
1418
  "description": "Extra content rendered next to the label, for a hint or a help icon."
487
1419
  },
488
- {
489
- "name": "ibefore",
490
- "description": "An addon rendered inside the input group, before the control."
491
- },
492
1420
  {
493
1421
  "name": "before",
494
- "description": "Content rendered before the control, outside the addon styling."
1422
+ "description": "An addon rendered inside the input group, before the control."
495
1423
  },
496
1424
  {
497
1425
  "name": "after",
498
- "description": "Content rendered after the control, outside the addon styling."
499
- },
500
- {
501
- "name": "iafter",
502
1426
  "description": "An addon rendered inside the input group, after the control."
503
1427
  }
504
1428
  ],
505
1429
  "events": [
506
1430
  {
507
1431
  "name": "change",
508
- "description": "Fired with the current time.",
1432
+ "description": "Fired with the whole tuple, or undefined when the filter is incomplete.",
509
1433
  "type": {
510
1434
  "text": "CustomEvent"
511
1435
  }
@@ -514,144 +1438,118 @@
514
1438
  },
515
1439
  {
516
1440
  "kind": "class",
517
- "name": "InputInstant",
518
- "tagName": "ful-input-instant",
1441
+ "name": "LocalDateFilter",
1442
+ "tagName": "ful-filter-local-date",
519
1443
  "customElement": true,
520
- "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.",
1444
+ "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.",
521
1445
  "attributes": [
522
1446
  {
523
- "name": "value",
524
- "description": "The current value.",
1447
+ "name": "type",
1448
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
525
1449
  "type": {
526
1450
  "text": "string"
527
1451
  }
528
1452
  },
529
1453
  {
530
- "name": "readonly",
531
- "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
1454
+ "name": "v-type",
1455
+ "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.",
532
1456
  "type": {
533
- "text": "boolean"
1457
+ "text": "string"
534
1458
  }
535
1459
  },
536
1460
  {
537
- "name": "required",
538
- "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
1461
+ "name": "keep",
1462
+ "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.",
539
1463
  "type": {
540
- "text": "boolean"
1464
+ "text": "string"
541
1465
  }
542
1466
  },
543
1467
  {
544
- "name": "placeholder",
545
- "description": "Placeholder shown while the field is empty.",
1468
+ "name": "reject",
1469
+ "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.",
546
1470
  "type": {
547
1471
  "text": "string"
548
1472
  }
549
1473
  },
550
1474
  {
551
- "name": "min",
552
- "description": "Earliest selectable instant, as an ISO instant.",
1475
+ "name": "uppercase",
1476
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
553
1477
  "type": {
554
- "text": "string"
1478
+ "text": "boolean"
555
1479
  }
556
1480
  },
557
1481
  {
558
- "name": "max",
559
- "description": "Latest selectable instant, as an ISO instant.",
1482
+ "name": "trim",
1483
+ "description": "Trims the value on the way out, leaving what was typed alone.",
560
1484
  "type": {
561
- "text": "string"
1485
+ "text": "boolean"
562
1486
  }
563
1487
  },
564
1488
  {
565
- "name": "step",
566
- "description": "Step between selectable instants, in seconds.",
1489
+ "name": "disabled",
1490
+ "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.",
567
1491
  "type": {
568
- "text": "string"
1492
+ "text": "boolean"
569
1493
  }
570
- }
571
- ],
572
- "slots": [
573
- {
574
- "name": "",
575
- "description": "The label of the field."
576
- },
577
- {
578
- "name": "info",
579
- "description": "Extra content rendered next to the label, for a hint or a help icon."
580
- },
581
- {
582
- "name": "ibefore",
583
- "description": "An addon rendered inside the input group, before the control."
584
- },
585
- {
586
- "name": "before",
587
- "description": "Content rendered before the control, outside the addon styling."
588
1494
  },
589
1495
  {
590
- "name": "after",
591
- "description": "Content rendered after the control, outside the addon styling."
1496
+ "name": "readonly",
1497
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
1498
+ "type": {
1499
+ "text": "boolean"
1500
+ }
592
1501
  },
593
1502
  {
594
- "name": "iafter",
595
- "description": "An addon rendered inside the input group, after the control."
596
- }
597
- ],
598
- "events": [
599
- {
600
- "name": "change",
601
- "description": "Fired with the current instant.",
1503
+ "name": "required",
1504
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
602
1505
  "type": {
603
- "text": "CustomEvent"
1506
+ "text": "boolean"
604
1507
  }
605
- }
606
- ]
607
- },
608
- {
609
- "kind": "class",
610
- "name": "RadioGroup",
611
- "tagName": "ful-radio-group",
612
- "customElement": true,
613
- "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.",
614
- "attributes": [
1508
+ },
615
1509
  {
616
1510
  "name": "value",
617
- "description": "The value of the selected radio.",
1511
+ "description": "JSON tuple of the operator and its bounds, for example [\"BETWEEN\", from, to].",
618
1512
  "type": {
619
1513
  "text": "string"
620
1514
  }
621
1515
  },
622
1516
  {
623
- "name": "readonly",
624
- "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
1517
+ "name": "placeholder",
1518
+ "description": "Placeholder shown while the field is empty.",
625
1519
  "type": {
626
- "text": "boolean"
1520
+ "text": "string"
627
1521
  }
628
1522
  },
629
1523
  {
630
- "name": "required",
631
- "description": "Marks the field as required for assistive technologies and shows the required marker on its label.",
1524
+ "name": "operators",
1525
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ, LT, GT, LTE, GTE, BETWEEN. Defaults to all of them.",
632
1526
  "type": {
633
- "text": "boolean"
1527
+ "text": "string"
634
1528
  }
635
1529
  }
636
1530
  ],
637
1531
  "slots": [
638
1532
  {
639
1533
  "name": "",
640
- "description": "The legend of the group, and its ful-radio children."
1534
+ "description": "The label of the field."
641
1535
  },
642
1536
  {
643
- "name": "header",
644
- "description": "Content rendered above the radios."
1537
+ "name": "info",
1538
+ "description": "Extra content rendered next to the label, for a hint or a help icon."
645
1539
  },
646
1540
  {
647
- "name": "footer",
648
- "description": "Content rendered below the radios."
1541
+ "name": "before",
1542
+ "description": "An addon rendered inside the input group, before the control."
1543
+ },
1544
+ {
1545
+ "name": "after",
1546
+ "description": "An addon rendered inside the input group, after the control."
649
1547
  }
650
1548
  ],
651
1549
  "events": [
652
1550
  {
653
1551
  "name": "change",
654
- "description": "Fired with the value of the selected radio.",
1552
+ "description": "Fired with the whole tuple, or undefined when the filter is incomplete.",
655
1553
  "type": {
656
1554
  "text": "CustomEvent"
657
1555
  }
@@ -660,98 +1558,58 @@
660
1558
  },
661
1559
  {
662
1560
  "kind": "class",
663
- "name": "Table",
664
- "tagName": "ful-table",
665
- "customElement": true,
666
- "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.",
667
- "attributes": [],
668
- "slots": [
669
- {
670
- "name": "filters",
671
- "description": "Fields wrapped in a ful-form, submitted to filter the table."
672
- },
673
- {
674
- "name": "caption",
675
- "description": "The caption of the table."
676
- },
677
- {
678
- "name": "footer",
679
- "description": "Content rendered in the table footer."
680
- }
681
- ],
682
- "events": []
683
- },
684
- {
685
- "kind": "class",
686
- "name": "Pagination",
687
- "tagName": "ful-pagination",
1561
+ "name": "NumberFilter",
1562
+ "tagName": "ful-filter-number",
688
1563
  "customElement": true,
689
- "description": "The pager of a ful-table. Rarely used on its own.",
1564
+ "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.",
690
1565
  "attributes": [
691
1566
  {
692
- "name": "total",
693
- "description": "Number of pages.",
1567
+ "name": "type",
1568
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
694
1569
  "type": {
695
- "text": "number"
1570
+ "text": "string"
696
1571
  }
697
1572
  },
698
1573
  {
699
- "name": "current",
700
- "description": "Zero based index of the page being shown.",
701
- "type": {
702
- "text": "number"
703
- }
704
- }
705
- ],
706
- "slots": [],
707
- "events": [
708
- {
709
- "name": "page-requested",
710
- "description": "Fired with the zero based index of the page the user asked for.",
1574
+ "name": "v-type",
1575
+ "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.",
711
1576
  "type": {
712
- "text": "CustomEvent"
1577
+ "text": "string"
713
1578
  }
714
- }
715
- ]
716
- },
717
- {
718
- "kind": "class",
719
- "name": "SortButton",
720
- "tagName": "ful-sorter",
721
- "customElement": true,
722
- "description": "The sort control rendered in a ful-table header. Rarely used on its own.",
723
- "attributes": [
1579
+ },
724
1580
  {
725
- "name": "order",
726
- "description": "The sort currently applied, asc or desc, or absent when unsorted.",
1581
+ "name": "keep",
1582
+ "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.",
727
1583
  "type": {
728
1584
  "text": "string"
729
1585
  }
730
- }
731
- ],
732
- "slots": [],
733
- "events": [
1586
+ },
734
1587
  {
735
- "name": "sort-requested",
736
- "description": "Fired with the sorter and the next order when clicked.",
1588
+ "name": "reject",
1589
+ "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.",
737
1590
  "type": {
738
- "text": "CustomEvent"
1591
+ "text": "string"
739
1592
  }
740
- }
741
- ]
742
- },
743
- {
744
- "kind": "class",
745
- "name": "InstantFilter",
746
- "tagName": "ful-filter-instant",
747
- "customElement": true,
748
- "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.",
749
- "attributes": [
1593
+ },
750
1594
  {
751
- "name": "value",
752
- "description": "JSON tuple of the operator and its bounds, for example [\"BETWEEN\", from, to].",
1595
+ "name": "uppercase",
1596
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
753
1597
  "type": {
754
- "text": "string"
1598
+ "text": "boolean"
1599
+ }
1600
+ },
1601
+ {
1602
+ "name": "trim",
1603
+ "description": "Trims the value on the way out, leaving what was typed alone.",
1604
+ "type": {
1605
+ "text": "boolean"
1606
+ }
1607
+ },
1608
+ {
1609
+ "name": "disabled",
1610
+ "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.",
1611
+ "type": {
1612
+ "text": "boolean"
755
1613
  }
756
1614
  },
757
1615
  {
@@ -768,12 +1626,26 @@
768
1626
  "text": "boolean"
769
1627
  }
770
1628
  },
1629
+ {
1630
+ "name": "value",
1631
+ "description": "JSON tuple of the operator and its bound(s).",
1632
+ "type": {
1633
+ "text": "string"
1634
+ }
1635
+ },
771
1636
  {
772
1637
  "name": "placeholder",
773
1638
  "description": "Placeholder shown while the field is empty.",
774
1639
  "type": {
775
1640
  "text": "string"
776
1641
  }
1642
+ },
1643
+ {
1644
+ "name": "operators",
1645
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ, LT, GT, LTE, GTE, BETWEEN. Defaults to all of them.",
1646
+ "type": {
1647
+ "text": "string"
1648
+ }
777
1649
  }
778
1650
  ],
779
1651
  "slots": [
@@ -785,20 +1657,12 @@
785
1657
  "name": "info",
786
1658
  "description": "Extra content rendered next to the label, for a hint or a help icon."
787
1659
  },
788
- {
789
- "name": "ibefore",
790
- "description": "An addon rendered inside the input group, before the control."
791
- },
792
1660
  {
793
1661
  "name": "before",
794
- "description": "Content rendered before the control, outside the addon styling."
1662
+ "description": "An addon rendered inside the input group, before the control."
795
1663
  },
796
1664
  {
797
1665
  "name": "after",
798
- "description": "Content rendered after the control, outside the addon styling."
799
- },
800
- {
801
- "name": "iafter",
802
1666
  "description": "An addon rendered inside the input group, after the control."
803
1667
  }
804
1668
  ],
@@ -814,16 +1678,16 @@
814
1678
  },
815
1679
  {
816
1680
  "kind": "class",
817
- "name": "LocalDateFilter",
818
- "tagName": "ful-filter-local-date",
1681
+ "name": "BooleanFilter",
1682
+ "tagName": "ful-filter-boolean",
819
1683
  "customElement": true,
820
- "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.",
1684
+ "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.",
821
1685
  "attributes": [
822
1686
  {
823
- "name": "value",
824
- "description": "JSON tuple of the operator and its bounds, for example [\"BETWEEN\", from, to].",
1687
+ "name": "disabled",
1688
+ "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.",
825
1689
  "type": {
826
- "text": "string"
1690
+ "text": "boolean"
827
1691
  }
828
1692
  },
829
1693
  {
@@ -841,8 +1705,15 @@
841
1705
  }
842
1706
  },
843
1707
  {
844
- "name": "placeholder",
845
- "description": "Placeholder shown while the field is empty.",
1708
+ "name": "value",
1709
+ "description": "JSON tuple of the operator and the token.",
1710
+ "type": {
1711
+ "text": "string"
1712
+ }
1713
+ },
1714
+ {
1715
+ "name": "operators",
1716
+ "description": "Comma separated list of the operators the menu offers, out of EQ, NEQ. Defaults to both.",
846
1717
  "type": {
847
1718
  "text": "string"
848
1719
  }
@@ -857,27 +1728,19 @@
857
1728
  "name": "info",
858
1729
  "description": "Extra content rendered next to the label, for a hint or a help icon."
859
1730
  },
860
- {
861
- "name": "ibefore",
862
- "description": "An addon rendered inside the input group, before the control."
863
- },
864
1731
  {
865
1732
  "name": "before",
866
- "description": "Content rendered before the control, outside the addon styling."
1733
+ "description": "An addon rendered inside the input group, before the control."
867
1734
  },
868
1735
  {
869
1736
  "name": "after",
870
- "description": "Content rendered after the control, outside the addon styling."
871
- },
872
- {
873
- "name": "iafter",
874
1737
  "description": "An addon rendered inside the input group, after the control."
875
1738
  }
876
1739
  ],
877
1740
  "events": [
878
1741
  {
879
1742
  "name": "change",
880
- "description": "Fired with the whole tuple, or undefined when the filter is incomplete.",
1743
+ "description": "Fired with the whole tuple, or undefined when nothing is picked.",
881
1744
  "type": {
882
1745
  "text": "CustomEvent"
883
1746
  }
@@ -889,15 +1752,57 @@
889
1752
  "name": "TextFilter",
890
1753
  "tagName": "ful-filter-text",
891
1754
  "customElement": true,
892
- "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.",
1755
+ "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.",
893
1756
  "attributes": [
894
1757
  {
895
- "name": "value",
896
- "description": "JSON tuple of the operator, the sensitivity and the text.",
1758
+ "name": "type",
1759
+ "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins.",
1760
+ "type": {
1761
+ "text": "string"
1762
+ }
1763
+ },
1764
+ {
1765
+ "name": "v-type",
1766
+ "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.",
1767
+ "type": {
1768
+ "text": "string"
1769
+ }
1770
+ },
1771
+ {
1772
+ "name": "keep",
1773
+ "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.",
1774
+ "type": {
1775
+ "text": "string"
1776
+ }
1777
+ },
1778
+ {
1779
+ "name": "reject",
1780
+ "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.",
897
1781
  "type": {
898
1782
  "text": "string"
899
1783
  }
900
1784
  },
1785
+ {
1786
+ "name": "uppercase",
1787
+ "description": "Upper-cases the value on the way out, leaving what was typed alone.",
1788
+ "type": {
1789
+ "text": "boolean"
1790
+ }
1791
+ },
1792
+ {
1793
+ "name": "trim",
1794
+ "description": "Trims the value on the way out, leaving what was typed alone.",
1795
+ "type": {
1796
+ "text": "boolean"
1797
+ }
1798
+ },
1799
+ {
1800
+ "name": "disabled",
1801
+ "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.",
1802
+ "type": {
1803
+ "text": "boolean"
1804
+ }
1805
+ },
901
1806
  {
902
1807
  "name": "readonly",
903
1808
  "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
@@ -912,12 +1817,33 @@
912
1817
  "text": "boolean"
913
1818
  }
914
1819
  },
1820
+ {
1821
+ "name": "value",
1822
+ "description": "JSON tuple of the operator, the sensitivity and the text.",
1823
+ "type": {
1824
+ "text": "string"
1825
+ }
1826
+ },
915
1827
  {
916
1828
  "name": "placeholder",
917
1829
  "description": "Placeholder shown while the field is empty.",
918
1830
  "type": {
919
1831
  "text": "string"
920
1832
  }
1833
+ },
1834
+ {
1835
+ "name": "operators",
1836
+ "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.",
1837
+ "type": {
1838
+ "text": "string"
1839
+ }
1840
+ },
1841
+ {
1842
+ "name": "sensitivities",
1843
+ "description": "Comma separated list of the case sensitivity modes, IGNORE_CASE, CASE_SENSITIVE. A single entry pins every emitted tuple to it.",
1844
+ "type": {
1845
+ "text": "string"
1846
+ }
921
1847
  }
922
1848
  ],
923
1849
  "slots": [
@@ -929,20 +1855,12 @@
929
1855
  "name": "info",
930
1856
  "description": "Extra content rendered next to the label, for a hint or a help icon."
931
1857
  },
932
- {
933
- "name": "ibefore",
934
- "description": "An addon rendered inside the input group, before the control."
935
- },
936
1858
  {
937
1859
  "name": "before",
938
- "description": "Content rendered before the control, outside the addon styling."
1860
+ "description": "An addon rendered inside the input group, before the control."
939
1861
  },
940
1862
  {
941
1863
  "name": "after",
942
- "description": "Content rendered after the control, outside the addon styling."
943
- },
944
- {
945
- "name": "iafter",
946
1864
  "description": "An addon rendered inside the input group, after the control."
947
1865
  }
948
1866
  ],
@@ -961,15 +1879,106 @@
961
1879
  "name": "Select",
962
1880
  "tagName": "ful-select",
963
1881
  "customElement": true,
964
- "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.",
1882
+ "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.",
965
1883
  "attributes": [
966
1884
  {
967
- "name": "value",
968
- "description": "The selected key, or a comma separated list of keys when multiple.",
1885
+ "name": "name",
1886
+ "description": "The field name the surrounding form submits the selection under.",
1887
+ "type": {
1888
+ "text": "string"
1889
+ }
1890
+ },
1891
+ {
1892
+ "name": "loader",
1893
+ "description": "The registered component name the select loads its vocabulary through; loaders:select when absent.",
1894
+ "type": {
1895
+ "text": "string"
1896
+ }
1897
+ },
1898
+ {
1899
+ "name": "k-type",
1900
+ "description": "How a key coerces when it arrives from the response or from the value attribute: number, string or bool.",
1901
+ "type": {
1902
+ "text": "string"
1903
+ }
1904
+ },
1905
+ {
1906
+ "name": "src",
1907
+ "description": "The url the vocabulary is fetched from. Without it the slotted <option> elements are the whole vocabulary, held in memory.",
1908
+ "type": {
1909
+ "text": "string"
1910
+ }
1911
+ },
1912
+ {
1913
+ "name": "method",
1914
+ "description": "The method the vocabulary is fetched with; POST when absent.",
1915
+ "type": {
1916
+ "text": "string"
1917
+ }
1918
+ },
1919
+ {
1920
+ "name": "mode",
1921
+ "description": "chunked asks the endpoint per query instead of fetching the vocabulary once, for a list too large to hold.",
1922
+ "type": {
1923
+ "text": "string"
1924
+ }
1925
+ },
1926
+ {
1927
+ "name": "preload",
1928
+ "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.",
1929
+ "type": {
1930
+ "text": "boolean"
1931
+ }
1932
+ },
1933
+ {
1934
+ "name": "revision",
1935
+ "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.",
1936
+ "type": {
1937
+ "text": "string"
1938
+ }
1939
+ },
1940
+ {
1941
+ "name": "k-expr",
1942
+ "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.",
1943
+ "type": {
1944
+ "text": "string"
1945
+ }
1946
+ },
1947
+ {
1948
+ "name": "l-expr",
1949
+ "description": "The expression yielding an option's label, evaluated against each row of the response.",
1950
+ "type": {
1951
+ "text": "string"
1952
+ }
1953
+ },
1954
+ {
1955
+ "name": "d-expr",
1956
+ "description": "The expression yielding the rows from the response body; the body itself when absent.",
1957
+ "type": {
1958
+ "text": "string"
1959
+ }
1960
+ },
1961
+ {
1962
+ "name": "m-expr",
1963
+ "description": "The expression yielding an option's metadata, evaluated against each row; the whole row when absent.",
1964
+ "type": {
1965
+ "text": "string"
1966
+ }
1967
+ },
1968
+ {
1969
+ "name": "response-mapper",
1970
+ "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.",
969
1971
  "type": {
970
1972
  "text": "string"
971
1973
  }
972
1974
  },
1975
+ {
1976
+ "name": "disabled",
1977
+ "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.",
1978
+ "type": {
1979
+ "text": "boolean"
1980
+ }
1981
+ },
973
1982
  {
974
1983
  "name": "readonly",
975
1984
  "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form.",
@@ -985,8 +1994,22 @@
985
1994
  }
986
1995
  },
987
1996
  {
988
- "name": "itemlist",
989
- "description": "Shows the selection as a list under the control as well as badges.",
1997
+ "name": "value",
1998
+ "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.",
1999
+ "type": {
2000
+ "text": "string"
2001
+ }
2002
+ },
2003
+ {
2004
+ "name": "multiple",
2005
+ "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.",
2006
+ "type": {
2007
+ "text": "boolean"
2008
+ }
2009
+ },
2010
+ {
2011
+ "name": "item-list",
2012
+ "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).",
990
2013
  "type": {
991
2014
  "text": "boolean"
992
2015
  }
@@ -1002,24 +2025,16 @@
1002
2025
  "description": "Extra content rendered next to the label, for a hint or a help icon."
1003
2026
  },
1004
2027
  {
1005
- "name": "ibefore",
2028
+ "name": "before",
1006
2029
  "description": "An addon rendered inside the input group, before the control."
1007
2030
  },
1008
2031
  {
1009
- "name": "before",
1010
- "description": "Content rendered before the control, outside the addon styling."
2032
+ "name": "after",
2033
+ "description": "An addon rendered inside the input group, after the control."
1011
2034
  },
1012
2035
  {
1013
2036
  "name": "dropdown",
1014
2037
  "description": "Replaces the template used to render the options."
1015
- },
1016
- {
1017
- "name": "after",
1018
- "description": "Content rendered after the control, outside the addon styling."
1019
- },
1020
- {
1021
- "name": "iafter",
1022
- "description": "An addon rendered inside the input group, after the control."
1023
2038
  }
1024
2039
  ],
1025
2040
  "events": [
@@ -1037,10 +2052,25 @@
1037
2052
  "name": "Dropdown",
1038
2053
  "tagName": "ful-dropdown",
1039
2054
  "customElement": true,
1040
- "description": "The options popup of a ful-select. Rarely used on its own.",
1041
- "attributes": [],
2055
+ "description": "The options popup of a ful-select, with a localized no-results message when the search matches nothing. Rarely used on its own.",
2056
+ "attributes": [
2057
+ {
2058
+ "name": "listbox",
2059
+ "description": "The id to give the listbox, so a host can point aria-controls and aria-activedescendant at it before this element upgrades.",
2060
+ "type": {
2061
+ "text": "string"
2062
+ }
2063
+ }
2064
+ ],
1042
2065
  "slots": [],
1043
2066
  "events": [
2067
+ {
2068
+ "name": "activechange",
2069
+ "description": "Fired with the id of the option the reader is on, for the combobox that controls the listbox.",
2070
+ "type": {
2071
+ "text": "CustomEvent"
2072
+ }
2073
+ },
1044
2074
  {
1045
2075
  "name": "change",
1046
2076
  "description": "Fired with the option that was picked.",
@@ -1054,9 +2084,57 @@
1054
2084
  "exports": [
1055
2085
  {
1056
2086
  "kind": "custom-element-definition",
1057
- "name": "ful-spinner",
2087
+ "name": "ful-tooltip",
2088
+ "declaration": {
2089
+ "name": "Tooltip",
2090
+ "module": "dist/fml.mjs"
2091
+ }
2092
+ },
2093
+ {
2094
+ "kind": "custom-element-definition",
2095
+ "name": "ful-dialog",
2096
+ "declaration": {
2097
+ "name": "Dialog",
2098
+ "module": "dist/fml.mjs"
2099
+ }
2100
+ },
2101
+ {
2102
+ "kind": "custom-element-definition",
2103
+ "name": "ful-drawer",
2104
+ "declaration": {
2105
+ "name": "Drawer",
2106
+ "module": "dist/fml.mjs"
2107
+ }
2108
+ },
2109
+ {
2110
+ "kind": "custom-element-definition",
2111
+ "name": "ful-toasts",
2112
+ "declaration": {
2113
+ "name": "Toasts",
2114
+ "module": "dist/fml.mjs"
2115
+ }
2116
+ },
2117
+ {
2118
+ "kind": "custom-element-definition",
2119
+ "name": "ful-tabs",
2120
+ "declaration": {
2121
+ "name": "Tabs",
2122
+ "module": "dist/fml.mjs"
2123
+ }
2124
+ },
2125
+ {
2126
+ "kind": "custom-element-definition",
2127
+ "name": "ful-accordion",
2128
+ "declaration": {
2129
+ "name": "Accordion",
2130
+ "module": "dist/fml.mjs"
2131
+ }
2132
+ },
2133
+ {
2134
+ "kind": "custom-element-definition",
2135
+ "name": "ful-wizard",
1058
2136
  "declaration": {
1059
- "name": "Spinner",
2137
+ "name": "Wizard",
1060
2138
  "module": "dist/fml.mjs"
1061
2139
  }
1062
2140
  },
@@ -1180,6 +2258,22 @@
1180
2258
  "module": "dist/fml.mjs"
1181
2259
  }
1182
2260
  },
2261
+ {
2262
+ "kind": "custom-element-definition",
2263
+ "name": "ful-filter-number",
2264
+ "declaration": {
2265
+ "name": "NumberFilter",
2266
+ "module": "dist/fml.mjs"
2267
+ }
2268
+ },
2269
+ {
2270
+ "kind": "custom-element-definition",
2271
+ "name": "ful-filter-boolean",
2272
+ "declaration": {
2273
+ "name": "BooleanFilter",
2274
+ "module": "dist/fml.mjs"
2275
+ }
2276
+ },
1183
2277
  {
1184
2278
  "kind": "custom-element-definition",
1185
2279
  "name": "ful-filter-text",