@fusion.dev/helix 0.166.0 → 0.167.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. package/custom-elements.json +2583 -477
  2. package/dist/canvas/root/canvas-root.css.js +1 -1
  3. package/dist/canvas/root/canvas-root.d.ts +2 -0
  4. package/dist/canvas/root/canvas-root.js +1 -0
  5. package/dist/chat/composer/chat-composer.css.js +1 -1
  6. package/dist/color-picker/root/color-picker-root.css.js +2 -2
  7. package/dist/combobox/root/combobox-root.d.ts +1 -1
  8. package/dist/combobox/root/combobox-root.js +1 -1
  9. package/dist/command/root/command-root.css.js +1 -1
  10. package/dist/element-events.generated.js +2 -0
  11. package/dist/file-input/root/file-input-root.d.ts +1 -1
  12. package/dist/file-input/root/file-input-root.js +1 -1
  13. package/dist/graph/root/graph-root.css.js +1 -1
  14. package/dist/listbox/root/listbox-root.css.js +1 -1
  15. package/dist/object-inspector/root/object-inspector-root.css.js +1 -1
  16. package/dist/sandbox/source/sandbox-source.css.js +1 -1
  17. package/dist/sandbox/terminal/sandbox-terminal.css.js +1 -1
  18. package/dist/shared/field/field-frame.css.js +1 -1
  19. package/dist/shared/field/field-segments.css.js +1 -1
  20. package/dist/table/root/table-root.css.js +7 -1
  21. package/dist/table/root/table-root.d.ts +4 -0
  22. package/dist/time-picker/root/time-picker-root.css.js +1 -1
  23. package/dist/time-picker/root/time-picker-root.d.ts +1 -0
  24. package/dist/virtual-list/root/virtual-list-root.css.js +1 -1
  25. package/dist/virtual-list/root/virtual-list-root.d.ts +1 -1
  26. package/lint.json +1 -1
  27. package/package.json +6 -6
  28. package/types/jsx.d.ts +383 -63
  29. package/types/vue.d.ts +89 -2
  30. package/types/words.d.ts +27 -0
@@ -16322,6 +16322,50 @@
16322
16322
  "module": "src/helix-form-element/helix-form-element.ts"
16323
16323
  }
16324
16324
  },
16325
+ {
16326
+ "kind": "field",
16327
+ "name": "updateRunning",
16328
+ "type": {
16329
+ "text": "boolean"
16330
+ },
16331
+ "privacy": "private",
16332
+ "default": "false",
16333
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
16334
+ "inheritedFrom": {
16335
+ "name": "HelixFormElement",
16336
+ "module": "src/helix-form-element/helix-form-element.ts"
16337
+ }
16338
+ },
16339
+ {
16340
+ "kind": "method",
16341
+ "name": "performUpdate",
16342
+ "privacy": "protected",
16343
+ "return": {
16344
+ "type": {
16345
+ "text": "void"
16346
+ }
16347
+ },
16348
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
16349
+ "inheritedFrom": {
16350
+ "name": "HelixElement",
16351
+ "module": "src/helix-element/helix-element.ts"
16352
+ }
16353
+ },
16354
+ {
16355
+ "kind": "method",
16356
+ "name": "runPendingUpdate",
16357
+ "privacy": "private",
16358
+ "return": {
16359
+ "type": {
16360
+ "text": "void"
16361
+ }
16362
+ },
16363
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
16364
+ "inheritedFrom": {
16365
+ "name": "HelixFormElement",
16366
+ "module": "src/helix-form-element/helix-form-element.ts"
16367
+ }
16368
+ },
16325
16369
  {
16326
16370
  "kind": "field",
16327
16371
  "name": "willValidate",
@@ -16343,7 +16387,7 @@
16343
16387
  "text": "boolean"
16344
16388
  }
16345
16389
  },
16346
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
16390
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
16347
16391
  "inheritedFrom": {
16348
16392
  "name": "HelixFormElement",
16349
16393
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -16352,6 +16396,20 @@
16352
16396
  "text": "checkValidity() => boolean"
16353
16397
  }
16354
16398
  },
16399
+ {
16400
+ "kind": "field",
16401
+ "name": "checkInProgress",
16402
+ "type": {
16403
+ "text": "boolean"
16404
+ },
16405
+ "privacy": "private",
16406
+ "default": "false",
16407
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
16408
+ "inheritedFrom": {
16409
+ "name": "HelixFormElement",
16410
+ "module": "src/helix-form-element/helix-form-element.ts"
16411
+ }
16412
+ },
16355
16413
  {
16356
16414
  "kind": "method",
16357
16415
  "name": "reportValidity",
@@ -16834,21 +16892,6 @@
16834
16892
  "name": "HelixElement",
16835
16893
  "module": "src/helix-element/helix-element.ts"
16836
16894
  }
16837
- },
16838
- {
16839
- "kind": "method",
16840
- "name": "performUpdate",
16841
- "privacy": "protected",
16842
- "return": {
16843
- "type": {
16844
- "text": "void"
16845
- }
16846
- },
16847
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
16848
- "inheritedFrom": {
16849
- "name": "HelixElement",
16850
- "module": "src/helix-element/helix-element.ts"
16851
- }
16852
16895
  }
16853
16896
  ],
16854
16897
  "attributes": [
@@ -20219,6 +20262,20 @@
20219
20262
  }
20220
20263
  ],
20221
20264
  "members": [
20265
+ {
20266
+ "kind": "field",
20267
+ "name": "tier",
20268
+ "type": {
20269
+ "text": "string"
20270
+ },
20271
+ "static": true,
20272
+ "default": "'helix-'",
20273
+ "description": "A paste adds this tier's cards and connections.",
20274
+ "inheritedFrom": {
20275
+ "name": "HelixElement",
20276
+ "module": "src/helix-element/helix-element.ts"
20277
+ }
20278
+ },
20222
20279
  {
20223
20280
  "kind": "field",
20224
20281
  "name": "grid",
@@ -21156,6 +21213,23 @@
21156
21213
  "module": "src/canvas/root/canvas-root.ts"
21157
21214
  }
21158
21215
  },
21216
+ {
21217
+ "kind": "field",
21218
+ "name": "arrangedLabel",
21219
+ "type": {
21220
+ "text": "string"
21221
+ },
21222
+ "default": "'Cards arranged'",
21223
+ "description": "What screen readers hear after `arrange()` moves the cards.",
21224
+ "attribute": "arranged-label",
21225
+ "helix": {
21226
+ "words": true
21227
+ },
21228
+ "inheritedFrom": {
21229
+ "name": "HelixHeadlessCanvas",
21230
+ "module": "src/canvas/root/canvas-root.ts"
21231
+ }
21232
+ },
21159
21233
  {
21160
21234
  "kind": "field",
21161
21235
  "name": "comesFromLabel",
@@ -21366,6 +21440,23 @@
21366
21440
  "module": "src/canvas/root/canvas-root.ts"
21367
21441
  }
21368
21442
  },
21443
+ {
21444
+ "kind": "field",
21445
+ "name": "pastedLabel",
21446
+ "type": {
21447
+ "text": "string"
21448
+ },
21449
+ "default": "'{count, plural, one {# card pasted} other {# cards pasted}}'",
21450
+ "description": "What screen readers hear after a paste, with `{count}` for the cards pasted.",
21451
+ "attribute": "pasted-label",
21452
+ "helix": {
21453
+ "words": true
21454
+ },
21455
+ "inheritedFrom": {
21456
+ "name": "HelixHeadlessCanvas",
21457
+ "module": "src/canvas/root/canvas-root.ts"
21458
+ }
21459
+ },
21369
21460
  {
21370
21461
  "kind": "field",
21371
21462
  "name": "path",
@@ -21429,6 +21520,23 @@
21429
21520
  "module": "src/canvas/root/canvas-root.ts"
21430
21521
  }
21431
21522
  },
21523
+ {
21524
+ "kind": "field",
21525
+ "name": "removedLabel",
21526
+ "type": {
21527
+ "text": "string"
21528
+ },
21529
+ "default": "'{count, plural, one {Asked to remove {name}.} other {Asked to remove # items.}}'",
21530
+ "description": "What screen readers hear when Delete asks to remove what is selected, with\n`{count}` for how many cards and connections, and `{name}` for the one\nwhere there is one.",
21531
+ "attribute": "removed-label",
21532
+ "helix": {
21533
+ "words": true
21534
+ },
21535
+ "inheritedFrom": {
21536
+ "name": "HelixHeadlessCanvas",
21537
+ "module": "src/canvas/root/canvas-root.ts"
21538
+ }
21539
+ },
21432
21540
  {
21433
21541
  "kind": "field",
21434
21542
  "name": "resizedLabel",
@@ -23220,6 +23328,96 @@
23220
23328
  "module": "src/canvas/root/canvas-root.ts"
23221
23329
  }
23222
23330
  },
23331
+ {
23332
+ "kind": "field",
23333
+ "name": "handlePaste",
23334
+ "privacy": "private",
23335
+ "readonly": true,
23336
+ "description": "A paste on the board of a JSON Canvas document, the text a copy writes,\nadds its cards and connections. Not into a field a card holds, nor onto a\n`readonly` board, nor text that is not a board, which are the platform's.",
23337
+ "inheritedFrom": {
23338
+ "name": "HelixHeadlessCanvas",
23339
+ "module": "src/canvas/root/canvas-root.ts"
23340
+ }
23341
+ },
23342
+ {
23343
+ "kind": "method",
23344
+ "name": "paste",
23345
+ "return": {
23346
+ "type": {
23347
+ "text": "boolean"
23348
+ }
23349
+ },
23350
+ "parameters": [
23351
+ {
23352
+ "name": "document",
23353
+ "type": {
23354
+ "text": "CanvasDocument | string"
23355
+ }
23356
+ }
23357
+ ],
23358
+ "description": "Adds the cards and connections of a JSON Canvas document, as a paste does,\nand selects the cards. Ids the board already holds are given a count after\nthem, and the cards move a step down and to the right while they would sit\non cards already there.\n\nAsks with `helix-before-paste` first: cancel it to add the detail's\ndocument to your own state. Returns whether the board added the cards:\nfalse on a `readonly` board, for text that is not a board, or when the\nrequest was refused.",
23359
+ "type": {
23360
+ "text": "paste(document: CanvasDocument | string) => boolean"
23361
+ },
23362
+ "inheritedFrom": {
23363
+ "name": "HelixHeadlessCanvas",
23364
+ "module": "src/canvas/root/canvas-root.ts"
23365
+ }
23366
+ },
23367
+ {
23368
+ "kind": "field",
23369
+ "name": "gliding",
23370
+ "type": {
23371
+ "text": "{ frame: number; to: MoveDetail['nodes'] } | undefined"
23372
+ },
23373
+ "privacy": "private",
23374
+ "description": "The glide `arrange()` started, while it runs.",
23375
+ "inheritedFrom": {
23376
+ "name": "HelixHeadlessCanvas",
23377
+ "module": "src/canvas/root/canvas-root.ts"
23378
+ }
23379
+ },
23380
+ {
23381
+ "kind": "method",
23382
+ "name": "settle",
23383
+ "privacy": "private",
23384
+ "return": {
23385
+ "type": {
23386
+ "text": "void"
23387
+ }
23388
+ },
23389
+ "description": "Ends a glide where it was going.",
23390
+ "inheritedFrom": {
23391
+ "name": "HelixHeadlessCanvas",
23392
+ "module": "src/canvas/root/canvas-root.ts"
23393
+ }
23394
+ },
23395
+ {
23396
+ "kind": "method",
23397
+ "name": "arrange",
23398
+ "return": {
23399
+ "type": {
23400
+ "text": "boolean"
23401
+ }
23402
+ },
23403
+ "parameters": [
23404
+ {
23405
+ "name": "options",
23406
+ "default": "{}",
23407
+ "type": {
23408
+ "text": "CanvasArrangeOptions"
23409
+ }
23410
+ }
23411
+ ],
23412
+ "description": "Moves the cards so that none overlaps another: in layers that follow the\nconnections, or in a grid where there are none. A group moves as one box\nwith its cards. Each place lands on a multiple of `snap` where it is set.\n\nAsks with `helix-before-move` first and tells with `helix-move`, as a\nmove does, so `undo()` puts every card back. The cards glide to their\nplaces for as long as the board's plane takes to glide, and land at once\nwhere it does not, such as under `prefers-reduced-motion`. Returns whether\nthe cards moved.",
23413
+ "type": {
23414
+ "text": "arrange(options: CanvasArrangeOptions = {}) => boolean"
23415
+ },
23416
+ "inheritedFrom": {
23417
+ "name": "HelixHeadlessCanvas",
23418
+ "module": "src/canvas/root/canvas-root.ts"
23419
+ }
23420
+ },
23223
23421
  {
23224
23422
  "kind": "field",
23225
23423
  "name": "handleHistoryKey",
@@ -24334,20 +24532,6 @@
24334
24532
  "module": "src/canvas/root/canvas-root.ts"
24335
24533
  }
24336
24534
  },
24337
- {
24338
- "kind": "field",
24339
- "name": "tier",
24340
- "type": {
24341
- "text": "string"
24342
- },
24343
- "static": true,
24344
- "default": "'helix-headless-'",
24345
- "description": "The prefix this tier registers its elements under.\n\n**A component that renders another renders its own tier's version of it**,\nso `helix-headless-pagination-size` composes `helix-headless-select` and\n`helix-pagination-size` composes `helix-select`. One template says\n`${this.tag('select')}` and each tier answers with its own name.\n\n**The public tag may not be the composed one, in either tier.** Using it\ncosts three things: the name means two different things depending on what a\nconsumer imported, the headless tier composes an element it does not ship,\nand the composition cannot be tested there at all, because there is no\n`helix-select` on that tier to test it against.\n\n**A prefix rather than an override per composition**, which was the first\nplan and does not compile. An override re-renders the fragment from the\nsubclass, and the fragment reads members the base keeps private:\n`PaginationSize` alone would have had to widen `options`, `current` and\n`handleChange` to `protected` so a subclass could say the same thing again.\nSixteen families of that is a lot of encapsulation spent on saying one\nword differently.",
24346
- "inheritedFrom": {
24347
- "name": "HelixElement",
24348
- "module": "src/helix-element/helix-element.ts"
24349
- }
24350
- },
24351
24535
  {
24352
24536
  "kind": "method",
24353
24537
  "name": "tag",
@@ -24857,6 +25041,19 @@
24857
25041
  "module": "src/canvas/root/canvas-root.ts"
24858
25042
  }
24859
25043
  },
25044
+ {
25045
+ "name": "arranged-label",
25046
+ "type": {
25047
+ "text": "string"
25048
+ },
25049
+ "default": "'Cards arranged'",
25050
+ "description": "What screen readers hear after `arrange()` moves the cards.",
25051
+ "fieldName": "arrangedLabel",
25052
+ "inheritedFrom": {
25053
+ "name": "HelixHeadlessCanvas",
25054
+ "module": "src/canvas/root/canvas-root.ts"
25055
+ }
25056
+ },
24860
25057
  {
24861
25058
  "name": "comes-from-label",
24862
25059
  "type": {
@@ -25025,6 +25222,19 @@
25025
25222
  "module": "src/canvas/root/canvas-root.ts"
25026
25223
  }
25027
25224
  },
25225
+ {
25226
+ "name": "pasted-label",
25227
+ "type": {
25228
+ "text": "string"
25229
+ },
25230
+ "default": "'{count, plural, one {# card pasted} other {# cards pasted}}'",
25231
+ "description": "What screen readers hear after a paste, with `{count}` for the cards pasted.",
25232
+ "fieldName": "pastedLabel",
25233
+ "inheritedFrom": {
25234
+ "name": "HelixHeadlessCanvas",
25235
+ "module": "src/canvas/root/canvas-root.ts"
25236
+ }
25237
+ },
25028
25238
  {
25029
25239
  "name": "path",
25030
25240
  "type": {
@@ -25076,6 +25286,19 @@
25076
25286
  "module": "src/canvas/root/canvas-root.ts"
25077
25287
  }
25078
25288
  },
25289
+ {
25290
+ "name": "removed-label",
25291
+ "type": {
25292
+ "text": "string"
25293
+ },
25294
+ "default": "'{count, plural, one {Asked to remove {name}.} other {Asked to remove # items.}}'",
25295
+ "description": "What screen readers hear when Delete asks to remove what is selected, with\n`{count}` for how many cards and connections, and `{name}` for the one\nwhere there is one.",
25296
+ "fieldName": "removedLabel",
25297
+ "inheritedFrom": {
25298
+ "name": "HelixHeadlessCanvas",
25299
+ "module": "src/canvas/root/canvas-root.ts"
25300
+ }
25301
+ },
25079
25302
  {
25080
25303
  "name": "resized-label",
25081
25304
  "type": {
@@ -25630,6 +25853,18 @@
25630
25853
  "module": "src/canvas/root/canvas-root.ts"
25631
25854
  }
25632
25855
  },
25856
+ {
25857
+ "type": {
25858
+ "text": "HelixBeforePasteEvent"
25859
+ },
25860
+ "description": "Cards and connections are about to be pasted. Cancelable: cancel it to add the detail's document to your own state.",
25861
+ "name": "helix-before-paste",
25862
+ "reactProp": "onhelix-before-paste",
25863
+ "inheritedFrom": {
25864
+ "name": "HelixHeadlessCanvas",
25865
+ "module": "src/canvas/root/canvas-root.ts"
25866
+ }
25867
+ },
25633
25868
  {
25634
25869
  "type": {
25635
25870
  "text": "HelixBeforeReconnectEvent"
@@ -25726,6 +25961,18 @@
25726
25961
  "module": "src/canvas/root/canvas-root.ts"
25727
25962
  }
25728
25963
  },
25964
+ {
25965
+ "type": {
25966
+ "text": "HelixPastedEvent"
25967
+ },
25968
+ "description": "Cards and connections were pasted, and the board holds them.",
25969
+ "name": "helix-pasted",
25970
+ "reactProp": "onhelix-pasted",
25971
+ "inheritedFrom": {
25972
+ "name": "HelixHeadlessCanvas",
25973
+ "module": "src/canvas/root/canvas-root.ts"
25974
+ }
25975
+ },
25729
25976
  {
25730
25977
  "type": {
25731
25978
  "text": "HelixReconnectEvent"
@@ -29775,6 +30022,50 @@
29775
30022
  "module": "src/helix-form-element/helix-form-element.ts"
29776
30023
  }
29777
30024
  },
30025
+ {
30026
+ "kind": "field",
30027
+ "name": "updateRunning",
30028
+ "type": {
30029
+ "text": "boolean"
30030
+ },
30031
+ "privacy": "private",
30032
+ "default": "false",
30033
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
30034
+ "inheritedFrom": {
30035
+ "name": "HelixFormElement",
30036
+ "module": "src/helix-form-element/helix-form-element.ts"
30037
+ }
30038
+ },
30039
+ {
30040
+ "kind": "method",
30041
+ "name": "performUpdate",
30042
+ "privacy": "protected",
30043
+ "return": {
30044
+ "type": {
30045
+ "text": "void"
30046
+ }
30047
+ },
30048
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
30049
+ "inheritedFrom": {
30050
+ "name": "HelixElement",
30051
+ "module": "src/helix-element/helix-element.ts"
30052
+ }
30053
+ },
30054
+ {
30055
+ "kind": "method",
30056
+ "name": "runPendingUpdate",
30057
+ "privacy": "private",
30058
+ "return": {
30059
+ "type": {
30060
+ "text": "void"
30061
+ }
30062
+ },
30063
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
30064
+ "inheritedFrom": {
30065
+ "name": "HelixFormElement",
30066
+ "module": "src/helix-form-element/helix-form-element.ts"
30067
+ }
30068
+ },
29778
30069
  {
29779
30070
  "kind": "field",
29780
30071
  "name": "willValidate",
@@ -29796,7 +30087,7 @@
29796
30087
  "text": "boolean"
29797
30088
  }
29798
30089
  },
29799
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
30090
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
29800
30091
  "inheritedFrom": {
29801
30092
  "name": "HelixFormElement",
29802
30093
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -29805,6 +30096,20 @@
29805
30096
  "text": "checkValidity() => boolean"
29806
30097
  }
29807
30098
  },
30099
+ {
30100
+ "kind": "field",
30101
+ "name": "checkInProgress",
30102
+ "type": {
30103
+ "text": "boolean"
30104
+ },
30105
+ "privacy": "private",
30106
+ "default": "false",
30107
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
30108
+ "inheritedFrom": {
30109
+ "name": "HelixFormElement",
30110
+ "module": "src/helix-form-element/helix-form-element.ts"
30111
+ }
30112
+ },
29808
30113
  {
29809
30114
  "kind": "method",
29810
30115
  "name": "reportValidity",
@@ -30273,21 +30578,6 @@
30273
30578
  "name": "HelixElement",
30274
30579
  "module": "src/helix-element/helix-element.ts"
30275
30580
  }
30276
- },
30277
- {
30278
- "kind": "method",
30279
- "name": "performUpdate",
30280
- "privacy": "protected",
30281
- "return": {
30282
- "type": {
30283
- "text": "void"
30284
- }
30285
- },
30286
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
30287
- "inheritedFrom": {
30288
- "name": "HelixElement",
30289
- "module": "src/helix-element/helix-element.ts"
30290
- }
30291
30581
  }
30292
30582
  ],
30293
30583
  "superclass": {
@@ -34481,7 +34771,7 @@
34481
34771
  },
34482
34772
  "privacy": "private",
34483
34773
  "default": "false",
34484
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
34774
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
34485
34775
  "inheritedFrom": {
34486
34776
  "name": "MixinField",
34487
34777
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -35308,6 +35598,50 @@
35308
35598
  "module": "src/helix-form-element/helix-form-element.ts"
35309
35599
  }
35310
35600
  },
35601
+ {
35602
+ "kind": "field",
35603
+ "name": "updateRunning",
35604
+ "type": {
35605
+ "text": "boolean"
35606
+ },
35607
+ "privacy": "private",
35608
+ "default": "false",
35609
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
35610
+ "inheritedFrom": {
35611
+ "name": "HelixFormElement",
35612
+ "module": "src/helix-form-element/helix-form-element.ts"
35613
+ }
35614
+ },
35615
+ {
35616
+ "kind": "method",
35617
+ "name": "performUpdate",
35618
+ "privacy": "protected",
35619
+ "return": {
35620
+ "type": {
35621
+ "text": "void"
35622
+ }
35623
+ },
35624
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
35625
+ "inheritedFrom": {
35626
+ "name": "HelixElement",
35627
+ "module": "src/helix-element/helix-element.ts"
35628
+ }
35629
+ },
35630
+ {
35631
+ "kind": "method",
35632
+ "name": "runPendingUpdate",
35633
+ "privacy": "private",
35634
+ "return": {
35635
+ "type": {
35636
+ "text": "void"
35637
+ }
35638
+ },
35639
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
35640
+ "inheritedFrom": {
35641
+ "name": "HelixFormElement",
35642
+ "module": "src/helix-form-element/helix-form-element.ts"
35643
+ }
35644
+ },
35311
35645
  {
35312
35646
  "kind": "field",
35313
35647
  "name": "willValidate",
@@ -35329,7 +35663,7 @@
35329
35663
  "text": "boolean"
35330
35664
  }
35331
35665
  },
35332
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
35666
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
35333
35667
  "inheritedFrom": {
35334
35668
  "name": "HelixFormElement",
35335
35669
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -35338,6 +35672,20 @@
35338
35672
  "text": "checkValidity() => boolean"
35339
35673
  }
35340
35674
  },
35675
+ {
35676
+ "kind": "field",
35677
+ "name": "checkInProgress",
35678
+ "type": {
35679
+ "text": "boolean"
35680
+ },
35681
+ "privacy": "private",
35682
+ "default": "false",
35683
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
35684
+ "inheritedFrom": {
35685
+ "name": "HelixFormElement",
35686
+ "module": "src/helix-form-element/helix-form-element.ts"
35687
+ }
35688
+ },
35341
35689
  {
35342
35690
  "kind": "method",
35343
35691
  "name": "reportValidity",
@@ -35806,21 +36154,6 @@
35806
36154
  "name": "HelixElement",
35807
36155
  "module": "src/helix-element/helix-element.ts"
35808
36156
  }
35809
- },
35810
- {
35811
- "kind": "method",
35812
- "name": "performUpdate",
35813
- "privacy": "protected",
35814
- "return": {
35815
- "type": {
35816
- "text": "void"
35817
- }
35818
- },
35819
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
35820
- "inheritedFrom": {
35821
- "name": "HelixElement",
35822
- "module": "src/helix-element/helix-element.ts"
35823
- }
35824
36157
  }
35825
36158
  ],
35826
36159
  "attributes": [
@@ -36676,7 +37009,7 @@
36676
37009
  },
36677
37010
  "privacy": "private",
36678
37011
  "default": "false",
36679
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
37012
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
36680
37013
  "inheritedFrom": {
36681
37014
  "name": "MixinField",
36682
37015
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -37288,6 +37621,50 @@
37288
37621
  "module": "src/helix-form-element/helix-form-element.ts"
37289
37622
  }
37290
37623
  },
37624
+ {
37625
+ "kind": "field",
37626
+ "name": "updateRunning",
37627
+ "type": {
37628
+ "text": "boolean"
37629
+ },
37630
+ "privacy": "private",
37631
+ "default": "false",
37632
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
37633
+ "inheritedFrom": {
37634
+ "name": "HelixFormElement",
37635
+ "module": "src/helix-form-element/helix-form-element.ts"
37636
+ }
37637
+ },
37638
+ {
37639
+ "kind": "method",
37640
+ "name": "performUpdate",
37641
+ "privacy": "protected",
37642
+ "return": {
37643
+ "type": {
37644
+ "text": "void"
37645
+ }
37646
+ },
37647
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
37648
+ "inheritedFrom": {
37649
+ "name": "HelixElement",
37650
+ "module": "src/helix-element/helix-element.ts"
37651
+ }
37652
+ },
37653
+ {
37654
+ "kind": "method",
37655
+ "name": "runPendingUpdate",
37656
+ "privacy": "private",
37657
+ "return": {
37658
+ "type": {
37659
+ "text": "void"
37660
+ }
37661
+ },
37662
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
37663
+ "inheritedFrom": {
37664
+ "name": "HelixFormElement",
37665
+ "module": "src/helix-form-element/helix-form-element.ts"
37666
+ }
37667
+ },
37291
37668
  {
37292
37669
  "kind": "field",
37293
37670
  "name": "willValidate",
@@ -37309,7 +37686,7 @@
37309
37686
  "text": "boolean"
37310
37687
  }
37311
37688
  },
37312
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
37689
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
37313
37690
  "inheritedFrom": {
37314
37691
  "name": "HelixFormElement",
37315
37692
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -37318,6 +37695,20 @@
37318
37695
  "text": "checkValidity() => boolean"
37319
37696
  }
37320
37697
  },
37698
+ {
37699
+ "kind": "field",
37700
+ "name": "checkInProgress",
37701
+ "type": {
37702
+ "text": "boolean"
37703
+ },
37704
+ "privacy": "private",
37705
+ "default": "false",
37706
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
37707
+ "inheritedFrom": {
37708
+ "name": "HelixFormElement",
37709
+ "module": "src/helix-form-element/helix-form-element.ts"
37710
+ }
37711
+ },
37321
37712
  {
37322
37713
  "kind": "method",
37323
37714
  "name": "reportValidity",
@@ -37800,21 +38191,6 @@
37800
38191
  "name": "HelixElement",
37801
38192
  "module": "src/helix-element/helix-element.ts"
37802
38193
  }
37803
- },
37804
- {
37805
- "kind": "method",
37806
- "name": "performUpdate",
37807
- "privacy": "protected",
37808
- "return": {
37809
- "type": {
37810
- "text": "void"
37811
- }
37812
- },
37813
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
37814
- "inheritedFrom": {
37815
- "name": "HelixElement",
37816
- "module": "src/helix-element/helix-element.ts"
37817
- }
37818
38194
  }
37819
38195
  ],
37820
38196
  "attributes": [
@@ -42085,7 +42461,7 @@
42085
42461
  },
42086
42462
  "privacy": "private",
42087
42463
  "default": "false",
42088
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
42464
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
42089
42465
  "inheritedFrom": {
42090
42466
  "name": "MixinField",
42091
42467
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -42881,6 +43257,50 @@
42881
43257
  "module": "src/helix-form-element/helix-form-element.ts"
42882
43258
  }
42883
43259
  },
43260
+ {
43261
+ "kind": "field",
43262
+ "name": "updateRunning",
43263
+ "type": {
43264
+ "text": "boolean"
43265
+ },
43266
+ "privacy": "private",
43267
+ "default": "false",
43268
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
43269
+ "inheritedFrom": {
43270
+ "name": "HelixFormElement",
43271
+ "module": "src/helix-form-element/helix-form-element.ts"
43272
+ }
43273
+ },
43274
+ {
43275
+ "kind": "method",
43276
+ "name": "performUpdate",
43277
+ "privacy": "protected",
43278
+ "return": {
43279
+ "type": {
43280
+ "text": "void"
43281
+ }
43282
+ },
43283
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
43284
+ "inheritedFrom": {
43285
+ "name": "HelixElement",
43286
+ "module": "src/helix-element/helix-element.ts"
43287
+ }
43288
+ },
43289
+ {
43290
+ "kind": "method",
43291
+ "name": "runPendingUpdate",
43292
+ "privacy": "private",
43293
+ "return": {
43294
+ "type": {
43295
+ "text": "void"
43296
+ }
43297
+ },
43298
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
43299
+ "inheritedFrom": {
43300
+ "name": "HelixFormElement",
43301
+ "module": "src/helix-form-element/helix-form-element.ts"
43302
+ }
43303
+ },
42884
43304
  {
42885
43305
  "kind": "field",
42886
43306
  "name": "willValidate",
@@ -42902,7 +43322,7 @@
42902
43322
  "text": "boolean"
42903
43323
  }
42904
43324
  },
42905
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
43325
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
42906
43326
  "inheritedFrom": {
42907
43327
  "name": "HelixFormElement",
42908
43328
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -42911,6 +43331,20 @@
42911
43331
  "text": "checkValidity() => boolean"
42912
43332
  }
42913
43333
  },
43334
+ {
43335
+ "kind": "field",
43336
+ "name": "checkInProgress",
43337
+ "type": {
43338
+ "text": "boolean"
43339
+ },
43340
+ "privacy": "private",
43341
+ "default": "false",
43342
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
43343
+ "inheritedFrom": {
43344
+ "name": "HelixFormElement",
43345
+ "module": "src/helix-form-element/helix-form-element.ts"
43346
+ }
43347
+ },
42914
43348
  {
42915
43349
  "kind": "method",
42916
43350
  "name": "reportValidity",
@@ -43353,21 +43787,6 @@
43353
43787
  "name": "HelixElement",
43354
43788
  "module": "src/helix-element/helix-element.ts"
43355
43789
  }
43356
- },
43357
- {
43358
- "kind": "method",
43359
- "name": "performUpdate",
43360
- "privacy": "protected",
43361
- "return": {
43362
- "type": {
43363
- "text": "void"
43364
- }
43365
- },
43366
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
43367
- "inheritedFrom": {
43368
- "name": "HelixElement",
43369
- "module": "src/helix-element/helix-element.ts"
43370
- }
43371
43790
  }
43372
43791
  ],
43373
43792
  "superclass": {
@@ -46226,6 +46645,50 @@
46226
46645
  "module": "src/helix-form-element/helix-form-element.ts"
46227
46646
  }
46228
46647
  },
46648
+ {
46649
+ "kind": "field",
46650
+ "name": "updateRunning",
46651
+ "type": {
46652
+ "text": "boolean"
46653
+ },
46654
+ "privacy": "private",
46655
+ "default": "false",
46656
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
46657
+ "inheritedFrom": {
46658
+ "name": "HelixFormElement",
46659
+ "module": "src/helix-form-element/helix-form-element.ts"
46660
+ }
46661
+ },
46662
+ {
46663
+ "kind": "method",
46664
+ "name": "performUpdate",
46665
+ "privacy": "protected",
46666
+ "return": {
46667
+ "type": {
46668
+ "text": "void"
46669
+ }
46670
+ },
46671
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
46672
+ "inheritedFrom": {
46673
+ "name": "HelixElement",
46674
+ "module": "src/helix-element/helix-element.ts"
46675
+ }
46676
+ },
46677
+ {
46678
+ "kind": "method",
46679
+ "name": "runPendingUpdate",
46680
+ "privacy": "private",
46681
+ "return": {
46682
+ "type": {
46683
+ "text": "void"
46684
+ }
46685
+ },
46686
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
46687
+ "inheritedFrom": {
46688
+ "name": "HelixFormElement",
46689
+ "module": "src/helix-form-element/helix-form-element.ts"
46690
+ }
46691
+ },
46229
46692
  {
46230
46693
  "kind": "field",
46231
46694
  "name": "willValidate",
@@ -46247,7 +46710,7 @@
46247
46710
  "text": "boolean"
46248
46711
  }
46249
46712
  },
46250
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
46713
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
46251
46714
  "inheritedFrom": {
46252
46715
  "name": "HelixFormElement",
46253
46716
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -46256,6 +46719,20 @@
46256
46719
  "text": "checkValidity() => boolean"
46257
46720
  }
46258
46721
  },
46722
+ {
46723
+ "kind": "field",
46724
+ "name": "checkInProgress",
46725
+ "type": {
46726
+ "text": "boolean"
46727
+ },
46728
+ "privacy": "private",
46729
+ "default": "false",
46730
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
46731
+ "inheritedFrom": {
46732
+ "name": "HelixFormElement",
46733
+ "module": "src/helix-form-element/helix-form-element.ts"
46734
+ }
46735
+ },
46259
46736
  {
46260
46737
  "kind": "method",
46261
46738
  "name": "reportValidity",
@@ -46698,21 +47175,6 @@
46698
47175
  "name": "HelixElement",
46699
47176
  "module": "src/helix-element/helix-element.ts"
46700
47177
  }
46701
- },
46702
- {
46703
- "kind": "method",
46704
- "name": "performUpdate",
46705
- "privacy": "protected",
46706
- "return": {
46707
- "type": {
46708
- "text": "void"
46709
- }
46710
- },
46711
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
46712
- "inheritedFrom": {
46713
- "name": "HelixElement",
46714
- "module": "src/helix-element/helix-element.ts"
46715
- }
46716
47178
  }
46717
47179
  ],
46718
47180
  "superclass": {
@@ -48658,7 +49120,7 @@
48658
49120
  },
48659
49121
  "privacy": "private",
48660
49122
  "default": "false",
48661
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
49123
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
48662
49124
  "inheritedFrom": {
48663
49125
  "name": "MixinField",
48664
49126
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -49940,7 +50402,7 @@
49940
50402
  "text": "TemplateResult"
49941
50403
  }
49942
50404
  },
49943
- "description": "The caret saying the field opens, behind a seam.\n\nSlot fallback, so a consumer replaces it by slotting; and a method, so the\ntier above replaces it by overriding. Those answer different people: the\nslot is for the page and the method is for whoever is building the styled\nlayer, and a fallback with only the first is one a tier can restyle and\ncannot change.",
50405
+ "description": "The caret saying the field opens, behind a seam.\n\nSlot fallback, so a consumer replaces it by slotting; and a method, so the\ntier above replaces it by overriding. Those answer different people: the\nslot is for the page and the method is for whoever is building the styled\nlayer, and a fallback with only the first is one a tier can restyle and\ncannot change.\n\n**One em square by its own attributes**, which any stylesheet overrides.\nAn inline `<svg>` with a `viewBox` and no size fills the width it is given:\nmeasured with no stylesheet, the caret was 1,264px tall, the field 1,289px,\nand the panel opened above the top of the page.",
49944
50406
  "inheritedFrom": {
49945
50407
  "name": "HelixHeadlessCombobox",
49946
50408
  "module": "src/combobox/root/combobox-root.ts"
@@ -50233,6 +50695,50 @@
50233
50695
  "module": "src/helix-form-element/helix-form-element.ts"
50234
50696
  }
50235
50697
  },
50698
+ {
50699
+ "kind": "field",
50700
+ "name": "updateRunning",
50701
+ "type": {
50702
+ "text": "boolean"
50703
+ },
50704
+ "privacy": "private",
50705
+ "default": "false",
50706
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
50707
+ "inheritedFrom": {
50708
+ "name": "HelixFormElement",
50709
+ "module": "src/helix-form-element/helix-form-element.ts"
50710
+ }
50711
+ },
50712
+ {
50713
+ "kind": "method",
50714
+ "name": "performUpdate",
50715
+ "privacy": "protected",
50716
+ "return": {
50717
+ "type": {
50718
+ "text": "void"
50719
+ }
50720
+ },
50721
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
50722
+ "inheritedFrom": {
50723
+ "name": "HelixElement",
50724
+ "module": "src/helix-element/helix-element.ts"
50725
+ }
50726
+ },
50727
+ {
50728
+ "kind": "method",
50729
+ "name": "runPendingUpdate",
50730
+ "privacy": "private",
50731
+ "return": {
50732
+ "type": {
50733
+ "text": "void"
50734
+ }
50735
+ },
50736
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
50737
+ "inheritedFrom": {
50738
+ "name": "HelixFormElement",
50739
+ "module": "src/helix-form-element/helix-form-element.ts"
50740
+ }
50741
+ },
50236
50742
  {
50237
50743
  "kind": "field",
50238
50744
  "name": "willValidate",
@@ -50254,7 +50760,7 @@
50254
50760
  "text": "boolean"
50255
50761
  }
50256
50762
  },
50257
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
50763
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
50258
50764
  "inheritedFrom": {
50259
50765
  "name": "HelixFormElement",
50260
50766
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -50263,6 +50769,20 @@
50263
50769
  "text": "checkValidity() => boolean"
50264
50770
  }
50265
50771
  },
50772
+ {
50773
+ "kind": "field",
50774
+ "name": "checkInProgress",
50775
+ "type": {
50776
+ "text": "boolean"
50777
+ },
50778
+ "privacy": "private",
50779
+ "default": "false",
50780
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
50781
+ "inheritedFrom": {
50782
+ "name": "HelixFormElement",
50783
+ "module": "src/helix-form-element/helix-form-element.ts"
50784
+ }
50785
+ },
50266
50786
  {
50267
50787
  "kind": "method",
50268
50788
  "name": "reportValidity",
@@ -50717,21 +51237,6 @@
50717
51237
  "name": "HelixElement",
50718
51238
  "module": "src/helix-element/helix-element.ts"
50719
51239
  }
50720
- },
50721
- {
50722
- "kind": "method",
50723
- "name": "performUpdate",
50724
- "privacy": "protected",
50725
- "return": {
50726
- "type": {
50727
- "text": "void"
50728
- }
50729
- },
50730
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
50731
- "inheritedFrom": {
50732
- "name": "HelixElement",
50733
- "module": "src/helix-element/helix-element.ts"
50734
- }
50735
51240
  }
50736
51241
  ],
50737
51242
  "superclass": {
@@ -54546,6 +55051,50 @@
54546
55051
  "module": "src/helix-form-element/helix-form-element.ts"
54547
55052
  }
54548
55053
  },
55054
+ {
55055
+ "kind": "field",
55056
+ "name": "updateRunning",
55057
+ "type": {
55058
+ "text": "boolean"
55059
+ },
55060
+ "privacy": "private",
55061
+ "default": "false",
55062
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
55063
+ "inheritedFrom": {
55064
+ "name": "HelixFormElement",
55065
+ "module": "src/helix-form-element/helix-form-element.ts"
55066
+ }
55067
+ },
55068
+ {
55069
+ "kind": "method",
55070
+ "name": "performUpdate",
55071
+ "privacy": "protected",
55072
+ "return": {
55073
+ "type": {
55074
+ "text": "void"
55075
+ }
55076
+ },
55077
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
55078
+ "inheritedFrom": {
55079
+ "name": "HelixElement",
55080
+ "module": "src/helix-element/helix-element.ts"
55081
+ }
55082
+ },
55083
+ {
55084
+ "kind": "method",
55085
+ "name": "runPendingUpdate",
55086
+ "privacy": "private",
55087
+ "return": {
55088
+ "type": {
55089
+ "text": "void"
55090
+ }
55091
+ },
55092
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
55093
+ "inheritedFrom": {
55094
+ "name": "HelixFormElement",
55095
+ "module": "src/helix-form-element/helix-form-element.ts"
55096
+ }
55097
+ },
54549
55098
  {
54550
55099
  "kind": "field",
54551
55100
  "name": "willValidate",
@@ -54567,7 +55116,7 @@
54567
55116
  "text": "boolean"
54568
55117
  }
54569
55118
  },
54570
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
55119
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
54571
55120
  "inheritedFrom": {
54572
55121
  "name": "HelixFormElement",
54573
55122
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -54576,6 +55125,20 @@
54576
55125
  "text": "checkValidity() => boolean"
54577
55126
  }
54578
55127
  },
55128
+ {
55129
+ "kind": "field",
55130
+ "name": "checkInProgress",
55131
+ "type": {
55132
+ "text": "boolean"
55133
+ },
55134
+ "privacy": "private",
55135
+ "default": "false",
55136
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
55137
+ "inheritedFrom": {
55138
+ "name": "HelixFormElement",
55139
+ "module": "src/helix-form-element/helix-form-element.ts"
55140
+ }
55141
+ },
54579
55142
  {
54580
55143
  "kind": "method",
54581
55144
  "name": "reportValidity",
@@ -55044,21 +55607,6 @@
55044
55607
  "name": "HelixElement",
55045
55608
  "module": "src/helix-element/helix-element.ts"
55046
55609
  }
55047
- },
55048
- {
55049
- "kind": "method",
55050
- "name": "performUpdate",
55051
- "privacy": "protected",
55052
- "return": {
55053
- "type": {
55054
- "text": "void"
55055
- }
55056
- },
55057
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
55058
- "inheritedFrom": {
55059
- "name": "HelixElement",
55060
- "module": "src/helix-element/helix-element.ts"
55061
- }
55062
55610
  }
55063
55611
  ],
55064
55612
  "mixins": [
@@ -61506,6 +62054,29 @@
61506
62054
  "module": "src/mixins/mixin-segmented-field/mixin-segmented-field.ts"
61507
62055
  }
61508
62056
  },
62057
+ {
62058
+ "kind": "method",
62059
+ "name": "erase",
62060
+ "privacy": "private",
62061
+ "return": {
62062
+ "type": {
62063
+ "text": "void"
62064
+ }
62065
+ },
62066
+ "parameters": [
62067
+ {
62068
+ "name": "element",
62069
+ "type": {
62070
+ "text": "HTMLElement"
62071
+ }
62072
+ }
62073
+ ],
62074
+ "description": "Takes the last digit off the segment, or moves to the segment before it\nwhere this one is already empty, as React Aria's segments do. A reader\nclearing a date from its end holds Backspace and it empties right to\nleft.",
62075
+ "inheritedFrom": {
62076
+ "name": "MixinSegmentedField",
62077
+ "module": "src/mixins/mixin-segmented-field/mixin-segmented-field.ts"
62078
+ }
62079
+ },
61509
62080
  {
61510
62081
  "kind": "field",
61511
62082
  "name": "composing",
@@ -62711,7 +63282,7 @@
62711
63282
  },
62712
63283
  "privacy": "private",
62713
63284
  "default": "false",
62714
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
63285
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
62715
63286
  "inheritedFrom": {
62716
63287
  "name": "MixinField",
62717
63288
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -64121,6 +64692,50 @@
64121
64692
  "module": "src/helix-form-element/helix-form-element.ts"
64122
64693
  }
64123
64694
  },
64695
+ {
64696
+ "kind": "field",
64697
+ "name": "updateRunning",
64698
+ "type": {
64699
+ "text": "boolean"
64700
+ },
64701
+ "privacy": "private",
64702
+ "default": "false",
64703
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
64704
+ "inheritedFrom": {
64705
+ "name": "HelixFormElement",
64706
+ "module": "src/helix-form-element/helix-form-element.ts"
64707
+ }
64708
+ },
64709
+ {
64710
+ "kind": "method",
64711
+ "name": "performUpdate",
64712
+ "privacy": "protected",
64713
+ "return": {
64714
+ "type": {
64715
+ "text": "void"
64716
+ }
64717
+ },
64718
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
64719
+ "inheritedFrom": {
64720
+ "name": "HelixElement",
64721
+ "module": "src/helix-element/helix-element.ts"
64722
+ }
64723
+ },
64724
+ {
64725
+ "kind": "method",
64726
+ "name": "runPendingUpdate",
64727
+ "privacy": "private",
64728
+ "return": {
64729
+ "type": {
64730
+ "text": "void"
64731
+ }
64732
+ },
64733
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
64734
+ "inheritedFrom": {
64735
+ "name": "HelixFormElement",
64736
+ "module": "src/helix-form-element/helix-form-element.ts"
64737
+ }
64738
+ },
64124
64739
  {
64125
64740
  "kind": "field",
64126
64741
  "name": "willValidate",
@@ -64142,7 +64757,7 @@
64142
64757
  "text": "boolean"
64143
64758
  }
64144
64759
  },
64145
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
64760
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
64146
64761
  "inheritedFrom": {
64147
64762
  "name": "HelixFormElement",
64148
64763
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -64151,6 +64766,20 @@
64151
64766
  "text": "checkValidity() => boolean"
64152
64767
  }
64153
64768
  },
64769
+ {
64770
+ "kind": "field",
64771
+ "name": "checkInProgress",
64772
+ "type": {
64773
+ "text": "boolean"
64774
+ },
64775
+ "privacy": "private",
64776
+ "default": "false",
64777
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
64778
+ "inheritedFrom": {
64779
+ "name": "HelixFormElement",
64780
+ "module": "src/helix-form-element/helix-form-element.ts"
64781
+ }
64782
+ },
64154
64783
  {
64155
64784
  "kind": "method",
64156
64785
  "name": "reportValidity",
@@ -64593,21 +65222,6 @@
64593
65222
  "name": "HelixElement",
64594
65223
  "module": "src/helix-element/helix-element.ts"
64595
65224
  }
64596
- },
64597
- {
64598
- "kind": "method",
64599
- "name": "performUpdate",
64600
- "privacy": "protected",
64601
- "return": {
64602
- "type": {
64603
- "text": "void"
64604
- }
64605
- },
64606
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
64607
- "inheritedFrom": {
64608
- "name": "HelixElement",
64609
- "module": "src/helix-element/helix-element.ts"
64610
- }
64611
65225
  }
64612
65226
  ],
64613
65227
  "superclass": {
@@ -68251,6 +68865,50 @@
68251
68865
  "module": "src/helix-form-element/helix-form-element.ts"
68252
68866
  }
68253
68867
  },
68868
+ {
68869
+ "kind": "field",
68870
+ "name": "updateRunning",
68871
+ "type": {
68872
+ "text": "boolean"
68873
+ },
68874
+ "privacy": "private",
68875
+ "default": "false",
68876
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
68877
+ "inheritedFrom": {
68878
+ "name": "HelixFormElement",
68879
+ "module": "src/helix-form-element/helix-form-element.ts"
68880
+ }
68881
+ },
68882
+ {
68883
+ "kind": "method",
68884
+ "name": "performUpdate",
68885
+ "privacy": "protected",
68886
+ "return": {
68887
+ "type": {
68888
+ "text": "void"
68889
+ }
68890
+ },
68891
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
68892
+ "inheritedFrom": {
68893
+ "name": "HelixElement",
68894
+ "module": "src/helix-element/helix-element.ts"
68895
+ }
68896
+ },
68897
+ {
68898
+ "kind": "method",
68899
+ "name": "runPendingUpdate",
68900
+ "privacy": "private",
68901
+ "return": {
68902
+ "type": {
68903
+ "text": "void"
68904
+ }
68905
+ },
68906
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
68907
+ "inheritedFrom": {
68908
+ "name": "HelixFormElement",
68909
+ "module": "src/helix-form-element/helix-form-element.ts"
68910
+ }
68911
+ },
68254
68912
  {
68255
68913
  "kind": "field",
68256
68914
  "name": "willValidate",
@@ -68272,7 +68930,7 @@
68272
68930
  "text": "boolean"
68273
68931
  }
68274
68932
  },
68275
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
68933
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
68276
68934
  "inheritedFrom": {
68277
68935
  "name": "HelixFormElement",
68278
68936
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -68281,6 +68939,20 @@
68281
68939
  "text": "checkValidity() => boolean"
68282
68940
  }
68283
68941
  },
68942
+ {
68943
+ "kind": "field",
68944
+ "name": "checkInProgress",
68945
+ "type": {
68946
+ "text": "boolean"
68947
+ },
68948
+ "privacy": "private",
68949
+ "default": "false",
68950
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
68951
+ "inheritedFrom": {
68952
+ "name": "HelixFormElement",
68953
+ "module": "src/helix-form-element/helix-form-element.ts"
68954
+ }
68955
+ },
68284
68956
  {
68285
68957
  "kind": "method",
68286
68958
  "name": "reportValidity",
@@ -68737,21 +69409,6 @@
68737
69409
  "name": "HelixElement",
68738
69410
  "module": "src/helix-element/helix-element.ts"
68739
69411
  }
68740
- },
68741
- {
68742
- "kind": "method",
68743
- "name": "performUpdate",
68744
- "privacy": "protected",
68745
- "return": {
68746
- "type": {
68747
- "text": "void"
68748
- }
68749
- },
68750
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
68751
- "inheritedFrom": {
68752
- "name": "HelixElement",
68753
- "module": "src/helix-element/helix-element.ts"
68754
- }
68755
69412
  }
68756
69413
  ],
68757
69414
  "superclass": {
@@ -79478,7 +80135,7 @@
79478
80135
  },
79479
80136
  "privacy": "private",
79480
80137
  "default": "false",
79481
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
80138
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
79482
80139
  "inheritedFrom": {
79483
80140
  "name": "MixinField",
79484
80141
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -80756,6 +81413,50 @@
80756
81413
  "module": "src/helix-form-element/helix-form-element.ts"
80757
81414
  }
80758
81415
  },
81416
+ {
81417
+ "kind": "field",
81418
+ "name": "updateRunning",
81419
+ "type": {
81420
+ "text": "boolean"
81421
+ },
81422
+ "privacy": "private",
81423
+ "default": "false",
81424
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
81425
+ "inheritedFrom": {
81426
+ "name": "HelixFormElement",
81427
+ "module": "src/helix-form-element/helix-form-element.ts"
81428
+ }
81429
+ },
81430
+ {
81431
+ "kind": "method",
81432
+ "name": "performUpdate",
81433
+ "privacy": "protected",
81434
+ "return": {
81435
+ "type": {
81436
+ "text": "void"
81437
+ }
81438
+ },
81439
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
81440
+ "inheritedFrom": {
81441
+ "name": "HelixElement",
81442
+ "module": "src/helix-element/helix-element.ts"
81443
+ }
81444
+ },
81445
+ {
81446
+ "kind": "method",
81447
+ "name": "runPendingUpdate",
81448
+ "privacy": "private",
81449
+ "return": {
81450
+ "type": {
81451
+ "text": "void"
81452
+ }
81453
+ },
81454
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
81455
+ "inheritedFrom": {
81456
+ "name": "HelixFormElement",
81457
+ "module": "src/helix-form-element/helix-form-element.ts"
81458
+ }
81459
+ },
80759
81460
  {
80760
81461
  "kind": "field",
80761
81462
  "name": "willValidate",
@@ -80777,7 +81478,7 @@
80777
81478
  "text": "boolean"
80778
81479
  }
80779
81480
  },
80780
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
81481
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
80781
81482
  "inheritedFrom": {
80782
81483
  "name": "HelixFormElement",
80783
81484
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -80786,6 +81487,20 @@
80786
81487
  "text": "checkValidity() => boolean"
80787
81488
  }
80788
81489
  },
81490
+ {
81491
+ "kind": "field",
81492
+ "name": "checkInProgress",
81493
+ "type": {
81494
+ "text": "boolean"
81495
+ },
81496
+ "privacy": "private",
81497
+ "default": "false",
81498
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
81499
+ "inheritedFrom": {
81500
+ "name": "HelixFormElement",
81501
+ "module": "src/helix-form-element/helix-form-element.ts"
81502
+ }
81503
+ },
80789
81504
  {
80790
81505
  "kind": "method",
80791
81506
  "name": "reportValidity",
@@ -81228,21 +81943,6 @@
81228
81943
  "name": "HelixElement",
81229
81944
  "module": "src/helix-element/helix-element.ts"
81230
81945
  }
81231
- },
81232
- {
81233
- "kind": "method",
81234
- "name": "performUpdate",
81235
- "privacy": "protected",
81236
- "return": {
81237
- "type": {
81238
- "text": "void"
81239
- }
81240
- },
81241
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
81242
- "inheritedFrom": {
81243
- "name": "HelixElement",
81244
- "module": "src/helix-element/helix-element.ts"
81245
- }
81246
81946
  }
81247
81947
  ],
81248
81948
  "superclass": {
@@ -85686,7 +86386,7 @@
85686
86386
  },
85687
86387
  "privacy": "private",
85688
86388
  "default": "false",
85689
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
86389
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
85690
86390
  "inheritedFrom": {
85691
86391
  "name": "MixinField",
85692
86392
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -86868,6 +87568,50 @@
86868
87568
  "module": "src/helix-form-element/helix-form-element.ts"
86869
87569
  }
86870
87570
  },
87571
+ {
87572
+ "kind": "field",
87573
+ "name": "updateRunning",
87574
+ "type": {
87575
+ "text": "boolean"
87576
+ },
87577
+ "privacy": "private",
87578
+ "default": "false",
87579
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
87580
+ "inheritedFrom": {
87581
+ "name": "HelixFormElement",
87582
+ "module": "src/helix-form-element/helix-form-element.ts"
87583
+ }
87584
+ },
87585
+ {
87586
+ "kind": "method",
87587
+ "name": "performUpdate",
87588
+ "privacy": "protected",
87589
+ "return": {
87590
+ "type": {
87591
+ "text": "void"
87592
+ }
87593
+ },
87594
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
87595
+ "inheritedFrom": {
87596
+ "name": "HelixElement",
87597
+ "module": "src/helix-element/helix-element.ts"
87598
+ }
87599
+ },
87600
+ {
87601
+ "kind": "method",
87602
+ "name": "runPendingUpdate",
87603
+ "privacy": "private",
87604
+ "return": {
87605
+ "type": {
87606
+ "text": "void"
87607
+ }
87608
+ },
87609
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
87610
+ "inheritedFrom": {
87611
+ "name": "HelixFormElement",
87612
+ "module": "src/helix-form-element/helix-form-element.ts"
87613
+ }
87614
+ },
86871
87615
  {
86872
87616
  "kind": "field",
86873
87617
  "name": "willValidate",
@@ -86889,7 +87633,7 @@
86889
87633
  "text": "boolean"
86890
87634
  }
86891
87635
  },
86892
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
87636
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
86893
87637
  "inheritedFrom": {
86894
87638
  "name": "HelixFormElement",
86895
87639
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -86898,6 +87642,20 @@
86898
87642
  "text": "checkValidity() => boolean"
86899
87643
  }
86900
87644
  },
87645
+ {
87646
+ "kind": "field",
87647
+ "name": "checkInProgress",
87648
+ "type": {
87649
+ "text": "boolean"
87650
+ },
87651
+ "privacy": "private",
87652
+ "default": "false",
87653
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
87654
+ "inheritedFrom": {
87655
+ "name": "HelixFormElement",
87656
+ "module": "src/helix-form-element/helix-form-element.ts"
87657
+ }
87658
+ },
86901
87659
  {
86902
87660
  "kind": "method",
86903
87661
  "name": "reportValidity",
@@ -87354,21 +88112,6 @@
87354
88112
  "name": "HelixElement",
87355
88113
  "module": "src/helix-element/helix-element.ts"
87356
88114
  }
87357
- },
87358
- {
87359
- "kind": "method",
87360
- "name": "performUpdate",
87361
- "privacy": "protected",
87362
- "return": {
87363
- "type": {
87364
- "text": "void"
87365
- }
87366
- },
87367
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
87368
- "inheritedFrom": {
87369
- "name": "HelixElement",
87370
- "module": "src/helix-element/helix-element.ts"
87371
- }
87372
88115
  }
87373
88116
  ],
87374
88117
  "superclass": {
@@ -88786,10 +89529,10 @@
88786
89529
  "kind": "field",
88787
89530
  "name": "date",
88788
89531
  "type": {
88789
- "text": "string"
89532
+ "text": "Date | number | string"
88790
89533
  },
88791
89534
  "default": "''",
88792
- "description": "The timestamp, in any format `Date` can parse.\n\nAn ISO string is what an API sends and what `<time datetime>` takes, so it\nis the shape that needs no translation at either end. Left unset this\nrenders nothing rather than the epoch, which is what parsing an empty string\nwould give.\n\n**The element's own text is read as a fallback, and only in a browser.**\n`<helix-headless-format-date\nelapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling\nthat reads best in markup, and it cannot be the only one: measured against\nLit's server shim, `textContent`, `children`, `firstChild` and\n`querySelector` are all `undefined` there, so a server has no way to see\nit. An element rendered on a server needs the attribute; one rendered in a\nbrowser may use either.",
89535
+ "description": "The timestamp: a `Date`, milliseconds since the epoch, or a string in any\nformat `Date` can parse. The attribute is the string.\n\nAn ISO string is what an API sends and what `<time datetime>` takes, so it\nis the shape that needs no translation at either end. Left unset this\nrenders nothing rather than the epoch, which is what parsing an empty string\nwould give.\n\n**The element's own text is read as a fallback, and only in a browser.**\n`<helix-headless-format-date\nelapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling\nthat reads best in markup, and it cannot be the only one: measured against\nLit's server shim, `textContent`, `children`, `firstChild` and\n`querySelector` are all `undefined` there, so a server has no way to see\nit. An element rendered on a server needs the attribute; one rendered in a\nbrowser may use either.",
88793
89536
  "attribute": "date",
88794
89537
  "inheritedFrom": {
88795
89538
  "name": "HelixHeadlessFormatDate",
@@ -89160,7 +89903,7 @@
89160
89903
  "text": "string"
89161
89904
  },
89162
89905
  "privacy": "private",
89163
- "description": "The timestamp as written, in the attribute or in the light DOM.",
89906
+ "description": "The timestamp as written, in the property, the attribute or the light DOM.\n\nA `Date` or a number is written as its ISO string, so it is read the way an\nattribute is. Measured before this: assigning `new Date()` threw, since\nonly a string has `trim`, where Shoelace and Web Awesome take a `Date`.",
89164
89907
  "readonly": true,
89165
89908
  "inheritedFrom": {
89166
89909
  "name": "HelixHeadlessFormatDate",
@@ -89716,10 +90459,10 @@
89716
90459
  {
89717
90460
  "name": "date",
89718
90461
  "type": {
89719
- "text": "string"
90462
+ "text": "Date | number | string"
89720
90463
  },
89721
90464
  "default": "''",
89722
- "description": "The timestamp, in any format `Date` can parse.\n\nAn ISO string is what an API sends and what `<time datetime>` takes, so it\nis the shape that needs no translation at either end. Left unset this\nrenders nothing rather than the epoch, which is what parsing an empty string\nwould give.\n\n**The element's own text is read as a fallback, and only in a browser.**\n`<helix-headless-format-date\nelapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling\nthat reads best in markup, and it cannot be the only one: measured against\nLit's server shim, `textContent`, `children`, `firstChild` and\n`querySelector` are all `undefined` there, so a server has no way to see\nit. An element rendered on a server needs the attribute; one rendered in a\nbrowser may use either.",
90465
+ "description": "The timestamp: a `Date`, milliseconds since the epoch, or a string in any\nformat `Date` can parse. The attribute is the string.\n\nAn ISO string is what an API sends and what `<time datetime>` takes, so it\nis the shape that needs no translation at either end. Left unset this\nrenders nothing rather than the epoch, which is what parsing an empty string\nwould give.\n\n**The element's own text is read as a fallback, and only in a browser.**\n`<helix-headless-format-date\nelapsed>2026-08-27T01:00:00Z</helix-headless-format-date>` is the spelling\nthat reads best in markup, and it cannot be the only one: measured against\nLit's server shim, `textContent`, `children`, `firstChild` and\n`querySelector` are all `undefined` there, so a server has no way to see\nit. An element rendered on a server needs the attribute; one rendered in a\nbrowser may use either.",
89723
90466
  "fieldName": "date",
89724
90467
  "inheritedFrom": {
89725
90468
  "name": "HelixHeadlessFormatDate",
@@ -97400,6 +98143,50 @@
97400
98143
  "module": "src/helix-form-element/helix-form-element.ts"
97401
98144
  }
97402
98145
  },
98146
+ {
98147
+ "kind": "field",
98148
+ "name": "updateRunning",
98149
+ "type": {
98150
+ "text": "boolean"
98151
+ },
98152
+ "privacy": "private",
98153
+ "default": "false",
98154
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
98155
+ "inheritedFrom": {
98156
+ "name": "HelixFormElement",
98157
+ "module": "src/helix-form-element/helix-form-element.ts"
98158
+ }
98159
+ },
98160
+ {
98161
+ "kind": "method",
98162
+ "name": "performUpdate",
98163
+ "privacy": "protected",
98164
+ "return": {
98165
+ "type": {
98166
+ "text": "void"
98167
+ }
98168
+ },
98169
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
98170
+ "inheritedFrom": {
98171
+ "name": "HelixElement",
98172
+ "module": "src/helix-element/helix-element.ts"
98173
+ }
98174
+ },
98175
+ {
98176
+ "kind": "method",
98177
+ "name": "runPendingUpdate",
98178
+ "privacy": "private",
98179
+ "return": {
98180
+ "type": {
98181
+ "text": "void"
98182
+ }
98183
+ },
98184
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
98185
+ "inheritedFrom": {
98186
+ "name": "HelixFormElement",
98187
+ "module": "src/helix-form-element/helix-form-element.ts"
98188
+ }
98189
+ },
97403
98190
  {
97404
98191
  "kind": "field",
97405
98192
  "name": "willValidate",
@@ -97421,7 +98208,7 @@
97421
98208
  "text": "boolean"
97422
98209
  }
97423
98210
  },
97424
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
98211
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
97425
98212
  "inheritedFrom": {
97426
98213
  "name": "HelixFormElement",
97427
98214
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -97430,6 +98217,20 @@
97430
98217
  "text": "checkValidity() => boolean"
97431
98218
  }
97432
98219
  },
98220
+ {
98221
+ "kind": "field",
98222
+ "name": "checkInProgress",
98223
+ "type": {
98224
+ "text": "boolean"
98225
+ },
98226
+ "privacy": "private",
98227
+ "default": "false",
98228
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
98229
+ "inheritedFrom": {
98230
+ "name": "HelixFormElement",
98231
+ "module": "src/helix-form-element/helix-form-element.ts"
98232
+ }
98233
+ },
97433
98234
  {
97434
98235
  "kind": "method",
97435
98236
  "name": "reportValidity",
@@ -97912,21 +98713,6 @@
97912
98713
  "name": "HelixElement",
97913
98714
  "module": "src/helix-element/helix-element.ts"
97914
98715
  }
97915
- },
97916
- {
97917
- "kind": "method",
97918
- "name": "performUpdate",
97919
- "privacy": "protected",
97920
- "return": {
97921
- "type": {
97922
- "text": "void"
97923
- }
97924
- },
97925
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
97926
- "inheritedFrom": {
97927
- "name": "HelixElement",
97928
- "module": "src/helix-element/helix-element.ts"
97929
- }
97930
98716
  }
97931
98717
  ],
97932
98718
  "attributes": [
@@ -101624,7 +102410,7 @@
101624
102410
  },
101625
102411
  "privacy": "private",
101626
102412
  "default": "false",
101627
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
102413
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
101628
102414
  "inheritedFrom": {
101629
102415
  "name": "MixinField",
101630
102416
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -102693,6 +103479,50 @@
102693
103479
  "module": "src/helix-form-element/helix-form-element.ts"
102694
103480
  }
102695
103481
  },
103482
+ {
103483
+ "kind": "field",
103484
+ "name": "updateRunning",
103485
+ "type": {
103486
+ "text": "boolean"
103487
+ },
103488
+ "privacy": "private",
103489
+ "default": "false",
103490
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
103491
+ "inheritedFrom": {
103492
+ "name": "HelixFormElement",
103493
+ "module": "src/helix-form-element/helix-form-element.ts"
103494
+ }
103495
+ },
103496
+ {
103497
+ "kind": "method",
103498
+ "name": "performUpdate",
103499
+ "privacy": "protected",
103500
+ "return": {
103501
+ "type": {
103502
+ "text": "void"
103503
+ }
103504
+ },
103505
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
103506
+ "inheritedFrom": {
103507
+ "name": "HelixElement",
103508
+ "module": "src/helix-element/helix-element.ts"
103509
+ }
103510
+ },
103511
+ {
103512
+ "kind": "method",
103513
+ "name": "runPendingUpdate",
103514
+ "privacy": "private",
103515
+ "return": {
103516
+ "type": {
103517
+ "text": "void"
103518
+ }
103519
+ },
103520
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
103521
+ "inheritedFrom": {
103522
+ "name": "HelixFormElement",
103523
+ "module": "src/helix-form-element/helix-form-element.ts"
103524
+ }
103525
+ },
102696
103526
  {
102697
103527
  "kind": "field",
102698
103528
  "name": "willValidate",
@@ -102714,7 +103544,7 @@
102714
103544
  "text": "boolean"
102715
103545
  }
102716
103546
  },
102717
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
103547
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
102718
103548
  "inheritedFrom": {
102719
103549
  "name": "HelixFormElement",
102720
103550
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -102723,6 +103553,20 @@
102723
103553
  "text": "checkValidity() => boolean"
102724
103554
  }
102725
103555
  },
103556
+ {
103557
+ "kind": "field",
103558
+ "name": "checkInProgress",
103559
+ "type": {
103560
+ "text": "boolean"
103561
+ },
103562
+ "privacy": "private",
103563
+ "default": "false",
103564
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
103565
+ "inheritedFrom": {
103566
+ "name": "HelixFormElement",
103567
+ "module": "src/helix-form-element/helix-form-element.ts"
103568
+ }
103569
+ },
102726
103570
  {
102727
103571
  "kind": "method",
102728
103572
  "name": "reportValidity",
@@ -103179,21 +104023,6 @@
103179
104023
  "name": "HelixElement",
103180
104024
  "module": "src/helix-element/helix-element.ts"
103181
104025
  }
103182
- },
103183
- {
103184
- "kind": "method",
103185
- "name": "performUpdate",
103186
- "privacy": "protected",
103187
- "return": {
103188
- "type": {
103189
- "text": "void"
103190
- }
103191
- },
103192
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
103193
- "inheritedFrom": {
103194
- "name": "HelixElement",
103195
- "module": "src/helix-element/helix-element.ts"
103196
- }
103197
104026
  }
103198
104027
  ],
103199
104028
  "superclass": {
@@ -114458,7 +115287,7 @@
114458
115287
  },
114459
115288
  "privacy": "private",
114460
115289
  "default": "false",
114461
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
115290
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
114462
115291
  "inheritedFrom": {
114463
115292
  "name": "MixinField",
114464
115293
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -115393,7 +116222,7 @@
115393
116222
  "text": "void"
115394
116223
  }
115395
116224
  },
115396
- "description": "Scrolls the chosen option to the middle of the list.\n\nA method rather than something this does on its own, because a listbox\nopening on its answer usually wants it merely *visible* and the browser\nalready manages that: centering is what a caller wants when the list is being\nread as a dial rather than scanned as a list, which is what Time Picker's\nwheels do with three of these.\n\nMeasured by core's `centerInView`, or, for a list of `items`, by the\narithmetic, since the chosen option may not be drawn.",
116225
+ "description": "Scrolls the chosen option to the middle of the list, or the highlighted one\nwhere nothing is chosen.\n\nA method rather than something this does on its own, because a listbox\nopening on its answer usually wants it merely *visible* and the browser\nalready manages that: centering is what a caller wants when the list is being\nread as a dial rather than scanned as a list, which is what Time Picker's\nwheels do with three of these.\n\nMeasured by core's `centerInView`, or, for a list of `items`, by the\narithmetic, since the chosen option may not be drawn.",
115397
116226
  "type": {
115398
116227
  "text": "reveal() => void"
115399
116228
  },
@@ -115402,6 +116231,31 @@
115402
116231
  "module": "src/listbox/root/listbox-root.ts"
115403
116232
  }
115404
116233
  },
116234
+ {
116235
+ "kind": "method",
116236
+ "name": "highlightValue",
116237
+ "return": {
116238
+ "type": {
116239
+ "text": "void"
116240
+ }
116241
+ },
116242
+ "parameters": [
116243
+ {
116244
+ "name": "value",
116245
+ "type": {
116246
+ "text": "string"
116247
+ }
116248
+ }
116249
+ ],
116250
+ "description": "Puts the highlight on the option holding `value`, without choosing it, so\nthe arrow keys move from there. Nothing changes where no option a reader\ncan reach holds `value`.\n\nTime Picker calls it for a time between two of its steps, which no option\nholds: without it the first arrow moved from the top of the list, so Down\nfrom 14:07 went to midnight.",
116251
+ "type": {
116252
+ "text": "highlightValue(value: string) => void"
116253
+ },
116254
+ "inheritedFrom": {
116255
+ "name": "HelixHeadlessListbox",
116256
+ "module": "src/listbox/root/listbox-root.ts"
116257
+ }
116258
+ },
115405
116259
  {
115406
116260
  "kind": "method",
115407
116261
  "name": "place",
@@ -115978,6 +116832,50 @@
115978
116832
  "module": "src/helix-form-element/helix-form-element.ts"
115979
116833
  }
115980
116834
  },
116835
+ {
116836
+ "kind": "field",
116837
+ "name": "updateRunning",
116838
+ "type": {
116839
+ "text": "boolean"
116840
+ },
116841
+ "privacy": "private",
116842
+ "default": "false",
116843
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
116844
+ "inheritedFrom": {
116845
+ "name": "HelixFormElement",
116846
+ "module": "src/helix-form-element/helix-form-element.ts"
116847
+ }
116848
+ },
116849
+ {
116850
+ "kind": "method",
116851
+ "name": "performUpdate",
116852
+ "privacy": "protected",
116853
+ "return": {
116854
+ "type": {
116855
+ "text": "void"
116856
+ }
116857
+ },
116858
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
116859
+ "inheritedFrom": {
116860
+ "name": "HelixElement",
116861
+ "module": "src/helix-element/helix-element.ts"
116862
+ }
116863
+ },
116864
+ {
116865
+ "kind": "method",
116866
+ "name": "runPendingUpdate",
116867
+ "privacy": "private",
116868
+ "return": {
116869
+ "type": {
116870
+ "text": "void"
116871
+ }
116872
+ },
116873
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
116874
+ "inheritedFrom": {
116875
+ "name": "HelixFormElement",
116876
+ "module": "src/helix-form-element/helix-form-element.ts"
116877
+ }
116878
+ },
115981
116879
  {
115982
116880
  "kind": "field",
115983
116881
  "name": "willValidate",
@@ -115999,7 +116897,7 @@
115999
116897
  "text": "boolean"
116000
116898
  }
116001
116899
  },
116002
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
116900
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
116003
116901
  "inheritedFrom": {
116004
116902
  "name": "HelixFormElement",
116005
116903
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -116008,6 +116906,20 @@
116008
116906
  "text": "checkValidity() => boolean"
116009
116907
  }
116010
116908
  },
116909
+ {
116910
+ "kind": "field",
116911
+ "name": "checkInProgress",
116912
+ "type": {
116913
+ "text": "boolean"
116914
+ },
116915
+ "privacy": "private",
116916
+ "default": "false",
116917
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
116918
+ "inheritedFrom": {
116919
+ "name": "HelixFormElement",
116920
+ "module": "src/helix-form-element/helix-form-element.ts"
116921
+ }
116922
+ },
116011
116923
  {
116012
116924
  "kind": "method",
116013
116925
  "name": "reportValidity",
@@ -116476,21 +117388,6 @@
116476
117388
  "name": "HelixElement",
116477
117389
  "module": "src/helix-element/helix-element.ts"
116478
117390
  }
116479
- },
116480
- {
116481
- "kind": "method",
116482
- "name": "performUpdate",
116483
- "privacy": "protected",
116484
- "return": {
116485
- "type": {
116486
- "text": "void"
116487
- }
116488
- },
116489
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
116490
- "inheritedFrom": {
116491
- "name": "HelixElement",
116492
- "module": "src/helix-element/helix-element.ts"
116493
- }
116494
117391
  }
116495
117392
  ],
116496
117393
  "superclass": {
@@ -141661,7 +142558,7 @@
141661
142558
  },
141662
142559
  "privacy": "private",
141663
142560
  "default": "false",
141664
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
142561
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
141665
142562
  "inheritedFrom": {
141666
142563
  "name": "MixinField",
141667
142564
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -143101,6 +143998,50 @@
143101
143998
  "module": "src/helix-form-element/helix-form-element.ts"
143102
143999
  }
143103
144000
  },
144001
+ {
144002
+ "kind": "field",
144003
+ "name": "updateRunning",
144004
+ "type": {
144005
+ "text": "boolean"
144006
+ },
144007
+ "privacy": "private",
144008
+ "default": "false",
144009
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
144010
+ "inheritedFrom": {
144011
+ "name": "HelixFormElement",
144012
+ "module": "src/helix-form-element/helix-form-element.ts"
144013
+ }
144014
+ },
144015
+ {
144016
+ "kind": "method",
144017
+ "name": "performUpdate",
144018
+ "privacy": "protected",
144019
+ "return": {
144020
+ "type": {
144021
+ "text": "void"
144022
+ }
144023
+ },
144024
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
144025
+ "inheritedFrom": {
144026
+ "name": "HelixElement",
144027
+ "module": "src/helix-element/helix-element.ts"
144028
+ }
144029
+ },
144030
+ {
144031
+ "kind": "method",
144032
+ "name": "runPendingUpdate",
144033
+ "privacy": "private",
144034
+ "return": {
144035
+ "type": {
144036
+ "text": "void"
144037
+ }
144038
+ },
144039
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
144040
+ "inheritedFrom": {
144041
+ "name": "HelixFormElement",
144042
+ "module": "src/helix-form-element/helix-form-element.ts"
144043
+ }
144044
+ },
143104
144045
  {
143105
144046
  "kind": "field",
143106
144047
  "name": "willValidate",
@@ -143122,7 +144063,7 @@
143122
144063
  "text": "boolean"
143123
144064
  }
143124
144065
  },
143125
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
144066
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
143126
144067
  "inheritedFrom": {
143127
144068
  "name": "HelixFormElement",
143128
144069
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -143131,6 +144072,20 @@
143131
144072
  "text": "checkValidity() => boolean"
143132
144073
  }
143133
144074
  },
144075
+ {
144076
+ "kind": "field",
144077
+ "name": "checkInProgress",
144078
+ "type": {
144079
+ "text": "boolean"
144080
+ },
144081
+ "privacy": "private",
144082
+ "default": "false",
144083
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
144084
+ "inheritedFrom": {
144085
+ "name": "HelixFormElement",
144086
+ "module": "src/helix-form-element/helix-form-element.ts"
144087
+ }
144088
+ },
143134
144089
  {
143135
144090
  "kind": "method",
143136
144091
  "name": "reportValidity",
@@ -143587,21 +144542,6 @@
143587
144542
  "name": "HelixElement",
143588
144543
  "module": "src/helix-element/helix-element.ts"
143589
144544
  }
143590
- },
143591
- {
143592
- "kind": "method",
143593
- "name": "performUpdate",
143594
- "privacy": "protected",
143595
- "return": {
143596
- "type": {
143597
- "text": "void"
143598
- }
143599
- },
143600
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
143601
- "inheritedFrom": {
143602
- "name": "HelixElement",
143603
- "module": "src/helix-element/helix-element.ts"
143604
- }
143605
144545
  }
143606
144546
  ],
143607
144547
  "superclass": {
@@ -153298,6 +154238,50 @@
153298
154238
  "module": "src/helix-form-element/helix-form-element.ts"
153299
154239
  }
153300
154240
  },
154241
+ {
154242
+ "kind": "field",
154243
+ "name": "updateRunning",
154244
+ "type": {
154245
+ "text": "boolean"
154246
+ },
154247
+ "privacy": "private",
154248
+ "default": "false",
154249
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
154250
+ "inheritedFrom": {
154251
+ "name": "HelixFormElement",
154252
+ "module": "src/helix-form-element/helix-form-element.ts"
154253
+ }
154254
+ },
154255
+ {
154256
+ "kind": "method",
154257
+ "name": "performUpdate",
154258
+ "privacy": "protected",
154259
+ "return": {
154260
+ "type": {
154261
+ "text": "void"
154262
+ }
154263
+ },
154264
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
154265
+ "inheritedFrom": {
154266
+ "name": "HelixElement",
154267
+ "module": "src/helix-element/helix-element.ts"
154268
+ }
154269
+ },
154270
+ {
154271
+ "kind": "method",
154272
+ "name": "runPendingUpdate",
154273
+ "privacy": "private",
154274
+ "return": {
154275
+ "type": {
154276
+ "text": "void"
154277
+ }
154278
+ },
154279
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
154280
+ "inheritedFrom": {
154281
+ "name": "HelixFormElement",
154282
+ "module": "src/helix-form-element/helix-form-element.ts"
154283
+ }
154284
+ },
153301
154285
  {
153302
154286
  "kind": "field",
153303
154287
  "name": "willValidate",
@@ -153319,7 +154303,7 @@
153319
154303
  "text": "boolean"
153320
154304
  }
153321
154305
  },
153322
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
154306
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
153323
154307
  "inheritedFrom": {
153324
154308
  "name": "HelixFormElement",
153325
154309
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -153328,6 +154312,20 @@
153328
154312
  "text": "checkValidity() => boolean"
153329
154313
  }
153330
154314
  },
154315
+ {
154316
+ "kind": "field",
154317
+ "name": "checkInProgress",
154318
+ "type": {
154319
+ "text": "boolean"
154320
+ },
154321
+ "privacy": "private",
154322
+ "default": "false",
154323
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
154324
+ "inheritedFrom": {
154325
+ "name": "HelixFormElement",
154326
+ "module": "src/helix-form-element/helix-form-element.ts"
154327
+ }
154328
+ },
153331
154329
  {
153332
154330
  "kind": "method",
153333
154331
  "name": "reportValidity",
@@ -153796,21 +154794,6 @@
153796
154794
  "name": "HelixElement",
153797
154795
  "module": "src/helix-element/helix-element.ts"
153798
154796
  }
153799
- },
153800
- {
153801
- "kind": "method",
153802
- "name": "performUpdate",
153803
- "privacy": "protected",
153804
- "return": {
153805
- "type": {
153806
- "text": "void"
153807
- }
153808
- },
153809
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
153810
- "inheritedFrom": {
153811
- "name": "HelixElement",
153812
- "module": "src/helix-element/helix-element.ts"
153813
- }
153814
154797
  }
153815
154798
  ],
153816
154799
  "superclass": {
@@ -155100,7 +156083,7 @@
155100
156083
  },
155101
156084
  "privacy": "private",
155102
156085
  "default": "false",
155103
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
156086
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
155104
156087
  "inheritedFrom": {
155105
156088
  "name": "MixinField",
155106
156089
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -156074,6 +157057,50 @@
156074
157057
  "module": "src/helix-form-element/helix-form-element.ts"
156075
157058
  }
156076
157059
  },
157060
+ {
157061
+ "kind": "field",
157062
+ "name": "updateRunning",
157063
+ "type": {
157064
+ "text": "boolean"
157065
+ },
157066
+ "privacy": "private",
157067
+ "default": "false",
157068
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
157069
+ "inheritedFrom": {
157070
+ "name": "HelixFormElement",
157071
+ "module": "src/helix-form-element/helix-form-element.ts"
157072
+ }
157073
+ },
157074
+ {
157075
+ "kind": "method",
157076
+ "name": "performUpdate",
157077
+ "privacy": "protected",
157078
+ "return": {
157079
+ "type": {
157080
+ "text": "void"
157081
+ }
157082
+ },
157083
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
157084
+ "inheritedFrom": {
157085
+ "name": "HelixElement",
157086
+ "module": "src/helix-element/helix-element.ts"
157087
+ }
157088
+ },
157089
+ {
157090
+ "kind": "method",
157091
+ "name": "runPendingUpdate",
157092
+ "privacy": "private",
157093
+ "return": {
157094
+ "type": {
157095
+ "text": "void"
157096
+ }
157097
+ },
157098
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
157099
+ "inheritedFrom": {
157100
+ "name": "HelixFormElement",
157101
+ "module": "src/helix-form-element/helix-form-element.ts"
157102
+ }
157103
+ },
156077
157104
  {
156078
157105
  "kind": "field",
156079
157106
  "name": "willValidate",
@@ -156095,7 +157122,7 @@
156095
157122
  "text": "boolean"
156096
157123
  }
156097
157124
  },
156098
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
157125
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
156099
157126
  "inheritedFrom": {
156100
157127
  "name": "HelixFormElement",
156101
157128
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -156104,6 +157131,20 @@
156104
157131
  "text": "checkValidity() => boolean"
156105
157132
  }
156106
157133
  },
157134
+ {
157135
+ "kind": "field",
157136
+ "name": "checkInProgress",
157137
+ "type": {
157138
+ "text": "boolean"
157139
+ },
157140
+ "privacy": "private",
157141
+ "default": "false",
157142
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
157143
+ "inheritedFrom": {
157144
+ "name": "HelixFormElement",
157145
+ "module": "src/helix-form-element/helix-form-element.ts"
157146
+ }
157147
+ },
156107
157148
  {
156108
157149
  "kind": "method",
156109
157150
  "name": "reportValidity",
@@ -156560,21 +157601,6 @@
156560
157601
  "name": "HelixElement",
156561
157602
  "module": "src/helix-element/helix-element.ts"
156562
157603
  }
156563
- },
156564
- {
156565
- "kind": "method",
156566
- "name": "performUpdate",
156567
- "privacy": "protected",
156568
- "return": {
156569
- "type": {
156570
- "text": "void"
156571
- }
156572
- },
156573
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
156574
- "inheritedFrom": {
156575
- "name": "HelixElement",
156576
- "module": "src/helix-element/helix-element.ts"
156577
- }
156578
157604
  }
156579
157605
  ],
156580
157606
  "superclass": {
@@ -161430,7 +162456,7 @@
161430
162456
  },
161431
162457
  "privacy": "private",
161432
162458
  "default": "false",
161433
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
162459
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
161434
162460
  "inheritedFrom": {
161435
162461
  "name": "MixinField",
161436
162462
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -162097,6 +163123,50 @@
162097
163123
  "module": "src/helix-form-element/helix-form-element.ts"
162098
163124
  }
162099
163125
  },
163126
+ {
163127
+ "kind": "field",
163128
+ "name": "updateRunning",
163129
+ "type": {
163130
+ "text": "boolean"
163131
+ },
163132
+ "privacy": "private",
163133
+ "default": "false",
163134
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
163135
+ "inheritedFrom": {
163136
+ "name": "HelixFormElement",
163137
+ "module": "src/helix-form-element/helix-form-element.ts"
163138
+ }
163139
+ },
163140
+ {
163141
+ "kind": "method",
163142
+ "name": "performUpdate",
163143
+ "privacy": "protected",
163144
+ "return": {
163145
+ "type": {
163146
+ "text": "void"
163147
+ }
163148
+ },
163149
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
163150
+ "inheritedFrom": {
163151
+ "name": "HelixElement",
163152
+ "module": "src/helix-element/helix-element.ts"
163153
+ }
163154
+ },
163155
+ {
163156
+ "kind": "method",
163157
+ "name": "runPendingUpdate",
163158
+ "privacy": "private",
163159
+ "return": {
163160
+ "type": {
163161
+ "text": "void"
163162
+ }
163163
+ },
163164
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
163165
+ "inheritedFrom": {
163166
+ "name": "HelixFormElement",
163167
+ "module": "src/helix-form-element/helix-form-element.ts"
163168
+ }
163169
+ },
162100
163170
  {
162101
163171
  "kind": "field",
162102
163172
  "name": "willValidate",
@@ -162118,7 +163188,7 @@
162118
163188
  "text": "boolean"
162119
163189
  }
162120
163190
  },
162121
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
163191
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
162122
163192
  "inheritedFrom": {
162123
163193
  "name": "HelixFormElement",
162124
163194
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -162127,6 +163197,20 @@
162127
163197
  "text": "checkValidity() => boolean"
162128
163198
  }
162129
163199
  },
163200
+ {
163201
+ "kind": "field",
163202
+ "name": "checkInProgress",
163203
+ "type": {
163204
+ "text": "boolean"
163205
+ },
163206
+ "privacy": "private",
163207
+ "default": "false",
163208
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
163209
+ "inheritedFrom": {
163210
+ "name": "HelixFormElement",
163211
+ "module": "src/helix-form-element/helix-form-element.ts"
163212
+ }
163213
+ },
162130
163214
  {
162131
163215
  "kind": "method",
162132
163216
  "name": "reportValidity",
@@ -162595,21 +163679,6 @@
162595
163679
  "name": "HelixElement",
162596
163680
  "module": "src/helix-element/helix-element.ts"
162597
163681
  }
162598
- },
162599
- {
162600
- "kind": "method",
162601
- "name": "performUpdate",
162602
- "privacy": "protected",
162603
- "return": {
162604
- "type": {
162605
- "text": "void"
162606
- }
162607
- },
162608
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
162609
- "inheritedFrom": {
162610
- "name": "HelixElement",
162611
- "module": "src/helix-element/helix-element.ts"
162612
- }
162613
163682
  }
162614
163683
  ],
162615
163684
  "superclass": {
@@ -164262,7 +165331,7 @@
164262
165331
  },
164263
165332
  "privacy": "private",
164264
165333
  "default": "false",
164265
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
165334
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
164266
165335
  "inheritedFrom": {
164267
165336
  "name": "MixinField",
164268
165337
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -165293,6 +166362,50 @@
165293
166362
  "module": "src/helix-form-element/helix-form-element.ts"
165294
166363
  }
165295
166364
  },
166365
+ {
166366
+ "kind": "field",
166367
+ "name": "updateRunning",
166368
+ "type": {
166369
+ "text": "boolean"
166370
+ },
166371
+ "privacy": "private",
166372
+ "default": "false",
166373
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
166374
+ "inheritedFrom": {
166375
+ "name": "HelixFormElement",
166376
+ "module": "src/helix-form-element/helix-form-element.ts"
166377
+ }
166378
+ },
166379
+ {
166380
+ "kind": "method",
166381
+ "name": "performUpdate",
166382
+ "privacy": "protected",
166383
+ "return": {
166384
+ "type": {
166385
+ "text": "void"
166386
+ }
166387
+ },
166388
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
166389
+ "inheritedFrom": {
166390
+ "name": "HelixElement",
166391
+ "module": "src/helix-element/helix-element.ts"
166392
+ }
166393
+ },
166394
+ {
166395
+ "kind": "method",
166396
+ "name": "runPendingUpdate",
166397
+ "privacy": "private",
166398
+ "return": {
166399
+ "type": {
166400
+ "text": "void"
166401
+ }
166402
+ },
166403
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
166404
+ "inheritedFrom": {
166405
+ "name": "HelixFormElement",
166406
+ "module": "src/helix-form-element/helix-form-element.ts"
166407
+ }
166408
+ },
165296
166409
  {
165297
166410
  "kind": "field",
165298
166411
  "name": "willValidate",
@@ -165314,7 +166427,7 @@
165314
166427
  "text": "boolean"
165315
166428
  }
165316
166429
  },
165317
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
166430
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
165318
166431
  "inheritedFrom": {
165319
166432
  "name": "HelixFormElement",
165320
166433
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -165323,6 +166436,20 @@
165323
166436
  "text": "checkValidity() => boolean"
165324
166437
  }
165325
166438
  },
166439
+ {
166440
+ "kind": "field",
166441
+ "name": "checkInProgress",
166442
+ "type": {
166443
+ "text": "boolean"
166444
+ },
166445
+ "privacy": "private",
166446
+ "default": "false",
166447
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
166448
+ "inheritedFrom": {
166449
+ "name": "HelixFormElement",
166450
+ "module": "src/helix-form-element/helix-form-element.ts"
166451
+ }
166452
+ },
165326
166453
  {
165327
166454
  "kind": "method",
165328
166455
  "name": "reportValidity",
@@ -165805,21 +166932,6 @@
165805
166932
  "name": "HelixElement",
165806
166933
  "module": "src/helix-element/helix-element.ts"
165807
166934
  }
165808
- },
165809
- {
165810
- "kind": "method",
165811
- "name": "performUpdate",
165812
- "privacy": "protected",
165813
- "return": {
165814
- "type": {
165815
- "text": "void"
165816
- }
165817
- },
165818
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
165819
- "inheritedFrom": {
165820
- "name": "HelixElement",
165821
- "module": "src/helix-element/helix-element.ts"
165822
- }
165823
166935
  }
165824
166936
  ],
165825
166937
  "attributes": [
@@ -174785,7 +175897,7 @@
174785
175897
  },
174786
175898
  "privacy": "private",
174787
175899
  "default": "false",
174788
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
175900
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
174789
175901
  "inheritedFrom": {
174790
175902
  "name": "MixinField",
174791
175903
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -175884,6 +176996,50 @@
175884
176996
  "module": "src/helix-form-element/helix-form-element.ts"
175885
176997
  }
175886
176998
  },
176999
+ {
177000
+ "kind": "field",
177001
+ "name": "updateRunning",
177002
+ "type": {
177003
+ "text": "boolean"
177004
+ },
177005
+ "privacy": "private",
177006
+ "default": "false",
177007
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
177008
+ "inheritedFrom": {
177009
+ "name": "HelixFormElement",
177010
+ "module": "src/helix-form-element/helix-form-element.ts"
177011
+ }
177012
+ },
177013
+ {
177014
+ "kind": "method",
177015
+ "name": "performUpdate",
177016
+ "privacy": "protected",
177017
+ "return": {
177018
+ "type": {
177019
+ "text": "void"
177020
+ }
177021
+ },
177022
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
177023
+ "inheritedFrom": {
177024
+ "name": "HelixElement",
177025
+ "module": "src/helix-element/helix-element.ts"
177026
+ }
177027
+ },
177028
+ {
177029
+ "kind": "method",
177030
+ "name": "runPendingUpdate",
177031
+ "privacy": "private",
177032
+ "return": {
177033
+ "type": {
177034
+ "text": "void"
177035
+ }
177036
+ },
177037
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
177038
+ "inheritedFrom": {
177039
+ "name": "HelixFormElement",
177040
+ "module": "src/helix-form-element/helix-form-element.ts"
177041
+ }
177042
+ },
175887
177043
  {
175888
177044
  "kind": "field",
175889
177045
  "name": "willValidate",
@@ -175905,7 +177061,7 @@
175905
177061
  "text": "boolean"
175906
177062
  }
175907
177063
  },
175908
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
177064
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
175909
177065
  "inheritedFrom": {
175910
177066
  "name": "HelixFormElement",
175911
177067
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -175914,6 +177070,20 @@
175914
177070
  "text": "checkValidity() => boolean"
175915
177071
  }
175916
177072
  },
177073
+ {
177074
+ "kind": "field",
177075
+ "name": "checkInProgress",
177076
+ "type": {
177077
+ "text": "boolean"
177078
+ },
177079
+ "privacy": "private",
177080
+ "default": "false",
177081
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
177082
+ "inheritedFrom": {
177083
+ "name": "HelixFormElement",
177084
+ "module": "src/helix-form-element/helix-form-element.ts"
177085
+ }
177086
+ },
175917
177087
  {
175918
177088
  "kind": "method",
175919
177089
  "name": "reportValidity",
@@ -176356,21 +177526,6 @@
176356
177526
  "name": "HelixElement",
176357
177527
  "module": "src/helix-element/helix-element.ts"
176358
177528
  }
176359
- },
176360
- {
176361
- "kind": "method",
176362
- "name": "performUpdate",
176363
- "privacy": "protected",
176364
- "return": {
176365
- "type": {
176366
- "text": "void"
176367
- }
176368
- },
176369
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
176370
- "inheritedFrom": {
176371
- "name": "HelixElement",
176372
- "module": "src/helix-element/helix-element.ts"
176373
- }
176374
177529
  }
176375
177530
  ],
176376
177531
  "attributes": [
@@ -179335,7 +180490,7 @@
179335
180490
  },
179336
180491
  "privacy": "private",
179337
180492
  "default": "false",
179338
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
180493
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
179339
180494
  "inheritedFrom": {
179340
180495
  "name": "MixinField",
179341
180496
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -180668,6 +181823,50 @@
180668
181823
  "module": "src/helix-form-element/helix-form-element.ts"
180669
181824
  }
180670
181825
  },
181826
+ {
181827
+ "kind": "field",
181828
+ "name": "updateRunning",
181829
+ "type": {
181830
+ "text": "boolean"
181831
+ },
181832
+ "privacy": "private",
181833
+ "default": "false",
181834
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
181835
+ "inheritedFrom": {
181836
+ "name": "HelixFormElement",
181837
+ "module": "src/helix-form-element/helix-form-element.ts"
181838
+ }
181839
+ },
181840
+ {
181841
+ "kind": "method",
181842
+ "name": "performUpdate",
181843
+ "privacy": "protected",
181844
+ "return": {
181845
+ "type": {
181846
+ "text": "void"
181847
+ }
181848
+ },
181849
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
181850
+ "inheritedFrom": {
181851
+ "name": "HelixElement",
181852
+ "module": "src/helix-element/helix-element.ts"
181853
+ }
181854
+ },
181855
+ {
181856
+ "kind": "method",
181857
+ "name": "runPendingUpdate",
181858
+ "privacy": "private",
181859
+ "return": {
181860
+ "type": {
181861
+ "text": "void"
181862
+ }
181863
+ },
181864
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
181865
+ "inheritedFrom": {
181866
+ "name": "HelixFormElement",
181867
+ "module": "src/helix-form-element/helix-form-element.ts"
181868
+ }
181869
+ },
180671
181870
  {
180672
181871
  "kind": "field",
180673
181872
  "name": "willValidate",
@@ -180689,7 +181888,7 @@
180689
181888
  "text": "boolean"
180690
181889
  }
180691
181890
  },
180692
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
181891
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
180693
181892
  "inheritedFrom": {
180694
181893
  "name": "HelixFormElement",
180695
181894
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -180698,6 +181897,20 @@
180698
181897
  "text": "checkValidity() => boolean"
180699
181898
  }
180700
181899
  },
181900
+ {
181901
+ "kind": "field",
181902
+ "name": "checkInProgress",
181903
+ "type": {
181904
+ "text": "boolean"
181905
+ },
181906
+ "privacy": "private",
181907
+ "default": "false",
181908
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
181909
+ "inheritedFrom": {
181910
+ "name": "HelixFormElement",
181911
+ "module": "src/helix-form-element/helix-form-element.ts"
181912
+ }
181913
+ },
180701
181914
  {
180702
181915
  "kind": "method",
180703
181916
  "name": "reportValidity",
@@ -181180,21 +182393,6 @@
181180
182393
  "name": "HelixElement",
181181
182394
  "module": "src/helix-element/helix-element.ts"
181182
182395
  }
181183
- },
181184
- {
181185
- "kind": "method",
181186
- "name": "performUpdate",
181187
- "privacy": "protected",
181188
- "return": {
181189
- "type": {
181190
- "text": "void"
181191
- }
181192
- },
181193
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
181194
- "inheritedFrom": {
181195
- "name": "HelixElement",
181196
- "module": "src/helix-element/helix-element.ts"
181197
- }
181198
182396
  }
181199
182397
  ],
181200
182398
  "superclass": {
@@ -194245,7 +195443,7 @@
194245
195443
  },
194246
195444
  "privacy": "private",
194247
195445
  "default": "false",
194248
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
195446
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
194249
195447
  "inheritedFrom": {
194250
195448
  "name": "MixinField",
194251
195449
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -194793,6 +195991,50 @@
194793
195991
  "module": "src/helix-form-element/helix-form-element.ts"
194794
195992
  }
194795
195993
  },
195994
+ {
195995
+ "kind": "field",
195996
+ "name": "updateRunning",
195997
+ "type": {
195998
+ "text": "boolean"
195999
+ },
196000
+ "privacy": "private",
196001
+ "default": "false",
196002
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
196003
+ "inheritedFrom": {
196004
+ "name": "HelixFormElement",
196005
+ "module": "src/helix-form-element/helix-form-element.ts"
196006
+ }
196007
+ },
196008
+ {
196009
+ "kind": "method",
196010
+ "name": "performUpdate",
196011
+ "privacy": "protected",
196012
+ "return": {
196013
+ "type": {
196014
+ "text": "void"
196015
+ }
196016
+ },
196017
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
196018
+ "inheritedFrom": {
196019
+ "name": "HelixElement",
196020
+ "module": "src/helix-element/helix-element.ts"
196021
+ }
196022
+ },
196023
+ {
196024
+ "kind": "method",
196025
+ "name": "runPendingUpdate",
196026
+ "privacy": "private",
196027
+ "return": {
196028
+ "type": {
196029
+ "text": "void"
196030
+ }
196031
+ },
196032
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
196033
+ "inheritedFrom": {
196034
+ "name": "HelixFormElement",
196035
+ "module": "src/helix-form-element/helix-form-element.ts"
196036
+ }
196037
+ },
194796
196038
  {
194797
196039
  "kind": "field",
194798
196040
  "name": "willValidate",
@@ -194814,7 +196056,7 @@
194814
196056
  "text": "boolean"
194815
196057
  }
194816
196058
  },
194817
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
196059
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
194818
196060
  "inheritedFrom": {
194819
196061
  "name": "HelixFormElement",
194820
196062
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -194823,6 +196065,20 @@
194823
196065
  "text": "checkValidity() => boolean"
194824
196066
  }
194825
196067
  },
196068
+ {
196069
+ "kind": "field",
196070
+ "name": "checkInProgress",
196071
+ "type": {
196072
+ "text": "boolean"
196073
+ },
196074
+ "privacy": "private",
196075
+ "default": "false",
196076
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
196077
+ "inheritedFrom": {
196078
+ "name": "HelixFormElement",
196079
+ "module": "src/helix-form-element/helix-form-element.ts"
196080
+ }
196081
+ },
194826
196082
  {
194827
196083
  "kind": "method",
194828
196084
  "name": "reportValidity",
@@ -195305,21 +196561,6 @@
195305
196561
  "name": "HelixElement",
195306
196562
  "module": "src/helix-element/helix-element.ts"
195307
196563
  }
195308
- },
195309
- {
195310
- "kind": "method",
195311
- "name": "performUpdate",
195312
- "privacy": "protected",
195313
- "return": {
195314
- "type": {
195315
- "text": "void"
195316
- }
195317
- },
195318
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
195319
- "inheritedFrom": {
195320
- "name": "HelixElement",
195321
- "module": "src/helix-element/helix-element.ts"
195322
- }
195323
196564
  }
195324
196565
  ],
195325
196566
  "superclass": {
@@ -197270,6 +198511,10 @@
197270
198511
  "description": "Rows have hairline rules between them and no fill. Helix shows depth with a\nsingle border and no elevation, and a dense table adds no other decoration.",
197271
198512
  "name": "HelixTable",
197272
198513
  "cssProperties": [
198514
+ {
198515
+ "description": "How tall the table's box is while `windowed`, when it scrolls its rows. 24em by default.",
198516
+ "name": "--table-block-size"
198517
+ },
197273
198518
  {
197274
198519
  "description": "Track list for the columns. It overrides the track list worked out from the columns.",
197275
198520
  "name": "--table-columns"
@@ -197302,6 +198547,10 @@
197302
198547
  "description": "The color of the words in the line shown while `error-text` is set.",
197303
198548
  "name": "--table-error-color"
197304
198549
  },
198550
+ {
198551
+ "description": "The fill behind the headings while `windowed`, which the rows scroll under. The page's background by default.",
198552
+ "name": "--table-heading-background-color"
198553
+ },
197305
198554
  {
197306
198555
  "description": "The color of the words in the `heading` slot.",
197307
198556
  "name": "--table-title-color"
@@ -197324,6 +198573,22 @@
197324
198573
  }
197325
198574
  ],
197326
198575
  "cssParts": [
198576
+ {
198577
+ "description": "The space that stands in for the rows below the window. Only while `windowed`.",
198578
+ "name": "after",
198579
+ "inheritedFrom": {
198580
+ "name": "HelixHeadlessTable",
198581
+ "module": "src/table/root/table-root.ts"
198582
+ }
198583
+ },
198584
+ {
198585
+ "description": "The space that stands in for the rows above the window. Only while `windowed`.",
198586
+ "name": "before",
198587
+ "inheritedFrom": {
198588
+ "name": "HelixHeadlessTable",
198589
+ "module": "src/table/root/table-root.ts"
198590
+ }
198591
+ },
197327
198592
  {
197328
198593
  "description": "A copy of the row a pointer drags by its grip, which follows the pointer in the top layer until the row is let go, in a `reorderable` table. Hidden from assistive technology.",
197329
198594
  "name": "drag-preview",
@@ -197688,6 +198953,7 @@
197688
198953
  },
197689
198954
  "privacy": "protected",
197690
198955
  "readonly": true,
198956
+ "description": "A `windowed` table has rows while it holds any, drawn or not.",
197691
198957
  "inheritedFrom": {
197692
198958
  "name": "MixinCollection",
197693
198959
  "module": "src/mixins/mixin-collection/mixin-collection.ts"
@@ -198283,6 +199549,21 @@
198283
199549
  "module": "src/table/root/table-root.ts"
198284
199550
  }
198285
199551
  },
199552
+ {
199553
+ "kind": "field",
199554
+ "name": "windowed",
199555
+ "type": {
199556
+ "text": "boolean"
199557
+ },
199558
+ "default": "false",
199559
+ "description": "Draws only the rows in view, with empty space in place of the rest, as\nData Table's `windowed` does. The table's box then scrolls, at the\nheight `--table-block-size` gives it in the styled tier, and the\nheadings stick to its top.\n\nOff by default. Windowing costs a scroll listener, a measurement per row\ndrawn, and a height on the table, and a table of twenty rows should pay\nnone of them.",
199560
+ "attribute": "windowed",
199561
+ "reflects": true,
199562
+ "inheritedFrom": {
199563
+ "name": "HelixHeadlessTable",
199564
+ "module": "src/table/root/table-root.ts"
199565
+ }
199566
+ },
198286
199567
  {
198287
199568
  "kind": "field",
198288
199569
  "name": "sortState",
@@ -198336,6 +199617,48 @@
198336
199617
  "module": "src/table/root/table-root.ts"
198337
199618
  }
198338
199619
  },
199620
+ {
199621
+ "kind": "field",
199622
+ "name": "memo",
199623
+ "type": {
199624
+ "text": "{ arranged?: Element[]; keyed?: { key: string; row: Row }[]; nests?: boolean }"
199625
+ },
199626
+ "privacy": "private",
199627
+ "default": "{}",
199628
+ "description": "What the table read from its rows, kept until anything asks for an\nupdate or the turn ends.\n\n**Read once rather than on every question.** A render, the assignment\nand the keyboard each asked for the rows in order dozens of times, and\neach answer walked every row: in Chromium a windowed table of 3,000 rows\ntook 89 milliseconds to move its window, 42 of them reading the keys.",
199629
+ "inheritedFrom": {
199630
+ "name": "HelixHeadlessTable",
199631
+ "module": "src/table/root/table-root.ts"
199632
+ }
199633
+ },
199634
+ {
199635
+ "kind": "method",
199636
+ "name": "remember",
199637
+ "privacy": "private",
199638
+ "return": {
199639
+ "type": {
199640
+ "text": "NonNullable<HelixHeadlessTable['memo'][K]>"
199641
+ }
199642
+ },
199643
+ "parameters": [
199644
+ {
199645
+ "name": "key",
199646
+ "type": {
199647
+ "text": "K"
199648
+ }
199649
+ },
199650
+ {
199651
+ "name": "compute",
199652
+ "type": {
199653
+ "text": "() => NonNullable<HelixHeadlessTable['memo'][K]>"
199654
+ }
199655
+ }
199656
+ ],
199657
+ "inheritedFrom": {
199658
+ "name": "HelixHeadlessTable",
199659
+ "module": "src/table/root/table-root.ts"
199660
+ }
199661
+ },
198339
199662
  {
198340
199663
  "kind": "field",
198341
199664
  "name": "open",
@@ -198404,13 +199727,137 @@
198404
199727
  "name": "gridKeys",
198405
199728
  "privacy": "private",
198406
199729
  "readonly": true,
198407
- "default": "new TableGridController(this, { activate: (place, event) => this.activate(place, event), arrive: (to, control) => { if (this.replaces && !control) { this.chooseOnly(to) } }, columns: () => this.tableColumns.filter((column) => column.shown), disclose: (at, forward) => this.disclose(at, forward), lead: () => this.lead, on: () => this.grid, part: (name) => this.partNamed(name), rows: () => (this.childrenKnown ? this.arrangedRows : []), rowWords: () => this.arrangedRows.map((row) => textOf(row.children[0])), selectAll: () => this.selectable && !this.single && this.requestSelected(new Set([...this.chosen, ...this.enabledKeys])), selectRange: (to, from) => this.selectRange(to, from), })",
199730
+ "default": "new TableGridController(this, { activate: (place, event) => this.activate(place, event), arrive: (to, control) => { if (this.replaces && !control) { this.chooseOnly(to) } }, columns: () => this.tableColumns.filter((column) => column.shown), disclose: (at, forward) => this.disclose(at, forward), drawn: () => (this.windowed ? new Set(this.drawnRows) : undefined), lead: () => this.lead, on: () => this.grid, part: (name) => this.partNamed(name), reveal: (row) => this.revealRow(row), rows: () => (this.childrenKnown ? this.arrangedRows : []), rowWords: () => this.arrangedRows.map((row) => textOf(row.children[0])), selectAll: () => this.selectable && !this.single && this.requestSelected(new Set([...this.chosen, ...this.enabledKeys])), selectRange: (to, from) => this.selectRange(to, from), })",
198408
199731
  "description": "The keyboard of a `grid` table, in `grid-controller.ts`.",
198409
199732
  "inheritedFrom": {
198410
199733
  "name": "HelixHeadlessTable",
198411
199734
  "module": "src/table/root/table-root.ts"
198412
199735
  }
198413
199736
  },
199737
+ {
199738
+ "kind": "field",
199739
+ "name": "virtualize",
199740
+ "privacy": "private",
199741
+ "readonly": true,
199742
+ "default": "new VirtualizeController(this, { container: () => (this.windowed ? this.partNamed('table') : null), count: () => this.arrangedCount, estimate: () => ESTIMATE, measured: () => this.windowed, rows: () => (this.windowed ? this.measuredRows() : []), })",
199743
+ "description": "The slice of a long table that is drawn, under `windowed`. The rows are\nthe page's elements, so the window is which of them the body slot is\ngiven: a row it is not given is not laid out and not in the\naccessibility tree.",
199744
+ "inheritedFrom": {
199745
+ "name": "HelixHeadlessTable",
199746
+ "module": "src/table/root/table-root.ts"
199747
+ }
199748
+ },
199749
+ {
199750
+ "kind": "field",
199751
+ "name": "arrangedCount",
199752
+ "type": {
199753
+ "text": "number"
199754
+ },
199755
+ "privacy": "private",
199756
+ "default": "0",
199757
+ "description": "How many rows are drawn in order, read when the rows are assigned.",
199758
+ "inheritedFrom": {
199759
+ "name": "HelixHeadlessTable",
199760
+ "module": "src/table/root/table-root.ts"
199761
+ }
199762
+ },
199763
+ {
199764
+ "kind": "field",
199765
+ "name": "drawnRows",
199766
+ "type": {
199767
+ "text": "Element[]"
199768
+ },
199769
+ "privacy": "private",
199770
+ "default": "[]",
199771
+ "description": "The rows the body slot was last given, under `windowed`.",
199772
+ "inheritedFrom": {
199773
+ "name": "HelixHeadlessTable",
199774
+ "module": "src/table/root/table-root.ts"
199775
+ }
199776
+ },
199777
+ {
199778
+ "kind": "method",
199779
+ "name": "measuredRows",
199780
+ "privacy": "private",
199781
+ "return": {
199782
+ "type": {
199783
+ "text": "{ element: HTMLElement; index: number }[]"
199784
+ }
199785
+ },
199786
+ "description": "The rows drawn now, each by its first cell, with its place among the\nrows. A row is `display: contents` and has no box, and a cell is a grid\nitem stretched to its row, as Data Table measures its rows.",
199787
+ "inheritedFrom": {
199788
+ "name": "HelixHeadlessTable",
199789
+ "module": "src/table/root/table-root.ts"
199790
+ }
199791
+ },
199792
+ {
199793
+ "kind": "method",
199794
+ "name": "keptRow",
199795
+ "privacy": "private",
199796
+ "return": {
199797
+ "type": {
199798
+ "text": "number | undefined"
199799
+ }
199800
+ },
199801
+ "parameters": [
199802
+ {
199803
+ "name": "rows",
199804
+ "type": {
199805
+ "text": "Element[]"
199806
+ }
199807
+ }
199808
+ ],
199809
+ "description": "The row outside the window that stays drawn: the grid's stop, or the row holding focus.",
199810
+ "inheritedFrom": {
199811
+ "name": "HelixHeadlessTable",
199812
+ "module": "src/table/root/table-root.ts"
199813
+ }
199814
+ },
199815
+ {
199816
+ "kind": "method",
199817
+ "name": "windowOf",
199818
+ "privacy": "private",
199819
+ "return": {
199820
+ "type": {
199821
+ "text": "Element[]"
199822
+ }
199823
+ },
199824
+ "parameters": [
199825
+ {
199826
+ "name": "rows",
199827
+ "type": {
199828
+ "text": "Element[]"
199829
+ }
199830
+ }
199831
+ ],
199832
+ "description": "The rows to draw under `windowed`: the window, and the row kept for\nfocus beside it on its side.",
199833
+ "inheritedFrom": {
199834
+ "name": "HelixHeadlessTable",
199835
+ "module": "src/table/root/table-root.ts"
199836
+ }
199837
+ },
199838
+ {
199839
+ "kind": "method",
199840
+ "name": "revealRow",
199841
+ "privacy": "private",
199842
+ "return": {
199843
+ "type": {
199844
+ "text": "void"
199845
+ }
199846
+ },
199847
+ "parameters": [
199848
+ {
199849
+ "name": "row",
199850
+ "type": {
199851
+ "text": "number"
199852
+ }
199853
+ }
199854
+ ],
199855
+ "description": "Scrolls drawn row `row` into view below the headings, and moves the\nwindow to it, before a key focuses it.",
199856
+ "inheritedFrom": {
199857
+ "name": "HelixHeadlessTable",
199858
+ "module": "src/table/root/table-root.ts"
199859
+ }
199860
+ },
198414
199861
  {
198415
199862
  "kind": "field",
198416
199863
  "name": "reorder",
@@ -198545,6 +199992,21 @@
198545
199992
  "module": "src/table/root/table-root.ts"
198546
199993
  }
198547
199994
  },
199995
+ {
199996
+ "kind": "method",
199997
+ "name": "arrange",
199998
+ "privacy": "private",
199999
+ "return": {
200000
+ "type": {
200001
+ "text": "Element[]"
200002
+ }
200003
+ },
200004
+ "description": "The rows in the order they are drawn, worked out again.",
200005
+ "inheritedFrom": {
200006
+ "name": "HelixHeadlessTable",
200007
+ "module": "src/table/root/table-root.ts"
200008
+ }
200009
+ },
198548
200010
  {
198549
200011
  "kind": "method",
198550
200012
  "name": "nested",
@@ -199278,6 +200740,17 @@
199278
200740
  "module": "src/table/root/table-root.ts"
199279
200741
  }
199280
200742
  },
200743
+ {
200744
+ "kind": "field",
200745
+ "name": "nearEnd",
200746
+ "privacy": "private",
200747
+ "readonly": true,
200748
+ "description": "Asks for more once a reader of a `windowed` table is within a screen of its end.",
200749
+ "inheritedFrom": {
200750
+ "name": "HelixHeadlessTable",
200751
+ "module": "src/table/root/table-root.ts"
200752
+ }
200753
+ },
199281
200754
  {
199282
200755
  "kind": "field",
199283
200756
  "name": "endInView",
@@ -200168,6 +201641,19 @@
200168
201641
  "name": "HelixHeadlessTable",
200169
201642
  "module": "src/table/root/table-root.ts"
200170
201643
  }
201644
+ },
201645
+ {
201646
+ "name": "windowed",
201647
+ "type": {
201648
+ "text": "boolean"
201649
+ },
201650
+ "default": "false",
201651
+ "description": "Draws only the rows in view, with empty space in place of the rest, as\nData Table's `windowed` does. The table's box then scrolls, at the\nheight `--table-block-size` gives it in the styled tier, and the\nheadings stick to its top.\n\nOff by default. Windowing costs a scroll listener, a measurement per row\ndrawn, and a height on the table, and a table of twenty rows should pay\nnone of them.",
201652
+ "fieldName": "windowed",
201653
+ "inheritedFrom": {
201654
+ "name": "HelixHeadlessTable",
201655
+ "module": "src/table/root/table-root.ts"
201656
+ }
200171
201657
  }
200172
201658
  ],
200173
201659
  "events": [
@@ -200535,6 +202021,21 @@
200535
202021
  "module": "src/table/row/table-row.ts"
200536
202022
  }
200537
202023
  },
202024
+ {
202025
+ "kind": "method",
202026
+ "name": "nameByHeader",
202027
+ "privacy": "private",
202028
+ "return": {
202029
+ "type": {
202030
+ "text": "void"
202031
+ }
202032
+ },
202033
+ "description": "Names the row by its header cell, the cell with `header` among cells of\nvalues, or by its first cell where it has none, as React Aria's rows are\nnamed.\n\n**Named from its contents, a row read out its checkbox's name too**, \"Select\n412 412 main Passed\" in a `selectable` table, since the checkbox is a cell of\nthe row's own. Not on a server, which has no cells to point at, and not\nwhere a page named the row itself.",
202034
+ "inheritedFrom": {
202035
+ "name": "HelixHeadlessTableRow",
202036
+ "module": "src/table/row/table-row.ts"
202037
+ }
202038
+ },
200538
202039
  {
200539
202040
  "kind": "field",
200540
202041
  "name": "handleClick",
@@ -207467,7 +208968,7 @@
207467
208968
  },
207468
208969
  "privacy": "private",
207469
208970
  "default": "false",
207470
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
208971
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
207471
208972
  "inheritedFrom": {
207472
208973
  "name": "MixinField",
207473
208974
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -208414,6 +209915,50 @@
208414
209915
  "module": "src/helix-form-element/helix-form-element.ts"
208415
209916
  }
208416
209917
  },
209918
+ {
209919
+ "kind": "field",
209920
+ "name": "updateRunning",
209921
+ "type": {
209922
+ "text": "boolean"
209923
+ },
209924
+ "privacy": "private",
209925
+ "default": "false",
209926
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
209927
+ "inheritedFrom": {
209928
+ "name": "HelixFormElement",
209929
+ "module": "src/helix-form-element/helix-form-element.ts"
209930
+ }
209931
+ },
209932
+ {
209933
+ "kind": "method",
209934
+ "name": "performUpdate",
209935
+ "privacy": "protected",
209936
+ "return": {
209937
+ "type": {
209938
+ "text": "void"
209939
+ }
209940
+ },
209941
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
209942
+ "inheritedFrom": {
209943
+ "name": "HelixElement",
209944
+ "module": "src/helix-element/helix-element.ts"
209945
+ }
209946
+ },
209947
+ {
209948
+ "kind": "method",
209949
+ "name": "runPendingUpdate",
209950
+ "privacy": "private",
209951
+ "return": {
209952
+ "type": {
209953
+ "text": "void"
209954
+ }
209955
+ },
209956
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
209957
+ "inheritedFrom": {
209958
+ "name": "HelixFormElement",
209959
+ "module": "src/helix-form-element/helix-form-element.ts"
209960
+ }
209961
+ },
208417
209962
  {
208418
209963
  "kind": "field",
208419
209964
  "name": "willValidate",
@@ -208435,7 +209980,7 @@
208435
209980
  "text": "boolean"
208436
209981
  }
208437
209982
  },
208438
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
209983
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
208439
209984
  "inheritedFrom": {
208440
209985
  "name": "HelixFormElement",
208441
209986
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -208444,6 +209989,20 @@
208444
209989
  "text": "checkValidity() => boolean"
208445
209990
  }
208446
209991
  },
209992
+ {
209993
+ "kind": "field",
209994
+ "name": "checkInProgress",
209995
+ "type": {
209996
+ "text": "boolean"
209997
+ },
209998
+ "privacy": "private",
209999
+ "default": "false",
210000
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
210001
+ "inheritedFrom": {
210002
+ "name": "HelixFormElement",
210003
+ "module": "src/helix-form-element/helix-form-element.ts"
210004
+ }
210005
+ },
208447
210006
  {
208448
210007
  "kind": "method",
208449
210008
  "name": "reportValidity",
@@ -208900,21 +210459,6 @@
208900
210459
  "name": "HelixElement",
208901
210460
  "module": "src/helix-element/helix-element.ts"
208902
210461
  }
208903
- },
208904
- {
208905
- "kind": "method",
208906
- "name": "performUpdate",
208907
- "privacy": "protected",
208908
- "return": {
208909
- "type": {
208910
- "text": "void"
208911
- }
208912
- },
208913
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
208914
- "inheritedFrom": {
208915
- "name": "HelixElement",
208916
- "module": "src/helix-element/helix-element.ts"
208917
- }
208918
210462
  }
208919
210463
  ],
208920
210464
  "superclass": {
@@ -210052,6 +211596,29 @@
210052
211596
  "module": "src/mixins/mixin-segmented-field/mixin-segmented-field.ts"
210053
211597
  }
210054
211598
  },
211599
+ {
211600
+ "kind": "method",
211601
+ "name": "erase",
211602
+ "privacy": "private",
211603
+ "return": {
211604
+ "type": {
211605
+ "text": "void"
211606
+ }
211607
+ },
211608
+ "parameters": [
211609
+ {
211610
+ "name": "element",
211611
+ "type": {
211612
+ "text": "HTMLElement"
211613
+ }
211614
+ }
211615
+ ],
211616
+ "description": "Takes the last digit off the segment, or moves to the segment before it\nwhere this one is already empty, as React Aria's segments do. A reader\nclearing a date from its end holds Backspace and it empties right to\nleft.",
211617
+ "inheritedFrom": {
211618
+ "name": "MixinSegmentedField",
211619
+ "module": "src/mixins/mixin-segmented-field/mixin-segmented-field.ts"
211620
+ }
211621
+ },
210055
211622
  {
210056
211623
  "kind": "field",
210057
211624
  "name": "composing",
@@ -211257,7 +212824,7 @@
211257
212824
  },
211258
212825
  "privacy": "private",
211259
212826
  "default": "false",
211260
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
212827
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
211261
212828
  "inheritedFrom": {
211262
212829
  "name": "MixinField",
211263
212830
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -212377,6 +213944,50 @@
212377
213944
  "module": "src/helix-form-element/helix-form-element.ts"
212378
213945
  }
212379
213946
  },
213947
+ {
213948
+ "kind": "field",
213949
+ "name": "updateRunning",
213950
+ "type": {
213951
+ "text": "boolean"
213952
+ },
213953
+ "privacy": "private",
213954
+ "default": "false",
213955
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
213956
+ "inheritedFrom": {
213957
+ "name": "HelixFormElement",
213958
+ "module": "src/helix-form-element/helix-form-element.ts"
213959
+ }
213960
+ },
213961
+ {
213962
+ "kind": "method",
213963
+ "name": "performUpdate",
213964
+ "privacy": "protected",
213965
+ "return": {
213966
+ "type": {
213967
+ "text": "void"
213968
+ }
213969
+ },
213970
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
213971
+ "inheritedFrom": {
213972
+ "name": "HelixElement",
213973
+ "module": "src/helix-element/helix-element.ts"
213974
+ }
213975
+ },
213976
+ {
213977
+ "kind": "method",
213978
+ "name": "runPendingUpdate",
213979
+ "privacy": "private",
213980
+ "return": {
213981
+ "type": {
213982
+ "text": "void"
213983
+ }
213984
+ },
213985
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
213986
+ "inheritedFrom": {
213987
+ "name": "HelixFormElement",
213988
+ "module": "src/helix-form-element/helix-form-element.ts"
213989
+ }
213990
+ },
212380
213991
  {
212381
213992
  "kind": "field",
212382
213993
  "name": "willValidate",
@@ -212398,7 +214009,7 @@
212398
214009
  "text": "boolean"
212399
214010
  }
212400
214011
  },
212401
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
214012
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
212402
214013
  "inheritedFrom": {
212403
214014
  "name": "HelixFormElement",
212404
214015
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -212407,6 +214018,20 @@
212407
214018
  "text": "checkValidity() => boolean"
212408
214019
  }
212409
214020
  },
214021
+ {
214022
+ "kind": "field",
214023
+ "name": "checkInProgress",
214024
+ "type": {
214025
+ "text": "boolean"
214026
+ },
214027
+ "privacy": "private",
214028
+ "default": "false",
214029
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
214030
+ "inheritedFrom": {
214031
+ "name": "HelixFormElement",
214032
+ "module": "src/helix-form-element/helix-form-element.ts"
214033
+ }
214034
+ },
212410
214035
  {
212411
214036
  "kind": "method",
212412
214037
  "name": "reportValidity",
@@ -212849,21 +214474,6 @@
212849
214474
  "name": "HelixElement",
212850
214475
  "module": "src/helix-element/helix-element.ts"
212851
214476
  }
212852
- },
212853
- {
212854
- "kind": "method",
212855
- "name": "performUpdate",
212856
- "privacy": "protected",
212857
- "return": {
212858
- "type": {
212859
- "text": "void"
212860
- }
212861
- },
212862
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
212863
- "inheritedFrom": {
212864
- "name": "HelixElement",
212865
- "module": "src/helix-element/helix-element.ts"
212866
- }
212867
214477
  }
212868
214478
  ],
212869
214479
  "superclass": {
@@ -213987,6 +215597,14 @@
213987
215597
  "module": "src/time-input/root/time-input-root.ts"
213988
215598
  }
213989
215599
  },
215600
+ {
215601
+ "description": "The picker's button that chooses the current time, which Time Input does not draw.",
215602
+ "name": "picker-now",
215603
+ "inheritedFrom": {
215604
+ "name": "HelixHeadlessTimeInput",
215605
+ "module": "src/time-input/root/time-input-root.ts"
215606
+ }
215607
+ },
213990
215608
  {
213991
215609
  "description": "One time in the picker. Carries `data-between` inside a range.",
213992
215610
  "name": "picker-option",
@@ -214305,6 +215923,10 @@
214305
215923
  "description": "The corners of the mark on a wheel's row.",
214306
215924
  "name": "--time-picker-mark-radius"
214307
215925
  },
215926
+ {
215927
+ "description": "The ink of the button that chooses the current time, with `show-now`.",
215928
+ "name": "--time-picker-now-color"
215929
+ },
214308
215930
  {
214309
215931
  "description": "Fill behind the times inside a range.",
214310
215932
  "name": "--time-picker-range-color"
@@ -214812,6 +216434,23 @@
214812
216434
  "module": "src/time-picker/root/time-picker-root.ts"
214813
216435
  }
214814
216436
  },
216437
+ {
216438
+ "kind": "field",
216439
+ "name": "nowLabel",
216440
+ "type": {
216441
+ "text": "string"
216442
+ },
216443
+ "default": "'Now'",
216444
+ "description": "The words on the button that chooses the current time, drawn with\n`show-now`.",
216445
+ "attribute": "now-label",
216446
+ "helix": {
216447
+ "words": true
216448
+ },
216449
+ "inheritedFrom": {
216450
+ "name": "HelixHeadlessTimePicker",
216451
+ "module": "src/time-picker/root/time-picker-root.ts"
216452
+ }
216453
+ },
214815
216454
  {
214816
216455
  "kind": "field",
214817
216456
  "name": "rangeOverflowMessage",
@@ -215055,6 +216694,96 @@
215055
216694
  "module": "src/time-picker/root/time-picker-root.ts"
215056
216695
  }
215057
216696
  },
216697
+ {
216698
+ "kind": "method",
216699
+ "name": "choose",
216700
+ "privacy": "private",
216701
+ "return": {
216702
+ "type": {
216703
+ "text": "boolean"
216704
+ }
216705
+ },
216706
+ "parameters": [
216707
+ {
216708
+ "name": "announced",
216709
+ "type": {
216710
+ "text": "string"
216711
+ }
216712
+ }
216713
+ ],
216714
+ "description": "Requests the times a pick announced, kept to what the mode allows, and\nreturns whether the value changed.",
216715
+ "inheritedFrom": {
216716
+ "name": "HelixHeadlessTimePicker",
216717
+ "module": "src/time-picker/root/time-picker-root.ts"
216718
+ }
216719
+ },
216720
+ {
216721
+ "kind": "method",
216722
+ "name": "selectNow",
216723
+ "return": {
216724
+ "type": {
216725
+ "text": "boolean"
216726
+ }
216727
+ },
216728
+ "description": "Chooses the current time, as a press on the `show-now` button does, and\nreturns whether the value changed.\n\nThe time is read off the reader's clock and moved to the nearest time on\noffer that is not barred, so it falls on the `step` and inside `min` and\n`max`. It is requested as a pick is, so `helix-before-change` can cancel\nit. With a `mode` the time joins the times held, and a range that holds\ntwo starts over from it, as a third pick does.",
216729
+ "type": {
216730
+ "text": "selectNow() => boolean"
216731
+ },
216732
+ "inheritedFrom": {
216733
+ "name": "HelixHeadlessTimePicker",
216734
+ "module": "src/time-picker/root/time-picker-root.ts"
216735
+ }
216736
+ },
216737
+ {
216738
+ "kind": "method",
216739
+ "name": "highlightNearest",
216740
+ "privacy": "private",
216741
+ "return": {
216742
+ "type": {
216743
+ "text": "void"
216744
+ }
216745
+ },
216746
+ "description": "Puts the list's highlight on the offered time nearest one held between two\nsteps, so the arrows move from there.\n\nNo row holds `14:07` at a step of 15, so the list had nothing to move\nfrom: Down went to the top of the list, and in a list that chooses as it\nmoves, the value became 00:00. Down now goes to 14:15.",
216747
+ "inheritedFrom": {
216748
+ "name": "HelixHeadlessTimePicker",
216749
+ "module": "src/time-picker/root/time-picker-root.ts"
216750
+ }
216751
+ },
216752
+ {
216753
+ "kind": "field",
216754
+ "name": "handleListFocus",
216755
+ "privacy": "private",
216756
+ "readonly": true,
216757
+ "inheritedFrom": {
216758
+ "name": "HelixHeadlessTimePicker",
216759
+ "module": "src/time-picker/root/time-picker-root.ts"
216760
+ }
216761
+ },
216762
+ {
216763
+ "kind": "field",
216764
+ "name": "handleNow",
216765
+ "privacy": "private",
216766
+ "readonly": true,
216767
+ "inheritedFrom": {
216768
+ "name": "HelixHeadlessTimePicker",
216769
+ "module": "src/time-picker/root/time-picker-root.ts"
216770
+ }
216771
+ },
216772
+ {
216773
+ "kind": "method",
216774
+ "name": "renderNow",
216775
+ "privacy": "private",
216776
+ "return": {
216777
+ "type": {
216778
+ "text": "TemplateResult | typeof nothing"
216779
+ }
216780
+ },
216781
+ "description": "The button that chooses the current time, drawn with `show-now`.",
216782
+ "inheritedFrom": {
216783
+ "name": "HelixHeadlessTimePicker",
216784
+ "module": "src/time-picker/root/time-picker-root.ts"
216785
+ }
216786
+ },
215058
216787
  {
215059
216788
  "kind": "field",
215060
216789
  "name": "previewed",
@@ -215253,6 +216982,20 @@
215253
216982
  "module": "src/time-picker/root/time-picker-root.ts"
215254
216983
  }
215255
216984
  },
216985
+ {
216986
+ "kind": "field",
216987
+ "name": "showNow",
216988
+ "type": {
216989
+ "text": "boolean"
216990
+ },
216991
+ "default": "false",
216992
+ "description": "Draws a button under the times that chooses the current time, as\n`selectNow()` does.\n\nFor a form about something happening now, such as a shift starting or a\ndose taken, where the reader would otherwise scroll to the time on the\nclock. The button is a tab stop after the times, and its words are\n`now-label`.",
216993
+ "attribute": "show-now",
216994
+ "inheritedFrom": {
216995
+ "name": "HelixHeadlessTimePicker",
216996
+ "module": "src/time-picker/root/time-picker-root.ts"
216997
+ }
216998
+ },
215256
216999
  {
215257
217000
  "kind": "field",
215258
217001
  "name": "step",
@@ -215955,6 +217698,50 @@
215955
217698
  "module": "src/helix-form-element/helix-form-element.ts"
215956
217699
  }
215957
217700
  },
217701
+ {
217702
+ "kind": "field",
217703
+ "name": "updateRunning",
217704
+ "type": {
217705
+ "text": "boolean"
217706
+ },
217707
+ "privacy": "private",
217708
+ "default": "false",
217709
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
217710
+ "inheritedFrom": {
217711
+ "name": "HelixFormElement",
217712
+ "module": "src/helix-form-element/helix-form-element.ts"
217713
+ }
217714
+ },
217715
+ {
217716
+ "kind": "method",
217717
+ "name": "performUpdate",
217718
+ "privacy": "protected",
217719
+ "return": {
217720
+ "type": {
217721
+ "text": "void"
217722
+ }
217723
+ },
217724
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
217725
+ "inheritedFrom": {
217726
+ "name": "HelixElement",
217727
+ "module": "src/helix-element/helix-element.ts"
217728
+ }
217729
+ },
217730
+ {
217731
+ "kind": "method",
217732
+ "name": "runPendingUpdate",
217733
+ "privacy": "private",
217734
+ "return": {
217735
+ "type": {
217736
+ "text": "void"
217737
+ }
217738
+ },
217739
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
217740
+ "inheritedFrom": {
217741
+ "name": "HelixFormElement",
217742
+ "module": "src/helix-form-element/helix-form-element.ts"
217743
+ }
217744
+ },
215958
217745
  {
215959
217746
  "kind": "field",
215960
217747
  "name": "willValidate",
@@ -215976,7 +217763,7 @@
215976
217763
  "text": "boolean"
215977
217764
  }
215978
217765
  },
215979
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
217766
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
215980
217767
  "inheritedFrom": {
215981
217768
  "name": "HelixFormElement",
215982
217769
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -215985,6 +217772,20 @@
215985
217772
  "text": "checkValidity() => boolean"
215986
217773
  }
215987
217774
  },
217775
+ {
217776
+ "kind": "field",
217777
+ "name": "checkInProgress",
217778
+ "type": {
217779
+ "text": "boolean"
217780
+ },
217781
+ "privacy": "private",
217782
+ "default": "false",
217783
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
217784
+ "inheritedFrom": {
217785
+ "name": "HelixFormElement",
217786
+ "module": "src/helix-form-element/helix-form-element.ts"
217787
+ }
217788
+ },
215988
217789
  {
215989
217790
  "kind": "method",
215990
217791
  "name": "reportValidity",
@@ -216427,21 +218228,6 @@
216427
218228
  "name": "HelixElement",
216428
218229
  "module": "src/helix-element/helix-element.ts"
216429
218230
  }
216430
- },
216431
- {
216432
- "kind": "method",
216433
- "name": "performUpdate",
216434
- "privacy": "protected",
216435
- "return": {
216436
- "type": {
216437
- "text": "void"
216438
- }
216439
- },
216440
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
216441
- "inheritedFrom": {
216442
- "name": "HelixElement",
216443
- "module": "src/helix-element/helix-element.ts"
216444
- }
216445
218231
  }
216446
218232
  ],
216447
218233
  "superclass": {
@@ -216488,6 +218274,10 @@
216488
218274
  "description": "A time picker marked invalid, with its chosen time.",
216489
218275
  "slug": "invalid"
216490
218276
  },
218277
+ {
218278
+ "description": "A button under the times that chooses the current time.",
218279
+ "slug": "now"
218280
+ },
216491
218281
  {
216492
218282
  "description": "A start and an end in one picker.",
216493
218283
  "slug": "range"
@@ -216730,6 +218520,19 @@
216730
218520
  "module": "src/time-picker/root/time-picker-root.ts"
216731
218521
  }
216732
218522
  },
218523
+ {
218524
+ "name": "now-label",
218525
+ "type": {
218526
+ "text": "string"
218527
+ },
218528
+ "default": "'Now'",
218529
+ "description": "The words on the button that chooses the current time, drawn with\n`show-now`.",
218530
+ "fieldName": "nowLabel",
218531
+ "inheritedFrom": {
218532
+ "name": "HelixHeadlessTimePicker",
218533
+ "module": "src/time-picker/root/time-picker-root.ts"
218534
+ }
218535
+ },
216733
218536
  {
216734
218537
  "name": "range-overflow-message",
216735
218538
  "type": {
@@ -216807,6 +218610,19 @@
216807
218610
  "module": "src/time-picker/root/time-picker-root.ts"
216808
218611
  }
216809
218612
  },
218613
+ {
218614
+ "name": "show-now",
218615
+ "type": {
218616
+ "text": "boolean"
218617
+ },
218618
+ "default": "false",
218619
+ "description": "Draws a button under the times that chooses the current time, as\n`selectNow()` does.\n\nFor a form about something happening now, such as a shift starting or a\ndose taken, where the reader would otherwise scroll to the time on the\nclock. The button is a tab stop after the times, and its words are\n`now-label`.",
218620
+ "fieldName": "showNow",
218621
+ "inheritedFrom": {
218622
+ "name": "HelixHeadlessTimePicker",
218623
+ "module": "src/time-picker/root/time-picker-root.ts"
218624
+ }
218625
+ },
216810
218626
  {
216811
218627
  "name": "step",
216812
218628
  "type": {
@@ -217165,6 +218981,14 @@
217165
218981
  "module": "src/time-picker/root/time-picker-root.ts"
217166
218982
  }
217167
218983
  },
218984
+ {
218985
+ "description": "The button that chooses the current time, drawn with `show-now`.",
218986
+ "name": "now",
218987
+ "inheritedFrom": {
218988
+ "name": "HelixHeadlessTimePicker",
218989
+ "module": "src/time-picker/root/time-picker-root.ts"
218990
+ }
218991
+ },
217168
218992
  {
217169
218993
  "description": "One time in the list. It carries `data-between` inside a range, and inside the run to the time under the pointer while a range waits for its second end.",
217170
218994
  "name": "option",
@@ -222162,7 +223986,7 @@
222162
223986
  },
222163
223987
  "privacy": "private",
222164
223988
  "default": "false",
222165
- "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
223989
+ "description": "Whether the reader has had a go at the field yet.\n\n**Not `:user-invalid`**, which is the platform's own answer to \"is this\nfield wrong *yet*\" and cannot work here, for a structural reason rather\nthan a browser bug: it tracks interaction with the element it is on, and\nnobody interacts with this element. The reader types into an `<input>`\ninside its shadow root, so the host's interaction flag is never set and\nthe selector never matches. Measured after submitting an invalid required\nfield and again after editing one and leaving it: false both times, while\n`:invalid` matched both times.\n\nSo the moments are listened for instead, and both of them demonstrably\nreach the host: `invalid` when a form is submitted with this control\nfailing, and `change` when the reader has edited and committed. The\n`invalid` a script's `checkValidity()` fires is not one of them, as it\nis not for a native control. Focus\nalone is deliberately not one of them. Tabbing past an empty required\nfield should not be answered with an error.\n\n**A composite control has to construct its own `change`, and this mixin\ndeliberately does not do it for them.** A native `change` is\n`composed: false`, so a control built from several inner inputs never\nrelays one to its host: `Input` gets this free from its one control,\nwhile a `PinInput` of four boxes has no inner `change` that means the\ncode is entered, so a half-entered code is never `touched` and can never\nsay what is wrong with it.\n\n**The obvious shared fix is for `touched` to take a `focusout`, and it is\nthe wrong one**, because it is the paragraph above undone: a `focusout`\nfires on the reader who tabbed past and typed nothing, which is exactly\nthe case this refuses to call an error. What a composite needs is not a\nfocus moment, it is the native meaning of `change`, \"edited, then left\",\nand the editing half is the part a mixin up here cannot see.\n\n**Nor is there one shape to extract yet.** The two composites solve it\ndifferently and both are right: `PinInput` is focus-driven, taking a\nbaseline when focus arrives from outside the row and announcing on the\nway out if it moved, and `DateInput` is value-driven, stopping its inner\n`change` and announcing once the date itself moves. Only one of them has\na leaving moment at all, so generalizing from the pair is generalizing\nfrom one. The trigger for lifting it is a third control that needs the\nfocus-driven shape, at which point what moves up is the\nbaseline-and-commit pair rather than `touched`.",
222166
223990
  "inheritedFrom": {
222167
223991
  "name": "MixinField",
222168
223992
  "module": "src/mixins/mixin-field/mixin-field.ts"
@@ -222954,6 +224778,50 @@
222954
224778
  "module": "src/helix-form-element/helix-form-element.ts"
222955
224779
  }
222956
224780
  },
224781
+ {
224782
+ "kind": "field",
224783
+ "name": "updateRunning",
224784
+ "type": {
224785
+ "text": "boolean"
224786
+ },
224787
+ "privacy": "private",
224788
+ "default": "false",
224789
+ "description": "Whether an update is running, so `runPendingUpdate` never starts one inside another.",
224790
+ "inheritedFrom": {
224791
+ "name": "HelixFormElement",
224792
+ "module": "src/helix-form-element/helix-form-element.ts"
224793
+ }
224794
+ },
224795
+ {
224796
+ "kind": "method",
224797
+ "name": "performUpdate",
224798
+ "privacy": "protected",
224799
+ "return": {
224800
+ "type": {
224801
+ "text": "void"
224802
+ }
224803
+ },
224804
+ "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
224805
+ "inheritedFrom": {
224806
+ "name": "HelixElement",
224807
+ "module": "src/helix-element/helix-element.ts"
224808
+ }
224809
+ },
224810
+ {
224811
+ "kind": "method",
224812
+ "name": "runPendingUpdate",
224813
+ "privacy": "private",
224814
+ "return": {
224815
+ "type": {
224816
+ "text": "void"
224817
+ }
224818
+ },
224819
+ "description": "Runs an update that is on its way, so the verdict read next is the one\nfor what the control holds now.\n\n**A control reports its verdict as it updates, and an update waits for a\nmicrotask**, so a script that wrote `value` and asked at once was answered\nabout the value before: measured on Time Input, `value = '18:00'` past a\n`max` of 17:00 and `checkValidity()` returned true until `updateComplete`.\nA native control answers about the value it was just given, so the\nquestions a script can ask run the pending update first. Lit's\n`performUpdate` is the documented way to run one synchronously.",
224820
+ "inheritedFrom": {
224821
+ "name": "HelixFormElement",
224822
+ "module": "src/helix-form-element/helix-form-element.ts"
224823
+ }
224824
+ },
222957
224825
  {
222958
224826
  "kind": "field",
222959
224827
  "name": "willValidate",
@@ -222975,7 +224843,7 @@
222975
224843
  "text": "boolean"
222976
224844
  }
222977
224845
  },
222978
- "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot.",
224846
+ "description": "Returns whether the control is valid, and fires `invalid` on it when it is\nnot. The control shows no message for it: `reportValidity()` does that.",
222979
224847
  "inheritedFrom": {
222980
224848
  "name": "HelixFormElement",
222981
224849
  "module": "src/helix-form-element/helix-form-element.ts"
@@ -222984,6 +224852,20 @@
222984
224852
  "text": "checkValidity() => boolean"
222985
224853
  }
222986
224854
  },
224855
+ {
224856
+ "kind": "field",
224857
+ "name": "checkInProgress",
224858
+ "type": {
224859
+ "text": "boolean"
224860
+ },
224861
+ "privacy": "private",
224862
+ "default": "false",
224863
+ "description": "Whether `checkValidity()` is running, set only for the `invalid` it fires.",
224864
+ "inheritedFrom": {
224865
+ "name": "HelixFormElement",
224866
+ "module": "src/helix-form-element/helix-form-element.ts"
224867
+ }
224868
+ },
222987
224869
  {
222988
224870
  "kind": "method",
222989
224871
  "name": "reportValidity",
@@ -223452,21 +225334,6 @@
223452
225334
  "name": "HelixElement",
223453
225335
  "module": "src/helix-element/helix-element.ts"
223454
225336
  }
223455
- },
223456
- {
223457
- "kind": "method",
223458
- "name": "performUpdate",
223459
- "privacy": "protected",
223460
- "return": {
223461
- "type": {
223462
- "text": "void"
223463
- }
223464
- },
223465
- "description": "The first update, timed where a page asked to measure what the components\ncost, and a property read where it did not: see `reportRender`.",
223466
- "inheritedFrom": {
223467
- "name": "HelixElement",
223468
- "module": "src/helix-element/helix-element.ts"
223469
- }
223470
225337
  }
223471
225338
  ],
223472
225339
  "attributes": [
@@ -241591,7 +243458,7 @@
241591
243458
  "name": "HelixVirtualList",
241592
243459
  "cssProperties": [
241593
243460
  {
241594
- "description": "How tall the scrolling box is.",
243461
+ "description": "How tall the scrolling box is. A list that runs across is as tall as its rows unless you set it.",
241595
243462
  "name": "--virtual-list-block-size"
241596
243463
  },
241597
243464
  {
@@ -241875,6 +243742,20 @@
241875
243742
  "module": "src/virtual-list/root/virtual-list-root.ts"
241876
243743
  }
241877
243744
  },
243745
+ {
243746
+ "kind": "field",
243747
+ "name": "orientation",
243748
+ "type": {
243749
+ "text": "'horizontal' | 'vertical'"
243750
+ },
243751
+ "default": "'vertical'",
243752
+ "description": "Which way the list runs. `horizontal` lays the items out along a line\nand scrolls it sideways: Left and Right move between items, the other\nway round on a right-to-left page, and `estimate` is an item's width. A\ngrid always runs down.",
243753
+ "attribute": "orientation",
243754
+ "inheritedFrom": {
243755
+ "name": "HelixHeadlessVirtualList",
243756
+ "module": "src/virtual-list/root/virtual-list-root.ts"
243757
+ }
243758
+ },
241878
243759
  {
241879
243760
  "kind": "field",
241880
243761
  "name": "renderItem",
@@ -241887,6 +243768,32 @@
241887
243768
  "module": "src/virtual-list/root/virtual-list-root.ts"
241888
243769
  }
241889
243770
  },
243771
+ {
243772
+ "kind": "field",
243773
+ "name": "renderSection",
243774
+ "type": {
243775
+ "text": "VirtualListSectionRenderer | undefined"
243776
+ },
243777
+ "description": "Draws each section's header, given its name and its place among the\nsections, for a list given `section-field`. Set it as a property. Where\nit is unset, the header is the name as text.",
243778
+ "inheritedFrom": {
243779
+ "name": "HelixHeadlessVirtualList",
243780
+ "module": "src/virtual-list/root/virtual-list-root.ts"
243781
+ }
243782
+ },
243783
+ {
243784
+ "kind": "field",
243785
+ "name": "sectionField",
243786
+ "type": {
243787
+ "text": "string"
243788
+ },
243789
+ "default": "''",
243790
+ "description": "The field of each item that names its section, as a key or a path of\nkeys. Set, the items are drawn in sections: a header, then the items, in\nan element with the `group` role that the header names. A section starts\nwherever the field changes, so give the items in order. A list of one\ncolumn only.",
243791
+ "attribute": "section-field",
243792
+ "inheritedFrom": {
243793
+ "name": "HelixHeadlessVirtualList",
243794
+ "module": "src/virtual-list/root/virtual-list-root.ts"
243795
+ }
243796
+ },
241890
243797
  {
241891
243798
  "kind": "field",
241892
243799
  "name": "selectionBehavior",
@@ -242131,7 +244038,7 @@
242131
244038
  "name": "virtualize",
242132
244039
  "privacy": "private",
242133
244040
  "readonly": true,
242134
- "default": "new VirtualizeController(this, { container: () => this.partNamed('viewport'), count: () => Math.ceil(this.data.length / this.across), estimate: () => this.estimate, gap: () => this.space, measured: () => this.measured, rows: () => this.lines(), })",
244041
+ "default": "new VirtualizeController(this, { container: () => this.partNamed('viewport'), count: () => this.sections ? this.data.length + this.sections.starts.length : Math.ceil(this.data.length / this.across), estimate: () => this.estimate, gap: () => this.space, horizontal: () => this.horizontal, measured: () => this.measured, rows: () => this.lines(), })",
242135
244042
  "inheritedFrom": {
242136
244043
  "name": "HelixHeadlessVirtualList",
242137
244044
  "module": "src/virtual-list/root/virtual-list-root.ts"
@@ -242257,6 +244164,70 @@
242257
244164
  "module": "src/virtual-list/root/virtual-list-root.ts"
242258
244165
  }
242259
244166
  },
244167
+ {
244168
+ "kind": "method",
244169
+ "name": "lineOf",
244170
+ "privacy": "private",
244171
+ "return": {
244172
+ "type": {
244173
+ "text": "number"
244174
+ }
244175
+ },
244176
+ "parameters": [
244177
+ {
244178
+ "name": "at",
244179
+ "type": {
244180
+ "text": "number"
244181
+ }
244182
+ }
244183
+ ],
244184
+ "description": "The line item `at` is on: its entry in a list with sections.",
244185
+ "inheritedFrom": {
244186
+ "name": "HelixHeadlessVirtualList",
244187
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244188
+ }
244189
+ },
244190
+ {
244191
+ "kind": "field",
244192
+ "name": "horizontal",
244193
+ "type": {
244194
+ "text": "boolean"
244195
+ },
244196
+ "privacy": "private",
244197
+ "description": "Whether the list runs across, which a grid never does.",
244198
+ "readonly": true,
244199
+ "inheritedFrom": {
244200
+ "name": "HelixHeadlessVirtualList",
244201
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244202
+ }
244203
+ },
244204
+ {
244205
+ "kind": "field",
244206
+ "name": "sectionsRead",
244207
+ "type": {
244208
+ "text": "{ data: readonly unknown[]; field: string; sections: Sections } | undefined"
244209
+ },
244210
+ "privacy": "private",
244211
+ "description": "The sections and the items they were read from, kept until either changes.",
244212
+ "inheritedFrom": {
244213
+ "name": "HelixHeadlessVirtualList",
244214
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244215
+ }
244216
+ },
244217
+ {
244218
+ "kind": "field",
244219
+ "name": "sections",
244220
+ "type": {
244221
+ "text": "Sections | undefined"
244222
+ },
244223
+ "privacy": "private",
244224
+ "description": "The sections `section-field` divides the items into, in a list of one column.",
244225
+ "readonly": true,
244226
+ "inheritedFrom": {
244227
+ "name": "HelixHeadlessVirtualList",
244228
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244229
+ }
244230
+ },
242260
244231
  {
242261
244232
  "kind": "method",
242262
244233
  "name": "scrollToIndex",
@@ -242506,6 +244477,29 @@
242506
244477
  "module": "src/virtual-list/root/virtual-list-root.ts"
242507
244478
  }
242508
244479
  },
244480
+ {
244481
+ "kind": "method",
244482
+ "name": "isRow",
244483
+ "privacy": "private",
244484
+ "return": {
244485
+ "type": {
244486
+ "text": "node is HTMLElement"
244487
+ }
244488
+ },
244489
+ "parameters": [
244490
+ {
244491
+ "name": "node",
244492
+ "type": {
244493
+ "text": "unknown"
244494
+ }
244495
+ }
244496
+ ],
244497
+ "description": "Whether a node is one of the rows: a child, or a child of a section.",
244498
+ "inheritedFrom": {
244499
+ "name": "HelixHeadlessVirtualList",
244500
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244501
+ }
244502
+ },
242509
244503
  {
242510
244504
  "kind": "method",
242511
244505
  "name": "rowFor",
@@ -242911,6 +244905,84 @@
242911
244905
  "module": "src/virtual-list/root/virtual-list-root.ts"
242912
244906
  }
242913
244907
  },
244908
+ {
244909
+ "kind": "field",
244910
+ "name": "placedSections",
244911
+ "type": {
244912
+ "text": "Sections | undefined"
244913
+ },
244914
+ "privacy": "private",
244915
+ "description": "The sections the rows were last placed in.",
244916
+ "inheritedFrom": {
244917
+ "name": "HelixHeadlessVirtualList",
244918
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244919
+ }
244920
+ },
244921
+ {
244922
+ "kind": "field",
244923
+ "name": "headedBy",
244924
+ "type": {
244925
+ "text": "VirtualListSectionRenderer | undefined"
244926
+ },
244927
+ "privacy": "private",
244928
+ "description": "The function the drawn headers were drawn by, so a new one draws them again.",
244929
+ "inheritedFrom": {
244930
+ "name": "HelixHeadlessVirtualList",
244931
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244932
+ }
244933
+ },
244934
+ {
244935
+ "kind": "field",
244936
+ "name": "sectionId",
244937
+ "privacy": "private",
244938
+ "readonly": true,
244939
+ "description": "Ties each header's id to this list.",
244940
+ "inheritedFrom": {
244941
+ "name": "HelixHeadlessVirtualList",
244942
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244943
+ }
244944
+ },
244945
+ {
244946
+ "kind": "method",
244947
+ "name": "groups",
244948
+ "privacy": "private",
244949
+ "return": {
244950
+ "type": {
244951
+ "text": "Map<number, HTMLElement>"
244952
+ }
244953
+ },
244954
+ "parameters": [
244955
+ {
244956
+ "name": "sections",
244957
+ "type": {
244958
+ "text": "Sections | undefined"
244959
+ }
244960
+ },
244961
+ {
244962
+ "name": "wanted",
244963
+ "type": {
244964
+ "text": "readonly number[]"
244965
+ }
244966
+ },
244967
+ {
244968
+ "name": "regroup",
244969
+ "type": {
244970
+ "text": "boolean"
244971
+ }
244972
+ },
244973
+ {
244974
+ "name": "refill",
244975
+ "type": {
244976
+ "text": "boolean"
244977
+ }
244978
+ }
244979
+ ],
244980
+ "description": "The section elements a pass draws rows into, by section, for the\nsections of the wanted items: each a `group` named by its header, which\nis its first child. The ones no wanted item is in leave, and all of them\ndo when the sections change.",
244981
+ "inheritedFrom": {
244982
+ "name": "HelixHeadlessVirtualList",
244983
+ "module": "src/virtual-list/root/virtual-list-root.ts"
244984
+ }
244985
+ },
242914
244986
  {
242915
244987
  "kind": "method",
242916
244988
  "name": "spacerSizes",
@@ -242920,7 +244992,7 @@
242920
244992
  "text": "{ after: number; before: number }"
242921
244993
  }
242922
244994
  },
242923
- "description": "The spacers' heights: the window's, with the line kept for focus taking its own room.",
244995
+ "description": "The spacers' sizes: the window's, with the line kept for focus taking its\nown room, and so do the headers drawn with their sections from outside it.",
242924
244996
  "inheritedFrom": {
242925
244997
  "name": "HelixHeadlessVirtualList",
242926
244998
  "module": "src/virtual-list/root/virtual-list-root.ts"
@@ -243484,6 +245556,32 @@
243484
245556
  "module": "src/virtual-list/root/virtual-list-root.ts"
243485
245557
  }
243486
245558
  },
245559
+ {
245560
+ "name": "orientation",
245561
+ "type": {
245562
+ "text": "'horizontal' | 'vertical'"
245563
+ },
245564
+ "default": "'vertical'",
245565
+ "description": "Which way the list runs. `horizontal` lays the items out along a line\nand scrolls it sideways: Left and Right move between items, the other\nway round on a right-to-left page, and `estimate` is an item's width. A\ngrid always runs down.",
245566
+ "fieldName": "orientation",
245567
+ "inheritedFrom": {
245568
+ "name": "HelixHeadlessVirtualList",
245569
+ "module": "src/virtual-list/root/virtual-list-root.ts"
245570
+ }
245571
+ },
245572
+ {
245573
+ "name": "section-field",
245574
+ "type": {
245575
+ "text": "string"
245576
+ },
245577
+ "default": "''",
245578
+ "description": "The field of each item that names its section, as a key or a path of\nkeys. Set, the items are drawn in sections: a header, then the items, in\nan element with the `group` role that the header names. A section starts\nwherever the field changes, so give the items in order. A list of one\ncolumn only.",
245579
+ "fieldName": "sectionField",
245580
+ "inheritedFrom": {
245581
+ "name": "HelixHeadlessVirtualList",
245582
+ "module": "src/virtual-list/root/virtual-list-root.ts"
245583
+ }
245584
+ },
243487
245585
  {
243488
245586
  "name": "selection-behavior",
243489
245587
  "type": {
@@ -243595,6 +245693,14 @@
243595
245693
  "module": "src/virtual-list/root/virtual-list-root.ts"
243596
245694
  }
243597
245695
  },
245696
+ {
245697
+ "description": "While the list runs across, with `orientation=\"horizontal\"`.",
245698
+ "name": "horizontal",
245699
+ "inheritedFrom": {
245700
+ "name": "HelixHeadlessVirtualList",
245701
+ "module": "src/virtual-list/root/virtual-list-root.ts"
245702
+ }
245703
+ },
243598
245704
  {
243599
245705
  "description": "While `loading` is set.",
243600
245706
  "name": "loading",
@@ -243638,6 +245744,6 @@
243638
245744
  ],
243639
245745
  "helix": {
243640
245746
  "package": "@fusion.dev/helix",
243641
- "version": "0.166.0"
245747
+ "version": "0.167.0"
243642
245748
  }
243643
245749
  }