@@ -14,32 +14,35 @@ type CoordProps = {
1414 offset : number ;
1515} ;
1616
17- type Position = 'top' | 'bottom' | 'left' | 'right' ;
17+ export type Position = 'top' | 'bottom' | 'left' | 'right' ;
1818
1919type PositionMap = Record < Position , ( props : CoordProps ) => Coords > ;
2020
2121const getCenterCoord = ( primary : number , secondary : number ) => ( primary - secondary ) / 2 ;
2222
23- const YLeft = ( primary : DOMRect , secondary : DOMRect ) => primary . left + getCenterCoord ( primary . width , secondary . width ) ;
24- const XTop = ( primary : DOMRect , secondary : DOMRect ) => primary . top + getCenterCoord ( primary . height , secondary . height ) ;
23+ const YLeft = ( primary : DOMRect , secondary : DOMRect ) =>
24+ primary . left + window . scrollX + getCenterCoord ( primary . width , secondary . width ) ;
25+ const XTop = ( primary : DOMRect , secondary : DOMRect ) =>
26+ primary . top + window . scrollY + getCenterCoord ( primary . height , secondary . height ) ;
2527
2628const positionMap : PositionMap = {
2729 top : ( { targetRect, tooltipRect, offset } ) => ( {
28- top : targetRect . top - tooltipRect . height - offset ,
29- left : YLeft ( targetRect , tooltipRect ) ,
30+ top : targetRect . top + window . scrollY - tooltipRect . height - offset ,
31+ left : targetRect . left + window . scrollX + getCenterCoord ( targetRect . width , tooltipRect . width ) ,
3032 } ) ,
33+
3134 bottom : ( { targetRect, tooltipRect, offset } ) => ( {
32- top : targetRect . bottom + offset ,
35+ top : targetRect . bottom + window . scrollY + offset ,
3336 left : YLeft ( targetRect , tooltipRect ) ,
3437 } ) ,
3538 left : ( { targetRect, tooltipRect, offset } ) => ( {
3639 top : XTop ( targetRect , tooltipRect ) ,
37- left : targetRect . left - ( tooltipRect . width + offset ) ,
40+ left : targetRect . left + window . scrollX - tooltipRect . width - offset ,
3841 } ) ,
3942
4043 right : ( { targetRect, tooltipRect, offset } ) => ( {
4144 top : XTop ( targetRect , tooltipRect ) ,
42- left : targetRect . left + ( targetRect . width + offset ) ,
45+ left : targetRect . left + window . scrollX + targetRect . width + offset ,
4346 } ) ,
4447} ;
4548
@@ -59,7 +62,7 @@ export const Tooltip = ({ children, content, duration = 1000, position = 'bottom
5962 const timerRef = useRef ( null ) ;
6063 const mountTimerRef = useRef ( null ) ;
6164
62- const mountTimer = 10 ;
65+ const mountTimer = 50 ;
6366
6467 const clearTimeouts = ( ) => {
6568 timerRef . current && clearTimeout ( timerRef . current ) ;
@@ -83,12 +86,11 @@ export const Tooltip = ({ children, content, duration = 1000, position = 'bottom
8386
8487 if ( ! target || ! tooltip ) return ;
8588
86- tooltip . style . setProperty ( '--tooltip-animation-ms' , `${ duration + mountTimer } ms` ) ;
87-
8889 if ( mounted ) {
90+ tooltipRef . current ?. style . setProperty ( '--tooltip-animation-ms' , `${ duration + mountTimer } ms` ) ;
8991 const targetRect = target . getBoundingClientRect ( ) ;
9092 const tooltipRect = tooltip . getBoundingClientRect ( ) ;
91- const calcPosition = positionMap [ position ] ;
93+ const calcPosition = positionMap [ position ] ?? positionMap [ 'bottom' ] ;
9294 setCoords ( calcPosition ( { targetRect, tooltipRect, offset : 5 } ) ) ;
9395 }
9496
0 commit comments