From ee97e32179dddd1041c5c08fd7cc988f4b5ac3b0 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 1 Jul 2026 20:52:18 +0000 Subject: [PATCH 1/2] Version Packages --- .changeset/add-boxplot-component.md | 7 - .changeset/add-dodge-component.md | 19 - .changeset/add-geoclippath-component.md | 5 - .changeset/add-georaster-component.md | 5 - .changeset/add-pattern-rects.md | 5 - .changeset/add-smart-label-placement.md | 7 - .changeset/add-stats-utils.md | 8 - .changeset/add-text-segments.md | 7 - .changeset/add-trail-component.md | 5 - .changeset/add-violin-component.md | 7 - .changeset/add-waffle-component.md | 5 - .changeset/afraid-jobs-say.md | 5 - .changeset/all-papers-unite.md | 5 - .changeset/annotation-line-sloped.md | 8 - .changeset/annotation-point-link-callouts.md | 8 - .changeset/arclabel-component.md | 17 - .changeset/arctext-centered-default.md | 7 - .changeset/arctext-inner-padding.md | 7 - .changeset/area-y0-baseline-default.md | 7 - .changeset/axis-grid-stroke-fill-props.md | 5 - .changeset/band-scale-transform-brush.md | 5 - .changeset/band-tick-spacing-default.md | 5 - .changeset/band-tick-spacing.md | 5 - .changeset/bar-html-layer-support.md | 7 - .changeset/beige-bears-joke.md | 5 - .changeset/beige-doodles-shout.md | 5 - .changeset/beige-trams-check.md | 5 - .changeset/better-eagles-scream.md | 5 - .changeset/better-pets-divide.md | 5 - .changeset/big-boxes-shout.md | 5 - .changeset/blue-doodles-chew.md | 5 - .changeset/blue-rules-feel.md | 5 - .changeset/brave-spies-give.md | 5 - .changeset/breezy-breads-pump.md | 5 - .changeset/breezy-donuts-sniff.md | 5 - .changeset/breezy-oranges-drive.md | 5 - .changeset/bright-bubbles-zoom.md | 5 - .changeset/bright-stars-float.md | 5 - .changeset/brown-terms-tie.md | 5 - .changeset/brush-api-refactor.md | 22 - .changeset/brush-selection-constraints.md | 5 - .changeset/bumpy-breads-rhyme.md | 5 - .changeset/calm-jars-mix.md | 5 - .changeset/canvas-group-opacity.md | 9 - .changeset/chart-data-precedence.md | 16 - .changeset/chart-disable-text-selection.md | 5 - .changeset/chart-props-no-spread.md | 5 - .../chart-resolve-domain-series-metadata.md | 9 - .changeset/chatty-flies-bet.md | 5 - .changeset/chatty-shirts-rule.md | 5 - .changeset/chilly-games-hide.md | 5 - .changeset/chubby-ties-play.md | 5 - .changeset/circle-legend-component.md | 9 - .changeset/clean-nights-jog.md | 5 - .changeset/clear-ghosts-arrive.md | 5 - .changeset/clear-moose-rush.md | 5 - .changeset/clear-pears-tickle.md | 5 - .changeset/clear-points-care.md | 5 - .changeset/clip-path-unified.md | 17 - .changeset/clippath-invert.md | 5 - .changeset/component-tree.md | 10 - .../connector-orientation-step-curves.md | 8 - .changeset/connector-swoop-type.md | 7 - .changeset/context-bind-state-rename.md | 18 - .changeset/cozy-moments-work.md | 5 - .changeset/crazy-ads-appear.md | 5 - .changeset/crazy-friends-talk.md | 6 - .changeset/cruel-cameras-begin.md | 5 - .changeset/cruel-rats-taste.md | 5 - .changeset/curly-lies-write.md | 5 - .changeset/curly-papers-follow.md | 5 - .changeset/cute-donkeys-greet.md | 5 - .changeset/cyan-cougars-occur.md | 5 - .changeset/dark-pandas-start.md | 5 - .changeset/dasharray-prop.md | 11 - .changeset/deep-signs-listen.md | 5 - .changeset/default-chart-padding.md | 7 - .changeset/dirty-kings-send.md | 5 - .changeset/domain-extent-original-to-data.md | 12 - .changeset/download-chart-utils.md | 5 - .changeset/early-bats-wait.md | 5 - .changeset/early-peaches-accept.md | 5 - .changeset/easy-candies-wait.md | 5 - .changeset/eight-shirts-cover.md | 5 - .changeset/eighty-foxes-notice.md | 5 - .changeset/eighty-islands-jam.md | 5 - .changeset/eleven-corners-float.md | 5 - .changeset/eleven-crabs-switch.md | 5 - .changeset/eleven-trains-make.md | 5 - .changeset/empty-bats-stop.md | 5 - .changeset/empty-buses-flash.md | 5 - .changeset/every-sheep-rush.md | 5 - .changeset/evil-bags-dance.md | 5 - .changeset/evil-flowers-float.md | 5 - .changeset/evil-hoops-return.md | 5 - .changeset/fair-phones-wink.md | 5 - .changeset/fast-insects-deny.md | 5 - .changeset/fast-primitives-perf.md | 12 - .changeset/fiery-lamps-tickle.md | 5 - .changeset/five-stamps-drum.md | 5 - .changeset/fix-annotation-range-bounds.md | 5 - .changeset/fix-arclabel-canvas-rotation.md | 7 - .changeset/fix-area-all-zero.md | 8 - .../fix-barchart-diverging-edge-rounding.md | 5 - .changeset/fix-canvas-currentcolor.md | 5 - .changeset/fix-canvas-pattern-rendering.md | 5 - .changeset/fix-chart-image-export-sizing.md | 5 - .changeset/fix-class-attribute-ts-cast.md | 5 - .changeset/fix-debug-printscale.md | 7 - .changeset/fix-geo-mark-domain.md | 5 - .changeset/fix-geopath-canvas-tooltip.md | 5 - .changeset/fix-geopath-undefined-handlers.md | 5 - .changeset/fix-implicit-series-domain.md | 5 - .changeset/fix-pattern-canvas.md | 5 - .changeset/fix-pie-arc-xrange.md | 5 - .changeset/fix-scale-band-invert.md | 5 - .changeset/fix-series-state-effect-root.md | 7 - .changeset/fix-spline-canvas-class-opacity.md | 5 - .changeset/fix-spline-series-props-opacity.md | 5 - .../fix-text-negative-string-position.md | 5 - .../fix-transform-projection-reactivity.md | 5 - .changeset/fix-tween-on-mount.md | 11 - .../fix-x1-y1-domain-filter-without-series.md | 5 - .changeset/flat-arcs-heal.md | 5 - .changeset/flat-cases-enter.md | 5 - .changeset/four-lizards-win.md | 5 - .changeset/four-taxes-beam.md | 5 - .changeset/free-teeth-live.md | 5 - .changeset/fruity-pillows-agree.md | 5 - .changeset/fruity-pumas-stick.md | 5 - .changeset/full-pens-cheat.md | 5 - .changeset/full-times-guess.md | 5 - .changeset/funny-otters-kick.md | 5 - .changeset/funny-wasps-heal.md | 5 - .changeset/geo-context-rename.md | 17 - .changeset/geo-default-translate-center.md | 5 - .changeset/geo-legend-component.md | 7 - .../geo-relative-scale-translate-extent.md | 5 - .changeset/geolegend-reference-scale.md | 7 - .changeset/giant-donuts-yell.md | 5 - .changeset/globe-scroll-zoom.md | 5 - .changeset/good-glasses-design.md | 5 - .changeset/green-hotels-strive.md | 5 - .changeset/green-mirrors-retire.md | 5 - .changeset/green-poems-drop.md | 5 - .changeset/grumpy-ties-mix.md | 5 - .changeset/happy-bats-eat.md | 5 - .changeset/heavy-signs-kick.md | 5 - .changeset/honest-hoops-peel.md | 5 - .changeset/hot-dots-stick.md | 5 - .changeset/hot-pigs-push.md | 5 - .changeset/html-background-origin.md | 5 - .changeset/html-box-sizing.md | 5 - .../html-circle-ellipse-pattern-fills.md | 5 - .changeset/html-default-border-width.md | 5 - .changeset/huge-boats-fix.md | 5 - .changeset/huge-lions-do.md | 5 - .changeset/huge-regions-live.md | 5 - .changeset/huge-rocks-sip.md | 5 - .changeset/hull-style-props.md | 5 - .changeset/icy-llamas-jump.md | 5 - .changeset/image-pointer-events-default.md | 5 - .changeset/khaki-pugs-hammer.md | 5 - .changeset/kind-melons-invent.md | 5 - .changeset/kind-shirts-sniff.md | 5 - .changeset/labels-center-placement.md | 7 - .changeset/large-spiders-stay.md | 5 - .changeset/late-glasses-itch.md | 5 - .changeset/layer-context-rename.md | 15 - .changeset/lazy-load-opt-in-features.md | 17 - .changeset/legal-parrots-beam.md | 5 - .changeset/legend-tooltip-indicator.md | 11 - .changeset/lemon-bats-change.md | 5 - .changeset/little-flowers-drop.md | 5 - .changeset/loud-lies-film.md | 5 - .changeset/loud-paws-allow.md | 5 - .changeset/lovely-loops-ring.md | 5 - .changeset/lucky-cats-stand.md | 9 - .changeset/lucky-pianos-count.md | 5 - .changeset/lucky-worlds-share.md | 5 - .changeset/major-rats-raise.md | 5 - .changeset/mark-registration.md | 10 - .changeset/mean-flies-play.md | 5 - .changeset/mean-loops-peel.md | 5 - .changeset/merge-connector-into-link.md | 14 - .changeset/metal-flowers-sneeze.md | 5 - .changeset/mighty-weeks-try.md | 5 - .changeset/modern-nails-kiss.md | 5 - .changeset/neat-vapors-shift.md | 5 - .changeset/new-pans-serve.md | 5 - .changeset/new-turtles-clean.md | 5 - .changeset/nice-regions-ask.md | 5 - .changeset/nine-badgers-teach.md | 5 - .changeset/nine-carrots-grin.md | 5 - .changeset/nine-pens-design.md | 5 - .changeset/ninety-ghosts-taste.md | 5 - .changeset/ninety-melons-tickle.md | 5 - .changeset/odd-pears-float.md | 5 - .changeset/old-lions-hide.md | 5 - .changeset/open-bushes-run.md | 5 - .changeset/open-houses-vanish.md | 5 - .changeset/orientation-to-valueaxis.md | 21 - .changeset/path-lazy-feature-allocation.md | 25 - .changeset/pattern-html-layer.md | 5 - .changeset/per-layer-primitive-variants.md | 97 -- .changeset/piechart-arcchart-labels-prop.md | 14 - .changeset/pink-flies-worry.md | 5 - .changeset/pink-hornets-rest.md | 5 - .changeset/pink-showers-hunt.md | 5 - .changeset/plain-rings-itch.md | 5 - .changeset/polite-parts-learn.md | 5 - .changeset/poor-clocks-occur.md | 5 - .changeset/pre.json | 322 ----- .changeset/pretty-roses-invent.md | 5 - .../primitives-inherit-chart-accessors.md | 23 - .changeset/proud-camels-cut.md | 5 - .changeset/proud-llamas-fold.md | 5 - .changeset/proud-melons-warn.md | 5 - .changeset/public-queens-invite.md | 5 - .changeset/puny-clocks-admire.md | 5 - .changeset/puny-shoes-kiss.md | 5 - .changeset/purple-beers-smile.md | 5 - .changeset/purple-things-count.md | 5 - .changeset/quiet-insects-share.md | 5 - .changeset/quiet-mangos-kneel.md | 5 - .changeset/quiet-rabbits-listen.md | 7 - .changeset/radial-tree-link.md | 17 - .changeset/rare-hats-happen.md | 5 - .changeset/rare-olives-change.md | 5 - .changeset/ready-pumas-sink.md | 5 - .changeset/real-badgers-say.md | 5 - .changeset/rect-data-corners-playground.md | 5 - .changeset/rect-per-corner-corners.md | 9 - .changeset/red-monkeys-sleep.md | 5 - .changeset/remove-context-getters.md | 19 - .changeset/rename-scroll-mode.md | 5 - .changeset/rich-keys-take.md | 5 - .changeset/ripe-numbers-speak.md | 5 - .changeset/sad-chairs-stand.md | 5 - .changeset/scroll-activation-key.md | 5 - .changeset/server-chart-rendering.md | 5 - .changeset/shaggy-dryers-make.md | 5 - .changeset/shaky-animals-wave.md | 5 - .changeset/shaky-dots-go.md | 5 - .changeset/shaky-ends-bake.md | 5 - .changeset/sharp-rockets-jam.md | 5 - .changeset/shiny-mails-hug.md | 5 - .changeset/silver-baboons-smile.md | 5 - .changeset/silver-mugs-leave.md | 5 - .changeset/skip-empty-markinfo-effect.md | 9 - .changeset/slow-hounds-hide.md | 5 - .changeset/slow-streets-look.md | 5 - .changeset/small-moles-jog.md | 5 - .changeset/smart-dots-rule.md | 5 - .changeset/smart-paths-jog.md | 5 - .changeset/smooth-bars-grow.md | 9 - .changeset/smooth-domains-zoom.md | 5 - .changeset/social-masks-teach.md | 5 - .changeset/soft-pens-invite.md | 5 - .changeset/solid-badgers-tan.md | 5 - .changeset/some-frogs-camp.md | 5 - .changeset/sour-hounds-repeat.md | 5 - .changeset/sparkly-beds-dress.md | 5 - .changeset/sparkly-mice-peel.md | 5 - .changeset/spicy-gifts-float.md | 5 - .changeset/spicy-seals-kiss.md | 5 - .changeset/spline-motion-support.md | 5 - .changeset/spline-per-segment-styling.md | 5 - .changeset/spline-reactive-motion.md | 5 - .changeset/spotty-plums-invite.md | 5 - .changeset/spotty-rules-taste.md | 5 - .changeset/subpath-exports.md | 25 - .changeset/swift-gifts-flow.md | 5 - .changeset/tall-mice-tap.md | 5 - .changeset/tall-poems-take.md | 5 - .changeset/tame-lamps-report.md | 5 - .changeset/tangy-lies-strive.md | 5 - .changeset/tasty-states-raise.md | 5 - .changeset/text-fontsize-prop.md | 17 - .changeset/text-format-tween.md | 5 - .changeset/thick-months-join.md | 5 - .changeset/thirty-glasses-pick.md | 5 - .changeset/three-cities-chew.md | 5 - .changeset/tooltip-fade-duration.md | 7 - .changeset/tooltip-item-highlight-fade.md | 5 - .changeset/tooltip-portal.md | 7 - .changeset/tooltip-xy-accessor-overrides.md | 11 - .changeset/tricky-nights-mix.md | 5 - .changeset/tricky-pears-help.md | 5 - .changeset/true-waves-roll.md | 5 - .changeset/twelve-frogs-agree.md | 5 - .changeset/twenty-bushes-hope.md | 5 - .changeset/twenty-teeth-stand.md | 5 - .changeset/violet-gifts-fail.md | 5 - .changeset/violet-horses-walk.md | 5 - .changeset/warm-colors-glow.md | 10 - .changeset/warm-labels-shine.md | 5 - .changeset/warm-mammals-deny.md | 5 - .changeset/warm-women-glow.md | 5 - .changeset/weak-donuts-tan.md | 5 - .changeset/wet-cups-act.md | 5 - .changeset/whole-women-listen.md | 5 - .changeset/wide-berries-invite.md | 5 - .changeset/wide-pillows-march.md | 5 - .changeset/wide-wasps-enjoy.md | 5 - .changeset/witty-clocks-divide.md | 5 - packages/layerchart/CHANGELOG.md | 1060 +++++++++++++++++ packages/layerchart/package.json | 2 +- 308 files changed, 1061 insertions(+), 2318 deletions(-) delete mode 100644 .changeset/add-boxplot-component.md delete mode 100644 .changeset/add-dodge-component.md delete mode 100644 .changeset/add-geoclippath-component.md delete mode 100644 .changeset/add-georaster-component.md delete mode 100644 .changeset/add-pattern-rects.md delete mode 100644 .changeset/add-smart-label-placement.md delete mode 100644 .changeset/add-stats-utils.md delete mode 100644 .changeset/add-text-segments.md delete mode 100644 .changeset/add-trail-component.md delete mode 100644 .changeset/add-violin-component.md delete mode 100644 .changeset/add-waffle-component.md delete mode 100644 .changeset/afraid-jobs-say.md delete mode 100644 .changeset/all-papers-unite.md delete mode 100644 .changeset/annotation-line-sloped.md delete mode 100644 .changeset/annotation-point-link-callouts.md delete mode 100644 .changeset/arclabel-component.md delete mode 100644 .changeset/arctext-centered-default.md delete mode 100644 .changeset/arctext-inner-padding.md delete mode 100644 .changeset/area-y0-baseline-default.md delete mode 100644 .changeset/axis-grid-stroke-fill-props.md delete mode 100644 .changeset/band-scale-transform-brush.md delete mode 100644 .changeset/band-tick-spacing-default.md delete mode 100644 .changeset/band-tick-spacing.md delete mode 100644 .changeset/bar-html-layer-support.md delete mode 100644 .changeset/beige-bears-joke.md delete mode 100644 .changeset/beige-doodles-shout.md delete mode 100644 .changeset/beige-trams-check.md delete mode 100644 .changeset/better-eagles-scream.md delete mode 100644 .changeset/better-pets-divide.md delete mode 100644 .changeset/big-boxes-shout.md delete mode 100644 .changeset/blue-doodles-chew.md delete mode 100644 .changeset/blue-rules-feel.md delete mode 100644 .changeset/brave-spies-give.md delete mode 100644 .changeset/breezy-breads-pump.md delete mode 100644 .changeset/breezy-donuts-sniff.md delete mode 100644 .changeset/breezy-oranges-drive.md delete mode 100644 .changeset/bright-bubbles-zoom.md delete mode 100644 .changeset/bright-stars-float.md delete mode 100644 .changeset/brown-terms-tie.md delete mode 100644 .changeset/brush-api-refactor.md delete mode 100644 .changeset/brush-selection-constraints.md delete mode 100644 .changeset/bumpy-breads-rhyme.md delete mode 100644 .changeset/calm-jars-mix.md delete mode 100644 .changeset/canvas-group-opacity.md delete mode 100644 .changeset/chart-data-precedence.md delete mode 100644 .changeset/chart-disable-text-selection.md delete mode 100644 .changeset/chart-props-no-spread.md delete mode 100644 .changeset/chart-resolve-domain-series-metadata.md delete mode 100644 .changeset/chatty-flies-bet.md delete mode 100644 .changeset/chatty-shirts-rule.md delete mode 100644 .changeset/chilly-games-hide.md delete mode 100644 .changeset/chubby-ties-play.md delete mode 100644 .changeset/circle-legend-component.md delete mode 100644 .changeset/clean-nights-jog.md delete mode 100644 .changeset/clear-ghosts-arrive.md delete mode 100644 .changeset/clear-moose-rush.md delete mode 100644 .changeset/clear-pears-tickle.md delete mode 100644 .changeset/clear-points-care.md delete mode 100644 .changeset/clip-path-unified.md delete mode 100644 .changeset/clippath-invert.md delete mode 100644 .changeset/component-tree.md delete mode 100644 .changeset/connector-orientation-step-curves.md delete mode 100644 .changeset/connector-swoop-type.md delete mode 100644 .changeset/context-bind-state-rename.md delete mode 100644 .changeset/cozy-moments-work.md delete mode 100644 .changeset/crazy-ads-appear.md delete mode 100644 .changeset/crazy-friends-talk.md delete mode 100644 .changeset/cruel-cameras-begin.md delete mode 100644 .changeset/cruel-rats-taste.md delete mode 100644 .changeset/curly-lies-write.md delete mode 100644 .changeset/curly-papers-follow.md delete mode 100644 .changeset/cute-donkeys-greet.md delete mode 100644 .changeset/cyan-cougars-occur.md delete mode 100644 .changeset/dark-pandas-start.md delete mode 100644 .changeset/dasharray-prop.md delete mode 100644 .changeset/deep-signs-listen.md delete mode 100644 .changeset/default-chart-padding.md delete mode 100644 .changeset/dirty-kings-send.md delete mode 100644 .changeset/domain-extent-original-to-data.md delete mode 100644 .changeset/download-chart-utils.md delete mode 100644 .changeset/early-bats-wait.md delete mode 100644 .changeset/early-peaches-accept.md delete mode 100644 .changeset/easy-candies-wait.md delete mode 100644 .changeset/eight-shirts-cover.md delete mode 100644 .changeset/eighty-foxes-notice.md delete mode 100644 .changeset/eighty-islands-jam.md delete mode 100644 .changeset/eleven-corners-float.md delete mode 100644 .changeset/eleven-crabs-switch.md delete mode 100644 .changeset/eleven-trains-make.md delete mode 100644 .changeset/empty-bats-stop.md delete mode 100644 .changeset/empty-buses-flash.md delete mode 100644 .changeset/every-sheep-rush.md delete mode 100644 .changeset/evil-bags-dance.md delete mode 100644 .changeset/evil-flowers-float.md delete mode 100644 .changeset/evil-hoops-return.md delete mode 100644 .changeset/fair-phones-wink.md delete mode 100644 .changeset/fast-insects-deny.md delete mode 100644 .changeset/fast-primitives-perf.md delete mode 100644 .changeset/fiery-lamps-tickle.md delete mode 100644 .changeset/five-stamps-drum.md delete mode 100644 .changeset/fix-annotation-range-bounds.md delete mode 100644 .changeset/fix-arclabel-canvas-rotation.md delete mode 100644 .changeset/fix-area-all-zero.md delete mode 100644 .changeset/fix-barchart-diverging-edge-rounding.md delete mode 100644 .changeset/fix-canvas-currentcolor.md delete mode 100644 .changeset/fix-canvas-pattern-rendering.md delete mode 100644 .changeset/fix-chart-image-export-sizing.md delete mode 100644 .changeset/fix-class-attribute-ts-cast.md delete mode 100644 .changeset/fix-debug-printscale.md delete mode 100644 .changeset/fix-geo-mark-domain.md delete mode 100644 .changeset/fix-geopath-canvas-tooltip.md delete mode 100644 .changeset/fix-geopath-undefined-handlers.md delete mode 100644 .changeset/fix-implicit-series-domain.md delete mode 100644 .changeset/fix-pattern-canvas.md delete mode 100644 .changeset/fix-pie-arc-xrange.md delete mode 100644 .changeset/fix-scale-band-invert.md delete mode 100644 .changeset/fix-series-state-effect-root.md delete mode 100644 .changeset/fix-spline-canvas-class-opacity.md delete mode 100644 .changeset/fix-spline-series-props-opacity.md delete mode 100644 .changeset/fix-text-negative-string-position.md delete mode 100644 .changeset/fix-transform-projection-reactivity.md delete mode 100644 .changeset/fix-tween-on-mount.md delete mode 100644 .changeset/fix-x1-y1-domain-filter-without-series.md delete mode 100644 .changeset/flat-arcs-heal.md delete mode 100644 .changeset/flat-cases-enter.md delete mode 100644 .changeset/four-lizards-win.md delete mode 100644 .changeset/four-taxes-beam.md delete mode 100644 .changeset/free-teeth-live.md delete mode 100644 .changeset/fruity-pillows-agree.md delete mode 100644 .changeset/fruity-pumas-stick.md delete mode 100644 .changeset/full-pens-cheat.md delete mode 100644 .changeset/full-times-guess.md delete mode 100644 .changeset/funny-otters-kick.md delete mode 100644 .changeset/funny-wasps-heal.md delete mode 100644 .changeset/geo-context-rename.md delete mode 100644 .changeset/geo-default-translate-center.md delete mode 100644 .changeset/geo-legend-component.md delete mode 100644 .changeset/geo-relative-scale-translate-extent.md delete mode 100644 .changeset/geolegend-reference-scale.md delete mode 100644 .changeset/giant-donuts-yell.md delete mode 100644 .changeset/globe-scroll-zoom.md delete mode 100644 .changeset/good-glasses-design.md delete mode 100644 .changeset/green-hotels-strive.md delete mode 100644 .changeset/green-mirrors-retire.md delete mode 100644 .changeset/green-poems-drop.md delete mode 100644 .changeset/grumpy-ties-mix.md delete mode 100644 .changeset/happy-bats-eat.md delete mode 100644 .changeset/heavy-signs-kick.md delete mode 100644 .changeset/honest-hoops-peel.md delete mode 100644 .changeset/hot-dots-stick.md delete mode 100644 .changeset/hot-pigs-push.md delete mode 100644 .changeset/html-background-origin.md delete mode 100644 .changeset/html-box-sizing.md delete mode 100644 .changeset/html-circle-ellipse-pattern-fills.md delete mode 100644 .changeset/html-default-border-width.md delete mode 100644 .changeset/huge-boats-fix.md delete mode 100644 .changeset/huge-lions-do.md delete mode 100644 .changeset/huge-regions-live.md delete mode 100644 .changeset/huge-rocks-sip.md delete mode 100644 .changeset/hull-style-props.md delete mode 100644 .changeset/icy-llamas-jump.md delete mode 100644 .changeset/image-pointer-events-default.md delete mode 100644 .changeset/khaki-pugs-hammer.md delete mode 100644 .changeset/kind-melons-invent.md delete mode 100644 .changeset/kind-shirts-sniff.md delete mode 100644 .changeset/labels-center-placement.md delete mode 100644 .changeset/large-spiders-stay.md delete mode 100644 .changeset/late-glasses-itch.md delete mode 100644 .changeset/layer-context-rename.md delete mode 100644 .changeset/lazy-load-opt-in-features.md delete mode 100644 .changeset/legal-parrots-beam.md delete mode 100644 .changeset/legend-tooltip-indicator.md delete mode 100644 .changeset/lemon-bats-change.md delete mode 100644 .changeset/little-flowers-drop.md delete mode 100644 .changeset/loud-lies-film.md delete mode 100644 .changeset/loud-paws-allow.md delete mode 100644 .changeset/lovely-loops-ring.md delete mode 100644 .changeset/lucky-cats-stand.md delete mode 100644 .changeset/lucky-pianos-count.md delete mode 100644 .changeset/lucky-worlds-share.md delete mode 100644 .changeset/major-rats-raise.md delete mode 100644 .changeset/mark-registration.md delete mode 100644 .changeset/mean-flies-play.md delete mode 100644 .changeset/mean-loops-peel.md delete mode 100644 .changeset/merge-connector-into-link.md delete mode 100644 .changeset/metal-flowers-sneeze.md delete mode 100644 .changeset/mighty-weeks-try.md delete mode 100644 .changeset/modern-nails-kiss.md delete mode 100644 .changeset/neat-vapors-shift.md delete mode 100644 .changeset/new-pans-serve.md delete mode 100644 .changeset/new-turtles-clean.md delete mode 100644 .changeset/nice-regions-ask.md delete mode 100644 .changeset/nine-badgers-teach.md delete mode 100644 .changeset/nine-carrots-grin.md delete mode 100644 .changeset/nine-pens-design.md delete mode 100644 .changeset/ninety-ghosts-taste.md delete mode 100644 .changeset/ninety-melons-tickle.md delete mode 100644 .changeset/odd-pears-float.md delete mode 100644 .changeset/old-lions-hide.md delete mode 100644 .changeset/open-bushes-run.md delete mode 100644 .changeset/open-houses-vanish.md delete mode 100644 .changeset/orientation-to-valueaxis.md delete mode 100644 .changeset/path-lazy-feature-allocation.md delete mode 100644 .changeset/pattern-html-layer.md delete mode 100644 .changeset/per-layer-primitive-variants.md delete mode 100644 .changeset/piechart-arcchart-labels-prop.md delete mode 100644 .changeset/pink-flies-worry.md delete mode 100644 .changeset/pink-hornets-rest.md delete mode 100644 .changeset/pink-showers-hunt.md delete mode 100644 .changeset/plain-rings-itch.md delete mode 100644 .changeset/polite-parts-learn.md delete mode 100644 .changeset/poor-clocks-occur.md delete mode 100644 .changeset/pre.json delete mode 100644 .changeset/pretty-roses-invent.md delete mode 100644 .changeset/primitives-inherit-chart-accessors.md delete mode 100644 .changeset/proud-camels-cut.md delete mode 100644 .changeset/proud-llamas-fold.md delete mode 100644 .changeset/proud-melons-warn.md delete mode 100644 .changeset/public-queens-invite.md delete mode 100644 .changeset/puny-clocks-admire.md delete mode 100644 .changeset/puny-shoes-kiss.md delete mode 100644 .changeset/purple-beers-smile.md delete mode 100644 .changeset/purple-things-count.md delete mode 100644 .changeset/quiet-insects-share.md delete mode 100644 .changeset/quiet-mangos-kneel.md delete mode 100644 .changeset/quiet-rabbits-listen.md delete mode 100644 .changeset/radial-tree-link.md delete mode 100644 .changeset/rare-hats-happen.md delete mode 100644 .changeset/rare-olives-change.md delete mode 100644 .changeset/ready-pumas-sink.md delete mode 100644 .changeset/real-badgers-say.md delete mode 100644 .changeset/rect-data-corners-playground.md delete mode 100644 .changeset/rect-per-corner-corners.md delete mode 100644 .changeset/red-monkeys-sleep.md delete mode 100644 .changeset/remove-context-getters.md delete mode 100644 .changeset/rename-scroll-mode.md delete mode 100644 .changeset/rich-keys-take.md delete mode 100644 .changeset/ripe-numbers-speak.md delete mode 100644 .changeset/sad-chairs-stand.md delete mode 100644 .changeset/scroll-activation-key.md delete mode 100644 .changeset/server-chart-rendering.md delete mode 100644 .changeset/shaggy-dryers-make.md delete mode 100644 .changeset/shaky-animals-wave.md delete mode 100644 .changeset/shaky-dots-go.md delete mode 100644 .changeset/shaky-ends-bake.md delete mode 100644 .changeset/sharp-rockets-jam.md delete mode 100644 .changeset/shiny-mails-hug.md delete mode 100644 .changeset/silver-baboons-smile.md delete mode 100644 .changeset/silver-mugs-leave.md delete mode 100644 .changeset/skip-empty-markinfo-effect.md delete mode 100644 .changeset/slow-hounds-hide.md delete mode 100644 .changeset/slow-streets-look.md delete mode 100644 .changeset/small-moles-jog.md delete mode 100644 .changeset/smart-dots-rule.md delete mode 100644 .changeset/smart-paths-jog.md delete mode 100644 .changeset/smooth-bars-grow.md delete mode 100644 .changeset/smooth-domains-zoom.md delete mode 100644 .changeset/social-masks-teach.md delete mode 100644 .changeset/soft-pens-invite.md delete mode 100644 .changeset/solid-badgers-tan.md delete mode 100644 .changeset/some-frogs-camp.md delete mode 100644 .changeset/sour-hounds-repeat.md delete mode 100644 .changeset/sparkly-beds-dress.md delete mode 100644 .changeset/sparkly-mice-peel.md delete mode 100644 .changeset/spicy-gifts-float.md delete mode 100644 .changeset/spicy-seals-kiss.md delete mode 100644 .changeset/spline-motion-support.md delete mode 100644 .changeset/spline-per-segment-styling.md delete mode 100644 .changeset/spline-reactive-motion.md delete mode 100644 .changeset/spotty-plums-invite.md delete mode 100644 .changeset/spotty-rules-taste.md delete mode 100644 .changeset/subpath-exports.md delete mode 100644 .changeset/swift-gifts-flow.md delete mode 100644 .changeset/tall-mice-tap.md delete mode 100644 .changeset/tall-poems-take.md delete mode 100644 .changeset/tame-lamps-report.md delete mode 100644 .changeset/tangy-lies-strive.md delete mode 100644 .changeset/tasty-states-raise.md delete mode 100644 .changeset/text-fontsize-prop.md delete mode 100644 .changeset/text-format-tween.md delete mode 100644 .changeset/thick-months-join.md delete mode 100644 .changeset/thirty-glasses-pick.md delete mode 100644 .changeset/three-cities-chew.md delete mode 100644 .changeset/tooltip-fade-duration.md delete mode 100644 .changeset/tooltip-item-highlight-fade.md delete mode 100644 .changeset/tooltip-portal.md delete mode 100644 .changeset/tooltip-xy-accessor-overrides.md delete mode 100644 .changeset/tricky-nights-mix.md delete mode 100644 .changeset/tricky-pears-help.md delete mode 100644 .changeset/true-waves-roll.md delete mode 100644 .changeset/twelve-frogs-agree.md delete mode 100644 .changeset/twenty-bushes-hope.md delete mode 100644 .changeset/twenty-teeth-stand.md delete mode 100644 .changeset/violet-gifts-fail.md delete mode 100644 .changeset/violet-horses-walk.md delete mode 100644 .changeset/warm-colors-glow.md delete mode 100644 .changeset/warm-labels-shine.md delete mode 100644 .changeset/warm-mammals-deny.md delete mode 100644 .changeset/warm-women-glow.md delete mode 100644 .changeset/weak-donuts-tan.md delete mode 100644 .changeset/wet-cups-act.md delete mode 100644 .changeset/whole-women-listen.md delete mode 100644 .changeset/wide-berries-invite.md delete mode 100644 .changeset/wide-pillows-march.md delete mode 100644 .changeset/wide-wasps-enjoy.md delete mode 100644 .changeset/witty-clocks-divide.md diff --git a/.changeset/add-boxplot-component.md b/.changeset/add-boxplot-component.md deleted file mode 100644 index c6d436426..000000000 --- a/.changeset/add-boxplot-component.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'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. diff --git a/.changeset/add-dodge-component.md b/.changeset/add-dodge-component.md deleted file mode 100644 index 471bf45bc..000000000 --- a/.changeset/add-dodge-component.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Dodge): Add Dodge component for deterministic non-overlapping layout - -A new composition component (similar to `ForceSimulation`) that packs items along one axis to avoid overlaps. Modeled after [Observable Plot's `dodge` transform](https://observablehq.com/plot/transforms/dodge): - -- `axis`: `'x'` or `'y'` — which axis to dodge along (default `'y'`) -- `anchor`: `'top'`/`'middle'`/`'bottom'` (for `axis='y'`) or `'left'`/`'middle'`/`'right'` (for `axis='x'`) — controls which edge items grow away from -- `padding`: minimum px gap between items -- `r`: collision radius per item (constant or accessor). When omitted, falls back to the chart's `r` accessor / `rScale` (matching `Points`), then to a default of `5`. -- `position`: override the anchor-axis pixel accessor (defaults to chart's `xGet`/`yGet`) - -Yields each item's computed pixel `x`/`y` (and original `index`) via the children snippet, so you can render with any primitive (`Circle`, `Text`, etc.). - -Also includes a `rowHeight` mode that switches from circular to row-based rectangular packing — useful for text labels where circular collision would produce unnecessarily large vertical gaps. The pure `dodge()` algorithm is exported from `Dodge.shared.svelte.ts` for direct use. - -Algorithm modeled after Observable Plot / SveltePlot: maintains an interval tree of placed items keyed by anchor-axis extent, queries it for items in the new item's collision zone, and builds candidate dodge-axis positions from circle-tangency math. Currently implemented as a linear-scan tracker with the same API; can be swapped for a real interval tree without API changes if profiling demands it. diff --git a/.changeset/add-geoclippath-component.md b/.changeset/add-geoclippath-component.md deleted file mode 100644 index 947dfeb53..000000000 --- a/.changeset/add-geoclippath-component.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: New `GeoClipPath` component for clipping content to GeoJSON boundaries in both SVG and Canvas modes diff --git a/.changeset/add-georaster-component.md b/.changeset/add-georaster-component.md deleted file mode 100644 index 024d3c6da..000000000 --- a/.changeset/add-georaster-component.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: New `GeoRaster` component for reprojecting raster imagery (e.g. NASA Blue Marble) onto any d3-geo projection via per-pixel inverse sampling on Canvas diff --git a/.changeset/add-pattern-rects.md b/.changeset/add-pattern-rects.md deleted file mode 100644 index a3871c072..000000000 --- a/.changeset/add-pattern-rects.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Pattern): Add `rects` shape definition for tile patterns for rendering one or more rectangles per pattern tile diff --git a/.changeset/add-smart-label-placement.md b/.changeset/add-smart-label-placement.md deleted file mode 100644 index 3a45f1c52..000000000 --- a/.changeset/add-smart-label-placement.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Labels): Add `smart` placement option - -New `placement="smart"` mode that dynamically positions labels based on neighboring point values (peak, trough, rising, falling) to reduce overlapping. diff --git a/.changeset/add-stats-utils.md b/.changeset/add-stats-utils.md deleted file mode 100644 index f111cfb1d..000000000 --- a/.changeset/add-stats-utils.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'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 diff --git a/.changeset/add-text-segments.md b/.changeset/add-text-segments.md deleted file mode 100644 index fc777bd5c..000000000 --- a/.changeset/add-text-segments.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Text): Add `segments` prop for inline mixed-style text - -New `segments` prop accepts an array of `{ value, class }` objects to render text with different styles (font size, weight, color) inline. Works across SVG (via tspans), Canvas (via sequential measureText/fillText), and HTML layers. Useful for labels that combine a bold name with a lighter value, such as treemap headers. diff --git a/.changeset/add-trail-component.md b/.changeset/add-trail-component.md deleted file mode 100644 index 24ff4a244..000000000 --- a/.changeset/add-trail-component.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: New Trail component for variable-width lines diff --git a/.changeset/add-violin-component.md b/.changeset/add-violin-component.md deleted file mode 100644 index cddfe4c91..000000000 --- a/.changeset/add-violin-component.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'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`. diff --git a/.changeset/add-waffle-component.md b/.changeset/add-waffle-component.md deleted file mode 100644 index c78c7a3e9..000000000 --- a/.changeset/add-waffle-component.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Waffle): Add Waffle component for countable-cell visualizations diff --git a/.changeset/afraid-jobs-say.md b/.changeset/afraid-jobs-say.md deleted file mode 100644 index 6a705dae3..000000000 --- a/.changeset/afraid-jobs-say.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Spline): Support geo projection diff --git a/.changeset/all-papers-unite.md b/.changeset/all-papers-unite.md deleted file mode 100644 index f14eded0f..000000000 --- a/.changeset/all-papers-unite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Prevent submitting forms when clicking legend buttons diff --git a/.changeset/annotation-line-sloped.md b/.changeset/annotation-line-sloped.md deleted file mode 100644 index 75c4e2562..000000000 --- a/.changeset/annotation-line-sloped.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'layerchart': minor ---- - -feat(AnnotationLine): Add `x1`/`y1`/`x2`/`y2` props for sloped lines - -- Pass any combination of `x1`, `y1`, `x2`, `y2` to draw a line between arbitrary points. Missing coordinates fall back to the corresponding axis range (so `x1`/`x2` alone still span the y range, etc.). The existing `x` / `y` shorthand for full-span vertical/horizontal lines is unchanged. -- Labels on sloped lines automatically rotate to follow the line angle (normalized to stay upright), with `labelPlacement`, `labelXOffset`, and `labelYOffset` applied along and perpendicular to the line. diff --git a/.changeset/annotation-point-link-callouts.md b/.changeset/annotation-point-link-callouts.md deleted file mode 100644 index 49d9074c6..000000000 --- a/.changeset/annotation-point-link-callouts.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'layerchart': minor ---- - -feat(AnnotationPoint): Add `link` prop for ring-note style callouts, plus geo projection support - -- Pass `link={true}` or `link={{ type: 'beveled', radius: 20, ... }}` etc. to draw a `` from the ring edge to the label. Any `Link` prop (`type`, `curve`, `sweep`, `radius`, `bend`, `class`, ...) can be passed through. -- Inside a geo ``, `x`/`y` are now interpreted as `[lon, lat]` and projected directly, so `AnnotationPoint` can be used on maps. diff --git a/.changeset/arclabel-component.md b/.changeset/arclabel-component.md deleted file mode 100644 index b5475aaaa..000000000 --- a/.changeset/arclabel-component.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'layerchart': minor ---- - -feat(ArcLabel): New component for positioning text labels on arc segments - -`ArcLabel` is a new marking component for placing text (and optional leader lines) relative to an arc. It's used internally by `PieChart` and `ArcChart` when the `labels` prop is set, but can also be rendered directly inside an `Arc` children snippet. - -Supported placements: - -- `centroid` — at the arc centroid (horizontal text, default) -- `centroid-rotated` — at the centroid, rotated to follow the arc tangent, flipped where needed so text stays upright -- `centroid-radial` — at the centroid, rotated to read along the radial direction (center → outer edge) -- `inner` / `middle` / `outer` — along the inner, medial, or outer arc path (centered via `startOffset: '50%'` by default) -- `callout` — outside the arc with a leader line that bends horizontally to the label - -`ArcLabel` accepts a single `offset` prop that is routed to the placement-appropriate radial padding (centroid offset, `innerPadding`/`outerPadding`, or `calloutLineLength`), plus `calloutLineLength` / `calloutLabelOffset` / `calloutPadding` for fine-grained control of callout leader lines. The leader line renders via the `Path` primitive, so it works in both SVG and Canvas chart layers. diff --git a/.changeset/arctext-centered-default.md b/.changeset/arctext-centered-default.md deleted file mode 100644 index 573ee385b..000000000 --- a/.changeset/arctext-centered-default.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -breaking(Arc): Center arc text along path by default for `inner`/`middle`/`outer` positions - -`getArcTextProps('inner' | 'middle' | 'outer')` now defaults to `startOffset: '50%'` with `textAnchor: 'middle'`, centering the text along the arc path rather than anchoring it at the arc start. When an explicit `startOffset` is provided, the anchor falls back to `'start'` so the text begins at that position (matching prior behavior for callers that set a start offset). diff --git a/.changeset/arctext-inner-padding.md b/.changeset/arctext-inner-padding.md deleted file mode 100644 index 2def49808..000000000 --- a/.changeset/arctext-inner-padding.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Arc): Add `innerPadding` option to `getArcTextProps` / `getTrackTextProps` - -`ArcTextOptions` now supports an `innerPadding` option, symmetric to the existing `outerPadding`. Positive values shrink the inner radius used to build the `inner`/`middle` arc text paths, moving text inward (toward the chart center). Previously, offsetting an `inner`-placed arc label away from the arc edge required overriding the path manually; now it works the same as `outerPadding` does for `outer` text. diff --git a/.changeset/area-y0-baseline-default.md b/.changeset/area-y0-baseline-default.md deleted file mode 100644 index 7ca9f297a..000000000 --- a/.changeset/area-y0-baseline-default.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'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. diff --git a/.changeset/axis-grid-stroke-fill-props.md b/.changeset/axis-grid-stroke-fill-props.md deleted file mode 100644 index be3b22a44..000000000 --- a/.changeset/axis-grid-stroke-fill-props.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Add `stroke` and `fill` props to `Axis` and `Grid` for explicit color control (useful for SSR where CSS variables are unavailable) diff --git a/.changeset/band-scale-transform-brush.md b/.changeset/band-scale-transform-brush.md deleted file mode 100644 index 161c67b05..000000000 --- a/.changeset/band-scale-transform-brush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Chart, BrushState): Add band scale (categorical) support for transform pan/zoom and brush selection. Uses range-rescaling pattern to smoothly zoom and pan categorical bar charts. Automatically constrains panning to data boundaries and prevents zooming out past initial view. diff --git a/.changeset/band-tick-spacing-default.md b/.changeset/band-tick-spacing-default.md deleted file mode 100644 index fc01ca555..000000000 --- a/.changeset/band-tick-spacing-default.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -fix(Axis): Default `tickSpacing` to `null` for categorical band scales, showing all ticks by default instead of reducing them. Use `tickSpacing={80}` to opt-in to tick reducing on categorical band scale axes. diff --git a/.changeset/band-tick-spacing.md b/.changeset/band-tick-spacing.md deleted file mode 100644 index a82f1456b..000000000 --- a/.changeset/band-tick-spacing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -Support `tickSpacing` for band scales on Axis, thinning tick labels when the domain is larger than the available space. Automatically shows more tick labels when zoomed in on band scale transforms. diff --git a/.changeset/bar-html-layer-support.md b/.changeset/bar-html-layer-support.md deleted file mode 100644 index 5d32b7dcf..000000000 --- a/.changeset/bar-html-layer-support.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Bar, Bars): Support `` layer - -Bar/Bars now render in `` layers in addition to `` and ``, including per-corner `rounded` variants (`top`, `bottom`, `left`, `right`, `edge`, and individual corners). Previously, any non-uniform `rounded` value fell through to a `` and was SVG-only. diff --git a/.changeset/beige-bears-joke.md b/.changeset/beige-bears-joke.md deleted file mode 100644 index 09d83d2de..000000000 --- a/.changeset/beige-bears-joke.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: New Connector component (issue #11) diff --git a/.changeset/beige-doodles-shout.md b/.changeset/beige-doodles-shout.md deleted file mode 100644 index 8908ed852..000000000 --- a/.changeset/beige-doodles-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ScatterChart): Change default tooltip mode from `voronoi` to `quadtree` diff --git a/.changeset/beige-trams-check.md b/.changeset/beige-trams-check.md deleted file mode 100644 index 809065228..000000000 --- a/.changeset/beige-trams-check.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Threshold): Properly clip `above` snippet (resolving 1/2 width clipping issues when using Spline) diff --git a/.changeset/better-eagles-scream.md b/.changeset/better-eagles-scream.md deleted file mode 100644 index e9ffbecdb..000000000 --- a/.changeset/better-eagles-scream.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Bars): Fix inverted rect when rendered top-to-bottom or right-to-left. Fixes #540 diff --git a/.changeset/better-pets-divide.md b/.changeset/better-pets-divide.md deleted file mode 100644 index 4412f18e1..000000000 --- a/.changeset/better-pets-divide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(AreaChart|BarChar|LineChart): Use value axis (typically y) property name/accessor for tooltip label if defined as string (ex. `` will use `visitors` instead of `value`) diff --git a/.changeset/big-boxes-shout.md b/.changeset/big-boxes-shout.md deleted file mode 100644 index ce3d215d4..000000000 --- a/.changeset/big-boxes-shout.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(TooltipContext): Handle chart padding when using `quadtree` mode diff --git a/.changeset/blue-doodles-chew.md b/.changeset/blue-doodles-chew.md deleted file mode 100644 index 430f02acf..000000000 --- a/.changeset/blue-doodles-chew.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -breaking(AnnotationLine|AnnotationPoint): Change `labelOffset` into explicit `labelXOffset` and `labelYOffset` for greater control (aligns with AnnotationRange) diff --git a/.changeset/blue-rules-feel.md b/.changeset/blue-rules-feel.md deleted file mode 100644 index 9ba95babe..000000000 --- a/.changeset/blue-rules-feel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Points|Labels): Correctly position when using x1 / y1 scales (issue #773) diff --git a/.changeset/brave-spies-give.md b/.changeset/brave-spies-give.md deleted file mode 100644 index c75aa5d15..000000000 --- a/.changeset/brave-spies-give.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(GeoPath): Fix reactivity with `curve` when using Canvas context diff --git a/.changeset/breezy-breads-pump.md b/.changeset/breezy-breads-pump.md deleted file mode 100644 index a869ca5c6..000000000 --- a/.changeset/breezy-breads-pump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Canvas): Fix pointer events (hit canvas) when using Brave browser with fingerprinting protection enabled diff --git a/.changeset/breezy-donuts-sniff.md b/.changeset/breezy-donuts-sniff.md deleted file mode 100644 index bb4c789da..000000000 --- a/.changeset/breezy-donuts-sniff.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(TooltipContext): Support `quadtree-x` and `quadtree-y` modes. Resolves #525 diff --git a/.changeset/breezy-oranges-drive.md b/.changeset/breezy-oranges-drive.md deleted file mode 100644 index d50da7742..000000000 --- a/.changeset/breezy-oranges-drive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Add geo projection support for primitives (Circle, Rect, etc) diff --git a/.changeset/bright-bubbles-zoom.md b/.changeset/bright-bubbles-zoom.md deleted file mode 100644 index 668a6e369..000000000 --- a/.changeset/bright-bubbles-zoom.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'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. diff --git a/.changeset/bright-stars-float.md b/.changeset/bright-stars-float.md deleted file mode 100644 index 51af30dd2..000000000 --- a/.changeset/bright-stars-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ArcChart): (Re-)disable grid by default (regression from recent refactor) diff --git a/.changeset/brown-terms-tie.md b/.changeset/brown-terms-tie.md deleted file mode 100644 index 0c066f649..000000000 --- a/.changeset/brown-terms-tie.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Tooltip): Correctly set tooltip position on chart enter and exit diff --git a/.changeset/brush-api-refactor.md b/.changeset/brush-api-refactor.md deleted file mode 100644 index 8e2f8aa67..000000000 --- a/.changeset/brush-api-refactor.md +++ /dev/null @@ -1,22 +0,0 @@ ---- -'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 diff --git a/.changeset/brush-selection-constraints.md b/.changeset/brush-selection-constraints.md deleted file mode 100644 index c5e607eef..000000000 --- a/.changeset/brush-selection-constraints.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Brush): Add constraints to `BrushContext` / `BrushState`, similar to `TransformContext`'s `scaleExtent`/`translateExtent`/`constrain`. diff --git a/.changeset/bumpy-breads-rhyme.md b/.changeset/bumpy-breads-rhyme.md deleted file mode 100644 index 13f10d948..000000000 --- a/.changeset/bumpy-breads-rhyme.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(GeoPath): Do not register with hit canavs unless pointer events (onclick, onpointermove, etc) or tooltipContext are defined diff --git a/.changeset/calm-jars-mix.md b/.changeset/calm-jars-mix.md deleted file mode 100644 index 76386fbfc..000000000 --- a/.changeset/calm-jars-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Integrate `annotations` into simplified charts diff --git a/.changeset/canvas-group-opacity.md b/.changeset/canvas-group-opacity.md deleted file mode 100644 index e7bd6e521..000000000 --- a/.changeset/canvas-group-opacity.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'layerchart': patch ---- - -fix(canvas): Compose globalAlpha multiplicatively so Group opacity propagates to children - -Canvas `renderPathData` was overwriting `ctx.globalAlpha` with absolute values for element opacity, fill opacity, and stroke opacity. This meant a parent `` had no effect on child marks rendered on canvas — the child's own opacity (defaulting to 1) would replace the inherited value. - -Now all three sites multiply against the current `globalAlpha`, which correctly composes with ancestor Group opacity set via `save()`/`restore()` scoping. Also removes double-application of element `opacity` inside the fill/stroke blocks (it's already applied at the element level). diff --git a/.changeset/chart-data-precedence.md b/.changeset/chart-data-precedence.md deleted file mode 100644 index 275da05b1..000000000 --- a/.changeset/chart-data-precedence.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Chart): Explicit `` now takes precedence over marks' implicit-series data - -When a mark registered its own filtered dataset via `markInfo` (e.g. a decorative `` showing labels for a subset), two things went wrong: - -1. `ctx.data` would silently switch to the filtered subset via `seriesState.visibleSeriesData`, causing sibling array-driven marks (like ``) to iterate only the subset. -2. An implicit series would be created from the decorative mark, narrowing the domain calculation to only the subset's values. - -Now when `` is explicit (non-empty): -- `ctx.data` always returns the chart's data. -- Marks whose axis accessor matches the chart's axis accessor (including any element of an array accessor like `y={['v1', 'v2']}`) are treated as decorative and don't create implicit series — even if they have their own `data` array. - -Marks with their own data still contribute to `flatData` for domain calculation when their accessor differs from the chart's (the multi-dataset / multi-series scenario). diff --git a/.changeset/chart-disable-text-selection.md b/.changeset/chart-disable-text-selection.md deleted file mode 100644 index 600cec6c0..000000000 --- a/.changeset/chart-disable-text-selection.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Chart): Disable text selection to prevent selection while dragging diff --git a/.changeset/chart-props-no-spread.md b/.changeset/chart-props-no-spread.md deleted file mode 100644 index feea8baaf..000000000 --- a/.changeset/chart-props-no-spread.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -perf(Chart): Eliminate per-instance props spread in `ChartState` diff --git a/.changeset/chart-resolve-domain-series-metadata.md b/.changeset/chart-resolve-domain-series-metadata.md deleted file mode 100644 index 2e1cfb2b5..000000000 --- a/.changeset/chart-resolve-domain-series-metadata.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Chart): Don't compute `[undefined, undefined]` domain when `series` is metadata-only - -When `series` is configured for legend/color metadata only (no per-series `data`, and items lack the series-key properties on the value axis), the value-axis domain calculation collected all-undefined values and returned `[undefined, undefined]`. Combined with `motion`, this threw `Cannot spring undefined values` whenever the series visibility changed (e.g. toggling a legend swatch). - -The series-aware branch now filters out null/undefined values and falls through to the other domain-resolution paths when nothing remains, instead of returning a poisoned extent. diff --git a/.changeset/chatty-flies-bet.md b/.changeset/chatty-flies-bet.md deleted file mode 100644 index 36669a999..000000000 --- a/.changeset/chatty-flies-bet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(HighlightKey): Define `set()` with arrow function to solve `current` access when passed directly diff --git a/.changeset/chatty-shirts-rule.md b/.changeset/chatty-shirts-rule.md deleted file mode 100644 index c6d9377c9..000000000 --- a/.changeset/chatty-shirts-rule.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Canvas): Support disabling the hit canavs (useful when animations are playing) diff --git a/.changeset/chilly-games-hide.md b/.changeset/chilly-games-hide.md deleted file mode 100644 index 6a20d7b9f..000000000 --- a/.changeset/chilly-games-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(TooltipContext): Revert back to pointer events (instead of mouse/touch) but with `touch-action: pan-y`. Provides simplified events while allowing horizontal scrubbing with vertical scrolling. diff --git a/.changeset/chubby-ties-play.md b/.changeset/chubby-ties-play.md deleted file mode 100644 index 05bbcd313..000000000 --- a/.changeset/chubby-ties-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(PieChart): Do not pass `y` accessor to use linear scale fallback diff --git a/.changeset/circle-legend-component.md b/.changeset/circle-legend-component.md deleted file mode 100644 index df16df18f..000000000 --- a/.changeset/circle-legend-component.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'layerchart': minor ---- - -feat(CircleLegend): New component for visualizing radius (`rScale`) values as nested circles - -`CircleLegend` displays a set of bottom-aligned nested circles representing values from a radius scale, useful alongside bubble maps and scatter charts that encode magnitude via circle area. By default it reads `rScale` from the chart context, but a `scale` prop can also be passed to render standalone. - -Supports `tickValues` / `ticks` / `tickFormat` for value selection and formatting, a `title` rendered centered above the circles, and `labelPlacement="right" | "left" | "inline"` to render tick labels with a leader line on either side of the circles or centered inside each circle near the top. diff --git a/.changeset/clean-nights-jog.md b/.changeset/clean-nights-jog.md deleted file mode 100644 index 7aa215bae..000000000 --- a/.changeset/clean-nights-jog.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(AnnotationPoint): Do not propagate mouse/touch move/leave events to TooltipContext after switching from pointer events. Fixes #598 diff --git a/.changeset/clear-ghosts-arrive.md b/.changeset/clear-ghosts-arrive.md deleted file mode 100644 index 7745f181a..000000000 --- a/.changeset/clear-ghosts-arrive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(LineChart): Restore passing xScale / yScale overrides diff --git a/.changeset/clear-moose-rush.md b/.changeset/clear-moose-rush.md deleted file mode 100644 index 1d643eeed..000000000 --- a/.changeset/clear-moose-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -refactor(Chart): Add `debug` prop and update `settings` context diff --git a/.changeset/clear-pears-tickle.md b/.changeset/clear-pears-tickle.md deleted file mode 100644 index 9a12ea4f4..000000000 --- a/.changeset/clear-pears-tickle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -breaking: Change `defaultChartPadding(axis, legend)` to `defaultChartPadding({ axis, legend })` and support overrides (ex. `defaultChartPadding({ left: 50 })`) diff --git a/.changeset/clear-points-care.md b/.changeset/clear-points-care.md deleted file mode 100644 index fc7da17d8..000000000 --- a/.changeset/clear-points-care.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(TooltipContext): Fix touch scrolling on mobile. Fixes #255 diff --git a/.changeset/clip-path-unified.md b/.changeset/clip-path-unified.md deleted file mode 100644 index 5393d0aae..000000000 --- a/.changeset/clip-path-unified.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'layerchart': minor ---- - -feat(ClipPath, RectClipPath, CircleClipPath, GeoClipPath): HTML layer support + unified `path` API - -`ClipPath` now accepts a single `path: string` (SVG path `d` syntax) that drives all three layers: - -- **SVG**: rendered as `` inside the `` element. -- **Canvas**: wrapped in `Path2D` and applied via `ctx.clip(...)`. -- **HTML**: emitted as `clip-path: path("${path}")` on a wrapper `
` covering the chart container. - -This replaces the previous `canvasClip` / `canvasClipDeps` callbacks (and skipped HTML entirely) with a single declarative value. The `clip` snippet is still accepted for advanced/custom SVG content. - -`RectClipPath`, `CircleClipPath`, and `GeoClipPath` are rewritten on top of this — they each compute a path string (d3-geo-path already emits one natively) and pass it through. All three now support `` layers in addition to `` and ``. - -Note: `clip-path: path()` requires Chrome 88+, Safari 13.1+, Firefox 118+. diff --git a/.changeset/clippath-invert.md b/.changeset/clippath-invert.md deleted file mode 100644 index 4f9646697..000000000 --- a/.changeset/clippath-invert.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(ClipPath, RectClipPath, CircleClipPath, GeoClipPath): Add `invert` prop to render content *outside* the clip shape (cutouts/masks) across SVG, Canvas, and HTML layers diff --git a/.changeset/component-tree.md b/.changeset/component-tree.md deleted file mode 100644 index f66ebd7da..000000000 --- a/.changeset/component-tree.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'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. diff --git a/.changeset/connector-orientation-step-curves.md b/.changeset/connector-orientation-step-curves.md deleted file mode 100644 index fde92ec78..000000000 --- a/.changeset/connector-orientation-step-curves.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Connector, Link): Orient d3 step curves by `orientation` - -- Added `orientation?: 'horizontal' | 'vertical'` prop to `Connector` (defaults to `'horizontal'`). `Link` forwards its own orientation so step curves step along the natural flow direction. -- `curveStep`, `curveStepBefore`, and `curveStepAfter` now step along `y` in vertical orientation instead of always stepping along `x`. diff --git a/.changeset/connector-swoop-type.md b/.changeset/connector-swoop-type.md deleted file mode 100644 index 7c50e58fd..000000000 --- a/.changeset/connector-swoop-type.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Connector): Add `'swoop'` connector type - -New `'swoop'` connector type draws a circular arc between source and target, equivalent to ObservablePlot's Arrow `bend` option. Configured via a new `bend` prop (degrees, default `22.5`) — positive bends right (clockwise from source to target), negative bends left, `0` draws a straight line. Works in both cartesian and radial modes; `Link` forwards it automatically. diff --git a/.changeset/context-bind-state-rename.md b/.changeset/context-bind-state-rename.md deleted file mode 100644 index 4a472013f..000000000 --- a/.changeset/context-bind-state-rename.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -'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 -- -+ - -- -+ -``` diff --git a/.changeset/cozy-moments-work.md b/.changeset/cozy-moments-work.md deleted file mode 100644 index ea1aab111..000000000 --- a/.changeset/cozy-moments-work.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Highlight|TooltipContext): Support xInterval / yInterval diff --git a/.changeset/crazy-ads-appear.md b/.changeset/crazy-ads-appear.md deleted file mode 100644 index 2b29de706..000000000 --- a/.changeset/crazy-ads-appear.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(TooltipContext): Fix `band` mode regression when both x/y are scaleBand (ex. punchcard chart) diff --git a/.changeset/crazy-friends-talk.md b/.changeset/crazy-friends-talk.md deleted file mode 100644 index 86d37d715..000000000 --- a/.changeset/crazy-friends-talk.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'layerchart': minor ---- - -- Made `ForceSimulation` generic over its nodes and links, i.e. `ForceSimulation.` -- Exposed `links` via `children` snippet of `ForceSimulation`. diff --git a/.changeset/cruel-cameras-begin.md b/.changeset/cruel-cameras-begin.md deleted file mode 100644 index 5b14ebd06..000000000 --- a/.changeset/cruel-cameras-begin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -breaking(Treemap): Remove `selected` prop diff --git a/.changeset/cruel-rats-taste.md b/.changeset/cruel-rats-taste.md deleted file mode 100644 index 076131b31..000000000 --- a/.changeset/cruel-rats-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Spline): Add `value` to `startContent` and `endContent` snippets to easily access the `x` and `y` data values diff --git a/.changeset/curly-lies-write.md b/.changeset/curly-lies-write.md deleted file mode 100644 index 4c9009fbe..000000000 --- a/.changeset/curly-lies-write.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Canvas): Only apply text/font properties to canvas to improve performance diff --git a/.changeset/curly-papers-follow.md b/.changeset/curly-papers-follow.md deleted file mode 100644 index d4bad742a..000000000 --- a/.changeset/curly-papers-follow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(AnnotationRange|TooltipContext|Highlight): Fix using interval scales with reversed data (ex. xReverse) diff --git a/.changeset/cute-donkeys-greet.md b/.changeset/cute-donkeys-greet.md deleted file mode 100644 index 68b3ba32a..000000000 --- a/.changeset/cute-donkeys-greet.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(SimplifiedCharts): Properly handle `legend` prop as object when determining bottom padding diff --git a/.changeset/cyan-cougars-occur.md b/.changeset/cyan-cougars-occur.md deleted file mode 100644 index cc2bfe564..000000000 --- a/.changeset/cyan-cougars-occur.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Axis): Fix display of axis labels diff --git a/.changeset/dark-pandas-start.md b/.changeset/dark-pandas-start.md deleted file mode 100644 index 1e6cec44b..000000000 --- a/.changeset/dark-pandas-start.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -Decoupled `ForceSimulation` from `ChartContext`, by taking nodes and links via `data` prop. diff --git a/.changeset/dasharray-prop.md b/.changeset/dasharray-prop.md deleted file mode 100644 index 5fb288a0e..000000000 --- a/.changeset/dasharray-prop.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Line, Rect, Circle, Text): Multi-layer compatible `dashArray` and inline color props - -- Added a typed `dashArray` prop to `Line`, `Rect`, and `Circle`. Accepts a number, array, or SVG-style string and maps to `stroke-dasharray` (SVG), `setLineDash` (Canvas), and either `repeating-linear-gradient` (HTML lines) or `border-style: dashed` (HTML borders). Previously dashed styling was SVG-only when applied via CSS class or attribute. -- `Text` and `Line` HTML branches now honor the `fill`/`stroke` props as inline `color`/`background`, so prop-based colors work across all three layers (not just SVG/Canvas). -- `Grid.x`/`Grid.y` and `Axis.grid` now accept `stroke`, `strokeWidth`, `opacity`, and `dashArray` in their object form, matching the props forwarded to the underlying line. -- `Rule` already forwarded arbitrary Line props via spread; `dashArray` now works there unchanged. -- Exports `parseDashArray` and `dashArrayToGradient` helpers from `path` utils. diff --git a/.changeset/deep-signs-listen.md b/.changeset/deep-signs-listen.md deleted file mode 100644 index 516facbb0..000000000 --- a/.changeset/deep-signs-listen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Text): Apply `fill: currentColor` to support more straightforward way of changing color (ex. `class="text-red-500"` or `style="color:red"`) diff --git a/.changeset/default-chart-padding.md b/.changeset/default-chart-padding.md deleted file mode 100644 index 9df6fe0b5..000000000 --- a/.changeset/default-chart-padding.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Default chart padding now applied when using ChartChildren layout (marks snippet) - -When `` 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. diff --git a/.changeset/dirty-kings-send.md b/.changeset/dirty-kings-send.md deleted file mode 100644 index e05461c25..000000000 --- a/.changeset/dirty-kings-send.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Support passing `FormatConfig` (ex. `{ type: '...', options: { ... } }`) anywhere `FormatType` is supported to simplify custom formatting (ex. `variant`) diff --git a/.changeset/domain-extent-original-to-data.md b/.changeset/domain-extent-original-to-data.md deleted file mode 100644 index ca76ca8a3..000000000 --- a/.changeset/domain-extent-original-to-data.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'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 -- -+ -``` diff --git a/.changeset/download-chart-utils.md b/.changeset/download-chart-utils.md deleted file mode 100644 index efc81d1d2..000000000 --- a/.changeset/download-chart-utils.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: add `downloadImage`, `downloadSvg`, `getChartImageBlob`, and `getChartSvgString` utilities to export charts as PNG/JPEG/WebP images or SVG files diff --git a/.changeset/early-bats-wait.md b/.changeset/early-bats-wait.md deleted file mode 100644 index 66160a810..000000000 --- a/.changeset/early-bats-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Tooltip): Apply inverse transform for quadtree lookup when zoomed/panned diff --git a/.changeset/early-peaches-accept.md b/.changeset/early-peaches-accept.md deleted file mode 100644 index 08fd61a41..000000000 --- a/.changeset/early-peaches-accept.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Treemap): Add `maintainAspectRatio` (default: false) to opt into tiling function adjustment (primarily for zoom) diff --git a/.changeset/easy-candies-wait.md b/.changeset/easy-candies-wait.md deleted file mode 100644 index cedf5a0c4..000000000 --- a/.changeset/easy-candies-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ForceSimulation): Restore performance to at/near Svelte 4 performance (issue #451) diff --git a/.changeset/eight-shirts-cover.md b/.changeset/eight-shirts-cover.md deleted file mode 100644 index 3d5ee8795..000000000 --- a/.changeset/eight-shirts-cover.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -breaking(Legend): Rename `classes.swatches` to `classes.item` diff --git a/.changeset/eighty-foxes-notice.md b/.changeset/eighty-foxes-notice.md deleted file mode 100644 index e044d746c..000000000 --- a/.changeset/eighty-foxes-notice.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Add Image component. Resolves #628 diff --git a/.changeset/eighty-islands-jam.md b/.changeset/eighty-islands-jam.md deleted file mode 100644 index 4ba875d87..000000000 --- a/.changeset/eighty-islands-jam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Improve memory leak caused by detached DOM increase when using Canvas rendering due to sometimes still rendering Svg components (ex. `` vs ``) (#490) diff --git a/.changeset/eleven-corners-float.md b/.changeset/eleven-corners-float.md deleted file mode 100644 index f299720bc..000000000 --- a/.changeset/eleven-corners-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Highlight): Properly handle area highlights with y-axis time scales diff --git a/.changeset/eleven-crabs-switch.md b/.changeset/eleven-crabs-switch.md deleted file mode 100644 index 463b9c74e..000000000 --- a/.changeset/eleven-crabs-switch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Group): Default `opacity` to `undefined` instead of `1` to allow overriding via class (ex. `opacity-20`) diff --git a/.changeset/eleven-trains-make.md b/.changeset/eleven-trains-make.md deleted file mode 100644 index 9b870746c..000000000 --- a/.changeset/eleven-trains-make.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Support passing `PeriodTypeCode` strings for simplified date formatting and reduce imports. Example: `format={PeriodType.Day}` is now `format="day"`. Also supported with config object for passing additional options (ex. `format={{ type: 'day', options: { variant: 'long' } }}`). Supported for all `format` props include Axis, Labels, Legend and Tooltip. diff --git a/.changeset/empty-bats-stop.md b/.changeset/empty-bats-stop.md deleted file mode 100644 index d430b42ae..000000000 --- a/.changeset/empty-bats-stop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Legend): Improve / simplify responsive use cases with additional default classes (center, shrink, truncate) diff --git a/.changeset/empty-buses-flash.md b/.changeset/empty-buses-flash.md deleted file mode 100644 index f1820437d..000000000 --- a/.changeset/empty-buses-flash.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -docs: Add examples for standalone, daisyUI v5, shadcn-svelte v1, Skeleton v3, and Svelte UX v2 (next) (including light/dark theming) diff --git a/.changeset/every-sheep-rush.md b/.changeset/every-sheep-rush.md deleted file mode 100644 index 605d85ae3..000000000 --- a/.changeset/every-sheep-rush.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -Update dependencies diff --git a/.changeset/evil-bags-dance.md b/.changeset/evil-bags-dance.md deleted file mode 100644 index 9f170d31d..000000000 --- a/.changeset/evil-bags-dance.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(autoScale): Ignore `null` domain values, fixing some brush examples diff --git a/.changeset/evil-flowers-float.md b/.changeset/evil-flowers-float.md deleted file mode 100644 index 424829661..000000000 --- a/.changeset/evil-flowers-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Pattern): Canvas support diff --git a/.changeset/evil-hoops-return.md b/.changeset/evil-hoops-return.md deleted file mode 100644 index eb0bff64f..000000000 --- a/.changeset/evil-hoops-return.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -breaking(Axis): Rename `x="left|right"` and `y="top|bottom"` props with `$` prefix (ex. ``) diff --git a/.changeset/fair-phones-wink.md b/.changeset/fair-phones-wink.md deleted file mode 100644 index 9092c22e9..000000000 --- a/.changeset/fair-phones-wink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -refactor: Rename simplified charts `renderContext` prop to `layer` diff --git a/.changeset/fast-insects-deny.md b/.changeset/fast-insects-deny.md deleted file mode 100644 index 146f3f252..000000000 --- a/.changeset/fast-insects-deny.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(LineChart): Support `orientation="vertical"`. Resolves #640 diff --git a/.changeset/fast-primitives-perf.md b/.changeset/fast-primitives-perf.md deleted file mode 100644 index d7e89796f..000000000 --- a/.changeset/fast-primitives-perf.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -'layerchart': patch ---- - -perf: Optimize primitive component instantiation (~3-5x faster for Rect, Circle, Ellipse, Line, Text, Path, Group) - -- `createMotion`: Fast-path passthrough when no `motion` prop is provided, avoiding `$state`/`$effect` overhead per axis -- `createDataMotionMap`: Short-circuit when `motion` is `undefined`, skipping `parseMotionProp` overhead -- `createKey`: Only create fill/stroke key trackers in canvas layer (skipped for SVG/HTML) -- `registerComponent`: Skip `registerMark` for empty `MarkInfo` (pixel-mode marks) -- All primitives: Skip `$effect` for data motion tracking when no motion is configured -- Rect/Image: Avoid per-axis `parseMotionProp` calls when `motion` is `undefined` diff --git a/.changeset/fiery-lamps-tickle.md b/.changeset/fiery-lamps-tickle.md deleted file mode 100644 index 7292d94a6..000000000 --- a/.changeset/fiery-lamps-tickle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(SeriesState): Support passing `selected` as part of series declaration (Ex. ` `) diff --git a/.changeset/five-stamps-drum.md b/.changeset/five-stamps-drum.md deleted file mode 100644 index d1cbb91cf..000000000 --- a/.changeset/five-stamps-drum.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Marker): Add `square` and `square-stroke` types diff --git a/.changeset/fix-annotation-range-bounds.md b/.changeset/fix-annotation-range-bounds.md deleted file mode 100644 index 30397158a..000000000 --- a/.changeset/fix-annotation-range-bounds.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(AnnotationRange): Don't extend past chart bounds when `x` is omitted on band scales, and treat `null` on either side of `x`/`y` as "extend to chart edge". diff --git a/.changeset/fix-arclabel-canvas-rotation.md b/.changeset/fix-arclabel-canvas-rotation.md deleted file mode 100644 index c38214a09..000000000 --- a/.changeset/fix-arclabel-canvas-rotation.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ArcLabel): Support rotation in Canvas mode - -Changed `centroid-rotated` and `centroid-radial` placements to pass `rotate` prop instead of SVG `transform` string to `Text`, enabling rotation in Canvas rendering. diff --git a/.changeset/fix-area-all-zero.md b/.changeset/fix-area-all-zero.md deleted file mode 100644 index c6ad2b9d7..000000000 --- a/.changeset/fix-area-all-zero.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -'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 diff --git a/.changeset/fix-barchart-diverging-edge-rounding.md b/.changeset/fix-barchart-diverging-edge-rounding.md deleted file mode 100644 index 068fcf76b..000000000 --- a/.changeset/fix-barchart-diverging-edge-rounding.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(BarChart): automatically round the outer edge of each direction in `stackDiverging` layout diff --git a/.changeset/fix-canvas-currentcolor.md b/.changeset/fix-canvas-currentcolor.md deleted file mode 100644 index 235d43837..000000000 --- a/.changeset/fix-canvas-currentcolor.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(canvas): Resolve `currentColor` for `fill`/`stroke` (and other style props) diff --git a/.changeset/fix-canvas-pattern-rendering.md b/.changeset/fix-canvas-pattern-rendering.md deleted file mode 100644 index 3dc499d50..000000000 --- a/.changeset/fix-canvas-pattern-rendering.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Pattern): fix alignment and sharply render on high-DPI displays when using Canvas layers diff --git a/.changeset/fix-chart-image-export-sizing.md b/.changeset/fix-chart-image-export-sizing.md deleted file mode 100644 index ca9b6192b..000000000 --- a/.changeset/fix-chart-image-export-sizing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(downloadImage / getChartImageBlob): Fix image download (container sizing and text clipping) diff --git a/.changeset/fix-class-attribute-ts-cast.md b/.changeset/fix-class-attribute-ts-cast.md deleted file mode 100644 index 0504fbe66..000000000 --- a/.changeset/fix-class-attribute-ts-cast.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Remove TypeScript `as` casts from `class={...}` attributes in `Path` and `GeoPoint` to fix unocss compat. diff --git a/.changeset/fix-debug-printscale.md b/.changeset/fix-debug-printscale.md deleted file mode 100644 index d9fa9cca3..000000000 --- a/.changeset/fix-debug-printscale.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -"layerchart": patch ---- - -fix: guard against undefined accessor in printScale - -When activeGetters includes z or r scales that are not configured, the accessor is undefined, causing acc.toString() to throw. Added null check. diff --git a/.changeset/fix-geo-mark-domain.md b/.changeset/fix-geo-mark-domain.md deleted file mode 100644 index 5c40cec7f..000000000 --- a/.changeset/fix-geo-mark-domain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Skip mark x/y/data from domain/series calculation when geo projection is active diff --git a/.changeset/fix-geopath-canvas-tooltip.md b/.changeset/fix-geopath-canvas-tooltip.md deleted file mode 100644 index 3d2a4dd74..000000000 --- a/.changeset/fix-geopath-canvas-tooltip.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(GeoPath): Fix canvas tooltip by conditionally passing onclick to Path, preventing non-interactive overlays from capturing hit canvas events diff --git a/.changeset/fix-geopath-undefined-handlers.md b/.changeset/fix-geopath-undefined-handlers.md deleted file mode 100644 index 60c164a51..000000000 --- a/.changeset/fix-geopath-undefined-handlers.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(GeoPath): Avoid passing `undefined` event handlers to underlying `Path`, preventing a Svelte error while preserving canvas hit-testing for non-interactive paths diff --git a/.changeset/fix-implicit-series-domain.md b/.changeset/fix-implicit-series-domain.md deleted file mode 100644 index f43131e51..000000000 --- a/.changeset/fix-implicit-series-domain.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ChartState): Don't create spurious implicit series when mark accessor matches chart's own axis accessor, fixing domain corruption for heatmap/Cell charts diff --git a/.changeset/fix-pattern-canvas.md b/.changeset/fix-pattern-canvas.md deleted file mode 100644 index 7f570770f..000000000 --- a/.changeset/fix-pattern-canvas.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Pattern): Restore canvas layer support by registering as a `group` node so snippet children (e.g. ``) render correctly diff --git a/.changeset/fix-pie-arc-xrange.md b/.changeset/fix-pie-arc-xrange.md deleted file mode 100644 index bb9f012f8..000000000 --- a/.changeset/fix-pie-arc-xrange.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Pie and Arc components now correctly use Chart's `xRange` prop for angle degrees instead of the computed viewport pixel range, and compute radius from chart dimensions instead of scale range diff --git a/.changeset/fix-scale-band-invert.md b/.changeset/fix-scale-band-invert.md deleted file mode 100644 index b653c666d..000000000 --- a/.changeset/fix-scale-band-invert.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(scaleBandInvert): Account for range offset in band scale inversion. Previously assumed range started at 0, causing incorrect pixel-to-category mapping when the scale range was transformed. diff --git a/.changeset/fix-series-state-effect-root.md b/.changeset/fix-series-state-effect-root.md deleted file mode 100644 index 74f51974a..000000000 --- a/.changeset/fix-series-state-effect-root.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': patch ---- - -fix(SeriesState): Avoid `derived_inert` crash when chart unmounts under a `` - -The `selectedKeys` sync effect was wrapped in `$effect.root`, creating an isolated scope that survived chart unmount. When the parent chart was destroyed (e.g. an example reloading inside the docs `` after an async `$derived` re-evaluated), the `#series` derived became inert while the orphaned effect kept reading it — producing `Reading a derived belonging to a now-destroyed effect may result in stale values` warnings followed by `TypeError: e.some is not a function`. The effect now lives in the constructor, scoped to the component that instantiated `SeriesState`, so it is torn down with the chart. diff --git a/.changeset/fix-spline-canvas-class-opacity.md b/.changeset/fix-spline-canvas-class-opacity.md deleted file mode 100644 index 7b2f4fbf6..000000000 --- a/.changeset/fix-spline-canvas-class-opacity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Spline): Allow CSS class `opacity` to fade lines on the Canvas layer. `Spline` was always passing `opacity={1}` to the underlying `Path` when no series fade was active, which became `constantStyles.opacity = 1` in the canvas renderer and shadowed the value resolved from a user's `class` (e.g. `class="opacity-20"`). Now skip passing `opacity` when the computed series fade is the no-fade default, so the class can take effect — matching SVG behavior where CSS class rules override the presentation attribute. diff --git a/.changeset/fix-spline-series-props-opacity.md b/.changeset/fix-spline-series-props-opacity.md deleted file mode 100644 index b70da065b..000000000 --- a/.changeset/fix-spline-series-props-opacity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Spline): Restore `series.props.opacity` (and other style props) precedence over the computed series fade opacity. Regression introduced by per-segment styling refactor where the explicit `opacity` was spread after `series.props`, clobbering per-series opacity values (e.g. `series={[{ props: { opacity: 0.1 } }, ...]}`). diff --git a/.changeset/fix-text-negative-string-position.md b/.changeset/fix-text-negative-string-position.md deleted file mode 100644 index d18b1e036..000000000 --- a/.changeset/fix-text-negative-string-position.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Allow negative string values (e.g. `y="-6"`) in `Text` position props to be treated as pixel values instead of data property names diff --git a/.changeset/fix-transform-projection-reactivity.md b/.changeset/fix-transform-projection-reactivity.md deleted file mode 100644 index 46013dba1..000000000 --- a/.changeset/fix-transform-projection-reactivity.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(TransformContext): Reactively sync `processTranslate` and `disablePointer` to TransformState when props change. Fixes inverted globe dragging when dynamically switching between flat and globe projections. diff --git a/.changeset/fix-tween-on-mount.md b/.changeset/fix-tween-on-mount.md deleted file mode 100644 index 631e956d9..000000000 --- a/.changeset/fix-tween-on-mount.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Arc, RectClipPath, ChartClipPath): Restore on-mount tween animations - -Two related regressions introduced in the layer-component split (#848) prevented `motion` + `initial*` props from animating on mount. - -**`Arc`** — `motion`, `value`, `initialValue` and the rest of Arc's geometry props (`domain`, `range`, `startAngle`, `endAngle`, `innerRadius`, `outerRadius`, `cornerRadius`, `padAngle`, `track*`, `offset`) were not destructured in `Arc.base.svelte`, so they leaked through `{...restProps}` onto the inner ``. The forwarded `motion` made `Path` *also* tween the path-string on top of the end-angle tween that `ArcState` already drives, producing visibly wrong arcs (NaN coordinates, runaway radii). They are now extracted and passed explicitly to `ArcState`. - -**`RectClipPath` / `ChartClipPath`** — `motion`, `initialX`, `initialY`, `initialWidth`, `initialHeight` were declared on the type but never consumed: the path was a plain `$derived` of the static `x`/`y`/`width`/`height` props, so passing `` rendered the final width on mount with no animation. Each dimension now flows through its own `createMotion` (using the corresponding `initial*` value as the animation start), and the path is built from the animated values. diff --git a/.changeset/fix-x1-y1-domain-filter-without-series.md b/.changeset/fix-x1-y1-domain-filter-without-series.md deleted file mode 100644 index ee74dec0f..000000000 --- a/.changeset/fix-x1-y1-domain-filter-without-series.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ChartState): Don't filter explicit `x1Domain`/`y1Domain` by visible series when no series are configured. Restores grouped layout for composable `` usage (e.g. `` with `x1`/`x1Domain`/`x1Range`) where the visible-series filter previously emptied the secondary band scale domain, collapsing all bars to a single category position. diff --git a/.changeset/flat-arcs-heal.md b/.changeset/flat-arcs-heal.md deleted file mode 100644 index e46196197..000000000 --- a/.changeset/flat-arcs-heal.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: `flattenPathData` now handles relative arc commands, fixing rounded bars starting below the baseline during mount animation diff --git a/.changeset/flat-cases-enter.md b/.changeset/flat-cases-enter.md deleted file mode 100644 index 6f4f9633c..000000000 --- a/.changeset/flat-cases-enter.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -refactor: Move contexts to separate `$lib/contexts` module diff --git a/.changeset/four-lizards-win.md b/.changeset/four-lizards-win.md deleted file mode 100644 index 1cf12426b..000000000 --- a/.changeset/four-lizards-win.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Layer): Allow `type` to be optional, fallbacking back to `settings.layer` type diff --git a/.changeset/four-taxes-beam.md b/.changeset/four-taxes-beam.md deleted file mode 100644 index cf4a1af96..000000000 --- a/.changeset/four-taxes-beam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Calendar): Pass `cellSize` to children snippet (useful when responsive) diff --git a/.changeset/free-teeth-live.md b/.changeset/free-teeth-live.md deleted file mode 100644 index 72f6b9a3c..000000000 --- a/.changeset/free-teeth-live.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Axis): Correctly place multiline parts based on placement diff --git a/.changeset/fruity-pillows-agree.md b/.changeset/fruity-pillows-agree.md deleted file mode 100644 index 301a63461..000000000 --- a/.changeset/fruity-pillows-agree.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Axis): Key using tick value instead string representation to support millisecond precision diff --git a/.changeset/fruity-pumas-stick.md b/.changeset/fruity-pumas-stick.md deleted file mode 100644 index f630f45de..000000000 --- a/.changeset/fruity-pumas-stick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Rect): Support rounded (rx/ry) in Canvas layers (fixes #481) diff --git a/.changeset/full-pens-cheat.md b/.changeset/full-pens-cheat.md deleted file mode 100644 index 5b530b4e9..000000000 --- a/.changeset/full-pens-cheat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Axis): Filter distinct tick values (useful when manually injecting extra values) diff --git a/.changeset/full-times-guess.md b/.changeset/full-times-guess.md deleted file mode 100644 index 513e967a7..000000000 --- a/.changeset/full-times-guess.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Support global settings (layer type, debug, etc) diff --git a/.changeset/funny-otters-kick.md b/.changeset/funny-otters-kick.md deleted file mode 100644 index b86a03647..000000000 --- a/.changeset/funny-otters-kick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(TooltipContext): Support `band` mode with time scale (similar to band scale) diff --git a/.changeset/funny-wasps-heal.md b/.changeset/funny-wasps-heal.md deleted file mode 100644 index 21134b30f..000000000 --- a/.changeset/funny-wasps-heal.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Axis): Add time duration aware tick value/format support diff --git a/.changeset/geo-context-rename.md b/.changeset/geo-context-rename.md deleted file mode 100644 index 1b2f39b34..000000000 --- a/.changeset/geo-context-rename.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'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 -- -+ -``` diff --git a/.changeset/geo-default-translate-center.md b/.changeset/geo-default-translate-center.md deleted file mode 100644 index da0db4c2d..000000000 --- a/.changeset/geo-default-translate-center.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Default geo projection `translate` to container center when `translate` and `fitGeojson` are not specified, instead of using d3-geo's fixed default (`[480, 250]`) diff --git a/.changeset/geo-legend-component.md b/.changeset/geo-legend-component.md deleted file mode 100644 index 6294b2114..000000000 --- a/.changeset/geo-legend-component.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -feat(GeoLegend): New scale-bar legend showing real-world distance for the current `Chart` projection - -`GeoLegend` reads the active geo projection from the chart context and renders a labeled scale bar with tick subdivisions. By default it picks a "nice" round distance that covers ~25% of the chart width, but `distance` can be passed for an explicit value. Supports `units="km" | "mi"`, configurable `ticks`, `tickFormat`, `title`, and the standard `placement` props. Inspired by Harry Stevens' [d3-geo-scale-bar](https://observablehq.com/@harrystevens/introducing-d3-geo-scale-bar). diff --git a/.changeset/geo-relative-scale-translate-extent.md b/.changeset/geo-relative-scale-translate-extent.md deleted file mode 100644 index 6994be59f..000000000 --- a/.changeset/geo-relative-scale-translate-extent.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Chart): In projection mode, `scaleExtent` and `translateExtent` are now interpreted as relative values (like d3-zoom). `scaleExtent: [0.5, 8]` means 0.5x to 8x of the fitted projection scale. `translateExtent` is offset from the initial fitted position in pixels. diff --git a/.changeset/geolegend-reference-scale.md b/.changeset/geolegend-reference-scale.md deleted file mode 100644 index 7dae661b7..000000000 --- a/.changeset/geolegend-reference-scale.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Support pre-projected topologies in `GeoLegend` via `referenceScale` - -Add a `referenceScale` prop to `GeoLegend` for charts that render pre-projected data with `geoIdentity` (e.g. `us-atlas`'s `counties-albers-10m` / `states-albers-10m`, pre-projected with `geoAlbersUsa().scale(1300)`). When provided, pixels-per-distance is derived from the chart's fit scale and the supplied base scale, bypassing the `projection.invert` + `geoDistance` path which only works for real lon/lat projections. The `GeoPath` bubble-map example now renders a correct scale bar. diff --git a/.changeset/giant-donuts-yell.md b/.changeset/giant-donuts-yell.md deleted file mode 100644 index 70f5ca405..000000000 --- a/.changeset/giant-donuts-yell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(BarChart): Radial support (vertical and horizontal) (issue #469) diff --git a/.changeset/globe-scroll-zoom.md b/.changeset/globe-scroll-zoom.md deleted file mode 100644 index 3d8fc0290..000000000 --- a/.changeset/globe-scroll-zoom.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Chart): Enable scroll zoom for globe projections by including `scale: true` in default `transformApply` for globes. diff --git a/.changeset/good-glasses-design.md b/.changeset/good-glasses-design.md deleted file mode 100644 index d19b1b3ca..000000000 --- a/.changeset/good-glasses-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -Removed lodash-es dependency diff --git a/.changeset/green-hotels-strive.md b/.changeset/green-hotels-strive.md deleted file mode 100644 index 29a16086b..000000000 --- a/.changeset/green-hotels-strive.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Area|Highlight): Properly handling diveraging stack layouts for negative values (line, highlight point) diff --git a/.changeset/green-mirrors-retire.md b/.changeset/green-mirrors-retire.md deleted file mode 100644 index 534f0cdd5..000000000 --- a/.changeset/green-mirrors-retire.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Arc/Text): Arc path labels with inner/outer/middle placement and smart flipping (issue #7) diff --git a/.changeset/green-poems-drop.md b/.changeset/green-poems-drop.md deleted file mode 100644 index b175555ba..000000000 --- a/.changeset/green-poems-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Bar): Fix browser lockup when switching between group and stack layouts diff --git a/.changeset/grumpy-ties-mix.md b/.changeset/grumpy-ties-mix.md deleted file mode 100644 index 3ab91e3a4..000000000 --- a/.changeset/grumpy-ties-mix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(AreaChart|LineChart|DefaultTooltip): Handle per-series data with different length diff --git a/.changeset/happy-bats-eat.md b/.changeset/happy-bats-eat.md deleted file mode 100644 index 0be3a510e..000000000 --- a/.changeset/happy-bats-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Calendar): Respect `start` instead of always start of year diff --git a/.changeset/heavy-signs-kick.md b/.changeset/heavy-signs-kick.md deleted file mode 100644 index ca1922f39..000000000 --- a/.changeset/heavy-signs-kick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Highlight): Support passing `opacity` diff --git a/.changeset/honest-hoops-peel.md b/.changeset/honest-hoops-peel.md deleted file mode 100644 index a1ef67816..000000000 --- a/.changeset/honest-hoops-peel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(LineChart): Change default tooltip mode from `bisect-x` to `quadtree-x` (works with catagorical data and does not require data to be sorted) diff --git a/.changeset/hot-dots-stick.md b/.changeset/hot-dots-stick.md deleted file mode 100644 index e1b9dbd87..000000000 --- a/.changeset/hot-dots-stick.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Circle|Rect): Support passing children snippet for Html layers diff --git a/.changeset/hot-pigs-push.md b/.changeset/hot-pigs-push.md deleted file mode 100644 index a9b288c4c..000000000 --- a/.changeset/hot-pigs-push.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(SimplifiedChart): Still add selected legend item opacity when item classes are also applied diff --git a/.changeset/html-background-origin.md b/.changeset/html-background-origin.md deleted file mode 100644 index 3b8a80c2a..000000000 --- a/.changeset/html-background-origin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Rect): On the `` layer, set `background-origin: border-box` so fills/patterns start at the outer edge — previously the CSS `background` shorthand reset origin to `padding-box`, shifting patterns inward by `border-width` when a stroke was applied. diff --git a/.changeset/html-box-sizing.md b/.changeset/html-box-sizing.md deleted file mode 100644 index a9151bacd..000000000 --- a/.changeset/html-box-sizing.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Rect, Circle, Ellipse): Apply `box-sizing: border-box` on the `` layer so the visual extent equals `width`×`height` (or `r * 2`, `rx * 2`×`ry * 2`) — the border is drawn within that extent instead of added to it, matching SVG bounds. diff --git a/.changeset/html-circle-ellipse-pattern-fills.md b/.changeset/html-circle-ellipse-pattern-fills.md deleted file mode 100644 index 6919539b4..000000000 --- a/.changeset/html-circle-ellipse-pattern-fills.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Circle, Ellipse): Support pattern/gradient `fill` values on the `` layer by switching from `background-color` to the `background` shorthand (with `background-origin: border-box` to keep patterns aligned under the border). Accepts values produced by `` / `` in HTML mode. diff --git a/.changeset/html-default-border-width.md b/.changeset/html-default-border-width.md deleted file mode 100644 index 866886c9c..000000000 --- a/.changeset/html-default-border-width.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Rect, Circle, Ellipse): On the `` layer, default `border-width` to `1px` when `stroke` is set without an explicit `strokeWidth`, matching SVG's implicit `stroke-width: 1`. Also ensures Circle/Ellipse `border-width` gets the required `px` unit. diff --git a/.changeset/huge-boats-fix.md b/.changeset/huge-boats-fix.md deleted file mode 100644 index b9c90cb80..000000000 --- a/.changeset/huge-boats-fix.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -docs: Document each component's context support (svg, canvas, html) with interactive toggle diff --git a/.changeset/huge-lions-do.md b/.changeset/huge-lions-do.md deleted file mode 100644 index 71ac16388..000000000 --- a/.changeset/huge-lions-do.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': major ---- - -feat: New docs site diff --git a/.changeset/huge-regions-live.md b/.changeset/huge-regions-live.md deleted file mode 100644 index b77d54599..000000000 --- a/.changeset/huge-regions-live.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Legend): Add `selected` prop to fade out unselected items (if passed and non-empty) diff --git a/.changeset/huge-rocks-sip.md b/.changeset/huge-rocks-sip.md deleted file mode 100644 index 919cb606a..000000000 --- a/.changeset/huge-rocks-sip.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -docs: Add non-radial BarChart duration example and improve radial example diff --git a/.changeset/hull-style-props.md b/.changeset/hull-style-props.md deleted file mode 100644 index 7a459c67a..000000000 --- a/.changeset/hull-style-props.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Hull): Add CommonStyleProps (fill, fillOpacity, stroke, strokeOpacity, strokeWidth, opacity) for Canvas layer compatibility diff --git a/.changeset/icy-llamas-jump.md b/.changeset/icy-llamas-jump.md deleted file mode 100644 index 939058469..000000000 --- a/.changeset/icy-llamas-jump.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Chart): Support passing explicit `width` and `height` instead of requiring parent dimensions diff --git a/.changeset/image-pointer-events-default.md b/.changeset/image-pointer-events-default.md deleted file mode 100644 index da4cf7adc..000000000 --- a/.changeset/image-pointer-events-default.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Image): Stop disabling pointer events by default diff --git a/.changeset/khaki-pugs-hammer.md b/.changeset/khaki-pugs-hammer.md deleted file mode 100644 index 948dc5c34..000000000 --- a/.changeset/khaki-pugs-hammer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(force-simulation): Fixed a bug that would sometimes keep a simulation running, when its inputs change, even if `alpha < alphaMin` diff --git a/.changeset/kind-melons-invent.md b/.changeset/kind-melons-invent.md deleted file mode 100644 index 8315b7895..000000000 --- a/.changeset/kind-melons-invent.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Bar): Fix bar rounding direction when using xReverse/yReverse with interval scales diff --git a/.changeset/kind-shirts-sniff.md b/.changeset/kind-shirts-sniff.md deleted file mode 100644 index 7c94ec6de..000000000 --- a/.changeset/kind-shirts-sniff.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Add `applyLanes()` array util to support densely packing timelines diff --git a/.changeset/labels-center-placement.md b/.changeset/labels-center-placement.md deleted file mode 100644 index 89298166f..000000000 --- a/.changeset/labels-center-placement.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Labels): Add `middle` placement and change `center` to center within the bar body - -`placement="center"` now positions the label at the center of the bar body (between the value edge and the baseline). The previous `center` behavior (label aligned to the value edge with a middle anchor) is now available as the new `placement="middle"`. diff --git a/.changeset/large-spiders-stay.md b/.changeset/large-spiders-stay.md deleted file mode 100644 index 3be5f9b84..000000000 --- a/.changeset/large-spiders-stay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Rule): Support using as data-driven mark (ex. candlestick, lollipop) by default (`` using Chart accessors) or passing explicit `x`/`y` accessors (ex. ``). Resolves #64 diff --git a/.changeset/late-glasses-itch.md b/.changeset/late-glasses-itch.md deleted file mode 100644 index 899395fb8..000000000 --- a/.changeset/late-glasses-itch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(TooltipContext): Add `touchEvents` to control touch event behavior. Defaults to `pan-y` to allow vertical scrolling but horizontal scrubbing. diff --git a/.changeset/layer-context-rename.md b/.changeset/layer-context-rename.md deleted file mode 100644 index 3b2f7f6a4..000000000 --- a/.changeset/layer-context-rename.md +++ /dev/null @@ -1,15 +0,0 @@ ---- -'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' -``` diff --git a/.changeset/lazy-load-opt-in-features.md b/.changeset/lazy-load-opt-in-features.md deleted file mode 100644 index cf63c1c7c..000000000 --- a/.changeset/lazy-load-opt-in-features.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'layerchart': patch ---- - -perf: Lazy-load opt-in features in `core` path - -5 components/dependencies that previously sat in every `` user's sync graph are now dynamically imported only when the corresponding feature is used: - -- `BrushContext` in `Chart` — only loads when `` is set (default `undefined`) -- `DefaultTooltip` in `ChartChildren` — only loads when `tooltipContext` is set and no custom `tooltip` snippet is provided -- `d3-quadtree` in `TooltipContext` — only loads when `mode` is `'quadtree'`, `'quadtree-x'`, or `'quadtree-y'` -- `Spline` in `Grid` — only loads when rendering radial linear grid lines (`` with `radialY="linear"`) -- `Bar` in `Highlight` — only loads when `` is set (default `false`) - -Result: **~10 KB gz off `core`** (115.6 → 105.25 KB) and comparable savings on every cartesian/geo/graph/hierarchy scenario, with no impact on rendered output for users who already opt into these features. - -Also switches internal `@layerstack/svelte-actions` imports from the barrel (`@layerstack/svelte-actions`) to sub-paths (`@layerstack/svelte-actions/styles`, `@layerstack/svelte-actions/portal`). No production bundle effect — bundlers already tree-shake the unused `popover.js` — but it stops the Svelte REPL/CDN from eagerly fetching `@floating-ui/dom` (popover's transitive dep) when consumers load `layerchart` from a CDN. diff --git a/.changeset/legal-parrots-beam.md b/.changeset/legal-parrots-beam.md deleted file mode 100644 index 9e6df5056..000000000 --- a/.changeset/legal-parrots-beam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Voronoi): Support passing `r` to define a max radius (clip path) diff --git a/.changeset/legend-tooltip-indicator.md b/.changeset/legend-tooltip-indicator.md deleted file mode 100644 index 5983dfc09..000000000 --- a/.changeset/legend-tooltip-indicator.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Legend, CircleLegend): Show an indicator of the current tooltip value on the legend - -`Legend` (ramp variant) now draws a small upward-pointing arrow below the color ramp at the position of the currently hovered value, and `CircleLegend` draws a 50%-opacity filled circle at the corresponding radius. Both auto-read the hovered data from `ctx.tooltip.data` and pipe it through the chart's color (`ctx.c`) / radius (`ctx.r`) accessors, so wiring is automatic for charts that configure `c` / `r` / `cScale` / `rScale` via `Chart` props. - -A new `value` prop on both components allows explicitly setting the indicator value (overriding the auto-detection), useful when the tooltip data shape doesn't match the chart's accessor. - -For `scaleThreshold` / `scaleQuantize` / `scaleQuantile` scales, the `Legend` indicator centers on the matching bucket swatch. diff --git a/.changeset/lemon-bats-change.md b/.changeset/lemon-bats-change.md deleted file mode 100644 index 88f901c66..000000000 --- a/.changeset/lemon-bats-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(ForceSimulation): Added `onNodesChange` callback to `ForceSimulation` diff --git a/.changeset/little-flowers-drop.md b/.changeset/little-flowers-drop.md deleted file mode 100644 index 3c249fb30..000000000 --- a/.changeset/little-flowers-drop.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Blur): Add Canvas support diff --git a/.changeset/loud-lies-film.md b/.changeset/loud-lies-film.md deleted file mode 100644 index ca568813f..000000000 --- a/.changeset/loud-lies-film.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Axis): Use `format` to filter ticks (integer and date/time). Helpful to keep ticks above a threshold for wide charts or short durations. diff --git a/.changeset/loud-paws-allow.md b/.changeset/loud-paws-allow.md deleted file mode 100644 index c0e401590..000000000 --- a/.changeset/loud-paws-allow.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(GeoPath): Improve performance by only using custom geoCurvePath when `curve` overridden diff --git a/.changeset/lovely-loops-ring.md b/.changeset/lovely-loops-ring.md deleted file mode 100644 index 51f6c3320..000000000 --- a/.changeset/lovely-loops-ring.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Highlight): Fix display of lines for first values (`0` coord). Fixes #568 diff --git a/.changeset/lucky-cats-stand.md b/.changeset/lucky-cats-stand.md deleted file mode 100644 index 132a1c9e9..000000000 --- a/.changeset/lucky-cats-stand.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'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. diff --git a/.changeset/lucky-pianos-count.md b/.changeset/lucky-pianos-count.md deleted file mode 100644 index d84e3c5f7..000000000 --- a/.changeset/lucky-pianos-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Tooltip): Use standard CSS classes (non-tailwind) for root element to simplify some usage (including shadcn-svelte) diff --git a/.changeset/lucky-worlds-share.md b/.changeset/lucky-worlds-share.md deleted file mode 100644 index b56618e54..000000000 --- a/.changeset/lucky-worlds-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Points|Labels): Correctly position when using array accessors (duration charts, etc). Fixes #633 diff --git a/.changeset/major-rats-raise.md b/.changeset/major-rats-raise.md deleted file mode 100644 index 9477c2435..000000000 --- a/.changeset/major-rats-raise.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Workaround Svelte 5.52+ regression (Parse failure: Expected '{', got '(') diff --git a/.changeset/mark-registration.md b/.changeset/mark-registration.md deleted file mode 100644 index f6d225e30..000000000 --- a/.changeset/mark-registration.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -'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. diff --git a/.changeset/mean-flies-play.md b/.changeset/mean-flies-play.md deleted file mode 100644 index 0179d960b..000000000 --- a/.changeset/mean-flies-play.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Points): Update `point.x` / `point.y` based on `ctx.radial` to simplify children snippet usage diff --git a/.changeset/mean-loops-peel.md b/.changeset/mean-loops-peel.md deleted file mode 100644 index 0b9be2e2c..000000000 --- a/.changeset/mean-loops-peel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(SeriesState): Add `isHighlighted(seriesKey)` to easy check if series is hightlight (or should be faded) diff --git a/.changeset/merge-connector-into-link.md b/.changeset/merge-connector-into-link.md deleted file mode 100644 index d3fbf255e..000000000 --- a/.changeset/merge-connector-into-link.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'layerchart': major ---- - -breaking: Merge `Connector` into `Link`, remove `Connector` component - -`Link` now supports both **pixel mode** (`x1`/`y1`/`x2`/`y2` props) and **data mode** (`data` + `source`/`target`/`x`/`y` accessors), mirroring the pattern used by primitives like `Circle`, `Text`, and `Rect`. - -**Migration:** - -- `` → `` -- `` → `` (or ``) - -All Connector props (`type`, `curve`, `sweep`, `radius`, `bend`, `orientation`, `radial`, markers, motion) are available directly on `Link`. The `explicitCoords` prop and `Connector` export are removed. diff --git a/.changeset/metal-flowers-sneeze.md b/.changeset/metal-flowers-sneeze.md deleted file mode 100644 index 05e7b99cd..000000000 --- a/.changeset/metal-flowers-sneeze.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(TooltipContext): correct `bisect-band` hit detection by accounting for chart padding diff --git a/.changeset/mighty-weeks-try.md b/.changeset/mighty-weeks-try.md deleted file mode 100644 index a328ec3c3..000000000 --- a/.changeset/mighty-weeks-try.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Axis): Support multiline ticks for time intervals diff --git a/.changeset/modern-nails-kiss.md b/.changeset/modern-nails-kiss.md deleted file mode 100644 index e218d5071..000000000 --- a/.changeset/modern-nails-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Treemap): Fix reactivity of props (tile, padding, etc) diff --git a/.changeset/neat-vapors-shift.md b/.changeset/neat-vapors-shift.md deleted file mode 100644 index 2cdc22114..000000000 --- a/.changeset/neat-vapors-shift.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Raster, Contour): support bounded geo raster overlays with projected interpolation diff --git a/.changeset/new-pans-serve.md b/.changeset/new-pans-serve.md deleted file mode 100644 index 6e7ca28b0..000000000 --- a/.changeset/new-pans-serve.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Add inertia (momentum) support for transform drag gestures diff --git a/.changeset/new-turtles-clean.md b/.changeset/new-turtles-clean.md deleted file mode 100644 index b470884ce..000000000 --- a/.changeset/new-turtles-clean.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(BarChart): Support time scale with `xInterval` / `yInterval` props diff --git a/.changeset/nice-regions-ask.md b/.changeset/nice-regions-ask.md deleted file mode 100644 index 20bab16e6..000000000 --- a/.changeset/nice-regions-ask.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ClipPath): Support canvas layers. Resolves #660 diff --git a/.changeset/nine-badgers-teach.md b/.changeset/nine-badgers-teach.md deleted file mode 100644 index 82e551bc9..000000000 --- a/.changeset/nine-badgers-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(TooltipList): Align label to top (start) instead of center by default diff --git a/.changeset/nine-carrots-grin.md b/.changeset/nine-carrots-grin.md deleted file mode 100644 index 2e23d4b92..000000000 --- a/.changeset/nine-carrots-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Bar): Clamp radius to width/height to not cause artifacts with small values (including `0`) when rounding a single edge. Fixes #383 diff --git a/.changeset/nine-pens-design.md b/.changeset/nine-pens-design.md deleted file mode 100644 index b37e68316..000000000 --- a/.changeset/nine-pens-design.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Add Polygon primitive diff --git a/.changeset/ninety-ghosts-taste.md b/.changeset/ninety-ghosts-taste.md deleted file mode 100644 index a9770cbda..000000000 --- a/.changeset/ninety-ghosts-taste.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -breaking(Blur): Remove children snippet props (not needed and easier to support canvas in the future) diff --git a/.changeset/ninety-melons-tickle.md b/.changeset/ninety-melons-tickle.md deleted file mode 100644 index 17d82cb3c..000000000 --- a/.changeset/ninety-melons-tickle.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Add Cell mark. Resolves #627. diff --git a/.changeset/odd-pears-float.md b/.changeset/odd-pears-float.md deleted file mode 100644 index cbeb7ea96..000000000 --- a/.changeset/odd-pears-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: New ArcChart component diff --git a/.changeset/old-lions-hide.md b/.changeset/old-lions-hide.md deleted file mode 100644 index 16224e791..000000000 --- a/.changeset/old-lions-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Axis): Fix memory leak and improve performance when tick values are `Date` instances diff --git a/.changeset/open-bushes-run.md b/.changeset/open-bushes-run.md deleted file mode 100644 index 68503d128..000000000 --- a/.changeset/open-bushes-run.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(BarChart): Improve handling time scale for value axis (ex. xScale for horizontal orientation) diff --git a/.changeset/open-houses-vanish.md b/.changeset/open-houses-vanish.md deleted file mode 100644 index 607767ff0..000000000 --- a/.changeset/open-houses-vanish.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Calendar): Support showing month labels without path via `monthLabel` prop (true by default) diff --git a/.changeset/orientation-to-valueaxis.md b/.changeset/orientation-to-valueaxis.md deleted file mode 100644 index 70c59ca93..000000000 --- a/.changeset/orientation-to-valueaxis.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -'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 `` 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 `` directly (not simplified charts): -```diff -- -+ -``` diff --git a/.changeset/path-lazy-feature-allocation.md b/.changeset/path-lazy-feature-allocation.md deleted file mode 100644 index e90076e9c..000000000 --- a/.changeset/path-lazy-feature-allocation.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -'layerchart': patch ---- - -perf: Reduce per-tick reactive overhead in `Path` / `Link` (force-simulation graphs) - -In mark-heavy scenes (force simulations with hundreds of links flowing through `Link → Path`) several reactive structures unconditionally subscribed every `` template updater to props that don't change on a tick, causing per-frame work to scale with the number of props × the number of marks. Each fix below is independent; together they take the lattice (n=20, 760 links) example from ~5–6 fps to ~9 fps during simulation. - -**`PathState.tweenedPathData` now reads only `pathData`, not all Path props.** -Pre-fix, the getter resolved `pathData` via `getProps()`, a function that constructs an object literal of every reactive Path prop. Each read of `tweenedPathData` (i.e. each per-tick `` update) therefore subscribed the updater to every Path prop and re-read all of them. `PathState` now takes a dedicated `getPathData` getter alongside `getProps`, and the hot-path tween / DOM read only touches `pathData`. `Path.svg.svelte` and `Path.canvas.svelte` pass them as separate getters. - -**`Link.base.svelte` passes a stable `getPathData` function rather than `motionPath.current` directly.** -Reading `motionPath.current` from `Link.base.svelte`'s template subscribed the entire `` block to every tick, forcing the parent's prop spread (`{...restProps}`) and `cls(...)` evaluation to re-run on every change. Passing a stable function reference moves the per-tick read inside ``'s own template, keeping `Link.base.svelte` stable. Requires the new `pathData?: string | (() => string)` form on `Path`. - -**`Path.svg.svelte` allocates `draw`-related state lazily.** - -- `endPoint = createControlledMotion(..., { type: 'none' })` was created for every `Path`, even when no `draw` transition was configured. Now only created when `draw` is set. -- The `$effect` that tracked `tweenedPathData` for `startContent` / `endContent` positioning ran on every `Path`, even when neither prop was provided. Now only registered when at least one is set. -- `drawKey` is only ever set when `draw` is configured, so the `{#key c.drawKey}` block is a no-op for paths without a draw transition. The block stays unconditional — splitting it behind `{#if draw}` showed no measurable benefit over leaving the inert subscription in place. - -**`Path.svg.svelte` extracts styling props out of `...rest`.** -`pathData`, `class`, `fill` / `fillOpacity` / `stroke` / `strokeOpacity` / `strokeWidth` / `opacity` and `motion` are now destructured out of `$props()` rather than left in `...rest`, so the `` element's `{...rest}` spread doesn't re-evaluate every frame when those props change (`pathData` changes on every force-sim tick; `class` is typically a fresh `cls(...)` string per parent render). - -**`Link.base.svelte` drops a redundant prop spread.** -Removed `{...extractLayerProps(restProps, 'lc-link')}` before `{...restProps}` — the call's only contribution (`class`) was being immediately overridden by the explicit `class={cls('lc-link', …)}` that follows, making the spread pure overhead. diff --git a/.changeset/pattern-html-layer.md b/.changeset/pattern-html-layer.md deleted file mode 100644 index c655ac640..000000000 --- a/.changeset/pattern-html-layer.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Pattern): Support `` layer by producing CSS `repeating-linear-gradient` (lines) and `radial-gradient` (circles) values usable as a `background`/`fill`. Gradient-valued `background` (e.g. ``) is also supported. diff --git a/.changeset/per-layer-primitive-variants.md b/.changeset/per-layer-primitive-variants.md deleted file mode 100644 index efb828b08..000000000 --- a/.changeset/per-layer-primitive-variants.md +++ /dev/null @@ -1,97 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Per-layer variants for primitives, compound marks, and high-level charts (`layerchart/svg`, `layerchart/canvas`, `layerchart/html`) - -Layer-agnostic components auto-detect the surrounding ``, ``, or `` layer and bundle every render path. The new sub-path exports expose layer-specific variants so consumers committed to a single rendering layer can opt into a smaller bundle. - -```ts -// Default: agnostic, dispatches at runtime — works in any layer -import { Rect, Circle, Text, Path, LineChart } from 'layerchart'; - -// SVG-only — skips canvas + html branches -import { Rect, Circle, Text, Path, LineChart } from 'layerchart/svg'; - -// Canvas-only -import { Rect, Circle, Text, LineChart } from 'layerchart/canvas'; - -// HTML-only — drops canvas + svg overhead (some primitives are ~95% smaller) -import { Rect, Circle, Text, Pattern, LinearGradient } from 'layerchart/html'; -``` - -Each agnostic component (e.g. `Rect.svelte`) now dispatches to the corresponding per-layer variant under the hood (`Rect.svg.svelte`, `Rect.canvas.svelte`, `Rect.html.svelte`) — no breaking change for existing consumers. - -### What's split - -**Primitives (13)** — the basic graphics building blocks -`Circle`, `Text`, `Rect`, `Line`, `Path`, `Ellipse`, `Polygon`, `Group`, `Image`, `ClipPath`, `Pattern`, `LinearGradient`, `RadialGradient` - -**Compound marks (~30)** — chart axes, marks, annotations, and chart-relative shapes -`Axis`, `Grid`, `Rule`, `Highlight`, `Layer`, `ChartChildren`, `ChartClipPath`, `CircleClipPath`, `Bars`, `Bar`, `Spline`, `Area`, `Pie`, `Arc`, `ArcLabel`, `Points`, `Cell`, `Frame`, `Threshold`, `Trail`, `Vector`, `Link`, `Labels`, `AnnotationLine`, `AnnotationPoint`, `AnnotationRange`, `Hull`, `Density`, `Voronoi`, `Contour`, `Raster`, `Violin`, `BoxPlot`, `Calendar`, `Month` - -**Geo components (`layerchart/geo`)** -`GeoPath`, `GeoSpline`, `GeoPoint`, `GeoCircle`, `GeoTile`, `TileImage`, `Graticule`, `GeoClipPath`, `GeoEdgeFade` - -**Graph components (`layerchart/graph`)** -`Ribbon` - -**High-level chart wrappers** — pre-composed charts with built-in tooltips, highlights, and series handling -`LineChart`, `AreaChart`, `BarChart`, `ScatterChart`, `PieChart`, `ArcChart` - -The geo, graph, hierarchy, and force sub-paths also re-export every layer-agnostic helper they previously included, so a single `from 'layerchart/svg'` import covers a typical SVG chart end-to-end without falling back to `'layerchart'`. - -### Standout per-layer wins (gz, vs agnostic baseline) - -**Primitives where the per-layer rendering is dramatically simpler:** -- `Pattern` html: 14.81 → 0.92 KB (-94%) — HTML implementation is just CSS-string generation -- `LinearGradient` html: 14.38 → 0.53 KB (-96%) -- `Image` canvas: 14.95 → 3.73 KB (-75%) -- `Text` svg/html: 29.13 → ~16 KB (-45%) -- `Circle` / `Rect` / `Ellipse` / `Line` / `Path`: ~22–27% smaller per-layer - -**Compound marks:** typically 8–15% gz savings per-layer; outliers like `Highlight` (-30% canvas) and `Cell` (-22% svg) are larger because their HTML/canvas vs. SVG paths diverge significantly. - -**High-level charts:** ~5–12% gz savings (~5–11 KB) when imported from `layerchart/svg` or `layerchart/canvas`. A single-layer LineChart drops from 89.6 KB → 79.0 KB gz on the SVG path. - -For a consumer who migrates all imports to a single layer, cumulative savings across primitives and compound marks are 60–80 KB gz. - -### Bundle reductions on the default `` path - -In addition to opt-in per-layer variants, this release also makes a few previously-eager features lazy: - -- **``** is now dynamically imported when `` is set — saves ~2.8 KB gz on every chart that doesn't pan/zoom. -- **``** was already lazy; nothing changes there. - -### `` for non-cartesian charts (new) - -A new `` component is exported alongside `` from each layer sub-path (`layerchart`, `layerchart/svg`, `layerchart/canvas`, `layerchart/html`). It provides the chart context, sizing, brush, transform, and tooltip plumbing — but skips `` and the `Layer` / `Axis` / `Grid` / `Rule` / `Highlight` / `ChartClipPath` import chain it pulls in. - -Use it for geo maps, custom layouts, or any chart that renders its own primitives directly via the `children` snippet: - -```svelte - - - - {#snippet children({ context })} - - - - - - {/snippet} - -``` - -Measured savings (bundle scenarios): -- `base` (``) → `core` (``): 83.42 → 50.93 KB gz (**−39%**) -- `geo` (`` + `GeoPath`/`GeoPoint`) → `core-geo` (`` + `GeoProjection` + `GeoPath`): 87.23 → 54.67 KB gz (**−37%**) -- `base-svg` (per-layer) → `core-svg` (per-layer): 77.37 → 50.88 KB gz (**−34%**) - -### Behavior - -Identical to the agnostic versions: visual output, props, types, and bindable refs all match. The dispatcher pattern adds ~0.2 KB per primitive to `core` for users on the agnostic API (transitive cost from `Highlight` / `Axis` / `Chart`) — a worthwhile tradeoff for the opt-in per-layer savings. - -See the updated ["Bundle Size" guide](https://layerchart.com/docs/guides/bundle-size) for the full table, tradeoffs, and when to opt into per-layer imports. diff --git a/.changeset/piechart-arcchart-labels-prop.md b/.changeset/piechart-arcchart-labels-prop.md deleted file mode 100644 index faac9ea0a..000000000 --- a/.changeset/piechart-arcchart-labels-prop.md +++ /dev/null @@ -1,14 +0,0 @@ ---- -'layerchart': minor ---- - -feat(PieChart/ArcChart): Add top-level `labels` prop - -`PieChart` and `ArcChart` now accept a `labels` prop that renders text labels on each arc without requiring a custom `arc` snippet. Pass `true` to enable defaults (centroid placement, default value accessor), or an object to configure any `ArcLabel` props — placement, offset, value accessor, callout line lengths, leader line style, text class, etc. - -```svelte - -``` diff --git a/.changeset/pink-flies-worry.md b/.changeset/pink-flies-worry.md deleted file mode 100644 index 2d6e97a4c..000000000 --- a/.changeset/pink-flies-worry.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Calendar|MonthPath): Support canvas by using `Spline` instead of `path` diff --git a/.changeset/pink-hornets-rest.md b/.changeset/pink-hornets-rest.md deleted file mode 100644 index b5bbcd94c..000000000 --- a/.changeset/pink-hornets-rest.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -refactor: Replace `date-fns` usage with existing `d3-time` to reduce bundle size diff --git a/.changeset/pink-showers-hunt.md b/.changeset/pink-showers-hunt.md deleted file mode 100644 index 694666ef6..000000000 --- a/.changeset/pink-showers-hunt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': major ---- - -Tailwind 4 support diff --git a/.changeset/plain-rings-itch.md b/.changeset/plain-rings-itch.md deleted file mode 100644 index df28d97fd..000000000 --- a/.changeset/plain-rings-itch.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Add Month component diff --git a/.changeset/polite-parts-learn.md b/.changeset/polite-parts-learn.md deleted file mode 100644 index 3a5b58f51..000000000 --- a/.changeset/polite-parts-learn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Support `opacity` prop/style when Canvas rendered for all primatives diff --git a/.changeset/poor-clocks-occur.md b/.changeset/poor-clocks-occur.md deleted file mode 100644 index c3da59bfd..000000000 --- a/.changeset/poor-clocks-occur.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(LinearGradient): Support Html context diff --git a/.changeset/pre.json b/.changeset/pre.json deleted file mode 100644 index 39055c88a..000000000 --- a/.changeset/pre.json +++ /dev/null @@ -1,322 +0,0 @@ -{ - "mode": "exit", - "tag": "next", - "initialVersions": { - "layerchart": "1.0.7", - "daisyui-5": "0.0.1", - "shadcn-svelte-1": "0.0.1", - "skeleton-3": "0.0.1", - "standalone": "0.0.1", - "svelteux-2": "0.0.1", - "docs": "0.0.1", - "skeleton4": "0.0.1", - "@layerchart/bundle-analyzer": "0.0.0" - }, - "changesets": [ - "add-boxplot-component", - "add-dodge-component", - "add-geoclippath-component", - "add-georaster-component", - "add-pattern-rects", - "add-smart-label-placement", - "add-stats-utils", - "add-text-segments", - "add-trail-component", - "add-violin-component", - "add-waffle-component", - "afraid-jobs-say", - "all-papers-unite", - "annotation-line-sloped", - "annotation-point-link-callouts", - "arclabel-component", - "arctext-centered-default", - "arctext-inner-padding", - "area-y0-baseline-default", - "axis-grid-stroke-fill-props", - "band-scale-transform-brush", - "band-tick-spacing-default", - "band-tick-spacing", - "bar-html-layer-support", - "beige-bears-joke", - "beige-doodles-shout", - "beige-trams-check", - "better-eagles-scream", - "better-pets-divide", - "big-boxes-shout", - "blue-doodles-chew", - "blue-rules-feel", - "brave-spies-give", - "breezy-breads-pump", - "breezy-donuts-sniff", - "breezy-oranges-drive", - "bright-bubbles-zoom", - "bright-stars-float", - "brown-terms-tie", - "brush-api-refactor", - "brush-selection-constraints", - "bumpy-breads-rhyme", - "calm-jars-mix", - "canvas-group-opacity", - "chart-data-precedence", - "chart-disable-text-selection", - "chart-props-no-spread", - "chart-resolve-domain-series-metadata", - "chatty-flies-bet", - "chatty-shirts-rule", - "chilly-games-hide", - "chubby-ties-play", - "circle-legend-component", - "clean-nights-jog", - "clear-ghosts-arrive", - "clear-moose-rush", - "clear-pears-tickle", - "clear-points-care", - "clip-path-unified", - "clippath-invert", - "component-tree", - "connector-orientation-step-curves", - "connector-swoop-type", - "context-bind-state-rename", - "cozy-moments-work", - "crazy-ads-appear", - "crazy-friends-talk", - "cruel-cameras-begin", - "cruel-rats-taste", - "curly-lies-write", - "curly-papers-follow", - "cute-donkeys-greet", - "cyan-cougars-occur", - "dark-pandas-start", - "dasharray-prop", - "deep-signs-listen", - "default-chart-padding", - "dirty-kings-send", - "domain-extent-original-to-data", - "download-chart-utils", - "early-bats-wait", - "early-peaches-accept", - "easy-candies-wait", - "eight-shirts-cover", - "eighty-foxes-notice", - "eighty-islands-jam", - "eleven-corners-float", - "eleven-crabs-switch", - "eleven-trains-make", - "empty-bats-stop", - "empty-buses-flash", - "every-sheep-rush", - "evil-bags-dance", - "evil-flowers-float", - "evil-hoops-return", - "fair-phones-wink", - "fast-insects-deny", - "fast-primitives-perf", - "fiery-lamps-tickle", - "five-stamps-drum", - "fix-annotation-range-bounds", - "fix-arclabel-canvas-rotation", - "fix-area-all-zero", - "fix-barchart-diverging-edge-rounding", - "fix-canvas-currentcolor", - "fix-canvas-pattern-rendering", - "fix-chart-image-export-sizing", - "fix-class-attribute-ts-cast", - "fix-debug-printscale", - "fix-geo-mark-domain", - "fix-geopath-canvas-tooltip", - "fix-geopath-undefined-handlers", - "fix-implicit-series-domain", - "fix-pattern-canvas", - "fix-pie-arc-xrange", - "fix-scale-band-invert", - "fix-series-state-effect-root", - "fix-spline-canvas-class-opacity", - "fix-spline-series-props-opacity", - "fix-text-negative-string-position", - "fix-transform-projection-reactivity", - "fix-tween-on-mount", - "fix-x1-y1-domain-filter-without-series", - "flat-arcs-heal", - "flat-cases-enter", - "four-lizards-win", - "four-taxes-beam", - "free-teeth-live", - "fruity-pillows-agree", - "fruity-pumas-stick", - "full-pens-cheat", - "full-times-guess", - "funny-otters-kick", - "funny-wasps-heal", - "geo-context-rename", - "geo-default-translate-center", - "geo-legend-component", - "geo-relative-scale-translate-extent", - "geolegend-reference-scale", - "giant-donuts-yell", - "globe-scroll-zoom", - "good-glasses-design", - "green-hotels-strive", - "green-mirrors-retire", - "green-poems-drop", - "grumpy-ties-mix", - "happy-bats-eat", - "heavy-signs-kick", - "honest-hoops-peel", - "hot-dots-stick", - "hot-pigs-push", - "html-background-origin", - "html-box-sizing", - "html-circle-ellipse-pattern-fills", - "html-default-border-width", - "huge-boats-fix", - "huge-lions-do", - "huge-regions-live", - "huge-rocks-sip", - "hull-style-props", - "icy-llamas-jump", - "image-pointer-events-default", - "khaki-pugs-hammer", - "kind-melons-invent", - "kind-shirts-sniff", - "labels-center-placement", - "large-spiders-stay", - "late-glasses-itch", - "layer-context-rename", - "lazy-load-opt-in-features", - "legal-parrots-beam", - "legend-tooltip-indicator", - "lemon-bats-change", - "little-flowers-drop", - "loud-lies-film", - "loud-paws-allow", - "lovely-loops-ring", - "lucky-cats-stand", - "lucky-pianos-count", - "lucky-worlds-share", - "major-rats-raise", - "mark-registration", - "mean-flies-play", - "mean-loops-peel", - "merge-connector-into-link", - "metal-flowers-sneeze", - "mighty-weeks-try", - "modern-nails-kiss", - "neat-vapors-shift", - "new-pans-serve", - "new-turtles-clean", - "nice-regions-ask", - "nine-badgers-teach", - "nine-carrots-grin", - "nine-pens-design", - "ninety-ghosts-taste", - "ninety-melons-tickle", - "odd-pears-float", - "old-lions-hide", - "open-bushes-run", - "open-houses-vanish", - "orientation-to-valueaxis", - "path-lazy-feature-allocation", - "pattern-html-layer", - "per-layer-primitive-variants", - "piechart-arcchart-labels-prop", - "pink-flies-worry", - "pink-hornets-rest", - "pink-showers-hunt", - "plain-rings-itch", - "polite-parts-learn", - "poor-clocks-occur", - "pretty-roses-invent", - "primitives-inherit-chart-accessors", - "proud-camels-cut", - "proud-llamas-fold", - "proud-melons-warn", - "public-queens-invite", - "puny-clocks-admire", - "puny-shoes-kiss", - "purple-beers-smile", - "purple-things-count", - "quiet-insects-share", - "quiet-mangos-kneel", - "quiet-rabbits-listen", - "radial-tree-link", - "rare-hats-happen", - "rare-olives-change", - "ready-pumas-sink", - "real-badgers-say", - "rect-data-corners-playground", - "rect-per-corner-corners", - "red-monkeys-sleep", - "remove-context-getters", - "rename-scroll-mode", - "rich-keys-take", - "ripe-numbers-speak", - "sad-chairs-stand", - "scroll-activation-key", - "server-chart-rendering", - "shaggy-dryers-make", - "shaky-animals-wave", - "shaky-dots-go", - "shaky-ends-bake", - "sharp-rockets-jam", - "shiny-mails-hug", - "silver-baboons-smile", - "silver-mugs-leave", - "skip-empty-markinfo-effect", - "slow-hounds-hide", - "slow-streets-look", - "small-moles-jog", - "smart-dots-rule", - "smart-paths-jog", - "smooth-bars-grow", - "smooth-domains-zoom", - "social-masks-teach", - "soft-pens-invite", - "solid-badgers-tan", - "some-frogs-camp", - "sour-hounds-repeat", - "sparkly-beds-dress", - "sparkly-mice-peel", - "spicy-gifts-float", - "spicy-seals-kiss", - "spline-motion-support", - "spline-per-segment-styling", - "spline-reactive-motion", - "spotty-plums-invite", - "spotty-rules-taste", - "subpath-exports", - "swift-gifts-flow", - "tall-mice-tap", - "tall-poems-take", - "tame-lamps-report", - "tangy-lies-strive", - "tasty-states-raise", - "text-fontsize-prop", - "text-format-tween", - "thick-months-join", - "thirty-glasses-pick", - "three-cities-chew", - "tooltip-fade-duration", - "tooltip-item-highlight-fade", - "tooltip-portal", - "tooltip-xy-accessor-overrides", - "tricky-nights-mix", - "tricky-pears-help", - "true-waves-roll", - "twelve-frogs-agree", - "twenty-bushes-hope", - "twenty-teeth-stand", - "violet-gifts-fail", - "violet-horses-walk", - "warm-colors-glow", - "warm-labels-shine", - "warm-mammals-deny", - "warm-women-glow", - "weak-donuts-tan", - "wet-cups-act", - "whole-women-listen", - "wide-berries-invite", - "wide-pillows-march", - "wide-wasps-enjoy", - "witty-clocks-divide" - ] -} diff --git a/.changeset/pretty-roses-invent.md b/.changeset/pretty-roses-invent.md deleted file mode 100644 index f3b004092..000000000 --- a/.changeset/pretty-roses-invent.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -breaking(Chart): Rename `tooltip` prop to `tooltipContext` to better describe purpose and fix conflict with new `tooltip` snippet diff --git a/.changeset/primitives-inherit-chart-accessors.md b/.changeset/primitives-inherit-chart-accessors.md deleted file mode 100644 index 2015af9a9..000000000 --- a/.changeset/primitives-inherit-chart-accessors.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Circle, Text): Inherit chart accessors by default in data mode - -`` and `` now fall back to the chart's `x`/`y`/`r` accessors (via `xGet`/`yGet`/`rGet`) when the corresponding position prop is omitted — matching how `` and the new `` work. This lets the chart be the single source of truth for `x`/`y`/`r` and removes the boilerplate of repeating those props on every primitive: - -```svelte - - - - - - - - - -``` - -`Circle` and `Text` also now enter data mode when `data` is explicitly passed (in addition to the existing trigger when `cx`/`cy`/`x`/`y` are data-driven), so the implicit-accessor pattern works without needing to pass redundant string accessors just to trigger iteration. - -Behavior is unchanged whenever any position prop is set explicitly — the hardcoded defaults (0/0/1) only apply when neither prop nor chart-level config is present. All existing usages in the docs pass explicit position props, so this is purely additive. diff --git a/.changeset/proud-camels-cut.md b/.changeset/proud-camels-cut.md deleted file mode 100644 index 5419a536c..000000000 --- a/.changeset/proud-camels-cut.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ArcChart): Do not pass y accessor to use linear scale fallback diff --git a/.changeset/proud-llamas-fold.md b/.changeset/proud-llamas-fold.md deleted file mode 100644 index 567e9e834..000000000 --- a/.changeset/proud-llamas-fold.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(ForceSimulation): Refined `onstart`/`ontick`/`onend` events of `ForceSimulation` diff --git a/.changeset/proud-melons-warn.md b/.changeset/proud-melons-warn.md deleted file mode 100644 index 1ba9c2912..000000000 --- a/.changeset/proud-melons-warn.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -breaking(Points): Remove `` prop. Use `` with x/y accessor instead diff --git a/.changeset/public-queens-invite.md b/.changeset/public-queens-invite.md deleted file mode 100644 index 169a1d362..000000000 --- a/.changeset/public-queens-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -refactor: Update `@layerstack/svelte-state` and replace remaining `@layerstack/svelte-stores` usage (media query) (mostly docs related except Canvas) diff --git a/.changeset/puny-clocks-admire.md b/.changeset/puny-clocks-admire.md deleted file mode 100644 index b6849ce31..000000000 --- a/.changeset/puny-clocks-admire.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Axis): Support responsive tick counts via `tickSpacing` prop diff --git a/.changeset/puny-shoes-kiss.md b/.changeset/puny-shoes-kiss.md deleted file mode 100644 index 26d49cde0..000000000 --- a/.changeset/puny-shoes-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Primatives): Apply default classes when using Canvas context (like Svg). Resolves #544 diff --git a/.changeset/purple-beers-smile.md b/.changeset/purple-beers-smile.md deleted file mode 100644 index 842569bb8..000000000 --- a/.changeset/purple-beers-smile.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Add Chord layout and Ribbon primitive diff --git a/.changeset/purple-things-count.md b/.changeset/purple-things-count.md deleted file mode 100644 index 9f3353233..000000000 --- a/.changeset/purple-things-count.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -chore: Update deps (including dagre from 1.x to 2.x) diff --git a/.changeset/quiet-insects-share.md b/.changeset/quiet-insects-share.md deleted file mode 100644 index f5fda5366..000000000 --- a/.changeset/quiet-insects-share.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Pattern): Simplified definitions via `lines`/`circles` props (issue #472) diff --git a/.changeset/quiet-mangos-kneel.md b/.changeset/quiet-mangos-kneel.md deleted file mode 100644 index 6ce35d7be..000000000 --- a/.changeset/quiet-mangos-kneel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -breaking(Bar): Rename `bar` prop to `data` to better represent usage diff --git a/.changeset/quiet-rabbits-listen.md b/.changeset/quiet-rabbits-listen.md deleted file mode 100644 index 20af749ff..000000000 --- a/.changeset/quiet-rabbits-listen.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -'layerchart': patch ---- - -fix: improve compatibility with UnoCSS Svelte scoped preprocessing - -- Remove TypeScript-only `as` assertions from exported Svelte markup in core mark components so preprocessors that parse markup expressions as plain JavaScript can consume packaged components without failing diff --git a/.changeset/radial-tree-link.md b/.changeset/radial-tree-link.md deleted file mode 100644 index 6c88ce805..000000000 --- a/.changeset/radial-tree-link.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Tree, Link, Connector): Add radial support - -`Tree` now detects `` and lays out with `d3.tree().size([2π, min(width, height)/2])` plus radial separation. Nodes emit polar coords (`x` = angle, `y` = radius). - -`Connector` gains a `radial` prop (defaults to `ctx.radial`) that interprets `source`/`target` as polar and dispatches to new `getConnectorRadialPresetPath` / `getConnectorRadialD3Path` helpers. Radial behavior per connector `type`: - -- `straight` — straight cartesian line -- `square` — radial → arc at midR → radial -- `beveled` — chord at source radius with chamfered corner (controlled by `radius`) -- `rounded` — visx LinkRadialCurve Bezier -- `d3` — `d3.linkRadial` by default; with a `curve` prop, `curveStep` / `curveStepBefore` / `curveStepAfter` map to polar arcs/radials, other curves go through `d3.lineRadial` - -`Link` forwards `radial` to `Connector` automatically when inside a radial ``. diff --git a/.changeset/rare-hats-happen.md b/.changeset/rare-hats-happen.md deleted file mode 100644 index 1274ca35e..000000000 --- a/.changeset/rare-hats-happen.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Axis): Additional multiline month fix for day ticks diff --git a/.changeset/rare-olives-change.md b/.changeset/rare-olives-change.md deleted file mode 100644 index 07271d4e9..000000000 --- a/.changeset/rare-olives-change.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Add `Layer` component to easily switch between Svg, Canavs, and Html layers diff --git a/.changeset/ready-pumas-sink.md b/.changeset/ready-pumas-sink.md deleted file mode 100644 index 116e5669c..000000000 --- a/.changeset/ready-pumas-sink.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Reduce bundle size by removing culori as transitive dependency diff --git a/.changeset/real-badgers-say.md b/.changeset/real-badgers-say.md deleted file mode 100644 index 4741a5422..000000000 --- a/.changeset/real-badgers-say.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ScatterChart): Support color scales based on value (such as threshold) diff --git a/.changeset/rect-data-corners-playground.md b/.changeset/rect-data-corners-playground.md deleted file mode 100644 index 3e8234e69..000000000 --- a/.changeset/rect-data-corners-playground.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Rect): Support non-uniform `corners` in data/edge mode diff --git a/.changeset/rect-per-corner-corners.md b/.changeset/rect-per-corner-corners.md deleted file mode 100644 index 3b697db00..000000000 --- a/.changeset/rect-per-corner-corners.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Rect): Add `corners` prop for per-corner rounding - -New `corners` prop accepts either a number (equivalent to `rx`), a `[topLeft, topRight, bottomRight, bottomLeft]` tuple, or `{ topLeft, topRight, bottomRight, bottomLeft }`. Works across ``, ``, and `` layers — Svg renders a `` when corners are uniform and a `` when they differ, Canvas uses `roundRect`'s per-corner radii, and Html uses the 4-value `border-radius` shorthand. - -Also exports a shared `roundedRectPath(x, y, width, height, [tl, tr, br, bl])` helper from `path` utils for building per-corner rounded-rect path data. diff --git a/.changeset/red-monkeys-sleep.md b/.changeset/red-monkeys-sleep.md deleted file mode 100644 index 0a4f5f693..000000000 --- a/.changeset/red-monkeys-sleep.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -refactor: Remove LayerCake dependency (issue #432) diff --git a/.changeset/remove-context-getters.md b/.changeset/remove-context-getters.md deleted file mode 100644 index e16e4e456..000000000 --- a/.changeset/remove-context-getters.md +++ /dev/null @@ -1,19 +0,0 @@ ---- -'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 -``` diff --git a/.changeset/rename-scroll-mode.md b/.changeset/rename-scroll-mode.md deleted file mode 100644 index 6a5f8ab86..000000000 --- a/.changeset/rename-scroll-mode.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -breaking(TransformContext): Rename `initialScrollMode` to `scrollMode` and make it reactive diff --git a/.changeset/rich-keys-take.md b/.changeset/rich-keys-take.md deleted file mode 100644 index f6ec4b7ca..000000000 --- a/.changeset/rich-keys-take.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(TooltipContext): Support `quadtree` mode for geo visualizations diff --git a/.changeset/ripe-numbers-speak.md b/.changeset/ripe-numbers-speak.md deleted file mode 100644 index e2e3dbd34..000000000 --- a/.changeset/ripe-numbers-speak.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Chart): Support `motion` prop to transition x/y scales using tween or spring diff --git a/.changeset/sad-chairs-stand.md b/.changeset/sad-chairs-stand.md deleted file mode 100644 index 4a0a7f9d8..000000000 --- a/.changeset/sad-chairs-stand.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Chart): Add `xInterval` / `yInterval` for time scales usage with bar charts diff --git a/.changeset/scroll-activation-key.md b/.changeset/scroll-activation-key.md deleted file mode 100644 index 49c7368cd..000000000 --- a/.changeset/scroll-activation-key.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'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 diff --git a/.changeset/server-chart-rendering.md b/.changeset/server-chart-rendering.md deleted file mode 100644 index b9cfd90b1..000000000 --- a/.changeset/server-chart-rendering.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat: Add `renderChart()` to `layerchart/server` for server-side chart-to-image rendering (PNG/JPEG) diff --git a/.changeset/shaggy-dryers-make.md b/.changeset/shaggy-dryers-make.md deleted file mode 100644 index 2cdaae9bd..000000000 --- a/.changeset/shaggy-dryers-make.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Highlight): Support radial area (issue #112) diff --git a/.changeset/shaky-animals-wave.md b/.changeset/shaky-animals-wave.md deleted file mode 100644 index c12b44a44..000000000 --- a/.changeset/shaky-animals-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Update dependencies, notable @layerstack/utils with improved metric number formatting diff --git a/.changeset/shaky-dots-go.md b/.changeset/shaky-dots-go.md deleted file mode 100644 index 343bc0d6c..000000000 --- a/.changeset/shaky-dots-go.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Chart): Automatically determine scale based on data and domain values (instead of defaulting to scaleLinear) diff --git a/.changeset/shaky-ends-bake.md b/.changeset/shaky-ends-bake.md deleted file mode 100644 index d1655bb2c..000000000 --- a/.changeset/shaky-ends-bake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Chart|Svg|Html): Support passing `clip` prop to hide overflown content diff --git a/.changeset/sharp-rockets-jam.md b/.changeset/sharp-rockets-jam.md deleted file mode 100644 index 8f9026ba7..000000000 --- a/.changeset/sharp-rockets-jam.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(AreaChart): Change default tooltip mode from `bisect-x` to `quadtree-x` (works with catagorical data and does not require data to be sorted) diff --git a/.changeset/shiny-mails-hug.md b/.changeset/shiny-mails-hug.md deleted file mode 100644 index 652b7f96d..000000000 --- a/.changeset/shiny-mails-hug.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'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 diff --git a/.changeset/silver-baboons-smile.md b/.changeset/silver-baboons-smile.md deleted file mode 100644 index 62ac30800..000000000 --- a/.changeset/silver-baboons-smile.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': major ---- - -breaking(Arc|Pie|Calendar|GeoPath): Rename `tooltipContext` to simple `tooltip` (boolean), simplifying use case diff --git a/.changeset/silver-mugs-leave.md b/.changeset/silver-mugs-leave.md deleted file mode 100644 index 0b555b911..000000000 --- a/.changeset/silver-mugs-leave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Text): Support explicit "\n" and set line-height (to match svg/canvas) for html layers diff --git a/.changeset/skip-empty-markinfo-effect.md b/.changeset/skip-empty-markinfo-effect.md deleted file mode 100644 index 7859c4c34..000000000 --- a/.changeset/skip-empty-markinfo-effect.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'layerchart': patch ---- - -perf: Skip mark-info `$effect` for pixel-mode primitives - -`registerComponent` now probes `markInfo()` once at construction; if the result is initially empty (pixel-mode primitives where `cx`/`cy`/`r`/etc. are numbers rather than string/function accessors), it skips creating the tracking `$effect` entirely. Saves one effect frame per primitive — adds up in mark-heavy scenes (force simulations, scatter plots with hundreds of nodes). - -Trade-off: a primitive that starts in pixel mode and later flips to data mode at runtime (e.g. `cx` mutates from a number to a string) will not register a mark. Mark mode is typically static; if a chart needs runtime data-mode marks, define an explicit `series` on the chart instead. diff --git a/.changeset/slow-hounds-hide.md b/.changeset/slow-hounds-hide.md deleted file mode 100644 index 6a372ffbb..000000000 --- a/.changeset/slow-hounds-hide.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(ForceSimulation): Expose default values by exporting them as constants diff --git a/.changeset/slow-streets-look.md b/.changeset/slow-streets-look.md deleted file mode 100644 index c12c6d366..000000000 --- a/.changeset/slow-streets-look.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Update `applyLanes()` util to support nested string key and function accessors for start/end properties diff --git a/.changeset/small-moles-jog.md b/.changeset/small-moles-jog.md deleted file mode 100644 index 43ca667a2..000000000 --- a/.changeset/small-moles-jog.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Bar): Support fixed `width` and `height` props to override scale-derived dimensions, centering the bar within its band. Resolves #360 diff --git a/.changeset/smart-dots-rule.md b/.changeset/smart-dots-rule.md deleted file mode 100644 index 21cf6b27f..000000000 --- a/.changeset/smart-dots-rule.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Spline): Only re-draw on data/path changes and not other context (such as width/height). Fixes #504 diff --git a/.changeset/smart-paths-jog.md b/.changeset/smart-paths-jog.md deleted file mode 100644 index 7e3e15b93..000000000 --- a/.changeset/smart-paths-jog.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': major ---- - -feat: Migrate to Svelte 5 runes/snippets (issue #159) diff --git a/.changeset/smooth-bars-grow.md b/.changeset/smooth-bars-grow.md deleted file mode 100644 index 5bcc68047..000000000 --- a/.changeset/smooth-bars-grow.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -'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'`). \ No newline at end of file diff --git a/.changeset/smooth-domains-zoom.md b/.changeset/smooth-domains-zoom.md deleted file mode 100644 index cd1d949cf..000000000 --- a/.changeset/smooth-domains-zoom.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Chart): Add cartesian pan/zoom via `transform={{ mode: 'domain' }}` with single or both axis support. Resolves #366 diff --git a/.changeset/social-masks-teach.md b/.changeset/social-masks-teach.md deleted file mode 100644 index 600de3243..000000000 --- a/.changeset/social-masks-teach.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Axis): Fix multiline month when day tick does not align on first of month diff --git a/.changeset/soft-pens-invite.md b/.changeset/soft-pens-invite.md deleted file mode 100644 index d77cfb30a..000000000 --- a/.changeset/soft-pens-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Update `dagreAncestors()` and `dagreDescendants()` util types diff --git a/.changeset/solid-badgers-tan.md b/.changeset/solid-badgers-tan.md deleted file mode 100644 index 9cf44c755..000000000 --- a/.changeset/solid-badgers-tan.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Add `applyLanes()` as top-level export diff --git a/.changeset/some-frogs-camp.md b/.changeset/some-frogs-camp.md deleted file mode 100644 index 59a9b5148..000000000 --- a/.changeset/some-frogs-camp.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat: Add classes for underlying element styling diff --git a/.changeset/sour-hounds-repeat.md b/.changeset/sour-hounds-repeat.md deleted file mode 100644 index ddade1f2a..000000000 --- a/.changeset/sour-hounds-repeat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix: Resolves "Target div has zero or negative height" console warning (issue #291) diff --git a/.changeset/sparkly-beds-dress.md b/.changeset/sparkly-beds-dress.md deleted file mode 100644 index 656671e2b..000000000 --- a/.changeset/sparkly-beds-dress.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Canavs): Support `style` attribute diff --git a/.changeset/sparkly-mice-peel.md b/.changeset/sparkly-mice-peel.md deleted file mode 100644 index 228a05985..000000000 --- a/.changeset/sparkly-mice-peel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Canavs): support `strokeOpacity` for Path component diff --git a/.changeset/spicy-gifts-float.md b/.changeset/spicy-gifts-float.md deleted file mode 100644 index 915bbcc77..000000000 --- a/.changeset/spicy-gifts-float.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -feat(Chart): Support `class` prop diff --git a/.changeset/spicy-seals-kiss.md b/.changeset/spicy-seals-kiss.md deleted file mode 100644 index a35ac685e..000000000 --- a/.changeset/spicy-seals-kiss.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Canavs): Suppport dashed stroke (fix: #652) diff --git a/.changeset/spline-motion-support.md b/.changeset/spline-motion-support.md deleted file mode 100644 index c624db336..000000000 --- a/.changeset/spline-motion-support.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Spline): Add motion support for mount animation from baseline diff --git a/.changeset/spline-per-segment-styling.md b/.changeset/spline-per-segment-styling.md deleted file mode 100644 index 573a87614..000000000 --- a/.changeset/spline-per-segment-styling.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': minor ---- - -feat(Spline): Support function-valued `stroke`, `fill`, and `opacity` for per-segment styling diff --git a/.changeset/spline-reactive-motion.md b/.changeset/spline-reactive-motion.md deleted file mode 100644 index 14f5d0943..000000000 --- a/.changeset/spline-reactive-motion.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -fix(Spline): Make motion prop reactive so toggling between tween/none updates without remount diff --git a/.changeset/spotty-plums-invite.md b/.changeset/spotty-plums-invite.md deleted file mode 100644 index 1214fb5bc..000000000 --- a/.changeset/spotty-plums-invite.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'layerchart': patch ---- - -refactor: Remove use of `layerClass` and apply `lc-{name}` class directly to allow easy component
` covering the chart container. + + This replaces the previous `canvasClip` / `canvasClipDeps` callbacks (and skipped HTML entirely) with a single declarative value. The `clip` snippet is still accepted for advanced/custom SVG content. + + `RectClipPath`, `CircleClipPath`, and `GeoClipPath` are rewritten on top of this — they each compute a path string (d3-geo-path already emits one natively) and pass it through. All three now support `` layers in addition to `` and ``. + + Note: `clip-path: path()` requires Chrome 88+, Safari 13.1+, Firefox 118+. + +- feat(ClipPath, RectClipPath, CircleClipPath, GeoClipPath): Add `invert` prop to render content _outside_ the clip shape (cutouts/masks) across SVG, Canvas, and HTML layers ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat: Unified component tree for Canvas rendering with proper Group transform scoping. Fixes #662 ([#663](https://github.com/techniq/layerchart/pull/663)) + - 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. + +- feat(Connector): Add `'swoop'` connector type ([#449](https://github.com/techniq/layerchart/pull/449)) + + New `'swoop'` connector type draws a circular arc between source and target, equivalent to ObservablePlot's Arrow `bend` option. Configured via a new `bend` prop (degrees, default `22.5`) — positive bends right (clockwise from source to target), negative bends left, `0` draws a straight line. Works in both cartesian and radial modes; `Link` forwards it automatically. + +- - Made `ForceSimulation` generic over its nodes and links, i.e. `ForceSimulation.` ([#527](https://github.com/techniq/layerchart/pull/527)) + - Exposed `links` via `children` snippet of `ForceSimulation`. + +- Decoupled `ForceSimulation` from `ChartContext`, by taking nodes and links via `data` prop. ([#526](https://github.com/techniq/layerchart/pull/526)) + +- feat(Line, Rect, Circle, Text): Multi-layer compatible `dashArray` and inline color props ([#449](https://github.com/techniq/layerchart/pull/449)) + - Added a typed `dashArray` prop to `Line`, `Rect`, and `Circle`. Accepts a number, array, or SVG-style string and maps to `stroke-dasharray` (SVG), `setLineDash` (Canvas), and either `repeating-linear-gradient` (HTML lines) or `border-style: dashed` (HTML borders). Previously dashed styling was SVG-only when applied via CSS class or attribute. + - `Text` and `Line` HTML branches now honor the `fill`/`stroke` props as inline `color`/`background`, so prop-based colors work across all three layers (not just SVG/Canvas). + - `Grid.x`/`Grid.y` and `Axis.grid` now accept `stroke`, `strokeWidth`, `opacity`, and `dashArray` in their object form, matching the props forwarded to the underlying line. + - `Rule` already forwarded arbitrary Line props via spread; `dashArray` now works there unchanged. + - Exports `parseDashArray` and `dashArrayToGradient` helpers from `path` utils. + +- feat: add `downloadImage`, `downloadSvg`, `getChartImageBlob`, and `getChartSvgString` utilities to export charts as PNG/JPEG/WebP images or SVG files ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat: Add Image component. Resolves #628 ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(Pattern): Canvas support ([#458](https://github.com/techniq/layerchart/pull/458)) + +- feat(SeriesState): Support passing `selected` as part of series declaration (Ex. ` `) ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(GeoLegend): New scale-bar legend showing real-world distance for the current `Chart` projection ([#818](https://github.com/techniq/layerchart/pull/818)) + + `GeoLegend` reads the active geo projection from the chart context and renders a labeled scale bar with tick subdivisions. By default it picks a "nice" round distance that covers ~25% of the chart width, but `distance` can be passed for an explicit value. Supports `units="km" | "mi"`, configurable `ticks`, `tickFormat`, `title`, and the standard `placement` props. Inspired by Harry Stevens' [d3-geo-scale-bar](https://observablehq.com/@harrystevens/introducing-d3-geo-scale-bar). + +- feat(Chart): In projection mode, `scaleExtent` and `translateExtent` are now interpreted as relative values (like d3-zoom). `scaleExtent: [0.5, 8]` means 0.5x to 8x of the fitted projection scale. `translateExtent` is offset from the initial fitted position in pixels. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat: Support pre-projected topologies in `GeoLegend` via `referenceScale` ([#449](https://github.com/techniq/layerchart/pull/449)) + + Add a `referenceScale` prop to `GeoLegend` for charts that render pre-projected data with `geoIdentity` (e.g. `us-atlas`'s `counties-albers-10m` / `states-albers-10m`, pre-projected with `geoAlbersUsa().scale(1300)`). When provided, pixels-per-distance is derived from the chart's fit scale and the supplied base scale, bypassing the `projection.invert` + `geoDistance` path which only works for real lon/lat projections. The `GeoPath` bubble-map example now renders a correct scale bar. + +- feat(BarChart): Radial support (vertical and horizontal) (issue #469) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- feat(Arc/Text): Arc path labels with inner/outer/middle placement and smart flipping (issue #7) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- feat(Circle, Ellipse): Support pattern/gradient `fill` values on the `` layer by switching from `background-color` to the `background` shorthand (with `background-origin: border-box` to keep patterns aligned under the border). Accepts values produced by `` / `` in HTML mode. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(Hull): Add CommonStyleProps (fill, fillOpacity, stroke, strokeOpacity, strokeWidth, opacity) for Canvas layer compatibility ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(Labels): Add `middle` placement and change `center` to center within the bar body ([#449](https://github.com/techniq/layerchart/pull/449)) + + `placement="center"` now positions the label at the center of the bar body (between the value edge and the baseline). The previous `center` behavior (label aligned to the value edge with a middle anchor) is now available as the new `placement="middle"`. + +- feat(Rule): Support using as data-driven mark (ex. candlestick, lollipop) by default (`` using Chart accessors) or passing explicit `x`/`y` accessors (ex. ``). Resolves #64 ([#622](https://github.com/techniq/layerchart/pull/622)) + +- feat(Legend, CircleLegend): Show an indicator of the current tooltip value on the legend ([#818](https://github.com/techniq/layerchart/pull/818)) + + `Legend` (ramp variant) now draws a small upward-pointing arrow below the color ramp at the position of the currently hovered value, and `CircleLegend` draws a 50%-opacity filled circle at the corresponding radius. Both auto-read the hovered data from `ctx.tooltip.data` and pipe it through the chart's color (`ctx.c`) / radius (`ctx.r`) accessors, so wiring is automatic for charts that configure `c` / `r` / `cScale` / `rScale` via `Chart` props. + + A new `value` prop on both components allows explicitly setting the indicator value (overriding the auto-detection), useful when the tooltip data shape doesn't match the chart's accessor. + + For `scaleThreshold` / `scaleQuantize` / `scaleQuantile` scales, the `Legend` indicator centers on the matching bucket swatch. + +- feat(ForceSimulation): Added `onNodesChange` callback to `ForceSimulation` ([#607](https://github.com/techniq/layerchart/pull/607)) + +- feat(Blur): Add Canvas support ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat: Add data mode to primitive components (Circle, Ellipse, Group, Line, Polygon, Rect, Text) ([#663](https://github.com/techniq/layerchart/pull/663)) + + 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. + +- feat: Mark registration for automatic domain calculation, accessor aggregation, and implicit series ([#663](https://github.com/techniq/layerchart/pull/663)) + - 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. + +- feat: Add inertia (momentum) support for transform drag gestures ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat: Add Cell mark. Resolves #627. ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat: New ArcChart component ([#458](https://github.com/techniq/layerchart/pull/458)) + +- feat(Pattern): Support `` layer by producing CSS `repeating-linear-gradient` (lines) and `radial-gradient` (circles) values usable as a `background`/`fill`. Gradient-valued `background` (e.g. ``) is also supported. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat: Per-layer variants for primitives, compound marks, and high-level charts (`layerchart/svg`, `layerchart/canvas`, `layerchart/html`) ([#848](https://github.com/techniq/layerchart/pull/848)) + + Layer-agnostic components auto-detect the surrounding ``, ``, or `` layer and bundle every render path. The new sub-path exports expose layer-specific variants so consumers committed to a single rendering layer can opt into a smaller bundle. + + ```ts + // Default: agnostic, dispatches at runtime — works in any layer + import { Rect, Circle, Text, Path, LineChart } from 'layerchart'; + + // SVG-only — skips canvas + html branches + import { Rect, Circle, Text, Path, LineChart } from 'layerchart/svg'; + + // Canvas-only + import { Rect, Circle, Text, LineChart } from 'layerchart/canvas'; + + // HTML-only — drops canvas + svg overhead (some primitives are ~95% smaller) + import { Rect, Circle, Text, Pattern, LinearGradient } from 'layerchart/html'; + ``` + + Each agnostic component (e.g. `Rect.svelte`) now dispatches to the corresponding per-layer variant under the hood (`Rect.svg.svelte`, `Rect.canvas.svelte`, `Rect.html.svelte`) — no breaking change for existing consumers. + + ### What's split + + **Primitives (13)** — the basic graphics building blocks + `Circle`, `Text`, `Rect`, `Line`, `Path`, `Ellipse`, `Polygon`, `Group`, `Image`, `ClipPath`, `Pattern`, `LinearGradient`, `RadialGradient` + + **Compound marks (~30)** — chart axes, marks, annotations, and chart-relative shapes + `Axis`, `Grid`, `Rule`, `Highlight`, `Layer`, `ChartChildren`, `ChartClipPath`, `CircleClipPath`, `Bars`, `Bar`, `Spline`, `Area`, `Pie`, `Arc`, `ArcLabel`, `Points`, `Cell`, `Frame`, `Threshold`, `Trail`, `Vector`, `Link`, `Labels`, `AnnotationLine`, `AnnotationPoint`, `AnnotationRange`, `Hull`, `Density`, `Voronoi`, `Contour`, `Raster`, `Violin`, `BoxPlot`, `Calendar`, `Month` + + **Geo components (`layerchart/geo`)** + `GeoPath`, `GeoSpline`, `GeoPoint`, `GeoCircle`, `GeoTile`, `TileImage`, `Graticule`, `GeoClipPath`, `GeoEdgeFade` + + **Graph components (`layerchart/graph`)** + `Ribbon` + + **High-level chart wrappers** — pre-composed charts with built-in tooltips, highlights, and series handling + `LineChart`, `AreaChart`, `BarChart`, `ScatterChart`, `PieChart`, `ArcChart` + + The geo, graph, hierarchy, and force sub-paths also re-export every layer-agnostic helper they previously included, so a single `from 'layerchart/svg'` import covers a typical SVG chart end-to-end without falling back to `'layerchart'`. + + ### Standout per-layer wins (gz, vs agnostic baseline) + + **Primitives where the per-layer rendering is dramatically simpler:** + - `Pattern` html: 14.81 → 0.92 KB (-94%) — HTML implementation is just CSS-string generation + - `LinearGradient` html: 14.38 → 0.53 KB (-96%) + - `Image` canvas: 14.95 → 3.73 KB (-75%) + - `Text` svg/html: 29.13 → ~16 KB (-45%) + - `Circle` / `Rect` / `Ellipse` / `Line` / `Path`: ~22–27% smaller per-layer + + **Compound marks:** typically 8–15% gz savings per-layer; outliers like `Highlight` (-30% canvas) and `Cell` (-22% svg) are larger because their HTML/canvas vs. SVG paths diverge significantly. + + **High-level charts:** ~5–12% gz savings (~5–11 KB) when imported from `layerchart/svg` or `layerchart/canvas`. A single-layer LineChart drops from 89.6 KB → 79.0 KB gz on the SVG path. + + For a consumer who migrates all imports to a single layer, cumulative savings across primitives and compound marks are 60–80 KB gz. + + ### Bundle reductions on the default `` path + + In addition to opt-in per-layer variants, this release also makes a few previously-eager features lazy: + - **``** is now dynamically imported when `` is set — saves ~2.8 KB gz on every chart that doesn't pan/zoom. + - **``** was already lazy; nothing changes there. + + ### `` for non-cartesian charts (new) + + A new `` component is exported alongside `` from each layer sub-path (`layerchart`, `layerchart/svg`, `layerchart/canvas`, `layerchart/html`). It provides the chart context, sizing, brush, transform, and tooltip plumbing — but skips `` and the `Layer` / `Axis` / `Grid` / `Rule` / `Highlight` / `ChartClipPath` import chain it pulls in. + + Use it for geo maps, custom layouts, or any chart that renders its own primitives directly via the `children` snippet: + + ```svelte + + + + {#snippet children({ context })} + + + + + + {/snippet} + + ``` + + Measured savings (bundle scenarios): + - `base` (``) → `core` (``): 83.42 → 50.93 KB gz (**−39%**) + - `geo` (`` + `GeoPath`/`GeoPoint`) → `core-geo` (`` + `GeoProjection` + `GeoPath`): 87.23 → 54.67 KB gz (**−37%**) + - `base-svg` (per-layer) → `core-svg` (per-layer): 77.37 → 50.88 KB gz (**−34%**) + + ### Behavior + + Identical to the agnostic versions: visual output, props, types, and bindable refs all match. The dispatcher pattern adds ~0.2 KB per primitive to `core` for users on the agnostic API (transitive cost from `Highlight` / `Axis` / `Chart`) — a worthwhile tradeoff for the opt-in per-layer savings. + + See the updated ["Bundle Size" guide](https://layerchart.com/docs/guides/bundle-size) for the full table, tradeoffs, and when to opt into per-layer imports. + +- feat(PieChart/ArcChart): Add top-level `labels` prop ([#817](https://github.com/techniq/layerchart/pull/817)) + + `PieChart` and `ArcChart` now accept a `labels` prop that renders text labels on each arc without requiring a custom `arc` snippet. Pass `true` to enable defaults (centroid placement, default value accessor), or an object to configure any `ArcLabel` props — placement, offset, value accessor, callout line lengths, leader line style, text class, etc. + + ```svelte + + ``` + +- breaking(Chart): Rename `tooltip` prop to `tooltipContext` to better describe purpose and fix conflict with new `tooltip` snippet ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(Circle, Text): Inherit chart accessors by default in data mode ([#862](https://github.com/techniq/layerchart/pull/862)) + + `` and `` now fall back to the chart's `x`/`y`/`r` accessors (via `xGet`/`yGet`/`rGet`) when the corresponding position prop is omitted — matching how `` and the new `` work. This lets the chart be the single source of truth for `x`/`y`/`r` and removes the boilerplate of repeating those props on every primitive: + + ```svelte + + + + + + + + + + ``` + + `Circle` and `Text` also now enter data mode when `data` is explicitly passed (in addition to the existing trigger when `cx`/`cy`/`x`/`y` are data-driven), so the implicit-accessor pattern works without needing to pass redundant string accessors just to trigger iteration. + + Behavior is unchanged whenever any position prop is set explicitly — the hardcoded defaults (0/0/1) only apply when neither prop nor chart-level config is present. All existing usages in the docs pass explicit position props, so this is purely additive. + +- breaking(Points): Remove `` prop. Use `` with x/y accessor instead ([#622](https://github.com/techniq/layerchart/pull/622)) + +- feat: Add Chord layout and Ribbon primitive ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(Pattern): Simplified definitions via `lines`/`circles` props (issue #472) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- feat(Tree, Link, Connector): Add radial support ([#831](https://github.com/techniq/layerchart/pull/831)) + + `Tree` now detects `` and lays out with `d3.tree().size([2π, min(width, height)/2])` plus radial separation. Nodes emit polar coords (`x` = angle, `y` = radius). + + `Connector` gains a `radial` prop (defaults to `ctx.radial`) that interprets `source`/`target` as polar and dispatches to new `getConnectorRadialPresetPath` / `getConnectorRadialD3Path` helpers. Radial behavior per connector `type`: + - `straight` — straight cartesian line + - `square` — radial → arc at midR → radial + - `beveled` — chord at source radius with chamfered corner (controlled by `radius`) + - `rounded` — visx LinkRadialCurve Bezier + - `d3` — `d3.linkRadial` by default; with a `curve` prop, `curveStep` / `curveStepBefore` / `curveStepAfter` map to polar arcs/radials, other curves go through `d3.lineRadial` + + `Link` forwards `radial` to `Connector` automatically when inside a radial ``. + +- feat: Add `Layer` component to easily switch between Svg, Canavs, and Html layers ([#458](https://github.com/techniq/layerchart/pull/458)) + +- feat(Rect): Add `corners` prop for per-corner rounding ([#449](https://github.com/techniq/layerchart/pull/449)) + + New `corners` prop accepts either a number (equivalent to `rx`), a `[topLeft, topRight, bottomRight, bottomLeft]` tuple, or `{ topLeft, topRight, bottomRight, bottomLeft }`. Works across ``, ``, and `` layers — Svg renders a `` when corners are uniform and a `` when they differ, Canvas uses `roundRect`'s per-corner radii, and Html uses the 4-value `border-radius` shorthand. + + Also exports a shared `roundedRectPath(x, y, width, height, [tl, tr, br, bl])` helper from `path` utils for building per-corner rounded-rect path data. + +- refactor: Remove LayerCake dependency (issue #432) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- breaking(TransformContext): Rename `initialScrollMode` to `scrollMode` and make it reactive ([#663](https://github.com/techniq/layerchart/pull/663)) + +- 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 ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat: Add `renderChart()` to `layerchart/server` for server-side chart-to-image rendering (PNG/JPEG) ([#813](https://github.com/techniq/layerchart/pull/813)) + +- 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 ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(Bar): Support fixed `width` and `height` props to override scale-derived dimensions, centering the bar within its band. Resolves #360 ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat: Auto-compute Bar/Bars mount animation initial values from chart scales ([#663](https://github.com/techniq/layerchart/pull/663)) + + 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'`). + +- feat(Chart): Add cartesian pan/zoom via `transform={{ mode: 'domain' }}` with single or both axis support. Resolves #366 ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(Spline): Add motion support for mount animation from baseline ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(Spline): Support function-valued `stroke`, `fill`, and `opacity` for per-segment styling ([#449](https://github.com/techniq/layerchart/pull/449)) + +- breaking: Move heavy-dep components into sub-path exports ([#845](https://github.com/techniq/layerchart/pull/845)) + + The following components are no longer re-exported from `'layerchart'` and must be imported from new sub-paths: + - `'layerchart/geo'` — `GeoCircle`, `GeoClipPath`, `GeoEdgeFade`, `GeoLegend`, `GeoPath`, `GeoPoint`, `GeoProjection`, `GeoRaster`, `GeoSpline`, `GeoTile`, `GeoVisible`, `Graticule`, `TileImage` + - `'layerchart/hierarchy'` — `Tree`, `Treemap`, `Pack`, `Partition` + - `'layerchart/force'` — `ForceSimulation` + - `'layerchart/graph'` — `Dagre`, `Sankey`, `Chord`, `Ribbon` + + This isolates each group's external d3 dependency (`@dagrejs/dagre` ~22 KB, `d3-geo` ~15 KB, `d3-force` ~7 KB, `d3-hierarchy` ~6 KB, `d3-sankey` ~6 KB, `d3-chord` ~2 KB) behind an opt-in import — defending against bundlers that don't tree-shake the root barrel cleanly. + + `Voronoi`/`Hull` stay at root (already lazy-loaded via `TooltipContext`). `Contour`/`Density`/`Raster`/`BoxPlot`/`Violin`/`Threshold` and high-level charts (`LineChart`, `BarChart`, etc.) remain at root. + + **Migration:** update affected imports, e.g. + + ```diff + -import { Tree, GeoPath, ForceSimulation } from 'layerchart'; + +import { Tree } from 'layerchart/hierarchy'; + +import { GeoPath } from 'layerchart/geo'; + +import { ForceSimulation } from 'layerchart/force'; + ``` + +- feat(Text): Add `fontSize` prop with auto-derived `capHeight` ([#862](https://github.com/techniq/layerchart/pull/862)) + + Adds a typed `fontSize?: number | string` prop on `` (number = pixels, string passes through). When set, `capHeight` defaults to `fontSize * 0.71` instead of the legacy `'0.71em'` — so per-item scaled labels with `verticalAnchor="middle"` align to a common visual baseline without an explicit `capHeight` override. + + Previously, `getPixelValue` resolved `'0.71em'` against a hard-coded 16px, so vertical centering was only correct for ~16px text. Larger labels sat too low, smaller ones too high — visible on text-driven beeswarms or any caller scaling labels per-element. + + ```svelte + + + + + + ``` + +- feat(Text): Add `format` prop and tween numeric `value` when `motion` is configured ([#449](https://github.com/techniq/layerchart/pull/449)) + +- breaking: Extract `Path` primitive component from `Spline` for better separation of concerns ([#659](https://github.com/techniq/layerchart/pull/659)) + +- feat(Tooltip): Add `fadeDuration` prop to control fade in/out transition ([#828](https://github.com/techniq/layerchart/pull/828)) + + The fade transition on `Tooltip.Root` is now configurable via the `fadeDuration` prop (default: `100`ms). Set to `0` to disable the fade transition entirely. + +- feat(Tooltip): Portal tooltip to body by default to fix overflow clipping. Resolves #446 ([#828](https://github.com/techniq/layerchart/pull/828)) + + Tooltip.Root now portals to `document.body` (or `.PortalTarget`) by default using the `portal` action from `@layerstack/svelte-actions`. This prevents tooltips from being clipped by ancestor elements with `overflow: hidden`. The tooltip uses `position: fixed` with viewport-relative coordinates when portaled. Set `portal={false}` to restore the previous inline behavior. Both `contained="container"` and `contained="window"` modes continue to work correctly with portaling. + +- feat(tooltipContext, Voronoi): Add `x`/`y` accessor overrides and default array endpoint to max ([#449](https://github.com/techniq/layerchart/pull/449)) + - **New `x`/`y` props** on `tooltipContext` and `Voronoi` accept an `Accessor` (property name string or function). When set, hit-detection points use these accessors instead of the Chart's `x`/`y`. Useful when the Chart's accessor returns an array (e.g. `x={['POP_1980', 'POP_2015']}`) and you want detection at a specific endpoint: + ```svelte + + ``` + - **Breaking (minor)**: when the chart's x/y accessor returns an array (duration bars, candlesticks, stacked areas, etc.), quadtree and voronoi hit-detection now default to the **max** value of the array instead of the **min**. For most use cases (target endpoint, stack top) this is the more natural hover position. If you need the old behavior, pass an explicit `x`/`y` accessor on `tooltipContext`/`Voronoi`. + +- feat: Add Annotation components (AnnotationPoint, AnnotationLine, AnnotationRange) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- feat: Support continuous color scales via `cScale` prop without requiring `cRange` ([#663](https://github.com/techniq/layerchart/pull/663)) + - Allow `cScale` (e.g. `scaleSequential(interpolateTurbo)`) to activate without `cRange`, enabling pre-configured sequential/diverging color scales + - Guard `createScale` against undefined `range` to avoid breaking interpolator-based scales + - Auto-detect numeric `cDomain` values and use `extent` instead of `unique`, producing correct `[min, max]` domains for continuous scales + - Prefer `cScale` color over default series color in tooltip/highlight when a color scale is configured + +- feat(Labels): Support `seriesKey` in `labels` prop to filter which series renders labels. Resolves #633 ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat: Support css-only usage (no Tailwind required) while retaining first-class Tailwind support ([#557](https://github.com/techniq/layerchart/pull/557)) + +- feat(Rect): New edge-based props (`x0`/`x1`/`y0`/`y1`) along with existing (`x`/`y`/`width`/`height`) and `insets` support ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat: Add Vector component ([#663](https://github.com/techniq/layerchart/pull/663)) + +### Patch Changes + +- fix: Prevent submitting forms when clicking legend buttons ([#841](https://github.com/techniq/layerchart/pull/841)) + +- fix(Area): Default y0 baseline to chart's yBaseline when set ([#663](https://github.com/techniq/layerchart/pull/663)) + + 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. + +- feat: Add `stroke` and `fill` props to `Axis` and `Grid` for explicit color control (useful for SSR where CSS variables are unavailable) ([#813](https://github.com/techniq/layerchart/pull/813)) + +- Support `tickSpacing` for band scales on Axis, thinning tick labels when the domain is larger than the available space. Automatically shows more tick labels when zoomed in on band scale transforms. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(ScatterChart): Change default tooltip mode from `voronoi` to `quadtree` ([#578](https://github.com/techniq/layerchart/pull/578)) + +- fix(Threshold): Properly clip `above` snippet (resolving 1/2 width clipping issues when using Spline) ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(Bars): Fix inverted rect when rendered top-to-bottom or right-to-left. Fixes #540 ([#613](https://github.com/techniq/layerchart/pull/613)) + +- fix(AreaChart|BarChar|LineChart): Use value axis (typically y) property name/accessor for tooltip label if defined as string (ex. `` will use `visitors` instead of `value`) ([#523](https://github.com/techniq/layerchart/pull/523)) + +- fix(TooltipContext): Handle chart padding when using `quadtree` mode ([#449](https://github.com/techniq/layerchart/pull/449)) + +- breaking(AnnotationLine|AnnotationPoint): Change `labelOffset` into explicit `labelXOffset` and `labelYOffset` for greater control (aligns with AnnotationRange) ([#492](https://github.com/techniq/layerchart/pull/492)) + +- fix(Points|Labels): Correctly position when using x1 / y1 scales (issue #773) ([#663](https://github.com/techniq/layerchart/pull/663)) + +- fix(GeoPath): Fix reactivity with `curve` when using Canvas context ([#561](https://github.com/techniq/layerchart/pull/561)) + +- fix(Canvas): Fix pointer events (hit canvas) when using Brave browser with fingerprinting protection enabled ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(TooltipContext): Support `quadtree-x` and `quadtree-y` modes. Resolves #525 ([#578](https://github.com/techniq/layerchart/pull/578)) + +- fix(ArcChart): (Re-)disable grid by default (regression from recent refactor) ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Tooltip): Correctly set tooltip position on chart enter and exit ([#655](https://github.com/techniq/layerchart/pull/655)) + +- fix(GeoPath): Do not register with hit canavs unless pointer events (onclick, onpointermove, etc) or tooltipContext are defined ([#549](https://github.com/techniq/layerchart/pull/549)) + +- fix(canvas): Compose globalAlpha multiplicatively so Group opacity propagates to children ([#831](https://github.com/techniq/layerchart/pull/831)) + + Canvas `renderPathData` was overwriting `ctx.globalAlpha` with absolute values for element opacity, fill opacity, and stroke opacity. This meant a parent `` had no effect on child marks rendered on canvas — the child's own opacity (defaulting to 1) would replace the inherited value. + + Now all three sites multiply against the current `globalAlpha`, which correctly composes with ancestor Group opacity set via `save()`/`restore()` scoping. Also removes double-application of element `opacity` inside the fill/stroke blocks (it's already applied at the element level). + +- fix(Chart): Explicit `` now takes precedence over marks' implicit-series data ([#449](https://github.com/techniq/layerchart/pull/449)) + + When a mark registered its own filtered dataset via `markInfo` (e.g. a decorative `` showing labels for a subset), two things went wrong: + 1. `ctx.data` would silently switch to the filtered subset via `seriesState.visibleSeriesData`, causing sibling array-driven marks (like ``) to iterate only the subset. + 2. An implicit series would be created from the decorative mark, narrowing the domain calculation to only the subset's values. + + Now when `` is explicit (non-empty): + - `ctx.data` always returns the chart's data. + - Marks whose axis accessor matches the chart's axis accessor (including any element of an array accessor like `y={['v1', 'v2']}`) are treated as decorative and don't create implicit series — even if they have their own `data` array. + + Marks with their own data still contribute to `flatData` for domain calculation when their accessor differs from the chart's (the multi-dataset / multi-series scenario). + +- fix(Chart): Disable text selection to prevent selection while dragging ([#879](https://github.com/techniq/layerchart/pull/879)) + +- perf(Chart): Eliminate per-instance props spread in `ChartState` ([#857](https://github.com/techniq/layerchart/pull/857)) + +- fix(Chart): Don't compute `[undefined, undefined]` domain when `series` is metadata-only ([#449](https://github.com/techniq/layerchart/pull/449)) + + When `series` is configured for legend/color metadata only (no per-series `data`, and items lack the series-key properties on the value axis), the value-axis domain calculation collected all-undefined values and returned `[undefined, undefined]`. Combined with `motion`, this threw `Cannot spring undefined values` whenever the series visibility changed (e.g. toggling a legend swatch). + + The series-aware branch now filters out null/undefined values and falls through to the other domain-resolution paths when nothing remains, instead of returning a poisoned extent. + +- fix(HighlightKey): Define `set()` with arrow function to solve `current` access when passed directly ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(Canvas): Support disabling the hit canavs (useful when animations are playing) ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(TooltipContext): Revert back to pointer events (instead of mouse/touch) but with `touch-action: pan-y`. Provides simplified events while allowing horizontal scrubbing with vertical scrolling. ([#557](https://github.com/techniq/layerchart/pull/557)) + +- fix(PieChart): Do not pass `y` accessor to use linear scale fallback ([#631](https://github.com/techniq/layerchart/pull/631)) + +- fix(AnnotationPoint): Do not propagate mouse/touch move/leave events to TooltipContext after switching from pointer events. Fixes #598 ([#602](https://github.com/techniq/layerchart/pull/602)) + +- fix(LineChart): Restore passing xScale / yScale overrides ([#449](https://github.com/techniq/layerchart/pull/449)) + +- refactor(Chart): Add `debug` prop and update `settings` context ([#663](https://github.com/techniq/layerchart/pull/663)) + +- breaking: Change `defaultChartPadding(axis, legend)` to `defaultChartPadding({ axis, legend })` and support overrides (ex. `defaultChartPadding({ left: 50 })`) ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(TooltipContext): Fix touch scrolling on mobile. Fixes #255 ([#566](https://github.com/techniq/layerchart/pull/566)) + +- fix(Connector, Link): Orient d3 step curves by `orientation` ([#449](https://github.com/techniq/layerchart/pull/449)) + - Added `orientation?: 'horizontal' | 'vertical'` prop to `Connector` (defaults to `'horizontal'`). `Link` forwards its own orientation so step curves step along the natural flow direction. + - `curveStep`, `curveStepBefore`, and `curveStepAfter` now step along `y` in vertical orientation instead of always stepping along `x`. + +- fix(Highlight|TooltipContext): Support xInterval / yInterval ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(TooltipContext): Fix `band` mode regression when both x/y are scaleBand (ex. punchcard chart) ([#557](https://github.com/techniq/layerchart/pull/557)) + +- breaking(Treemap): Remove `selected` prop ([#516](https://github.com/techniq/layerchart/pull/516)) + +- feat(Spline): Add `value` to `startContent` and `endContent` snippets to easily access the `x` and `y` data values ([#537](https://github.com/techniq/layerchart/pull/537)) + +- fix(Canvas): Only apply text/font properties to canvas to improve performance ([#561](https://github.com/techniq/layerchart/pull/561)) + +- fix(AnnotationRange|TooltipContext|Highlight): Fix using interval scales with reversed data (ex. xReverse) ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(SimplifiedCharts): Properly handle `legend` prop as object when determining bottom padding ([#557](https://github.com/techniq/layerchart/pull/557)) + +- fix(Axis): Fix display of axis labels ([#591](https://github.com/techniq/layerchart/pull/591)) + +- fix(Text): Apply `fill: currentColor` to support more straightforward way of changing color (ex. `class="text-red-500"` or `style="color:red"`) ([#557](https://github.com/techniq/layerchart/pull/557)) + +- fix: Default chart padding now applied when using ChartChildren layout (marks snippet) ([#663](https://github.com/techniq/layerchart/pull/663)) + + When `` 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. + +- feat: Support passing `FormatConfig` (ex. `{ type: '...', options: { ... } }`) anywhere `FormatType` is supported to simplify custom formatting (ex. `variant`) ([#521](https://github.com/techniq/layerchart/pull/521)) + +- fix(Tooltip): Apply inverse transform for quadtree lookup when zoomed/panned ([#663](https://github.com/techniq/layerchart/pull/663)) + +- fix(Treemap): Add `maintainAspectRatio` (default: false) to opt into tiling function adjustment (primarily for zoom) ([#516](https://github.com/techniq/layerchart/pull/516)) + +- fix(ForceSimulation): Restore performance to at/near Svelte 4 performance (issue #451) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- breaking(Legend): Rename `classes.swatches` to `classes.item` ([#571](https://github.com/techniq/layerchart/pull/571)) + +- fix: Improve memory leak caused by detached DOM increase when using Canvas rendering due to sometimes still rendering Svg components (ex. `` vs ``) (#490) ([#490](https://github.com/techniq/layerchart/pull/490)) + +- fix(Highlight): Properly handle area highlights with y-axis time scales ([#562](https://github.com/techniq/layerchart/pull/562)) + +- fix(Group): Default `opacity` to `undefined` instead of `1` to allow overriding via class (ex. `opacity-20`) ([#520](https://github.com/techniq/layerchart/pull/520)) + +- feat: Support passing `PeriodTypeCode` strings for simplified date formatting and reduce imports. Example: `format={PeriodType.Day}` is now `format="day"`. Also supported with config object for passing additional options (ex. `format={{ type: 'day', options: { variant: 'long' } }}`). Supported for all `format` props include Axis, Labels, Legend and Tooltip. ([#521](https://github.com/techniq/layerchart/pull/521)) + +- fix(Legend): Improve / simplify responsive use cases with additional default classes (center, shrink, truncate) ([#571](https://github.com/techniq/layerchart/pull/571)) + +- docs: Add examples for standalone, daisyUI v5, shadcn-svelte v1, Skeleton v3, and Svelte UX v2 (next) (including light/dark theming) ([#557](https://github.com/techniq/layerchart/pull/557)) + +- Update dependencies ([#629](https://github.com/techniq/layerchart/pull/629)) + +- fix(autoScale): Ignore `null` domain values, fixing some brush examples ([#449](https://github.com/techniq/layerchart/pull/449)) + +- breaking(Axis): Rename `x="left|right"` and `y="top|bottom"` props with `$` prefix (ex. ``) ([#622](https://github.com/techniq/layerchart/pull/622)) + +- refactor: Rename simplified charts `renderContext` prop to `layer` ([#659](https://github.com/techniq/layerchart/pull/659)) + +- feat(LineChart): Support `orientation="vertical"`. Resolves #640 ([#557](https://github.com/techniq/layerchart/pull/557)) + +- perf: Optimize primitive component instantiation (~3-5x faster for Rect, Circle, Ellipse, Line, Text, Path, Group) ([#449](https://github.com/techniq/layerchart/pull/449)) + - `createMotion`: Fast-path passthrough when no `motion` prop is provided, avoiding `$state`/`$effect` overhead per axis + - `createDataMotionMap`: Short-circuit when `motion` is `undefined`, skipping `parseMotionProp` overhead + - `createKey`: Only create fill/stroke key trackers in canvas layer (skipped for SVG/HTML) + - `registerComponent`: Skip `registerMark` for empty `MarkInfo` (pixel-mode marks) + - All primitives: Skip `$effect` for data motion tracking when no motion is configured + - Rect/Image: Avoid per-axis `parseMotionProp` calls when `motion` is `undefined` + +- feat(Marker): Add `square` and `square-stroke` types ([#805](https://github.com/techniq/layerchart/pull/805)) + +- fix(AnnotationRange): Don't extend past chart bounds when `x` is omitted on band scales, and treat `null` on either side of `x`/`y` as "extend to chart edge". ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(ArcLabel): Support rotation in Canvas mode ([#449](https://github.com/techniq/layerchart/pull/449)) + + Changed `centroid-rotated` and `centroid-radial` placements to pass `rotate` prop instead of SVG `transform` string to `Text`, enabling rotation in Canvas rendering. + +- fix(Area): Handle degenerate domains (e.g. all-zero data) and unify y0/y1 baseline logic ([#663](https://github.com/techniq/layerchart/pull/663)) + - 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 + +- fix(BarChart): automatically round the outer edge of each direction in `stackDiverging` layout ([#663](https://github.com/techniq/layerchart/pull/663)) + +- fix(canvas): Resolve `currentColor` for `fill`/`stroke` (and other style props) ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Pattern): fix alignment and sharply render on high-DPI displays when using Canvas layers ([#864](https://github.com/techniq/layerchart/pull/864)) + +- fix(downloadImage / getChartImageBlob): Fix image download (container sizing and text clipping) ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix: Remove TypeScript `as` casts from `class={...}` attributes in `Path` and `GeoPoint` to fix unocss compat. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix: guard against undefined accessor in printScale ([#875](https://github.com/techniq/layerchart/pull/875)) + + When activeGetters includes z or r scales that are not configured, the accessor is undefined, causing acc.toString() to throw. Added null check. + +- fix: Skip mark x/y/data from domain/series calculation when geo projection is active ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(GeoPath): Fix canvas tooltip by conditionally passing onclick to Path, preventing non-interactive overlays from capturing hit canvas events ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(GeoPath): Avoid passing `undefined` event handlers to underlying `Path`, preventing a Svelte error while preserving canvas hit-testing for non-interactive paths ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(ChartState): Don't create spurious implicit series when mark accessor matches chart's own axis accessor, fixing domain corruption for heatmap/Cell charts ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Pattern): Restore canvas layer support by registering as a `group` node so snippet children (e.g. ``) render correctly ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix: Pie and Arc components now correctly use Chart's `xRange` prop for angle degrees instead of the computed viewport pixel range, and compute radius from chart dimensions instead of scale range ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(scaleBandInvert): Account for range offset in band scale inversion. Previously assumed range started at 0, causing incorrect pixel-to-category mapping when the scale range was transformed. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(SeriesState): Avoid `derived_inert` crash when chart unmounts under a `` ([#855](https://github.com/techniq/layerchart/pull/855)) + + The `selectedKeys` sync effect was wrapped in `$effect.root`, creating an isolated scope that survived chart unmount. When the parent chart was destroyed (e.g. an example reloading inside the docs `` after an async `$derived` re-evaluated), the `#series` derived became inert while the orphaned effect kept reading it — producing `Reading a derived belonging to a now-destroyed effect may result in stale values` warnings followed by `TypeError: e.some is not a function`. The effect now lives in the constructor, scoped to the component that instantiated `SeriesState`, so it is torn down with the chart. + +- fix(Spline): Allow CSS class `opacity` to fade lines on the Canvas layer. `Spline` was always passing `opacity={1}` to the underlying `Path` when no series fade was active, which became `constantStyles.opacity = 1` in the canvas renderer and shadowed the value resolved from a user's `class` (e.g. `class="opacity-20"`). Now skip passing `opacity` when the computed series fade is the no-fade default, so the class can take effect — matching SVG behavior where CSS class rules override the presentation attribute. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Spline): Restore `series.props.opacity` (and other style props) precedence over the computed series fade opacity. Regression introduced by per-segment styling refactor where the explicit `opacity` was spread after `series.props`, clobbering per-series opacity values (e.g. `series={[{ props: { opacity: 0.1 } }, ...]}`). ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix: Allow negative string values (e.g. `y="-6"`) in `Text` position props to be treated as pixel values instead of data property names ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(TransformContext): Reactively sync `processTranslate` and `disablePointer` to TransformState when props change. Fixes inverted globe dragging when dynamically switching between flat and globe projections. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Arc, RectClipPath, ChartClipPath): Restore on-mount tween animations ([#855](https://github.com/techniq/layerchart/pull/855)) + + Two related regressions introduced in the layer-component split (#848) prevented `motion` + `initial*` props from animating on mount. + + **`Arc`** — `motion`, `value`, `initialValue` and the rest of Arc's geometry props (`domain`, `range`, `startAngle`, `endAngle`, `innerRadius`, `outerRadius`, `cornerRadius`, `padAngle`, `track*`, `offset`) were not destructured in `Arc.base.svelte`, so they leaked through `{...restProps}` onto the inner ``. The forwarded `motion` made `Path` _also_ tween the path-string on top of the end-angle tween that `ArcState` already drives, producing visibly wrong arcs (NaN coordinates, runaway radii). They are now extracted and passed explicitly to `ArcState`. + + **`RectClipPath` / `ChartClipPath`** — `motion`, `initialX`, `initialY`, `initialWidth`, `initialHeight` were declared on the type but never consumed: the path was a plain `$derived` of the static `x`/`y`/`width`/`height` props, so passing `` rendered the final width on mount with no animation. Each dimension now flows through its own `createMotion` (using the corresponding `initial*` value as the animation start), and the path is built from the animated values. + +- fix(ChartState): Don't filter explicit `x1Domain`/`y1Domain` by visible series when no series are configured. Restores grouped layout for composable `` usage (e.g. `` with `x1`/`x1Domain`/`x1Range`) where the visible-series filter previously emptied the secondary band scale domain, collapsing all bars to a single category position. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix: `flattenPathData` now handles relative arc commands, fixing rounded bars starting below the baseline during mount animation ([#663](https://github.com/techniq/layerchart/pull/663)) + +- refactor: Move contexts to separate `$lib/contexts` module ([#659](https://github.com/techniq/layerchart/pull/659)) + +- feat(Layer): Allow `type` to be optional, fallbacking back to `settings.layer` type ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(Calendar): Pass `cellSize` to children snippet (useful when responsive) ([#558](https://github.com/techniq/layerchart/pull/558)) + +- fix(Axis): Correctly place multiline parts based on placement ([#574](https://github.com/techniq/layerchart/pull/574)) + +- fix(Axis): Key using tick value instead string representation to support millisecond precision ([#508](https://github.com/techniq/layerchart/pull/508)) + +- fix(Rect): Support rounded (rx/ry) in Canvas layers (fixes [#481](https://github.com/techniq/layerchart/issues/481)) ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(Axis): Filter distinct tick values (useful when manually injecting extra values) ([#615](https://github.com/techniq/layerchart/pull/615)) + +- feat: Support global settings (layer type, debug, etc) ([#659](https://github.com/techniq/layerchart/pull/659)) + +- feat(TooltipContext): Support `band` mode with time scale (similar to band scale) ([#562](https://github.com/techniq/layerchart/pull/562)) + +- fix(Axis): Add time duration aware tick value/format support ([#508](https://github.com/techniq/layerchart/pull/508)) + +- fix: Default geo projection `translate` to container center when `translate` and `fitGeojson` are not specified, instead of using d3-geo's fixed default (`[480, 250]`) ([#815](https://github.com/techniq/layerchart/pull/815)) + +- fix(Chart): Enable scroll zoom for globe projections by including `scale: true` in default `transformApply` for globes. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- Removed lodash-es dependency ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(Area|Highlight): Properly handling diveraging stack layouts for negative values (line, highlight point) ([#663](https://github.com/techniq/layerchart/pull/663)) + +- fix(Bar): Fix browser lockup when switching between group and stack layouts ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(AreaChart|LineChart|DefaultTooltip): Handle per-series data with different length ([#557](https://github.com/techniq/layerchart/pull/557)) + +- fix(Calendar): Respect `start` instead of always start of year ([#657](https://github.com/techniq/layerchart/pull/657)) + +- feat(Highlight): Support passing `opacity` ([#557](https://github.com/techniq/layerchart/pull/557)) + +- fix(LineChart): Change default tooltip mode from `bisect-x` to `quadtree-x` (works with catagorical data and does not require data to be sorted) ([#578](https://github.com/techniq/layerchart/pull/578)) + +- feat(Circle|Rect): Support passing children snippet for Html layers ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(SimplifiedChart): Still add selected legend item opacity when item classes are also applied ([#557](https://github.com/techniq/layerchart/pull/557)) + +- fix(Rect): On the `` layer, set `background-origin: border-box` so fills/patterns start at the outer edge — previously the CSS `background` shorthand reset origin to `padding-box`, shifting patterns inward by `border-width` when a stroke was applied. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Rect, Circle, Ellipse): Apply `box-sizing: border-box` on the `` layer so the visual extent equals `width`×`height` (or `r * 2`, `rx * 2`×`ry * 2`) — the border is drawn within that extent instead of added to it, matching SVG bounds. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Rect, Circle, Ellipse): On the `` layer, default `border-width` to `1px` when `stroke` is set without an explicit `strokeWidth`, matching SVG's implicit `stroke-width: 1`. Also ensures Circle/Ellipse `border-width` gets the required `px` unit. ([#449](https://github.com/techniq/layerchart/pull/449)) + +- docs: Document each component's context support (svg, canvas, html) with interactive toggle ([#549](https://github.com/techniq/layerchart/pull/549)) + +- feat(Legend): Add `selected` prop to fade out unselected items (if passed and non-empty) ([#557](https://github.com/techniq/layerchart/pull/557)) + +- docs: Add non-radial BarChart duration example and improve radial example ([#496](https://github.com/techniq/layerchart/pull/496)) + +- feat(Chart): Support passing explicit `width` and `height` instead of requiring parent dimensions ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(Image): Stop disabling pointer events by default ([#862](https://github.com/techniq/layerchart/pull/862)) + +- fix(force-simulation): Fixed a bug that would sometimes keep a simulation running, when its inputs change, even if `alpha < alphaMin` ([#546](https://github.com/techniq/layerchart/pull/546)) + +- fix(Bar): Fix bar rounding direction when using xReverse/yReverse with interval scales ([#659](https://github.com/techniq/layerchart/pull/659)) + +- feat: Add `applyLanes()` array util to support densely packing timelines ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(TooltipContext): Add `touchEvents` to control touch event behavior. Defaults to `pan-y` to allow vertical scrolling but horizontal scrubbing. ([#557](https://github.com/techniq/layerchart/pull/557)) + +- perf: Lazy-load opt-in features in `core` path ([#845](https://github.com/techniq/layerchart/pull/845)) + + 5 components/dependencies that previously sat in every `` user's sync graph are now dynamically imported only when the corresponding feature is used: + - `BrushContext` in `Chart` — only loads when `` is set (default `undefined`) + - `DefaultTooltip` in `ChartChildren` — only loads when `tooltipContext` is set and no custom `tooltip` snippet is provided + - `d3-quadtree` in `TooltipContext` — only loads when `mode` is `'quadtree'`, `'quadtree-x'`, or `'quadtree-y'` + - `Spline` in `Grid` — only loads when rendering radial linear grid lines (`` with `radialY="linear"`) + - `Bar` in `Highlight` — only loads when `` is set (default `false`) + + Result: **~10 KB gz off `core`** (115.6 → 105.25 KB) and comparable savings on every cartesian/geo/graph/hierarchy scenario, with no impact on rendered output for users who already opt into these features. + + Also switches internal `@layerstack/svelte-actions` imports from the barrel (`@layerstack/svelte-actions`) to sub-paths (`@layerstack/svelte-actions/styles`, `@layerstack/svelte-actions/portal`). No production bundle effect — bundlers already tree-shake the unused `popover.js` — but it stops the Svelte REPL/CDN from eagerly fetching `@floating-ui/dom` (popover's transitive dep) when consumers load `layerchart` from a CDN. + +- feat(Voronoi): Support passing `r` to define a max radius (clip path) ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(Axis): Use `format` to filter ticks (integer and date/time). Helpful to keep ticks above a threshold for wide charts or short durations. ([#615](https://github.com/techniq/layerchart/pull/615)) + +- fix(GeoPath): Improve performance by only using custom geoCurvePath when `curve` overridden ([#561](https://github.com/techniq/layerchart/pull/561)) + +- fix(Highlight): Fix display of lines for first values (`0` coord). Fixes #568 ([#569](https://github.com/techniq/layerchart/pull/569)) + +- fix(Tooltip): Use standard CSS classes (non-tailwind) for root element to simplify some usage (including shadcn-svelte) ([#511](https://github.com/techniq/layerchart/pull/511)) + +- fix(Points|Labels): Correctly position when using array accessors (duration charts, etc). Fixes #633 ([#663](https://github.com/techniq/layerchart/pull/663)) + +- fix: Workaround Svelte 5.52+ regression (Parse failure: Expected '{', got '(') ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Points): Update `point.x` / `point.y` based on `ctx.radial` to simplify children snippet usage ([#611](https://github.com/techniq/layerchart/pull/611)) + +- feat(SeriesState): Add `isHighlighted(seriesKey)` to easy check if series is hightlight (or should be faded) ([#557](https://github.com/techniq/layerchart/pull/557)) + +- fix(TooltipContext): correct `bisect-band` hit detection by accounting for chart padding ([#806](https://github.com/techniq/layerchart/pull/806)) + +- feat(Axis): Support multiline ticks for time intervals ([#508](https://github.com/techniq/layerchart/pull/508)) + +- fix(Treemap): Fix reactivity of props (tile, padding, etc) ([#516](https://github.com/techniq/layerchart/pull/516)) + +- feat(Raster, Contour): support bounded geo raster overlays with projected interpolation ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(BarChart): Support time scale with `xInterval` / `yInterval` props ([#562](https://github.com/techniq/layerchart/pull/562)) + +- fix(ClipPath): Support canvas layers. Resolves #660 ([#663](https://github.com/techniq/layerchart/pull/663)) + +- fix(TooltipList): Align label to top (start) instead of center by default ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Bar): Clamp radius to width/height to not cause artifacts with small values (including `0`) when rounding a single edge. Fixes #383 ([#610](https://github.com/techniq/layerchart/pull/610)) + +- feat: Add Polygon primitive ([#533](https://github.com/techniq/layerchart/pull/533)) + +- breaking(Blur): Remove children snippet props (not needed and easier to support canvas in the future) ([#549](https://github.com/techniq/layerchart/pull/549)) + +- fix(Axis): Fix memory leak and improve performance when tick values are `Date` instances ([#586](https://github.com/techniq/layerchart/pull/586)) + +- fix(BarChart): Improve handling time scale for value axis (ex. xScale for horizontal orientation) ([#496](https://github.com/techniq/layerchart/pull/496)) + +- fix(Calendar): Support showing month labels without path via `monthLabel` prop (true by default) ([#449](https://github.com/techniq/layerchart/pull/449)) + +- perf: Reduce per-tick reactive overhead in `Path` / `Link` (force-simulation graphs) ([#855](https://github.com/techniq/layerchart/pull/855)) + + In mark-heavy scenes (force simulations with hundreds of links flowing through `Link → Path`) several reactive structures unconditionally subscribed every `` template updater to props that don't change on a tick, causing per-frame work to scale with the number of props × the number of marks. Each fix below is independent; together they take the lattice (n=20, 760 links) example from ~5–6 fps to ~9 fps during simulation. + + **`PathState.tweenedPathData` now reads only `pathData`, not all Path props.** + Pre-fix, the getter resolved `pathData` via `getProps()`, a function that constructs an object literal of every reactive Path prop. Each read of `tweenedPathData` (i.e. each per-tick `` update) therefore subscribed the updater to every Path prop and re-read all of them. `PathState` now takes a dedicated `getPathData` getter alongside `getProps`, and the hot-path tween / DOM read only touches `pathData`. `Path.svg.svelte` and `Path.canvas.svelte` pass them as separate getters. + + **`Link.base.svelte` passes a stable `getPathData` function rather than `motionPath.current` directly.** + Reading `motionPath.current` from `Link.base.svelte`'s template subscribed the entire `` block to every tick, forcing the parent's prop spread (`{...restProps}`) and `cls(...)` evaluation to re-run on every change. Passing a stable function reference moves the per-tick read inside ``'s own template, keeping `Link.base.svelte` stable. Requires the new `pathData?: string | (() => string)` form on `Path`. + + **`Path.svg.svelte` allocates `draw`-related state lazily.** + - `endPoint = createControlledMotion(..., { type: 'none' })` was created for every `Path`, even when no `draw` transition was configured. Now only created when `draw` is set. + - The `$effect` that tracked `tweenedPathData` for `startContent` / `endContent` positioning ran on every `Path`, even when neither prop was provided. Now only registered when at least one is set. + - `drawKey` is only ever set when `draw` is configured, so the `{#key c.drawKey}` block is a no-op for paths without a draw transition. The block stays unconditional — splitting it behind `{#if draw}` showed no measurable benefit over leaving the inert subscription in place. + + **`Path.svg.svelte` extracts styling props out of `...rest`.** + `pathData`, `class`, `fill` / `fillOpacity` / `stroke` / `strokeOpacity` / `strokeWidth` / `opacity` and `motion` are now destructured out of `$props()` rather than left in `...rest`, so the `` element's `{...rest}` spread doesn't re-evaluate every frame when those props change (`pathData` changes on every force-sim tick; `class` is typically a fresh `cls(...)` string per parent render). + + **`Link.base.svelte` drops a redundant prop spread.** + Removed `{...extractLayerProps(restProps, 'lc-link')}` before `{...restProps}` — the call's only contribution (`class`) was being immediately overridden by the explicit `class={cls('lc-link', …)}` that follows, making the spread pure overhead. + +- fix(Calendar|MonthPath): Support canvas by using `Spline` instead of `path` ([#549](https://github.com/techniq/layerchart/pull/549)) + +- refactor: Replace `date-fns` usage with existing `d3-time` to reduce bundle size ([#551](https://github.com/techniq/layerchart/pull/551)) + +- feat: Add Month component ([#671](https://github.com/techniq/layerchart/pull/671)) + +- fix: Support `opacity` prop/style when Canvas rendered for all primatives ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(LinearGradient): Support Html context ([#557](https://github.com/techniq/layerchart/pull/557)) + +- fix(ArcChart): Do not pass y accessor to use linear scale fallback ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(ForceSimulation): Refined `onstart`/`ontick`/`onend` events of `ForceSimulation` ([#547](https://github.com/techniq/layerchart/pull/547)) + +- refactor: Update `@layerstack/svelte-state` and replace remaining `@layerstack/svelte-stores` usage (media query) (mostly docs related except Canvas) ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(Axis): Support responsive tick counts via `tickSpacing` prop ([#508](https://github.com/techniq/layerchart/pull/508)) + +- fix(Primatives): Apply default classes when using Canvas context (like Svg). Resolves #544 ([#557](https://github.com/techniq/layerchart/pull/557)) + +- chore: Update deps (including dagre from 1.x to 2.x) ([#449](https://github.com/techniq/layerchart/pull/449)) + +- breaking(Bar): Rename `bar` prop to `data` to better represent usage ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix: improve compatibility with UnoCSS Svelte scoped preprocessing ([#813](https://github.com/techniq/layerchart/pull/813)) + - Remove TypeScript-only `as` assertions from exported Svelte markup in core mark components so preprocessors that parse markup expressions as plain JavaScript can consume packaged components without failing + +- fix(Axis): Additional multiline month fix for day ticks ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix: Reduce bundle size by removing culori as transitive dependency ([#563](https://github.com/techniq/layerchart/pull/563)) + +- fix(ScatterChart): Support color scales based on value (such as threshold) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- fix(Rect): Support non-uniform `corners` in data/edge mode ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(TooltipContext): Support `quadtree` mode for geo visualizations ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(Chart): Support `motion` prop to transition x/y scales using tween or spring ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(Chart): Add `xInterval` / `yInterval` for time scales usage with bar charts ([#562](https://github.com/techniq/layerchart/pull/562)) + +- fix(Highlight): Support radial area (issue #112) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- fix: Update dependencies, notable @layerstack/utils with improved metric number formatting ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat(Chart): Automatically determine scale based on data and domain values (instead of defaulting to scaleLinear) ([#624](https://github.com/techniq/layerchart/pull/624)) + +- feat(Chart|Svg|Html): Support passing `clip` prop to hide overflown content ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(AreaChart): Change default tooltip mode from `bisect-x` to `quadtree-x` (works with catagorical data and does not require data to be sorted) ([#578](https://github.com/techniq/layerchart/pull/578)) + +- fix(Text): Support explicit "\n" and set line-height (to match svg/canvas) for html layers ([#659](https://github.com/techniq/layerchart/pull/659)) + +- perf: Skip mark-info `$effect` for pixel-mode primitives ([#855](https://github.com/techniq/layerchart/pull/855)) + + `registerComponent` now probes `markInfo()` once at construction; if the result is initially empty (pixel-mode primitives where `cx`/`cy`/`r`/etc. are numbers rather than string/function accessors), it skips creating the tracking `$effect` entirely. Saves one effect frame per primitive — adds up in mark-heavy scenes (force simulations, scatter plots with hundreds of nodes). + + Trade-off: a primitive that starts in pixel mode and later flips to data mode at runtime (e.g. `cx` mutates from a number to a string) will not register a mark. Mark mode is typically static; if a chart needs runtime data-mode marks, define an explicit `series` on the chart instead. + +- fix(ForceSimulation): Expose default values by exporting them as constants ([#530](https://github.com/techniq/layerchart/pull/530)) + +- feat: Update `applyLanes()` util to support nested string key and function accessors for start/end properties ([#449](https://github.com/techniq/layerchart/pull/449)) + +- fix(Spline): Only re-draw on data/path changes and not other context (such as width/height). Fixes #504 ([#505](https://github.com/techniq/layerchart/pull/505)) + +- fix(Axis): Fix multiline month when day tick does not align on first of month ([#517](https://github.com/techniq/layerchart/pull/517)) + +- fix: Update `dagreAncestors()` and `dagreDescendants()` util types ([#629](https://github.com/techniq/layerchart/pull/629)) + +- fix: Add `applyLanes()` as top-level export ([#449](https://github.com/techniq/layerchart/pull/449)) + +- feat: Add classes for underlying element styling ([#458](https://github.com/techniq/layerchart/pull/458)) + +- fix: Resolves "Target div has zero or negative height" console warning (issue #291) ([#458](https://github.com/techniq/layerchart/pull/458)) + +- fix(Canavs): Support `style` attribute ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(Canavs): support `strokeOpacity` for Path component ([#663](https://github.com/techniq/layerchart/pull/663)) + +- feat(Chart): Support `class` prop ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(Canavs): Suppport dashed stroke (fix: #652) ([#659](https://github.com/techniq/layerchart/pull/659)) + +- fix(Spline): Make motion prop reactive so toggling between tween/none updates without remount ([#449](https://github.com/techniq/layerchart/pull/449)) + +- refactor: Remove use of `layerClass` and apply `lc-{name}` class directly to allow easy component
` covering the chart container. - - This replaces the previous `canvasClip` / `canvasClipDeps` callbacks (and skipped HTML entirely) with a single declarative value. The `clip` snippet is still accepted for advanced/custom SVG content. - - `RectClipPath`, `CircleClipPath`, and `GeoClipPath` are rewritten on top of this — they each compute a path string (d3-geo-path already emits one natively) and pass it through. All three now support `` layers in addition to `` and ``. - - Note: `clip-path: path()` requires Chrome 88+, Safari 13.1+, Firefox 118+. - -- feat(ClipPath, RectClipPath, CircleClipPath, GeoClipPath): Add `invert` prop to render content _outside_ the clip shape (cutouts/masks) across SVG, Canvas, and HTML layers ([#449](https://github.com/techniq/layerchart/pull/449)) - -- feat(Line, Rect, Circle, Text): Multi-layer compatible `dashArray` and inline color props ([#449](https://github.com/techniq/layerchart/pull/449)) - - Added a typed `dashArray` prop to `Line`, `Rect`, and `Circle`. Accepts a number, array, or SVG-style string and maps to `stroke-dasharray` (SVG), `setLineDash` (Canvas), and either `repeating-linear-gradient` (HTML lines) or `border-style: dashed` (HTML borders). Previously dashed styling was SVG-only when applied via CSS class or attribute. - - `Text` and `Line` HTML branches now honor the `fill`/`stroke` props as inline `color`/`background`, so prop-based colors work across all three layers (not just SVG/Canvas). - - `Grid.x`/`Grid.y` and `Axis.grid` now accept `stroke`, `strokeWidth`, `opacity`, and `dashArray` in their object form, matching the props forwarded to the underlying line. - - `Rule` already forwarded arbitrary Line props via spread; `dashArray` now works there unchanged. - - Exports `parseDashArray` and `dashArrayToGradient` helpers from `path` utils. - -- feat(Tree, Link, Connector): Add radial support ([#831](https://github.com/techniq/layerchart/pull/831)) - - `Tree` now detects `` and lays out with `d3.tree().size([2π, min(width, height)/2])` plus radial separation. Nodes emit polar coords (`x` = angle, `y` = radius). - - `Connector` gains a `radial` prop (defaults to `ctx.radial`) that interprets `source`/`target` as polar and dispatches to new `getConnectorRadialPresetPath` / `getConnectorRadialD3Path` helpers. Radial behavior per connector `type`: - - `straight` — straight cartesian line - - `square` — radial → arc at midR → radial - - `beveled` — chord at source radius with chamfered corner (controlled by `radius`) - - `rounded` — visx LinkRadialCurve Bezier - - `d3` — `d3.linkRadial` by default; with a `curve` prop, `curveStep` / `curveStepBefore` / `curveStepAfter` map to polar arcs/radials, other curves go through `d3.lineRadial` - - `Link` forwards `radial` to `Connector` automatically when inside a radial ``. - -- feat(Rect): Add `corners` prop for per-corner rounding ([#449](https://github.com/techniq/layerchart/pull/449)) - - New `corners` prop accepts either a number (equivalent to `rx`), a `[topLeft, topRight, bottomRight, bottomLeft]` tuple, or `{ topLeft, topRight, bottomRight, bottomLeft }`. Works across ``, ``, and `` layers — Svg renders a `` when corners are uniform and a `` when they differ, Canvas uses `roundRect`'s per-corner radii, and Html uses the 4-value `border-radius` shorthand. - - Also exports a shared `roundedRectPath(x, y, width, height, [tl, tr, br, bl])` helper from `path` utils for building per-corner rounded-rect path data. - -### Patch Changes - -- fix(canvas): Compose globalAlpha multiplicatively so Group opacity propagates to children ([#831](https://github.com/techniq/layerchart/pull/831)) - - Canvas `renderPathData` was overwriting `ctx.globalAlpha` with absolute values for element opacity, fill opacity, and stroke opacity. This meant a parent `` had no effect on child marks rendered on canvas — the child's own opacity (defaulting to 1) would replace the inherited value. - - Now all three sites multiply against the current `globalAlpha`, which correctly composes with ancestor Group opacity set via `save()`/`restore()` scoping. Also removes double-application of element `opacity` inside the fill/stroke blocks (it's already applied at the element level). - -## 2.0.0-next.54 - -### Minor Changes - -- feat: New `GeoClipPath` component for clipping content to GeoJSON boundaries in both SVG and Canvas modes ([#449](https://github.com/techniq/layerchart/pull/449)) - -- feat(Text): Add `segments` prop for inline mixed-style text ([#449](https://github.com/techniq/layerchart/pull/449)) - - New `segments` prop accepts an array of `{ value, class }` objects to render text with different styles (font size, weight, color) inline. Works across SVG (via tspans), Canvas (via sequential measureText/fillText), and HTML layers. Useful for labels that combine a bold name with a lighter value, such as treemap headers. - -- feat(Hull): Add CommonStyleProps (fill, fillOpacity, stroke, strokeOpacity, strokeWidth, opacity) for Canvas layer compatibility ([#449](https://github.com/techniq/layerchart/pull/449)) - -- feat(Tooltip): Add `fadeDuration` prop to control fade in/out transition ([#828](https://github.com/techniq/layerchart/pull/828)) - - The fade transition on `Tooltip.Root` is now configurable via the `fadeDuration` prop (default: `100`ms). Set to `0` to disable the fade transition entirely. - -- feat(Tooltip): Portal tooltip to body by default to fix overflow clipping. Resolves #446 ([#828](https://github.com/techniq/layerchart/pull/828)) - - Tooltip.Root now portals to `document.body` (or `.PortalTarget`) by default using the `portal` action from `@layerstack/svelte-actions`. This prevents tooltips from being clipped by ancestor elements with `overflow: hidden`. The tooltip uses `position: fixed` with viewport-relative coordinates when portaled. Set `portal={false}` to restore the previous inline behavior. Both `contained="container"` and `contained="window"` modes continue to work correctly with portaling. - -### Patch Changes - -- fix(ArcLabel): Support rotation in Canvas mode ([#449](https://github.com/techniq/layerchart/pull/449)) - - Changed `centroid-rotated` and `centroid-radial` placements to pass `rotate` prop instead of SVG `transform` string to `Text`, enabling rotation in Canvas rendering. - -- fix: Pie and Arc components now correctly use Chart's `xRange` prop for angle degrees instead of the computed viewport pixel range, and compute radius from chart dimensions instead of scale range ([#449](https://github.com/techniq/layerchart/pull/449)) - -## 2.0.0-next.53 - -### Minor Changes - -- feat: Support pre-projected topologies in `GeoLegend` via `referenceScale` ([#449](https://github.com/techniq/layerchart/pull/449)) - - Add a `referenceScale` prop to `GeoLegend` for charts that render pre-projected data with `geoIdentity` (e.g. `us-atlas`'s `counties-albers-10m` / `states-albers-10m`, pre-projected with `geoAlbersUsa().scale(1300)`). When provided, pixels-per-distance is derived from the chart's fit scale and the supplied base scale, bypassing the `projection.invert` + `geoDistance` path which only works for real lon/lat projections. The `GeoPath` bubble-map example now renders a correct scale bar. - -## 2.0.0-next.52 - -### Minor Changes - -- feat(ArcLabel): New component for positioning text labels on arc segments ([#817](https://github.com/techniq/layerchart/pull/817)) - - `ArcLabel` is a new marking component for placing text (and optional leader lines) relative to an arc. It's used internally by `PieChart` and `ArcChart` when the `labels` prop is set, but can also be rendered directly inside an `Arc` children snippet. - - Supported placements: - - `centroid` — at the arc centroid (horizontal text, default) - - `centroid-rotated` — at the centroid, rotated to follow the arc tangent, flipped where needed so text stays upright - - `centroid-radial` — at the centroid, rotated to read along the radial direction (center → outer edge) - - `inner` / `middle` / `outer` — along the inner, medial, or outer arc path (centered via `startOffset: '50%'` by default) - - `callout` — outside the arc with a leader line that bends horizontally to the label - - `ArcLabel` accepts a single `offset` prop that is routed to the placement-appropriate radial padding (centroid offset, `innerPadding`/`outerPadding`, or `calloutLineLength`), plus `calloutLineLength` / `calloutLabelOffset` / `calloutPadding` for fine-grained control of callout leader lines. The leader line renders via the `Path` primitive, so it works in both SVG and Canvas chart layers. - -- breaking(Arc): Center arc text along path by default for `inner`/`middle`/`outer` positions ([#817](https://github.com/techniq/layerchart/pull/817)) - - `getArcTextProps('inner' | 'middle' | 'outer')` now defaults to `startOffset: '50%'` with `textAnchor: 'middle'`, centering the text along the arc path rather than anchoring it at the arc start. When an explicit `startOffset` is provided, the anchor falls back to `'start'` so the text begins at that position (matching prior behavior for callers that set a start offset). - -- feat(Arc): Add `innerPadding` option to `getArcTextProps` / `getTrackTextProps` ([#817](https://github.com/techniq/layerchart/pull/817)) - - `ArcTextOptions` now supports an `innerPadding` option, symmetric to the existing `outerPadding`. Positive values shrink the inner radius used to build the `inner`/`middle` arc text paths, moving text inward (toward the chart center). Previously, offsetting an `inner`-placed arc label away from the arc edge required overriding the path manually; now it works the same as `outerPadding` does for `outer` text. - -- feat(CircleLegend): New component for visualizing radius (`rScale`) values as nested circles ([#818](https://github.com/techniq/layerchart/pull/818)) - - `CircleLegend` displays a set of bottom-aligned nested circles representing values from a radius scale, useful alongside bubble maps and scatter charts that encode magnitude via circle area. By default it reads `rScale` from the chart context, but a `scale` prop can also be passed to render standalone. - - Supports `tickValues` / `ticks` / `tickFormat` for value selection and formatting, a `title` rendered centered above the circles, and `labelPlacement="right" | "left" | "inline"` to render tick labels with a leader line on either side of the circles or centered inside each circle near the top. - -- feat(GeoLegend): New scale-bar legend showing real-world distance for the current `Chart` projection ([#818](https://github.com/techniq/layerchart/pull/818)) - - `GeoLegend` reads the active geo projection from the chart context and renders a labeled scale bar with tick subdivisions. By default it picks a "nice" round distance that covers ~25% of the chart width, but `distance` can be passed for an explicit value. Supports `units="km" | "mi"`, configurable `ticks`, `tickFormat`, `title`, and the standard `placement` props. Inspired by Harry Stevens' [d3-geo-scale-bar](https://observablehq.com/@harrystevens/introducing-d3-geo-scale-bar). - -- feat(Labels): Add `middle` placement and change `center` to center within the bar body ([#449](https://github.com/techniq/layerchart/pull/449)) - - `placement="center"` now positions the label at the center of the bar body (between the value edge and the baseline). The previous `center` behavior (label aligned to the value edge with a middle anchor) is now available as the new `placement="middle"`. - -- feat(Legend, CircleLegend): Show an indicator of the current tooltip value on the legend ([#818](https://github.com/techniq/layerchart/pull/818)) - - `Legend` (ramp variant) now draws a small upward-pointing arrow below the color ramp at the position of the currently hovered value, and `CircleLegend` draws a 50%-opacity filled circle at the corresponding radius. Both auto-read the hovered data from `ctx.tooltip.data` and pipe it through the chart's color (`ctx.c`) / radius (`ctx.r`) accessors, so wiring is automatic for charts that configure `c` / `r` / `cScale` / `rScale` via `Chart` props. - - A new `value` prop on both components allows explicitly setting the indicator value (overriding the auto-detection), useful when the tooltip data shape doesn't match the chart's accessor. - - For `scaleThreshold` / `scaleQuantize` / `scaleQuantile` scales, the `Legend` indicator centers on the matching bucket swatch. - -- feat(PieChart/ArcChart): Add top-level `labels` prop ([#817](https://github.com/techniq/layerchart/pull/817)) - - `PieChart` and `ArcChart` now accept a `labels` prop that renders text labels on each arc without requiring a custom `arc` snippet. Pass `true` to enable defaults (centroid placement, default value accessor), or an object to configure any `ArcLabel` props — placement, offset, value accessor, callout line lengths, leader line style, text class, etc. - - ```svelte - - ``` - -## 2.0.0-next.51 - -### Minor Changes - -- feat: New `GeoRaster` component for reprojecting raster imagery (e.g. NASA Blue Marble) onto any d3-geo projection via per-pixel inverse sampling on Canvas ([#815](https://github.com/techniq/layerchart/pull/815)) - -- feat: Add `renderChart()` to `layerchart/server` for server-side chart-to-image rendering (PNG/JPEG) ([#813](https://github.com/techniq/layerchart/pull/813)) - -### Patch Changes - -- feat: Add `stroke` and `fill` props to `Axis` and `Grid` for explicit color control (useful for SSR where CSS variables are unavailable) ([#813](https://github.com/techniq/layerchart/pull/813)) - -- fix: Skip mark x/y/data from domain/series calculation when geo projection is active ([#449](https://github.com/techniq/layerchart/pull/449)) - -- fix: Default geo projection `translate` to container center when `translate` and `fitGeojson` are not specified, instead of using d3-geo's fixed default (`[480, 250]`) ([#815](https://github.com/techniq/layerchart/pull/815)) - -- fix: improve compatibility with UnoCSS Svelte scoped preprocessing ([#813](https://github.com/techniq/layerchart/pull/813)) - - Remove TypeScript-only `as` assertions from exported Svelte markup in core mark components so preprocessors that parse markup expressions as plain JavaScript can consume packaged components without failing - -## 2.0.0-next.50 - -### Minor Changes - -- feat: New Trail component for variable-width lines ([#449](https://github.com/techniq/layerchart/pull/449)) - -- fix(Axis): Default `tickSpacing` to `null` for categorical band scales, showing all ticks by default instead of reducing them. Use `tickSpacing={80}` to opt-in to tick reducing on categorical band scale axes. ([#449](https://github.com/techniq/layerchart/pull/449)) - -### Patch Changes - -- fix(Spline): Make motion prop reactive so toggling between tween/none updates without remount ([#449](https://github.com/techniq/layerchart/pull/449)) - -## 2.0.0-next.49 - -### Minor Changes - -- feat(Labels): Add `smart` placement option ([#799](https://github.com/techniq/layerchart/pull/799)) - - New `placement="smart"` mode that dynamically positions labels based on neighboring point values (peak, trough, rising, falling) to reduce overlapping. - -- feat(Chart, BrushState): Add band scale (categorical) support for transform pan/zoom and brush selection. Uses range-rescaling pattern to smoothly zoom and pan categorical bar charts. Automatically constrains panning to data boundaries and prevents zooming out past initial view. ([#449](https://github.com/techniq/layerchart/pull/449)) - -- feat(Chart): In projection mode, `scaleExtent` and `translateExtent` are now interpreted as relative values (like d3-zoom). `scaleExtent: [0.5, 8]` means 0.5x to 8x of the fitted projection scale. `translateExtent` is offset from the initial fitted position in pixels. ([#449](https://github.com/techniq/layerchart/pull/449)) - -- feat(Spline): Support function-valued `stroke`, `fill`, and `opacity` for per-segment styling ([#449](https://github.com/techniq/layerchart/pull/449)) - -- feat(Text): Add `format` prop and tween numeric `value` when `motion` is configured ([#449](https://github.com/techniq/layerchart/pull/449)) - -### Patch Changes - -- Support `tickSpacing` for band scales on Axis, thinning tick labels when the domain is larger than the available space. Automatically shows more tick labels when zoomed in on band scale transforms. ([#449](https://github.com/techniq/layerchart/pull/449)) - -- perf: Optimize primitive component instantiation (~3-5x faster for Rect, Circle, Ellipse, Line, Text, Path, Group) ([#449](https://github.com/techniq/layerchart/pull/449)) - - `createMotion`: Fast-path passthrough when no `motion` prop is provided, avoiding `$state`/`$effect` overhead per axis - - `createDataMotionMap`: Short-circuit when `motion` is `undefined`, skipping `parseMotionProp` overhead - - `createKey`: Only create fill/stroke key trackers in canvas layer (skipped for SVG/HTML) - - `registerComponent`: Skip `registerMark` for empty `MarkInfo` (pixel-mode marks) - - All primitives: Skip `$effect` for data motion tracking when no motion is configured - - Rect/Image: Avoid per-axis `parseMotionProp` calls when `motion` is `undefined` - -- feat(Marker): Add `square` and `square-stroke` types ([#805](https://github.com/techniq/layerchart/pull/805)) - -- fix(GeoPath): Fix canvas tooltip by conditionally passing onclick to Path, preventing non-interactive overlays from capturing hit canvas events ([#449](https://github.com/techniq/layerchart/pull/449)) - -- fix(scaleBandInvert): Account for range offset in band scale inversion. Previously assumed range started at 0, causing incorrect pixel-to-category mapping when the scale range was transformed. ([#449](https://github.com/techniq/layerchart/pull/449)) - -- fix(TransformContext): Reactively sync `processTranslate` and `disablePointer` to TransformState when props change. Fixes inverted globe dragging when dynamically switching between flat and globe projections. ([#449](https://github.com/techniq/layerchart/pull/449)) - -- fix(Chart): Enable scroll zoom for globe projections by including `scale: true` in default `transformApply` for globes. ([#449](https://github.com/techniq/layerchart/pull/449)) - -- feat(Raster, Contour): support bounded geo raster overlays with projected interpolation ([#449](https://github.com/techniq/layerchart/pull/449)) - -- feat: Add Month component ([#671](https://github.com/techniq/layerchart/pull/671)) - -- fix(LinearGradient, RadialGradient): Register as `group` instead of `mark` in canvas component tree so wrapped children (e.g. Arc, Path) are rendered ([#449](https://github.com/techniq/layerchart/pull/449)) - -## 2.0.0-next.48 - -### Patch Changes - -- fix(ChartState): Don't create spurious implicit series when mark accessor matches chart's own axis accessor, fixing domain corruption for heatmap/Cell charts ([#449](https://github.com/techniq/layerchart/pull/449)) - -## 2.0.0-next.47 - -### Major Changes - -- breaking(BrushContext|TransformContext): Rename `bind:brushContext` / `bind:transformContext` to `bind:state` ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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 - - - + - - - - + - ``` - -- breaking(TransformContext): Rename `domainExtent: 'original'` to `domainExtent: 'data'` ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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 - - - + - ``` - -- breaking(GeoContext): Rename `GeoContext` component to `GeoProjection` ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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 - - - + - ``` - -- breaking: Rename render context APIs to layer context ([#663](https://github.com/techniq/layerchart/pull/663)) - - `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' - ``` - -- breaking(Chart): Remove `isVertical` from ChartState, add `valueAxis` prop to `Chart` ([#663](https://github.com/techniq/layerchart/pull/663)) - - `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 `` 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 `` directly (not simplified charts): - - ```diff - - - + - ``` - -- breaking: Remove standalone context getter/setter functions ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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 - ``` - -- breaking(Arc|Pie|Calendar|GeoPath): Rename `tooltipContext` to simple `tooltip` (boolean), simplifying use case ([#663](https://github.com/techniq/layerchart/pull/663)) - -### Minor Changes - -- feat: Add BoxPlot component for box-and-whisker plots ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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. - -- feat: Add statistical utility functions `computeBoxStats()` and `kde()` ([#663](https://github.com/techniq/layerchart/pull/663)) - - `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 - -- feat: Add Violin component for violin plots ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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`. - -- feat(Spline): Support geo projection ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat: Add geo projection support for primitives (Circle, Rect, etc) ([#663](https://github.com/techniq/layerchart/pull/663)) - -- 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. ([#663](https://github.com/techniq/layerchart/pull/663)) - -- breaking(Brush): Redesign brush API ([#663](https://github.com/techniq/layerchart/pull/663)) - - **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 - -- feat: Unified component tree for Canvas rendering with proper Group transform scoping. Fixes #662 ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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. - -- feat: add `downloadImage`, `downloadSvg`, `getChartImageBlob`, and `getChartSvgString` utilities to export charts as PNG/JPEG/WebP images or SVG files ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat: Add Image component. Resolves #628 ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat(SeriesState): Support passing `selected` as part of series declaration (Ex. ` `) ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat: Add data mode to primitive components (Circle, Ellipse, Group, Line, Polygon, Rect, Text) ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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. - -- feat: Mark registration for automatic domain calculation, accessor aggregation, and implicit series ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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. - -- feat: Add inertia (momentum) support for transform drag gestures ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat: Add Cell mark. Resolves #627. ([#663](https://github.com/techniq/layerchart/pull/663)) - -- breaking(Chart): Rename `tooltip` prop to `tooltipContext` to better describe purpose and fix conflict with new `tooltip` snippet ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat: Add Chord layout and Ribbon primitive ([#663](https://github.com/techniq/layerchart/pull/663)) - -- breaking(TransformContext): Rename `initialScrollMode` to `scrollMode` and make it reactive ([#663](https://github.com/techniq/layerchart/pull/663)) - -- 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 ([#663](https://github.com/techniq/layerchart/pull/663)) - -- 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 ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat(Bar): Support fixed `width` and `height` props to override scale-derived dimensions, centering the bar within its band. Resolves #360 ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat: Auto-compute Bar/Bars mount animation initial values from chart scales ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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'`). - -- feat(Chart): Add cartesian pan/zoom via `transform={{ mode: 'domain' }}` with single or both axis support. Resolves #366 ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat(Spline): Add motion support for mount animation from baseline ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat: Support continuous color scales via `cScale` prop without requiring `cRange` ([#663](https://github.com/techniq/layerchart/pull/663)) - - Allow `cScale` (e.g. `scaleSequential(interpolateTurbo)`) to activate without `cRange`, enabling pre-configured sequential/diverging color scales - - Guard `createScale` against undefined `range` to avoid breaking interpolator-based scales - - Auto-detect numeric `cDomain` values and use `extent` instead of `unique`, producing correct `[min, max]` domains for continuous scales - - Prefer `cScale` color over default series color in tooltip/highlight when a color scale is configured - -- feat(Labels): Support `seriesKey` in `labels` prop to filter which series renders labels. Resolves #633 ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat(Rect): New edge-based props (`x0`/`x1`/`y0`/`y1`) along with existing (`x`/`y`/`width`/`height`) and `insets` support ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat: Add Vector component ([#663](https://github.com/techniq/layerchart/pull/663)) - -### Patch Changes - -- fix(Area): Default y0 baseline to chart's yBaseline when set ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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. - -- fix(Points|Labels): Correctly position when using x1 / y1 scales (issue #773) ([#663](https://github.com/techniq/layerchart/pull/663)) - -- refactor(Chart): Add `debug` prop and update `settings` context ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix: Default chart padding now applied when using ChartChildren layout (marks snippet) ([#663](https://github.com/techniq/layerchart/pull/663)) - - When `` 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. - -- fix(Tooltip): Apply inverse transform for quadtree lookup when zoomed/panned ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix(Area): Handle degenerate domains (e.g. all-zero data) and unify y0/y1 baseline logic ([#663](https://github.com/techniq/layerchart/pull/663)) - - 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 - -- fix(BarChart): automatically round the outer edge of each direction in `stackDiverging` layout ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix: `flattenPathData` now handles relative arc commands, fixing rounded bars starting below the baseline during mount animation ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix(Area|Highlight): Properly handling diveraging stack layouts for negative values (line, highlight point) ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix(Points|Labels): Correctly position when using array accessors (duration charts, etc). Fixes #633 ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix(TooltipContext): correct `bisect-band` hit detection by accounting for chart padding ([#806](https://github.com/techniq/layerchart/pull/806)) - -- fix(ClipPath): Support canvas layers. Resolves #660 ([#663](https://github.com/techniq/layerchart/pull/663)) - -- feat(Chart): Support `motion` prop to transition x/y scales using tween or spring ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix(Canavs): support `strokeOpacity` for Path component ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix(Text): handle inline styles and CSS class-based text-anchor ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix(Tooltip): Fade non-highlighted series items on hover to match chart highlight state ([#663](https://github.com/techniq/layerchart/pull/663)) - -- fix(TooltipContext): Support band mode with array-based range accessors (e.g. histograms using `x={['x0', 'x1']}`) ([#663](https://github.com/techniq/layerchart/pull/663)) - -## 2.0.0-next.46 - -### Patch Changes - -- fix: Workaround Svelte 5.52+ regression (Parse failure: Expected '{', got '(') ([#449](https://github.com/techniq/layerchart/pull/449)) - -- chore: Update deps (including dagre from 1.x to 2.x) ([#449](https://github.com/techniq/layerchart/pull/449)) - -## 2.0.0-next.45 - -### Major Changes - -- feat: New docs site ([#449](https://github.com/techniq/layerchart/pull/449)) - -### Minor Changes - -- breaking: Extract `Path` primitive component from `Spline` for better separation of concerns ([#659](https://github.com/techniq/layerchart/pull/659)) - -- breaking: Rename simplified charts `renderContext` prop to `layer` ([#659](https://github.com/techniq/layerchart/pull/659)) - -- breaking: Change `defaultChartPadding(axis, legend)` to `defaultChartPadding({ axis, legend })` and support overrides (ex. `defaultChartPadding({ left: 50 })`) ([#659](https://github.com/techniq/layerchart/pull/659)) - -### Patch Changes - -- feat(Chart): Support passing explicit `width` and `height` instead of requiring parent dimensions ([#659](https://github.com/techniq/layerchart/pull/659)) - -- feat: Support global settings (layer type, debug, etc) ([#659](https://github.com/techniq/layerchart/pull/659)) - -- feat(Layer): Allow `type` to be optional, fallbacking back to `settings.layer` type ([#659](https://github.com/techniq/layerchart/pull/659)) - -- feat(Chart|Svg|Html): Support passing `clip` prop to hide overflown content ([#659](https://github.com/techniq/layerchart/pull/659)) - -- feat(Circle|Rect): Support passing children snippet for Html layers ([#659](https://github.com/techniq/layerchart/pull/659)) - -- feat(Layer): Support showing chart and full frame boundaries with `settings.debug` ([#659](https://github.com/techniq/layerchart/pull/659)) - -- fix(Threshold): Properly clip `above` snippet (resolving 1/2 width clipping issues when using Spline) ([#659](https://github.com/techniq/layerchart/pull/659)) - -- fix(AnnotationRange|TooltipContext|Highlight): Fix using interval scales with reversed data (ex. xReverse) ([#659](https://github.com/techniq/layerchart/pull/659)) - -- fix(Canavs): Support `style` attribute ([#659](https://github.com/techniq/layerchart/pull/659)) - -- fix(Canavs): Suppport dashed stroke (fix: #652) ([#659](https://github.com/techniq/layerchart/pull/659)) - -- fix(Rect): Support rounded (rx/ry) in Canvas layers (fixes [#481](https://github.com/techniq/layerchart/issues/481)) ([#659](https://github.com/techniq/layerchart/pull/659)) - -- fix(Bar): Fix browser lockup when switching between group and stack layouts ([#659](https://github.com/techniq/layerchart/pull/659)) - -- fix(Bar): Fix bar rounding direction when using xReverse/yReverse with interval scales ([#659](https://github.com/techniq/layerchart/pull/659)) - -- fix(Text): Support explicit "\n" and set line-height (to match svg/canvas) for html layers ([#659](https://github.com/techniq/layerchart/pull/659)) - -- feat(Chart): Support `class` prop ([#659](https://github.com/techniq/layerchart/pull/659)) - -- refactor: Move contexts to separate `$lib/contexts` module ([#659](https://github.com/techniq/layerchart/pull/659)) - -- refactor: Removed lodash-es dependency ([#659](https://github.com/techniq/layerchart/pull/659)) - -## 2.0.0-next.44 - -### Patch Changes - -- fix(Canvas): Fix pointer events (hit canvas) when using Brave browser with fingerprinting protection enabled ([#449](https://github.com/techniq/layerchart/pull/449)) - -## 2.0.0-next.43 - -### Patch Changes - -- fix(Highlight|TooltipContext): Support xInterval / yInterval ([#449](https://github.com/techniq/layerchart/pull/449)) - -## 2.0.0-next.42 - -### Patch Changes - -- fix(Calendar): Respect `start` instead of always start of year ([#657](https://github.com/techniq/layerchart/pull/657)) - -## 2.0.0-next.41 - -### Patch Changes - -- fix(Tooltip): Correctly set tooltip position on chart enter and exit ([#655](https://github.com/techniq/layerchart/pull/655)) - -## 2.0.0-next.40 - -### Patch Changes - -- fix(LineChart): Restore passing xScale / yScale overrides ([#449](https://github.com/techniq/layerchart/pull/449)) - -## 2.0.0-next.39 - -### Minor Changes - -- feat: Support css-only usage (no Tailwind required) while retaining first-class Tailwind support ([#557](https://github.com/techniq/layerchart/pull/557)) - -### Patch Changes - -- feat: Simplify daisyUI, shadcn-svelte, and Skeleton integrations with single line `@import 'layerchart/{library}.css'` added to `app.css` ([#557](https://github.com/techniq/layerchart/pull/557)) - -- docs: Add examples for standalone, daisyUI v5, shadcn-svelte v1, Skeleton v3, and Svelte UX v2 (next) (including light/dark theming) ([#557](https://github.com/techniq/layerchart/pull/557)) - -- feat(LineChart): Support `orientation="vertical"`. Resolves #640 ([#557](https://github.com/techniq/layerchart/pull/557)) - -- feat: Add Html context support for applicable primitives such as Circle, Line, Rect, Text (and more) as well as transitively such as Axis, Grid, Labels (and more) ([#557](https://github.com/techniq/layerchart/pull/557)) - -- feat(LinearGradient): Support Html context ([#557](https://github.com/techniq/layerchart/pull/557)) - -- fix(Text): Apply `fill: currentColor` to support more straightforward way of changing color (ex. `class="text-red-500"` or `style="color:red"`) ([#557](https://github.com/techniq/layerchart/pull/557)) - -- fix(TooltipContext): Revert back to pointer events (instead of mouse/touch) but with `touch-action: pan-y`. Provides simplified events while allowing horizontal scrubbing with vertical scrolling. ([#557](https://github.com/techniq/layerchart/pull/557)) - -- feat(TooltipContext): Add `touchEvents` to control touch event behavior. Defaults to `pan-y` to allow vertical scrolling but horizontal scrubbing. ([#557](https://github.com/techniq/layerchart/pull/557)) - -- fix(TooltipContext): Fix `band` mode regression when both x/y are scaleBand (ex. punchcard chart) ([#557](https://github.com/techniq/layerchart/pull/557)) - -- fix(SimplifiedCharts): Properly handle `legend` prop as object when determining bottom padding ([#557](https://github.com/techniq/layerchart/pull/557)) - -- fix(AreaChart|LineChart|DefaultTooltip): Handle per-series data with different length ([#557](https://github.com/techniq/layerchart/pull/557)) - -- feat(Highlight): Support passing `opacity` ([#557](https://github.com/techniq/layerchart/pull/557)) - -- fix(SimplifiedChart): Still add selected legend item opacity when item classes are also applied ([#557](https://github.com/techniq/layerchart/pull/557)) - -- feat(Legend): Add `selected` prop to fade out unselected items (if passed and non-empty) ([#557](https://github.com/techniq/layerchart/pull/557)) - -- feat(SeriesState): Add `isHighlighted(seriesKey)` to easy check if series is hightlight (or should be faded) ([#557](https://github.com/techniq/layerchart/pull/557)) - -- fix(Primatives): Apply default classes when using Canvas context (like Svg). Resolves #544 ([#557](https://github.com/techniq/layerchart/pull/557)) - -- refactor: Remove use of `layerClass` and apply `lc-{name}` class directly to allow easy component