@optionfactory/fml 9.0.0-rc28 → 9.0.0-rc29

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 (43) hide show
  1. package/dist/client-errors.iife.js +21 -16
  2. package/dist/client-errors.iife.js.map +1 -1
  3. package/dist/client-errors.iife.min.js +1 -1
  4. package/dist/client-errors.iife.min.js.map +1 -1
  5. package/dist/custom-elements.json +16 -16
  6. package/dist/fml.css +13 -13
  7. package/dist/fml.css.map +1 -1
  8. package/dist/fml.iife.js +871 -883
  9. package/dist/fml.iife.js.map +1 -1
  10. package/dist/fml.iife.min.js +1 -1
  11. package/dist/fml.iife.min.js.map +1 -1
  12. package/dist/ftl.d.mts +3 -3
  13. package/dist/ftl.iife.js +275 -679
  14. package/dist/ftl.iife.js.map +1 -1
  15. package/dist/ftl.iife.min.js +1 -1
  16. package/dist/ftl.iife.min.js.map +1 -1
  17. package/dist/ftl.min.mjs +1 -1
  18. package/dist/ftl.min.mjs.map +1 -1
  19. package/dist/ftl.mjs +275 -679
  20. package/dist/ftl.mjs.map +1 -1
  21. package/dist/ful.css +13 -13
  22. package/dist/ful.css.map +1 -1
  23. package/dist/ful.d.mts +195 -71
  24. package/dist/ful.iife.js +564 -189
  25. package/dist/ful.iife.js.map +1 -1
  26. package/dist/ful.iife.min.js +1 -1
  27. package/dist/ful.iife.min.js.map +1 -1
  28. package/dist/ful.min.mjs +1 -1
  29. package/dist/ful.min.mjs.map +1 -1
  30. package/dist/ful.mjs +564 -189
  31. package/dist/ful.mjs.map +1 -1
  32. package/dist/httpc.d.mts +9 -7
  33. package/dist/httpc.iife.js +32 -15
  34. package/dist/httpc.iife.js.map +1 -1
  35. package/dist/httpc.iife.min.js +1 -1
  36. package/dist/httpc.iife.min.js.map +1 -1
  37. package/dist/httpc.min.mjs +1 -1
  38. package/dist/httpc.min.mjs.map +1 -1
  39. package/dist/httpc.mjs +32 -15
  40. package/dist/httpc.mjs.map +1 -1
  41. package/dist/vscode.html-custom-data.json +13 -13
  42. package/dist/web-types.json +17 -17
  43. package/package.json +2 -2
package/dist/ful.d.mts CHANGED
@@ -361,7 +361,9 @@ declare class Bindings {
361
361
  * alone and a composite field named for a prefix catches the problems of its
362
362
  * subtree. Each control of that name gets `setCustomValidity(reason, rest)`,
363
363
  * `rest` being the remainder of the path (`''` on an exact match) that a
364
- * composite can use to route the problem to an inner control.
364
+ * composite can use to route the problem to an inner control. Several
365
+ * problems reaching one control with the same `rest` are joined one per
366
+ * line into a single call.
365
367
  *
366
368
  * A control counts only when it can show a problem, through a
367
369
  * `setCustomValidity` of its own: a form-associated element that has none is
@@ -376,7 +378,8 @@ declare class Bindings {
376
378
  * Each `ful-field-error` of the form gets `aria-live="off"` when
377
379
  * `scrollOnError` is set, since focusing the field announces its error, and
378
380
  * `aria-live="polite"` otherwise. With `scrollOnError` and at least one
379
- * problem, the topmost `:invalid` control is focused.
381
+ * problem, the topmost `:invalid` control is focused; a `<fieldset>`
382
+ * matching `:invalid` for the controls it holds is not a candidate.
380
383
  *
381
384
  * A banner or `ful-field-error` belongs to the nearest enclosing form, so
382
385
  * those of a nested form are left alone.
@@ -403,9 +406,12 @@ declare class Bindings {
403
406
  *
404
407
  * The claim setters, the validity protocol and the aria wiring all act on the
405
408
  * pieces, so a field with no native control returns a focusable piece of its
406
- * own chrome as the control. The claim getters and `focus()` are the only
407
- * members that tolerate a not yet rendered element; the other members need the
408
- * pieces and so work only after the render.
409
+ * own chrome as the control. The claims, `value` and `focus()` are the
410
+ * members that tolerate a not yet rendered element: before the render the
411
+ * `value` getter answers what the rendered field would answer from its current
412
+ * declared state, and a value written then is held and applied by the render
413
+ * (see `_holdValue`). The other members need the pieces and so work only after
414
+ * the render.
409
415
  *
410
416
  * The inner controls carry `form=""`, so the host is the only element the form
411
417
  * sees. Enter pressed in an inner `<input>` of any type but `file`, `button`,
@@ -517,11 +523,35 @@ declare class Field extends ParsedElement {
517
523
  * @returns {boolean}
518
524
  */
519
525
  _interactive(): boolean;
526
+ /**
527
+ * Upgrades as `ParsedElement.upgrade` does, then writes the value held by
528
+ * `_holdValue`, if any, through the `value` setter: the value written
529
+ * before the render wins over the declared one.
530
+ * @returns {Promise<void>} rejecting with what the render threw
531
+ */
532
+ upgrade(): Promise<void>;
533
+ /**
534
+ * Keeps a value written before the field has its control, for a subclass's
535
+ * `value` setter to call in place of writing it: the upgrade writes it
536
+ * through the setter once the field has rendered, over the declared one.
537
+ * The `value` attribute is left alone, so a reset still restores it.
538
+ * @param {any} value
539
+ */
540
+ _holdValue(value: any): void;
541
+ /**
542
+ * The value a subclass's `value` getter shapes before the field has its
543
+ * control: the one `_holdValue` kept, else the declared `value` attribute
544
+ * read through its mapper.
545
+ * @returns {any}
546
+ */
547
+ _heldValue(): any;
520
548
  /**
521
549
  * The field's value, `null` when empty. Every concrete field overrides the
522
550
  * pair with its own semantics; the form extraction, `values =` assignment,
523
551
  * the `change` detail and `formResetCallback` all go through it. The base
524
- * pair reads `undefined` and ignores writes.
552
+ * pair reads `undefined` and ignores writes. A concrete field answers and
553
+ * takes its value before the render too, through `_heldValue` and
554
+ * `_holdValue`.
525
555
  * @type {any}
526
556
  */
527
557
  get value(): any;
@@ -766,7 +796,7 @@ declare class Form extends ParsedElement {
766
796
  connectedCallback(): void;
767
797
  disconnectedCallback(): void;
768
798
  /**
769
- * Runs the submit pipeline, with the spinner up for its whole length:
799
+ * Runs the submit pipeline, with the spinner up until its outcome:
770
800
  *
771
801
  * 1. builds the loader: the component the `loader` attribute names
772
802
  * (`loaders:form` by default), called as `create(form)`
@@ -783,8 +813,8 @@ declare class Form extends ParsedElement {
783
813
  * 6. has the loader `submit` the request and `transform` the response
784
814
  * 7. under `track-changes`, commits the values extracted at step 2 (see
785
815
  * `commit`): an edit made while the submit was in flight stays unsaved
786
- * 8. fires `submit:success` with `{ submitter, values, request, response }`,
787
- * `response` being the transformed one
816
+ * 8. releases the spinner and fires `submit:success` with `{ submitter,
817
+ * values, request, response }`, `response` being the transformed one
788
818
  *
789
819
  * Anything thrown from step 1 on, a missing loader or a throwing mapper
790
820
  * included, fires `submit:failure` with `{ submitter, values, request,
@@ -793,6 +823,11 @@ declare class Form extends ParsedElement {
793
823
  * `console.warn`. The `values` of both outcome events are the extracted
794
824
  * ones, not a replacement a `submit` listener put on its detail.
795
825
  *
826
+ * The form settles before either outcome event (0016): its listeners see
827
+ * the spinner released and the buttons no longer held off, the problems of
828
+ * a `Failure` already shown, and the submit no longer in flight, so one
829
+ * of them may submit again.
830
+ *
796
831
  * A call while a submit is in flight returns at once, doing nothing.
797
832
  * @param {HTMLElement} [submitter] the button that submitted, if any; it is
798
833
  * the only button whose name and value are submitted
@@ -813,8 +848,9 @@ declare class Form extends ParsedElement {
813
848
  save(submitter?: HTMLElement): Promise<boolean>;
814
849
  /**
815
850
  * Resets the native form, each field returning to its default value. Under
816
- * `track-changes` every control counts as edited: the form is dirty if the
817
- * defaults differ from what was last committed.
851
+ * `track-changes` a reset, this one or a native reset button's, counts
852
+ * every control as edited: the form is dirty if the defaults differ from
853
+ * what was last committed.
818
854
  */
819
855
  reset(): void;
820
856
  /**
@@ -977,8 +1013,12 @@ declare class Input extends Field {
977
1013
  * `v-type="number"`, where text that does not decode is answered as it is.
978
1014
  * Writing `null`, `undefined` or `''` empties the control; anything else is
979
1015
  * written as its string, replacing whatever was being typed, as a native
980
- * control's value does. Answers a `string`, a `number` or `null`; typed
981
- * `any` because subclasses answer other values.
1016
+ * control's value does, and is not an edit: a date or time control that
1017
+ * has the focus reports no `change` for it when it is left. Answers a
1018
+ * `string`, a `number` or `null`; typed `any` because subclasses answer
1019
+ * other values. Before the render the same shaping reads the value last
1020
+ * written, or the `value` attribute, as its text, and a write is held for
1021
+ * the render to apply.
982
1022
  * @type {any}
983
1023
  */
984
1024
  get value(): any;
@@ -1098,7 +1138,9 @@ declare class InputInstant extends Input {
1098
1138
  static observed: string[];
1099
1139
  _type(): string;
1100
1140
  /**
1101
- * The entered time as a UTC ISO instant.
1141
+ * The entered time as a UTC ISO instant. Before the render it answers the
1142
+ * value last written, or the `value` attribute, as the rendered field
1143
+ * would, and a write is held for the render to apply.
1102
1144
  * @returns {string|null} null when empty or when the input holds text that does not parse
1103
1145
  */
1104
1146
  get value(): string | null;
@@ -1206,7 +1248,7 @@ declare class InputFile extends Input {
1206
1248
  /** @param {boolean} v */
1207
1249
  set multiple(v: boolean);
1208
1250
  /**
1209
- * The selected files, after the constraints.
1251
+ * The selected files, after the constraints; none before the render.
1210
1252
  * @returns {FileList}
1211
1253
  */
1212
1254
  get files(): FileList;
@@ -1228,13 +1270,14 @@ declare class InputFile extends Input {
1228
1270
  set file(v: File | null | undefined);
1229
1271
  /**
1230
1272
  * The names of the selected files: an array when `multiple`, otherwise the
1231
- * one name or null.
1273
+ * one name or null. Before the render no file is selected yet.
1232
1274
  * @returns {string[]|string|null}
1233
1275
  */
1234
1276
  get value(): string[] | string | null;
1235
1277
  /**
1236
1278
  * Empties the selection for a falsy value and ignores any other, since a
1237
- * file name cannot select a file.
1279
+ * file name cannot select a file. Before the render there is nothing to
1280
+ * empty, so it does nothing.
1238
1281
  * @param {any} v
1239
1282
  */
1240
1283
  set value(v: any);
@@ -1338,7 +1381,8 @@ declare class Anchors {
1338
1381
  * which light dismiss then closes with no script of your own. The popover
1339
1382
  * is given the generated id when it has none. A `button` or `input`
1340
1383
  * invoker gets a `popovertarget` naming it; any other element toggles it
1341
- * on click and on the Enter and Space keys
1384
+ * on click and on the Enter and Space keys; a click on it while the
1385
+ * popover is open closes the popover rather than opening it again
1342
1386
  * @param {boolean} [options.expanded] sets the invoker's `aria-expanded` to
1343
1387
  * `false` at once and keeps it in step with the popover's `toggle` events
1344
1388
  * @param {boolean} [options.stretch] in the script placement, sizes the
@@ -1428,7 +1472,8 @@ declare class RemoteLoader {
1428
1472
  */
1429
1473
  prefetch(): Promise<void>;
1430
1474
  /**
1431
- * The entries whose key loosely equals one of the keys, in vocabulary order.
1475
+ * The entries whose key reads as the same text as one of the keys, in
1476
+ * vocabulary order.
1432
1477
  * @param {...any} keys
1433
1478
  * @returns {Promise<SelectEntry[]>}
1434
1479
  * @throws when the fetch fails, or when an invalidation supersedes it
@@ -1503,7 +1548,8 @@ declare class InMemoryLoader {
1503
1548
  */
1504
1549
  invalidate(): Promise<void>;
1505
1550
  /**
1506
- * The entries whose key loosely equals one of the keys, in vocabulary order.
1551
+ * The entries whose key reads as the same text as one of the keys, in
1552
+ * vocabulary order.
1507
1553
  * @param {...any} keys
1508
1554
  * @returns {SelectEntry[]}
1509
1555
  */
@@ -1635,14 +1681,16 @@ declare class Dropdown extends ParsedElement {
1635
1681
  }): void;
1636
1682
  /**
1637
1683
  * Picks the highlighted row, or the first enabled one when none is: hides
1638
- * the dropdown and dispatches `change`. Does nothing when no row is enabled.
1684
+ * the dropdown and dispatches `change`. Does nothing when the highlighted
1685
+ * row is disabled, when no row is enabled, or while a search is loading
1686
+ * and the rows are hidden.
1639
1687
  */
1640
1688
  acceptSelection(): void;
1641
1689
  /**
1642
1690
  * Renders the entries as rows and highlights the first one whose key is
1643
1691
  * picked, else the row the template marked `selected`, else the first
1644
1692
  * enabled row. A row is marked `picked` and
1645
- * `aria-selected="true"` when its key loosely equals one of the keys, and
1693
+ * `aria-selected="true"` when its key reads as the same text as one of the keys, and
1646
1694
  * `aria-disabled="true"` when its `metadata.disabled` is truthy, titled with
1647
1695
  * `metadata.reason`. No entries shows the empty state instead of the menu.
1648
1696
  * @param {SelectEntry[]} values
@@ -1675,7 +1723,8 @@ declare class Dropdown extends ParsedElement {
1675
1723
  show(loader: () => SelectEntry[] | Promise<SelectEntry[]>, keys?: any[]): Promise<void>;
1676
1724
  /**
1677
1725
  * Moves the highlight to the next or previous enabled row when the dropdown
1678
- * is shown, staying put at the edge, and shows it otherwise.
1726
+ * is shown, staying put at the edge and while a search is loading, and
1727
+ * shows it otherwise.
1679
1728
  * @param {boolean} forward
1680
1729
  * @param {() => SelectEntry[]|Promise<SelectEntry[]>} loader used only to show
1681
1730
  * @param {any[]} [keys] the keys currently selected, used only to show
@@ -1684,13 +1733,15 @@ declare class Dropdown extends ParsedElement {
1684
1733
  */
1685
1734
  moveOrShow(forward: boolean, loader: () => SelectEntry[] | Promise<SelectEntry[]>, keys?: any[]): Promise<void>;
1686
1735
  /**
1687
- * Highlights the first enabled row, or the last one.
1736
+ * Highlights the first enabled row, or the last one. Does nothing while a
1737
+ * search is loading and the rows are hidden.
1688
1738
  * @param {boolean} first
1689
1739
  */
1690
1740
  jump(first: boolean): void;
1691
1741
  /**
1692
1742
  * Moves the highlight by as many enabled rows as the menu shows at once,
1693
1743
  * one when that cannot be measured, stopping at the last enabled row.
1744
+ * Does nothing while a search is loading.
1694
1745
  * @param {boolean} forward
1695
1746
  */
1696
1747
  page(forward: boolean): void;
@@ -1780,12 +1831,14 @@ declare class Select extends Field {
1780
1831
  * another control needs when that control changes. A key the loader no
1781
1832
  * longer knows is dropped from the selection, so a value invalidated by the
1782
1833
  * change does not survive it, and one it still knows keeps its place with a
1783
- * fresh label. The badges and items follow, and no `change` is dispatched.
1834
+ * fresh label. The badges and items follow, an open dropdown runs its
1835
+ * search again, and no `change` is dispatched.
1784
1836
  *
1785
1837
  * Where the vocabulary lives at a different address, write `src` or call
1786
1838
  * `reconfigure`, which build the loader for the new url and reload.
1787
1839
  * @returns {Promise<void>}
1788
- * @throws what the loader's invalidate, prefetch or key lookup throws
1840
+ * @throws what the loader's invalidate, prefetch, key lookup or search
1841
+ * throws
1789
1842
  */
1790
1843
  reload(): Promise<void>;
1791
1844
  /**
@@ -1852,20 +1905,23 @@ declare class Select extends Field {
1852
1905
  get query(): string;
1853
1906
  /**
1854
1907
  * Selects the keys, coerced by `k-type`: a key, an array of keys, or null or
1855
- * undefined for none. The empty string is a key like any other. The keys
1856
- * are applied at once, each labeled by itself until the loader's `exact`
1908
+ * undefined for none. The empty string is a key like any other, and a
1909
+ * single select keeps only the first key. The keys are applied at once, each labeled by itself until the loader's `exact`
1857
1910
  * answers; a key it does not answer is then dropped, a key removed in the
1858
1911
  * meantime stays removed, and a later assignment wins over the late answer.
1859
1912
  * A failed lookup keeps the keys and surfaces as an unhandled rejection.
1860
1913
  * No `change` is dispatched. A key containing a
1861
1914
  * comma, which the value attribute cannot carry, is kept and warned about
1862
- * once per element.
1915
+ * once per element. Before the render the write is held for the render to
1916
+ * apply, over the `value` attribute, which it leaves alone.
1863
1917
  * @param {any} vs
1864
1918
  */
1865
1919
  set value(vs: any);
1866
1920
  /**
1867
1921
  * The selected keys, in selection order, for a multiple select; the one
1868
- * key, or null, for a single one.
1922
+ * key, or null, for a single one. Before the render it answers the keys
1923
+ * last written, or the `value` attribute, coerced and cut to one key as the
1924
+ * rendered select would.
1869
1925
  * @returns {any}
1870
1926
  */
1871
1927
  get value(): any;
@@ -1876,14 +1932,32 @@ declare class Select extends Field {
1876
1932
  * @returns {SelectEntry|SelectEntry[]|null}
1877
1933
  */
1878
1934
  get entry(): SelectEntry | SelectEntry[] | null;
1935
+ /**
1936
+ * The field's disabled claim; turning it on while the dropdown is open
1937
+ * closes it and drops a pending search.
1938
+ * @type {boolean}
1939
+ */
1940
+ get disabled(): boolean;
1941
+ set disabled(v: boolean);
1942
+ /**
1943
+ * The field's readonly claim; turning it on while the dropdown is open
1944
+ * closes it and drops a pending search.
1945
+ * @type {boolean}
1946
+ */
1947
+ get readonly(): boolean;
1948
+ set readonly(v: boolean);
1879
1949
  /**
1880
1950
  * Whether the select holds several keys: `value` and `entry` answer arrays,
1881
1951
  * the input stays empty and the selection shows as removable badges in the
1882
- * control.
1952
+ * control. Before the render it answers the `multiple` attribute.
1883
1953
  * @returns {boolean}
1884
1954
  */
1885
1955
  get multiple(): boolean;
1886
- /** @param {boolean} v */
1956
+ /**
1957
+ * Turning it off keeps only the first selected key; either way the badges,
1958
+ * the items and the input follow at once.
1959
+ * @param {boolean} v
1960
+ */
1887
1961
  set multiple(v: boolean);
1888
1962
  /**
1889
1963
  * Whether the selection shows as the `items` list below the control instead
@@ -1899,10 +1973,10 @@ declare class Select extends Field {
1899
1973
  * a radio input carrying its attributes, labelled by its content; every
1900
1974
  * `input-*` attribute on the group is forwarded onto each radio as well. The
1901
1975
  * default slot is the `<legend>`, and `header` and `footer` slots frame the
1902
- * list. The radios share a name of their own (derived from `name`, or minted
1903
- * when there is none) and carry `form=""`, so the group is the only element
1904
- * the form sees. A radio's native `change` is stopped and republished as the
1905
- * group's own.
1976
+ * list. The radios share a name of their own, minted afresh for each group
1977
+ * (from `name` when there is one) so that same-named groups stay apart, and
1978
+ * carry `form=""`, so the group is the only element the form sees. A radio's
1979
+ * native `change` is stopped and republished as the group's own.
1906
1980
  *
1907
1981
  * The host carries the `radiogroup` role, `aria-readonly`, `aria-required`,
1908
1982
  * `aria-invalid` and the description. The disabled and readonly claims act on
@@ -1930,7 +2004,10 @@ declare class RadioGroup extends Field {
1930
2004
  * The value of the checked radio, `null` when none is. Under
1931
2005
  * `type="boolean"` it answers `true` for a radio whose value is `true` and
1932
2006
  * `false` for any other. Writing a value checks the radio carrying it, and
1933
- * writing `null` or a value no radio carries clears the selection.
2007
+ * writing `null` or a value no radio carries clears the selection. Before
2008
+ * the render it answers the value last written, or the `value` attribute,
2009
+ * when a `ful-radio` carries it, and a write is held for the render to
2010
+ * apply.
1934
2011
  * @type {string | boolean | null}
1935
2012
  */
1936
2013
  get value(): string | boolean | null;
@@ -1961,7 +2038,9 @@ declare class Checkbox extends Field {
1961
2038
  }): any;
1962
2039
  /**
1963
2040
  * Whether the box is checked. The `value` attribute is read with the `bool`
1964
- * mapper, where only the text `true` means checked.
2041
+ * mapper, where only the text `true` means checked. Before the render it
2042
+ * answers the value last written, or the `value` attribute, and a write is
2043
+ * held for the render to apply.
1965
2044
  * @type {boolean}
1966
2045
  */
1967
2046
  get value(): boolean;
@@ -2223,12 +2302,17 @@ declare class TableLoader {
2223
2302
  * for it. Without it the table shows an initial panel until `load`,
2224
2303
  * `reload` or `resetWithFilter` is called.
2225
2304
  *
2226
- * Inside the table a `page:requested` loads that page with the current size,
2305
+ * Inside the table, and not inside a `ful-table` nested in it, a
2306
+ * `page:requested` loads that page with the current size,
2227
2307
  * sort and filters; a `sort:requested` loads the current page with the new
2228
2308
  * sort (none for a `null` order) and, once that load is the one showing, sets
2229
2309
  * the order of the sorter that asked and clears the others; a `submit:success`
2230
2310
  * of the filter form loads the first page with the submitted request as the
2231
- * filters. The loads these start, and the autoload, are not awaited by
2311
+ * filters. The first load goes through the filter form too: `reload`, and so
2312
+ * `autoload`, submits it (see `reload`), so a `submit` listener rewriting
2313
+ * `detail.request` shapes every load alike. The filters a page, a sort or a size change carries are those of
2314
+ * the last load asked for, whether it is still running, loaded or failed, so
2315
+ * they are the ones the filter form shows. The loads these start, and the autoload, are not awaited by
2232
2316
  * anything: a failure shows the error panel and its rejection is unhandled.
2233
2317
  */
2234
2318
  declare class Table extends ParsedElement {
@@ -2262,10 +2346,12 @@ declare class Table extends ParsedElement {
2262
2346
  *
2263
2347
  * The reload is not awaited: a failure shows the error panel and its
2264
2348
  * rejection is unhandled.
2265
- * @param {number|null|undefined} value absent or null is the default of
2266
- * ten, so removing the attribute restores it
2349
+ * @param {number|string|null|undefined} value a number or a string of
2350
+ * one, such as a select's value; absent or null is the default of ten,
2351
+ * so removing the attribute restores it, and a value that is not a
2352
+ * number is ignored
2267
2353
  */
2268
- set pageSize(value: number | null | undefined);
2354
+ set pageSize(value: number | string | null | undefined);
2269
2355
  /**
2270
2356
  * The url the loader asks for rows, reflected as the `src` attribute.
2271
2357
  * @returns {string|null}
@@ -2320,14 +2406,21 @@ declare class Table extends ParsedElement {
2320
2406
  }): Promise<void>;
2321
2407
  /**
2322
2408
  * Loads the last request that loaded, or, before any has, the first page
2323
- * with the declared size and sort and the values of the filters slot. A
2324
- * size written through `pageSize` since then replaces the page with the
2325
- * first one at that size.
2409
+ * with the declared size and sort. A size written through `pageSize` since
2410
+ * then replaces the page with the first one at that size.
2411
+ *
2412
+ * Before any load has loaded, a table with a `filters` slot submits its
2413
+ * filter form instead, so the first request goes through the same
2414
+ * `submit` listeners as the later ones, and the load its `submit:success`
2415
+ * starts is the one awaited. A filter submit that is cancelled, fails or
2416
+ * is dropped for one in flight loads nothing, and the promise resolves.
2326
2417
  * @returns {Promise<void>} as `load`
2327
2418
  */
2328
2419
  reload(): Promise<void>;
2329
2420
  /**
2330
- * Asks the loader for a page and shows it.
2421
+ * Asks the loader for a page and shows it. Its filters are, from now on,
2422
+ * the ones a page, a sort or a size change carries, even while it runs
2423
+ * or once it failed.
2331
2424
  *
2332
2425
  * While the load runs the table carries `aria-busy="true"`, and the rows
2333
2426
  * already shown stay; the spinner panel shows only when there are none.
@@ -2335,7 +2428,8 @@ declare class Table extends ParsedElement {
2335
2428
  * panel shows for an answer with no rows (the `empty` slot rendered with
2336
2429
  * `schema`, `pageRequest`, `filterRequest` and `pageResponse` in scope),
2337
2430
  * the request becomes the one
2338
- * `reload` repeats, `aria-busy` is removed and `load:success` is
2431
+ * `reload` repeats; once the elements of the rows and of the empty panel
2432
+ * have rendered, `aria-busy` is removed and `load:success` is
2339
2433
  * dispatched (bubbling, not cancelable) with `detail` set to
2340
2434
  * `{ pageRequest, sortRequest, filterRequest, response }`. A page beyond
2341
2435
  * the last one the answer reports is not shown: the last page is loaded
@@ -2349,7 +2443,9 @@ declare class Table extends ParsedElement {
2349
2443
  * returned promise rejects with the same error.
2350
2444
  *
2351
2445
  * A load started after this one supersedes it: when this one's answer or
2352
- * failure arrives it changes nothing, dispatches nothing and resolves.
2446
+ * failure arrives it changes nothing, dispatches nothing and resolves;
2447
+ * superseded while its rows render, it leaves them to the newer load and
2448
+ * dispatches nothing.
2353
2449
  * @param {TablePageRequest} pageRequest
2354
2450
  * @param {TableSortRequest|null} sortRequest
2355
2451
  * @param {Record<string, any>} filterRequest
@@ -2543,7 +2639,8 @@ declare class CompareFilter extends Input {
2543
2639
  * The operators the menu offers, narrowed to the vocabulary: an empty list,
2544
2640
  * or one where no name is known, offers all of it. A single operator pins
2545
2641
  * the button, and an assigned tuple then carries that operator whatever it
2546
- * names. An assignment made before the upgrade is held narrowed and
2642
+ * names. When the operator shown leaves the list, the first listed one is
2643
+ * shown. An assignment made before the upgrade is held narrowed and
2547
2644
  * answered back until the render, when the `operators` attribute is applied
2548
2645
  * over it, an absent attribute meaning the whole vocabulary. Assignments are
2549
2646
  * ignored while the `operator` attribute fixes the operator.
@@ -2556,17 +2653,27 @@ declare class CompareFilter extends Input {
2556
2653
  * The filter's tuple, `[operator, operand]` or `[operator, from, to]` for
2557
2654
  * BETWEEN, each operand converted by `_serialize` (an ISO instant for the
2558
2655
  * instant filter). Null while any operand the operator uses is empty.
2656
+ * Before the render it answers the tuple last written, or the `value`
2657
+ * attribute, as the rendered filter would show it.
2559
2658
  * @returns {any[]|null}
2560
2659
  */
2561
2660
  get value(): any[] | null;
2562
2661
  /**
2563
- * Shows a tuple: the operator it names, unless a pinned or fixed operator
2564
- * replaces it, and its operands, an operand missing from a shorter tuple
2662
+ * Shows a tuple: the operator it names, or the first allowed one where the
2663
+ * whitelist, a pin or a fixed operator does not allow it, and its operands, an operand missing from a shorter tuple
2565
2664
  * leaving its input empty. Null or undefined empties both operands and
2566
- * keeps the operator.
2665
+ * keeps the operator. Before the render the tuple is held for the render
2666
+ * to apply, over the `value` attribute, which it leaves alone.
2567
2667
  * @param {any[]|null|undefined} v
2568
2668
  */
2569
2669
  set value(v: any[] | null | undefined);
2670
+ /**
2671
+ * The tuple `_tuple` answers once `_applyTuple(v)` has shown `v`, read
2672
+ * from the declared `operator` and `operators` in place of the menu.
2673
+ * @param {any[]|null|undefined} v
2674
+ * @returns {any[]|null}
2675
+ */
2676
+ _shownTuple(v: any[] | null | undefined): any[] | null;
2570
2677
  _tuple(): any[] | null;
2571
2678
  _applyTuple(v: any): void;
2572
2679
  _showOperator(operator: any): void;
@@ -2577,7 +2684,7 @@ declare class CompareFilter extends Input {
2577
2684
  * them rather than as serialized: a date filter describes what is in its
2578
2685
  * control, not the ISO string it sends. Null while every one of those
2579
2686
  * operands is empty, so a BETWEEN with one bound answers that bound while
2580
- * its value is still null.
2687
+ * its value is still null, and before the filter has rendered.
2581
2688
  * @returns {FilterCriterion|null}
2582
2689
  */
2583
2690
  get criterion(): FilterCriterion | null;
@@ -2657,7 +2764,9 @@ declare class TextFilter extends CompareFilter {
2657
2764
  set sensitivities(declared: string[] | null);
2658
2765
  /**
2659
2766
  * The tuple with the sensitivity after the operator, `[operator,
2660
- * sensitivity, ...operands]`. Null while any operand the operator uses is empty.
2767
+ * sensitivity, ...operands]`. Null while any operand the operator uses is
2768
+ * empty. Before the render it answers the tuple last written, or the
2769
+ * `value` attribute, as the rendered filter would show it.
2661
2770
  * @returns {any[]|null}
2662
2771
  */
2663
2772
  get value(): any[] | null;
@@ -2665,7 +2774,8 @@ declare class TextFilter extends CompareFilter {
2665
2774
  * Shows a tuple as the compare filter does, reading the sensitivity at
2666
2775
  * index 1. A sensitivity the whitelist does not allow leaves the current
2667
2776
  * one in place. Null or undefined empties the operands and keeps the
2668
- * operator and the sensitivity.
2777
+ * operator and the sensitivity. Before the render the tuple is held, as
2778
+ * on the compare filters.
2669
2779
  * @param {any[]|null|undefined} v
2670
2780
  */
2671
2781
  set value(v: any[] | null | undefined);
@@ -2719,7 +2829,8 @@ declare class BooleanFilter extends Field {
2719
2829
  /**
2720
2830
  * The operators the menu offers, narrowed to EQ and NEQ: an empty list, or
2721
2831
  * one where no name is known, offers both, and a single one pins the
2722
- * button. Held before the upgrade and replaced by the `operators` attribute
2832
+ * button. When the operator shown leaves the list, the first listed one is
2833
+ * shown. Held before the upgrade and replaced by the `operators` attribute
2723
2834
  * at the render, as on the compare filters.
2724
2835
  * @returns {string[]|undefined} undefined before the upgrade when nothing was assigned
2725
2836
  */
@@ -2729,14 +2840,17 @@ declare class BooleanFilter extends Field {
2729
2840
  /** @returns {string[]} */
2730
2841
  _vocabulary(): string[];
2731
2842
  /**
2732
- * `[operator, token]`, the token being 'true' or 'false'; null while the value menu is on any.
2843
+ * `[operator, token]`, the token being 'true' or 'false'; null while the
2844
+ * value menu is on any. Before the render it answers the tuple last
2845
+ * written, or the `value` attribute, as the rendered filter would show it.
2733
2846
  * @returns {string[]|null}
2734
2847
  */
2735
2848
  get value(): string[] | null;
2736
2849
  /**
2737
- * Shows a tuple: its operator, unless a pinned operator replaces it, and its
2738
- * token, a missing token meaning any. Null or undefined sets the value menu
2739
- * back to any and keeps the operator.
2850
+ * Shows a tuple: its operator, or the first allowed one where the whitelist
2851
+ * does not allow it, and its token, a missing token meaning any. Null or undefined sets the value menu
2852
+ * back to any and keeps the operator. Before the render the tuple is held,
2853
+ * as on the compare filters.
2740
2854
  * @param {any[]|null|undefined} v
2741
2855
  */
2742
2856
  set value(v: any[] | null | undefined);
@@ -2747,7 +2861,7 @@ declare class BooleanFilter extends Field {
2747
2861
  formResetCallback(): void;
2748
2862
  /**
2749
2863
  * The operator and the localized word the value menu shows, not the token.
2750
- * Null while the value menu is on any.
2864
+ * Null while the value menu is on any, and before the filter has rendered.
2751
2865
  * @returns {FilterCriterion|null}
2752
2866
  */
2753
2867
  get criterion(): FilterCriterion | null;
@@ -2775,7 +2889,8 @@ declare class InFilter extends Select {
2775
2889
  * The chosen keys as an array, a single choice included, led by the
2776
2890
  * declared `operator` when there is one. Null while nothing is chosen, so
2777
2891
  * that a table drops the filter instead of sending an empty set that
2778
- * matches nothing.
2892
+ * matches nothing. Before the render it answers the keys the select answers
2893
+ * then.
2779
2894
  * @returns {any[]|null}
2780
2895
  */
2781
2896
  get value(): any[] | null;
@@ -2783,13 +2898,14 @@ declare class InFilter extends Select {
2783
2898
  * Selects the keys of an array or a single bare key; a leading element equal
2784
2899
  * to the declared `operator` is dropped first, so the filter takes back what
2785
2900
  * it answered. A single select takes the first key. Null or undefined clears
2786
- * the selection.
2901
+ * the selection. Before the render the keys are held, as the select holds
2902
+ * them.
2787
2903
  * @param {any} v
2788
2904
  */
2789
2905
  set value(v: any);
2790
2906
  /**
2791
2907
  * The declared operator, or null, and the labels of the chosen entries. Null
2792
- * while nothing is chosen.
2908
+ * while nothing is chosen, as before the filter has rendered.
2793
2909
  * @returns {FilterCriterion|null}
2794
2910
  */
2795
2911
  get criterion(): FilterCriterion | null;
@@ -2931,7 +3047,8 @@ declare class Dialog extends ParsedElement {
2931
3047
  * the body and `first` true only on the first answered request), so a
2932
3048
  * listener can fill the body. A failed request is painted into the body
2933
3049
  * and does not reject. On a dialog already open nothing is shown or
2934
- * requested, and the call waits for the same ending as the calls before it.
3050
+ * requested, and the call waits for the same ending as the calls before it;
3051
+ * one the page moved while open, which is no longer modal, opens anew.
2935
3052
  * @returns {Promise<DialogOutcome>} resolving on close, or on removal from
2936
3053
  * the document with a dismissal
2937
3054
  */
@@ -3126,9 +3243,11 @@ declare class Drawer extends ParsedElement {
3126
3243
  * the content section and `first` true only on the first answered request),
3127
3244
  * so a listener can fill the content. A failed request is painted into the
3128
3245
  * content section and does not reject. On a drawer already open nothing is
3129
- * shown or requested, except that one sliding out stops and stays open, and
3130
- * the call waits for the same ending as the calls before it, which is how
3131
- * a caller learns the outcome of the opening an `update()` made.
3246
+ * shown or requested, except that one sliding out stops and stays open,
3247
+ * forgetting the result it was closing with, and the call waits for the
3248
+ * same ending as the calls before it, which is how a caller learns the
3249
+ * outcome of the opening an `update()` made. One the page moved while open,
3250
+ * which is no longer modal, opens anew.
3132
3251
  * @returns {Promise<{ dismissed: boolean, result: string|null, response: any }>} resolving on
3133
3252
  * close, or on removal from the document with a dismissal
3134
3253
  */
@@ -3186,6 +3305,10 @@ declare class Menu extends ParsedElement {
3186
3305
  #private;
3187
3306
  /** @type {string[]} */
3188
3307
  static attributes: string[];
3308
+ /** Upgrades the menu, and has a shared one that came back follow the presses on its invoker again. */
3309
+ connectedCallback(): void;
3310
+ /** Stops a shared menu following the presses while it is out of the document. */
3311
+ disconnectedCallback(): void;
3189
3312
  /**
3190
3313
  * Gives the menu the `menu` role and an empty `popover` attribute unless
3191
3314
  * it already has one, and marks the items. With `for`, read here once, it
@@ -3475,7 +3598,8 @@ declare class Wizard extends ParsedElement {
3475
3598
  * @returns {Promise<any[] | undefined> | undefined} a promise resolving to
3476
3599
  * the answers once they are delivered, or to undefined when nobody
3477
3600
  * listened; undefined when the section is already current, and undefined
3478
- * with a warning when no section carries `ref`
3601
+ * with a warning when no section carries `ref` or the one carrying it has
3602
+ * no step paired with it
3479
3603
  * @throws what the entered section's delivery rejected with, as the rejection
3480
3604
  * of the returned promise, after its error is painted in the section
3481
3605
  */
@@ -3488,7 +3612,7 @@ declare class Wizard extends ParsedElement {
3488
3612
  * @returns {Promise<any[] | undefined> | undefined} a promise resolving to
3489
3613
  * the answers, or to undefined when nobody listened or the delivery failed
3490
3614
  * (its error painted in the section); undefined, with a warning, when `ref`
3491
- * names no section
3615
+ * names no section or one with no step paired with it
3492
3616
  */
3493
3617
  refresh(ref: string | Element): Promise<any[] | undefined> | undefined;
3494
3618
  }