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