Skip to content

[charts-pro] Add keyboard navigation to sankey#20777

Merged
alexfauquette merged 9 commits intomui:masterfrom
alexfauquette:keyboard-sankey
Jan 14, 2026
Merged

[charts-pro] Add keyboard navigation to sankey#20777
alexfauquette merged 9 commits intomui:masterfrom
alexfauquette:keyboard-sankey

Conversation

@alexfauquette
Copy link
Copy Markdown
Member

@alexfauquette alexfauquette commented Dec 29, 2025

The sankey now has a keyboard navigation.

Behavior

for node:

  • up/down: moves the focus between nodes of the same layer
  • left/right: moves focus to the source/target links

for links:

  • up/down: moves the focus between links with the same source
  • left/right: moves focus to the source/target node

Decisions up to discussion

The link up/down are limited to the same source node. It might look broken when layers are simple.

Here for example if you focus a yellow link you will only be able to move to the other yellow link. But user could expect to also navigate to the other links of the same level.

image

But if we consider more complex use cases like this one, it not that clear to know which link should be included or not in the loop and in which order we navigate across them.

image

So basically the proposed behavior is a bit restrictive but fully predictable

@alexfauquette alexfauquette requested review from a team and prakhargupta1 as code owners December 29, 2025 17:04
@alexfauquette alexfauquette added type: enhancement It’s an improvement, but we can’t make up our mind whether it's a bug fix or a new feature. scope: charts Changes related to the charts. labels Dec 29, 2025
@mui-bot
Copy link
Copy Markdown

mui-bot commented Dec 29, 2025

Deploy preview: https://deploy-preview-20777--material-ui-x.netlify.app/

Updated pages:

Bundle size report

Bundle Parsed size Gzip size
@mui/x-data-grid 0B(0.00%) 0B(0.00%)
@mui/x-data-grid-pro 0B(0.00%) 0B(0.00%)
@mui/x-data-grid-premium 0B(0.00%) 0B(0.00%)
@mui/x-charts 0B(0.00%) 0B(0.00%)
@mui/x-charts-pro 🔺+2.85KB(+0.61%) 🔺+687B(+0.49%)
@mui/x-charts-premium 0B(0.00%) 0B(0.00%)
@mui/x-date-pickers 0B(0.00%) 0B(0.00%)
@mui/x-date-pickers-pro 0B(0.00%) 0B(0.00%)
@mui/x-tree-view 0B(0.00%) 0B(0.00%)
@mui/x-tree-view-pro 0B(0.00%) 0B(0.00%)

Details of bundle changes

Generated by 🚫 dangerJS against 977a5bc

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds keyboard navigation functionality to the Sankey chart component, enabling users to navigate between nodes and links using arrow keys. The implementation includes visual focus indicators and exports the necessary hooks for consumers.

Key Changes

  • Implements keyboard navigation handler for Sankey charts with arrow key support for navigating nodes (up/down within layers, left/right to connected links) and links (up/down among same-source links, left/right to source/target nodes)
  • Adds FocusedSankeyNode and FocusedSankeyLink components to visually indicate the currently focused element with a stroke outline
  • Exports useFocusedItem hook from x-charts and x-charts-pro packages for programmatic access to the focused item

Reviewed changes

Copilot reviewed 23 out of 23 changed files in this pull request and generated 7 comments.

Show a summary per file
File Description
packages/x-charts-pro/src/SankeyChart/seriesConfig/keyboardFocusHandler.ts New keyboard navigation logic for Sankey charts, handling arrow key navigation between nodes and links
packages/x-charts-pro/src/SankeyChart/FocusedSankeyNode.tsx Component rendering focus indicator rectangle for focused nodes
packages/x-charts-pro/src/SankeyChart/FocusedSankeyLink.tsx Component rendering focus indicator path for focused links
packages/x-charts-pro/src/SankeyChart/SankeyChart.tsx Integrates FocusedSankeyNode and FocusedSankeyLink components, adds enableKeyboardNavigation prop
packages/x-charts-pro/src/SankeyChart/SankeyChart.plugins.ts Registers keyboard navigation plugin for Sankey charts
packages/x-charts-pro/src/SankeyChart/seriesConfig/index.ts Adds keyboardFocusHandler to Sankey series configuration
packages/x-charts/src/hooks/useFocusedItem.ts New hook to access the currently focused item from keyboard navigation state
packages/x-charts/src/hooks/index.ts Exports useFocusedItem hook
packages/x-charts/src/internals/plugins/featurePlugins/useChartKeyboardNavigation/index.ts Exports keyboard focus handler types
packages/x-charts/src/internals/plugins/featurePlugins/useChartKeyboardNavigation/keyboardFocusHandler.types.ts Updates type signatures to support series-specific type parameters
packages/x-charts/src/internals/plugins/models/chart.ts Adds TSeriesType generic parameter to ChartState type
packages/x-charts/src/internals/plugins/corePlugins/corePlugins.ts Updates ChartCorePluginSignatures to be generic over series type
scripts/x-charts.exports.json Adds useFocusedItem to exports
scripts/x-charts-pro.exports.json Adds FocusedSankeyLink, FocusedSankeyNode, and useFocusedItem to exports
scripts/x-charts-premium.exports.json Adds useFocusedItem to exports
docs/* Adds API documentation pages and updates sankey documentation with new components

Comment on lines +1 to +151
import type { KeyboardFocusHandler, FocusedItemUpdater } from '@mui/x-charts/internals';

// ====================================================================================================================
//
// Info: This files use node.layer and not node.depth to navigate between nodes on the same level.
//
// - depth is the graph depth, starting at 0 on the left, increasing by 1 for each link to the right.
// - layer is the visual level of the node. It takes into consideration the node alignment (left/right/justify/center)
//
// ====================================================================================================================

const getFirstNode: FocusedItemUpdater<'sankey', 'sankey'> = (_, state) => {
// If no node is defined, find the first node with layer = 0
const seriesId = state.series.defaultizedSeries.sankey?.seriesOrder[0];
if (!seriesId || !state.series.defaultizedSeries.sankey) {
return null;
}
const series = state.series.defaultizedSeries.sankey.series[seriesId];

if (series.data.nodes.length > 0) {
const index = series.data.nodes.findIndex((node) => node.layer === 0);
return { seriesId, type: 'sankey', subType: 'node', nodeId: series.data.nodes[index].id };
}
return null;
};

const getNodeToNode =
(step: -1 | 1): FocusedItemUpdater<'sankey', 'sankey'> =>
(currentItem, state) => {
if (currentItem && currentItem.subType === 'node') {
const data = state.series.defaultizedSeries.sankey?.series[currentItem.seriesId].data;
const currentNodeIndex = data?.nodes.findIndex((node) => node.id === currentItem.nodeId);

if (currentNodeIndex === undefined || currentNodeIndex < 0 || !data) {
return getFirstNode(null, state);
}

const currentNode = data.nodes[currentNodeIndex];
for (let i = 1; i <= data.nodes.length; i += 1) {
const index = (data.nodes.length + currentNodeIndex + step * i) % data.nodes.length;
if (data.nodes[index].layer === currentNode.layer) {
return {
seriesId: currentItem.seriesId,
type: 'sankey',
subType: 'node',
nodeId: data.nodes[index].id,
};
}
}
}
// If we fail, we fallback on the fist node
return getFirstNode(null, state);
};

const getNodeToLink =
(step: 'source' | 'target'): FocusedItemUpdater<'sankey', 'sankey'> =>
(currentItem, state) => {
if (currentItem && currentItem.subType === 'node') {
const data = state.series.defaultizedSeries.sankey?.series[currentItem.seriesId].data;
const currentNodeIndex = data?.nodes.findIndex((node) => node.id === currentItem.nodeId);

if (currentNodeIndex === undefined || currentNodeIndex < 0 || !data) {
return getFirstNode(null, state);
}

const currentNode = data.nodes[currentNodeIndex];

const links = step === 'source' ? currentNode.sourceLinks : currentNode.targetLinks;
if (links.length === 0) {
// No link in that direction, we stay where we are.
return currentItem;
}
return {
seriesId: currentItem.seriesId,
type: 'sankey',
subType: 'link',
sourceId: links[0].source.id,
targetId: links[0].target.id,
};
}
// If we fail, we fallback on the fist node
return getFirstNode(null, state);
};

const getLinkToNode =
(step: 'source' | 'target'): FocusedItemUpdater<'sankey', 'sankey'> =>
(currentItem, state) => {
if (currentItem && currentItem.subType === 'link') {
const nodeId = step === 'source' ? currentItem.sourceId : currentItem.targetId;
return { seriesId: currentItem.seriesId, type: 'sankey', subType: 'node', nodeId };
}
return getFirstNode(null, state);
};

const getLinkToLink =
(step: -1 | 1): FocusedItemUpdater<'sankey', 'sankey'> =>
(currentItem, state) => {
if (currentItem && currentItem.subType === 'link') {
const data = state.series.defaultizedSeries.sankey?.series[currentItem.seriesId].data;
const currentLinkIndex = data?.links.findIndex(
(link) =>
link.source.id === currentItem.sourceId && link.target.id === currentItem.targetId,
);

if (currentLinkIndex === undefined || currentLinkIndex < 0 || !data) {
return getFirstNode(null, state);
}

for (let i = 1; i <= data.links.length; i += 1) {
const index = (data.links.length + currentLinkIndex + step * i) % data.links.length;
if (data.links[index].source.id === currentItem.sourceId) {
return {
seriesId: currentItem.seriesId,
type: 'sankey',
subType: 'link',
sourceId: data.links[index].source.id,
targetId: data.links[index].target.id,
};
}
}
}

return getFirstNode(null, state);
};

const keyboardFocusHandler: KeyboardFocusHandler<'sankey', 'sankey'> =
(event) => (currentItem, state) => {
const isLink = currentItem?.subType === 'link';

switch (event.key) {
case 'ArrowDown':
return isLink ? getLinkToLink(1)(currentItem, state) : getNodeToNode(1)(currentItem, state);
case 'ArrowUp':
return isLink
? getLinkToLink(-1)(currentItem, state)
: getNodeToNode(-1)(currentItem, state);
case 'ArrowRight':
return isLink
? getLinkToNode('target')(currentItem, state)
: getNodeToLink('source')(currentItem, state);
case 'ArrowLeft':
return isLink
? getLinkToNode('source')(currentItem, state)
: getNodeToLink('target')(currentItem, state);

default:
return null;
}
};

export default keyboardFocusHandler;
Copy link

Copilot AI Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The keyboard navigation logic lacks test coverage. The repository has comprehensive testing for similar components (e.g., FunnelChart, Heatmap) and hooks (e.g., useFunnelSeries, useSankeySeries). Consider adding tests to verify:

  • Navigation between nodes in the same layer (up/down arrows)
  • Navigation between links with the same source (up/down arrows)
  • Navigation from nodes to source/target links (left/right arrows)
  • Navigation from links to source/target nodes (left/right arrows)
  • Edge cases like empty nodes, no links in a direction, and wrapping behavior

Copilot uses AI. Check for mistakes.
Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@copilot add a new commit to apply changes based on this feedback

@codspeed-hq
Copy link
Copy Markdown

codspeed-hq bot commented Dec 30, 2025

Merging this PR will not alter performance

✅ 14 untouched benchmarks


Comparing alexfauquette:keyboard-sankey (977a5bc) with master (d1ccc97)1

Open in CodSpeed

Footnotes

  1. No successful run was found on master (2e1869b) during the generation of this report, so d1ccc97 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report.

@github-actions github-actions bot added the PR: out-of-date The pull request has merge conflicts and can't be merged. label Dec 30, 2025
@github-actions
Copy link
Copy Markdown
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@oliviertassinari oliviertassinari added the plan: Pro Impact at least one Pro user. label Dec 30, 2025
@github-actions github-actions bot removed the PR: out-of-date The pull request has merge conflicts and can't be merged. label Jan 6, 2026
@github-actions
Copy link
Copy Markdown
Contributor

This pull request has conflicts, please resolve those before we can evaluate the pull request.

@github-actions github-actions bot added the PR: out-of-date The pull request has merge conflicts and can't be merged. label Jan 12, 2026
@github-actions github-actions bot removed the PR: out-of-date The pull request has merge conflicts and can't be merged. label Jan 13, 2026
Copy link
Copy Markdown
Member

@JCQuintas JCQuintas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall I agree with the behaviour.

If we get issues with this, we could try other options

  • A more "stateful one", where if moving backwards then up/down should iterate over the target's links.
  • One that takes into account the "link color" keyword? If linkOptions.color: 'target' then iterate over the targets links.

}
};

export default keyboardFocusHandler;
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We tend to export functions instead

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't understand you point.

For now all the similar files are doing

const keyboardFocusHandler: KeyboardFocusHandler<'pie', 'pie'> = (event) => ...

export default keyboardFocusHandler

Comment on lines +23 to +24
TSeriesType extends ChartSeriesType = ChartSeriesType,
> = MergeSignaturesProperty<[...ChartCorePluginSignatures<TSeriesType>, ...TSignatures], 'state'> &
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Snhould these type changes be in a separate pr?

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I could extract it if you prefer. Just that it does not make lot of sens to add this generic in a dedicated PR since it would not be used

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need, only if you expect issues out of it 😅

@bernardobelchior
Copy link
Copy Markdown
Member

bernardobelchior commented Jan 14, 2026

The algorithm seems to work well in most cases, but here's one where it fails, probably because we're checking that the source and target are the same, but in this case there's an intermediate node.

Here I'm pressing Arrow Down / Arrow Up on every node and link:

Screen.Recording.2026-01-14.at.10.31.12.mov

It's this demo

@alexfauquette
Copy link
Copy Markdown
Member Author

The algorithm seems to work well in most cases, but here's one where it fails, probably because we're checking that the source and target are the same, but in this case there's an intermediate node.

From what I understand, you expect to be able to move from node B to the link E->D

For me it's not a good behavior. In this particular example it looks obvious but on more complex examples, if you can mover between links that don't have the same source, the behavior could look random.

It looks obvious that ArrowDown from B-D or A-B should lead to E-D.
But ArrowUp from E-D should move focus to ... I don't know

And that's a toy example. If you open that navigation, the second screenshot in the description would became a nighmare to navigate

image

@alexfauquette alexfauquette merged commit 8571f67 into mui:master Jan 14, 2026
22 checks passed
Copy link
Copy Markdown
Member

@bernardobelchior bernardobelchior left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, I forgot to submit my comments 😅

return null;
}

const link = layout?.links.find(
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const link = layout?.links.find(
const link = layout.links.find(

if (!focusedItem || focusedItem.type !== 'sankey' || focusedItem.subType !== 'node' || !layout) {
return null;
}
const node = layout?.nodes.find(({ id }) => id === focusedItem.nodeId);
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
const node = layout?.nodes.find(({ id }) => id === focusedItem.nodeId);
const node = layout.nodes.find(({ id }) => id === focusedItem.nodeId);

width={x1 - x0}
height={y1 - y0}
fill="none"
stroke={(theme.vars ?? theme).palette.text.primary}
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we always use (theme.vars ?? theme)? I think we might have some places where we don't do this

title: React Sankey chart
productId: x-charts
components: SankeyChart, SankeyPlot, SankeyTooltip, SankeyTooltipContent, SankeyDataProvider
components: SankeyChart, SankeyPlot, SankeyTooltip, SankeyTooltipContent, SankeyDataProvider, FocusedSankeyNode, FocusedSankeyLink
Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we explain in the docs that these components should be added to the chart when using composition?

@bernardobelchior
Copy link
Copy Markdown
Member

From what I understand, you expect to be able to move from node B to the link E->D

Yes

For me it's not a good behavior. In this particular example it looks obvious but on more complex examples, if you can mover between links that don't have the same source, the behavior could look random.

It looks obvious that ArrowDown from B-D or A-B should lead to E-D. But ArrowUp from E-D should move focus to

To the link A-B IMO

And that's a toy example. If you open that navigation, the second screenshot in the description would became a nighmare to navigate

Which one do you mean?

736-c41-2c1-e464fc974 pushed a commit to Swiss-Armed-Forces/Loom that referenced this pull request Jan 18, 2026
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.24.0` → `8.25.0`](https://renovatebot.com/diffs/npm/@mui%2fx-charts/8.24.0/8.25.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/mui-x/badge)](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.24.0` → `8.25.0`](https://renovatebot.com/diffs/npm/@mui%2fx-tree-view/8.24.0/8.25.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/mui-x/badge)](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) |
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | minor | [`3.7.4` → `3.8.0`](https://renovatebot.com/diffs/npm/prettier/3.7.4/3.8.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/prettier/prettier/badge)](https://securityscorecards.dev/viewer/?uri=github.com/prettier/prettier) |

---

### Release Notes

<details>
<summary>mui/mui-x (@&#8203;mui/x-charts)</summary>

### [`v8.25.0`](https://github.com/mui/mui-x/blob/HEAD/CHANGELOG.md#8250)

[Compare Source](mui/mui-x@v8.24.0...v8.25.0)

<!-- generated comparing v8.24.0..master -->

*Jan 14, 2026*

We'd like to extend a big thank you to the 8 contributors who made this release possible. Here are some highlights ✨:

- 📊 The Chart legend now has an option that enables [click to toggle visibility](https://mui.com/x/react-charts/legend/#toggle-visibility) of series.

  ![Image](https://github.com/user-attachments/assets/c8250287-1318-4581-ac5d-07e7ee01341c)

- 🐞 Bugfixes

- 📚 Documentation improvements

The following team members contributed to this release:
[@&#8203;alexfauquette](https://github.com/alexfauquette), [@&#8203;arminmeh](https://github.com/arminmeh), [@&#8203;bernardobelchior](https://github.com/bernardobelchior), [@&#8203;cherniavskii](https://github.com/cherniavskii), [@&#8203;JCQuintas](https://github.com/JCQuintas), [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje), [@&#8203;rita-codes](https://github.com/rita-codes), [@&#8203;Janpot](https://github.com/Janpot)

##### Data Grid

##### `@mui/[email protected]`

Internal changes.

##### `@mui/[email protected]` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")

Same changes as in `@mui/[email protected]`.

##### `@mui/[email protected]` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link "Premium plan")

Same changes as in `@mui/[email protected]`.

##### Date and Time Pickers

##### `@mui/[email protected]`

Internal changes.

##### `@mui/[email protected]` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")

Same changes as in `@mui/[email protected]`.

##### Charts

##### `@mui/[email protected]`

- \[charts] Add Legend actions ([#&#8203;20404](mui/mui-x#20404)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Add `initialHiddenItems` prop to set initial state ([#&#8203;20894](mui/mui-x#20894)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Control the item tooltip ([#&#8203;20617](mui/mui-x#20617)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts] Export plugins from premium ([#&#8203;20866](mui/mui-x#20866)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Fix node anchor on iOS ([#&#8203;20848](mui/mui-x#20848)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts] Fix test inconsistency in charts ([#&#8203;20907](mui/mui-x#20907)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Revert `touch-action: pan-y` removal when zoom is disabled ([#&#8203;20852](mui/mui-x#20852)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[charts] Use React event handler to detect pointer type ([#&#8203;20849](mui/mui-x#20849)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts] Enable keyboard navigation in radar chart ([#&#8203;20765](mui/mui-x#20765)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts] Fix tooltip position for stacked line series ([#&#8203;20901](mui/mui-x#20901)) [@&#8203;alexfauquette](https://github.com/alexfauquette)

##### `@mui/[email protected]` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")

Same changes as in `@mui/[email protected]`, plus:

- \[charts-pro] Add keyboard navigation to funnel ([#&#8203;20766](mui/mui-x#20766)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts-pro] Add keyboard navigation to heatmap ([#&#8203;20786](mui/mui-x#20786)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts-pro] Add keyboard navigation to sankey ([#&#8203;20777](mui/mui-x#20777)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts-pro] Prefer global pointer interaction tracker in Heatmap ([#&#8203;20697](mui/mui-x#20697)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[charts-pro] Support composition for Sankey ([#&#8203;20604](mui/mui-x#20604)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts-pro] Fix crash when two same-direction axes have a zoom preview ([#&#8203;20916](mui/mui-x#20916)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)

##### `@mui/[email protected]` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link "Premium plan")

Same changes as in `@mui/[email protected]`, plus:

- \[charts-premium] Add `ChartContainerPremium` ([#&#8203;20910](mui/mui-x#20910)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[charts-premium] Fix `ChartDataProviderPremium` tests ([#&#8203;20868](mui/mui-x#20868)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)

##### Tree View

##### `@mui/[email protected]`

Internal changes.

##### `@mui/[email protected]` [![pro](https://mui.com/r/x-pro-svg)](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 Waterfall Chart documentation badge from Pro to Premium ([#&#8203;20888](mui/mui-x#20888)) [@&#8203;Copilot](https://github.com/Copilot)
- \[docs] Fix broken links on Data Grid Editing sub-pages ([#&#8203;20911](mui/mui-x#20911)) [@&#8203;arminmeh](https://github.com/arminmeh)
- \[docs] Increase chart axis size in docs to fit in Ubuntu Firefox ([#&#8203;20844](mui/mui-x#20844)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[docs] Simplify heatmap zoom demo ([#&#8203;20851](mui/mui-x#20851)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[docs] Revise the Charts Composition doc ([#&#8203;20032](mui/mui-x#20032)) [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje)
- \[docs] Revise the Charts Localization doc ([#&#8203;20800](mui/mui-x#20800)) [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje)
- \[docs] Revise the Charts Stacking doc ([#&#8203;20830](mui/mui-x#20830)) [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje)
- \[docs] Fix broken links ([#&#8203;20914](mui/mui-x#20914)) [@&#8203;Janpot](https://github.com/Janpot)

##### Core

- \[code-infra] Fix `material-ui/disallow-react-api-in-server-components` ([#&#8203;20909](mui/mui-x#20909)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[code-infra] Prepare for v9 ([#&#8203;20860](mui/mui-x#20860)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[code-infra] Update codeowners ([#&#8203;20886](mui/mui-x#20886)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[internal] Remove local Claude settings from the repo ([#&#8203;20853](mui/mui-x#20853)) [@&#8203;cherniavskii](https://github.com/cherniavskii)

</details>

<details>
<summary>prettier/prettier (prettier)</summary>

### [`v3.8.0`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#380)

[Compare Source](prettier/prettier@3.7.4...3.8.0)

[diff](prettier/prettier@3.7.4...3.8.0)

🔗 [Release Notes](https://prettier.io/blog/2026/01/14/3.8.0)

</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:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NC4yIiwidXBkYXRlZEluVmVyIjoiNDIuODQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicmVub3ZhdGUiXX0=-->

See merge request swiss-armed-forces/cyber-command/cea/loom!253

Co-authored-by: Loom MR Pipeline Trigger <group_103951964_bot_9504bb8dead6d4e406ad817a607f24be@noreply.gitlab.com>
736-c41-2c1-e464fc974 added a commit to Swiss-Armed-Forces/Loom that referenced this pull request Jan 18, 2026
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.24.0` → `8.25.0`](https://renovatebot.com/diffs/npm/@mui%2fx-charts/8.24.0/8.25.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/mui-x/badge)](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.24.0` → `8.25.0`](https://renovatebot.com/diffs/npm/@mui%2fx-tree-view/8.24.0/8.25.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/mui/mui-x/badge)](https://securityscorecards.dev/viewer/?uri=github.com/mui/mui-x) |
| [prettier](https://prettier.io) ([source](https://github.com/prettier/prettier)) | devDependencies | minor | [`3.7.4` → `3.8.0`](https://renovatebot.com/diffs/npm/prettier/3.7.4/3.8.0) | [![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/prettier/prettier/badge)](https://securityscorecards.dev/viewer/?uri=github.com/prettier/prettier) |

---

### Release Notes

<details>
<summary>mui/mui-x (@&#8203;mui/x-charts)</summary>

### [`v8.25.0`](https://github.com/mui/mui-x/blob/HEAD/CHANGELOG.md#8250)

[Compare Source](mui/mui-x@v8.24.0...v8.25.0)

<!-- generated comparing v8.24.0..master -->

*Jan 14, 2026*

We'd like to extend a big thank you to the 8 contributors who made this release possible. Here are some highlights ✨:

- 📊 The Chart legend now has an option that enables [click to toggle visibility](https://mui.com/x/react-charts/legend/#toggle-visibility) of series.

  ![Image](https://github.com/user-attachments/assets/c8250287-1318-4581-ac5d-07e7ee01341c)

- 🐞 Bugfixes

- 📚 Documentation improvements

The following team members contributed to this release:
[@&#8203;alexfauquette](https://github.com/alexfauquette), [@&#8203;arminmeh](https://github.com/arminmeh), [@&#8203;bernardobelchior](https://github.com/bernardobelchior), [@&#8203;cherniavskii](https://github.com/cherniavskii), [@&#8203;JCQuintas](https://github.com/JCQuintas), [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje), [@&#8203;rita-codes](https://github.com/rita-codes), [@&#8203;Janpot](https://github.com/Janpot)

##### Data Grid

##### `@mui/[email protected]`

Internal changes.

##### `@mui/[email protected]` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")

Same changes as in `@mui/[email protected]`.

##### `@mui/[email protected]` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link "Premium plan")

Same changes as in `@mui/[email protected]`.

##### Date and Time Pickers

##### `@mui/[email protected]`

Internal changes.

##### `@mui/[email protected]` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")

Same changes as in `@mui/[email protected]`.

##### Charts

##### `@mui/[email protected]`

- \[charts] Add Legend actions ([#&#8203;20404](mui/mui-x#20404)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Add `initialHiddenItems` prop to set initial state ([#&#8203;20894](mui/mui-x#20894)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Control the item tooltip ([#&#8203;20617](mui/mui-x#20617)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts] Export plugins from premium ([#&#8203;20866](mui/mui-x#20866)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Fix node anchor on iOS ([#&#8203;20848](mui/mui-x#20848)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts] Fix test inconsistency in charts ([#&#8203;20907](mui/mui-x#20907)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[charts] Revert `touch-action: pan-y` removal when zoom is disabled ([#&#8203;20852](mui/mui-x#20852)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[charts] Use React event handler to detect pointer type ([#&#8203;20849](mui/mui-x#20849)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts] Enable keyboard navigation in radar chart ([#&#8203;20765](mui/mui-x#20765)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts] Fix tooltip position for stacked line series ([#&#8203;20901](mui/mui-x#20901)) [@&#8203;alexfauquette](https://github.com/alexfauquette)

##### `@mui/[email protected]` [![pro](https://mui.com/r/x-pro-svg)](https://mui.com/r/x-pro-svg-link "Pro plan")

Same changes as in `@mui/[email protected]`, plus:

- \[charts-pro] Add keyboard navigation to funnel ([#&#8203;20766](mui/mui-x#20766)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts-pro] Add keyboard navigation to heatmap ([#&#8203;20786](mui/mui-x#20786)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts-pro] Add keyboard navigation to sankey ([#&#8203;20777](mui/mui-x#20777)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts-pro] Prefer global pointer interaction tracker in Heatmap ([#&#8203;20697](mui/mui-x#20697)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[charts-pro] Support composition for Sankey ([#&#8203;20604](mui/mui-x#20604)) [@&#8203;alexfauquette](https://github.com/alexfauquette)
- \[charts-pro] Fix crash when two same-direction axes have a zoom preview ([#&#8203;20916](mui/mui-x#20916)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)

##### `@mui/[email protected]` [![premium](https://mui.com/r/x-premium-svg)](https://mui.com/r/x-premium-svg-link "Premium plan")

Same changes as in `@mui/[email protected]`, plus:

- \[charts-premium] Add `ChartContainerPremium` ([#&#8203;20910](mui/mui-x#20910)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[charts-premium] Fix `ChartDataProviderPremium` tests ([#&#8203;20868](mui/mui-x#20868)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)

##### Tree View

##### `@mui/[email protected]`

Internal changes.

##### `@mui/[email protected]` [![pro](https://mui.com/r/x-pro-svg)](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 Waterfall Chart documentation badge from Pro to Premium ([#&#8203;20888](mui/mui-x#20888)) [@&#8203;Copilot](https://github.com/Copilot)
- \[docs] Fix broken links on Data Grid Editing sub-pages ([#&#8203;20911](mui/mui-x#20911)) [@&#8203;arminmeh](https://github.com/arminmeh)
- \[docs] Increase chart axis size in docs to fit in Ubuntu Firefox ([#&#8203;20844](mui/mui-x#20844)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[docs] Simplify heatmap zoom demo ([#&#8203;20851](mui/mui-x#20851)) [@&#8203;bernardobelchior](https://github.com/bernardobelchior)
- \[docs] Revise the Charts Composition doc ([#&#8203;20032](mui/mui-x#20032)) [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje)
- \[docs] Revise the Charts Localization doc ([#&#8203;20800](mui/mui-x#20800)) [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje)
- \[docs] Revise the Charts Stacking doc ([#&#8203;20830](mui/mui-x#20830)) [@&#8203;mapache-salvaje](https://github.com/mapache-salvaje)
- \[docs] Fix broken links ([#&#8203;20914](mui/mui-x#20914)) [@&#8203;Janpot](https://github.com/Janpot)

##### Core

- \[code-infra] Fix `material-ui/disallow-react-api-in-server-components` ([#&#8203;20909](mui/mui-x#20909)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[code-infra] Prepare for v9 ([#&#8203;20860](mui/mui-x#20860)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[code-infra] Update codeowners ([#&#8203;20886](mui/mui-x#20886)) [@&#8203;JCQuintas](https://github.com/JCQuintas)
- \[internal] Remove local Claude settings from the repo ([#&#8203;20853](mui/mui-x#20853)) [@&#8203;cherniavskii](https://github.com/cherniavskii)

</details>

<details>
<summary>prettier/prettier (prettier)</summary>

### [`v3.8.0`](https://github.com/prettier/prettier/blob/HEAD/CHANGELOG.md#380)

[Compare Source](prettier/prettier@3.7.4...3.8.0)

[diff](prettier/prettier@3.7.4...3.8.0)

🔗 [Release Notes](https://prettier.io/blog/2026/01/14/3.8.0)

</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:eyJjcmVhdGVkSW5WZXIiOiI0Mi44NC4yIiwidXBkYXRlZEluVmVyIjoiNDIuODQuMiIsInRhcmdldEJyYW5jaCI6Im1haW4iLCJsYWJlbHMiOlsiZGVwZW5kZW5jaWVzIiwicmVub3ZhdGUiXX0=-->

See merge request swiss-armed-forces/cyber-command/cea/loom!253

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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

plan: Pro Impact at least one Pro user. scope: charts Changes related to the charts. type: enhancement It’s an improvement, but we can’t make up our mind whether it's a bug fix or a new feature.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants