1 hours ago
tabler

Tabler v1.6.0

Tabler 1.6

Tabler 1.6 is out. It brings eight new components, a datepicker that doesn't depend on Litepicker any more, a neutral gray scale, colors defined in oklch() and a focus ring that's finally an outline. The CSS also got smaller: about 110 kB came off tabler.min.css. On top of that there are more than a hundred smaller changes across the framework, the demo pages and the docs.

Datepicker

Datepicker

A calendar popup for a text input or a button, or an inline calendar on the page. It handles a single date, several dates and a range. It's built on Vanilla Calendar Pro, so Litepicker is deprecated, and the docs have a section on moving over from it.

Sparkline

Sparkline

Tiny line, bar and circle charts drawn inline with text, for a trend in a table cell or next to a number. The chart is an SVG rendered from data-bs-values, so no chart library is needed. It takes its color from text utilities and its size from classes.

Legend

Legend

A colored marker, a label and an optional value for the series of a chart or a progress bar. Group items with .legend-list, and turn on the interactive mode to toggle a series on click. The large variant .legend-lg shows a big value with a unit.

Signal

Signal

A small row of stepped bars that shows a level, such as priority, strength or coverage. It sits next to a label, and the number of bars, the color and the size are all adjustable.

Password strength

Password strength

A segmented meter that rates the password as the user types, so a weak password is visible before the form is sent. The scoring and the labels are configurable, and every change fires change.bs.strength.

OTP input

OTP input

A one-time code field shown as separate character slots. It's still one real input underneath, so autofill, password managers, SMS codes and screen readers work. Slots can be grouped and masked, and there are validation states.

Clipboard

Clipboard

A copy button for the text of a field, an element or a literal string, with a short copied state. It's built on the browser clipboard API and fires events, so dist/libs/clipboard is deprecated.

Confetti

Confetti

A short shower of colored pieces over the page, for a finished setup, a first order or a signup. Put data-bs-toggle="confetti" on a button or call it from JavaScript, and set the amount, length, speed and colors with data attributes.


Plugins are components now

Autosize, CountUp, InputMask, Sortable and SwitchIcon are real components with instances, methods and events. Autosize and CountUp are written from scratch and don't need the dist/libs scripts any more, so those are deprecated. CountUp respects prefers-reduced-motion.

Switch icon got a switch-icon-loading state. Pass a promise to event.wait() in the toggle.bs.switch-icon event and the button shows a spinner until it settles.

Sortable got drag styles for the ghost, the chosen and the dragged item, and the demo shows a drag handle, table rows, a kanban board, clone, multi-drag and swap.

tabler.js also no longer stops on page load when one element has an invalid data-* config. The error is logged and every other component is still created.

Neutral gray and oklch colors

The default gray scale is neutral now. In 1.5 it had a slight blue tint, so backgrounds, borders and muted text look a little different. To keep the 1.5 look, load tabler-themes.css and set data-bs-theme-base="gray" on <html>.

The palette is defined in oklch(), and tints, shades and hover states are mixed with color-mix(in oklab) instead of rgba(). Mixed colors are a touch cleaner, mostly noticeable in the lighter backgrounds. The --tblr-*-rgb variables are deprecated and stay until 2.0.

The focus indicator is a solid 2px outline instead of a box-shadow halo, stronger in dark mode. You can tune it per component with --tblr-focus-ring-width and --tblr-focus-ring-color.

Floating navbar and offcanvas

.navbar-floating detaches the navbar and the sidebar from the edge of the screen with a 0.5rem gap, and .offcanvas-floating does the same for an offcanvas. The theme settings data-bs-navbar-style="floating" and data-bs-offcanvas-style="floating" on <html> switch the whole page.

A native <dialog> opened with showModal() gets the same backdrop as a modal, and .modal-blur on it blurs the page behind. Scrolling to the end of a modal, an offcanvas or a scrollable dropdown no longer scrolls the page behind it.

Smaller CSS

tabler.min.css lost about 110 kB. The button, list group, bg-pattern-* and color utility styles are generated once instead of per variant, and the vertical navbar is generated once instead of per breakpoint. The flag, payment and social SVGs in dist/img are minified, and only the images the CSS uses are copied.

If you ship your own build, $enable-deprecated: false leaves the deprecated aliases and the --tblr-*-rgb variables out of the CSS entirely.

Demo and docs

The demo has a new billing page, a system status panel with 60-day uptime bars, gauge cards on the widgets page and a reworked charts page with sections and legends. The hardcoded Google Maps and Mapbox keys are gone; the map demos read them from the environment.

Component docs pages got a CSS variables section generated from the source, so it can't go stale. Markdown tables and the class reference table sit in a bordered, scrollable box. The CDN snippets carry integrity and crossorigin attributes. There's a Sortable page, an agent skill under /.well-known/agent-skills/, and the upgrade guides moved to /ui/getting-started/upgrade/ with one page per release.

Upgrading

Nothing in 1.6 requires a change to your markup. Two things can trip a build:

  • 69 Sass variables that were plain colors are color-mix() strings now, so they follow --tblr-* overrides in the browser. That's the *-bg-subtle, *-text-emphasis and *-border-subtle families, $body-secondary-color, $input-focus-border-color and a few navbar, dropdown and switch colors. Overriding them still works, but a Sass color function such as darken() or rgba() on their default value fails. Build from the base color instead: shade-color(tint-color($primary, 80%), 5%).
  • The component port is compiled with strict TypeScript and every config is typed. A TypeScript project that passes a loosely typed options object to a component may get new type errors. Nothing changes at runtime.

A few things are deprecated and keep working:

  • .form-hint is .form-text now, matching Bootstrap. The old class is an alias.
  • An empty .legend still renders as a dot, but .legend-dot is the class for it.
  • The $*-focus-box-shadow variables, theme-color-lighter(), url-svg(), varify() and a few other Sass helpers warn when used.
  • The tabler.tabler JS namespace with getColor() and hexToRgba() is deprecated. Read the variable yourself.

Every change, with a before and after example for each one, is in the Upgrade to 1.6 guide.

Core changes

  • a13ebc3: Added Autosize component to tabler.js, with update() and dispose() methods.
  • 038000f: Added the --tblr-btn-input-* control scale on :root (padding, font size, line height, radius, min height per size).
  • 0e2faa0: Added a Clipboard copy button built on the browser API; dist/libs/clipboard is deprecated.
  • e63fe34: Added a Confetti component with data-bs-toggle="confetti", a demo page and docs.
  • 118380d: Added Datepicker plugin built on Vanilla Calendar Pro with a datepicker preview page; Litepicker is deprecated.
  • 0905918: Updated the default gray scale ($gray-50…$gray-950) to neutral; data-bs-theme-base="gray" keeps the 1.5 look.
  • 2b44251: Added the .flag-country-yt flag for Mayotte.
  • 744a09c: Updated the focus indicator from a box-shadow to an outline; the $*-focus-box-shadow variables and tokens are deprecated.
  • c1373d7: Added --tblr-hover-bg variable and used it for the hover background of buttons, nav links, dropdown items and list groups.
  • be30919: Updated .legend into a legend item with .legend-dot, .legend-value, .legend-off and .legend-list, plus a Legend component.
  • a984752: Added .legend-lg, .legend-unit and .legend-list-divided for large legend items with a big value and a unit.
  • c1786b5: Added dialog::backdrop styling so a native <dialog> uses the same backdrop as modals.
  • 7e7b2ce: Added .navbar-floating and the data-bs-navbar-style="floating" theme setting for a navbar and sidebar with a 0.5rem gap.
  • 7e7b2ce: Added .offcanvas-floating and the data-bs-offcanvas-style="floating" theme setting for an offcanvas with a 0.5rem gap.
  • 0fe02b3: Updated color mixing to color-mix(in oklab); the --tblr-*-rgb variables are deprecated and stay until 2.0.
  • a744b84: Added the OtpInput component with grouped slots, masking, and validation states.
  • a984752: Added .page-section-title and .page-section-description classes for section headings inside the page body.
  • 107e493: Updated the palette to oklch() and masked the check, switch, toggler and carousel icons; tabler JS namespace is deprecated.
  • a9efcc2: Added the Signal component (.signal): stepped bars that show a level such as priority, with a Signal.astro wrapper.
  • bd60d5f: Added SortableJS drag styles; set forceFallback to true on a data-sortable list to drag a styled, tilted copy.
  • 5d5be36: Added Sparkline component: inline SVG line, bar and circle charts from data-bs-values, with size classes and signed bars.
  • 9669c0a: Added a Strength password meter with a segmented bar, configurable scoring and change.bs.strength.
  • 0776b88: Added a switch-icon-loading state and a cancelable toggle.bs.switch-icon event with event.wait(promise) for async toggles.
  • bd5c010: Added SwitchIcon, CountUp, InputMask and Sortable components to tabler.js.
  • da79879: Updated .accordion-button line height to 1.25rem via the --tblr-accordion-btn-line-height variable.
  • b295d84: Fixed .accordion-button-toggle-plus with sprite icons by rotating the plus into a close icon instead of hiding a path.
  • 72a95d8: Fixed .alert layout so headings, descriptions, lists and buttons align and stack correctly.
  • 62408b8: Added a dependency-free Autosize component that fires resized.bs.autosize; dist/libs/autosize is deprecated.
  • 3b8bf55: Updated the button, list group, bg-pattern-* and color utility styles to cut 72 kB from tabler.min.css.
  • 58e03a9: Fixed CountUp rejecting numbers and booleans written as strings in data-countup, which countUp.js accepted.
  • ea10f0e: Added a dependency-free CountUp component that respects prefers-reduced-motion; dist/libs/countup.js is deprecated.
  • 58e03a9: Updated theme-color-lighter(), url-svg(), varify() and five more Sass helpers to deprecated; they warn when used.
  • 18a8a49: Fixed .dropdown-menu-arrow border rendering on Firefox by trimming the clipped edges.
  • 58e03a9: Added $enable-deprecated; set it to false to leave the deprecated aliases and --tblr-*-rgb variables out of the CSS.
  • f778fcf: Removed the js/tests and scss/tests folders from the published @tabler/core package.
  • 7bfeb12: Fixed .alert-link changing color on hover.
  • cac3179: Fixed the ApexCharts tooltip arrow staying white in Safari by painting .apexcharts-tooltip-arrow directly.
  • 7bfeb12: Fixed .card-options being taken out of the .card-header flow by position: absolute.
  • 79796ab: Fixed .card-progress to overlay the card like .card-status, so its rounded corners match the card's radius exactly.
  • db903c3: Fixed .card-status-* strip corners not matching the card's border-radius.
  • 7bfeb12: Fixed Datepicker reopening on a second trigger click, its show and hide events, and its color scheme on light pages.
  • 7bfeb12: Fixed --tblr-focus-ring-width and --tblr-focus-ring-color overrides having no effect when set on a component.
  • ce52364: Fixed the default browser border and padding on .form-help when it is a <button>.
  • 7bfeb12: Fixed the .form-switch knob not moving in RTL and its size in .form-switch-lg.
  • 7bfeb12: Fixed tabler.js stopping on page load when one element has an invalid data-* config; the error is logged instead.
  • 67a3795: Fixed .input-group-flat so .input-group-text follows the .is-valid and .is-invalid border and focus colors.
  • 531529a: Fixed jQuery .on() listeners not receiving Bootstrap events like show.bs.dropdown in all components.
  • 127c56b: Fixed the empty gutter to the right of the navbar on non-scrolling pages by dropping scrollbar-gutter: stable from html.
  • 7e7b2ce: Fixed the menu row of the two-row navbar staying light with data-bs-navbar-theme set to dark or primary.
  • 7bfeb12: Fixed missing IMaskInstance and SortableInstance in dist/types; vanilla-calendar-pro is an optional peer dependency.
  • 64dd529: Fixed the .form-selectgroup-label icon-only margin applying to icons nested deeper inside the label.
  • 9268348: Fixed .stretched-link on a .btn so the link covers its whole container instead of only the button.
  • 61b492e: Fixed .table-striped and .table-striped-columns repainting rows and cells that set a .bg-*, .table-* or inline background.
  • fa70c03: Fixed missing border between .card-table and .card-footer when wrapped in .table-responsive.
  • a9efcc2: Fixed Tom Select growing taller on focus when the selected item has an indicator (avatar, flag, badge).
  • c99a436: Fixed .is-valid and .is-invalid border colors and focus ring on Tom Select .form-select fields.
  • 57e213b: Updated .form-hint to Bootstrap's .form-text, with .form-hint kept as a deprecated alias.
  • cc7afaf: Fixed a disabled off .form-switch looking the same as an enabled one by filling its track and darkening the knob.
  • 03985e3: Fixed text badges in navbar .nav-link overlapping the title and causing horizontal scroll in the stacked menu.
  • 0460291: Updated the .navbar-vertical styles to be generated once instead of per breakpoint, cutting 36 kB from tabler.min.css.
  • 2b44251: Updated the flag, payment and social SVGs in dist/img to be minified with svgo, and copied only the images the CSS uses.
  • 41e2dc7: Updated pre font size to 13px with a new $pre-font-size variable, and $markdown-pre-font-size for .markdown.
  • 2b99ed5: Fixed invisible text selection inside pre blocks in light mode.
  • c1786b5: Added overscroll-behavior: contain to .modal, .modal-body, .offcanvas-body and .dropdown-menu-scrollable.
  • 3e60b18: Fixed .navbar-expand, .btn-link:hover, --*-darken, .ribbon fold colors, .avatar-brand z-index and dark mode literals.
  • 1ffbeec: Updated the Bootstrap component port to strict TypeScript with typed ComponentConfig types and added eventActionOnPlugin.
  • 3e60b18: Fixed light theme islands losing data-bs-theme-primary and radius, and added .theme-dark to the dark mode selectors.
  • 8db40cd: Fixed Tom Select controls being shorter than .form-control by using Tabler input metrics in all sizes.

Demo changes

  • 64dd529: Added new billing page with plan usage, payment method, and invoices layout.
  • a984752: Updated the charts page with sections, card subtitles, Legend lists above charts and a semantic colors chart.
  • bd60d5f: Added grouped Sortable demos: drag handle, table rows, kanban board, clone, multi-drag and swap.
  • 3f767ee: Added a System status panel with 60-day uptime history bars to the Uptime preview page.
  • 3f767ee: Added ApexCharts gauge cards to the Widgets preview page.
  • eda6503: Updated the preview navbar Sponsor button and the docs sidebar Illustrations card to an All Package link and card.
  • 4676d12: Fixed CardTitle text color on CardBackgroundIcon for readability.
  • 7bfeb12: Added a Sortable docs page covering data-sortable, the drag styles and the Sortable component.
  • 364ccf8: Fixed keyboard access and accessible names across preview pages, Alert, Avatar, Rating, Tag and Wysiwyg components.
  • 3f767ee: Fixed the "Card with code" widget rendering its code as plain text instead of a pre block.
  • 084d202: Fixed docs breadcrumbs, unresolved site expressions in the .md mirrors and the missing play and rss icons.
  • 084d202: Fixed robots.txt, minified assets in BaseLayout, the marketing menu link and the markdown.html redirect in the preview.
  • 0d39308: Fixed heading order, form autocomplete and accessible names on preview pages, Alert, Button, Dropzone and Avatar.
  • 8636174: Fixed Trending signs, ApexCharts 7 legend markers, marketing asset paths, pageLibs checks and the notifications close button.
  • 9268348: Fixed the actions dropdown in the tables and invoices demos being cut off by .table-responsive.
  • 4cfa9f3: Removed the hardcoded Google Maps and Mapbox keys; map demos now read GOOGLE_MAPS_KEY and MAPBOX_KEY from the environment.
  • bf576f1: Fixed page modals leaking between pages and made the change-password and confirm-delete modal scripts plain inline JS.
  • 1dbabb5: Fixed a dev-server ENOENT race: preview's watch:css now writes to tmp-assets/css and copy-assets syncs it into public/.
  • add68b2: Fixed the missing promo top banner on docs.tabler.io and preview.tabler.io by restoring the banner.js script.
  • f06de8a: Updated Tabler Icons to v3.48.0.

Docs changes

  • 8ceb56b: Added an agent skill under /.well-known/agent-skills/ and an ai-catalog.json manifest to the docs.
  • 8ae47ae: Added a CSS variables section to component docs pages, replacing the hand-written SCSS variables sections.
  • 6bd3fff: Added the upgrade guide for Tabler 1.6 and moved the upgrade guides to /ui/getting-started/upgrade/ with one page per release.
  • 2129b0b: Added a check:open-source gate and the five missing attributions, including Popper, which ships inside tabler.js.
  • da79879: Updated accordion docs examples to use .bg-surface on each .accordion-item.
  • 7bfeb12: Added relative colors, oklch(from …), to the features that set the minimum browser versions on the browser support page.
  • bcf5991: Added integrity and crossorigin attributes to the CDN snippets on the installation and plugin pages.
  • bab8f24: Updated the class reference table in the docs to use the bordered .docs-table box.
  • c28e848: Updated the confetti amount example to use plain .btn buttons instead of .btn-outline-primary.
  • 41e2dc7: Updated markdown tables in the docs with a bordered, scrollable .docs-table box and a tighter header row.
  • 5a735bc: Added a note to the installation docs that tabler.js already includes Bootstrap and must not be loaded next to it.
  • 7bfeb12: Added a note to the 1.5 upgrade guide that .text-gray-* classes, a no-op in 1.4, now set the text color.
  • 7bfeb12: Added Litepicker, .legend and neutral gray sections to the 1.6 upgrade guide; fixed the jsVectorMap CDN link.
  • e052821: Added --tblr-status-color-rgb, pre size, .card-options, .page-section-title and .theme-dark to the 1.6 upgrade guide.
  • 9268348: Fixed the missing icon spacing in the "Alerts with icons" example on the alert docs page.
  • 86ac4f1: Fixed the unreadable "5" badge in the avatar status docs example by adding text-gray-100.
  • 6f96282: Fixed the "Card on a background pattern" docs example so the preview shows the .bg-pattern-diagonal background.
1 hours ago
socket.io

socket.io@4.8.4

Bug Fixes

  • cleanup pending acks on timeout to prevent memory leak (37aad11)
  • prevent uWebSockets.js from serving missing client files (dfb5ab3)
  • reject stateful regexps for dynamic namespaces (59f4f24)
  • types: allow emitWithAck() for events with void callbacks (#5453) (8b93a18)
  • types: properly import http module (74599a6)

Dependencies

1 hours ago
socket.io

socket.io-client@4.8.4

Bug Fixes

  • types: export ExtendedError for connect_error event (#5548) (c0d5450)
  • types: export reserved event interfaces (#5533) (03945df)

Dependencies

2 hours ago
socket.io

engine.io-client@6.6.7

Bug Fixes

  • types: export reserved event interfaces (#5533) (ced7dfd)
  • restore default transport resolution (3df3fed)

Dependencies

10 hours ago
next.js

v16.4.0-canary.45

Misc Changes

  • [test] Fix new deploy suites: #99162
  • Provide only the relevant context for agent upgrade: #99189
  • Turbopack: Add support for additionalRoots to deployment adapters: #99015
  • Use Sonnet 5 with 1M context for AI upgrade handoff: #99183
  • docs: font per-call preload scope and the declarations font-family override: #99167

Credits

Huge thanks to @eps1lon, @devjiwonchoi, @bgw, and @icyJoseph for helping!

11 hours ago
slate

slate-react@0.127.1

Patch Changes

  • #6110 fbe8e50b Thanks @unrevised6419! - Declare @types/react (>=18.0.0) and @types/lodash (^4.14.0) as optional peer dependencies. The shipped type declarations import from react and lodash in type positions, but the typings packages were only listed in devDependencies. Under a hoisted node_modules layout that resolves by accident; under pnpm's isolated linker with a global virtual store it does not, and consumers get TS7016 implicit-any errors (or silently degraded any props) for the editor components. Both entries are optional, so JavaScript-only consumers do not get unmet-peer warnings.
12 hours ago
react-three-fiber

v9.8.1

The main changes here are bug fixes:

  • Activity now works completely inside of R3F, even across boundaries with React DOM. Ie, an Activity that wraps the Canvas.
  • In some cases a renderer would not be disposed when the Canvas was unmounted. This is fixed and we clarify in which instances we auto-dispose.

What's Changed

New Contributors

Full Changelog: https://github.com/pmndrs/react-three-fiber/compare/v9.8.0...v9.8.1

13 hours ago
apexcharts.js

💎 Version 7.6.0

Two things to opt into. icicle is a cartesian partition chart: one band per level of a hierarchy, each child sized inside its parent, and a click zooms along the value axis while the levels stay put. It ships in its own bundle, so the default build does not carry it:

import ApexCharts from 'apexcharts/icicle'

tooltip.interactive holds a tooltip open while the pointer crosses into it, which is what makes a link or a button inside a custom tooltip reachable at all. Off by default, and it overrides followCursor, because a tooltip that trails the cursor can never be entered.

The Playwright interaction suite now runs in CI on every push and pull request. It had been green on developer machines and ungated for months, and it caught a stacked-total label regression within a day of being switched on.

gzip
7.5.1 default bundle 269,879 B
7.6.0 default bundle 271,534 B

Both are dist/apexcharts.min.js gzipped at the default level, which is the figure npm run build prints.

Upgrading is npm install apexcharts@7.6.0.

✨ New

Add the icicle chart type, opt-in

chart.type: 'icicle' draws a hierarchy as stacked bands, one per depth level, each child cell nested inside its parent's extent along the value axis. It is the sunburst's layout in cartesian coordinates and shares its recursion, so it takes the data model we already resolve: a native children tree, or an existing drilldown config read as plain data with no dependency on the drilldown runtime.

What it adds over the two partition charts we had: labels that stay horizontal and legible at every depth, depth as a straight axis so same-depth siblings line up across branches, and direction: 'up', the flame-graph orientation, for call stacks and path funnels.

Opt-in, per the new-chart-type policy. The default bundle carries no icicle code, only the settings literals and a few string branches, and the type is reached with import ApexCharts from 'apexcharts/icicle' or by loading dist/icicle.js after the core script. Measured on the minified UMD: +508 B gzipped by default, 9,768 B gzipped for the apexcharts/icicle bundle itself, which contains no other chart class.

Four defaults differ from the sunburst's, each because filling the plot is what a treemap does and an icicle has to read as a hierarchy: leaf: 'stop' ends a shallow branch at its own band, leaving the white space that shows how deep each branch goes; tint: 0 keeps one hue per branch so the eye can follow it down; the palette lands on the shallowest level that branches, because a single-root tree is the normal shape here and colouring by root would paint everything one hue; and the legend is off, since every cell carries its own label.

Also reserves the name. registerSeriesType's built-in check asks whether a class is registered, which for an opt-in type is false on the default bundle, so a custom type could have taken icicle and then been routed to the built-in's renderer. RESERVED_TYPES closes it for this type and the next one.

Zoom along the value axis, leaving the levels alone

Clicking a branch re-laid the chart out on both axes: the branch became the top level and every band moved, which is a re-layout rather than a zoom. The reader loses their place, and the ancestors that gave the branch its meaning leave the screen.

plotOptions.icicle.zoomType: 'value', now the default, rescales the value axis only. The branch stretches to fill the width, its subtree stretches with it, and no level moves a pixel. The ancestors stay above it, clamped to the plot, which is what makes them read as context bands. It is one affine map over extents that are already laid out, and it is the partition equivalent of chart.zoom.type: 'x'.

The values are not named 'x' and 'y' because direction decides which screen axis the value axis is; 'value' and 'both' mean the same thing whichever way the tree grows. 'both' keeps the old behaviour for charts that would rather spend the whole plot on the focused branch.

A depth cap follows the focus down in value mode, or zooming into a branch marked as having more below it would stretch it and reveal nothing, which is the one promise that mark makes.

🐛 Fixes

Data labels on a 100% stacked combo

Closes #2429

Thanks @gioboa.

Ignore followCursor for interactive tooltips

No detail was written on this commit.

Thanks @lovasoa.

Restore animations when reduced-motion is turned off

Honoring prefers-reduced-motion was a one-way trip. A viewer who had the OS preference on when a chart mounted got a chart that never animated again, for the life of the page, even after they turned the preference back off.

The policy wrote enabled = false straight into w.config, which is the merged config that every update merges onto. Nothing ever put the original value back, and no merge could: an updateOptions({ series }) carries no opinion about animations, so the false survived it, and the next render read the same false the previous one had left behind. The media query was re-read on every render, faithfully, into a decision that could only ever go one way.

So the disable is now a latch. The values it overwrites are held in globals and restored the moment the query stops matching.

One wrinkle: while the latch is engaged the config reads false because we put it there, so an updateOptions that turns animations back on in that window would be lost when the preference lifted. Anything that is no longer false therefore gets re-stashed as it arrives. The mirror case, an explicit enabled: false sent while the latch is engaged, is indistinguishable from our own and restores the older value instead; closing that needs user intent threaded through every merge site, which is a poor trade for a case reachable only by toggling an OS setting mid-session. It is written down in the JSDoc.

Reported as animations not working at all, with the detail that made it solvable: they worked on mobile and not on desktop. That is the shape of an accessibility preference, not of a chart bug, and it is the only environment-dependent switch in the library.

Fixes #5312

Address comments

No detail was written on this commit.

Thanks @gioboa.

Keep the baseline of a series declared hidden in the config

ApexCharts.create() collapses every series carrying hidden: true before parseData() runs, so the baseline that parse snapshots into globals.initialSeries holds data: [] for each of them. Until 7.4.0 the first legend interaction repaired that by accident, because parseData() re-snapshotted unconditionally. It no longer does: the legend's own updates pass overwriteInitialSeries: false so that an internal re-render keeps the baseline it was given (#5283), and the emptied rows are now permanent.

Two readers get the wrong answer:

  • Series.resetSeries() clones the baseline into config.series, so a series declared hidden comes back from a reset EMPTY and its data is gone for the life of the chart;
  • Tooltip.tooltipUtil.isInitialSeriesSameLen() filters out collapsed rows but measures the rest, so the moment the viewer un-hides one from the legend its length of 0 is compared against its siblings'. The check fails, handleStickyCapturedSeries() falls to create(..., false), and every shared tooltip on the chart silently drops to the single series nearest the cursor. Re-hiding the series filters it out again and the tooltip comes back, which is what makes it read as a tooltip bug rather than a data one.

Restore the caller's own data for exactly the rows the hidden flag emptied. The raw-stash baselines (histogram, dumbbell, streamgraph, waterfall, treemap and the dataReducer window) are left as parseData() wrote them, and a row whose input is itself empty is skipped, so the repair can never turn a good baseline into an empty one.

Sibling of #5118, which is the same hazard one snapshot over: initialConfig lost a collapsed series' data for a different reason and was fixed by copying the series objects at capture time.

6 tests in tests/unit/config-hidden-series-baseline.spec.js; 4 of them fail on main. Full unit suite 151 files / 3495 tests green, eslint clean, and tsc --noEmit reports the same 29 pre-existing errors as main.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

Thanks @mrash.

Source the hidden-series baseline repair from the collapse record

Review feedback on #5313: read the repaired data from the record getSeriesAfterCollapsing already stores in gl.collapsedSeries / gl.ancillaryCollapsedSeries rather than from ser[i].data.

On the first pass the two are the same array, so this changes nothing there. They diverge on the one re-entry that also passes overwriteInitialSeries: true. hidden stays on the config row, so hiddenAtInit fires again, and by then appendData() has concatenated the new points onto the LIVE row -- which the collapse emptied. ser[i].data is therefore just the points that were appended, and the repair was writing those over a baseline that should still hold the series. With B declared hidden and appendData([{ data: [7] }, { data: [8] }]) the baseline for B became [8]; the record still held [4, 5, 6] and now that is what lands. It also composes with #5310, which appends into that same record.

The record's array is sliced rather than aliased in. initialSeries' setter keeps a shallow copy and _initialSeriesPeek hands it straight to the tooltip's same-length check, so sharing the array would let a later in-place edit of the record reach a captured baseline -- the one hazard the snapshot is built to rule out. .slice() is what getSeriesAfterCollapsing and riseCollapsedSeries already do at this boundary.

A non-axis collapse records one slice's VALUE, not a series' rows; the Array.isArray check leaves those rows to parseData, as the previous ser[i].data shape test did.

2 tests added to tests/unit/config-hidden-series-baseline.spec.js: the append case (red before this commit, [8] where [4, 5, 6] is expected) and a guard that the record is not aliased into the baseline. Spec is 8/8. Rebased onto main: unit suite 152 files / 3527 tests green, eslint clean, and tsc --noEmit reports 23 errors, the same 23 as main.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com

Thanks @mrash.

Let respectReducedMotion:false reach the stylesheet

respectReducedMotion: false only ever half worked. It turned the JS tweens back on, and no JS flag can reach a stylesheet, so the @media (prefers-reduced-motion: reduce) block in apexcharts.css went on flattening every duration inside .apexcharts-canvas to 0.01ms with !important. Everything CSS-driven stayed frozen: the pie slice-offset slide, the tooltip and crosshair fades, the drilldown spinner. The only way out was to out-specify an !important rule from the page.

That block is now scoped :not(.apexcharts-ignore-reduced-motion), and Core.setupElements puts the class on the canvas when the option is false. elWrap is rebuilt on every render, so an updateOptions that flips the flag is picked up with no extra bookkeeping.

The reduced-motion fallback for the drilldown spinner had never actually run. It swaps the spin for an opacity pulse, which is what 2.3.3 asks for while still showing that the drill is working, but the blanket rule flattened the fallback too, to a single 0.01ms pass, leaving a drill with no loading indication at all. It now beats that rule on both specificity and origin.

The pie slide also gained a single styling hook. Every node that travels with a slice carries apexcharts-slice-mover, so a page no longer has to know the list (the arc, its labels, any external label group, the hover band) and write a selector per member, or discover the omission when the labels are left behind mid-slide. The hover outline band is one node re-plotted per slice rather than one node per slice, so it drops the class as it retargets: it has to jump to a newly hovered slice, and clearing the inline transition cannot cancel a page's rule on the hook.

The new tests assert computed style, not the inline value the library writes. That distinction is the whole bug. The library was already setting transition: transform 320ms on the slice and the browser was throwing it away, so a test that read node.style passed throughout. The spinner test mounts the overlay through DrilldownLoading rather than building a div, since the scoped fallback only reaches it because it lands in elWrap.

Prepend the injected stylesheet so page rules win

The sheet was appended to <head>. It is injected when the first chart renders, which is long after the page's own <link>s have parsed, so appending put it last in the cascade: an author rule at equal specificity lost on document order alone, wherever they had put it, and the only way through was to out-specify us by repeating a class.

Prepending makes the library the weakest author styles on the page, which is what a library's defaults should be, and matches what the Shadow DOM branch has always done with the shadow root.

Nothing load-bearing is weakened by the move. direction: ltr !important on the canvas is there to beat a direction inherited from an RTL page, and inheritance loses to any declaration at all. The transition: none in .apexcharts-disable-transitions * is there to beat our own transition declarations, which sit in the same sheet, so their order relative to it has not changed. Both now lose only to a page's deliberate, targeted !important override, which is the point of the move rather than a cost of it.

Also drops the .resize-triggers and .contract-trigger rules and the resizeanim keyframes they drive. Resize detection has been built on ResizeObserver for a long time and nothing creates those elements any more, so the rules were dead. They were also the only un-namespaced selectors in the sheet, which is the last thing that should be sitting at the bottom of the cascade waiting to collide with a page.

Keep a hierarchy branch that omits its own value

A partition chart may leave a branch's value out and let it be the sum of its children. That is the documented shape, and the hierarchy resolver already fills it in, in Hierarchy.fillValues.

It never got that far. Non-axis parsing runs first and required every datum to carry both x and y, so a branch with only children was dropped with a warning about pie data. With every branch dropped the series came back empty, and the renderer returns before it builds the tree, so the chart drew nothing at all: a blank plot and a warning naming the wrong chart type.

The sum is the same number either way, so roll the subtree up here. Sunburst has had this hole since it shipped; only its samples, which all give their top-level nodes a y, hid it.

The helper stays private to the module deliberately. Data.js is a shared module, so a named export here would resolve to undefined inside the split bundles.

Let rangeArea charts scale the y axis to their data

No detail was written on this commit.

Thanks @mmilanovic4.

Run a zoom on the interaction clock

Clicking a cell took 800ms, which reads as lag rather than motion. The zoom was pacing itself with animations.speed, the clock for the FIRST render, where a response to a click belongs on dynamicAnimation.speed alongside every other update. Measured on the sample, the focused cell now finishes its stretch in 350ms instead of 800.

The guard sets the two clocks far apart, so a zoom that went back to reading the intro's speed would still be moving when the assertion runs rather than failing on a tolerance.

Classify the stacked-100 label formatter from config

gridPadForStackedTotalDataLabels measures the stacked-total label during plotCoords(), before plotChartType builds globals.columnSeries. The formatter installed by stacked100() branched on columnSeries alone, so the reserve measured "5700" while the drawn label read "5700%" — under-reserving by the "%" and pushing the label past the SVG viewport on a horizontal 100% stack. Fall back to a config-based bar classification until columnSeries exists, as CoreUtils.getPercentSeries already does.

Thanks @lovasoa.

Refuse a click that has nowhere to zoom

A tree with one root is the ordinary icicle and the only flame-graph shape, and clicking that root did something: it became the focus. The layout came back identical, because a single root owns the whole value axis whether it is reached as the focus or through the roots loop, so the visible result was a breadcrumb rising for a view the reader had never left.

resolveFocus now resolves a lone root to the whole tree, the way it already resolved a leaf to its parent branch. It needs the roots to know a root is alone, so the signature takes them as an optional third argument; without them the old behaviour stands, which is what the sunburst still gets.

The same function also moved its "nothing changed" check to after the leaf demotion. It ran before, so clicking a leaf inside the focused branch reported a change with the focus unchanged and re-ran a layout pass to redraw the same picture.

A refused click has to look refused, so two things follow it. The cursor is now decided per layout instead of once at cell creation, and reads pointer only where a click would move the view: otherwise the root advertises a zoom it will not perform, which is a worse lie than the old no-op. And the breadcrumb drops the lone root's crumb, since the strip already opens with a crumb for the whole tree and relabels it, which put the same view in the trail twice with the second copy dead.

Propagate interactive tooltip mouseleave to grouped charts

Mirror the deferred seriesHover close on the tooltip's own mouseleave, so leaving the tooltip hides siblings in the same chart.group. Add a second grouped spec covering the tooltip-exit path.

Thanks @lovasoa.

14 hours ago
electron

electron v45.0.0-alpha.12

Note: This is an alpha release. Please file new issues for any bugs you find in it.

This release is published to npm under the alpha tag and can be installed via npm install electron@alpha, or npm install electron@45.0.0-alpha.12.

Release Notes for v45.0.0-alpha.12

Features

  • Added launch-failure reporting with systemErrorCode to the app child-process-gone event. #54230 (Also in 44)

Fixes

  • Fixed --xdg-portal-required-version having no effect and a spurious portal warning being logged for file dialogs on Linux. #54302 (Also in 43, 44)
  • Fixed a possible crash during process exit when vm.Script or vm contexts created in the main process had been garbage collected shortly before quitting. #54267 (Also in 43, 44)
  • Fixed a renderer crash when a ResizeObserver loop-limit error handler modified layout. #54289 (Also in 44)
  • Fixed clipboard.read(), readText() and has() resolving seconds late on Linux while the app was idle. #54307 (Also in 42, 43, 44)
  • Fixed fs.rmSync failing to remove read-only files on Windows. #54190 (Also in 42, 43, 44)
  • Fixed process.nextTick and promise callbacks queued in protocol/webRequest handlers running at the wrong time. #54301
  • Fixed WebAssembly modules loaded from the code cache crashing or throwing RuntimeError: unreachable after updating between certain patch releases. #54237 (Also in 42, 43, 44)

Performance Improvements

  • Improved the performance of APIs that return rectangles, sizes, points and display objects. #54213 (Also in 44)
  • Improved the performance of session.getUserAgent(). #54245 (Also in 44)
14 hours ago
monaco-editor

v0.57.0

Changes:

  • #5487: Prepare Monaco Editor 0.57.0 release
  • #5415: Bump uuid and webpack-dev-server in /website
  • #5476: Bump baseline-browser-mapping from 2.9.19 to 2.11.21 in /website
  • #5474: Bump svgo from 2.8.3 to 2.8.4 in /samples/browser-esm-parcel
  • #5479: Bump actions/deploy-pages from 5.0.0 to 5.0.1 in the github-actions group
  • #5468: Bump browserslist from 4.28.1 to 4.28.8 in /website
  • #5475: Bump js-yaml from 4.3.1 to 4.3.2
  • #5470: Bump fast-uri from 3.1.2 to 3.1.7 in /webpack-plugin
  • #5469: Bump nanoid from 3.3.11 to 3.3.18 in /webpack-plugin
  • #5467: Bump fast-uri from 3.1.5 to 3.1.7 in /samples/browser-esm-webpack-typescript-react
See More
  • #5466: Bump fast-uri from 3.1.2 to 3.1.7 in /samples
  • #5465: Bump fast-uri from 3.1.4 to 3.1.7 in /website
  • #5463: Bump postcss-selector-parser from 7.1.0 to 7.1.5 in /website
  • #5416: Bump @babel/core from 7.17.8 to 7.29.7 in /samples/browser-esm-vite-react
  • #5438: Bump electron from 39.8.5 to 39.8.10 in /samples
  • #5460: Bump the github-actions group with 7 updates
  • #5456: Pin GitHub Actions to full-length commit SHAs
  • #5450: Bump postcss from 8.5.12 to 8.5.26
  • #5449: Bump js-yaml from 4.2.0 to 4.3.1
  • #5439: Bump postcss from 8.5.13 to 8.5.26 in /samples
  • #5441: Bump postcss from 8.5.15 to 8.5.26 in /samples/browser-esm-vite-react
  • #5432: Bump undici from 7.28.0 to 7.29.0
  • #5440: Bump brace-expansion in /website
  • #5436: Bump fast-uri from 3.1.4 to 3.1.5 in /samples/browser-esm-webpack-typescript-react
  • #5437: Bump fast-uri from 3.1.2 to 3.1.5
  • #5413: Bump svgo from 2.8.2 to 2.8.3 in /samples/browser-esm-parcel
  • #5419: Bump launch-editor from 2.12.0 to 2.14.1 in /website
  • #5414: Bump fast-uri from 3.1.2 to 3.1.4 in /samples/browser-esm-webpack-typescript-react
  • #5417: Bump minimatch from 3.1.2 to 3.1.5 in /webpack-plugin
  • #5420: Bump ws from 8.18.0 to 8.21.1 in /samples
  • #5418: Bump http-proxy-middleware from 2.0.9 to 2.0.10 in /samples
  • #5412: Bump fast-uri from 3.1.2 to 3.1.4 in /website
  • #5411: Bump shell-quote from 1.8.4 to 1.10.0 in /website
  • #5409: Bump webpack-dev-server from 5.2.5 to 5.2.6 in /samples
  • #5410: Bump postcss from 8.5.14 to 8.5.23 in /website
  • #5407: Bump immutable from 5.1.5 to 5.1.9 in /website
  • #5401: Bump brace-expansion from 1.1.11 to 1.1.16 in /samples

This list of changes was auto generated.