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