From 8b0ac9c6b191e80679759977800d14780d8450de Mon Sep 17 00:00:00 2001 From: sarathkumarsasi Date: Fri, 7 Aug 2026 17:37:34 +0530 Subject: [PATCH 1/2] Clip fill to index scale bounds The fill area is now clipped to match the line stroke's visible bounds ensuring proper rendering when `offset: true` is used --- src/plugins/plugin.filler/filler.drawing.js | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/plugins/plugin.filler/filler.drawing.js b/src/plugins/plugin.filler/filler.drawing.js index 0a718355da8..e3f7cbb3cf7 100644 --- a/src/plugins/plugin.filler/filler.drawing.js +++ b/src/plugins/plugin.filler/filler.drawing.js @@ -12,12 +12,31 @@ export function _drawfill(ctx, source, area) { const meta = chart.getDatasetMeta(index); const clip = getDatasetClipArea(chart, meta); if (target && line.points.length) { - clipArea(ctx, area); + clipArea(ctx, clipToIndexBounds(area, meta.iScale)); doFill(ctx, {line, target, above, below, area, scale, axis, clip}); unclipArea(ctx); } } +// The line's stroke is limited to the index scale's min/max pixel bounds +// (see LineController#update -> _getStartAndCountOfVisiblePoints). Clip the +// fill to the same bounds so it doesn't extend past the stroke when +// `offset: true` insets tick pixels from the chart area edges. +function clipToIndexBounds(area, iScale) { + // Radial scales (e.g. radar charts) aren't cartesian: min/max pixels + // don't correspond to a left/right or top/bottom bound. + if (!iScale || iScale.getPointPositionForValue) { + return area; + } + const p1 = iScale.getPixelForValue(iScale.min); + const p2 = iScale.getPixelForValue(iScale.max); + const lo = Math.min(p1, p2); + const hi = Math.max(p1, p2); + return iScale.isHorizontal() + ? {...area, left: Math.max(area.left, lo), right: Math.min(area.right, hi)} + : {...area, top: Math.max(area.top, lo), bottom: Math.min(area.bottom, hi)}; +} + function doFill(ctx, cfg) { const {line, target, above, below, area, scale, clip} = cfg; const property = line._loop ? 'angle' : cfg.axis; From 98057f03683a401d635f3c90268700733ccc9e15 Mon Sep 17 00:00:00 2001 From: sarathkumarsasi Date: Fri, 7 Aug 2026 19:33:40 +0530 Subject: [PATCH 2/2] Add test fixture for line chart with offset scale minmax --- .../plugin.filler/line/offset-scale-minmax.js | 38 ++++++++++++++++++ .../line/offset-scale-minmax.png | Bin 0 -> 13398 bytes 2 files changed, 38 insertions(+) create mode 100644 test/fixtures/plugin.filler/line/offset-scale-minmax.js create mode 100644 test/fixtures/plugin.filler/line/offset-scale-minmax.png diff --git a/test/fixtures/plugin.filler/line/offset-scale-minmax.js b/test/fixtures/plugin.filler/line/offset-scale-minmax.js new file mode 100644 index 00000000000..9dce8836791 --- /dev/null +++ b/test/fixtures/plugin.filler/line/offset-scale-minmax.js @@ -0,0 +1,38 @@ +module.exports = { + description: 'https://github.com/chartjs/Chart.js/issues/12280', + config: { + type: 'line', + data: { + labels: ['a', 'b', 'c', 'd', 'e', 'f'], + datasets: [{ + data: [10, 25, 15, 40, 30, 45], + fill: true, + backgroundColor: 'red', + borderColor: 'blue' + }] + }, + options: { + plugins: { + legend: false, + title: false, + tooltip: false + }, + elements: { + point: { + radius: 0 + } + }, + scales: { + x: { + display: false, + offset: true, + min: 'a', + max: 'd' + }, + y: { + display: false + } + } + } + }, +}; diff --git a/test/fixtures/plugin.filler/line/offset-scale-minmax.png b/test/fixtures/plugin.filler/line/offset-scale-minmax.png new file mode 100644 index 0000000000000000000000000000000000000000..e037c4c44cbf663efbc8280cc39f8cc2161ddd67 GIT binary patch literal 13398 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 DoMlnY literal 0 HcmV?d00001