@hanzogui/floating 8.3.0 → 8.3.2

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 (277) hide show
  1. package/dist/cjs/Floating.js +5 -0
  2. package/dist/cjs/Floating.js.map +1 -0
  3. package/dist/cjs/index.js +57 -0
  4. package/dist/cjs/index.js.map +1 -0
  5. package/dist/cjs/interactions/PopupTriggerMap.js +33 -0
  6. package/dist/cjs/interactions/PopupTriggerMap.js.map +1 -0
  7. package/dist/cjs/interactions/createFloatingEvents.js +31 -0
  8. package/dist/cjs/interactions/createFloatingEvents.js.map +1 -0
  9. package/dist/cjs/interactions/safePolygon.js +435 -0
  10. package/dist/cjs/interactions/safePolygon.js.map +1 -0
  11. package/dist/cjs/interactions/types.js +3 -0
  12. package/dist/cjs/interactions/types.js.map +1 -0
  13. package/dist/cjs/interactions/useClick.js +118 -0
  14. package/dist/cjs/interactions/useClick.js.map +1 -0
  15. package/dist/cjs/interactions/useDelayGroup.js +84 -0
  16. package/dist/cjs/interactions/useDelayGroup.js.map +1 -0
  17. package/dist/cjs/interactions/useFocus.js +118 -0
  18. package/dist/cjs/interactions/useFocus.js.map +1 -0
  19. package/dist/cjs/interactions/useHover.js +357 -0
  20. package/dist/cjs/interactions/useHover.js.map +1 -0
  21. package/dist/cjs/interactions/useInnerOffset.js +92 -0
  22. package/dist/cjs/interactions/useInnerOffset.js.map +1 -0
  23. package/dist/cjs/interactions/useInteractions.js +88 -0
  24. package/dist/cjs/interactions/useInteractions.js.map +1 -0
  25. package/dist/cjs/interactions/useListNavigation.js +447 -0
  26. package/dist/cjs/interactions/useListNavigation.js.map +1 -0
  27. package/dist/cjs/interactions/useRole.js +69 -0
  28. package/dist/cjs/interactions/useRole.js.map +1 -0
  29. package/dist/cjs/interactions/useTypeahead.js +121 -0
  30. package/dist/cjs/interactions/useTypeahead.js.map +1 -0
  31. package/dist/cjs/interactions/utils.js +200 -0
  32. package/dist/cjs/interactions/utils.js.map +1 -0
  33. package/dist/cjs/middleware/inner.js +82 -0
  34. package/dist/cjs/middleware/inner.js.map +1 -0
  35. package/dist/cjs/package.json +1 -0
  36. package/dist/cjs/useFloating.js +29 -0
  37. package/dist/cjs/useFloating.js.map +1 -0
  38. package/dist/esm/Floating.js +2 -0
  39. package/dist/esm/Floating.js.map +1 -0
  40. package/dist/esm/index.js +23 -18
  41. package/dist/esm/index.js.map +1 -1
  42. package/dist/esm/interactions/PopupTriggerMap.js +29 -0
  43. package/dist/esm/interactions/PopupTriggerMap.js.map +1 -0
  44. package/dist/esm/interactions/createFloatingEvents.js +28 -0
  45. package/dist/esm/interactions/createFloatingEvents.js.map +1 -0
  46. package/dist/esm/interactions/safePolygon.js +432 -0
  47. package/dist/esm/interactions/safePolygon.js.map +1 -0
  48. package/dist/esm/interactions/types.js +2 -0
  49. package/dist/esm/interactions/types.js.map +1 -0
  50. package/dist/esm/interactions/useClick.js +115 -0
  51. package/dist/esm/interactions/useClick.js.map +1 -0
  52. package/dist/esm/interactions/useDelayGroup.js +78 -0
  53. package/dist/esm/interactions/useDelayGroup.js.map +1 -0
  54. package/dist/esm/interactions/useFocus.js +115 -0
  55. package/dist/esm/interactions/useFocus.js.map +1 -0
  56. package/dist/esm/interactions/useHover.js +352 -0
  57. package/dist/esm/interactions/useHover.js.map +1 -0
  58. package/dist/esm/interactions/useInnerOffset.js +88 -0
  59. package/dist/esm/interactions/useInnerOffset.js.map +1 -0
  60. package/dist/esm/interactions/useInteractions.js +85 -0
  61. package/dist/esm/interactions/useInteractions.js.map +1 -0
  62. package/dist/esm/interactions/useListNavigation.js +444 -0
  63. package/dist/esm/interactions/useListNavigation.js.map +1 -0
  64. package/dist/esm/interactions/useRole.js +65 -0
  65. package/dist/esm/interactions/useRole.js.map +1 -0
  66. package/dist/esm/interactions/useTypeahead.js +118 -0
  67. package/dist/esm/interactions/useTypeahead.js.map +1 -0
  68. package/dist/esm/interactions/utils.js +176 -0
  69. package/dist/esm/interactions/utils.js.map +1 -0
  70. package/dist/esm/middleware/inner.js +77 -0
  71. package/dist/esm/middleware/inner.js.map +1 -0
  72. package/dist/esm/useFloating.js +24 -0
  73. package/dist/esm/useFloating.js.map +1 -0
  74. package/dist/native/Floating.js +5 -0
  75. package/dist/native/Floating.js.map +1 -0
  76. package/dist/native/index.js +23 -0
  77. package/dist/native/index.js.map +1 -0
  78. package/dist/native/interactions/PopupTriggerMap.js +29 -0
  79. package/dist/native/interactions/PopupTriggerMap.js.map +1 -0
  80. package/dist/native/interactions/createFloatingEvents.js +28 -0
  81. package/dist/native/interactions/createFloatingEvents.js.map +1 -0
  82. package/dist/native/interactions/safePolygon.js +432 -0
  83. package/dist/native/interactions/safePolygon.js.map +1 -0
  84. package/dist/native/interactions/types.js +2 -0
  85. package/dist/native/interactions/types.js.map +1 -0
  86. package/dist/native/interactions/useClick.js +115 -0
  87. package/dist/native/interactions/useClick.js.map +1 -0
  88. package/dist/native/interactions/useDelayGroup.js +78 -0
  89. package/dist/native/interactions/useDelayGroup.js.map +1 -0
  90. package/dist/native/interactions/useFocus.js +115 -0
  91. package/dist/native/interactions/useFocus.js.map +1 -0
  92. package/dist/native/interactions/useHover.js +352 -0
  93. package/dist/native/interactions/useHover.js.map +1 -0
  94. package/dist/native/interactions/useInnerOffset.js +88 -0
  95. package/dist/native/interactions/useInnerOffset.js.map +1 -0
  96. package/dist/native/interactions/useInteractions.js +85 -0
  97. package/dist/native/interactions/useInteractions.js.map +1 -0
  98. package/dist/native/interactions/useListNavigation.js +444 -0
  99. package/dist/native/interactions/useListNavigation.js.map +1 -0
  100. package/dist/native/interactions/useRole.js +65 -0
  101. package/dist/native/interactions/useRole.js.map +1 -0
  102. package/dist/native/interactions/useTypeahead.js +118 -0
  103. package/dist/native/interactions/useTypeahead.js.map +1 -0
  104. package/dist/native/interactions/utils.js +176 -0
  105. package/dist/native/interactions/utils.js.map +1 -0
  106. package/dist/native/middleware/inner.js +77 -0
  107. package/dist/native/middleware/inner.js.map +1 -0
  108. package/dist/native/useFloating.js +24 -0
  109. package/dist/native/useFloating.js.map +1 -0
  110. package/package.json +16 -16
  111. package/src/index.ts +18 -18
  112. package/src/interactions/safePolygon.ts +2 -2
  113. package/src/interactions/types.ts +2 -2
  114. package/src/interactions/useClick.ts +2 -2
  115. package/src/interactions/useDelayGroup.ts +1 -1
  116. package/src/interactions/useFocus.ts +2 -2
  117. package/src/interactions/useHover.ts +2 -2
  118. package/src/interactions/useInnerOffset.ts +1 -1
  119. package/src/interactions/useInteractions.ts +1 -1
  120. package/src/interactions/useListNavigation.ts +2 -2
  121. package/src/interactions/useRole.ts +1 -1
  122. package/src/interactions/useTypeahead.ts +6 -2
  123. package/src/useFloating.tsx +2 -2
  124. package/types/index.d.ts +18 -18
  125. package/types/index.d.ts.map +1 -1
  126. package/types/interactions/PopupTriggerMap.d.ts.map +1 -1
  127. package/types/interactions/safePolygon.d.ts +1 -1
  128. package/types/interactions/safePolygon.d.ts.map +1 -1
  129. package/types/interactions/types.d.ts +2 -2
  130. package/types/interactions/types.d.ts.map +1 -1
  131. package/types/interactions/useClick.d.ts +1 -1
  132. package/types/interactions/useClick.d.ts.map +1 -1
  133. package/types/interactions/useDelayGroup.d.ts +1 -1
  134. package/types/interactions/useDelayGroup.d.ts.map +1 -1
  135. package/types/interactions/useFocus.d.ts +1 -1
  136. package/types/interactions/useFocus.d.ts.map +1 -1
  137. package/types/interactions/useHover.d.ts +1 -1
  138. package/types/interactions/useHover.d.ts.map +1 -1
  139. package/types/interactions/useInnerOffset.d.ts +1 -1
  140. package/types/interactions/useInnerOffset.d.ts.map +1 -1
  141. package/types/interactions/useInteractions.d.ts +1 -1
  142. package/types/interactions/useInteractions.d.ts.map +1 -1
  143. package/types/interactions/useListNavigation.d.ts +1 -1
  144. package/types/interactions/useListNavigation.d.ts.map +1 -1
  145. package/types/interactions/useRole.d.ts +1 -1
  146. package/types/interactions/useRole.d.ts.map +1 -1
  147. package/types/interactions/useTypeahead.d.ts +1 -1
  148. package/types/interactions/useTypeahead.d.ts.map +1 -1
  149. package/types/middleware/inner.d.ts.map +1 -1
  150. package/types/useFloating.d.ts +2 -2
  151. package/types/useFloating.d.ts.map +1 -1
  152. package/dist/cjs/Floating.cjs +0 -20
  153. package/dist/cjs/Floating.native.js +0 -39
  154. package/dist/cjs/Floating.native.js.map +0 -1
  155. package/dist/cjs/index.cjs +0 -73
  156. package/dist/cjs/index.native.js +0 -76
  157. package/dist/cjs/index.native.js.map +0 -1
  158. package/dist/cjs/interactions/PopupTriggerMap.cjs +0 -49
  159. package/dist/cjs/interactions/PopupTriggerMap.native.js +0 -97
  160. package/dist/cjs/interactions/PopupTriggerMap.native.js.map +0 -1
  161. package/dist/cjs/interactions/createFloatingEvents.cjs +0 -50
  162. package/dist/cjs/interactions/createFloatingEvents.native.js +0 -56
  163. package/dist/cjs/interactions/createFloatingEvents.native.js.map +0 -1
  164. package/dist/cjs/interactions/safePolygon.cjs +0 -273
  165. package/dist/cjs/interactions/safePolygon.native.js +0 -284
  166. package/dist/cjs/interactions/safePolygon.native.js.map +0 -1
  167. package/dist/cjs/interactions/types.cjs +0 -18
  168. package/dist/cjs/interactions/types.native.js +0 -21
  169. package/dist/cjs/interactions/types.native.js.map +0 -1
  170. package/dist/cjs/interactions/useClick.cjs +0 -124
  171. package/dist/cjs/interactions/useClick.native.js +0 -132
  172. package/dist/cjs/interactions/useClick.native.js.map +0 -1
  173. package/dist/cjs/interactions/useDelayGroup.cjs +0 -115
  174. package/dist/cjs/interactions/useDelayGroup.native.js +0 -125
  175. package/dist/cjs/interactions/useDelayGroup.native.js.map +0 -1
  176. package/dist/cjs/interactions/useFocus.cjs +0 -130
  177. package/dist/cjs/interactions/useFocus.native.js +0 -139
  178. package/dist/cjs/interactions/useFocus.native.js.map +0 -1
  179. package/dist/cjs/interactions/useHover.cjs +0 -357
  180. package/dist/cjs/interactions/useHover.native.js +0 -373
  181. package/dist/cjs/interactions/useHover.native.js.map +0 -1
  182. package/dist/cjs/interactions/useInnerOffset.cjs +0 -128
  183. package/dist/cjs/interactions/useInnerOffset.native.js +0 -141
  184. package/dist/cjs/interactions/useInnerOffset.native.js.map +0 -1
  185. package/dist/cjs/interactions/useInteractions.cjs +0 -105
  186. package/dist/cjs/interactions/useInteractions.native.js +0 -216
  187. package/dist/cjs/interactions/useInteractions.native.js.map +0 -1
  188. package/dist/cjs/interactions/useListNavigation.cjs +0 -418
  189. package/dist/cjs/interactions/useListNavigation.native.js +0 -433
  190. package/dist/cjs/interactions/useListNavigation.native.js.map +0 -1
  191. package/dist/cjs/interactions/useRole.cjs +0 -122
  192. package/dist/cjs/interactions/useRole.native.js +0 -136
  193. package/dist/cjs/interactions/useRole.native.js.map +0 -1
  194. package/dist/cjs/interactions/useTypeahead.cjs +0 -143
  195. package/dist/cjs/interactions/useTypeahead.native.js +0 -159
  196. package/dist/cjs/interactions/useTypeahead.native.js.map +0 -1
  197. package/dist/cjs/interactions/utils.cjs +0 -208
  198. package/dist/cjs/interactions/utils.native.js +0 -227
  199. package/dist/cjs/interactions/utils.native.js.map +0 -1
  200. package/dist/cjs/middleware/inner.cjs +0 -118
  201. package/dist/cjs/middleware/inner.native.js +0 -130
  202. package/dist/cjs/middleware/inner.native.js.map +0 -1
  203. package/dist/cjs/useFloating.cjs +0 -64
  204. package/dist/cjs/useFloating.native.js +0 -69
  205. package/dist/cjs/useFloating.native.js.map +0 -1
  206. package/dist/esm/Floating.mjs +0 -2
  207. package/dist/esm/Floating.mjs.map +0 -1
  208. package/dist/esm/Floating.native.js +0 -8
  209. package/dist/esm/Floating.native.js.map +0 -1
  210. package/dist/esm/index.mjs +0 -18
  211. package/dist/esm/index.mjs.map +0 -1
  212. package/dist/esm/index.native.js +0 -18
  213. package/dist/esm/index.native.js.map +0 -1
  214. package/dist/esm/interactions/PopupTriggerMap.mjs +0 -24
  215. package/dist/esm/interactions/PopupTriggerMap.mjs.map +0 -1
  216. package/dist/esm/interactions/PopupTriggerMap.native.js +0 -69
  217. package/dist/esm/interactions/PopupTriggerMap.native.js.map +0 -1
  218. package/dist/esm/interactions/createFloatingEvents.mjs +0 -25
  219. package/dist/esm/interactions/createFloatingEvents.mjs.map +0 -1
  220. package/dist/esm/interactions/createFloatingEvents.native.js +0 -28
  221. package/dist/esm/interactions/createFloatingEvents.native.js.map +0 -1
  222. package/dist/esm/interactions/safePolygon.mjs +0 -248
  223. package/dist/esm/interactions/safePolygon.mjs.map +0 -1
  224. package/dist/esm/interactions/safePolygon.native.js +0 -256
  225. package/dist/esm/interactions/safePolygon.native.js.map +0 -1
  226. package/dist/esm/interactions/types.mjs +0 -2
  227. package/dist/esm/interactions/types.mjs.map +0 -1
  228. package/dist/esm/interactions/types.native.js +0 -2
  229. package/dist/esm/interactions/types.native.js.map +0 -1
  230. package/dist/esm/interactions/useClick.mjs +0 -99
  231. package/dist/esm/interactions/useClick.mjs.map +0 -1
  232. package/dist/esm/interactions/useClick.native.js +0 -104
  233. package/dist/esm/interactions/useClick.native.js.map +0 -1
  234. package/dist/esm/interactions/useDelayGroup.mjs +0 -77
  235. package/dist/esm/interactions/useDelayGroup.mjs.map +0 -1
  236. package/dist/esm/interactions/useDelayGroup.native.js +0 -84
  237. package/dist/esm/interactions/useDelayGroup.native.js.map +0 -1
  238. package/dist/esm/interactions/useFocus.mjs +0 -105
  239. package/dist/esm/interactions/useFocus.mjs.map +0 -1
  240. package/dist/esm/interactions/useFocus.native.js +0 -111
  241. package/dist/esm/interactions/useFocus.native.js.map +0 -1
  242. package/dist/esm/interactions/useHover.mjs +0 -320
  243. package/dist/esm/interactions/useHover.mjs.map +0 -1
  244. package/dist/esm/interactions/useHover.native.js +0 -333
  245. package/dist/esm/interactions/useHover.native.js.map +0 -1
  246. package/dist/esm/interactions/useInnerOffset.mjs +0 -92
  247. package/dist/esm/interactions/useInnerOffset.mjs.map +0 -1
  248. package/dist/esm/interactions/useInnerOffset.native.js +0 -102
  249. package/dist/esm/interactions/useInnerOffset.native.js.map +0 -1
  250. package/dist/esm/interactions/useInteractions.mjs +0 -80
  251. package/dist/esm/interactions/useInteractions.mjs.map +0 -1
  252. package/dist/esm/interactions/useInteractions.native.js +0 -188
  253. package/dist/esm/interactions/useInteractions.native.js.map +0 -1
  254. package/dist/esm/interactions/useListNavigation.mjs +0 -393
  255. package/dist/esm/interactions/useListNavigation.mjs.map +0 -1
  256. package/dist/esm/interactions/useListNavigation.native.js +0 -405
  257. package/dist/esm/interactions/useListNavigation.native.js.map +0 -1
  258. package/dist/esm/interactions/useRole.mjs +0 -86
  259. package/dist/esm/interactions/useRole.mjs.map +0 -1
  260. package/dist/esm/interactions/useRole.native.js +0 -97
  261. package/dist/esm/interactions/useRole.native.js.map +0 -1
  262. package/dist/esm/interactions/useTypeahead.mjs +0 -118
  263. package/dist/esm/interactions/useTypeahead.mjs.map +0 -1
  264. package/dist/esm/interactions/useTypeahead.native.js +0 -131
  265. package/dist/esm/interactions/useTypeahead.native.js.map +0 -1
  266. package/dist/esm/interactions/utils.mjs +0 -162
  267. package/dist/esm/interactions/utils.mjs.map +0 -1
  268. package/dist/esm/interactions/utils.native.js +0 -178
  269. package/dist/esm/interactions/utils.native.js.map +0 -1
  270. package/dist/esm/middleware/inner.mjs +0 -82
  271. package/dist/esm/middleware/inner.mjs.map +0 -1
  272. package/dist/esm/middleware/inner.native.js +0 -91
  273. package/dist/esm/middleware/inner.native.js.map +0 -1
  274. package/dist/esm/useFloating.mjs +0 -27
  275. package/dist/esm/useFloating.mjs.map +0 -1
  276. package/dist/esm/useFloating.native.js +0 -29
  277. package/dist/esm/useFloating.native.js.map +0 -1
@@ -1,357 +0,0 @@
1
- var __create = Object.create;
2
- var __defProp = Object.defineProperty;
3
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
- var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
- var __hasOwnProp = Object.prototype.hasOwnProperty;
7
- var __export = (target, all) => {
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, {
16
- get: () => from[key],
17
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
18
- });
19
- }
20
- return to;
21
- };
22
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
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);
34
- var useHover_exports = {};
35
- __export(useHover_exports, {
36
- getDelay: () => getDelay,
37
- useHover: () => useHover
38
- });
39
- module.exports = __toCommonJS(useHover_exports);
40
- var React = __toESM(require("react"), 1);
41
- var import_use_event = require("@hanzogui/use-event");
42
- var import_utils = require("./utils.cjs");
43
- const safePolygonIdentifier = "data-floating-ui-safe-polygon";
44
- function getDelay(value, prop, pointerType) {
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];
52
- }
53
- function useHover(context, props = {}) {
54
- const {
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);
70
- handleCloseRef.current = handleClose;
71
- const delayRef = React.useRef(delay);
72
- delayRef.current = delay;
73
- const openRef = React.useRef(open);
74
- openRef.current = open;
75
- const restMsRef = React.useRef(restMs);
76
- restMsRef.current = restMs;
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
- });
90
- React.useEffect(() => {
91
- if (!enabled) return;
92
- if (!events) return;
93
- function onOpenChange2({
94
- open: open2
95
- }) {
96
- if (!open2) {
97
- (0, import_utils.clearTimeoutIfSet)(timeoutRef);
98
- (0, import_utils.clearTimeoutIfSet)(restTimeoutRef);
99
- blockMouseMoveRef.current = true;
100
- restTimeoutPendingRef.current = false;
101
- }
102
- }
103
- events.on("openchange", onOpenChange2);
104
- return () => {
105
- events.off("openchange", onOpenChange2);
106
- };
107
- }, [enabled, events]);
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
- });
136
- React.useEffect(() => {
137
- if (!enabled) return;
138
- function onReferenceMouseEnter(event) {
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
- }
144
- const openDelay = getDelay(delayRef.current, "open", pointerTypeRef.current);
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
- }
154
- }
155
- function onReferenceMouseLeave(event) {
156
- if (isClickLikeOpenEvent()) {
157
- clearPointerEvents();
158
- return;
159
- }
160
- if (context.triggerElements?.hasElement(event.relatedTarget)) {
161
- return;
162
- }
163
- unbindMouseMoveRef.current();
164
- const doc = (0, import_utils.getDocument)(elements.floating);
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;
174
- if (!reference2 || !floating) return;
175
- handlerRef.current = handleCloseRef.current({
176
- x: event.clientX,
177
- y: event.clientY,
178
- placement,
179
- elements: {
180
- reference: reference2,
181
- floating,
182
- domReference: reference2
183
- },
184
- onClose() {
185
- if (context.handleCloseActiveRef) {
186
- context.handleCloseActiveRef.current = false;
187
- }
188
- clearPointerEvents();
189
- cleanupMouseMoveHandler();
190
- if (!isClickLikeOpenEvent()) {
191
- closeWithDelay(event, true, "safe-polygon");
192
- }
193
- }
194
- });
195
- if (context.handleCloseActiveRef) {
196
- context.handleCloseActiveRef.current = true;
197
- }
198
- const handler = handlerRef.current;
199
- doc.addEventListener("mousemove", handler);
200
- unbindMouseMoveRef.current = () => {
201
- doc.removeEventListener("mousemove", handler);
202
- };
203
- return;
204
- }
205
- const shouldClose = pointerTypeRef.current === "touch" ? !(0, import_utils.contains)(elements.floating, event.relatedTarget) : true;
206
- if (shouldClose) {
207
- closeWithDelay(event);
208
- }
209
- }
210
- function onScrollMouseLeave(event) {
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?.({
220
- x: event.clientX,
221
- y: event.clientY,
222
- placement,
223
- elements: {
224
- reference: reference2,
225
- floating,
226
- domReference: reference2
227
- },
228
- onClose() {
229
- clearPointerEvents();
230
- cleanupMouseMoveHandler();
231
- if (!isClickLikeOpenEvent()) {
232
- closeWithDelay(event);
233
- }
234
- }
235
- })(event);
236
- }
237
- function onFloatingMouseEnter() {
238
- (0, import_utils.clearTimeoutIfSet)(timeoutRef);
239
- }
240
- function onFloatingMouseLeave(event) {
241
- if (isClickLikeOpenEvent()) return;
242
- if (context.triggerElements?.hasElement(event.relatedTarget)) {
243
- return;
244
- }
245
- closeWithDelay(event, false);
246
- }
247
- if ((0, import_utils.isElement)(elements.domReference)) {
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();
280
- };
281
- }
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;
287
- const floatingEl = elements.floating;
288
- if ((0, import_utils.isElement)(elements.domReference) && floatingEl) {
289
- const body = (0, import_utils.getDocument)(elements.floating).body;
290
- body.setAttribute(safePolygonIdentifier, "");
291
- const ref = elements.domReference;
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 = "";
299
- };
300
- }
301
- }
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
- };
318
- }, [enabled, elements.domReference]);
319
- const reference = React.useMemo(() => {
320
- function setPointerRef(event) {
321
- pointerTypeRef.current = event.pointerType;
322
- }
323
- return {
324
- onPointerDown: setPointerRef,
325
- onPointerEnter: setPointerRef,
326
- onMouseMove(event) {
327
- const {
328
- nativeEvent
329
- } = 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 && 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);
350
- }
351
- }
352
- };
353
- }, [mouseOnly, open]);
354
- return React.useMemo(() => enabled ? {
355
- reference
356
- } : {}, [enabled, reference]);
357
- }