Group a chart's live series exactly as buildChartLayers groups them when
it builds the layers.
The one place in the adapter that deliberately duplicates a decision: the
layer a reader hears and the mark the overlay outlines have to be the same
series, so this asks the same two questions of the same chart —
planDeclarations first, since a declared series is never also
classified and an absorbed one is never a layer of its own, then
classifySeriesKind. A kind added to one side and forgotten on the other is
the failure this shape exists to make visible: audio and text keep working
while the highlight silently vanishes.
It lives here rather than beside the binder that calls it because
SeriesGroups is defined here and the resolvers that consume it are
here — and because the binder's own module cannot be loaded without React,
which left this untested for as long as it sat there.
Group a chart's live series exactly as
buildChartLayersgroups them when it builds the layers.The one place in the adapter that deliberately duplicates a decision: the layer a reader hears and the mark the overlay outlines have to be the same series, so this asks the same two questions of the same chart — planDeclarations first, since a declared series is never also classified and an absorbed one is never a layer of its own, then
classifySeriesKind. A kind added to one side and forgotten on the other is the failure this shape exists to make visible: audio and text keep working while the highlight silently vanishes.It lives here rather than beside the binder that calls it because SeriesGroups is defined here and the resolvers that consume it are here — and because the binder's own module cannot be loaded without React, which left this untested for as long as it sat there.