⬆️ Upgrade dependency apexcharts to v6#4950
Open
renovate[bot] wants to merge 1 commit into
Open
Conversation
renovate
Bot
force-pushed
the
renovate/apexcharts-6.x
branch
3 times, most recently
from
July 19, 2026 21:00
b6e4684 to
47261c9
Compare
renovate
Bot
force-pushed
the
renovate/apexcharts-6.x
branch
from
July 21, 2026 01:00
47261c9 to
7532772
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
^5.0.0→^6.0.0Release Notes
apexcharts/apexcharts.js (apexcharts)
v6.4.0: 💎 Version 6.4.0Compare Source
A feature release centered on heatmaps and a new bar chart race. Heatmaps gain a continuous numeric and datetime x-axis (cells positioned by real value, not by column index), optional canvas rendering for large grids, and a tooltip that now points at the cell it describes. The bar chart race animates bars and their labels as they re-rank. Two fixes round it out. Existing configs mostly render unchanged; three heatmap defaults change (tooltip placement, zoom, and label thinning), each noted below with how to restore the previous behavior.
✨ Features
Continuous numeric and datetime x-axis for heatmaps
On a numeric or datetime heatmap, cells are now placed at their real x value instead of being tiled one per column by index. Irregular spacing and gaps therefore render as real empty space: a missing hour is a gap in the grid, not a column squeezed away, and the axis shows sparse proportional date and time ticks rather than one label per cell. Rows stay categorical (one series per row).
Canvas cell rendering for large heatmaps
With
chart.renderer: 'canvas'(or'auto'past the render threshold) and the tree-shakable canvas feature imported, heatmap cells now paint to a single canvas instead of one<rect>per cell.Bar chart race
A reorder update now animates into a bar chart race. When you re-sort the data and update the chart, the bars slide to their new ranks and their category labels ride along automatically (whenever
dynamicAnimationis on). Two opt-in flags complete the effect:dataLabels.animaterides each value label to its bar's new position, anddataLabels.countUptweens the number from its previous value.Both label flags are off by default and apply to bar and column charts. Rotated axis labels ride correctly too.
🔧 Behavior changes (heatmap defaults)
The heatmap tooltip is anchored above the cell
The heatmap tooltip now sits centered above the hovered cell with a downward arrow pointing at it, flipping below when the cell is against the top edge.
🐛 Fixes
dataReducerno longer mutates your data. With zoom-aware downsampling active, the reduced (windowed) view was written back into the originalseriesarray, which is shared by reference, so later re-renders started already downsampled and could never recover the full-resolution points. The reducer now operates on a detached copy, leaving your input intact.tooltip.customfunction replaced the tooltip's inner HTML, which discarded the arrow element. The arrow is now preserved across custom content, for every chart type.TypeScript
dataLabels.animateanddataLabels.countUp(bar chart race) are typed onApexDataLabels.Compatibility
v6.3.0: 💎 Version 6.3.0Compare Source
A performance release focused on updates.
updateSeriesis now genuinely incremental: a data-only update repaints the series and refreshes the axis chrome in place instead of tearing the chart down and rebuilding it, so streaming and frequently-updating charts are several times faster. Large-series initial render is also markedly quicker from shared parsing work. There are no API changes and no new options: the rendered output is verified identical to 6.2.0, so existing configs render exactly as before, just faster.The numbers below are 5-trial medians (initial render) and per-cycle medians (updates) from the reproducible harness behind the "100,000 Points" rendering benchmark, measured back to back on one machine (headless Chromium, animations off, identical seeded data).
⚡ Performance
updateSeriesis now incrementalPreviously every
updateSeriescall re-ran the full render pipeline: parse, re-layout, and a complete DOM rebuild. It now takes a fast path that repaints only the series layer and, when the axis scale changes, redraws the grid and axes in place within the frozen layout. The canvas renderer repaints its existing bitmap instead of recreating the backing store. Anything the fast path cannot reproduce exactly (a change in series count or data length, collapsed or combo series, an active zoom) falls back to the full render automatically.updateSeriescycleLine and area initial render: roughly 2 to 3 times faster at high point counts
The parse pipeline no longer forces a deep clone of the series and several whole-series aggregate passes that most charts never read, and plain numeric
[[x, y], ...]data now parses in a single typed pass that also computes the axis extrema inline (removing separate min/max scans). The path geometry itself was already fast; this release removes the surrounding per-render overhead.Scatter charts inherit the parsing wins
Scatter and bubble charts share the parse pipeline, so they pick up a portion of the same improvement without any scatter-specific work.
🐞 Fixes
🔧 Behavior changes (structural, not visual)
updateSeries. Data-only updates now keep and update the existing series, axis, and grid elements rather than replacing them. Rendered output (SVG path data and canvas pixels) is verified identical; code that re-queries chart elements after an update by class or attribute continues to work, but code that cached a specific element node reference from before an update and relied on it being replaced should re-query instead.Compatibility
v6.2.0: 💎 Version 6.2.0Compare Source
A performance release. Large-series rendering is 30 to 45% faster in both renderers, and scatter charts create half the DOM nodes they used to. There are no API changes and no new options: the rendered output is verified byte-identical to 6.1.0, so existing configs render exactly as before, just faster.
The numbers below are 5-trial medians from the reproducible harness behind the "100,000 Points" rendering benchmark post (headless Chromium, animations off, identical seeded data).
⚡ Performance
Scatter and bubble charts: half the nodes, up to 45% faster
Markers now render into ONE
apexcharts-series-markersgroup per series instead of one wrapper group per point. On a 50,000-point scatter that removes 50,000 groups, 50,000 event-delegation setups, and 50,000 clip-path writes from every render.Per-point interactivity is unchanged: tooltips,
dataPointMouseEnter/dataPointMouseLeave/dataPointSelection, marker hover states, and selection filters all read their identity from the marker paths themselves and keep working exactly as before. Discrete markers, per-pointfillColor, bubble z-scaling, and null-value markers are unaffected.Line and area charts: 36 to 43% faster at high point counts
Plain straight line and area series now take a numeric fast path: pixel coordinates are computed in one tight loop and the path string is assembled in a single join, skipping the per-point machinery that dominated large renders. Anything the fast path cannot reproduce exactly (null gaps, visible markers, data labels, stacking, combo charts, smooth and stepped curves) automatically falls back to the previous code path. The
dattribute output is byte-identical either way.updateSeriescycle, 10,000 pointsThe
updateSeriesimprovement applies to both renderers, so streaming and frequently-updating charts benefit as well.Canvas renderer: batched marker painting
The canvas renderer (
apexcharts/features/renderer-canvas) now paints markers as style batches: one fill/stroke state application per run of same-style markers, so a uniform single-series scatter collapses to a single batch. Non-circle marker shapes (square, triangle, diamond, star, cross, plus) reuse one cached geometry per shape and size, translated per marker, instead of building a path string and parsing it for every point. Line and area series painted on canvas consume the fast path's numeric coordinates directly, with no path-string parse at all.🔧 Behavior changes (structural, not visual)
.apexcharts-series-markerswrapper groups in scatter or bubble charts (for example, selecting the nth group to reach the nth point), there is now a single such group per series. The.apexcharts-markerpaths inside it, including theirrel,j,index,cx,cy, anddefault-marker-sizeattributes, are unchanged, so selectors that address markers directly keep working.Compatibility
dattributes) and canvas pixels are byte- and pixel-identical to 6.1.0 across the snapshot suite; only the wrapper-group structure noted above differs.v6.1.0: 💎 Version 6.1.0Compare Source
A focused follow-up to 6.0. The Measure ruler graduates into a first-class toolbar tool you can pre-select, toolbar tools can now be toggled off, and two interaction bugs are fixed. Everything is backward compatible: existing configs render unchanged.
✨ Features
Measure ruler in the toolbar
The measure / delta ruler (shipped in 6.0) is now a built-in toolbar tool, so it can be armed with a click instead of holding the measure key. The button appears automatically whenever the ruler is enabled, and can be pre-selected so the plot loads ready to measure.
chart.measure.enabledis true.tools.measureacceptstrue/falseor a custom SVG string, like the other tools.toolbar.autoSelectednow also accepts'measure', so the plot loads armed and ready to drag with no key held and no click. Themkey still works.🔧 Behavior changes (on by default)
Toolbar tools toggle off on re-click
Clicking an already-selected zoom, pan, selection, or measure icon now deselects it, leaving the chart with no active tool. Previously those buttons were one-way (clicking the active tool did nothing). This makes the ruler's on / off state obvious and lets you drop back to a plain, gesture-free chart.
TypeScript
toolbar.tools.measure, the'measure'value fortoolbar.autoSelected, and thetoolbar.measurelocale string are all typed.v6.0.0: 💎 Version 6.0.0Compare Source
The largest release in the library's history. Version 6 turns a chart from a picture you look at into a surface you investigate, author, and share. Most of what follows is opt-in and tree-shakeable; existing configs keep working unchanged, and the zero-dependency, SVG-first identity is intact.
Two behaviors change by default (both respect
prefers-reduced-motionand the existingdynamicAnimation.enabledescape hatch): data updates that add or remove points now animate coherently, and mobile pinch/pan gestures are on. See Fixes for the details.✨ Features
Weave: public plugin platform
Publish reusable chart plugins to npm against a stable, versioned API. A plugin draws into its own sandboxed layer and subscribes to lifecycle hooks; it never touches raw internal state.
api.layeris a plugin-owned drawing surface (path/line/rect/circle/text);api.scalesconverts data to pixels;api.data,api.theme, andapi.storeround out the facade.apiVersiongates the contract so raw internals can keep changing safely.ApexCharts.unregisterPlugin(name)exists for tests and hot reload.Strata: hybrid SVG + canvas renderer
Break the SVG node ceiling without leaving SVG behind. Below a threshold the output is identical SVG; above it, only the series layer becomes a
<canvas>while axes, grid, tooltips, annotations, and exports stay SVG.Marks: composable custom series types
Register a
renderItem(datum, scales, api)function and get a first-class series: events, shared tooltip, legend, and keyboard navigation all work with no extra wiring.Dumbbell, lollipop, and bullet ship as samples. Built-in type names are guarded against shadowing.
Rewind: history and undo/redo
Generic Ctrl-Z over a command journal. Zooms, series toggles, option changes, and annotation edits are recorded; high-frequency gestures coalesce into a single step.
Perspectives: shareable view state
Serialize the exact view (zoom window, hidden series, selection, annotations, theme) into a compact token you can put in a URL and restore anywhere.
Facet: design tokens and OS-aware themes
Charts read
--apx-*CSS custom properties from the cascade, follow the operating system's light/dark and contrast preferences with no JS, and can reference named brand themes.chart.refreshTokens()re-reads the cascade after a runtime token change that does not itself trigger a render.Cadence: pluggable easing
chart.animations.easingaccepts a named curve, a cubic-bezier array, or a function. The default is unchanged, so existing charts animate exactly as before.A data-change override is available via
chart.animations.dynamicAnimation.easing.Linked Views: crossfilter and cross-chart coordination
Coordinate a group of charts without wiring. In highlight mode, brushing one chart dims the non-matching marks in the others (no redraw). A real crossfilter engine adds categorical click-filters, range brushes, a shared data-table, and a heatmap 2D matrix target.
Ink Layer: direct-manipulation annotation authoring
Annotations become draggable and resizable, with click-to-create, snap to gridlines, and a floating editor card (inline rename, recolor, bold, font size, marker size and shape, delete). Every edit is undoable when Rewind is enabled.
Measure ruler
Hold a key and drag to read the change, percent, range, and slope between two points; on release the ruler pins as a data-anchored overlay that re-projects on zoom and resize.
mode: 'span'is the finance-style vertical band with a change/percent/range readout;mode: 'free'is a diagonal ruler between two arbitrary points. Styling resolves through--apx-measure-*tokens.Context menu (Radial Actions)
Right-click or long-press a data point for verbs that act at that exact point rather than chart-wide.
Built-in
annotate/xline/ylineitems are ink-managed when the ink feature is bundled (they open the floating editor and undo via Rewind).Storyboard: scroll-driven choreography (scrollytelling)
Pair prose sections with saved views. Scrolling a beat past the viewport trigger applies its view; scrolling back reverses it. Each beat can also merge an
updateOptionspayload so it can restyle or morphchart.typeinside one animated transition.Real-time streaming: constant-velocity scroll
Rolling-window updates now scroll at constant velocity instead of warping in place, and
chart.streamingbounds memory for long-running feeds.The scroll animation itself needs no opt-in: any update that continues the previous window (
appendData, or a shifted fixed-lengthupdateSeries) translates smoothly.🔧 Behavior changes (on by default)
Coherent variable-length data transitions
Updates that change the number of data points now animate as one coordinated motion instead of popping. Appended bars grow from the baseline, removed bars shrink into ghosts and fade out, line and area fills reshape over the union of old and new points (so they can never tear), and markers, bubbles, and axis tick labels ride along on the same clock. This also gives scatter and bubble charts dynamic-update animations for the first time, and bubbles tween their radius on
zchanges. Zoom re-projections animate their marks and ticks too.Disable per chart with
chart.animations.dynamicAnimation.enabled: false. Skipped automatically abovechart.animations.largeDatasetThresholdand whenprefers-reduced-motionis set.Native-feeling mobile gestures (Momentum)
Two-finger pinch-zoom around the centroid, two-finger pan, and kinetic inertia after a one-finger flick, with axis rails so a vertical swipe still scrolls the page. Configurable via
chart.zoom.pinchandchart.pan.inertia.🐛 Fixes
render()is idempotent: a repeatedrender()call (including a framework double-invoking an effect) returns the same promise instead of building a duplicate chart in the same element.destroy()clears it so an instance can render fresh; a rejected render clears itself so callers can retry.hideSeries/showSeries/toggleSeriesno longer silently no-op under strict CSS selector engines (the series lookup no longer relies on an escaped-colon attribute selector).pathFrom(doublez) that fed the animation engine an invalid command list on area updates.📦 Tree-shaking
Every feature above ships as a tree-shakeable entry (
apexcharts/features/*) registered through the feature registry; the core stays lean. See the tree-shaking guide for the complete list of entry points.TypeScript
Full type definitions ship with the package (no
@types/*install). 6.0 adds types for every new config namespace and API, plus the SSR statics (renderToString,renderToHTML,hydrate,hydrateAll,isHydrated).v5.16.0: 💎 Version 5.16.0Compare Source
✨ Features
Drilldown navigation (opt-in)
Click a data point to drill into a child level, with a breadcrumb trail and back navigation. Supported on bar, column, pie, donut, treemap, and heatmap. Tree-shakeable: import the feature and enable it.
chart.drilldown.series, or fetched on demand viaonDrillDown.position,separator,rootLabel,formatter) and includes a back-arrow.animation.zoomFromPointunfolds the child level outward from the clicked point (and folds back on drill-up).Pie / donut external (outer) data labels with leader lines (opt-in)
Render each slice's name outside the pie, connected by a leader line, so users no longer need to map legend colors back to slices. Pie and donut only (ignored for polarArea). The percentage keeps rendering inside the slice.
Scatter jitter: strip plots and overplotting (opt-in)
Spread overlapping scatter points apart. Two uses, one engine. Offsets are in axis units, deterministic (SSR-safe), and applied to the drawn positions only, so tooltips still show the true values.
{ x: 'Category', y: [v1, v2, ...] }data. Each category becomes a band and its values scatter horizontally within it. Every value is a real, hoverable marker; the sticky tooltip follows the hovered dot.{ x, y }data, add small random offsets so dense clusters fan out.Marker styling reuses the standard
markers/colors/fillconfig; setjitter.distributed: trueto color each band separately.Data reducer for range charts
chart.dataReducernow downsamplesrangeAreaandrangeBarseries via min-max bucket aggregation (preserving the visual extremes of each bucket), complementing the existing LTTB reduction for line/area.🐛 Fixes
v5.15.2: 💎 Version 5.15.2Compare Source
Fixes
Draw-animation frame no longer touches a destroyed chart
An animated chart (e.g. an
areachart) schedules arequestAnimationFrameduringrender()to run its mask-reveal / draw animation. If the chart was destroyed before that frame fired, the stale callback ran against already-cleared DOM and threw:The classic trigger is React StrictMode, which mounts → unmounts → remounts a component in development: the first mount queues the animation frame, the unmount calls
destroy()(which nullsw.dom.elDefs), and the queued frame then fires against the torn-down chart. Any sufficiently rapid unmount hit the same race.The fix adds an internal
isDestroyedflag, set bydestroy()(but not by updates), that the deferred draw-animation callbacks - mask reveal, stroke draw, and bulk reveal - check and bail on before touching the DOM. The flag is cleared on the next render, so re-mounting re-arms animations normally.This complements the detached-chart
destroy()fix in 5.15.1; together they resolve the teardown crashes tracked in react-apexcharts#602.v5.15.1: 💎 Version 5.15.1Compare Source
A small patch release with a single stability fix: charts that are torn down before they ever mount no longer throw.
Fixes
destroy()no longer throws on an un-mounted / detached chartCalling
destroy()(or an internalclear()) on a chart that never finished rendering threw:This happened when a chart was constructed against an element that wasn't connected to the DOM - so
create()bailed out early before building the SVG, leavingw.dom.Paperundefined - and the chart was then destroyed. Common triggers:useEffectcleanup (or a Vueunmountedhook) tearing the chart down before the element was ever attached.update()firing after the host element had already been removed.The teardown path now guards on the SVG actually having been created, cancels any pending resize redraw, and tolerates a missing
Apex._chartInstancesregistry, so destroying a never-mounted chart is a safe no-op.Fixes react-apexcharts#602 and vue-apexcharts#256.
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.