[charts] Let keyboard navigation avoid overflow and handle nullish values#20757
[charts] Let keyboard navigation avoid overflow and handle nullish values#20757alexfauquette merged 5 commits intomui:masterfrom
Conversation
|
Deploy preview: https://deploy-preview-20757--material-ui-x.netlify.app/ Bundle size report
|
CodSpeed Performance ReportMerging #20757 will not alter performanceComparing Summary
Footnotes |
Screen.Recording.2025-12-24.at.10.07.13.mov |
|
@bernardobelchior If I resume your question, it's: When the next series does not have a value for the given index, should we move to the the next series with a value. ExamplesFor example with the data in the following table, If I focus on series A at x=1, Arrow Down should the focus goes to :
The current implementation is the last one. I find it easier to navigate, because (IMO) it's the best way to split navigation between series and indexes. Impact of the different solutionsWith the current solution arrow up/down moves the focus from one series to the other. It can impact the item index, but it never skip series. The proposed solution skip series when no data is available. So as long as you do not manage to find an index in common, you can not move to the next series. In the table bellow it's would not be possible to move from series A to B. Because focus on series A is trapped in x<=2 and series B can only be reached with x>=3 😈 |
|
@alexfauquette the current solution is dependant on the current position, so it feels a bit non-deterministic. In the video below, I just press "down" and it initially goes to red (same index), then to the end of yellow (last index), then to blue (last non-null index), then to red (i suppose it goes to the last non-null index before the blue index?) Screen.Recording.2025-12-29.at.12.45.52.movThis is confusing, and it happens in many variations. If I go down I should always pass through the same three(in this case) values, if I go up, I should pass through the same 3 values in the reverse order. |
|
I've also noticed we are using right/down next we might need to adapt based on rtl eventually too 😅 |
JCQuintas
left a comment
There was a problem hiding this comment.
The current solution to use the axis highlight to display the current series even on null values looks good to me.
The behaviour is predictable and it is clear where the user currently is at.
nice work 👍
This MR contains the following updates: | Package | Type | Update | Change | OpenSSF | |---|---|---|---|---| | [@mui/x-charts](https://mui.com/x/react-charts/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-charts)) | dependencies | minor | [`8.23.0` → `8.24.0`](https://renovatebot.com/diffs/npm/@mui%2fx-charts/8.23.0/8.24.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) | | [@mui/x-tree-view](https://mui.com/x/react-tree-view/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-tree-view)) | dependencies | minor | [`8.23.0` → `8.24.0`](https://renovatebot.com/diffs/npm/@mui%2fx-tree-view/8.23.0/8.24.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) | | [@openapitools/openapi-generator-cli](https://github.com/OpenAPITools/openapi-generator-cli) | devDependencies | minor | [`2.26.0` → `2.27.0`](https://renovatebot.com/diffs/npm/@openapitools%2fopenapi-generator-cli/2.26.0/2.27.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/OpenAPITools/openapi-generator-cli) | | [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | devDependencies | minor | [`8.51.0` → `8.53.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.51.0/8.53.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) | | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | devDependencies | minor | [`8.51.0` → `8.53.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.51.0/8.53.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) | | [react-router-dom](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | dependencies | minor | [`7.11.0` → `7.12.0`](https://renovatebot.com/diffs/npm/react-router-dom/7.11.0/7.12.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/remix-run/react-router) | --- ### Release Notes <details> <summary>mui/mui-x (@​mui/x-charts)</summary> ### [`v8.24.0`](https://github.com/mui/mui-x/blob/HEAD/CHANGELOG.md#8240) [Compare Source](mui/mui-x@v8.23.0...v8.24.0) *Jan 8, 2026* We'd like to extend a big thank you to the 12 contributors who made this release possible. Here are some highlights ✨: - ⚡️Add bar [batch renderer](https://mui.com/x/react-charts/bars/#performance), result in a significant performance improvement when rendering thousands of bars - 📊 Add [range bar chart](https://mui.com/x/react-charts/range-bar/) to render  - 🌎 Improved Danish (da-DK) and Japanese (ja-JP) locales on the Data Grid Special thanks go out to these community members for their valuable contributions: [@​anders-noerrelykke](https://github.com/anders-noerrelykke), [@​auloin](https://github.com/auloin), [@​sai6855](https://github.com/sai6855), [@​yuito-it](https://github.com/yuito-it) The following team members contributed to this release: [@​alelthomas](https://github.com/alelthomas), [@​alexfauquette](https://github.com/alexfauquette), [@​arminmeh](https://github.com/arminmeh), [@​bernardobelchior](https://github.com/bernardobelchior), [@​flaviendelangle](https://github.com/flaviendelangle), [@​JCQuintas](https://github.com/JCQuintas), [@​mapache-salvaje](https://github.com/mapache-salvaje), [@​siriwatknp](https://github.com/siriwatknp) ##### Data Grid ##### `@mui/[email protected]` - \[l10n] Improve Danish (da-DK) locale ([#​20828](mui/mui-x#20828)) [@​anders-noerrelykke](https://github.com/anders-noerrelykke) - \[l10n] Improve Japanese (ja-JP) locale ([#​20251](mui/mui-x#20251)) [@​yuito-it](https://github.com/yuito-it) ##### `@mui/[email protected]` [](https://mui.com/r/x-pro-svg-link "Pro plan") Same changes as in `@mui/[email protected]`, plus: - \[DataGridPro] Fix header filter height for `density="compact"` ([#​20834](mui/mui-x#20834)) [@​arminmeh](https://github.com/arminmeh) ##### `@mui/[email protected]` [](https://mui.com/r/x-premium-svg-link "Premium plan") Same changes as in `@mui/[email protected]`. ##### Date and Time Pickers ##### `@mui/[email protected]` - \[pickers] Fix Styles applied to PickersDay when MuiPickersDay-dayOutsideMonth is used ([#​20719](mui/mui-x#20719)) [@​sai6855](https://github.com/sai6855) ##### `@mui/[email protected]` [](https://mui.com/r/x-pro-svg-link "Pro plan") Same changes as in `@mui/[email protected]`. ##### Charts ##### `@mui/[email protected]` - \[charts] Add `VisibilityManager` logic to allow managing series/items ([#​20571](mui/mui-x#20571)) [@​JCQuintas](https://github.com/JCQuintas) - \[charts] Add `identifierSerializer` configuration ([#​20775](mui/mui-x#20775)) [@​JCQuintas](https://github.com/JCQuintas) - \[charts] Add `serializeIdentifier` instance function ([#​20791](mui/mui-x#20791)) [@​JCQuintas](https://github.com/JCQuintas) - \[charts] Add bar batch renderer ([#​20457](mui/mui-x#20457)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[charts] Allow animating bar, line, and pie elements to hidden state ([#​20798](mui/mui-x#20798)) [@​JCQuintas](https://github.com/JCQuintas) - \[charts] Fix failing lint step ([#​20813](mui/mui-x#20813)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[charts] Fix tooltip anchored to item ([#​20783](mui/mui-x#20783)) [@​alexfauquette](https://github.com/alexfauquette) - \[charts] Fix type casting in getCategoryAxisConfig and applySeriesLayout functions ([#​20797](mui/mui-x#20797)) [@​sai6855](https://github.com/sai6855) - \[charts] Let keyboard navigation avoid overflow and handle nullish values ([#​20757](mui/mui-x#20757)) [@​alexfauquette](https://github.com/alexfauquette) - \[charts] Refactor `PieChart` and `PieChartPro` to use `slots` and `slotProps` directly ([#​20795](mui/mui-x#20795)) [@​sai6855](https://github.com/sai6855) - \[charts] Refactor `useRegisterPointerEventHandlers` ([#​20824](mui/mui-x#20824)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[charts] Update legend types to allow hiding/showing items ([#​20784](mui/mui-x#20784)) [@​JCQuintas](https://github.com/JCQuintas) ##### `@mui/[email protected]` [](https://mui.com/r/x-pro-svg-link "Pro plan") Same changes as in `@mui/[email protected]`, plus: - \[charts-pro] Pass `slotProps.toolbar` to `Toolbar` in `PieChartPro` ([#​20796](mui/mui-x#20796)) [@​sai6855](https://github.com/sai6855) ##### `@mui/[email protected]` [](https://mui.com/r/x-premium-svg-link "Premium plan") Same changes as in `@mui/[email protected]`, plus: - \[charts-premium] Add range bar chart ([#​20275](mui/mui-x#20275)) [@​bernardobelchior](https://github.com/bernardobelchior) ##### Tree View ##### `@mui/[email protected]` - \[tree view] Introduce a Tree View Store to clean the internals ([#​20051](mui/mui-x#20051)) [@​flaviendelangle](https://github.com/flaviendelangle) ##### `@mui/[email protected]` [](https://mui.com/r/x-pro-svg-link "Pro plan") Same changes as in `@mui/[email protected]`. ##### Codemod ##### `@mui/[email protected]` Internal changes. ##### Docs - \[docs] Fix axis size default values ([#​20799](mui/mui-x#20799)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[docs] Update What's New in MUI X page with post v8 features (DX-118) ([#​20787](mui/mui-x#20787)) [@​alelthomas](https://github.com/alelthomas) - \[docs] Fix `onAccept`'s `context.source` documentation to use 'view' instead of 'picker' ([#​20465](mui/mui-x#20465)) [@​auloin](https://github.com/auloin) - \[docs] Revise the Charts Brush doc ([#​20792](mui/mui-x#20792)) [@​mapache-salvaje](https://github.com/mapache-salvaje) - \[docs] Revise the Charts Highlighting doc ([#​20788](mui/mui-x#20788)) [@​mapache-salvaje](https://github.com/mapache-salvaje) - \[docs] Revise the Charts Label doc ([#​20794](mui/mui-x#20794)) [@​mapache-salvaje](https://github.com/mapache-salvaje) - \[docs] Revise the Charts Export doc ([#​20779](mui/mui-x#20779)) [@​mapache-salvaje](https://github.com/mapache-salvaje) ##### Core - \[code-infra] Fix v8.23.0 release date ([#​20767](mui/mui-x#20767)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove `glob-gitignore` ([#​20801](mui/mui-x#20801)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove `nyc` ([#​20804](mui/mui-x#20804)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove `stream-browserify` and `null-loader` ([#​20805](mui/mui-x#20805)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove `stylelint-config-tailwindcss` ([#​20807](mui/mui-x#20807)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove unused `path` package ([#​20802](mui/mui-x#20802)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Retry flaky e2e test on webkit ([#​20806](mui/mui-x#20806)) [@​JCQuintas](https://github.com/JCQuintas) - \[internal] Add `internal` slot to properly generate components CSS layer ([#​20763](mui/mui-x#20763)) [@​siriwatknp](https://github.com/siriwatknp) </details> <details> <summary>OpenAPITools/openapi-generator-cli (@​openapitools/openapi-generator-cli)</summary> ### [`v2.27.0`](https://github.com/OpenAPITools/openapi-generator-cli/releases/tag/v2.27.0) [Compare Source](OpenAPITools/openapi-generator-cli@v2.26.0...v2.27.0) ##### Features - **config:** add support for environment variable placeholders in config ([#​1031](OpenAPITools/openapi-generator-cli#1031)) ([1cd2614](OpenAPITools/openapi-generator-cli@1cd2614)) </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary> ### [`v8.53.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8530-2026-01-12) [Compare Source](typescript-eslint/typescript-eslint@v8.52.0...v8.53.0) ##### 🚀 Features - **eslint-plugin:** add rule \[strict-void-return] ([#​9707](typescript-eslint/typescript-eslint#9707)) - **eslint-plugin:** \[no-unused-vars] add a fixer to remove unused imports ([#​11922](typescript-eslint/typescript-eslint#11922)) ##### 🩹 Fixes - **eslint-plugin:** \[no-useless-default-assignment] fix false positive for parameters corresponding to a rest parameter ([#​11916](typescript-eslint/typescript-eslint#11916)) - **eslint-plugin:** replace unclear "`error` typed" with more helpful description ([#​11704](typescript-eslint/typescript-eslint#11704)) - **typescript-estree:** forbid invalid `extends` and `implements` in interface declaration ([#​11935](typescript-eslint/typescript-eslint#11935)) - **typescript-estree:** forbid invalid class implements ([#​11934](typescript-eslint/typescript-eslint#11934)) - **typescript-estree:** forbid type-only import with both default and named specifiers ([#​11930](typescript-eslint/typescript-eslint#11930)) ##### ❤️ Thank You - Brad Zacher [@​bradzacher](https://github.com/bradzacher) - fisker Cheung [@​fisker](https://github.com/fisker) - Josh Goldberg - Josh Goldberg ✨ - Kirk Waiblinger - Niki [@​phaux](https://github.com/phaux) - Nikita - SungHyun627 [@​SungHyun627](https://github.com/SungHyun627) - Will Harney [@​wjhsf](https://github.com/wjhsf) You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. ### [`v8.52.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8520-2026-01-05) [Compare Source](typescript-eslint/typescript-eslint@v8.51.0...v8.52.0) ##### 🚀 Features - **eslint-plugin-internal:** \[no-multiple-lines-of-errors] add rule ([#​11899](typescript-eslint/typescript-eslint#11899)) ##### 🩹 Fixes - **eslint-plugin:** \[no-base-to-string] detect @​[@​toPrimitive](https://github.com/toPrimitive) and valueOf ([#​11901](typescript-eslint/typescript-eslint#11901)) - **eslint-plugin:** \[no-useless-default-assignment] handle conditional initializer ([#​11908](typescript-eslint/typescript-eslint#11908)) ##### ❤️ Thank You - Josh Goldberg ✨ - Ulrich Stark You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary> ### [`v8.53.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8530-2026-01-12) [Compare Source](typescript-eslint/typescript-eslint@v8.52.0...v8.53.0) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. ### [`v8.52.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8520-2026-01-05) [Compare Source](typescript-eslint/typescript-eslint@v8.51.0...v8.52.0) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. </details> <details> <summary>remix-run/react-router (react-router-dom)</summary> ### [`v7.12.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#7120) [Compare Source](https://github.com/remix-run/react-router/compare/[email protected]@7.12.0) ##### Patch Changes - Updated dependencies: - `[email protected]` </details> --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43MS4wIiwidXBkYXRlZEluVmVyIjoiNDIuODEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicmVub3ZhdGUiXX0=--> See merge request swiss-armed-forces/cyber-command/cea/loom!243 Co-authored-by: shrewd-laidback palace <shrewd-laidback-palace-736-c41-2c1-e464fc974@swiss-armed-forces-open-source.ch> Co-authored-by: Loom MR Pipeline Trigger <group_103951964_bot_9504bb8dead6d4e406ad817a607f24be@noreply.gitlab.com>
chore(deps): update frontend dependencies (minor) (minor) This MR contains the following updates: | Package | Type | Update | Change | OpenSSF | |---|---|---|---|---| | [@mui/x-charts](https://mui.com/x/react-charts/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-charts)) | dependencies | minor | [`8.23.0` → `8.24.0`](https://renovatebot.com/diffs/npm/@mui%2fx-charts/8.23.0/8.24.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) | | [@mui/x-tree-view](https://mui.com/x/react-tree-view/) ([source](https://github.com/mui/mui-x/tree/HEAD/packages/x-tree-view)) | dependencies | minor | [`8.23.0` → `8.24.0`](https://renovatebot.com/diffs/npm/@mui%2fx-tree-view/8.23.0/8.24.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) | | [@openapitools/openapi-generator-cli](https://github.com/OpenAPITools/openapi-generator-cli) | devDependencies | minor | [`2.26.0` → `2.27.0`](https://renovatebot.com/diffs/npm/@openapitools%2fopenapi-generator-cli/2.26.0/2.27.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/OpenAPITools/openapi-generator-cli) | | [@typescript-eslint/eslint-plugin](https://typescript-eslint.io/packages/eslint-plugin) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin)) | devDependencies | minor | [`8.51.0` → `8.53.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/8.51.0/8.53.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) | | [@typescript-eslint/parser](https://typescript-eslint.io/packages/parser) ([source](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/parser)) | devDependencies | minor | [`8.51.0` → `8.53.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/8.51.0/8.53.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/typescript-eslint/typescript-eslint) | | [react-router-dom](https://github.com/remix-run/react-router) ([source](https://github.com/remix-run/react-router/tree/HEAD/packages/react-router-dom)) | dependencies | minor | [`7.11.0` → `7.12.0`](https://renovatebot.com/diffs/npm/react-router-dom/7.11.0/7.12.0) | [](https://securityscorecards.dev/viewer/?uri=github.com/remix-run/react-router) | --- ### Release Notes <details> <summary>mui/mui-x (@​mui/x-charts)</summary> ### [`v8.24.0`](https://github.com/mui/mui-x/blob/HEAD/CHANGELOG.md#8240) [Compare Source](mui/mui-x@v8.23.0...v8.24.0) *Jan 8, 2026* We'd like to extend a big thank you to the 12 contributors who made this release possible. Here are some highlights ✨: - ⚡️Add bar [batch renderer](https://mui.com/x/react-charts/bars/#performance), result in a significant performance improvement when rendering thousands of bars - 📊 Add [range bar chart](https://mui.com/x/react-charts/range-bar/) to render  - 🌎 Improved Danish (da-DK) and Japanese (ja-JP) locales on the Data Grid Special thanks go out to these community members for their valuable contributions: [@​anders-noerrelykke](https://github.com/anders-noerrelykke), [@​auloin](https://github.com/auloin), [@​sai6855](https://github.com/sai6855), [@​yuito-it](https://github.com/yuito-it) The following team members contributed to this release: [@​alelthomas](https://github.com/alelthomas), [@​alexfauquette](https://github.com/alexfauquette), [@​arminmeh](https://github.com/arminmeh), [@​bernardobelchior](https://github.com/bernardobelchior), [@​flaviendelangle](https://github.com/flaviendelangle), [@​JCQuintas](https://github.com/JCQuintas), [@​mapache-salvaje](https://github.com/mapache-salvaje), [@​siriwatknp](https://github.com/siriwatknp) ##### Data Grid ##### `@mui/[email protected]` - \[l10n] Improve Danish (da-DK) locale ([#​20828](mui/mui-x#20828)) [@​anders-noerrelykke](https://github.com/anders-noerrelykke) - \[l10n] Improve Japanese (ja-JP) locale ([#​20251](mui/mui-x#20251)) [@​yuito-it](https://github.com/yuito-it) ##### `@mui/[email protected]` [](https://mui.com/r/x-pro-svg-link "Pro plan") Same changes as in `@mui/[email protected]`, plus: - \[DataGridPro] Fix header filter height for `density="compact"` ([#​20834](mui/mui-x#20834)) [@​arminmeh](https://github.com/arminmeh) ##### `@mui/[email protected]` [](https://mui.com/r/x-premium-svg-link "Premium plan") Same changes as in `@mui/[email protected]`. ##### Date and Time Pickers ##### `@mui/[email protected]` - \[pickers] Fix Styles applied to PickersDay when MuiPickersDay-dayOutsideMonth is used ([#​20719](mui/mui-x#20719)) [@​sai6855](https://github.com/sai6855) ##### `@mui/[email protected]` [](https://mui.com/r/x-pro-svg-link "Pro plan") Same changes as in `@mui/[email protected]`. ##### Charts ##### `@mui/[email protected]` - \[charts] Add `VisibilityManager` logic to allow managing series/items ([#​20571](mui/mui-x#20571)) [@​JCQuintas](https://github.com/JCQuintas) - \[charts] Add `identifierSerializer` configuration ([#​20775](mui/mui-x#20775)) [@​JCQuintas](https://github.com/JCQuintas) - \[charts] Add `serializeIdentifier` instance function ([#​20791](mui/mui-x#20791)) [@​JCQuintas](https://github.com/JCQuintas) - \[charts] Add bar batch renderer ([#​20457](mui/mui-x#20457)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[charts] Allow animating bar, line, and pie elements to hidden state ([#​20798](mui/mui-x#20798)) [@​JCQuintas](https://github.com/JCQuintas) - \[charts] Fix failing lint step ([#​20813](mui/mui-x#20813)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[charts] Fix tooltip anchored to item ([#​20783](mui/mui-x#20783)) [@​alexfauquette](https://github.com/alexfauquette) - \[charts] Fix type casting in getCategoryAxisConfig and applySeriesLayout functions ([#​20797](mui/mui-x#20797)) [@​sai6855](https://github.com/sai6855) - \[charts] Let keyboard navigation avoid overflow and handle nullish values ([#​20757](mui/mui-x#20757)) [@​alexfauquette](https://github.com/alexfauquette) - \[charts] Refactor `PieChart` and `PieChartPro` to use `slots` and `slotProps` directly ([#​20795](mui/mui-x#20795)) [@​sai6855](https://github.com/sai6855) - \[charts] Refactor `useRegisterPointerEventHandlers` ([#​20824](mui/mui-x#20824)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[charts] Update legend types to allow hiding/showing items ([#​20784](mui/mui-x#20784)) [@​JCQuintas](https://github.com/JCQuintas) ##### `@mui/[email protected]` [](https://mui.com/r/x-pro-svg-link "Pro plan") Same changes as in `@mui/[email protected]`, plus: - \[charts-pro] Pass `slotProps.toolbar` to `Toolbar` in `PieChartPro` ([#​20796](mui/mui-x#20796)) [@​sai6855](https://github.com/sai6855) ##### `@mui/[email protected]` [](https://mui.com/r/x-premium-svg-link "Premium plan") Same changes as in `@mui/[email protected]`, plus: - \[charts-premium] Add range bar chart ([#​20275](mui/mui-x#20275)) [@​bernardobelchior](https://github.com/bernardobelchior) ##### Tree View ##### `@mui/[email protected]` - \[tree view] Introduce a Tree View Store to clean the internals ([#​20051](mui/mui-x#20051)) [@​flaviendelangle](https://github.com/flaviendelangle) ##### `@mui/[email protected]` [](https://mui.com/r/x-pro-svg-link "Pro plan") Same changes as in `@mui/[email protected]`. ##### Codemod ##### `@mui/[email protected]` Internal changes. ##### Docs - \[docs] Fix axis size default values ([#​20799](mui/mui-x#20799)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[docs] Update What's New in MUI X page with post v8 features (DX-118) ([#​20787](mui/mui-x#20787)) [@​alelthomas](https://github.com/alelthomas) - \[docs] Fix `onAccept`'s `context.source` documentation to use 'view' instead of 'picker' ([#​20465](mui/mui-x#20465)) [@​auloin](https://github.com/auloin) - \[docs] Revise the Charts Brush doc ([#​20792](mui/mui-x#20792)) [@​mapache-salvaje](https://github.com/mapache-salvaje) - \[docs] Revise the Charts Highlighting doc ([#​20788](mui/mui-x#20788)) [@​mapache-salvaje](https://github.com/mapache-salvaje) - \[docs] Revise the Charts Label doc ([#​20794](mui/mui-x#20794)) [@​mapache-salvaje](https://github.com/mapache-salvaje) - \[docs] Revise the Charts Export doc ([#​20779](mui/mui-x#20779)) [@​mapache-salvaje](https://github.com/mapache-salvaje) ##### Core - \[code-infra] Fix v8.23.0 release date ([#​20767](mui/mui-x#20767)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove `glob-gitignore` ([#​20801](mui/mui-x#20801)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove `nyc` ([#​20804](mui/mui-x#20804)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove `stream-browserify` and `null-loader` ([#​20805](mui/mui-x#20805)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove `stylelint-config-tailwindcss` ([#​20807](mui/mui-x#20807)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Remove unused `path` package ([#​20802](mui/mui-x#20802)) [@​bernardobelchior](https://github.com/bernardobelchior) - \[code-infra] Retry flaky e2e test on webkit ([#​20806](mui/mui-x#20806)) [@​JCQuintas](https://github.com/JCQuintas) - \[internal] Add `internal` slot to properly generate components CSS layer ([#​20763](mui/mui-x#20763)) [@​siriwatknp](https://github.com/siriwatknp) </details> <details> <summary>OpenAPITools/openapi-generator-cli (@​openapitools/openapi-generator-cli)</summary> ### [`v2.27.0`](https://github.com/OpenAPITools/openapi-generator-cli/releases/tag/v2.27.0) [Compare Source](OpenAPITools/openapi-generator-cli@v2.26.0...v2.27.0) ##### Features - **config:** add support for environment variable placeholders in config ([#​1031](OpenAPITools/openapi-generator-cli#1031)) ([1cd2614](OpenAPITools/openapi-generator-cli@1cd2614)) </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary> ### [`v8.53.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8530-2026-01-12) [Compare Source](typescript-eslint/typescript-eslint@v8.52.0...v8.53.0) ##### 🚀 Features - **eslint-plugin:** add rule \[strict-void-return] ([#​9707](typescript-eslint/typescript-eslint#9707)) - **eslint-plugin:** \[no-unused-vars] add a fixer to remove unused imports ([#​11922](typescript-eslint/typescript-eslint#11922)) ##### 🩹 Fixes - **eslint-plugin:** \[no-useless-default-assignment] fix false positive for parameters corresponding to a rest parameter ([#​11916](typescript-eslint/typescript-eslint#11916)) - **eslint-plugin:** replace unclear "`error` typed" with more helpful description ([#​11704](typescript-eslint/typescript-eslint#11704)) - **typescript-estree:** forbid invalid `extends` and `implements` in interface declaration ([#​11935](typescript-eslint/typescript-eslint#11935)) - **typescript-estree:** forbid invalid class implements ([#​11934](typescript-eslint/typescript-eslint#11934)) - **typescript-estree:** forbid type-only import with both default and named specifiers ([#​11930](typescript-eslint/typescript-eslint#11930)) ##### ❤️ Thank You - Brad Zacher [@​bradzacher](https://github.com/bradzacher) - fisker Cheung [@​fisker](https://github.com/fisker) - Josh Goldberg - Josh Goldberg ✨ - Kirk Waiblinger - Niki [@​phaux](https://github.com/phaux) - Nikita - SungHyun627 [@​SungHyun627](https://github.com/SungHyun627) - Will Harney [@​wjhsf](https://github.com/wjhsf) You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. ### [`v8.52.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8520-2026-01-05) [Compare Source](typescript-eslint/typescript-eslint@v8.51.0...v8.52.0) ##### 🚀 Features - **eslint-plugin-internal:** \[no-multiple-lines-of-errors] add rule ([#​11899](typescript-eslint/typescript-eslint#11899)) ##### 🩹 Fixes - **eslint-plugin:** \[no-base-to-string] detect @​[@​toPrimitive](https://github.com/toPrimitive) and valueOf ([#​11901](typescript-eslint/typescript-eslint#11901)) - **eslint-plugin:** \[no-useless-default-assignment] handle conditional initializer ([#​11908](typescript-eslint/typescript-eslint#11908)) ##### ❤️ Thank You - Josh Goldberg ✨ - Ulrich Stark You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary> ### [`v8.53.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8530-2026-01-12) [Compare Source](typescript-eslint/typescript-eslint@v8.52.0...v8.53.0) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. ### [`v8.52.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#8520-2026-01-05) [Compare Source](typescript-eslint/typescript-eslint@v8.51.0...v8.52.0) This was a version bump only for parser to align it with other projects, there were no code changes. You can read about our [versioning strategy](https://typescript-eslint.io/users/versioning) and [releases](https://typescript-eslint.io/users/releases) on our website. </details> <details> <summary>remix-run/react-router (react-router-dom)</summary> ### [`v7.12.0`](https://github.com/remix-run/react-router/blob/HEAD/packages/react-router-dom/CHANGELOG.md#7120) [Compare Source](https://github.com/remix-run/react-router/compare/[email protected]@7.12.0) ##### Patch Changes - Updated dependencies: - `[email protected]` </details> --- - [ ] <!-- rebase-check -->If you want to rebase/retry this MR, check this box --- This MR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0Mi43MS4wIiwidXBkYXRlZEluVmVyIjoiNDIuODEuMyIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicmVub3ZhdGUiXX0=--> See merge request swiss-armed-forces/cyber-command/cea/loom!243 Co-authored-by: Loom MR Pipeline Trigger <group_103951964_bot_9504bb8dead6d4e406ad817a607f24be@noreply.gitlab.com> Co-authored-by: open-source Pipeline <group_90701827_bot_ed04ae348bc5f40af9966fb8b6867e99@noreply.gitlab.com>



Fix #20746
There are some edge-cases into handling
undefinedvalues due to arrays with different sizes.To test this, I played with the https://deploy-preview-20757--material-ui-x.netlify.app/x/react-charts/lines/#skip-missing-points demo by adding
enableKeyboardNavigationprops