[Bug] Regression in 6.x: dataZoom slider showDataShadow renders nothing when the shadow-source series has a single data point on a time axis (NaN from zero-width extent)
- Dominant language
- TypeScript
- Stars
- 67.3k
- Forks
- 19.8k
- Avg merge
- 11d 14h
- Merged PRs (30d)
- 8
Description
### Version
Affected: 6.0.0 and 6.1.0 (latest). Regression — works in 5.x (tested 5.3.2 and 5.6.0). Introduced in 6.0.0 (the time-axis dataShadow positioning; first present in 6.0.0-beta.1).
### Link to Minimal Reproduction
[Here is the example](https://codepen.io/editor/CounterReset/pen/019ecd8b-19da-7e8c-9287-df1ee1aa1e75)
### Steps to Reproduce
1. xAxis: { type: 'time' }, dataZoom: [{ type: 'slider', showDataShadow: true }].
2. Give the shadow-source series a SINGLE data point.
3. The slider shadow is empty/missing.
Minimal option (the slider shadow vanishes on 6.x; renders on 5.x):
option = {
xAxis: { type: 'time' },
yAxis: { type: 'value' },
dataZoom: [{ type: 'slider', showDataShadow: true }],
series: [{ type: 'line', data: [['2025-07-01', 285]] }]
};
Real-world variant: with multiple series, the *first eligible* series is
chosen as the shadow source, so a single-point first series breaks the
shadow even when later series are dense.
### Current Behavior
In `SliderZoomView._renderDataShadow` (6.x), the time-axis branch computes:
normalizationConstant = size[0] / (thisDataExtent[1] - thisDataExtent[0]);
thisCoord = isTimeAxis ? (value - thisDataExtent[0]) * normalizationConstant : thisCoord + step;
For a single-point series the x-extent has zero width, so
normalizationConstant = Infinity and thisCoord = 0 * Infinity = NaN. The
shadow polygon receives a NaN vertex and does not render.
Measured shadow polygon on 6.1.0: points [[size,0],[0,0],[NaN,15]] (hasNaN=true).
On 5.3.2/5.6.0 the same option yields finite, step-based points (hasNaN=false).
Note the adjacent step path WAS guarded against divide-by-zero
(`Math.max(1, data.count() - 1)`); the new time-axis division was not.
### Expected Behavior
A single-point (zero-width-extent) shadow source should render the same way
it did in 5.x (no NaN), or fall back gracefully — not erase the shadow.
Fix: guard the time-axis normalization when (thisDataExtent[1] -
thisDataExtent[0]) === 0 (e.g. fall back to the step-based coordinate or
clamp to 0), mirroring the existing Math.max guard on `step`.
Happy to PR this.
### Environment
```markdown
- OS: macOS 15
- Browser: Chrome 126
- Framework: Angular
```
### Any additional comments?
This is distinct from the `timeline` component — the issue is specifically
in the `dataZoom-slider` shadow source-series selection.
The slider's data shadow is empty on 6.x. Switch the CDN to echarts/5.6.0 and the shadow appears — same option.
Contributor guide
Assessment
This issue has not been assessed yet.