@fusion.dev/helix-headless 0.52.0 → 0.53.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 (58) hide show
  1. package/custom-elements.json +680 -283
  2. package/dist/announcement/root/announcement-root.js +2 -5
  3. package/dist/area-chart/root/area-chart-root.d.ts +7 -0
  4. package/dist/area-chart/root/area-chart-root.js +10 -12
  5. package/dist/bar-chart/root/bar-chart-root.js +4 -5
  6. package/dist/blockquote/root/blockquote-root.js +2 -5
  7. package/dist/chat/composer/chat-composer.js +2 -5
  8. package/dist/chat/message/chat-message.js +4 -11
  9. package/dist/chat/root/chat-root.js +1 -1
  10. package/dist/checkbox-group/root/checkbox-group-root.js +1 -1
  11. package/dist/color-input/root/color-input-root.js +1 -1
  12. package/dist/combobox/root/combobox-root.js +1 -1
  13. package/dist/data-table/root/data-table-root.d.ts +0 -10
  14. package/dist/data-table/root/data-table-root.js +4 -10
  15. package/dist/date-input/root/date-input-root.js +1 -1
  16. package/dist/divider/root/divider-root.js +2 -5
  17. package/dist/donut-chart/root/donut-chart-root.js +5 -6
  18. package/dist/drilldown/item/drilldown-item.d.ts +18 -0
  19. package/dist/drilldown/item/drilldown-item.js +3 -0
  20. package/dist/drilldown/root/drilldown-root.d.ts +20 -1
  21. package/dist/drilldown/root/drilldown-root.js +6 -13
  22. package/dist/file-input/root/file-input-root.js +2 -2
  23. package/dist/filter-input/root/filter-input-root.js +1 -1
  24. package/dist/heatmap/root/buckets.d.ts +2 -2
  25. package/dist/heatmap/root/buckets.js +3 -4
  26. package/dist/heatmap/root/heatmap-root.d.ts +0 -10
  27. package/dist/heatmap/root/heatmap-root.js +2 -8
  28. package/dist/input/root/input-root.js +1 -1
  29. package/dist/line-chart/root/line-chart-root.d.ts +6 -0
  30. package/dist/line-chart/root/line-chart-root.js +15 -17
  31. package/dist/listbox/root/listbox-root.js +1 -1
  32. package/dist/menu/item/menu-item.js +2 -2
  33. package/dist/notifications/notification/notification.d.ts +3 -9
  34. package/dist/notifications/notification/notification.js +3 -11
  35. package/dist/notifications/root/notifications-root.d.ts +0 -10
  36. package/dist/notifications/root/notifications-root.js +3 -9
  37. package/dist/number-input/root/number-input-root.js +2 -2
  38. package/dist/qr-code/root/qr-code-root.d.ts +8 -6
  39. package/dist/qr-code/root/qr-code-root.js +2 -3
  40. package/dist/radio/root/radio-root.d.ts +4 -36
  41. package/dist/radio/root/radio-root.js +2 -27
  42. package/dist/scatter-chart/root/scatter-chart-root.js +10 -11
  43. package/dist/select/root/select-root.js +1 -1
  44. package/dist/slider/root/slider-root.js +1 -1
  45. package/dist/sparkline/root/sparkline-root.d.ts +6 -0
  46. package/dist/sparkline/root/sparkline-root.js +10 -12
  47. package/dist/switch/root/switch-root.js +2 -5
  48. package/dist/tabs/tab/tab.d.ts +5 -34
  49. package/dist/tabs/tab/tab.js +3 -28
  50. package/dist/textarea/root/textarea-root.js +1 -1
  51. package/dist/time-input/root/time-input-root.js +1 -1
  52. package/dist/toggle/root/toggle-root.d.ts +4 -40
  53. package/dist/toggle/root/toggle-root.js +2 -27
  54. package/dist/tree/item/tree-item.js +2 -2
  55. package/dist/video/root/video-root.js +7 -14
  56. package/package.json +5 -5
  57. package/types/jsx.d.ts +302 -100
  58. package/types/vue.d.ts +65 -24
@@ -2350,7 +2350,7 @@
2350
2350
  "type": {
2351
2351
  "text": "Curve | undefined"
2352
2352
  },
2353
- "description": "How a band's edge gets from one reading to the next.\n\nThree values, and the class doc argues for each: `straight` is absent and\nis the default, `smooth` is for a stack read as a shape and is the one that\ncan draw a part as less than nothing, `step` is for a quantity that changes\nat a moment and is ordered the way `straight` is.\n\nAbsent rather than defaulted because a reflecting property with a default\nwrites its attribute onto every host, including the ones nobody configured.",
2353
+ "description": "How a band's edge gets from one reading to the next.\n\nThree values, and the class doc argues for each: `straight` is absent and\nis the default, `smooth` is for a stack read as a shape and is the one that\ncan draw a part as less than nothing, `step` is for a quantity that changes\nat a moment and is ordered the way `straight` is.\n\nAbsent rather than defaulted because a reflecting property with a default\nwrites its attribute onto every host, including the ones nobody configured.\nThe resting value therefore lives in the render, as `curve ?? 'straight'`.\n\n**`LineChart` and `Sparkline` rest at `smooth` and are not disagreeing.** A\nline claims a position, so the bounded invention a monotone cubic makes is\na reading aid and costs nothing. A band claims an amount, and two sums\nsmoothed independently can cross, so the same aid here draws a part as less\nthan nothing. Same axis, different mark, different resting value.",
2354
2354
  "attribute": "curve",
2355
2355
  "reflects": true
2356
2356
  },
@@ -3136,7 +3136,7 @@
3136
3136
  "type": {
3137
3137
  "text": "Curve | undefined"
3138
3138
  },
3139
- "description": "How a band's edge gets from one reading to the next.\n\nThree values, and the class doc argues for each: `straight` is absent and\nis the default, `smooth` is for a stack read as a shape and is the one that\ncan draw a part as less than nothing, `step` is for a quantity that changes\nat a moment and is ordered the way `straight` is.\n\nAbsent rather than defaulted because a reflecting property with a default\nwrites its attribute onto every host, including the ones nobody configured.",
3139
+ "description": "How a band's edge gets from one reading to the next.\n\nThree values, and the class doc argues for each: `straight` is absent and\nis the default, `smooth` is for a stack read as a shape and is the one that\ncan draw a part as less than nothing, `step` is for a quantity that changes\nat a moment and is ordered the way `straight` is.\n\nAbsent rather than defaulted because a reflecting property with a default\nwrites its attribute onto every host, including the ones nobody configured.\nThe resting value therefore lives in the render, as `curve ?? 'straight'`.\n\n**`LineChart` and `Sparkline` rest at `smooth` and are not disagreeing.** A\nline claims a position, so the bounded invention a monotone cubic makes is\na reading aid and costs nothing. A band claims an amount, and two sums\nsmoothed independently can cross, so the same aid here draws a part as less\nthan nothing. Same axis, different mark, different resting value.",
3140
3140
  "fieldName": "curve"
3141
3141
  },
3142
3142
  {
@@ -13594,6 +13594,20 @@
13594
13594
  },
13595
13595
  "description": "Refuses an empty set where one was required.\n\n**The group is form-associated, and submits nothing.** Nothing here calls\n`setFormValue`, so the set that reaches the server is exactly the boxes,\neach of which submits itself. What form association buys is the other half\nof participation, validity, and there is no other mechanism for it:\n`setValidity` throws `NotSupportedError` on an element the platform does not\nknow is a control. happy-dom's shim does not throw, so a spec passes against\ncode that fails on every update in Chromium.\n\nIt is also what makes the rest work: the form refuses to submit, which fires\n`invalid`, which is what marks the field touched and puts the message on\nscreen.\n\nAnchored on the list, because the browser needs somewhere to point the\nbubble."
13596
13596
  },
13597
+ {
13598
+ "kind": "field",
13599
+ "name": "controlId",
13600
+ "type": {
13601
+ "text": "string"
13602
+ },
13603
+ "privacy": "protected",
13604
+ "default": "'control'",
13605
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
13606
+ "inheritedFrom": {
13607
+ "name": "MixinField",
13608
+ "module": "src/mixins/mixin-field/mixin-field.ts"
13609
+ }
13610
+ },
13597
13611
  {
13598
13612
  "kind": "field",
13599
13613
  "name": "feedback",
@@ -14765,6 +14779,20 @@
14765
14779
  "text": "resetChecked() => void"
14766
14780
  }
14767
14781
  },
14782
+ {
14783
+ "kind": "field",
14784
+ "name": "controlId",
14785
+ "type": {
14786
+ "text": "string"
14787
+ },
14788
+ "privacy": "protected",
14789
+ "default": "'control'",
14790
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
14791
+ "inheritedFrom": {
14792
+ "name": "MixinField",
14793
+ "module": "src/mixins/mixin-field/mixin-field.ts"
14794
+ }
14795
+ },
14768
14796
  {
14769
14797
  "kind": "field",
14770
14798
  "name": "feedback",
@@ -17812,6 +17840,20 @@
17812
17840
  "text": "formStateRestoreCallback(state: string | null) => void"
17813
17841
  }
17814
17842
  },
17843
+ {
17844
+ "kind": "field",
17845
+ "name": "controlId",
17846
+ "type": {
17847
+ "text": "string"
17848
+ },
17849
+ "privacy": "protected",
17850
+ "default": "'control'",
17851
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
17852
+ "inheritedFrom": {
17853
+ "name": "MixinField",
17854
+ "module": "src/mixins/mixin-field/mixin-field.ts"
17855
+ }
17856
+ },
17815
17857
  {
17816
17858
  "kind": "field",
17817
17859
  "name": "feedback",
@@ -21418,6 +21460,20 @@
21418
21460
  "text": "formStateRestoreCallback(state: string | null) => void"
21419
21461
  }
21420
21462
  },
21463
+ {
21464
+ "kind": "field",
21465
+ "name": "controlId",
21466
+ "type": {
21467
+ "text": "string"
21468
+ },
21469
+ "privacy": "protected",
21470
+ "default": "'control'",
21471
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
21472
+ "inheritedFrom": {
21473
+ "name": "MixinField",
21474
+ "module": "src/mixins/mixin-field/mixin-field.ts"
21475
+ }
21476
+ },
21421
21477
  {
21422
21478
  "kind": "field",
21423
21479
  "name": "feedback",
@@ -25667,38 +25723,6 @@
25667
25723
  },
25668
25724
  "description": "Says on the toolbar and the footer whether anything is in them.\n\n**A stylesheet cannot ask.** `[part=\"toolbar\"]:has(> slot:not(:has(*)))` is\ntwo faults at once: `:has()` may not be nested inside `:has()`, so the\nselector fails to parse and the whole rule is discarded; and\n`slot:not(:has(*))` is as true of a filled slot as of an empty one, because\nassigned nodes are not a slot's DOM children. Both verified in a browser."
25669
25725
  },
25670
- {
25671
- "kind": "method",
25672
- "name": "markRegion",
25673
- "privacy": "private",
25674
- "return": {
25675
- "type": {
25676
- "text": "void"
25677
- }
25678
- },
25679
- "parameters": [
25680
- {
25681
- "name": "part",
25682
- "type": {
25683
- "text": "string"
25684
- }
25685
- },
25686
- {
25687
- "name": "slots",
25688
- "type": {
25689
- "text": "readonly string[]"
25690
- }
25691
- },
25692
- {
25693
- "name": "occupied",
25694
- "optional": true,
25695
- "type": {
25696
- "text": "string"
25697
- }
25698
- }
25699
- ],
25700
- "description": "One region, hidden when its slot holds nothing and nothing of ours fills it.\n\n`hidden` beside the `data-empty` mirror: `data-empty` is the hook the styled\nsheet reads, and this tier ships no sheet, so an empty region left in the box\ntree would be a gap a headless consumer cannot close without knowing to look\nfor it. The styled rule stays too, because that sheet sets `display` on these\nparts and therefore outranks the UA's `[hidden]` one."
25701
- },
25702
25726
  {
25703
25727
  "kind": "method",
25704
25728
  "name": "announceSort",
@@ -28238,6 +28262,20 @@
28238
28262
  "text": "formStateRestoreCallback(state: string | null) => void"
28239
28263
  }
28240
28264
  },
28265
+ {
28266
+ "kind": "field",
28267
+ "name": "controlId",
28268
+ "type": {
28269
+ "text": "string"
28270
+ },
28271
+ "privacy": "protected",
28272
+ "default": "'control'",
28273
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
28274
+ "inheritedFrom": {
28275
+ "name": "MixinField",
28276
+ "module": "src/mixins/mixin-field/mixin-field.ts"
28277
+ }
28278
+ },
28241
28279
  {
28242
28280
  "kind": "field",
28243
28281
  "name": "feedback",
@@ -34812,6 +34850,15 @@
34812
34850
  "text": "focusItem() => void"
34813
34851
  }
34814
34852
  },
34853
+ {
34854
+ "kind": "field",
34855
+ "name": "selected",
34856
+ "type": {
34857
+ "text": "boolean"
34858
+ },
34859
+ "description": "Whether this is the row the set is on, which in a drill-down is where focus\nis.\n\nA radio group's selection is an answer it holds; a page of rows has no\nanswer, only the row a reader has walked to, so focus is the whole of what\n\"the current one\" can mean here. This is `Menu.Item`'s reading word for\nword, and the two are one pattern: a menu that drills and a drill-down are\nthe same rows through the same controller.\n\nAsked of the document rather than of the shadow root. `focusItem` puts\nfocus on the control inside this row and the platform retargets it, so from\noutside the shadow tree `activeElement` is this element already and nothing\nhas to walk a tree. `ShadowRoot.activeElement` is also the reading that does\nnot survive happy-dom, which climbs `getRootNode()` to the top and then\ndereferences what it ran out of.",
34860
+ "readonly": true
34861
+ },
34815
34862
  {
34816
34863
  "kind": "method",
34817
34864
  "name": "select",
@@ -35323,6 +35370,14 @@
35323
35370
  "description": "The rows on the page showing, which is what the keys move over.",
35324
35371
  "readonly": true
35325
35372
  },
35373
+ {
35374
+ "kind": "field",
35375
+ "name": "keys",
35376
+ "privacy": "protected",
35377
+ "readonly": true,
35378
+ "default": "new KeyboardNavigationController(this, { items: () => this.items, reserved: () => ['ArrowLeft', 'ArrowRight'], selects: () => false, })",
35379
+ "description": "Moving between rows, which is `Menu`'s arrangement and not a second one.\n\nThe horizontal pair is reserved rather than released: in a drill-down they\nare the platform's own bindings for drilling, along the line to go in and\nback along it to come out, so they are spoken for here rather than\nunhandled. `handleKeydown` below owes them a binding, which is what\nreserving one means, and it has them.\n\n`selects` false, because arriving at a row must not follow it. Moving and\nchoosing are one act in a radio group and two here, which is the same\nreading `Menu` takes over the same rows.\n\nThe origin is the selection, which for these rows is where focus is. `focus`\nis the wrong reading however right it looks: it also carries a rule that a\npress which did not come from the set moves nothing, and Down on a page a\nreader has just tabbed to is how they get onto the first row at all."
35380
+ },
35326
35381
  {
35327
35382
  "kind": "method",
35328
35383
  "name": "placeTabStop",
@@ -36885,6 +36940,20 @@
36885
36940
  ],
36886
36941
  "description": "What is known about a chosen file, as tags, behind a seam the styled tier\ncan move.\n\nOne method for both the size and the kind, because they are the same\nelement saying two things and two methods would be two places to keep in\nstep. Both parts are written out rather than passed in, and that is not\nstyle: a part name behind an interpolation is a part the manifest cannot\nsee, so a stylesheet targeting it matches nothing.\n\nA method rather than a fragment inline, so a tier above can render its own,\nwrap this one, or leave it out without reimplementing the whole template.\nThe tag is interpolated rather than written, so `tier` resolves it: this\nrenders the headless element, and a styled subclass that sets `tier`\nrenders the styled one from the same template."
36887
36942
  },
36943
+ {
36944
+ "kind": "field",
36945
+ "name": "controlId",
36946
+ "type": {
36947
+ "text": "string"
36948
+ },
36949
+ "privacy": "protected",
36950
+ "default": "'control'",
36951
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
36952
+ "inheritedFrom": {
36953
+ "name": "MixinField",
36954
+ "module": "src/mixins/mixin-field/mixin-field.ts"
36955
+ }
36956
+ },
36888
36957
  {
36889
36958
  "kind": "field",
36890
36959
  "name": "feedback",
@@ -41030,6 +41099,20 @@
41030
41099
  "text": "formStateRestoreCallback(state: string | null) => void"
41031
41100
  }
41032
41101
  },
41102
+ {
41103
+ "kind": "field",
41104
+ "name": "controlId",
41105
+ "type": {
41106
+ "text": "string"
41107
+ },
41108
+ "privacy": "protected",
41109
+ "default": "'control'",
41110
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
41111
+ "inheritedFrom": {
41112
+ "name": "MixinField",
41113
+ "module": "src/mixins/mixin-field/mixin-field.ts"
41114
+ }
41115
+ },
41033
41116
  {
41034
41117
  "kind": "field",
41035
41118
  "name": "feedback",
@@ -42929,7 +43012,7 @@
42929
43012
  }
42930
43013
  }
42931
43014
  ],
42932
- "description": "A comma or space separated list of numbers, in the order written."
43015
+ "description": "A consumer's list of numbers, in the order written, with the rest dropped."
42933
43016
  },
42934
43017
  {
42935
43018
  "kind": "function",
@@ -42947,7 +43030,7 @@
42947
43030
  }
42948
43031
  }
42949
43032
  ],
42950
- "description": "A comma or space separated list of names, in the order written."
43033
+ "description": "A consumer's list of names, in the order written."
42951
43034
  },
42952
43035
  {
42953
43036
  "kind": "function",
@@ -43429,38 +43512,6 @@
43429
43512
  },
43430
43513
  "description": "Says on the footer whether any of its three slots holds anything.\n\n**A stylesheet cannot ask.** `[part=\"footer\"]:not(:has(slot:has(*)))` is two\nfaults at once: `:has()` may not be nested inside `:has()`, so the selector\nfails to parse and the rule is discarded whole; and a slot's assigned nodes\nare not its DOM children, so `slot:has(*)` reports fallback content rather\nthan the fill, and is false either way. Both verified in a browser."
43431
43514
  },
43432
- {
43433
- "kind": "method",
43434
- "name": "markRegion",
43435
- "privacy": "private",
43436
- "return": {
43437
- "type": {
43438
- "text": "void"
43439
- }
43440
- },
43441
- "parameters": [
43442
- {
43443
- "name": "part",
43444
- "type": {
43445
- "text": "string"
43446
- }
43447
- },
43448
- {
43449
- "name": "slots",
43450
- "type": {
43451
- "text": "readonly string[]"
43452
- }
43453
- },
43454
- {
43455
- "name": "occupied",
43456
- "optional": true,
43457
- "type": {
43458
- "text": "string"
43459
- }
43460
- }
43461
- ],
43462
- "description": "One region, hidden when its slot holds nothing and nothing of ours fills it.\n\n`hidden` beside the `data-empty` mirror: `data-empty` is the hook the styled\nsheet reads, and this tier ships no sheet, so an empty region left in the box\ntree would be a gap a headless consumer cannot close without knowing to look\nfor it. The styled rule stays too, because that sheet sets `display` on these\nparts and therefore outranks the UA's `[hidden]` one."
43463
- },
43464
43515
  {
43465
43516
  "kind": "method",
43466
43517
  "name": "renderTooltip",
@@ -47660,6 +47711,20 @@
47660
47711
  "text": "formStateRestoreCallback(state: string | null) => void"
47661
47712
  }
47662
47713
  },
47714
+ {
47715
+ "kind": "field",
47716
+ "name": "controlId",
47717
+ "type": {
47718
+ "text": "string"
47719
+ },
47720
+ "privacy": "protected",
47721
+ "default": "'control'",
47722
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
47723
+ "inheritedFrom": {
47724
+ "name": "MixinField",
47725
+ "module": "src/mixins/mixin-field/mixin-field.ts"
47726
+ }
47727
+ },
47663
47728
  {
47664
47729
  "kind": "field",
47665
47730
  "name": "feedback",
@@ -49864,7 +49929,7 @@
49864
49929
  "type": {
49865
49930
  "text": "Curve | undefined"
49866
49931
  },
49867
- "description": "How the line gets from one reading to the next.\n\n**`smooth` is the resting curve.** A curve invents the values between two\nreadings, which is why `straight` still exists, but the invention is\nbounded: the interpolation is monotone cubic, so it never leaves the band\nthe data sets and never introduces a peak or a trough the series does not\nhave. Within that bound the smoothed line is the easier one to follow\nacross a long series, and `straight` becomes the deliberate claim.\n\n**Absent rather than defaulted on the property**, because a reflecting\nproperty with a default writes its attribute onto every host anybody\nrenders, including the ones nobody configured.\n`line-chart-root.ssr.spec.ts` asserts the host carries only what the\nconsumer wrote. The default therefore lives where the path is built, as\n`curve ?? 'smooth'`.\n\n`step` claims the opposite of both, that a reading holds until the next.",
49932
+ "description": "How the line gets from one reading to the next.\n\n**`smooth` is the resting curve.** A curve invents the values between two\nreadings, which is why `straight` still exists, but the invention is\nbounded: the interpolation is monotone cubic, so it never leaves the band\nthe data sets and never introduces a peak or a trough the series does not\nhave. Within that bound the smoothed line is the easier one to follow\nacross a long series, and `straight` becomes the deliberate claim.\n\n**Absent rather than defaulted on the property**, because a reflecting\nproperty with a default writes its attribute onto every host anybody\nrenders, including the ones nobody configured.\n`line-chart-root.ssr.spec.ts` asserts the host carries only what the\nconsumer wrote. The default therefore lives where the path is built, as\n`curve ?? 'smooth'`.\n\n`step` claims the opposite of both, that a reading holds until the next.\n\n**`AreaChart` rests at `straight` and is not disagreeing.** A line claims a\nposition and a stacked band claims an amount: a curve fitted through one\nsum can pass under the curve fitted through the sum beneath it, so a\nsmoothed stack can draw a part as less than nothing. There is no such edge\nhere, which is what lets a line take the reading aid.",
49868
49933
  "attribute": "curve",
49869
49934
  "reflects": true
49870
49935
  },
@@ -50647,7 +50712,7 @@
50647
50712
  "type": {
50648
50713
  "text": "Curve | undefined"
50649
50714
  },
50650
- "description": "How the line gets from one reading to the next.\n\n**`smooth` is the resting curve.** A curve invents the values between two\nreadings, which is why `straight` still exists, but the invention is\nbounded: the interpolation is monotone cubic, so it never leaves the band\nthe data sets and never introduces a peak or a trough the series does not\nhave. Within that bound the smoothed line is the easier one to follow\nacross a long series, and `straight` becomes the deliberate claim.\n\n**Absent rather than defaulted on the property**, because a reflecting\nproperty with a default writes its attribute onto every host anybody\nrenders, including the ones nobody configured.\n`line-chart-root.ssr.spec.ts` asserts the host carries only what the\nconsumer wrote. The default therefore lives where the path is built, as\n`curve ?? 'smooth'`.\n\n`step` claims the opposite of both, that a reading holds until the next.",
50715
+ "description": "How the line gets from one reading to the next.\n\n**`smooth` is the resting curve.** A curve invents the values between two\nreadings, which is why `straight` still exists, but the invention is\nbounded: the interpolation is monotone cubic, so it never leaves the band\nthe data sets and never introduces a peak or a trough the series does not\nhave. Within that bound the smoothed line is the easier one to follow\nacross a long series, and `straight` becomes the deliberate claim.\n\n**Absent rather than defaulted on the property**, because a reflecting\nproperty with a default writes its attribute onto every host anybody\nrenders, including the ones nobody configured.\n`line-chart-root.ssr.spec.ts` asserts the host carries only what the\nconsumer wrote. The default therefore lives where the path is built, as\n`curve ?? 'smooth'`.\n\n`step` claims the opposite of both, that a reading holds until the next.\n\n**`AreaChart` rests at `straight` and is not disagreeing.** A line claims a\nposition and a stacked band claims an amount: a curve fitted through one\nsum can pass under the curve fitted through the sum beneath it, so a\nsmoothed stack can draw a part as less than nothing. There is no such edge\nhere, which is what lets a line take the reading aid.",
50651
50716
  "fieldName": "curve"
50652
50717
  },
50653
50718
  {
@@ -52471,6 +52536,20 @@
52471
52536
  "text": "formStateRestoreCallback(state: string | null) => void"
52472
52537
  }
52473
52538
  },
52539
+ {
52540
+ "kind": "field",
52541
+ "name": "controlId",
52542
+ "type": {
52543
+ "text": "string"
52544
+ },
52545
+ "privacy": "protected",
52546
+ "default": "'control'",
52547
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
52548
+ "inheritedFrom": {
52549
+ "name": "MixinField",
52550
+ "module": "src/mixins/mixin-field/mixin-field.ts"
52551
+ }
52552
+ },
52474
52553
  {
52475
52554
  "kind": "field",
52476
52555
  "name": "feedback",
@@ -58770,26 +58849,6 @@
58770
58849
  "description": "State to open with, where nothing declared one.",
58771
58850
  "attribute": "default-read"
58772
58851
  },
58773
- {
58774
- "kind": "field",
58775
- "name": "dismissible",
58776
- "type": {
58777
- "text": "boolean"
58778
- },
58779
- "default": "false",
58780
- "description": "Whether a reader may remove it.",
58781
- "attribute": "dismissible"
58782
- },
58783
- {
58784
- "kind": "field",
58785
- "name": "dismissLabel",
58786
- "type": {
58787
- "text": "string"
58788
- },
58789
- "default": "'Dismiss'",
58790
- "description": "Accessible name for the dismiss control.",
58791
- "attribute": "dismiss-label"
58792
- },
58793
58852
  {
58794
58853
  "kind": "field",
58795
58854
  "name": "locale",
@@ -58884,6 +58943,67 @@
58884
58943
  "privacy": "private",
58885
58944
  "readonly": true
58886
58945
  },
58946
+ {
58947
+ "kind": "field",
58948
+ "name": "dismissible",
58949
+ "type": {
58950
+ "text": "boolean"
58951
+ },
58952
+ "default": "false",
58953
+ "description": "Whether it offers a control to take it away.",
58954
+ "attribute": "dismissible",
58955
+ "reflects": true,
58956
+ "inheritedFrom": {
58957
+ "name": "MixinDismissible",
58958
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
58959
+ }
58960
+ },
58961
+ {
58962
+ "kind": "field",
58963
+ "name": "dismissLabel",
58964
+ "type": {
58965
+ "text": "string"
58966
+ },
58967
+ "default": "'Dismiss'",
58968
+ "description": "Accessible name for that control.\n\n`attribute` is spelled out because Lit lowercases a property name to\nderive one rather than dash-casing it, so this would otherwise be\nreachable only as `dismisslabel`, which nobody would guess and no linter\nwould catch.",
58969
+ "attribute": "dismiss-label",
58970
+ "inheritedFrom": {
58971
+ "name": "MixinDismissible",
58972
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
58973
+ }
58974
+ },
58975
+ {
58976
+ "kind": "method",
58977
+ "name": "dismissEvent",
58978
+ "privacy": "protected",
58979
+ "return": {
58980
+ "type": {
58981
+ "text": "HelixDismissEvent"
58982
+ }
58983
+ },
58984
+ "description": "The event, built and not dispatched.\n\nReading text is safe here: nothing calls this on a server, because the\nonly things that do are a press and a timer.",
58985
+ "inheritedFrom": {
58986
+ "name": "MixinDismissible",
58987
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
58988
+ }
58989
+ },
58990
+ {
58991
+ "kind": "method",
58992
+ "name": "dismiss",
58993
+ "return": {
58994
+ "type": {
58995
+ "text": "boolean"
58996
+ }
58997
+ },
58998
+ "description": "Announces that it should go, and reports whether the request stood.",
58999
+ "inheritedFrom": {
59000
+ "name": "MixinDismissible",
59001
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
59002
+ },
59003
+ "type": {
59004
+ "text": "dismiss() => boolean"
59005
+ }
59006
+ },
58887
59007
  {
58888
59008
  "kind": "field",
58889
59009
  "name": "tier",
@@ -59254,14 +59374,27 @@
59254
59374
  "description": "State to open with, where nothing declared one.",
59255
59375
  "fieldName": "defaultRead"
59256
59376
  },
59377
+ {
59378
+ "name": "locale",
59379
+ "type": {
59380
+ "text": "string"
59381
+ },
59382
+ "default": "''",
59383
+ "description": "Locale for the timestamp.\n\nEmpty is the runtime's own.",
59384
+ "fieldName": "locale"
59385
+ },
59257
59386
  {
59258
59387
  "name": "dismissible",
59259
59388
  "type": {
59260
59389
  "text": "boolean"
59261
59390
  },
59262
59391
  "default": "false",
59263
- "description": "Whether a reader may remove it.",
59264
- "fieldName": "dismissible"
59392
+ "description": "Whether it offers a control to take it away.",
59393
+ "fieldName": "dismissible",
59394
+ "inheritedFrom": {
59395
+ "name": "MixinDismissible",
59396
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
59397
+ }
59265
59398
  },
59266
59399
  {
59267
59400
  "name": "dismiss-label",
@@ -59269,17 +59402,12 @@
59269
59402
  "text": "string"
59270
59403
  },
59271
59404
  "default": "'Dismiss'",
59272
- "description": "Accessible name for the dismiss control.",
59273
- "fieldName": "dismissLabel"
59274
- },
59275
- {
59276
- "name": "locale",
59277
- "type": {
59278
- "text": "string"
59279
- },
59280
- "default": "''",
59281
- "description": "Locale for the timestamp.\n\nEmpty is the runtime's own.",
59282
- "fieldName": "locale"
59405
+ "description": "Accessible name for that control.\n\n`attribute` is spelled out because Lit lowercases a property name to\nderive one rather than dash-casing it, so this would otherwise be\nreachable only as `dismisslabel`, which nobody would guess and no linter\nwould catch.",
59406
+ "fieldName": "dismissLabel",
59407
+ "inheritedFrom": {
59408
+ "name": "MixinDismissible",
59409
+ "module": "src/mixins/mixin-dismissible/mixin-dismissible.ts"
59410
+ }
59283
59411
  }
59284
59412
  ],
59285
59413
  "cssStates": [
@@ -59304,6 +59432,12 @@
59304
59432
  }
59305
59433
  }
59306
59434
  ],
59435
+ "mixins": [
59436
+ {
59437
+ "name": "MixinDismissible",
59438
+ "package": "@fusion.dev/helix-core"
59439
+ }
59440
+ ],
59307
59441
  "superclass": {
59308
59442
  "name": "HelixElement",
59309
59443
  "package": "@fusion.dev/helix-core"
@@ -59550,38 +59684,6 @@
59550
59684
  },
59551
59685
  "description": "Says on each region whether anything is in it.\n\n**A stylesheet cannot ask this, and the obvious selector fails twice over.**\n`[part=\"header\"]:not(:has(> slot:has(*)))`: `:has()` may not be nested\ninside `:has()`, so the selector fails to parse and the whole rule is\ndiscarded; and a slot's assigned nodes are not its DOM children, so\n`slot:has(*)` reports whether the slot has *fallback* rather than whether a\nconsumer filled it, and would have been false either way. Both verified in a\nbrowser: `insertRule` throws a `SyntaxError` on the first, and an assigned\nelement still leaves `slot.matches(':has(*)')` false.\n\n`slotFilled` is what the rest of the library already asks with. It is said\non the region inside this shadow root rather than on the host, because an\nattribute written onto the host is a change to markup the consumer rendered,\nwhich React reports on hydration and does not patch up."
59552
59686
  },
59553
- {
59554
- "kind": "method",
59555
- "name": "markRegion",
59556
- "privacy": "private",
59557
- "return": {
59558
- "type": {
59559
- "text": "void"
59560
- }
59561
- },
59562
- "parameters": [
59563
- {
59564
- "name": "part",
59565
- "type": {
59566
- "text": "string"
59567
- }
59568
- },
59569
- {
59570
- "name": "slots",
59571
- "type": {
59572
- "text": "readonly string[]"
59573
- }
59574
- },
59575
- {
59576
- "name": "occupied",
59577
- "optional": true,
59578
- "type": {
59579
- "text": "string"
59580
- }
59581
- }
59582
- ],
59583
- "description": "One region, hidden when its slot holds nothing and nothing of ours fills it.\n\n`hidden` beside the `data-empty` mirror: `data-empty` is the hook the styled\nsheet reads, and this tier ships no sheet, so an empty region left in the box\ntree would be a gap a headless consumer cannot close without knowing to look\nfor it. The styled rule stays too, because that sheet sets `display` on these\nparts and therefore outranks the UA's `[hidden]` one."
59584
- },
59585
59687
  {
59586
59688
  "kind": "field",
59587
59689
  "name": "handleMarkAll",
@@ -60810,6 +60912,20 @@
60810
60912
  "text": "formStateRestoreCallback(state: string | null) => void"
60811
60913
  }
60812
60914
  },
60915
+ {
60916
+ "kind": "field",
60917
+ "name": "controlId",
60918
+ "type": {
60919
+ "text": "string"
60920
+ },
60921
+ "privacy": "protected",
60922
+ "default": "'control'",
60923
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
60924
+ "inheritedFrom": {
60925
+ "name": "MixinField",
60926
+ "module": "src/mixins/mixin-field/mixin-field.ts"
60927
+ }
60928
+ },
60813
60929
  {
60814
60930
  "kind": "field",
60815
60931
  "name": "feedback",
@@ -67240,6 +67356,20 @@
67240
67356
  "text": "formStateRestoreCallback(state: string | null) => void"
67241
67357
  }
67242
67358
  },
67359
+ {
67360
+ "kind": "field",
67361
+ "name": "controlId",
67362
+ "type": {
67363
+ "text": "string"
67364
+ },
67365
+ "privacy": "protected",
67366
+ "default": "'control'",
67367
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
67368
+ "inheritedFrom": {
67369
+ "name": "MixinField",
67370
+ "module": "src/mixins/mixin-field/mixin-field.ts"
67371
+ }
67372
+ },
67243
67373
  {
67244
67374
  "kind": "field",
67245
67375
  "name": "feedback",
@@ -69615,11 +69745,11 @@
69615
69745
  "kind": "field",
69616
69746
  "name": "shape",
69617
69747
  "type": {
69618
- "text": "QrStyle"
69748
+ "text": "QrStyle | undefined"
69619
69749
  },
69620
- "default": "'square'",
69621
- "description": "How the modules are drawn.\n\n`square` is the default and the only one that joins runs of adjacent\nmodules into a single subpath, which is what keeps a thousand modules to a\nhandful of nodes. `rounded` and `dots` draw each module on its own, because\nthe corners are the thing being drawn and a joined run has none in the\nmiddle. That cost is paid only by a code that asks for them.\n\nA scanner reads contrast between cells, not their shape, so all three\nscan. `dots` sits a little under half a module so neighbors do not touch,\nwhich is what makes it read as dots rather than as a softened square code.",
69622
- "attribute": "shape"
69750
+ "description": "How the modules are drawn.\n\n`square` is the resting state and is written by not writing it, per the\nrule that a reflected property takes no default. It is also the only one\nthat joins runs of adjacent modules into a single subpath, which is what\nkeeps a thousand modules to a handful of nodes. `rounded` and `dots` draw\neach module on its own, because the corners are the thing being drawn and a\njoined run has none in the middle. That cost is paid only by a code that\nasks for them.\n\nA scanner reads contrast between cells, not their shape, so all three\nscan. `dots` sits a little under half a module so neighbors do not touch,\nwhich is what makes it read as dots rather than as a softened square code.",
69751
+ "attribute": "shape",
69752
+ "reflects": true
69623
69753
  },
69624
69754
  {
69625
69755
  "kind": "field",
@@ -70007,10 +70137,9 @@
70007
70137
  {
70008
70138
  "name": "shape",
70009
70139
  "type": {
70010
- "text": "QrStyle"
70140
+ "text": "QrStyle | undefined"
70011
70141
  },
70012
- "default": "'square'",
70013
- "description": "How the modules are drawn.\n\n`square` is the default and the only one that joins runs of adjacent\nmodules into a single subpath, which is what keeps a thousand modules to a\nhandful of nodes. `rounded` and `dots` draw each module on its own, because\nthe corners are the thing being drawn and a joined run has none in the\nmiddle. That cost is paid only by a code that asks for them.\n\nA scanner reads contrast between cells, not their shape, so all three\nscan. `dots` sits a little under half a module so neighbors do not touch,\nwhich is what makes it read as dots rather than as a softened square code.",
70142
+ "description": "How the modules are drawn.\n\n`square` is the resting state and is written by not writing it, per the\nrule that a reflected property takes no default. It is also the only one\nthat joins runs of adjacent modules into a single subpath, which is what\nkeeps a thousand modules to a handful of nodes. `rounded` and `dots` draw\neach module on its own, because the corners are the thing being drawn and a\njoined run has none in the middle. That cost is paid only by a code that\nasks for them.\n\nA scanner reads contrast between cells, not their shape, so all three\nscan. `dots` sits a little under half a module so neighbors do not touch,\nwhich is what makes it read as dots rather than as a softened square code.",
70014
70143
  "fieldName": "shape"
70015
70144
  },
70016
70145
  {
@@ -70768,6 +70897,20 @@
70768
70897
  "text": "formStateRestoreCallback(state: string | null) => void"
70769
70898
  }
70770
70899
  },
70900
+ {
70901
+ "kind": "field",
70902
+ "name": "controlId",
70903
+ "type": {
70904
+ "text": "string"
70905
+ },
70906
+ "privacy": "protected",
70907
+ "default": "'control'",
70908
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
70909
+ "inheritedFrom": {
70910
+ "name": "MixinField",
70911
+ "module": "src/mixins/mixin-field/mixin-field.ts"
70912
+ }
70913
+ },
70771
70914
  {
70772
70915
  "kind": "field",
70773
70916
  "name": "feedback",
@@ -71748,31 +71891,35 @@
71748
71891
  "members": [
71749
71892
  {
71750
71893
  "kind": "field",
71751
- "name": "disabled",
71894
+ "name": "defaultSelected",
71752
71895
  "type": {
71753
71896
  "text": "boolean"
71754
71897
  },
71755
- "default": "false",
71756
- "description": "Whether this choice can be made.",
71757
- "attribute": "disabled",
71758
- "reflects": true
71898
+ "description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so the declaration is the\nattribute and the state is the property.\n\n**The attribute, read when it is asked for, and never a snapshot taken in\nthe constructor.** A field initializer runs there, and an element the HTML\nparser created has none of its attributes yet at that moment: measured on\nthis element, on `Option` and on `Toggle`, `<helix-radio value=\"a\"\nselected>` reported `defaultSelected` as `false` both from parsed markup\nand from `createElement` followed by `setAttribute`, which is every way a\nconsumer writes one. The snapshot could only ever be true for an element\nalready in the document when `customElements.define` ran.\n\nNothing overwrites it either, which is what makes reading it late correct\nrather than merely later: `selected` does not reflect, for the reason\n`willUpdate` records, so the group's writes never reach the attribute and\nwhat it says is what the markup said.\n\n**The deeper half is not this.** State reflecting under the declaration's\nname is the fault `TreeItem` avoids by mirroring to `data-selected`.\nSplitting them means moving what every stylesheet selects on, which is a\nchange of its own rather than a property being added."
71759
71899
  },
71760
71900
  {
71761
71901
  "kind": "field",
71762
- "name": "defaultSelected",
71902
+ "name": "focusable",
71763
71903
  "type": {
71764
71904
  "text": "boolean"
71765
71905
  },
71766
- "description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so the declaration is the\nattribute and the state is the property.\n\n**The attribute, read when it is asked for, and never a snapshot taken in\nthe constructor.** A field initializer runs there, and an element the HTML\nparser created has none of its attributes yet at that moment: measured on\nthis element, on `Option` and on `Toggle`, `<helix-radio value=\"a\"\nselected>` reported `defaultSelected` as `false` both from parsed markup\nand from `createElement` followed by `setAttribute`, which is every way a\nconsumer writes one. The snapshot could only ever be true for an element\nalready in the document when `customElements.define` ran.\n\nNothing overwrites it either, which is what makes reading it late correct\nrather than merely later: `selected` does not reflect, for the reason\n`willUpdate` records, so the group's writes never reach the attribute and\nwhat it says is what the markup said.\n\n**The deeper half is not this.** State reflecting under the declaration's\nname is the fault `TreeItem` avoids by mirroring to `data-selected`.\nSplitting them means moving what every stylesheet selects on, which is a\nchange of its own rather than a property being added."
71906
+ "default": "false",
71907
+ "description": "Whether this choice holds the group's tab stop while nothing is chosen.\n\nThe stop rides on the selection, and an unanswered group has no selection,\nso without this every choice is `tabindex=\"-1\"` and the keyboard cannot\nenter the set at all.\n\n**Written by the group, with no attribute, and it reaches the control\nrather than the host.** A `tabindex` on the host is two faults at once: it\nis markup a consumer rendered and their server never sent, which React\nreports as a mismatch and does not patch up, and it puts the tab stop on\nthe element rather than on the `<button role=\"radio\">` inside it, so a\nscreen reader meets an unnamed box where a native group would have given\nthem an unchecked radio. `Toggle.Root` carries the same property for the\nsame reason."
71767
71908
  },
71768
71909
  {
71769
71910
  "kind": "field",
71770
- "name": "focusable",
71911
+ "name": "disabled",
71771
71912
  "type": {
71772
71913
  "text": "boolean"
71773
71914
  },
71774
71915
  "default": "false",
71775
- "description": "Whether this choice holds the group's tab stop while nothing is chosen.\n\nThe stop rides on the selection, and an unanswered group has no selection,\nso without this every choice is `tabindex=\"-1\"` and the keyboard cannot\nenter the set at all.\n\n**Written by the group, with no attribute, and it reaches the control\nrather than the host.** A `tabindex` on the host is two faults at once: it\nis markup a consumer rendered and their server never sent, which React\nreports as a mismatch and does not patch up, and it puts the tab stop on\nthe element rather than on the `<button role=\"radio\">` inside it, so a\nscreen reader meets an unnamed box where a native group would have given\nthem an unchecked radio. `Toggle.Root` carries the same property for the\nsame reason."
71916
+ "description": "Whether this one can be chosen.",
71917
+ "attribute": "disabled",
71918
+ "reflects": true,
71919
+ "inheritedFrom": {
71920
+ "name": "MixinSelectableItem",
71921
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
71922
+ }
71776
71923
  },
71777
71924
  {
71778
71925
  "kind": "field",
@@ -71781,8 +71928,12 @@
71781
71928
  "text": "boolean"
71782
71929
  },
71783
71930
  "default": "false",
71784
- "description": "Whether this is the current choice.\n\nWritten by the group.",
71785
- "attribute": "selected"
71931
+ "description": "Whether this is the current one.\n\nWritten by the set rather than by a consumer, which is why it takes no\ndefault from an attribute here: a family whose selection a consumer\ndeclares in markup carries `defaultSelected` of its own to say so.",
71932
+ "attribute": "selected",
71933
+ "inheritedFrom": {
71934
+ "name": "MixinSelectableItem",
71935
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
71936
+ }
71786
71937
  },
71787
71938
  {
71788
71939
  "kind": "field",
@@ -71791,8 +71942,26 @@
71791
71942
  "text": "string"
71792
71943
  },
71793
71944
  "default": "''",
71794
- "description": "Identifies this choice to the group, and is what the form submits.",
71795
- "attribute": "value"
71945
+ "description": "Identifies this one to the set, and is what a form submits.",
71946
+ "attribute": "value",
71947
+ "inheritedFrom": {
71948
+ "name": "MixinSelectableItem",
71949
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
71950
+ }
71951
+ },
71952
+ {
71953
+ "kind": "field",
71954
+ "name": "itemPart",
71955
+ "type": {
71956
+ "text": "string"
71957
+ },
71958
+ "privacy": "protected",
71959
+ "default": "'item'",
71960
+ "description": "The part `focusItem` focuses. See the interface note.",
71961
+ "inheritedFrom": {
71962
+ "name": "MixinSelectableItem",
71963
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
71964
+ }
71796
71965
  },
71797
71966
  {
71798
71967
  "kind": "method",
@@ -71802,7 +71971,11 @@
71802
71971
  "text": "void"
71803
71972
  }
71804
71973
  },
71805
- "description": "Moves focus to this choice, for the group's arrow keys.",
71974
+ "description": "Moves focus to the control this renders, for the set's arrow keys.\n\nThe set drives the keys and cannot reach the control itself, which is\ninside this shadow root, so the intent is a method and the internals stay\nthe item's.",
71975
+ "inheritedFrom": {
71976
+ "name": "MixinSelectableItem",
71977
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
71978
+ },
71806
71979
  "type": {
71807
71980
  "text": "focusItem() => void"
71808
71981
  }
@@ -71812,12 +71985,16 @@
71812
71985
  "name": "select",
71813
71986
  "return": {
71814
71987
  "type": {
71815
- "text": "void"
71988
+ "text": "boolean"
71816
71989
  }
71817
71990
  },
71818
- "description": "Makes this choice and announces it.",
71991
+ "description": "Chooses this one and announces it, and reports whether it stood.",
71992
+ "inheritedFrom": {
71993
+ "name": "MixinSelectableItem",
71994
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
71995
+ },
71819
71996
  "type": {
71820
- "text": "select() => void"
71997
+ "text": "select() => boolean"
71821
71998
  }
71822
71999
  },
71823
72000
  {
@@ -72155,35 +72332,6 @@
72155
72332
  "reactProp": "onhelix-select"
72156
72333
  }
72157
72334
  ],
72158
- "attributes": [
72159
- {
72160
- "name": "disabled",
72161
- "type": {
72162
- "text": "boolean"
72163
- },
72164
- "default": "false",
72165
- "description": "Whether this choice can be made.",
72166
- "fieldName": "disabled"
72167
- },
72168
- {
72169
- "name": "selected",
72170
- "type": {
72171
- "text": "boolean"
72172
- },
72173
- "default": "false",
72174
- "description": "Whether this is the current choice.\n\nWritten by the group.",
72175
- "fieldName": "selected"
72176
- },
72177
- {
72178
- "name": "value",
72179
- "type": {
72180
- "text": "string"
72181
- },
72182
- "default": "''",
72183
- "description": "Identifies this choice to the group, and is what the form submits.",
72184
- "fieldName": "value"
72185
- }
72186
- ],
72187
72335
  "cssStates": [
72188
72336
  {
72189
72337
  "description": "While it is the one chosen.",
@@ -72198,6 +72346,12 @@
72198
72346
  }
72199
72347
  }
72200
72348
  ],
72349
+ "mixins": [
72350
+ {
72351
+ "name": "MixinSelectableItem",
72352
+ "package": "@fusion.dev/helix-core"
72353
+ }
72354
+ ],
72201
72355
  "superclass": {
72202
72356
  "name": "HelixElement",
72203
72357
  "package": "@fusion.dev/helix-core"
@@ -72226,6 +72380,47 @@
72226
72380
  },
72227
72381
  "tagName": "helix-headless-radio",
72228
72382
  "customElement": true,
72383
+ "attributes": [
72384
+ {
72385
+ "name": "disabled",
72386
+ "type": {
72387
+ "text": "boolean"
72388
+ },
72389
+ "default": "false",
72390
+ "description": "Whether this one can be chosen.",
72391
+ "fieldName": "disabled",
72392
+ "inheritedFrom": {
72393
+ "name": "MixinSelectableItem",
72394
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
72395
+ }
72396
+ },
72397
+ {
72398
+ "name": "selected",
72399
+ "type": {
72400
+ "text": "boolean"
72401
+ },
72402
+ "default": "false",
72403
+ "description": "Whether this is the current one.\n\nWritten by the set rather than by a consumer, which is why it takes no\ndefault from an attribute here: a family whose selection a consumer\ndeclares in markup carries `defaultSelected` of its own to say so.",
72404
+ "fieldName": "selected",
72405
+ "inheritedFrom": {
72406
+ "name": "MixinSelectableItem",
72407
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
72408
+ }
72409
+ },
72410
+ {
72411
+ "name": "value",
72412
+ "type": {
72413
+ "text": "string"
72414
+ },
72415
+ "default": "''",
72416
+ "description": "Identifies this one to the set, and is what a form submits.",
72417
+ "fieldName": "value",
72418
+ "inheritedFrom": {
72419
+ "name": "MixinSelectableItem",
72420
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
72421
+ }
72422
+ }
72423
+ ],
72229
72424
  "modulePath": "src/radio/root/radio-root.ts",
72230
72425
  "definitionPath": "src/radio/root/radio-root.ts"
72231
72426
  }
@@ -72759,6 +72954,20 @@
72759
72954
  "text": "formStateRestoreCallback(state: string | null) => void"
72760
72955
  }
72761
72956
  },
72957
+ {
72958
+ "kind": "field",
72959
+ "name": "controlId",
72960
+ "type": {
72961
+ "text": "string"
72962
+ },
72963
+ "privacy": "protected",
72964
+ "default": "'control'",
72965
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
72966
+ "inheritedFrom": {
72967
+ "name": "MixinField",
72968
+ "module": "src/mixins/mixin-field/mixin-field.ts"
72969
+ }
72970
+ },
72762
72971
  {
72763
72972
  "kind": "field",
72764
72973
  "name": "feedback",
@@ -75704,6 +75913,20 @@
75704
75913
  "text": "formStateRestoreCallback(state: string | null) => void"
75705
75914
  }
75706
75915
  },
75916
+ {
75917
+ "kind": "field",
75918
+ "name": "controlId",
75919
+ "type": {
75920
+ "text": "string"
75921
+ },
75922
+ "privacy": "protected",
75923
+ "default": "'control'",
75924
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
75925
+ "inheritedFrom": {
75926
+ "name": "MixinField",
75927
+ "module": "src/mixins/mixin-field/mixin-field.ts"
75928
+ }
75929
+ },
75707
75930
  {
75708
75931
  "kind": "field",
75709
75932
  "name": "feedback",
@@ -78077,6 +78300,20 @@
78077
78300
  "text": "formStateRestoreCallback(state: string | null) => void"
78078
78301
  }
78079
78302
  },
78303
+ {
78304
+ "kind": "field",
78305
+ "name": "controlId",
78306
+ "type": {
78307
+ "text": "string"
78308
+ },
78309
+ "privacy": "protected",
78310
+ "default": "'control'",
78311
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
78312
+ "inheritedFrom": {
78313
+ "name": "MixinField",
78314
+ "module": "src/mixins/mixin-field/mixin-field.ts"
78315
+ }
78316
+ },
78080
78317
  {
78081
78318
  "kind": "field",
78082
78319
  "name": "feedback",
@@ -79128,7 +79365,7 @@
79128
79365
  "type": {
79129
79366
  "text": "Curve | undefined"
79130
79367
  },
79131
- "description": "How the line gets from one reading to the next.\n\n**`smooth` is the resting curve.** A straight segment asserts nothing about\nthe values between two readings and a curve invents them, which is why\n`straight` exists. What settles the default the other way is that the\ninvention is bounded: the interpolation is monotone cubic, so it never\nleaves the band the data sets and never introduces a peak or a trough the\nseries does not have. Within that bound the smoothed line is the easier one\nto follow across a long series, which is what the drawing is for. `straight`\nbecomes the claim a consumer makes deliberately rather than the one they get\nby saying nothing.\n\n**The property stays optional and the default lives in the render.** A\nreflecting property with a default writes its attribute onto every host\nanybody renders, including the ones nobody configured, which the SSR specs\nassert against. So the resting state is still the attribute's absence, and\n`curve ?? 'smooth'` is what reads it.\n\n`step` claims the opposite of both, that a reading holds until the next.\nBars ignore it, having no between to interpolate.",
79368
+ "description": "How the line gets from one reading to the next.\n\n**`smooth` is the resting curve.** A straight segment asserts nothing about\nthe values between two readings and a curve invents them, which is why\n`straight` exists. What settles the default the other way is that the\ninvention is bounded: the interpolation is monotone cubic, so it never\nleaves the band the data sets and never introduces a peak or a trough the\nseries does not have. Within that bound the smoothed line is the easier one\nto follow across a long series, which is what the drawing is for. `straight`\nbecomes the claim a consumer makes deliberately rather than the one they get\nby saying nothing.\n\n**The property stays optional and the default lives in the render.** A\nreflecting property with a default writes its attribute onto every host\nanybody renders, including the ones nobody configured, which the SSR specs\nassert against. So the resting state is still the attribute's absence, and\n`curve ?? 'smooth'` is what reads it.\n\n`step` claims the opposite of both, that a reading holds until the next.\nBars ignore it, having no between to interpolate.\n\n**`AreaChart` rests at `straight` and is not disagreeing.** A line claims a\nposition and a stacked band claims an amount: a curve fitted through one\nsum can pass under the curve fitted through the sum beneath it, so a\nsmoothed stack can draw a part as less than nothing. There is no such edge\nhere, which is what lets a line take the reading aid.",
79132
79369
  "attribute": "curve",
79133
79370
  "reflects": true
79134
79371
  },
@@ -79521,7 +79758,7 @@
79521
79758
  "type": {
79522
79759
  "text": "Curve | undefined"
79523
79760
  },
79524
- "description": "How the line gets from one reading to the next.\n\n**`smooth` is the resting curve.** A straight segment asserts nothing about\nthe values between two readings and a curve invents them, which is why\n`straight` exists. What settles the default the other way is that the\ninvention is bounded: the interpolation is monotone cubic, so it never\nleaves the band the data sets and never introduces a peak or a trough the\nseries does not have. Within that bound the smoothed line is the easier one\nto follow across a long series, which is what the drawing is for. `straight`\nbecomes the claim a consumer makes deliberately rather than the one they get\nby saying nothing.\n\n**The property stays optional and the default lives in the render.** A\nreflecting property with a default writes its attribute onto every host\nanybody renders, including the ones nobody configured, which the SSR specs\nassert against. So the resting state is still the attribute's absence, and\n`curve ?? 'smooth'` is what reads it.\n\n`step` claims the opposite of both, that a reading holds until the next.\nBars ignore it, having no between to interpolate.",
79761
+ "description": "How the line gets from one reading to the next.\n\n**`smooth` is the resting curve.** A straight segment asserts nothing about\nthe values between two readings and a curve invents them, which is why\n`straight` exists. What settles the default the other way is that the\ninvention is bounded: the interpolation is monotone cubic, so it never\nleaves the band the data sets and never introduces a peak or a trough the\nseries does not have. Within that bound the smoothed line is the easier one\nto follow across a long series, which is what the drawing is for. `straight`\nbecomes the claim a consumer makes deliberately rather than the one they get\nby saying nothing.\n\n**The property stays optional and the default lives in the render.** A\nreflecting property with a default writes its attribute onto every host\nanybody renders, including the ones nobody configured, which the SSR specs\nassert against. So the resting state is still the attribute's absence, and\n`curve ?? 'smooth'` is what reads it.\n\n`step` claims the opposite of both, that a reading holds until the next.\nBars ignore it, having no between to interpolate.\n\n**`AreaChart` rests at `straight` and is not disagreeing.** A line claims a\nposition and a stacked band claims an amount: a curve fitted through one\nsum can pass under the curve fitted through the sum beneath it, so a\nsmoothed stack can draw a part as less than nothing. There is no such edge\nhere, which is what lets a line take the reading aid.",
79525
79762
  "fieldName": "curve"
79526
79763
  },
79527
79764
  {
@@ -84434,6 +84671,20 @@
84434
84671
  "text": "resetChecked() => void"
84435
84672
  }
84436
84673
  },
84674
+ {
84675
+ "kind": "field",
84676
+ "name": "controlId",
84677
+ "type": {
84678
+ "text": "string"
84679
+ },
84680
+ "privacy": "protected",
84681
+ "default": "'control'",
84682
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
84683
+ "inheritedFrom": {
84684
+ "name": "MixinField",
84685
+ "module": "src/mixins/mixin-field/mixin-field.ts"
84686
+ }
84687
+ },
84437
84688
  {
84438
84689
  "kind": "field",
84439
84690
  "name": "feedback",
@@ -88974,6 +89225,20 @@
88974
89225
  }
88975
89226
  ],
88976
89227
  "members": [
89228
+ {
89229
+ "kind": "field",
89230
+ "name": "itemPart",
89231
+ "type": {
89232
+ "text": "string"
89233
+ },
89234
+ "privacy": "protected",
89235
+ "default": "'tab'",
89236
+ "description": "The part `focusItem` focuses. See the interface note.",
89237
+ "inheritedFrom": {
89238
+ "name": "MixinSelectableItem",
89239
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89240
+ }
89241
+ },
88977
89242
  {
88978
89243
  "kind": "field",
88979
89244
  "name": "disabled",
@@ -88981,9 +89246,13 @@
88981
89246
  "text": "boolean"
88982
89247
  },
88983
89248
  "default": "false",
88984
- "description": "Whether the tab can be chosen.",
89249
+ "description": "Whether this one can be chosen.",
88985
89250
  "attribute": "disabled",
88986
- "reflects": true
89251
+ "reflects": true,
89252
+ "inheritedFrom": {
89253
+ "name": "MixinSelectableItem",
89254
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89255
+ }
88987
89256
  },
88988
89257
  {
88989
89258
  "kind": "field",
@@ -88992,8 +89261,12 @@
88992
89261
  "text": "boolean"
88993
89262
  },
88994
89263
  "default": "false",
88995
- "description": "Whether this tab is the current one.",
88996
- "attribute": "selected"
89264
+ "description": "Whether this is the current one.\n\nWritten by the set rather than by a consumer, which is why it takes no\ndefault from an attribute here: a family whose selection a consumer\ndeclares in markup carries `defaultSelected` of its own to say so.",
89265
+ "attribute": "selected",
89266
+ "inheritedFrom": {
89267
+ "name": "MixinSelectableItem",
89268
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89269
+ }
88997
89270
  },
88998
89271
  {
88999
89272
  "kind": "field",
@@ -89002,8 +89275,12 @@
89002
89275
  "text": "string"
89003
89276
  },
89004
89277
  "default": "''",
89005
- "description": "Identifies the tab, and pairs it with the panel of the same value.",
89006
- "attribute": "value"
89278
+ "description": "Identifies this one to the set, and is what a form submits.",
89279
+ "attribute": "value",
89280
+ "inheritedFrom": {
89281
+ "name": "MixinSelectableItem",
89282
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89283
+ }
89007
89284
  },
89008
89285
  {
89009
89286
  "kind": "method",
@@ -89013,7 +89290,11 @@
89013
89290
  "text": "void"
89014
89291
  }
89015
89292
  },
89016
- "description": "Moves focus to this tab, for the list's arrow keys.",
89293
+ "description": "Moves focus to the control this renders, for the set's arrow keys.\n\nThe set drives the keys and cannot reach the control itself, which is\ninside this shadow root, so the intent is a method and the internals stay\nthe item's.",
89294
+ "inheritedFrom": {
89295
+ "name": "MixinSelectableItem",
89296
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89297
+ },
89017
89298
  "type": {
89018
89299
  "text": "focusItem() => void"
89019
89300
  }
@@ -89023,12 +89304,16 @@
89023
89304
  "name": "select",
89024
89305
  "return": {
89025
89306
  "type": {
89026
- "text": "void"
89307
+ "text": "boolean"
89027
89308
  }
89028
89309
  },
89029
- "description": "Selects this tab and announces it.",
89310
+ "description": "Chooses this one and announces it, and reports whether it stood.",
89311
+ "inheritedFrom": {
89312
+ "name": "MixinSelectableItem",
89313
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89314
+ },
89030
89315
  "type": {
89031
- "text": "select() => void"
89316
+ "text": "select() => boolean"
89032
89317
  }
89033
89318
  },
89034
89319
  {
@@ -89366,35 +89651,6 @@
89366
89651
  "reactProp": "onhelix-select"
89367
89652
  }
89368
89653
  ],
89369
- "attributes": [
89370
- {
89371
- "name": "disabled",
89372
- "type": {
89373
- "text": "boolean"
89374
- },
89375
- "default": "false",
89376
- "description": "Whether the tab can be chosen.",
89377
- "fieldName": "disabled"
89378
- },
89379
- {
89380
- "name": "selected",
89381
- "type": {
89382
- "text": "boolean"
89383
- },
89384
- "default": "false",
89385
- "description": "Whether this tab is the current one.",
89386
- "fieldName": "selected"
89387
- },
89388
- {
89389
- "name": "value",
89390
- "type": {
89391
- "text": "string"
89392
- },
89393
- "default": "''",
89394
- "description": "Identifies the tab, and pairs it with the panel of the same value.",
89395
- "fieldName": "value"
89396
- }
89397
- ],
89398
89654
  "cssStates": [
89399
89655
  {
89400
89656
  "description": "While it is the tab selected.",
@@ -89409,6 +89665,12 @@
89409
89665
  }
89410
89666
  }
89411
89667
  ],
89668
+ "mixins": [
89669
+ {
89670
+ "name": "MixinSelectableItem",
89671
+ "package": "@fusion.dev/helix-core"
89672
+ }
89673
+ ],
89412
89674
  "superclass": {
89413
89675
  "name": "HelixElement",
89414
89676
  "package": "@fusion.dev/helix-core"
@@ -89427,6 +89689,47 @@
89427
89689
  },
89428
89690
  "tagName": "helix-headless-tab",
89429
89691
  "customElement": true,
89692
+ "attributes": [
89693
+ {
89694
+ "name": "disabled",
89695
+ "type": {
89696
+ "text": "boolean"
89697
+ },
89698
+ "default": "false",
89699
+ "description": "Whether this one can be chosen.",
89700
+ "fieldName": "disabled",
89701
+ "inheritedFrom": {
89702
+ "name": "MixinSelectableItem",
89703
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89704
+ }
89705
+ },
89706
+ {
89707
+ "name": "selected",
89708
+ "type": {
89709
+ "text": "boolean"
89710
+ },
89711
+ "default": "false",
89712
+ "description": "Whether this is the current one.\n\nWritten by the set rather than by a consumer, which is why it takes no\ndefault from an attribute here: a family whose selection a consumer\ndeclares in markup carries `defaultSelected` of its own to say so.",
89713
+ "fieldName": "selected",
89714
+ "inheritedFrom": {
89715
+ "name": "MixinSelectableItem",
89716
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89717
+ }
89718
+ },
89719
+ {
89720
+ "name": "value",
89721
+ "type": {
89722
+ "text": "string"
89723
+ },
89724
+ "default": "''",
89725
+ "description": "Identifies this one to the set, and is what a form submits.",
89726
+ "fieldName": "value",
89727
+ "inheritedFrom": {
89728
+ "name": "MixinSelectableItem",
89729
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
89730
+ }
89731
+ }
89732
+ ],
89430
89733
  "modulePath": "src/tabs/tab/tab.ts",
89431
89734
  "definitionPath": "src/tabs/tab/tab.ts"
89432
89735
  }
@@ -90472,6 +90775,20 @@
90472
90775
  "text": "formStateRestoreCallback(state: string | null) => void"
90473
90776
  }
90474
90777
  },
90778
+ {
90779
+ "kind": "field",
90780
+ "name": "controlId",
90781
+ "type": {
90782
+ "text": "string"
90783
+ },
90784
+ "privacy": "protected",
90785
+ "default": "'control'",
90786
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
90787
+ "inheritedFrom": {
90788
+ "name": "MixinField",
90789
+ "module": "src/mixins/mixin-field/mixin-field.ts"
90790
+ }
90791
+ },
90475
90792
  {
90476
90793
  "kind": "field",
90477
90794
  "name": "feedback",
@@ -92644,6 +92961,20 @@
92644
92961
  "text": "formStateRestoreCallback(state: string | null) => void"
92645
92962
  }
92646
92963
  },
92964
+ {
92965
+ "kind": "field",
92966
+ "name": "controlId",
92967
+ "type": {
92968
+ "text": "string"
92969
+ },
92970
+ "privacy": "protected",
92971
+ "default": "'control'",
92972
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
92973
+ "inheritedFrom": {
92974
+ "name": "MixinField",
92975
+ "module": "src/mixins/mixin-field/mixin-field.ts"
92976
+ }
92977
+ },
92647
92978
  {
92648
92979
  "kind": "field",
92649
92980
  "name": "feedback",
@@ -97715,6 +98046,20 @@
97715
98046
  "text": "formStateRestoreCallback(state: string | null) => void"
97716
98047
  }
97717
98048
  },
98049
+ {
98050
+ "kind": "field",
98051
+ "name": "controlId",
98052
+ "type": {
98053
+ "text": "string"
98054
+ },
98055
+ "privacy": "protected",
98056
+ "default": "'control'",
98057
+ "description": "Id the field's label points at, written by the control this wraps.\n\n`renderLabel` emits the `for` and the family renders the `id`, so the\ntwo ends of one IDREF sat in two packages as a pair of literals with\nnothing holding them together: eleven templates wrote `id=\"control\"`,\ntwo wrote a second `for=\"control\"` of their own, and a family that\nspelled either differently got a `<label for>` resolving to nothing.\nThat failure is silent in the way the area rules describe for a\n`[part=]` naming a part nobody renders: no error, no warning, and a\nlabel that has stopped focusing its field.\n\nA member rather than a module constant, which is what the anchor\nargument for `reportRequired` already settled one level down: the name\nbelongs to the control the family renders, so the family has to be able\nto read it, and `HINT_ID` and `FEEDBACK_ID` stay private because this\nmixin renders both of those itself.",
98058
+ "inheritedFrom": {
98059
+ "name": "MixinField",
98060
+ "module": "src/mixins/mixin-field/mixin-field.ts"
98061
+ }
98062
+ },
97718
98063
  {
97719
98064
  "kind": "field",
97720
98065
  "name": "feedback",
@@ -98681,31 +99026,35 @@
98681
99026
  "members": [
98682
99027
  {
98683
99028
  "kind": "field",
98684
- "name": "disabled",
99029
+ "name": "defaultSelected",
98685
99030
  "type": {
98686
99031
  "text": "boolean"
98687
99032
  },
98688
- "default": "false",
98689
- "description": "Whether the item can be chosen.",
98690
- "attribute": "disabled",
98691
- "reflects": true
99033
+ "description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so the declaration is the\nattribute and the state is the property.\n\n**The attribute, read when it is asked for, and never a snapshot taken in\nthe constructor.** A field initializer runs there, and an element the HTML\nparser created has none of its attributes yet at that moment: measured on\nthis element, on `Option` and on `Radio`, `<helix-toggle value=\"light\"\nselected>` reported `defaultSelected` as `false` both from parsed markup\nand from `createElement` followed by `setAttribute`, which is every way a\nconsumer writes one. The snapshot could only ever be true for an element\nalready in the document when `customElements.define` ran.\n\nNothing overwrites it either, which is what makes reading it late correct\nrather than merely later: `selected` does not reflect, for the reason\n`willUpdate` records, so the group's writes never reach the attribute and\nwhat it says is what the markup said.\n\n**The deeper half is not this.** State reflecting under the declaration's\nname is the fault `TreeItem` avoids by mirroring to `data-selected`.\nSplitting them means moving what every stylesheet selects on, which is a\nchange of its own rather than a property being added."
98692
99034
  },
98693
99035
  {
98694
99036
  "kind": "field",
98695
- "name": "defaultSelected",
99037
+ "name": "focusable",
98696
99038
  "type": {
98697
99039
  "text": "boolean"
98698
99040
  },
98699
- "description": "Whether the markup declared this one chosen, which is what a reset returns to.\n\n`<option selected>` reflects to `defaultSelected` and `option.selected` is\nlive state that does not reflect, and those are two different facts. This\nelement has one `selected` doing both jobs, so the declaration is the\nattribute and the state is the property.\n\n**The attribute, read when it is asked for, and never a snapshot taken in\nthe constructor.** A field initializer runs there, and an element the HTML\nparser created has none of its attributes yet at that moment: measured on\nthis element, on `Option` and on `Radio`, `<helix-toggle value=\"light\"\nselected>` reported `defaultSelected` as `false` both from parsed markup\nand from `createElement` followed by `setAttribute`, which is every way a\nconsumer writes one. The snapshot could only ever be true for an element\nalready in the document when `customElements.define` ran.\n\nNothing overwrites it either, which is what makes reading it late correct\nrather than merely later: `selected` does not reflect, for the reason\n`willUpdate` records, so the group's writes never reach the attribute and\nwhat it says is what the markup said.\n\n**The deeper half is not this.** State reflecting under the declaration's\nname is the fault `TreeItem` avoids by mirroring to `data-selected`.\nSplitting them means moving what every stylesheet selects on, which is a\nchange of its own rather than a property being added."
99041
+ "default": "false",
99042
+ "description": "Whether this item holds the group's tab stop while nothing is chosen.\n\nThe stop normally rides on the selection, and an unanswered group has no\nselection, so without this the keyboard cannot reach it. Written by the\ngroup, with no attribute: it is coordination between elements, and\n`tabindex` on a host the consumer rendered is the change a React consumer's\nhydration reports and does not patch up."
98700
99043
  },
98701
99044
  {
98702
99045
  "kind": "field",
98703
- "name": "focusable",
99046
+ "name": "disabled",
98704
99047
  "type": {
98705
99048
  "text": "boolean"
98706
99049
  },
98707
99050
  "default": "false",
98708
- "description": "Whether this item holds the group's tab stop while nothing is chosen.\n\nThe stop normally rides on the selection, and an unanswered group has no\nselection, so without this the keyboard cannot reach it. Written by the\ngroup, with no attribute: it is coordination between elements, and\n`tabindex` on a host the consumer rendered is the change a React consumer's\nhydration reports and does not patch up."
99051
+ "description": "Whether this one can be chosen.",
99052
+ "attribute": "disabled",
99053
+ "reflects": true,
99054
+ "inheritedFrom": {
99055
+ "name": "MixinSelectableItem",
99056
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99057
+ }
98709
99058
  },
98710
99059
  {
98711
99060
  "kind": "field",
@@ -98714,8 +99063,40 @@
98714
99063
  "text": "boolean"
98715
99064
  },
98716
99065
  "default": "false",
98717
- "description": "Whether this item is the current one.",
98718
- "attribute": "selected"
99066
+ "description": "Whether this is the current one.\n\nWritten by the set rather than by a consumer, which is why it takes no\ndefault from an attribute here: a family whose selection a consumer\ndeclares in markup carries `defaultSelected` of its own to say so.",
99067
+ "attribute": "selected",
99068
+ "inheritedFrom": {
99069
+ "name": "MixinSelectableItem",
99070
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99071
+ }
99072
+ },
99073
+ {
99074
+ "kind": "field",
99075
+ "name": "value",
99076
+ "type": {
99077
+ "text": "string"
99078
+ },
99079
+ "default": "''",
99080
+ "description": "Identifies this one to the set, and is what a form submits.",
99081
+ "attribute": "value",
99082
+ "inheritedFrom": {
99083
+ "name": "MixinSelectableItem",
99084
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99085
+ }
99086
+ },
99087
+ {
99088
+ "kind": "field",
99089
+ "name": "itemPart",
99090
+ "type": {
99091
+ "text": "string"
99092
+ },
99093
+ "privacy": "protected",
99094
+ "default": "'item'",
99095
+ "description": "The part `focusItem` focuses. See the interface note.",
99096
+ "inheritedFrom": {
99097
+ "name": "MixinSelectableItem",
99098
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99099
+ }
98719
99100
  },
98720
99101
  {
98721
99102
  "kind": "method",
@@ -98725,7 +99106,11 @@
98725
99106
  "text": "void"
98726
99107
  }
98727
99108
  },
98728
- "description": "Moves focus to this item's own control.\n\nThe group drives arrow-key navigation and cannot reach the control itself,\nwhich is inside this shadow root. Exposing the intent as a method keeps the\ngroup out of the child's internals.",
99109
+ "description": "Moves focus to the control this renders, for the set's arrow keys.\n\nThe set drives the keys and cannot reach the control itself, which is\ninside this shadow root, so the intent is a method and the internals stay\nthe item's.",
99110
+ "inheritedFrom": {
99111
+ "name": "MixinSelectableItem",
99112
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99113
+ },
98729
99114
  "type": {
98730
99115
  "text": "focusItem() => void"
98731
99116
  }
@@ -98735,24 +99120,18 @@
98735
99120
  "name": "select",
98736
99121
  "return": {
98737
99122
  "type": {
98738
- "text": "void"
99123
+ "text": "boolean"
98739
99124
  }
98740
99125
  },
98741
- "description": "Chooses this item and announces it.",
99126
+ "description": "Chooses this one and announces it, and reports whether it stood.",
99127
+ "inheritedFrom": {
99128
+ "name": "MixinSelectableItem",
99129
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99130
+ },
98742
99131
  "type": {
98743
- "text": "select() => void"
99132
+ "text": "select() => boolean"
98744
99133
  }
98745
99134
  },
98746
- {
98747
- "kind": "field",
98748
- "name": "value",
98749
- "type": {
98750
- "text": "string"
98751
- },
98752
- "default": "''",
98753
- "description": "Identifies the item to the group.",
98754
- "attribute": "value"
98755
- },
98756
99135
  {
98757
99136
  "kind": "field",
98758
99137
  "name": "tier",
@@ -99088,35 +99467,6 @@
99088
99467
  "reactProp": "onhelix-select"
99089
99468
  }
99090
99469
  ],
99091
- "attributes": [
99092
- {
99093
- "name": "disabled",
99094
- "type": {
99095
- "text": "boolean"
99096
- },
99097
- "default": "false",
99098
- "description": "Whether the item can be chosen.",
99099
- "fieldName": "disabled"
99100
- },
99101
- {
99102
- "name": "selected",
99103
- "type": {
99104
- "text": "boolean"
99105
- },
99106
- "default": "false",
99107
- "description": "Whether this item is the current one.",
99108
- "fieldName": "selected"
99109
- },
99110
- {
99111
- "name": "value",
99112
- "type": {
99113
- "text": "string"
99114
- },
99115
- "default": "''",
99116
- "description": "Identifies the item to the group.",
99117
- "fieldName": "value"
99118
- }
99119
- ],
99120
99470
  "cssStates": [
99121
99471
  {
99122
99472
  "description": "While it is on.",
@@ -99131,6 +99481,12 @@
99131
99481
  }
99132
99482
  }
99133
99483
  ],
99484
+ "mixins": [
99485
+ {
99486
+ "name": "MixinSelectableItem",
99487
+ "package": "@fusion.dev/helix-core"
99488
+ }
99489
+ ],
99134
99490
  "superclass": {
99135
99491
  "name": "HelixElement",
99136
99492
  "package": "@fusion.dev/helix-core"
@@ -99159,6 +99515,47 @@
99159
99515
  },
99160
99516
  "tagName": "helix-headless-toggle",
99161
99517
  "customElement": true,
99518
+ "attributes": [
99519
+ {
99520
+ "name": "disabled",
99521
+ "type": {
99522
+ "text": "boolean"
99523
+ },
99524
+ "default": "false",
99525
+ "description": "Whether this one can be chosen.",
99526
+ "fieldName": "disabled",
99527
+ "inheritedFrom": {
99528
+ "name": "MixinSelectableItem",
99529
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99530
+ }
99531
+ },
99532
+ {
99533
+ "name": "selected",
99534
+ "type": {
99535
+ "text": "boolean"
99536
+ },
99537
+ "default": "false",
99538
+ "description": "Whether this is the current one.\n\nWritten by the set rather than by a consumer, which is why it takes no\ndefault from an attribute here: a family whose selection a consumer\ndeclares in markup carries `defaultSelected` of its own to say so.",
99539
+ "fieldName": "selected",
99540
+ "inheritedFrom": {
99541
+ "name": "MixinSelectableItem",
99542
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99543
+ }
99544
+ },
99545
+ {
99546
+ "name": "value",
99547
+ "type": {
99548
+ "text": "string"
99549
+ },
99550
+ "default": "''",
99551
+ "description": "Identifies this one to the set, and is what a form submits.",
99552
+ "fieldName": "value",
99553
+ "inheritedFrom": {
99554
+ "name": "MixinSelectableItem",
99555
+ "module": "src/mixins/mixin-selectable-item/mixin-selectable-item.ts"
99556
+ }
99557
+ }
99558
+ ],
99162
99559
  "modulePath": "src/toggle/root/toggle-root.ts",
99163
99560
  "definitionPath": "src/toggle/root/toggle-root.ts"
99164
99561
  }