string[] for the same reason number[] is here: one navigation step can
cover several points. A categorical scatter reaches it — in ROW mode the
cross value is every x sharing that y, and on a strip plot those x are
category names (ScatterPoint.xLabel). TextService already
formats arrays as (number | string)[] and joins them, so this widens
the type to what the service has always accepted rather than adding a
shape it has to learn.
OptionalcrossOptional, because a chart can have no cross axis to speak of.
A pure hierarchy is the case that exists: TreemapTrace reads a tree
whose nodes declare no magnitude at all -- an org chart -- and every
value it could put here would be one the chart does not draw (#1153).
TextService already tested for the clause before reading it in the
terse and layer-switch paths; the verbose and grid paths now do too, and
omit both the label and the value rather than announcing a bare label.
Absent is not the same as empty. A trace that has a cross axis and no reading at this point sends the axis with a non-finite value, which is announced as "missing" (#925). Omitting the clause says the axis is not there at all.
OptionalzThird-dimension value for heatmaps, segmented bars, pie slices and 3D
scatter. number[] when one navigation step covers several points that
each carry their own z (a 3D scatter column or row); TextService
formats each entry and joins them, exactly as it already does for an
array main/cross.
OptionalstackThe running total a stacked point sits inside, alongside the point's own
value in cross.
A stacked area draws two magnitudes at once: a band's height is its
series' value, and the band's top edge is the total of every series below
it. cross carries the first; without somewhere to put the second, the
announcement names a number the chart shows twice over and leaves the
reader unable to tell which one they heard. share is that value as a
fraction of the total, which is what a stacked chart is read for and what
a listener cannot divide out in their head mid-navigation.
A waterfall step carries it for the same reason under a different name:
the bar's height is that step's contribution and its position is the
running total the step produced, so cross announces the one and this
announces the other. label is what distinguishes them to the reader,
which is why it travels with the value rather than being assumed.
Absent on traces that draw a single magnitude, so nothing else changes shape.
OptionalintervalThe uncertainty around the value in cross, announced as a clause after
it rather than in place of it.
Deliberately not TextState.range, which is a main-axis extent that replaces the main value — right for a histogram bin ("x is 3 through 5") and wrong here, where the value is a real reading and the interval is a second fact about it. A band on a fitted curve has to be heard alongside "y is 3.2", not instead of it.
Either bound may be absent: a one-sided interval is a real chart.
OptionalrangeOptionalasidesFacts the point carries that sit on neither axis, announced as their own clauses after everything that does.
A mosaic is the case this exists for. Its column width is a share of the
whole chart and its cell count is a tally, and neither is a value on the
main or cross axis -- so neither can travel in a field the text service
formats with an axis formatter, or a percent format declared for the
cross axis would announce a count of 203 as "20300.0%".
section cannot carry them either. That field is a short qualifier which
gets fused onto the cross-axis label whenever z is present -- and a
segmented trace always sets z -- so a share put there read
"15.0% of all Proportion is 0.62", saying the proportion was the share.
The values arrive already formatted, because only the trace knows what they are: a share is a percentage and a tally is an integer, and there is no axis to ask.
OptionalsectionOptionalmainOriginal axis identity for main value. For vertical plots: 'x', for horizontal plots: 'y'. Used to apply correct formatter regardless of orientation.
OptionalcrossOriginal axis identity for cross value. For vertical plots: 'y', for horizontal plots: 'x'. Used to apply correct formatter regardless of orientation.
OptionalcrossRange for the cross axis, used in grid navigation to show both axis ranges.
OptionalgridPoints in the current grid cell, listed as coordinate pairs.
OptionalgridCurrent grid cell position (1-indexed for display).
Text description state containing labels and values for screen reader output.