@fusion.dev/helix-headless 0.37.0 → 0.39.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.
package/types/jsx.d.ts CHANGED
@@ -162,6 +162,7 @@ import type {
162
162
  HelixSortEvent,
163
163
  HelixTourAskEvent,
164
164
  at,
165
+ edgeOf,
165
166
  fromMinutes,
166
167
  initialsOf,
167
168
  isTime,
@@ -3283,7 +3284,16 @@ toggles rather than replaces, and the arrows move without choosing. What
3283
3284
  this adds is the tags, and keeping the panel open between picks.
3284
3285
 
3285
3286
  A comma is therefore not available inside an option's value, which is the
3286
- listbox's contract and not this element's to change. */
3287
+ listbox's contract and not this element's to change.
3288
+
3289
+ **The list is told, and the field is not.** `aria-multiselectable` belongs
3290
+ to `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in
3291
+ ARIA 1.2; the list sets it on itself through `ElementInternals`, where a
3292
+ reader on the field hears it through `aria-controls`. This element wrote it
3293
+ onto its own `role="combobox"` input as well, which an audit reports as a
3294
+ property the role does not support and no spec here ever asserted: the one
3295
+ that covers this says in as many words that telling the list is what this
3296
+ element is responsible for. */
3287
3297
  multiple?: (HelixHeadlessCombobox["multiple"]) | undefined;
3288
3298
  /** Text shown while nothing has been chosen. */
3289
3299
  placeholder?: (HelixHeadlessCombobox["placeholder"]) | undefined;
@@ -3449,7 +3459,16 @@ toggles rather than replaces, and the arrows move without choosing. What
3449
3459
  this adds is the tags, and keeping the panel open between picks.
3450
3460
 
3451
3461
  A comma is therefore not available inside an option's value, which is the
3452
- listbox's contract and not this element's to change. */
3462
+ listbox's contract and not this element's to change.
3463
+
3464
+ **The list is told, and the field is not.** `aria-multiselectable` belongs
3465
+ to `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in
3466
+ ARIA 1.2; the list sets it on itself through `ElementInternals`, where a
3467
+ reader on the field hears it through `aria-controls`. This element wrote it
3468
+ onto its own `role="combobox"` input as well, which an audit reports as a
3469
+ property the role does not support and no spec here ever asserted: the one
3470
+ that covers this says in as many words that telling the list is what this
3471
+ element is responsible for. */
3453
3472
  "prop:multiple"?: (HelixHeadlessCombobox["multiple"]) | undefined;
3454
3473
  /** Text shown while nothing has been chosen. */
3455
3474
  "prop:placeholder"?: (HelixHeadlessCombobox["placeholder"]) | undefined;
@@ -5297,18 +5316,20 @@ reader makes in one of these. */
5297
5316
  };
5298
5317
 
5299
5318
  export type HelixHeadlessDescriptionListItemProps = {
5300
- /** What the value is, for the common case of plain text.
5319
+ /** What the value is called, for the common case of plain text.
5301
5320
 
5302
5321
  The fallback of the `label` slot, so slotted content replaces it rather than
5303
- appearing beside it. */
5322
+ appearing beside it. The value itself is the default slot: it is the half
5323
+ that varies and is often more than text. */
5304
5324
  label?: (HelixHeadlessDescriptionListItem["label"]) | undefined;
5305
5325
  };
5306
5326
 
5307
5327
  export type HelixHeadlessDescriptionListItemSolidJsProps = {
5308
- /** What the value is, for the common case of plain text.
5328
+ /** What the value is called, for the common case of plain text.
5309
5329
 
5310
5330
  The fallback of the `label` slot, so slotted content replaces it rather than
5311
- appearing beside it. */
5331
+ appearing beside it. The value itself is the default slot: it is the half
5332
+ that varies and is often more than text. */
5312
5333
  "prop:label"?: (HelixHeadlessDescriptionListItem["label"]) | undefined;
5313
5334
 
5314
5335
  /** Set the innerHTML of the element */
@@ -6923,9 +6944,15 @@ export type HelixHeadlessHeatmapHelixResizeElementEvent =
6923
6944
  HelixHeadlessHeatmapElementEvent<HelixResizeEvent>;
6924
6945
 
6925
6946
  export type HelixHeadlessHeatmapProps = {
6926
- /** Shown when the table has no readings in it. */
6947
+ /** Shown when the table has no readings in it.
6948
+
6949
+ Never shown while the table cannot be read at all, which is a server render
6950
+ and the hydrating one after it: see `sourceKnown`. */
6927
6951
  "empty-text"?: (HelixHeadlessHeatmap["emptyText"]) | undefined;
6928
- /** Shown when the table has no readings in it. */
6952
+ /** Shown when the table has no readings in it.
6953
+
6954
+ Never shown while the table cannot be read at all, which is a server render
6955
+ and the hydrating one after it: see `sourceKnown`. */
6929
6956
  emptyText?: (HelixHeadlessHeatmap["emptyText"]) | undefined;
6930
6957
  /** Space between cells, in CSS pixels, for the same reason `min-cell` is a
6931
6958
  number. */
@@ -7012,9 +7039,15 @@ words and is already written. */
7012
7039
  };
7013
7040
 
7014
7041
  export type HelixHeadlessHeatmapSolidJsProps = {
7015
- /** Shown when the table has no readings in it. */
7042
+ /** Shown when the table has no readings in it.
7043
+
7044
+ Never shown while the table cannot be read at all, which is a server render
7045
+ and the hydrating one after it: see `sourceKnown`. */
7016
7046
  "attr:empty-text"?: (HelixHeadlessHeatmap["emptyText"]) | undefined;
7017
- /** Shown when the table has no readings in it. */
7047
+ /** Shown when the table has no readings in it.
7048
+
7049
+ Never shown while the table cannot be read at all, which is a server render
7050
+ and the hydrating one after it: see `sourceKnown`. */
7018
7051
  "prop:emptyText"?: (HelixHeadlessHeatmap["emptyText"]) | undefined;
7019
7052
  /** Space between cells, in CSS pixels, for the same reason `min-cell` is a
7020
7053
  number. */
@@ -8659,8 +8692,16 @@ fits.
8659
8692
  a band is not a question of paint: a band is not placed against the trigger,
8660
8693
  so the controller has to be told not to measure, and that decision is here
8661
8694
  whatever the stylesheet says. Writing the width in both places would be one
8662
- number in two languages, drifting the first time either moved. This sets
8663
- `data-narrow` on the host and the stylesheet arranges itself off that. */
8695
+ number in two languages, drifting the first time either moved. This records
8696
+ `:state(narrow)` on the host and the stylesheet arranges itself off that.
8697
+
8698
+ **A custom state and never `data-narrow`, which is what it was.** The width
8699
+ is read in `connectedCallback`, so on a phone this is true on the very first
8700
+ update: an attribute written there is markup a consumer's server never sent,
8701
+ which React reports as a mismatch and answers by rebuilding the subtree. The
8702
+ narrow exception the server specs describe covers a mirror that can only
8703
+ become true long after hydration, and a viewport measured before the first
8704
+ paint is the opposite case. See `MixinControllerOpen` on `open`. */
8664
8705
  "full-below"?: (HelixHeadlessMegamenu["fullBelow"] | `${number}`) | undefined;
8665
8706
  /** The width, in pixels, under which a card becomes a band. Zero never does.
8666
8707
 
@@ -8675,8 +8716,16 @@ fits.
8675
8716
  a band is not a question of paint: a band is not placed against the trigger,
8676
8717
  so the controller has to be told not to measure, and that decision is here
8677
8718
  whatever the stylesheet says. Writing the width in both places would be one
8678
- number in two languages, drifting the first time either moved. This sets
8679
- `data-narrow` on the host and the stylesheet arranges itself off that. */
8719
+ number in two languages, drifting the first time either moved. This records
8720
+ `:state(narrow)` on the host and the stylesheet arranges itself off that.
8721
+
8722
+ **A custom state and never `data-narrow`, which is what it was.** The width
8723
+ is read in `connectedCallback`, so on a phone this is true on the very first
8724
+ update: an attribute written there is markup a consumer's server never sent,
8725
+ which React reports as a mismatch and answers by rebuilding the subtree. The
8726
+ narrow exception the server specs describe covers a mirror that can only
8727
+ become true long after hydration, and a viewport measured before the first
8728
+ paint is the opposite case. See `MixinControllerOpen` on `open`. */
8680
8729
  fullBelow?: (HelixHeadlessMegamenu["fullBelow"]) | undefined;
8681
8730
  /** The section's name, which names the default trigger and the panel. */
8682
8731
  label?: (HelixHeadlessMegamenu["label"]) | undefined;
@@ -8752,8 +8801,16 @@ fits.
8752
8801
  a band is not a question of paint: a band is not placed against the trigger,
8753
8802
  so the controller has to be told not to measure, and that decision is here
8754
8803
  whatever the stylesheet says. Writing the width in both places would be one
8755
- number in two languages, drifting the first time either moved. This sets
8756
- `data-narrow` on the host and the stylesheet arranges itself off that. */
8804
+ number in two languages, drifting the first time either moved. This records
8805
+ `:state(narrow)` on the host and the stylesheet arranges itself off that.
8806
+
8807
+ **A custom state and never `data-narrow`, which is what it was.** The width
8808
+ is read in `connectedCallback`, so on a phone this is true on the very first
8809
+ update: an attribute written there is markup a consumer's server never sent,
8810
+ which React reports as a mismatch and answers by rebuilding the subtree. The
8811
+ narrow exception the server specs describe covers a mirror that can only
8812
+ become true long after hydration, and a viewport measured before the first
8813
+ paint is the opposite case. See `MixinControllerOpen` on `open`. */
8757
8814
  "attr:full-below"?: (HelixHeadlessMegamenu["fullBelow"] | `${number}`) | undefined;
8758
8815
  /** The width, in pixels, under which a card becomes a band. Zero never does.
8759
8816
 
@@ -8768,8 +8825,16 @@ fits.
8768
8825
  a band is not a question of paint: a band is not placed against the trigger,
8769
8826
  so the controller has to be told not to measure, and that decision is here
8770
8827
  whatever the stylesheet says. Writing the width in both places would be one
8771
- number in two languages, drifting the first time either moved. This sets
8772
- `data-narrow` on the host and the stylesheet arranges itself off that. */
8828
+ number in two languages, drifting the first time either moved. This records
8829
+ `:state(narrow)` on the host and the stylesheet arranges itself off that.
8830
+
8831
+ **A custom state and never `data-narrow`, which is what it was.** The width
8832
+ is read in `connectedCallback`, so on a phone this is true on the very first
8833
+ update: an attribute written there is markup a consumer's server never sent,
8834
+ which React reports as a mismatch and answers by rebuilding the subtree. The
8835
+ narrow exception the server specs describe covers a mirror that can only
8836
+ become true long after hydration, and a viewport measured before the first
8837
+ paint is the opposite case. See `MixinControllerOpen` on `open`. */
8773
8838
  "prop:fullBelow"?: (HelixHeadlessMegamenu["fullBelow"]) | undefined;
8774
8839
  /** The section's name, which names the default trigger and the panel. */
8775
8840
  "prop:label"?: (HelixHeadlessMegamenu["label"]) | undefined;
@@ -9929,12 +9994,26 @@ page's markup should not take the page down over a comma. */
9929
9994
  /** Whether to leave the copy button off.
9930
9995
 
9931
9996
  Negative for the reason Code Block's is: a boolean attribute defaulting to
9932
- true could never be turned off from markup. */
9997
+ true could never be turned off from markup.
9998
+
9999
+ **It does not reflect, where Code Block's does**, and the difference is what
10000
+ the two sheets need. Code Block reserves the button's width with
10001
+ `:host(:not([no-copy]))`, so the attribute has to be there for a consumer
10002
+ who set the property. This button is positioned out of the flow and takes no
10003
+ room, so nothing selects on it, and reflection exists so that a selector can
10004
+ reach a value. */
9933
10005
  "no-copy"?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
9934
10006
  /** Whether to leave the copy button off.
9935
10007
 
9936
10008
  Negative for the reason Code Block's is: a boolean attribute defaulting to
9937
- true could never be turned off from markup. */
10009
+ true could never be turned off from markup.
10010
+
10011
+ **It does not reflect, where Code Block's does**, and the difference is what
10012
+ the two sheets need. Code Block reserves the button's width with
10013
+ `:host(:not([no-copy]))`, so the attribute has to be there for a consumer
10014
+ who set the property. This button is positioned out of the flow and takes no
10015
+ room, so nothing selects on it, and reflection exists so that a selector can
10016
+ reach a value. */
9938
10017
  noCopy?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
9939
10018
  /** Whether to draw only the rows in view.
9940
10019
 
@@ -9979,12 +10058,26 @@ page's markup should not take the page down over a comma. */
9979
10058
  /** Whether to leave the copy button off.
9980
10059
 
9981
10060
  Negative for the reason Code Block's is: a boolean attribute defaulting to
9982
- true could never be turned off from markup. */
10061
+ true could never be turned off from markup.
10062
+
10063
+ **It does not reflect, where Code Block's does**, and the difference is what
10064
+ the two sheets need. Code Block reserves the button's width with
10065
+ `:host(:not([no-copy]))`, so the attribute has to be there for a consumer
10066
+ who set the property. This button is positioned out of the flow and takes no
10067
+ room, so nothing selects on it, and reflection exists so that a selector can
10068
+ reach a value. */
9983
10069
  "bool:no-copy"?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
9984
10070
  /** Whether to leave the copy button off.
9985
10071
 
9986
10072
  Negative for the reason Code Block's is: a boolean attribute defaulting to
9987
- true could never be turned off from markup. */
10073
+ true could never be turned off from markup.
10074
+
10075
+ **It does not reflect, where Code Block's does**, and the difference is what
10076
+ the two sheets need. Code Block reserves the button's width with
10077
+ `:host(:not([no-copy]))`, so the attribute has to be there for a consumer
10078
+ who set the property. This button is positioned out of the flow and takes no
10079
+ room, so nothing selects on it, and reflection exists so that a selector can
10080
+ reach a value. */
9988
10081
  "prop:noCopy"?: (HelixHeadlessObjectInspector["noCopy"]) | undefined;
9989
10082
  /** Whether to draw only the rows in view.
9990
10083
 
@@ -10230,9 +10323,9 @@ export type HelixHeadlessOutlineElementEvent<E = Event> = TypedEvent<
10230
10323
  HelixHeadlessOutline,
10231
10324
  E
10232
10325
  >;
10233
- /** `helix-before-activate` event type */
10234
- export type HelixHeadlessOutlineHelixBeforeActivateElementEvent =
10235
- HelixHeadlessOutlineElementEvent<HelixBeforeActivateEvent>;
10326
+ /** `helix-activate` event type */
10327
+ export type HelixHeadlessOutlineHelixActivateElementEvent =
10328
+ HelixHeadlessOutlineElementEvent<HelixActivateEvent>;
10236
10329
 
10237
10330
  export type HelixHeadlessOutlineProps = {
10238
10331
  /** How a click on one of these links travels to its section.
@@ -10265,9 +10358,9 @@ a little more: without it the current section changes as a heading slides
10265
10358
  under the chrome rather than as it reaches the top of what can be seen. */
10266
10359
  offset?: (HelixHeadlessOutline["offset"]) | undefined;
10267
10360
 
10268
- /** The section being read has changed, carrying its id as the value. Cancelable: refusing it takes the decision and nothing moves. */
10269
- "onhelix-before-activate"?: ((
10270
- e: HelixHeadlessOutlineHelixBeforeActivateElementEvent,
10361
+ /** The section being read has changed, carrying its id as the value. An announcement: it is read off where the page is scrolled to, so there is no decision here to take. */
10362
+ "onhelix-activate"?: ((
10363
+ e: HelixHeadlessOutlineHelixActivateElementEvent,
10271
10364
  ) => void) | undefined;
10272
10365
  };
10273
10366
 
@@ -10301,9 +10394,9 @@ The reading line. A page with a sticky masthead sets this to its height, or
10301
10394
  a little more: without it the current section changes as a heading slides
10302
10395
  under the chrome rather than as it reaches the top of what can be seen. */
10303
10396
  "prop:offset"?: (HelixHeadlessOutline["offset"]) | undefined;
10304
- /** The section being read has changed, carrying its id as the value. Cancelable: refusing it takes the decision and nothing moves. */
10305
- "on:helix-before-activate"?: ((
10306
- e: HelixHeadlessOutlineHelixBeforeActivateElementEvent,
10397
+ /** The section being read has changed, carrying its id as the value. An announcement: it is read off where the page is scrolled to, so there is no decision here to take. */
10398
+ "on:helix-activate"?: ((
10399
+ e: HelixHeadlessOutlineHelixActivateElementEvent,
10307
10400
  ) => void) | undefined;
10308
10401
 
10309
10402
  /** Set the innerHTML of the element */
@@ -20385,6 +20478,15 @@ export type CustomElements = {
20385
20478
  *
20386
20479
  * A comma is therefore not available inside an option's value, which is the
20387
20480
  * listbox's contract and not this element's to change.
20481
+ *
20482
+ * **The list is told, and the field is not.** `aria-multiselectable` belongs
20483
+ * to `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in
20484
+ * ARIA 1.2; the list sets it on itself through `ElementInternals`, where a
20485
+ * reader on the field hears it through `aria-controls`. This element wrote it
20486
+ * onto its own `role="combobox"` input as well, which an audit reports as a
20487
+ * property the role does not support and no spec here ever asserted: the one
20488
+ * that covers this says in as many words that telling the list is what this
20489
+ * element is responsible for.
20388
20490
  * - `placeholder`: Text shown while nothing has been chosen.
20389
20491
  * - `remove-label`/`removeLabel`: What a tag's remove control is called, since the mark has no name.
20390
20492
  * - `suggest`: Whether the field finishes the word as it is typed.
@@ -21216,6 +21318,7 @@ export type CustomElements = {
21216
21318
  *
21217
21319
  * CSS variables available for styling the component.
21218
21320
  *
21321
+ * - `--data-table-cell-align`: The edge the column a cell sits under is set to, `start`, `center` or `end`, and unset under a column that sets none. Written by the component onto each cell it draws, read by the sheet that paints one; `helix-table` publishes `--table-cell-align` for the same attribute on the cells a consumer wrote, under its own family's name. (default: `undefined`)
21219
21322
  * - `--data-table-template`: The column track list this element worked out from the columns declared in it. Written by the component, read by the sheet that paints: a stylesheet takes it to lay the grid out, and setting it does nothing, because the component writes it inline on the very element that reads it and an inline declaration beats any sheet. `--data-table-columns` is the one to set. (default: `undefined`)
21220
21323
  *
21221
21324
  * ## CSS Parts
@@ -21236,7 +21339,7 @@ export type CustomElements = {
21236
21339
  * - `checkbox-mark`: The tick, or the dash while some rows are selected.
21237
21340
  * - `checkbox-mark-checked`: The mark while its box is checked, beside `checkbox-mark`.
21238
21341
  * - `checkbox-mark-indeterminate`: The dash while only some rows are selected, beside `checkbox-mark`.
21239
- * - `empty`: Shown when no rows match.
21342
+ * - `empty`: Shown when the result has nothing in it, whether it arrived empty or a filter emptied it. A result still on its way is `loading` instead, which wins over this.
21240
21343
  * - `footer`: The region below the grid.
21241
21344
  * - `head`: The row the column headings sit in. `display: contents`, so it takes no space.
21242
21345
  * - `loading`: Shown while the rows are still on their way.
@@ -21819,10 +21922,11 @@ export type CustomElements = {
21819
21922
  *
21820
21923
  * Component attributes and properties that can be applied to the element or by using JavaScript.
21821
21924
  *
21822
- * - `label`: What the value is, for the common case of plain text.
21925
+ * - `label`: What the value is called, for the common case of plain text.
21823
21926
  *
21824
21927
  * The fallback of the `label` slot, so slotted content replaces it rather than
21825
- * appearing beside it.
21928
+ * appearing beside it. The value itself is the default slot: it is the half
21929
+ * that varies and is often more than text.
21826
21930
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
21827
21931
  *
21828
21932
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -22678,6 +22782,7 @@ export type CustomElements = {
22678
22782
  *
22679
22783
  * These can be used to apply styling when a component is in a given state.
22680
22784
  *
22785
+ * - `drilled`: While a row's page is showing rather than the top one, so a frame around this can answer the depth it is at.
22681
22786
  * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
22682
22787
  */
22683
22788
  "helix-headless-drilldown": Partial<
@@ -23873,6 +23978,9 @@ export type CustomElements = {
23873
23978
  * Component attributes and properties that can be applied to the element or by using JavaScript.
23874
23979
  *
23875
23980
  * - `empty-text`/`emptyText`: Shown when the table has no readings in it.
23981
+ *
23982
+ * Never shown while the table cannot be read at all, which is a server render
23983
+ * and the hydrating one after it: see `sourceKnown`.
23876
23984
  * - `gap`: Space between cells, in CSS pixels, for the same reason `min-cell` is a
23877
23985
  * number.
23878
23986
  * - `min-cell`/`minCell`: The smallest a cell may get before the strip draws fewer of them, in CSS pixels.
@@ -24034,7 +24142,7 @@ export type CustomElements = {
24034
24142
  * Custom selectors for styling elements within the component.
24035
24143
  *
24036
24144
  * - `cell`: One reading.
24037
- * - `empty`: Shown when the table has no readings in it.
24145
+ * - `empty`: Shown when the table has no readings in it, and not before the table can be read at all: on a server, and while hydrating what one sent, there is no document to resolve `for` in and nothing is known yet.
24038
24146
  * - `end`: The trailing slot's box.
24039
24147
  * - `footer`: The three-slot row under the strip.
24040
24148
  * - `mark`: The invisible point the tooltip is anchored to.
@@ -25614,8 +25722,16 @@ export type CustomElements = {
25614
25722
  * a band is not a question of paint: a band is not placed against the trigger,
25615
25723
  * so the controller has to be told not to measure, and that decision is here
25616
25724
  * whatever the stylesheet says. Writing the width in both places would be one
25617
- * number in two languages, drifting the first time either moved. This sets
25618
- * `data-narrow` on the host and the stylesheet arranges itself off that.
25725
+ * number in two languages, drifting the first time either moved. This records
25726
+ * `:state(narrow)` on the host and the stylesheet arranges itself off that.
25727
+ *
25728
+ * **A custom state and never `data-narrow`, which is what it was.** The width
25729
+ * is read in `connectedCallback`, so on a phone this is true on the very first
25730
+ * update: an attribute written there is markup a consumer's server never sent,
25731
+ * which React reports as a mismatch and answers by rebuilding the subtree. The
25732
+ * narrow exception the server specs describe covers a mirror that can only
25733
+ * become true long after hydration, and a viewport measured before the first
25734
+ * paint is the opposite case. See `MixinControllerOpen` on `open`.
25619
25735
  * - `label`: The section's name, which names the default trigger and the panel.
25620
25736
  * - `open-on`/`openOn`: Whether hovering the trigger opens the panel, or only a press does.
25621
25737
  *
@@ -25715,6 +25831,7 @@ export type CustomElements = {
25715
25831
  *
25716
25832
  * These can be used to apply styling when a component is in a given state.
25717
25833
  *
25834
+ * - `narrow`: While the page is under `full-below`, so the panel is a band whether or not one was asked for.
25718
25835
  * - `open`: While the panel is open, which is when the trigger reads as current.
25719
25836
  * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
25720
25837
  */
@@ -26929,6 +27046,13 @@ export type CustomElements = {
26929
27046
  *
26930
27047
  * Negative for the reason Code Block's is: a boolean attribute defaulting to
26931
27048
  * true could never be turned off from markup.
27049
+ *
27050
+ * **It does not reflect, where Code Block's does**, and the difference is what
27051
+ * the two sheets need. Code Block reserves the button's width with
27052
+ * `:host(:not([no-copy]))`, so the attribute has to be there for a consumer
27053
+ * who set the property. This button is positioned out of the flow and takes no
27054
+ * room, so nothing selects on it, and reflection exists so that a selector can
27055
+ * reach a value.
26932
27056
  * - `windowed`: Whether to draw only the rows in view.
26933
27057
  *
26934
27058
  * For a value of thousands of entries. Reflected, because the box it scrolls
@@ -27344,7 +27468,7 @@ export type CustomElements = {
27344
27468
  *
27345
27469
  * Events that will be emitted by the component.
27346
27470
  *
27347
- * - `helix-before-activate`: The section being read has changed, carrying its id as the value. Cancelable: refusing it takes the decision and nothing moves.
27471
+ * - `helix-activate`: The section being read has changed, carrying its id as the value. An announcement: it is read off where the page is scrolled to, so there is no decision here to take.
27348
27472
  *
27349
27473
  * ## Slots
27350
27474
  *
@@ -37839,6 +37963,15 @@ export type CustomElementsSolidJs = {
37839
37963
  *
37840
37964
  * A comma is therefore not available inside an option's value, which is the
37841
37965
  * listbox's contract and not this element's to change.
37966
+ *
37967
+ * **The list is told, and the field is not.** `aria-multiselectable` belongs
37968
+ * to `listbox`, `grid`, `tree` and `tablist`, and `combobox` dropped it in
37969
+ * ARIA 1.2; the list sets it on itself through `ElementInternals`, where a
37970
+ * reader on the field hears it through `aria-controls`. This element wrote it
37971
+ * onto its own `role="combobox"` input as well, which an audit reports as a
37972
+ * property the role does not support and no spec here ever asserted: the one
37973
+ * that covers this says in as many words that telling the list is what this
37974
+ * element is responsible for.
37842
37975
  * - `placeholder`: Text shown while nothing has been chosen.
37843
37976
  * - `remove-label`/`removeLabel`: What a tag's remove control is called, since the mark has no name.
37844
37977
  * - `suggest`: Whether the field finishes the word as it is typed.
@@ -38677,6 +38810,7 @@ export type CustomElementsSolidJs = {
38677
38810
  *
38678
38811
  * CSS variables available for styling the component.
38679
38812
  *
38813
+ * - `--data-table-cell-align`: The edge the column a cell sits under is set to, `start`, `center` or `end`, and unset under a column that sets none. Written by the component onto each cell it draws, read by the sheet that paints one; `helix-table` publishes `--table-cell-align` for the same attribute on the cells a consumer wrote, under its own family's name. (default: `undefined`)
38680
38814
  * - `--data-table-template`: The column track list this element worked out from the columns declared in it. Written by the component, read by the sheet that paints: a stylesheet takes it to lay the grid out, and setting it does nothing, because the component writes it inline on the very element that reads it and an inline declaration beats any sheet. `--data-table-columns` is the one to set. (default: `undefined`)
38681
38815
  *
38682
38816
  * ## CSS Parts
@@ -38697,7 +38831,7 @@ export type CustomElementsSolidJs = {
38697
38831
  * - `checkbox-mark`: The tick, or the dash while some rows are selected.
38698
38832
  * - `checkbox-mark-checked`: The mark while its box is checked, beside `checkbox-mark`.
38699
38833
  * - `checkbox-mark-indeterminate`: The dash while only some rows are selected, beside `checkbox-mark`.
38700
- * - `empty`: Shown when no rows match.
38834
+ * - `empty`: Shown when the result has nothing in it, whether it arrived empty or a filter emptied it. A result still on its way is `loading` instead, which wins over this.
38701
38835
  * - `footer`: The region below the grid.
38702
38836
  * - `head`: The row the column headings sit in. `display: contents`, so it takes no space.
38703
38837
  * - `loading`: Shown while the rows are still on their way.
@@ -39287,10 +39421,11 @@ export type CustomElementsSolidJs = {
39287
39421
  *
39288
39422
  * Component attributes and properties that can be applied to the element or by using JavaScript.
39289
39423
  *
39290
- * - `label`: What the value is, for the common case of plain text.
39424
+ * - `label`: What the value is called, for the common case of plain text.
39291
39425
  *
39292
39426
  * The fallback of the `label` slot, so slotted content replaces it rather than
39293
- * appearing beside it.
39427
+ * appearing beside it. The value itself is the default slot: it is the half
39428
+ * that varies and is often more than text.
39294
39429
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
39295
39430
  *
39296
39431
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -40159,6 +40294,7 @@ export type CustomElementsSolidJs = {
40159
40294
  *
40160
40295
  * These can be used to apply styling when a component is in a given state.
40161
40296
  *
40297
+ * - `drilled`: While a row's page is showing rather than the top one, so a frame around this can answer the depth it is at.
40162
40298
  * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
40163
40299
  */
40164
40300
  "helix-headless-drilldown": Partial<
@@ -41369,6 +41505,9 @@ export type CustomElementsSolidJs = {
41369
41505
  * Component attributes and properties that can be applied to the element or by using JavaScript.
41370
41506
  *
41371
41507
  * - `empty-text`/`emptyText`: Shown when the table has no readings in it.
41508
+ *
41509
+ * Never shown while the table cannot be read at all, which is a server render
41510
+ * and the hydrating one after it: see `sourceKnown`.
41372
41511
  * - `gap`: Space between cells, in CSS pixels, for the same reason `min-cell` is a
41373
41512
  * number.
41374
41513
  * - `min-cell`/`minCell`: The smallest a cell may get before the strip draws fewer of them, in CSS pixels.
@@ -41530,7 +41669,7 @@ export type CustomElementsSolidJs = {
41530
41669
  * Custom selectors for styling elements within the component.
41531
41670
  *
41532
41671
  * - `cell`: One reading.
41533
- * - `empty`: Shown when the table has no readings in it.
41672
+ * - `empty`: Shown when the table has no readings in it, and not before the table can be read at all: on a server, and while hydrating what one sent, there is no document to resolve `for` in and nothing is known yet.
41534
41673
  * - `end`: The trailing slot's box.
41535
41674
  * - `footer`: The three-slot row under the strip.
41536
41675
  * - `mark`: The invisible point the tooltip is anchored to.
@@ -43144,8 +43283,16 @@ export type CustomElementsSolidJs = {
43144
43283
  * a band is not a question of paint: a band is not placed against the trigger,
43145
43284
  * so the controller has to be told not to measure, and that decision is here
43146
43285
  * whatever the stylesheet says. Writing the width in both places would be one
43147
- * number in two languages, drifting the first time either moved. This sets
43148
- * `data-narrow` on the host and the stylesheet arranges itself off that.
43286
+ * number in two languages, drifting the first time either moved. This records
43287
+ * `:state(narrow)` on the host and the stylesheet arranges itself off that.
43288
+ *
43289
+ * **A custom state and never `data-narrow`, which is what it was.** The width
43290
+ * is read in `connectedCallback`, so on a phone this is true on the very first
43291
+ * update: an attribute written there is markup a consumer's server never sent,
43292
+ * which React reports as a mismatch and answers by rebuilding the subtree. The
43293
+ * narrow exception the server specs describe covers a mirror that can only
43294
+ * become true long after hydration, and a viewport measured before the first
43295
+ * paint is the opposite case. See `MixinControllerOpen` on `open`.
43149
43296
  * - `label`: The section's name, which names the default trigger and the panel.
43150
43297
  * - `open-on`/`openOn`: Whether hovering the trigger opens the panel, or only a press does.
43151
43298
  *
@@ -43245,6 +43392,7 @@ export type CustomElementsSolidJs = {
43245
43392
  *
43246
43393
  * These can be used to apply styling when a component is in a given state.
43247
43394
  *
43395
+ * - `narrow`: While the page is under `full-below`, so the panel is a band whether or not one was asked for.
43248
43396
  * - `open`: While the panel is open, which is when the trigger reads as current.
43249
43397
  * - `settled`: Set a frame after the first render. Transitions are held off until it is, so an element never animates its own arrival.
43250
43398
  */
@@ -44476,6 +44624,13 @@ export type CustomElementsSolidJs = {
44476
44624
  *
44477
44625
  * Negative for the reason Code Block's is: a boolean attribute defaulting to
44478
44626
  * true could never be turned off from markup.
44627
+ *
44628
+ * **It does not reflect, where Code Block's does**, and the difference is what
44629
+ * the two sheets need. Code Block reserves the button's width with
44630
+ * `:host(:not([no-copy]))`, so the attribute has to be there for a consumer
44631
+ * who set the property. This button is positioned out of the flow and takes no
44632
+ * room, so nothing selects on it, and reflection exists so that a selector can
44633
+ * reach a value.
44479
44634
  * - `windowed`: Whether to draw only the rows in view.
44480
44635
  *
44481
44636
  * For a value of thousands of entries. Reflected, because the box it scrolls
@@ -44896,7 +45051,7 @@ export type CustomElementsSolidJs = {
44896
45051
  *
44897
45052
  * Events that will be emitted by the component.
44898
45053
  *
44899
- * - `helix-before-activate`: The section being read has changed, carrying its id as the value. Cancelable: refusing it takes the decision and nothing moves.
45054
+ * - `helix-activate`: The section being read has changed, carrying its id as the value. An announcement: it is read off where the page is scrolled to, so there is no decision here to take.
44900
45055
  *
44901
45056
  * ## Slots
44902
45057
  *
@@ -52117,6 +52272,8 @@ export type CustomCssProperties = {
52117
52272
  "--color-picker-saturation"?: (string) | undefined;
52118
52273
  /** A color to paint: the current one on the sample, a preset's on each preset. */
52119
52274
  "--color-picker-swatch"?: (string) | undefined;
52275
+ /** The edge the column a cell sits under is set to, `start`, `center` or `end`, and unset under a column that sets none. Written by the component onto each cell it draws, read by the sheet that paints one; `helix-table` publishes `--table-cell-align` for the same attribute on the cells a consumer wrote, under its own family's name. */
52276
+ "--data-table-cell-align"?: (string) | undefined;
52120
52277
  /** The column track list this element worked out from the columns declared in it. Written by the component, read by the sheet that paints: a stylesheet takes it to lay the grid out, and setting it does nothing, because the component writes it inline on the very element that reads it and an inline declaration beats any sheet. `--data-table-columns` is the one to set. */
52121
52278
  "--data-table-template"?: (string) | undefined;
52122
52279
  /** How many month columns are drawn, capped at two. `--date-picker-columns` overrides it. */