@fusion.dev/helix-headless 0.180.1 → 0.181.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/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.0",
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.0",
53
+ "@fusion.dev/helix-icons": "0.181.0",
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.0",
58
+ "@fusion.dev/helix-testing": "0.181.0",
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;
@@ -48886,6 +48902,16 @@ export type CustomElements = {
48886
48902
  * `helix-before-change` and tells with `change`, and the `selection` part says
48887
48903
  * how many are selected, in `selection-label`.
48888
48904
  *
48905
+ * **`selection-shape="rectangle"` selects a rectangle of cells** under
48906
+ * `multiple`, as a spreadsheet selects a range: the cells between two corners
48907
+ * by row and by column, such as the same weekdays across three weeks with
48908
+ * `rows="7"`. Shift with a key that moves grows or shrinks it from the cell
48909
+ * last pressed, Shift with a click takes it to the cell clicked, and a click
48910
+ * with Ctrl or Command selects one cell or lets it go and starts the next
48911
+ * rectangle there. The rectangle is the same cells on a right-to-left page,
48912
+ * where the columns run from the right, a short last column adds only the
48913
+ * cells it has, and `value` lists the selected days in the table's order.
48914
+ *
48889
48915
  * **Under `selection-mode` the strip is a grid**, so the selection is state a
48890
48916
  * reader is told rather than words alone: each column of the strip is a `row`,
48891
48917
  * a week with `rows="7"`, and each cell a `gridcell` named by its row in the
@@ -48916,6 +48942,7 @@ export type CustomElements = {
48916
48942
  * | Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. |
48917
48943
  * | Enter, Space | Presses the cell, which sends `helix-reading-press`, and selects it or lets it go under `selection-mode`. |
48918
48944
  * | 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"`. |
48945
+ * | 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
48946
  * | Escape | Puts the cell's tooltip away. |
48920
48947
  *
48921
48948
  * ## Attributes & Properties
@@ -48962,6 +48989,9 @@ export type CustomElements = {
48962
48989
  * - `selection-mode`/`selectionMode`: How many cells a reader can select: `single` or `multiple`.
48963
48990
  *
48964
48991
  * Absent selects nothing, and a press or Space does what it did.
48992
+ * - `selection-shape`/`selectionShape`: What Shift takes in under `selection-mode="multiple"`: `linear`, every
48993
+ * cell between two in the table's order, or `rectangle`, the cells between
48994
+ * two corners by row and by column, as a spreadsheet selects a range.
48965
48995
  * - `strip-label`/`stripLabel`: The strip's name where the chart has none: no `aria-label`, `label`, or
48966
48996
  * table caption.
48967
48997
  * - `thresholds`: Lower bounds for the tone buckets, in the order the tones are given.
@@ -78645,6 +78675,16 @@ export type CustomElementsSolidJs = {
78645
78675
  * `helix-before-change` and tells with `change`, and the `selection` part says
78646
78676
  * how many are selected, in `selection-label`.
78647
78677
  *
78678
+ * **`selection-shape="rectangle"` selects a rectangle of cells** under
78679
+ * `multiple`, as a spreadsheet selects a range: the cells between two corners
78680
+ * by row and by column, such as the same weekdays across three weeks with
78681
+ * `rows="7"`. Shift with a key that moves grows or shrinks it from the cell
78682
+ * last pressed, Shift with a click takes it to the cell clicked, and a click
78683
+ * with Ctrl or Command selects one cell or lets it go and starts the next
78684
+ * rectangle there. The rectangle is the same cells on a right-to-left page,
78685
+ * where the columns run from the right, a short last column adds only the
78686
+ * cells it has, and `value` lists the selected days in the table's order.
78687
+ *
78648
78688
  * **Under `selection-mode` the strip is a grid**, so the selection is state a
78649
78689
  * reader is told rather than words alone: each column of the strip is a `row`,
78650
78690
  * a week with `rows="7"`, and each cell a `gridcell` named by its row in the
@@ -78675,6 +78715,7 @@ export type CustomElementsSolidJs = {
78675
78715
  * | Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. |
78676
78716
  * | Enter, Space | Presses the cell, which sends `helix-reading-press`, and selects it or lets it go under `selection-mode`. |
78677
78717
  * | 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"`. |
78718
+ * | 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
78719
  * | Escape | Puts the cell's tooltip away. |
78679
78720
  *
78680
78721
  * ## Attributes & Properties
@@ -78721,6 +78762,9 @@ export type CustomElementsSolidJs = {
78721
78762
  * - `selection-mode`/`selectionMode`: How many cells a reader can select: `single` or `multiple`.
78722
78763
  *
78723
78764
  * Absent selects nothing, and a press or Space does what it did.
78765
+ * - `selection-shape`/`selectionShape`: What Shift takes in under `selection-mode="multiple"`: `linear`, every
78766
+ * cell between two in the table's order, or `rectangle`, the cells between
78767
+ * two corners by row and by column, as a spreadsheet selects a range.
78724
78768
  * - `strip-label`/`stripLabel`: The strip's name where the chart has none: no `aria-label`, `label`, or
78725
78769
  * table caption.
78726
78770
  * - `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,