intergalactic 15.56.0 → 15.57.0
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/CHANGELOG.md +20 -1
- package/base-trigger/lib/cjs/BaseTrigger.js +18 -18
- package/base-trigger/lib/cjs/ButtonTrigger.js +3 -3
- package/base-trigger/lib/cjs/FilterTrigger.js +7 -7
- package/base-trigger/lib/cjs/LinkTrigger.js +12 -12
- package/base-trigger/lib/es6/BaseTrigger.js +18 -18
- package/base-trigger/lib/es6/ButtonTrigger.js +3 -3
- package/base-trigger/lib/es6/FilterTrigger.js +7 -7
- package/base-trigger/lib/es6/LinkTrigger.js +12 -12
- package/components.json +73 -73
- package/date-picker/lib/cjs/components/Calendar.js +21 -21
- package/date-picker/lib/cjs/components/DateRangeComparatorAbstract.js +26 -26
- package/date-picker/lib/cjs/components/InputTrigger.js +26 -26
- package/date-picker/lib/cjs/components/PickerAbstract.js +26 -26
- package/date-picker/lib/cjs/components/RangePickerAbstract.js +26 -26
- package/date-picker/lib/es6/components/Calendar.js +21 -21
- package/date-picker/lib/es6/components/DateRangeComparatorAbstract.js +26 -26
- package/date-picker/lib/es6/components/InputTrigger.js +26 -26
- package/date-picker/lib/es6/components/PickerAbstract.js +26 -26
- package/date-picker/lib/es6/components/RangePickerAbstract.js +26 -26
- package/dropdown-menu/lib/cjs/DropdownMenu.js +2 -4
- package/dropdown-menu/lib/cjs/DropdownMenu.js.map +1 -1
- package/dropdown-menu/lib/es6/DropdownMenu.js +2 -4
- package/dropdown-menu/lib/es6/DropdownMenu.js.map +1 -1
- package/icon/Hashtag/l/index.d.ts +6 -0
- package/icon/Hashtag/l/index.js +38 -0
- package/icon/Hashtag/l/index.mjs +26 -0
- package/icon/Hashtag/m/index.d.ts +6 -0
- package/icon/Hashtag/m/index.js +38 -0
- package/icon/Hashtag/m/index.mjs +26 -0
- package/package.json +1 -1
- package/popper/index.d.ts +6 -1
- package/popper/lib/cjs/Popper.js +72 -173
- package/popper/lib/cjs/Popper.js.map +1 -1
- package/popper/lib/cjs/index.d.js.map +1 -1
- package/popper/lib/es6/Popper.js +74 -175
- package/popper/lib/es6/Popper.js.map +1 -1
- package/popper/lib/es6/index.d.js.map +1 -1
- package/popper/lib/types/index.d.ts +6 -1
- package/select/lib/cjs/InputSearch.js +6 -6
- package/select/lib/cjs/Select.js +11 -27
- package/select/lib/cjs/Select.js.map +1 -1
- package/select/lib/es6/InputSearch.js +6 -6
- package/select/lib/es6/Select.js +11 -27
- package/select/lib/es6/Select.js.map +1 -1
- package/textarea/lib/cjs/Textarea.js +8 -8
- package/textarea/lib/es6/Textarea.js +8 -8
- package/time-picker/lib/cjs/TimePicker.js +12 -12
- package/time-picker/lib/es6/TimePicker.js +12 -12
- package/tooltip/lib/cjs/Tooltip.js +2 -1
- package/tooltip/lib/cjs/Tooltip.js.map +1 -1
- package/tooltip/lib/es6/Tooltip.js +2 -1
- package/tooltip/lib/es6/Tooltip.js.map +1 -1
- package/utils/lib/focus-lock/focusBorders.d.ts +3 -0
- package/utils/lib/focus-lock/focusBorders.js +43 -0
- package/utils/lib/focus-lock/focusBorders.js.map +1 -0
- package/utils/lib/focus-lock/focusBorders.mjs +34 -0
- package/utils/lib/focus-lock/focusBorders.mjs.map +1 -0
- package/utils/lib/focus-lock/getFocusableIn.d.ts +1 -0
- package/utils/lib/focus-lock/getFocusableIn.js +26 -0
- package/utils/lib/focus-lock/getFocusableIn.js.map +1 -0
- package/utils/lib/focus-lock/getFocusableIn.mjs +19 -0
- package/utils/lib/focus-lock/getFocusableIn.mjs.map +1 -0
- package/utils/lib/focus-lock/isFocusInside.d.ts +1 -0
- package/utils/lib/focus-lock/isFocusInside.js +16 -0
- package/utils/lib/focus-lock/isFocusInside.js.map +1 -0
- package/utils/lib/focus-lock/isFocusInside.mjs +9 -0
- package/utils/lib/focus-lock/isFocusInside.mjs.map +1 -0
- package/utils/lib/focus-lock/isFocusable.d.ts +1 -0
- package/utils/lib/focus-lock/isFocusable.js +44 -0
- package/utils/lib/focus-lock/isFocusable.js.map +1 -0
- package/utils/lib/focus-lock/isFocusable.mjs +36 -0
- package/utils/lib/focus-lock/isFocusable.mjs.map +1 -0
- package/utils/lib/focus-lock/setFocus.d.ts +1 -0
- package/utils/lib/focus-lock/setFocus.js +63 -0
- package/utils/lib/focus-lock/setFocus.js.map +1 -0
- package/utils/lib/focus-lock/setFocus.mjs +55 -0
- package/utils/lib/focus-lock/setFocus.mjs.map +1 -0
- package/utils/lib/hasParent.d.ts +1 -0
- package/utils/lib/hasParent.js +14 -0
- package/utils/lib/hasParent.js.map +1 -0
- package/utils/lib/hasParent.mjs +7 -0
- package/utils/lib/hasParent.mjs.map +1 -0
- package/utils/lib/use/useFocusLock.d.ts +4 -3
- package/utils/lib/use/useFocusLock.js +45 -97
- package/utils/lib/use/useFocusLock.js.map +1 -1
- package/utils/lib/use/useFocusLock.mjs +30 -92
- package/utils/lib/use/useFocusLock.mjs.map +1 -1
@@ -1,82 +1,13 @@
|
|
1
1
|
import _typeof from "@babel/runtime/helpers/typeof";
|
2
2
|
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
|
3
3
|
import canUseDOM from "../canUseDOM.mjs";
|
4
|
-
import moveFocusInside, { focusInside, getFocusableIn } from 'focus-lock';
|
5
4
|
import LocalReact from 'react';
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
var focusMoveRequests = [];
|
12
|
-
var focusMoveDisabledUntil = 0;
|
13
|
-
var lastUserAction = 0;
|
14
|
-
var safeMoveFocusInside = function safeMoveFocusInside() {
|
15
|
-
if (focusMoveDisabledUntil > Date.now()) return;
|
16
|
-
focusMoveRequests.push(Date.now());
|
17
|
-
if (focusMoveRequests.length > 10 && Date.now() - lastUserAction > 600) {
|
18
|
-
var lastFocusMoveRequests = focusMoveRequests.slice(-10);
|
19
|
-
var timeBetweenFocusMoveRequests = lastFocusMoveRequests.slice(1).map(function (time, index) {
|
20
|
-
return Math.abs(time - lastFocusMoveRequests[index]);
|
21
|
-
});
|
22
|
-
if (timeBetweenFocusMoveRequests.every(function (time) {
|
23
|
-
return time < 250;
|
24
|
-
})) {
|
25
|
-
focusMoveDisabledUntil = Date.now() + 10000;
|
26
|
-
focusMoveRequests = [];
|
27
|
-
console.error('[useFocusLock] Probably the focus war was detected. It is a process when multiple browser focus control subjects are reacting to "blur" event on their element and are trying to get it back. Focus move function was disabled for 10 seconds. Probably your page has different focus lock systems. If you have multiple versions of Intergalactic components, updated them to the latest version (at least to 15.16.3).');
|
28
|
-
return;
|
29
|
-
}
|
30
|
-
}
|
31
|
-
if (focusMoveRequests.length > 500) focusMoveRequests = focusMoveRequests.slice(-10);
|
32
|
-
return moveFocusInside.apply(void 0, arguments);
|
33
|
-
};
|
34
|
-
if (canUseDOM()) {
|
35
|
-
document.addEventListener('keydown', function () {
|
36
|
-
lastUserAction = Date.now();
|
37
|
-
});
|
38
|
-
document.addEventListener('mousedown', function () {
|
39
|
-
lastUserAction = Date.now();
|
40
|
-
});
|
41
|
-
}
|
5
|
+
import { isFocusInside } from "../focus-lock/isFocusInside.mjs";
|
6
|
+
import { setFocus } from "../focus-lock/setFocus.mjs";
|
7
|
+
import { getFocusableIn } from "../focus-lock/getFocusableIn.mjs";
|
8
|
+
import { addFocusBorders, removeFocusBorders, areFocusBordersPlacedCorrectly } from "../focus-lock/focusBorders.mjs";
|
9
|
+
export { isFocusInside, setFocus };
|
42
10
|
var focusBordersConsumers = new Set();
|
43
|
-
var focusBordersRefs = {
|
44
|
-
before: null,
|
45
|
-
after: null
|
46
|
-
};
|
47
|
-
var addBorders = function addBorders() {
|
48
|
-
if (!focusBordersRefs.before) {
|
49
|
-
focusBordersRefs.before = document.createElement('div');
|
50
|
-
focusBordersRefs.before.setAttribute('tabindex', '0');
|
51
|
-
focusBordersRefs.before.style.position = 'fixed';
|
52
|
-
focusBordersRefs.before.dataset.id = '__intergalactic-focus-border-before';
|
53
|
-
document.body.prepend(focusBordersRefs.before);
|
54
|
-
}
|
55
|
-
if (!focusBordersRefs.after) {
|
56
|
-
focusBordersRefs.after = document.createElement('div');
|
57
|
-
focusBordersRefs.after.setAttribute('tabindex', '0');
|
58
|
-
focusBordersRefs.after.dataset.id = '__intergalactic-focus-border-after';
|
59
|
-
focusBordersRefs.after.style.position = 'fixed';
|
60
|
-
document.body.append(focusBordersRefs.after);
|
61
|
-
}
|
62
|
-
};
|
63
|
-
var removeBorders = function removeBorders() {
|
64
|
-
var _focusBordersRefs$bef, _focusBordersRefs$aft;
|
65
|
-
(_focusBordersRefs$bef = focusBordersRefs.before) === null || _focusBordersRefs$bef === void 0 ? void 0 : _focusBordersRefs$bef.remove();
|
66
|
-
(_focusBordersRefs$aft = focusBordersRefs.after) === null || _focusBordersRefs$aft === void 0 ? void 0 : _focusBordersRefs$aft.remove();
|
67
|
-
focusBordersRefs.before = null;
|
68
|
-
focusBordersRefs.after = null;
|
69
|
-
};
|
70
|
-
var areBordersPlacedCorrectly = function areBordersPlacedCorrectly() {
|
71
|
-
if (!focusBordersRefs.before || !focusBordersRefs.after) return true;
|
72
|
-
if (document.body.children[0] !== focusBordersRefs.before) return false;
|
73
|
-
if (document.body.children[document.body.children.length - 1] !== focusBordersRefs.after) return false;
|
74
|
-
return true;
|
75
|
-
};
|
76
|
-
var uniqueId = 0;
|
77
|
-
var getUniqueId = function getUniqueId(prefix) {
|
78
|
-
return "".concat(prefix, "-").concat(Math.random().toString(36).slice(2), "-").concat(uniqueId++);
|
79
|
-
};
|
80
11
|
var useFocusBorders = function useFocusBorders(React, disabled) {
|
81
12
|
useUniqueIdHookMock(React);
|
82
13
|
React.useEffect(function () {
|
@@ -84,14 +15,19 @@ var useFocusBorders = function useFocusBorders(React, disabled) {
|
|
84
15
|
if (!disabled) {
|
85
16
|
focusBordersConsumers.add(id);
|
86
17
|
}
|
87
|
-
if (!
|
88
|
-
if (focusBordersConsumers.size > 0)
|
18
|
+
if (!areFocusBordersPlacedCorrectly()) removeFocusBorders();
|
19
|
+
if (focusBordersConsumers.size > 0) addFocusBorders();
|
89
20
|
return function () {
|
90
21
|
focusBordersConsumers["delete"](id);
|
91
|
-
if (focusBordersConsumers.size === 0)
|
22
|
+
if (focusBordersConsumers.size === 0) removeFocusBorders();
|
92
23
|
};
|
93
24
|
}, [disabled]);
|
94
25
|
};
|
26
|
+
var uniqueId = 0;
|
27
|
+
var getUniqueId = function getUniqueId(prefix) {
|
28
|
+
return "".concat(prefix, "-").concat(Math.random().toString(36).slice(2), "-").concat(uniqueId++);
|
29
|
+
};
|
30
|
+
|
95
31
|
/**
|
96
32
|
* # Focus lock hook merging
|
97
33
|
* In some cases same page might contain different versions of components.
|
@@ -143,11 +79,13 @@ var useUniqueIdHookMock = function useUniqueIdHookMock(React) {
|
|
143
79
|
var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, returnFocusTo) {
|
144
80
|
var disabled = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
145
81
|
var focusMaster = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
|
82
|
+
var onFocusOut = arguments.length > 6 ? arguments[6] : undefined;
|
146
83
|
useFocusBorders(React, disabled);
|
147
84
|
var autoTriggerRef = React.useRef(null);
|
148
85
|
var lastUserInteractionRef = React.useRef(undefined);
|
149
|
-
var
|
150
|
-
var focusCameFrom = event.
|
86
|
+
var handleFocusOut = React.useCallback(function (event) {
|
87
|
+
var focusCameFrom = event.target;
|
88
|
+
var focusMovedTo = event.relatedTarget;
|
151
89
|
setTimeout(function () {
|
152
90
|
if (!focusCameFrom) return;
|
153
91
|
if (autoTriggerRef.current) return;
|
@@ -159,12 +97,13 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
|
|
159
97
|
var currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];
|
160
98
|
if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;
|
161
99
|
var trapNodes = currentFocusMaster ? [trapRef.current] : [trapRef.current].concat(_toConsumableArray(focusLockAllTraps));
|
162
|
-
if (
|
100
|
+
if (isFocusInside(trapNodes, focusMovedTo)) return;
|
163
101
|
if (focusCameFrom) {
|
164
|
-
|
102
|
+
setFocus(trapRef.current, focusCameFrom, focusMovedTo);
|
165
103
|
}
|
104
|
+
onFocusOut === null || onFocusOut === void 0 ? void 0 : onFocusOut(event);
|
166
105
|
});
|
167
|
-
}, []);
|
106
|
+
}, [onFocusOut]);
|
168
107
|
var handleMouseEvent = React.useCallback(function () {
|
169
108
|
lastUserInteractionRef.current = 'mouse';
|
170
109
|
}, []);
|
@@ -173,17 +112,17 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
|
|
173
112
|
}, []);
|
174
113
|
var returnFocus = React.useCallback(function () {
|
175
114
|
var trapNode = trapRef.current;
|
176
|
-
if (!
|
115
|
+
if (trapNode && !isFocusInside(trapNode)) return;
|
177
116
|
if (_typeof(returnFocusTo) === 'object' && returnFocusTo !== null && returnFocusTo !== void 0 && returnFocusTo.current) {
|
178
117
|
var returnFocusNode = returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current;
|
179
118
|
setTimeout(function () {
|
180
|
-
return
|
119
|
+
return setFocus(returnFocusNode, trapNode);
|
181
120
|
}, 0);
|
182
121
|
}
|
183
122
|
if (returnFocusTo === 'auto' && autoTriggerRef.current) {
|
184
123
|
var autoTrigger = autoTriggerRef.current;
|
185
124
|
setTimeout(function () {
|
186
|
-
return
|
125
|
+
return setFocus(autoTrigger, trapNode);
|
187
126
|
}, 0);
|
188
127
|
}
|
189
128
|
}, [returnFocusTo]);
|
@@ -196,7 +135,7 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
|
|
196
135
|
if (!node) return;
|
197
136
|
focusLockAllTraps["delete"](node);
|
198
137
|
};
|
199
|
-
}, []);
|
138
|
+
}, [disabled]);
|
200
139
|
React.useEffect(function () {
|
201
140
|
if (_typeof(trapRef) !== 'object' || trapRef === null) return;
|
202
141
|
if (disabled) return;
|
@@ -222,13 +161,13 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
|
|
222
161
|
return getFocusableIn(node);
|
223
162
|
});
|
224
163
|
if (focusableChildren.length === 0) return;
|
225
|
-
document.body.addEventListener('
|
164
|
+
document.body.addEventListener('focusout', handleFocusOut);
|
226
165
|
document.body.addEventListener('mousedown', handleMouseEvent);
|
227
166
|
document.body.addEventListener('touchstart', handleMouseEvent);
|
228
167
|
document.body.addEventListener('keydown', handleKeyboardEvent);
|
229
|
-
if (autoFocus)
|
168
|
+
if (autoFocus) setFocus(trapRef.current, _typeof(returnFocusTo) === 'object' ? returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current : document.body);
|
230
169
|
return function () {
|
231
|
-
document.body.removeEventListener('
|
170
|
+
document.body.removeEventListener('focusout', handleFocusOut);
|
232
171
|
document.body.removeEventListener('mousedown', handleMouseEvent);
|
233
172
|
document.body.removeEventListener('touchstart', handleMouseEvent);
|
234
173
|
document.body.removeEventListener('keydown', handleKeyboardEvent);
|
@@ -269,14 +208,13 @@ export var useFocusLock = function useFocusLock(trapRef, autoFocus, returnFocusT
|
|
269
208
|
var _globalFocusLockHookK2, _globalFocusLockHookK3;
|
270
209
|
var disabled = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
271
210
|
var focusMaster = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
211
|
+
var onFocusOut = arguments.length > 5 ? arguments[5] : undefined;
|
272
212
|
var hook = (_globalFocusLockHookK2 = (_globalFocusLockHookK3 = globalThis[globalFocusLockHookKey]) === null || _globalFocusLockHookK3 === void 0 ? void 0 : _globalFocusLockHookK3.hook) !== null && _globalFocusLockHookK2 !== void 0 ? _globalFocusLockHookK2 : useFocusLockHook;
|
273
|
-
return hook(LocalReact, trapRef, autoFocus, returnFocusTo, disabled, focusMaster);
|
213
|
+
return hook(LocalReact, trapRef, autoFocus, returnFocusTo, disabled, focusMaster, onFocusOut);
|
274
214
|
};
|
275
215
|
export var hasFocusableIn = function hasFocusableIn(element) {
|
276
216
|
return Array.from(element.children).flatMap(function (node) {
|
277
217
|
return getFocusableIn(node);
|
278
218
|
}).length > 0;
|
279
219
|
};
|
280
|
-
export var isFocusInside = focusInside;
|
281
|
-
export var setFocus = safeMoveFocusInside;
|
282
220
|
//# sourceMappingURL=useFocusLock.mjs.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useFocusLock.mjs","names":["canUseDOM","moveFocusInside","focusInside","getFocusableIn","LocalReact","focusMoveRequests","focusMoveDisabledUntil","lastUserAction","safeMoveFocusInside","Date","now","push","length","lastFocusMoveRequests","slice","timeBetweenFocusMoveRequests","map","time","index","Math","abs","every","console","error","apply","arguments","document","addEventListener","focusBordersConsumers","Set","focusBordersRefs","before","after","addBorders","createElement","setAttribute","style","position","dataset","id","body","prepend","append","removeBorders","_focusBordersRefs$bef","_focusBordersRefs$aft","remove","areBordersPlacedCorrectly","children","uniqueId","getUniqueId","prefix","concat","random","toString","useFocusBorders","React","disabled","useUniqueIdHookMock","useEffect","add","size","focusLockVersion","globalFocusLockHookKey","focusLockAllTraps","focusLockUsedInMountedComponents","focusMastersStack","noop","useState","undefined","useEnhancedEffect","useLayoutEffect","useFocusLockHook","trapRef","autoFocus","returnFocusTo","focusMaster","autoTriggerRef","useRef","lastUserInteractionRef","handleFocusIn","useCallback","event","focusCameFrom","relatedTarget","setTimeout","current","Promise","resolve","then","currentFocusMaster","trapNodes","_toConsumableArray","handleMouseEvent","handleKeyboardEvent","returnFocus","trapNode","_typeof","returnFocusNode","autoTrigger","node","pop","splice","indexOf","focusableChildren","Array","from","flatMap","removeEventListener","establishHookAsGlobal","globalThis","hook","version","usedInComponents","_globalFocusLockHookK","theirVersion","useFocusLock","_globalFocusLockHookK2","_globalFocusLockHookK3","hasFocusableIn","element","isFocusInside","setFocus"],"sources":["../../src/use/useFocusLock.ts"],"sourcesContent":["import canUseDOM from '../canUseDOM';\nimport moveFocusInside, { focusInside, getFocusableIn } from 'focus-lock';\nimport LocalReact from 'react';\n\n/** \"safe\" focus movement means that function wrapper tries\n * to detect focus war (when two focus locks are trying to\n * control focus recursively) and disables it for 10 seconds\n */\nlet focusMoveRequests: number[] = [];\nlet focusMoveDisabledUntil = 0;\nlet lastUserAction = 0;\nconst safeMoveFocusInside: typeof moveFocusInside = (...args) => {\n if (focusMoveDisabledUntil > Date.now()) return;\n focusMoveRequests.push(Date.now());\n if (focusMoveRequests.length > 10 && Date.now() - lastUserAction > 600) {\n const lastFocusMoveRequests = focusMoveRequests.slice(-10);\n const timeBetweenFocusMoveRequests = lastFocusMoveRequests\n .slice(1)\n .map((time, index) => Math.abs(time - lastFocusMoveRequests[index]));\n if (timeBetweenFocusMoveRequests.every((time) => time < 250)) {\n focusMoveDisabledUntil = Date.now() + 10000;\n focusMoveRequests = [];\n console.error(\n '[useFocusLock] Probably the focus war was detected. It is a process when multiple browser focus control subjects are reacting to \"blur\" event on their element and are trying to get it back. Focus move function was disabled for 10 seconds. Probably your page has different focus lock systems. If you have multiple versions of Intergalactic components, updated them to the latest version (at least to 15.16.3).',\n );\n return;\n }\n }\n if (focusMoveRequests.length > 500) focusMoveRequests = focusMoveRequests.slice(-10);\n\n return moveFocusInside(...args);\n};\nif (canUseDOM()) {\n document.addEventListener('keydown', () => {\n lastUserAction = Date.now();\n });\n document.addEventListener('mousedown', () => {\n lastUserAction = Date.now();\n });\n}\n\nconst focusBordersConsumers = new Set();\nconst focusBordersRefs: {\n before: HTMLElement | null;\n after: HTMLElement | null;\n} = { before: null, after: null };\n\nconst addBorders = () => {\n if (!focusBordersRefs.before) {\n focusBordersRefs.before = document.createElement('div');\n focusBordersRefs.before.setAttribute('tabindex', '0');\n focusBordersRefs.before.style.position = 'fixed';\n focusBordersRefs.before.dataset.id = '__intergalactic-focus-border-before';\n document.body.prepend(focusBordersRefs.before);\n }\n if (!focusBordersRefs.after) {\n focusBordersRefs.after = document.createElement('div');\n focusBordersRefs.after.setAttribute('tabindex', '0');\n focusBordersRefs.after.dataset.id = '__intergalactic-focus-border-after';\n focusBordersRefs.after.style.position = 'fixed';\n document.body.append(focusBordersRefs.after);\n }\n};\nconst removeBorders = () => {\n focusBordersRefs.before?.remove();\n focusBordersRefs.after?.remove();\n focusBordersRefs.before = null;\n focusBordersRefs.after = null;\n};\nconst areBordersPlacedCorrectly = () => {\n if (!focusBordersRefs.before || !focusBordersRefs.after) return true;\n if (document.body.children[0] !== focusBordersRefs.before) return false;\n if (document.body.children[document.body.children.length - 1] !== focusBordersRefs.after)\n return false;\n return true;\n};\n\ntype ReactT = typeof LocalReact;\n\nlet uniqueId = 0;\nconst getUniqueId = (prefix: string) =>\n `${prefix}-${Math.random().toString(36).slice(2)}-${uniqueId++}`;\nconst useFocusBorders = (React: ReactT, disabled?: boolean) => {\n useUniqueIdHookMock(React);\n React.useEffect(() => {\n const id = getUniqueId('focus-borders-consumer');\n if (!disabled) {\n focusBordersConsumers.add(id);\n }\n\n if (!areBordersPlacedCorrectly()) removeBorders();\n if (focusBordersConsumers.size > 0) addBorders();\n\n return () => {\n focusBordersConsumers.delete(id);\n if (focusBordersConsumers.size === 0) removeBorders();\n };\n }, [disabled]);\n};\n/**\n * # Focus lock hook merging\n * In some cases same page might contain different versions of components.\n * In such cases, we need to ensure that only one version of focus lock hook is used.\n * So, it's why we have `useFocusLockHook` function that is wrapped into `useFocusLock`.\n *\n * While evaluating this file code, we check if global focus lock hook is already defined.\n * If it's defined, we replace it ONLY if our version is higher and no components currently use it.\n * The last condition is very important because we are unable to replace React hook without reimplementing\n * React hooks lifecycle in some kind of wrapper.\n *\n * ## Versioning\n * Such versions merging requires us to keep hook api backward compatible.\n * When hook logic changes, the variable `focusLockVersion` should be incremented.\n *\n * Version update `1 -> 2`. Fixed call `safeMoveFocusInside` in `handleFocusIn` with correct second parameter (focusCameFrom instead of event.target)\n * Version update `2 -> 3`. Fixed React version isolation in nested hooks (`useFocusBorders`, `useUniqueId`).\n *\n * Initially (for a several versions) key was `__intergalactic_focus_lock_hook_`.\n * Making it respect react version required to change key. So key was changed to `__intergalactic_focus_lock_hook_react_v_respectful`.\n *\n * ## React hooks order\n * When updating from version 2 to version 3 `useUniqueId` hook was removed.\n * Due to replacing useFocusLock hook in runtime, the order of hooks must be preserved.\n * So, useUniqueIdHookMock helps to preserve hooks order when hook is being replaced from version 2 to version 3.\n *\n * If new update requires to remove some hooks – add mocks instead of them.\n * If new update requires to add some hooks and no workaround with current hooks list is possible – probably focus lock hook key should be changed.\n */\nconst focusLockVersion = 3;\nconst globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';\n\nconst focusLockAllTraps = new Set<HTMLElement>();\nconst focusLockUsedInMountedComponents = new Set<string>();\n/** Focus master is a special mode in which focus lock might work.\n * Normally, focus lock hook allows user focus to move freely between\n * all active focus traps. When component provides `focusMaster=true`\n * parameter, it says that it doesn't want to share focus with other traps.\n * It is very useful for a big components like modals or side-bars that\n * also have some visual backdrop.\n * The last element in focus masters stack is considered as a current focus master.\n */\nconst focusMastersStack: HTMLElement[] = [];\n\nconst noop = () => {};\nconst useUniqueIdHookMock = (React: ReactT) => {\n React.useState(undefined);\n const useEnhancedEffect = canUseDOM() ? React.useLayoutEffect : React.useEffect;\n useEnhancedEffect(noop, []);\n};\n\nconst useFocusLockHook = (\n React: ReactT,\n trapRef: React.RefObject<HTMLElement>,\n autoFocus: boolean,\n returnFocusTo: React.RefObject<HTMLElement> | null | 'auto',\n disabled = false,\n focusMaster = false,\n) => {\n useFocusBorders(React, disabled);\n\n const autoTriggerRef = React.useRef<HTMLElement | null>(null);\n const lastUserInteractionRef = React.useRef<'mouse' | 'keyboard' | undefined>(undefined);\n\n const handleFocusIn = React.useCallback(\n (event: Event & { relatedTarget?: HTMLElement; target?: HTMLElement }) => {\n const focusCameFrom = event.relatedTarget;\n setTimeout(() => {\n if (!focusCameFrom) return;\n if (autoTriggerRef.current) return;\n autoTriggerRef.current = focusCameFrom;\n }, 0);\n if (lastUserInteractionRef.current === 'mouse') return;\n Promise.resolve().then(() => {\n if (!trapRef.current) return;\n const currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];\n if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;\n const trapNodes = currentFocusMaster\n ? [trapRef.current]\n : [trapRef.current, ...focusLockAllTraps];\n if (focusInside(trapNodes)) return;\n\n if (focusCameFrom) {\n safeMoveFocusInside(trapRef.current, focusCameFrom);\n }\n });\n },\n [],\n );\n const handleMouseEvent = React.useCallback(() => {\n lastUserInteractionRef.current = 'mouse';\n }, []);\n const handleKeyboardEvent = React.useCallback(() => {\n lastUserInteractionRef.current = 'keyboard';\n }, []);\n const returnFocus = React.useCallback(() => {\n const trapNode = trapRef.current!;\n if (!focusInside(trapNode)) return;\n if (typeof returnFocusTo === 'object' && returnFocusTo?.current) {\n const returnFocusNode = returnFocusTo?.current;\n setTimeout(() => safeMoveFocusInside(returnFocusNode, trapNode), 0);\n }\n if (returnFocusTo === 'auto' && autoTriggerRef.current) {\n const autoTrigger = autoTriggerRef.current;\n setTimeout(() => safeMoveFocusInside(autoTrigger, trapNode), 0);\n }\n }, [returnFocusTo]);\n React.useEffect(() => {\n if (typeof trapRef !== 'object' || trapRef === null) return;\n const node = trapRef.current;\n if (!node) return;\n focusLockAllTraps.add(node);\n return () => {\n if (!node) return;\n focusLockAllTraps.delete(node);\n };\n }, []);\n React.useEffect(() => {\n if (typeof trapRef !== 'object' || trapRef === null) return;\n if (disabled) return;\n if (!canUseDOM()) return;\n if (!trapRef.current) return;\n\n if (focusMaster) {\n focusMastersStack.push(trapRef.current);\n }\n\n return () => {\n if (!focusMaster) return;\n if (focusMastersStack[focusMastersStack.length - 1] === trapRef.current) {\n focusMastersStack.pop();\n } else {\n focusMastersStack.splice(focusMastersStack.indexOf(trapRef.current!), 1);\n }\n };\n }, [disabled, focusMaster]);\n React.useEffect(() => {\n if (disabled) return;\n if (!canUseDOM()) return;\n if (!trapRef.current) return;\n const focusableChildren = Array.from(trapRef.current.children).flatMap((node) =>\n getFocusableIn(node as HTMLElement),\n );\n if (focusableChildren.length === 0) return;\n\n document.body.addEventListener('focusin', handleFocusIn as any);\n document.body.addEventListener('mousedown', handleMouseEvent);\n document.body.addEventListener('touchstart', handleMouseEvent);\n document.body.addEventListener('keydown', handleKeyboardEvent);\n\n if (autoFocus)\n safeMoveFocusInside(\n trapRef.current,\n typeof returnFocusTo === 'object' ? returnFocusTo?.current! : document.body,\n );\n\n return () => {\n document.body.removeEventListener('focusin', handleFocusIn as any);\n document.body.removeEventListener('mousedown', handleMouseEvent);\n document.body.removeEventListener('touchstart', handleMouseEvent);\n document.body.removeEventListener('keydown', handleKeyboardEvent);\n returnFocus();\n autoTriggerRef.current = null;\n };\n }, [disabled, autoFocus, returnFocusTo, returnFocus]);\n\n useUniqueIdHookMock(React);\n React.useEffect(() => {\n const id = getUniqueId('focus-lock-consumer');\n if (disabled) return;\n focusLockUsedInMountedComponents.add(id);\n return () => {\n focusLockUsedInMountedComponents.delete(id);\n };\n }, [disabled]);\n};\nconst establishHookAsGlobal = () => {\n (globalThis as any)[globalFocusLockHookKey] = {\n hook: useFocusLockHook,\n version: focusLockVersion,\n usedInComponents: focusLockUsedInMountedComponents,\n };\n};\nif (!(globalThis as any)[globalFocusLockHookKey]) {\n establishHookAsGlobal();\n} else if (typeof (globalThis as any)[globalFocusLockHookKey].version !== 'number') {\n establishHookAsGlobal();\n} else {\n const { version: theirVersion, usedInComponents } = (globalThis as any)[globalFocusLockHookKey];\n if (focusLockVersion > theirVersion && usedInComponents.size === 0) {\n establishHookAsGlobal();\n }\n}\n\nexport const useFocusLock = (\n trapRef: React.RefObject<HTMLElement>,\n autoFocus: boolean,\n returnFocusTo: React.RefObject<HTMLElement> | null | 'auto',\n disabled = false,\n focusMaster = false,\n) => {\n const hook = (globalThis as any)[globalFocusLockHookKey]?.hook ?? useFocusLockHook;\n return hook(LocalReact, trapRef, autoFocus, returnFocusTo, disabled, focusMaster);\n};\n\nexport const hasFocusableIn = (element: HTMLElement): boolean => {\n return (\n Array.from(element.children).flatMap((node) => getFocusableIn(node as HTMLElement)).length > 0\n );\n};\nexport const isFocusInside = focusInside;\nexport const setFocus = safeMoveFocusInside as (topNode: HTMLElement, lastNode?: Element) => void;\n"],"mappings":"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"}
|
1
|
+
{"version":3,"file":"useFocusLock.mjs","names":["canUseDOM","LocalReact","isFocusInside","setFocus","getFocusableIn","addFocusBorders","removeFocusBorders","areFocusBordersPlacedCorrectly","focusBordersConsumers","Set","useFocusBorders","React","disabled","useUniqueIdHookMock","useEffect","id","getUniqueId","add","size","uniqueId","prefix","concat","Math","random","toString","slice","focusLockVersion","globalFocusLockHookKey","focusLockAllTraps","focusLockUsedInMountedComponents","focusMastersStack","noop","useState","undefined","useEnhancedEffect","useLayoutEffect","useFocusLockHook","trapRef","autoFocus","returnFocusTo","arguments","length","focusMaster","onFocusOut","autoTriggerRef","useRef","lastUserInteractionRef","handleFocusOut","useCallback","event","focusCameFrom","target","focusMovedTo","relatedTarget","setTimeout","current","Promise","resolve","then","currentFocusMaster","trapNodes","_toConsumableArray","handleMouseEvent","handleKeyboardEvent","returnFocus","trapNode","_typeof","returnFocusNode","autoTrigger","node","push","pop","splice","indexOf","focusableChildren","Array","from","children","flatMap","document","body","addEventListener","removeEventListener","establishHookAsGlobal","globalThis","hook","version","usedInComponents","_globalFocusLockHookK","theirVersion","useFocusLock","_globalFocusLockHookK2","_globalFocusLockHookK3","hasFocusableIn","element"],"sources":["../../src/use/useFocusLock.ts"],"sourcesContent":["import canUseDOM from '../canUseDOM';\nimport LocalReact from 'react';\n\nimport { isFocusInside } from '../focus-lock/isFocusInside';\nimport { setFocus } from '../focus-lock/setFocus';\nimport { getFocusableIn } from '../focus-lock/getFocusableIn';\nimport {\n addFocusBorders,\n removeFocusBorders,\n areFocusBordersPlacedCorrectly,\n} from '../focus-lock/focusBorders';\n\nexport { isFocusInside, setFocus };\n\nconst focusBordersConsumers = new Set();\n\nconst useFocusBorders = (React: ReactT, disabled?: boolean) => {\n useUniqueIdHookMock(React);\n React.useEffect(() => {\n const id = getUniqueId('focus-borders-consumer');\n if (!disabled) {\n focusBordersConsumers.add(id);\n }\n\n if (!areFocusBordersPlacedCorrectly()) removeFocusBorders();\n if (focusBordersConsumers.size > 0) addFocusBorders();\n\n return () => {\n focusBordersConsumers.delete(id);\n if (focusBordersConsumers.size === 0) removeFocusBorders();\n };\n }, [disabled]);\n};\n\ntype ReactT = typeof LocalReact;\n\nlet uniqueId = 0;\nconst getUniqueId = (prefix: string) =>\n `${prefix}-${Math.random().toString(36).slice(2)}-${uniqueId++}`;\n\n/**\n * # Focus lock hook merging\n * In some cases same page might contain different versions of components.\n * In such cases, we need to ensure that only one version of focus lock hook is used.\n * So, it's why we have `useFocusLockHook` function that is wrapped into `useFocusLock`.\n *\n * While evaluating this file code, we check if global focus lock hook is already defined.\n * If it's defined, we replace it ONLY if our version is higher and no components currently use it.\n * The last condition is very important because we are unable to replace React hook without reimplementing\n * React hooks lifecycle in some kind of wrapper.\n *\n * ## Versioning\n * Such versions merging requires us to keep hook api backward compatible.\n * When hook logic changes, the variable `focusLockVersion` should be incremented.\n *\n * Version update `1 -> 2`. Fixed call `safeMoveFocusInside` in `handleFocusIn` with correct second parameter (focusCameFrom instead of event.target)\n * Version update `2 -> 3`. Fixed React version isolation in nested hooks (`useFocusBorders`, `useUniqueId`).\n *\n * Initially (for a several versions) key was `__intergalactic_focus_lock_hook_`.\n * Making it respect react version required to change key. So key was changed to `__intergalactic_focus_lock_hook_react_v_respectful`.\n *\n * ## React hooks order\n * When updating from version 2 to version 3 `useUniqueId` hook was removed.\n * Due to replacing useFocusLock hook in runtime, the order of hooks must be preserved.\n * So, useUniqueIdHookMock helps to preserve hooks order when hook is being replaced from version 2 to version 3.\n *\n * If new update requires to remove some hooks – add mocks instead of them.\n * If new update requires to add some hooks and no workaround with current hooks list is possible – probably focus lock hook key should be changed.\n */\nconst focusLockVersion = 3;\nconst globalFocusLockHookKey = '__intergalactic_focus_lock_hook_react_v_respectful';\n\nconst focusLockAllTraps = new Set<HTMLElement>();\nconst focusLockUsedInMountedComponents = new Set<string>();\n/** Focus master is a special mode in which focus lock might work.\n * Normally, focus lock hook allows user focus to move freely between\n * all active focus traps. When component provides `focusMaster=true`\n * parameter, it says that it doesn't want to share focus with other traps.\n * It is very useful for a big components like modals or side-bars that\n * also have some visual backdrop.\n * The last element in focus masters stack is considered as a current focus master.\n */\nconst focusMastersStack: HTMLElement[] = [];\n\nconst noop = () => {};\nconst useUniqueIdHookMock = (React: ReactT) => {\n React.useState(undefined);\n const useEnhancedEffect = canUseDOM() ? React.useLayoutEffect : React.useEffect;\n useEnhancedEffect(noop, []);\n};\n\nconst useFocusLockHook = (\n React: ReactT,\n trapRef: React.RefObject<HTMLElement>,\n autoFocus: boolean,\n returnFocusTo: React.RefObject<HTMLElement> | null | 'auto',\n disabled = false,\n focusMaster = false,\n onFocusOut?: (event: Event) => void,\n) => {\n useFocusBorders(React, disabled);\n\n const autoTriggerRef = React.useRef<HTMLElement | null>(null);\n const lastUserInteractionRef = React.useRef<'mouse' | 'keyboard' | undefined>(undefined);\n\n const handleFocusOut = React.useCallback(\n (event: Event & { relatedTarget?: HTMLElement; target?: HTMLElement }) => {\n const focusCameFrom = event.target;\n const focusMovedTo = event.relatedTarget;\n\n setTimeout(() => {\n if (!focusCameFrom) return;\n if (autoTriggerRef.current) return;\n autoTriggerRef.current = focusCameFrom;\n }, 0);\n if (lastUserInteractionRef.current === 'mouse') return;\n Promise.resolve().then(() => {\n if (!trapRef.current) return;\n const currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];\n if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;\n const trapNodes = currentFocusMaster\n ? [trapRef.current]\n : [trapRef.current, ...focusLockAllTraps];\n if (isFocusInside(trapNodes, focusMovedTo)) return;\n\n if (focusCameFrom) {\n setFocus(trapRef.current, focusCameFrom, focusMovedTo);\n }\n\n onFocusOut?.(event);\n });\n },\n [onFocusOut],\n );\n const handleMouseEvent = React.useCallback(() => {\n lastUserInteractionRef.current = 'mouse';\n }, []);\n const handleKeyboardEvent = React.useCallback(() => {\n lastUserInteractionRef.current = 'keyboard';\n }, []);\n const returnFocus = React.useCallback(() => {\n const trapNode = trapRef.current;\n if (trapNode && !isFocusInside(trapNode)) return;\n if (typeof returnFocusTo === 'object' && returnFocusTo?.current) {\n const returnFocusNode = returnFocusTo?.current;\n setTimeout(() => setFocus(returnFocusNode, trapNode), 0);\n }\n if (returnFocusTo === 'auto' && autoTriggerRef.current) {\n const autoTrigger = autoTriggerRef.current;\n setTimeout(() => setFocus(autoTrigger, trapNode), 0);\n }\n }, [returnFocusTo]);\n React.useEffect(() => {\n if (typeof trapRef !== 'object' || trapRef === null) return;\n const node = trapRef.current;\n if (!node) return;\n focusLockAllTraps.add(node);\n return () => {\n if (!node) return;\n focusLockAllTraps.delete(node);\n };\n }, [disabled]);\n React.useEffect(() => {\n if (typeof trapRef !== 'object' || trapRef === null) return;\n if (disabled) return;\n if (!canUseDOM()) return;\n if (!trapRef.current) return;\n\n if (focusMaster) {\n focusMastersStack.push(trapRef.current);\n }\n\n return () => {\n if (!focusMaster) return;\n if (focusMastersStack[focusMastersStack.length - 1] === trapRef.current) {\n focusMastersStack.pop();\n } else {\n focusMastersStack.splice(focusMastersStack.indexOf(trapRef.current!), 1);\n }\n };\n }, [disabled, focusMaster]);\n React.useEffect(() => {\n if (disabled) return;\n if (!canUseDOM()) return;\n if (!trapRef.current) return;\n const focusableChildren = Array.from(trapRef.current.children).flatMap((node) =>\n getFocusableIn(node as HTMLElement),\n );\n if (focusableChildren.length === 0) return;\n\n document.body.addEventListener('focusout', handleFocusOut as any);\n document.body.addEventListener('mousedown', handleMouseEvent);\n document.body.addEventListener('touchstart', handleMouseEvent);\n document.body.addEventListener('keydown', handleKeyboardEvent);\n\n if (autoFocus)\n setFocus(\n trapRef.current,\n typeof returnFocusTo === 'object' ? returnFocusTo?.current : document.body,\n );\n\n return () => {\n document.body.removeEventListener('focusout', handleFocusOut as any);\n document.body.removeEventListener('mousedown', handleMouseEvent);\n document.body.removeEventListener('touchstart', handleMouseEvent);\n document.body.removeEventListener('keydown', handleKeyboardEvent);\n returnFocus();\n autoTriggerRef.current = null;\n };\n }, [disabled, autoFocus, returnFocusTo, returnFocus]);\n\n useUniqueIdHookMock(React);\n React.useEffect(() => {\n const id = getUniqueId('focus-lock-consumer');\n if (disabled) return;\n focusLockUsedInMountedComponents.add(id);\n return () => {\n focusLockUsedInMountedComponents.delete(id);\n };\n }, [disabled]);\n};\nconst establishHookAsGlobal = () => {\n (globalThis as any)[globalFocusLockHookKey] = {\n hook: useFocusLockHook,\n version: focusLockVersion,\n usedInComponents: focusLockUsedInMountedComponents,\n };\n};\nif (!(globalThis as any)[globalFocusLockHookKey]) {\n establishHookAsGlobal();\n} else if (typeof (globalThis as any)[globalFocusLockHookKey].version !== 'number') {\n establishHookAsGlobal();\n} else {\n const { version: theirVersion, usedInComponents } = (globalThis as any)[globalFocusLockHookKey];\n if (focusLockVersion > theirVersion && usedInComponents.size === 0) {\n establishHookAsGlobal();\n }\n}\n\nexport const useFocusLock = (\n trapRef: React.RefObject<HTMLElement>,\n autoFocus: boolean,\n returnFocusTo: React.RefObject<HTMLElement> | null | 'auto',\n disabled = false,\n focusMaster = false,\n onFocusOut?: (event: Event) => void,\n) => {\n const hook = (globalThis as any)[globalFocusLockHookKey]?.hook ?? useFocusLockHook;\n return hook(LocalReact, trapRef, autoFocus, returnFocusTo, disabled, focusMaster, onFocusOut);\n};\n\nexport const hasFocusableIn = (element: HTMLElement): boolean => {\n return (\n Array.from(element.children).flatMap((node) => getFocusableIn(node as HTMLElement)).length > 0\n );\n};\n"],"mappings":"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"}
|