Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
1055 commits
Select commit Hold shift + click to select a range
07cee8a
fix(Highlight): Support stacked series. Remove custom highlight snip…
techniq Jan 20, 2026
bd2a7c4
Fix tip
techniq Jan 20, 2026
8bb67aa
refactor(Area): Use Path component for rendering
techniq Jan 20, 2026
b8b870a
Add series highlight/opacity to Area, simplify AreaChart
techniq Jan 20, 2026
0a3c484
fix svelte-check
techniq Jan 20, 2026
0565e2d
refactor(Area): Remove unused `clipPath` prop
techniq Jan 20, 2026
dbc3db0
fix(Highlight): Browser loop due to undefined value producing `NaN` c…
techniq Jan 20, 2026
9b3e13a
Move `resolveAccessor` out of AreaChart/BarChart and into series.svel…
techniq Jan 21, 2026
85ad1fd
Improve example screenshot density on homepage
techniq Jan 21, 2026
a46bef8
Merge branch 'docs-v2' into state-refactor
techniq Jan 21, 2026
4b53b19
Update deps
techniq Jan 23, 2026
098848c
Update svelte to 5.48.1, fixing performance issues of Spike map (and …
techniq Jan 24, 2026
b6b90e3
Update svelte to 5.48.2 (fix `TypeError: $.wait is not a function`)
techniq Jan 24, 2026
00a65e4
Update data doc
techniq Jan 25, 2026
50078a4
Update examples
techniq Jan 25, 2026
3121573
Move series accessor logic into ChartState (WIP)
techniq Jan 25, 2026
6ef45d3
Merge branch 'docs-v2' into state-refactor
techniq Jan 25, 2026
7ed2820
fix(Text): Support explicit "\n" and set line-height (to match svg/ca…
techniq Jan 25, 2026
1affd58
Text playground fix (#768)
cycle4passion Jan 25, 2026
40b6f03
Rename word wrap with explicit n (#769)
cycle4passion Jan 25, 2026
3e289e5
Add `Path` to top-level exports and add basic example
techniq Jan 25, 2026
ad9c07d
Text trunc newline examples (#771)
cycle4passion Jan 26, 2026
bb3af0e
Utils updates (#770)
cycle4passion Jan 26, 2026
df51df5
cleanup
techniq Jan 26, 2026
ffa4697
Further arc tests (#767)
cycle4passion Jan 26, 2026
2fe4011
Geopoint icons remove controls (#772)
cycle4passion Jan 26, 2026
b5f2f57
Additional axis examples (#764)
cycle4passion Jan 26, 2026
a2bdb27
feat(Chart|Svg): Support passing `clip` prop to hide overflown content
techniq Jan 26, 2026
e97bce6
also add for `<Html>` layers
techniq Jan 26, 2026
3f447d9
Clipping (#774)
cycle4passion Jan 27, 2026
054236f
Text trunc wrap fix (#775)
cycle4passion Jan 27, 2026
660e617
Update deps (namely Svelte to 5.48.2 with dev-mode performance improv…
techniq Jan 27, 2026
2a9a90e
Add clip to collision detection example
techniq Jan 27, 2026
87c8794
cleanup import
techniq Jan 31, 2026
51f74e9
Stats (#776)
cycle4passion Jan 31, 2026
c0158fc
Missing clips (#778)
cycle4passion Jan 31, 2026
b07e94d
Merge branch 'next' into docs-v2
techniq Jan 31, 2026
d345fa4
Merge branch 'docs-v2' into state-refactor
techniq Jan 31, 2026
49bae56
Merge branch 'next' into docs-v2
techniq Jan 31, 2026
c1a9c15
Merge branch 'docs-v2' into state-refactor
techniq Jan 31, 2026
3144f72
add `User-Agent` header to make Github happy when running in Cloudfla…
techniq Jan 31, 2026
583745e
Open in LLM feature (#753)
cycle4passion Feb 1, 2026
0857262
Update deps
techniq Feb 1, 2026
bd6eb0e
fix dagre `module is not defined` after bumping deps (but not dagre t…
techniq Feb 1, 2026
965746a
Tree clips (#779)
cycle4passion Feb 1, 2026
7eb398a
fix build
techniq Feb 1, 2026
0875e23
Merge branch 'docs-v2' of https://github.com/techniq/layerchart into …
techniq Feb 1, 2026
6b17688
extract table of contents from markdown instead of html
techniq Feb 1, 2026
7f6c5bc
add toc to guides
techniq Feb 1, 2026
ff89b56
improve header and toc slugs when `:icon{..}` directives are used
techniq Feb 1, 2026
aa97d7c
remove `meta.tableOfContents` and just use `metadata.toc` to determi…
techniq Feb 1, 2026
781b0f2
Use IntersectionObserver for improve active highlighting
techniq Feb 1, 2026
5ae1a77
Update deps
techniq Feb 7, 2026
b6c9db5
Clip force text example
techniq Feb 7, 2026
f4dae49
flexsearch (#745)
cycle4passion Feb 8, 2026
d53f49c
Cleanup headers (especially remove duplicate "## Examples" headers ca…
techniq Feb 8, 2026
cebc5f8
add playwright-cli skills
techniq Feb 8, 2026
f477d3d
fix parent component's table of contents showing on examples
techniq Feb 8, 2026
c34e24a
generate:all (catalog, screenshots)
techniq Feb 8, 2026
263ab5e
remove "actions" export
techniq Feb 9, 2026
4c0a314
Add LineChart threshold example
techniq Feb 9, 2026
dc9dd94
fix threshold with linear gradient examples
techniq Feb 9, 2026
5af2200
add links
techniq Feb 9, 2026
2e53837
Do not highlight/mark examples in search
techniq Feb 9, 2026
0e8e0cb
Ignore anchor tags / hash fragment (ex. `#examples`) in llms.txt URLs
techniq Feb 9, 2026
5daee29
fix(Threshold): Properly clip `above` snippet (resolving 1/2 width cl…
techniq Feb 9, 2026
7396c10
refine
techniq Feb 9, 2026
57db60d
Add `defaultExample` to `components` collection to use first on docs …
techniq Feb 9, 2026
e4e977e
Improve ExampleScreenshot when image is not available, with fallback …
techniq Feb 9, 2026
bc3139d
Improve primitives doc
techniq Feb 9, 2026
c2de099
fix border on light mode
techniq Feb 9, 2026
83b8957
cleanup
techniq Feb 9, 2026
1ec6493
docs(Points): Add docs regarding color
techniq Feb 10, 2026
a2cea0d
Add Nocturne to showcase
techniq Feb 11, 2026
84f8e9f
fix(showcase): handle source-only items
techniq Feb 11, 2026
ef97712
Cmd K (uppercase) (#784)
cycle4passion Feb 12, 2026
9501c87
Fix loading web containers
techniq Feb 13, 2026
29461b2
remove color from Axis/arrow-markers example
techniq Feb 13, 2026
f69e7f2
Extract ExampleListing component and show additional examples at the …
techniq Feb 13, 2026
bf9c197
Improve/fix histogram examples (better axis ticks and use Rect instea…
techniq Feb 13, 2026
587a6c6
fix(BarChartControls): handling of interval and threshold sizing
techniq Feb 13, 2026
7419a20
generate:all to update catalog and screenshots
techniq Feb 13, 2026
b96f1ae
Hide playground menu item until it's more polished
techniq Feb 13, 2026
66fa730
fix clipping
techniq Feb 14, 2026
5076e2f
fix showing component source for layers (Layer, Svg, etc)
techniq Feb 14, 2026
f9aec82
fix(Bar): Fix bar rounding direction when using xReverse/yReverse wit…
techniq Feb 14, 2026
864fa67
fix(Bar): Fix bar rounding direction when using xReverse/yReverse wit…
techniq Feb 14, 2026
c80b6ff
remove reverse/annotations from example
techniq Feb 14, 2026
a052fc2
Merge branch 'docs-v2' into state-refactor
techniq Feb 14, 2026
d9762ff
Move data doc to content/guides like other guides
techniq Feb 14, 2026
8a32c05
Merge branch 'next' into state-refactor
techniq Feb 26, 2026
b66fc8b
Remove old reference
techniq Feb 26, 2026
7509c2d
remove unneeded page test
techniq Feb 26, 2026
593672e
Fix Arc tooltip test
techniq Feb 26, 2026
d32ab73
Integrate SeriesState into ChartChart and improve handling of series …
techniq Feb 27, 2026
8164c20
Improve examples page on small viewports
techniq Mar 1, 2026
c788ffb
Improve animated globe example on small viewports
techniq Mar 1, 2026
d97e88e
feat(Chart): Add cartesian pan/zoom via `transform={{ mode: 'domain' …
techniq Mar 1, 2026
b38a0d5
Improve interop between brush and transform
techniq Mar 1, 2026
9882896
Automatically clip marks when using transform mode: 'transform' (like…
techniq Mar 1, 2026
d0e3e0e
feat(Chart): Support `motion` prop to transition x/y scales using twe…
techniq Mar 2, 2026
7c66e99
Add a fallback transformState until bind is applied
techniq Mar 2, 2026
32db9fa
Update catalog and screenshots
techniq Mar 3, 2026
34f520b
Fix tootip/highlight handling for ScatterChart
techniq Mar 3, 2026
cd57e1d
Fix AreaChart with separate series data
techniq Mar 3, 2026
22b8e0a
Fix tooltip for ScatterChart single dimension example. Remove grid f…
techniq Mar 3, 2026
5b5db90
fix light mode screenshots
techniq Mar 3, 2026
4519618
Update remaining examples for `<Chart tooltip={...}>` => `<Chart tool…
techniq Mar 3, 2026
41b6055
Fix disabling tooltip context
techniq Mar 3, 2026
db2175b
Move brush, padding, and onTooltipClick from simplified charts (Area,…
techniq Mar 4, 2026
8e7c774
Update catalog
techniq Mar 4, 2026
4c142a1
fix(Area|Highlight): Properly handling diveraging stack layouts for n…
techniq Mar 5, 2026
8a4e6e8
Add support for setting scale, transcale, domain extents and custom c…
techniq Mar 9, 2026
322e0f8
regenerate catalog and screenshots
techniq Mar 9, 2026
91968be
Replace `geo.applyTransform` with `transform.mode: 'projection' | 'ro…
techniq Mar 9, 2026
a4e41d1
Support category for guides, group state docs
techniq Mar 9, 2026
22c00d5
simplify example
techniq Mar 9, 2026
cc5be1a
organize doc
techniq Mar 9, 2026
636aebc
fix translucent / backpane example (remove unneeded transform state s…
techniq Mar 9, 2026
f8e76d8
Swap order of play/pause and current feature after moving button from…
techniq Mar 9, 2026
424173a
Rename domainExtent `original` to `data`
techniq Mar 9, 2026
0722d42
Add examles for different `zoomTo` use cases
techniq Mar 9, 2026
25c628a
Add examples for each quick reference use cases
techniq Mar 9, 2026
3aca2e9
cleanup
techniq Mar 9, 2026
d4f51e6
Add pan zoom with dynamic data example
techniq Mar 9, 2026
378cef2
Clip highlight/points/labels as well when transform is enabled
techniq Mar 10, 2026
0528d81
feat: Add inertia (momentum) support for transform drag gestures
techniq Mar 10, 2026
4bb3757
Update data examples to use Chart instead of LineChart
techniq Mar 10, 2026
f0127b1
feat: Data driven primitives
techniq Mar 11, 2026
e8d285b
fix(TooltipContext): Support band mode with array-based range accesso…
techniq Mar 11, 2026
0efc244
Simplify histogram examples using new data-driven primitives
techniq Mar 12, 2026
26d9244
Moved valueAxis-aware grid/rule defaults from BarChart into ChartChil…
techniq Mar 12, 2026
c45ec8c
regenerate catalog and screenshots
techniq Mar 12, 2026
9c23de1
add planet distances example (TransformContext and more)
techniq Mar 12, 2026
cda26d2
feat: Add Image component. Resolves #628
techniq Mar 12, 2026
cb0f46a
Improve planet distances example
techniq Mar 12, 2026
8eff8e6
regenerate catalog and screenshots
techniq Mar 12, 2026
1b5b92f
add inertia dragging to animated globe
techniq Mar 12, 2026
a7259dd
Remove `transform={{ mode: 'rotate' }}` and handle with `transform={{…
techniq Mar 13, 2026
d1f7712
Add pan zoom domain extent example for BarChart
techniq Mar 13, 2026
654ff17
feat: Add Cell mark. Resolves #627.
techniq Mar 18, 2026
cee49d8
feat: Add Chord layout and Ribbon primitive
techniq Mar 18, 2026
352479c
Add gradient example
techniq Mar 18, 2026
750132f
Fix html pan/zoom image
techniq Mar 18, 2026
2e54567
Add Chord example with axis ticks
techniq Mar 18, 2026
baa08de
Add ridgeline example
techniq Mar 18, 2026
ddb3fc3
Improve ridgeline example
techniq Mar 18, 2026
e64b963
Add another ridgeline example
techniq Mar 18, 2026
472f381
generate catalog and screenshots
techniq Mar 18, 2026
ae21873
Add more examples to homepage
techniq Mar 18, 2026
e4dce08
Add oscilloscope-ridgeline example (WIP)
techniq Mar 21, 2026
d72f6a2
Merge branch 'next' into state-refactor
techniq Mar 21, 2026
190043d
Reduce Cloudflare Worker bundle size to stay under 25 MiB limit
techniq Mar 21, 2026
5e82466
Improve Chord/ticks example and fix "negative radius" error in Chord/…
techniq Mar 21, 2026
e2e66ec
re-add codemirror to allow resolving
techniq Mar 21, 2026
9678456
Improve Chord/hover tooltips
techniq Mar 21, 2026
64be6a4
feat: Add geo projection support for primitives (Circle, Rect, etc). …
techniq Mar 22, 2026
1005353
Add College football map example
techniq Mar 22, 2026
4be3312
feat(Spline): Support geo projection. Add geo route example
techniq Mar 22, 2026
bb62328
Move geo-route example from line to spline
techniq Mar 22, 2026
0dfd815
Improve oscilloscope frequency example (clipped high/unused frequencies)
techniq Mar 22, 2026
e0aa3ce
Add satellite example
techniq Mar 22, 2026
f25a847
Fix hash target scrolling
techniq Mar 22, 2026
6981a94
feat: Add Vector component
techniq Mar 22, 2026
c349e96
Update primitives to support data driven class, opacity, etc
techniq Mar 22, 2026
dcae0c4
Improve election-wind-map example
techniq Mar 22, 2026
fa7cd30
Replace flow-field example with wind-map
techniq Mar 23, 2026
e4e8772
update catalog and screenshots
techniq Mar 23, 2026
e7ed4cf
fix(Highlight): Use valueAxis instead of Array.isArray(yValue) for ax…
techniq Mar 23, 2026
69427ae
Add BarChart series-stack-separate-data example (issue #486)
techniq Mar 23, 2026
d90c8b3
fix(Points|Labels): Correctly position when using x1 / y1 scales (iss…
techniq Mar 23, 2026
65b2d02
fix(Points|Labels): Correctly position when using array accessors (du…
techniq Mar 23, 2026
abf69f6
update catalog and screenshots
techniq Mar 23, 2026
9442d3c
feat(Bar): Support fixed `width` and `height` props to override scale…
techniq Mar 23, 2026
594af7b
feat(Labels): Support `seriesKey` in `labels` prop to filter which se…
techniq Mar 23, 2026
2a497dc
update catalog and screenshots
techniq Mar 23, 2026
f6ae874
breaking(Brush): Redesign brush API
techniq Mar 23, 2026
354b8f3
feat(SeriesState): Support passing `selected` as part of series decla…
techniq Mar 24, 2026
6729923
Fix baseline for multi-series charts
techniq Mar 24, 2026
05d1c3b
Show guides not in category (ex. layers.md) before those in category …
techniq Mar 24, 2026
e4fa4d1
improve layout
techniq Mar 24, 2026
361b58b
feat(TransformContext): Add `scrollActivationKey` option to require a…
techniq Mar 24, 2026
efa3791
Fix brush sync beteween 2 charts (AreaChart/brush-sync)
techniq Mar 24, 2026
9fb0c1a
Fix zoomOnBrush test
techniq Mar 24, 2026
0135c4a
docs: Add tooltip guide
techniq Mar 24, 2026
62f5583
Add links between guides and context/api
techniq Mar 24, 2026
9566c67
refine
techniq Mar 24, 2026
5a8179f
cleanup
techniq Mar 24, 2026
049569e
Remove explicit order from guides (sort alpha) except overview
techniq Mar 24, 2026
7dbac68
Fix GeoSpline
techniq Mar 24, 2026
76b8fbb
Add geo guide
techniq Mar 24, 2026
c002e1c
clip histogram examples so transitions do not extend passed container
techniq Mar 24, 2026
8e50d6b
generate catalog and screenshots
techniq Mar 24, 2026
76c41da
Add animation guide
techniq Mar 24, 2026
bf0f659
Update state overview
techniq Mar 24, 2026
979be9d
feat: Mark registration for implicit series/domain calculation and un…
techniq Mar 25, 2026
fdd368c
Improve data guide
techniq Mar 25, 2026
f4017c4
Add test to check if domain is updated when hiding implicit and expli…
techniq Mar 25, 2026
524afb1
Add structure guide to explain snippets and Chart / simplified chart
techniq Mar 25, 2026
90e715a
Setup`pnpm bench` to help with performance evalulation
techniq Mar 25, 2026
7dd14f4
refactor: consolidate registerMark into registerComponentNode
techniq Mar 25, 2026
15c365d
cleanup for clarity (number accessor is only used recursively in acce…
techniq Mar 25, 2026
c313eca
feat: implement edge rounding for stackDiverging layout in BarChart
techniq Mar 25, 2026
3ebb212
feat: add `downloadImage`, `downloadSvg`, `getChartImageBlob`, and `g…
techniq Mar 25, 2026
fc416bf
refactor: consolidate component tree and mark registration into Chart…
techniq Mar 25, 2026
c48b4e1
fix(Canavs): support `strokeOpacity` for Path component
techniq Mar 26, 2026
92df323
Remove outdated warning
techniq Mar 26, 2026
b0560e0
fix(Text): handle inline styles and CSS class-based text-anchor
techniq Mar 26, 2026
b49ae41
test(canvas): add comprehensive test suite for canvas utility functions
techniq Mar 26, 2026
1e8f25b
fix(ClipPath): Support canvas layers. Resolves #660
techniq Mar 26, 2026
d2f1d03
fix(Canvas): support event handlers on Group components in canvas mode
techniq Mar 26, 2026
03e0b09
fix(Rect): Handle strokeOpacity when using canvas layers
techniq Mar 26, 2026
839783a
fix(docs): strip markdown links from TOC heading text
techniq Mar 26, 2026
548d626
fix(TransformState): properly handle y axis when in domain/cartesian …
techniq Mar 26, 2026
768be6a
feat(Highlight): Support data-driven radius for highlight points. Ad…
techniq Mar 26, 2026
ee4884f
Add a pan/zoom with overview example to show how transform/brush can …
techniq Mar 26, 2026
02b54de
Add zoomable bubble chart example for ScatterChart
techniq Mar 26, 2026
dd3a396
update catalog and screenshots
techniq Mar 26, 2026
4390a0b
docs: Add world map transform examples (canvas & projection modes) wi…
techniq Mar 26, 2026
1dad7b2
docs: Add world transform examples (canvas and projection) similar to US
techniq Mar 27, 2026
e35abaa
feat: Support continuous color scales via `cScale` prop without requi…
techniq Mar 27, 2026
bb8db22
Add migration guides: `v1 -> v2` and `next -> state-refactor`
techniq Mar 27, 2026
de0d5ca
Improve v1 => v2 guide
techniq Mar 27, 2026
6d71055
feat: Add BoxPlot and Violin components
techniq Mar 27, 2026
cac7264
fix typos
techniq Mar 27, 2026
e46fab6
cleanup
techniq Mar 27, 2026
628453c
improve styles doc
techniq Mar 27, 2026
83f15a5
feat: Add Contour, Density, Raster components
techniq Mar 28, 2026
5aa7f39
update catalog and screenshots
techniq Mar 28, 2026
25d4825
docs: Add seriesKey mark awareness and get*Props removal to migration…
techniq Mar 28, 2026
3225de4
feat: Auto-compute Bar/Bars mount animation initial values from chart…
techniq Mar 28, 2026
ec29b88
fix: `flattenPathData` now handles relative arc commands, fixing roun…
techniq Mar 28, 2026
0c8de7b
fix(Area): Handle degenerate domains (e.g. all-zero data) and unify y…
techniq Mar 28, 2026
1c98233
fix LineChart defining single axis (<LineChart axis="x">)
techniq Mar 29, 2026
e695ea1
Handle class for new statistic components
techniq Mar 29, 2026
18dcef4
Show canvas support for Density
techniq Mar 29, 2026
9b5e646
Add Density/weighted example
techniq Mar 29, 2026
76006bb
feat(Spline): Add motion support for mount animation from baseline
techniq Mar 29, 2026
ee17ed0
Add tween examples for Area/AreaChart/BarChart/LineChart
techniq Mar 29, 2026
06cfd5c
generate catalog and images, add more examples to frontpage
techniq Mar 29, 2026
4a07de2
Add tooltip circle to college footmap map
techniq Mar 29, 2026
772c8aa
fix(Tooltip): Apply inverse transform for quadtree lookup when zoomed…
techniq Mar 29, 2026
e544290
Improve perf of college football map by using canvas instead of proje…
techniq Mar 29, 2026
da4ebdb
Improve Density/walmart example with pan/zoom, tooltip, and improved…
techniq Mar 29, 2026
0956c0c
Improve Raster/math-functions example
techniq Mar 29, 2026
b517a4a
Update Raster to support Canavs and Html layers (not just Svg)
techniq Mar 29, 2026
c63bd78
Move download after Edit
techniq Mar 29, 2026
0fc74e4
Add contours switch to Raster/math-functions
techniq Mar 29, 2026
44dea0b
Fix tooltip value resolution for ArcChart series with per-item data b…
techniq Mar 29, 2026
0e8f99d
fix(Area): Default y0 baseline to chart's yBaseline when set
techniq Mar 29, 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
  •  
  •  
  •  
7 changes: 7 additions & 0 deletions .changeset/add-boxplot-component.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'layerchart': minor
---

feat: Add BoxPlot component for box-and-whisker plots

New composite mark that renders whiskers, caps, IQR box, median line, and outlier dots. Supports both pre-computed statistics (`min`, `q1`, `median`, `q3`, `max`, `outliers` accessors) and automatic computation from raw values via the `values` prop. Orientation-aware via `valueAxis` context.
8 changes: 8 additions & 0 deletions .changeset/add-stats-utils.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'layerchart': minor
---

feat: Add statistical utility functions `computeBoxStats()` and `kde()`

- `computeBoxStats(values, k?)` computes the five-number summary and outliers using the Tukey IQR method
- `kde(values, options?)` computes kernel density estimation using the Epanechnikov kernel with Silverman's rule-of-thumb bandwidth
7 changes: 7 additions & 0 deletions .changeset/add-violin-component.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'layerchart': minor
---

feat: Add Violin component for violin plots

New composite mark that renders a symmetric density curve (mirrored area) from raw data using kernel density estimation (Epanechnikov kernel). Supports pre-computed density data via `density` prop or automatic KDE from raw values via `values` prop. Optional `box` and `median` overlays. Configurable `bandwidth`, `thresholds`, and `curve`.
5 changes: 5 additions & 0 deletions .changeset/afraid-jobs-say.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Spline): Support geo projection
7 changes: 7 additions & 0 deletions .changeset/area-y0-baseline-default.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'layerchart': patch
---

fix(Area): Default y0 baseline to chart's yBaseline when set

Area's y0 fallback now respects the chart's `yBaseline` prop (e.g. `yBaseline={0}` set by AreaChart) instead of always using `min(yScale.domain())`. This fixes areas filling to the bottom of the chart instead of to the baseline when data goes negative.
5 changes: 5 additions & 0 deletions .changeset/blue-rules-feel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(Points|Labels): Correctly position when using x1 / y1 scales (issue #773)
5 changes: 5 additions & 0 deletions .changeset/breezy-oranges-drive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat: Add geo projection support for primitives (Circle, Rect, etc)
5 changes: 5 additions & 0 deletions .changeset/bright-bubbles-zoom.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Highlight): Add `r` prop to scale highlight points using the chart's rScale. Supports `r={true}` to use the chart's r config or a custom accessor.
22 changes: 22 additions & 0 deletions .changeset/brush-api-refactor.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
---
'layerchart': minor
---

breaking(Brush): Redesign brush API

**Breaking changes:**

- Remove `mode` prop ('integrated' | 'separated') — sync behavior is now driven by presence of `x`/`y` props
- Remove `resetOnEnd` — call `e.brush.reset()` in your `onBrushEnd` handler instead
- Remove `ignoreResetClick` — replaced by `clickToReset` (default `true`)
- Remove `onReset` event — check `brush.active === false` in `onBrushEnd`/`onChange` instead

**New features:**

- Add `BrushState.move({ x?, y? })` for programmatic selection control (like d3's `brush.move()`)
- Add `BrushState.selectAll()` to select the full domain extent
- Add `BrushState.reset()` to clear the selection
- Add `clickToReset` prop (default `true`)
- Add `zoomOnBrush` prop on Chart for simplified charts to opt into brush-to-zoom
- Move domain clamping, edge adjustment, and range computation logic into `BrushState` class
- Add `BrushChartContext` interface for easier testing
5 changes: 5 additions & 0 deletions .changeset/clear-moose-rush.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

refactor(Chart): Add `debug` prop and update `settings` context
10 changes: 10 additions & 0 deletions .changeset/component-tree.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'layerchart': minor
---

feat: Unified component tree for Canvas rendering with proper Group transform scoping. Fixes #662

- New `registerComponentNode({ name, kind, canvasRender })` API replaces both `registerCanvasComponent` and the `InsideCompositeMark` boolean context with a single unified component tree.
- Canvas rendering now walks the tree recursively with proper `save()`/`restore()` scoping, fixing Group transforms (translate, opacity) leaking to sibling components instead of only affecting children.
- Composite marks (Area, Threshold, Hull, Labels, Grid) register as `'composite-mark'` nodes, automatically preventing child marks from registering with the chart without manual `_skipRegistration` props.
- Removed `retainState` and `name` from `ComponentRender` type — Group's transform scoping is handled by tree position, and component names live on the tree node.
18 changes: 18 additions & 0 deletions .changeset/context-bind-state-rename.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
---
'layerchart': major
---

breaking(BrushContext|TransformContext): Rename `bind:brushContext` / `bind:transformContext` to `bind:state`

Both `BrushContext` and `TransformContext` now use `bind:state` instead of their previous named bindings. Additionally, properties on `ChartState` have been renamed:

- `chartContext.brushContext` → `chartContext.brushState`
- `chartContext.transformContext` → `chartContext.transformState`

```diff
- <BrushContext bind:brushContext>
+ <BrushContext bind:state>

- <TransformContext bind:transformContext>
+ <TransformContext bind:state>
```
7 changes: 7 additions & 0 deletions .changeset/default-chart-padding.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
'layerchart': patch
---

fix: Default chart padding now applied when using ChartChildren layout (marks snippet)

When `<Chart>` is used with `marks`/`grid`/`axis` snippets (no explicit `children` snippet), default padding is now applied to match the axes that ChartChildren renders by default. When `children` is provided directly (e.g. Treemap, Pack), no default padding is applied since the user controls layout. This can still be overridden with explicit `axis` or `padding` props.
12 changes: 12 additions & 0 deletions .changeset/domain-extent-original-to-data.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
---
'layerchart': major
---

breaking(TransformContext): Rename `domainExtent: 'original'` to `domainExtent: 'data'`

The `'original'` value for `domainExtent` has been renamed to `'data'` to better describe that it constrains pan/zoom to the data's domain bounds:

```diff
- <Chart transform={{ domainExtent: 'original' }}>
+ <Chart transform={{ domainExtent: 'data' }}>
```
5 changes: 5 additions & 0 deletions .changeset/download-chart-utils.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat: add `downloadImage`, `downloadSvg`, `getChartImageBlob`, and `getChartSvgString` utilities to export charts as PNG/JPEG/WebP images or SVG files
5 changes: 5 additions & 0 deletions .changeset/early-bats-wait.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(Tooltip): Apply inverse transform for quadtree lookup when zoomed/panned
5 changes: 5 additions & 0 deletions .changeset/eighty-foxes-notice.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat: Add Image component. Resolves #628
5 changes: 5 additions & 0 deletions .changeset/fiery-lamps-tickle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(SeriesState): Support passing `selected` as part of series declaration (Ex. ` <Chart series={...}>`)
8 changes: 8 additions & 0 deletions .changeset/fix-area-all-zero.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
'layerchart': patch
---

fix(Area): Handle degenerate domains (e.g. all-zero data) and unify y0/y1 baseline logic

- Guard against degenerate scale domains where min === max (e.g. `[0, 0]`), which caused `yScale()` to return `NaN` and break area path rendering
- Unify Area y0/y1 path computation to consistently use accessors through the scale, removing duplicate fallback logic
5 changes: 5 additions & 0 deletions .changeset/fix-barchart-diverging-edge-rounding.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(BarChart): automatically round the outer edge of each direction in `stackDiverging` layout
5 changes: 5 additions & 0 deletions .changeset/flat-arcs-heal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix: `flattenPathData` now handles relative arc commands, fixing rounded bars starting below the baseline during mount animation
17 changes: 17 additions & 0 deletions .changeset/geo-context-rename.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
---
'layerchart': major
---

breaking(GeoContext): Rename `GeoContext` component to `GeoProjection`

The `GeoContext` component has been renamed to `GeoProjection` to better describe its purpose. Update your imports and template usage:

```diff
- import { GeoContext } from 'layerchart'
+ import { GeoProjection } from 'layerchart'
```

```diff
- <GeoContext projection={geoAlbersUsa}>
+ <GeoProjection projection={geoAlbersUsa}>
```
7 changes: 7 additions & 0 deletions .changeset/good-glasses-design.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
---
'shadcn-svelte-1': patch
'svelteux-2': patch
'skeleton-3': patch
'skeleton4': patch
'standalone': patch
'layerchart': patch
'daisyui-5': patch
'docs': patch
---

Removed lodash-es dependency
5 changes: 5 additions & 0 deletions .changeset/green-hotels-strive.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(Area|Highlight): Properly handling diveraging stack layouts for negative values (line, highlight point)
15 changes: 15 additions & 0 deletions .changeset/layer-context-rename.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
'layerchart': major
---

breaking: Rename render context APIs to layer context

- `getRenderContext()` → `getLayerContext()`
- `setRenderContext()` → `setLayerContext()`
- `supportedContexts` prop → `layers` prop on components
- Internal `layout/` directory moved to `layers/` (affects deep imports)

```diff
- import { getRenderContext } from 'layerchart'
+ import { getLayerContext } from 'layerchart'
```
9 changes: 9 additions & 0 deletions .changeset/lucky-cats-stand.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'layerchart': minor
---

feat: Add data mode to primitive components (Circle, Ellipse, Group, Line, Polygon, Rect, Text)

Primitives now accept string or function accessors for positional props (e.g. `x="date"`, `y={d => d.value}`) to automatically resolve values through chart scales and iterate over data. Components also accept an optional `data` prop to override chart context data.

Color properties (`fill`, `stroke`) can also be data-driven, resolving per-item through the chart's color scale (`cScale`). String values are disambiguated: data property names resolve through `cScale`, while literal CSS colors pass through unchanged.
5 changes: 5 additions & 0 deletions .changeset/lucky-worlds-share.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(Points|Labels): Correctly position when using array accessors (duration charts, etc). Fixes #633
10 changes: 10 additions & 0 deletions .changeset/mark-registration.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
'layerchart': minor
---

feat: Mark registration for automatic domain calculation, accessor aggregation, and implicit series

- Marks (Spline, Area, Points, Bars) now register their data, accessors, and colors with the Chart via `registerMark()`.
- Chart automatically aggregates y/x accessors from marks, removing the need to pass `y={['apples', 'oranges']}` when each mark specifies its own `y`. Works for both horizontal (`valueAxis='y'`) and vertical (`valueAxis='x'`) charts.
- Per-mark `data` props are included in the chart's domain calculation automatically.
- Implicit series are generated from mark registrations when no explicit `series` prop is provided, enabling tooltip and legend support without requiring series definitions.
5 changes: 5 additions & 0 deletions .changeset/new-pans-serve.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat: Add inertia (momentum) support for transform drag gestures
5 changes: 5 additions & 0 deletions .changeset/nice-regions-ask.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(ClipPath): Support canvas layers. Resolves #660
5 changes: 5 additions & 0 deletions .changeset/ninety-melons-tickle.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat: Add Cell mark. Resolves #627.
21 changes: 21 additions & 0 deletions .changeset/orientation-to-valueaxis.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
'layerchart': major
---

breaking(Chart): Remove `isVertical` from ChartState, add `valueAxis` prop to `Chart`

`ChartState.isVertical` has been removed in favor of `ChartState.valueAxis` (`'x'` | `'y'`), which explicitly defines which axis represents the value (dependent variable).

Simplified charts (`BarChart`, `LineChart`, `AreaChart`, `ScatterChart`) still accept the `orientation` prop as before — each chart maps it to the correct `valueAxis` internally. The `<Chart>` component itself now uses `valueAxis` directly, since `orientation` is ambiguous at that level (a "vertical" BarChart has `valueAxis="y"` while a "vertical" LineChart has `valueAxis="x"`).

When accessing chart state:
```diff
- if (chartContext.isVertical) { ... }
+ if (chartContext.valueAxis === 'y') { ... }
```

When using `<Chart>` directly (not simplified charts):
```diff
- <Chart ...>
+ <Chart valueAxis="x" ...>
```
5 changes: 5 additions & 0 deletions .changeset/pretty-roses-invent.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

breaking(Chart): Rename `tooltip` prop to `tooltipContext` to better describe purpose and fix conflict with new `tooltip` snippet
5 changes: 5 additions & 0 deletions .changeset/purple-beers-smile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat: Add Chord layout and Ribbon primitive
19 changes: 19 additions & 0 deletions .changeset/remove-context-getters.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
---
'layerchart': major
---

breaking: Remove standalone context getter/setter functions

The following standalone context functions have been removed in favor of the unified `getChartContext()` API:

- `getTooltipContext()` / `setTooltipContext()` → use `getChartContext().tooltip`
- `getBrushContext()` / `setBrushContext()` → use `getChartContext().brushState`
- `getTransformContext()` / `setTransformContext()` → use `getChartContext().transformState`

```diff
- import { getTooltipContext } from 'layerchart'
- const tooltip = getTooltipContext()
+ import { getChartContext } from 'layerchart'
+ const chart = getChartContext()
+ // access via chart.tooltip
```
5 changes: 5 additions & 0 deletions .changeset/rename-scroll-mode.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

breaking(TransformContext): Rename `initialScrollMode` to `scrollMode` and make it reactive
5 changes: 5 additions & 0 deletions .changeset/ripe-numbers-speak.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

feat(Chart): Support `motion` prop to transition x/y scales using tween or spring
5 changes: 5 additions & 0 deletions .changeset/scroll-activation-key.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(TransformContext): Add `scrollActivationKey` option to require a modifier key (meta, alt, control, shift) for scroll/wheel zoom/pan, preventing accidental page scroll from triggering transforms
5 changes: 5 additions & 0 deletions .changeset/shiny-mails-hug.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Transform): Add zoom/pan constraints (`scaleExtent`, `translateExtent`, `constrain`, `domainExtent`), replace `geo.applyTransform` with `transform.mode: 'projection' | 'rotate'`, and reactively sync initial transform values on projection changes
5 changes: 5 additions & 0 deletions .changeset/silver-baboons-smile.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': major
---

breaking(Arc|Pie|Calendar|GeoPath): Rename `tooltipContext` to simple `tooltip` (boolean), simplifying use case
5 changes: 5 additions & 0 deletions .changeset/small-moles-jog.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Bar): Support fixed `width` and `height` props to override scale-derived dimensions, centering the bar within its band. Resolves #360
9 changes: 9 additions & 0 deletions .changeset/smooth-bars-grow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
'layerchart': minor
---

feat: Auto-compute Bar/Bars mount animation initial values from chart scales

Bar now automatically derives `initialY`/`initialHeight` (vertical) or `initialX`/`initialWidth` (horizontal) from the chart's scale range when `motion` is configured, removing the need to hardcode pixel values.

Also improves `valueAxis` inference on `ChartState` — when not explicitly set, it is now derived from scale types (band scale on y → `valueAxis: 'x'`, band scale on x → `valueAxis: 'y'`).
5 changes: 5 additions & 0 deletions .changeset/smooth-domains-zoom.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Chart): Add cartesian pan/zoom via `transform={{ mode: 'domain' }}` with single or both axis support. Resolves #366
5 changes: 5 additions & 0 deletions .changeset/sparkly-mice-peel.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': patch
---

fix(Canavs): support `strokeOpacity` for Path component
5 changes: 5 additions & 0 deletions .changeset/spline-motion-support.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
'layerchart': minor
---

feat(Spline): Add motion support for mount animation from baseline
Loading
Loading