@fusion.dev/helix-headless 0.176.0 → 0.177.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.
Files changed (39) hide show
  1. package/custom-elements.json +610 -696
  2. package/dist/area-chart/root/area-chart-root.d.ts +18 -1
  3. package/dist/area-chart/root/area-chart-root.js +2 -2
  4. package/dist/avatar/root/avatar-root.d.ts +1 -1
  5. package/dist/avatar/root/avatar-root.js +1 -1
  6. package/dist/bar-chart/root/bar-chart-root.d.ts +19 -1
  7. package/dist/bar-chart/root/bar-chart-root.js +2 -2
  8. package/dist/canvas/node/canvas-node.js +1 -1
  9. package/dist/canvas/root/canvas-root.d.ts +5 -1
  10. package/dist/canvas/root/canvas-root.js +9 -1
  11. package/dist/donut-chart/root/donut-chart-root.d.ts +37 -2
  12. package/dist/donut-chart/root/donut-chart-root.js +22 -8
  13. package/dist/element-events.generated.js +2 -0
  14. package/dist/graph/root/graph-root.d.ts +28 -3
  15. package/dist/graph/root/graph-root.js +38 -3
  16. package/dist/heatmap/root/heatmap-root.d.ts +28 -5
  17. package/dist/heatmap/root/heatmap-root.js +7 -2
  18. package/dist/line-chart/root/line-chart-root.d.ts +18 -1
  19. package/dist/line-chart/root/line-chart-root.js +2 -2
  20. package/dist/loader/root/loader-root.d.ts +15 -0
  21. package/dist/loader/root/loader-root.js +28 -6
  22. package/dist/rating/root/rating-root.d.ts +2 -1
  23. package/dist/rating/root/rating-root.js +8 -2
  24. package/dist/scatter-chart/root/scatter-chart-root.d.ts +29 -6
  25. package/dist/scatter-chart/root/scatter-chart-root.js +18 -3
  26. package/dist/select/root/select-root.d.ts +4 -1
  27. package/dist/select/root/select-root.js +1 -0
  28. package/dist/sparkline/root/sparkline-root.d.ts +29 -4
  29. package/dist/sparkline/root/sparkline-root.js +8 -1
  30. package/dist/tag/group/tag-group.d.ts +4 -3
  31. package/dist/tag/group/tag-group.js +6 -5
  32. package/dist/tag/root/tag-root.js +2 -1
  33. package/dist/tree/item/tree-item.d.ts +4 -4
  34. package/dist/tree/item/tree-item.js +5 -1
  35. package/lint.json +1 -1
  36. package/package.json +5 -5
  37. package/types/jsx.d.ts +532 -364
  38. package/types/vue.d.ts +86 -19
  39. package/types/words.d.ts +22 -0
@@ -3423,7 +3423,7 @@
3423
3423
  "declarations": [
3424
3424
  {
3425
3425
  "kind": "class",
3426
- "description": "Shows how a total is made up. Each numeric column of the table is a part, the\nparts add up to the total at each reading, and the top edge is that total.\nThe thickness of a band is that part's amount.\n\nUse `LineChart` with `area` to show how each series moved: it fills each\nseries from the floor separately, so the fills overlap. Use this chart to\nshow the composition: it stacks the series.\n\n**The value axis always starts at zero**, as in `BarChart`, because a band's\nthickness is its value. For the same reason there is no streamgraph mode,\nwhich moves the baseline. To show how the composition changed, set `share`.\n\nBand edges are straight between readings by default. A smoothed curve through\none sum can dip below the curve through the sum beneath it, which draws a\npart as less than zero. Other curves:\n\n- `curve=\"smooth\"`: for a stack read as an overall shape.\n- `curve=\"step\"`: holds each reading and jumps at the midpoint, so stacked\n edges stay in order, as with `straight`. Use it for a quantity that changes\n at a moment, such as a headcount or a price.\n\n`share` draws each reading as 100 percent, so the top edge is flat and the\nbands show each part's share. Use it to see which part grew. The default\nshows whether the total grew.\n\n`overlap` draws every band from zero, one in front of another, so each\npart's own amount is its height: the first column is in front. Use it to\ncompare the parts with each other; the scale then fits the largest part\nrather than the total.\n\n`value-axis` draws the scale's numbers beside the plot, at the levels\n`gridlines` rules: amounts in `locale`, or percentages under `share`.\n\nThe drawing is hidden from screen readers. The text summary gives the latest\nreading's total and each part's share of it, and the table beside the chart\nhas every number.\n\n**The plot is read by key.** It takes focus, named by `label` or the caption.\nThe left and right arrows move from reading to reading, Home and End go to\nthe first and the last, and the up and down arrows move among the series of\na reading. The tooltip follows, the `live` part says the reading in words,\nand Escape puts the tooltip away.\n\nEvery numeric column is a part, so leave a total column out of the table the\nchart reads, or it is counted twice. A negative reading is drawn as zero.\n\n**A tap shows the reading under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the reading, by pointer,\ntap or key, and `helix-reading-press` says a reading was clicked, tapped, or\npressed with Enter or Space, for a page that opens what a reading stands for.\n\n**`data` takes the readings as data** where the page has no table to point\n`for` at, in a table's shape: the column headings, then one row per reading\nwith its label first. A table is still the better source where the page can\nshow one, since it reads before any script runs.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place, such as a link to add the first reading.",
3426
+ "description": "Shows how a total is made up. Each numeric column of the table is a part, the\nparts add up to the total at each reading, and the top edge is that total.\nThe thickness of a band is that part's amount.\n\nUse `LineChart` with `area` to show how each series moved: it fills each\nseries from the floor separately, so the fills overlap. Use this chart to\nshow the composition: it stacks the series.\n\n**The value axis always starts at zero**, as in `BarChart`, because a band's\nthickness is its value. For the same reason there is no streamgraph mode,\nwhich moves the baseline. To show how the composition changed, set `share`.\n\nBand edges are straight between readings by default. A smoothed curve through\none sum can dip below the curve through the sum beneath it, which draws a\npart as less than zero. Other curves:\n\n- `curve=\"smooth\"`: for a stack read as an overall shape.\n- `curve=\"step\"`: holds each reading and jumps at the midpoint, so stacked\n edges stay in order, as with `straight`. Use it for a quantity that changes\n at a moment, such as a headcount or a price.\n\n`share` draws each reading as 100 percent, so the top edge is flat and the\nbands show each part's share. Use it to see which part grew. The default\nshows whether the total grew.\n\n`overlap` draws every band from zero, one in front of another, so each\npart's own amount is its height: the first column is in front. Use it to\ncompare the parts with each other; the scale then fits the largest part\nrather than the total.\n\n`value-axis` draws the scale's numbers beside the plot, at the levels\n`gridlines` rules: amounts in `locale`, or percentages under `share`.\n\nThe drawing is hidden from screen readers. The text summary gives the latest\nreading's total and each part's share of it, and the table beside the chart\nhas every number.\n\n**The plot is read by key.** It takes focus, named by `label` or the caption.\nThe left and right arrows move from reading to reading, Home and End go to\nthe first and the last, and the up and down arrows move among the series of\na reading. The tooltip follows, the `live` part says the reading in words,\nand Escape puts the tooltip away.\n\nEvery numeric column is a part, so leave a total column out of the table the\nchart reads, or it is counted twice. A negative reading is drawn as zero.\n\n**A tap shows the reading under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the reading, by pointer,\ntap or key, and `helix-reading-press` says a reading was clicked, tapped, or\npressed with Enter or Space, for a page that opens what a reading stands for.\n\n**`data` takes the readings as data** where the page has no table to point\n`for` at, in a table's shape: the column headings, then one row per reading\nwith its label first. A table is still the better source where the page can\nshow one, since it reads before any script runs.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place, such as a link to add the first reading.\n\n**Keyboard.** The plot is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Tab | Moves focus to the plot and shows the first reading. |\n| Right, Left | Moves to the next or the previous reading. On a right-to-left page, Left moves to the next. |\n| Down, Up | Moves among the series of the reading. With one series, moves to the next or the previous reading. |\n| Home, End | Moves to the first or the last reading. |\n| Page Down, Page Up | Moves a tenth of the readings on or back. |\n| Enter, Space | Presses the reading shown, which sends `helix-reading-press`. |\n| Escape | Puts the reading and its tooltip away. |",
3427
3427
  "name": "HelixHeadlessAreaChart",
3428
3428
  "cssProperties": [
3429
3429
  {
@@ -3481,7 +3481,7 @@
3481
3481
  "name": "mark"
3482
3482
  },
3483
3483
  {
3484
- "description": "The drawing, which takes focus to be read by key.",
3484
+ "description": "The drawing, which takes focus to be read by key. With nothing to draw, a group named as the chart is, holding the `empty` or `loading` part.",
3485
3485
  "name": "plot"
3486
3486
  },
3487
3487
  {
@@ -3492,6 +3492,10 @@
3492
3492
  "description": "The drawing surface the bands sit on.",
3493
3493
  "name": "svg"
3494
3494
  },
3495
+ {
3496
+ "description": "The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.",
3497
+ "name": "table"
3498
+ },
3495
3499
  {
3496
3500
  "description": "One number on the axis, placed with `inset-block-start` at its level.",
3497
3501
  "name": "tick"
@@ -4034,23 +4038,27 @@
4034
4038
  }
4035
4039
  },
4036
4040
  {
4037
- "kind": "field",
4038
- "name": "source",
4041
+ "kind": "method",
4042
+ "name": "renderEmpty",
4039
4043
  "privacy": "protected",
4040
- "readonly": true,
4041
- "default": "new SourceController(this)",
4042
- "description": "Resolves `for` and re-renders when the table behind it changes.",
4044
+ "return": {
4045
+ "type": {
4046
+ "text": "TemplateResult"
4047
+ }
4048
+ },
4049
+ "description": "The plot while there is nothing to draw: a group named as the chart is,\nholding `renderStatus`. Not focusable, there being no reading to walk.",
4043
4050
  "inheritedFrom": {
4044
- "name": "MixinChartSource",
4045
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4051
+ "name": "MixinChartStatus",
4052
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
4046
4053
  }
4047
4054
  },
4048
4055
  {
4049
4056
  "kind": "field",
4050
- "name": "pointer",
4057
+ "name": "source",
4058
+ "privacy": "protected",
4051
4059
  "readonly": true,
4052
- "default": "new ChartPointerController(this)",
4053
- "description": "Finds the reading nearest the pointer, so the tooltip can sit on it.\n\nPublic for the same reason `series` and `named` are: a protected member\ncannot be cast onto across unrelated classes, so it would be invisible to\nevery chart that needs it. Reading where a pointer is resting is a fair\nthing to ask a chart anyway.",
4060
+ "default": "new SourceController(this)",
4061
+ "description": "Resolves `for` and re-renders when the table behind it changes.",
4054
4062
  "inheritedFrom": {
4055
4063
  "name": "MixinChartSource",
4056
4064
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
@@ -4128,57 +4136,6 @@
4128
4136
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4129
4137
  }
4130
4138
  },
4131
- {
4132
- "kind": "field",
4133
- "name": "observedAttributes",
4134
- "type": {
4135
- "text": "string[]"
4136
- },
4137
- "static": true,
4138
- "description": "Hears an `aria-label` written on the chart, which no property mirrors,\nso a page that names the chart that way names its plot.\n\nLit observes the attributes of its own properties only, and `ariaLabel`\nbelongs to the platform.\n\nRead through `Reflect.get` with this class as the receiver, which is\nwhat `super.observedAttributes` means: Lit's getter finalizes whichever\nclass it is asked on, and asked on the base it would finalize the base\nand leave a subclass without its styles. A mixin's base has no static\nside TypeScript can see, so `super` cannot be written here.",
4139
- "readonly": true,
4140
- "inheritedFrom": {
4141
- "name": "MixinChartSource",
4142
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4143
- }
4144
- },
4145
- {
4146
- "kind": "method",
4147
- "name": "attributeChangedCallback",
4148
- "return": {
4149
- "type": {
4150
- "text": "void"
4151
- }
4152
- },
4153
- "parameters": [
4154
- {
4155
- "name": "name",
4156
- "type": {
4157
- "text": "string"
4158
- }
4159
- },
4160
- {
4161
- "name": "old",
4162
- "type": {
4163
- "text": "string | null"
4164
- }
4165
- },
4166
- {
4167
- "name": "value",
4168
- "type": {
4169
- "text": "string | null"
4170
- }
4171
- }
4172
- ],
4173
- "description": "Called by the browser when an observed attribute changes. A new\n`aria-label` asks for an update, because it names the plot.",
4174
- "inheritedFrom": {
4175
- "name": "MixinChartSource",
4176
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4177
- },
4178
- "type": {
4179
- "text": "attributeChangedCallback(name: string, old: string | null, value: string | null) => void"
4180
- }
4181
- },
4182
4139
  {
4183
4140
  "kind": "field",
4184
4141
  "name": "series",
@@ -4205,32 +4162,6 @@
4205
4162
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4206
4163
  }
4207
4164
  },
4208
- {
4209
- "kind": "field",
4210
- "name": "readingsKnown",
4211
- "type": {
4212
- "text": "boolean"
4213
- },
4214
- "description": "Whether the readings have been looked for: false on the server and\nwhile hydrating, where no table is resolved and no data is read. A\nchart says it has no readings only once this is true.",
4215
- "readonly": true,
4216
- "inheritedFrom": {
4217
- "name": "MixinChartSource",
4218
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4219
- }
4220
- },
4221
- {
4222
- "kind": "field",
4223
- "name": "sourceRows",
4224
- "type": {
4225
- "text": "Row[]"
4226
- },
4227
- "description": "Every row of the table, with each cell's text and number.\n\nThis is where a tooltip's content comes from, and it is deliberately not\n`series`. A chart draws numbers; a reader resting a pointer on one wants\nwhat the table says, which is `$128k` and not `128000`, and often wants\nthe column beside it that nothing plotted at all.\n\n**Not `rows`.** It is the source table's rows, and `rows` on a chart is a\nname a chart wants for itself: `helix-heatmap` takes `rows=\"7\"` to mean a\ncalendar week, and declaring that against a base class whose `rows` is a\n`Row[]` getter is a type error at best. Name the member for what it holds\nrather than for the shortest word available.",
4228
- "readonly": true,
4229
- "inheritedFrom": {
4230
- "name": "MixinChartSource",
4231
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4232
- }
4233
- },
4234
4165
  {
4235
4166
  "kind": "field",
4236
4167
  "name": "plottedColumns",
@@ -4357,6 +4288,21 @@
4357
4288
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4358
4289
  }
4359
4290
  },
4291
+ {
4292
+ "kind": "method",
4293
+ "name": "renderTable",
4294
+ "privacy": "protected",
4295
+ "return": {
4296
+ "type": {
4297
+ "text": "TemplateResult | typeof nothing"
4298
+ }
4299
+ },
4300
+ "description": "The readings as a table, for a screen reader, where they were drawn from\n`data`: there is then no table on the page to read, and a chart's\nsummary gives only what the readings come to. Nothing where a table on\nthe page was read, which is already the readable version.\n\nThe `table` part, named by the chart, its cells as `data` writes them.",
4301
+ "inheritedFrom": {
4302
+ "name": "MixinChartSource",
4303
+ "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
4304
+ }
4305
+ },
4360
4306
  {
4361
4307
  "kind": "field",
4362
4308
  "name": "tier",
@@ -4869,6 +4815,28 @@
4869
4815
  }
4870
4816
  }
4871
4817
  ],
4818
+ "cssStates": [
4819
+ {
4820
+ "description": "While a reading is shown, under the pointer or the keys, with its tooltip open.",
4821
+ "name": "active"
4822
+ },
4823
+ {
4824
+ "description": "While the `empty` part stands in the plot.",
4825
+ "name": "empty"
4826
+ },
4827
+ {
4828
+ "description": "While the `loading` part stands in the plot.",
4829
+ "name": "loading"
4830
+ },
4831
+ {
4832
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
4833
+ "name": "settled",
4834
+ "inheritedFrom": {
4835
+ "name": "HelixElement",
4836
+ "module": "src/helix-element/helix-element.ts"
4837
+ }
4838
+ }
4839
+ ],
4872
4840
  "mixins": [
4873
4841
  {
4874
4842
  "name": "MixinChartStatus",
@@ -4911,16 +4879,6 @@
4911
4879
  },
4912
4880
  "tagName": "helix-headless-area-chart",
4913
4881
  "customElement": true,
4914
- "cssStates": [
4915
- {
4916
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
4917
- "name": "settled",
4918
- "inheritedFrom": {
4919
- "name": "HelixElement",
4920
- "module": "src/helix-element/helix-element.ts"
4921
- }
4922
- }
4923
- ],
4924
4882
  "modulePath": "src/area-chart/root/area-chart-root.ts",
4925
4883
  "definitionPath": "src/area-chart/root/area-chart-root.ts"
4926
4884
  }
@@ -5554,7 +5512,7 @@
5554
5512
  ],
5555
5513
  "slots": [
5556
5514
  {
5557
- "description": "Shown when there is no usable image, in place of the initials.",
5515
+ "description": "Shown when there is no usable image, in place of the initials. Hidden from assistive technology when the avatar has a `name`, which the host announces.",
5558
5516
  "name": ""
5559
5517
  }
5560
5518
  ],
@@ -6989,7 +6947,7 @@
6989
6947
  "declarations": [
6990
6948
  {
6991
6949
  "kind": "class",
6992
- "description": "Every bar is measured from zero, and no property changes the baseline,\nbecause a bar's length is its value. To show the differences between values,\nuse a line chart.\n\nThe labels are HTML beside the drawing. An `<svg>` that fills its box scales\nthe text inside it: the same `font-size` renders at 10px in a narrow chart\nand 43px in a wide one, and SVG has no setting that keeps text at one size\nthe way `vector-effect` does for strokes.\n\nThe table is the accessible representation, and the drawing is hidden from\nscreen readers, so they get the numbers themselves. The `summary` part names\nthe chart, from `label` or the table's caption, and gives each series' highest\nreading.\n\n**The plot is read by key.** It takes focus, named by `label` or the caption.\nThe arrows along the categories move from one to the next, which is left and\nright for columns and up and down for `orientation=\"horizontal\"`. Home and\nEnd go to the first and the last, and the other pair of arrows moves among\nthe series of a category. The tooltip follows, the `live` part says the\nreading in words, and Escape puts the tooltip away.\n\nThe component writes the custom properties below with numbers it computes,\nand the stylesheet that draws the chart reads them. Do not set them yourself.\n\n**A tap shows the reading under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the reading, by pointer,\ntap or key, and `helix-reading-press` says a reading was clicked, tapped, or\npressed with Enter or Space, for a page that opens what a reading stands for.\n\n**`data` takes the readings as data** where the page has no table to point\n`for` at, in a table's shape: the column headings, then one row per reading\nwith its label first. A table is still the better source where the page can\nshow one, since it reads before any script runs.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place, such as a link to add the first reading.",
6950
+ "description": "Every bar is measured from zero, and no property changes the baseline,\nbecause a bar's length is its value. To show the differences between values,\nuse a line chart.\n\nThe labels are HTML beside the drawing. An `<svg>` that fills its box scales\nthe text inside it: the same `font-size` renders at 10px in a narrow chart\nand 43px in a wide one, and SVG has no setting that keeps text at one size\nthe way `vector-effect` does for strokes.\n\nThe table is the accessible representation, and the drawing is hidden from\nscreen readers, so they get the numbers themselves. The `summary` part names\nthe chart, from `label` or the table's caption, and gives each series' highest\nreading.\n\n**The plot is read by key.** It takes focus, named by `label` or the caption.\nThe arrows along the categories move from one to the next, which is left and\nright for columns and up and down for `orientation=\"horizontal\"`. Home and\nEnd go to the first and the last, and the other pair of arrows moves among\nthe series of a category. The tooltip follows, the `live` part says the\nreading in words, and Escape puts the tooltip away.\n\nThe component writes the custom properties below with numbers it computes,\nand the stylesheet that draws the chart reads them. Do not set them yourself.\n\n**A tap shows the reading under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the reading, by pointer,\ntap or key, and `helix-reading-press` says a reading was clicked, tapped, or\npressed with Enter or Space, for a page that opens what a reading stands for.\n\n**`data` takes the readings as data** where the page has no table to point\n`for` at, in a table's shape: the column headings, then one row per reading\nwith its label first. A table is still the better source where the page can\nshow one, since it reads before any script runs.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place, such as a link to add the first reading.\n\n**Keyboard.** The plot is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Tab | Moves focus to the plot and shows the first reading. |\n| Right, Left | Moves to the next or the previous reading. On a right-to-left page, Left moves to the next. |\n| Down, Up | Moves among the series of the reading. With one series, moves to the next or the previous reading. |\n| Down, Up under `orientation=\"horizontal\"` | Moves to the next or the previous reading, and Right and Left move among the series. |\n| Home, End | Moves to the first or the last reading. |\n| Page Down, Page Up | Moves a tenth of the readings on or back. |\n| Enter, Space | Presses the reading shown, which sends `helix-reading-press`. |\n| Escape | Puts the reading and its tooltip away. |",
6993
6951
  "name": "HelixHeadlessBarChart",
6994
6952
  "cssProperties": [
6995
6953
  {
@@ -7071,7 +7029,7 @@
7071
7029
  "name": "mark"
7072
7030
  },
7073
7031
  {
7074
- "description": "The drawing, which takes focus to be read by key.",
7032
+ "description": "The drawing, which takes focus to be read by key. With nothing to draw, a group named as the chart is, holding the `empty` or `loading` part.",
7075
7033
  "name": "plot"
7076
7034
  },
7077
7035
  {
@@ -7082,6 +7040,10 @@
7082
7040
  "description": "The drawing surface the bars and lines sit on.",
7083
7041
  "name": "svg"
7084
7042
  },
7043
+ {
7044
+ "description": "The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.",
7045
+ "name": "table"
7046
+ },
7085
7047
  {
7086
7048
  "description": "One number on an axis.",
7087
7049
  "name": "tick"
@@ -7657,23 +7619,27 @@
7657
7619
  }
7658
7620
  },
7659
7621
  {
7660
- "kind": "field",
7661
- "name": "source",
7622
+ "kind": "method",
7623
+ "name": "renderEmpty",
7662
7624
  "privacy": "protected",
7663
- "readonly": true,
7664
- "default": "new SourceController(this)",
7665
- "description": "Resolves `for` and re-renders when the table behind it changes.",
7625
+ "return": {
7626
+ "type": {
7627
+ "text": "TemplateResult"
7628
+ }
7629
+ },
7630
+ "description": "The plot while there is nothing to draw: a group named as the chart is,\nholding `renderStatus`. Not focusable, there being no reading to walk.",
7666
7631
  "inheritedFrom": {
7667
- "name": "MixinChartSource",
7668
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7632
+ "name": "MixinChartStatus",
7633
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
7669
7634
  }
7670
7635
  },
7671
7636
  {
7672
7637
  "kind": "field",
7673
- "name": "pointer",
7638
+ "name": "source",
7639
+ "privacy": "protected",
7674
7640
  "readonly": true,
7675
- "default": "new ChartPointerController(this)",
7676
- "description": "Finds the reading nearest the pointer, so the tooltip can sit on it.\n\nPublic for the same reason `series` and `named` are: a protected member\ncannot be cast onto across unrelated classes, so it would be invisible to\nevery chart that needs it. Reading where a pointer is resting is a fair\nthing to ask a chart anyway.",
7641
+ "default": "new SourceController(this)",
7642
+ "description": "Resolves `for` and re-renders when the table behind it changes.",
7677
7643
  "inheritedFrom": {
7678
7644
  "name": "MixinChartSource",
7679
7645
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
@@ -7751,57 +7717,6 @@
7751
7717
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7752
7718
  }
7753
7719
  },
7754
- {
7755
- "kind": "field",
7756
- "name": "observedAttributes",
7757
- "type": {
7758
- "text": "string[]"
7759
- },
7760
- "static": true,
7761
- "description": "Hears an `aria-label` written on the chart, which no property mirrors,\nso a page that names the chart that way names its plot.\n\nLit observes the attributes of its own properties only, and `ariaLabel`\nbelongs to the platform.\n\nRead through `Reflect.get` with this class as the receiver, which is\nwhat `super.observedAttributes` means: Lit's getter finalizes whichever\nclass it is asked on, and asked on the base it would finalize the base\nand leave a subclass without its styles. A mixin's base has no static\nside TypeScript can see, so `super` cannot be written here.",
7762
- "readonly": true,
7763
- "inheritedFrom": {
7764
- "name": "MixinChartSource",
7765
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7766
- }
7767
- },
7768
- {
7769
- "kind": "method",
7770
- "name": "attributeChangedCallback",
7771
- "return": {
7772
- "type": {
7773
- "text": "void"
7774
- }
7775
- },
7776
- "parameters": [
7777
- {
7778
- "name": "name",
7779
- "type": {
7780
- "text": "string"
7781
- }
7782
- },
7783
- {
7784
- "name": "old",
7785
- "type": {
7786
- "text": "string | null"
7787
- }
7788
- },
7789
- {
7790
- "name": "value",
7791
- "type": {
7792
- "text": "string | null"
7793
- }
7794
- }
7795
- ],
7796
- "description": "Called by the browser when an observed attribute changes. A new\n`aria-label` asks for an update, because it names the plot.",
7797
- "inheritedFrom": {
7798
- "name": "MixinChartSource",
7799
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7800
- },
7801
- "type": {
7802
- "text": "attributeChangedCallback(name: string, old: string | null, value: string | null) => void"
7803
- }
7804
- },
7805
7720
  {
7806
7721
  "kind": "field",
7807
7722
  "name": "series",
@@ -7828,32 +7743,6 @@
7828
7743
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7829
7744
  }
7830
7745
  },
7831
- {
7832
- "kind": "field",
7833
- "name": "readingsKnown",
7834
- "type": {
7835
- "text": "boolean"
7836
- },
7837
- "description": "Whether the readings have been looked for: false on the server and\nwhile hydrating, where no table is resolved and no data is read. A\nchart says it has no readings only once this is true.",
7838
- "readonly": true,
7839
- "inheritedFrom": {
7840
- "name": "MixinChartSource",
7841
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7842
- }
7843
- },
7844
- {
7845
- "kind": "field",
7846
- "name": "sourceRows",
7847
- "type": {
7848
- "text": "Row[]"
7849
- },
7850
- "description": "Every row of the table, with each cell's text and number.\n\nThis is where a tooltip's content comes from, and it is deliberately not\n`series`. A chart draws numbers; a reader resting a pointer on one wants\nwhat the table says, which is `$128k` and not `128000`, and often wants\nthe column beside it that nothing plotted at all.\n\n**Not `rows`.** It is the source table's rows, and `rows` on a chart is a\nname a chart wants for itself: `helix-heatmap` takes `rows=\"7\"` to mean a\ncalendar week, and declaring that against a base class whose `rows` is a\n`Row[]` getter is a type error at best. Name the member for what it holds\nrather than for the shortest word available.",
7851
- "readonly": true,
7852
- "inheritedFrom": {
7853
- "name": "MixinChartSource",
7854
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7855
- }
7856
- },
7857
7746
  {
7858
7747
  "kind": "field",
7859
7748
  "name": "plottedColumns",
@@ -7980,6 +7869,21 @@
7980
7869
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7981
7870
  }
7982
7871
  },
7872
+ {
7873
+ "kind": "method",
7874
+ "name": "renderTable",
7875
+ "privacy": "protected",
7876
+ "return": {
7877
+ "type": {
7878
+ "text": "TemplateResult | typeof nothing"
7879
+ }
7880
+ },
7881
+ "description": "The readings as a table, for a screen reader, where they were drawn from\n`data`: there is then no table on the page to read, and a chart's\nsummary gives only what the readings come to. Nothing where a table on\nthe page was read, which is already the readable version.\n\nThe `table` part, named by the chart, its cells as `data` writes them.",
7882
+ "inheritedFrom": {
7883
+ "name": "MixinChartSource",
7884
+ "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
7885
+ }
7886
+ },
7983
7887
  {
7984
7888
  "kind": "field",
7985
7889
  "name": "tier",
@@ -8499,6 +8403,28 @@
8499
8403
  }
8500
8404
  }
8501
8405
  ],
8406
+ "cssStates": [
8407
+ {
8408
+ "description": "While a reading is shown, under the pointer or the keys, with its tooltip open.",
8409
+ "name": "active"
8410
+ },
8411
+ {
8412
+ "description": "While the `empty` part stands in the plot.",
8413
+ "name": "empty"
8414
+ },
8415
+ {
8416
+ "description": "While the `loading` part stands in the plot.",
8417
+ "name": "loading"
8418
+ },
8419
+ {
8420
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
8421
+ "name": "settled",
8422
+ "inheritedFrom": {
8423
+ "name": "HelixElement",
8424
+ "module": "src/helix-element/helix-element.ts"
8425
+ }
8426
+ }
8427
+ ],
8502
8428
  "mixins": [
8503
8429
  {
8504
8430
  "name": "MixinChartStatus",
@@ -8539,16 +8465,6 @@
8539
8465
  },
8540
8466
  "tagName": "helix-headless-bar-chart",
8541
8467
  "customElement": true,
8542
- "cssStates": [
8543
- {
8544
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
8545
- "name": "settled",
8546
- "inheritedFrom": {
8547
- "name": "HelixElement",
8548
- "module": "src/helix-element/helix-element.ts"
8549
- }
8550
- }
8551
- ],
8552
8468
  "modulePath": "src/bar-chart/root/bar-chart-root.ts",
8553
8469
  "definitionPath": "src/bar-chart/root/bar-chart-root.ts"
8554
8470
  }
@@ -16004,7 +15920,7 @@
16004
15920
  "declarations": [
16005
15921
  {
16006
15922
  "kind": "class",
16007
- "description": "A board of cards and connectors, drawn by Helix. On a canvas every position\nis data that someone placed, so drawing is arithmetic over rectangles with no\nlayout to compute. `Map` takes a slotted map, because another renderer draws\nits tiles.\n\nThe format is [JSON Canvas](https://jsoncanvas.org), an open format. Each\nnode has an `x`, `y`, `width`, `height`, and a type. Each edge names the two\nnodes it joins and the sides it leaves and arrives on. A card belongs to a\ngroup when it sits inside the group's bounds.\n\nThe cards are text in the DOM, so a screen reader can read them. The family\nadds a reading order and states each card's connections as text. `order` sets\nthe reading order:\n- `spatial` bands the cards into rows.\n- `edges` follows the arrows, starting from the cards that nothing points to.\n\n**Cards move by default.** The board writes the new `x` and `y` onto the\ncard, the way an input writes its own value, and dispatches two events:\n- `helix-before-move` for every step. Cancel it to hold the positions in your\n own state and apply them yourself.\n- `helix-move` once the move is finished.\n\nA resize dispatches the same pair with a size. Set `readonly` on the board to\nkeep every card in place, such as on a published board. Set `readonly` on one\ncard or connection to keep only that one in place.\n\nSet `snap` to a length in the document's units, such as `32`, and a card\nthat is moved or resized lands on a multiple of it. Carrying a card, a\ncorner, a connection, or the selection box near the edge of the board moves\nthe board under it, so a card can be taken to a place off screen in one\ndrag. A connection let go within 20 pixels of a card arrives at it. A\ndouble click on the empty board zooms in about that point, and Shift with a\ndouble click zooms out.\n\nKeyboard behavior:\n- One card holds the board's tab stop.\n- The arrow keys move through the cards in reading order. The card you land\n on scrolls into view, and its connections are announced with it.\n- The card you land on is selected. Control or Command with an arrow key,\n Home, or End moves without changing the selection, and Space adds the card\n to the selection or takes it out, so you can select cards that are not\n next to each other.\n- Shift with an arrow key moves the card: by 16 units, or to the next\n multiple of `snap` where it is set. Alt with an arrow key resizes it from\n its bottom right corner the same way.\n- The connections leaving a card are stops of their own, straight after it.\n Enter on one moves to the card it arrives at.\n- What a key changes that a reader cannot see is said: where a card moved\n to, its new size, how many cards are selected, and the zoom. A selected\n card or connection says so when a reader arrives on it.\n- Control or Command with C copies the selected cards, and the connections\n between them, as a JSON Canvas document in text, which another board or\n an app that reads the format takes.\n- Control or Command with V pastes a JSON Canvas document: the board adds\n its cards and connections, a step down and to the right of any card they\n would sit on, and selects them. It asks with `helix-before-paste` first.\n A page that renders its cards from its own state cancels it and adds the\n detail's document to that state, through `fromJsonCanvas`. `paste()` does\n the same from a script.\n- Control or Command with Z undoes the last move or resize the board made,\n and with Shift, or Control with Y, makes it again. `undo()` and `redo()`\n do the same from a script. Each asks with `helix-before-move` and tells\n with `helix-move`, as a move does, so a board that holds its positions in\n your state is undone through your state.\n\n**`arrange()` moves every card so that none overlaps another**, in layers\nthat follow the arrows, or in a grid on a board with no connections. The\ncards glide for as long as the board's own transition, and `undo()` puts\nthem back.\n\nEvery drag also works with clicks, as WCAG 2.5.7 requires for a pointer that\ncannot hold a button down. Click a selected card's move handle, a corner, a\ncard's connection point, or the end of a selected connection to pick it up.\nIt follows the pointer with no button held, and the next click puts it down\nwhere a drag would have. On touch, the next tap sets where it lands. Escape,\nor a press outside the board, puts it back. So a finger connects two cards\nwith three taps: the card, one of its points, and the card to connect to.\n\nConnecting and removing dispatch requests, and your code applies them:\n- Drawing from a card's handle to another card, or pressing C on one card and\n Enter on another, dispatches `helix-connect`.\n- Delete on a card or a connection dispatches `helix-remove`. The event names\n every connection that removing the card would leave without an end.\n\nOnce your page removes what Delete asked for, focus moves to the next stop,\nto the one before where it was the last, and to the board where none is\nleft. A focused card your page removes for its own reasons hands focus on\nthe same way, unless the reader has already moved focus somewhere else.\n\nThe board applies a move itself, because the card already exists. A\nconnection is a new element, and React discards an element the board adds to\nits markup on the next render, so you write the connection.\n\n**`edgeRoute` draws the connections' lines your own way**: a function from\nwhere a line leaves and arrives, and the sides it does, to its SVG path, for\na route such as one that bends around the cards between. What it returns\nis the line drawn, the line pressed and focused, and the one an arrowhead\nsits at the end of. Nothing back draws the board's own.\n\nAdd `minimap` to `controls` for a picture of the whole board in a corner:\neach card as a box, and a frame around what is on screen. A press or a drag\non it brings that place to the middle of the view. It is for a pointer, and\na screen reader skips it: the arrow keys and `show()` reach every card.\n\nCards and connections are `helix-canvas-node` and `helix-canvas-edge`\nelements, so they are in the served markup whichever renderer wrote them. The\nlibrary fetches nothing, and an array passed to an element is missing from\nthe first paint of a server-rendered React page. `fromJsonCanvas` turns a\nJSON Canvas document into their props, and `toJsonCanvas()` writes a board\nback out.",
15923
+ "description": "A board of cards and connectors, drawn by Helix. On a canvas every position\nis data that someone placed, so drawing is arithmetic over rectangles with no\nlayout to compute. `Map` takes a slotted map, because another renderer draws\nits tiles.\n\nThe format is [JSON Canvas](https://jsoncanvas.org), an open format. Each\nnode has an `x`, `y`, `width`, `height`, and a type. Each edge names the two\nnodes it joins and the sides it leaves and arrives on. A card belongs to a\ngroup when it sits inside the group's bounds.\n\nThe cards are text in the DOM, so a screen reader can read them. The family\nadds a reading order and states each card's connections as text. `order` sets\nthe reading order:\n- `spatial` bands the cards into rows.\n- `edges` follows the arrows, starting from the cards that nothing points to.\n\n**Cards move by default.** The board writes the new `x` and `y` onto the\ncard, the way an input writes its own value, and dispatches two events:\n- `helix-before-move` for every step. Cancel it to hold the positions in your\n own state and apply them yourself.\n- `helix-move` once the move is finished.\n\nA resize dispatches the same pair with a size. Set `readonly` on the board to\nkeep every card in place, such as on a published board. Set `readonly` on one\ncard or connection to keep only that one in place.\n\nSet `snap` to a length in the document's units, such as `32`, and a card\nthat is moved or resized lands on a multiple of it. Carrying a card, a\ncorner, a connection, or the selection box near the edge of the board moves\nthe board under it, so a card can be taken to a place off screen in one\ndrag. A connection let go within 20 pixels of a card arrives at it. A\ndouble click on the empty board zooms in about that point, and Shift with a\ndouble click zooms out.\n\nKeyboard behavior:\n- One card holds the board's tab stop, and the board itself leaves the tab\n order while a card can hold it. Escape on a card goes back out to the\n board, where the arrow keys pan it.\n- Plus and minus zoom the board, on the board and on a card or a\n connection.\n- The arrow keys move through the cards in reading order. The card you land\n on scrolls into view, and its connections are announced with it.\n- The card you land on is selected. Control or Command with an arrow key,\n Home, or End moves without changing the selection, and Space adds the card\n to the selection or takes it out, so you can select cards that are not\n next to each other.\n- Shift with an arrow key moves the card: by 16 units, or to the next\n multiple of `snap` where it is set. Alt with an arrow key resizes it from\n its bottom right corner the same way.\n- The connections leaving a card are stops of their own, straight after it.\n Enter on one moves to the card it arrives at.\n- What a key changes that a reader cannot see is said: where a card moved\n to, its new size, how many cards are selected, and the zoom. A selected\n card or connection says so when a reader arrives on it.\n- Control or Command with C copies the selected cards, and the connections\n between them, as a JSON Canvas document in text, which another board or\n an app that reads the format takes.\n- Control or Command with V pastes a JSON Canvas document: the board adds\n its cards and connections, a step down and to the right of any card they\n would sit on, and selects them. It asks with `helix-before-paste` first.\n A page that renders its cards from its own state cancels it and adds the\n detail's document to that state, through `fromJsonCanvas`. `paste()` does\n the same from a script.\n- Control or Command with Z undoes the last move or resize the board made,\n and with Shift, or Control with Y, makes it again. `undo()` and `redo()`\n do the same from a script. Each asks with `helix-before-move` and tells\n with `helix-move`, as a move does, so a board that holds its positions in\n your state is undone through your state.\n\n**`arrange()` moves every card so that none overlaps another**, in layers\nthat follow the arrows, or in a grid on a board with no connections. The\ncards glide for as long as the board's own transition, and `undo()` puts\nthem back.\n\nEvery drag also works with clicks, as WCAG 2.5.7 requires for a pointer that\ncannot hold a button down. Click a selected card's move handle, a corner, a\ncard's connection point, or the end of a selected connection to pick it up.\nIt follows the pointer with no button held, and the next click puts it down\nwhere a drag would have. On touch, the next tap sets where it lands. Escape,\nor a press outside the board, puts it back. So a finger connects two cards\nwith three taps: the card, one of its points, and the card to connect to.\n\nConnecting and removing dispatch requests, and your code applies them:\n- Drawing from a card's handle to another card, or pressing C on one card and\n Enter on another, dispatches `helix-connect`.\n- Delete on a card or a connection dispatches `helix-remove`. The event names\n every connection that removing the card would leave without an end.\n\nOnce your page removes what Delete asked for, focus moves to the next stop,\nto the one before where it was the last, and to the board where none is\nleft. A focused card your page removes for its own reasons hands focus on\nthe same way, unless the reader has already moved focus somewhere else.\n\nThe board applies a move itself, because the card already exists. A\nconnection is a new element, and React discards an element the board adds to\nits markup on the next render, so you write the connection.\n\n**`edgeRoute` draws the connections' lines your own way**: a function from\nwhere a line leaves and arrives, and the sides it does, to its SVG path, for\na route such as one that bends around the cards between. What it returns\nis the line drawn, the line pressed and focused, and the one an arrowhead\nsits at the end of. Nothing back draws the board's own.\n\nAdd `minimap` to `controls` for a picture of the whole board in a corner:\neach card as a box, and a frame around what is on screen. A press or a drag\non it brings that place to the middle of the view. It is for a pointer, and\na screen reader skips it: the arrow keys and `show()` reach every card.\n\nCards and connections are `helix-canvas-node` and `helix-canvas-edge`\nelements, so they are in the served markup whichever renderer wrote them. The\nlibrary fetches nothing, and an array passed to an element is missing from\nthe first paint of a server-rendered React page. `fromJsonCanvas` turns a\nJSON Canvas document into their props, and `toJsonCanvas()` writes a board\nback out.",
16008
15924
  "name": "HelixHeadlessCanvas",
16009
15925
  "cssProperties": [
16010
15926
  {
@@ -60439,7 +60355,7 @@
60439
60355
  "declarations": [
60440
60356
  {
60441
60357
  "kind": "class",
60442
- "description": "A donut chart divides one whole into parts, so the component reads one\ncolumn.\n\n**The first column of numbers is the series, and each row is a slice.** Other\nHelix charts take one column per series.\n\n**Negative values are skipped.** An arc cannot show a negative number, so\nthose rows are left out and the total is the sum of the remaining rows.\n\nThe ring is hidden from screen readers. The `summary` part names the chart,\nfrom `label` or the table's caption, and gives each slice's share, and the\ntable beside the chart has every amount.\n\n**The ring is read by key.** The plot takes focus, named by `label` or the\ncaption. Every arrow moves from slice to slice, the right and down arrows to\nthe next, and Home and End go to the first and the last. The tooltip\nfollows, the `live` part says the slice in words, and Escape puts the\ntooltip away.",
60358
+ "description": "A donut chart divides one whole into parts, so the component reads one\ncolumn.\n\n**The first column of numbers is the series, and each row is a slice.** Other\nHelix charts take one column per series.\n\n**Negative values are skipped.** An arc cannot show a negative number, so\nthose rows are left out and the total is the sum of the remaining rows.\n\nThe ring is hidden from screen readers. The `summary` part names the chart,\nfrom `label` or the table's caption, and gives each slice's share, and the\ntable beside the chart has every amount.\n\n**The ring is read by key.** The plot takes focus, named by `label` or the\ncaption. Every arrow moves from slice to slice, the right and down arrows to\nthe next, and Home and End go to the first and the last. The tooltip\nfollows, the `live` part says the slice in words, and Escape puts the\ntooltip away.\n\n**A tap shows the slice under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the slice shown, by\npointer, tap or key, and `helix-reading-press` says a slice was clicked,\ntapped, or pressed with Enter or Space, for a page that opens what a slice\nstands for. `index` is the slice's row in the table.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place.\n\n**Keyboard.** The plot is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Tab | Moves focus to the plot and shows the first slice. |\n| Any arrow | Right and Down move to the next slice, Left and Up to the previous. On a right-to-left page, Left moves to the next. |\n| Home, End | Moves to the first or the last slice. |\n| Enter, Space | Presses the slice shown, which sends `helix-reading-press`. |\n| Escape | Puts the slice and its tooltip away. |",
60443
60359
  "name": "HelixHeadlessDonutChart",
60444
60360
  "cssProperties": [
60445
60361
  {
@@ -60452,16 +60368,24 @@
60452
60368
  "description": "The middle of the ring, holding whatever is slotted.",
60453
60369
  "name": "center"
60454
60370
  },
60371
+ {
60372
+ "description": "The words in place of the ring 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.",
60373
+ "name": "empty"
60374
+ },
60455
60375
  {
60456
60376
  "description": "The readout: a polite live region that says the slice the keys moved to. Hide it visually.",
60457
60377
  "name": "live"
60458
60378
  },
60379
+ {
60380
+ "description": "The words in place of the ring while `loading` is set and there are no readings: the `loading` slot, falling back to `loading-text`.",
60381
+ "name": "loading"
60382
+ },
60459
60383
  {
60460
60384
  "description": "The invisible point the tooltip is anchored to.",
60461
60385
  "name": "mark"
60462
60386
  },
60463
60387
  {
60464
- "description": "The drawing, which takes focus to be read by key.",
60388
+ "description": "The drawing, which takes focus to be read by key. With nothing to draw, a group named as the chart is, holding the `empty` or `loading` part.",
60465
60389
  "name": "plot"
60466
60390
  },
60467
60391
  {
@@ -60484,6 +60408,10 @@
60484
60408
  "description": "The chart's name and each slice's share, written as a sentence for screen readers. Hide it visually.",
60485
60409
  "name": "summary"
60486
60410
  },
60411
+ {
60412
+ "description": "The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.",
60413
+ "name": "table"
60414
+ },
60487
60415
  {
60488
60416
  "description": "The bubble, forwarded from `Tooltip`.",
60489
60417
  "name": "tooltip"
@@ -60557,6 +60485,14 @@
60557
60485
  {
60558
60486
  "description": "Content in the middle of the ring, usually a total. It is read by screen readers, while the ring itself is hidden from them.",
60559
60487
  "name": ""
60488
+ },
60489
+ {
60490
+ "description": "Content shown in place of the ring when the table has no readings. Falls back to `empty-text`.",
60491
+ "name": "empty"
60492
+ },
60493
+ {
60494
+ "description": "Content shown in place of the ring while `loading` is set and there are no readings yet. Falls back to `loading-text`.",
60495
+ "name": "loading"
60560
60496
  }
60561
60497
  ],
60562
60498
  "members": [
@@ -60730,7 +60666,7 @@
60730
60666
  }
60731
60667
  }
60732
60668
  ],
60733
- "description": "What a reader who cannot see the ring is told: the chart's name and each\nslice's share of the whole.\n\nThe shares, because they are what the ring shows and the table does not:\nthe table holds the amounts, and the percentages are this chart's\narithmetic. In the ring's order, which is the table's and the legend's."
60669
+ "description": "What a reader who cannot see the ring is told: the chart's name and each\nslice's share of the whole.\n\nThe shares, because they are what the ring shows and the table does not:\nthe table holds the amounts, and the percentages are this chart's\narithmetic. In the ring's order, which is the table's and the legend's.\nA row the ring leaves out, a negative amount or a slice a legend hid, is\nleft out here too."
60734
60670
  },
60735
60671
  {
60736
60672
  "kind": "method",
@@ -60862,22 +60798,90 @@
60862
60798
  },
60863
60799
  {
60864
60800
  "kind": "field",
60865
- "name": "source",
60801
+ "name": "emptyText",
60802
+ "type": {
60803
+ "text": "string"
60804
+ },
60805
+ "default": "'No readings'",
60806
+ "description": "The words shown in place of the drawing when the table has no readings,\nand the fallback of the `empty` slot.",
60807
+ "attribute": "empty-text",
60808
+ "helix": {
60809
+ "words": true
60810
+ },
60811
+ "inheritedFrom": {
60812
+ "name": "MixinChartStatus",
60813
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
60814
+ }
60815
+ },
60816
+ {
60817
+ "kind": "field",
60818
+ "name": "loading",
60819
+ "type": {
60820
+ "text": "boolean"
60821
+ },
60822
+ "default": "false",
60823
+ "description": "Whether the readings are still on their way. The chart shows\n`loading-text` in place of an empty drawing until it has readings.\n\nReflected, so a stylesheet can treat the chart while it waits. A chart\nthat already has readings keeps drawing them, so a refresh does not\nblank it.",
60824
+ "attribute": "loading",
60825
+ "reflects": true,
60826
+ "inheritedFrom": {
60827
+ "name": "MixinChartStatus",
60828
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
60829
+ }
60830
+ },
60831
+ {
60832
+ "kind": "field",
60833
+ "name": "loadingText",
60834
+ "type": {
60835
+ "text": "string"
60836
+ },
60837
+ "default": "'Loading readings'",
60838
+ "description": "The words shown in place of the drawing while `loading` is set and\nthere are no readings yet, and the fallback of the `loading` slot.",
60839
+ "attribute": "loading-text",
60840
+ "helix": {
60841
+ "words": true
60842
+ },
60843
+ "inheritedFrom": {
60844
+ "name": "MixinChartStatus",
60845
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
60846
+ }
60847
+ },
60848
+ {
60849
+ "kind": "method",
60850
+ "name": "renderStatus",
60866
60851
  "privacy": "protected",
60867
- "readonly": true,
60868
- "default": "new SourceController(this)",
60869
- "description": "Resolves `for` and re-renders when the table behind it changes.",
60852
+ "return": {
60853
+ "type": {
60854
+ "text": "TemplateResult | typeof nothing"
60855
+ }
60856
+ },
60857
+ "description": "What stands in the plot while there is nothing to draw: the `loading`\nline, the `empty` line, or nothing while the table cannot be read yet.\n\n`dir=\"auto\"`, so words in a right-to-left script read their own way in\na plot that holds itself left to right, as Scatter Chart's does.",
60870
60858
  "inheritedFrom": {
60871
- "name": "MixinChartSource",
60872
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
60859
+ "name": "MixinChartStatus",
60860
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
60861
+ }
60862
+ },
60863
+ {
60864
+ "kind": "method",
60865
+ "name": "renderEmpty",
60866
+ "privacy": "protected",
60867
+ "return": {
60868
+ "type": {
60869
+ "text": "TemplateResult"
60870
+ }
60871
+ },
60872
+ "description": "The plot while there is nothing to draw: a group named as the chart is,\nholding `renderStatus`. Not focusable, there being no reading to walk.",
60873
+ "inheritedFrom": {
60874
+ "name": "MixinChartStatus",
60875
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
60873
60876
  }
60874
60877
  },
60875
60878
  {
60876
60879
  "kind": "field",
60877
- "name": "pointer",
60880
+ "name": "source",
60881
+ "privacy": "protected",
60878
60882
  "readonly": true,
60879
- "default": "new ChartPointerController(this)",
60880
- "description": "Finds the reading nearest the pointer, so the tooltip can sit on it.\n\nPublic for the same reason `series` and `named` are: a protected member\ncannot be cast onto across unrelated classes, so it would be invisible to\nevery chart that needs it. Reading where a pointer is resting is a fair\nthing to ask a chart anyway.",
60883
+ "default": "new SourceController(this)",
60884
+ "description": "Resolves `for` and re-renders when the table behind it changes.",
60881
60885
  "inheritedFrom": {
60882
60886
  "name": "MixinChartSource",
60883
60887
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
@@ -60955,57 +60959,6 @@
60955
60959
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
60956
60960
  }
60957
60961
  },
60958
- {
60959
- "kind": "field",
60960
- "name": "observedAttributes",
60961
- "type": {
60962
- "text": "string[]"
60963
- },
60964
- "static": true,
60965
- "description": "Hears an `aria-label` written on the chart, which no property mirrors,\nso a page that names the chart that way names its plot.\n\nLit observes the attributes of its own properties only, and `ariaLabel`\nbelongs to the platform.\n\nRead through `Reflect.get` with this class as the receiver, which is\nwhat `super.observedAttributes` means: Lit's getter finalizes whichever\nclass it is asked on, and asked on the base it would finalize the base\nand leave a subclass without its styles. A mixin's base has no static\nside TypeScript can see, so `super` cannot be written here.",
60966
- "readonly": true,
60967
- "inheritedFrom": {
60968
- "name": "MixinChartSource",
60969
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
60970
- }
60971
- },
60972
- {
60973
- "kind": "method",
60974
- "name": "attributeChangedCallback",
60975
- "return": {
60976
- "type": {
60977
- "text": "void"
60978
- }
60979
- },
60980
- "parameters": [
60981
- {
60982
- "name": "name",
60983
- "type": {
60984
- "text": "string"
60985
- }
60986
- },
60987
- {
60988
- "name": "old",
60989
- "type": {
60990
- "text": "string | null"
60991
- }
60992
- },
60993
- {
60994
- "name": "value",
60995
- "type": {
60996
- "text": "string | null"
60997
- }
60998
- }
60999
- ],
61000
- "description": "Called by the browser when an observed attribute changes. A new\n`aria-label` asks for an update, because it names the plot.",
61001
- "inheritedFrom": {
61002
- "name": "MixinChartSource",
61003
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
61004
- },
61005
- "type": {
61006
- "text": "attributeChangedCallback(name: string, old: string | null, value: string | null) => void"
61007
- }
61008
- },
61009
60962
  {
61010
60963
  "kind": "field",
61011
60964
  "name": "series",
@@ -61032,32 +60985,6 @@
61032
60985
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
61033
60986
  }
61034
60987
  },
61035
- {
61036
- "kind": "field",
61037
- "name": "readingsKnown",
61038
- "type": {
61039
- "text": "boolean"
61040
- },
61041
- "description": "Whether the readings have been looked for: false on the server and\nwhile hydrating, where no table is resolved and no data is read. A\nchart says it has no readings only once this is true.",
61042
- "readonly": true,
61043
- "inheritedFrom": {
61044
- "name": "MixinChartSource",
61045
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
61046
- }
61047
- },
61048
- {
61049
- "kind": "field",
61050
- "name": "sourceRows",
61051
- "type": {
61052
- "text": "Row[]"
61053
- },
61054
- "description": "Every row of the table, with each cell's text and number.\n\nThis is where a tooltip's content comes from, and it is deliberately not\n`series`. A chart draws numbers; a reader resting a pointer on one wants\nwhat the table says, which is `$128k` and not `128000`, and often wants\nthe column beside it that nothing plotted at all.\n\n**Not `rows`.** It is the source table's rows, and `rows` on a chart is a\nname a chart wants for itself: `helix-heatmap` takes `rows=\"7\"` to mean a\ncalendar week, and declaring that against a base class whose `rows` is a\n`Row[]` getter is a type error at best. Name the member for what it holds\nrather than for the shortest word available.",
61055
- "readonly": true,
61056
- "inheritedFrom": {
61057
- "name": "MixinChartSource",
61058
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
61059
- }
61060
- },
61061
60988
  {
61062
60989
  "kind": "field",
61063
60990
  "name": "plottedColumns",
@@ -61146,6 +61073,21 @@
61146
61073
  "text": "columnName(cell: number) => string"
61147
61074
  }
61148
61075
  },
61076
+ {
61077
+ "kind": "method",
61078
+ "name": "renderTable",
61079
+ "privacy": "protected",
61080
+ "return": {
61081
+ "type": {
61082
+ "text": "TemplateResult | typeof nothing"
61083
+ }
61084
+ },
61085
+ "description": "The readings as a table, for a screen reader, where they were drawn from\n`data`: there is then no table on the page to read, and a chart's\nsummary gives only what the readings come to. Nothing where a table on\nthe page was read, which is already the readable version.\n\nThe `table` part, named by the chart, its cells as `data` writes them.",
61086
+ "inheritedFrom": {
61087
+ "name": "MixinChartSource",
61088
+ "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
61089
+ }
61090
+ },
61149
61091
  {
61150
61092
  "kind": "field",
61151
61093
  "name": "tier",
@@ -61486,6 +61428,24 @@
61486
61428
  }
61487
61429
  }
61488
61430
  ],
61431
+ "events": [
61432
+ {
61433
+ "type": {
61434
+ "text": "HelixReadingChangeEvent"
61435
+ },
61436
+ "description": "The slice shown moved, or was put away: `index` is the slice's row, or `-1` for none, with its `label` and the `pointerType` that moved it.",
61437
+ "name": "helix-reading-change",
61438
+ "reactProp": "onhelix-reading-change"
61439
+ },
61440
+ {
61441
+ "type": {
61442
+ "text": "HelixReadingPressEvent"
61443
+ },
61444
+ "description": "A slice was clicked, tapped, or pressed with Enter or Space, with the same detail as `helix-reading-change`.",
61445
+ "name": "helix-reading-press",
61446
+ "reactProp": "onhelix-reading-press"
61447
+ }
61448
+ ],
61489
61449
  "attributes": [
61490
61450
  {
61491
61451
  "name": "hole",
@@ -61512,6 +61472,45 @@
61512
61472
  "description": "How much of the circle the whole occupies.\n\nAbsent is the full turn. `half` is a semi-donut: the same shares spread\nover a half circle that opens downward, which is the shape a dashboard\nuses when the ring sits above a figure and the space below it is doing\nsomething else.\n\n**A second property rather than another `hole` value**, because the two are\ndifferent axes and can both be true: `hole` is radial and says how thick\nthe band is, this is angular and says how far round it goes. A `half`\n`none` is a semi-pie and is a real thing to want.\n\n**Not a gauge.** A gauge is one value against a range, which is a different\ndata shape entirely and is `Meter`, whose `round` example already draws the\nreading as a ring. This divides a whole into parts and then declines to use\nthe bottom half of the circle.\n\nReflected, because the stylesheet has three things to say about it: the\nrotation that puts the first slice at nine o'clock, the aspect ratio of a\nbox that is no longer square, and where the middle sits once the bottom of\nthe circle is not drawn.",
61513
61473
  "fieldName": "sweep"
61514
61474
  },
61475
+ {
61476
+ "name": "empty-text",
61477
+ "type": {
61478
+ "text": "string"
61479
+ },
61480
+ "default": "'No readings'",
61481
+ "description": "The words shown in place of the drawing when the table has no readings,\nand the fallback of the `empty` slot.",
61482
+ "fieldName": "emptyText",
61483
+ "inheritedFrom": {
61484
+ "name": "MixinChartStatus",
61485
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
61486
+ }
61487
+ },
61488
+ {
61489
+ "name": "loading",
61490
+ "type": {
61491
+ "text": "boolean"
61492
+ },
61493
+ "default": "false",
61494
+ "description": "Whether the readings are still on their way. The chart shows\n`loading-text` in place of an empty drawing until it has readings.\n\nReflected, so a stylesheet can treat the chart while it waits. A chart\nthat already has readings keeps drawing them, so a refresh does not\nblank it.",
61495
+ "fieldName": "loading",
61496
+ "inheritedFrom": {
61497
+ "name": "MixinChartStatus",
61498
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
61499
+ }
61500
+ },
61501
+ {
61502
+ "name": "loading-text",
61503
+ "type": {
61504
+ "text": "string"
61505
+ },
61506
+ "default": "'Loading readings'",
61507
+ "description": "The words shown in place of the drawing while `loading` is set and\nthere are no readings yet, and the fallback of the `loading` slot.",
61508
+ "fieldName": "loadingText",
61509
+ "inheritedFrom": {
61510
+ "name": "MixinChartStatus",
61511
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
61512
+ }
61513
+ },
61515
61514
  {
61516
61515
  "name": "for",
61517
61516
  "type": {
@@ -61565,7 +61564,33 @@
61565
61564
  }
61566
61565
  }
61567
61566
  ],
61567
+ "cssStates": [
61568
+ {
61569
+ "description": "While a slice is shown, under the pointer or the keys, with its tooltip open.",
61570
+ "name": "active"
61571
+ },
61572
+ {
61573
+ "description": "While the `empty` part stands in place of the ring.",
61574
+ "name": "empty"
61575
+ },
61576
+ {
61577
+ "description": "While the `loading` part stands in place of the ring.",
61578
+ "name": "loading"
61579
+ },
61580
+ {
61581
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
61582
+ "name": "settled",
61583
+ "inheritedFrom": {
61584
+ "name": "HelixElement",
61585
+ "module": "src/helix-element/helix-element.ts"
61586
+ }
61587
+ }
61588
+ ],
61568
61589
  "mixins": [
61590
+ {
61591
+ "name": "MixinChartStatus",
61592
+ "package": "@fusion.dev/helix-core"
61593
+ },
61569
61594
  {
61570
61595
  "name": "MixinChartSource",
61571
61596
  "package": "@fusion.dev/helix-core"
@@ -61603,16 +61628,6 @@
61603
61628
  },
61604
61629
  "tagName": "helix-headless-donut-chart",
61605
61630
  "customElement": true,
61606
- "cssStates": [
61607
- {
61608
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
61609
- "name": "settled",
61610
- "inheritedFrom": {
61611
- "name": "HelixElement",
61612
- "module": "src/helix-element/helix-element.ts"
61613
- }
61614
- }
61615
- ],
61616
61631
  "modulePath": "src/donut-chart/root/donut-chart-root.ts",
61617
61632
  "definitionPath": "src/donut-chart/root/donut-chart-root.ts"
61618
61633
  }
@@ -75083,7 +75098,7 @@
75083
75098
  "declarations": [
75084
75099
  {
75085
75100
  "kind": "class",
75086
- "description": "Helix draws no graph. A force layout of thousands of notes is physics and\nWebGL, which a renderer such as Sigma.js does. Put the renderer's box in the\nframe, and `connectGraph` from `@fusion.dev/helix-graph` draws `nodes` and\n`links` in it and keeps it in step with the frame.\n\nWhat the frame adds is what a drawing of a graph cannot do: a list of every\nnote beside it, which is the graph for a screen reader and a quick way to\nfind a note for anyone. The selected note comes first, then the notes it\nlinks to and from, then every other note, and the search field narrows it.\nSelecting a note in the list or in the drawing is the same selection.\n\nSet `depth` to show the local graph: only the notes within that many links\nof the selected one.\n\nSet `legend` to name the groups over the drawing, each a button that shows\nor hides its notes. `hiddenGroups` holds the groups turned off, and the\nlist holds only what the drawing shows.\n\n`nodes` and `links` are properties, never markup: a graph of ten thousand\nnotes as ten thousand elements would cost what the renderer exists to save.\nThe list draws only the rows in view.\n\nThe list scrolls on this tier. It carries `data-scroller`, and `core` ships\n`[data-scroller] { overflow: auto }` into every shadow root. You still need\nto set a block size on the list, or it grows to hold every row.",
75101
+ "description": "Helix draws no graph. A force layout of thousands of notes is physics and\nWebGL, which a renderer such as Sigma.js does. Put the renderer's box in the\nframe, and `connectGraph` from `@fusion.dev/helix-graph` draws `nodes` and\n`links` in it and keeps it in step with the frame.\n\nWhat the frame adds is what a drawing of a graph cannot do: a list of every\nnote beside it, which is the graph for a screen reader and a quick way to\nfind a note for anyone. The selected note comes first, then the notes it\nlinks to and from, then every other note, and the search field narrows it.\nSelecting a note in the list or in the drawing is the same selection.\n\nSet `depth` to show the local graph: only the notes within that many links\nof the selected one.\n\nSet `legend` to name the groups over the drawing, each a button that shows\nor hides its notes. `hiddenGroups` holds the groups turned off, and the\nlist holds only what the drawing shows. The legend is a toolbar and one tab\nstop: the arrow keys, Home, End and a group's first letters move between\nits buttons, and Space or Enter presses one.\n\n`nodes` and `links` are properties, never markup: a graph of ten thousand\nnotes as ten thousand elements would cost what the renderer exists to save.\nThe list draws only the rows in view.\n\nThe list scrolls on this tier. It carries `data-scroller`, and `core` ships\n`[data-scroller] { overflow: auto }` into every shadow root. You still need\nto set a block size on the list, or it grows to hold every row.",
75087
75102
  "name": "HelixHeadlessGraph",
75088
75103
  "cssParts": [
75089
75104
  {
@@ -75139,7 +75154,7 @@
75139
75154
  "name": "header"
75140
75155
  },
75141
75156
  {
75142
- "description": "The groups over the drawing, with `legend`, each a button that shows or hides its notes.",
75157
+ "description": "The groups over the drawing, with `legend`: a toolbar of buttons, each showing or hiding its notes, which is one tab stop.",
75143
75158
  "name": "legend"
75144
75159
  },
75145
75160
  {
@@ -75640,6 +75655,19 @@
75640
75655
  "words": true
75641
75656
  }
75642
75657
  },
75658
+ {
75659
+ "kind": "field",
75660
+ "name": "selectionLabel",
75661
+ "type": {
75662
+ "text": "string"
75663
+ },
75664
+ "default": "'{note}, selected. {count}'",
75665
+ "description": "What screen readers hear after a reader selects a note, in the list or in\nthe drawing, with `{note}` for its name and `{count}` for how many notes\nthe list then holds, written with `count-label`.",
75666
+ "attribute": "selection-label",
75667
+ "helix": {
75668
+ "words": true
75669
+ }
75670
+ },
75643
75671
  {
75644
75672
  "kind": "field",
75645
75673
  "name": "twoFingerHintLabel",
@@ -75835,6 +75863,33 @@
75835
75863
  "default": "false",
75836
75864
  "description": "Whether the next change of the list's rows is one a reader asked for by the legend, whose count is then said."
75837
75865
  },
75866
+ {
75867
+ "kind": "field",
75868
+ "name": "selectionAsked",
75869
+ "type": {
75870
+ "text": "string | undefined"
75871
+ },
75872
+ "privacy": "private",
75873
+ "description": "The note a reader last asked to select, in the list or in the drawing,\nuntil it is selected: by the frame, or by a page that refused the request\nand wrote `active` itself."
75874
+ },
75875
+ {
75876
+ "kind": "field",
75877
+ "name": "legendStop",
75878
+ "type": {
75879
+ "text": "number"
75880
+ },
75881
+ "privacy": "private",
75882
+ "default": "0",
75883
+ "description": "The legend's button that holds its one tab stop, by place: the one a reader was last on, or the first."
75884
+ },
75885
+ {
75886
+ "kind": "field",
75887
+ "name": "legendKeys",
75888
+ "privacy": "protected",
75889
+ "readonly": true,
75890
+ "default": "new KeyboardNavigationController(this, { items: () => [ ...(this.renderRoot?.querySelectorAll?.<HTMLButtonElement>('[part~=\"legend-item\"]') ?? []), ].map((button) => focusItemOf(button, { words: button.textContent?.trim() ?? '' })), origin: 'focus', selects: () => false, typeahead: typeaheadBy((item) => (item as { words?: string }).words ?? ''), })",
75891
+ "description": "The arrow keys, Home, End and typed letters among the legend's buttons,\nso a legend of twelve groups is one tab stop, as the `Legend` family's\ntoolbar is. Only a press that starts on a legend button moves: the frame's\nown arrows pan the drawing, and the list's walk the notes."
75892
+ },
75838
75893
  {
75839
75894
  "kind": "field",
75840
75895
  "name": "virtualize",
@@ -76092,6 +76147,38 @@
76092
76147
  },
76093
76148
  "description": "The groups over the drawing, with `legend`, each a button pressed while\nits notes are shown. **Nothing for one group or none**: a legend of one\nnames what every note is, and turning it off empties the graph."
76094
76149
  },
76150
+ {
76151
+ "kind": "method",
76152
+ "name": "requestActive",
76153
+ "return": {
76154
+ "type": {
76155
+ "text": "boolean"
76156
+ }
76157
+ },
76158
+ "parameters": [
76159
+ {
76160
+ "name": "next",
76161
+ "type": {
76162
+ "text": "string"
76163
+ }
76164
+ },
76165
+ {
76166
+ "name": "cause",
76167
+ "optional": true,
76168
+ "type": {
76169
+ "text": "string"
76170
+ }
76171
+ }
76172
+ ],
76173
+ "description": "Asks for a note to be selected, and remembers the ask, so the selection is said once it lands.",
76174
+ "inheritedFrom": {
76175
+ "name": "MixinControllerActive",
76176
+ "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
76177
+ },
76178
+ "type": {
76179
+ "text": "requestActive(next: string, cause?: string) => boolean"
76180
+ }
76181
+ },
76095
76182
  {
76096
76183
  "kind": "method",
76097
76184
  "name": "choose",
@@ -77002,38 +77089,6 @@
77002
77089
  "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
77003
77090
  }
77004
77091
  },
77005
- {
77006
- "kind": "method",
77007
- "name": "requestActive",
77008
- "return": {
77009
- "type": {
77010
- "text": "boolean"
77011
- }
77012
- },
77013
- "parameters": [
77014
- {
77015
- "name": "next",
77016
- "type": {
77017
- "text": "string"
77018
- }
77019
- },
77020
- {
77021
- "name": "cause",
77022
- "optional": true,
77023
- "type": {
77024
- "text": "string"
77025
- }
77026
- }
77027
- ],
77028
- "description": "Requests a new current item, and returns whether the change was applied.\n\nAnnounces before it acts, so `preventDefault()` on the `helix-before-activate` is\na refusal and nothing moves. Unlike a native control, nothing has moved\nby the time this runs, so refusing is simply not writing: there is\nnothing to put back. Nobody refusing means the set updates itself,\nwhether or not a consumer declared `active`, a declared property being a\nseed and a correction. `cause` says why, where the family names its\ncauses, and reaches the event as `detail.cause`.",
77029
- "inheritedFrom": {
77030
- "name": "MixinControllerActive",
77031
- "module": "src/mixins/mixin-controller-active/mixin-controller-active.ts"
77032
- },
77033
- "type": {
77034
- "text": "requestActive(next: string, cause?: string) => boolean"
77035
- }
77036
- },
77037
77092
  {
77038
77093
  "kind": "method",
77039
77094
  "name": "announceActivated",
@@ -77707,6 +77762,15 @@
77707
77762
  "description": "How the selected note is described in the list.",
77708
77763
  "fieldName": "selectedLabel"
77709
77764
  },
77765
+ {
77766
+ "name": "selection-label",
77767
+ "type": {
77768
+ "text": "string"
77769
+ },
77770
+ "default": "'{note}, selected. {count}'",
77771
+ "description": "What screen readers hear after a reader selects a note, in the list or in\nthe drawing, with `{note}` for its name and `{count}` for how many notes\nthe list then holds, written with `count-label`.",
77772
+ "fieldName": "selectionLabel"
77773
+ },
77710
77774
  {
77711
77775
  "name": "two-finger-hint-label",
77712
77776
  "type": {
@@ -78250,7 +78314,7 @@
78250
78314
  "declarations": [
78251
78315
  {
78252
78316
  "kind": "class",
78253
- "description": "A grid of cells, each colored by a tone. `rows=\"1\"` makes a status strip, and\n`rows=\"7\"` makes a contribution graph. GitHub's contribution graph uses five\ndiscrete levels, which a set of tones covers.\n\nColor in a heatmap is per cell. In every other Helix chart, color is per\nseries, so ninety differently colored cells would need ninety series.\n\n**The data is a real `<table>` named by `for`**, as in every Helix chart, and\nthe table is the accessible representation. Hide it with\n`data-hidden-visually`, and screen readers still read it.\n\nA cell takes its tone from its own `data-tone`, or from `thresholds` and\n`tones` applied to its value. `data-tone` wins, so when you already know a\nday was degraded, you can set the tone directly.\n\n**The headless tier does not resolve tone names.** A tone named `success`\nwrites `--heatmap-tone: var(--heatmap-tone-success)`, and the styled tier or\nyour own stylesheet defines that property. The headless tier does not use\n`var(--helix-color-*)`.\n\n**The strip is read by key.** It takes focus once it has cells. The up and\ndown arrows move a cell, the left and right arrows move a column, which is a\nweek with `rows=\"7\"`, and Home and End go to the first and the last. The\ntooltip follows, the `live` part says the cell's row in words, and Escape\nputs the tooltip away. PageUp and PageDown move a month, to the same day,\nwhere each row's header carries its date as a `<time datetime>`, and four\ncolumns otherwise, which is four weeks with `rows=\"7\"`.\n\n**The strip describes itself.** The `overview` part says the busiest\nreading and the total of the readings drawn, \"Busiest: 11 Jun, 12; Total\n84\", and the strip is described by it, as every chart is by its summary.\nHide it visually. The `summary` slot is still yours, for words of your own.\n\n**`selection-mode` lets a reader select cells**: `single` one at a time and\n`multiple` any number. Space, Enter or a press selects the cell the keys or\nthe pointer rest on, or lets it go, and under `multiple` Shift with an arrow,\nHome, End, PageUp or PageDown takes in every cell from the last one pressed\nto where the key went. `value` holds the selected days, by the names their\nrows have in the table, separated by commas. A change asks with\n`helix-before-change` and tells with `change`, and the `selection` part says\nhow many are selected, in `selection-label`.",
78317
+ "description": "A grid of cells, each colored by a tone. `rows=\"1\"` makes a status strip, and\n`rows=\"7\"` makes a contribution graph. GitHub's contribution graph uses five\ndiscrete levels, which a set of tones covers.\n\nColor in a heatmap is per cell. In every other Helix chart, color is per\nseries, so ninety differently colored cells would need ninety series.\n\n**The data is a real `<table>` named by `for`**, as in every Helix chart, and\nthe table is the accessible representation. Hide it with\n`data-hidden-visually`, and screen readers still read it.\n\nA cell takes its tone from its own `data-tone`, or from `thresholds` and\n`tones` applied to its value. `data-tone` wins, so when you already know a\nday was degraded, you can set the tone directly.\n\n**The headless tier does not resolve tone names.** A tone named `success`\nwrites `--heatmap-tone: var(--heatmap-tone-success)`, and the styled tier or\nyour own stylesheet defines that property. The headless tier does not use\n`var(--helix-color-*)`.\n\n**The strip is read by key.** It takes focus once it has cells. The up and\ndown arrows move a cell, the left and right arrows move a column, which is a\nweek with `rows=\"7\"`, and Home and End go to the first and the last. The\ntooltip follows, the `live` part says the cell's row in words, and Escape\nputs the tooltip away. PageUp and PageDown move a month, to the same day,\nwhere each row's header carries its date as a `<time datetime>`, and four\ncolumns otherwise, which is four weeks with `rows=\"7\"`.\n\n**The strip describes itself.** The `overview` part says the busiest\nreading and the total of the readings drawn, \"Busiest: 11 Jun, 12; Total\n84\", and the strip is described by it, as every chart is by its summary.\nHide it visually. The `summary` slot is still yours, for words of your own.\n\n**`selection-mode` lets a reader select cells**: `single` one at a time and\n`multiple` any number. Space, Enter or a press selects the cell the keys or\nthe pointer rest on, or lets it go, and under `multiple` Shift with an arrow,\nHome, End, PageUp or PageDown takes in every cell from the last one pressed\nto where the key went. `value` holds the selected days, separated by\ncommas: each by its row's `<time datetime>`, such as `2026-06-11`, or by\nits row's name where the row carries no date. A change asks with\n`helix-before-change` and tells with `change`, and the `selection` part says\nhow many are selected, in `selection-label`.\n\n**Keyboard.** The strip is one tab stop once it has cells.\n\n| Key | What it does |\n|---|---|\n| Tab | Moves focus to the strip and shows the first cell. |\n| Down, Up | Moves to the next or the previous cell. |\n| Right, Left | Moves a column on or back, a week with `rows=\"7\"`. On a right-to-left page, Left moves on. |\n| Home, End | Moves to the first or the last cell. |\n| Page Down, Page Up | Moves a month on or back where the rows carry dates, and four columns otherwise. |\n| Enter, Space | Selects the cell, or lets it go, under `selection-mode`. |\n| 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\"`. |\n| Escape | Puts the cell's tooltip away. |",
78254
78318
  "name": "HelixHeadlessHeatmap",
78255
78319
  "cssProperties": [
78256
78320
  {
@@ -78363,6 +78427,10 @@
78363
78427
  "description": "The middle slot's box.",
78364
78428
  "name": "summary"
78365
78429
  },
78430
+ {
78431
+ "description": "The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.",
78432
+ "name": "table"
78433
+ },
78366
78434
  {
78367
78435
  "description": "The bubble, forwarded from `Tooltip`.",
78368
78436
  "name": "tooltip"
@@ -78614,7 +78682,7 @@
78614
78682
  "text": "string"
78615
78683
  },
78616
78684
  "default": "''",
78617
- "description": "The selected cells, by the names their rows have in the table, such as\n`2026-06-11`, separated by commas.\n\nSet it to start with cells selected. Written by a press or a key under\n`selection-mode`.",
78685
+ "description": "The selected cells, separated by commas: each by the date its row's\nheader carries in a `<time datetime>`, such as `2026-06-11`, or by the\nheader's words where it carries none.\n\nSet it to start with cells selected. Written by a press or a key under\n`selection-mode`.",
78618
78686
  "attribute": "value"
78619
78687
  },
78620
78688
  {
@@ -78707,7 +78775,7 @@
78707
78775
  }
78708
78776
  }
78709
78777
  ],
78710
- "description": "The name each drawn cell stands for in `value`: its row's name in the table."
78778
+ "description": "The name each drawn cell stands for in `value`: the date its row's header\ncarries in a `<time datetime>`, or the header's words where it carries\nnone."
78711
78779
  },
78712
78780
  {
78713
78781
  "kind": "method",
@@ -78967,17 +79035,6 @@
78967
79035
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
78968
79036
  }
78969
79037
  },
78970
- {
78971
- "kind": "field",
78972
- "name": "pointer",
78973
- "readonly": true,
78974
- "default": "new ChartPointerController(this)",
78975
- "description": "Finds the reading nearest the pointer, so the tooltip can sit on it.\n\nPublic for the same reason `series` and `named` are: a protected member\ncannot be cast onto across unrelated classes, so it would be invisible to\nevery chart that needs it. Reading where a pointer is resting is a fair\nthing to ask a chart anyway.",
78976
- "inheritedFrom": {
78977
- "name": "MixinChartSource",
78978
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
78979
- }
78980
- },
78981
79038
  {
78982
79039
  "kind": "field",
78983
79040
  "name": "data",
@@ -79050,57 +79107,6 @@
79050
79107
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
79051
79108
  }
79052
79109
  },
79053
- {
79054
- "kind": "field",
79055
- "name": "observedAttributes",
79056
- "type": {
79057
- "text": "string[]"
79058
- },
79059
- "static": true,
79060
- "description": "Hears an `aria-label` written on the chart, which no property mirrors,\nso a page that names the chart that way names its plot.\n\nLit observes the attributes of its own properties only, and `ariaLabel`\nbelongs to the platform.\n\nRead through `Reflect.get` with this class as the receiver, which is\nwhat `super.observedAttributes` means: Lit's getter finalizes whichever\nclass it is asked on, and asked on the base it would finalize the base\nand leave a subclass without its styles. A mixin's base has no static\nside TypeScript can see, so `super` cannot be written here.",
79061
- "readonly": true,
79062
- "inheritedFrom": {
79063
- "name": "MixinChartSource",
79064
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
79065
- }
79066
- },
79067
- {
79068
- "kind": "method",
79069
- "name": "attributeChangedCallback",
79070
- "return": {
79071
- "type": {
79072
- "text": "void"
79073
- }
79074
- },
79075
- "parameters": [
79076
- {
79077
- "name": "name",
79078
- "type": {
79079
- "text": "string"
79080
- }
79081
- },
79082
- {
79083
- "name": "old",
79084
- "type": {
79085
- "text": "string | null"
79086
- }
79087
- },
79088
- {
79089
- "name": "value",
79090
- "type": {
79091
- "text": "string | null"
79092
- }
79093
- }
79094
- ],
79095
- "description": "Called by the browser when an observed attribute changes. A new\n`aria-label` asks for an update, because it names the plot.",
79096
- "inheritedFrom": {
79097
- "name": "MixinChartSource",
79098
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
79099
- },
79100
- "type": {
79101
- "text": "attributeChangedCallback(name: string, old: string | null, value: string | null) => void"
79102
- }
79103
- },
79104
79110
  {
79105
79111
  "kind": "field",
79106
79112
  "name": "series",
@@ -79127,32 +79133,6 @@
79127
79133
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
79128
79134
  }
79129
79135
  },
79130
- {
79131
- "kind": "field",
79132
- "name": "readingsKnown",
79133
- "type": {
79134
- "text": "boolean"
79135
- },
79136
- "description": "Whether the readings have been looked for: false on the server and\nwhile hydrating, where no table is resolved and no data is read. A\nchart says it has no readings only once this is true.",
79137
- "readonly": true,
79138
- "inheritedFrom": {
79139
- "name": "MixinChartSource",
79140
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
79141
- }
79142
- },
79143
- {
79144
- "kind": "field",
79145
- "name": "sourceRows",
79146
- "type": {
79147
- "text": "Row[]"
79148
- },
79149
- "description": "Every row of the table, with each cell's text and number.\n\nThis is where a tooltip's content comes from, and it is deliberately not\n`series`. A chart draws numbers; a reader resting a pointer on one wants\nwhat the table says, which is `$128k` and not `128000`, and often wants\nthe column beside it that nothing plotted at all.\n\n**Not `rows`.** It is the source table's rows, and `rows` on a chart is a\nname a chart wants for itself: `helix-heatmap` takes `rows=\"7\"` to mean a\ncalendar week, and declaring that against a base class whose `rows` is a\n`Row[]` getter is a type error at best. Name the member for what it holds\nrather than for the shortest word available.",
79150
- "readonly": true,
79151
- "inheritedFrom": {
79152
- "name": "MixinChartSource",
79153
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
79154
- }
79155
- },
79156
79136
  {
79157
79137
  "kind": "field",
79158
79138
  "name": "plottedColumns",
@@ -79266,6 +79246,21 @@
79266
79246
  "text": "columnName(cell: number) => string"
79267
79247
  }
79268
79248
  },
79249
+ {
79250
+ "kind": "method",
79251
+ "name": "renderTable",
79252
+ "privacy": "protected",
79253
+ "return": {
79254
+ "type": {
79255
+ "text": "TemplateResult | typeof nothing"
79256
+ }
79257
+ },
79258
+ "description": "The readings as a table, for a screen reader, where they were drawn from\n`data`: there is then no table on the page to read, and a chart's\nsummary gives only what the readings come to. Nothing where a table on\nthe page was read, which is already the readable version.\n\nThe `table` part, named by the chart, its cells as `data` writes them.",
79259
+ "inheritedFrom": {
79260
+ "name": "MixinChartSource",
79261
+ "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
79262
+ }
79263
+ },
79269
79264
  {
79270
79265
  "kind": "field",
79271
79266
  "name": "tier",
@@ -79755,7 +79750,7 @@
79755
79750
  "text": "string"
79756
79751
  },
79757
79752
  "default": "''",
79758
- "description": "The selected cells, by the names their rows have in the table, such as\n`2026-06-11`, separated by commas.\n\nSet it to start with cells selected. Written by a press or a key under\n`selection-mode`.",
79753
+ "description": "The selected cells, separated by commas: each by the date its row's\nheader carries in a `<time datetime>`, such as `2026-06-11`, or by the\nheader's words where it carries none.\n\nSet it to start with cells selected. Written by a press or a key under\n`selection-mode`.",
79759
79754
  "fieldName": "value"
79760
79755
  },
79761
79756
  {
@@ -79811,6 +79806,24 @@
79811
79806
  }
79812
79807
  }
79813
79808
  ],
79809
+ "cssStates": [
79810
+ {
79811
+ "description": "While a cell is shown, under the pointer or the keys, with its tooltip open.",
79812
+ "name": "active"
79813
+ },
79814
+ {
79815
+ "description": "While the `empty` part stands in place of the cells.",
79816
+ "name": "empty"
79817
+ },
79818
+ {
79819
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
79820
+ "name": "settled",
79821
+ "inheritedFrom": {
79822
+ "name": "HelixElement",
79823
+ "module": "src/helix-element/helix-element.ts"
79824
+ }
79825
+ }
79826
+ ],
79814
79827
  "mixins": [
79815
79828
  {
79816
79829
  "name": "MixinChartSource",
@@ -79849,16 +79862,6 @@
79849
79862
  },
79850
79863
  "tagName": "helix-headless-heatmap",
79851
79864
  "customElement": true,
79852
- "cssStates": [
79853
- {
79854
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
79855
- "name": "settled",
79856
- "inheritedFrom": {
79857
- "name": "HelixElement",
79858
- "module": "src/helix-element/helix-element.ts"
79859
- }
79860
- }
79861
- ],
79862
79865
  "modulePath": "src/heatmap/root/heatmap-root.ts",
79863
79866
  "definitionPath": "src/heatmap/root/heatmap-root.ts"
79864
79867
  }
@@ -91163,7 +91166,7 @@
91163
91166
  "declarations": [
91164
91167
  {
91165
91168
  "kind": "class",
91166
- "description": "A line chart shows the shape of each series: where the readings went.\n\nThe scale covers the range of the data. Including zero in the range of a\nseries that moves between 980 and 1020 would flatten the line into a rule\nacross the top of the box. `BarChart` always starts at zero, because a bar's\nlength is its value. Set `zero` when the distance from zero is the point.\n\nEvery series shares one scale, as in the bar chart.\n\n`dashed` names the series drawn as a dashed line, such as a forecast or a\ntarget beside the readings: `dashed=\"Forecast\"`. Each takes a\n`line-dashed` part beside `line`.\n\n`area` fills each series down to the floor on its own, so the fills overlap.\nFor a total made of parts, use `Area Chart`, which stacks the series so the\ntop edge is the total and each band is a share.\n\nThe labels are HTML beside the drawing, as in `BarChart`. Text inside an\n`<svg>` that fills its box scales with the box, so the same `font-size` can\nrender at 10px in a narrow chart and 43px in a wide one.\n\n`value-axis` draws the scale's numbers beside the plot, at the levels\n`gridlines` rules, written in `locale`.\n\nThe table is the accessible representation, and the drawing is hidden from\nscreen readers, who get the numbers. The `summary` part names the chart, from\n`label` or the table's caption, and gives each series' latest reading.\n\n**The plot is read by key.** It takes focus, named by `label` or the caption.\nThe left and right arrows move from reading to reading, Home and End go to\nthe first and the last, and the up and down arrows move among the series of\na reading. The tooltip follows, the `live` part says the reading in words,\nand Escape puts the tooltip away.\n\n**A tap shows the reading under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the reading, by pointer,\ntap or key, and `helix-reading-press` says a reading was clicked, tapped, or\npressed with Enter or Space, for a page that opens what a reading stands for.\n\n**`data` takes the readings as data** where the page has no table to point\n`for` at, in a table's shape: the column headings, then one row per reading\nwith its label first. A table is still the better source where the page can\nshow one, since it reads before any script runs.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place, such as a link to add the first reading.",
91169
+ "description": "A line chart shows the shape of each series: where the readings went.\n\nThe scale covers the range of the data. Including zero in the range of a\nseries that moves between 980 and 1020 would flatten the line into a rule\nacross the top of the box. `BarChart` always starts at zero, because a bar's\nlength is its value. Set `zero` when the distance from zero is the point.\n\nEvery series shares one scale, as in the bar chart.\n\n`dashed` names the series drawn as a dashed line, such as a forecast or a\ntarget beside the readings: `dashed=\"Forecast\"`. Each takes a\n`line-dashed` part beside `line`.\n\n`area` fills each series down to the floor on its own, so the fills overlap.\nFor a total made of parts, use `Area Chart`, which stacks the series so the\ntop edge is the total and each band is a share.\n\nThe labels are HTML beside the drawing, as in `BarChart`. Text inside an\n`<svg>` that fills its box scales with the box, so the same `font-size` can\nrender at 10px in a narrow chart and 43px in a wide one.\n\n`value-axis` draws the scale's numbers beside the plot, at the levels\n`gridlines` rules, written in `locale`.\n\nThe table is the accessible representation, and the drawing is hidden from\nscreen readers, who get the numbers. The `summary` part names the chart, from\n`label` or the table's caption, and gives each series' latest reading.\n\n**The plot is read by key.** It takes focus, named by `label` or the caption.\nThe left and right arrows move from reading to reading, Home and End go to\nthe first and the last, and the up and down arrows move among the series of\na reading. The tooltip follows, the `live` part says the reading in words,\nand Escape puts the tooltip away.\n\n**A tap shows the reading under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the reading, by pointer,\ntap or key, and `helix-reading-press` says a reading was clicked, tapped, or\npressed with Enter or Space, for a page that opens what a reading stands for.\n\n**`data` takes the readings as data** where the page has no table to point\n`for` at, in a table's shape: the column headings, then one row per reading\nwith its label first. A table is still the better source where the page can\nshow one, since it reads before any script runs.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place, such as a link to add the first reading.\n\n**Keyboard.** The plot is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Tab | Moves focus to the plot and shows the first reading. |\n| Right, Left | Moves to the next or the previous reading. On a right-to-left page, Left moves to the next. |\n| Down, Up | Moves among the series of the reading. With one series, moves to the next or the previous reading. |\n| Home, End | Moves to the first or the last reading. |\n| Page Down, Page Up | Moves a tenth of the readings on or back. |\n| Enter, Space | Presses the reading shown, which sends `helix-reading-press`. |\n| Escape | Puts the reading and its tooltip away. |",
91167
91170
  "name": "HelixHeadlessLineChart",
91168
91171
  "cssProperties": [
91169
91172
  {
@@ -91245,7 +91248,7 @@
91245
91248
  "name": "marker-lone"
91246
91249
  },
91247
91250
  {
91248
- "description": "The drawing, which takes focus to be read by key.",
91251
+ "description": "The drawing, which takes focus to be read by key. With nothing to draw, a group named as the chart is, holding the `empty` or `loading` part.",
91249
91252
  "name": "plot"
91250
91253
  },
91251
91254
  {
@@ -91256,6 +91259,10 @@
91256
91259
  "description": "The drawing surface the lines and areas sit on.",
91257
91260
  "name": "svg"
91258
91261
  },
91262
+ {
91263
+ "description": "The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.",
91264
+ "name": "table"
91265
+ },
91259
91266
  {
91260
91267
  "description": "The mark on one series' last reading.",
91261
91268
  "name": "terminus"
@@ -91864,23 +91871,27 @@
91864
91871
  }
91865
91872
  },
91866
91873
  {
91867
- "kind": "field",
91868
- "name": "source",
91874
+ "kind": "method",
91875
+ "name": "renderEmpty",
91869
91876
  "privacy": "protected",
91870
- "readonly": true,
91871
- "default": "new SourceController(this)",
91872
- "description": "Resolves `for` and re-renders when the table behind it changes.",
91877
+ "return": {
91878
+ "type": {
91879
+ "text": "TemplateResult"
91880
+ }
91881
+ },
91882
+ "description": "The plot while there is nothing to draw: a group named as the chart is,\nholding `renderStatus`. Not focusable, there being no reading to walk.",
91873
91883
  "inheritedFrom": {
91874
- "name": "MixinChartSource",
91875
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
91884
+ "name": "MixinChartStatus",
91885
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
91876
91886
  }
91877
91887
  },
91878
91888
  {
91879
91889
  "kind": "field",
91880
- "name": "pointer",
91890
+ "name": "source",
91891
+ "privacy": "protected",
91881
91892
  "readonly": true,
91882
- "default": "new ChartPointerController(this)",
91883
- "description": "Finds the reading nearest the pointer, so the tooltip can sit on it.\n\nPublic for the same reason `series` and `named` are: a protected member\ncannot be cast onto across unrelated classes, so it would be invisible to\nevery chart that needs it. Reading where a pointer is resting is a fair\nthing to ask a chart anyway.",
91893
+ "default": "new SourceController(this)",
91894
+ "description": "Resolves `for` and re-renders when the table behind it changes.",
91884
91895
  "inheritedFrom": {
91885
91896
  "name": "MixinChartSource",
91886
91897
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
@@ -91958,57 +91969,6 @@
91958
91969
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
91959
91970
  }
91960
91971
  },
91961
- {
91962
- "kind": "field",
91963
- "name": "observedAttributes",
91964
- "type": {
91965
- "text": "string[]"
91966
- },
91967
- "static": true,
91968
- "description": "Hears an `aria-label` written on the chart, which no property mirrors,\nso a page that names the chart that way names its plot.\n\nLit observes the attributes of its own properties only, and `ariaLabel`\nbelongs to the platform.\n\nRead through `Reflect.get` with this class as the receiver, which is\nwhat `super.observedAttributes` means: Lit's getter finalizes whichever\nclass it is asked on, and asked on the base it would finalize the base\nand leave a subclass without its styles. A mixin's base has no static\nside TypeScript can see, so `super` cannot be written here.",
91969
- "readonly": true,
91970
- "inheritedFrom": {
91971
- "name": "MixinChartSource",
91972
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
91973
- }
91974
- },
91975
- {
91976
- "kind": "method",
91977
- "name": "attributeChangedCallback",
91978
- "return": {
91979
- "type": {
91980
- "text": "void"
91981
- }
91982
- },
91983
- "parameters": [
91984
- {
91985
- "name": "name",
91986
- "type": {
91987
- "text": "string"
91988
- }
91989
- },
91990
- {
91991
- "name": "old",
91992
- "type": {
91993
- "text": "string | null"
91994
- }
91995
- },
91996
- {
91997
- "name": "value",
91998
- "type": {
91999
- "text": "string | null"
92000
- }
92001
- }
92002
- ],
92003
- "description": "Called by the browser when an observed attribute changes. A new\n`aria-label` asks for an update, because it names the plot.",
92004
- "inheritedFrom": {
92005
- "name": "MixinChartSource",
92006
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
92007
- },
92008
- "type": {
92009
- "text": "attributeChangedCallback(name: string, old: string | null, value: string | null) => void"
92010
- }
92011
- },
92012
91972
  {
92013
91973
  "kind": "field",
92014
91974
  "name": "series",
@@ -92035,32 +91995,6 @@
92035
91995
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
92036
91996
  }
92037
91997
  },
92038
- {
92039
- "kind": "field",
92040
- "name": "readingsKnown",
92041
- "type": {
92042
- "text": "boolean"
92043
- },
92044
- "description": "Whether the readings have been looked for: false on the server and\nwhile hydrating, where no table is resolved and no data is read. A\nchart says it has no readings only once this is true.",
92045
- "readonly": true,
92046
- "inheritedFrom": {
92047
- "name": "MixinChartSource",
92048
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
92049
- }
92050
- },
92051
- {
92052
- "kind": "field",
92053
- "name": "sourceRows",
92054
- "type": {
92055
- "text": "Row[]"
92056
- },
92057
- "description": "Every row of the table, with each cell's text and number.\n\nThis is where a tooltip's content comes from, and it is deliberately not\n`series`. A chart draws numbers; a reader resting a pointer on one wants\nwhat the table says, which is `$128k` and not `128000`, and often wants\nthe column beside it that nothing plotted at all.\n\n**Not `rows`.** It is the source table's rows, and `rows` on a chart is a\nname a chart wants for itself: `helix-heatmap` takes `rows=\"7\"` to mean a\ncalendar week, and declaring that against a base class whose `rows` is a\n`Row[]` getter is a type error at best. Name the member for what it holds\nrather than for the shortest word available.",
92058
- "readonly": true,
92059
- "inheritedFrom": {
92060
- "name": "MixinChartSource",
92061
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
92062
- }
92063
- },
92064
91998
  {
92065
91999
  "kind": "field",
92066
92000
  "name": "plottedColumns",
@@ -92187,6 +92121,21 @@
92187
92121
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
92188
92122
  }
92189
92123
  },
92124
+ {
92125
+ "kind": "method",
92126
+ "name": "renderTable",
92127
+ "privacy": "protected",
92128
+ "return": {
92129
+ "type": {
92130
+ "text": "TemplateResult | typeof nothing"
92131
+ }
92132
+ },
92133
+ "description": "The readings as a table, for a screen reader, where they were drawn from\n`data`: there is then no table on the page to read, and a chart's\nsummary gives only what the readings come to. Nothing where a table on\nthe page was read, which is already the readable version.\n\nThe `table` part, named by the chart, its cells as `data` writes them.",
92134
+ "inheritedFrom": {
92135
+ "name": "MixinChartSource",
92136
+ "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
92137
+ }
92138
+ },
92190
92139
  {
92191
92140
  "kind": "field",
92192
92141
  "name": "tier",
@@ -92707,6 +92656,28 @@
92707
92656
  }
92708
92657
  }
92709
92658
  ],
92659
+ "cssStates": [
92660
+ {
92661
+ "description": "While a reading is shown, under the pointer or the keys, with its tooltip open.",
92662
+ "name": "active"
92663
+ },
92664
+ {
92665
+ "description": "While the `empty` part stands in the plot.",
92666
+ "name": "empty"
92667
+ },
92668
+ {
92669
+ "description": "While the `loading` part stands in the plot.",
92670
+ "name": "loading"
92671
+ },
92672
+ {
92673
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
92674
+ "name": "settled",
92675
+ "inheritedFrom": {
92676
+ "name": "HelixElement",
92677
+ "module": "src/helix-element/helix-element.ts"
92678
+ }
92679
+ }
92680
+ ],
92710
92681
  "mixins": [
92711
92682
  {
92712
92683
  "name": "MixinChartStatus",
@@ -92749,16 +92720,6 @@
92749
92720
  },
92750
92721
  "tagName": "helix-headless-line-chart",
92751
92722
  "customElement": true,
92752
- "cssStates": [
92753
- {
92754
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
92755
- "name": "settled",
92756
- "inheritedFrom": {
92757
- "name": "HelixElement",
92758
- "module": "src/helix-element/helix-element.ts"
92759
- }
92760
- }
92761
- ],
92762
92723
  "modulePath": "src/line-chart/root/line-chart-root.ts",
92763
92724
  "definitionPath": "src/line-chart/root/line-chart-root.ts"
92764
92725
  }
@@ -98456,9 +98417,13 @@
98456
98417
  "declarations": [
98457
98418
  {
98458
98419
  "kind": "class",
98459
- "description": "Draws two concentric circles: a track and a moving arc. The track shows the\narc as a proportion of a whole, and costs one element.\n\n**For work whose length is known, use `Progress` with `shape=\"ring\"`.** It\ndraws the same ring filled to the value, says the value as a progress bar\ndoes, and says when the work is complete. A loader claims no proportion, so\nit takes no value.\n\n**The center is a slot, empty by default.** Put your logo there once, where\nyour app wraps the loader. When nothing is slotted, nothing extra is\nrendered.\n\nSlotted content does not rotate. Only the arc moves, so a logo stays\nreadable.\n\nThe role is set on the host through `ElementInternals`. A `role` in the\nshadow root would leave the host itself without a role in the light DOM, and\na `role` attribute on the host would be missing from React server-rendered\nmarkup.\n\n**`for` names the region being loaded**, and the loader sets\n`aria-busy=\"true\"` on it for as long as the loader is on the page, so a\nscreen reader waits for the region rather than reading it half filled. Two\nloaders in one region hold it busy until the last one leaves. A region drawn\nafter the loader is marked when it arrives.\n\n**`delay` keeps a quick load from flashing a loader.** The loader stays\nhidden, and silent, for that many milliseconds, and appears only if the work\nis still going. While it waits it carries `:state(waiting)`.",
98420
+ "description": "Draws two concentric circles: a track and a moving arc. The track shows the\narc as a proportion of a whole, and costs one element.\n\n**For work whose length is known, use `Progress` with `shape=\"ring\"`.** It\ndraws the same ring filled to the value, says the value as a progress bar\ndoes, and says when the work is complete. A loader claims no proportion, so\nit takes no value.\n\n**The center is a slot, empty by default.** Put your logo there once, where\nyour app wraps the loader. When nothing is slotted, nothing extra is\nrendered.\n\nSlotted content does not rotate. Only the arc moves, so a logo stays\nreadable.\n\nThe role is set on the host through `ElementInternals`. A `role` in the\nshadow root would leave the host itself without a role in the light DOM, and\na `role` attribute on the host would be missing from React server-rendered\nmarkup.\n\n**`for` names the region being loaded**, and the loader sets\n`aria-busy=\"true\"` on it for as long as the loader is on the page, so a\nscreen reader waits for the region rather than reading it half filled. Two\nloaders in one region hold it busy until the last one leaves. A region drawn\nafter the loader is marked when it arrives.\n\n**`delay` keeps a quick load from flashing a loader.** The loader stays\nhidden, and silent, for that many milliseconds, and appears only if the work\nis still going. While it waits it carries `:state(waiting)`.\n\n**The loader can stand in for what it wraps.** Put the content in the\n`content` slot, such as a button or a card, and set `idle` while no work is\nin progress. While the work runs, the content keeps its size and is hidden\nand inert, and the ring draws over it. While `idle` is set, the loader draws\nnothing of its own, has no role, and marks no region busy, so only the\ncontent shows. Clearing `idle` starts `delay` again.",
98460
98421
  "name": "HelixHeadlessLoader",
98461
98422
  "cssParts": [
98423
+ {
98424
+ "description": "The box that holds the `content` slot. Hidden while the work runs, and shown while `idle` is set.",
98425
+ "name": "content"
98426
+ },
98462
98427
  {
98463
98428
  "description": "The arc that turns.",
98464
98429
  "name": "indicator"
@@ -98480,6 +98445,10 @@
98480
98445
  {
98481
98446
  "description": "An icon or logo that stays still at the center. Empty by default.",
98482
98447
  "name": ""
98448
+ },
98449
+ {
98450
+ "description": "What the loader stands in for while the work runs, such as a button. It keeps its size, hidden and inert, until `idle` is set.",
98451
+ "name": "content"
98483
98452
  }
98484
98453
  ],
98485
98454
  "members": [
@@ -98513,6 +98482,16 @@
98513
98482
  "description": "The id of the region being loaded, which is marked `aria-busy` while the\nloader is on the page.\n\nNames an element in the same tree. In React it arrives as a property, the\nway `Tooltip.for` does.",
98514
98483
  "attribute": "for"
98515
98484
  },
98485
+ {
98486
+ "kind": "field",
98487
+ "name": "idle",
98488
+ "type": {
98489
+ "text": "boolean"
98490
+ },
98491
+ "default": "false",
98492
+ "description": "Whether no work is in progress. The loader draws nothing of its own, has\nno role, and marks no region busy, and what is in the `content` slot\nshows. Clearing it starts `delay` again.",
98493
+ "attribute": "idle"
98494
+ },
98516
98495
  {
98517
98496
  "kind": "field",
98518
98497
  "name": "label",
@@ -98953,6 +98932,15 @@
98953
98932
  "description": "The id of the region being loaded, which is marked `aria-busy` while the\nloader is on the page.\n\nNames an element in the same tree. In React it arrives as a property, the\nway `Tooltip.for` does.",
98954
98933
  "fieldName": "for"
98955
98934
  },
98935
+ {
98936
+ "name": "idle",
98937
+ "type": {
98938
+ "text": "boolean"
98939
+ },
98940
+ "default": "false",
98941
+ "description": "Whether no work is in progress. The loader draws nothing of its own, has\nno role, and marks no region busy, and what is in the `content` slot\nshows. Clearing it starts `delay` again.",
98942
+ "fieldName": "idle"
98943
+ },
98956
98944
  {
98957
98945
  "name": "label",
98958
98946
  "type": {
@@ -136541,7 +136529,7 @@
136541
136529
  "declarations": [
136542
136530
  {
136543
136531
  "kind": "class",
136544
- "description": "Supports half marks, so the value is not always an integer and the press\ntargets are not the marks: five stars at a half step give ten places to\npress. The pointer handling and `step` are built around half marks.\n\nA partial mark is the full mark, clipped. The filled marks are drawn over the\nempty marks and cut off partway, so any mark and any fraction work.\n\nA read-only rating displays a score, which is the most common use. It is\nannounced as a displayed value and does not look disabled.\n\nWith `clearable`, pressing the chosen score again, or Backspace or Delete on\nthe marks, takes the rating back to unrated and sends `helix-clear`.\n\n**Keyboard.** The marks are one tab stop, on the chosen score or the first.\n\n| Key | What it does |\n|---|---|\n| Right, Down | Chooses the next score up, and stops at the highest. |\n| Left, Up | Chooses the next score down, and stops at the lowest. |\n| Home, End | Chooses the lowest or the highest score. |\n| Space, Enter | Chooses the focused score, or clears it under `clearable` when it is already chosen. |\n| Backspace, Delete | Clears the rating, under `clearable`. |\n\nLeft and Right swap on a right-to-left page. The marks are a `radiogroup`\nnamed by `label`, and each score is a `radio` named by `option-label`, such\nas \"3 out of 5\". A read-only rating is one `img` named by its score.",
136532
+ "description": "Supports half marks, so the value is not always an integer and the press\ntargets are not the marks: five stars at a half step give ten places to\npress. The pointer handling and `step` are built around half marks.\n\nA partial mark is the full mark, clipped. The filled marks are drawn over the\nempty marks and cut off partway, so any mark and any fraction work.\n\nA read-only rating displays a score, which is the most common use. It is\nannounced as a displayed value and does not look disabled.\n\nWith `clearable`, pressing the chosen score again, or Backspace or Delete on\nthe marks, takes the rating back to unrated and sends `helix-clear`.\n\n**Keyboard.** The marks are one tab stop, on the chosen score or the first.\n\n| Key | What it does |\n|---|---|\n| Right, Down | Chooses the next score up, and stops at the highest. |\n| Left, Up | Chooses the next score down, and stops at the lowest. |\n| Home, End | Chooses the lowest or the highest score. |\n| Space, Enter | Chooses the focused score, or clears it under `clearable` when it is already chosen. |\n| Backspace, Delete | Clears the rating, under `clearable`. |\n\nLeft and Right swap on a right-to-left page. The marks are a `radiogroup`\nnamed by `label`, and each score is a `radio` named by `option-label`, such\nas \"3 out of 5\". A read-only rating is one `img` named by its label and\nthen its score, such as \"Quality 3 out of 5\".",
136545
136533
  "name": "HelixHeadlessRating",
136546
136534
  "cssProperties": [
136547
136535
  {
@@ -136758,7 +136746,7 @@
136758
136746
  "name": "aria",
136759
136747
  "privacy": "protected",
136760
136748
  "readonly": true,
136761
- "default": "new AriaForwardController(this, { target: () => this.partNamed('marks'), })"
136749
+ "default": "new AriaForwardController(this, { /* A read-only rating is named by its label and then its score, so a page's `<label>` or a host `aria-labelledby` is followed by the score too. */ labelledByAfter: () => { const score = this.readOnly ? this.renderRoot?.querySelector('#score') : null return score ? [score] : [] }, /* Its own label is the only name of its own: a read-only rating carries its score as an `aria-label`, and a page's `<label>` still names it. */ named: () => this.labeled, target: () => this.partNamed('marks'), })"
136762
136750
  },
136763
136751
  {
136764
136752
  "kind": "field",
@@ -138874,7 +138862,7 @@
138874
138862
  "declarations": [
138875
138863
  {
138876
138864
  "kind": "class",
138877
- "description": "A scatter chart shows how two measures relate. The table's first numeric\ncolumn is measured across, every other numeric column is measured up, and\neach row is one point. A table of countries with an income column and a life\nexpectancy column draws one point for each country. Each additional numeric\ncolumn is another series, in its own color.\n\nBoth axes are labeled, because both positions are values. The ticks sit at\nround numbers, and the range extends to them.\n\n`trend` draws each series' line of best fit, by least squares, across the\nplot in the series' color.\n\n**`size-by` names a third measure, drawn as each point's size**, as a bubble\nchart does: `size-by=\"Population\"` takes that column out of the series and\ngives each point an area in proportion to its row's number there. The\ntooltip and the table still say the number.\n\nThe summary gives each series' correlation coefficient and its number of\npoints. The table has every number, and the drawing is hidden from screen\nreaders.\n\n**The plot is read by key.** It takes focus, named by `label` or the caption.\nThe left and right arrows move from row to row in the table's order, Home\nand End go to the first and the last, and the up and down arrows move among\nthe series of a row. The tooltip sits on that point, the `live` part says the\nrow in words, and Escape puts the tooltip away.\n\nEach point is a `<span>` placed by percentage over the drawing, as\n`LineChart` places its end points, so points stay round when the drawing\nstretches.\n\nThe plot runs left to right in every text direction, as a number line does.\nThe plot, its axes, and the axis names sit in a `plane` part with\n`dir=\"ltr\"`. The axis names carry `dir=\"auto\"`, so a name in Arabic or Hebrew\nreads in its own direction. The summary and the tooltip bubble follow the\npage's direction.\n\n**A tap shows the reading under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the reading, by pointer,\ntap or key, and `helix-reading-press` says a reading was clicked, tapped, or\npressed with Enter or Space, for a page that opens what a reading stands for.\n\n**`data` takes the readings as data** where the page has no table to point\n`for` at, in a table's shape: the column headings, then one row per reading\nwith its label first. A table is still the better source where the page can\nshow one, since it reads before any script runs.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place, such as a link to add the first reading.",
138865
+ "description": "A scatter chart shows how two measures relate. The table's first numeric\ncolumn is measured across, every other numeric column is measured up, and\neach row is one point. A table of countries with an income column and a life\nexpectancy column draws one point for each country. Each additional numeric\ncolumn is another series, in its own color.\n\nBoth axes are labeled, because both positions are values. The ticks sit at\nround numbers, and the range extends to them.\n\n`trend` draws each series' line of best fit, by least squares, across the\nplot in the series' color.\n\n**`size-by` names a third measure, drawn as each point's size**, as a bubble\nchart does: `size-by=\"Population\"` takes that column out of the series and\ngives each point an area in proportion to its row's number there. The\ntooltip and the table still say the number.\n\nThe summary gives each series' correlation coefficient and its number of\npoints. The table has every number, and the drawing is hidden from screen\nreaders.\n\n**The plot is read by key.** It takes focus, named by `label` or the caption.\nThe left and right arrows move from point to point, left to right across\nthe plot, Home and End go to the first and the last, and the up and down\narrows move among the series of a row. The tooltip sits on that point, the\n`live` part says the row in words, and Escape puts the tooltip away.\n\nEach point is a `<span>` placed by percentage over the drawing, as\n`LineChart` places its end points, so points stay round when the drawing\nstretches.\n\nThe plot runs left to right in every text direction, as a number line does.\nThe plot, its axes, and the axis names sit in a `plane` part with\n`dir=\"ltr\"`. The axis names carry `dir=\"auto\"`, so a name in Arabic or Hebrew\nreads in its own direction. The summary and the tooltip bubble follow the\npage's direction.\n\n**A tap shows the reading under it**, and keeps it until a tap lands\nelsewhere. `helix-reading-change` says each move of the reading, by pointer,\ntap or key, and `helix-reading-press` says a reading was clicked, tapped, or\npressed with Enter or Space, for a page that opens what a reading stands for.\n\n**`data` takes the readings as data** where the page has no table to point\n`for` at, in a table's shape: the column headings, then one row per reading\nwith its label first. A table is still the better source where the page can\nshow one, since it reads before any script runs.\n\n**A chart with nothing to draw says so.** A table with no readings shows\n`empty-text`, \"No readings\", in the plot, and `loading` shows `loading-text`\nthere until readings arrive. The `empty` and `loading` slots take markup in\ntheir place, such as a link to add the first reading.\n\n**Keyboard.** The plot is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Tab | Moves focus to the plot and shows the first reading. |\n| Right, Left | Moves to the next or the previous point, left to right across the plot. On a right-to-left page, Left moves to the next. |\n| Down, Up | Moves among the series of the point. With one series, moves to the next or the previous point. |\n| Home, End | Moves to the first or the last point. |\n| Page Down, Page Up | Moves a tenth of the points on or back. |\n| Enter, Space | Presses the point shown, which sends `helix-reading-press`. |\n| Escape | Puts the point and its tooltip away. |",
138878
138866
  "name": "HelixHeadlessScatterChart",
138879
138867
  "cssProperties": [
138880
138868
  {
@@ -138920,7 +138908,7 @@
138920
138908
  "name": "plane"
138921
138909
  },
138922
138910
  {
138923
- "description": "The drawing, which takes focus to be read by key.",
138911
+ "description": "The drawing, which takes focus to be read by key. With nothing to draw, a group named as the chart is, holding the `empty` or `loading` part.",
138924
138912
  "name": "plot"
138925
138913
  },
138926
138914
  {
@@ -138939,6 +138927,10 @@
138939
138927
  "description": "The drawing surface the gridlines and the trend lines sit on.",
138940
138928
  "name": "svg"
138941
138929
  },
138930
+ {
138931
+ "description": "The readings as a table, for a screen reader, rendered only where they were drawn from `data`. Hide it visually.",
138932
+ "name": "table"
138933
+ },
138942
138934
  {
138943
138935
  "description": "The bubble, forwarded from `Tooltip`.",
138944
138936
  "name": "tooltip"
@@ -139016,7 +139008,7 @@
139016
139008
  "name": "x-name"
139017
139009
  },
139018
139010
  {
139019
- "description": "One labeled value on the horizontal axis. Each axis has its own tick part, because `::part()` cannot tell which axis a tick is on.",
139011
+ "description": "One labeled value on the horizontal axis. Each axis has its own tick part, because `::part()` cannot tell which axis a tick is on. The one at the far edge carries `data-edge=\"end\"`.",
139020
139012
  "name": "x-tick"
139021
139013
  },
139022
139014
  {
@@ -139413,23 +139405,27 @@
139413
139405
  }
139414
139406
  },
139415
139407
  {
139416
- "kind": "field",
139417
- "name": "source",
139408
+ "kind": "method",
139409
+ "name": "renderEmpty",
139418
139410
  "privacy": "protected",
139419
- "readonly": true,
139420
- "default": "new SourceController(this)",
139421
- "description": "Resolves `for` and re-renders when the table behind it changes.",
139411
+ "return": {
139412
+ "type": {
139413
+ "text": "TemplateResult"
139414
+ }
139415
+ },
139416
+ "description": "The plot while there is nothing to draw: a group named as the chart is,\nholding `renderStatus`. Not focusable, there being no reading to walk.",
139422
139417
  "inheritedFrom": {
139423
- "name": "MixinChartSource",
139424
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139418
+ "name": "MixinChartStatus",
139419
+ "module": "src/mixins/mixin-chart-status/mixin-chart-status.ts"
139425
139420
  }
139426
139421
  },
139427
139422
  {
139428
139423
  "kind": "field",
139429
- "name": "pointer",
139424
+ "name": "source",
139425
+ "privacy": "protected",
139430
139426
  "readonly": true,
139431
- "default": "new ChartPointerController(this)",
139432
- "description": "Finds the reading nearest the pointer, so the tooltip can sit on it.\n\nPublic for the same reason `series` and `named` are: a protected member\ncannot be cast onto across unrelated classes, so it would be invisible to\nevery chart that needs it. Reading where a pointer is resting is a fair\nthing to ask a chart anyway.",
139427
+ "default": "new SourceController(this)",
139428
+ "description": "Resolves `for` and re-renders when the table behind it changes.",
139433
139429
  "inheritedFrom": {
139434
139430
  "name": "MixinChartSource",
139435
139431
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
@@ -139507,57 +139503,6 @@
139507
139503
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139508
139504
  }
139509
139505
  },
139510
- {
139511
- "kind": "field",
139512
- "name": "observedAttributes",
139513
- "type": {
139514
- "text": "string[]"
139515
- },
139516
- "static": true,
139517
- "description": "Hears an `aria-label` written on the chart, which no property mirrors,\nso a page that names the chart that way names its plot.\n\nLit observes the attributes of its own properties only, and `ariaLabel`\nbelongs to the platform.\n\nRead through `Reflect.get` with this class as the receiver, which is\nwhat `super.observedAttributes` means: Lit's getter finalizes whichever\nclass it is asked on, and asked on the base it would finalize the base\nand leave a subclass without its styles. A mixin's base has no static\nside TypeScript can see, so `super` cannot be written here.",
139518
- "readonly": true,
139519
- "inheritedFrom": {
139520
- "name": "MixinChartSource",
139521
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139522
- }
139523
- },
139524
- {
139525
- "kind": "method",
139526
- "name": "attributeChangedCallback",
139527
- "return": {
139528
- "type": {
139529
- "text": "void"
139530
- }
139531
- },
139532
- "parameters": [
139533
- {
139534
- "name": "name",
139535
- "type": {
139536
- "text": "string"
139537
- }
139538
- },
139539
- {
139540
- "name": "old",
139541
- "type": {
139542
- "text": "string | null"
139543
- }
139544
- },
139545
- {
139546
- "name": "value",
139547
- "type": {
139548
- "text": "string | null"
139549
- }
139550
- }
139551
- ],
139552
- "description": "Called by the browser when an observed attribute changes. A new\n`aria-label` asks for an update, because it names the plot.",
139553
- "inheritedFrom": {
139554
- "name": "MixinChartSource",
139555
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139556
- },
139557
- "type": {
139558
- "text": "attributeChangedCallback(name: string, old: string | null, value: string | null) => void"
139559
- }
139560
- },
139561
139506
  {
139562
139507
  "kind": "field",
139563
139508
  "name": "series",
@@ -139584,32 +139529,6 @@
139584
139529
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139585
139530
  }
139586
139531
  },
139587
- {
139588
- "kind": "field",
139589
- "name": "readingsKnown",
139590
- "type": {
139591
- "text": "boolean"
139592
- },
139593
- "description": "Whether the readings have been looked for: false on the server and\nwhile hydrating, where no table is resolved and no data is read. A\nchart says it has no readings only once this is true.",
139594
- "readonly": true,
139595
- "inheritedFrom": {
139596
- "name": "MixinChartSource",
139597
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139598
- }
139599
- },
139600
- {
139601
- "kind": "field",
139602
- "name": "sourceRows",
139603
- "type": {
139604
- "text": "Row[]"
139605
- },
139606
- "description": "Every row of the table, with each cell's text and number.\n\nThis is where a tooltip's content comes from, and it is deliberately not\n`series`. A chart draws numbers; a reader resting a pointer on one wants\nwhat the table says, which is `$128k` and not `128000`, and often wants\nthe column beside it that nothing plotted at all.\n\n**Not `rows`.** It is the source table's rows, and `rows` on a chart is a\nname a chart wants for itself: `helix-heatmap` takes `rows=\"7\"` to mean a\ncalendar week, and declaring that against a base class whose `rows` is a\n`Row[]` getter is a type error at best. Name the member for what it holds\nrather than for the shortest word available.",
139607
- "readonly": true,
139608
- "inheritedFrom": {
139609
- "name": "MixinChartSource",
139610
- "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139611
- }
139612
- },
139613
139532
  {
139614
139533
  "kind": "field",
139615
139534
  "name": "plottedColumns",
@@ -139711,6 +139630,21 @@
139711
139630
  "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139712
139631
  }
139713
139632
  },
139633
+ {
139634
+ "kind": "method",
139635
+ "name": "renderTable",
139636
+ "privacy": "protected",
139637
+ "return": {
139638
+ "type": {
139639
+ "text": "TemplateResult | typeof nothing"
139640
+ }
139641
+ },
139642
+ "description": "The readings as a table, for a screen reader, where they were drawn from\n`data`: there is then no table on the page to read, and a chart's\nsummary gives only what the readings come to. Nothing where a table on\nthe page was read, which is already the readable version.\n\nThe `table` part, named by the chart, its cells as `data` writes them.",
139643
+ "inheritedFrom": {
139644
+ "name": "MixinChartSource",
139645
+ "module": "src/mixins/mixin-chart-source/mixin-chart-source.ts"
139646
+ }
139647
+ },
139714
139648
  {
139715
139649
  "kind": "field",
139716
139650
  "name": "tier",
@@ -140215,6 +140149,28 @@
140215
140149
  }
140216
140150
  }
140217
140151
  ],
140152
+ "cssStates": [
140153
+ {
140154
+ "description": "While a reading is shown, under the pointer or the keys, with its tooltip open.",
140155
+ "name": "active"
140156
+ },
140157
+ {
140158
+ "description": "While the `empty` part stands in the plot.",
140159
+ "name": "empty"
140160
+ },
140161
+ {
140162
+ "description": "While the `loading` part stands in the plot.",
140163
+ "name": "loading"
140164
+ },
140165
+ {
140166
+ "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
140167
+ "name": "settled",
140168
+ "inheritedFrom": {
140169
+ "name": "HelixElement",
140170
+ "module": "src/helix-element/helix-element.ts"
140171
+ }
140172
+ }
140173
+ ],
140218
140174
  "mixins": [
140219
140175
  {
140220
140176
  "name": "MixinChartStatus",
@@ -140258,16 +140214,6 @@
140258
140214
  },
140259
140215
  "tagName": "helix-headless-scatter-chart",
140260
140216
  "customElement": true,
140261
- "cssStates": [
140262
- {
140263
- "description": "Set one frame after the first render. Transitions wait for it, so an element does not animate its own arrival.",
140264
- "name": "settled",
140265
- "inheritedFrom": {
140266
- "name": "HelixElement",
140267
- "module": "src/helix-element/helix-element.ts"
140268
- }
140269
- }
140270
- ],
140271
140217
  "modulePath": "src/scatter-chart/root/scatter-chart-root.ts",
140272
140218
  "definitionPath": "src/scatter-chart/root/scatter-chart-root.ts"
140273
140219
  }
@@ -141681,7 +141627,7 @@
141681
141627
  "declarations": [
141682
141628
  {
141683
141629
  "kind": "class",
141684
- "description": "A trigger that opens a `Listbox`. The list is the same element you can use on\nits own, with the same keyboard behavior, filtering, and multi-select rules.\nSelect adds a trigger that shows what is chosen, a floating surface, and a\nplace for focus to return to when the list closes.\n\nYour options stay in your light DOM and are slotted through into the listbox,\nso the listbox looks through slots to find them. For a list too long to draw\nwhole, set `items` instead: the list draws only the options in sight, as\nListbox's `items` does, and the trigger, its keys and the form read the\nwhole set.\n\n`Select` owns the value, passes it down to the listbox, and takes changes\nback, so the value lives in one place. With `multiple`, the value is the\nchosen values joined with commas, and the form receives one entry for each.\nAn option's value may hold a comma, and it is read as one value.\n\nSet `valueContent` to draw the trigger's content from the chosen options,\nand several chosen options are written as a list in the reader's language.\n\n**Keyboard.** On the closed trigger:\n\n| Key | What it does |\n|---|---|\n| Down, Enter, Space | Opens the list on the chosen option, or the first. |\n| Up | Opens the list on the chosen option, or the last. |\n| Home, End | Opens the list on the first or the last option. |\n| Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does. On a right-to-left page Left chooses the one after. |\n| A letter or a word | Chooses the option whose words start with what you typed, as a native `<select>` does. With `multiple`, opens the list on it. |\n\nIn the open list, which is a `Listbox`:\n\n| Key | What it does |\n|---|---|\n| Down, Up, Home, End, Page Down, Page Up | Moves the highlight. |\n| A letter or a word | Moves the highlight to the next option whose words start with what you typed. |\n| Enter, Space | Chooses the highlighted option and closes the list. With `multiple`, toggles it and leaves the list open. |\n| Escape | Closes the list and puts focus back on the trigger. |\n| Tab | Closes the list and moves on. |\n\nA choice made on the closed trigger is said aloud on Apple devices, where\nVoiceOver does not read the trigger's new name.\n\n**ARIA.** The trigger is a `button` with `aria-haspopup=\"listbox\"` and\n`aria-expanded`, named by the label and then the chosen words, as a native\n`<select>` is. The list is the listbox `Listbox` describes, named by the\nlabel, or by `list-label` where there is none.\n\nSet `autocomplete` to let a browser's autofill choose, as a native `<select>`\nwith the same attribute would.",
141630
+ "description": "A trigger that opens a `Listbox`. The list is the same element you can use on\nits own, with the same keyboard behavior, filtering, and multi-select rules.\nSelect adds a trigger that shows what is chosen, a floating surface, and a\nplace for focus to return to when the list closes.\n\nYour options stay in your light DOM and are slotted through into the listbox,\nso the listbox looks through slots to find them. Write them as `Option`,\ngroup them in `Option.Group`, and divide them with `Option.Separator`.\nImporting Select registers all three in the same tier. For a list too long to draw\nwhole, set `items` instead: the list draws only the options in sight, as\nListbox's `items` does, and the trigger, its keys and the form read the\nwhole set.\n\n`Select` owns the value, passes it down to the listbox, and takes changes\nback, so the value lives in one place. With `multiple`, the value is the\nchosen values joined with commas, and the form receives one entry for each.\nAn option's value may hold a comma, and it is read as one value.\n\nSet `valueContent` to draw the trigger's content from the chosen options,\nand several chosen options are written as a list in the reader's language.\n\n**Keyboard.** On the closed trigger:\n\n| Key | What it does |\n|---|---|\n| Down, Enter, Space | Opens the list on the chosen option, or the first. |\n| Up | Opens the list on the chosen option, or the last. |\n| Home, End | Opens the list on the first or the last option. |\n| Left, Right | Chooses the option before or after the chosen one without opening, as React Aria's Select does. On a right-to-left page Left chooses the one after. |\n| A letter or a word | Chooses the option whose words start with what you typed, as a native `<select>` does. With `multiple`, opens the list on it. |\n\nIn the open list, which is a `Listbox`:\n\n| Key | What it does |\n|---|---|\n| Down, Up, Home, End, Page Down, Page Up | Moves the highlight. |\n| A letter or a word | Moves the highlight to the next option whose words start with what you typed. |\n| Enter, Space | Chooses the highlighted option and closes the list. With `multiple`, toggles it and leaves the list open. |\n| Escape | Closes the list and puts focus back on the trigger. |\n| Tab | Closes the list and moves on. |\n\nA choice made on the closed trigger is said aloud on Apple devices, where\nVoiceOver does not read the trigger's new name.\n\n**ARIA.** The trigger is a `button` with `aria-haspopup=\"listbox\"` and\n`aria-expanded`, named by the label and then the chosen words, as a native\n`<select>` is. The list is the listbox `Listbox` describes, named by the\nlabel, or by `list-label` where there is none.\n\nSet `autocomplete` to let a browser's autofill choose, as a native `<select>`\nwith the same attribute would.",
141685
141631
  "name": "HelixHeadlessSelect",
141686
141632
  "cssProperties": [
141687
141633
  {
@@ -147894,7 +147840,7 @@
147894
147840
  "declarations": [
147895
147841
  {
147896
147842
  "kind": "class",
147897
- "description": "Takes its numbers from the `values` attribute. The other charts read a table,\nbut a table behind a small trend line would be read aloud row by row. Set\n`values` to the data and `label` to the one sentence a screen reader\nannounces.\n\nUse `for` when a sparkline has a real table behind it. `for` wins when both\nare set.\n\nWithout a `label` the sparkline is decorative and `aria-hidden`, for example\nbeside a stat that already says \"Sessions, 1,102\". With a `label` it is\nnamed by that sentence and read by key, as every chart is: the drawing takes\nfocus, the arrow keys walk the readings, Home and End go to the first and\nthe last, Escape puts the reading away, and the `live` part says each\nreading with where it stands, such as \"Mon: 12 (3 of 7)\".\n\n**A named sparkline describes itself.** Beside its name, a screen reader\nhears what the readings come to, the first and the last, the highest and\nthe lowest, in `overview-label`: \"From 12 to 20, highest 30, lowest 8\". An\n`aria-label` on the element names it as `label` does.\n\nA pointer resting on the drawing shows the reading under it: the `cursor`\npart marks it and the `readout` part writes it. `marks` adds a mark on the\nhighest and the lowest reading, and `range` draws a band between two values,\nsuch as a normal range. A blank cell in a `for` table is a gap in the line,\nand a reading alone between two blanks is a `lone` mark.\n\nPlace it beside a `Stat`, because a change beside a figure is a second fact,\nas `Stat`'s own spec says. `Trend` is composed the same way.\n\nThe component writes the properties listed below, and the stylesheet that\ndraws the sparkline reads them. Do not set them yourself. They carry numbers\nthe component computes and CSS cannot, so a stylesheet can draw the sparkline\nwithout measuring anything.",
147843
+ "description": "Takes its numbers from the `values` attribute. The other charts read a table,\nbut a table behind a small trend line would be read aloud row by row. Set\n`values` to the data and `label` to the one sentence a screen reader\nannounces.\n\nUse `for` when a sparkline has a real table behind it. `for` wins when both\nare set.\n\nWithout a `label` the sparkline is decorative and `aria-hidden`, for example\nbeside a stat that already says \"Sessions, 1,102\". With a `label` it is\nnamed by that sentence and read by key, as every chart is: the drawing takes\nfocus, the arrow keys walk the readings, Home and End go to the first and\nthe last, Escape puts the reading away, and the `live` part says each\nreading with where it stands, such as \"Mon: 12 (3 of 7)\".\n\n**A named sparkline describes itself.** Beside its name, a screen reader\nhears what the readings come to, the first and the last, the highest and\nthe lowest, in `overview-label`: \"From 12 to 20, highest 30, lowest 8\". An\n`aria-label` on the element names it as `label` does.\n\n`helix-reading-change` says each move of the reading, by pointer, tap or\nkey, and `helix-reading-press` says a reading was clicked, tapped, or pressed\nwith Enter or Space, as on every chart.\n\nA pointer resting on the drawing shows the reading under it: the `cursor`\npart marks it and the `readout` part writes it. `marks` adds a mark on the\nhighest and the lowest reading, and `range` draws a band between two values,\nsuch as a normal range. A blank cell in a `for` table is a gap in the line,\nand a reading alone between two blanks is a `lone` mark.\n\nPlace it beside a `Stat`, because a change beside a figure is a second fact,\nas `Stat`'s own spec says. `Trend` is composed the same way.\n\nThe component writes the properties listed below, and the stylesheet that\ndraws the sparkline reads them. Do not set them yourself. They carry numbers\nthe component computes and CSS cannot, so a stylesheet can draw the sparkline\nwithout measuring anything.\n\n**Keyboard.** A sparkline with a `label` is one tab stop.\n\n| Key | What it does |\n|---|---|\n| Tab | Moves focus to the drawing and shows the first reading, where there is a `label`. |\n| Any arrow | Right and Down move to the next reading, Left and Up to the previous. On a right-to-left page, Left moves to the next. |\n| Home, End | Moves to the first or the last reading. |\n| Page Down, Page Up | Moves a tenth of the readings on or back. |\n| Enter, Space | Presses the reading shown, which sends `helix-reading-press`. |\n| Escape | Puts the reading and its tooltip away. |",
147898
147844
  "name": "HelixHeadlessSparkline",
147899
147845
  "cssProperties": [
147900
147846
  {
@@ -148092,56 +148038,6 @@
148092
148038
  "readonly": true,
148093
148039
  "default": "new SourceController(this)"
148094
148040
  },
148095
- {
148096
- "kind": "field",
148097
- "name": "pointer",
148098
- "readonly": true,
148099
- "default": "new ChartPointerController(this)",
148100
- "description": "Finds the reading a pointer or a key rests on, as it does for every\nchart, so a sparkline is read the way they are."
148101
- },
148102
- {
148103
- "kind": "field",
148104
- "name": "observedAttributes",
148105
- "type": {
148106
- "text": "string[]"
148107
- },
148108
- "static": true,
148109
- "description": "Hears an `aria-label` written on the sparkline, which no property mirrors,\nbecause it names the drawing as `label` does, as on every chart.",
148110
- "readonly": true
148111
- },
148112
- {
148113
- "kind": "method",
148114
- "name": "attributeChangedCallback",
148115
- "return": {
148116
- "type": {
148117
- "text": "void"
148118
- }
148119
- },
148120
- "parameters": [
148121
- {
148122
- "name": "name",
148123
- "type": {
148124
- "text": "string"
148125
- }
148126
- },
148127
- {
148128
- "name": "old",
148129
- "type": {
148130
- "text": "string | null"
148131
- }
148132
- },
148133
- {
148134
- "name": "value",
148135
- "type": {
148136
- "text": "string | null"
148137
- }
148138
- }
148139
- ],
148140
- "description": "Called by the browser when an observed attribute changes; a new `aria-label` renames the drawing.",
148141
- "type": {
148142
- "text": "attributeChangedCallback(name: string, old: string | null, value: string | null) => void"
148143
- }
148144
- },
148145
148041
  {
148146
148042
  "kind": "field",
148147
148043
  "name": "named",
@@ -148640,6 +148536,24 @@
148640
148536
  }
148641
148537
  }
148642
148538
  ],
148539
+ "events": [
148540
+ {
148541
+ "type": {
148542
+ "text": "HelixReadingChangeEvent"
148543
+ },
148544
+ "description": "The reading shown moved, or was put away: `index` is the reading, or `-1` for none, with its row's `label` from a table and the `pointerType` that moved it.",
148545
+ "name": "helix-reading-change",
148546
+ "reactProp": "onhelix-reading-change"
148547
+ },
148548
+ {
148549
+ "type": {
148550
+ "text": "HelixReadingPressEvent"
148551
+ },
148552
+ "description": "A reading was clicked, tapped, or pressed with Enter or Space, with the same detail as `helix-reading-change`.",
148553
+ "name": "helix-reading-press",
148554
+ "reactProp": "onhelix-reading-press"
148555
+ }
148556
+ ],
148643
148557
  "attributes": [
148644
148558
  {
148645
148559
  "name": "curve",
@@ -164970,7 +164884,7 @@
164970
164884
  "text": "string | readonly string[]"
164971
164885
  },
164972
164886
  "default": "''",
164973
- "description": "The selected tags' values, separated by commas, since a value may hold a\nspace.\n\nSet it to start with tags selected. A tag's value is its `value`, or its\nwords where it has none.",
164887
+ "description": "The selected tags' values, separated by commas with no space, as Toggle\nGroup and Table write theirs, since a value may hold a space. A value\nwritten with a space after each comma is read the same way.\n\nSet it to start with tags selected. A tag's value is its `value`, or its\nwords where it has none.",
164974
164888
  "attribute": "value"
164975
164889
  },
164976
164890
  {
@@ -165151,13 +165065,13 @@
165151
165065
  },
165152
165066
  "parameters": [
165153
165067
  {
165154
- "name": "next",
165068
+ "name": "asked",
165155
165069
  "type": {
165156
165070
  "text": "string"
165157
165071
  }
165158
165072
  }
165159
165073
  ],
165160
- "description": "Asks for `value` to become `next`, where it changes and where it leaves a\ntag selected under `disallow-empty-selection`."
165074
+ "description": "Asks for `value` to become `asked`, where it changes and where it leaves a\ntag selected under `disallow-empty-selection`."
165161
165075
  },
165162
165076
  {
165163
165077
  "kind": "method",
@@ -165694,7 +165608,7 @@
165694
165608
  "text": "string | readonly string[]"
165695
165609
  },
165696
165610
  "default": "''",
165697
- "description": "The selected tags' values, separated by commas, since a value may hold a\nspace.\n\nSet it to start with tags selected. A tag's value is its `value`, or its\nwords where it has none.",
165611
+ "description": "The selected tags' values, separated by commas with no space, as Toggle\nGroup and Table write theirs, since a value may hold a space. A value\nwritten with a space after each comma is read the same way.\n\nSet it to start with tags selected. A tag's value is its `value`, or its\nwords where it has none.",
165698
165612
  "fieldName": "value"
165699
165613
  }
165700
165614
  ],
@@ -186319,7 +186233,7 @@
186319
186233
  "declarations": [
186320
186234
  {
186321
186235
  "kind": "class",
186322
- "description": "`open` comes from `MixinControllerOpen`, the same state a disclosure holds,\nso you can respond to a branch opening and control the state yourself. The\nrow renders `aria-expanded`.\n\nEach item is an element because it holds state: whether it is open, selected,\nand focused.\n\nAn item is a branch when something is slotted into `children`. This is\ndetected on the client, so server-rendered markup shows a leaf and the twisty\nappears on hydration.\n\n**`href` makes the whole row a link**, rendered as an `<a>`. Enter, middle\nclick, and the status bar then work anywhere on the row.\n\nPressing a branch, or Enter or Space on it, opens or closes it. A branch with\na `value` is chosen as well and sends `helix-select`, unless the tree has\n`nesting=\"heading\"`, where a branch names the list under it, or\n`selection-mode=\"leaf\"`, where only the items at the ends are chosen.\n\nA `disabled` item is reached by the arrow keys and announced as unavailable,\nand a press, Enter or Space on it does nothing.\n\nA `lazy` item is a branch whose children you load when it opens: opening it\nsends `helix-load`, the row says it is busy, and the children you add appear\nin it. Remove `lazy` once they are in.\n\n**In a `reorderable` tree, the row has a grip** at its far end, which a\npointer drags to move the item among its siblings. The tree says which item\nis moving and where the drop indicator is, with the `dragging`,\n`drop-before`, and `drop-after` states.",
186236
+ "description": "`open` comes from `MixinControllerOpen`, the same state a disclosure holds,\nso you can respond to a branch opening and control the state yourself. The\nrow renders `aria-expanded`.\n\nEach item is an element because it holds state: whether it is open, selected,\nand focused.\n\nAn item is a branch when an item is slotted into `children`, with\n`slot=\"children\"` on each nested item. This is detected on the client, so\nserver-rendered markup shows a leaf and the twisty appears on hydration.\n\n**`href` makes the whole row a link**, rendered as an `<a>`. Enter, middle\nclick, and the status bar then work anywhere on the row.\n\nPressing a branch, or Enter or Space on it, opens or closes it. A branch with\na `value` is chosen as well and sends `helix-select`, unless the tree has\n`nesting=\"heading\"`, where a branch names the list under it, or\n`selection-mode=\"leaf\"`, where only the items at the ends are chosen.\n\nA `disabled` item is reached by the arrow keys and announced as unavailable,\nand a press, Enter or Space on it does nothing.\n\nA `lazy` item is a branch whose children you load when it opens: opening it\nsends `helix-load`, the row says it is busy, and the children you add appear\nin it. Remove `lazy` once they are in.\n\n**In a `reorderable` tree, the row has a grip** at its far end, which a\npointer drags to move the item among its siblings. The tree says which item\nis moving and where the drop indicator is, with the `dragging`,\n`drop-before`, and `drop-after` states.",
186323
186237
  "name": "HelixHeadlessTreeItem",
186324
186238
  "cssProperties": [
186325
186239
  {
@@ -186371,7 +186285,7 @@
186371
186285
  ],
186372
186286
  "slots": [
186373
186287
  {
186374
- "description": "The item's label.",
186288
+ "description": "The item's label. A nested item does not go here: give it `slot=\"children\"`. In a development build, an item nested here is reported.",
186375
186289
  "name": ""
186376
186290
  },
186377
186291
  {
@@ -198315,6 +198229,6 @@
198315
198229
  ],
198316
198230
  "helix": {
198317
198231
  "package": "@fusion.dev/helix-headless",
198318
- "version": "0.176.0"
198232
+ "version": "0.177.0"
198319
198233
  }
198320
198234
  }