@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,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useClick = useClick;
4
+ const react_1 = require("react");
5
+ const utils_ts_1 = require("./utils.js");
6
+ function isButtonTarget(event) {
7
+ return (0, utils_ts_1.isHTMLElement)(event.target) && event.target.tagName === 'BUTTON';
8
+ }
9
+ function isAnchorTarget(event) {
10
+ return (0, utils_ts_1.isHTMLElement)(event.target) && event.target.tagName === 'A';
11
+ }
12
+ function isSpaceIgnored(element) {
13
+ return (0, utils_ts_1.isTypeableElement)(element);
14
+ }
15
+ // click interaction: toggles open state on click/mousedown
16
+ function useClick(context, props = {}) {
17
+ const { open, onOpenChange, dataRef, elements: { domReference }, } = context;
18
+ const { enabled = true, event: eventOption = 'click', toggle = true, ignoreMouse = false, keyboardHandlers = true, stickIfOpen = true, } = props;
19
+ const pointerTypeRef = (0, react_1.useRef)(undefined);
20
+ const didKeyDownRef = (0, react_1.useRef)(false);
21
+ const reference = (0, react_1.useMemo)(() => ({
22
+ onPointerDown(event) {
23
+ pointerTypeRef.current = event.pointerType;
24
+ },
25
+ onMouseDown(event) {
26
+ const pointerType = pointerTypeRef.current;
27
+ // ignore all buttons except for the "main" button
28
+ if (event.button !== 0)
29
+ return;
30
+ if (eventOption === 'click')
31
+ return;
32
+ if ((0, utils_ts_1.isMouseLikePointerType)(pointerType, true) && ignoreMouse)
33
+ return;
34
+ if (open &&
35
+ toggle &&
36
+ (dataRef.current.openEvent && stickIfOpen
37
+ ? dataRef.current.openEvent.type === 'mousedown'
38
+ : true)) {
39
+ onOpenChange(false, event.nativeEvent || event, 'click');
40
+ }
41
+ else {
42
+ // prevent stealing focus from the floating element
43
+ event.preventDefault();
44
+ onOpenChange(true, event.nativeEvent || event, 'click');
45
+ }
46
+ },
47
+ onClick(event) {
48
+ const pointerType = pointerTypeRef.current;
49
+ if (eventOption === 'mousedown' && pointerTypeRef.current) {
50
+ pointerTypeRef.current = undefined;
51
+ return;
52
+ }
53
+ if ((0, utils_ts_1.isMouseLikePointerType)(pointerType, true) && ignoreMouse)
54
+ return;
55
+ if (open &&
56
+ toggle &&
57
+ (dataRef.current.openEvent && stickIfOpen
58
+ ? dataRef.current.openEvent.type === 'click'
59
+ : true)) {
60
+ onOpenChange(false, event.nativeEvent || event, 'click');
61
+ }
62
+ else {
63
+ onOpenChange(true, event.nativeEvent || event, 'click');
64
+ }
65
+ },
66
+ onKeyDown(event) {
67
+ pointerTypeRef.current = undefined;
68
+ if (event.defaultPrevented || !keyboardHandlers || isButtonTarget(event)) {
69
+ return;
70
+ }
71
+ if (event.key === ' ' && !isSpaceIgnored(domReference)) {
72
+ // prevent scrolling
73
+ event.preventDefault();
74
+ didKeyDownRef.current = true;
75
+ }
76
+ if (isAnchorTarget(event)) {
77
+ return;
78
+ }
79
+ if (event.key === 'Enter') {
80
+ if (open && toggle) {
81
+ onOpenChange(false, event.nativeEvent || event, 'click');
82
+ }
83
+ else {
84
+ onOpenChange(true, event.nativeEvent || event, 'click');
85
+ }
86
+ }
87
+ },
88
+ onKeyUp(event) {
89
+ if (event.defaultPrevented ||
90
+ !keyboardHandlers ||
91
+ isButtonTarget(event) ||
92
+ isSpaceIgnored(domReference)) {
93
+ return;
94
+ }
95
+ if (event.key === ' ' && didKeyDownRef.current) {
96
+ didKeyDownRef.current = false;
97
+ if (open && toggle) {
98
+ onOpenChange(false, event.nativeEvent || event, 'click');
99
+ }
100
+ else {
101
+ onOpenChange(true, event.nativeEvent || event, 'click');
102
+ }
103
+ }
104
+ },
105
+ }), [
106
+ dataRef,
107
+ domReference,
108
+ eventOption,
109
+ ignoreMouse,
110
+ keyboardHandlers,
111
+ onOpenChange,
112
+ open,
113
+ stickIfOpen,
114
+ toggle,
115
+ ]);
116
+ return (0, react_1.useMemo)(() => (enabled ? { reference } : {}), [enabled, reference]);
117
+ }
118
+ //# sourceMappingURL=useClick.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClick.js","sourceRoot":"","sources":["../../../src/interactions/useClick.ts"],"names":[],"mappings":";;;AAAA,iCAAuC;AACvC,yCAAqF;AAGrF,SAAS,cAAc,CAAC,KAAmC;IACzD,OAAO,IAAA,wBAAa,EAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAA;AACzE,CAAC;AAED,SAAS,cAAc,CAAC,KAAmC;IACzD,OAAO,IAAA,wBAAa,EAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,KAAK,GAAG,CAAA;AACpE,CAAC;AAED,SAAS,cAAc,CAAC,OAAuB;IAC7C,OAAO,IAAA,4BAAiB,EAAC,OAAO,CAAC,CAAA;AACnC,CAAC;AAED,2DAA2D;AAC3D,kBACE,OAAmC,EACnC,KAAK,GAAkB,EAAE;IAEzB,MAAM,EACJ,IAAI,EACJ,YAAY,EACZ,OAAO,EACP,QAAQ,EAAE,EAAE,YAAY,EAAE,GAC3B,GAAG,OAAO,CAAA;IACX,MAAM,EACJ,OAAO,GAAG,IAAI,EACd,KAAK,EAAE,WAAW,GAAG,OAAO,EAC5B,MAAM,GAAG,IAAI,EACb,WAAW,GAAG,KAAK,EACnB,gBAAgB,GAAG,IAAI,EACvB,WAAW,GAAG,IAAI,GACnB,GAAG,KAAK,CAAA;IAET,MAAM,cAAc,GAAG,IAAA,cAAM,EAAwC,SAAS,CAAC,CAAA;IAC/E,MAAM,aAAa,GAAG,IAAA,cAAM,EAAC,KAAK,CAAC,CAAA;IAEnC,MAAM,SAAS,GAA8B,IAAA,eAAO,EAClD,GAAG,EAAE,CAAC,CAAC;QACL,aAAa,CAAC,KAAU;YACtB,cAAc,CAAC,OAAO,GAAG,KAAK,CAAC,WAAW,CAAA;QAC5C,CAAC;QACD,WAAW,CAAC,KAAU;YACpB,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAA;YAE1C,kDAAkD;YAClD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAM;YAC9B,IAAI,WAAW,KAAK,OAAO;gBAAE,OAAM;YACnC,IAAI,IAAA,iCAAsB,EAAC,WAAW,EAAE,IAAI,CAAC,IAAI,WAAW;gBAAE,OAAM;YAEpE,IACE,IAAI;gBACJ,MAAM;gBACN,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,WAAW;oBACvC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,WAAW;oBAChD,CAAC,CAAC,IAAI,CAAC,EACT,CAAC;gBACD,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC,CAAA;YAC1D,CAAC;iBAAM,CAAC;gBACN,mDAAmD;gBACnD,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAU;YAChB,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAA;YAE1C,IAAI,WAAW,KAAK,WAAW,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC;gBAC1D,cAAc,CAAC,OAAO,GAAG,SAAS,CAAA;gBAClC,OAAM;YACR,CAAC;YAED,IAAI,IAAA,iCAAsB,EAAC,WAAW,EAAE,IAAI,CAAC,IAAI,WAAW;gBAAE,OAAM;YAEpE,IACE,IAAI;gBACJ,MAAM;gBACN,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,WAAW;oBACvC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,KAAK,OAAO;oBAC5C,CAAC,CAAC,IAAI,CAAC,EACT,CAAC;gBACD,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC,CAAA;YAC1D,CAAC;iBAAM,CAAC;gBACN,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC,CAAA;YACzD,CAAC;QACH,CAAC;QACD,SAAS,CAAC,KAAU;YAClB,cAAc,CAAC,OAAO,GAAG,SAAS,CAAA;YAElC,IAAI,KAAK,CAAC,gBAAgB,IAAI,CAAC,gBAAgB,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzE,OAAM;YACR,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;gBACvD,oBAAoB;gBACpB,KAAK,CAAC,cAAc,EAAE,CAAA;gBACtB,aAAa,CAAC,OAAO,GAAG,IAAI,CAAA;YAC9B,CAAC;YAED,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAM;YACR,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,OAAO,EAAE,CAAC;gBAC1B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;oBACnB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC,CAAA;gBAC1D,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC,CAAA;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,KAAU;YAChB,IACE,KAAK,CAAC,gBAAgB;gBACtB,CAAC,gBAAgB;gBACjB,cAAc,CAAC,KAAK,CAAC;gBACrB,cAAc,CAAC,YAAY,CAAC,EAC5B,CAAC;gBACD,OAAM;YACR,CAAC;YAED,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,aAAa,CAAC,OAAO,EAAE,CAAC;gBAC/C,aAAa,CAAC,OAAO,GAAG,KAAK,CAAA;gBAC7B,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;oBACnB,YAAY,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC,CAAA;gBAC1D,CAAC;qBAAM,CAAC;oBACN,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,IAAI,KAAK,EAAE,OAAO,CAAC,CAAA;gBACzD,CAAC;YACH,CAAC;QACH,CAAC;KACF,CAAC,EACF;QACE,OAAO;QACP,YAAY;QACZ,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,YAAY;QACZ,IAAI;QACJ,WAAW;QACX,MAAM;KACP,CACF,CAAA;IAED,OAAO,IAAA,eAAO,EAAC,GAAG,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAA;AAC5E,CAAC"}
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useDelayGroupContext = useDelayGroupContext;
4
+ exports.FloatingDelayGroup = FloatingDelayGroup;
5
+ exports.useDelayGroup = useDelayGroup;
6
+ const tslib_1 = require("tslib");
7
+ const React = tslib_1.__importStar(require("react"));
8
+ const DelayGroupContext = React.createContext({
9
+ currentId: null,
10
+ setCurrentId: () => { },
11
+ delay: 0,
12
+ timeoutMs: 0,
13
+ initialDelay: 0,
14
+ });
15
+ function useDelayGroupContext() {
16
+ return React.useContext(DelayGroupContext);
17
+ }
18
+ // provider for coordinated tooltip delay.
19
+ // when one tooltip is already open (currentId is set), subsequent tooltips
20
+ // in the group open instantly instead of with the configured delay.
21
+ function FloatingDelayGroup({ children, delay, timeoutMs = 0, }) {
22
+ const [currentId, setCurrentIdRaw] = React.useState(null);
23
+ const timeoutRef = React.useRef(undefined);
24
+ const setCurrentId = React.useCallback((id) => {
25
+ clearTimeout(timeoutRef.current);
26
+ if (id == null && timeoutMs > 0) {
27
+ // delay clearing so moving between tooltips stays instant
28
+ timeoutRef.current = setTimeout(() => {
29
+ setCurrentIdRaw(null);
30
+ }, timeoutMs);
31
+ }
32
+ else {
33
+ setCurrentIdRaw(id);
34
+ }
35
+ }, [timeoutMs]);
36
+ React.useEffect(() => {
37
+ return () => clearTimeout(timeoutRef.current);
38
+ }, []);
39
+ const value = React.useMemo(() => ({
40
+ currentId,
41
+ setCurrentId,
42
+ delay,
43
+ timeoutMs,
44
+ initialDelay: delay,
45
+ }), [currentId, setCurrentId, delay, timeoutMs]);
46
+ return React.createElement(DelayGroupContext.Provider, { value }, children);
47
+ }
48
+ // registers a tooltip with the delay group.
49
+ // returns coordinated delay: instant open when another tooltip in the group is showing.
50
+ function useDelayGroup(context, options = {}) {
51
+ const { id } = options;
52
+ const groupContext = React.useContext(DelayGroupContext);
53
+ // when this tooltip closes, start the timeout to clear the group
54
+ React.useEffect(() => {
55
+ if (!context.open && groupContext.currentId === id) {
56
+ groupContext.setCurrentId(null);
57
+ }
58
+ }, [context.open, id]);
59
+ // when another tooltip in the group opens (currentId changed to someone else),
60
+ // close this one so only one tooltip is visible at a time
61
+ React.useEffect(() => {
62
+ if (groupContext.currentId != null && groupContext.currentId !== id && context.open) {
63
+ context.onOpenChange(false);
64
+ }
65
+ }, [groupContext.currentId, id, context.open]);
66
+ // if another tooltip is currently open (currentId is set and not us),
67
+ // use instant delay for opening
68
+ if (groupContext.currentId != null) {
69
+ return {
70
+ delay: { open: 1, close: getClose(groupContext.initialDelay) },
71
+ currentId: groupContext.currentId,
72
+ };
73
+ }
74
+ return {
75
+ delay: groupContext.initialDelay,
76
+ currentId: groupContext.currentId,
77
+ };
78
+ }
79
+ function getClose(delay) {
80
+ if (typeof delay === 'number')
81
+ return delay;
82
+ return delay?.close ?? 0;
83
+ }
84
+ //# sourceMappingURL=useDelayGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDelayGroup.js","sourceRoot":"","sources":["../../../src/interactions/useDelayGroup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useFocus = useFocus;
4
+ const react_1 = require("react");
5
+ const utils_ts_1 = require("./utils.js");
6
+ function isMacSafari() {
7
+ return (0, utils_ts_1.isMac)() && (0, utils_ts_1.isSafari)();
8
+ }
9
+ // focus interaction: opens on focus, closes on blur.
10
+ // ported from floating-ui/react useFocus hook with adaptations for our context.
11
+ function useFocus(context, props = {}) {
12
+ const { open, onOpenChange, events, dataRef, elements } = context;
13
+ const { enabled = true, visibleOnly = true } = props;
14
+ const blockFocusRef = (0, react_1.useRef)(false);
15
+ const timeoutRef = (0, react_1.useRef)(-1);
16
+ const keyboardModalityRef = (0, react_1.useRef)(true);
17
+ // if the reference was focused and the user left the tab/window, and the
18
+ // floating element was not open, block focus when they return.
19
+ // also tracks keyboard vs pointer modality on mac safari.
20
+ (0, react_1.useEffect)(() => {
21
+ if (!enabled)
22
+ return;
23
+ const win = (0, utils_ts_1.getDocument)(elements.domReference).defaultView || window;
24
+ function onBlur() {
25
+ if (!open &&
26
+ (0, utils_ts_1.isHTMLElement)(elements.domReference) &&
27
+ elements.domReference === (0, utils_ts_1.activeElement)((0, utils_ts_1.getDocument)(elements.domReference))) {
28
+ blockFocusRef.current = true;
29
+ }
30
+ }
31
+ function onKeyDown() {
32
+ keyboardModalityRef.current = true;
33
+ }
34
+ function onPointerDown() {
35
+ keyboardModalityRef.current = false;
36
+ }
37
+ win.addEventListener('blur', onBlur);
38
+ if (isMacSafari()) {
39
+ win.addEventListener('keydown', onKeyDown, true);
40
+ win.addEventListener('pointerdown', onPointerDown, true);
41
+ }
42
+ return () => {
43
+ win.removeEventListener('blur', onBlur);
44
+ if (isMacSafari()) {
45
+ win.removeEventListener('keydown', onKeyDown, true);
46
+ win.removeEventListener('pointerdown', onPointerDown, true);
47
+ }
48
+ };
49
+ }, [elements.domReference, open, enabled]);
50
+ // block focus after reference-press or escape-key close,
51
+ // so that focus returning to the trigger doesn't reopen
52
+ (0, react_1.useEffect)(() => {
53
+ if (!enabled)
54
+ return;
55
+ if (!events)
56
+ return;
57
+ function handleOpenChange({ reason }) {
58
+ if (reason === 'reference-press' || reason === 'escape-key') {
59
+ blockFocusRef.current = true;
60
+ }
61
+ }
62
+ events.on('openchange', handleOpenChange);
63
+ return () => {
64
+ events.off('openchange', handleOpenChange);
65
+ };
66
+ }, [events, enabled]);
67
+ // cleanup timeout on unmount
68
+ (0, react_1.useEffect)(() => {
69
+ return () => {
70
+ (0, utils_ts_1.clearTimeoutIfSet)(timeoutRef);
71
+ };
72
+ }, []);
73
+ const reference = (0, react_1.useMemo)(() => ({
74
+ onMouseLeave() {
75
+ blockFocusRef.current = false;
76
+ },
77
+ onFocus(event) {
78
+ if (blockFocusRef.current)
79
+ return;
80
+ const target = (0, utils_ts_1.getTarget)(event.nativeEvent);
81
+ if (visibleOnly && (0, utils_ts_1.isElement)(target)) {
82
+ // safari fails to match :focus-visible if focus was initially
83
+ // outside the document
84
+ if (isMacSafari() && !event.relatedTarget) {
85
+ if (!keyboardModalityRef.current && !(0, utils_ts_1.isTypeableElement)(target)) {
86
+ return;
87
+ }
88
+ }
89
+ else if (!(0, utils_ts_1.matchesFocusVisible)(target)) {
90
+ return;
91
+ }
92
+ }
93
+ onOpenChange(true, event.nativeEvent, 'focus');
94
+ },
95
+ onBlur(event) {
96
+ blockFocusRef.current = false;
97
+ const relatedTarget = event.relatedTarget;
98
+ const nativeEvent = event.nativeEvent;
99
+ // wait for the window blur listener to fire
100
+ timeoutRef.current = window.setTimeout(() => {
101
+ const activeEl = (0, utils_ts_1.activeElement)(elements.domReference ? elements.domReference.ownerDocument : document);
102
+ // focus left the page, keep it open
103
+ if (!relatedTarget && activeEl === elements.domReference)
104
+ return;
105
+ // when focusing the reference element then clicking into the floating
106
+ // element, prevent it from hiding. we check activeElement rather than
107
+ // relatedTarget to handle shadow DOM correctly.
108
+ if ((0, utils_ts_1.contains)(context.refs.floating.current, activeEl) ||
109
+ (0, utils_ts_1.contains)(elements.domReference, activeEl)) {
110
+ return;
111
+ }
112
+ onOpenChange(false, nativeEvent, 'focus');
113
+ });
114
+ },
115
+ }), [context.refs.floating, elements.domReference, onOpenChange, visibleOnly]);
116
+ return (0, react_1.useMemo)(() => (enabled ? { reference } : {}), [enabled, reference]);
117
+ }
118
+ //# sourceMappingURL=useFocus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocus.js","sourceRoot":"","sources":["../../../src/interactions/useFocus.ts"],"names":[],"mappings":"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"}