@fusion.dev/helix 0.185.0 → 0.186.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/types/jsx.d.ts CHANGED
@@ -107,6 +107,7 @@ import type {
107
107
  HelixIconButton,
108
108
  HelixImage,
109
109
  HelixInput,
110
+ HelixIsometricHeatmap,
110
111
  HelixKbd,
111
112
  HelixLegend,
112
113
  HelixLightbox,
@@ -18974,10 +18975,12 @@ disagreeing with its own name for every reader who meant the left. */
18974
18975
  /** The name of the icon in the Helix set.
18975
18976
 
18976
18977
  **A lookup, and the reason both this and `icon` exist.** A name is a string,
18977
- so it is what markup can carry, and resolving one means an index that no
18978
- bundler can shake. The family's entry indexes a small set, `icon/all`
18979
- indexes the whole set at 15 kB, and `icon/root` indexes nothing, for a
18980
- page that registers the glyphs it names or hands over the value instead.
18978
+ so it is what markup can carry, and resolving one means an index of the
18979
+ whole set that no bundler can shake: 15 kB for a consumer who renders one
18980
+ mark. An attribute is the only thing an HTML author can write, and that is
18981
+ worth the index; a consumer who would rather not pay it imports the
18982
+ element from `icon/root` and registers the glyphs it names, or hands over
18983
+ the value instead.
18981
18984
 
18982
18985
  A name written `prefix:name` asks the library registered under that
18983
18986
  prefix. */
@@ -19046,10 +19049,12 @@ disagreeing with its own name for every reader who meant the left. */
19046
19049
  /** The name of the icon in the Helix set.
19047
19050
 
19048
19051
  **A lookup, and the reason both this and `icon` exist.** A name is a string,
19049
- so it is what markup can carry, and resolving one means an index that no
19050
- bundler can shake. The family's entry indexes a small set, `icon/all`
19051
- indexes the whole set at 15 kB, and `icon/root` indexes nothing, for a
19052
- page that registers the glyphs it names or hands over the value instead.
19052
+ so it is what markup can carry, and resolving one means an index of the
19053
+ whole set that no bundler can shake: 15 kB for a consumer who renders one
19054
+ mark. An attribute is the only thing an HTML author can write, and that is
19055
+ worth the index; a consumer who would rather not pay it imports the
19056
+ element from `icon/root` and registers the glyphs it names, or hands over
19057
+ the value instead.
19053
19058
 
19054
19059
  A name written `prefix:name` asks the library registered under that
19055
19060
  prefix. */
@@ -19809,6 +19814,494 @@ invalid, and `true`, `null`, or nothing to accept the value. */
19809
19814
  textContent?: (string | number) | undefined;
19810
19815
  };
19811
19816
 
19817
+ /** `HelixIsometricHeatmap` component event */
19818
+ export type HelixIsometricHeatmapElementEvent<E = Event> = TypedEvent<
19819
+ HelixIsometricHeatmap,
19820
+ E
19821
+ >;
19822
+ /** `helix-before-change` event type */
19823
+ export type HelixIsometricHeatmapHelixBeforeChangeElementEvent =
19824
+ HelixIsometricHeatmapElementEvent<HelixBeforeChangeEvent>;
19825
+ /** `helix-reading-change` event type */
19826
+ export type HelixIsometricHeatmapHelixReadingChangeElementEvent =
19827
+ HelixIsometricHeatmapElementEvent<HelixReadingChangeEvent>;
19828
+ /** `helix-reading-press` event type */
19829
+ export type HelixIsometricHeatmapHelixReadingPressElementEvent =
19830
+ HelixIsometricHeatmapElementEvent<HelixReadingPressEvent>;
19831
+ /** `helix-resize` event type */
19832
+ export type HelixIsometricHeatmapHelixResizeElementEvent =
19833
+ HelixIsometricHeatmapElementEvent<HelixResizeEvent>;
19834
+
19835
+ export type HelixIsometricHeatmapProps = {
19836
+ /** Draws every prism at no height, so the tones lie on a plane. */
19837
+ flat?: (HelixIsometricHeatmap["flat"]) | undefined;
19838
+ /** How tall the highest reading stands, in cells. Every other reading stands
19839
+ at its share of it. */
19840
+ relief?: (HelixIsometricHeatmap["relief"]) | undefined;
19841
+ /** The words shown in place of the drawing when the table has no readings,
19842
+ and the fallback of the `empty` slot. */
19843
+ "empty-text"?: (HelixIsometricHeatmap["emptyText"]) | undefined;
19844
+ /** The words shown in place of the drawing when the table has no readings,
19845
+ and the fallback of the `empty` slot. */
19846
+ emptyText?: (HelixIsometricHeatmap["emptyText"]) | undefined;
19847
+ /** Whether the readings are still on their way. The chart shows
19848
+ `loading-text` in place of an empty drawing until it has readings.
19849
+
19850
+ Reflected, so a stylesheet can treat the chart while it waits. A chart
19851
+ that already has readings keeps drawing them, so a refresh does not
19852
+ blank it. */
19853
+ loading?: (HelixIsometricHeatmap["loading"]) | undefined;
19854
+ /** The words shown in place of the drawing while `loading` is set and
19855
+ there are no readings yet, and the fallback of the `loading` slot. */
19856
+ "loading-text"?: (HelixIsometricHeatmap["loadingText"]) | undefined;
19857
+ /** The words shown in place of the drawing while `loading` is set and
19858
+ there are no readings yet, and the fallback of the `loading` slot. */
19859
+ loadingText?: (HelixIsometricHeatmap["loadingText"]) | undefined;
19860
+ /** The id of the table to read.
19861
+
19862
+ Names a table in the same tree, so a chart inside another component's
19863
+ shadow root reads a table in that root rather than one in the document. A
19864
+ `<table>` or anything built from grid roles, including `helix-table`.
19865
+
19866
+ **In React this arrives as a property and not as an attribute**, the way
19867
+ `Tooltip.for` does, so it does not reflect and nothing styles on it. */
19868
+ for?: (HelixIsometricHeatmap["for"]) | undefined;
19869
+ /** The chart's name, which starts the chart's text summary.
19870
+
19871
+ Absent falls back to the table's own caption, which is usually the right
19872
+ words and is already written. */
19873
+ label?: (HelixIsometricHeatmap["label"]) | undefined;
19874
+ /** The locale the chart's own numbers are written in: its axis, its
19875
+ percentages and its totals, such as `de` for `1.240` and `32 %`.
19876
+
19877
+ Absent reads the nearest `lang`, then the runtime's own. The table's
19878
+ cells are shown as the table writes them, whatever this says. */
19879
+ locale?: (HelixIsometricHeatmap["locale"]) | undefined;
19880
+ /** Where a reading the keys moved to stands among the readings, said after
19881
+ it. `{position}` and `{count}` are replaced with the numbers, written in
19882
+ `locale`.
19883
+
19884
+ Set it to the words of the page's language, such as `{position} von
19885
+ {count}`, or to nothing to say no position. A slice or a series a
19886
+ legend hid is not counted. */
19887
+ "position-label"?: (HelixIsometricHeatmap["positionLabel"]) | undefined;
19888
+ /** Where a reading the keys moved to stands among the readings, said after
19889
+ it. `{position}` and `{count}` are replaced with the numbers, written in
19890
+ `locale`.
19891
+
19892
+ Set it to the words of the page's language, such as `{position} von
19893
+ {count}`, or to nothing to say no position. A slice or a series a
19894
+ legend hid is not counted. */
19895
+ positionLabel?: (HelixIsometricHeatmap["positionLabel"]) | undefined;
19896
+ /** The name the `overview` gives the busiest reading, `{busiestLabel}` in
19897
+ `overview-label`. */
19898
+ "busiest-label"?: (HelixIsometricHeatmap["busiestLabel"]) | undefined;
19899
+ /** The name the `overview` gives the busiest reading, `{busiestLabel}` in
19900
+ `overview-label`. */
19901
+ busiestLabel?: (HelixIsometricHeatmap["busiestLabel"]) | undefined;
19902
+ /** Space between cells, in CSS pixels. It is a number for the same reason
19903
+ `min-cell` is. */
19904
+ gap?: (HelixIsometricHeatmap["gap"]) | undefined;
19905
+ /** The smallest a cell may get before the strip draws fewer of them, in CSS pixels.
19906
+
19907
+ **Set this only to overrule what the strip actually draws.** The arithmetic
19908
+ needs a width in pixels and the width is a length the stylesheet resolves,
19909
+ so a number written here that disagrees with the sheet is a promise the
19910
+ consumer has to keep by hand, and the one number a summary is told to trust
19911
+ is the one it gets wrong.
19912
+
19913
+ The strip measures itself, so sizing the cells in a sheet is enough on its
19914
+ own and these two are the estimate used until the first measurement lands.
19915
+ Writing the attribute pins the value and stops the measurement being
19916
+ consulted, which is what a container query or a transition on the cell size
19917
+ wants, where what is drawn this frame is not what the arithmetic should
19918
+ plan around.
19919
+
19920
+ Zero turns the dropping off altogether, which is right for a strip in a
19921
+ container that cannot get narrow. */
19922
+ "min-cell"?: (HelixIsometricHeatmap["minCell"] | `${number}`) | undefined;
19923
+ /** The smallest a cell may get before the strip draws fewer of them, in CSS pixels.
19924
+
19925
+ **Set this only to overrule what the strip actually draws.** The arithmetic
19926
+ needs a width in pixels and the width is a length the stylesheet resolves,
19927
+ so a number written here that disagrees with the sheet is a promise the
19928
+ consumer has to keep by hand, and the one number a summary is told to trust
19929
+ is the one it gets wrong.
19930
+
19931
+ The strip measures itself, so sizing the cells in a sheet is enough on its
19932
+ own and these two are the estimate used until the first measurement lands.
19933
+ Writing the attribute pins the value and stops the measurement being
19934
+ consulted, which is what a container query or a transition on the cell size
19935
+ wants, where what is drawn this frame is not what the arithmetic should
19936
+ plan around.
19937
+
19938
+ Zero turns the dropping off altogether, which is right for a strip in a
19939
+ container that cannot get narrow. */
19940
+ minCell?: (HelixIsometricHeatmap["minCell"]) | undefined;
19941
+ /** The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
19942
+ `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
19943
+ and its reading as the table writes it, and `{total}` the total of the
19944
+ readings drawn, written in the locale. */
19945
+ "overview-label"?: (HelixIsometricHeatmap["overviewLabel"]) | undefined;
19946
+ /** The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
19947
+ `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
19948
+ and its reading as the table writes it, and `{total}` the total of the
19949
+ readings drawn, written in the locale. */
19950
+ overviewLabel?: (HelixIsometricHeatmap["overviewLabel"]) | undefined;
19951
+ /** How many rows the strip has.
19952
+
19953
+ `1` is a status strip and `7` is a calendar week, which are the two readings
19954
+ this covers. Cells fill down the column and then across, which is what a
19955
+ calendar heatmap does: a week is a column, so the strip reads along the
19956
+ line in weeks, from the right on a right-to-left page, and top to bottom in
19957
+ days. */
19958
+ rows?: (HelixIsometricHeatmap["rows"]) | undefined;
19959
+ /** What the readout added for a selected cell, under `selection-mode`. */
19960
+ "selected-label"?: (HelixIsometricHeatmap["selectedLabel"]) | undefined;
19961
+ /** What the readout added for a selected cell, under `selection-mode`. */
19962
+ selectedLabel?: (HelixIsometricHeatmap["selectedLabel"]) | undefined;
19963
+ /** What the `selection` part says after the selection changes. `{count}` is
19964
+ how many cells are selected, written in the locale, and a language that
19965
+ needs plural forms writes them: `{count, plural, one {# wybrany} few
19966
+ {# wybrane} many {# wybranych} other {# wybranego}}`. */
19967
+ "selection-label"?: (HelixIsometricHeatmap["selectionLabel"]) | undefined;
19968
+ /** What the `selection` part says after the selection changes. `{count}` is
19969
+ how many cells are selected, written in the locale, and a language that
19970
+ needs plural forms writes them: `{count, plural, one {# wybrany} few
19971
+ {# wybrane} many {# wybranych} other {# wybranego}}`. */
19972
+ selectionLabel?: (HelixIsometricHeatmap["selectionLabel"]) | undefined;
19973
+ /** How many cells a reader can select: `single` or `multiple`.
19974
+
19975
+ Absent selects nothing, and a press or Space does what it did. */
19976
+ "selection-mode"?: (HelixIsometricHeatmap["selectionMode"]) | undefined;
19977
+ /** How many cells a reader can select: `single` or `multiple`.
19978
+
19979
+ Absent selects nothing, and a press or Space does what it did. */
19980
+ selectionMode?: (HelixIsometricHeatmap["selectionMode"]) | undefined;
19981
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
19982
+ cell between two in the table's order, or `rectangle`, the cells between
19983
+ two corners by row and by column, as a spreadsheet selects a range. */
19984
+ "selection-shape"?: (HelixIsometricHeatmap["selectionShape"]) | undefined;
19985
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
19986
+ cell between two in the table's order, or `rectangle`, the cells between
19987
+ two corners by row and by column, as a spreadsheet selects a range. */
19988
+ selectionShape?: (HelixIsometricHeatmap["selectionShape"]) | undefined;
19989
+ /** The strip's name where the chart has none: no `aria-label`, `label`, or
19990
+ table caption. */
19991
+ "strip-label"?: (HelixIsometricHeatmap["stripLabel"]) | undefined;
19992
+ /** The strip's name where the chart has none: no `aria-label`, `label`, or
19993
+ table caption. */
19994
+ stripLabel?: (HelixIsometricHeatmap["stripLabel"]) | undefined;
19995
+ /** Lower bounds for the tone buckets, in the order the tones are given.
19996
+
19997
+ `thresholds="1 3 6 9"` with `tones="1 2 3 4"` puts 1 and 2 in the ramp's
19998
+ first step, 3 to 5 in the second, 6 to 8 in the third, and 9 upward in the
19999
+ fourth. A value below the first bound gets no tone at all: an empty day in a
20000
+ contribution graph is a day with nothing in it, and painting it as the
20001
+ lowest bucket claims a reading that does not exist. */
20002
+ thresholds?: (HelixIsometricHeatmap["thresholds"]) | undefined;
20003
+ /** The tone for each bucket, in the same order as `thresholds`.
20004
+
20005
+ A name, resolved as `--heatmap-tone-<name>` by whichever tier answers.
20006
+ **`"1"` through `"5"` are a ramp and everything else is a category**, which
20007
+ is the distinction a heatmap lives or dies on: magnitude has to be one hue
20008
+ getting louder, because a reader compares two cells by weight and cannot
20009
+ compare two hues at all. `tones="surface info accent success primary"` for a
20010
+ commit count is five unrelated hues for five amounts, which is confetti with
20011
+ no order in it. */
20012
+ tones?: (HelixIsometricHeatmap["tones"]) | undefined;
20013
+ /** The name the `overview` gives the total of the readings drawn,
20014
+ `{totalLabel}` in `overview-label`. */
20015
+ "total-label"?: (HelixIsometricHeatmap["totalLabel"]) | undefined;
20016
+ /** The name the `overview` gives the total of the readings drawn,
20017
+ `{totalLabel}` in `overview-label`. */
20018
+ totalLabel?: (HelixIsometricHeatmap["totalLabel"]) | undefined;
20019
+ /** The selected cells, separated by commas: each by the date its row's
20020
+ header carries in a `<time datetime>`, such as `2026-06-11`, or by the
20021
+ header's words where it carries none.
20022
+
20023
+ Set it to start with cells selected. Written by a press or a key under
20024
+ `selection-mode`. */
20025
+ value?: (HelixIsometricHeatmap["value"]) | undefined;
20026
+ /** The readings as data, in the shape of a table, where the page has no
20027
+ table to point `for` at. `for` wins where both are set.
20028
+
20029
+ ```js
20030
+ chart.data = {
20031
+ caption: 'Sessions by channel',
20032
+ columns: ['Month', 'Direct', 'Referral'],
20033
+ rows: [['Jan', 10, 4], ['Feb', 20, 8]],
20034
+ }
20035
+ ```
20036
+
20037
+ The first column holds each row's label and every column after it a
20038
+ series, as in a table. A cell is a number, words, `null` for a blank,
20039
+ or `{ value, text }` for a number shown as words, such as `$128k`. A
20040
+ number is shown in `locale`.
20041
+
20042
+ **A table is still the better source where the page can show one**:
20043
+ it reads with no script and before hydration, and a reader can sort and
20044
+ copy it. Data is drawn on the client only, so a server serves the
20045
+ frame, and the summary, the keys and the readout are then the whole of
20046
+ what a screen reader is given. Set a new object to redraw: the chart
20047
+ does not look inside the one it has. */
20048
+ data?: (HelixIsometricHeatmap["data"]) | undefined;
20049
+
20050
+ /** Fired once a press or a key has changed which cells are selected. */
20051
+ onchange?: ((e: HelixIsometricHeatmapElementEvent) => void) | undefined;
20052
+ /** Fired before a press or a key changes which cells are selected, with the `value` it would leave. Cancelable. */
20053
+ "onhelix-before-change"?: ((
20054
+ e: HelixIsometricHeatmapHelixBeforeChangeElementEvent,
20055
+ ) => void) | undefined;
20056
+ /** The reading shown moved, or was put away: `index` is the row, or `-1` for none, with its `label`, the `series` the keys rest on, and the `pointerType` that moved it. */
20057
+ "onhelix-reading-change"?: ((
20058
+ e: HelixIsometricHeatmapHelixReadingChangeElementEvent,
20059
+ ) => void) | undefined;
20060
+ /** A reading was clicked, tapped, or pressed with Enter or Space, with the same detail as `helix-reading-change`. */
20061
+ "onhelix-reading-press"?: ((
20062
+ e: HelixIsometricHeatmapHelixReadingPressElementEvent,
20063
+ ) => void) | undefined;
20064
+ /** Fired when the number of cells drawn changes, with the new number. */
20065
+ "onhelix-resize"?: ((e: HelixIsometricHeatmapHelixResizeElementEvent) => void) | undefined;
20066
+ };
20067
+
20068
+ export type HelixIsometricHeatmapSolidJsProps = {
20069
+ /** Draws every prism at no height, so the tones lie on a plane. */
20070
+ "prop:flat"?: (HelixIsometricHeatmap["flat"]) | undefined;
20071
+ /** How tall the highest reading stands, in cells. Every other reading stands
20072
+ at its share of it. */
20073
+ "prop:relief"?: (HelixIsometricHeatmap["relief"]) | undefined;
20074
+ /** The words shown in place of the drawing when the table has no readings,
20075
+ and the fallback of the `empty` slot. */
20076
+ "attr:empty-text"?: (HelixIsometricHeatmap["emptyText"]) | undefined;
20077
+ /** The words shown in place of the drawing when the table has no readings,
20078
+ and the fallback of the `empty` slot. */
20079
+ "prop:emptyText"?: (HelixIsometricHeatmap["emptyText"]) | undefined;
20080
+ /** Whether the readings are still on their way. The chart shows
20081
+ `loading-text` in place of an empty drawing until it has readings.
20082
+
20083
+ Reflected, so a stylesheet can treat the chart while it waits. A chart
20084
+ that already has readings keeps drawing them, so a refresh does not
20085
+ blank it. */
20086
+ "prop:loading"?: (HelixIsometricHeatmap["loading"]) | undefined;
20087
+ /** The words shown in place of the drawing while `loading` is set and
20088
+ there are no readings yet, and the fallback of the `loading` slot. */
20089
+ "attr:loading-text"?: (HelixIsometricHeatmap["loadingText"]) | undefined;
20090
+ /** The words shown in place of the drawing while `loading` is set and
20091
+ there are no readings yet, and the fallback of the `loading` slot. */
20092
+ "prop:loadingText"?: (HelixIsometricHeatmap["loadingText"]) | undefined;
20093
+ /** The id of the table to read.
20094
+
20095
+ Names a table in the same tree, so a chart inside another component's
20096
+ shadow root reads a table in that root rather than one in the document. A
20097
+ `<table>` or anything built from grid roles, including `helix-table`.
20098
+
20099
+ **In React this arrives as a property and not as an attribute**, the way
20100
+ `Tooltip.for` does, so it does not reflect and nothing styles on it. */
20101
+ "prop:for"?: (HelixIsometricHeatmap["for"]) | undefined;
20102
+ /** The chart's name, which starts the chart's text summary.
20103
+
20104
+ Absent falls back to the table's own caption, which is usually the right
20105
+ words and is already written. */
20106
+ "prop:label"?: (HelixIsometricHeatmap["label"]) | undefined;
20107
+ /** The locale the chart's own numbers are written in: its axis, its
20108
+ percentages and its totals, such as `de` for `1.240` and `32 %`.
20109
+
20110
+ Absent reads the nearest `lang`, then the runtime's own. The table's
20111
+ cells are shown as the table writes them, whatever this says. */
20112
+ "prop:locale"?: (HelixIsometricHeatmap["locale"]) | undefined;
20113
+ /** Where a reading the keys moved to stands among the readings, said after
20114
+ it. `{position}` and `{count}` are replaced with the numbers, written in
20115
+ `locale`.
20116
+
20117
+ Set it to the words of the page's language, such as `{position} von
20118
+ {count}`, or to nothing to say no position. A slice or a series a
20119
+ legend hid is not counted. */
20120
+ "attr:position-label"?: (HelixIsometricHeatmap["positionLabel"]) | undefined;
20121
+ /** Where a reading the keys moved to stands among the readings, said after
20122
+ it. `{position}` and `{count}` are replaced with the numbers, written in
20123
+ `locale`.
20124
+
20125
+ Set it to the words of the page's language, such as `{position} von
20126
+ {count}`, or to nothing to say no position. A slice or a series a
20127
+ legend hid is not counted. */
20128
+ "prop:positionLabel"?: (HelixIsometricHeatmap["positionLabel"]) | undefined;
20129
+ /** The name the `overview` gives the busiest reading, `{busiestLabel}` in
20130
+ `overview-label`. */
20131
+ "attr:busiest-label"?: (HelixIsometricHeatmap["busiestLabel"]) | undefined;
20132
+ /** The name the `overview` gives the busiest reading, `{busiestLabel}` in
20133
+ `overview-label`. */
20134
+ "prop:busiestLabel"?: (HelixIsometricHeatmap["busiestLabel"]) | undefined;
20135
+ /** Space between cells, in CSS pixels. It is a number for the same reason
20136
+ `min-cell` is. */
20137
+ "prop:gap"?: (HelixIsometricHeatmap["gap"]) | undefined;
20138
+ /** The smallest a cell may get before the strip draws fewer of them, in CSS pixels.
20139
+
20140
+ **Set this only to overrule what the strip actually draws.** The arithmetic
20141
+ needs a width in pixels and the width is a length the stylesheet resolves,
20142
+ so a number written here that disagrees with the sheet is a promise the
20143
+ consumer has to keep by hand, and the one number a summary is told to trust
20144
+ is the one it gets wrong.
20145
+
20146
+ The strip measures itself, so sizing the cells in a sheet is enough on its
20147
+ own and these two are the estimate used until the first measurement lands.
20148
+ Writing the attribute pins the value and stops the measurement being
20149
+ consulted, which is what a container query or a transition on the cell size
20150
+ wants, where what is drawn this frame is not what the arithmetic should
20151
+ plan around.
20152
+
20153
+ Zero turns the dropping off altogether, which is right for a strip in a
20154
+ container that cannot get narrow. */
20155
+ "attr:min-cell"?: (HelixIsometricHeatmap["minCell"] | `${number}`) | undefined;
20156
+ /** The smallest a cell may get before the strip draws fewer of them, in CSS pixels.
20157
+
20158
+ **Set this only to overrule what the strip actually draws.** The arithmetic
20159
+ needs a width in pixels and the width is a length the stylesheet resolves,
20160
+ so a number written here that disagrees with the sheet is a promise the
20161
+ consumer has to keep by hand, and the one number a summary is told to trust
20162
+ is the one it gets wrong.
20163
+
20164
+ The strip measures itself, so sizing the cells in a sheet is enough on its
20165
+ own and these two are the estimate used until the first measurement lands.
20166
+ Writing the attribute pins the value and stops the measurement being
20167
+ consulted, which is what a container query or a transition on the cell size
20168
+ wants, where what is drawn this frame is not what the arithmetic should
20169
+ plan around.
20170
+
20171
+ Zero turns the dropping off altogether, which is right for a strip in a
20172
+ container that cannot get narrow. */
20173
+ "prop:minCell"?: (HelixIsometricHeatmap["minCell"]) | undefined;
20174
+ /** The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
20175
+ `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
20176
+ and its reading as the table writes it, and `{total}` the total of the
20177
+ readings drawn, written in the locale. */
20178
+ "attr:overview-label"?: (HelixIsometricHeatmap["overviewLabel"]) | undefined;
20179
+ /** The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
20180
+ `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
20181
+ and its reading as the table writes it, and `{total}` the total of the
20182
+ readings drawn, written in the locale. */
20183
+ "prop:overviewLabel"?: (HelixIsometricHeatmap["overviewLabel"]) | undefined;
20184
+ /** How many rows the strip has.
20185
+
20186
+ `1` is a status strip and `7` is a calendar week, which are the two readings
20187
+ this covers. Cells fill down the column and then across, which is what a
20188
+ calendar heatmap does: a week is a column, so the strip reads along the
20189
+ line in weeks, from the right on a right-to-left page, and top to bottom in
20190
+ days. */
20191
+ "prop:rows"?: (HelixIsometricHeatmap["rows"]) | undefined;
20192
+ /** What the readout added for a selected cell, under `selection-mode`. */
20193
+ "attr:selected-label"?: (HelixIsometricHeatmap["selectedLabel"]) | undefined;
20194
+ /** What the readout added for a selected cell, under `selection-mode`. */
20195
+ "prop:selectedLabel"?: (HelixIsometricHeatmap["selectedLabel"]) | undefined;
20196
+ /** What the `selection` part says after the selection changes. `{count}` is
20197
+ how many cells are selected, written in the locale, and a language that
20198
+ needs plural forms writes them: `{count, plural, one {# wybrany} few
20199
+ {# wybrane} many {# wybranych} other {# wybranego}}`. */
20200
+ "attr:selection-label"?: (HelixIsometricHeatmap["selectionLabel"]) | undefined;
20201
+ /** What the `selection` part says after the selection changes. `{count}` is
20202
+ how many cells are selected, written in the locale, and a language that
20203
+ needs plural forms writes them: `{count, plural, one {# wybrany} few
20204
+ {# wybrane} many {# wybranych} other {# wybranego}}`. */
20205
+ "prop:selectionLabel"?: (HelixIsometricHeatmap["selectionLabel"]) | undefined;
20206
+ /** How many cells a reader can select: `single` or `multiple`.
20207
+
20208
+ Absent selects nothing, and a press or Space does what it did. */
20209
+ "attr:selection-mode"?: (HelixIsometricHeatmap["selectionMode"]) | undefined;
20210
+ /** How many cells a reader can select: `single` or `multiple`.
20211
+
20212
+ Absent selects nothing, and a press or Space does what it did. */
20213
+ "prop:selectionMode"?: (HelixIsometricHeatmap["selectionMode"]) | undefined;
20214
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
20215
+ cell between two in the table's order, or `rectangle`, the cells between
20216
+ two corners by row and by column, as a spreadsheet selects a range. */
20217
+ "attr:selection-shape"?: (HelixIsometricHeatmap["selectionShape"]) | undefined;
20218
+ /** What Shift takes in under `selection-mode="multiple"`: `linear`, every
20219
+ cell between two in the table's order, or `rectangle`, the cells between
20220
+ two corners by row and by column, as a spreadsheet selects a range. */
20221
+ "prop:selectionShape"?: (HelixIsometricHeatmap["selectionShape"]) | undefined;
20222
+ /** The strip's name where the chart has none: no `aria-label`, `label`, or
20223
+ table caption. */
20224
+ "attr:strip-label"?: (HelixIsometricHeatmap["stripLabel"]) | undefined;
20225
+ /** The strip's name where the chart has none: no `aria-label`, `label`, or
20226
+ table caption. */
20227
+ "prop:stripLabel"?: (HelixIsometricHeatmap["stripLabel"]) | undefined;
20228
+ /** Lower bounds for the tone buckets, in the order the tones are given.
20229
+
20230
+ `thresholds="1 3 6 9"` with `tones="1 2 3 4"` puts 1 and 2 in the ramp's
20231
+ first step, 3 to 5 in the second, 6 to 8 in the third, and 9 upward in the
20232
+ fourth. A value below the first bound gets no tone at all: an empty day in a
20233
+ contribution graph is a day with nothing in it, and painting it as the
20234
+ lowest bucket claims a reading that does not exist. */
20235
+ "prop:thresholds"?: (HelixIsometricHeatmap["thresholds"]) | undefined;
20236
+ /** The tone for each bucket, in the same order as `thresholds`.
20237
+
20238
+ A name, resolved as `--heatmap-tone-<name>` by whichever tier answers.
20239
+ **`"1"` through `"5"` are a ramp and everything else is a category**, which
20240
+ is the distinction a heatmap lives or dies on: magnitude has to be one hue
20241
+ getting louder, because a reader compares two cells by weight and cannot
20242
+ compare two hues at all. `tones="surface info accent success primary"` for a
20243
+ commit count is five unrelated hues for five amounts, which is confetti with
20244
+ no order in it. */
20245
+ "prop:tones"?: (HelixIsometricHeatmap["tones"]) | undefined;
20246
+ /** The name the `overview` gives the total of the readings drawn,
20247
+ `{totalLabel}` in `overview-label`. */
20248
+ "attr:total-label"?: (HelixIsometricHeatmap["totalLabel"]) | undefined;
20249
+ /** The name the `overview` gives the total of the readings drawn,
20250
+ `{totalLabel}` in `overview-label`. */
20251
+ "prop:totalLabel"?: (HelixIsometricHeatmap["totalLabel"]) | undefined;
20252
+ /** The selected cells, separated by commas: each by the date its row's
20253
+ header carries in a `<time datetime>`, such as `2026-06-11`, or by the
20254
+ header's words where it carries none.
20255
+
20256
+ Set it to start with cells selected. Written by a press or a key under
20257
+ `selection-mode`. */
20258
+ "prop:value"?: (HelixIsometricHeatmap["value"]) | undefined;
20259
+ /** The readings as data, in the shape of a table, where the page has no
20260
+ table to point `for` at. `for` wins where both are set.
20261
+
20262
+ ```js
20263
+ chart.data = {
20264
+ caption: 'Sessions by channel',
20265
+ columns: ['Month', 'Direct', 'Referral'],
20266
+ rows: [['Jan', 10, 4], ['Feb', 20, 8]],
20267
+ }
20268
+ ```
20269
+
20270
+ The first column holds each row's label and every column after it a
20271
+ series, as in a table. A cell is a number, words, `null` for a blank,
20272
+ or `{ value, text }` for a number shown as words, such as `$128k`. A
20273
+ number is shown in `locale`.
20274
+
20275
+ **A table is still the better source where the page can show one**:
20276
+ it reads with no script and before hydration, and a reader can sort and
20277
+ copy it. Data is drawn on the client only, so a server serves the
20278
+ frame, and the summary, the keys and the readout are then the whole of
20279
+ what a screen reader is given. Set a new object to redraw: the chart
20280
+ does not look inside the one it has. */
20281
+ "prop:data"?: (HelixIsometricHeatmap["data"]) | undefined;
20282
+ /** Fired once a press or a key has changed which cells are selected. */
20283
+ "on:change"?: ((e: HelixIsometricHeatmapElementEvent) => void) | undefined;
20284
+ /** Fired before a press or a key changes which cells are selected, with the `value` it would leave. Cancelable. */
20285
+ "on:helix-before-change"?: ((
20286
+ e: HelixIsometricHeatmapHelixBeforeChangeElementEvent,
20287
+ ) => void) | undefined;
20288
+ /** The reading shown moved, or was put away: `index` is the row, or `-1` for none, with its `label`, the `series` the keys rest on, and the `pointerType` that moved it. */
20289
+ "on:helix-reading-change"?: ((
20290
+ e: HelixIsometricHeatmapHelixReadingChangeElementEvent,
20291
+ ) => void) | undefined;
20292
+ /** A reading was clicked, tapped, or pressed with Enter or Space, with the same detail as `helix-reading-change`. */
20293
+ "on:helix-reading-press"?: ((
20294
+ e: HelixIsometricHeatmapHelixReadingPressElementEvent,
20295
+ ) => void) | undefined;
20296
+ /** Fired when the number of cells drawn changes, with the new number. */
20297
+ "on:helix-resize"?: ((e: HelixIsometricHeatmapHelixResizeElementEvent) => void) | undefined;
20298
+
20299
+ /** Set the innerHTML of the element */
20300
+ innerHTML?: (string) | undefined;
20301
+ /** Set the textContent of the element */
20302
+ textContent?: (string | number) | undefined;
20303
+ };
20304
+
19812
20305
  /** `HelixKbd` component event */
19813
20306
  export type HelixKbdElementEvent<E = Event> = TypedEvent<HelixKbd, E>;
19814
20307
  /** `helix-shortcut` event type */
@@ -54593,11 +55086,6 @@ export type CustomElements = {
54593
55086
  * Reduced motion stills every animation. `auto-width` gives the box the
54594
55087
  * glyph's own proportions, for a mark wider than it is tall.
54595
55088
  *
54596
- * **`@fusion.dev/helix/icon` registers thirteen glyphs by name**, the ones a
54597
- * control most often needs, and `@fusion.dev/helix/icon/all` registers the
54598
- * whole set. The headless element lists the thirteen and says how a name is
54599
- * resolved.
54600
- *
54601
55089
  * ## Attributes & Properties
54602
55090
  *
54603
55091
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -54629,10 +55117,12 @@ export type CustomElements = {
54629
55117
  * - `name`: The name of the icon in the Helix set.
54630
55118
  *
54631
55119
  * **A lookup, and the reason both this and `icon` exist.** A name is a string,
54632
- * so it is what markup can carry, and resolving one means an index that no
54633
- * bundler can shake. The family's entry indexes a small set, `icon/all`
54634
- * indexes the whole set at 15 kB, and `icon/root` indexes nothing, for a
54635
- * page that registers the glyphs it names or hands over the value instead.
55120
+ * so it is what markup can carry, and resolving one means an index of the
55121
+ * whole set that no bundler can shake: 15 kB for a consumer who renders one
55122
+ * mark. An attribute is the only thing an HTML author can write, and that is
55123
+ * worth the index; a consumer who would rather not pay it imports the
55124
+ * element from `icon/root` and registers the glyphs it names, or hands over
55125
+ * the value instead.
54636
55126
  *
54637
55127
  * A name written `prefix:name` asks the library registered under that
54638
55128
  * prefix.
@@ -55179,6 +55669,340 @@ export type CustomElements = {
55179
55669
  */
55180
55670
  "helix-input": Partial<HelixInputProps & BaseProps<HelixInput> & BaseEvents<HelixInput>>;
55181
55671
 
55672
+ /**
55673
+ * Each reading is a prism. The top face takes the cell's tone, and the two
55674
+ * sides are the same tone, shaded darker, so the whole relief follows your
55675
+ * theme's colors.
55676
+ *
55677
+ * `tones="1 2 3 4 5"` uses the same five-step ramp as `Heatmap`, so the tone
55678
+ * and the height both show the value. Set `--isometric-heatmap-cell-size` to
55679
+ * change how large a cell may grow.
55680
+ *
55681
+ * ## Attributes & Properties
55682
+ *
55683
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
55684
+ *
55685
+ * - `flat`: Draws every prism at no height, so the tones lie on a plane.
55686
+ * - `relief`: How tall the highest reading stands, in cells. Every other reading stands
55687
+ * at its share of it.
55688
+ * - `empty-text`/`emptyText`: The words shown in place of the drawing when the table has no readings,
55689
+ * and the fallback of the `empty` slot.
55690
+ * - `loading`: Whether the readings are still on their way. The chart shows
55691
+ * `loading-text` in place of an empty drawing until it has readings.
55692
+ *
55693
+ * Reflected, so a stylesheet can treat the chart while it waits. A chart
55694
+ * that already has readings keeps drawing them, so a refresh does not
55695
+ * blank it.
55696
+ * - `loading-text`/`loadingText`: The words shown in place of the drawing while `loading` is set and
55697
+ * there are no readings yet, and the fallback of the `loading` slot.
55698
+ * - `for`: The id of the table to read.
55699
+ *
55700
+ * Names a table in the same tree, so a chart inside another component's
55701
+ * shadow root reads a table in that root rather than one in the document. A
55702
+ * `<table>` or anything built from grid roles, including `helix-table`.
55703
+ *
55704
+ * **In React this arrives as a property and not as an attribute**, the way
55705
+ * `Tooltip.for` does, so it does not reflect and nothing styles on it.
55706
+ * - `label`: The chart's name, which starts the chart's text summary.
55707
+ *
55708
+ * Absent falls back to the table's own caption, which is usually the right
55709
+ * words and is already written.
55710
+ * - `locale`: The locale the chart's own numbers are written in: its axis, its
55711
+ * percentages and its totals, such as `de` for `1.240` and `32 %`.
55712
+ *
55713
+ * Absent reads the nearest `lang`, then the runtime's own. The table's
55714
+ * cells are shown as the table writes them, whatever this says.
55715
+ * - `position-label`/`positionLabel`: Where a reading the keys moved to stands among the readings, said after
55716
+ * it. `{position}` and `{count}` are replaced with the numbers, written in
55717
+ * `locale`.
55718
+ *
55719
+ * Set it to the words of the page's language, such as `{position} von
55720
+ * {count}`, or to nothing to say no position. A slice or a series a
55721
+ * legend hid is not counted.
55722
+ * - `busiest-label`/`busiestLabel`: The name the `overview` gives the busiest reading, `{busiestLabel}` in
55723
+ * `overview-label`.
55724
+ * - `gap`: Space between cells, in CSS pixels. It is a number for the same reason
55725
+ * `min-cell` is.
55726
+ * - `min-cell`/`minCell`: The smallest a cell may get before the strip draws fewer of them, in CSS pixels.
55727
+ *
55728
+ * **Set this only to overrule what the strip actually draws.** The arithmetic
55729
+ * needs a width in pixels and the width is a length the stylesheet resolves,
55730
+ * so a number written here that disagrees with the sheet is a promise the
55731
+ * consumer has to keep by hand, and the one number a summary is told to trust
55732
+ * is the one it gets wrong.
55733
+ *
55734
+ * The strip measures itself, so sizing the cells in a sheet is enough on its
55735
+ * own and these two are the estimate used until the first measurement lands.
55736
+ * Writing the attribute pins the value and stops the measurement being
55737
+ * consulted, which is what a container query or a transition on the cell size
55738
+ * wants, where what is drawn this frame is not what the arithmetic should
55739
+ * plan around.
55740
+ *
55741
+ * Zero turns the dropping off altogether, which is right for a strip in a
55742
+ * container that cannot get narrow.
55743
+ * - `overview-label`/`overviewLabel`: The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
55744
+ * `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
55745
+ * and its reading as the table writes it, and `{total}` the total of the
55746
+ * readings drawn, written in the locale.
55747
+ * - `rows`: How many rows the strip has.
55748
+ *
55749
+ * `1` is a status strip and `7` is a calendar week, which are the two readings
55750
+ * this covers. Cells fill down the column and then across, which is what a
55751
+ * calendar heatmap does: a week is a column, so the strip reads along the
55752
+ * line in weeks, from the right on a right-to-left page, and top to bottom in
55753
+ * days.
55754
+ * - `selected-label`/`selectedLabel`: What the readout added for a selected cell, under `selection-mode`.
55755
+ * - `selection-label`/`selectionLabel`: What the `selection` part says after the selection changes. `{count}` is
55756
+ * how many cells are selected, written in the locale, and a language that
55757
+ * needs plural forms writes them: `{count, plural, one {# wybrany} few
55758
+ * {# wybrane} many {# wybranych} other {# wybranego}}`.
55759
+ * - `selection-mode`/`selectionMode`: How many cells a reader can select: `single` or `multiple`.
55760
+ *
55761
+ * Absent selects nothing, and a press or Space does what it did.
55762
+ * - `selection-shape`/`selectionShape`: What Shift takes in under `selection-mode="multiple"`: `linear`, every
55763
+ * cell between two in the table's order, or `rectangle`, the cells between
55764
+ * two corners by row and by column, as a spreadsheet selects a range.
55765
+ * - `strip-label`/`stripLabel`: The strip's name where the chart has none: no `aria-label`, `label`, or
55766
+ * table caption.
55767
+ * - `thresholds`: Lower bounds for the tone buckets, in the order the tones are given.
55768
+ *
55769
+ * `thresholds="1 3 6 9"` with `tones="1 2 3 4"` puts 1 and 2 in the ramp's
55770
+ * first step, 3 to 5 in the second, 6 to 8 in the third, and 9 upward in the
55771
+ * fourth. A value below the first bound gets no tone at all: an empty day in a
55772
+ * contribution graph is a day with nothing in it, and painting it as the
55773
+ * lowest bucket claims a reading that does not exist.
55774
+ * - `tones`: The tone for each bucket, in the same order as `thresholds`.
55775
+ *
55776
+ * A name, resolved as `--heatmap-tone-<name>` by whichever tier answers.
55777
+ * **`"1"` through `"5"` are a ramp and everything else is a category**, which
55778
+ * is the distinction a heatmap lives or dies on: magnitude has to be one hue
55779
+ * getting louder, because a reader compares two cells by weight and cannot
55780
+ * compare two hues at all. `tones="surface info accent success primary"` for a
55781
+ * commit count is five unrelated hues for five amounts, which is confetti with
55782
+ * no order in it.
55783
+ * - `total-label`/`totalLabel`: The name the `overview` gives the total of the readings drawn,
55784
+ * `{totalLabel}` in `overview-label`.
55785
+ * - `value`: The selected cells, separated by commas: each by the date its row's
55786
+ * header carries in a `<time datetime>`, such as `2026-06-11`, or by the
55787
+ * header's words where it carries none.
55788
+ *
55789
+ * Set it to start with cells selected. Written by a press or a key under
55790
+ * `selection-mode`.
55791
+ * - `data`: The readings as data, in the shape of a table, where the page has no
55792
+ * table to point `for` at. `for` wins where both are set.
55793
+ *
55794
+ * ```js
55795
+ * chart.data = {
55796
+ * caption: 'Sessions by channel',
55797
+ * columns: ['Month', 'Direct', 'Referral'],
55798
+ * rows: [['Jan', 10, 4], ['Feb', 20, 8]],
55799
+ * }
55800
+ * ```
55801
+ *
55802
+ * The first column holds each row's label and every column after it a
55803
+ * series, as in a table. A cell is a number, words, `null` for a blank,
55804
+ * or `{ value, text }` for a number shown as words, such as `$128k`. A
55805
+ * number is shown in `locale`.
55806
+ *
55807
+ * **A table is still the better source where the page can show one**:
55808
+ * it reads with no script and before hydration, and a reader can sort and
55809
+ * copy it. Data is drawn on the client only, so a server serves the
55810
+ * frame, and the summary, the keys and the readout are then the whole of
55811
+ * what a screen reader is given. Set a new object to redraw: the chart
55812
+ * does not look inside the one it has. (property only)
55813
+ * - `series`: The table's columns, one series each. Empty when there is no table.
55814
+ *
55815
+ * Held by the controller between edits, so a render reading this five
55816
+ * times parses the table once. See `SourceController.series`. (property only) (readonly)
55817
+ * - `named`: The chart's name: an `aria-label` written on the chart, then `label`,
55818
+ * then the table's caption.
55819
+ *
55820
+ * The fallback is the reason this is shared rather than copied: a caption is
55821
+ * already written, already the right words, and already the thing a reader
55822
+ * of the table sees. A chart that made the consumer say it twice would be
55823
+ * asking for the second one to drift.
55824
+ *
55825
+ * **An `aria-label` on the chart comes first**, because it is how a page
55826
+ * names an element, and the chart is a generic around its plot: written
55827
+ * on the host, the name reached nobody. The plot takes it, as Heatmap's
55828
+ * strip always did. (property only) (readonly)
55829
+ * - `plottedColumns`: The positions of the cells in a row that hold numbers, in table order.
55830
+ *
55831
+ * The same test `readSeries` applies when it drops a column of notes: a
55832
+ * column is a series where any row parses, so a series survives one blank
55833
+ * cell and a column of words is never one. (property only) (readonly)
55834
+ * - `readings`: The number of readings, which the pointer position maps onto. (property only) (readonly)
55835
+ * - `visible`: How many cells are actually drawn.
55836
+ *
55837
+ * **This is the number a summary has to agree with**, and the reason it is
55838
+ * published at all: a consumer's own summary is their markup and this element
55839
+ * cannot rewrite it, so the only honest arrangement is to hand over the count
55840
+ * and say when it changed.
55841
+ *
55842
+ * **A plain getter, and the attribute is written in `updated`, because
55843
+ * `@property({ reflect: true })` on a getter with no setter reflects once and
55844
+ * then goes stale.** Lit reflects a property that is in `changedProperties`,
55845
+ * and nothing puts a derived getter there after the first update: the
55846
+ * attribute would be right on load and wrong from the first resize, which is
55847
+ * the exact failure the count exists to prevent, arriving through the
55848
+ * mechanism meant to prevent it. (property only) (readonly)
55849
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
55850
+ *
55851
+ * **Named `whenSettled` because `settled` is taken four times over**, by
55852
+ * Image, Splitter and both color controls, none of them about transitions. A
55853
+ * base class takes the name every subclass then cannot use.
55854
+ *
55855
+ * **The state it reports cannot be watched, which is why this exists.** A
55856
+ * custom state is deliberately not in the DOM, so there is no
55857
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
55858
+ * instead.
55859
+ *
55860
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
55861
+ * the suppression is still active in. That is the distinction `readyToMove`
55862
+ * in `@fusion.dev/helix-testing` is written around.
55863
+ *
55864
+ * It never resolves where `requestAnimationFrame` never fires, which is a
55865
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
55866
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
55867
+ * browser harness's awaits it alone: a browser always runs the frame, and a
55868
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
55869
+ *
55870
+ * ## Events
55871
+ *
55872
+ * Events that will be emitted by the component.
55873
+ *
55874
+ * - `change`: Fired once a press or a key has changed which cells are selected.
55875
+ * - `helix-before-change`: Fired before a press or a key changes which cells are selected, with the `value` it would leave. Cancelable.
55876
+ * - `helix-reading-change`: The reading shown moved, or was put away: `index` is the row, or `-1` for none, with its `label`, the `series` the keys rest on, and the `pointerType` that moved it.
55877
+ * - `helix-reading-press`: A reading was clicked, tapped, or pressed with Enter or Space, with the same detail as `helix-reading-change`.
55878
+ * - `helix-resize`: Fired when the number of cells drawn changes, with the new number.
55879
+ *
55880
+ * ## Slots
55881
+ *
55882
+ * Areas where markup can be added to the component.
55883
+ *
55884
+ * - `empty`: Content shown under the strip when the table has no readings, such as a link to add the first. Falls back to `empty-text`.
55885
+ * - `end`: Below the strip, at the trailing edge: usually the newest date.
55886
+ * - `loading`: Content shown under the strip while `loading` is set and there are no readings yet. Falls back to `loading-text`.
55887
+ * - `start`: Below the strip, at the leading edge: usually the oldest date.
55888
+ * - `summary`: Below the strip, in the middle: a summary of the range shown.
55889
+ *
55890
+ * ## Methods
55891
+ *
55892
+ * Methods that can be called to access component functionality.
55893
+ *
55894
+ * - `seriesOf(cell: number) => number | undefined`: The palette slot for the cell at this position in a row.
55895
+ *
55896
+ * **A cell's place in its row is not its series' depth, and the tooltip
55897
+ * spent a while assuming it was.** `readSeries` drops a column nothing
55898
+ * parses and `readRows` keeps it, so one column of notes among the figures
55899
+ * moves every column after it one color along in the bubble: a row reading
55900
+ * `Referral 1,080` wearing series three's green beside a legend that says
55901
+ * series three is something else, which is the one failure the dot exists
55902
+ * to prevent.
55903
+ *
55904
+ * Overridden where a chart reads the table some other way. `ScatterChart`
55905
+ * splits the first plotted column off as the measure across, so its first
55906
+ * *plotted* series is this table's second numeric column.
55907
+ * - `showsSeries(name: string) => boolean`: Whether the series of this name is drawn, which it is unless a legend
55908
+ * reading the same table hid it.
55909
+ *
55910
+ * Asked of the table rather than of a legend, the table being the one
55911
+ * thing the two share: see `SourceController.hide`. A series keeps its
55912
+ * palette slot while it is hidden, so the colors of the others do not move.
55913
+ * For a ring the names are its rows, the slices being the rows.
55914
+ * - `showsColumn(cell: number) => boolean`: Whether the series read from the cell at this place in a row is drawn,
55915
+ * by its column's heading. The keys and the readout pass over one a
55916
+ * legend hid.
55917
+ *
55918
+ * A column's heading is the cell's name in every row, so the first row
55919
+ * answers for the column.
55920
+ * - `columnName(cell: number) => string`: The heading of the column at this place in a row: a cell's name is its
55921
+ * column's heading, read from the first row that has a cell there, so a
55922
+ * short first row does not lose the heading. `''` where no row has one.
55923
+ * - `pageFrom(at: number, forward: boolean) => number | undefined`: Where PageUp or PageDown goes from the drawn cell at `at`: the same day a
55924
+ * month on or back, by the dates the rows' headers carry. Undefined where
55925
+ * they carry none, and the keys move four columns.
55926
+ *
55927
+ * ## CSS Custom Properties
55928
+ *
55929
+ * CSS variables available for styling the component.
55930
+ *
55931
+ * - `--isometric-heatmap-cell-size`: The largest a cell grows, along its edge. The strip is never wider than its box, and draws smaller cells to fit.
55932
+ * - `--isometric-heatmap-left-shade`: How much darker the left face is than the top, as a percentage mixed toward black.
55933
+ * - `--isometric-heatmap-right-shade`: How much darker the right face is than the top, as a percentage mixed toward black.
55934
+ * - `--isometric-heatmap-selected-color`: The color of the dashed edges of a selected prism, under `selection-mode`. By default, white on a dark face and black on a light one.
55935
+ * - `--isometric-heatmap-span`: How many cells the drawing spans across: its columns and its rows together. The component writes it on the strip, and a stylesheet that caps the cell size reads it.
55936
+ * - `--heatmap-rows`: How many rows the strip lays out. The component writes it from the data, and the stylesheet that draws the strip reads it.
55937
+ * - `--heatmap-tone`: The tone of the cell it is set on. The component writes it, and the stylesheet that paints the cell reads it.
55938
+ * - `--heatmap-tone-1`: The weakest step of the magnitude ramp, used by `tones="1 …"`.
55939
+ * - `--heatmap-tone-2`: The second step of the magnitude ramp.
55940
+ * - `--heatmap-tone-3`: The third step of the magnitude ramp.
55941
+ * - `--heatmap-tone-4`: The fourth step of the magnitude ramp.
55942
+ * - `--heatmap-tone-5`: The strongest step of the magnitude ramp.
55943
+ * - `--heatmap-tone-accent`: The color of the `accent` tone.
55944
+ * - `--heatmap-tone-danger`: The color of the `danger` tone.
55945
+ * - `--heatmap-tone-info`: The color of the `info` tone.
55946
+ * - `--heatmap-tone-muted`: The color of the `muted` tone: a quiet background, for a bucket that means nothing happened.
55947
+ * - `--heatmap-tone-primary`: The color of the `primary` tone.
55948
+ * - `--heatmap-tone-success`: The color of the `success` tone, named in `tones` or in `data-tone`.
55949
+ * - `--heatmap-tone-warning`: The color of the `warning` tone.
55950
+ *
55951
+ * ## CSS Parts
55952
+ *
55953
+ * Custom selectors for styling elements within the component.
55954
+ *
55955
+ * - `cell`: One reading.
55956
+ * - `drawing`: The SVG every prism is drawn in. It is mirrored on a right-to-left page.
55957
+ * - `left-face`: The face of a prism toward the next row, drawn at its lower left.
55958
+ * - `right-face`: The face of a prism toward the next column, drawn at its lower right.
55959
+ * - `row`: A column of cells, which a grid reads as a row, under `selection-mode`. It draws no box.
55960
+ * - `strip`: The grid of cells, which takes focus to be read by key. It is named by the host's `aria-labelledby` or `aria-label`, then by `label`, then by the caption of the table.
55961
+ * - `top-face`: The top of a prism, which carries the reading's tone.
55962
+ * - `cell-active`: The cell the pointer or the keys rest on. Set alongside `cell`.
55963
+ * - `cell-selected`: A cell that is selected, under `selection-mode`. Set alongside `cell`.
55964
+ * - `empty`: The words under the strip when the table has no readings: the `empty` slot, falling back to `empty-text`. Not drawn while the table cannot be read yet, on the server and during hydration, there being no document to resolve `for` in.
55965
+ * - `end`: The trailing slot's box.
55966
+ * - `footer`: The three-slot row under the strip.
55967
+ * - `live`: The readout: a polite live region that says the cell the keys moved to. Hide it visually.
55968
+ * - `loading`: The words under the strip while `loading` is set and there are no readings: the `loading` slot, falling back to `loading-text`.
55969
+ * - `mark`: The invisible point the tooltip is anchored to.
55970
+ * - `overview`: The busiest reading and the total of the readings drawn, written as a sentence for screen readers, which describes the strip. Rendered once there are cells. Hide it visually.
55971
+ * - `plot`: The same element as `strip`, under the name every chart gives the drawing that takes focus.
55972
+ * - `selection`: A polite region that says how many cells are selected after a change, rendered from the first change. Hide it visually.
55973
+ * - `start`: The leading slot's box.
55974
+ * - `summary`: The middle slot's box.
55975
+ * - `table`: The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.
55976
+ * - `tooltip`: The bubble, forwarded from `Tooltip`.
55977
+ * - `tooltip-anchor`: The `Tooltip` element itself.
55978
+ * - `tooltip-arrow`: The bubble's point, forwarded from `Tooltip`.
55979
+ * - `tooltip-arrow-bottom`: The point while the bubble is below the reading, on its top edge. Set alongside `tooltip-arrow`.
55980
+ * - `tooltip-arrow-left`: The point while the bubble is left of the reading, on its right edge. Set alongside `tooltip-arrow`.
55981
+ * - `tooltip-arrow-right`: The point while the bubble is right of the reading, on its left edge. Set alongside `tooltip-arrow`.
55982
+ * - `tooltip-arrow-top`: The point while the bubble is above the reading, on its bottom edge. Set alongside `tooltip-arrow`.
55983
+ * - `tooltip-bottom`: The bubble while it is below the reading. Set alongside `tooltip`.
55984
+ * - `tooltip-cell`: One column's name and value inside the tooltip.
55985
+ * - `tooltip-cell-current`: The cell the series keys rest on, in the charts whose readings hold several series. A strip draws one, so it is never set here.
55986
+ * - `tooltip-label`: The reading's own name inside the tooltip.
55987
+ * - `tooltip-left`: The bubble while it is left of the reading. Set alongside `tooltip`.
55988
+ * - `tooltip-name`: A column's name inside the tooltip.
55989
+ * - `tooltip-right`: The bubble while it is right of the reading. Set alongside `tooltip`.
55990
+ * - `tooltip-top`: The bubble while it is above the reading. Set alongside `tooltip`.
55991
+ * - `tooltip-value`: A column's value inside the tooltip.
55992
+ *
55993
+ * ## CSS States
55994
+ *
55995
+ * These can be used to apply styling when a component is in a given state.
55996
+ *
55997
+ * - `active`: While a cell is shown, under the pointer or the keys, with its tooltip open.
55998
+ * - `empty`: While the `empty` part stands in place of the cells.
55999
+ * - `loading`: While the `loading` part stands in place of the cells.
56000
+ * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
56001
+ */
56002
+ "helix-isometric-heatmap": Partial<
56003
+ HelixIsometricHeatmapProps & BaseProps<HelixIsometricHeatmap> & BaseEvents<HelixIsometricHeatmap>
56004
+ >;
56005
+
55182
56006
  /**
55183
56007
  * Drawn as a physical key, with a hairline border, a sunken fill, and one inset
55184
56008
  * shadow along the bottom edge.
@@ -84517,11 +85341,6 @@ export type CustomElementsSolidJs = {
84517
85341
  * Reduced motion stills every animation. `auto-width` gives the box the
84518
85342
  * glyph's own proportions, for a mark wider than it is tall.
84519
85343
  *
84520
- * **`@fusion.dev/helix/icon` registers thirteen glyphs by name**, the ones a
84521
- * control most often needs, and `@fusion.dev/helix/icon/all` registers the
84522
- * whole set. The headless element lists the thirteen and says how a name is
84523
- * resolved.
84524
- *
84525
85344
  * ## Attributes & Properties
84526
85345
  *
84527
85346
  * Component attributes and properties that can be applied to the element or by using JavaScript.
@@ -84553,10 +85372,12 @@ export type CustomElementsSolidJs = {
84553
85372
  * - `name`: The name of the icon in the Helix set.
84554
85373
  *
84555
85374
  * **A lookup, and the reason both this and `icon` exist.** A name is a string,
84556
- * so it is what markup can carry, and resolving one means an index that no
84557
- * bundler can shake. The family's entry indexes a small set, `icon/all`
84558
- * indexes the whole set at 15 kB, and `icon/root` indexes nothing, for a
84559
- * page that registers the glyphs it names or hands over the value instead.
85375
+ * so it is what markup can carry, and resolving one means an index of the
85376
+ * whole set that no bundler can shake: 15 kB for a consumer who renders one
85377
+ * mark. An attribute is the only thing an HTML author can write, and that is
85378
+ * worth the index; a consumer who would rather not pay it imports the
85379
+ * element from `icon/root` and registers the glyphs it names, or hands over
85380
+ * the value instead.
84560
85381
  *
84561
85382
  * A name written `prefix:name` asks the library registered under that
84562
85383
  * prefix.
@@ -85115,6 +85936,343 @@ export type CustomElementsSolidJs = {
85115
85936
  BaseEvents<HelixInput>
85116
85937
  >;
85117
85938
 
85939
+ /**
85940
+ * Each reading is a prism. The top face takes the cell's tone, and the two
85941
+ * sides are the same tone, shaded darker, so the whole relief follows your
85942
+ * theme's colors.
85943
+ *
85944
+ * `tones="1 2 3 4 5"` uses the same five-step ramp as `Heatmap`, so the tone
85945
+ * and the height both show the value. Set `--isometric-heatmap-cell-size` to
85946
+ * change how large a cell may grow.
85947
+ *
85948
+ * ## Attributes & Properties
85949
+ *
85950
+ * Component attributes and properties that can be applied to the element or by using JavaScript.
85951
+ *
85952
+ * - `flat`: Draws every prism at no height, so the tones lie on a plane.
85953
+ * - `relief`: How tall the highest reading stands, in cells. Every other reading stands
85954
+ * at its share of it.
85955
+ * - `empty-text`/`emptyText`: The words shown in place of the drawing when the table has no readings,
85956
+ * and the fallback of the `empty` slot.
85957
+ * - `loading`: Whether the readings are still on their way. The chart shows
85958
+ * `loading-text` in place of an empty drawing until it has readings.
85959
+ *
85960
+ * Reflected, so a stylesheet can treat the chart while it waits. A chart
85961
+ * that already has readings keeps drawing them, so a refresh does not
85962
+ * blank it.
85963
+ * - `loading-text`/`loadingText`: The words shown in place of the drawing while `loading` is set and
85964
+ * there are no readings yet, and the fallback of the `loading` slot.
85965
+ * - `for`: The id of the table to read.
85966
+ *
85967
+ * Names a table in the same tree, so a chart inside another component's
85968
+ * shadow root reads a table in that root rather than one in the document. A
85969
+ * `<table>` or anything built from grid roles, including `helix-table`.
85970
+ *
85971
+ * **In React this arrives as a property and not as an attribute**, the way
85972
+ * `Tooltip.for` does, so it does not reflect and nothing styles on it.
85973
+ * - `label`: The chart's name, which starts the chart's text summary.
85974
+ *
85975
+ * Absent falls back to the table's own caption, which is usually the right
85976
+ * words and is already written.
85977
+ * - `locale`: The locale the chart's own numbers are written in: its axis, its
85978
+ * percentages and its totals, such as `de` for `1.240` and `32 %`.
85979
+ *
85980
+ * Absent reads the nearest `lang`, then the runtime's own. The table's
85981
+ * cells are shown as the table writes them, whatever this says.
85982
+ * - `position-label`/`positionLabel`: Where a reading the keys moved to stands among the readings, said after
85983
+ * it. `{position}` and `{count}` are replaced with the numbers, written in
85984
+ * `locale`.
85985
+ *
85986
+ * Set it to the words of the page's language, such as `{position} von
85987
+ * {count}`, or to nothing to say no position. A slice or a series a
85988
+ * legend hid is not counted.
85989
+ * - `busiest-label`/`busiestLabel`: The name the `overview` gives the busiest reading, `{busiestLabel}` in
85990
+ * `overview-label`.
85991
+ * - `gap`: Space between cells, in CSS pixels. It is a number for the same reason
85992
+ * `min-cell` is.
85993
+ * - `min-cell`/`minCell`: The smallest a cell may get before the strip draws fewer of them, in CSS pixels.
85994
+ *
85995
+ * **Set this only to overrule what the strip actually draws.** The arithmetic
85996
+ * needs a width in pixels and the width is a length the stylesheet resolves,
85997
+ * so a number written here that disagrees with the sheet is a promise the
85998
+ * consumer has to keep by hand, and the one number a summary is told to trust
85999
+ * is the one it gets wrong.
86000
+ *
86001
+ * The strip measures itself, so sizing the cells in a sheet is enough on its
86002
+ * own and these two are the estimate used until the first measurement lands.
86003
+ * Writing the attribute pins the value and stops the measurement being
86004
+ * consulted, which is what a container query or a transition on the cell size
86005
+ * wants, where what is drawn this frame is not what the arithmetic should
86006
+ * plan around.
86007
+ *
86008
+ * Zero turns the dropping off altogether, which is right for a strip in a
86009
+ * container that cannot get narrow.
86010
+ * - `overview-label`/`overviewLabel`: The `overview`'s sentence. `{busiestLabel}` and `{totalLabel}` are
86011
+ * `busiest-label` and `total-label`, `{busiest}` the busiest reading's name
86012
+ * and its reading as the table writes it, and `{total}` the total of the
86013
+ * readings drawn, written in the locale.
86014
+ * - `rows`: How many rows the strip has.
86015
+ *
86016
+ * `1` is a status strip and `7` is a calendar week, which are the two readings
86017
+ * this covers. Cells fill down the column and then across, which is what a
86018
+ * calendar heatmap does: a week is a column, so the strip reads along the
86019
+ * line in weeks, from the right on a right-to-left page, and top to bottom in
86020
+ * days.
86021
+ * - `selected-label`/`selectedLabel`: What the readout added for a selected cell, under `selection-mode`.
86022
+ * - `selection-label`/`selectionLabel`: What the `selection` part says after the selection changes. `{count}` is
86023
+ * how many cells are selected, written in the locale, and a language that
86024
+ * needs plural forms writes them: `{count, plural, one {# wybrany} few
86025
+ * {# wybrane} many {# wybranych} other {# wybranego}}`.
86026
+ * - `selection-mode`/`selectionMode`: How many cells a reader can select: `single` or `multiple`.
86027
+ *
86028
+ * Absent selects nothing, and a press or Space does what it did.
86029
+ * - `selection-shape`/`selectionShape`: What Shift takes in under `selection-mode="multiple"`: `linear`, every
86030
+ * cell between two in the table's order, or `rectangle`, the cells between
86031
+ * two corners by row and by column, as a spreadsheet selects a range.
86032
+ * - `strip-label`/`stripLabel`: The strip's name where the chart has none: no `aria-label`, `label`, or
86033
+ * table caption.
86034
+ * - `thresholds`: Lower bounds for the tone buckets, in the order the tones are given.
86035
+ *
86036
+ * `thresholds="1 3 6 9"` with `tones="1 2 3 4"` puts 1 and 2 in the ramp's
86037
+ * first step, 3 to 5 in the second, 6 to 8 in the third, and 9 upward in the
86038
+ * fourth. A value below the first bound gets no tone at all: an empty day in a
86039
+ * contribution graph is a day with nothing in it, and painting it as the
86040
+ * lowest bucket claims a reading that does not exist.
86041
+ * - `tones`: The tone for each bucket, in the same order as `thresholds`.
86042
+ *
86043
+ * A name, resolved as `--heatmap-tone-<name>` by whichever tier answers.
86044
+ * **`"1"` through `"5"` are a ramp and everything else is a category**, which
86045
+ * is the distinction a heatmap lives or dies on: magnitude has to be one hue
86046
+ * getting louder, because a reader compares two cells by weight and cannot
86047
+ * compare two hues at all. `tones="surface info accent success primary"` for a
86048
+ * commit count is five unrelated hues for five amounts, which is confetti with
86049
+ * no order in it.
86050
+ * - `total-label`/`totalLabel`: The name the `overview` gives the total of the readings drawn,
86051
+ * `{totalLabel}` in `overview-label`.
86052
+ * - `value`: The selected cells, separated by commas: each by the date its row's
86053
+ * header carries in a `<time datetime>`, such as `2026-06-11`, or by the
86054
+ * header's words where it carries none.
86055
+ *
86056
+ * Set it to start with cells selected. Written by a press or a key under
86057
+ * `selection-mode`.
86058
+ * - `data`: The readings as data, in the shape of a table, where the page has no
86059
+ * table to point `for` at. `for` wins where both are set.
86060
+ *
86061
+ * ```js
86062
+ * chart.data = {
86063
+ * caption: 'Sessions by channel',
86064
+ * columns: ['Month', 'Direct', 'Referral'],
86065
+ * rows: [['Jan', 10, 4], ['Feb', 20, 8]],
86066
+ * }
86067
+ * ```
86068
+ *
86069
+ * The first column holds each row's label and every column after it a
86070
+ * series, as in a table. A cell is a number, words, `null` for a blank,
86071
+ * or `{ value, text }` for a number shown as words, such as `$128k`. A
86072
+ * number is shown in `locale`.
86073
+ *
86074
+ * **A table is still the better source where the page can show one**:
86075
+ * it reads with no script and before hydration, and a reader can sort and
86076
+ * copy it. Data is drawn on the client only, so a server serves the
86077
+ * frame, and the summary, the keys and the readout are then the whole of
86078
+ * what a screen reader is given. Set a new object to redraw: the chart
86079
+ * does not look inside the one it has. (property only)
86080
+ * - `series`: The table's columns, one series each. Empty when there is no table.
86081
+ *
86082
+ * Held by the controller between edits, so a render reading this five
86083
+ * times parses the table once. See `SourceController.series`. (property only) (readonly)
86084
+ * - `named`: The chart's name: an `aria-label` written on the chart, then `label`,
86085
+ * then the table's caption.
86086
+ *
86087
+ * The fallback is the reason this is shared rather than copied: a caption is
86088
+ * already written, already the right words, and already the thing a reader
86089
+ * of the table sees. A chart that made the consumer say it twice would be
86090
+ * asking for the second one to drift.
86091
+ *
86092
+ * **An `aria-label` on the chart comes first**, because it is how a page
86093
+ * names an element, and the chart is a generic around its plot: written
86094
+ * on the host, the name reached nobody. The plot takes it, as Heatmap's
86095
+ * strip always did. (property only) (readonly)
86096
+ * - `plottedColumns`: The positions of the cells in a row that hold numbers, in table order.
86097
+ *
86098
+ * The same test `readSeries` applies when it drops a column of notes: a
86099
+ * column is a series where any row parses, so a series survives one blank
86100
+ * cell and a column of words is never one. (property only) (readonly)
86101
+ * - `readings`: The number of readings, which the pointer position maps onto. (property only) (readonly)
86102
+ * - `visible`: How many cells are actually drawn.
86103
+ *
86104
+ * **This is the number a summary has to agree with**, and the reason it is
86105
+ * published at all: a consumer's own summary is their markup and this element
86106
+ * cannot rewrite it, so the only honest arrangement is to hand over the count
86107
+ * and say when it changed.
86108
+ *
86109
+ * **A plain getter, and the attribute is written in `updated`, because
86110
+ * `@property({ reflect: true })` on a getter with no setter reflects once and
86111
+ * then goes stale.** Lit reflects a property that is in `changedProperties`,
86112
+ * and nothing puts a derived getter there after the first update: the
86113
+ * attribute would be right on load and wrong from the first resize, which is
86114
+ * the exact failure the count exists to prevent, arriving through the
86115
+ * mechanism meant to prevent it. (property only) (readonly)
86116
+ * - `whenSettled`: Resolves a frame after the first update, when transitions are switched on.
86117
+ *
86118
+ * **Named `whenSettled` because `settled` is taken four times over**, by
86119
+ * Image, Splitter and both color controls, none of them about transitions. A
86120
+ * base class takes the name every subclass then cannot use.
86121
+ *
86122
+ * **The state it reports cannot be watched, which is why this exists.** A
86123
+ * custom state is deliberately not in the DOM, so there is no
86124
+ * `MutationObserver` equivalent for `ElementInternals.states`. Await this
86125
+ * instead.
86126
+ *
86127
+ * Separate from `updateComplete`, which resolves in the microtask checkpoint
86128
+ * the suppression is still active in. That is the distinction `readyToMove`
86129
+ * in `@fusion.dev/helix-testing` is written around.
86130
+ *
86131
+ * It never resolves where `requestAnimationFrame` never fires, which is a
86132
+ * server, a hidden tab, and happy-dom. Callers that must not hang there race
86133
+ * it against a timeout, as the happy-dom harness's `readyToMove` does. The
86134
+ * browser harness's awaits it alone: a browser always runs the frame, and a
86135
+ * timer beside it was a bet on how long one takes, which a busy run lost. (property only) (readonly)
86136
+ *
86137
+ * ## Events
86138
+ *
86139
+ * Events that will be emitted by the component.
86140
+ *
86141
+ * - `change`: Fired once a press or a key has changed which cells are selected.
86142
+ * - `helix-before-change`: Fired before a press or a key changes which cells are selected, with the `value` it would leave. Cancelable.
86143
+ * - `helix-reading-change`: The reading shown moved, or was put away: `index` is the row, or `-1` for none, with its `label`, the `series` the keys rest on, and the `pointerType` that moved it.
86144
+ * - `helix-reading-press`: A reading was clicked, tapped, or pressed with Enter or Space, with the same detail as `helix-reading-change`.
86145
+ * - `helix-resize`: Fired when the number of cells drawn changes, with the new number.
86146
+ *
86147
+ * ## Slots
86148
+ *
86149
+ * Areas where markup can be added to the component.
86150
+ *
86151
+ * - `empty`: Content shown under the strip when the table has no readings, such as a link to add the first. Falls back to `empty-text`.
86152
+ * - `end`: Below the strip, at the trailing edge: usually the newest date.
86153
+ * - `loading`: Content shown under the strip while `loading` is set and there are no readings yet. Falls back to `loading-text`.
86154
+ * - `start`: Below the strip, at the leading edge: usually the oldest date.
86155
+ * - `summary`: Below the strip, in the middle: a summary of the range shown.
86156
+ *
86157
+ * ## Methods
86158
+ *
86159
+ * Methods that can be called to access component functionality.
86160
+ *
86161
+ * - `seriesOf(cell: number) => number | undefined`: The palette slot for the cell at this position in a row.
86162
+ *
86163
+ * **A cell's place in its row is not its series' depth, and the tooltip
86164
+ * spent a while assuming it was.** `readSeries` drops a column nothing
86165
+ * parses and `readRows` keeps it, so one column of notes among the figures
86166
+ * moves every column after it one color along in the bubble: a row reading
86167
+ * `Referral 1,080` wearing series three's green beside a legend that says
86168
+ * series three is something else, which is the one failure the dot exists
86169
+ * to prevent.
86170
+ *
86171
+ * Overridden where a chart reads the table some other way. `ScatterChart`
86172
+ * splits the first plotted column off as the measure across, so its first
86173
+ * *plotted* series is this table's second numeric column.
86174
+ * - `showsSeries(name: string) => boolean`: Whether the series of this name is drawn, which it is unless a legend
86175
+ * reading the same table hid it.
86176
+ *
86177
+ * Asked of the table rather than of a legend, the table being the one
86178
+ * thing the two share: see `SourceController.hide`. A series keeps its
86179
+ * palette slot while it is hidden, so the colors of the others do not move.
86180
+ * For a ring the names are its rows, the slices being the rows.
86181
+ * - `showsColumn(cell: number) => boolean`: Whether the series read from the cell at this place in a row is drawn,
86182
+ * by its column's heading. The keys and the readout pass over one a
86183
+ * legend hid.
86184
+ *
86185
+ * A column's heading is the cell's name in every row, so the first row
86186
+ * answers for the column.
86187
+ * - `columnName(cell: number) => string`: The heading of the column at this place in a row: a cell's name is its
86188
+ * column's heading, read from the first row that has a cell there, so a
86189
+ * short first row does not lose the heading. `''` where no row has one.
86190
+ * - `pageFrom(at: number, forward: boolean) => number | undefined`: Where PageUp or PageDown goes from the drawn cell at `at`: the same day a
86191
+ * month on or back, by the dates the rows' headers carry. Undefined where
86192
+ * they carry none, and the keys move four columns.
86193
+ *
86194
+ * ## CSS Custom Properties
86195
+ *
86196
+ * CSS variables available for styling the component.
86197
+ *
86198
+ * - `--isometric-heatmap-cell-size`: The largest a cell grows, along its edge. The strip is never wider than its box, and draws smaller cells to fit.
86199
+ * - `--isometric-heatmap-left-shade`: How much darker the left face is than the top, as a percentage mixed toward black.
86200
+ * - `--isometric-heatmap-right-shade`: How much darker the right face is than the top, as a percentage mixed toward black.
86201
+ * - `--isometric-heatmap-selected-color`: The color of the dashed edges of a selected prism, under `selection-mode`. By default, white on a dark face and black on a light one.
86202
+ * - `--isometric-heatmap-span`: How many cells the drawing spans across: its columns and its rows together. The component writes it on the strip, and a stylesheet that caps the cell size reads it.
86203
+ * - `--heatmap-rows`: How many rows the strip lays out. The component writes it from the data, and the stylesheet that draws the strip reads it.
86204
+ * - `--heatmap-tone`: The tone of the cell it is set on. The component writes it, and the stylesheet that paints the cell reads it.
86205
+ * - `--heatmap-tone-1`: The weakest step of the magnitude ramp, used by `tones="1 …"`.
86206
+ * - `--heatmap-tone-2`: The second step of the magnitude ramp.
86207
+ * - `--heatmap-tone-3`: The third step of the magnitude ramp.
86208
+ * - `--heatmap-tone-4`: The fourth step of the magnitude ramp.
86209
+ * - `--heatmap-tone-5`: The strongest step of the magnitude ramp.
86210
+ * - `--heatmap-tone-accent`: The color of the `accent` tone.
86211
+ * - `--heatmap-tone-danger`: The color of the `danger` tone.
86212
+ * - `--heatmap-tone-info`: The color of the `info` tone.
86213
+ * - `--heatmap-tone-muted`: The color of the `muted` tone: a quiet background, for a bucket that means nothing happened.
86214
+ * - `--heatmap-tone-primary`: The color of the `primary` tone.
86215
+ * - `--heatmap-tone-success`: The color of the `success` tone, named in `tones` or in `data-tone`.
86216
+ * - `--heatmap-tone-warning`: The color of the `warning` tone.
86217
+ *
86218
+ * ## CSS Parts
86219
+ *
86220
+ * Custom selectors for styling elements within the component.
86221
+ *
86222
+ * - `cell`: One reading.
86223
+ * - `drawing`: The SVG every prism is drawn in. It is mirrored on a right-to-left page.
86224
+ * - `left-face`: The face of a prism toward the next row, drawn at its lower left.
86225
+ * - `right-face`: The face of a prism toward the next column, drawn at its lower right.
86226
+ * - `row`: A column of cells, which a grid reads as a row, under `selection-mode`. It draws no box.
86227
+ * - `strip`: The grid of cells, which takes focus to be read by key. It is named by the host's `aria-labelledby` or `aria-label`, then by `label`, then by the caption of the table.
86228
+ * - `top-face`: The top of a prism, which carries the reading's tone.
86229
+ * - `cell-active`: The cell the pointer or the keys rest on. Set alongside `cell`.
86230
+ * - `cell-selected`: A cell that is selected, under `selection-mode`. Set alongside `cell`.
86231
+ * - `empty`: The words under the strip when the table has no readings: the `empty` slot, falling back to `empty-text`. Not drawn while the table cannot be read yet, on the server and during hydration, there being no document to resolve `for` in.
86232
+ * - `end`: The trailing slot's box.
86233
+ * - `footer`: The three-slot row under the strip.
86234
+ * - `live`: The readout: a polite live region that says the cell the keys moved to. Hide it visually.
86235
+ * - `loading`: The words under the strip while `loading` is set and there are no readings: the `loading` slot, falling back to `loading-text`.
86236
+ * - `mark`: The invisible point the tooltip is anchored to.
86237
+ * - `overview`: The busiest reading and the total of the readings drawn, written as a sentence for screen readers, which describes the strip. Rendered once there are cells. Hide it visually.
86238
+ * - `plot`: The same element as `strip`, under the name every chart gives the drawing that takes focus.
86239
+ * - `selection`: A polite region that says how many cells are selected after a change, rendered from the first change. Hide it visually.
86240
+ * - `start`: The leading slot's box.
86241
+ * - `summary`: The middle slot's box.
86242
+ * - `table`: The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.
86243
+ * - `tooltip`: The bubble, forwarded from `Tooltip`.
86244
+ * - `tooltip-anchor`: The `Tooltip` element itself.
86245
+ * - `tooltip-arrow`: The bubble's point, forwarded from `Tooltip`.
86246
+ * - `tooltip-arrow-bottom`: The point while the bubble is below the reading, on its top edge. Set alongside `tooltip-arrow`.
86247
+ * - `tooltip-arrow-left`: The point while the bubble is left of the reading, on its right edge. Set alongside `tooltip-arrow`.
86248
+ * - `tooltip-arrow-right`: The point while the bubble is right of the reading, on its left edge. Set alongside `tooltip-arrow`.
86249
+ * - `tooltip-arrow-top`: The point while the bubble is above the reading, on its bottom edge. Set alongside `tooltip-arrow`.
86250
+ * - `tooltip-bottom`: The bubble while it is below the reading. Set alongside `tooltip`.
86251
+ * - `tooltip-cell`: One column's name and value inside the tooltip.
86252
+ * - `tooltip-cell-current`: The cell the series keys rest on, in the charts whose readings hold several series. A strip draws one, so it is never set here.
86253
+ * - `tooltip-label`: The reading's own name inside the tooltip.
86254
+ * - `tooltip-left`: The bubble while it is left of the reading. Set alongside `tooltip`.
86255
+ * - `tooltip-name`: A column's name inside the tooltip.
86256
+ * - `tooltip-right`: The bubble while it is right of the reading. Set alongside `tooltip`.
86257
+ * - `tooltip-top`: The bubble while it is above the reading. Set alongside `tooltip`.
86258
+ * - `tooltip-value`: A column's value inside the tooltip.
86259
+ *
86260
+ * ## CSS States
86261
+ *
86262
+ * These can be used to apply styling when a component is in a given state.
86263
+ *
86264
+ * - `active`: While a cell is shown, under the pointer or the keys, with its tooltip open.
86265
+ * - `empty`: While the `empty` part stands in place of the cells.
86266
+ * - `loading`: While the `loading` part stands in place of the cells.
86267
+ * - `settled`: Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.
86268
+ */
86269
+ "helix-isometric-heatmap": Partial<
86270
+ HelixIsometricHeatmapProps &
86271
+ HelixIsometricHeatmapSolidJsProps &
86272
+ BaseProps<HelixIsometricHeatmap> &
86273
+ BaseEvents<HelixIsometricHeatmap>
86274
+ >;
86275
+
85118
86276
  /**
85119
86277
  * Drawn as a physical key, with a hairline border, a sunken fill, and one inset
85120
86278
  * shadow along the bottom edge.
@@ -103422,6 +104580,16 @@ export type CustomCssProperties = {
103422
104580
  "--input-radius"?: (string) | undefined;
103423
104581
  /** Height of the field. */
103424
104582
  "--input-size"?: (string) | undefined;
104583
+ /** The largest a cell grows, along its edge. The strip is never wider than its box, and draws smaller cells to fit. */
104584
+ "--isometric-heatmap-cell-size"?: (string) | undefined;
104585
+ /** How much darker the left face is than the top, as a percentage mixed toward black. */
104586
+ "--isometric-heatmap-left-shade"?: (string) | undefined;
104587
+ /** How much darker the right face is than the top, as a percentage mixed toward black. */
104588
+ "--isometric-heatmap-right-shade"?: (string) | undefined;
104589
+ /** The color of the dashed edges of a selected prism, under `selection-mode`. By default, white on a dark face and black on a light one. */
104590
+ "--isometric-heatmap-selected-color"?: (string) | undefined;
104591
+ /** How many cells the drawing spans across: its columns and its rows together. The component writes it on the strip, and a stylesheet that caps the cell size reads it. */
104592
+ "--isometric-heatmap-span"?: (string) | undefined;
103425
104593
  /** The fill of the key. */
103426
104594
  "--kbd-background-color"?: (string) | undefined;
103427
104595
  /** The height of a key, and the least width of one, in `em` of the text around it. */