How a gap-aware draw layer (LineChart / AreaChart) renders a
gap — a run of non-finite (NaN) samples, the signal a coast / dropout /
missing bucket leaves in the columnar data (Number.isFinite, never
!= null; see docs/rfcs/charts.md trap #2). One concept shared across a
line and its area fill, so both speak the same vocabulary.
Bands deliberately have no gap mode. A filled envelope's break wants its
own treatment (sharp edge vs. blurred), still to be designed; for now a band
always breaks honestly at a gap.
none — bridge straight across the gap: an interior gap is linearly
interpolated (bridgeGaps) so the line connects the bordering points
and the fill / band spans the gap, as if the data were continuous. A leading
/ trailing gap (no finite sample on one side) stays a break — there's nothing
to bridge from. This is the only mode that is not gap-honest — use it when
the gap is an artefact to ignore (evenly-sampled data with the odd dropped
read), not a real absence.
empty(default) — break: end the subpath at the gap, start a fresh
one after it (d3-shape's .defined). Today's behavior; the fill / band
leaves a hole. The honest default — a gap reads as a gap.
dashed — the solid segments break as in empty, plus a dashed
line bridges each gap straight (last-good point → next-good point). The
fill stays broken. Reads as "we know the value resumed here, but didn't
measure between" without pretending the line was continuous.
step — the solid segments break as in empty, plus a single
flat dashed line at the average of the two edge values bridges each gap
(a horizontal - - -, no vertical step — see drawGapSteps). The
fill stays broken. A neutral "the value sat around here" estimate — flatter
and less committal than dashed's straight interpolation between the edges.
fade — estela's coast look: at each gap edge the line drops to the
baseline on a vertical fade to transparent (opaque at the line,
transparent at the baseline), and fades back in on the far side. The fill
stays broken. Replicates estela's es-drop gradient
(packages/ui/src/DataChart.tsx) in the canvas renderer.
dashed and step are the inferred dashed connectors — both drawn fainter
than the solid line (theme gap.connectorOpacity, DEFAULT_GAP_CONNECTOR_OPACITY)
so an inferred bridge reads as secondary to measured data. Only fade drops to
a "baseline": for a line the axis floor (the y-scale's domain lower bound,
resolved at draw time), for an AreaChart its own fill baseline.
How a gap-aware draw layer (LineChart / AreaChart) renders a gap — a run of non-finite (
NaN) samples, the signal a coast / dropout / missing bucket leaves in the columnar data (Number.isFinite, never!= null; seedocs/rfcs/charts.mdtrap #2). One concept shared across a line and its area fill, so both speak the same vocabulary.Bands deliberately have no gap mode. A filled envelope's break wants its own treatment (sharp edge vs. blurred), still to be designed; for now a band always breaks honestly at a gap.
none— bridge straight across the gap: an interior gap is linearly interpolated (bridgeGaps) so the line connects the bordering points and the fill / band spans the gap, as if the data were continuous. A leading / trailing gap (no finite sample on one side) stays a break — there's nothing to bridge from. This is the only mode that is not gap-honest — use it when the gap is an artefact to ignore (evenly-sampled data with the odd dropped read), not a real absence.empty(default) — break: end the subpath at the gap, start a fresh one after it (d3-shape's.defined). Today's behavior; the fill / band leaves a hole. The honest default — a gap reads as a gap.dashed— the solid segments break as inempty, plus a dashed line bridges each gap straight (last-good point → next-good point). The fill stays broken. Reads as "we know the value resumed here, but didn't measure between" without pretending the line was continuous.step— the solid segments break as inempty, plus a single flat dashed line at the average of the two edge values bridges each gap (a horizontal- - -, no vertical step — see drawGapSteps). The fill stays broken. A neutral "the value sat around here" estimate — flatter and less committal thandashed's straight interpolation between the edges.fade— estela's coast look: at each gap edge the line drops to the baseline on a vertical fade to transparent (opaque at the line, transparent at the baseline), and fades back in on the far side. The fill stays broken. Replicates estela'ses-dropgradient (packages/ui/src/DataChart.tsx) in the canvas renderer.dashedandstepare the inferred dashed connectors — both drawn fainter than the solid line (themegap.connectorOpacity, DEFAULT_GAP_CONNECTOR_OPACITY) so an inferred bridge reads as secondary to measured data. Onlyfadedrops to a "baseline": for a line the axis floor (the y-scale's domain lower bound, resolved at draw time), for an AreaChart its own fill baseline.