Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
93cbbe7
Tooltip changes in preparation for ChartGroup(State) support
techniq Aug 12, 2026
bae11cc
Add chart group and pointer synchronization
techniq Aug 13, 2026
b4e5360
Add chart group and pointer synchronization
techniq Aug 13, 2026
daaba1b
Add brush and domain synchronization to ChartGroup
techniq Aug 14, 2026
9e108de
Release group state when chart unmounts
techniq Aug 14, 2026
7e85f34
Sync series highlight and visibility across ChartGroup
techniq Aug 14, 2026
01af721
Add z grouping to Area and Spline for multi-series support
techniq Aug 14, 2026
5fb7693
Add changesets for ChartGroup sync and mark enhancements
techniq Aug 14, 2026
fa6b4df
Simplify parallel-coordinates example with pivotLonger
techniq Aug 15, 2026
109d9ed
Add Chart faceting with `fx` / `fy` small multiples
techniq Aug 15, 2026
71a8ad0
Add faceted parallel coordinates example for Spline
techniq Aug 15, 2026
d837ca8
Make tooltips, highlights, and brushing facet-aware
techniq Aug 16, 2026
aa36417
Lazy-load Axis in Facet to reduce bundle size
techniq Aug 16, 2026
dc1ff70
Add facetAll for per-panel highlights and tooltips
techniq Aug 16, 2026
9fcc4f8
Reorganize facet docs and improve per-panel voronoi resolution
techniq Aug 16, 2026
ba59b75
Pre-bundle d3 geo and quadtree dependencies for lazy imports
techniq Aug 17, 2026
f559a08
Extract facet axes into FacetAxis component
techniq Aug 17, 2026
1ae41d5
Update bundle baseline workflow to trigger on main
techniq Aug 17, 2026
ce81c2a
Add svelte/events and svelte/reactivity to bundle refs
techniq Aug 17, 2026
f1fe4a7
Add Brush component and brushable attachment for independent selections
techniq Aug 17, 2026
a959337
Refactor changesets for Brush and transform features
techniq Aug 17, 2026
31231b4
Add double-click clear to Brush and fix click-without-drag clearing
techniq Aug 17, 2026
5f7288e
cleanup
techniq Aug 17, 2026
2151655
Fix PieChart to not draw cartesian grid behind arcs
techniq Aug 17, 2026
66e6677
fix source links (docs-v2 => main)
techniq Aug 17, 2026
f57f145
Report brush clear on click through onChange
techniq Aug 17, 2026
a2f0e13
generate catalog / screenshots
techniq Aug 17, 2026
c6353c9
docs(BarChart/waterfall): improve value label position
techniq Aug 17, 2026
4505982
fix edit this page links
techniq Aug 17, 2026
6d6b640
Fix panel headers on multi-dimensional grids
techniq Aug 18, 2026
54a9510
Fix tooltip handling for data-driven sub-bands
techniq Aug 18, 2026
fe56b72
Add parallel coordinates example with mixed dimension types
techniq Aug 18, 2026
b2fede2
Detect and return CSS colors directly in resolveColorProp
techniq Aug 18, 2026
44401c8
docs(PieChart): Add programmatic control example
techniq Aug 18, 2026
089b80c
Add bar style accessors, coordinated transforms, and facet grouping
techniq Aug 18, 2026
c6d735b
improve BarChart docs
techniq Aug 18, 2026
0fb8ec3
Fix dev workflow: resolve d3 dependencies through layerchart
techniq Aug 18, 2026
8f044ef
reduce size of point
techniq Aug 18, 2026
a2ac693
Add legend interaction for `c` categories
techniq Aug 18, 2026
1cd2a55
Add long data stacking and auto seriesLayout
techniq Aug 19, 2026
e1fbef8
Infer stacking from category channel, support mixed marks
techniq Aug 20, 2026
e44689a
Disable pointer events in tooltip harness and add parked cursor test
techniq Aug 20, 2026
9fa2c59
Clarify stacking semantics and series grouping
techniq Aug 20, 2026
52dad68
Add visual regression testing for docs examples
techniq Aug 20, 2026
81c8332
Filter invisible elements from visual snapshot fingerprints
techniq Aug 20, 2026
594a2ad
Support legend interaction for stroke-grouped spline lines
techniq Aug 20, 2026
337dd15
fix text flakiness
techniq Aug 20, 2026
dac091c
Add faceted brush selections with cross-chart support
techniq Aug 20, 2026
ede348a
add initial brush selection to ChartGroup/synced-brushes
techniq Aug 20, 2026
b5d6c10
update catalog and screenshots
techniq Aug 20, 2026
e0ba2a1
improve changesets
techniq Aug 20, 2026
059aee3
improve remaining changesets
techniq Aug 20, 2026
0a87ff0
Point all category lines in `c`-grouped long data
techniq Aug 20, 2026
5b489bd
import guides/data
techniq Aug 20, 2026
433ea98
update catalog and screenshots
techniq Aug 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
The diff you're trying to view is too large. We only load the first 3000 changed files.
5 changes: 5 additions & 0 deletions .changeset/annotation-stacked-point.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(AnnotationPoint|AnnotationLine|AnnotationRange): Support `seriesKey` prop to associate an annotation with a series, positioning points and lines on its stacked segment
5 changes: 5 additions & 0 deletions .changeset/bar-style-accessors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Bar|Bars): Accept a per-row accessor for `fillOpacity`, `strokeWidth`, and `opacity`, matching `Rect` and `Circle`
5 changes: 5 additions & 0 deletions .changeset/brush-component.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat: New Brush component to manually position, useful for multiple / independent brushes (ex. parallel coordinates). Also includes new `brushable` attachment and `brushGesture` handler for even more granular control of `BrushState`
5 changes: 5 additions & 0 deletions .changeset/brush-context-dblclick-clear.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(BrushContext): Fix clearing on double-clicking the selection (root select-all was immediately undoing)
5 changes: 5 additions & 0 deletions .changeset/chart-group.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(ChartGroup): Add `<ChartGroup>` and `ChartGroupState` to synchronize the tooltip/highlight, brush selection, zoom domain, and series highlight/visibility across charts
5 changes: 5 additions & 0 deletions .changeset/chart-id.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Chart): Add `id` prop, applied to the root element and identifying the chart within a `ChartGroup`
5 changes: 5 additions & 0 deletions .changeset/cscale-series-colors.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Chart): Default the color scale to the colors declared on `series`, so marks match their legend swatch
5 changes: 5 additions & 0 deletions .changeset/facets.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Chart): Add `fx` / `fy` faceting, drawing the chart once per distinct value into a grid of panels that share the position scales
5 changes: 5 additions & 0 deletions .changeset/legend-c-scale.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Legend): Support ordinal `c` scale similar to `series` including highlight and filter capability. An ordinal scale now draws labelled swatches rather than a color ramp — pass `variant="ramp"` for the old appearance
5 changes: 5 additions & 0 deletions .changeset/pie-chart-grid.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(PieChart): Stop drawing a cartesian grid behind the arcs when using `series`
5 changes: 5 additions & 0 deletions .changeset/rect-ref-pointerdown.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Rect): Support `ref` in html layers and forward `pointerdown` in canvas layers
5 changes: 5 additions & 0 deletions .changeset/series-layout-auto.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Chart): Add `seriesLayout="auto"` (default) with automatic stacking when applicable (ex. Area, Bars). Can still pass explicit `seriesLayout` (ex. `overlap`, `group`, `stack`) when needed
5 changes: 5 additions & 0 deletions .changeset/spline-area-class-prop.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Spline|Area): Resolve `stroke`, `fill`, `opacity`, and `class` per line/area (and segment). A string naming a data property now resolves through the chart's color scale, like other primitives (ex. `Circle`)
5 changes: 5 additions & 0 deletions .changeset/spline-area-z.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Spline|Area): Add `z` accessor to draw one line/area per distinct value, defaulting to `stroke` / `fill` / `c`
5 changes: 5 additions & 0 deletions .changeset/spline-stack.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Spline): Support `seriesKey` prop to follow that series' stacked top
5 changes: 5 additions & 0 deletions .changeset/stack-groups.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(Chart): Stack each `x1` sub-band separately, so grouped-and-stacked bars no longer share one running total
5 changes: 5 additions & 0 deletions .changeset/tooltip-show-value.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Tooltip): Add `tooltip.show({ point, value, data })` to control tooltip programmatically (buttons, keyboard events, etc.)
5 changes: 5 additions & 0 deletions .changeset/transform-initial-domain.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Chart): Add `transform.initialDomain` to open a chart zoomed to a range
5 changes: 5 additions & 0 deletions .changeset/zoom-to-brush.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(Chart): Apply `zoomToBrush()` when called before the chart mounts or when the scale clamps to `scaleExtent`
2 changes: 1 addition & 1 deletion .github/workflows/update-bundle-baseline.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Update Bundle Baseline
on:
push:
branches:
- next
- main
paths:
- packages/layerchart/**
- bundle-analyzer/**
Expand Down
80 changes: 80 additions & 0 deletions .github/workflows/update-visual-baseline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
name: Update Visual Baseline

# Fingerprints depend on the rendering environment, so the baseline PRs compare against has to be
# recorded on a runner rather than a contributor's machine. Runs on demand, and after any push to
# main that could change what the examples draw.
on:
workflow_dispatch:
push:
branches:
- main
paths:
- packages/layerchart/**
- docs/src/examples/**
- docs/scripts/visual-snapshot.mjs

concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
update-baseline:
name: Update Visual Baseline
runs-on: ubuntu-latest

permissions:
contents: write
pull-requests: write

steps:
- uses: actions/checkout@v4
with:
token: ${{ secrets.GITHUB_TOKEN }}
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Install Chromium
run: pnpm --filter docs exec playwright install --with-deps chromium

- name: Build packages
run: pnpm build:packages

- name: Start the docs server
run: |
pnpm --filter docs exec vite dev --port 3002 > /tmp/server.log 2>&1 &
for i in $(seq 1 60); do
curl -sf -o /dev/null http://localhost:3002/ && exit 0
sleep 2
done
echo "docs server did not start"; cat /tmp/server.log; exit 1

# Two passes so examples that are still nondeterministic are recorded as such and skipped
# by later comparisons rather than reported as regressions
- name: Capture baseline
working-directory: docs
run: node scripts/visual-snapshot.mjs capture snapshots/baseline.json --repeat 2

- name: Create or update visual baseline PR
uses: peter-evans/create-pull-request@v7
with:
token: ${{ secrets.GITHUB_TOKEN }}
branch: chore/update-visual-baseline
title: 'chore: update visual regression baseline'
body: |
## Visual Baseline Update

Re-recorded `docs/snapshots/baseline.json` from `main` on a runner, so PR comparisons
have something to diff against in the same rendering environment.

### How to review

The diff lists one line per example. Lines that changed mean the example draws
something different than the last baseline — check those were intended.
commit-message: 'chore: update visual regression baseline'
add-paths: docs/snapshots/baseline.json
113 changes: 113 additions & 0 deletions .github/workflows/visual-regression.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
name: Visual Regression

on:
pull_request:
paths:
- packages/layerchart/**
- docs/src/examples/**
- docs/scripts/visual-snapshot.mjs
types: [opened, synchronize, reopened]

concurrency:
group: ${{ github.workflow }}-${{ github.event.number }}
cancel-in-progress: true

jobs:
visual-regression:
name: Example Rendering
runs-on: ubuntu-latest

permissions:
contents: read

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v4
with:
node-version: 24
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Install Chromium
run: pnpm --filter docs exec playwright install --with-deps chromium

- name: Build packages
run: pnpm build:packages

# Fingerprints depend on the rendering environment, so the baseline has to have been
# recorded on a runner too — see update-visual-baseline.yml
- name: Read the baseline from the target branch
id: baseline
run: |
mkdir -p /tmp/visual
if git show origin/${{ github.base_ref }}:docs/snapshots/baseline.json > /tmp/visual/baseline.json 2>/dev/null; then
echo "found=true" >> "$GITHUB_OUTPUT"
else
echo "found=false" >> "$GITHUB_OUTPUT"
echo "No baseline on ${{ github.base_ref }} — run the Update Visual Baseline workflow." >> "$GITHUB_STEP_SUMMARY"
fi

- name: Start the docs server
if: steps.baseline.outputs.found == 'true'
run: |
pnpm --filter docs exec vite dev --port 3002 > /tmp/visual/server.log 2>&1 &
for i in $(seq 1 60); do
curl -sf -o /dev/null http://localhost:3002/ && exit 0
sleep 2
done
echo "docs server did not start"; cat /tmp/visual/server.log; exit 1

- name: Capture this branch
if: steps.baseline.outputs.found == 'true'
working-directory: docs
run: node scripts/visual-snapshot.mjs capture /tmp/visual/current.json --repeat 1

# No before/after images: rendering the base revision would mean building it too. The
# example names plus the element counts are enough to know what to open locally.
- name: Compare
if: steps.baseline.outputs.found == 'true'
id: compare
working-directory: docs
run: |
set +e
node scripts/visual-snapshot.mjs compare /tmp/visual/baseline.json /tmp/visual/current.json | tee /tmp/visual/report.txt
echo "exit=$?" >> "$GITHUB_OUTPUT"
set -e

- name: Summarize
if: steps.baseline.outputs.found == 'true'
run: |
{
echo "## Visual regression"
echo
echo "Examples whose rendered geometry differs from \`${{ github.base_ref }}\`."
echo "Open any of them locally with \`pnpm dev\` and compare, or run:"
echo
echo '```sh'
echo 'pnpm --filter docs exec node scripts/visual-snapshot.mjs diff <Component/example> --head http://localhost:3002'
echo '```'
echo
echo '```'
cat /tmp/visual/report.txt
echo '```'
} >> "$GITHUB_STEP_SUMMARY"

- name: Upload snapshots
if: always() && steps.baseline.outputs.found == 'true'
uses: actions/upload-artifact@v4
with:
name: visual-snapshots
path: /tmp/visual/*.json
retention-days: 7

- name: Fail if anything changed
if: steps.baseline.outputs.found == 'true' && steps.compare.outputs.exit != '0'
run: |
echo "Rendered output changed — review the job summary."
echo "If the changes are intended, run the Update Visual Baseline workflow after merging."
exit 1
2 changes: 2 additions & 0 deletions bundle-analyzer/bundle-analyzer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -302,6 +302,8 @@ const refs = [
"svelte/motion",
"svelte/transition",
"svelte/compiler",
"svelte/events",
"svelte/reactivity",
],
output: {
minifyInternalExports: true,
Expand Down
Loading
Loading