@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.
- package/dist/cjs/Floating.js +5 -0
- package/dist/cjs/Floating.js.map +1 -0
- package/dist/cjs/index.js +57 -0
- package/dist/cjs/index.js.map +1 -0
- package/dist/cjs/interactions/PopupTriggerMap.js +33 -0
- package/dist/cjs/interactions/PopupTriggerMap.js.map +1 -0
- package/dist/cjs/interactions/createFloatingEvents.js +31 -0
- package/dist/cjs/interactions/createFloatingEvents.js.map +1 -0
- package/dist/cjs/interactions/safePolygon.js +435 -0
- package/dist/cjs/interactions/safePolygon.js.map +1 -0
- package/dist/cjs/interactions/types.js +3 -0
- package/dist/cjs/interactions/types.js.map +1 -0
- package/dist/cjs/interactions/useClick.js +118 -0
- package/dist/cjs/interactions/useClick.js.map +1 -0
- package/dist/cjs/interactions/useDelayGroup.js +84 -0
- package/dist/cjs/interactions/useDelayGroup.js.map +1 -0
- package/dist/cjs/interactions/useFocus.js +118 -0
- package/dist/cjs/interactions/useFocus.js.map +1 -0
- package/dist/cjs/interactions/useHover.js +357 -0
- package/dist/cjs/interactions/useHover.js.map +1 -0
- package/dist/cjs/interactions/useInnerOffset.js +92 -0
- package/dist/cjs/interactions/useInnerOffset.js.map +1 -0
- package/dist/cjs/interactions/useInteractions.js +88 -0
- package/dist/cjs/interactions/useInteractions.js.map +1 -0
- package/dist/cjs/interactions/useListNavigation.js +447 -0
- package/dist/cjs/interactions/useListNavigation.js.map +1 -0
- package/dist/cjs/interactions/useRole.js +69 -0
- package/dist/cjs/interactions/useRole.js.map +1 -0
- package/dist/cjs/interactions/useTypeahead.js +121 -0
- package/dist/cjs/interactions/useTypeahead.js.map +1 -0
- package/dist/cjs/interactions/utils.js +200 -0
- package/dist/cjs/interactions/utils.js.map +1 -0
- package/dist/cjs/middleware/inner.js +82 -0
- package/dist/cjs/middleware/inner.js.map +1 -0
- package/dist/cjs/package.json +1 -0
- package/dist/cjs/useFloating.js +29 -0
- package/dist/cjs/useFloating.js.map +1 -0
- package/dist/esm/Floating.js +2 -0
- package/dist/esm/Floating.js.map +1 -0
- package/dist/esm/index.js +23 -18
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/interactions/PopupTriggerMap.js +29 -0
- package/dist/esm/interactions/PopupTriggerMap.js.map +1 -0
- package/dist/esm/interactions/createFloatingEvents.js +28 -0
- package/dist/esm/interactions/createFloatingEvents.js.map +1 -0
- package/dist/esm/interactions/safePolygon.js +432 -0
- package/dist/esm/interactions/safePolygon.js.map +1 -0
- package/dist/esm/interactions/types.js +2 -0
- package/dist/esm/interactions/types.js.map +1 -0
- package/dist/esm/interactions/useClick.js +115 -0
- package/dist/esm/interactions/useClick.js.map +1 -0
- package/dist/esm/interactions/useDelayGroup.js +78 -0
- package/dist/esm/interactions/useDelayGroup.js.map +1 -0
- package/dist/esm/interactions/useFocus.js +115 -0
- package/dist/esm/interactions/useFocus.js.map +1 -0
- package/dist/esm/interactions/useHover.js +352 -0
- package/dist/esm/interactions/useHover.js.map +1 -0
- package/dist/esm/interactions/useInnerOffset.js +88 -0
- package/dist/esm/interactions/useInnerOffset.js.map +1 -0
- package/dist/esm/interactions/useInteractions.js +85 -0
- package/dist/esm/interactions/useInteractions.js.map +1 -0
- package/dist/esm/interactions/useListNavigation.js +444 -0
- package/dist/esm/interactions/useListNavigation.js.map +1 -0
- package/dist/esm/interactions/useRole.js +65 -0
- package/dist/esm/interactions/useRole.js.map +1 -0
- package/dist/esm/interactions/useTypeahead.js +118 -0
- package/dist/esm/interactions/useTypeahead.js.map +1 -0
- package/dist/esm/interactions/utils.js +176 -0
- package/dist/esm/interactions/utils.js.map +1 -0
- package/dist/esm/middleware/inner.js +77 -0
- package/dist/esm/middleware/inner.js.map +1 -0
- package/dist/esm/useFloating.js +24 -0
- package/dist/esm/useFloating.js.map +1 -0
- package/dist/native/Floating.js +5 -0
- package/dist/native/Floating.js.map +1 -0
- package/dist/native/index.js +23 -0
- package/dist/native/index.js.map +1 -0
- package/dist/native/interactions/PopupTriggerMap.js +29 -0
- package/dist/native/interactions/PopupTriggerMap.js.map +1 -0
- package/dist/native/interactions/createFloatingEvents.js +28 -0
- package/dist/native/interactions/createFloatingEvents.js.map +1 -0
- package/dist/native/interactions/safePolygon.js +432 -0
- package/dist/native/interactions/safePolygon.js.map +1 -0
- package/dist/native/interactions/types.js +2 -0
- package/dist/native/interactions/types.js.map +1 -0
- package/dist/native/interactions/useClick.js +115 -0
- package/dist/native/interactions/useClick.js.map +1 -0
- package/dist/native/interactions/useDelayGroup.js +78 -0
- package/dist/native/interactions/useDelayGroup.js.map +1 -0
- package/dist/native/interactions/useFocus.js +115 -0
- package/dist/native/interactions/useFocus.js.map +1 -0
- package/dist/native/interactions/useHover.js +352 -0
- package/dist/native/interactions/useHover.js.map +1 -0
- package/dist/native/interactions/useInnerOffset.js +88 -0
- package/dist/native/interactions/useInnerOffset.js.map +1 -0
- package/dist/native/interactions/useInteractions.js +85 -0
- package/dist/native/interactions/useInteractions.js.map +1 -0
- package/dist/native/interactions/useListNavigation.js +444 -0
- package/dist/native/interactions/useListNavigation.js.map +1 -0
- package/dist/native/interactions/useRole.js +65 -0
- package/dist/native/interactions/useRole.js.map +1 -0
- package/dist/native/interactions/useTypeahead.js +118 -0
- package/dist/native/interactions/useTypeahead.js.map +1 -0
- package/dist/native/interactions/utils.js +176 -0
- package/dist/native/interactions/utils.js.map +1 -0
- package/dist/native/middleware/inner.js +77 -0
- package/dist/native/middleware/inner.js.map +1 -0
- package/dist/native/useFloating.js +24 -0
- package/dist/native/useFloating.js.map +1 -0
- package/package.json +16 -16
- package/src/index.ts +18 -18
- package/src/interactions/safePolygon.ts +2 -2
- package/src/interactions/types.ts +2 -2
- package/src/interactions/useClick.ts +2 -2
- package/src/interactions/useDelayGroup.ts +1 -1
- package/src/interactions/useFocus.ts +2 -2
- package/src/interactions/useHover.ts +2 -2
- package/src/interactions/useInnerOffset.ts +1 -1
- package/src/interactions/useInteractions.ts +1 -1
- package/src/interactions/useListNavigation.ts +2 -2
- package/src/interactions/useRole.ts +1 -1
- package/src/interactions/useTypeahead.ts +6 -2
- package/src/useFloating.tsx +2 -2
- package/types/index.d.ts +18 -18
- package/types/index.d.ts.map +1 -1
- package/types/interactions/PopupTriggerMap.d.ts.map +1 -1
- package/types/interactions/safePolygon.d.ts +1 -1
- package/types/interactions/safePolygon.d.ts.map +1 -1
- package/types/interactions/types.d.ts +2 -2
- package/types/interactions/types.d.ts.map +1 -1
- package/types/interactions/useClick.d.ts +1 -1
- package/types/interactions/useClick.d.ts.map +1 -1
- package/types/interactions/useDelayGroup.d.ts +1 -1
- package/types/interactions/useDelayGroup.d.ts.map +1 -1
- package/types/interactions/useFocus.d.ts +1 -1
- package/types/interactions/useFocus.d.ts.map +1 -1
- package/types/interactions/useHover.d.ts +1 -1
- package/types/interactions/useHover.d.ts.map +1 -1
- package/types/interactions/useInnerOffset.d.ts +1 -1
- package/types/interactions/useInnerOffset.d.ts.map +1 -1
- package/types/interactions/useInteractions.d.ts +1 -1
- package/types/interactions/useInteractions.d.ts.map +1 -1
- package/types/interactions/useListNavigation.d.ts +1 -1
- package/types/interactions/useListNavigation.d.ts.map +1 -1
- package/types/interactions/useRole.d.ts +1 -1
- package/types/interactions/useRole.d.ts.map +1 -1
- package/types/interactions/useTypeahead.d.ts +1 -1
- package/types/interactions/useTypeahead.d.ts.map +1 -1
- package/types/middleware/inner.d.ts.map +1 -1
- package/types/useFloating.d.ts +2 -2
- package/types/useFloating.d.ts.map +1 -1
- package/dist/cjs/Floating.cjs +0 -20
- package/dist/cjs/Floating.native.js +0 -39
- package/dist/cjs/Floating.native.js.map +0 -1
- package/dist/cjs/index.cjs +0 -73
- package/dist/cjs/index.native.js +0 -76
- package/dist/cjs/index.native.js.map +0 -1
- package/dist/cjs/interactions/PopupTriggerMap.cjs +0 -49
- package/dist/cjs/interactions/PopupTriggerMap.native.js +0 -97
- package/dist/cjs/interactions/PopupTriggerMap.native.js.map +0 -1
- package/dist/cjs/interactions/createFloatingEvents.cjs +0 -50
- package/dist/cjs/interactions/createFloatingEvents.native.js +0 -56
- package/dist/cjs/interactions/createFloatingEvents.native.js.map +0 -1
- package/dist/cjs/interactions/safePolygon.cjs +0 -273
- package/dist/cjs/interactions/safePolygon.native.js +0 -284
- package/dist/cjs/interactions/safePolygon.native.js.map +0 -1
- package/dist/cjs/interactions/types.cjs +0 -18
- package/dist/cjs/interactions/types.native.js +0 -21
- package/dist/cjs/interactions/types.native.js.map +0 -1
- package/dist/cjs/interactions/useClick.cjs +0 -124
- package/dist/cjs/interactions/useClick.native.js +0 -132
- package/dist/cjs/interactions/useClick.native.js.map +0 -1
- package/dist/cjs/interactions/useDelayGroup.cjs +0 -115
- package/dist/cjs/interactions/useDelayGroup.native.js +0 -125
- package/dist/cjs/interactions/useDelayGroup.native.js.map +0 -1
- package/dist/cjs/interactions/useFocus.cjs +0 -130
- package/dist/cjs/interactions/useFocus.native.js +0 -139
- package/dist/cjs/interactions/useFocus.native.js.map +0 -1
- package/dist/cjs/interactions/useHover.cjs +0 -357
- package/dist/cjs/interactions/useHover.native.js +0 -373
- package/dist/cjs/interactions/useHover.native.js.map +0 -1
- package/dist/cjs/interactions/useInnerOffset.cjs +0 -128
- package/dist/cjs/interactions/useInnerOffset.native.js +0 -141
- package/dist/cjs/interactions/useInnerOffset.native.js.map +0 -1
- package/dist/cjs/interactions/useInteractions.cjs +0 -105
- package/dist/cjs/interactions/useInteractions.native.js +0 -216
- package/dist/cjs/interactions/useInteractions.native.js.map +0 -1
- package/dist/cjs/interactions/useListNavigation.cjs +0 -418
- package/dist/cjs/interactions/useListNavigation.native.js +0 -433
- package/dist/cjs/interactions/useListNavigation.native.js.map +0 -1
- package/dist/cjs/interactions/useRole.cjs +0 -122
- package/dist/cjs/interactions/useRole.native.js +0 -136
- package/dist/cjs/interactions/useRole.native.js.map +0 -1
- package/dist/cjs/interactions/useTypeahead.cjs +0 -143
- package/dist/cjs/interactions/useTypeahead.native.js +0 -159
- package/dist/cjs/interactions/useTypeahead.native.js.map +0 -1
- package/dist/cjs/interactions/utils.cjs +0 -208
- package/dist/cjs/interactions/utils.native.js +0 -227
- package/dist/cjs/interactions/utils.native.js.map +0 -1
- package/dist/cjs/middleware/inner.cjs +0 -118
- package/dist/cjs/middleware/inner.native.js +0 -130
- package/dist/cjs/middleware/inner.native.js.map +0 -1
- package/dist/cjs/useFloating.cjs +0 -64
- package/dist/cjs/useFloating.native.js +0 -69
- package/dist/cjs/useFloating.native.js.map +0 -1
- package/dist/esm/Floating.mjs +0 -2
- package/dist/esm/Floating.mjs.map +0 -1
- package/dist/esm/Floating.native.js +0 -8
- package/dist/esm/Floating.native.js.map +0 -1
- package/dist/esm/index.mjs +0 -18
- package/dist/esm/index.mjs.map +0 -1
- package/dist/esm/index.native.js +0 -18
- package/dist/esm/index.native.js.map +0 -1
- package/dist/esm/interactions/PopupTriggerMap.mjs +0 -24
- package/dist/esm/interactions/PopupTriggerMap.mjs.map +0 -1
- package/dist/esm/interactions/PopupTriggerMap.native.js +0 -69
- package/dist/esm/interactions/PopupTriggerMap.native.js.map +0 -1
- package/dist/esm/interactions/createFloatingEvents.mjs +0 -25
- package/dist/esm/interactions/createFloatingEvents.mjs.map +0 -1
- package/dist/esm/interactions/createFloatingEvents.native.js +0 -28
- package/dist/esm/interactions/createFloatingEvents.native.js.map +0 -1
- package/dist/esm/interactions/safePolygon.mjs +0 -248
- package/dist/esm/interactions/safePolygon.mjs.map +0 -1
- package/dist/esm/interactions/safePolygon.native.js +0 -256
- package/dist/esm/interactions/safePolygon.native.js.map +0 -1
- package/dist/esm/interactions/types.mjs +0 -2
- package/dist/esm/interactions/types.mjs.map +0 -1
- package/dist/esm/interactions/types.native.js +0 -2
- package/dist/esm/interactions/types.native.js.map +0 -1
- package/dist/esm/interactions/useClick.mjs +0 -99
- package/dist/esm/interactions/useClick.mjs.map +0 -1
- package/dist/esm/interactions/useClick.native.js +0 -104
- package/dist/esm/interactions/useClick.native.js.map +0 -1
- package/dist/esm/interactions/useDelayGroup.mjs +0 -77
- package/dist/esm/interactions/useDelayGroup.mjs.map +0 -1
- package/dist/esm/interactions/useDelayGroup.native.js +0 -84
- package/dist/esm/interactions/useDelayGroup.native.js.map +0 -1
- package/dist/esm/interactions/useFocus.mjs +0 -105
- package/dist/esm/interactions/useFocus.mjs.map +0 -1
- package/dist/esm/interactions/useFocus.native.js +0 -111
- package/dist/esm/interactions/useFocus.native.js.map +0 -1
- package/dist/esm/interactions/useHover.mjs +0 -320
- package/dist/esm/interactions/useHover.mjs.map +0 -1
- package/dist/esm/interactions/useHover.native.js +0 -333
- package/dist/esm/interactions/useHover.native.js.map +0 -1
- package/dist/esm/interactions/useInnerOffset.mjs +0 -92
- package/dist/esm/interactions/useInnerOffset.mjs.map +0 -1
- package/dist/esm/interactions/useInnerOffset.native.js +0 -102
- package/dist/esm/interactions/useInnerOffset.native.js.map +0 -1
- package/dist/esm/interactions/useInteractions.mjs +0 -80
- package/dist/esm/interactions/useInteractions.mjs.map +0 -1
- package/dist/esm/interactions/useInteractions.native.js +0 -188
- package/dist/esm/interactions/useInteractions.native.js.map +0 -1
- package/dist/esm/interactions/useListNavigation.mjs +0 -393
- package/dist/esm/interactions/useListNavigation.mjs.map +0 -1
- package/dist/esm/interactions/useListNavigation.native.js +0 -405
- package/dist/esm/interactions/useListNavigation.native.js.map +0 -1
- package/dist/esm/interactions/useRole.mjs +0 -86
- package/dist/esm/interactions/useRole.mjs.map +0 -1
- package/dist/esm/interactions/useRole.native.js +0 -97
- package/dist/esm/interactions/useRole.native.js.map +0 -1
- package/dist/esm/interactions/useTypeahead.mjs +0 -118
- package/dist/esm/interactions/useTypeahead.mjs.map +0 -1
- package/dist/esm/interactions/useTypeahead.native.js +0 -131
- package/dist/esm/interactions/useTypeahead.native.js.map +0 -1
- package/dist/esm/interactions/utils.mjs +0 -162
- package/dist/esm/interactions/utils.mjs.map +0 -1
- package/dist/esm/interactions/utils.native.js +0 -178
- package/dist/esm/interactions/utils.native.js.map +0 -1
- package/dist/esm/middleware/inner.mjs +0 -82
- package/dist/esm/middleware/inner.mjs.map +0 -1
- package/dist/esm/middleware/inner.native.js +0 -91
- package/dist/esm/middleware/inner.native.js.map +0 -1
- package/dist/esm/useFloating.mjs +0 -27
- package/dist/esm/useFloating.mjs.map +0 -1
- package/dist/esm/useFloating.native.js +0 -29
- 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":"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"}
|
|
@@ -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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"}
|