💎 Version 8.5.0
A minor release: fixes and features from a batch of 29 issues (#5363 to #5391), plus five contributor PRs.
Behaviour changes to check when upgrading:
- Trellis panels no longer reserve the empty title band above each plot. Other charts keep it; the grid.padding docs in the types say how far it can be pulled in.
- Horizontal bar charts thin overlapping category names instead of drawing them over each other.
- stackType 100% area and line charts now draw percentages, as 100% bars already did.
Also new:
- radialBar targets ship as an add-on: import
apexcharts/features/radial-targets(the full bundle includes it). - The plugin API's
dashArraynow also carries pattern strings and per-series patterns, so a plugin that assumed a number should handle those. - Legend and keyboard announcements are translated in every locale. The translations have not had a native-speaker review, so corrections are welcome.
- Full dash patterns everywhere, line caps on annotations (#5383).
- Trellis panels drop the empty title band above each plot.
- Thin overlapping category names on horizontal bar charts (#5371).
- A balanced hide order for overlapping labels (#5378).
- Tooltip.visible false keeps hover without the box (#5382).
- Band gap units, radial geometry for plugins, targets add-on (#5374, #5380, #5381).
- Keep points appended to a hidden series (#3200). Thanks @lbesecker195.
- Ignore chart click when a selection drag ends (#5060). Thanks @itisrmk.
- Don't draw end dots for a null row (#4458). Thanks @b84330808.
- Blend colour scale stops written with a hex alpha. Thanks @Enesuygurs.
- End a derived linear scale exactly on its max. Thanks @Pharex38.
- Fade a faded whole's own stroke when there is no outline. Thanks @lazerg.
- Fire marker hover and selection events. Thanks @lazerg.
- Honour avoidOverlap.maxShift of 0. Thanks @lazerg.
- Apply legend.labels.colors to the shared legend. Thanks @lazerg.
- Hide a stacked column label that is wider than its column. Thanks @lazerg.
- Keep a covered whole's stroke through the pick and clear frames. Thanks @lazerg.
- Clear the zoomed flag when updateSeries resets the axes. Thanks @lazerg.
- UpdateOptions({ trellis: null }) turns the grid back into one chart. Thanks @lazerg.
- Keep the label of a part of 0 on a stacked bar. Thanks @lazerg.
- Clear row and column when trellis is set to null. Thanks @lazerg.
- Keep the grid when two updateOptions calls land in one task. Thanks @lazerg.
- Warn instead of throwing when the chart type has no annotation groups. Thanks @lazerg.
- Measure a vertical stacked column label across the column. Thanks @lazerg.
- Use chart.fontFamily and legend.fontFamily in the HTML chrome. Thanks @lazerg.
- Place a zero part's label at its part edge. Thanks @lazerg.
- Remove the Reset Zoom button when updateSeries clears the zoom. Thanks @lazerg.
- Count exponent-notation decimals in preciseAddition. Thanks @Pharex38.
- Use stepSize when it divides a fixed min..max window. Thanks @Pharex38.
- Translate legend and keyboard announcements, fill locale gaps (#5373, #5376).
- Warn when a needle gauge overrides the indicator (#5385).
- Keep a hidden series' stroke as drawn with an outline on.
- Keep the zoomed view across internal updates and on y for xy (#5389, #5369).
- Keep the edge columns inside the plot while zoomed (#5368).
- Draw stackType 100% area and line charts as percentages (#5384).
- Rotate and thin category labels against the drawn plot (#5370).
- Never rotate radar category names.
- ResetSeries keeps a legend-hidden series after appendData.
The default bundle is 275,373 B gzipped, up 2,798 B (1.0%) from 8.4.1. The full bundle is 400,755 B gzipped, up 5,279 B (1.3%) from 8.4.1.
Upgrading is npm install apexcharts@8.5.0.
Full changelog, with the detail behind each change: https://github.com/apexcharts/apexcharts.js/compare/v8.4.1...v8.5.0
v3.3.11
3.3.11 is a security release. It stops clients that connect without an author token from all sharing one author (GHSA-746x-9w89-7xv6).
- Pads — clients without an author token no longer share one author (GHSA-746x-9w89-7xv6). Since the author token moved to an HttpOnly cookie, a pad connection that carried neither the cookie nor a legacy token resolved its token to
null, and every such client was mapped to the sametoken2author:nullauthor. Unrelated users (for example behind cookie blockers or in cross-site embeds) then appeared as one author and kicked each other off, and any of them counted as the creator of a pad another one had created, so they could delete it or change its pad-wide settings. A connection without a token now gets a fresh one for that session, and the access check does the same for HTTP callers such as import. Reported by @MaBeFHDW.
v3.3.11
3.3.11 is a security release. It stops clients that connect without an author token from all sharing one author (GHSA-746x-9w89-7xv6).
- Pads — clients without an author token no longer share one author (GHSA-746x-9w89-7xv6). Since the author token moved to an HttpOnly cookie, a pad connection that carried neither the cookie nor a legacy token resolved its token to
null, and every such client was mapped to the sametoken2author:nullauthor. Unrelated users (for example behind cookie blockers or in cross-site embeds) then appeared as one author and kicked each other off, and any of them counted as the creator of a pad another one had created, so they could delete it or change its pad-wide settings. A connection without a token now gets a fresh one for that session, and the access check does the same for HTTP callers such as import. Reported by @MaBeFHDW.
rrweb@2.2.0
- #1928
9b9a1ffThanks @Juice10! - Add a top-level annotation event withrecord.addAnnotation()andreplayer.on('annotation', handler). Annotation data usestype: 'caption'ortype: 'timelineMarker'. ImportannotationDatafrom@rrweb/typesto type annotation data. The player can display these annotations as captions and interactive timeline markers.
-
#1971
235ae85Thanks @eoghanmurray! - Fix record-side memory leaks and duplicate mutation emission:- Stopping a recording now releases the root document's mutation buffer and observer — previously the document observer was only disconnected, so each start/stop cycle leaked one buffer — and removes the cross-origin iframe
messagelistener. - A same-origin iframe is observed once instead of re-observed on every full snapshot (
checkoutEveryNth/checkoutEveryNms/manualtakeFullSnapshot), so a single iframe mutation is no longer emitted once per checkout; its observers are also released when the iframe is removed or navigates away. - The untainted-
MutationObserverhelper iframe used on WebKit/Safari is reference-counted, so it is torn down only when the last observer stops and will get rebuilt for a later recording.
- Stopping a recording now releases the root document's mutation buffer and observer — previously the document observer was only disconnected, so each start/stop cycle leaked one buffer — and removes the cross-origin iframe
-
#1958
009b2ddThanks @salzahrani-salla! - fix: disconnect shadow-DOM observers when their host is removedEach observed shadow root kept a live
MutationObserverplus its mutation buffer for the rest of the recording session even if its host was removed, a memory leak problem for component-heavy pages. Fix: release shadow observers and buffers as soon as we observe them as removed/detached from dom with tests added for the still-attached host-moved case, and to ensure they get re-observed on reinsertion. -
Updated dependencies [
9b9a1ff,235ae85,009b2dd]:- @rrweb/types@2.2.0
- @rrweb/utils@2.2.0
- rrweb-snapshot@2.2.0
- rrdom@2.2.0
rrweb-snapshot@2.2.0
-
#1958
009b2ddThanks @salzahrani-salla! - fix: release removed shadow trees from the mirrorRemoving a shadow host from DOM was leaving references to shadow descendants, so e.g. repeatedly replacing web components mem-leaked their detached trees. Fix by recursing into shadow roots during removal, including nested hosts and releasing strong references from the mirror.
rrdom-nodejs@2.2.0
- Updated dependencies [
9b9a1ff]:- @rrweb/types@2.2.0
- rrdom@2.2.0
@rrweb/utils@2.2.0
-
#1971
235ae85Thanks @eoghanmurray! - Fix record-side memory leaks and duplicate mutation emission:- Stopping a recording now releases the root document's mutation buffer and observer — previously the document observer was only disconnected, so each start/stop cycle leaked one buffer — and removes the cross-origin iframe
messagelistener. - A same-origin iframe is observed once instead of re-observed on every full snapshot (
checkoutEveryNth/checkoutEveryNms/manualtakeFullSnapshot), so a single iframe mutation is no longer emitted once per checkout; its observers are also released when the iframe is removed or navigates away. - The untainted-
MutationObserverhelper iframe used on WebKit/Safari is reference-counted, so it is torn down only when the last observer stops and will get rebuilt for a later recording.
- Stopping a recording now releases the root document's mutation buffer and observer — previously the document observer was only disconnected, so each start/stop cycle leaked one buffer — and removes the cross-origin iframe
rrweb-player@2.2.0
-
#1928
9b9a1ffThanks @Juice10! - Display annotation events as captions and timeline markers. Captions stay visible until replaced or cleared withtext: '',text: null, ortext: false. Seeking restores the caption for that replay time. Hovering or focusing timeline markers reveals their text, and clicking seeks to their timestamp.Captions are shown by default; set
showCaptions: falseto hide them initially. Recordings with nonempty captions show a CC toggle when the controls are visible. UsetimelineMarkerColorto configure annotation marker colors separately from custom-eventtags. -
#1928
9b9a1ffThanks @Juice10! - Make the playback timeline a keyboard-focusable slider with an accessible playback position. Use Home and End to seek to the start and end of the recording. Clicking the timeline focuses the slider so keyboard seeking can continue after scrubbing.
rrdom@2.2.0
- Updated dependencies [
009b2dd]:- rrweb-snapshot@2.2.0