@@ -3,7 +3,14 @@ import { AxisInteractionData, ItemInteractionData } from '../context/Interaction
33import { ChartSeriesType } from '../models/seriesType/config' ;
44import { useSvgRef } from '../hooks' ;
55
6- export function generateVirtualElement ( mousePosition : { x : number ; y : number } | null ) {
6+ type MousePosition = {
7+ x : number ;
8+ y : number ;
9+ pointerType : 'mouse' | 'touch' | 'pen' ;
10+ height : number ;
11+ } ;
12+
13+ export function generateVirtualElement ( mousePosition : MousePosition | null ) {
714 if ( mousePosition === null ) {
815 return {
916 getBoundingClientRect : ( ) => ( {
@@ -20,18 +27,20 @@ export function generateVirtualElement(mousePosition: { x: number; y: number } |
2027 } ;
2128 }
2229 const { x, y } = mousePosition ;
30+ const boundingBox = {
31+ width : 0 ,
32+ height : 0 ,
33+ x,
34+ y,
35+ top : y ,
36+ right : x ,
37+ bottom : y ,
38+ left : x ,
39+ } ;
2340 return {
2441 getBoundingClientRect : ( ) => ( {
25- width : 0 ,
26- height : 0 ,
27- x,
28- y,
29- top : y ,
30- right : x ,
31- bottom : y ,
32- left : x ,
33- toJSON : ( ) =>
34- JSON . stringify ( { width : 0 , height : 0 , x, y, top : y , right : x , bottom : y , left : x } ) ,
42+ ...boundingBox ,
43+ toJSON : ( ) => JSON . stringify ( boundingBox ) ,
3544 } ) ,
3645 } ;
3746}
@@ -40,7 +49,7 @@ export function useMouseTracker() {
4049 const svgRef = useSvgRef ( ) ;
4150
4251 // Use a ref to avoid rerendering on every mousemove event.
43- const [ mousePosition , setMousePosition ] = React . useState < null | { x : number ; y : number } > ( null ) ;
52+ const [ mousePosition , setMousePosition ] = React . useState < MousePosition | null > ( null ) ;
4453
4554 React . useEffect ( ( ) => {
4655 const element = svgRef . current ;
@@ -52,23 +61,23 @@ export function useMouseTracker() {
5261 setMousePosition ( null ) ;
5362 } ;
5463
55- const handleMove = ( event : MouseEvent | TouchEvent ) => {
56- const target = 'targetTouches' in event ? event . targetTouches [ 0 ] : event ;
64+ const handleMove = ( event : PointerEvent ) => {
5765 setMousePosition ( {
58- x : target . clientX ,
59- y : target . clientY ,
66+ x : event . clientX ,
67+ y : event . clientY ,
68+ height : event . height ,
69+ pointerType : event . pointerType as MousePosition [ 'pointerType' ] ,
6070 } ) ;
6171 } ;
6272
63- element . addEventListener ( 'mouseout ' , handleOut ) ;
64- element . addEventListener ( 'mousemove ' , handleMove ) ;
65- element . addEventListener ( 'touchend ' , handleOut ) ;
66- element . addEventListener ( 'touchmove' , handleMove ) ;
73+ element . addEventListener ( 'pointerdown ' , handleMove ) ;
74+ element . addEventListener ( 'pointermove ' , handleMove ) ;
75+ element . addEventListener ( 'pointerup ' , handleOut ) ;
76+
6777 return ( ) => {
68- element . removeEventListener ( 'mouseout' , handleOut ) ;
69- element . removeEventListener ( 'mousemove' , handleMove ) ;
70- element . addEventListener ( 'touchend' , handleOut ) ;
71- element . addEventListener ( 'touchmove' , handleMove ) ;
78+ element . removeEventListener ( 'pointerdown' , handleMove ) ;
79+ element . removeEventListener ( 'pointermove' , handleMove ) ;
80+ element . removeEventListener ( 'pointerup' , handleOut ) ;
7281 } ;
7382 } , [ svgRef ] ) ;
7483
0 commit comments