3 hours ago
spacetime

7.14.0

  • [new] - support JavaScript's Date.toString() fmt as input #465
  • [change] - clamp maximum .hour() to 0-23 #467
  • [update] - edmonton and yellowknife DST hour
  • [update] - dependencies
4 hours ago
hls.js

v1.7.3

Summary

HLS.js v1.7.3 includes bug fixes and improvements over the last release.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.7.2...v1.7.3

  • Fix audio selection with the assocLang option (#8028) @winklemad
  • Fix subtitle selection after disabling subtitles while VTT/IMSC1 segments are in-flight (#8037) @robwalch
  • Improve custom loader documentation (#7016)
  • Prevent live playlist reload recursion when last segment duration is less than roundtrip and XHR is syncronous (#8039)
  • Vendor the Karma rollup preprocessor (#7973) @itsjamie

Demo Page

https://ab2ca6e0.hls-js-dev.pages.dev/demo/

Feedback

Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

4 hours ago
next.js

v16.3.5

The following bug fixes have been backported. It does not include all pending features/changes on canary.

  • next/image: Skip 0-byte entries when initializing disk LRU cache (#98185)
  • next/image: Reject empty images when reading/writing to the disk cache (#98186)
  • Emit whole-app server NFTs when output: 'standalone' is used with an adapter (#98167)
  • Add CSP nonce to script tags of loading and template files (#98403)
  • Fix use cache prerender signal retention (#98448)
4 hours ago
apexcharts.js

💎 Version 7.2.0

A minor release built around the plugin layer and one new look for an existing type. Weave, the plugin host, gets two contract revisions: v2 hands a plugin enough context to decide whether it applies, and v3 lets one ask the chart for room to draw its own UI. Heatmap cells can now be hexagons, circles or diamonds, with a honeycomb tilemap that tessellates properly rather than approximating one.

Alongside that, eleven fixes. Six came from outside contributors, and they cluster on the parts of the library that are hardest to get right from the inside: stacked combo charts, brush selection bounds, annotation clamping and grouped tooltips.

gzip
7.1.0 default bundle 264,308 B
7.2.0 default bundle 266,813 B

No API breaking changes. There is one deliberate behaviour change, described in the first fix below: a series the viewer switched off in the legend now stays off across a data update. Upgrading is npm install apexcharts@7.2.0.

✨ New

Heatmap cell shapes

plotOptions.heatmap.shape takes 'rect' (the default), 'hexagon', 'circle' or 'diamond'.

new ApexCharts(el, {
  chart: { type: 'heatmap' },
  plotOptions: { heatmap: { shape: 'hexagon' } },
  series: [/* ... */],
}).render()

'circle' and 'diamond' are inscribed in the cell box the heatmap already lays out. 'hexagon' is a real honeycomb: pointy-top hexagons stretched to the cell width and 4/3 of the row pitch tall, with alternate rows offset a quarter cell so every neighbouring pair shares a full edge. The lattice overhangs the grid, so that overhang is reserved as a grid-padding floor and the heatmap group gets its own widened clip; offset rows never slide under the y-axis labels and nothing is sliced at the edges.

Shaped cells render as SVG paths that keep the apexcharts-heatmap-rect class and the same attribute contract, so tooltips, keyboard navigation, legend range highlighting and the color tween on a data update all work unchanged. Corner radius applies to 'rect' only, hexagon falls back to 'rect' on a numeric or datetime x axis, and the canvas renderer declines non-rect shapes the same way it declines image fills.

Weave plugin API v2

Two fixes and four additions to the plugin host (import 'apexcharts/features/weave', included in the default bundle).

Every Weave plugin silently did nothing on a pie, donut or radialBar. Those charts hold one number per entry rather than a row of values, and the data snapshot called .map on it; the per-plugin guard caught the exception and disabled the plugin, so the failure looked like the plugin's fault. Each slice is now presented as a one-point series. Separately, the version gate demanded an exact match, so the first additive change to the contract would have disabled every plugin already written against v1. It is now forward-compatible: an older plugin is served, and only one needing a newer host than this is skipped.

Added in v2:

  • data[].raw: the caller's own data array, untouched by parsing. The normalised points are fine to read and wrong to copy, since the three accepted shapes are not interchangeable.
  • info: chart type, axis kind, horizontal bars and the data-label config, so a plugin can decide whether it applies instead of adding a series and letting the core warn at the user.
  • categories: display labels resolved config-first. Reading globals.categoryLabels directly gave real labels on first paint and ordinals after an updateSeries.
  • markDerived(names): a plugin declares which series are its own, and the host keeps them out of the initial-series snapshot. Without it, resetSeries() hands the user a plugin's computed output as if it were their own data.

Weave plugin API v3: reserving container space

A plugin that renders its own HTML beside the chart (a docked panel, its own toolbar) had no good way to make room for it. The chart sizes itself from the container it was handed, so a sibling inserted into that container does not narrow the chart, it gets drawn at full width underneath it.

api.reserve({ right: 220 })  // null gives the space back

Reservations are tracked per plugin and summed, so two plugins each asking for a right-hand gutter get one each rather than overlapping. The box is clamped to half the chart per axis, and it is applied after the auto-height calculation, so a side panel narrows the chart without also making it shorter and shifting everything below it.

Feature-detect this rather than declaring apiVersion: 3. A v2 host skips a v3 plugin outright rather than serving it a smaller API, so apiVersion: 2 plus typeof api.reserve === 'function' is the portable check.

Azerbaijani locale

az joins the shipped locales. Thanks @jamalkamaladdin (#5289).

🐛 Fixes

Legend collapses were lost on every data update

updateSeries() and appendSeries() cleared the collapsed-series records, so they disagreed with updateOptions({ series }), which reconciles hidden series by name. On any chart that refreshes its data, every series the viewer had switched off in the legend came back on the next update.

Axis charts now keep those records and reconcile them through the same function the options path uses, before parsing, so a collapsed series does not get its values folded back into the axis range. Non-axis charts still clear, because their collapses are recorded per slice rather than per series and need their own reconcile.

This is the one behaviour change in the release: a series the viewer hid stays hidden across a data update.

Stacked combo charts flattened their columns onto the axis

A stacked bar found its place in the group by looking its name up in the group's series list, which holds every series in the group, line and area included, while the arrays it indexes into are pushed once per series the stacked renderer actually draws. Any column declared after a non-bar series looked past the end, found no layer beneath it and restarted from the axis, overlapping the bars instead of stacking them. The position now comes from the group's own array length, which counts drawn bars by construction. Fixes #5105, thanks @jamalkamaladdin (#5293).

The stack's rounded corner landed on the wrong bar

createBorderRadiusArr resolves the outermost segment of each stack by bucketing every series by global index, line and area series included. In a stacked combo chart a non-bar series could claim either end of the stack, and the corner assigned to it never rendered. Each bucket is now filtered against the list the combo chart already builds of which series it draws as bars. Fixes #5296, thanks @lazerg (#5298).

A 100% stacked combo threw before drawing its axes

Under stackType: '100%' the bar renderer narrows the percentage rows to just the series it draws as bars, but the data-label value lookup indexed that bar-only array with the global series index. A line declared ahead of a column ran the index past the end and the render threw on undefined, leaving a partly drawn chart with no axes. The lookup happens while positioning labels, before anything checks whether labels are on, so the chart died at the default of off. Order was the whole defect: declare the line last and it had always rendered.

Refs #2429, which stays open on purpose: turning data labels on in a 100% stacked combo hits a separate, older defect in the same chart, and fixing it needs a decision on what a combo's labels should read.

Point annotation labels clipped at the plot edge

A point annotation's label is centered on its point with no width limit, so a long label near the left or right edge rendered outside the SVG viewport and got clipped there instead of moving inward. The label is now measured and nudged just enough to keep its full width inside the grid.

The label's background rect needed the same treatment. label.style.background is set by default and the rect is drawn around the text plus its padding, so clamping the text alone still left the drawn label overhanging by 5px at each edge. On a chart whose grid meets the SVG edge (a sparkline, or zero chart padding) that still clipped. Fixes #5106, thanks @jamalkamaladdin (#5292).

Brush selection handles could be dragged past the data

Dragging a selection handle past the first or last data point kept widening the rect into empty space. On a brush chart that out-of-range window went straight to the target chart, which then scrolled off the end of its own data: on the brush-charts sample, a right handle dragged 400px past the plot left the rect 246px wider than the grid and pushed the target 75 days beyond the last point.

The rect is now clamped to the pixel span the x-domain occupies before anything reads it, and the rect itself is rewritten rather than only the numbers reported to listeners, so what consumers receive still matches what is on screen. This is the same boundary a body drag has always obeyed, so handle resizes and rect drags now share one. Drag-to-zoom is untouched. Fixes #5123, thanks @jamalkamaladdin (#5291).

Grouped sparkline tooltips stopped syncing

Fixes #5282, thanks @gioboa (#5288).

Grouped tooltips read the wrong chart's pointer

Fanning a hover out to a group only works if the pointer and the grid it is measured against belong to the same chart. Two consumers still read the raw event, which belongs to whichever sibling the cursor is actually over. The canvas heatmap hit test, measured against a sibling's grid, landed a chart-width off and hid that sibling's tooltip outright; followCursor placement anchored the box to the pointer and put it outside the sibling's plot. Both now read the translated pointer.

While in there, the source grid rect and pointer reads moved out of the per-sibling loop. They are identical for every member of the group, so reading them inside it cost one extra forced layout per sibling per mouse move. Trellis panels are implicitly grouped, so a sixteen-panel trellis was paying 32 layouts a move where 17 will do.

The treemap tooltip could be pushed off the plot

The beside-the-cell placement offsets the tooltip by its own width, so a long label on a narrow chart pushed the box off the left edge. It is now clamped horizontally, the same way the heatmap arrow-mode path already was. Thanks @jamalkamaladdin (#5290).

initialConfig lost its series when a legend item was collapsed

globals.initialConfig is meant to be the config the chart started with: resetSeries, the toolbar's reset button and custom tooltips all read it. Two things kept it from being that. The copy shared array references, so initialConfig.series was literally the live config, and a legend collapse empties series[i].data in place. The re-capture on updateOptions(overwriteInitialConfig) then read that emptied series back, so even an unrelated option change baked the collapse into the baseline. The copy is now per-series, and the re-capture only moves when the call actually redefines the series. Fixes #5118, thanks @aron-intframe (#5280).

Weave plugins drew offset from the data, and not at all on band charts

Two fixes to api.scales, which promises that a plugin's drawings align with the series by construction.

The plugin layer is appended to a group that already carries the grid translate, but the scales baked that same translate in again, so everything a plugin drew landed shifted right and down by exactly the grid offset. The reference plugins in this repo were already written against the layer-local reading, which is how it stayed invisible: jsdom applies no transforms, so only a real browser showed the shift. The domain edges now map to 0 and gridWidth/gridHeight, matching the positions the series themselves use.

Separately, x() was built from minX/maxX, which the parser never computes for a chart laid out in equal bands. Every value projected to the same pixel, so six drawing tools on a category bar chart drew six invisible lines. Category bar and column (stacked included), rangeBar and heatmap now project the way the bar renderer lays them out. Horizontal bars are left alone, since there the x axis carries the value.

🔧 Internal

  • apex-commons moved to 0.7.0. A caret on a 0.x version pins the minor, so the core had been building against 0.5.0 while later minors were out. No observable change to the built bundles.
  • The two legacy rangeBar-based dumbbell samples are retired. Both predate the first-class dumbbell type shipped in 7.1.0 and built the chart by hand out of zipped [low, high] pairs. The samples/dumbbell demos for the real type are untouched.
  • A guard test now records the tier policy for new chart types: a new chart.type ships as a sub-path entry plus a UMD add-on, with an entry in the raw-sample warning map so the default bundle fails loudly rather than rendering blank. The 7.1.0 admissions (streamgraph, waterfall, dumbbell) are grandfathered.
  • Two dead links fixed in the README. Thanks @GebleaAlex (#5297).
  • Test coverage for the null and undefined x values the 7.1.0 date guard also un-breaks. Thanks @aron-intframe (#5281).

🙏 Thanks

@jamalkamaladdin, @aron-intframe, @gioboa, @lazerg and @GebleaAlex for the fixes and features in this release.

Full Changelog: https://github.com/apexcharts/apexcharts.js/compare/v7.1.0...v7.2.0

5 hours ago
virtual

@tanstack/vue-virtual@3.13.38

Patch Changes

  • Updated dependencies [ab3278c]:
    • @tanstack/virtual-core@3.17.10
5 hours ago
virtual

@tanstack/solid-virtual@3.13.39

Patch Changes

  • Updated dependencies [ab3278c]:
    • @tanstack/virtual-core@3.17.10
5 hours ago
virtual

@tanstack/react-virtual@3.14.12

Patch Changes

  • Updated dependencies [ab3278c]:
    • @tanstack/virtual-core@3.17.10
5 hours ago
virtual

@tanstack/svelte-virtual@3.13.38

Patch Changes

  • Updated dependencies [ab3278c]:
    • @tanstack/virtual-core@3.17.10
5 hours ago
virtual

@tanstack/virtual-core@3.17.10

Patch Changes

  • #1272 ab3278c - Keep an end-pinned virtualizer following appended items when older items are trimmed in the same update and the item count does not increase. Recognize ordered, overlapping windows while preserving reading anchors for users who have scrolled away from the end.

    Preserve item keys in the lazy measurement cache so a stable getItemKey callback reading mutable data cannot change the identity of previously measured rows.

5 hours ago
virtual

@tanstack/marko-virtual@3.15.3

Patch Changes

  • Updated dependencies [ab3278c]:
    • @tanstack/virtual-core@3.17.10