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
@@ -0,0 +1,36 @@
|
|
1
|
+
import _typeof from "@babel/runtime/helpers/typeof";
|
2
|
+
var focusable = [['BUTTON'], ['SELECT'], ['TEXTAREA'], ['INPUT'], ['A', {
|
3
|
+
has: 'href'
|
4
|
+
}], ['AREA', {
|
5
|
+
has: 'href'
|
6
|
+
}], ['SUMMARY'], ['IFRAME'], ['OBJECT'], ['EMBED'], ['AUDIO', {
|
7
|
+
has: 'controls'
|
8
|
+
}], ['VIDEO', {
|
9
|
+
has: 'controls'
|
10
|
+
}], [{
|
11
|
+
has: 'tabindex'
|
12
|
+
}], [{
|
13
|
+
has: 'contenteditable'
|
14
|
+
}], [{
|
15
|
+
has: 'autofocus'
|
16
|
+
}]];
|
17
|
+
export var isFocusable = function isFocusable(node) {
|
18
|
+
var _node$ownerDocument$d;
|
19
|
+
if (!node) return false;
|
20
|
+
if (!node.ownerDocument) return false;
|
21
|
+
if (!((_node$ownerDocument$d = node.ownerDocument.defaultView) !== null && _node$ownerDocument$d !== void 0 && _node$ownerDocument$d.HTMLElement)) return false;
|
22
|
+
if (!(node instanceof node.ownerDocument.defaultView.HTMLElement || node instanceof node.ownerDocument.defaultView.SVGElement)) return false;
|
23
|
+
if (node.hasAttribute('disabled')) return false;
|
24
|
+
if (node.getAttribute('tabindex') === '-1') return false;
|
25
|
+
var tagName = node.tagName;
|
26
|
+
for (var _i = 0, _focusable = focusable; _i < _focusable.length; _i++) {
|
27
|
+
var params = _focusable[_i];
|
28
|
+
if (params.every(function (param) {
|
29
|
+
if (typeof param === 'string' && param === tagName) return true;
|
30
|
+
if (_typeof(param) === 'object' && param.has && node.hasAttribute(param.has)) return true;
|
31
|
+
return false;
|
32
|
+
})) return true;
|
33
|
+
}
|
34
|
+
return false;
|
35
|
+
};
|
36
|
+
//# sourceMappingURL=isFocusable.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"isFocusable.mjs","names":["focusable","has","isFocusable","node","_node$ownerDocument$d","ownerDocument","defaultView","HTMLElement","SVGElement","hasAttribute","getAttribute","tagName","_i","_focusable","length","params","every","param","_typeof"],"sources":["../../src/focus-lock/isFocusable.ts"],"sourcesContent":["const focusable = [\n ['BUTTON'],\n ['SELECT'],\n ['TEXTAREA'],\n ['INPUT'],\n ['A', { has: 'href' }],\n ['AREA', { has: 'href' }],\n ['SUMMARY'],\n ['IFRAME'],\n ['OBJECT'],\n ['EMBED'],\n ['AUDIO', { has: 'controls' }],\n ['VIDEO', { has: 'controls' }],\n [{ has: 'tabindex' }],\n [{ has: 'contenteditable' }],\n [{ has: 'autofocus' }],\n];\n\nexport const isFocusable = (node: Node) => {\n if (!node) return false;\n if (!node.ownerDocument) return false;\n if (!node.ownerDocument.defaultView?.HTMLElement) return false;\n if (\n !(\n node instanceof node.ownerDocument.defaultView.HTMLElement ||\n node instanceof node.ownerDocument.defaultView.SVGElement\n )\n )\n return false;\n if (node.hasAttribute('disabled')) return false;\n if (node.getAttribute('tabindex') === '-1') return false;\n const tagName = node.tagName;\n for (const params of focusable) {\n if (\n params.every((param) => {\n if (typeof param === 'string' && param === tagName) return true;\n if (typeof param === 'object' && param.has && node.hasAttribute(param.has)) return true;\n return false;\n })\n )\n return true;\n }\n return false;\n};\n"],"mappings":";AAAA,IAAMA,SAAS,GAAG,CAChB,CAAC,QAAQ,CAAC,EACV,CAAC,QAAQ,CAAC,EACV,CAAC,UAAU,CAAC,EACZ,CAAC,OAAO,CAAC,EACT,CAAC,GAAG,EAAE;EAAEC,GAAG,EAAE;AAAO,CAAC,CAAC,EACtB,CAAC,MAAM,EAAE;EAAEA,GAAG,EAAE;AAAO,CAAC,CAAC,EACzB,CAAC,SAAS,CAAC,EACX,CAAC,QAAQ,CAAC,EACV,CAAC,QAAQ,CAAC,EACV,CAAC,OAAO,CAAC,EACT,CAAC,OAAO,EAAE;EAAEA,GAAG,EAAE;AAAW,CAAC,CAAC,EAC9B,CAAC,OAAO,EAAE;EAAEA,GAAG,EAAE;AAAW,CAAC,CAAC,EAC9B,CAAC;EAAEA,GAAG,EAAE;AAAW,CAAC,CAAC,EACrB,CAAC;EAAEA,GAAG,EAAE;AAAkB,CAAC,CAAC,EAC5B,CAAC;EAAEA,GAAG,EAAE;AAAY,CAAC,CAAC,CACvB;AAED,OAAO,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,IAAU,EAAK;EAAA,IAAAC,qBAAA;EACzC,IAAI,CAACD,IAAI,EAAE,OAAO,KAAK;EACvB,IAAI,CAACA,IAAI,CAACE,aAAa,EAAE,OAAO,KAAK;EACrC,IAAI,GAAAD,qBAAA,GAACD,IAAI,CAACE,aAAa,CAACC,WAAW,cAAAF,qBAAA,eAA9BA,qBAAA,CAAgCG,WAAW,GAAE,OAAO,KAAK;EAC9D,IACE,EACEJ,IAAI,YAAYA,IAAI,CAACE,aAAa,CAACC,WAAW,CAACC,WAAW,IAC1DJ,IAAI,YAAYA,IAAI,CAACE,aAAa,CAACC,WAAW,CAACE,UAAU,CAC1D,EAED,OAAO,KAAK;EACd,IAAIL,IAAI,CAACM,YAAY,CAAC,UAAU,CAAC,EAAE,OAAO,KAAK;EAC/C,IAAIN,IAAI,CAACO,YAAY,CAAC,UAAU,CAAC,KAAK,IAAI,EAAE,OAAO,KAAK;EACxD,IAAMC,OAAO,GAAGR,IAAI,CAACQ,OAAO;EAC5B,SAAAC,EAAA,MAAAC,UAAA,GAAqBb,SAAS,EAAAY,EAAA,GAAAC,UAAA,CAAAC,MAAA,EAAAF,EAAA,IAAE;IAA3B,IAAMG,MAAM,GAAAF,UAAA,CAAAD,EAAA;IACf,IACEG,MAAM,CAACC,KAAK,CAAC,UAACC,KAAK,EAAK;MACtB,IAAI,OAAOA,KAAK,KAAK,QAAQ,IAAIA,KAAK,KAAKN,OAAO,EAAE,OAAO,IAAI;MAC/D,IAAIO,OAAA,CAAOD,KAAK,MAAK,QAAQ,IAAIA,KAAK,CAAChB,GAAG,IAAIE,IAAI,CAACM,YAAY,CAACQ,KAAK,CAAChB,GAAG,CAAC,EAAE,OAAO,IAAI;MACvF,OAAO,KAAK;IACd,CAAC,CAAC,EAEF,OAAO,IAAI;EACf;EACA,OAAO,KAAK;AACd,CAAC"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const setFocus: (node: HTMLElement, previousActiveElement?: HTMLElement | null, actualActiveElement?: HTMLElement, focusOptions?: FocusOptions) => void;
|
@@ -0,0 +1,63 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
4
|
+
Object.defineProperty(exports, "__esModule", {
|
5
|
+
value: true
|
6
|
+
});
|
7
|
+
exports.setFocus = void 0;
|
8
|
+
var _canUseDOM = _interopRequireDefault(require("../canUseDOM"));
|
9
|
+
var _getFocusableIn = require("./getFocusableIn");
|
10
|
+
var unsafeSetFocus = function unsafeSetFocus(node, previousActiveElement, actualActiveElement) {
|
11
|
+
var _target;
|
12
|
+
var focusOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
13
|
+
var activeElement = actualActiveElement || document.activeElement;
|
14
|
+
var focusable = (0, _getFocusableIn.getFocusableIn)(node);
|
15
|
+
var target = focusable[0];
|
16
|
+
if (activeElement && previousActiveElement && previousActiveElement.compareDocumentPosition(activeElement) & Node.DOCUMENT_POSITION_PRECEDING && !(previousActiveElement.compareDocumentPosition(activeElement) & Node.DOCUMENT_POSITION_CONTAINS)) {
|
17
|
+
target = focusable[focusable.length - 1];
|
18
|
+
}
|
19
|
+
(_target = target) === null || _target === void 0 ? void 0 : _target.focus(focusOptions);
|
20
|
+
};
|
21
|
+
|
22
|
+
/** "safe" focus movement means that function wrapper tries
|
23
|
+
* to detect focus war (when two focus locks are trying to
|
24
|
+
* control focus recursively) and disables it for 10 seconds
|
25
|
+
*/
|
26
|
+
var focusMoveRequests = [];
|
27
|
+
var focusMoveDisabledUntil = 0;
|
28
|
+
var lastUserAction = 0;
|
29
|
+
var safeSetFocus = function safeSetFocus() {
|
30
|
+
if (focusMoveDisabledUntil > Date.now()) return;
|
31
|
+
focusMoveRequests.push(Date.now());
|
32
|
+
if (focusMoveRequests.length > 10 && Date.now() - lastUserAction > 600) {
|
33
|
+
var lastFocusMoveRequests = focusMoveRequests.slice(-10);
|
34
|
+
var timeBetweenFocusMoveRequests = lastFocusMoveRequests.slice(1).map(function (time, index) {
|
35
|
+
return Math.abs(time - lastFocusMoveRequests[index]);
|
36
|
+
});
|
37
|
+
if (timeBetweenFocusMoveRequests.every(function (time) {
|
38
|
+
return time < 250;
|
39
|
+
})) {
|
40
|
+
focusMoveDisabledUntil = Date.now() + 10000;
|
41
|
+
focusMoveRequests = [];
|
42
|
+
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).');
|
43
|
+
return;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
if (focusMoveRequests.length > 500) focusMoveRequests = focusMoveRequests.slice(-10);
|
47
|
+
return unsafeSetFocus.apply(void 0, arguments);
|
48
|
+
};
|
49
|
+
if ((0, _canUseDOM["default"])()) {
|
50
|
+
document.addEventListener('keydown', function (event) {
|
51
|
+
lastUserAction = Date.now();
|
52
|
+
}, {
|
53
|
+
capture: true
|
54
|
+
});
|
55
|
+
document.addEventListener('mousedown', function () {
|
56
|
+
lastUserAction = Date.now();
|
57
|
+
}, {
|
58
|
+
capture: true
|
59
|
+
});
|
60
|
+
}
|
61
|
+
var setFocus = safeSetFocus;
|
62
|
+
exports.setFocus = setFocus;
|
63
|
+
//# sourceMappingURL=setFocus.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"setFocus.js","names":["_canUseDOM","_interopRequireDefault","require","_getFocusableIn","unsafeSetFocus","node","previousActiveElement","actualActiveElement","_target","focusOptions","arguments","length","undefined","activeElement","document","focusable","getFocusableIn","target","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_CONTAINS","focus","focusMoveRequests","focusMoveDisabledUntil","lastUserAction","safeSetFocus","Date","now","push","lastFocusMoveRequests","slice","timeBetweenFocusMoveRequests","map","time","index","Math","abs","every","console","error","apply","canUseDOM","addEventListener","event","capture","setFocus","exports"],"sources":["../../src/focus-lock/setFocus.ts"],"sourcesContent":["import canUseDOM from '../canUseDOM';\nimport { getFocusableIn } from './getFocusableIn';\n\nconst unsafeSetFocus = (\n node: HTMLElement,\n previousActiveElement?: HTMLElement | null,\n actualActiveElement?: HTMLElement,\n focusOptions: FocusOptions = {},\n) => {\n const activeElement = actualActiveElement || document.activeElement;\n\n const focusable = getFocusableIn(node);\n\n let target = focusable[0];\n\n if (\n activeElement &&\n previousActiveElement &&\n previousActiveElement.compareDocumentPosition(activeElement) &\n Node.DOCUMENT_POSITION_PRECEDING &&\n !(\n previousActiveElement.compareDocumentPosition(activeElement) & Node.DOCUMENT_POSITION_CONTAINS\n )\n ) {\n target = focusable[focusable.length - 1];\n }\n\n target?.focus(focusOptions);\n};\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 safeSetFocus: typeof unsafeSetFocus = (...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 unsafeSetFocus(...args);\n};\nif (canUseDOM()) {\n document.addEventListener(\n 'keydown',\n (event) => {\n lastUserAction = Date.now();\n },\n { capture: true },\n );\n document.addEventListener(\n 'mousedown',\n () => {\n lastUserAction = Date.now();\n },\n { capture: true },\n );\n}\n\nexport const setFocus = safeSetFocus;\n"],"mappings":"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"}
|
@@ -0,0 +1,55 @@
|
|
1
|
+
import canUseDOM from "../canUseDOM.mjs";
|
2
|
+
import { getFocusableIn } from "./getFocusableIn.mjs";
|
3
|
+
var unsafeSetFocus = function unsafeSetFocus(node, previousActiveElement, actualActiveElement) {
|
4
|
+
var _target;
|
5
|
+
var focusOptions = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
6
|
+
var activeElement = actualActiveElement || document.activeElement;
|
7
|
+
var focusable = getFocusableIn(node);
|
8
|
+
var target = focusable[0];
|
9
|
+
if (activeElement && previousActiveElement && previousActiveElement.compareDocumentPosition(activeElement) & Node.DOCUMENT_POSITION_PRECEDING && !(previousActiveElement.compareDocumentPosition(activeElement) & Node.DOCUMENT_POSITION_CONTAINS)) {
|
10
|
+
target = focusable[focusable.length - 1];
|
11
|
+
}
|
12
|
+
(_target = target) === null || _target === void 0 ? void 0 : _target.focus(focusOptions);
|
13
|
+
};
|
14
|
+
|
15
|
+
/** "safe" focus movement means that function wrapper tries
|
16
|
+
* to detect focus war (when two focus locks are trying to
|
17
|
+
* control focus recursively) and disables it for 10 seconds
|
18
|
+
*/
|
19
|
+
var focusMoveRequests = [];
|
20
|
+
var focusMoveDisabledUntil = 0;
|
21
|
+
var lastUserAction = 0;
|
22
|
+
var safeSetFocus = function safeSetFocus() {
|
23
|
+
if (focusMoveDisabledUntil > Date.now()) return;
|
24
|
+
focusMoveRequests.push(Date.now());
|
25
|
+
if (focusMoveRequests.length > 10 && Date.now() - lastUserAction > 600) {
|
26
|
+
var lastFocusMoveRequests = focusMoveRequests.slice(-10);
|
27
|
+
var timeBetweenFocusMoveRequests = lastFocusMoveRequests.slice(1).map(function (time, index) {
|
28
|
+
return Math.abs(time - lastFocusMoveRequests[index]);
|
29
|
+
});
|
30
|
+
if (timeBetweenFocusMoveRequests.every(function (time) {
|
31
|
+
return time < 250;
|
32
|
+
})) {
|
33
|
+
focusMoveDisabledUntil = Date.now() + 10000;
|
34
|
+
focusMoveRequests = [];
|
35
|
+
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).');
|
36
|
+
return;
|
37
|
+
}
|
38
|
+
}
|
39
|
+
if (focusMoveRequests.length > 500) focusMoveRequests = focusMoveRequests.slice(-10);
|
40
|
+
return unsafeSetFocus.apply(void 0, arguments);
|
41
|
+
};
|
42
|
+
if (canUseDOM()) {
|
43
|
+
document.addEventListener('keydown', function (event) {
|
44
|
+
lastUserAction = Date.now();
|
45
|
+
}, {
|
46
|
+
capture: true
|
47
|
+
});
|
48
|
+
document.addEventListener('mousedown', function () {
|
49
|
+
lastUserAction = Date.now();
|
50
|
+
}, {
|
51
|
+
capture: true
|
52
|
+
});
|
53
|
+
}
|
54
|
+
export var setFocus = safeSetFocus;
|
55
|
+
//# sourceMappingURL=setFocus.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"setFocus.mjs","names":["canUseDOM","getFocusableIn","unsafeSetFocus","node","previousActiveElement","actualActiveElement","_target","focusOptions","arguments","length","undefined","activeElement","document","focusable","target","compareDocumentPosition","Node","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_CONTAINS","focus","focusMoveRequests","focusMoveDisabledUntil","lastUserAction","safeSetFocus","Date","now","push","lastFocusMoveRequests","slice","timeBetweenFocusMoveRequests","map","time","index","Math","abs","every","console","error","apply","addEventListener","event","capture","setFocus"],"sources":["../../src/focus-lock/setFocus.ts"],"sourcesContent":["import canUseDOM from '../canUseDOM';\nimport { getFocusableIn } from './getFocusableIn';\n\nconst unsafeSetFocus = (\n node: HTMLElement,\n previousActiveElement?: HTMLElement | null,\n actualActiveElement?: HTMLElement,\n focusOptions: FocusOptions = {},\n) => {\n const activeElement = actualActiveElement || document.activeElement;\n\n const focusable = getFocusableIn(node);\n\n let target = focusable[0];\n\n if (\n activeElement &&\n previousActiveElement &&\n previousActiveElement.compareDocumentPosition(activeElement) &\n Node.DOCUMENT_POSITION_PRECEDING &&\n !(\n previousActiveElement.compareDocumentPosition(activeElement) & Node.DOCUMENT_POSITION_CONTAINS\n )\n ) {\n target = focusable[focusable.length - 1];\n }\n\n target?.focus(focusOptions);\n};\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 safeSetFocus: typeof unsafeSetFocus = (...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 unsafeSetFocus(...args);\n};\nif (canUseDOM()) {\n document.addEventListener(\n 'keydown',\n (event) => {\n lastUserAction = Date.now();\n },\n { capture: true },\n );\n document.addEventListener(\n 'mousedown',\n () => {\n lastUserAction = Date.now();\n },\n { capture: true },\n );\n}\n\nexport const setFocus = safeSetFocus;\n"],"mappings":"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"}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const hasParent: (element: Element | null | undefined, parent: Element) => boolean;
|
@@ -0,0 +1,14 @@
|
|
1
|
+
"use strict";
|
2
|
+
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
4
|
+
value: true
|
5
|
+
});
|
6
|
+
exports.hasParent = void 0;
|
7
|
+
var hasParent = function hasParent(element, parent) {
|
8
|
+
if (!element) return false;
|
9
|
+
if (element === document.body) return parent === document.body;
|
10
|
+
if (element === parent) return true;
|
11
|
+
return hasParent(element.parentElement, parent);
|
12
|
+
};
|
13
|
+
exports.hasParent = hasParent;
|
14
|
+
//# sourceMappingURL=hasParent.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hasParent.js","names":["hasParent","element","parent","document","body","parentElement","exports"],"sources":["../src/hasParent.ts"],"sourcesContent":["export const hasParent = (element: Element | null | undefined, parent: Element): boolean => {\n if (!element) return false;\n if (element === document.body) return parent === document.body;\n if (element === parent) return true;\n return hasParent(element.parentElement, parent);\n};\n"],"mappings":";;;;;;AAAO,IAAMA,SAAS,GAAG,SAAZA,SAASA,CAAIC,OAAmC,EAAEC,MAAe,EAAc;EAC1F,IAAI,CAACD,OAAO,EAAE,OAAO,KAAK;EAC1B,IAAIA,OAAO,KAAKE,QAAQ,CAACC,IAAI,EAAE,OAAOF,MAAM,KAAKC,QAAQ,CAACC,IAAI;EAC9D,IAAIH,OAAO,KAAKC,MAAM,EAAE,OAAO,IAAI;EACnC,OAAOF,SAAS,CAACC,OAAO,CAACI,aAAa,EAAEH,MAAM,CAAC;AACjD,CAAC;AAACI,OAAA,CAAAN,SAAA,GAAAA,SAAA"}
|
@@ -0,0 +1,7 @@
|
|
1
|
+
export var hasParent = function hasParent(element, parent) {
|
2
|
+
if (!element) return false;
|
3
|
+
if (element === document.body) return parent === document.body;
|
4
|
+
if (element === parent) return true;
|
5
|
+
return hasParent(element.parentElement, parent);
|
6
|
+
};
|
7
|
+
//# sourceMappingURL=hasParent.mjs.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"hasParent.mjs","names":["hasParent","element","parent","document","body","parentElement"],"sources":["../src/hasParent.ts"],"sourcesContent":["export const hasParent = (element: Element | null | undefined, parent: Element): boolean => {\n if (!element) return false;\n if (element === document.body) return parent === document.body;\n if (element === parent) return true;\n return hasParent(element.parentElement, parent);\n};\n"],"mappings":"AAAA,OAAO,IAAMA,SAAS,GAAG,SAAZA,SAASA,CAAIC,OAAmC,EAAEC,MAAe,EAAc;EAC1F,IAAI,CAACD,OAAO,EAAE,OAAO,KAAK;EAC1B,IAAIA,OAAO,KAAKE,QAAQ,CAACC,IAAI,EAAE,OAAOF,MAAM,KAAKC,QAAQ,CAACC,IAAI;EAC9D,IAAIH,OAAO,KAAKC,MAAM,EAAE,OAAO,IAAI;EACnC,OAAOF,SAAS,CAACC,OAAO,CAACI,aAAa,EAAEH,MAAM,CAAC;AACjD,CAAC"}
|
@@ -1,4 +1,5 @@
|
|
1
|
-
|
1
|
+
import { isFocusInside } from '../focus-lock/isFocusInside';
|
2
|
+
import { setFocus } from '../focus-lock/setFocus';
|
3
|
+
export { isFocusInside, setFocus };
|
4
|
+
export declare const useFocusLock: (trapRef: React.RefObject<HTMLElement>, autoFocus: boolean, returnFocusTo: React.RefObject<HTMLElement> | null | 'auto', disabled?: boolean, focusMaster?: boolean, onFocusOut?: ((event: Event) => void) | undefined) => any;
|
2
5
|
export declare const hasFocusableIn: (element: HTMLElement) => boolean;
|
3
|
-
export declare const isFocusInside: (topNode: HTMLElement | HTMLElement[]) => boolean;
|
4
|
-
export declare const setFocus: (topNode: HTMLElement, lastNode?: Element) => void;
|
@@ -1,89 +1,32 @@
|
|
1
1
|
"use strict";
|
2
2
|
|
3
|
-
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
|
4
3
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
5
4
|
Object.defineProperty(exports, "__esModule", {
|
6
5
|
value: true
|
7
6
|
});
|
8
|
-
exports.
|
7
|
+
exports.hasFocusableIn = void 0;
|
8
|
+
Object.defineProperty(exports, "isFocusInside", {
|
9
|
+
enumerable: true,
|
10
|
+
get: function get() {
|
11
|
+
return _isFocusInside.isFocusInside;
|
12
|
+
}
|
13
|
+
});
|
14
|
+
Object.defineProperty(exports, "setFocus", {
|
15
|
+
enumerable: true,
|
16
|
+
get: function get() {
|
17
|
+
return _setFocus.setFocus;
|
18
|
+
}
|
19
|
+
});
|
20
|
+
exports.useFocusLock = void 0;
|
9
21
|
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
|
10
22
|
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
|
11
23
|
var _canUseDOM = _interopRequireDefault(require("../canUseDOM"));
|
12
|
-
var _focusLock = _interopRequireWildcard(require("focus-lock"));
|
13
24
|
var _react = _interopRequireDefault(require("react"));
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
var focusMoveRequests = [];
|
19
|
-
var focusMoveDisabledUntil = 0;
|
20
|
-
var lastUserAction = 0;
|
21
|
-
var safeMoveFocusInside = function safeMoveFocusInside() {
|
22
|
-
if (focusMoveDisabledUntil > Date.now()) return;
|
23
|
-
focusMoveRequests.push(Date.now());
|
24
|
-
if (focusMoveRequests.length > 10 && Date.now() - lastUserAction > 600) {
|
25
|
-
var lastFocusMoveRequests = focusMoveRequests.slice(-10);
|
26
|
-
var timeBetweenFocusMoveRequests = lastFocusMoveRequests.slice(1).map(function (time, index) {
|
27
|
-
return Math.abs(time - lastFocusMoveRequests[index]);
|
28
|
-
});
|
29
|
-
if (timeBetweenFocusMoveRequests.every(function (time) {
|
30
|
-
return time < 250;
|
31
|
-
})) {
|
32
|
-
focusMoveDisabledUntil = Date.now() + 10000;
|
33
|
-
focusMoveRequests = [];
|
34
|
-
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).');
|
35
|
-
return;
|
36
|
-
}
|
37
|
-
}
|
38
|
-
if (focusMoveRequests.length > 500) focusMoveRequests = focusMoveRequests.slice(-10);
|
39
|
-
return _focusLock["default"].apply(void 0, arguments);
|
40
|
-
};
|
41
|
-
if ((0, _canUseDOM["default"])()) {
|
42
|
-
document.addEventListener('keydown', function () {
|
43
|
-
lastUserAction = Date.now();
|
44
|
-
});
|
45
|
-
document.addEventListener('mousedown', function () {
|
46
|
-
lastUserAction = Date.now();
|
47
|
-
});
|
48
|
-
}
|
25
|
+
var _isFocusInside = require("../focus-lock/isFocusInside");
|
26
|
+
var _setFocus = require("../focus-lock/setFocus");
|
27
|
+
var _getFocusableIn = require("../focus-lock/getFocusableIn");
|
28
|
+
var _focusBorders = require("../focus-lock/focusBorders");
|
49
29
|
var focusBordersConsumers = new Set();
|
50
|
-
var focusBordersRefs = {
|
51
|
-
before: null,
|
52
|
-
after: null
|
53
|
-
};
|
54
|
-
var addBorders = function addBorders() {
|
55
|
-
if (!focusBordersRefs.before) {
|
56
|
-
focusBordersRefs.before = document.createElement('div');
|
57
|
-
focusBordersRefs.before.setAttribute('tabindex', '0');
|
58
|
-
focusBordersRefs.before.style.position = 'fixed';
|
59
|
-
focusBordersRefs.before.dataset.id = '__intergalactic-focus-border-before';
|
60
|
-
document.body.prepend(focusBordersRefs.before);
|
61
|
-
}
|
62
|
-
if (!focusBordersRefs.after) {
|
63
|
-
focusBordersRefs.after = document.createElement('div');
|
64
|
-
focusBordersRefs.after.setAttribute('tabindex', '0');
|
65
|
-
focusBordersRefs.after.dataset.id = '__intergalactic-focus-border-after';
|
66
|
-
focusBordersRefs.after.style.position = 'fixed';
|
67
|
-
document.body.append(focusBordersRefs.after);
|
68
|
-
}
|
69
|
-
};
|
70
|
-
var removeBorders = function removeBorders() {
|
71
|
-
var _focusBordersRefs$bef, _focusBordersRefs$aft;
|
72
|
-
(_focusBordersRefs$bef = focusBordersRefs.before) === null || _focusBordersRefs$bef === void 0 ? void 0 : _focusBordersRefs$bef.remove();
|
73
|
-
(_focusBordersRefs$aft = focusBordersRefs.after) === null || _focusBordersRefs$aft === void 0 ? void 0 : _focusBordersRefs$aft.remove();
|
74
|
-
focusBordersRefs.before = null;
|
75
|
-
focusBordersRefs.after = null;
|
76
|
-
};
|
77
|
-
var areBordersPlacedCorrectly = function areBordersPlacedCorrectly() {
|
78
|
-
if (!focusBordersRefs.before || !focusBordersRefs.after) return true;
|
79
|
-
if (document.body.children[0] !== focusBordersRefs.before) return false;
|
80
|
-
if (document.body.children[document.body.children.length - 1] !== focusBordersRefs.after) return false;
|
81
|
-
return true;
|
82
|
-
};
|
83
|
-
var uniqueId = 0;
|
84
|
-
var getUniqueId = function getUniqueId(prefix) {
|
85
|
-
return "".concat(prefix, "-").concat(Math.random().toString(36).slice(2), "-").concat(uniqueId++);
|
86
|
-
};
|
87
30
|
var useFocusBorders = function useFocusBorders(React, disabled) {
|
88
31
|
useUniqueIdHookMock(React);
|
89
32
|
React.useEffect(function () {
|
@@ -91,14 +34,19 @@ var useFocusBorders = function useFocusBorders(React, disabled) {
|
|
91
34
|
if (!disabled) {
|
92
35
|
focusBordersConsumers.add(id);
|
93
36
|
}
|
94
|
-
if (!
|
95
|
-
if (focusBordersConsumers.size > 0)
|
37
|
+
if (!(0, _focusBorders.areFocusBordersPlacedCorrectly)()) (0, _focusBorders.removeFocusBorders)();
|
38
|
+
if (focusBordersConsumers.size > 0) (0, _focusBorders.addFocusBorders)();
|
96
39
|
return function () {
|
97
40
|
focusBordersConsumers["delete"](id);
|
98
|
-
if (focusBordersConsumers.size === 0)
|
41
|
+
if (focusBordersConsumers.size === 0) (0, _focusBorders.removeFocusBorders)();
|
99
42
|
};
|
100
43
|
}, [disabled]);
|
101
44
|
};
|
45
|
+
var uniqueId = 0;
|
46
|
+
var getUniqueId = function getUniqueId(prefix) {
|
47
|
+
return "".concat(prefix, "-").concat(Math.random().toString(36).slice(2), "-").concat(uniqueId++);
|
48
|
+
};
|
49
|
+
|
102
50
|
/**
|
103
51
|
* # Focus lock hook merging
|
104
52
|
* In some cases same page might contain different versions of components.
|
@@ -150,11 +98,13 @@ var useUniqueIdHookMock = function useUniqueIdHookMock(React) {
|
|
150
98
|
var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, returnFocusTo) {
|
151
99
|
var disabled = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
152
100
|
var focusMaster = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : false;
|
101
|
+
var onFocusOut = arguments.length > 6 ? arguments[6] : undefined;
|
153
102
|
useFocusBorders(React, disabled);
|
154
103
|
var autoTriggerRef = React.useRef(null);
|
155
104
|
var lastUserInteractionRef = React.useRef(undefined);
|
156
|
-
var
|
157
|
-
var focusCameFrom = event.
|
105
|
+
var handleFocusOut = React.useCallback(function (event) {
|
106
|
+
var focusCameFrom = event.target;
|
107
|
+
var focusMovedTo = event.relatedTarget;
|
158
108
|
setTimeout(function () {
|
159
109
|
if (!focusCameFrom) return;
|
160
110
|
if (autoTriggerRef.current) return;
|
@@ -166,12 +116,13 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
|
|
166
116
|
var currentFocusMaster = focusMastersStack[focusMastersStack.length - 1];
|
167
117
|
if (currentFocusMaster && currentFocusMaster !== trapRef.current) return;
|
168
118
|
var trapNodes = currentFocusMaster ? [trapRef.current] : [trapRef.current].concat((0, _toConsumableArray2["default"])(focusLockAllTraps));
|
169
|
-
if ((0,
|
119
|
+
if ((0, _isFocusInside.isFocusInside)(trapNodes, focusMovedTo)) return;
|
170
120
|
if (focusCameFrom) {
|
171
|
-
|
121
|
+
(0, _setFocus.setFocus)(trapRef.current, focusCameFrom, focusMovedTo);
|
172
122
|
}
|
123
|
+
onFocusOut === null || onFocusOut === void 0 ? void 0 : onFocusOut(event);
|
173
124
|
});
|
174
|
-
}, []);
|
125
|
+
}, [onFocusOut]);
|
175
126
|
var handleMouseEvent = React.useCallback(function () {
|
176
127
|
lastUserInteractionRef.current = 'mouse';
|
177
128
|
}, []);
|
@@ -180,17 +131,17 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
|
|
180
131
|
}, []);
|
181
132
|
var returnFocus = React.useCallback(function () {
|
182
133
|
var trapNode = trapRef.current;
|
183
|
-
if (!(0,
|
134
|
+
if (trapNode && !(0, _isFocusInside.isFocusInside)(trapNode)) return;
|
184
135
|
if ((0, _typeof2["default"])(returnFocusTo) === 'object' && returnFocusTo !== null && returnFocusTo !== void 0 && returnFocusTo.current) {
|
185
136
|
var returnFocusNode = returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current;
|
186
137
|
setTimeout(function () {
|
187
|
-
return
|
138
|
+
return (0, _setFocus.setFocus)(returnFocusNode, trapNode);
|
188
139
|
}, 0);
|
189
140
|
}
|
190
141
|
if (returnFocusTo === 'auto' && autoTriggerRef.current) {
|
191
142
|
var autoTrigger = autoTriggerRef.current;
|
192
143
|
setTimeout(function () {
|
193
|
-
return
|
144
|
+
return (0, _setFocus.setFocus)(autoTrigger, trapNode);
|
194
145
|
}, 0);
|
195
146
|
}
|
196
147
|
}, [returnFocusTo]);
|
@@ -203,7 +154,7 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
|
|
203
154
|
if (!node) return;
|
204
155
|
focusLockAllTraps["delete"](node);
|
205
156
|
};
|
206
|
-
}, []);
|
157
|
+
}, [disabled]);
|
207
158
|
React.useEffect(function () {
|
208
159
|
if ((0, _typeof2["default"])(trapRef) !== 'object' || trapRef === null) return;
|
209
160
|
if (disabled) return;
|
@@ -226,16 +177,16 @@ var useFocusLockHook = function useFocusLockHook(React, trapRef, autoFocus, retu
|
|
226
177
|
if (!(0, _canUseDOM["default"])()) return;
|
227
178
|
if (!trapRef.current) return;
|
228
179
|
var focusableChildren = Array.from(trapRef.current.children).flatMap(function (node) {
|
229
|
-
return (0,
|
180
|
+
return (0, _getFocusableIn.getFocusableIn)(node);
|
230
181
|
});
|
231
182
|
if (focusableChildren.length === 0) return;
|
232
|
-
document.body.addEventListener('
|
183
|
+
document.body.addEventListener('focusout', handleFocusOut);
|
233
184
|
document.body.addEventListener('mousedown', handleMouseEvent);
|
234
185
|
document.body.addEventListener('touchstart', handleMouseEvent);
|
235
186
|
document.body.addEventListener('keydown', handleKeyboardEvent);
|
236
|
-
if (autoFocus)
|
187
|
+
if (autoFocus) (0, _setFocus.setFocus)(trapRef.current, (0, _typeof2["default"])(returnFocusTo) === 'object' ? returnFocusTo === null || returnFocusTo === void 0 ? void 0 : returnFocusTo.current : document.body);
|
237
188
|
return function () {
|
238
|
-
document.body.removeEventListener('
|
189
|
+
document.body.removeEventListener('focusout', handleFocusOut);
|
239
190
|
document.body.removeEventListener('mousedown', handleMouseEvent);
|
240
191
|
document.body.removeEventListener('touchstart', handleMouseEvent);
|
241
192
|
document.body.removeEventListener('keydown', handleKeyboardEvent);
|
@@ -276,18 +227,15 @@ var useFocusLock = function useFocusLock(trapRef, autoFocus, returnFocusTo) {
|
|
276
227
|
var _globalFocusLockHookK2, _globalFocusLockHookK3;
|
277
228
|
var disabled = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
|
278
229
|
var focusMaster = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false;
|
230
|
+
var onFocusOut = arguments.length > 5 ? arguments[5] : undefined;
|
279
231
|
var hook = (_globalFocusLockHookK2 = (_globalFocusLockHookK3 = globalThis[globalFocusLockHookKey]) === null || _globalFocusLockHookK3 === void 0 ? void 0 : _globalFocusLockHookK3.hook) !== null && _globalFocusLockHookK2 !== void 0 ? _globalFocusLockHookK2 : useFocusLockHook;
|
280
|
-
return hook(_react["default"], trapRef, autoFocus, returnFocusTo, disabled, focusMaster);
|
232
|
+
return hook(_react["default"], trapRef, autoFocus, returnFocusTo, disabled, focusMaster, onFocusOut);
|
281
233
|
};
|
282
234
|
exports.useFocusLock = useFocusLock;
|
283
235
|
var hasFocusableIn = function hasFocusableIn(element) {
|
284
236
|
return Array.from(element.children).flatMap(function (node) {
|
285
|
-
return (0,
|
237
|
+
return (0, _getFocusableIn.getFocusableIn)(node);
|
286
238
|
}).length > 0;
|
287
239
|
};
|
288
240
|
exports.hasFocusableIn = hasFocusableIn;
|
289
|
-
var isFocusInside = _focusLock.focusInside;
|
290
|
-
exports.isFocusInside = isFocusInside;
|
291
|
-
var setFocus = safeMoveFocusInside;
|
292
|
-
exports.setFocus = setFocus;
|
293
241
|
//# sourceMappingURL=useFocusLock.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"useFocusLock.js","names":["_canUseDOM","_interopRequireDefault","require","_focusLock","_interopRequireWildcard","_react","focusMoveRequests","focusMoveDisabledUntil","lastUserAction","safeMoveFocusInside","Date","now","push","length","lastFocusMoveRequests","slice","timeBetweenFocusMoveRequests","map","time","index","Math","abs","every","console","error","moveFocusInside","apply","arguments","canUseDOM","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","_toConsumableArray2","focusInside","handleMouseEvent","handleKeyboardEvent","returnFocus","trapNode","_typeof2","returnFocusNode","autoTrigger","node","pop","splice","indexOf","focusableChildren","Array","from","flatMap","getFocusableIn","removeEventListener","establishHookAsGlobal","globalThis","hook","version","usedInComponents","_globalFocusLockHookK","theirVersion","useFocusLock","_globalFocusLockHookK2","_globalFocusLockHookK3","LocalReact","exports","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":";;;;;;;;;;AAAA,IAAAA,UAAA,GAAAC,sBAAA,CAAAC,OAAA;AACA,IAAAC,UAAA,GAAAC,uBAAA,CAAAF,OAAA;AACA,IAAAG,MAAA,GAAAJ,sBAAA,CAAAC,OAAA;AAEA;AACA;AACA;AACA;AACA,IAAII,iBAA2B,GAAG,EAAE;AACpC,IAAIC,sBAAsB,GAAG,CAAC;AAC9B,IAAIC,cAAc,GAAG,CAAC;AACtB,IAAMC,mBAA2C,GAAG,SAA9CA,mBAA2CA,CAAA,EAAgB;EAC/D,IAAIF,sBAAsB,GAAGG,IAAI,CAACC,GAAG,EAAE,EAAE;EACzCL,iBAAiB,CAACM,IAAI,CAACF,IAAI,CAACC,GAAG,EAAE,CAAC;EAClC,IAAIL,iBAAiB,CAACO,MAAM,GAAG,EAAE,IAAIH,IAAI,CAACC,GAAG,EAAE,GAAGH,cAAc,GAAG,GAAG,EAAE;IACtE,IAAMM,qBAAqB,GAAGR,iBAAiB,CAACS,KAAK,CAAC,CAAC,EAAE,CAAC;IAC1D,IAAMC,4BAA4B,GAAGF,qBAAqB,CACvDC,KAAK,CAAC,CAAC,CAAC,CACRE,GAAG,CAAC,UAACC,IAAI,EAAEC,KAAK;MAAA,OAAKC,IAAI,CAACC,GAAG,CAACH,IAAI,GAAGJ,qBAAqB,CAACK,KAAK,CAAC,CAAC;IAAA,EAAC;IACtE,IAAIH,4BAA4B,CAACM,KAAK,CAAC,UAACJ,IAAI;MAAA,OAAKA,IAAI,GAAG,GAAG;IAAA,EAAC,EAAE;MAC5DX,sBAAsB,GAAGG,IAAI,CAACC,GAAG,EAAE,GAAG,KAAK;MAC3CL,iBAAiB,GAAG,EAAE;MACtBiB,OAAO,CAACC,KAAK,CACX,0ZAA0Z,CAC3Z;MACD;IACF;EACF;EACA,IAAIlB,iBAAiB,CAACO,MAAM,GAAG,GAAG,EAAEP,iBAAiB,GAAGA,iBAAiB,CAACS,KAAK,CAAC,CAAC,EAAE,CAAC;EAEpF,OAAOU,qBAAe,CAAAC,KAAA,SAAAC,SAAA,CAAS;AACjC,CAAC;AACD,IAAI,IAAAC,qBAAS,GAAE,EAAE;EACfC,QAAQ,CAACC,gBAAgB,CAAC,SAAS,EAAE,YAAM;IACzCtB,cAAc,GAAGE,IAAI,CAACC,GAAG,EAAE;EAC7B,CAAC,CAAC;EACFkB,QAAQ,CAACC,gBAAgB,CAAC,WAAW,EAAE,YAAM;IAC3CtB,cAAc,GAAGE,IAAI,CAACC,GAAG,EAAE;EAC7B,CAAC,CAAC;AACJ;AAEA,IAAMoB,qBAAqB,GAAG,IAAIC,GAAG,EAAE;AACvC,IAAMC,gBAGL,GAAG;EAAEC,MAAM,EAAE,IAAI;EAAEC,KAAK,EAAE;AAAK,CAAC;AAEjC,IAAMC,UAAU,GAAG,SAAbA,UAAUA,CAAA,EAAS;EACvB,IAAI,CAACH,gBAAgB,CAACC,MAAM,EAAE;IAC5BD,gBAAgB,CAACC,MAAM,GAAGL,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC;IACvDJ,gBAAgB,CAACC,MAAM,CAACI,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;IACrDL,gBAAgB,CAACC,MAAM,CAACK,KAAK,CAACC,QAAQ,GAAG,OAAO;IAChDP,gBAAgB,CAACC,MAAM,CAACO,OAAO,CAACC,EAAE,GAAG,qCAAqC;IAC1Eb,QAAQ,CAACc,IAAI,CAACC,OAAO,CAACX,gBAAgB,CAACC,MAAM,CAAC;EAChD;EACA,IAAI,CAACD,gBAAgB,CAACE,KAAK,EAAE;IAC3BF,gBAAgB,CAACE,KAAK,GAAGN,QAAQ,CAACQ,aAAa,CAAC,KAAK,CAAC;IACtDJ,gBAAgB,CAACE,KAAK,CAACG,YAAY,CAAC,UAAU,EAAE,GAAG,CAAC;IACpDL,gBAAgB,CAACE,KAAK,CAACM,OAAO,CAACC,EAAE,GAAG,oCAAoC;IACxET,gBAAgB,CAACE,KAAK,CAACI,KAAK,CAACC,QAAQ,GAAG,OAAO;IAC/CX,QAAQ,CAACc,IAAI,CAACE,MAAM,CAACZ,gBAAgB,CAACE,KAAK,CAAC;EAC9C;AACF,CAAC;AACD,IAAMW,aAAa,GAAG,SAAhBA,aAAaA,CAAA,EAAS;EAAA,IAAAC,qBAAA,EAAAC,qBAAA;EAC1B,CAAAD,qBAAA,GAAAd,gBAAgB,CAACC,MAAM,cAAAa,qBAAA,uBAAvBA,qBAAA,CAAyBE,MAAM,EAAE;EACjC,CAAAD,qBAAA,GAAAf,gBAAgB,CAACE,KAAK,cAAAa,qBAAA,uBAAtBA,qBAAA,CAAwBC,MAAM,EAAE;EAChChB,gBAAgB,CAACC,MAAM,GAAG,IAAI;EAC9BD,gBAAgB,CAACE,KAAK,GAAG,IAAI;AAC/B,CAAC;AACD,IAAMe,yBAAyB,GAAG,SAA5BA,yBAAyBA,CAAA,EAAS;EACtC,IAAI,CAACjB,gBAAgB,CAACC,MAAM,IAAI,CAACD,gBAAgB,CAACE,KAAK,EAAE,OAAO,IAAI;EACpE,IAAIN,QAAQ,CAACc,IAAI,CAACQ,QAAQ,CAAC,CAAC,CAAC,KAAKlB,gBAAgB,CAACC,MAAM,EAAE,OAAO,KAAK;EACvE,IAAIL,QAAQ,CAACc,IAAI,CAACQ,QAAQ,CAACtB,QAAQ,CAACc,IAAI,CAACQ,QAAQ,CAACtC,MAAM,GAAG,CAAC,CAAC,KAAKoB,gBAAgB,CAACE,KAAK,EACtF,OAAO,KAAK;EACd,OAAO,IAAI;AACb,CAAC;AAID,IAAIiB,QAAQ,GAAG,CAAC;AAChB,IAAMC,WAAW,GAAG,SAAdA,WAAWA,CAAIC,MAAc;EAAA,UAAAC,MAAA,CAC9BD,MAAM,OAAAC,MAAA,CAAInC,IAAI,CAACoC,MAAM,EAAE,CAACC,QAAQ,CAAC,EAAE,CAAC,CAAC1C,KAAK,CAAC,CAAC,CAAC,OAAAwC,MAAA,CAAIH,QAAQ,EAAE;AAAA,CAAE;AAClE,IAAMM,eAAe,GAAG,SAAlBA,eAAeA,CAAIC,KAAa,EAAEC,QAAkB,EAAK;EAC7DC,mBAAmB,CAACF,KAAK,CAAC;EAC1BA,KAAK,CAACG,SAAS,CAAC,YAAM;IACpB,IAAMpB,EAAE,GAAGW,WAAW,CAAC,wBAAwB,CAAC;IAChD,IAAI,CAACO,QAAQ,EAAE;MACb7B,qBAAqB,CAACgC,GAAG,CAACrB,EAAE,CAAC;IAC/B;IAEA,IAAI,CAACQ,yBAAyB,EAAE,EAAEJ,aAAa,EAAE;IACjD,IAAIf,qBAAqB,CAACiC,IAAI,GAAG,CAAC,EAAE5B,UAAU,EAAE;IAEhD,OAAO,YAAM;MACXL,qBAAqB,UAAO,CAACW,EAAE,CAAC;MAChC,IAAIX,qBAAqB,CAACiC,IAAI,KAAK,CAAC,EAAElB,aAAa,EAAE;IACvD,CAAC;EACH,CAAC,EAAE,CAACc,QAAQ,CAAC,CAAC;AAChB,CAAC;AACD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMK,gBAAgB,GAAG,CAAC;AAC1B,IAAMC,sBAAsB,GAAG,oDAAoD;AAEnF,IAAMC,iBAAiB,GAAG,IAAInC,GAAG,EAAe;AAChD,IAAMoC,gCAAgC,GAAG,IAAIpC,GAAG,EAAU;AAC1D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAMqC,iBAAgC,GAAG,EAAE;AAE3C,IAAMC,IAAI,GAAG,SAAPA,IAAIA,CAAA,EAAS,CAAC,CAAC;AACrB,IAAMT,mBAAmB,GAAG,SAAtBA,mBAAmBA,CAAIF,KAAa,EAAK;EAC7CA,KAAK,CAACY,QAAQ,CAACC,SAAS,CAAC;EACzB,IAAMC,iBAAiB,GAAG,IAAA7C,qBAAS,GAAE,GAAG+B,KAAK,CAACe,eAAe,GAAGf,KAAK,CAACG,SAAS;EAC/EW,iBAAiB,CAACH,IAAI,EAAE,EAAE,CAAC;AAC7B,CAAC;AAED,IAAMK,gBAAgB,GAAG,SAAnBA,gBAAgBA,CACpBhB,KAAa,EACbiB,OAAqC,EACrCC,SAAkB,EAClBC,aAA2D,EAGxD;EAAA,IAFHlB,QAAQ,GAAAjC,SAAA,CAAAd,MAAA,QAAAc,SAAA,QAAA6C,SAAA,GAAA7C,SAAA,MAAG,KAAK;EAAA,IAChBoD,WAAW,GAAApD,SAAA,CAAAd,MAAA,QAAAc,SAAA,QAAA6C,SAAA,GAAA7C,SAAA,MAAG,KAAK;EAEnB+B,eAAe,CAACC,KAAK,EAAEC,QAAQ,CAAC;EAEhC,IAAMoB,cAAc,GAAGrB,KAAK,CAACsB,MAAM,CAAqB,IAAI,CAAC;EAC7D,IAAMC,sBAAsB,GAAGvB,KAAK,CAACsB,MAAM,CAAmCT,SAAS,CAAC;EAExF,IAAMW,aAAa,GAAGxB,KAAK,CAACyB,WAAW,CACrC,UAACC,KAAoE,EAAK;IACxE,IAAMC,aAAa,GAAGD,KAAK,CAACE,aAAa;IACzCC,UAAU,CAAC,YAAM;MACf,IAAI,CAACF,aAAa,EAAE;MACpB,IAAIN,cAAc,CAACS,OAAO,EAAE;MAC5BT,cAAc,CAACS,OAAO,GAAGH,aAAa;IACxC,CAAC,EAAE,CAAC,CAAC;IACL,IAAIJ,sBAAsB,CAACO,OAAO,KAAK,OAAO,EAAE;IAChDC,OAAO,CAACC,OAAO,EAAE,CAACC,IAAI,CAAC,YAAM;MAC3B,IAAI,CAAChB,OAAO,CAACa,OAAO,EAAE;MACtB,IAAMI,kBAAkB,GAAGxB,iBAAiB,CAACA,iBAAiB,CAACxD,MAAM,GAAG,CAAC,CAAC;MAC1E,IAAIgF,kBAAkB,IAAIA,kBAAkB,KAAKjB,OAAO,CAACa,OAAO,EAAE;MAClE,IAAMK,SAAS,GAAGD,kBAAkB,GAChC,CAACjB,OAAO,CAACa,OAAO,CAAC,IAChBb,OAAO,CAACa,OAAO,EAAAlC,MAAA,KAAAwC,mBAAA,aAAK5B,iBAAiB,EAAC;MAC3C,IAAI,IAAA6B,sBAAW,EAACF,SAAS,CAAC,EAAE;MAE5B,IAAIR,aAAa,EAAE;QACjB7E,mBAAmB,CAACmE,OAAO,CAACa,OAAO,EAAEH,aAAa,CAAC;MACrD;IACF,CAAC,CAAC;EACJ,CAAC,EACD,EAAE,CACH;EACD,IAAMW,gBAAgB,GAAGtC,KAAK,CAACyB,WAAW,CAAC,YAAM;IAC/CF,sBAAsB,CAACO,OAAO,GAAG,OAAO;EAC1C,CAAC,EAAE,EAAE,CAAC;EACN,IAAMS,mBAAmB,GAAGvC,KAAK,CAACyB,WAAW,CAAC,YAAM;IAClDF,sBAAsB,CAACO,OAAO,GAAG,UAAU;EAC7C,CAAC,EAAE,EAAE,CAAC;EACN,IAAMU,WAAW,GAAGxC,KAAK,CAACyB,WAAW,CAAC,YAAM;IAC1C,IAAMgB,QAAQ,GAAGxB,OAAO,CAACa,OAAQ;IACjC,IAAI,CAAC,IAAAO,sBAAW,EAACI,QAAQ,CAAC,EAAE;IAC5B,IAAI,IAAAC,QAAA,aAAOvB,aAAa,MAAK,QAAQ,IAAIA,aAAa,aAAbA,aAAa,eAAbA,aAAa,CAAEW,OAAO,EAAE;MAC/D,IAAMa,eAAe,GAAGxB,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEW,OAAO;MAC9CD,UAAU,CAAC;QAAA,OAAM/E,mBAAmB,CAAC6F,eAAe,EAAEF,QAAQ,CAAC;MAAA,GAAE,CAAC,CAAC;IACrE;IACA,IAAItB,aAAa,KAAK,MAAM,IAAIE,cAAc,CAACS,OAAO,EAAE;MACtD,IAAMc,WAAW,GAAGvB,cAAc,CAACS,OAAO;MAC1CD,UAAU,CAAC;QAAA,OAAM/E,mBAAmB,CAAC8F,WAAW,EAAEH,QAAQ,CAAC;MAAA,GAAE,CAAC,CAAC;IACjE;EACF,CAAC,EAAE,CAACtB,aAAa,CAAC,CAAC;EACnBnB,KAAK,CAACG,SAAS,CAAC,YAAM;IACpB,IAAI,IAAAuC,QAAA,aAAOzB,OAAO,MAAK,QAAQ,IAAIA,OAAO,KAAK,IAAI,EAAE;IACrD,IAAM4B,IAAI,GAAG5B,OAAO,CAACa,OAAO;IAC5B,IAAI,CAACe,IAAI,EAAE;IACXrC,iBAAiB,CAACJ,GAAG,CAACyC,IAAI,CAAC;IAC3B,OAAO,YAAM;MACX,IAAI,CAACA,IAAI,EAAE;MACXrC,iBAAiB,UAAO,CAACqC,IAAI,CAAC;IAChC,CAAC;EACH,CAAC,EAAE,EAAE,CAAC;EACN7C,KAAK,CAACG,SAAS,CAAC,YAAM;IACpB,IAAI,IAAAuC,QAAA,aAAOzB,OAAO,MAAK,QAAQ,IAAIA,OAAO,KAAK,IAAI,EAAE;IACrD,IAAIhB,QAAQ,EAAE;IACd,IAAI,CAAC,IAAAhC,qBAAS,GAAE,EAAE;IAClB,IAAI,CAACgD,OAAO,CAACa,OAAO,EAAE;IAEtB,IAAIV,WAAW,EAAE;MACfV,iBAAiB,CAACzD,IAAI,CAACgE,OAAO,CAACa,OAAO,CAAC;IACzC;IAEA,OAAO,YAAM;MACX,IAAI,CAACV,WAAW,EAAE;MAClB,IAAIV,iBAAiB,CAACA,iBAAiB,CAACxD,MAAM,GAAG,CAAC,CAAC,KAAK+D,OAAO,CAACa,OAAO,EAAE;QACvEpB,iBAAiB,CAACoC,GAAG,EAAE;MACzB,CAAC,MAAM;QACLpC,iBAAiB,CAACqC,MAAM,CAACrC,iBAAiB,CAACsC,OAAO,CAAC/B,OAAO,CAACa,OAAO,CAAE,EAAE,CAAC,CAAC;MAC1E;IACF,CAAC;EACH,CAAC,EAAE,CAAC7B,QAAQ,EAAEmB,WAAW,CAAC,CAAC;EAC3BpB,KAAK,CAACG,SAAS,CAAC,YAAM;IACpB,IAAIF,QAAQ,EAAE;IACd,IAAI,CAAC,IAAAhC,qBAAS,GAAE,EAAE;IAClB,IAAI,CAACgD,OAAO,CAACa,OAAO,EAAE;IACtB,IAAMmB,iBAAiB,GAAGC,KAAK,CAACC,IAAI,CAAClC,OAAO,CAACa,OAAO,CAACtC,QAAQ,CAAC,CAAC4D,OAAO,CAAC,UAACP,IAAI;MAAA,OAC1E,IAAAQ,yBAAc,EAACR,IAAI,CAAgB;IAAA,EACpC;IACD,IAAII,iBAAiB,CAAC/F,MAAM,KAAK,CAAC,EAAE;IAEpCgB,QAAQ,CAACc,IAAI,CAACb,gBAAgB,CAAC,SAAS,EAAEqD,aAAa,CAAQ;IAC/DtD,QAAQ,CAACc,IAAI,CAACb,gBAAgB,CAAC,WAAW,EAAEmE,gBAAgB,CAAC;IAC7DpE,QAAQ,CAACc,IAAI,CAACb,gBAAgB,CAAC,YAAY,EAAEmE,gBAAgB,CAAC;IAC9DpE,QAAQ,CAACc,IAAI,CAACb,gBAAgB,CAAC,SAAS,EAAEoE,mBAAmB,CAAC;IAE9D,IAAIrB,SAAS,EACXpE,mBAAmB,CACjBmE,OAAO,CAACa,OAAO,EACf,IAAAY,QAAA,aAAOvB,aAAa,MAAK,QAAQ,GAAGA,aAAa,aAAbA,aAAa,uBAAbA,aAAa,CAAEW,OAAO,GAAI5D,QAAQ,CAACc,IAAI,CAC5E;IAEH,OAAO,YAAM;MACXd,QAAQ,CAACc,IAAI,CAACsE,mBAAmB,CAAC,SAAS,EAAE9B,aAAa,CAAQ;MAClEtD,QAAQ,CAACc,IAAI,CAACsE,mBAAmB,CAAC,WAAW,EAAEhB,gBAAgB,CAAC;MAChEpE,QAAQ,CAACc,IAAI,CAACsE,mBAAmB,CAAC,YAAY,EAAEhB,gBAAgB,CAAC;MACjEpE,QAAQ,CAACc,IAAI,CAACsE,mBAAmB,CAAC,SAAS,EAAEf,mBAAmB,CAAC;MACjEC,WAAW,EAAE;MACbnB,cAAc,CAACS,OAAO,GAAG,IAAI;IAC/B,CAAC;EACH,CAAC,EAAE,CAAC7B,QAAQ,EAAEiB,SAAS,EAAEC,aAAa,EAAEqB,WAAW,CAAC,CAAC;EAErDtC,mBAAmB,CAACF,KAAK,CAAC;EAC1BA,KAAK,CAACG,SAAS,CAAC,YAAM;IACpB,IAAMpB,EAAE,GAAGW,WAAW,CAAC,qBAAqB,CAAC;IAC7C,IAAIO,QAAQ,EAAE;IACdQ,gCAAgC,CAACL,GAAG,CAACrB,EAAE,CAAC;IACxC,OAAO,YAAM;MACX0B,gCAAgC,UAAO,CAAC1B,EAAE,CAAC;IAC7C,CAAC;EACH,CAAC,EAAE,CAACkB,QAAQ,CAAC,CAAC;AAChB,CAAC;AACD,IAAMsD,qBAAqB,GAAG,SAAxBA,qBAAqBA,CAAA,EAAS;EACjCC,UAAU,CAASjD,sBAAsB,CAAC,GAAG;IAC5CkD,IAAI,EAAEzC,gBAAgB;IACtB0C,OAAO,EAAEpD,gBAAgB;IACzBqD,gBAAgB,EAAElD;EACpB,CAAC;AACH,CAAC;AACD,IAAI,CAAE+C,UAAU,CAASjD,sBAAsB,CAAC,EAAE;EAChDgD,qBAAqB,EAAE;AACzB,CAAC,MAAM,IAAI,OAAQC,UAAU,CAASjD,sBAAsB,CAAC,CAACmD,OAAO,KAAK,QAAQ,EAAE;EAClFH,qBAAqB,EAAE;AACzB,CAAC,MAAM;EACL,IAAAK,qBAAA,GAAqDJ,UAAU,CAASjD,sBAAsB,CAAC;IAA9EsD,YAAY,GAAAD,qBAAA,CAArBF,OAAO;IAAgBC,gBAAgB,GAAAC,qBAAA,CAAhBD,gBAAgB;EAC/C,IAAIrD,gBAAgB,GAAGuD,YAAY,IAAIF,gBAAgB,CAACtD,IAAI,KAAK,CAAC,EAAE;IAClEkD,qBAAqB,EAAE;EACzB;AACF;AAEO,IAAMO,YAAY,GAAG,SAAfA,YAAYA,CACvB7C,OAAqC,EACrCC,SAAkB,EAClBC,aAA2D,EAGxD;EAAA,IAAA4C,sBAAA,EAAAC,sBAAA;EAAA,IAFH/D,QAAQ,GAAAjC,SAAA,CAAAd,MAAA,QAAAc,SAAA,QAAA6C,SAAA,GAAA7C,SAAA,MAAG,KAAK;EAAA,IAChBoD,WAAW,GAAApD,SAAA,CAAAd,MAAA,QAAAc,SAAA,QAAA6C,SAAA,GAAA7C,SAAA,MAAG,KAAK;EAEnB,IAAMyF,IAAI,IAAAM,sBAAA,IAAAC,sBAAA,GAAIR,UAAU,CAASjD,sBAAsB,CAAC,cAAAyD,sBAAA,uBAA3CA,sBAAA,CAA6CP,IAAI,cAAAM,sBAAA,cAAAA,sBAAA,GAAI/C,gBAAgB;EAClF,OAAOyC,IAAI,CAACQ,iBAAU,EAAEhD,OAAO,EAAEC,SAAS,EAAEC,aAAa,EAAElB,QAAQ,EAAEmB,WAAW,CAAC;AACnF,CAAC;AAAC8C,OAAA,CAAAJ,YAAA,GAAAA,YAAA;AAEK,IAAMK,cAAc,GAAG,SAAjBA,cAAcA,CAAIC,OAAoB,EAAc;EAC/D,OACElB,KAAK,CAACC,IAAI,CAACiB,OAAO,CAAC5E,QAAQ,CAAC,CAAC4D,OAAO,CAAC,UAACP,IAAI;IAAA,OAAK,IAAAQ,yBAAc,EAACR,IAAI,CAAgB;EAAA,EAAC,CAAC3F,MAAM,GAAG,CAAC;AAElG,CAAC;AAACgH,OAAA,CAAAC,cAAA,GAAAA,cAAA;AACK,IAAME,aAAa,GAAGhC,sBAAW;AAAC6B,OAAA,CAAAG,aAAA,GAAAA,aAAA;AAClC,IAAMC,QAAQ,GAAGxH,mBAAyE;AAACoH,OAAA,CAAAI,QAAA,GAAAA,QAAA"}
|
1
|
+
{"version":3,"file":"useFocusLock.js","names":["_canUseDOM","_interopRequireDefault","require","_react","_isFocusInside","_setFocus","_getFocusableIn","_focusBorders","focusBordersConsumers","Set","useFocusBorders","React","disabled","useUniqueIdHookMock","useEffect","id","getUniqueId","add","areFocusBordersPlacedCorrectly","removeFocusBorders","size","addFocusBorders","uniqueId","prefix","concat","Math","random","toString","slice","focusLockVersion","globalFocusLockHookKey","focusLockAllTraps","focusLockUsedInMountedComponents","focusMastersStack","noop","useState","undefined","useEnhancedEffect","canUseDOM","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","_toConsumableArray2","isFocusInside","setFocus","handleMouseEvent","handleKeyboardEvent","returnFocus","trapNode","_typeof2","returnFocusNode","autoTrigger","node","push","pop","splice","indexOf","focusableChildren","Array","from","children","flatMap","getFocusableIn","document","body","addEventListener","removeEventListener","establishHookAsGlobal","globalThis","hook","version","usedInComponents","_globalFocusLockHookK","theirVersion","useFocusLock","_globalFocusLockHookK2","_globalFocusLockHookK3","LocalReact","exports","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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"}
|