@fusion.dev/helix 0.111.0 → 0.111.2

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.
@@ -26439,6 +26439,18 @@
26439
26439
  "module": "src/checkbox/root/checkbox-root.ts"
26440
26440
  }
26441
26441
  },
26442
+ {
26443
+ "kind": "field",
26444
+ "name": "clicks",
26445
+ "privacy": "protected",
26446
+ "readonly": true,
26447
+ "default": "new HostClickController(this, () => this.partNamed('control'))",
26448
+ "description": "A click on the element itself, `click()` or a page's `<label for>`, toggles it.",
26449
+ "inheritedFrom": {
26450
+ "name": "HelixHeadlessCheckbox",
26451
+ "module": "src/checkbox/root/checkbox-root.ts"
26452
+ }
26453
+ },
26442
26454
  {
26443
26455
  "kind": "field",
26444
26456
  "name": "indeterminate",
@@ -99150,7 +99162,7 @@
99150
99162
  "text": "string"
99151
99163
  },
99152
99164
  "default": "''",
99153
- "description": "A shorter name for this choice, for where the row does not fit.\n\n`<option label>`'s own meaning: the text a chooser shows when it has less\nroom than the row does, which is what a select's closed trigger has. Empty\nmeans the row's own content, which is the common case and is why this is not\nsimply the accessible name.",
99165
+ "description": "A shorter name for this choice, for where the row does not fit.\n\n`<option label>`'s own meaning: the text a chooser shows when it has less\nroom than the row does, which is what a select's closed trigger has. Empty\nmeans the row's own content, which is the common case and is why this is not\nsimply the accessible name.\n\n**An option with a label and nothing in it shows the label**, as\n`<option label>` does: written the platform's way, a select listed a row of\nnothing for every choice.",
99154
99166
  "attribute": "label",
99155
99167
  "inheritedFrom": {
99156
99168
  "name": "HelixHeadlessOption",
@@ -99191,7 +99203,7 @@
99191
99203
  "type": {
99192
99204
  "text": "string"
99193
99205
  },
99194
- "description": "The option's text, which a listbox matches typed text against.\n\nRead from the rendered content rather than required as a property, because\nthe content is where a consumer naturally puts it and asking for both is\nasking for two things to disagree.\n\n**The default slot's content, never `this.textContent`.** An option holds\nthree slots: the words, plus `start` for an icon and `end` for a shortcut\nor a count. Neither of the latter two is what a reader searched for, and\n`textContent` runs both onto the end of it. Measured on a font picker whose\noptions carry a two-letter specimen in `end`: the field read\n`Noto Sans Linear BAg`, and typing `ag` matched 1,892 of 1,893 options,\nevery row containing the sample. An option with a keyboard shortcut in its\nend slot has the same fault and a worse one, every row carrying one matching\nevery letter of it.\n\nSix things read this: the collapsed field of Select and of Combobox, the\nlistbox's filter, Combobox's match against typed text, its inline\ncompletion, and the label on a chosen tag.\n\nA node goes to the default slot when it names no other, which is the rule\nthe platform applies at assignment. Asking the same question here rather\nthan a second one is what stops the two disagreeing. Text nodes are\nalways the default slot's and cannot say otherwise.\n\n**Text and elements, named rather than \"not an element\".** The filter read\n`!(node instanceof Element) || node.slot === ''`, which admits a comment,\nand `textContent` on a comment is the comment's own body. Every option Lit\nrenders carries one: a child binding is marked with `<!--?lit$1234$-->`, so\nan option written as `` html`<${option}>${size}</${option}>` `` read back as\n`?lit$090648746$25`. Measured in `pagination/footer`, where the trigger\npainted exactly that instead of `25`, on both twins.\n\nIt is worse than one wrong label, because of the six readers listed above:\nthe filter and Combobox's match compare against this string, so a marker in\nit is in every comparison too.",
99206
+ "description": "The option's text, which a listbox matches typed text against.\n\nRead from the rendered content rather than required as a property, because\nthe content is where a consumer naturally puts it and asking for both is\nasking for two things to disagree.\n\n**The default slot's content, never `this.textContent`.** An option holds\nthree slots: the words, plus `start` for an icon and `end` for a shortcut\nor a count. Neither of the latter two is what a reader searched for, and\n`textContent` runs both onto the end of it. Measured on a font picker whose\noptions carry a two-letter specimen in `end`: the field read\n`Noto Sans Linear BAg`, and typing `ag` matched 1,892 of 1,893 options,\nevery row containing the sample. An option with a keyboard shortcut in its\nend slot has the same fault and a worse one, every row carrying one matching\nevery letter of it.\n\nSix things read this: the collapsed field of Select and of Combobox, the\nlistbox's filter, Combobox's match against typed text, its inline\ncompletion, and the label on a chosen tag.\n\nA node goes to the default slot when it names no other, which is the rule\nthe platform applies at assignment. Asking the same question here rather\nthan a second one is what stops the two disagreeing. Text nodes are\nalways the default slot's and cannot say otherwise.\n\n**Text and elements, named rather than \"not an element\".** The filter read\n`!(node instanceof Element) || node.slot === ''`, which admits a comment,\nand `textContent` on a comment is the comment's own body. Every option Lit\nrenders carries one: a child binding is marked with `<!--?lit$1234$-->`, so\nan option written as `` html`<${option}>${size}</${option}>` `` read back as\n`?lit$090648746$25`. Measured in `pagination/footer`, where the trigger\npainted exactly that instead of `25`, on both twins.\n\nIt is worse than one wrong label, because of the six readers listed above:\nthe filter and Combobox's match compare against this string, so a marker in\nit is in every comparison too.\n\n**The `label` where the slot holds nothing**, which is what the row shows\nthen, so the six read the words a reader sees.",
99195
99207
  "readonly": true,
99196
99208
  "inheritedFrom": {
99197
99209
  "name": "HelixHeadlessOption",
@@ -99723,7 +99735,7 @@
99723
99735
  "text": "string"
99724
99736
  },
99725
99737
  "default": "''",
99726
- "description": "A shorter name for this choice, for where the row does not fit.\n\n`<option label>`'s own meaning: the text a chooser shows when it has less\nroom than the row does, which is what a select's closed trigger has. Empty\nmeans the row's own content, which is the common case and is why this is not\nsimply the accessible name.",
99738
+ "description": "A shorter name for this choice, for where the row does not fit.\n\n`<option label>`'s own meaning: the text a chooser shows when it has less\nroom than the row does, which is what a select's closed trigger has. Empty\nmeans the row's own content, which is the common case and is why this is not\nsimply the accessible name.\n\n**An option with a label and nothing in it shows the label**, as\n`<option label>` does: written the platform's way, a select listed a row of\nnothing for every choice.",
99727
99739
  "fieldName": "label",
99728
99740
  "inheritedFrom": {
99729
99741
  "name": "HelixHeadlessOption",
@@ -110819,6 +110831,18 @@
110819
110831
  "text": "select() => boolean"
110820
110832
  }
110821
110833
  },
110834
+ {
110835
+ "kind": "field",
110836
+ "name": "clicks",
110837
+ "privacy": "protected",
110838
+ "readonly": true,
110839
+ "default": "new HostClickController(this, () => this.partNamed('item'))",
110840
+ "description": "A click on the element itself, `click()` included, chooses it.",
110841
+ "inheritedFrom": {
110842
+ "name": "HelixHeadlessRadio",
110843
+ "module": "src/radio/root/radio-root.ts"
110844
+ }
110845
+ },
110822
110846
  {
110823
110847
  "kind": "field",
110824
110848
  "name": "defaultSelected",
@@ -127978,15 +128002,29 @@
127978
128002
  "declarations": [
127979
128003
  {
127980
128004
  "kind": "class",
127981
- "description": "Stats wrap onto a new line when space runs out, and each figure keeps its own\nwidth. Figures are read by comparing them, and equal columns would make a\nfour-digit number and a two-digit one look like the same quantity.",
128005
+ "description": "Stats wrap onto a new line when space runs out, and each figure keeps its own\nwidth. Figures are read by comparing them, and equal columns would make a\nfour-digit number and a two-digit one look like the same quantity.\n\nSet `columns` where the stats are a set to be read across, such as three\nfacts about one thing: they then share the row equally, their labels wrap\nwithin their own column, and the rule between them follows the rows.",
127982
128006
  "name": "HelixStatGroup",
127983
128007
  "cssProperties": [
128008
+ {
128009
+ "description": "An explicit track list while `columns` is set, such as one column below a width.",
128010
+ "name": "--stat-group-columns"
128011
+ },
127984
128012
  {
127985
128013
  "description": "Space between figures.",
127986
128014
  "name": "--stat-group-gap"
127987
128015
  }
127988
128016
  ],
127989
128017
  "members": [
128018
+ {
128019
+ "kind": "field",
128020
+ "name": "columns",
128021
+ "type": {
128022
+ "text": "number | undefined"
128023
+ },
128024
+ "description": "A fixed number of equal columns, from 2 to 6. Unset, the stats wrap as they fit.\n\n**Opted into, never the default.** Three stats whose labels ran to about\nforty characters broke two and one at 768 pixels, the third alone on a row\nwith its rule; and a count is what a set of facts read across wants, where\nfigures compared one against another keep their own widths.",
128025
+ "attribute": "columns",
128026
+ "reflects": true
128027
+ },
127990
128028
  {
127991
128029
  "kind": "field",
127992
128030
  "name": "divided",
@@ -128338,6 +128376,14 @@
128338
128376
  }
128339
128377
  ],
128340
128378
  "attributes": [
128379
+ {
128380
+ "name": "columns",
128381
+ "type": {
128382
+ "text": "number | undefined"
128383
+ },
128384
+ "description": "A fixed number of equal columns, from 2 to 6. Unset, the stats wrap as they fit.\n\n**Opted into, never the default.** Three stats whose labels ran to about\nforty characters broke two and one at 768 pixels, the third alone on a row\nwith its rule; and a count is what a set of facts read across wants, where\nfigures compared one against another keep their own widths.",
128385
+ "fieldName": "columns"
128386
+ },
128341
128387
  {
128342
128388
  "name": "divided",
128343
128389
  "type": {
@@ -130918,6 +130964,18 @@
130918
130964
  "module": "src/switch/root/switch-root.ts"
130919
130965
  }
130920
130966
  },
130967
+ {
130968
+ "kind": "field",
130969
+ "name": "clicks",
130970
+ "privacy": "protected",
130971
+ "readonly": true,
130972
+ "default": "new HostClickController(this, () => this.partNamed('control'))",
130973
+ "description": "A click on the element itself, `click()` or a page's `<label for>`, toggles it.",
130974
+ "inheritedFrom": {
130975
+ "name": "HelixHeadlessSwitch",
130976
+ "module": "src/switch/root/switch-root.ts"
130977
+ }
130978
+ },
130921
130979
  {
130922
130980
  "kind": "field",
130923
130981
  "name": "value",
@@ -6,6 +6,8 @@ export const styles = createSheet(`:host {
6
6
  --_canvas-card-inline-size: auto;
7
7
  --_canvas-card-block-size: auto;
8
8
 
9
+ --_heading-ink: var(--helix-color-foreground);
10
+
9
11
  --_canvas-card-tone: var(--helix-color-border);
10
12
  --_canvas-card-color: var(--canvas-node-color, var(--_canvas-card-tone));
11
13
 
@@ -4,6 +4,8 @@ export const styles = createSheet(`:host {
4
4
  --_card-inset: var(--card-padding, var(--helix-space-control));
5
5
 
6
6
  --_card-media: var(--card-media-size, 12rem);
7
+
8
+ --_heading-ink: var(--helix-color-foreground);
7
9
  background-color: var(--card-background-color, var(--helix-color-surface));
8
10
  border: var(--card-border-width, var(--helix-border-surface)) solid
9
11
  var(--card-border-color, var(--helix-color-border));
@@ -8,6 +8,7 @@ import { customElement, HelixElement } from '@fusion.dev/helix-core';
8
8
  import { html } from 'lit';
9
9
  import { property } from 'lit/decorators.js';
10
10
  import { styles } from './grid-root.css.js';
11
+ const UNINHERITED = '--grid-columns: initial; --_grid-template: initial;';
11
12
  let HelixGrid = class HelixGrid extends HelixElement {
12
13
  constructor() {
13
14
  super(...arguments);
@@ -22,8 +23,8 @@ let HelixGrid = class HelixGrid extends HelixElement {
22
23
  const min = this.min?.trim() ?? '';
23
24
  sheet.textContent =
24
25
  min !== '' && length.test(min)
25
- ? `:host { --_grid-template: repeat(auto-fit, minmax(min(${min}, 100%), 1fr)); }`
26
- : '';
26
+ ? `:host { ${UNINHERITED} --_grid-template: repeat(auto-fit, minmax(min(${min}, 100%), 1fr)); }`
27
+ : `:host { ${UNINHERITED} }`;
27
28
  }
28
29
  updated(changed) {
29
30
  super.updated(changed);
@@ -32,7 +33,7 @@ let HelixGrid = class HelixGrid extends HelixElement {
32
33
  }
33
34
  }
34
35
  render() {
35
- return html `<style id="template"></style>
36
+ return html `<style id="template">:host { --grid-columns: initial; --_grid-template: initial; }</style>
36
37
  <slot></slot>`;
37
38
  }
38
39
  static { this.styles = styles; }
@@ -6,6 +6,25 @@ flex-wrap: wrap;
6
6
  gap: var(--_stat-group-gap);
7
7
  }
8
8
 
9
+ :host([columns]) {
10
+ display: grid;
11
+ }
12
+ :host([columns="2"]) {
13
+ grid-template-columns: var(--stat-group-columns, repeat(2, minmax(0, 1fr)));
14
+ }
15
+ :host([columns="3"]) {
16
+ grid-template-columns: var(--stat-group-columns, repeat(3, minmax(0, 1fr)));
17
+ }
18
+ :host([columns="4"]) {
19
+ grid-template-columns: var(--stat-group-columns, repeat(4, minmax(0, 1fr)));
20
+ }
21
+ :host([columns="5"]) {
22
+ grid-template-columns: var(--stat-group-columns, repeat(5, minmax(0, 1fr)));
23
+ }
24
+ :host([columns="6"]) {
25
+ grid-template-columns: var(--stat-group-columns, repeat(6, minmax(0, 1fr)));
26
+ }
27
+
9
28
  :host([divided]) {
10
29
  column-gap: calc(var(--_stat-group-gap) * 2);
11
30
  overflow-x: clip;
@@ -8,14 +8,28 @@ import type { CSSResultGroup } from 'lit';
8
8
  * width. Figures are read by comparing them, and equal columns would make a
9
9
  * four-digit number and a two-digit one look like the same quantity.
10
10
  *
11
+ * Set `columns` where the stats are a set to be read across, such as three
12
+ * facts about one thing: they then share the row equally, their labels wrap
13
+ * within their own column, and the rule between them follows the rows.
14
+ *
11
15
  * @since 0.1.0
12
16
  * @status stable
13
17
  * @aliases Metrics, KPIs, Figures
14
18
  * @documentation https://fusion.dev/helix/components/stat
15
19
  *
20
+ * @cssproperty --stat-group-columns - An explicit track list while `columns` is set, such as one column below a width.
16
21
  * @cssproperty --stat-group-gap - Space between figures.
17
22
  */
18
23
  export declare class HelixStatGroup extends HelixHeadlessStatGroup {
24
+ /**
25
+ * A fixed number of equal columns, from 2 to 6. Unset, the stats wrap as they fit.
26
+ *
27
+ * **Opted into, never the default.** Three stats whose labels ran to about
28
+ * forty characters broke two and one at 768 pixels, the third alone on a row
29
+ * with its rule; and a count is what a set of facts read across wants, where
30
+ * figures compared one against another keep their own widths.
31
+ */
32
+ columns?: number;
19
33
  /**
20
34
  * Draws a rule between the figures, in addition to the space.
21
35
  */
@@ -15,6 +15,9 @@ let HelixStatGroup = class HelixStatGroup extends HelixHeadlessStatGroup {
15
15
  }
16
16
  static { this.styles = styles; }
17
17
  };
18
+ __decorate([
19
+ property({ reflect: true, type: Number })
20
+ ], HelixStatGroup.prototype, "columns", void 0);
18
21
  __decorate([
19
22
  property({ reflect: true, type: Boolean })
20
23
  ], HelixStatGroup.prototype, "divided", void 0);
@@ -2,6 +2,8 @@ import { createSheet } from '@fusion.dev/helix-core';
2
2
  export const styles = createSheet(`:host {
3
3
 
4
4
  --_step-inset: var(--helix-space-sm);
5
+
6
+ align-content: start;
5
7
  align-items: start;
6
8
  column-gap: var(--helix-space-2xs);
7
9
  counter-increment: helix-step;
@@ -94,6 +94,23 @@ letter-spacing: var(--helix-tracking-normal);
94
94
  line-height: var(--helix-leading-normal);
95
95
  }
96
96
 
97
+ :host(
98
+ :is(
99
+ [as="h1"],
100
+ [as="h2"],
101
+ [as="h3"],
102
+ [as="h4"],
103
+ [as="h5"],
104
+ [as="h6"],
105
+ [variant="display"],
106
+ [variant="heading"],
107
+ [variant="subheading"],
108
+ [variant="title"]
109
+ )
110
+ ) {
111
+ color: var(--_heading-ink, currentColor);
112
+ }
113
+
97
114
  [part="text"] {
98
115
  color: inherit;
99
116
  font: inherit;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix",
3
3
  "description": "Styled component tier. Extends the headless tier with token-driven presentation.",
4
- "version": "0.111.0",
4
+ "version": "0.111.2",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -51,13 +51,13 @@
51
51
  },
52
52
  "bugs": "https://github.com/project-fusion/fusion/issues",
53
53
  "dependencies": {
54
- "@fusion.dev/helix-core": "0.111.0",
55
- "@fusion.dev/helix-headless": "0.111.0",
56
- "@fusion.dev/helix-styles": "0.111.0"
54
+ "@fusion.dev/helix-core": "0.111.2",
55
+ "@fusion.dev/helix-headless": "0.111.2",
56
+ "@fusion.dev/helix-styles": "0.111.2"
57
57
  },
58
58
  "devDependencies": {
59
- "@fusion.dev/helix-cem": "0.111.0",
60
- "@fusion.dev/helix-testing": "0.111.0",
59
+ "@fusion.dev/helix-cem": "0.111.2",
60
+ "@fusion.dev/helix-testing": "0.111.2",
61
61
  "@fusion.dev/scripts": "0.0.0-dev",
62
62
  "@happy-dom/global-registrator": "^20.0.0",
63
63
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -16644,7 +16644,11 @@ string is not a fact a selector needs. */
16644
16644
  `<option label>`'s own meaning: the text a chooser shows when it has less
16645
16645
  room than the row does, which is what a select's closed trigger has. Empty
16646
16646
  means the row's own content, which is the common case and is why this is not
16647
- simply the accessible name. */
16647
+ simply the accessible name.
16648
+
16649
+ **An option with a label and nothing in it shows the label**, as
16650
+ `<option label>` does: written the platform's way, a select listed a row of
16651
+ nothing for every choice. */
16648
16652
  label?: (HelixOption["label"]) | undefined;
16649
16653
  /** Whether this choice is currently chosen.
16650
16654
 
@@ -16751,7 +16755,11 @@ string is not a fact a selector needs. */
16751
16755
  `<option label>`'s own meaning: the text a chooser shows when it has less
16752
16756
  room than the row does, which is what a select's closed trigger has. Empty
16753
16757
  means the row's own content, which is the common case and is why this is not
16754
- simply the accessible name. */
16758
+ simply the accessible name.
16759
+
16760
+ **An option with a label and nothing in it shows the label**, as
16761
+ `<option label>` does: written the platform's way, a select listed a row of
16762
+ nothing for every choice. */
16755
16763
  "prop:label"?: (HelixOption["label"]) | undefined;
16756
16764
  /** Whether this choice is currently chosen.
16757
16765
 
@@ -20992,6 +21000,13 @@ Reading gives where it is; writing declares it the consumer's, and
20992
21000
  };
20993
21001
 
20994
21002
  export type HelixStatGroupProps = {
21003
+ /** A fixed number of equal columns, from 2 to 6. Unset, the stats wrap as they fit.
21004
+
21005
+ **Opted into, never the default.** Three stats whose labels ran to about
21006
+ forty characters broke two and one at 768 pixels, the third alone on a row
21007
+ with its rule; and a count is what a set of facts read across wants, where
21008
+ figures compared one against another keep their own widths. */
21009
+ columns?: (HelixStatGroup["columns"]) | undefined;
20995
21010
  /** Draws a rule between the figures, in addition to the space. */
20996
21011
  divided?: (HelixStatGroup["divided"]) | undefined;
20997
21012
  /** Accessible name for the group. */
@@ -20999,6 +21014,13 @@ export type HelixStatGroupProps = {
20999
21014
  };
21000
21015
 
21001
21016
  export type HelixStatGroupSolidJsProps = {
21017
+ /** A fixed number of equal columns, from 2 to 6. Unset, the stats wrap as they fit.
21018
+
21019
+ **Opted into, never the default.** Three stats whose labels ran to about
21020
+ forty characters broke two and one at 768 pixels, the third alone on a row
21021
+ with its rule; and a count is what a set of facts read across wants, where
21022
+ figures compared one against another keep their own widths. */
21023
+ "prop:columns"?: (HelixStatGroup["columns"]) | undefined;
21002
21024
  /** Draws a rule between the figures, in addition to the space. */
21003
21025
  "prop:divided"?: (HelixStatGroup["divided"]) | undefined;
21004
21026
  /** Accessible name for the group. */
@@ -39493,6 +39515,10 @@ export type CustomElements = {
39493
39515
  * room than the row does, which is what a select's closed trigger has. Empty
39494
39516
  * means the row's own content, which is the common case and is why this is not
39495
39517
  * simply the accessible name.
39518
+ *
39519
+ * **An option with a label and nothing in it shows the label**, as
39520
+ * `<option label>` does: written the platform's way, a select listed a row of
39521
+ * nothing for every choice.
39496
39522
  * - `selected`: Whether this choice is currently chosen.
39497
39523
  *
39498
39524
  * Written by the listbox.
@@ -39557,7 +39583,10 @@ export type CustomElements = {
39557
39583
  *
39558
39584
  * It is worse than one wrong label, because of the six readers listed above:
39559
39585
  * the filter and Combobox's match compare against this string, so a marker in
39560
- * it is in every comparison too. (property only) (readonly)
39586
+ * it is in every comparison too.
39587
+ *
39588
+ * **The `label` where the slot holds nothing**, which is what the row shows
39589
+ * then, so the six read the words a reader sees. (property only) (readonly)
39561
39590
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
39562
39591
  *
39563
39592
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -43491,10 +43520,20 @@ export type CustomElements = {
43491
43520
  * width. Figures are read by comparing them, and equal columns would make a
43492
43521
  * four-digit number and a two-digit one look like the same quantity.
43493
43522
  *
43523
+ * Set `columns` where the stats are a set to be read across, such as three
43524
+ * facts about one thing: they then share the row equally, their labels wrap
43525
+ * within their own column, and the rule between them follows the rows.
43526
+ *
43494
43527
  * ## Attributes & Properties
43495
43528
  *
43496
43529
  * Component attributes and properties that can be applied to the element or by using JavaScript.
43497
43530
  *
43531
+ * - `columns`: A fixed number of equal columns, from 2 to 6. Unset, the stats wrap as they fit.
43532
+ *
43533
+ * **Opted into, never the default.** Three stats whose labels ran to about
43534
+ * forty characters broke two and one at 768 pixels, the third alone on a row
43535
+ * with its rule; and a count is what a set of facts read across wants, where
43536
+ * figures compared one against another keep their own widths.
43498
43537
  * - `divided`: Draws a rule between the figures, in addition to the space.
43499
43538
  * - `label`: Accessible name for the group.
43500
43539
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -43528,6 +43567,7 @@ export type CustomElements = {
43528
43567
  *
43529
43568
  * CSS variables available for styling the component.
43530
43569
  *
43570
+ * - `--stat-group-columns`: An explicit track list while `columns` is set, such as one column below a width. (default: `undefined`)
43531
43571
  * - `--stat-group-gap`: Space between figures. (default: `undefined`)
43532
43572
  *
43533
43573
  * ## CSS States
@@ -61516,6 +61556,10 @@ export type CustomElementsSolidJs = {
61516
61556
  * room than the row does, which is what a select's closed trigger has. Empty
61517
61557
  * means the row's own content, which is the common case and is why this is not
61518
61558
  * simply the accessible name.
61559
+ *
61560
+ * **An option with a label and nothing in it shows the label**, as
61561
+ * `<option label>` does: written the platform's way, a select listed a row of
61562
+ * nothing for every choice.
61519
61563
  * - `selected`: Whether this choice is currently chosen.
61520
61564
  *
61521
61565
  * Written by the listbox.
@@ -61580,7 +61624,10 @@ export type CustomElementsSolidJs = {
61580
61624
  *
61581
61625
  * It is worse than one wrong label, because of the six readers listed above:
61582
61626
  * the filter and Combobox's match compare against this string, so a marker in
61583
- * it is in every comparison too. (property only) (readonly)
61627
+ * it is in every comparison too.
61628
+ *
61629
+ * **The `label` where the slot holds nothing**, which is what the row shows
61630
+ * then, so the six read the words a reader sees. (property only) (readonly)
61584
61631
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
61585
61632
  *
61586
61633
  * **Named `whenSettled` because `settled` is taken four times over**, by
@@ -65607,10 +65654,20 @@ export type CustomElementsSolidJs = {
65607
65654
  * width. Figures are read by comparing them, and equal columns would make a
65608
65655
  * four-digit number and a two-digit one look like the same quantity.
65609
65656
  *
65657
+ * Set `columns` where the stats are a set to be read across, such as three
65658
+ * facts about one thing: they then share the row equally, their labels wrap
65659
+ * within their own column, and the rule between them follows the rows.
65660
+ *
65610
65661
  * ## Attributes & Properties
65611
65662
  *
65612
65663
  * Component attributes and properties that can be applied to the element or by using JavaScript.
65613
65664
  *
65665
+ * - `columns`: A fixed number of equal columns, from 2 to 6. Unset, the stats wrap as they fit.
65666
+ *
65667
+ * **Opted into, never the default.** Three stats whose labels ran to about
65668
+ * forty characters broke two and one at 768 pixels, the third alone on a row
65669
+ * with its rule; and a count is what a set of facts read across wants, where
65670
+ * figures compared one against another keep their own widths.
65614
65671
  * - `divided`: Draws a rule between the figures, in addition to the space.
65615
65672
  * - `label`: Accessible name for the group.
65616
65673
  * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
@@ -65644,6 +65701,7 @@ export type CustomElementsSolidJs = {
65644
65701
  *
65645
65702
  * CSS variables available for styling the component.
65646
65703
  *
65704
+ * - `--stat-group-columns`: An explicit track list while `columns` is set, such as one column below a width. (default: `undefined`)
65647
65705
  * - `--stat-group-gap`: Space between figures. (default: `undefined`)
65648
65706
  *
65649
65707
  * ## CSS States
@@ -71162,6 +71220,8 @@ export type CustomCssProperties = {
71162
71220
  "--splitter-corner-at"?: (string) | undefined;
71163
71221
  /** Where the divider sits, as a percentage of the box. */
71164
71222
  "--splitter-position"?: (string) | undefined;
71223
+ /** An explicit track list while `columns` is set, such as one column below a width. */
71224
+ "--stat-group-columns"?: (string) | undefined;
71165
71225
  /** Space between figures. */
71166
71226
  "--stat-group-gap"?: (string) | undefined;
71167
71227
  /** Size of the figure. */
package/types/vue.d.ts CHANGED
@@ -8572,7 +8572,11 @@ string is not a fact a selector needs. */
8572
8572
  `<option label>`'s own meaning: the text a chooser shows when it has less
8573
8573
  room than the row does, which is what a select's closed trigger has. Empty
8574
8574
  means the row's own content, which is the common case and is why this is not
8575
- simply the accessible name. */
8575
+ simply the accessible name.
8576
+
8577
+ **An option with a label and nothing in it shows the label**, as
8578
+ `<option label>` does: written the platform's way, a select listed a row of
8579
+ nothing for every choice. */
8576
8580
  label?: (HelixOption["label"]) | undefined;
8577
8581
  /** Whether this choice is currently chosen.
8578
8582
 
@@ -10758,6 +10762,13 @@ export type HelixSplitterVueEvents = {
10758
10762
  };
10759
10763
 
10760
10764
  export type HelixStatGroupVueProps = {
10765
+ /** A fixed number of equal columns, from 2 to 6. Unset, the stats wrap as they fit.
10766
+
10767
+ **Opted into, never the default.** Three stats whose labels ran to about
10768
+ forty characters broke two and one at 768 pixels, the third alone on a row
10769
+ with its rule; and a count is what a set of facts read across wants, where
10770
+ figures compared one against another keep their own widths. */
10771
+ columns?: (HelixStatGroup["columns"]) | undefined;
10761
10772
  /** Draws a rule between the figures, in addition to the space. */
10762
10773
  divided?: (HelixStatGroup["divided"]) | undefined;
10763
10774
  /** Accessible name for the group. */
@@ -14406,6 +14417,8 @@ export type CustomCssProperties = {
14406
14417
  "--splitter-corner-at"?: (string) | undefined;
14407
14418
  /** Where the divider sits, as a percentage of the box. */
14408
14419
  "--splitter-position"?: (string) | undefined;
14420
+ /** An explicit track list while `columns` is set, such as one column below a width. */
14421
+ "--stat-group-columns"?: (string) | undefined;
14409
14422
  /** Space between figures. */
14410
14423
  "--stat-group-gap"?: (string) | undefined;
14411
14424
  /** Size of the figure. */
@@ -15296,7 +15309,7 @@ export interface WcToolkitVueGlobalComponents {
15296
15309
  HelixSplitterVueProps,
15297
15310
  HelixSplitterVueEvents
15298
15311
  >;
15299
- /** Stats wrap onto a new line when space runs out, and each figure keeps its own width. Figures are read by comparing them, and equal columns would make a four-digit number and a two-digit one look like the same quantity. */
15312
+ /** Stats wrap onto a new line when space runs out, and each figure keeps its own width. Figures are read by comparing them, and equal columns would make a four-digit number and a two-digit one look like the same quantity. Set 'columns' where the stats are a set to be read across, such as three facts about one thing: they then share the row equally, their labels wrap within their own column, and the rule between them follows the rows. */
15300
15313
  "helix-stat-group": DefineCustomElement<
15301
15314
  HelixStatGroup,
15302
15315
  HelixStatGroupVueProps,