@@ -68,126 +68,130 @@ const Wrapper = styled.div`
6868 white-space: nowrap;
6969` ;
7070
71- const Tooltip = forwardRef < HTMLSpanElement , TooltipProps > ( function Tooltip (
72- {
73- className,
74- children,
75- disableFocusListener = false ,
76- disableMouseListener = false ,
77- enterDelay = 1000 ,
78- leaveDelay = 0 ,
79- onBlur,
80- onClose,
81- onFocus,
82- onMouseEnter,
83- onMouseLeave,
84- onOpen,
85- style,
86- text,
87- position = 'top' ,
88- ...otherProps
89- } ,
90- ref
91- ) {
92- const [ show , setShow ] = useState ( false ) ;
93- const [ openTimer , setOpenTimer ] = useState < number > ( ) ;
94- const [ closeTimer , setCloseTimer ] = useState < number > ( ) ;
95-
96- const isUsingFocus = ! disableFocusListener ;
97- const isUsingMouse = ! disableMouseListener ;
98-
99- const handleOpen = (
100- event : React . FocusEvent < HTMLDivElement > | React . MouseEvent < HTMLDivElement >
101- ) => {
102- window . clearTimeout ( openTimer ) ;
103- window . clearTimeout ( closeTimer ) ;
104-
105- const timer = window . setTimeout ( ( ) => {
106- setShow ( true ) ;
107-
108- onOpen ?.( event ) ;
109- } , enterDelay ) ;
110-
111- setOpenTimer ( timer ) ;
112- } ;
113-
114- const handleEnter = (
115- event : React . FocusEvent < HTMLDivElement > | React . MouseEvent < HTMLDivElement >
116- ) => {
117- event . persist ( ) ;
118-
119- if ( isReactFocusEvent ( event ) ) {
120- onFocus ?.( event ) ;
121- } else if ( isReactMouseEvent ( event ) ) {
122- onMouseEnter ?.( event ) ;
123- }
124-
125- handleOpen ( event ) ;
126- } ;
127-
128- const handleClose = (
129- event : React . FocusEvent < HTMLDivElement > | React . MouseEvent < HTMLDivElement >
130- ) => {
131- window . clearTimeout ( openTimer ) ;
132- window . clearTimeout ( closeTimer ) ;
133-
134- const timer = window . setTimeout ( ( ) => {
135- setShow ( false ) ;
136-
137- onClose ?.( event ) ;
138- } , leaveDelay ) ;
139-
140- setCloseTimer ( timer ) ;
141- } ;
142-
143- const handleLeave = (
144- event : React . FocusEvent < HTMLDivElement > | React . MouseEvent < HTMLDivElement >
71+ const Tooltip = forwardRef < HTMLSpanElement , TooltipProps > (
72+ (
73+ {
74+ className,
75+ children,
76+ disableFocusListener = false ,
77+ disableMouseListener = false ,
78+ enterDelay = 1000 ,
79+ leaveDelay = 0 ,
80+ onBlur,
81+ onClose,
82+ onFocus,
83+ onMouseEnter,
84+ onMouseLeave,
85+ onOpen,
86+ style,
87+ text,
88+ position = 'top' ,
89+ ...otherProps
90+ } ,
91+ ref
14592 ) => {
146- event . persist ( ) ;
147-
148- if ( isReactFocusEvent ( event ) ) {
149- onBlur ?.( event ) ;
150- } else if ( isReactMouseEvent ( event ) ) {
151- onMouseLeave ?.( event ) ;
152- }
153-
154- handleClose ( event ) ;
155- } ;
156-
157- // set callbacks for onBlur and onFocus, unless disableFocusListener is true
158- const blurCb = isUsingFocus ? handleLeave : undefined ;
159- const focusCb = isUsingFocus ? handleEnter : undefined ;
160-
161- // set callbacks for onMouseEnter and onMouseLeave, unless disableMouseListener is true
162- const mouseEnterCb = isUsingMouse ? handleEnter : undefined ;
163- const mouseLeaveCb = isUsingMouse ? handleLeave : undefined ;
164-
165- // set the wrapper's tabIndex for focus events, unless disableFocusListener is true
166- const tabIndex = isUsingFocus ? 0 : undefined ;
167-
168- return (
169- < Wrapper
170- data-testid = 'tooltip-wrapper'
171- onBlur = { blurCb }
172- onFocus = { focusCb }
173- onMouseEnter = { mouseEnterCb }
174- onMouseLeave = { mouseLeaveCb }
175- tabIndex = { tabIndex }
176- >
177- < Tip
178- className = { className }
179- data-testid = 'tooltip'
180- position = { position }
181- ref = { ref }
182- show = { show }
183- style = { style }
184- { ...otherProps }
93+ const [ show , setShow ] = useState ( false ) ;
94+ const [ openTimer , setOpenTimer ] = useState < number > ( ) ;
95+ const [ closeTimer , setCloseTimer ] = useState < number > ( ) ;
96+
97+ const isUsingFocus = ! disableFocusListener ;
98+ const isUsingMouse = ! disableMouseListener ;
99+
100+ const handleOpen = (
101+ event : React . FocusEvent < HTMLDivElement > | React . MouseEvent < HTMLDivElement >
102+ ) => {
103+ window . clearTimeout ( openTimer ) ;
104+ window . clearTimeout ( closeTimer ) ;
105+
106+ const timer = window . setTimeout ( ( ) => {
107+ setShow ( true ) ;
108+
109+ onOpen ?.( event ) ;
110+ } , enterDelay ) ;
111+
112+ setOpenTimer ( timer ) ;
113+ } ;
114+
115+ const handleEnter = (
116+ event : React . FocusEvent < HTMLDivElement > | React . MouseEvent < HTMLDivElement >
117+ ) => {
118+ event . persist ( ) ;
119+
120+ if ( isReactFocusEvent ( event ) ) {
121+ onFocus ?.( event ) ;
122+ } else if ( isReactMouseEvent ( event ) ) {
123+ onMouseEnter ?.( event ) ;
124+ }
125+
126+ handleOpen ( event ) ;
127+ } ;
128+
129+ const handleClose = (
130+ event : React . FocusEvent < HTMLDivElement > | React . MouseEvent < HTMLDivElement >
131+ ) => {
132+ window . clearTimeout ( openTimer ) ;
133+ window . clearTimeout ( closeTimer ) ;
134+
135+ const timer = window . setTimeout ( ( ) => {
136+ setShow ( false ) ;
137+
138+ onClose ?.( event ) ;
139+ } , leaveDelay ) ;
140+
141+ setCloseTimer ( timer ) ;
142+ } ;
143+
144+ const handleLeave = (
145+ event : React . FocusEvent < HTMLDivElement > | React . MouseEvent < HTMLDivElement >
146+ ) => {
147+ event . persist ( ) ;
148+
149+ if ( isReactFocusEvent ( event ) ) {
150+ onBlur ?.( event ) ;
151+ } else if ( isReactMouseEvent ( event ) ) {
152+ onMouseLeave ?.( event ) ;
153+ }
154+
155+ handleClose ( event ) ;
156+ } ;
157+
158+ // set callbacks for onBlur and onFocus, unless disableFocusListener is true
159+ const blurCb = isUsingFocus ? handleLeave : undefined ;
160+ const focusCb = isUsingFocus ? handleEnter : undefined ;
161+
162+ // set callbacks for onMouseEnter and onMouseLeave, unless disableMouseListener is true
163+ const mouseEnterCb = isUsingMouse ? handleEnter : undefined ;
164+ const mouseLeaveCb = isUsingMouse ? handleLeave : undefined ;
165+
166+ // set the wrapper's tabIndex for focus events, unless disableFocusListener is true
167+ const tabIndex = isUsingFocus ? 0 : undefined ;
168+
169+ return (
170+ < Wrapper
171+ data-testid = 'tooltip-wrapper'
172+ onBlur = { blurCb }
173+ onFocus = { focusCb }
174+ onMouseEnter = { mouseEnterCb }
175+ onMouseLeave = { mouseLeaveCb }
176+ tabIndex = { tabIndex }
185177 >
186- { text }
187- </ Tip >
188- { children }
189- </ Wrapper >
190- ) ;
191- } ) ;
178+ < Tip
179+ className = { className }
180+ data-testid = 'tooltip'
181+ position = { position }
182+ ref = { ref }
183+ show = { show }
184+ style = { style }
185+ { ...otherProps }
186+ >
187+ { text }
188+ </ Tip >
189+ { children }
190+ </ Wrapper >
191+ ) ;
192+ }
193+ ) ;
194+
195+ Tooltip . displayName = 'Tooltip' ;
192196
193197export { Tooltip , TooltipProps } ;
0 commit comments