@optionfactory/fml 9.0.0-rc3 → 9.0.0-rc31

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 (44) hide show
  1. package/README.md +16 -88
  2. package/dist/client-errors.iife.js +40 -49
  3. package/dist/client-errors.iife.js.map +1 -1
  4. package/dist/client-errors.iife.min.js +1 -1
  5. package/dist/client-errors.iife.min.js.map +1 -1
  6. package/dist/custom-elements.json +491 -51
  7. package/dist/fml.css +25 -20
  8. package/dist/fml.css.map +1 -1
  9. package/dist/fml.iife.js +5866 -2563
  10. package/dist/fml.iife.js.map +1 -1
  11. package/dist/fml.iife.min.js +1 -1
  12. package/dist/fml.iife.min.js.map +1 -1
  13. package/dist/ftl.d.mts +425 -231
  14. package/dist/ftl.iife.js +774 -1044
  15. package/dist/ftl.iife.js.map +1 -1
  16. package/dist/ftl.iife.min.js +1 -1
  17. package/dist/ftl.iife.min.js.map +1 -1
  18. package/dist/ftl.min.mjs +1 -1
  19. package/dist/ftl.min.mjs.map +1 -1
  20. package/dist/ftl.mjs +774 -1044
  21. package/dist/ftl.mjs.map +1 -1
  22. package/dist/ful.css +25 -20
  23. package/dist/ful.css.map +1 -1
  24. package/dist/ful.d.mts +3048 -556
  25. package/dist/ful.iife.js +4977 -1395
  26. package/dist/ful.iife.js.map +1 -1
  27. package/dist/ful.iife.min.js +1 -1
  28. package/dist/ful.iife.min.js.map +1 -1
  29. package/dist/ful.min.mjs +1 -1
  30. package/dist/ful.min.mjs.map +1 -1
  31. package/dist/ful.mjs +4975 -1396
  32. package/dist/ful.mjs.map +1 -1
  33. package/dist/httpc.d.mts +143 -123
  34. package/dist/httpc.iife.js +163 -175
  35. package/dist/httpc.iife.js.map +1 -1
  36. package/dist/httpc.iife.min.js +1 -1
  37. package/dist/httpc.iife.min.js.map +1 -1
  38. package/dist/httpc.min.mjs +1 -1
  39. package/dist/httpc.min.mjs.map +1 -1
  40. package/dist/httpc.mjs +163 -175
  41. package/dist/httpc.mjs.map +1 -1
  42. package/dist/vscode.html-custom-data.json +239 -39
  43. package/dist/web-types.json +498 -51
  44. package/package.json +2 -2
@@ -3,41 +3,79 @@
3
3
  "tags": [
4
4
  {
5
5
  "name": "ful-tooltip",
6
- "description": "An info affordance: a themed icon button toggling a small popover with a short explanation, opened by click and by keyboard like a button, dismissed by Escape or an outside click. placement picks the side the note sits on: bottom (default), top, left or right.",
6
+ "description": "An info affordance: a themed icon button toggling a small popover with a short explanation, opened by click and by keyboard like a button, dismissed by Escape or an outside click. placement picks the side the note sits on: top (default), bottom, left or right.",
7
7
  "attributes": [
8
8
  {
9
9
  "name": "placement",
10
- "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. (string)"
10
+ "description": "Which side of the trigger the note opens on: top (the default), bottom, left or right. Above by default because a note opening downwards covers the control the marker explains. The library places the note itself on every platform, so the side is the same everywhere. (string)"
11
+ },
12
+ {
13
+ "name": "icon",
14
+ "description": "The ful-icon the marker shows, for a tooltip meaning something other than plain information. Defaults to the page's Tooltip.config.icon; a name the library does not paint is declared by the page as ful-icon[name='...'] { mask-image: ... }. (string)"
15
+ },
16
+ {
17
+ "name": "describes",
18
+ "description": "For a tooltip standing in a field: the note joins the accessible description of that field's control, announced on reaching the field rather than only on opening the marker, and the marker leaves the tab order so a form of hinted fields costs no extra keystrokes to walk. The marker stays clickable, and keeps its tab stop wherever nothing took the note. (boolean)"
11
19
  }
12
20
  ]
13
21
  },
14
22
  {
15
23
  "name": "ful-dialog",
16
- "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.",
24
+ "description": "A modal dialog on the native platform: header, body and buttons, the header attribute naming its heading, opened by any element carrying dialog-target set to its id, or programmatically through open()/ask(), which answer with how the dialog ended, or through update(callback), which opens it on a loading state and then shows either what the callback delivered or the problems of a rejection. dismiss(reason) dismisses it as the close button would, refusable and guarded alike, answering whether it closed. Longer explanations belong here, shorter ones in ful-tooltip. Dialog.ask(header, body, buttons) and Dialog.confirm(header, body, labels) ask a question in a transient one, building, showing, answering and removing the element themselves; a confirm's cancel, close and Escape all answer the negative.",
17
25
  "attributes": [
18
26
  {
19
27
  "name": "header",
20
28
  "description": "The dialog's title, shown in its header. Text only; slot content into the body instead for anything richer. (string)"
29
+ },
30
+ {
31
+ "name": "requires-answer",
32
+ "description": "For the dialog that must be answered: the close button is not rendered and Escape is refused, so the only way out is a button carrying a result. Both, since a close button withheld while Escape still worked would be decoration rather than a rule. (boolean)"
33
+ },
34
+ {
35
+ "name": "close-on-submit",
36
+ "description": "For the dialog whose answer is a form succeeding rather than a button being pressed: its own form submitting successfully closes it and answers with the response. Opt in, and its own form only, a ful-form the body holds directly, since a ful-table wraps its filters in a form of its own and searching one is not the dialog being answered. Such a dialog renders no acknowledge button of its own, the form's submit being its answer. (boolean)"
37
+ },
38
+ {
39
+ "name": "guard-dismiss",
40
+ "description": "For the dialog holding a form the user edits: a dismissal nobody refused, while a ful-form of the dialog under track-changes holds edits not saved yet, first asks the user through Dialog.confirm whether to close and drop them, with the localized dialog.discard texts. Gestures and dismiss() are asked about; close(), a data-result button, close-on-submit and update() are answers or the page deciding, and ask nothing. A second Escape with no interaction in between closes it whatever the user would answer. (boolean)"
21
41
  }
22
42
  ]
23
43
  },
24
44
  {
25
45
  "name": "ful-drawer",
26
- "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.",
46
+ "description": "A side panel drawer on the native dialog platform: a header with its title (the header attribute, or update()'s own) and close button, and a body that shows the slotted content or, under update(header, callback), opens in a loading state and then shows either the content the callback delivered or the error a rejecting callback carries. placement picks the side, end by default, start its mirror. open()/ask() answer with how the drawer ended, as a ful-dialog's do, an ask() on a drawer update() opened waiting for that opening's ending; dismiss(reason) dismisses it as the close button would, refusable and guarded alike, answering whether it closed. Any element carrying dialog-target set to its id opens it too.",
27
47
  "attributes": [
28
48
  {
29
- "name": "title",
49
+ "name": "header",
30
50
  "description": "The drawer's title, shown in its header. Text only, and also what update() re-titles the panel with. (string)"
31
51
  },
32
52
  {
33
53
  "name": "placement",
34
54
  "description": "Which edge the panel slides in from: end (the default) or start, following the page's writing direction. (string)"
55
+ },
56
+ {
57
+ "name": "close-on-submit",
58
+ "description": "For the drawer whose ending is a form succeeding rather than its close button being pressed: the form its content holds directly submitting successfully closes it, the close event carrying the response. Opt in, and its own form only, since a ful-table wraps its filters in a form of its own and searching one is not the drawer finishing. (boolean)"
59
+ },
60
+ {
61
+ "name": "guard-dismiss",
62
+ "description": "For the drawer holding a form the user edits: a dismissal nobody refused, while a ful-form of the drawer under track-changes holds edits not saved yet, first asks the user through Dialog.confirm whether to close and drop them, with the localized dialog.discard texts. Gestures and dismiss() are asked about; close(), a data-result button, close-on-submit and update() are answers or the page deciding, and ask nothing. A second Escape with no interaction in between closes it whatever the user would answer. (boolean)"
63
+ }
64
+ ]
65
+ },
66
+ {
67
+ "name": "ful-menu",
68
+ "description": "A menu of commands on the native popover platform: the invoker named by for toggles it, or, without for, one menu serves many invokers and showFor(invoker) opens it beside the one it is for. Light dismiss and Escape come from the browser, and the element adds the menu semantics and the keyboard protocol (roving focus with the arrows, Home and End, type-ahead, Enter and Space to activate, Escape and every close handing the focus back to the invoker). The items are the buttons and links written inside it, kept as they are and given their menuitem role; activation is the item's own click, which the menu only follows by closing.",
69
+ "attributes": [
70
+ {
71
+ "name": "for",
72
+ "description": "The id of the invoker the menu belongs to: it toggles the menu, carries aria-haspopup and aria-expanded, and takes the focus back when the menu closes. Read once at the upgrade, so the invoker must already be in the page by then. Without it the menu is shared, opened by showFor(invoker). (string)"
35
73
  }
36
74
  ]
37
75
  },
38
76
  {
39
77
  "name": "ful-toasts",
40
- "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.",
78
+ "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. The timer holds while the toast is hovered or holds the focus, and action: { label, onClick } renders a button beside the message whose click answers and retires the toast, the same option travelling in the event detail.",
41
79
  "attributes": [
42
80
  {
43
81
  "name": "timeout",
@@ -51,7 +89,7 @@
51
89
  "attributes": [
52
90
  {
53
91
  "name": "active",
54
- "description": "The index of the visible panel, zero based, reflected as the active attribute. Clicks, the arrow keys and the property all move it, each move answering with a change event. (number)"
92
+ "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 tabs:change event. (number)"
55
93
  }
56
94
  ]
57
95
  },
@@ -67,7 +105,7 @@
67
105
  },
68
106
  {
69
107
  "name": "ful-wizard",
70
- "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.",
108
+ "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 wizard:change event.",
71
109
  "attributes": [
72
110
  {
73
111
  "name": "progress",
@@ -110,6 +148,14 @@
110
148
  {
111
149
  "name": "autocomplete",
112
150
  "description": "The autofill token every field in the form takes unless it declares one of its own, copied onto the form element the host renders. A form cannot pass it down the way the platform would: each control carries form=\"\" so that the host is the only thing that submits, which leaves it with no form owner to inherit through, so the fields read it off the form instead. (string)"
151
+ },
152
+ {
153
+ "name": "track-changes",
154
+ "description": "Keeps track of the edits not saved yet: dirty answers whether a field the user edited since the last commit holds another value, the host matches :state(dirty) and the submit buttons carry a dot while it does. A successful submit commits, and so does the form once its fields have rendered; commit() is for a save of the page's own, and save() submits only while there is something to save, answering whether nothing unsaved is left. A ful-drawer or ful-dialog under guard-dismiss asks before a dismissal drops the edits. (boolean)"
155
+ },
156
+ {
157
+ "name": "guard-leave",
158
+ "description": "Asks before the page is left while the form holds edits not saved yet, through the browser's own prompt. Implies track-changes. (boolean)"
113
159
  }
114
160
  ]
115
161
  },
@@ -141,11 +187,11 @@
141
187
  },
142
188
  {
143
189
  "name": "ful-input",
144
- "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.",
190
+ "description": "A labelled text input. Use type to pick any native input type, the keypad types numeric and decimal, 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.",
145
191
  "attributes": [
146
192
  {
147
193
  "name": "type",
148
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
194
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
149
195
  },
150
196
  {
151
197
  "name": "v-type",
@@ -153,7 +199,7 @@
153
199
  },
154
200
  {
155
201
  "name": "keep",
156
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
202
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
157
203
  },
158
204
  {
159
205
  "name": "reject",
@@ -167,6 +213,10 @@
167
213
  "name": "trim",
168
214
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
169
215
  },
216
+ {
217
+ "name": "unsigned",
218
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
219
+ },
170
220
  {
171
221
  "name": "autocomplete",
172
222
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
@@ -195,11 +245,11 @@
195
245
  },
196
246
  {
197
247
  "name": "ful-input-file",
198
- "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.",
248
+ "description": "A file input with an optional dropzone and a list of the selected files, enforcing the size and count limits it declares; the no-input claim takes the picker control out of sight, 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.",
199
249
  "attributes": [
200
250
  {
201
251
  "name": "type",
202
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
252
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
203
253
  },
204
254
  {
205
255
  "name": "v-type",
@@ -207,7 +257,7 @@
207
257
  },
208
258
  {
209
259
  "name": "keep",
210
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
260
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
211
261
  },
212
262
  {
213
263
  "name": "reject",
@@ -221,6 +271,10 @@
221
271
  "name": "trim",
222
272
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
223
273
  },
274
+ {
275
+ "name": "unsigned",
276
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
277
+ },
224
278
  {
225
279
  "name": "autocomplete",
226
280
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
@@ -261,6 +315,10 @@
261
315
  "name": "dropzone",
262
316
  "description": "Shows the dropzone. (boolean)"
263
317
  },
318
+ {
319
+ "name": "no-input",
320
+ "description": "Takes the picker control out of sight, for a field carried by its dropzone and its item list. The control stays reachable from the keyboard, which opens the picker from it. (boolean)"
321
+ },
264
322
  {
265
323
  "name": "max-files",
266
324
  "description": "Maximum number of files. Exceeding it clears the selection. (number)"
@@ -309,7 +367,7 @@
309
367
  "attributes": [
310
368
  {
311
369
  "name": "type",
312
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
370
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
313
371
  },
314
372
  {
315
373
  "name": "v-type",
@@ -317,7 +375,7 @@
317
375
  },
318
376
  {
319
377
  "name": "keep",
320
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
378
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
321
379
  },
322
380
  {
323
381
  "name": "reject",
@@ -331,6 +389,10 @@
331
389
  "name": "trim",
332
390
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
333
391
  },
392
+ {
393
+ "name": "unsigned",
394
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
395
+ },
334
396
  {
335
397
  "name": "autocomplete",
336
398
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
@@ -375,7 +437,7 @@
375
437
  "attributes": [
376
438
  {
377
439
  "name": "type",
378
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
440
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
379
441
  },
380
442
  {
381
443
  "name": "v-type",
@@ -383,7 +445,7 @@
383
445
  },
384
446
  {
385
447
  "name": "keep",
386
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
448
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
387
449
  },
388
450
  {
389
451
  "name": "reject",
@@ -397,6 +459,10 @@
397
459
  "name": "trim",
398
460
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
399
461
  },
462
+ {
463
+ "name": "unsigned",
464
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
465
+ },
400
466
  {
401
467
  "name": "autocomplete",
402
468
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
@@ -441,7 +507,7 @@
441
507
  "attributes": [
442
508
  {
443
509
  "name": "type",
444
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
510
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
445
511
  },
446
512
  {
447
513
  "name": "v-type",
@@ -449,7 +515,7 @@
449
515
  },
450
516
  {
451
517
  "name": "keep",
452
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
518
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
453
519
  },
454
520
  {
455
521
  "name": "reject",
@@ -463,6 +529,10 @@
463
529
  "name": "trim",
464
530
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
465
531
  },
532
+ {
533
+ "name": "unsigned",
534
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
535
+ },
466
536
  {
467
537
  "name": "autocomplete",
468
538
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
@@ -541,11 +611,19 @@
541
611
  },
542
612
  {
543
613
  "name": "autoload",
544
- "description": "Loads the first page while upgrading, instead of waiting for a reload(). The load is not awaited, so a slow or failing loader cannot hold up the page. (boolean)"
614
+ "description": "Loads the first page while upgrading, instead of waiting for a reload(). With a filters slot the load goes through the filter form's submit, so its submit listeners shape it as they shape the later loads. The load is not awaited, so a slow or failing loader cannot hold up the page. (boolean)"
545
615
  },
546
616
  {
547
617
  "name": "page-size",
548
618
  "description": "How many rows a page asks the loader for, 10 by default. Stays live: writing it reloads from the first page, a table that has not been asked to load yet only recording it. (number)"
619
+ },
620
+ {
621
+ "name": "src",
622
+ "description": "The url the default loader asks for rows; without it the table loads from an in-memory loader fed through withLoader. Stays live: writing it builds the loader again and reloads from the first page, keeping the sort and the filters. (string)"
623
+ },
624
+ {
625
+ "name": "method",
626
+ "description": "The http method the default loader sends, GET by default. Stays live, as src does. (string)"
549
627
  }
550
628
  ]
551
629
  },
@@ -587,7 +665,7 @@
587
665
  "attributes": [
588
666
  {
589
667
  "name": "type",
590
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
668
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
591
669
  },
592
670
  {
593
671
  "name": "v-type",
@@ -595,7 +673,7 @@
595
673
  },
596
674
  {
597
675
  "name": "keep",
598
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
676
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
599
677
  },
600
678
  {
601
679
  "name": "reject",
@@ -609,10 +687,18 @@
609
687
  "name": "trim",
610
688
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
611
689
  },
690
+ {
691
+ "name": "unsigned",
692
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
693
+ },
612
694
  {
613
695
  "name": "autocomplete",
614
696
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
615
697
  },
698
+ {
699
+ "name": "operator",
700
+ "description": "Fixes the operator for the element's life: no menu and no button render, and every tuple carries it. The plural is the menu's whitelist; declaring both warns, the singular winning, and an unknown name warns and pins the filter's default. (string)"
701
+ },
616
702
  {
617
703
  "name": "disabled",
618
704
  "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
@@ -645,7 +731,7 @@
645
731
  "attributes": [
646
732
  {
647
733
  "name": "type",
648
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
734
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
649
735
  },
650
736
  {
651
737
  "name": "v-type",
@@ -653,7 +739,7 @@
653
739
  },
654
740
  {
655
741
  "name": "keep",
656
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
742
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
657
743
  },
658
744
  {
659
745
  "name": "reject",
@@ -667,10 +753,18 @@
667
753
  "name": "trim",
668
754
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
669
755
  },
756
+ {
757
+ "name": "unsigned",
758
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
759
+ },
670
760
  {
671
761
  "name": "autocomplete",
672
762
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
673
763
  },
764
+ {
765
+ "name": "operator",
766
+ "description": "Fixes the operator for the element's life: no menu and no button render, and every tuple carries it. The plural is the menu's whitelist; declaring both warns, the singular winning, and an unknown name warns and pins the filter's default. (string)"
767
+ },
674
768
  {
675
769
  "name": "disabled",
676
770
  "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
@@ -703,7 +797,7 @@
703
797
  "attributes": [
704
798
  {
705
799
  "name": "type",
706
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
800
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
707
801
  },
708
802
  {
709
803
  "name": "v-type",
@@ -711,7 +805,7 @@
711
805
  },
712
806
  {
713
807
  "name": "keep",
714
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
808
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
715
809
  },
716
810
  {
717
811
  "name": "reject",
@@ -725,10 +819,18 @@
725
819
  "name": "trim",
726
820
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
727
821
  },
822
+ {
823
+ "name": "unsigned",
824
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
825
+ },
728
826
  {
729
827
  "name": "autocomplete",
730
828
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
731
829
  },
830
+ {
831
+ "name": "operator",
832
+ "description": "Fixes the operator for the element's life: no menu and no button render, and every tuple carries it. The plural is the menu's whitelist; declaring both warns, the singular winning, and an unknown name warns and pins the filter's default. (string)"
833
+ },
732
834
  {
733
835
  "name": "disabled",
734
836
  "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
@@ -783,11 +885,11 @@
783
885
  },
784
886
  {
785
887
  "name": "ful-filter-text",
786
- "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.",
888
+ "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.",
787
889
  "attributes": [
788
890
  {
789
891
  "name": "type",
790
- "description": "Any native input type, or the literal textarea to render one. Defaults to number under v-type=number, and a declared type wins. (string)"
892
+ "description": "Any native input type, the literal textarea to render one, or numeric and decimal, which render a text input carrying that inputmode and filter what can be typed: numeric takes digits and a leading minus, decimal one separator as well, answering it as a dot whatever the keyboard offered. Neither enforces min, max or step, which the native number type still does. Defaults to number under v-type=number, and a declared type wins. (string)"
791
893
  },
792
894
  {
793
895
  "name": "v-type",
@@ -795,7 +897,7 @@
795
897
  },
796
898
  {
797
899
  "name": "keep",
798
- "description": "A regular expression naming the characters that survive a keystroke, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class. (string)"
900
+ "description": "A regular expression naming what survives: on every input event the whole value is filtered to its matches, concatenated, so keep=\"[0-9]\" is digits only. It matches rather than negating, so it takes a pattern and not only a character class, and the pattern must match each partial value typed on the way to a complete one. (string)"
799
901
  },
800
902
  {
801
903
  "name": "reject",
@@ -809,10 +911,22 @@
809
911
  "name": "trim",
810
912
  "description": "Trims the value on the way out, leaving what was typed alone. (boolean)"
811
913
  },
914
+ {
915
+ "name": "unsigned",
916
+ "description": "Refuses the leading minus a numeric or decimal field otherwise takes. It narrows the type's own filter rather than replacing it, so a decimal still keeps one separator and still answers with a dot. Meaningless on any other type, where the sign is the native control's business, and a declared keep or reject still outranks it. (boolean)"
917
+ },
812
918
  {
813
919
  "name": "autocomplete",
814
920
  "description": "The autofill token the browser classifies the control by, one of the names the html autocomplete grammar defines (name, given-name, street-address, postal-code, one-time-code, off, ...). It is set on the control itself because the control carries form=\"\", which leaves it without a form owner to inherit a form-wide setting from. Read once at the upgrade. A value outside the grammar reads as on, so an identifier of your own does not switch autofill off. (string)"
815
921
  },
922
+ {
923
+ "name": "operator",
924
+ "description": "Fixes the operator for the element's life: no menu and no button render, and every tuple carries it. The plural is the menu's whitelist; declaring both warns, the singular winning, and an unknown name warns and pins the filter's default. (string)"
925
+ },
926
+ {
927
+ "name": "sensitivity",
928
+ "description": "Fixes the case sensitivity for the element's life, on the operator's terms: the button leaves and every tuple carries it. (string)"
929
+ },
816
930
  {
817
931
  "name": "disabled",
818
932
  "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
@@ -844,8 +958,8 @@
844
958
  ]
845
959
  },
846
960
  {
847
- "name": "ful-select",
848
- "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.",
961
+ "name": "ful-filter-in",
962
+ "description": "A ful-table filter over set membership, answering for both of data-jpa's set annotations: InEnum and InList take the same array of values and no operator, differing only in what the server converts them to. The vocabulary comes from wherever a select's does, slotted options or a loader, and the value is an array whether one key was chosen or several, an empty selection contributing nothing rather than an empty array. It picks one key unless multiple is declared, as a ful-select does.",
849
963
  "attributes": [
850
964
  {
851
965
  "name": "name",
@@ -857,15 +971,93 @@
857
971
  },
858
972
  {
859
973
  "name": "k-type",
860
- "description": "How a key coerces when it arrives from the response or from the value attribute: number, string or bool. (string)"
974
+ "description": "How a key coerces when it arrives from the response or from the value attribute: number, string or boolean. (string)"
975
+ },
976
+ {
977
+ "name": "mode",
978
+ "description": "chunked asks the endpoint per query instead of fetching the vocabulary once, for a list too large to hold. (string)"
979
+ },
980
+ {
981
+ "name": "preload",
982
+ "description": "Fetches the vocabulary while the element upgrades rather than on first use. The field paints immediately either way; the options arrive when they arrive. (boolean)"
983
+ },
984
+ {
985
+ "name": "revision",
986
+ "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. Left valueless, the revision the registry's 'revision' component answers is used, so a page states its build once instead of every element repeating it. (string)"
987
+ },
988
+ {
989
+ "name": "k-expr",
990
+ "description": "The expression yielding an option's key, evaluated against each row of the response. Set it together with l-expr to shape a response without a mapper component. (string)"
991
+ },
992
+ {
993
+ "name": "l-expr",
994
+ "description": "The expression yielding an option's label, evaluated against each row of the response. (string)"
995
+ },
996
+ {
997
+ "name": "d-expr",
998
+ "description": "The expression yielding the rows from the response body; the body itself when absent. (string)"
999
+ },
1000
+ {
1001
+ "name": "m-expr",
1002
+ "description": "The expression yielding an option's metadata, evaluated against each row; the whole row when absent. (string)"
1003
+ },
1004
+ {
1005
+ "name": "response-mapper",
1006
+ "description": "The registered component name that turns a response into { key, label, metadata } entries. The k-expr/l-expr pair takes precedence; without either, the response is read as positional rows. (string)"
1007
+ },
1008
+ {
1009
+ "name": "operator",
1010
+ "description": "A fixed operator sent in front of the chosen keys, for the field a compare reads rather than a set: absent the value is the bare array an InEnum or an InList takes, present it is [operator, ...keys]. No menu is rendered either way, the operator being the author naming the server's comparison rather than a choice offered to whoever is filtering. The criterion reports it, so a chip can show it. (string)"
1011
+ },
1012
+ {
1013
+ "name": "disabled",
1014
+ "description": "The field's own disabled claim: the control is disabled and the field is left out of the submitted values, composed with a disabled fieldset ancestry. The property reflects the claim only, matches(':disabled') tells the effective state. (boolean)"
1015
+ },
1016
+ {
1017
+ "name": "readonly",
1018
+ "description": "Renders the control but does not let it be edited. A readonly field still contributes its value to the form. (boolean)"
1019
+ },
1020
+ {
1021
+ "name": "required",
1022
+ "description": "Marks the field as required for assistive technologies and shows the required marker on its label. (boolean)"
1023
+ },
1024
+ {
1025
+ "name": "value",
1026
+ "description": "Comma separated list of the selected keys. Empty contributes nothing, so the table drops the filter rather than sending an empty set. (string)"
1027
+ },
1028
+ {
1029
+ "name": "multiple",
1030
+ "description": "Always on for this element: a set of one is still a set, and a single selection would answer a bare key where the filter request wants an array. (boolean)"
1031
+ },
1032
+ {
1033
+ "name": "item-list",
1034
+ "description": "Shows the selection as a ful-item-list under the control. For a multiple select the list replaces the ful-badge chips, which it hides; a single select keeps its label in the field as well. (boolean)"
861
1035
  },
862
1036
  {
863
1037
  "name": "src",
864
- "description": "The url the vocabulary is fetched from. Without it the slotted <option> elements are the whole vocabulary, held in memory. (string)"
1038
+ "description": "The url the vocabulary is fetched from. Without it the slotted <option> elements are the whole vocabulary, held in memory. Stays live: writing it builds the loader again and reloads as reload() does, dropping a selected key the new vocabulary does not know. (string)"
865
1039
  },
866
1040
  {
867
1041
  "name": "method",
868
- "description": "The method the vocabulary is fetched with; POST when absent. (string)"
1042
+ "description": "The method the vocabulary is fetched with; POST when absent. Stays live, as src does. (string)"
1043
+ }
1044
+ ]
1045
+ },
1046
+ {
1047
+ "name": "ful-select",
1048
+ "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.",
1049
+ "attributes": [
1050
+ {
1051
+ "name": "name",
1052
+ "description": "The field name the surrounding form submits the selection under. (string)"
1053
+ },
1054
+ {
1055
+ "name": "loader",
1056
+ "description": "The registered component name the select loads its vocabulary through; loaders:select when absent. (string)"
1057
+ },
1058
+ {
1059
+ "name": "k-type",
1060
+ "description": "How a key coerces when it arrives from the response or from the value attribute: number, string or boolean. (string)"
869
1061
  },
870
1062
  {
871
1063
  "name": "mode",
@@ -877,7 +1069,7 @@
877
1069
  },
878
1070
  {
879
1071
  "name": "revision",
880
- "description": "Caches the fetched vocabulary in local storage under this revision; a load under a different one is a miss that evicts the entry. It is the cache's namespace, so a vocabulary that differs per user wants the principal in it. (string)"
1072
+ "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. Left valueless, the revision the registry's 'revision' component answers is used, so a page states its build once instead of every element repeating it. (string)"
881
1073
  },
882
1074
  {
883
1075
  "name": "k-expr",
@@ -913,7 +1105,7 @@
913
1105
  },
914
1106
  {
915
1107
  "name": "value",
916
- "description": "The selected keys, comma separated, whether or not the select is multiple. A key given here is trimmed and cannot contain a comma; assign such a key through the property instead. The property answers a key for a single select and an array for a multiple one. (string)"
1108
+ "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. A single select reads a present but empty attribute as the empty key, the one an <option value=\"\"> carries, where an absent attribute means no selection; a multiple select reads it as no keys. (string)"
917
1109
  },
918
1110
  {
919
1111
  "name": "multiple",
@@ -921,13 +1113,21 @@
921
1113
  },
922
1114
  {
923
1115
  "name": "item-list",
924
- "description": "Shows the selection as a ful-item-list under the control as well, in addition to the field itself (the label for a single select, the ful-badge chips when multiple). (boolean)"
1116
+ "description": "Shows the selection as a ful-item-list under the control. For a multiple select the list replaces the ful-badge chips, which it hides; a single select keeps its label in the field as well. (boolean)"
1117
+ },
1118
+ {
1119
+ "name": "src",
1120
+ "description": "The url the vocabulary is fetched from. Without it the slotted <option> elements are the whole vocabulary, held in memory. Stays live: writing it builds the loader again and reloads as reload() does, dropping a selected key the new vocabulary does not know. (string)"
1121
+ },
1122
+ {
1123
+ "name": "method",
1124
+ "description": "The method the vocabulary is fetched with; POST when absent. Stays live, as src does. (string)"
925
1125
  }
926
1126
  ]
927
1127
  },
928
1128
  {
929
1129
  "name": "ful-dropdown",
930
- "description": "The options popup of a ful-select, with a localized no-results message when the search matches nothing. Rarely used on its own.",
1130
+ "description": "The options popup of a ful-select, with a localized no-results message when the search matches nothing. An entry whose metadata.disabled is truthy is refused: its row carries aria-disabled and metadata.reason as its title, the arrows and Home/End walk past it, and a click on it changes nothing. Rarely used on its own.",
931
1131
  "attributes": [
932
1132
  {
933
1133
  "name": "listbox",