diff --git a/packages/x-charts/src/hooks/useInteractionItemProps.ts b/packages/x-charts/src/hooks/useInteractionItemProps.ts index 49a6e5e70c90b..dcd058cf511b5 100644 --- a/packages/x-charts/src/hooks/useInteractionItemProps.ts +++ b/packages/x-charts/src/hooks/useInteractionItemProps.ts @@ -28,8 +28,29 @@ export const useInteractionItemProps = (skip?: boolean) => { }); }; const onPointerLeave = (event: React.PointerEvent) => { - event.currentTarget.releasePointerCapture(event.pointerId); - dispatchInteraction({ type: 'leaveItem', data }); + if (event.currentTarget.hasPointerCapture(event.pointerId)) { + event.currentTarget.releasePointerCapture(event.pointerId); + } + + store.update((prev) => { + const prevItem = prev.interaction.item; + if ( + prevItem === null || + Object.keys(data).some( + (key) => data[key as keyof typeof data] !== prevItem[key as keyof typeof prevItem], + ) + ) { + // The item is already something else, no need to clean it. + return prev; + } + return { + ...prev, + interaction: { + ...prev.interaction, + item: null, + }, + }; + }); clearHighlighted(); }; return {