@@ -69,6 +69,10 @@ function PrimaryVoronoi<TDatum>({
6969
7070 const stackedVoronoi = secondaryAxes . length === 1 && secondaryAxes [ 0 ] . stacked
7171
72+ const useBarPx = secondaryAxes . every (
73+ d => d . elementType === 'bar' && ! d . stacked
74+ )
75+
7276 return React . useMemo ( ( ) => {
7377 let preColumns = Array . from ( datumsByInteractionGroup . entries ( ) )
7478 . map ( ( [ _ , datums ] ) => datums )
@@ -86,8 +90,8 @@ function PrimaryVoronoi<TDatum>({
8690 const aAxis = secondaryAxes . find ( d => d . id === a [ 0 ] . secondaryAxisId ) !
8791 const bAxis = secondaryAxes . find ( d => d . id === b [ 0 ] . secondaryAxisId ) !
8892
89- const aPx = getPrimary ( a [ 0 ] , primaryAxis , aAxis )
90- const bPx = getPrimary ( b [ 0 ] , primaryAxis , bAxis )
93+ const aPx = getPrimary ( a [ 0 ] , primaryAxis , aAxis , useBarPx )
94+ const bPx = getPrimary ( b [ 0 ] , primaryAxis , bAxis , useBarPx )
9195
9296 return aPx - bPx
9397 } )
@@ -105,7 +109,7 @@ function PrimaryVoronoi<TDatum>({
105109 const secondaryAxis = secondaryAxes . find (
106110 d => d . id === datum . secondaryAxisId
107111 ) !
108- const primaryPx = getPrimary ( datum , primaryAxis , secondaryAxis )
112+ const primaryPx = getPrimary ( datum , primaryAxis , secondaryAxis , useBarPx )
109113
110114 let range = primaryAxis ?. scale . range ( ) ?? [ 0 , 0 ]
111115
@@ -115,15 +119,15 @@ function PrimaryVoronoi<TDatum>({
115119 const secondaryAxis = secondaryAxes . find (
116120 d => d . id === prev [ 0 ] . secondaryAxisId
117121 ) !
118- const prevPx = getPrimary ( prev [ 0 ] , primaryAxis , secondaryAxis )
122+ const prevPx = getPrimary ( prev [ 0 ] , primaryAxis , secondaryAxis , useBarPx )
119123 primaryStart = primaryPx - ( primaryPx - prevPx ) / 2
120124 }
121125
122126 if ( next ) {
123127 const secondaryAxis = secondaryAxes . find (
124128 d => d . id === next [ 0 ] . secondaryAxisId
125129 ) !
126- const nextPx = getPrimary ( next [ 0 ] , primaryAxis , secondaryAxis )
130+ const nextPx = getPrimary ( next [ 0 ] , primaryAxis , secondaryAxis , useBarPx )
127131 primaryEnd = primaryPx + ( nextPx - primaryPx ) / 2
128132 }
129133
@@ -283,10 +287,11 @@ function PrimaryVoronoi<TDatum>({
283287 )
284288 } , [
285289 datumsByInteractionGroup ,
290+ primaryAxis ,
286291 gridDimensions . left ,
287292 gridDimensions . top ,
288293 secondaryAxes ,
289- primaryAxis ,
294+ useBarPx ,
290295 stackedVoronoi ,
291296 handleFocus ,
292297 getOptions ,
@@ -313,6 +318,10 @@ function SingleVoronoi<TDatum>({
313318
314319 const voronoiData : { x : number ; y : number ; datum : Datum < TDatum > } [ ] = [ ]
315320
321+ const useBarPx = secondaryAxes . every (
322+ d => d . elementType === 'bar' && ! d . stacked
323+ )
324+
316325 series . forEach ( serie => {
317326 serie . datums
318327 . filter ( datum => {
@@ -329,8 +338,8 @@ function SingleVoronoi<TDatum>({
329338 const secondaryAxis = secondaryAxes . find (
330339 d => d . id === datum . secondaryAxisId
331340 )
332- const x = getX ( datum , primaryAxis , secondaryAxis ! )
333- const y = getY ( datum , primaryAxis , secondaryAxis ! )
341+ const x = getX ( datum , primaryAxis , secondaryAxis ! , useBarPx )
342+ const y = getY ( datum , primaryAxis , secondaryAxis ! , useBarPx )
334343
335344 if (
336345 typeof x !== 'number' ||
@@ -403,31 +412,34 @@ function SingleVoronoi<TDatum>({
403412function getX < TDatum > (
404413 datum : Datum < TDatum > ,
405414 primaryAxis : Axis < TDatum > ,
406- secondaryAxis : Axis < TDatum >
415+ secondaryAxis : Axis < TDatum > ,
416+ useBarPx : boolean
407417) : number {
408418 return primaryAxis . isVertical
409419 ? getSecondary ( datum , secondaryAxis )
410- : getPrimary ( datum , primaryAxis , secondaryAxis )
420+ : getPrimary ( datum , primaryAxis , secondaryAxis , useBarPx )
411421}
412422
413423function getY < TDatum > (
414424 datum : Datum < TDatum > ,
415425 primaryAxis : Axis < TDatum > ,
416- secondaryAxis : Axis < TDatum >
426+ secondaryAxis : Axis < TDatum > ,
427+ useBarPx : boolean
417428) : number {
418429 return primaryAxis . isVertical
419- ? getPrimary ( datum , primaryAxis , secondaryAxis )
430+ ? getPrimary ( datum , primaryAxis , secondaryAxis , useBarPx )
420431 : getSecondary ( datum , secondaryAxis )
421432}
422433
423434function getPrimary < TDatum > (
424435 datum : Datum < TDatum > ,
425436 primaryAxis : Axis < TDatum > ,
426- secondaryAxis : Axis < TDatum >
437+ secondaryAxis : Axis < TDatum > ,
438+ useBarPx : boolean
427439) : number {
428440 let primary = primaryAxis . scale ( datum . primaryValue ) ?? NaN
429441
430- if ( secondaryAxis . elementType === 'bar' ) {
442+ if ( useBarPx && secondaryAxis . elementType === 'bar' ) {
431443 if ( ! secondaryAxis . stacked ) {
432444 primary += primaryAxis . seriesBandScale ! ( datum . seriesIndex ) ?? NaN
433445 primary += getPrimaryLength ( datum , primaryAxis , secondaryAxis ) / 2
0 commit comments