@hanzogui/floating 3.0.6 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/Floating.cjs +7 -5
- package/dist/cjs/Floating.native.js +18 -16
- package/dist/cjs/Floating.native.js.map +1 -1
- package/dist/cjs/index.cjs +28 -26
- package/dist/cjs/index.native.js +28 -26
- package/dist/cjs/index.native.js.map +1 -1
- package/dist/cjs/interactions/PopupTriggerMap.cjs +21 -12
- package/dist/cjs/interactions/PopupTriggerMap.native.js +51 -27
- package/dist/cjs/interactions/PopupTriggerMap.native.js.map +1 -1
- package/dist/cjs/interactions/createFloatingEvents.cjs +21 -12
- package/dist/cjs/interactions/createFloatingEvents.native.js +22 -13
- package/dist/cjs/interactions/createFloatingEvents.native.js.map +1 -1
- package/dist/cjs/interactions/safePolygon.cjs +213 -131
- package/dist/cjs/interactions/safePolygon.native.js +182 -103
- package/dist/cjs/interactions/safePolygon.native.js.map +1 -1
- package/dist/cjs/interactions/types.cjs +7 -5
- package/dist/cjs/interactions/types.native.js +7 -5
- package/dist/cjs/interactions/types.native.js.map +1 -1
- package/dist/cjs/interactions/useClick.cjs +91 -49
- package/dist/cjs/interactions/useClick.native.js +96 -54
- package/dist/cjs/interactions/useClick.native.js.map +1 -1
- package/dist/cjs/interactions/useDelayGroup.cjs +63 -44
- package/dist/cjs/interactions/useDelayGroup.native.js +74 -58
- package/dist/cjs/interactions/useDelayGroup.native.js.map +1 -1
- package/dist/cjs/interactions/useFocus.cjs +73 -44
- package/dist/cjs/interactions/useFocus.native.js +75 -49
- package/dist/cjs/interactions/useFocus.native.js.map +1 -1
- package/dist/cjs/interactions/useHover.cjs +242 -109
- package/dist/cjs/interactions/useHover.native.js +268 -143
- package/dist/cjs/interactions/useHover.native.js.map +1 -1
- package/dist/cjs/interactions/useInnerOffset.cjs +88 -64
- package/dist/cjs/interactions/useInnerOffset.native.js +88 -65
- package/dist/cjs/interactions/useInnerOffset.native.js.map +1 -1
- package/dist/cjs/interactions/useInteractions.cjs +60 -31
- package/dist/cjs/interactions/useInteractions.native.js +133 -81
- package/dist/cjs/interactions/useInteractions.native.js.map +1 -1
- package/dist/cjs/interactions/useListNavigation.cjs +346 -181
- package/dist/cjs/interactions/useListNavigation.native.js +350 -214
- package/dist/cjs/interactions/useListNavigation.native.js.map +1 -1
- package/dist/cjs/interactions/useRole.cjs +83 -73
- package/dist/cjs/interactions/useRole.native.js +107 -99
- package/dist/cjs/interactions/useRole.native.js.map +1 -1
- package/dist/cjs/interactions/useTypeahead.cjs +115 -65
- package/dist/cjs/interactions/useTypeahead.native.js +122 -77
- package/dist/cjs/interactions/useTypeahead.native.js.map +1 -1
- package/dist/cjs/interactions/utils.cjs +68 -38
- package/dist/cjs/interactions/utils.native.js +93 -54
- package/dist/cjs/interactions/utils.native.js.map +1 -1
- package/dist/cjs/middleware/inner.cjs +80 -67
- package/dist/cjs/middleware/inner.native.js +87 -76
- package/dist/cjs/middleware/inner.native.js.map +1 -1
- package/dist/cjs/useFloating.cjs +48 -45
- package/dist/cjs/useFloating.native.js +50 -48
- package/dist/cjs/useFloating.native.js.map +1 -1
- package/dist/esm/Floating.native.js +5 -5
- package/dist/esm/Floating.native.js.map +1 -1
- package/dist/esm/interactions/PopupTriggerMap.mjs +9 -2
- package/dist/esm/interactions/PopupTriggerMap.mjs.map +1 -1
- package/dist/esm/interactions/PopupTriggerMap.native.js +39 -17
- package/dist/esm/interactions/PopupTriggerMap.native.js.map +1 -1
- package/dist/esm/interactions/createFloatingEvents.mjs +9 -2
- package/dist/esm/interactions/createFloatingEvents.mjs.map +1 -1
- package/dist/esm/interactions/createFloatingEvents.native.js +10 -3
- package/dist/esm/interactions/createFloatingEvents.native.js.map +1 -1
- package/dist/esm/interactions/safePolygon.mjs +201 -121
- package/dist/esm/interactions/safePolygon.mjs.map +1 -1
- package/dist/esm/interactions/safePolygon.native.js +170 -93
- package/dist/esm/interactions/safePolygon.native.js.map +1 -1
- package/dist/esm/interactions/useClick.mjs +79 -39
- package/dist/esm/interactions/useClick.mjs.map +1 -1
- package/dist/esm/interactions/useClick.native.js +82 -42
- package/dist/esm/interactions/useClick.native.js.map +1 -1
- package/dist/esm/interactions/useDelayGroup.mjs +39 -22
- package/dist/esm/interactions/useDelayGroup.mjs.map +1 -1
- package/dist/esm/interactions/useDelayGroup.native.js +42 -28
- package/dist/esm/interactions/useDelayGroup.native.js.map +1 -1
- package/dist/esm/interactions/useFocus.mjs +59 -32
- package/dist/esm/interactions/useFocus.mjs.map +1 -1
- package/dist/esm/interactions/useFocus.native.js +61 -37
- package/dist/esm/interactions/useFocus.native.js.map +1 -1
- package/dist/esm/interactions/useHover.mjs +215 -84
- package/dist/esm/interactions/useHover.mjs.map +1 -1
- package/dist/esm/interactions/useHover.native.js +240 -117
- package/dist/esm/interactions/useHover.native.js.map +1 -1
- package/dist/esm/interactions/useInnerOffset.mjs +61 -39
- package/dist/esm/interactions/useInnerOffset.mjs.map +1 -1
- package/dist/esm/interactions/useInnerOffset.native.js +61 -40
- package/dist/esm/interactions/useInnerOffset.native.js.map +1 -1
- package/dist/esm/interactions/useInteractions.mjs +48 -21
- package/dist/esm/interactions/useInteractions.mjs.map +1 -1
- package/dist/esm/interactions/useInteractions.native.js +121 -71
- package/dist/esm/interactions/useInteractions.native.js.map +1 -1
- package/dist/esm/interactions/useListNavigation.mjs +331 -168
- package/dist/esm/interactions/useListNavigation.mjs.map +1 -1
- package/dist/esm/interactions/useListNavigation.native.js +335 -201
- package/dist/esm/interactions/useListNavigation.native.js.map +1 -1
- package/dist/esm/interactions/useRole.mjs +59 -51
- package/dist/esm/interactions/useRole.mjs.map +1 -1
- package/dist/esm/interactions/useRole.native.js +82 -76
- package/dist/esm/interactions/useRole.native.js.map +1 -1
- package/dist/esm/interactions/useTypeahead.mjs +100 -52
- package/dist/esm/interactions/useTypeahead.mjs.map +1 -1
- package/dist/esm/interactions/useTypeahead.native.js +107 -64
- package/dist/esm/interactions/useTypeahead.native.js.map +1 -1
- package/dist/esm/interactions/utils.mjs +56 -28
- package/dist/esm/interactions/utils.mjs.map +1 -1
- package/dist/esm/interactions/utils.native.js +81 -44
- package/dist/esm/interactions/utils.native.js.map +1 -1
- package/dist/esm/middleware/inner.mjs +54 -43
- package/dist/esm/middleware/inner.mjs.map +1 -1
- package/dist/esm/middleware/inner.native.js +61 -52
- package/dist/esm/middleware/inner.native.js.map +1 -1
- package/dist/esm/useFloating.mjs +22 -21
- package/dist/esm/useFloating.mjs.map +1 -1
- package/dist/esm/useFloating.native.js +24 -24
- package/dist/esm/useFloating.native.js.map +1 -1
- package/package.json +1 -1
|
@@ -2,63 +2,71 @@ var __create = Object.create;
|
|
|
2
2
|
var __defProp = Object.defineProperty;
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
-
var __getProtoOf = Object.getPrototypeOf
|
|
6
|
-
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
7
|
var __export = (target, all) => {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
8
|
+
for (var name in all) __defProp(target, name, {
|
|
9
|
+
get: all[name],
|
|
10
|
+
enumerable: true
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
var __copyProps = (to, from, except, desc) => {
|
|
14
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
15
|
+
for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
|
|
15
16
|
get: () => from[key],
|
|
16
17
|
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
17
18
|
});
|
|
18
|
-
|
|
19
|
-
|
|
19
|
+
}
|
|
20
|
+
return to;
|
|
21
|
+
};
|
|
20
22
|
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
23
|
+
// If the importer is in node compatibility mode or this is not an ESM
|
|
24
|
+
// file that has been converted to a CommonJS file using a Babel-
|
|
25
|
+
// compatible transform (i.e. "__esModule" has not been set), then set
|
|
26
|
+
// "default" to the CommonJS "module.exports" for node compatibility.
|
|
27
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
28
|
+
value: mod,
|
|
29
|
+
enumerable: true
|
|
30
|
+
}) : target, mod));
|
|
31
|
+
var __toCommonJS = mod => __copyProps(__defProp({}, "__esModule", {
|
|
32
|
+
value: true
|
|
33
|
+
}), mod);
|
|
32
34
|
var useHover_exports = {};
|
|
33
35
|
__export(useHover_exports, {
|
|
34
36
|
getDelay: () => getDelay,
|
|
35
37
|
useHover: () => useHover
|
|
36
38
|
});
|
|
37
39
|
module.exports = __toCommonJS(useHover_exports);
|
|
38
|
-
var React = __toESM(require("react"), 1)
|
|
39
|
-
|
|
40
|
-
|
|
40
|
+
var React = __toESM(require("react"), 1);
|
|
41
|
+
var import_use_event = require("@hanzogui/use-event");
|
|
42
|
+
var import_utils = require("./utils.cjs");
|
|
41
43
|
const safePolygonIdentifier = "data-floating-ui-safe-polygon";
|
|
42
44
|
function getDelay(value, prop, pointerType) {
|
|
43
|
-
|
|
45
|
+
if (pointerType && !(0, import_utils.isMouseLikePointerType)(pointerType)) {
|
|
46
|
+
return 0;
|
|
47
|
+
}
|
|
48
|
+
if (typeof value === "number") {
|
|
49
|
+
return value;
|
|
50
|
+
}
|
|
51
|
+
return value?.[prop];
|
|
44
52
|
}
|
|
45
53
|
function useHover(context, props = {}) {
|
|
46
54
|
const {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
55
|
+
open,
|
|
56
|
+
onOpenChange,
|
|
57
|
+
dataRef,
|
|
58
|
+
events,
|
|
59
|
+
elements
|
|
60
|
+
} = context;
|
|
61
|
+
const {
|
|
62
|
+
enabled = true,
|
|
63
|
+
delay = 0,
|
|
64
|
+
handleClose = null,
|
|
65
|
+
mouseOnly = false,
|
|
66
|
+
restMs = 0,
|
|
67
|
+
move = true
|
|
68
|
+
} = props;
|
|
69
|
+
const handleCloseRef = React.useRef(handleClose);
|
|
62
70
|
handleCloseRef.current = handleClose;
|
|
63
71
|
const delayRef = React.useRef(delay);
|
|
64
72
|
delayRef.current = delay;
|
|
@@ -66,66 +74,103 @@ function useHover(context, props = {}) {
|
|
|
66
74
|
openRef.current = open;
|
|
67
75
|
const restMsRef = React.useRef(restMs);
|
|
68
76
|
restMsRef.current = restMs;
|
|
69
|
-
const stableOnOpenChange = (0, import_use_event.useEvent)(onOpenChange)
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
77
|
+
const stableOnOpenChange = (0, import_use_event.useEvent)(onOpenChange);
|
|
78
|
+
const pointerTypeRef = React.useRef(void 0);
|
|
79
|
+
const timeoutRef = React.useRef(-1);
|
|
80
|
+
const handlerRef = React.useRef(void 0);
|
|
81
|
+
const restTimeoutRef = React.useRef(-1);
|
|
82
|
+
const blockMouseMoveRef = React.useRef(true);
|
|
83
|
+
const performedPointerEventsMutationRef = React.useRef(false);
|
|
84
|
+
const unbindMouseMoveRef = React.useRef(() => {});
|
|
85
|
+
const restTimeoutPendingRef = React.useRef(false);
|
|
86
|
+
const isHoverOpen = (0, import_use_event.useEvent)(() => {
|
|
87
|
+
const type = dataRef.current.openEvent?.type;
|
|
88
|
+
return type?.includes("mouse") && type !== "mousedown";
|
|
89
|
+
});
|
|
82
90
|
React.useEffect(() => {
|
|
83
|
-
if (!enabled
|
|
91
|
+
if (!enabled) return;
|
|
92
|
+
if (!events) return;
|
|
84
93
|
function onOpenChange2({
|
|
85
94
|
open: open2
|
|
86
95
|
}) {
|
|
87
|
-
|
|
96
|
+
if (!open2) {
|
|
97
|
+
(0, import_utils.clearTimeoutIfSet)(timeoutRef);
|
|
98
|
+
(0, import_utils.clearTimeoutIfSet)(restTimeoutRef);
|
|
99
|
+
blockMouseMoveRef.current = true;
|
|
100
|
+
restTimeoutPendingRef.current = false;
|
|
101
|
+
}
|
|
88
102
|
}
|
|
89
|
-
|
|
103
|
+
events.on("openchange", onOpenChange2);
|
|
104
|
+
return () => {
|
|
90
105
|
events.off("openchange", onOpenChange2);
|
|
91
106
|
};
|
|
92
107
|
}, [enabled, events]);
|
|
93
|
-
const closeWithDelay = (0, import_use_event.useEvent)((event, runElseBranch =
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
108
|
+
const closeWithDelay = (0, import_use_event.useEvent)((event, runElseBranch = true, reason = "hover") => {
|
|
109
|
+
const closeDelay = getDelay(delayRef.current, "close", pointerTypeRef.current);
|
|
110
|
+
if (closeDelay && !handlerRef.current) {
|
|
111
|
+
(0, import_utils.clearTimeoutIfSet)(timeoutRef);
|
|
112
|
+
timeoutRef.current = window.setTimeout(() => stableOnOpenChange(false, event, reason), closeDelay);
|
|
113
|
+
} else if (runElseBranch) {
|
|
114
|
+
(0, import_utils.clearTimeoutIfSet)(timeoutRef);
|
|
115
|
+
stableOnOpenChange(false, event, reason);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
const cleanupMouseMoveHandler = (0, import_use_event.useEvent)(() => {
|
|
119
|
+
unbindMouseMoveRef.current();
|
|
120
|
+
handlerRef.current = void 0;
|
|
121
|
+
if (context.handleCloseActiveRef) {
|
|
122
|
+
context.handleCloseActiveRef.current = false;
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
const clearPointerEvents = (0, import_use_event.useEvent)(() => {
|
|
126
|
+
if (performedPointerEventsMutationRef.current) {
|
|
127
|
+
const body = (0, import_utils.getDocument)(elements.floating).body;
|
|
128
|
+
body.style.pointerEvents = "";
|
|
129
|
+
body.removeAttribute(safePolygonIdentifier);
|
|
130
|
+
performedPointerEventsMutationRef.current = false;
|
|
131
|
+
}
|
|
132
|
+
});
|
|
133
|
+
const isClickLikeOpenEvent = (0, import_use_event.useEvent)(() => {
|
|
134
|
+
return dataRef.current.openEvent ? ["click", "mousedown"].includes(dataRef.current.openEvent.type) : false;
|
|
135
|
+
});
|
|
107
136
|
React.useEffect(() => {
|
|
108
137
|
if (!enabled) return;
|
|
109
138
|
function onReferenceMouseEnter(event) {
|
|
110
|
-
|
|
139
|
+
(0, import_utils.clearTimeoutIfSet)(timeoutRef);
|
|
140
|
+
blockMouseMoveRef.current = false;
|
|
141
|
+
if (mouseOnly && !(0, import_utils.isMouseLikePointerType)(pointerTypeRef.current) || restMsRef.current > 0 && !getDelay(delayRef.current, "open")) {
|
|
142
|
+
return;
|
|
143
|
+
}
|
|
111
144
|
const openDelay = getDelay(delayRef.current, "open", pointerTypeRef.current);
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
145
|
+
if (openDelay) {
|
|
146
|
+
timeoutRef.current = window.setTimeout(() => {
|
|
147
|
+
if (!openRef.current) {
|
|
148
|
+
stableOnOpenChange(true, event, "hover");
|
|
149
|
+
}
|
|
150
|
+
}, openDelay);
|
|
151
|
+
} else if (!open) {
|
|
152
|
+
stableOnOpenChange(true, event, "hover");
|
|
153
|
+
}
|
|
115
154
|
}
|
|
116
155
|
function onReferenceMouseLeave(event) {
|
|
117
156
|
if (isClickLikeOpenEvent()) {
|
|
118
157
|
clearPointerEvents();
|
|
119
158
|
return;
|
|
120
159
|
}
|
|
121
|
-
if (context.triggerElements?.hasElement(event.relatedTarget))
|
|
160
|
+
if (context.triggerElements?.hasElement(event.relatedTarget)) {
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
122
163
|
unbindMouseMoveRef.current();
|
|
123
164
|
const doc = (0, import_utils.getDocument)(elements.floating);
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
165
|
+
(0, import_utils.clearTimeoutIfSet)(restTimeoutRef);
|
|
166
|
+
restTimeoutPendingRef.current = false;
|
|
167
|
+
if (handleCloseRef.current) {
|
|
168
|
+
if (!open) {
|
|
169
|
+
(0, import_utils.clearTimeoutIfSet)(timeoutRef);
|
|
170
|
+
}
|
|
171
|
+
const placement = dataRef.current.placement || "bottom";
|
|
172
|
+
const reference2 = elements.domReference;
|
|
173
|
+
const floating = elements.floating;
|
|
129
174
|
if (!reference2 || !floating) return;
|
|
130
175
|
handlerRef.current = handleCloseRef.current({
|
|
131
176
|
x: event.clientX,
|
|
@@ -137,23 +182,41 @@ function useHover(context, props = {}) {
|
|
|
137
182
|
domReference: reference2
|
|
138
183
|
},
|
|
139
184
|
onClose() {
|
|
140
|
-
|
|
185
|
+
if (context.handleCloseActiveRef) {
|
|
186
|
+
context.handleCloseActiveRef.current = false;
|
|
187
|
+
}
|
|
188
|
+
clearPointerEvents();
|
|
189
|
+
cleanupMouseMoveHandler();
|
|
190
|
+
if (!isClickLikeOpenEvent()) {
|
|
191
|
+
closeWithDelay(event, true, "safe-polygon");
|
|
192
|
+
}
|
|
141
193
|
}
|
|
142
|
-
})
|
|
194
|
+
});
|
|
195
|
+
if (context.handleCloseActiveRef) {
|
|
196
|
+
context.handleCloseActiveRef.current = true;
|
|
197
|
+
}
|
|
143
198
|
const handler = handlerRef.current;
|
|
144
|
-
doc.addEventListener("mousemove", handler)
|
|
199
|
+
doc.addEventListener("mousemove", handler);
|
|
200
|
+
unbindMouseMoveRef.current = () => {
|
|
145
201
|
doc.removeEventListener("mousemove", handler);
|
|
146
202
|
};
|
|
147
203
|
return;
|
|
148
204
|
}
|
|
149
|
-
|
|
205
|
+
const shouldClose = pointerTypeRef.current === "touch" ? !(0, import_utils.contains)(elements.floating, event.relatedTarget) : true;
|
|
206
|
+
if (shouldClose) {
|
|
207
|
+
closeWithDelay(event);
|
|
208
|
+
}
|
|
150
209
|
}
|
|
151
210
|
function onScrollMouseLeave(event) {
|
|
152
|
-
if (isClickLikeOpenEvent()
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
211
|
+
if (isClickLikeOpenEvent()) return;
|
|
212
|
+
if (context.triggerElements?.hasElement(event.relatedTarget)) {
|
|
213
|
+
return;
|
|
214
|
+
}
|
|
215
|
+
const placement = dataRef.current.placement || "bottom";
|
|
216
|
+
const reference2 = elements.domReference;
|
|
217
|
+
const floating = elements.floating;
|
|
218
|
+
if (!reference2 || !floating) return;
|
|
219
|
+
handleCloseRef.current?.({
|
|
157
220
|
x: event.clientX,
|
|
158
221
|
y: event.clientY,
|
|
159
222
|
placement,
|
|
@@ -163,7 +226,11 @@ function useHover(context, props = {}) {
|
|
|
163
226
|
domReference: reference2
|
|
164
227
|
},
|
|
165
228
|
onClose() {
|
|
166
|
-
clearPointerEvents()
|
|
229
|
+
clearPointerEvents();
|
|
230
|
+
cleanupMouseMoveHandler();
|
|
231
|
+
if (!isClickLikeOpenEvent()) {
|
|
232
|
+
closeWithDelay(event);
|
|
233
|
+
}
|
|
167
234
|
}
|
|
168
235
|
})(event);
|
|
169
236
|
}
|
|
@@ -171,34 +238,83 @@ function useHover(context, props = {}) {
|
|
|
171
238
|
(0, import_utils.clearTimeoutIfSet)(timeoutRef);
|
|
172
239
|
}
|
|
173
240
|
function onFloatingMouseLeave(event) {
|
|
174
|
-
isClickLikeOpenEvent()
|
|
241
|
+
if (isClickLikeOpenEvent()) return;
|
|
242
|
+
if (context.triggerElements?.hasElement(event.relatedTarget)) {
|
|
243
|
+
return;
|
|
244
|
+
}
|
|
245
|
+
closeWithDelay(event, false);
|
|
175
246
|
}
|
|
176
247
|
if ((0, import_utils.isElement)(elements.domReference)) {
|
|
177
|
-
const reference2 = elements.domReference
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
}
|
|
182
|
-
|
|
248
|
+
const reference2 = elements.domReference;
|
|
249
|
+
const floating = elements.floating;
|
|
250
|
+
if (open) {
|
|
251
|
+
reference2.addEventListener("mouseleave", onScrollMouseLeave);
|
|
252
|
+
}
|
|
253
|
+
if (move) {
|
|
254
|
+
reference2.addEventListener("mousemove", onReferenceMouseEnter, {
|
|
255
|
+
once: true
|
|
256
|
+
});
|
|
257
|
+
}
|
|
258
|
+
reference2.addEventListener("mouseenter", onReferenceMouseEnter);
|
|
259
|
+
reference2.addEventListener("mouseleave", onReferenceMouseLeave);
|
|
260
|
+
if (floating) {
|
|
261
|
+
floating.addEventListener("mouseleave", onScrollMouseLeave);
|
|
262
|
+
floating.addEventListener("mouseenter", onFloatingMouseEnter);
|
|
263
|
+
floating.addEventListener("mouseleave", onFloatingMouseLeave);
|
|
264
|
+
}
|
|
265
|
+
return () => {
|
|
266
|
+
if (open) {
|
|
267
|
+
reference2.removeEventListener("mouseleave", onScrollMouseLeave);
|
|
268
|
+
}
|
|
269
|
+
if (move) {
|
|
270
|
+
reference2.removeEventListener("mousemove", onReferenceMouseEnter);
|
|
271
|
+
}
|
|
272
|
+
reference2.removeEventListener("mouseenter", onReferenceMouseEnter);
|
|
273
|
+
reference2.removeEventListener("mouseleave", onReferenceMouseLeave);
|
|
274
|
+
if (floating) {
|
|
275
|
+
floating.removeEventListener("mouseleave", onScrollMouseLeave);
|
|
276
|
+
floating.removeEventListener("mouseenter", onFloatingMouseEnter);
|
|
277
|
+
floating.removeEventListener("mouseleave", onFloatingMouseLeave);
|
|
278
|
+
}
|
|
279
|
+
cleanupMouseMoveHandler();
|
|
183
280
|
};
|
|
184
281
|
}
|
|
185
|
-
}, [elements, enabled, context, mouseOnly, move, open, dataRef])
|
|
186
|
-
|
|
187
|
-
|
|
282
|
+
}, [elements, enabled, context, mouseOnly, move, open, dataRef]);
|
|
283
|
+
React.useLayoutEffect(() => {
|
|
284
|
+
if (!enabled) return;
|
|
285
|
+
if (open && handleCloseRef.current?.__options?.blockPointerEvents && isHoverOpen()) {
|
|
286
|
+
performedPointerEventsMutationRef.current = true;
|
|
188
287
|
const floatingEl = elements.floating;
|
|
189
288
|
if ((0, import_utils.isElement)(elements.domReference) && floatingEl) {
|
|
190
289
|
const body = (0, import_utils.getDocument)(elements.floating).body;
|
|
191
290
|
body.setAttribute(safePolygonIdentifier, "");
|
|
192
291
|
const ref = elements.domReference;
|
|
193
|
-
|
|
194
|
-
|
|
292
|
+
body.style.pointerEvents = "none";
|
|
293
|
+
ref.style.pointerEvents = "auto";
|
|
294
|
+
floatingEl.style.pointerEvents = "auto";
|
|
295
|
+
return () => {
|
|
296
|
+
body.style.pointerEvents = "";
|
|
297
|
+
ref.style.pointerEvents = "";
|
|
298
|
+
floatingEl.style.pointerEvents = "";
|
|
195
299
|
};
|
|
196
300
|
}
|
|
197
301
|
}
|
|
198
|
-
}, [enabled, open, elements, isHoverOpen])
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
302
|
+
}, [enabled, open, elements, isHoverOpen]);
|
|
303
|
+
React.useLayoutEffect(() => {
|
|
304
|
+
if (!open) {
|
|
305
|
+
pointerTypeRef.current = void 0;
|
|
306
|
+
restTimeoutPendingRef.current = false;
|
|
307
|
+
cleanupMouseMoveHandler();
|
|
308
|
+
clearPointerEvents();
|
|
309
|
+
}
|
|
310
|
+
}, [open]);
|
|
311
|
+
React.useEffect(() => {
|
|
312
|
+
return () => {
|
|
313
|
+
cleanupMouseMoveHandler();
|
|
314
|
+
(0, import_utils.clearTimeoutIfSet)(timeoutRef);
|
|
315
|
+
(0, import_utils.clearTimeoutIfSet)(restTimeoutRef);
|
|
316
|
+
clearPointerEvents();
|
|
317
|
+
};
|
|
202
318
|
}, [enabled, elements.domReference]);
|
|
203
319
|
const reference = React.useMemo(() => {
|
|
204
320
|
function setPointerRef(event) {
|
|
@@ -212,9 +328,26 @@ function useHover(context, props = {}) {
|
|
|
212
328
|
nativeEvent
|
|
213
329
|
} = event;
|
|
214
330
|
function handleMouseMove() {
|
|
215
|
-
!blockMouseMoveRef.current && !openRef.current
|
|
331
|
+
if (!blockMouseMoveRef.current && !openRef.current) {
|
|
332
|
+
stableOnOpenChange(true, nativeEvent, "hover");
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
if (mouseOnly && !(0, import_utils.isMouseLikePointerType)(pointerTypeRef.current)) {
|
|
336
|
+
return;
|
|
337
|
+
}
|
|
338
|
+
if (open || restMsRef.current === 0) {
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
if (restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2) {
|
|
342
|
+
return;
|
|
343
|
+
}
|
|
344
|
+
(0, import_utils.clearTimeoutIfSet)(restTimeoutRef);
|
|
345
|
+
if (pointerTypeRef.current === "touch") {
|
|
346
|
+
handleMouseMove();
|
|
347
|
+
} else {
|
|
348
|
+
restTimeoutPendingRef.current = true;
|
|
349
|
+
restTimeoutRef.current = window.setTimeout(handleMouseMove, restMsRef.current);
|
|
216
350
|
}
|
|
217
|
-
mouseOnly && !(0, import_utils.isMouseLikePointerType)(pointerTypeRef.current) || open || restMsRef.current === 0 || restTimeoutPendingRef.current && event.movementX ** 2 + event.movementY ** 2 < 2 || ((0, import_utils.clearTimeoutIfSet)(restTimeoutRef), pointerTypeRef.current === "touch" ? handleMouseMove() : (restTimeoutPendingRef.current = !0, restTimeoutRef.current = window.setTimeout(handleMouseMove, restMsRef.current)));
|
|
218
351
|
}
|
|
219
352
|
};
|
|
220
353
|
}, [mouseOnly, open]);
|