@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
@@ -0,0 +1,357 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDelay = getDelay;
4
+ exports.useHover = useHover;
5
+ const tslib_1 = require("tslib");
6
+ const React = tslib_1.__importStar(require("react"));
7
+ const use_event_1 = require("@hanzogui/use-event");
8
+ const utils_ts_1 = require("./utils.js");
9
+ const safePolygonIdentifier = 'data-floating-ui-safe-polygon';
10
+ function getDelay(value, prop, pointerType) {
11
+ if (pointerType && !(0, utils_ts_1.isMouseLikePointerType)(pointerType)) {
12
+ return 0;
13
+ }
14
+ if (typeof value === 'number') {
15
+ return value;
16
+ }
17
+ return value?.[prop];
18
+ }
19
+ // hover interaction hook ported from @floating-ui/react.
20
+ // uses raw DOM addEventListener on the reference element (NOT react delegation)
21
+ // so that mouseenter fires even when cursor moves from a disabled element.
22
+ //
23
+ // intentionally does NOT listen for documentElement mouseleave, which
24
+ // fixes the window-blur-closing-popover bug from @floating-ui/react.
25
+ function useHover(context, props = {}) {
26
+ const { open, onOpenChange, dataRef, events, elements } = context;
27
+ const { enabled = true, delay = 0, handleClose = null, mouseOnly = false, restMs = 0, move = true, } = props;
28
+ // latest-value refs to avoid stale closures in raw DOM handlers
29
+ const handleCloseRef = React.useRef(handleClose);
30
+ handleCloseRef.current = handleClose;
31
+ const delayRef = React.useRef(delay);
32
+ delayRef.current = delay;
33
+ const openRef = React.useRef(open);
34
+ openRef.current = open;
35
+ const restMsRef = React.useRef(restMs);
36
+ restMsRef.current = restMs;
37
+ // stable callback that always calls the latest onOpenChange
38
+ const stableOnOpenChange = (0, use_event_1.useEvent)(onOpenChange);
39
+ const pointerTypeRef = React.useRef(undefined);
40
+ const timeoutRef = React.useRef(-1);
41
+ const handlerRef = React.useRef(undefined);
42
+ const restTimeoutRef = React.useRef(-1);
43
+ const blockMouseMoveRef = React.useRef(true);
44
+ const performedPointerEventsMutationRef = React.useRef(false);
45
+ const unbindMouseMoveRef = React.useRef(() => { });
46
+ const restTimeoutPendingRef = React.useRef(false);
47
+ const isHoverOpen = (0, use_event_1.useEvent)(() => {
48
+ const type = dataRef.current.openEvent?.type;
49
+ return type?.includes('mouse') && type !== 'mousedown';
50
+ });
51
+ // when closing before opening, clear the delay timeouts to cancel it
52
+ // from showing.
53
+ React.useEffect(() => {
54
+ if (!enabled)
55
+ return;
56
+ if (!events)
57
+ return;
58
+ function onOpenChange({ open }) {
59
+ if (!open) {
60
+ (0, utils_ts_1.clearTimeoutIfSet)(timeoutRef);
61
+ (0, utils_ts_1.clearTimeoutIfSet)(restTimeoutRef);
62
+ blockMouseMoveRef.current = true;
63
+ restTimeoutPendingRef.current = false;
64
+ }
65
+ }
66
+ events.on('openchange', onOpenChange);
67
+ return () => {
68
+ events.off('openchange', onOpenChange);
69
+ };
70
+ }, [enabled, events]);
71
+ // NOTE: intentionally skipping the documentElement mouseleave handler
72
+ // from upstream. this is our fix for the window-blur-closing-popover bug.
73
+ const closeWithDelay = (0, use_event_1.useEvent)((event, runElseBranch = true, reason = 'hover') => {
74
+ const closeDelay = getDelay(delayRef.current, 'close', pointerTypeRef.current);
75
+ if (closeDelay && !handlerRef.current) {
76
+ (0, utils_ts_1.clearTimeoutIfSet)(timeoutRef);
77
+ timeoutRef.current = window.setTimeout(() => stableOnOpenChange(false, event, reason), closeDelay);
78
+ }
79
+ else if (runElseBranch) {
80
+ (0, utils_ts_1.clearTimeoutIfSet)(timeoutRef);
81
+ stableOnOpenChange(false, event, reason);
82
+ }
83
+ });
84
+ const cleanupMouseMoveHandler = (0, use_event_1.useEvent)(() => {
85
+ unbindMouseMoveRef.current();
86
+ handlerRef.current = undefined;
87
+ if (context.handleCloseActiveRef) {
88
+ context.handleCloseActiveRef.current = false;
89
+ }
90
+ });
91
+ const clearPointerEvents = (0, use_event_1.useEvent)(() => {
92
+ if (performedPointerEventsMutationRef.current) {
93
+ const body = (0, utils_ts_1.getDocument)(elements.floating).body;
94
+ body.style.pointerEvents = '';
95
+ body.removeAttribute(safePolygonIdentifier);
96
+ performedPointerEventsMutationRef.current = false;
97
+ }
98
+ });
99
+ const isClickLikeOpenEvent = (0, use_event_1.useEvent)(() => {
100
+ return dataRef.current.openEvent
101
+ ? ['click', 'mousedown'].includes(dataRef.current.openEvent.type)
102
+ : false;
103
+ });
104
+ // registering the mouse events on the reference directly to bypass React's
105
+ // delegation system. if the cursor was on a disabled element and then entered
106
+ // the reference (no gap), mouseenter doesn't fire in the delegation system.
107
+ React.useEffect(() => {
108
+ if (!enabled)
109
+ return;
110
+ function onReferenceMouseEnter(event) {
111
+ (0, utils_ts_1.clearTimeoutIfSet)(timeoutRef);
112
+ blockMouseMoveRef.current = false;
113
+ if ((mouseOnly && !(0, utils_ts_1.isMouseLikePointerType)(pointerTypeRef.current)) ||
114
+ (restMsRef.current > 0 && !getDelay(delayRef.current, 'open'))) {
115
+ return;
116
+ }
117
+ const openDelay = getDelay(delayRef.current, 'open', pointerTypeRef.current);
118
+ if (openDelay) {
119
+ timeoutRef.current = window.setTimeout(() => {
120
+ if (!openRef.current) {
121
+ stableOnOpenChange(true, event, 'hover');
122
+ }
123
+ }, openDelay);
124
+ }
125
+ else if (!open) {
126
+ stableOnOpenChange(true, event, 'hover');
127
+ }
128
+ }
129
+ function onReferenceMouseLeave(event) {
130
+ if (isClickLikeOpenEvent()) {
131
+ clearPointerEvents();
132
+ return;
133
+ }
134
+ // moving to a sibling trigger in a multi-trigger pattern — suppress close
135
+ if (context.triggerElements?.hasElement(event.relatedTarget)) {
136
+ return;
137
+ }
138
+ unbindMouseMoveRef.current();
139
+ const doc = (0, utils_ts_1.getDocument)(elements.floating);
140
+ (0, utils_ts_1.clearTimeoutIfSet)(restTimeoutRef);
141
+ restTimeoutPendingRef.current = false;
142
+ if (handleCloseRef.current) {
143
+ // prevent clearing onScrollMouseLeave timeout
144
+ if (!open) {
145
+ (0, utils_ts_1.clearTimeoutIfSet)(timeoutRef);
146
+ }
147
+ const placement = dataRef.current.placement || 'bottom';
148
+ const reference = elements.domReference;
149
+ const floating = elements.floating;
150
+ if (!reference || !floating)
151
+ return;
152
+ // call handleClose once with the leave position — it returns a
153
+ // mousemove handler with the leave (x, y) baked into its closure
154
+ // so the polygon anchor stays fixed at the leave point.
155
+ handlerRef.current = handleCloseRef.current({
156
+ x: event.clientX,
157
+ y: event.clientY,
158
+ placement,
159
+ elements: {
160
+ reference: reference,
161
+ floating: floating,
162
+ domReference: reference,
163
+ },
164
+ onClose() {
165
+ if (context.handleCloseActiveRef) {
166
+ context.handleCloseActiveRef.current = false;
167
+ }
168
+ clearPointerEvents();
169
+ cleanupMouseMoveHandler();
170
+ if (!isClickLikeOpenEvent()) {
171
+ closeWithDelay(event, true, 'safe-polygon');
172
+ }
173
+ },
174
+ });
175
+ if (context.handleCloseActiveRef) {
176
+ context.handleCloseActiveRef.current = true;
177
+ }
178
+ const handler = handlerRef.current;
179
+ doc.addEventListener('mousemove', handler);
180
+ unbindMouseMoveRef.current = () => {
181
+ doc.removeEventListener('mousemove', handler);
182
+ };
183
+ return;
184
+ }
185
+ // allow interactivity without safePolygon on touch devices. with a
186
+ // pointer, a short close delay is an alternative.
187
+ const shouldClose = pointerTypeRef.current === 'touch'
188
+ ? !(0, utils_ts_1.contains)(elements.floating, event.relatedTarget)
189
+ : true;
190
+ if (shouldClose) {
191
+ closeWithDelay(event);
192
+ }
193
+ }
194
+ // ensure the floating element closes after scrolling even if the pointer
195
+ // did not move.
196
+ function onScrollMouseLeave(event) {
197
+ if (isClickLikeOpenEvent())
198
+ return;
199
+ // moving to a sibling trigger in a multi-trigger pattern — suppress close
200
+ if (context.triggerElements?.hasElement(event.relatedTarget)) {
201
+ return;
202
+ }
203
+ const placement = dataRef.current.placement || 'bottom';
204
+ const reference = elements.domReference;
205
+ const floating = elements.floating;
206
+ if (!reference || !floating)
207
+ return;
208
+ // call handleClose to get a handler, then immediately invoke it
209
+ // with this scroll-leave event
210
+ handleCloseRef.current?.({
211
+ x: event.clientX,
212
+ y: event.clientY,
213
+ placement,
214
+ elements: {
215
+ reference: reference,
216
+ floating: floating,
217
+ domReference: reference,
218
+ },
219
+ onClose() {
220
+ clearPointerEvents();
221
+ cleanupMouseMoveHandler();
222
+ if (!isClickLikeOpenEvent()) {
223
+ closeWithDelay(event);
224
+ }
225
+ },
226
+ })(event);
227
+ }
228
+ function onFloatingMouseEnter() {
229
+ (0, utils_ts_1.clearTimeoutIfSet)(timeoutRef);
230
+ }
231
+ function onFloatingMouseLeave(event) {
232
+ if (isClickLikeOpenEvent())
233
+ return;
234
+ // moving to a sibling trigger in a multi-trigger pattern — suppress close
235
+ if (context.triggerElements?.hasElement(event.relatedTarget)) {
236
+ return;
237
+ }
238
+ closeWithDelay(event, false);
239
+ }
240
+ if ((0, utils_ts_1.isElement)(elements.domReference)) {
241
+ const reference = elements.domReference;
242
+ const floating = elements.floating;
243
+ if (open) {
244
+ reference.addEventListener('mouseleave', onScrollMouseLeave);
245
+ }
246
+ if (move) {
247
+ reference.addEventListener('mousemove', onReferenceMouseEnter, {
248
+ once: true,
249
+ });
250
+ }
251
+ reference.addEventListener('mouseenter', onReferenceMouseEnter);
252
+ reference.addEventListener('mouseleave', onReferenceMouseLeave);
253
+ if (floating) {
254
+ floating.addEventListener('mouseleave', onScrollMouseLeave);
255
+ floating.addEventListener('mouseenter', onFloatingMouseEnter);
256
+ floating.addEventListener('mouseleave', onFloatingMouseLeave);
257
+ }
258
+ return () => {
259
+ if (open) {
260
+ reference.removeEventListener('mouseleave', onScrollMouseLeave);
261
+ }
262
+ if (move) {
263
+ reference.removeEventListener('mousemove', onReferenceMouseEnter);
264
+ }
265
+ reference.removeEventListener('mouseenter', onReferenceMouseEnter);
266
+ reference.removeEventListener('mouseleave', onReferenceMouseLeave);
267
+ if (floating) {
268
+ floating.removeEventListener('mouseleave', onScrollMouseLeave);
269
+ floating.removeEventListener('mouseenter', onFloatingMouseEnter);
270
+ floating.removeEventListener('mouseleave', onFloatingMouseLeave);
271
+ }
272
+ // clean up safePolygon's document mousemove handler when reference
273
+ // changes — without this, handleCloseActiveRef stays true
274
+ // indefinitely after rapid trigger switching
275
+ cleanupMouseMoveHandler();
276
+ };
277
+ }
278
+ }, [elements, enabled, context, mouseOnly, move, open, dataRef]);
279
+ // block pointer-events of every element other than the reference and floating
280
+ // while the floating element is open and has a handleClose handler with
281
+ // blockPointerEvents enabled.
282
+ React.useLayoutEffect(() => {
283
+ if (!enabled)
284
+ return;
285
+ if (open && handleCloseRef.current?.__options?.blockPointerEvents && isHoverOpen()) {
286
+ performedPointerEventsMutationRef.current = true;
287
+ const floatingEl = elements.floating;
288
+ if ((0, utils_ts_1.isElement)(elements.domReference) && floatingEl) {
289
+ const body = (0, utils_ts_1.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 = undefined;
306
+ restTimeoutPendingRef.current = false;
307
+ cleanupMouseMoveHandler();
308
+ clearPointerEvents();
309
+ }
310
+ }, [open]);
311
+ React.useEffect(() => {
312
+ return () => {
313
+ cleanupMouseMoveHandler();
314
+ (0, utils_ts_1.clearTimeoutIfSet)(timeoutRef);
315
+ (0, utils_ts_1.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 { nativeEvent } = event;
328
+ function handleMouseMove() {
329
+ if (!blockMouseMoveRef.current && !openRef.current) {
330
+ stableOnOpenChange(true, nativeEvent, 'hover');
331
+ }
332
+ }
333
+ if (mouseOnly && !(0, utils_ts_1.isMouseLikePointerType)(pointerTypeRef.current)) {
334
+ return;
335
+ }
336
+ if (open || restMsRef.current === 0) {
337
+ return;
338
+ }
339
+ // ignore insignificant movements to account for tremors
340
+ if (restTimeoutPendingRef.current &&
341
+ event.movementX ** 2 + event.movementY ** 2 < 2) {
342
+ return;
343
+ }
344
+ (0, utils_ts_1.clearTimeoutIfSet)(restTimeoutRef);
345
+ if (pointerTypeRef.current === 'touch') {
346
+ handleMouseMove();
347
+ }
348
+ else {
349
+ restTimeoutPendingRef.current = true;
350
+ restTimeoutRef.current = window.setTimeout(handleMouseMove, restMsRef.current);
351
+ }
352
+ },
353
+ };
354
+ }, [mouseOnly, open]);
355
+ return React.useMemo(() => (enabled ? { reference } : {}), [enabled, reference]);
356
+ }
357
+ //# sourceMappingURL=useHover.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHover.js","sourceRoot":"","sources":["../../../src/interactions/useHover.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,92 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useInnerOffset = useInnerOffset;
4
+ const tslib_1 = require("tslib");
5
+ const React = tslib_1.__importStar(require("react"));
6
+ const ReactDOM = tslib_1.__importStar(require("react-dom"));
7
+ const use_event_1 = require("@hanzogui/use-event");
8
+ // ported from floating-ui/react/_deprecated-inner.ts useInnerOffset
9
+ // changes the inner middleware's offset upon wheel events to expand the
10
+ // floating element's height, revealing more list items.
11
+ function useInnerOffset(context, props) {
12
+ const { open, elements } = context;
13
+ const { enabled = true, overflowRef, scrollRef, onChange: unstable_onChange } = props;
14
+ const onChange = (0, use_event_1.useEvent)(unstable_onChange);
15
+ const controlledScrollingRef = React.useRef(false);
16
+ const prevScrollTopRef = React.useRef(null);
17
+ const initialOverflowRef = React.useRef(null);
18
+ React.useEffect(() => {
19
+ if (!enabled)
20
+ return;
21
+ function onWheel(e) {
22
+ if (e.ctrlKey || !el || overflowRef.current == null) {
23
+ return;
24
+ }
25
+ const dY = e.deltaY;
26
+ const isAtTop = overflowRef.current.top >= -0.5;
27
+ const isAtBottom = overflowRef.current.bottom >= -0.5;
28
+ const remainingScroll = el.scrollHeight - el.clientHeight;
29
+ const sign = dY < 0 ? -1 : 1;
30
+ const method = dY < 0 ? 'max' : 'min';
31
+ if (el.scrollHeight <= el.clientHeight) {
32
+ return;
33
+ }
34
+ if ((!isAtTop && dY > 0) || (!isAtBottom && dY < 0)) {
35
+ e.preventDefault();
36
+ ReactDOM.flushSync(() => {
37
+ onChange((d) => d + Math[method](dY, remainingScroll * sign));
38
+ });
39
+ }
40
+ else if (/firefox/i.test(navigator.userAgent)) {
41
+ // propagate scrolling during momentum phase once limited by boundary
42
+ el.scrollTop += dY;
43
+ }
44
+ }
45
+ const el = scrollRef?.current || elements.floating;
46
+ if (open && el) {
47
+ el.addEventListener('wheel', onWheel);
48
+ // wait for the position to be ready
49
+ requestAnimationFrame(() => {
50
+ prevScrollTopRef.current = el.scrollTop;
51
+ if (overflowRef.current != null) {
52
+ initialOverflowRef.current = { ...overflowRef.current };
53
+ }
54
+ });
55
+ return () => {
56
+ prevScrollTopRef.current = null;
57
+ initialOverflowRef.current = null;
58
+ el.removeEventListener('wheel', onWheel);
59
+ };
60
+ }
61
+ }, [enabled, open, elements.floating, overflowRef, scrollRef, onChange]);
62
+ const floating = React.useMemo(() => ({
63
+ onKeyDown() {
64
+ controlledScrollingRef.current = true;
65
+ },
66
+ onWheel() {
67
+ controlledScrollingRef.current = false;
68
+ },
69
+ onPointerMove() {
70
+ controlledScrollingRef.current = false;
71
+ },
72
+ onScroll() {
73
+ const el = scrollRef?.current || elements.floating;
74
+ if (!overflowRef.current || !el || !controlledScrollingRef.current) {
75
+ return;
76
+ }
77
+ if (prevScrollTopRef.current !== null) {
78
+ const scrollDiff = el.scrollTop - prevScrollTopRef.current;
79
+ if ((overflowRef.current.bottom < -0.5 && scrollDiff < -1) ||
80
+ (overflowRef.current.top < -0.5 && scrollDiff > 1)) {
81
+ ReactDOM.flushSync(() => onChange((d) => d + scrollDiff));
82
+ }
83
+ }
84
+ // [firefox] wait for the height change to have been applied
85
+ requestAnimationFrame(() => {
86
+ prevScrollTopRef.current = el.scrollTop;
87
+ });
88
+ },
89
+ }), [elements.floating, onChange, overflowRef, scrollRef]);
90
+ return React.useMemo(() => (enabled ? { floating } : {}), [enabled, floating]);
91
+ }
92
+ //# sourceMappingURL=useInnerOffset.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInnerOffset.js","sourceRoot":"","sources":["../../../src/interactions/useInnerOffset.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,88 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useInteractions = useInteractions;
4
+ // merges prop getters from multiple interaction hooks.
5
+ // event handlers are chained (all run), first non-undefined return value wins.
6
+ // non-function props: user props override hook props.
7
+ function useInteractions(propsList) {
8
+ const filtered = propsList.filter(Boolean);
9
+ // collect all event handlers by event name for each element type
10
+ const referenceFns = new Map();
11
+ const floatingFns = new Map();
12
+ const itemFns = new Map();
13
+ const referenceStatic = {};
14
+ const floatingStatic = {};
15
+ for (const props of filtered) {
16
+ if (props.reference) {
17
+ collectProps(props.reference, referenceFns, referenceStatic);
18
+ }
19
+ if (props.floating) {
20
+ collectProps(props.floating, floatingFns, floatingStatic);
21
+ }
22
+ if (props.item && typeof props.item === 'object') {
23
+ collectProps(props.item, itemFns, {});
24
+ }
25
+ }
26
+ return {
27
+ getReferenceProps(userProps) {
28
+ return buildProps(referenceFns, referenceStatic, userProps);
29
+ },
30
+ getFloatingProps(userProps) {
31
+ return buildProps(floatingFns, floatingStatic, userProps);
32
+ },
33
+ getItemProps(userProps) {
34
+ return buildProps(itemFns, {}, userProps);
35
+ },
36
+ };
37
+ }
38
+ function collectProps(props, fnMap, staticMap) {
39
+ for (const key of Object.keys(props)) {
40
+ if (typeof props[key] === 'function') {
41
+ let arr = fnMap.get(key);
42
+ if (!arr) {
43
+ arr = [];
44
+ fnMap.set(key, arr);
45
+ }
46
+ arr.push(props[key]);
47
+ }
48
+ else {
49
+ staticMap[key] = props[key];
50
+ }
51
+ }
52
+ }
53
+ function buildProps(fnMap, staticProps, userProps) {
54
+ // hook static props first, then user props override
55
+ const result = { ...staticProps };
56
+ // merge event handlers from hooks
57
+ for (const [key, fns] of fnMap) {
58
+ const hookHandler = (...args) => {
59
+ for (const fn of fns) {
60
+ const result = fn(...args);
61
+ if (result !== undefined)
62
+ return result;
63
+ }
64
+ };
65
+ result[key] = hookHandler;
66
+ }
67
+ // user props override everything — but chain event handlers
68
+ if (userProps) {
69
+ for (const key of Object.keys(userProps)) {
70
+ if (key === 'style') {
71
+ result.style = { ...result.style, ...userProps.style };
72
+ }
73
+ else if (typeof userProps[key] === 'function' && result[key]) {
74
+ const hookFn = result[key];
75
+ const userFn = userProps[key];
76
+ result[key] = (...args) => {
77
+ userFn(...args);
78
+ hookFn(...args);
79
+ };
80
+ }
81
+ else {
82
+ result[key] = userProps[key];
83
+ }
84
+ }
85
+ }
86
+ return result;
87
+ }
88
+ //# sourceMappingURL=useInteractions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useInteractions.js","sourceRoot":"","sources":["../../../src/interactions/useInteractions.ts"],"names":[],"mappings":"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"}