@fusion.dev/helix-headless 0.53.2 → 0.53.3

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.
@@ -156,7 +156,7 @@
156
156
  "text": "boolean"
157
157
  },
158
158
  "default": "false",
159
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
159
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
160
160
  "attribute": "default-open",
161
161
  "inheritedFrom": {
162
162
  "name": "MixinControllerOpen",
@@ -628,7 +628,7 @@
628
628
  "text": "boolean"
629
629
  },
630
630
  "default": "false",
631
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
631
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
632
632
  "fieldName": "defaultOpen",
633
633
  "inheritedFrom": {
634
634
  "name": "MixinControllerOpen",
@@ -9707,7 +9707,7 @@
9707
9707
  "type": {
9708
9708
  "text": "number"
9709
9709
  },
9710
- "description": "The slide in view, counted from zero.\n\nReading gives the real slide, in either mode. Writing sets it, the way a\nscript assigning to a native control does. Which mode the carousel is in is\nread once, at the first update, from whether anything had declared an\n`index` by then: declared, and the consumer owns it and the carousel only\nannounces where it would have gone; not declared, and the carousel owns it\nand `default-index` says where it starts.\n\nThe same contract the four mixins carry, written out here rather than\nextracted, because a slide is addressed by position and every one of those\nmixins is keyed by a name. One consumer is not a mixin: if a second numeric\nstate turns up, this is what it is extracted from.",
9710
+ "description": "The slide in view, counted from zero.\n\nReading gives the real slide. Writing always applies, the way a script\nassigning to a native control does, and is a seed and a correction rather\nthan a claim of ownership: a consumer who wants the decision refuses the\n`helix-select`. `default-index` is where the carousel starts until\nsomething moves it.\n\nThe same contract the four mixins carry, written out here rather than\nextracted, because a slide is addressed by position and every one of those\nmixins is keyed by a name. One consumer is not a mixin: if a second numeric\nstate turns up, this is what it is extracted from.",
9711
9711
  "attribute": "index"
9712
9712
  },
9713
9713
  {
@@ -10522,7 +10522,7 @@
10522
10522
  "type": {
10523
10523
  "text": "number"
10524
10524
  },
10525
- "description": "The slide in view, counted from zero.\n\nReading gives the real slide, in either mode. Writing sets it, the way a\nscript assigning to a native control does. Which mode the carousel is in is\nread once, at the first update, from whether anything had declared an\n`index` by then: declared, and the consumer owns it and the carousel only\nannounces where it would have gone; not declared, and the carousel owns it\nand `default-index` says where it starts.\n\nThe same contract the four mixins carry, written out here rather than\nextracted, because a slide is addressed by position and every one of those\nmixins is keyed by a name. One consumer is not a mixin: if a second numeric\nstate turns up, this is what it is extracted from.",
10525
+ "description": "The slide in view, counted from zero.\n\nReading gives the real slide. Writing always applies, the way a script\nassigning to a native control does, and is a seed and a correction rather\nthan a claim of ownership: a consumer who wants the decision refuses the\n`helix-select`. `default-index` is where the carousel starts until\nsomething moves it.\n\nThe same contract the four mixins carry, written out here rather than\nextracted, because a slide is addressed by position and every one of those\nmixins is keyed by a name. One consumer is not a mixin: if a second numeric\nstate turns up, this is what it is extracted from.",
10526
10526
  "fieldName": "index"
10527
10527
  },
10528
10528
  {
@@ -13574,7 +13574,7 @@
13574
13574
  "name": "handleToggle",
13575
13575
  "privacy": "private",
13576
13576
  "readonly": true,
13577
- "description": "Reads a box's requested change into `value`, and says so once.\n\nThe box is found from the event's target, which does two things. It tells\nthe group which box asked, where the detail carries only the shared name.\nAnd it ignores the group's own dispatch, which lands on this same listener\nbecause the group is what it is dispatched from: without the guard the\ngroup answers itself until the stack gives out.\n\nThe requested state comes from the event rather than from the box. Driving\nthe boxes from `value` makes them controlled, so a controlled box applies\nnothing on its own and reports what it was asked for. Reading `checked`\nhere would read the state it still holds and nothing would ever change."
13577
+ "description": "Reads a box's requested change into `value`, and says so once.\n\nThe box is found from the event's target, which does two things. It tells\nthe group which box asked, where the detail carries only the shared name.\nAnd it ignores the group's own dispatch, which lands on this same listener\nbecause the group is what it is dispatched from: without the guard the\ngroup answers itself until the stack gives out.\n\nThe requested state comes from the event rather than from the box.\n`helix-before-toggle` is dispatched before the box applies, so reading\n`checked` here would read the state it still holds and nothing would ever\nchange."
13578
13578
  },
13579
13579
  {
13580
13580
  "kind": "field",
@@ -14674,7 +14674,7 @@
14674
14674
  "text": "boolean"
14675
14675
  },
14676
14676
  "default": "false",
14677
- "description": "Initial checked state for uncontrolled use, where nothing declared one.",
14677
+ "description": "Whether the markup declared it checked, which is where a reset returns to.",
14678
14678
  "attribute": "default-checked",
14679
14679
  "inheritedFrom": {
14680
14680
  "name": "MixinControllerChecked",
@@ -15565,7 +15565,7 @@
15565
15565
  "text": "boolean"
15566
15566
  },
15567
15567
  "default": "false",
15568
- "description": "Initial checked state for uncontrolled use, where nothing declared one.",
15568
+ "description": "Whether the markup declared it checked, which is where a reset returns to.",
15569
15569
  "fieldName": "defaultChecked",
15570
15570
  "inheritedFrom": {
15571
15571
  "name": "MixinControllerChecked",
@@ -17616,7 +17616,7 @@
17616
17616
  "text": "boolean"
17617
17617
  },
17618
17618
  "default": "false",
17619
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
17619
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
17620
17620
  "attribute": "default-open",
17621
17621
  "inheritedFrom": {
17622
17622
  "name": "MixinControllerOpen",
@@ -18698,7 +18698,7 @@
18698
18698
  "text": "boolean"
18699
18699
  },
18700
18700
  "default": "false",
18701
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
18701
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
18702
18702
  "fieldName": "defaultOpen",
18703
18703
  "inheritedFrom": {
18704
18704
  "name": "MixinControllerOpen",
@@ -21051,7 +21051,7 @@
21051
21051
  "text": "boolean"
21052
21052
  },
21053
21053
  "default": "false",
21054
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
21054
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
21055
21055
  "attribute": "default-open",
21056
21056
  "inheritedFrom": {
21057
21057
  "name": "MixinControllerOpen",
@@ -22373,7 +22373,7 @@
22373
22373
  "text": "boolean"
22374
22374
  },
22375
22375
  "default": "false",
22376
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
22376
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
22377
22377
  "fieldName": "defaultOpen",
22378
22378
  "inheritedFrom": {
22379
22379
  "name": "MixinControllerOpen",
@@ -22838,7 +22838,7 @@
22838
22838
  "text": "boolean"
22839
22839
  },
22840
22840
  "default": "false",
22841
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
22841
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
22842
22842
  "attribute": "default-open",
22843
22843
  "inheritedFrom": {
22844
22844
  "name": "MixinControllerOpen",
@@ -23338,7 +23338,7 @@
23338
23338
  "text": "boolean"
23339
23339
  },
23340
23340
  "default": "false",
23341
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
23341
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
23342
23342
  "fieldName": "defaultOpen",
23343
23343
  "inheritedFrom": {
23344
23344
  "name": "MixinControllerOpen",
@@ -24745,7 +24745,7 @@
24745
24745
  "declarations": [
24746
24746
  {
24747
24747
  "kind": "class",
24748
- "description": "**The schema is markup and the data is a property.** Columns are declared as\n`TableColumn` children, because a schema is small and something a reader\nshould see in the HTML; rows are handed over as an array, because a table\nthat draws ten thousand elements cannot window them.\n\n```html\n<helix-headless-data-table .rows=${rows} sort=\"name:asc\" page-size=\"20\">\n <helix-headless-table-column field=\"name\" sortable>Name</helix-headless-table-column>\n <helix-headless-table-column field=\"size\" align=\"end\" sortable .cell=${bytes}>Size</helix-headless-table-column>\n</helix-headless-data-table>\n```\n\n`Table` takes rows as markup and is the right component for a table of twelve\nthings a person wrote out.\n\n**Sort and filter apply to the whole set, never the page.** Sorting the drawn\nwindow is correct on the first screen and wrong on every other one.\n\n**The cell values do not server-render.** The headings do, and the row\nelements do, but reading a cell needs the columns, and the columns are markup\nchildren Lit SSR does not hand this element. So a crawler sees a table of the\nright shape with nothing in it. That is the cost of the first paragraph: use\n`Table` where the served HTML has to carry the values.\n\n**`selectable` adds a column of checkboxes, keyed on `row-key`.** A row is\nselected by its identity rather than its position, so a selection survives a\nsort, a filter and a page. `selected` is the chosen keys, comma separated, the\nshape Listbox uses for a multiple choice, and like `sort` it is controlled\nwhen set and seeded by `default-selected`. The box in the heading selects every\nrow in the result, across pages, and shows a dash while only some are chosen.\nChoosing one of many, rather than several, is opening a row, and that is a\nlink or a button in a cell rather than a selection.\n\n**A reader can size and order the columns.** `resizable` on a column puts a\nseparator on its edge; `reorderable` on the table puts a grip on each heading\nthat has a `field`, moved by dragging or with the arrow keys. The order lands\nin `order` as fields, and the consumer's own markup is never rewritten: the\ntable assigns the headings to its header in that order instead.\n\n**`csv()` hands back the result as text**: every row the filter lets through,\nin the order on screen, in the columns on screen. Saving it is the page's\nbusiness, the same as any other file.\n\n**There is no `columns` attribute here, and Table has one.** The difference\nis what a column is in each: here it is the schema, so a table without one\nhas nothing to read a row with, and every column is a place to write a\n`width`. A Table holds cells a consumer wrote and can be written with no\ncolumn at all, so its `columns` is where such a table is sized from. Written\non this element the attribute is inert, which is the trap worth knowing when\nmoving between the two.",
24748
+ "description": "**The schema is markup and the data is a property.** Columns are declared as\n`TableColumn` children, because a schema is small and something a reader\nshould see in the HTML; rows are handed over as an array, because a table\nthat draws ten thousand elements cannot window them.\n\n```html\n<helix-headless-data-table .rows=${rows} sort=\"name:asc\" page-size=\"20\">\n <helix-headless-table-column field=\"name\" sortable>Name</helix-headless-table-column>\n <helix-headless-table-column field=\"size\" align=\"end\" sortable .cell=${bytes}>Size</helix-headless-table-column>\n</helix-headless-data-table>\n```\n\n`Table` takes rows as markup and is the right component for a table of twelve\nthings a person wrote out.\n\n**Sort and filter apply to the whole set, never the page.** Sorting the drawn\nwindow is correct on the first screen and wrong on every other one.\n\n**The cell values do not server-render.** The headings do, and the row\nelements do, but reading a cell needs the columns, and the columns are markup\nchildren Lit SSR does not hand this element. So a crawler sees a table of the\nright shape with nothing in it. That is the cost of the first paragraph: use\n`Table` where the served HTML has to carry the values.\n\n**`selectable` adds a column of checkboxes, keyed on `row-key`.** A row is\nselected by its identity rather than its position, so a selection survives a\nsort, a filter and a page. `selected` is the chosen keys, comma separated, the\nshape Listbox uses for a multiple choice, and like `sort` writing it applies\nwhile `default-selected` is what the markup declared. The box in the heading\nselects every row in the result, across pages, and shows a dash while only\nsome are chosen.\nChoosing one of many, rather than several, is opening a row, and that is a\nlink or a button in a cell rather than a selection.\n\n**A reader can size and order the columns.** `resizable` on a column puts a\nseparator on its edge; `reorderable` on the table puts a grip on each heading\nthat has a `field`, moved by dragging or with the arrow keys. The order lands\nin `order` as fields, and the consumer's own markup is never rewritten: the\ntable assigns the headings to its header in that order instead.\n\n**`csv()` hands back the result as text**: every row the filter lets through,\nin the order on screen, in the columns on screen. Saving it is the page's\nbusiness, the same as any other file.\n\n**There is no `columns` attribute here, and Table has one.** The difference\nis what a column is in each: here it is the schema, so a table without one\nhas nothing to read a row with, and every column is a place to write a\n`width`. A Table holds cells a consumer wrote and can be written with no\ncolumn at all, so its `columns` is where such a table is sized from. Written\non this element the attribute is inert, which is the trap worth knowing when\nmoving between the two.",
24749
24749
  "name": "HelixHeadlessDataTable",
24750
24750
  "cssProperties": [
24751
24751
  {
@@ -27874,7 +27874,7 @@
27874
27874
  "text": "boolean"
27875
27875
  },
27876
27876
  "default": "false",
27877
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
27877
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
27878
27878
  "attribute": "default-open",
27879
27879
  "inheritedFrom": {
27880
27880
  "name": "MixinControllerOpen",
@@ -29199,7 +29199,7 @@
29199
29199
  "text": "boolean"
29200
29200
  },
29201
29201
  "default": "false",
29202
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
29202
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
29203
29203
  "fieldName": "defaultOpen",
29204
29204
  "inheritedFrom": {
29205
29205
  "name": "MixinControllerOpen",
@@ -32077,7 +32077,7 @@
32077
32077
  "text": "boolean"
32078
32078
  },
32079
32079
  "default": "false",
32080
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
32080
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
32081
32081
  "attribute": "default-open",
32082
32082
  "inheritedFrom": {
32083
32083
  "name": "MixinControllerOpen",
@@ -32567,7 +32567,7 @@
32567
32567
  "text": "boolean"
32568
32568
  },
32569
32569
  "default": "false",
32570
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
32570
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
32571
32571
  "fieldName": "defaultOpen",
32572
32572
  "inheritedFrom": {
32573
32573
  "name": "MixinControllerOpen",
@@ -33255,7 +33255,7 @@
33255
33255
  "type": {
33256
33256
  "text": "'large' | 'none' | 'small' | undefined"
33257
33257
  },
33258
- "description": "How much is left open in the middle.\n\nAbsent is a ring with room for a total in it. `small` and `large` move the\nhole without moving the outer edge, so a chart keeps its footprint.\n\n**`none` is a pie**, and it is the same drawing rather than another one:\nthe radius follows the thickness, so the inner edge reaching the center is\nwhat closing the hole means. A pie reads less accurately than a ring, angle\nbeing harder to judge than length, but it is not *misleading* the way a bar\nmeasured from anything but zero is, which is why this is a value here and\nthe bar chart's baseline is not a property at all.\n\n**Geometry rather than a CSS hook.** The dash arithmetic needs the\ncircumference, which needs the radius, and reading a custom property means\n`getComputedStyle`, which is client-only: a server would draw a different\nring than the client. A plot's proportions are markup for the same reason\n`curve` is.\n\n**And so it does not reflect**, which is the same argument read forward. No\nselector on either tier asks about it and none can want to: everything the\nthickness decides is arithmetic done here and published as\n`--donut-chart-stroke`, which is a number a rule can do sums with where the\nword is not. Reflected, it wrote a value onto every host a script had set\nit on for nothing to read. `sweep` beside it is the converse and reflects,\nbecause three rules select on it.",
33258
+ "description": "How much is left open in the middle.\n\nAbsent is a ring with room for a total in it. `small` and `large` move the\nhole without moving the outer edge, so a chart keeps its footprint.\n\n**`none` is a pie**, and it is the same drawing rather than another one:\nthe radius follows the thickness, so the inner edge reaching the center is\nwhat closing the hole means. A pie reads less accurately than a ring, angle\nbeing harder to judge than length, but it is not *misleading* the way a bar\nmeasured from anything but zero is, which is why this is a value here and\nthe bar chart's baseline is not a property at all.\n\n**Geometry rather than a CSS hook.** The dash arithmetic needs the\ncircumference, which needs the radius, and reading a custom property means\n`getComputedStyle`, which is client-only: a server would draw a different\nring than the client. A plot's proportions are markup for the same reason\n`curve` is.\n\n**And so it does not reflect**, which is the same argument read forward. No\nselector on either tier asks about it and none can want to: everything the\nthickness decides is arithmetic done here and published as\n`--donut-chart-stroke`, which is a number a rule can do sums with where the\nword is not. Reflected, it wrote a value onto every host a script had set\nit on for nothing to read. `sweep` beside it is the converse and reflects,\nbecause the styled sheet selects on it.",
33259
33259
  "attribute": "hole"
33260
33260
  },
33261
33261
  {
@@ -33879,7 +33879,7 @@
33879
33879
  "type": {
33880
33880
  "text": "'large' | 'none' | 'small' | undefined"
33881
33881
  },
33882
- "description": "How much is left open in the middle.\n\nAbsent is a ring with room for a total in it. `small` and `large` move the\nhole without moving the outer edge, so a chart keeps its footprint.\n\n**`none` is a pie**, and it is the same drawing rather than another one:\nthe radius follows the thickness, so the inner edge reaching the center is\nwhat closing the hole means. A pie reads less accurately than a ring, angle\nbeing harder to judge than length, but it is not *misleading* the way a bar\nmeasured from anything but zero is, which is why this is a value here and\nthe bar chart's baseline is not a property at all.\n\n**Geometry rather than a CSS hook.** The dash arithmetic needs the\ncircumference, which needs the radius, and reading a custom property means\n`getComputedStyle`, which is client-only: a server would draw a different\nring than the client. A plot's proportions are markup for the same reason\n`curve` is.\n\n**And so it does not reflect**, which is the same argument read forward. No\nselector on either tier asks about it and none can want to: everything the\nthickness decides is arithmetic done here and published as\n`--donut-chart-stroke`, which is a number a rule can do sums with where the\nword is not. Reflected, it wrote a value onto every host a script had set\nit on for nothing to read. `sweep` beside it is the converse and reflects,\nbecause three rules select on it.",
33882
+ "description": "How much is left open in the middle.\n\nAbsent is a ring with room for a total in it. `small` and `large` move the\nhole without moving the outer edge, so a chart keeps its footprint.\n\n**`none` is a pie**, and it is the same drawing rather than another one:\nthe radius follows the thickness, so the inner edge reaching the center is\nwhat closing the hole means. A pie reads less accurately than a ring, angle\nbeing harder to judge than length, but it is not *misleading* the way a bar\nmeasured from anything but zero is, which is why this is a value here and\nthe bar chart's baseline is not a property at all.\n\n**Geometry rather than a CSS hook.** The dash arithmetic needs the\ncircumference, which needs the radius, and reading a custom property means\n`getComputedStyle`, which is client-only: a server would draw a different\nring than the client. A plot's proportions are markup for the same reason\n`curve` is.\n\n**And so it does not reflect**, which is the same argument read forward. No\nselector on either tier asks about it and none can want to: everything the\nthickness decides is arithmetic done here and published as\n`--donut-chart-stroke`, which is a number a rule can do sums with where the\nword is not. Reflected, it wrote a value onto every host a script had set\nit on for nothing to read. `sweep` beside it is the converse and reflects,\nbecause the styled sheet selects on it.",
33883
33883
  "fieldName": "hole"
33884
33884
  },
33885
33885
  {
@@ -34149,7 +34149,7 @@
34149
34149
  "text": "boolean"
34150
34150
  },
34151
34151
  "default": "false",
34152
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
34152
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
34153
34153
  "attribute": "default-open",
34154
34154
  "inheritedFrom": {
34155
34155
  "name": "MixinControllerOpen",
@@ -34647,7 +34647,7 @@
34647
34647
  "text": "boolean"
34648
34648
  },
34649
34649
  "default": "false",
34650
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
34650
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
34651
34651
  "fieldName": "defaultOpen",
34652
34652
  "inheritedFrom": {
34653
34653
  "name": "MixinControllerOpen",
@@ -40179,7 +40179,7 @@
40179
40179
  "declarations": [
40180
40180
  {
40181
40181
  "kind": "class",
40182
- "description": "**The tokens are the consumer's own elements, slotted.** What a filter narrows\nby belongs to the consumer's model rather than to this element: a facet with a\nprefix, a saved query, a range. So they are slotted rather than rendered from\na list of strings, and removing one is a request this element makes rather\nthan a change it applies. Combobox is the other way round, and that is the\ndifference between the two: its tokens are a view of a selection it owns,\ndrawn from options it was handed.\n\n**`value` is the text being typed, not the tokens**, which is what makes this\na field a consumer can listen to. Every keystroke announces `input` with the\ntext on the element, so a table narrows as the reader types. The tokens need\nno reporting back, being markup the consumer already holds.\n\nBackspace on an empty field asks the last token to go, through the same\n`helix-dismiss` its own remove control fires, so a consumer who handled the\npointer has already handled the keyboard.\n\n**It reads what was declared, and nothing that was not.** Write\n`FilterField`s (usually inside the `FilterMenu` slotted into `start`, so the\npicker and the text work off one set), and Enter reads the box against them:\n`disposition:refunded,settled` and `-disposition:refunded` announce\n`helix-facet`, exactly as ticking those values in the picker would, and the\ntext they were read from goes. Everything else stays where it was typed, so\n`refund tuesday disposition:settled` is a filter and a search at once.\n`grammar.ts` carries the whole rule and is worth reading before relying on it;\nthe short version is that Helix owns the punctuation and the consumer owns\nevery word in it. A field with no `FilterField` in it parses nothing, which is\nthe behavior this had before it could.\n\n**A field whose values cannot be listed belongs here rather than in the\npicker.** `assignee:ada` is a filter and nobody wants to enumerate every name\nin the company, but a menu page for it would have nothing on it to press.\nWritten directly inside this element it is read by the grammar and never\noffered as a page: unslotted, so nothing draws it, which is the same trick\n`FilterField` already plays on its own children.\n\n**It can suggest what to type next, and deciding what to suggest is still the\nconsumer's.** Slot options into `suggestions` and the field shows them, moves\nthrough them with the arrows, and lets Enter press one; the option fires its\nown `helix-select` and the consumer decides what choosing meant. Keys before\na colon and values after it are the same panel with different contents, and\n`readFilterText` is exported for a consumer narrowing that panel against what\na reader has half typed.\n\n**The panel opens when there is something in it and closes when there is\nnot**, rather than on a choice. A reader who picks a key wants its values\nnext, and closing on the choice would shut the panel between two renders. Use\n`selectionStart` and `setSelectionRange` to write a completion back and put\nthe caret after it, or the next parse reads the wrong term.\n\n**Three things here have three different owners, and only one of them is a\ncontrolled property.**\n\n`value` is the text, and it is uncontrolled by default: the reader types, the\nelement applies it, and `input` says so. **Writing `value` does not take that\nover.** It is a seed and a correction, so a consumer who sets it and then\nexpects the field to hold still will watch the next keystroke overwrite them.\nOwnership is taken by refusing `helix-before-change` and writing the value\nyou want, which is the same shape every field in this library uses and is\nworth saying out loud here because the property looks like React's.\n`default-value` seeds the field without claiming anything.\n\n`open` is the suggestions panel, and it is the ordinary controlled pair:\nrefuse `helix-before-open` or `helix-before-close` to take the decision, and\n`default-open` to seed it.\n\nThe tokens are neither, because they are not state. They are the consumer's\nown elements in a slot, so there is nothing for this to own and nothing to\nreport back: a token goes when the consumer removes it from their markup,\nhaving been asked by `helix-dismiss`. **A `FilterChip` naming a declared field\nis asked differently**, and it has to be: the picker holds what is ticked, so\na chip that removed itself without telling it left the value ticked in a list\nnobody could see was wrong. That dismissal is answered as the field being\nfiltered by nothing, so it arrives as `helix-facet` like every other change\nand the chip goes because the filter went.",
40182
+ "description": "**The tokens are the consumer's own elements, slotted.** What a filter narrows\nby belongs to the consumer's model rather than to this element: a facet with a\nprefix, a saved query, a range. So they are slotted rather than rendered from\na list of strings, and removing one is a request this element makes rather\nthan a change it applies. Combobox is the other way round, and that is the\ndifference between the two: its tokens are a view of a selection it owns,\ndrawn from options it was handed.\n\n**`value` is the text being typed, not the tokens**, which is what makes this\na field a consumer can listen to. Every keystroke announces `input` with the\ntext on the element, so a table narrows as the reader types. The tokens need\nno reporting back, being markup the consumer already holds.\n\nBackspace on an empty field asks the last token to go, through the same\n`helix-dismiss` its own remove control fires, so a consumer who handled the\npointer has already handled the keyboard.\n\n**It reads what was declared, and nothing that was not.** Write\n`FilterField`s (usually inside the `FilterMenu` slotted into `start`, so the\npicker and the text work off one set), and Enter reads the box against them:\n`disposition:refunded,settled` and `-disposition:refunded` announce\n`helix-facet`, exactly as ticking those values in the picker would, and the\ntext they were read from goes. Everything else stays where it was typed, so\n`refund tuesday disposition:settled` is a filter and a search at once.\n`grammar.ts` carries the whole rule and is worth reading before relying on it;\nthe short version is that Helix owns the punctuation and the consumer owns\nevery word in it. A field with no `FilterField` in it parses nothing, which is\nthe behavior this had before it could.\n\n**A field whose values cannot be listed belongs here rather than in the\npicker.** `assignee:ada` is a filter and nobody wants to enumerate every name\nin the company, but a menu page for it would have nothing on it to press.\nWritten directly inside this element it is read by the grammar and never\noffered as a page: unslotted, so nothing draws it, which is the same trick\n`FilterField` already plays on its own children.\n\n**It can suggest what to type next, and deciding what to suggest is still the\nconsumer's.** Slot options into `suggestions` and the field shows them, moves\nthrough them with the arrows, and lets Enter press one; the option fires its\nown `helix-select` and the consumer decides what choosing meant. Keys before\na colon and values after it are the same panel with different contents, and\n`readFilterText` is exported for a consumer narrowing that panel against what\na reader has half typed.\n\n**The panel opens when there is something in it and closes when there is\nnot**, rather than on a choice. A reader who picks a key wants its values\nnext, and closing on the choice would shut the panel between two renders. Use\n`selectionStart` and `setSelectionRange` to write a completion back and put\nthe caret after it, or the next parse reads the wrong term.\n\n**Three things here have three different owners.**\n\n`value` is the text: the reader types, the element applies it, and `input`\nsays so. **Writing `value` does not take that over.** It is a seed and a\ncorrection, so a consumer who sets it and then expects the field to hold\nstill will watch the next keystroke overwrite them.\nOwnership is taken by refusing `helix-before-change` and writing the value\nyou want, which is the same shape every field in this library uses and is\nworth saying out loud here because the property looks like React's.\n`default-value` seeds the field without claiming anything.\n\n`open` is the suggestions panel, and it is the ordinary pair: refuse\n`helix-before-open` or `helix-before-close` to take the decision, and\n`default-open` to seed it.\n\nThe tokens are neither, because they are not state. They are the consumer's\nown elements in a slot, so there is nothing for this to own and nothing to\nreport back: a token goes when the consumer removes it from their markup,\nhaving been asked by `helix-dismiss`. **A `FilterChip` naming a declared field\nis asked differently**, and it has to be: the picker holds what is ticked, so\na chip that removed itself without telling it left the value ticked in a list\nnobody could see was wrong. That dismissal is answered as the field being\nfiltered by nothing, so it arrives as `helix-facet` like every other change\nand the chip goes because the filter went.",
40183
40183
  "name": "HelixHeadlessFilterInput",
40184
40184
  "cssParts": [
40185
40185
  {
@@ -40715,7 +40715,7 @@
40715
40715
  "text": "boolean"
40716
40716
  },
40717
40717
  "default": "false",
40718
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
40718
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
40719
40719
  "attribute": "default-open",
40720
40720
  "inheritedFrom": {
40721
40721
  "name": "MixinControllerOpen",
@@ -41958,7 +41958,7 @@
41958
41958
  "text": "boolean"
41959
41959
  },
41960
41960
  "default": "false",
41961
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
41961
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
41962
41962
  "fieldName": "defaultOpen",
41963
41963
  "inheritedFrom": {
41964
41964
  "name": "MixinControllerOpen",
@@ -54366,7 +54366,7 @@
54366
54366
  "text": "boolean"
54367
54367
  },
54368
54368
  "default": "false",
54369
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
54369
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
54370
54370
  "attribute": "default-open",
54371
54371
  "inheritedFrom": {
54372
54372
  "name": "MixinControllerOpen",
@@ -54857,7 +54857,7 @@
54857
54857
  "text": "boolean"
54858
54858
  },
54859
54859
  "default": "false",
54860
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
54860
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
54861
54861
  "fieldName": "defaultOpen",
54862
54862
  "inheritedFrom": {
54863
54863
  "name": "MixinControllerOpen",
@@ -56122,7 +56122,7 @@
56122
56122
  "text": "boolean"
56123
56123
  },
56124
56124
  "default": "false",
56125
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
56125
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
56126
56126
  "attribute": "default-open",
56127
56127
  "inheritedFrom": {
56128
56128
  "name": "MixinControllerOpen",
@@ -56661,7 +56661,7 @@
56661
56661
  "text": "boolean"
56662
56662
  },
56663
56663
  "default": "false",
56664
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
56664
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
56665
56665
  "fieldName": "defaultOpen",
56666
56666
  "inheritedFrom": {
56667
56667
  "name": "MixinControllerOpen",
@@ -58167,7 +58167,7 @@
58167
58167
  "text": "boolean"
58168
58168
  },
58169
58169
  "default": "false",
58170
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
58170
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
58171
58171
  "attribute": "default-open",
58172
58172
  "inheritedFrom": {
58173
58173
  "name": "MixinControllerOpen",
@@ -58641,7 +58641,7 @@
58641
58641
  "text": "boolean"
58642
58642
  },
58643
58643
  "default": "false",
58644
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
58644
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
58645
58645
  "fieldName": "defaultOpen",
58646
58646
  "inheritedFrom": {
58647
58647
  "name": "MixinControllerOpen",
@@ -62163,12 +62163,23 @@
62163
62163
  "default": "false",
62164
62164
  "description": "Set by a keyboard move, so the next render brings the active row into view."
62165
62165
  },
62166
+ {
62167
+ "kind": "field",
62168
+ "name": "ESTIMATE",
62169
+ "type": {
62170
+ "text": "number"
62171
+ },
62172
+ "static": true,
62173
+ "readonly": true,
62174
+ "default": "24",
62175
+ "description": "How tall a row is taken to be before it has been drawn, in pixels.\n\nA constant rather than the property `VirtualList` and `DataTable` carry:\nevery row here is one line of the same text at this family's own leading,\nso there is nothing for a consumer to tell it. `reveal` falls back to this\nwhen a drawn row measures zero, and the two have to be the same number or a\nkeyboard move scrolls by a different row than the window counted with."
62176
+ },
62166
62177
  {
62167
62178
  "kind": "field",
62168
62179
  "name": "virtualize",
62169
62180
  "privacy": "private",
62170
62181
  "readonly": true,
62171
- "default": "new VirtualizeController(this, { container: () => (this.windowed ? this.partNamed('tree') : null), count: () => this.rows.length, estimate: () => 24, measured: () => this.windowed, rows: () => [...(this.renderRoot?.querySelectorAll<HTMLElement>('[part~=\"row\"]') ?? [])].map( (element) => ({ element, index: Number(element.dataset.index) }), ), })"
62182
+ "default": "new VirtualizeController(this, { container: () => (this.windowed ? this.partNamed('tree') : null), count: () => this.rows.length, estimate: () => HelixHeadlessObjectInspector.ESTIMATE, measured: () => this.windowed, rows: () => [...(this.renderRoot?.querySelectorAll<HTMLElement>('[part~=\"row\"]') ?? [])].map( (element) => ({ element, index: Number(element.dataset.index) }), ), })"
62172
62183
  },
62173
62184
  {
62174
62185
  "kind": "field",
@@ -63386,7 +63397,7 @@
63386
63397
  "text": "string"
63387
63398
  },
63388
63399
  "default": "''",
63389
- "description": "A second destination for this row, taken with the modifier held.\n\n**An attribute rather than a second row, which is the whole point.** A\npalette of eighty-eight components that offered each of them a reference\npage and a sandbox as separate entries would be a palette of a hundred and\nseventy-six, and one earns its keep by getting a reader to one thing in\nthree keystrokes. The row already carries the first destination, so the\nsecond belongs beside it.\n\nDeclared here and acted on by whatever owns the list, the same division\nselection already uses: an option says what it is and the listbox decides\nwhat happens. `Command` is the only owner that reads it today, because a\nselect has one destination by definition.\n\nAbsent is a row with one destination, which is nearly every row.",
63400
+ "description": "A second destination for this row, taken with the modifier held.\n\n**An attribute rather than a second row, which is the whole point.** A\npalette that offered every component a reference page and a sandbox as\nseparate entries would be twice as long, and one earns its keep by getting\na reader to one thing in three keystrokes. The row already carries the\nfirst destination, so the second belongs beside it.\n\nDeclared here and acted on by whatever owns the list, the same division\nselection already uses: an option says what it is and the listbox decides\nwhat happens. `Command` is the only owner that reads it today, because a\nselect has one destination by definition.\n\nAbsent is a row with one destination, which is nearly every row.",
63390
63401
  "attribute": "alternate"
63391
63402
  },
63392
63403
  {
@@ -63830,7 +63841,7 @@
63830
63841
  "text": "string"
63831
63842
  },
63832
63843
  "default": "''",
63833
- "description": "A second destination for this row, taken with the modifier held.\n\n**An attribute rather than a second row, which is the whole point.** A\npalette of eighty-eight components that offered each of them a reference\npage and a sandbox as separate entries would be a palette of a hundred and\nseventy-six, and one earns its keep by getting a reader to one thing in\nthree keystrokes. The row already carries the first destination, so the\nsecond belongs beside it.\n\nDeclared here and acted on by whatever owns the list, the same division\nselection already uses: an option says what it is and the listbox decides\nwhat happens. `Command` is the only owner that reads it today, because a\nselect has one destination by definition.\n\nAbsent is a row with one destination, which is nearly every row.",
63844
+ "description": "A second destination for this row, taken with the modifier held.\n\n**An attribute rather than a second row, which is the whole point.** A\npalette that offered every component a reference page and a sandbox as\nseparate entries would be twice as long, and one earns its keep by getting\na reader to one thing in three keystrokes. The row already carries the\nfirst destination, so the second belongs beside it.\n\nDeclared here and acted on by whatever owns the list, the same division\nselection already uses: an option says what it is and the listbox decides\nwhat happens. `Command` is the only owner that reads it today, because a\nselect has one destination by definition.\n\nAbsent is a row with one destination, which is nearly every row.",
63834
63845
  "fieldName": "alternate"
63835
63846
  },
63836
63847
  {
@@ -65737,7 +65748,7 @@
65737
65748
  "declarations": [
65738
65749
  {
65739
65750
  "kind": "class",
65740
- "description": "Its own element beside `Pagination` rather than a slot inside it, for the\nreason `Pagination.Summary` is: a footer's direction and order are the\nconsumer's, and a control that can only sit at one end of one row has taken\nthat decision for them.\n\n**`Select`, not a native `<select>`.** Two dropdowns identical closed and\ndifferent open meet each other in the same footer as a table's filters. The\ncaret is `Select`'s rather than a color literal baked into a data URI,\nbecause a background image cannot read `currentColor`, and the label is a\nreal `<label for>` against the trigger's own id.\n\n**The label sits on the row, not above it.** `Select`'s host is a column, and\nan outer-tree rule beats a `:host` rule, so turning it into a row needs no\nproperty on `Select` and nothing written into the consumer's markup.\n\n**An empty `sizes` renders nothing**, rather than falling back to the\nbuilt-in list, which would be a component overruling a consumer who said\n\"none\". Same rule as `Pagination` over a single page, and reported the same\nway, through `ElementInternals.states` rather than an attribute the server\nnever wrote.\n\n`value` is the controlled property and `default-value` seeds one this owns.\nChanging it announces `helix-before-change`; re-querying and moving back to\npage one is the consumer's, because only they know whether the reader's\nposition should survive it.",
65751
+ "description": "Its own element beside `Pagination` rather than a slot inside it, for the\nreason `Pagination.Summary` is: a footer's direction and order are the\nconsumer's, and a control that can only sit at one end of one row has taken\nthat decision for them.\n\n**`Select`, not a native `<select>`.** Two dropdowns identical closed and\ndifferent open meet each other in the same footer as a table's filters. The\ncaret is `Select`'s rather than a color literal baked into a data URI,\nbecause a background image cannot read `currentColor`, and the label is a\nreal `<label for>` against the trigger's own id.\n\n**The label sits on the row, not above it.** `Select`'s host is a column, and\nan outer-tree rule beats a `:host` rule, so turning it into a row needs no\nproperty on `Select` and nothing written into the consumer's markup.\n\n**An empty `sizes` renders nothing**, rather than falling back to the\nbuilt-in list, which would be a component overruling a consumer who said\n\"none\". Same rule as `Pagination` over a single page, and reported the same\nway, through `ElementInternals.states` rather than an attribute the server\nnever wrote.\n\n`value` is the size the control holds and `default-value` is what the markup\ndeclared.\nChanging it announces `helix-before-change`; re-querying and moving back to\npage one is the consumer's, because only they know whether the reader's\nposition should survive it.",
65741
65752
  "name": "HelixHeadlessPaginationSize",
65742
65753
  "cssParts": [
65743
65754
  {
@@ -68525,7 +68536,7 @@
68525
68536
  "text": "boolean"
68526
68537
  },
68527
68538
  "default": "false",
68528
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
68539
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
68529
68540
  "attribute": "default-open",
68530
68541
  "inheritedFrom": {
68531
68542
  "name": "MixinControllerOpen",
@@ -69008,7 +69019,7 @@
69008
69019
  "text": "boolean"
69009
69020
  },
69010
69021
  "default": "false",
69011
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
69022
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
69012
69023
  "fieldName": "defaultOpen",
69013
69024
  "inheritedFrom": {
69014
69025
  "name": "MixinControllerOpen",
@@ -75689,7 +75700,7 @@
75689
75700
  "text": "boolean"
75690
75701
  },
75691
75702
  "default": "false",
75692
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
75703
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
75693
75704
  "attribute": "default-open",
75694
75705
  "inheritedFrom": {
75695
75706
  "name": "MixinControllerOpen",
@@ -76755,7 +76766,7 @@
76755
76766
  "text": "boolean"
76756
76767
  },
76757
76768
  "default": "false",
76758
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
76769
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
76759
76770
  "fieldName": "defaultOpen",
76760
76771
  "inheritedFrom": {
76761
76772
  "name": "MixinControllerOpen",
@@ -80573,7 +80584,7 @@
80573
80584
  "text": "boolean"
80574
80585
  },
80575
80586
  "default": "false",
80576
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
80587
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
80577
80588
  "attribute": "default-open",
80578
80589
  "inheritedFrom": {
80579
80590
  "name": "MixinControllerOpen",
@@ -81064,7 +81075,7 @@
81064
81075
  "text": "boolean"
81065
81076
  },
81066
81077
  "default": "false",
81067
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
81078
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
81068
81079
  "fieldName": "defaultOpen",
81069
81080
  "inheritedFrom": {
81070
81081
  "name": "MixinControllerOpen",
@@ -83299,7 +83310,7 @@
83299
83310
  "text": "string"
83300
83311
  },
83301
83312
  "default": "''",
83302
- "description": "Initial item for uncontrolled use.\n\nIgnored once `active` is written.",
83313
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
83303
83314
  "attribute": "default-active",
83304
83315
  "inheritedFrom": {
83305
83316
  "name": "MixinControllerActive",
@@ -83786,7 +83797,7 @@
83786
83797
  "text": "string"
83787
83798
  },
83788
83799
  "default": "''",
83789
- "description": "Initial item for uncontrolled use.\n\nIgnored once `active` is written.",
83800
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
83790
83801
  "fieldName": "defaultActive",
83791
83802
  "inheritedFrom": {
83792
83803
  "name": "MixinControllerActive",
@@ -84566,7 +84577,7 @@
84566
84577
  "text": "boolean"
84567
84578
  },
84568
84579
  "default": "false",
84569
- "description": "Initial checked state for uncontrolled use, where nothing declared one.",
84580
+ "description": "Whether the markup declared it checked, which is where a reset returns to.",
84570
84581
  "attribute": "default-checked",
84571
84582
  "inheritedFrom": {
84572
84583
  "name": "MixinControllerChecked",
@@ -85448,7 +85459,7 @@
85448
85459
  "text": "boolean"
85449
85460
  },
85450
85461
  "default": "false",
85451
- "description": "Initial checked state for uncontrolled use, where nothing declared one.",
85462
+ "description": "Whether the markup declared it checked, which is where a reset returns to.",
85452
85463
  "fieldName": "defaultChecked",
85453
85464
  "inheritedFrom": {
85454
85465
  "name": "MixinControllerChecked",
@@ -88642,7 +88653,7 @@
88642
88653
  "text": "string"
88643
88654
  },
88644
88655
  "default": "''",
88645
- "description": "Initial item for uncontrolled use.\n\nIgnored once `active` is written.",
88656
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
88646
88657
  "attribute": "default-active",
88647
88658
  "inheritedFrom": {
88648
88659
  "name": "MixinControllerActive",
@@ -89130,7 +89141,7 @@
89130
89141
  "text": "string"
89131
89142
  },
89132
89143
  "default": "''",
89133
- "description": "Initial item for uncontrolled use.\n\nIgnored once `active` is written.",
89144
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
89134
89145
  "fieldName": "defaultActive",
89135
89146
  "inheritedFrom": {
89136
89147
  "name": "MixinControllerActive",
@@ -92553,7 +92564,7 @@
92553
92564
  "text": "boolean"
92554
92565
  },
92555
92566
  "default": "false",
92556
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
92567
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
92557
92568
  "attribute": "default-open",
92558
92569
  "inheritedFrom": {
92559
92570
  "name": "MixinControllerOpen",
@@ -93850,7 +93861,7 @@
93850
93861
  "text": "boolean"
93851
93862
  },
93852
93863
  "default": "false",
93853
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
93864
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
93854
93865
  "fieldName": "defaultOpen",
93855
93866
  "inheritedFrom": {
93856
93867
  "name": "MixinControllerOpen",
@@ -100541,7 +100552,7 @@
100541
100552
  "text": "boolean"
100542
100553
  },
100543
100554
  "default": "false",
100544
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
100555
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
100545
100556
  "attribute": "default-open",
100546
100557
  "inheritedFrom": {
100547
100558
  "name": "MixinControllerOpen",
@@ -101078,7 +101089,7 @@
101078
101089
  "text": "boolean"
101079
101090
  },
101080
101091
  "default": "false",
101081
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
101092
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
101082
101093
  "fieldName": "defaultOpen",
101083
101094
  "inheritedFrom": {
101084
101095
  "name": "MixinControllerOpen",
@@ -102967,7 +102978,7 @@
102967
102978
  "text": "boolean"
102968
102979
  },
102969
102980
  "default": "false",
102970
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
102981
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
102971
102982
  "attribute": "default-open",
102972
102983
  "inheritedFrom": {
102973
102984
  "name": "MixinControllerOpen",
@@ -103476,7 +103487,7 @@
103476
103487
  "text": "boolean"
103477
103488
  },
103478
103489
  "default": "false",
103479
- "description": "Initial open state for uncontrolled use, where nothing declared one.",
103490
+ "description": "Whether the markup declared it open. Ignored once `open` is written.",
103480
103491
  "fieldName": "defaultOpen",
103481
103492
  "inheritedFrom": {
103482
103493
  "name": "MixinControllerOpen",
@@ -103864,7 +103875,7 @@
103864
103875
  "text": "string"
103865
103876
  },
103866
103877
  "default": "''",
103867
- "description": "Initial item for uncontrolled use.\n\nIgnored once `active` is written.",
103878
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
103868
103879
  "attribute": "default-active",
103869
103880
  "inheritedFrom": {
103870
103881
  "name": "MixinControllerActive",
@@ -104382,7 +104393,7 @@
104382
104393
  "text": "string"
104383
104394
  },
104384
104395
  "default": "''",
104385
- "description": "Initial item for uncontrolled use.\n\nIgnored once `active` is written.",
104396
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
104386
104397
  "fieldName": "defaultActive",
104387
104398
  "inheritedFrom": {
104388
104399
  "name": "MixinControllerActive",
@@ -106214,7 +106225,7 @@
106214
106225
  "text": "string"
106215
106226
  },
106216
106227
  "default": "''",
106217
- "description": "Initial item for uncontrolled use.\n\nIgnored once `active` is written.",
106228
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
106218
106229
  "attribute": "default-active",
106219
106230
  "inheritedFrom": {
106220
106231
  "name": "MixinControllerActive",
@@ -106677,7 +106688,7 @@
106677
106688
  "text": "string"
106678
106689
  },
106679
106690
  "default": "''",
106680
- "description": "Initial item for uncontrolled use.\n\nIgnored once `active` is written.",
106691
+ "description": "Which item the markup declared current.\n\nIgnored once `active` is written.",
106681
106692
  "fieldName": "defaultActive",
106682
106693
  "inheritedFrom": {
106683
106694
  "name": "MixinControllerActive",
@@ -69,12 +69,11 @@ export declare class HelixHeadlessCarousel extends HelixElement {
69
69
  /**
70
70
  * The slide in view, counted from zero.
71
71
  *
72
- * Reading gives the real slide, in either mode. Writing sets it, the way a
73
- * script assigning to a native control does. Which mode the carousel is in is
74
- * read once, at the first update, from whether anything had declared an
75
- * `index` by then: declared, and the consumer owns it and the carousel only
76
- * announces where it would have gone; not declared, and the carousel owns it
77
- * and `default-index` says where it starts.
72
+ * Reading gives the real slide. Writing always applies, the way a script
73
+ * assigning to a native control does, and is a seed and a correction rather
74
+ * than a claim of ownership: a consumer who wants the decision refuses the
75
+ * `helix-select`. `default-index` is where the carousel starts until
76
+ * something moves it.
78
77
  *
79
78
  * The same contract the four mixins carry, written out here rather than
80
79
  * extracted, because a slide is addressed by position and every one of those
@@ -87,10 +87,10 @@ export declare class HelixHeadlessCheckboxGroup extends HelixHeadlessCheckboxGro
87
87
  * because the group is what it is dispatched from: without the guard the
88
88
  * group answers itself until the stack gives out.
89
89
  *
90
- * The requested state comes from the event rather than from the box. Driving
91
- * the boxes from `value` makes them controlled, so a controlled box applies
92
- * nothing on its own and reports what it was asked for. Reading `checked`
93
- * here would read the state it still holds and nothing would ever change.
90
+ * The requested state comes from the event rather than from the box.
91
+ * `helix-before-toggle` is dispatched before the box applies, so reading
92
+ * `checked` here would read the state it still holds and nothing would ever
93
+ * change.
94
94
  */
95
95
  private readonly handleToggle;
96
96
  /**