1 | import {useState as $AWxnT$useState, useRef as $AWxnT$useRef, useEffect as $AWxnT$useEffect, useMemo as $AWxnT$useMemo} from "react";
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | let $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = false;
|
22 | let $6179b936705e76d3$var$hoverCount = 0;
|
23 | function $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents() {
|
24 | $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = true;
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | setTimeout(()=>{
|
30 | $6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents = false;
|
31 | }, 50);
|
32 | }
|
33 | function $6179b936705e76d3$var$handleGlobalPointerEvent(e) {
|
34 | if (e.pointerType === 'touch') $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents();
|
35 | }
|
36 | function $6179b936705e76d3$var$setupGlobalTouchEvents() {
|
37 | if (typeof document === 'undefined') return;
|
38 | if (typeof PointerEvent !== 'undefined') document.addEventListener('pointerup', $6179b936705e76d3$var$handleGlobalPointerEvent);
|
39 | else document.addEventListener('touchend', $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents);
|
40 | $6179b936705e76d3$var$hoverCount++;
|
41 | return ()=>{
|
42 | $6179b936705e76d3$var$hoverCount--;
|
43 | if ($6179b936705e76d3$var$hoverCount > 0) return;
|
44 | if (typeof PointerEvent !== 'undefined') document.removeEventListener('pointerup', $6179b936705e76d3$var$handleGlobalPointerEvent);
|
45 | else document.removeEventListener('touchend', $6179b936705e76d3$var$setGlobalIgnoreEmulatedMouseEvents);
|
46 | };
|
47 | }
|
48 | function $6179b936705e76d3$export$ae780daf29e6d456(props) {
|
49 | let { onHoverStart: onHoverStart, onHoverChange: onHoverChange, onHoverEnd: onHoverEnd, isDisabled: isDisabled } = props;
|
50 | let [isHovered, setHovered] = (0, $AWxnT$useState)(false);
|
51 | let state = (0, $AWxnT$useRef)({
|
52 | isHovered: false,
|
53 | ignoreEmulatedMouseEvents: false,
|
54 | pointerType: '',
|
55 | target: null
|
56 | }).current;
|
57 | (0, $AWxnT$useEffect)($6179b936705e76d3$var$setupGlobalTouchEvents, []);
|
58 | let { hoverProps: hoverProps, triggerHoverEnd: triggerHoverEnd } = (0, $AWxnT$useMemo)(()=>{
|
59 | let triggerHoverStart = (event, pointerType)=>{
|
60 | state.pointerType = pointerType;
|
61 | if (isDisabled || pointerType === 'touch' || state.isHovered || !event.currentTarget.contains(event.target)) return;
|
62 | state.isHovered = true;
|
63 | let target = event.currentTarget;
|
64 | state.target = target;
|
65 | if (onHoverStart) onHoverStart({
|
66 | type: 'hoverstart',
|
67 | target: target,
|
68 | pointerType: pointerType
|
69 | });
|
70 | if (onHoverChange) onHoverChange(true);
|
71 | setHovered(true);
|
72 | };
|
73 | let triggerHoverEnd = (event, pointerType)=>{
|
74 | state.pointerType = '';
|
75 | state.target = null;
|
76 | if (pointerType === 'touch' || !state.isHovered) return;
|
77 | state.isHovered = false;
|
78 | let target = event.currentTarget;
|
79 | if (onHoverEnd) onHoverEnd({
|
80 | type: 'hoverend',
|
81 | target: target,
|
82 | pointerType: pointerType
|
83 | });
|
84 | if (onHoverChange) onHoverChange(false);
|
85 | setHovered(false);
|
86 | };
|
87 | let hoverProps = {};
|
88 | if (typeof PointerEvent !== 'undefined') {
|
89 | hoverProps.onPointerEnter = (e)=>{
|
90 | if ($6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents && e.pointerType === 'mouse') return;
|
91 | triggerHoverStart(e, e.pointerType);
|
92 | };
|
93 | hoverProps.onPointerLeave = (e)=>{
|
94 | if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, e.pointerType);
|
95 | };
|
96 | } else {
|
97 | hoverProps.onTouchStart = ()=>{
|
98 | state.ignoreEmulatedMouseEvents = true;
|
99 | };
|
100 | hoverProps.onMouseEnter = (e)=>{
|
101 | if (!state.ignoreEmulatedMouseEvents && !$6179b936705e76d3$var$globalIgnoreEmulatedMouseEvents) triggerHoverStart(e, 'mouse');
|
102 | state.ignoreEmulatedMouseEvents = false;
|
103 | };
|
104 | hoverProps.onMouseLeave = (e)=>{
|
105 | if (!isDisabled && e.currentTarget.contains(e.target)) triggerHoverEnd(e, 'mouse');
|
106 | };
|
107 | }
|
108 | return {
|
109 | hoverProps: hoverProps,
|
110 | triggerHoverEnd: triggerHoverEnd
|
111 | };
|
112 | }, [
|
113 | onHoverStart,
|
114 | onHoverChange,
|
115 | onHoverEnd,
|
116 | isDisabled,
|
117 | state
|
118 | ]);
|
119 | (0, $AWxnT$useEffect)(()=>{
|
120 |
|
121 |
|
122 | if (isDisabled) triggerHoverEnd({
|
123 | currentTarget: state.target
|
124 | }, state.pointerType);
|
125 |
|
126 | }, [
|
127 | isDisabled
|
128 | ]);
|
129 | return {
|
130 | hoverProps: hoverProps,
|
131 | isHovered: isHovered
|
132 | };
|
133 | }
|
134 |
|
135 |
|
136 | export {$6179b936705e76d3$export$ae780daf29e6d456 as useHover};
|
137 |
|