@@ -27,29 +27,21 @@ export interface HoverModeEventHandlers<E extends HTMLElement> {
27
27
* If this function calls `event.stopPropagation()`, the hover mode behavior
28
28
* will be disabled.
29
29
*/
30
- onMouseEnter ?: MouseEventHandler < E > ;
30
+ onClick ?: MouseEventHandler < E > ;
31
31
32
32
/**
33
33
* An optional event handler to merge with the hover mode visibility hander.
34
34
* If this function calls `event.stopPropagation()`, the hover mode behavior
35
35
* will be disabled.
36
36
*/
37
- onMouseLeave ?: MouseEventHandler < E > ;
38
- }
37
+ onMouseEnter ?: MouseEventHandler < E > ;
39
38
40
- /**
41
- * Event handlers that should be used when the {@link HoverModeOptions.sticky}
42
- * is enabled to temporarily disable the mouse leave behavior.
43
- *
44
- * @remarks \@since 2.8.0
45
- */
46
- export interface StickyHoverModeEventHandlers < E extends HTMLElement >
47
- extends HoverModeEventHandlers < E > {
48
39
/**
49
- * An optional event handler to merge with the "sticky" mode's `onClick`
50
- * behavior.
40
+ * An optional event handler to merge with the hover mode visibility hander.
41
+ * If this function calls `event.stopPropagation()`, the hover mode behavior
42
+ * will be disabled.
51
43
*/
52
- onClick ?: MouseEventHandler < E > ;
44
+ onMouseLeave ?: MouseEventHandler < E > ;
53
45
}
54
46
55
47
/** @remarks \@since 2.8.0 */
@@ -83,7 +75,7 @@ export interface HoverModeOnlyOptions<E extends HTMLElement>
83
75
/** @remarks \@since 2.8.0 */
84
76
export interface HoverModeOptions < E extends HTMLElement >
85
77
extends HoverModeOnlyOptions < E > ,
86
- StickyHoverModeEventHandlers < E > {
78
+ HoverModeEventHandlers < E > {
87
79
/**
88
80
* Boolean if the hover mode should also provide a "sticky" mode which allows
89
81
* the exit behavior to be disabled if the element is clicked.
@@ -124,7 +116,7 @@ export interface HoverModeReturnValue<E extends HTMLElement>
124
116
stuck ?: boolean ;
125
117
126
118
/** {@inheritDoc StickyHoverModeEventHandlers } */
127
- stickyHandlers ?: Required < StickyHoverModeEventHandlers < E > > ;
119
+ stickyHandlers ?: Required < HoverModeEventHandlers < E > > ;
128
120
}
129
121
130
122
/**
@@ -225,7 +217,7 @@ export function useHoverMode<E extends HTMLElement>(
225
217
options : HoverModeOptions < E > & { sticky : true }
226
218
) : HoverModeReturnValue < E > & {
227
219
stuck : boolean ;
228
- stickyHandlers : Required < StickyHoverModeEventHandlers < E > > ;
220
+ stickyHandlers : Required < HoverModeEventHandlers < E > > ;
229
221
} ;
230
222
export function useHoverMode < E extends HTMLElement > ( {
231
223
disabled = false ,
@@ -321,7 +313,19 @@ export function useHoverMode<E extends HTMLElement>({
321
313
const onClick = useCallback (
322
314
( event : MouseEvent < E > ) => {
323
315
propOnClick ?.( event ) ;
324
- if ( disabled || event . isPropagationStopped ( ) ) {
316
+ if ( event . isPropagationStopped ( ) || disabled ) {
317
+ return ;
318
+ }
319
+
320
+ startDisableTimer ( ) ;
321
+ } ,
322
+ [ disabled , propOnClick , startDisableTimer ]
323
+ ) ;
324
+
325
+ const onStickyClick = useCallback (
326
+ ( event : MouseEvent < E > ) => {
327
+ propOnClick ?.( event ) ;
328
+ if ( event . isPropagationStopped ( ) || disabled ) {
325
329
return ;
326
330
}
327
331
@@ -338,13 +342,17 @@ export function useHoverMode<E extends HTMLElement>({
338
342
) ;
339
343
340
344
const handlers : Required < HoverModeEventHandlers < E > > = {
345
+ onClick,
341
346
onMouseEnter,
342
347
onMouseLeave,
343
348
} ;
344
349
345
- let stickyHandlers : Required < StickyHoverModeEventHandlers < E > > | undefined ;
350
+ let stickyHandlers : Required < HoverModeEventHandlers < E > > | undefined ;
346
351
if ( sticky ) {
347
- stickyHandlers = { ...handlers , onClick } ;
352
+ stickyHandlers = {
353
+ ...handlers ,
354
+ onClick : onStickyClick ,
355
+ } ;
348
356
}
349
357
350
358
return {
0 commit comments