@fusion.dev/helix-headless 0.180.1 → 0.181.1

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/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@fusion.dev/helix-headless",
3
3
  "description": "Headless component tier. Structure, accessibility, state, and form participation. No styling.",
4
- "version": "0.180.1",
4
+ "version": "0.181.1",
5
5
  "license": "MIT",
6
6
  "author": "Ross Sheppard <ross.sheppard@fusion.dev>",
7
7
  "repository": {
@@ -49,13 +49,13 @@
49
49
  },
50
50
  "bugs": "https://github.com/project-fusion/fusion/issues",
51
51
  "dependencies": {
52
- "@fusion.dev/helix-core": "0.180.1",
53
- "@fusion.dev/helix-icons": "0.180.1",
52
+ "@fusion.dev/helix-core": "0.181.1",
53
+ "@fusion.dev/helix-icons": "0.181.1",
54
54
  "uqr": "^0.1.3"
55
55
  },
56
56
  "devDependencies": {
57
- "@fusion.dev/helix-cem": "0.180.1",
58
- "@fusion.dev/helix-testing": "0.180.1",
57
+ "@fusion.dev/helix-cem": "0.181.1",
58
+ "@fusion.dev/helix-testing": "0.181.1",
59
59
  "@fusion.dev/scripts": "0.0.0-dev",
60
60
  "@happy-dom/global-registrator": "^20.14.5",
61
61
  "@lit-labs/ssr": "^4.1.0",
package/types/jsx.d.ts CHANGED
@@ -15784,6 +15784,14 @@ Absent selects nothing, and a press or Space does what it did. */
15784
15784
 
15785
15785
  Absent selects nothing, and a press or Space does what it did. */
15786
15786
  selectionMode?: (HelixHeadlessHeatmap["selectionMode"]) | undefined;
15787
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
15788
+ cell between two in the table's order, or `rectangle`, the cells between
15789
+ two corners by row and by column, as a spreadsheet selects a range. */
15790
+ "selection-shape"?: (HelixHeadlessHeatmap["selectionShape"]) | undefined;
15791
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
15792
+ cell between two in the table's order, or `rectangle`, the cells between
15793
+ two corners by row and by column, as a spreadsheet selects a range. */
15794
+ selectionShape?: (HelixHeadlessHeatmap["selectionShape"]) | undefined;
15787
15795
  /** The strip's name where the chart has none: no `aria-label`, `label`, or
15788
15796
  table caption. */
15789
15797
  "strip-label"?: (HelixHeadlessHeatmap["stripLabel"]) | undefined;
@@ -16004,6 +16012,14 @@ Absent selects nothing, and a press or Space does what it did. */
16004
16012
 
16005
16013
  Absent selects nothing, and a press or Space does what it did. */
16006
16014
  "prop:selectionMode"?: (HelixHeadlessHeatmap["selectionMode"]) | undefined;
16015
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
16016
+ cell between two in the table's order, or `rectangle`, the cells between
16017
+ two corners by row and by column, as a spreadsheet selects a range. */
16018
+ "attr:selection-shape"?: (HelixHeadlessHeatmap["selectionShape"]) | undefined;
16019
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
16020
+ cell between two in the table's order, or `rectangle`, the cells between
16021
+ two corners by row and by column, as a spreadsheet selects a range. */
16022
+ "prop:selectionShape"?: (HelixHeadlessHeatmap["selectionShape"]) | undefined;
16007
16023
  /** The strip's name where the chart has none: no `aria-label`, `label`, or
16008
16024
  table caption. */
16009
16025
  "attr:strip-label"?: (HelixHeadlessHeatmap["stripLabel"]) | undefined;
@@ -38839,7 +38855,8 @@ export type CustomElements = {
38839
38855
  *
38840
38856
  * - `axis`: The numbers of one scale: the primary under `value-axis`, and both when `secondary` splits the chart into two scales.
38841
38857
  * - `band`: The category band under the pointer.
38842
- * - `bar`: One column.
38858
+ * - `bar`: One column. Under `stacked`, one segment of a category's column.
38859
+ * - `bar-end`: Under `stacked`, the segment at a column's far end: the last positive segment above zero and the last negative one below it. Its `data-end` is `positive` or `negative`. A blank or a zero segment is never the end. Set together with `bar`.
38843
38860
  * - `bar-wash-end`: The far stop of a bar's gradient, where one is used.
38844
38861
  * - `bar-wash-start`: The stop of a bar's gradient at its base.
38845
38862
  * - `baseline`: The line the columns stand on.
@@ -48886,6 +48903,16 @@ export type CustomElements = {
48886
48903
  * `helix-before-change` and tells with `change`, and the `selection` part says
48887
48904
  * how many are selected, in `selection-label`.
48888
48905
  *
48906
+ * **`selection-shape="rectangle"` selects a rectangle of cells** under
48907
+ * `multiple`, as a spreadsheet selects a range: the cells between two corners
48908
+ * by row and by column, such as the same weekdays across three weeks with
48909
+ * `rows="7"`. Shift with a key that moves grows or shrinks it from the cell
48910
+ * last pressed, Shift with a click takes it to the cell clicked, and a click
48911
+ * with Ctrl or Command selects one cell or lets it go and starts the next
48912
+ * rectangle there. The rectangle is the same cells on a right-to-left page,
48913
+ * where the columns run from the right, a short last column adds only the
48914
+ * cells it has, and `value` lists the selected days in the table's order.
48915
+ *
48889
48916
  * **Under `selection-mode` the strip is a grid**, so the selection is state a
48890
48917
  * reader is told rather than words alone: each column of the strip is a `row`,
48891
48918
  * a week with `rows="7"`, and each cell a `gridcell` named by its row in the
@@ -48916,6 +48943,7 @@ export type CustomElements = {
48916
48943
  * | Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. |
48917
48944
  * | Enter, Space | Presses the cell, which sends `helix-reading-press`, and selects it or lets it go under `selection-mode`. |
48918
48945
  * | Shift with an arrow, Home, End, Page Up or Page Down | Selects every cell from the last one pressed to where the key went, under `selection-mode="multiple"`. |
48946
+ * | Shift with an arrow, Home, End, Page Up or Page Down, with `selection-shape="rectangle"` | Grows or shrinks the rectangle from the last cell pressed to where the key went, in rows and columns, under `selection-mode="multiple"`. |
48919
48947
  * | Escape | Puts the cell's tooltip away. |
48920
48948
  *
48921
48949
  * ## Attributes & Properties
@@ -48962,6 +48990,9 @@ export type CustomElements = {
48962
48990
  * - `selection-mode`/`selectionMode`: How many cells a reader can select: `single` or `multiple`.
48963
48991
  *
48964
48992
  * Absent selects nothing, and a press or Space does what it did.
48993
+ * - `selection-shape`/`selectionShape`: What Shift takes in under `selection-mode="multiple"`: `linear`, every
48994
+ * cell between two in the table's order, or `rectangle`, the cells between
48995
+ * two corners by row and by column, as a spreadsheet selects a range.
48965
48996
  * - `strip-label`/`stripLabel`: The strip's name where the chart has none: no `aria-label`, `label`, or
48966
48997
  * table caption.
48967
48998
  * - `thresholds`: Lower bounds for the tone buckets, in the order the tones are given.
@@ -68512,7 +68543,8 @@ export type CustomElementsSolidJs = {
68512
68543
  *
68513
68544
  * - `axis`: The numbers of one scale: the primary under `value-axis`, and both when `secondary` splits the chart into two scales.
68514
68545
  * - `band`: The category band under the pointer.
68515
- * - `bar`: One column.
68546
+ * - `bar`: One column. Under `stacked`, one segment of a category's column.
68547
+ * - `bar-end`: Under `stacked`, the segment at a column's far end: the last positive segment above zero and the last negative one below it. Its `data-end` is `positive` or `negative`. A blank or a zero segment is never the end. Set together with `bar`.
68516
68548
  * - `bar-wash-end`: The far stop of a bar's gradient, where one is used.
68517
68549
  * - `bar-wash-start`: The stop of a bar's gradient at its base.
68518
68550
  * - `baseline`: The line the columns stand on.
@@ -78645,6 +78677,16 @@ export type CustomElementsSolidJs = {
78645
78677
  * `helix-before-change` and tells with `change`, and the `selection` part says
78646
78678
  * how many are selected, in `selection-label`.
78647
78679
  *
78680
+ * **`selection-shape="rectangle"` selects a rectangle of cells** under
78681
+ * `multiple`, as a spreadsheet selects a range: the cells between two corners
78682
+ * by row and by column, such as the same weekdays across three weeks with
78683
+ * `rows="7"`. Shift with a key that moves grows or shrinks it from the cell
78684
+ * last pressed, Shift with a click takes it to the cell clicked, and a click
78685
+ * with Ctrl or Command selects one cell or lets it go and starts the next
78686
+ * rectangle there. The rectangle is the same cells on a right-to-left page,
78687
+ * where the columns run from the right, a short last column adds only the
78688
+ * cells it has, and `value` lists the selected days in the table's order.
78689
+ *
78648
78690
  * **Under `selection-mode` the strip is a grid**, so the selection is state a
78649
78691
  * reader is told rather than words alone: each column of the strip is a `row`,
78650
78692
  * a week with `rows="7"`, and each cell a `gridcell` named by its row in the
@@ -78675,6 +78717,7 @@ export type CustomElementsSolidJs = {
78675
78717
  * | Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. |
78676
78718
  * | Enter, Space | Presses the cell, which sends `helix-reading-press`, and selects it or lets it go under `selection-mode`. |
78677
78719
  * | Shift with an arrow, Home, End, Page Up or Page Down | Selects every cell from the last one pressed to where the key went, under `selection-mode="multiple"`. |
78720
+ * | Shift with an arrow, Home, End, Page Up or Page Down, with `selection-shape="rectangle"` | Grows or shrinks the rectangle from the last cell pressed to where the key went, in rows and columns, under `selection-mode="multiple"`. |
78678
78721
  * | Escape | Puts the cell's tooltip away. |
78679
78722
  *
78680
78723
  * ## Attributes & Properties
@@ -78721,6 +78764,9 @@ export type CustomElementsSolidJs = {
78721
78764
  * - `selection-mode`/`selectionMode`: How many cells a reader can select: `single` or `multiple`.
78722
78765
  *
78723
78766
  * Absent selects nothing, and a press or Space does what it did.
78767
+ * - `selection-shape`/`selectionShape`: What Shift takes in under `selection-mode="multiple"`: `linear`, every
78768
+ * cell between two in the table's order, or `rectangle`, the cells between
78769
+ * two corners by row and by column, as a spreadsheet selects a range.
78724
78770
  * - `strip-label`/`stripLabel`: The strip's name where the chart has none: no `aria-label`, `label`, or
78725
78771
  * table caption.
78726
78772
  * - `thresholds`: Lower bounds for the tone buckets, in the order the tones are given.
package/types/vue.d.ts CHANGED
@@ -8116,6 +8116,14 @@ Absent selects nothing, and a press or Space does what it did. */
8116
8116
 
8117
8117
  Absent selects nothing, and a press or Space does what it did. */
8118
8118
  selectionMode?: (HelixHeadlessHeatmap["selectionMode"]) | undefined;
8119
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
8120
+ cell between two in the table's order, or `rectangle`, the cells between
8121
+ two corners by row and by column, as a spreadsheet selects a range. */
8122
+ "selection-shape"?: (HelixHeadlessHeatmap["selectionShape"]) | undefined;
8123
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
8124
+ cell between two in the table's order, or `rectangle`, the cells between
8125
+ two corners by row and by column, as a spreadsheet selects a range. */
8126
+ selectionShape?: (HelixHeadlessHeatmap["selectionShape"]) | undefined;
8119
8127
  /** The strip's name where the chart has none: no `aria-label`, `label`, or
8120
8128
  table caption. */
8121
8129
  "strip-label"?: (HelixHeadlessHeatmap["stripLabel"]) | undefined;
@@ -19576,7 +19584,7 @@ export interface WcToolkitVueGlobalComponents {
19576
19584
  HelixHeadlessGraphVueProps,
19577
19585
  HelixHeadlessGraphVueEvents
19578
19586
  >;
19579
- /** A grid of cells, each colored by a tone. 'rows="1"' makes a status strip, and 'rows="7"' makes a contribution graph. GitHub's contribution graph uses five discrete levels, which a set of tones covers. Color in a heatmap is per cell. In every other Helix chart, color is per series, so ninety differently colored cells would need ninety series. **The data is a real '<table>' named by 'for'**, as in every Helix chart, and the table is the accessible representation. Hide it with 'data-hidden-visually', and screen readers still read it. A cell takes its tone from its own 'data-tone', or from 'thresholds' and 'tones' applied to its value. 'data-tone' wins, so when you already know a day was degraded, you can set the tone directly. **The headless tier does not resolve tone names.** A tone named 'success' writes '--heatmap-tone: var(--heatmap-tone-success)', and the styled tier or your own stylesheet defines that property. The headless tier does not use 'var(--helix-color-*)'. **The strip is read by key.** It takes focus once it has cells. The up and down arrows move a cell, the left and right arrows move a column, which is a week with 'rows="7"', and Home and End go to the first and the last. The tooltip follows, the 'live' part says the cell's row in words, and Escape puts the tooltip away. PageUp and PageDown move a month, to the same day, where each row's header carries its date as a '<time datetime>', and four columns otherwise, which is four weeks with 'rows="7"'. **The strip describes itself.** The 'overview' part says the busiest reading and the total of the readings drawn, "Busiest: 11 Jun, 12; Total 84", and the strip is described by it, as every chart is by its summary. Hide it visually. The 'summary' slot is still yours, for words of your own. **'selection-mode' lets a reader select cells**: 'single' one at a time and 'multiple' any number. Space, Enter or a press selects the cell the keys or the pointer rest on, or lets it go, and under 'multiple' Shift with an arrow, Home, End, PageUp or PageDown takes in every cell from the last one pressed to where the key went. 'value' holds the selected days, separated by commas: each by its row's '<time datetime>', such as '2026-06-11', or by its row's name where the row carries no date. A change asks with 'helix-before-change' and tells with 'change', and the 'selection' part says how many are selected, in 'selection-label'. **Under 'selection-mode' the strip is a grid**, so the selection is state a reader is told rather than words alone: each column of the strip is a 'row', a week with 'rows="7"', and each cell a 'gridcell' named by its row in the table and carrying 'aria-selected'. The strip says 'aria-multiselectable' under 'multiple' and points at the cell the keys rest on with 'aria-activedescendant', so a screen reader reads that cell, and the 'live' part stays quiet. Without 'selection-mode' nothing is selectable, and the strip is an application with the readout, as every chart's plot is. **Readings are sent as every chart sends them.** 'helix-reading-change' says each move of the reading, by pointer, tap or key, and 'helix-reading-press' a reading clicked, tapped, or pressed with Enter or Space, each with the row of the table in 'index'. **Nothing to draw.** A table with no readings shows 'empty-text', "No readings", under the strip, and 'loading' shows 'loading-text' there until readings arrive. The 'empty' and 'loading' slots take markup in place of either, as on every chart. **Keyboard.** The strip is one tab stop once it has cells. | Key | What it does | |---|---| | Tab | Moves focus to the strip and shows the first cell. | | Down, Up | Moves to the next or the previous cell. | | Right, Left | Moves a column on or back, a week with 'rows="7"'. On a right-to-left page, Left moves on. | | Home, End | Moves to the first or the last cell. | | Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. | | Enter, Space | Presses the cell, which sends 'helix-reading-press', and selects it or lets it go under 'selection-mode'. | | Shift with an arrow, Home, End, Page Up or Page Down | Selects every cell from the last one pressed to where the key went, under 'selection-mode="multiple"'. | | Escape | Puts the cell's tooltip away. | */
19587
+ /** A grid of cells, each colored by a tone. 'rows="1"' makes a status strip, and 'rows="7"' makes a contribution graph. GitHub's contribution graph uses five discrete levels, which a set of tones covers. Color in a heatmap is per cell. In every other Helix chart, color is per series, so ninety differently colored cells would need ninety series. **The data is a real '<table>' named by 'for'**, as in every Helix chart, and the table is the accessible representation. Hide it with 'data-hidden-visually', and screen readers still read it. A cell takes its tone from its own 'data-tone', or from 'thresholds' and 'tones' applied to its value. 'data-tone' wins, so when you already know a day was degraded, you can set the tone directly. **The headless tier does not resolve tone names.** A tone named 'success' writes '--heatmap-tone: var(--heatmap-tone-success)', and the styled tier or your own stylesheet defines that property. The headless tier does not use 'var(--helix-color-*)'. **The strip is read by key.** It takes focus once it has cells. The up and down arrows move a cell, the left and right arrows move a column, which is a week with 'rows="7"', and Home and End go to the first and the last. The tooltip follows, the 'live' part says the cell's row in words, and Escape puts the tooltip away. PageUp and PageDown move a month, to the same day, where each row's header carries its date as a '<time datetime>', and four columns otherwise, which is four weeks with 'rows="7"'. **The strip describes itself.** The 'overview' part says the busiest reading and the total of the readings drawn, "Busiest: 11 Jun, 12; Total 84", and the strip is described by it, as every chart is by its summary. Hide it visually. The 'summary' slot is still yours, for words of your own. **'selection-mode' lets a reader select cells**: 'single' one at a time and 'multiple' any number. Space, Enter or a press selects the cell the keys or the pointer rest on, or lets it go, and under 'multiple' Shift with an arrow, Home, End, PageUp or PageDown takes in every cell from the last one pressed to where the key went. 'value' holds the selected days, separated by commas: each by its row's '<time datetime>', such as '2026-06-11', or by its row's name where the row carries no date. A change asks with 'helix-before-change' and tells with 'change', and the 'selection' part says how many are selected, in 'selection-label'. **'selection-shape="rectangle"' selects a rectangle of cells** under 'multiple', as a spreadsheet selects a range: the cells between two corners by row and by column, such as the same weekdays across three weeks with 'rows="7"'. Shift with a key that moves grows or shrinks it from the cell last pressed, Shift with a click takes it to the cell clicked, and a click with Ctrl or Command selects one cell or lets it go and starts the next rectangle there. The rectangle is the same cells on a right-to-left page, where the columns run from the right, a short last column adds only the cells it has, and 'value' lists the selected days in the table's order. **Under 'selection-mode' the strip is a grid**, so the selection is state a reader is told rather than words alone: each column of the strip is a 'row', a week with 'rows="7"', and each cell a 'gridcell' named by its row in the table and carrying 'aria-selected'. The strip says 'aria-multiselectable' under 'multiple' and points at the cell the keys rest on with 'aria-activedescendant', so a screen reader reads that cell, and the 'live' part stays quiet. Without 'selection-mode' nothing is selectable, and the strip is an application with the readout, as every chart's plot is. **Readings are sent as every chart sends them.** 'helix-reading-change' says each move of the reading, by pointer, tap or key, and 'helix-reading-press' a reading clicked, tapped, or pressed with Enter or Space, each with the row of the table in 'index'. **Nothing to draw.** A table with no readings shows 'empty-text', "No readings", under the strip, and 'loading' shows 'loading-text' there until readings arrive. The 'empty' and 'loading' slots take markup in place of either, as on every chart. **Keyboard.** The strip is one tab stop once it has cells. | Key | What it does | |---|---| | Tab | Moves focus to the strip and shows the first cell. | | Down, Up | Moves to the next or the previous cell. | | Right, Left | Moves a column on or back, a week with 'rows="7"'. On a right-to-left page, Left moves on. | | Home, End | Moves to the first or the last cell. | | Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. | | Enter, Space | Presses the cell, which sends 'helix-reading-press', and selects it or lets it go under 'selection-mode'. | | Shift with an arrow, Home, End, Page Up or Page Down | Selects every cell from the last one pressed to where the key went, under 'selection-mode="multiple"'. | | Shift with an arrow, Home, End, Page Up or Page Down, with 'selection-shape="rectangle"' | Grows or shrinks the rectangle from the last cell pressed to where the key went, in rows and columns, under 'selection-mode="multiple"'. | | Escape | Puts the cell's tooltip away. | */
19580
19588
  "helix-headless-heatmap": DefineCustomElement<
19581
19589
  HelixHeadlessHeatmap,
19582
19590
  HelixHeadlessHeatmapVueProps,