{"version":3,"file":"static/js/3706_de28e1c85eaa08ed9942.js","mappings":"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","sources":["file:////home/runner/work/platform/platform/common/temp/node_modules/.pnpm/tabster@8.2.0/node_modules/tabster/dist/tabster.esm.js"],"sourcesContent":["import { nativeFocus, KEYBORG_FOCUSIN, KEYBORG_FOCUSOUT, createKeyborg, disposeKeyborg } from 'keyborg';\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\nconst TABSTER_ATTRIBUTE_NAME = \"data-tabster\";\nconst TABSTER_DUMMY_INPUT_ATTRIBUTE_NAME = \"data-tabster-dummy\";\nconst FOCUSABLE_SELECTOR = /*#__PURE__*/[\"a[href]\", \"button:not([disabled])\", \"input:not([disabled])\", \"select:not([disabled])\", \"textarea:not([disabled])\", \"*[tabindex]\", \"*[contenteditable]\", \"details > summary\", \"audio[controls]\", \"video[controls]\"].join(\", \");\nconst AsyncFocusSources = {\n EscapeGroupper: 1,\n Restorer: 2,\n Deloser: 3\n};\nconst ObservedElementAccessibilities = {\n Any: 0,\n Accessible: 1,\n Focusable: 2\n};\nconst RestoreFocusOrders = {\n History: 0,\n DeloserDefault: 1,\n RootDefault: 2,\n DeloserFirst: 3,\n RootFirst: 4\n};\nconst DeloserStrategies = {\n /**\r\n * If the focus is lost, the focus will be restored automatically using all available focus history.\r\n * This is the default strategy.\r\n */\n Auto: 0,\n\n /**\r\n * If the focus is lost from this Deloser instance, the focus will not be restored automatically.\r\n * The application might listen to the event and restore the focus manually.\r\n * But if it is lost from another Deloser instance, the history of this Deloser could be used finding\r\n * the element to focus.\r\n */\n Manual: 1\n};\nconst Visibilities = {\n Invisible: 0,\n PartiallyVisible: 1,\n Visible: 2\n};\nconst RestorerTypes = {\n Source: 0,\n Target: 1\n};\nconst MoverDirections = {\n Both: 0,\n Vertical: 1,\n Horizontal: 2,\n Grid: 3,\n GridLinear: 4 // Two-dimentional movement depending on the visual placement. Allows linear movement.\n\n};\nconst MoverKeys = {\n ArrowUp: 1,\n ArrowDown: 2,\n ArrowLeft: 3,\n ArrowRight: 4,\n PageUp: 5,\n PageDown: 6,\n Home: 7,\n End: 8\n};\nconst GroupperTabbabilities = {\n Unlimited: 0,\n Limited: 1,\n LimitedTrapFocus: 2 // The focus is limited as above, plus trapped when inside.\n\n};\nconst GroupperMoveFocusActions = {\n Enter: 1,\n Escape: 2\n};\nconst SysDummyInputsPositions = {\n Auto: 0,\n Inside: 1,\n Outside: 2 // Tabster will always place dummy inputs outside of the container.\n\n};\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\nfunction getTabsterOnElement(tabster, element) {\n var _a;\n\n return (_a = tabster.storageEntry(element)) === null || _a === void 0 ? void 0 : _a.tabster;\n}\nfunction updateTabsterByAttribute(tabster, element, dispose) {\n var _a, _b;\n\n const newAttrValue = dispose || tabster._noop ? undefined : element.getAttribute(TABSTER_ATTRIBUTE_NAME);\n let entry = tabster.storageEntry(element);\n let newAttr;\n\n if (newAttrValue) {\n if (newAttrValue !== ((_a = entry === null || entry === void 0 ? void 0 : entry.attr) === null || _a === void 0 ? void 0 : _a.string)) {\n try {\n const newValue = JSON.parse(newAttrValue);\n\n if (typeof newValue !== \"object\") {\n throw new Error(`Value is not a JSON object, got '${newAttrValue}'.`);\n }\n\n newAttr = {\n string: newAttrValue,\n object: newValue\n };\n } catch (e) {\n if (process.env.NODE_ENV === 'development') {\n console.error(`data-tabster attribute error: ${e}`, element);\n }\n }\n } else {\n return;\n }\n } else if (!entry) {\n return;\n }\n\n if (!entry) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n entry = tabster.storageEntry(element, true);\n }\n\n if (!entry.tabster) {\n entry.tabster = {};\n }\n\n const tabsterOnElement = entry.tabster || {};\n const oldTabsterProps = ((_b = entry.attr) === null || _b === void 0 ? void 0 : _b.object) || {};\n const newTabsterProps = (newAttr === null || newAttr === void 0 ? void 0 : newAttr.object) || {};\n\n for (const key of Object.keys(oldTabsterProps)) {\n if (!newTabsterProps[key]) {\n if (key === \"root\") {\n const root = tabsterOnElement[key];\n\n if (root) {\n tabster.root.onRoot(root, true);\n }\n }\n\n switch (key) {\n case \"deloser\":\n case \"root\":\n case \"groupper\":\n case \"modalizer\":\n case \"restorer\":\n case \"mover\":\n // eslint-disable-next-line no-case-declarations\n const part = tabsterOnElement[key];\n\n if (part) {\n part.dispose();\n delete tabsterOnElement[key];\n }\n\n break;\n\n case \"observed\":\n delete tabsterOnElement[key];\n\n if (tabster.observedElement) {\n tabster.observedElement.onObservedElementUpdate(element);\n }\n\n break;\n\n case \"focusable\":\n case \"outline\":\n case \"uncontrolled\":\n case \"sys\":\n delete tabsterOnElement[key];\n break;\n }\n }\n }\n\n for (const key of Object.keys(newTabsterProps)) {\n const sys = newTabsterProps.sys;\n\n switch (key) {\n case \"deloser\":\n if (tabsterOnElement.deloser) {\n tabsterOnElement.deloser.setProps(newTabsterProps.deloser);\n } else {\n if (tabster.deloser) {\n tabsterOnElement.deloser = tabster.deloser.createDeloser(element, newTabsterProps.deloser);\n } else if (process.env.NODE_ENV === 'development') {\n console.error(\"Deloser API used before initialization, please call `getDeloser()`\");\n }\n }\n\n break;\n\n case \"root\":\n if (tabsterOnElement.root) {\n tabsterOnElement.root.setProps(newTabsterProps.root);\n } else {\n tabsterOnElement.root = tabster.root.createRoot(element, newTabsterProps.root, sys);\n }\n\n tabster.root.onRoot(tabsterOnElement.root);\n break;\n\n case \"modalizer\":\n if (tabsterOnElement.modalizer) {\n tabsterOnElement.modalizer.setProps(newTabsterProps.modalizer);\n } else {\n if (tabster.modalizer) {\n tabsterOnElement.modalizer = tabster.modalizer.createModalizer(element, newTabsterProps.modalizer, sys);\n } else if (process.env.NODE_ENV === 'development') {\n console.error(\"Modalizer API used before initialization, please call `getModalizer()`\");\n }\n }\n\n break;\n\n case \"restorer\":\n if (tabsterOnElement.restorer) {\n tabsterOnElement.restorer.setProps(newTabsterProps.restorer);\n } else {\n if (tabster.restorer) {\n if (newTabsterProps.restorer) {\n tabsterOnElement.restorer = tabster.restorer.createRestorer(element, newTabsterProps.restorer);\n }\n } else if (process.env.NODE_ENV === 'development') {\n console.error(\"Restorer API used before initialization, please call `getRestorer()`\");\n }\n }\n\n break;\n\n case \"focusable\":\n tabsterOnElement.focusable = newTabsterProps.focusable;\n break;\n\n case \"groupper\":\n if (tabsterOnElement.groupper) {\n tabsterOnElement.groupper.setProps(newTabsterProps.groupper);\n } else {\n if (tabster.groupper) {\n tabsterOnElement.groupper = tabster.groupper.createGroupper(element, newTabsterProps.groupper, sys);\n } else if (process.env.NODE_ENV === 'development') {\n console.error(\"Groupper API used before initialization, please call `getGroupper()`\");\n }\n }\n\n break;\n\n case \"mover\":\n if (tabsterOnElement.mover) {\n tabsterOnElement.mover.setProps(newTabsterProps.mover);\n } else {\n if (tabster.mover) {\n tabsterOnElement.mover = tabster.mover.createMover(element, newTabsterProps.mover, sys);\n } else if (process.env.NODE_ENV === 'development') {\n console.error(\"Mover API used before initialization, please call `getMover()`\");\n }\n }\n\n break;\n\n case \"observed\":\n if (tabster.observedElement) {\n tabsterOnElement.observed = newTabsterProps.observed;\n tabster.observedElement.onObservedElementUpdate(element);\n } else if (process.env.NODE_ENV === 'development') {\n console.error(\"ObservedElement API used before initialization, please call `getObservedElement()`\");\n }\n\n break;\n\n case \"uncontrolled\":\n tabsterOnElement.uncontrolled = newTabsterProps.uncontrolled;\n break;\n\n case \"outline\":\n if (tabster.outline) {\n tabsterOnElement.outline = newTabsterProps.outline;\n } else if (process.env.NODE_ENV === 'development') {\n console.error(\"Outline API used before initialization, please call `getOutline()`\");\n }\n\n break;\n\n case \"sys\":\n tabsterOnElement.sys = newTabsterProps.sys;\n break;\n\n default:\n console.error(`Unknown key '${key}' in data-tabster attribute value.`);\n }\n }\n\n if (newAttr) {\n entry.attr = newAttr;\n } else {\n if (Object.keys(tabsterOnElement).length === 0) {\n delete entry.tabster;\n delete entry.attr;\n }\n\n tabster.storageEntry(element, false);\n }\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\n/**\r\n * Events sent by Tabster.\r\n */\nconst TabsterFocusInEventName = \"tabster:focusin\";\nconst TabsterFocusOutEventName = \"tabster:focusout\"; // Event is dispatched when Tabster wants to move focus as the result of\n// handling keyboard event. This allows to preventDefault() if you want to have\n// some custom logic.\n\nconst TabsterMoveFocusEventName = \"tabster:movefocus\";\n/**\r\n * Events sent by Deloser.\r\n */\n\nconst DeloserFocusLostEventName = \"tabster:deloser:focus-lost\";\n/**\r\n * Events to be sent to Deloser by the application.\r\n */\n\nconst DeloserRestoreFocusEventName = \"tabster:deloser:restore-focus\";\n/**\r\n * Events sent by Modalizer.\r\n */\n\nconst ModalizerActiveEventName = \"tabster:modalizer:active\";\nconst ModalizerInactiveEventName = \"tabster:modalizer:inactive\";\nconst ModalizerFocusInEventName = \"tabster:modalizer:focusin\";\nconst ModalizerFocusOutEventName = \"tabster:modalizer:focusout\";\n/**\r\n * Events sent by Mover.\r\n */\n\nconst MoverStateEventName = \"tabster:mover:state\";\n/**\r\n * Events to be sent to Mover by the application.\r\n */\n// Event that can be dispatched by the application to programmatically move\n// focus inside Mover.\n\nconst MoverMoveFocusEventName = \"tabster:mover:movefocus\"; // Event that can be dispatched by the application to forget or modify\n// memorized element in Mover with memorizeCurrent property.\n\nconst MoverMemorizedElementEventName = \"tabster:mover:memorized-element\";\n/**\r\n * Events sent by Groupper.\r\n */\n\n/**\r\n * Events to be sent to Groupper by the application.\r\n */\n// Event that can be dispatched by the application to programmatically enter\n// or escape Groupper.\n\nconst GroupperMoveFocusEventName = \"tabster:groupper:movefocus\";\n/**\r\n * Events sent by Restorer.\r\n */\n\nconst RestorerRestoreFocusEventName = \"tabster:restorer:restore-focus\";\n/**\r\n * Events sent by Root.\r\n */\n\nconst RootFocusEventName = \"tabster:root:focus\";\nconst RootBlurEventName = \"tabster:root:blur\"; // Node.js environments do not have CustomEvent and it is needed for the events to be\n// evaluated. It doesn't matter if it works or not in Node.js environment.\n// So, we just need to make sure that it doesn't throw undefined reference.\n\nconst CustomEvent_ = typeof CustomEvent !== \"undefined\" ? CustomEvent : function () {\n /* no-op */\n};\nclass TabsterCustomEvent extends CustomEvent_ {\n constructor(type, detail) {\n super(type, {\n bubbles: true,\n cancelable: true,\n composed: true,\n detail\n });\n this.details = detail;\n }\n\n}\nclass TabsterFocusInEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(TabsterFocusInEventName, detail);\n }\n\n}\nclass TabsterFocusOutEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(TabsterFocusOutEventName, detail);\n }\n\n}\nclass TabsterMoveFocusEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(TabsterMoveFocusEventName, detail);\n }\n\n}\nclass MoverStateEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(MoverStateEventName, detail);\n }\n\n}\nclass MoverMoveFocusEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(MoverMoveFocusEventName, detail);\n }\n\n}\nclass MoverMemorizedElementEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(MoverMemorizedElementEventName, detail);\n }\n\n}\nclass GroupperMoveFocusEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(GroupperMoveFocusEventName, detail);\n }\n\n}\nclass ModalizerActiveEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(ModalizerActiveEventName, detail);\n }\n\n}\nclass ModalizerInactiveEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(ModalizerInactiveEventName, detail);\n }\n\n}\nclass DeloserFocusLostEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(DeloserFocusLostEventName, detail);\n }\n\n}\nclass DeloserRestoreFocusEvent extends TabsterCustomEvent {\n constructor() {\n super(DeloserRestoreFocusEventName);\n }\n\n}\nclass RestorerRestoreFocusEvent extends TabsterCustomEvent {\n constructor() {\n super(RestorerRestoreFocusEventName);\n }\n\n}\nclass RootFocusEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(RootFocusEventName, detail);\n }\n\n}\nclass RootBlurEvent extends TabsterCustomEvent {\n constructor(detail) {\n super(RootBlurEventName, detail);\n }\n\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\nconst _createMutationObserver = callback => new MutationObserver(callback);\n\nconst _createTreeWalker = (doc, root, whatToShow, filter) => doc.createTreeWalker(root, whatToShow, filter);\n\nconst _getParentNode = node => node ? node.parentNode : null;\n\nconst _getParentElement = element => element ? element.parentElement : null;\n\nconst _nodeContains = (parent, child) => !!(child && (parent === null || parent === void 0 ? void 0 : parent.contains(child)));\n\nconst _getActiveElement = doc => doc.activeElement;\n\nconst _querySelector = (element, selector) => element.querySelector(selector);\n\nconst _querySelectorAll = (element, selector) => Array.prototype.slice.call(element.querySelectorAll(selector), 0);\n\nconst _getElementById = (doc, id) => doc.getElementById(id);\n\nconst _getFirstChild = node => (node === null || node === void 0 ? void 0 : node.firstChild) || null;\n\nconst _getLastChild = node => (node === null || node === void 0 ? void 0 : node.lastChild) || null;\n\nconst _getNextSibling = node => (node === null || node === void 0 ? void 0 : node.nextSibling) || null;\n\nconst _getPreviousSibling = node => (node === null || node === void 0 ? void 0 : node.previousSibling) || null;\n\nconst _getFirstElementChild = element => (element === null || element === void 0 ? void 0 : element.firstElementChild) || null;\n\nconst _getLastElementChild = element => (element === null || element === void 0 ? void 0 : element.lastElementChild) || null;\n\nconst _getNextElementSibling = element => (element === null || element === void 0 ? void 0 : element.nextElementSibling) || null;\n\nconst _getPreviousElementSibling = element => (element === null || element === void 0 ? void 0 : element.previousElementSibling) || null;\n\nconst _appendChild = (parent, child) => parent.appendChild(child);\n\nconst _insertBefore = (parent, child, referenceChild) => parent.insertBefore(child, referenceChild);\n\nconst _getSelection = ref => {\n var _a;\n\n return ((_a = ref.ownerDocument) === null || _a === void 0 ? void 0 : _a.getSelection()) || null;\n};\n\nconst _getElementsByName = (referenceElement, name) => referenceElement.ownerDocument.getElementsByName(name);\n\nconst dom = {\n createMutationObserver: _createMutationObserver,\n createTreeWalker: _createTreeWalker,\n getParentNode: _getParentNode,\n getParentElement: _getParentElement,\n nodeContains: _nodeContains,\n getActiveElement: _getActiveElement,\n querySelector: _querySelector,\n querySelectorAll: _querySelectorAll,\n getElementById: _getElementById,\n getFirstChild: _getFirstChild,\n getLastChild: _getLastChild,\n getNextSibling: _getNextSibling,\n getPreviousSibling: _getPreviousSibling,\n getFirstElementChild: _getFirstElementChild,\n getLastElementChild: _getLastElementChild,\n getNextElementSibling: _getNextElementSibling,\n getPreviousElementSibling: _getPreviousElementSibling,\n appendChild: _appendChild,\n insertBefore: _insertBefore,\n getSelection: _getSelection,\n getElementsByName: _getElementsByName\n};\nfunction setDOMAPI(domapi) {\n for (const key of Object.keys(domapi)) {\n dom[key] = domapi[key];\n }\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\nlet _isBrokenIE11;\n\nconst _DOMRect = typeof DOMRect !== \"undefined\" ? DOMRect : class {\n constructor(x, y, width, height) {\n this.left = x || 0;\n this.top = y || 0;\n this.right = (x || 0) + (width || 0);\n this.bottom = (y || 0) + (height || 0);\n }\n\n};\n\nlet _uidCounter = 0;\n\ntry {\n // IE11 only accepts `filter` argument as a function (not object with the `acceptNode`\n // property as the docs define). Also `entityReferenceExpansion` argument is not\n // optional. And it throws exception when the above arguments aren't there.\n document.createTreeWalker(document, NodeFilter.SHOW_ELEMENT);\n _isBrokenIE11 = false;\n} catch (e) {\n _isBrokenIE11 = true;\n}\n\nconst _updateDummyInputsTimeout = 100;\nfunction getInstanceContext(getWindow) {\n const win = getWindow();\n let ctx = win.__tabsterInstanceContext;\n\n if (!ctx) {\n ctx = {\n elementByUId: {},\n basics: {\n Promise: win.Promise || undefined,\n WeakRef: win.WeakRef || undefined\n },\n containerBoundingRectCache: {},\n lastContainerBoundingRectCacheId: 0,\n fakeWeakRefs: [],\n fakeWeakRefsStarted: false\n };\n win.__tabsterInstanceContext = ctx;\n }\n\n return ctx;\n}\nfunction disposeInstanceContext(win) {\n const ctx = win.__tabsterInstanceContext;\n\n if (ctx) {\n ctx.elementByUId = {};\n delete ctx.WeakRef;\n ctx.containerBoundingRectCache = {};\n\n if (ctx.containerBoundingRectCacheTimer) {\n win.clearTimeout(ctx.containerBoundingRectCacheTimer);\n }\n\n if (ctx.fakeWeakRefsTimer) {\n win.clearTimeout(ctx.fakeWeakRefsTimer);\n }\n\n ctx.fakeWeakRefs = [];\n delete win.__tabsterInstanceContext;\n }\n}\nfunction createWeakMap(win) {\n const ctx = win.__tabsterInstanceContext;\n return new ((ctx === null || ctx === void 0 ? void 0 : ctx.basics.WeakMap) || WeakMap)();\n}\nfunction hasSubFocusable(element) {\n return !!element.querySelector(FOCUSABLE_SELECTOR);\n}\n\nclass FakeWeakRef {\n constructor(target) {\n this._target = target;\n }\n\n deref() {\n return this._target;\n }\n\n static cleanup(fwr, forceRemove) {\n if (!fwr._target) {\n return true;\n }\n\n if (forceRemove || !documentContains(fwr._target.ownerDocument, fwr._target)) {\n delete fwr._target;\n return true;\n }\n\n return false;\n }\n\n}\n\nclass WeakHTMLElement {\n constructor(getWindow, element, data) {\n const context = getInstanceContext(getWindow);\n let ref;\n\n if (context.WeakRef) {\n ref = new context.WeakRef(element);\n } else {\n ref = new FakeWeakRef(element);\n context.fakeWeakRefs.push(ref);\n }\n\n this._ref = ref;\n this._data = data;\n }\n\n get() {\n const ref = this._ref;\n let element;\n\n if (ref) {\n element = ref.deref();\n\n if (!element) {\n delete this._ref;\n }\n }\n\n return element;\n }\n\n getData() {\n return this._data;\n }\n\n}\nfunction cleanupFakeWeakRefs(getWindow, forceRemove) {\n const context = getInstanceContext(getWindow);\n context.fakeWeakRefs = context.fakeWeakRefs.filter(e => !FakeWeakRef.cleanup(e, forceRemove));\n}\nfunction startFakeWeakRefsCleanup(getWindow) {\n const context = getInstanceContext(getWindow);\n\n if (!context.fakeWeakRefsStarted) {\n context.fakeWeakRefsStarted = true;\n context.WeakRef = getWeakRef(context);\n }\n\n if (!context.fakeWeakRefsTimer) {\n context.fakeWeakRefsTimer = getWindow().setTimeout(() => {\n context.fakeWeakRefsTimer = undefined;\n cleanupFakeWeakRefs(getWindow);\n startFakeWeakRefsCleanup(getWindow);\n }, 2 * 60 * 1000); // 2 minutes.\n }\n}\nfunction stopFakeWeakRefsCleanupAndClearStorage(getWindow) {\n const context = getInstanceContext(getWindow);\n context.fakeWeakRefsStarted = false;\n\n if (context.fakeWeakRefsTimer) {\n getWindow().clearTimeout(context.fakeWeakRefsTimer);\n context.fakeWeakRefsTimer = undefined;\n context.fakeWeakRefs = [];\n }\n}\nfunction createElementTreeWalker(doc, root, acceptNode) {\n // IE11 will throw an exception when the TreeWalker root is not an Element.\n if (root.nodeType !== Node.ELEMENT_NODE) {\n return undefined;\n } // TypeScript isn't aware of IE11 behaving badly.\n\n\n const filter = _isBrokenIE11 ? acceptNode : {\n acceptNode\n };\n return dom.createTreeWalker(doc, root, NodeFilter.SHOW_ELEMENT, filter, // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore: We still don't want to completely break IE11, so, entityReferenceExpansion argument is not optional.\n false\n /* Last argument is not optional for IE11! */\n );\n}\nfunction getBoundingRect(getWindow, element) {\n let cacheId = element.__tabsterCacheId;\n const context = getInstanceContext(getWindow);\n const cached = cacheId ? context.containerBoundingRectCache[cacheId] : undefined;\n\n if (cached) {\n return cached.rect;\n }\n\n const scrollingElement = element.ownerDocument && element.ownerDocument.documentElement;\n\n if (!scrollingElement) {\n return new _DOMRect();\n } // A bounding rect of the top-level element contains the whole page regardless of the\n // scrollbar. So, we improvise a little and limiting the final result...\n\n\n let left = 0;\n let top = 0;\n let right = scrollingElement.clientWidth;\n let bottom = scrollingElement.clientHeight;\n\n if (element !== scrollingElement) {\n const r = element.getBoundingClientRect();\n left = Math.max(left, r.left);\n top = Math.max(top, r.top);\n right = Math.min(right, r.right);\n bottom = Math.min(bottom, r.bottom);\n }\n\n const rect = new _DOMRect(left < right ? left : -1, top < bottom ? top : -1, left < right ? right - left : 0, top < bottom ? bottom - top : 0);\n\n if (!cacheId) {\n cacheId = \"r-\" + ++context.lastContainerBoundingRectCacheId;\n element.__tabsterCacheId = cacheId;\n }\n\n context.containerBoundingRectCache[cacheId] = {\n rect,\n element\n };\n\n if (!context.containerBoundingRectCacheTimer) {\n context.containerBoundingRectCacheTimer = window.setTimeout(() => {\n context.containerBoundingRectCacheTimer = undefined;\n\n for (const cId of Object.keys(context.containerBoundingRectCache)) {\n delete context.containerBoundingRectCache[cId].element.__tabsterCacheId;\n }\n\n context.containerBoundingRectCache = {};\n }, 50);\n }\n\n return rect;\n}\nfunction isElementVerticallyVisibleInContainer(getWindow, element, tolerance) {\n const container = getScrollableContainer(element);\n\n if (!container) {\n return false;\n }\n\n const containerRect = getBoundingRect(getWindow, container);\n const elementRect = element.getBoundingClientRect();\n const intersectionTolerance = elementRect.height * (1 - tolerance);\n const topIntersection = Math.max(0, containerRect.top - elementRect.top);\n const bottomIntersection = Math.max(0, elementRect.bottom - containerRect.bottom);\n const totalIntersection = topIntersection + bottomIntersection;\n return totalIntersection === 0 || totalIntersection <= intersectionTolerance;\n}\nfunction scrollIntoView(getWindow, element, alignToTop) {\n // Built-in DOM's scrollIntoView() is cool, but when we have nested containers,\n // it scrolls all of them, not just the deepest one. So, trying to work it around.\n const container = getScrollableContainer(element);\n\n if (container) {\n const containerRect = getBoundingRect(getWindow, container);\n const elementRect = element.getBoundingClientRect();\n\n if (alignToTop) {\n container.scrollTop += elementRect.top - containerRect.top;\n } else {\n container.scrollTop += elementRect.bottom - containerRect.bottom;\n }\n }\n}\nfunction getScrollableContainer(element) {\n const doc = element.ownerDocument;\n\n if (doc) {\n for (let el = dom.getParentElement(element); el; el = dom.getParentElement(el)) {\n if (el.scrollWidth > el.clientWidth || el.scrollHeight > el.clientHeight) {\n return el;\n }\n }\n\n return doc.documentElement;\n }\n\n return null;\n}\nfunction makeFocusIgnored(element) {\n element.__shouldIgnoreFocus = true;\n}\nfunction shouldIgnoreFocus(element) {\n return !!element.__shouldIgnoreFocus;\n}\nfunction getUId(wnd) {\n const rnd = new Uint32Array(4);\n\n if (wnd.crypto && wnd.crypto.getRandomValues) {\n wnd.crypto.getRandomValues(rnd);\n } else if (wnd.msCrypto && wnd.msCrypto.getRandomValues) {\n wnd.msCrypto.getRandomValues(rnd);\n } else {\n for (let i = 0; i < rnd.length; i++) {\n rnd[i] = 0xffffffff * Math.random();\n }\n }\n\n const srnd = [];\n\n for (let i = 0; i < rnd.length; i++) {\n srnd.push(rnd[i].toString(36));\n }\n\n srnd.push(\"|\");\n srnd.push((++_uidCounter).toString(36));\n srnd.push(\"|\");\n srnd.push(Date.now().toString(36));\n return srnd.join(\"\");\n}\nfunction getElementUId(getWindow, element) {\n const context = getInstanceContext(getWindow);\n let uid = element.__tabsterElementUID;\n\n if (!uid) {\n uid = element.__tabsterElementUID = getUId(getWindow());\n }\n\n if (!context.elementByUId[uid] && documentContains(element.ownerDocument, element)) {\n context.elementByUId[uid] = new WeakHTMLElement(getWindow, element);\n }\n\n return uid;\n}\nfunction getWindowUId(win) {\n let uid = win.__tabsterCrossOriginWindowUID;\n\n if (!uid) {\n uid = win.__tabsterCrossOriginWindowUID = getUId(win);\n }\n\n return uid;\n}\nfunction clearElementCache(getWindow, parent) {\n const context = getInstanceContext(getWindow);\n\n for (const key of Object.keys(context.elementByUId)) {\n const wel = context.elementByUId[key];\n const el = wel && wel.get();\n\n if (el && parent) {\n if (!dom.nodeContains(parent, el)) {\n continue;\n }\n }\n\n delete context.elementByUId[key];\n }\n} // IE11 doesn't have document.contains()...\n\nfunction documentContains(doc, element) {\n return dom.nodeContains(doc === null || doc === void 0 ? void 0 : doc.body, element);\n}\nfunction matchesSelector(element, selector) {\n const matches = element.matches || element.matchesSelector || element.msMatchesSelector || element.webkitMatchesSelector;\n return matches && matches.call(element, selector);\n}\nfunction getPromise(getWindow) {\n const context = getInstanceContext(getWindow);\n\n if (context.basics.Promise) {\n return context.basics.Promise;\n }\n\n throw new Error(\"No Promise defined.\");\n}\nfunction getWeakRef(context) {\n return context.basics.WeakRef;\n}\nlet _lastTabsterPartId = 0;\nclass TabsterPart {\n constructor(tabster, element, props) {\n const getWindow = tabster.getWindow;\n this._tabster = tabster;\n this._element = new WeakHTMLElement(getWindow, element);\n this._props = { ...props\n };\n this.id = \"i\" + ++_lastTabsterPartId;\n }\n\n getElement() {\n return this._element.get();\n }\n\n getProps() {\n return this._props;\n }\n\n setProps(props) {\n this._props = { ...props\n };\n }\n\n}\n/**\r\n * Dummy HTML elements that are used as focus sentinels for the DOM enclosed within them\r\n */\n\nclass DummyInput {\n constructor(getWindow, isOutside, props, element, fixedTarget) {\n var _a;\n\n this._focusIn = e => {\n if (this._fixedTarget) {\n const target = this._fixedTarget.get();\n\n if (target) {\n nativeFocus(target);\n }\n\n return;\n }\n\n const input = this.input;\n\n if (this.onFocusIn && input) {\n const relatedTarget = e.relatedTarget;\n this.onFocusIn(this, this._isBackward(true, input, relatedTarget), relatedTarget);\n }\n };\n\n this._focusOut = e => {\n if (this._fixedTarget) {\n return;\n }\n\n this.useDefaultAction = false;\n const input = this.input;\n\n if (this.onFocusOut && input) {\n const relatedTarget = e.relatedTarget;\n this.onFocusOut(this, this._isBackward(false, input, relatedTarget), relatedTarget);\n }\n };\n\n const win = getWindow();\n const input = win.document.createElement(\"i\");\n input.tabIndex = 0;\n input.setAttribute(\"role\", \"none\");\n input.setAttribute(TABSTER_DUMMY_INPUT_ATTRIBUTE_NAME, \"\");\n input.setAttribute(\"aria-hidden\", \"true\");\n const style = input.style;\n style.position = \"fixed\";\n style.width = style.height = \"1px\";\n style.opacity = \"0.001\";\n style.zIndex = \"-1\";\n style.setProperty(\"content-visibility\", \"hidden\");\n makeFocusIgnored(input);\n this.input = input;\n this.isFirst = props.isFirst;\n this.isOutside = isOutside;\n this._isPhantom = (_a = props.isPhantom) !== null && _a !== void 0 ? _a : false;\n this._fixedTarget = fixedTarget;\n input.addEventListener(\"focusin\", this._focusIn);\n input.addEventListener(\"focusout\", this._focusOut);\n input.__tabsterDummyContainer = element;\n\n if (this._isPhantom) {\n this._disposeTimer = win.setTimeout(() => {\n delete this._disposeTimer;\n this.dispose();\n }, 0);\n\n this._clearDisposeTimeout = () => {\n if (this._disposeTimer) {\n win.clearTimeout(this._disposeTimer);\n delete this._disposeTimer;\n }\n\n delete this._clearDisposeTimeout;\n };\n }\n }\n\n dispose() {\n var _a;\n\n if (this._clearDisposeTimeout) {\n this._clearDisposeTimeout();\n }\n\n const input = this.input;\n\n if (!input) {\n return;\n }\n\n delete this._fixedTarget;\n delete this.onFocusIn;\n delete this.onFocusOut;\n delete this.input;\n input.removeEventListener(\"focusin\", this._focusIn);\n input.removeEventListener(\"focusout\", this._focusOut);\n delete input.__tabsterDummyContainer;\n (_a = dom.getParentNode(input)) === null || _a === void 0 ? void 0 : _a.removeChild(input);\n }\n\n setTopLeft(top, left) {\n var _a;\n\n const style = (_a = this.input) === null || _a === void 0 ? void 0 : _a.style;\n\n if (style) {\n style.top = `${top}px`;\n style.left = `${left}px`;\n }\n }\n\n _isBackward(isIn, current, previous) {\n return isIn && !previous ? !this.isFirst : !!(previous && current.compareDocumentPosition(previous) & Node.DOCUMENT_POSITION_FOLLOWING);\n }\n\n}\nconst DummyInputManagerPriorities = {\n Root: 1,\n Modalizer: 2,\n Mover: 3,\n Groupper: 4\n};\nclass DummyInputManager {\n constructor(tabster, element, priority, sys, outsideByDefault, callForDefaultAction) {\n this._element = element;\n this._instance = new DummyInputManagerCore(tabster, element, this, priority, sys, outsideByDefault, callForDefaultAction);\n }\n\n _setHandlers(onFocusIn, onFocusOut) {\n this._onFocusIn = onFocusIn;\n this._onFocusOut = onFocusOut;\n }\n\n moveOut(backwards) {\n var _a;\n\n (_a = this._instance) === null || _a === void 0 ? void 0 : _a.moveOut(backwards);\n }\n\n moveOutWithDefaultAction(backwards, relatedEvent) {\n var _a;\n\n (_a = this._instance) === null || _a === void 0 ? void 0 : _a.moveOutWithDefaultAction(backwards, relatedEvent);\n }\n\n getHandler(isIn) {\n return isIn ? this._onFocusIn : this._onFocusOut;\n }\n\n setTabbable(tabbable) {\n var _a;\n\n (_a = this._instance) === null || _a === void 0 ? void 0 : _a.setTabbable(this, tabbable);\n }\n\n dispose() {\n if (this._instance) {\n this._instance.dispose(this);\n\n delete this._instance;\n }\n\n delete this._onFocusIn;\n delete this._onFocusOut;\n }\n\n static moveWithPhantomDummy(tabster, element, // The target element to move to or out of.\n moveOutOfElement, // Whether to move out of the element or into it.\n isBackward, // Are we tabbing of shift-tabbing?\n relatedEvent // The event that triggered the move.\n ) {\n // Phantom dummy is a hack to use browser's default action to move\n // focus from a specific point in the application to the next/previous\n // element. Default action is needed because next focusable element\n // is not always available to focus directly (for example, next focusable\n // is inside isolated iframe) or for uncontrolled areas we want to make\n // sure that something that controls it takes care of the focusing.\n // It works in a way that during the Tab key handling, we create a dummy\n // input element, place it to the specific place in the DOM and focus it,\n // then the default action of the Tab press will move focus from our dummy\n // input. And we remove it from the DOM right after that.\n const dummy = new DummyInput(tabster.getWindow, true, {\n isPhantom: true,\n isFirst: true\n });\n const input = dummy.input;\n\n if (input) {\n let parent;\n let insertBefore; // Let's say we have a following DOM structure:\n //
\n // \n //
\n // \n // \n //
\n // \n //
\n //\n // We pass the \"uncontrolled\" div as the element to move to or out of.\n //\n // When we pass moveOutOfElement=true and isBackward=false,\n // the phantom dummy input will be inserted before Button4.\n //\n // When we pass moveOutOfElement=true and isBackward=true, there are\n // two cases. If the uncontrolled element is focusable (has tabindex=0),\n // the phantom dummy input will be inserted after Button1. If the\n // uncontrolled element is not focusable, the phantom dummy input will be\n // inserted before Button2.\n //\n // When we pass moveOutOfElement=false and isBackward=false, the\n // phantom dummy input will be inserted after Button1.\n //\n // When we pass moveOutOfElement=false and isBackward=true, the phantom\n // dummy input will be inserted before Button4.\n //\n // And we have a corner case for and we make sure that the inserted\n // dummy is inserted properly when there are existing permanent dummies.\n\n if (element.tagName === \"BODY\") {\n // We cannot insert elements outside of BODY.\n parent = element;\n insertBefore = moveOutOfElement && isBackward || !moveOutOfElement && !isBackward ? dom.getFirstElementChild(element) : null;\n } else {\n if (moveOutOfElement && (!isBackward || isBackward && !tabster.focusable.isFocusable(element, false, true, true))) {\n parent = element;\n insertBefore = isBackward ? element.firstElementChild : null;\n } else {\n parent = dom.getParentElement(element);\n insertBefore = moveOutOfElement && isBackward || !moveOutOfElement && !isBackward ? element : dom.getNextElementSibling(element);\n }\n\n let potentialDummy;\n let dummyFor;\n\n do {\n // This is a safety pillow for the cases when someone, combines\n // groupper with uncontrolled on the same node. Which is technically\n // not correct, but moving into the container element via its dummy\n // input would produce a correct behaviour in uncontrolled mode.\n potentialDummy = moveOutOfElement && isBackward || !moveOutOfElement && !isBackward ? dom.getPreviousElementSibling(insertBefore) : insertBefore;\n dummyFor = getDummyInputContainer(potentialDummy);\n\n if (dummyFor === element) {\n insertBefore = moveOutOfElement && isBackward || !moveOutOfElement && !isBackward ? potentialDummy : dom.getNextElementSibling(potentialDummy);\n } else {\n dummyFor = null;\n }\n } while (dummyFor);\n }\n\n if (parent === null || parent === void 0 ? void 0 : parent.dispatchEvent(new TabsterMoveFocusEvent({\n by: \"root\",\n owner: parent,\n next: null,\n relatedEvent\n }))) {\n dom.insertBefore(parent, input, insertBefore);\n nativeFocus(input);\n }\n }\n }\n\n static addPhantomDummyWithTarget(tabster, sourceElement, isBackward, targetElement) {\n const dummy = new DummyInput(tabster.getWindow, true, {\n isPhantom: true,\n isFirst: true\n }, undefined, new WeakHTMLElement(tabster.getWindow, targetElement));\n const input = dummy.input;\n\n if (input) {\n let dummyParent;\n let insertBefore;\n\n if (hasSubFocusable(sourceElement) && !isBackward) {\n dummyParent = sourceElement;\n insertBefore = dom.getFirstElementChild(sourceElement);\n } else {\n dummyParent = dom.getParentElement(sourceElement);\n insertBefore = isBackward ? sourceElement : dom.getNextElementSibling(sourceElement);\n }\n\n if (dummyParent) {\n dom.insertBefore(dummyParent, input, insertBefore);\n }\n }\n }\n\n}\n\nfunction setDummyInputDebugValue(dummy, wrappers) {\n var _a;\n\n const what = {\n 1: \"Root\",\n 2: \"Modalizer\",\n 3: \"Mover\",\n 4: \"Groupper\"\n };\n (_a = dummy.input) === null || _a === void 0 ? void 0 : _a.setAttribute(TABSTER_DUMMY_INPUT_ATTRIBUTE_NAME, [`isFirst=${dummy.isFirst}`, `isOutside=${dummy.isOutside}`, ...wrappers.map(w => `(${what[w.priority]}, tabbable=${w.tabbable})`)].join(\", \"));\n}\n\nclass DummyInputObserver {\n constructor(win) {\n this._updateQueue = new Set();\n this._lastUpdateQueueTime = 0;\n this._changedParents = new WeakSet();\n this._dummyElements = [];\n this._dummyCallbacks = new WeakMap();\n\n this._domChanged = parent => {\n var _a;\n\n if (this._changedParents.has(parent)) {\n return;\n }\n\n this._changedParents.add(parent);\n\n if (this._updateDummyInputsTimer) {\n return;\n }\n\n this._updateDummyInputsTimer = (_a = this._win) === null || _a === void 0 ? void 0 : _a.call(this).setTimeout(() => {\n delete this._updateDummyInputsTimer;\n\n for (const ref of this._dummyElements) {\n const dummyElement = ref.get();\n\n if (dummyElement) {\n const callback = this._dummyCallbacks.get(dummyElement);\n\n if (callback) {\n const dummyParent = dom.getParentNode(dummyElement);\n\n if (!dummyParent || this._changedParents.has(dummyParent)) {\n callback();\n }\n }\n }\n }\n\n this._changedParents = new WeakSet();\n }, _updateDummyInputsTimeout);\n };\n\n this._win = win;\n }\n\n add(dummy, callback) {\n if (!this._dummyCallbacks.has(dummy) && this._win) {\n this._dummyElements.push(new WeakHTMLElement(this._win, dummy));\n\n this._dummyCallbacks.set(dummy, callback);\n\n this.domChanged = this._domChanged;\n }\n }\n\n remove(dummy) {\n this._dummyElements = this._dummyElements.filter(ref => {\n const element = ref.get();\n return element && element !== dummy;\n });\n\n this._dummyCallbacks.delete(dummy);\n\n if (this._dummyElements.length === 0) {\n delete this.domChanged;\n }\n }\n\n dispose() {\n var _a;\n\n const win = (_a = this._win) === null || _a === void 0 ? void 0 : _a.call(this);\n\n if (this._updateTimer) {\n win === null || win === void 0 ? void 0 : win.clearTimeout(this._updateTimer);\n delete this._updateTimer;\n }\n\n if (this._updateDummyInputsTimer) {\n win === null || win === void 0 ? void 0 : win.clearTimeout(this._updateDummyInputsTimer);\n delete this._updateDummyInputsTimer;\n }\n\n this._changedParents = new WeakSet();\n this._dummyCallbacks = new WeakMap();\n this._dummyElements = [];\n\n this._updateQueue.clear();\n\n delete this.domChanged;\n delete this._win;\n }\n\n updatePositions(compute) {\n if (!this._win) {\n // As this is a public method, we make sure that it has no effect when\n // called after dispose().\n return;\n }\n\n this._updateQueue.add(compute);\n\n this._lastUpdateQueueTime = Date.now();\n\n this._scheduledUpdatePositions();\n }\n\n _scheduledUpdatePositions() {\n var _a;\n\n if (this._updateTimer) {\n return;\n }\n\n this._updateTimer = (_a = this._win) === null || _a === void 0 ? void 0 : _a.call(this).setTimeout(() => {\n delete this._updateTimer; // updatePositions() might be called quite a lot during the scrolling.\n // So, instead of clearing the timeout and scheduling a new one, we\n // check if enough time has passed since the last updatePositions() call\n // and only schedule a new one if not.\n // At maximum, we will update dummy inputs positions\n // _updateDummyInputsTimeout * 2 after the last updatePositions() call.\n\n if (this._lastUpdateQueueTime + _updateDummyInputsTimeout <= Date.now()) {\n // A cache for current bulk of updates to reduce getComputedStyle() calls.\n const scrollTopLeftCache = new Map();\n const setTopLeftCallbacks = [];\n\n for (const compute of this._updateQueue) {\n setTopLeftCallbacks.push(compute(scrollTopLeftCache));\n }\n\n this._updateQueue.clear(); // We're splitting the computation of offsets and setting them to avoid extra\n // reflows.\n\n\n for (const setTopLeft of setTopLeftCallbacks) {\n setTopLeft();\n } // Explicitly clear to not hold references till the next garbage collection.\n\n\n scrollTopLeftCache.clear();\n } else {\n this._scheduledUpdatePositions();\n }\n }, _updateDummyInputsTimeout);\n }\n\n}\n/**\r\n * Parent class that encapsulates the behaviour of dummy inputs (focus sentinels)\r\n */\n\nclass DummyInputManagerCore {\n constructor(tabster, element, manager, priority, sys, outsideByDefault, callForDefaultAction) {\n this._wrappers = [];\n this._isOutside = false;\n this._transformElements = new Set();\n\n this._onFocusIn = (dummyInput, isBackward, relatedTarget) => {\n this._onFocus(true, dummyInput, isBackward, relatedTarget);\n };\n\n this._onFocusOut = (dummyInput, isBackward, relatedTarget) => {\n this._onFocus(false, dummyInput, isBackward, relatedTarget);\n };\n\n this.moveOut = backwards => {\n var _a;\n\n const first = this._firstDummy;\n const last = this._lastDummy;\n\n if (first && last) {\n // For the sake of performance optimization, the dummy input\n // position in the DOM updates asynchronously from the DOM change.\n // Calling _ensurePosition() to make sure the position is correct.\n this._ensurePosition();\n\n const firstInput = first.input;\n const lastInput = last.input;\n const element = (_a = this._element) === null || _a === void 0 ? void 0 : _a.get();\n\n if (firstInput && lastInput && element) {\n let toFocus;\n\n if (backwards) {\n firstInput.tabIndex = 0;\n toFocus = firstInput;\n } else {\n lastInput.tabIndex = 0;\n toFocus = lastInput;\n }\n\n if (toFocus) {\n nativeFocus(toFocus);\n }\n }\n }\n };\n /**\r\n * Prepares to move focus out of the given element by focusing\r\n * one of the dummy inputs and setting the `useDefaultAction` flag\r\n * @param backwards focus moving to an element behind the given element\r\n */\n\n\n this.moveOutWithDefaultAction = (backwards, relatedEvent) => {\n var _a;\n\n const first = this._firstDummy;\n const last = this._lastDummy;\n\n if (first && last) {\n // For the sake of performance optimization, the dummy input\n // position in the DOM updates asynchronously from the DOM change.\n // Calling _ensurePosition() to make sure the position is correct.\n this._ensurePosition();\n\n const firstInput = first.input;\n const lastInput = last.input;\n const element = (_a = this._element) === null || _a === void 0 ? void 0 : _a.get();\n\n if (firstInput && lastInput && element) {\n let toFocus;\n\n if (backwards) {\n if (!first.isOutside && this._tabster.focusable.isFocusable(element, true, true, true)) {\n toFocus = element;\n } else {\n first.useDefaultAction = true;\n firstInput.tabIndex = 0;\n toFocus = firstInput;\n }\n } else {\n last.useDefaultAction = true;\n lastInput.tabIndex = 0;\n toFocus = lastInput;\n }\n\n if (toFocus && element.dispatchEvent(new TabsterMoveFocusEvent({\n by: \"root\",\n owner: element,\n next: null,\n relatedEvent\n }))) {\n nativeFocus(toFocus);\n }\n }\n }\n };\n\n this.setTabbable = (manager, tabbable) => {\n var _a, _b;\n\n for (const w of this._wrappers) {\n if (w.manager === manager) {\n w.tabbable = tabbable;\n break;\n }\n }\n\n const wrapper = this._getCurrent();\n\n if (wrapper) {\n const tabIndex = wrapper.tabbable ? 0 : -1;\n let input = (_a = this._firstDummy) === null || _a === void 0 ? void 0 : _a.input;\n\n if (input) {\n input.tabIndex = tabIndex;\n }\n\n input = (_b = this._lastDummy) === null || _b === void 0 ? void 0 : _b.input;\n\n if (input) {\n input.tabIndex = tabIndex;\n }\n }\n\n if (process.env.NODE_ENV === 'development') {\n this._firstDummy && setDummyInputDebugValue(this._firstDummy, this._wrappers);\n this._lastDummy && setDummyInputDebugValue(this._lastDummy, this._wrappers);\n }\n };\n /**\r\n * Adds dummy inputs as the first and last child of the given element\r\n * Called each time the children under the element is mutated\r\n */\n\n\n this._addDummyInputs = () => {\n if (this._addTimer) {\n return;\n }\n\n this._addTimer = this._getWindow().setTimeout(() => {\n delete this._addTimer;\n\n this._ensurePosition();\n\n if (process.env.NODE_ENV === 'development') {\n this._firstDummy && setDummyInputDebugValue(this._firstDummy, this._wrappers);\n this._lastDummy && setDummyInputDebugValue(this._lastDummy, this._wrappers);\n }\n\n this._addTransformOffsets();\n }, 0);\n };\n\n this._addTransformOffsets = () => {\n this._tabster._dummyObserver.updatePositions(this._computeTransformOffsets);\n };\n\n this._computeTransformOffsets = scrollTopLeftCache => {\n var _a, _b;\n\n const from = ((_a = this._firstDummy) === null || _a === void 0 ? void 0 : _a.input) || ((_b = this._lastDummy) === null || _b === void 0 ? void 0 : _b.input);\n const transformElements = this._transformElements;\n const newTransformElements = new Set();\n let scrollTop = 0;\n let scrollLeft = 0;\n\n const win = this._getWindow();\n\n for (let element = from; element && element.nodeType === Node.ELEMENT_NODE; element = dom.getParentElement(element)) {\n let scrollTopLeft = scrollTopLeftCache.get(element); // getComputedStyle() and element.scrollLeft/Top() cause style recalculation,\n // so we cache the result across all elements in the current bulk.\n\n if (scrollTopLeft === undefined) {\n const transform = win.getComputedStyle(element).transform;\n\n if (transform && transform !== \"none\") {\n scrollTopLeft = {\n scrollTop: element.scrollTop,\n scrollLeft: element.scrollLeft\n };\n }\n\n scrollTopLeftCache.set(element, scrollTopLeft || null);\n }\n\n if (scrollTopLeft) {\n newTransformElements.add(element);\n\n if (!transformElements.has(element)) {\n element.addEventListener(\"scroll\", this._addTransformOffsets);\n }\n\n scrollTop += scrollTopLeft.scrollTop;\n scrollLeft += scrollTopLeft.scrollLeft;\n }\n }\n\n for (const el of transformElements) {\n if (!newTransformElements.has(el)) {\n el.removeEventListener(\"scroll\", this._addTransformOffsets);\n }\n }\n\n this._transformElements = newTransformElements;\n return () => {\n var _a, _b;\n\n (_a = this._firstDummy) === null || _a === void 0 ? void 0 : _a.setTopLeft(scrollTop, scrollLeft);\n (_b = this._lastDummy) === null || _b === void 0 ? void 0 : _b.setTopLeft(scrollTop, scrollLeft);\n };\n };\n\n const el = element.get();\n\n if (!el) {\n throw new Error(\"No element\");\n }\n\n this._tabster = tabster;\n this._getWindow = tabster.getWindow;\n this._callForDefaultAction = callForDefaultAction;\n const instance = el.__tabsterDummy;\n\n (instance || this)._wrappers.push({\n manager,\n priority,\n tabbable: true\n });\n\n if (instance) {\n if (process.env.NODE_ENV === 'development') {\n this._firstDummy && setDummyInputDebugValue(this._firstDummy, instance._wrappers);\n this._lastDummy && setDummyInputDebugValue(this._lastDummy, instance._wrappers);\n }\n\n return instance;\n }\n\n el.__tabsterDummy = this; // Some elements allow only specific types of direct descendants and we need to\n // put our dummy inputs inside or outside of the element accordingly.\n\n const forcedDummyPosition = sys === null || sys === void 0 ? void 0 : sys.dummyInputsPosition;\n const tagName = el.tagName;\n this._isOutside = !forcedDummyPosition ? (outsideByDefault || tagName === \"UL\" || tagName === \"OL\" || tagName === \"TABLE\") && !(tagName === \"LI\" || tagName === \"TD\" || tagName === \"TH\") : forcedDummyPosition === SysDummyInputsPositions.Outside;\n this._firstDummy = new DummyInput(this._getWindow, this._isOutside, {\n isFirst: true\n }, element);\n this._lastDummy = new DummyInput(this._getWindow, this._isOutside, {\n isFirst: false\n }, element); // We will be checking dummy input parents to see if their child list have changed.\n // So, it is enough to have just one of the inputs observed, because\n // both dummy inputs always have the same parent.\n\n const dummyElement = this._firstDummy.input;\n dummyElement && tabster._dummyObserver.add(dummyElement, this._addDummyInputs);\n this._firstDummy.onFocusIn = this._onFocusIn;\n this._firstDummy.onFocusOut = this._onFocusOut;\n this._lastDummy.onFocusIn = this._onFocusIn;\n this._lastDummy.onFocusOut = this._onFocusOut;\n this._element = element;\n\n this._addDummyInputs();\n }\n\n dispose(manager, force) {\n var _a, _b, _c, _d;\n\n const wrappers = this._wrappers = this._wrappers.filter(w => w.manager !== manager && !force);\n\n if (process.env.NODE_ENV === 'development') {\n this._firstDummy && setDummyInputDebugValue(this._firstDummy, wrappers);\n this._lastDummy && setDummyInputDebugValue(this._lastDummy, wrappers);\n }\n\n if (wrappers.length === 0) {\n delete ((_a = this._element) === null || _a === void 0 ? void 0 : _a.get()).__tabsterDummy;\n\n for (const el of this._transformElements) {\n el.removeEventListener(\"scroll\", this._addTransformOffsets);\n }\n\n this._transformElements.clear();\n\n const win = this._getWindow();\n\n if (this._addTimer) {\n win.clearTimeout(this._addTimer);\n delete this._addTimer;\n }\n\n const dummyElement = (_b = this._firstDummy) === null || _b === void 0 ? void 0 : _b.input;\n dummyElement && this._tabster._dummyObserver.remove(dummyElement);\n (_c = this._firstDummy) === null || _c === void 0 ? void 0 : _c.dispose();\n (_d = this._lastDummy) === null || _d === void 0 ? void 0 : _d.dispose();\n }\n }\n\n _onFocus(isIn, dummyInput, isBackward, relatedTarget) {\n var _a;\n\n const wrapper = this._getCurrent();\n\n if (wrapper && (!dummyInput.useDefaultAction || this._callForDefaultAction)) {\n (_a = wrapper.manager.getHandler(isIn)) === null || _a === void 0 ? void 0 : _a(dummyInput, isBackward, relatedTarget);\n }\n }\n\n _getCurrent() {\n this._wrappers.sort((a, b) => {\n if (a.tabbable !== b.tabbable) {\n return a.tabbable ? -1 : 1;\n }\n\n return a.priority - b.priority;\n });\n\n return this._wrappers[0];\n }\n\n _ensurePosition() {\n var _a, _b, _c;\n\n const element = (_a = this._element) === null || _a === void 0 ? void 0 : _a.get();\n const firstDummyInput = (_b = this._firstDummy) === null || _b === void 0 ? void 0 : _b.input;\n const lastDummyInput = (_c = this._lastDummy) === null || _c === void 0 ? void 0 : _c.input;\n\n if (!element || !firstDummyInput || !lastDummyInput) {\n return;\n }\n\n if (this._isOutside) {\n const elementParent = dom.getParentNode(element);\n\n if (elementParent) {\n const nextSibling = dom.getNextSibling(element);\n\n if (nextSibling !== lastDummyInput) {\n dom.insertBefore(elementParent, lastDummyInput, nextSibling);\n }\n\n if (dom.getPreviousElementSibling(element) !== firstDummyInput) {\n dom.insertBefore(elementParent, firstDummyInput, element);\n }\n }\n } else {\n if (dom.getLastElementChild(element) !== lastDummyInput) {\n dom.appendChild(element, lastDummyInput);\n }\n\n const firstElementChild = dom.getFirstElementChild(element);\n\n if (firstElementChild && firstElementChild !== firstDummyInput && firstElementChild.parentNode) {\n dom.insertBefore(firstElementChild.parentNode, firstDummyInput, firstElementChild);\n }\n }\n }\n\n}\n\nfunction getLastChild$2(container) {\n let lastChild = null;\n\n for (let i = dom.getLastElementChild(container); i; i = dom.getLastElementChild(i)) {\n lastChild = i;\n }\n\n return lastChild || undefined;\n}\nfunction getAdjacentElement(from, prev) {\n let cur = from;\n let adjacent = null;\n\n while (cur && !adjacent) {\n adjacent = prev ? dom.getPreviousElementSibling(cur) : dom.getNextElementSibling(cur);\n cur = dom.getParentElement(cur);\n }\n\n return adjacent || undefined;\n}\nfunction augmentAttribute(tabster, element, name, value // Restore original value when undefined.\n) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n const entry = tabster.storageEntry(element, true);\n let ret = false;\n\n if (!entry.aug) {\n if (value === undefined) {\n return ret;\n }\n\n entry.aug = {};\n }\n\n if (value === undefined) {\n if (name in entry.aug) {\n const origVal = entry.aug[name];\n delete entry.aug[name];\n\n if (origVal === null) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, origVal);\n }\n\n ret = true;\n }\n } else {\n let origValue;\n\n if (!(name in entry.aug)) {\n origValue = element.getAttribute(name);\n }\n\n if (origValue !== undefined && origValue !== value) {\n entry.aug[name] = origValue;\n\n if (value === null) {\n element.removeAttribute(name);\n } else {\n element.setAttribute(name, value);\n }\n\n ret = true;\n }\n }\n\n if (value === undefined && Object.keys(entry.aug).length === 0) {\n delete entry.aug;\n tabster.storageEntry(element, false);\n }\n\n return ret;\n}\nfunction isDisplayNone(element) {\n var _a, _b;\n\n const elementDocument = element.ownerDocument;\n const computedStyle = (_a = elementDocument.defaultView) === null || _a === void 0 ? void 0 : _a.getComputedStyle(element); // offsetParent is null for elements with display:none, display:fixed and for .\n\n if (element.offsetParent === null && elementDocument.body !== element && (computedStyle === null || computedStyle === void 0 ? void 0 : computedStyle.position) !== \"fixed\") {\n return true;\n } // For our purposes of looking for focusable elements, visibility:hidden has the same\n // effect as display:none.\n\n\n if ((computedStyle === null || computedStyle === void 0 ? void 0 : computedStyle.visibility) === \"hidden\") {\n return true;\n } // if an element has display: fixed, we need to check if it is also hidden with CSS,\n // or within a parent hidden with CSS\n\n\n if ((computedStyle === null || computedStyle === void 0 ? void 0 : computedStyle.position) === \"fixed\") {\n if (computedStyle.display === \"none\") {\n return true;\n }\n\n if (((_b = element.parentElement) === null || _b === void 0 ? void 0 : _b.offsetParent) === null && elementDocument.body !== element.parentElement) {\n return true;\n }\n }\n\n return false;\n}\nfunction isRadio(element) {\n return element.tagName === \"INPUT\" && !!element.name && element.type === \"radio\";\n}\nfunction getRadioButtonGroup(element) {\n if (!isRadio(element)) {\n return;\n }\n\n const name = element.name;\n let radioButtons = Array.from(dom.getElementsByName(element, name));\n let checked;\n radioButtons = radioButtons.filter(el => {\n if (isRadio(el)) {\n if (el.checked) {\n checked = el;\n }\n\n return true;\n }\n\n return false;\n });\n return {\n name,\n buttons: new Set(radioButtons),\n checked\n };\n}\n/**\r\n * If the passed element is Tabster dummy input, returns the container element this dummy input belongs to.\r\n * @param element Element to check for being dummy input.\r\n * @returns Dummy input container element (if the passed element is a dummy input) or null.\r\n */\n\nfunction getDummyInputContainer(element) {\n var _a;\n\n return ((_a = element === null || element === void 0 ? void 0 : element.__tabsterDummyContainer) === null || _a === void 0 ? void 0 : _a.get()) || null;\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\nfunction getTabsterAttribute(props, plain) {\n const attr = JSON.stringify(props);\n\n if (plain === true) {\n return attr;\n }\n\n return {\n [TABSTER_ATTRIBUTE_NAME]: attr\n };\n}\n/**\r\n * Updates Tabster props object with new props.\r\n * @param element an element to set data-tabster attribute on.\r\n * @param props current Tabster props to update.\r\n * @param newProps new Tabster props to add.\r\n * When the value of a property in newProps is undefined, the property\r\n * will be removed from the attribute.\r\n */\n\nfunction mergeTabsterProps(props, newProps) {\n for (const key of Object.keys(newProps)) {\n const value = newProps[key];\n\n if (value) {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n props[key] = value;\n } else {\n delete props[key];\n }\n }\n}\n/**\r\n * Sets or updates Tabster attribute of the element.\r\n * @param element an element to set data-tabster attribute on.\r\n * @param newProps new Tabster props to set.\r\n * @param update if true, newProps will be merged with the existing props.\r\n * When true and the value of a property in newProps is undefined, the property\r\n * will be removed from the attribute.\r\n */\n\nfunction setTabsterAttribute(element, newProps, update) {\n let props;\n\n if (update) {\n const attr = element.getAttribute(TABSTER_ATTRIBUTE_NAME);\n\n if (attr) {\n try {\n props = JSON.parse(attr);\n } catch (e) {\n if (process.env.NODE_ENV === 'development') {\n console.error(`data-tabster attribute error: ${e}`, element);\n }\n }\n }\n }\n\n if (!props) {\n props = {};\n }\n\n mergeTabsterProps(props, newProps);\n\n if (Object.keys(props).length > 0) {\n element.setAttribute(TABSTER_ATTRIBUTE_NAME, getTabsterAttribute(props, true));\n } else {\n element.removeAttribute(TABSTER_ATTRIBUTE_NAME);\n }\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\n\nfunction _setInformativeStyle$3(weakElement, remove, id) {\n if (process.env.NODE_ENV === 'development') {\n const element = weakElement.get();\n\n if (element) {\n if (remove) {\n element.style.removeProperty(\"--tabster-root\");\n } else {\n element.style.setProperty(\"--tabster-root\", id + \",\");\n }\n }\n }\n}\n\nclass RootDummyManager extends DummyInputManager {\n constructor(tabster, element, setFocused, sys) {\n super(tabster, element, DummyInputManagerPriorities.Root, sys, undefined, true);\n\n this._onDummyInputFocus = dummyInput => {\n var _a;\n\n if (dummyInput.useDefaultAction) {\n // When we've reached the last focusable element, we want to let the browser\n // to move the focus outside of the page. In order to do that we're synchronously\n // calling focus() of the dummy input from the Tab key handler and allowing\n // the default action to move the focus out.\n this._setFocused(false);\n } else {\n // The only way a dummy input gets focused is during the keyboard navigation.\n this._tabster.keyboardNavigation.setNavigatingWithKeyboard(true);\n\n const element = this._element.get();\n\n if (element) {\n this._setFocused(true);\n\n const toFocus = this._tabster.focusedElement.getFirstOrLastTabbable(dummyInput.isFirst, {\n container: element,\n ignoreAccessibility: true\n });\n\n if (toFocus) {\n nativeFocus(toFocus);\n return;\n }\n }\n\n (_a = dummyInput.input) === null || _a === void 0 ? void 0 : _a.blur();\n }\n };\n\n this._setHandlers(this._onDummyInputFocus);\n\n this._tabster = tabster;\n this._setFocused = setFocused;\n }\n\n}\n\nclass Root extends TabsterPart {\n constructor(tabster, element, onDispose, props, sys) {\n super(tabster, element, props);\n this._isFocused = false;\n\n this._setFocused = hasFocused => {\n var _a;\n\n if (this._setFocusedTimer) {\n this._tabster.getWindow().clearTimeout(this._setFocusedTimer);\n\n delete this._setFocusedTimer;\n }\n\n if (this._isFocused === hasFocused) {\n return;\n }\n\n const element = this._element.get();\n\n if (element) {\n if (hasFocused) {\n this._isFocused = true;\n (_a = this._dummyManager) === null || _a === void 0 ? void 0 : _a.setTabbable(false);\n element.dispatchEvent(new RootFocusEvent({\n element\n }));\n } else {\n this._setFocusedTimer = this._tabster.getWindow().setTimeout(() => {\n var _a;\n\n delete this._setFocusedTimer;\n this._isFocused = false;\n (_a = this._dummyManager) === null || _a === void 0 ? void 0 : _a.setTabbable(true);\n element.dispatchEvent(new RootBlurEvent({\n element\n }));\n }, 0);\n }\n }\n };\n\n this._onFocusIn = event => {\n const getParent = this._tabster.getParent;\n\n const rootElement = this._element.get();\n\n let curElement = event.composedPath()[0];\n\n do {\n if (curElement === rootElement) {\n this._setFocused(true);\n\n return;\n }\n\n curElement = curElement && getParent(curElement);\n } while (curElement);\n };\n\n this._onFocusOut = () => {\n this._setFocused(false);\n };\n\n this._onDispose = onDispose;\n const win = tabster.getWindow;\n this.uid = getElementUId(win, element);\n this._sys = sys;\n\n if (tabster.controlTab || tabster.rootDummyInputs) {\n this.addDummyInputs();\n }\n\n const w = win();\n const doc = w.document;\n doc.addEventListener(KEYBORG_FOCUSIN, this._onFocusIn);\n doc.addEventListener(KEYBORG_FOCUSOUT, this._onFocusOut);\n\n this._add();\n }\n\n addDummyInputs() {\n if (!this._dummyManager) {\n this._dummyManager = new RootDummyManager(this._tabster, this._element, this._setFocused, this._sys);\n }\n }\n\n dispose() {\n var _a;\n\n this._onDispose(this);\n\n const win = this._tabster.getWindow();\n\n const doc = win.document;\n doc.removeEventListener(KEYBORG_FOCUSIN, this._onFocusIn);\n doc.removeEventListener(KEYBORG_FOCUSOUT, this._onFocusOut);\n\n if (this._setFocusedTimer) {\n win.clearTimeout(this._setFocusedTimer);\n delete this._setFocusedTimer;\n }\n\n (_a = this._dummyManager) === null || _a === void 0 ? void 0 : _a.dispose();\n\n this._remove();\n }\n\n moveOutWithDefaultAction(isBackward, relatedEvent) {\n const dummyManager = this._dummyManager;\n\n if (dummyManager) {\n dummyManager.moveOutWithDefaultAction(isBackward, relatedEvent);\n } else {\n const el = this.getElement();\n\n if (el) {\n RootDummyManager.moveWithPhantomDummy(this._tabster, el, true, isBackward, relatedEvent);\n }\n }\n }\n\n _add() {\n if (process.env.NODE_ENV === 'development') {\n _setInformativeStyle$3(this._element, false, this.uid);\n }\n }\n\n _remove() {\n if (process.env.NODE_ENV === 'development') {\n _setInformativeStyle$3(this._element, true);\n }\n }\n\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nclass RootAPI {\n constructor(tabster, autoRoot) {\n this._autoRootWaiting = false;\n this._roots = {};\n this._forceDummy = false;\n this.rootById = {};\n\n this._autoRootCreate = () => {\n var _a;\n\n const doc = this._win().document;\n\n const body = doc.body;\n\n if (body) {\n this._autoRootUnwait(doc);\n\n const props = this._autoRoot;\n\n if (props) {\n setTabsterAttribute(body, {\n root: props\n }, true);\n updateTabsterByAttribute(this._tabster, body);\n return (_a = getTabsterOnElement(this._tabster, body)) === null || _a === void 0 ? void 0 : _a.root;\n }\n } else if (!this._autoRootWaiting) {\n this._autoRootWaiting = true;\n doc.addEventListener(\"readystatechange\", this._autoRootCreate);\n }\n\n return undefined;\n };\n\n this._onRootDispose = root => {\n delete this._roots[root.id];\n };\n\n this._tabster = tabster;\n this._win = tabster.getWindow;\n this._autoRoot = autoRoot;\n tabster.queueInit(() => {\n if (this._autoRoot) {\n this._autoRootCreate();\n }\n });\n }\n\n _autoRootUnwait(doc) {\n doc.removeEventListener(\"readystatechange\", this._autoRootCreate);\n this._autoRootWaiting = false;\n }\n\n dispose() {\n const win = this._win();\n\n this._autoRootUnwait(win.document);\n\n delete this._autoRoot;\n Object.keys(this._roots).forEach(rootId => {\n if (this._roots[rootId]) {\n this._roots[rootId].dispose();\n\n delete this._roots[rootId];\n }\n });\n this.rootById = {};\n }\n\n createRoot(element, props, sys) {\n if (process.env.NODE_ENV === 'development') ;\n\n const newRoot = new Root(this._tabster, element, this._onRootDispose, props, sys);\n this._roots[newRoot.id] = newRoot;\n\n if (this._forceDummy) {\n newRoot.addDummyInputs();\n }\n\n return newRoot;\n }\n\n addDummyInputs() {\n this._forceDummy = true;\n const roots = this._roots;\n\n for (const id of Object.keys(roots)) {\n roots[id].addDummyInputs();\n }\n }\n\n static getRootByUId(getWindow, id) {\n const tabster = getWindow().__tabsterInstance;\n\n return tabster && tabster.root.rootById[id];\n }\n /**\r\n * Fetches the tabster context for an element walking up its ancestors\r\n *\r\n * @param tabster Tabster instance\r\n * @param element The element the tabster context should represent\r\n * @param options Additional options\r\n * @returns undefined if the element is not a child of a tabster root, otherwise all applicable tabster behaviours and configurations\r\n */\n\n\n static getTabsterContext(tabster, element, options) {\n if (options === void 0) {\n options = {};\n }\n\n var _a, _b, _c, _d;\n\n if (!element.ownerDocument) {\n return undefined;\n }\n\n const {\n checkRtl,\n referenceElement\n } = options;\n const getParent = tabster.getParent; // Normally, the initialization starts on the next tick after the tabster\n // instance creation. However, if the application starts using it before\n // the next tick, we need to make sure the initialization is done.\n\n tabster.drainInitQueue();\n let root;\n let modalizer;\n let groupper;\n let mover;\n let excludedFromMover = false;\n let groupperBeforeMover;\n let modalizerInGroupper;\n let dirRightToLeft;\n let uncontrolled;\n let curElement = referenceElement || element;\n const ignoreKeydown = {};\n\n while (curElement && (!root || checkRtl)) {\n const tabsterOnElement = getTabsterOnElement(tabster, curElement);\n\n if (checkRtl && dirRightToLeft === undefined) {\n const dir = curElement.dir;\n\n if (dir) {\n dirRightToLeft = dir.toLowerCase() === \"rtl\";\n }\n }\n\n if (!tabsterOnElement) {\n curElement = getParent(curElement);\n continue;\n }\n\n const tagName = curElement.tagName;\n\n if (tabsterOnElement.uncontrolled || tagName === \"IFRAME\" || tagName === \"WEBVIEW\") {\n uncontrolled = curElement;\n }\n\n if (!mover && ((_a = tabsterOnElement.focusable) === null || _a === void 0 ? void 0 : _a.excludeFromMover) && !groupper) {\n excludedFromMover = true;\n }\n\n const curModalizer = tabsterOnElement.modalizer;\n const curGroupper = tabsterOnElement.groupper;\n const curMover = tabsterOnElement.mover;\n\n if (!modalizer && curModalizer) {\n modalizer = curModalizer;\n }\n\n if (!groupper && curGroupper && (!modalizer || curModalizer)) {\n if (modalizer) {\n // Modalizer dominates the groupper when they are on the same node and the groupper is active.\n if (!curGroupper.isActive() && curGroupper.getProps().tabbability && modalizer.userId !== ((_b = tabster.modalizer) === null || _b === void 0 ? void 0 : _b.activeId)) {\n modalizer = undefined;\n groupper = curGroupper;\n }\n\n modalizerInGroupper = curGroupper;\n } else {\n groupper = curGroupper;\n }\n }\n\n if (!mover && curMover && (!modalizer || curModalizer) && (!curGroupper || curElement !== element) && curElement.contains(element) // Mover makes sense only for really inside elements, not for virutal out of the DOM order children.\n ) {\n mover = curMover;\n groupperBeforeMover = !!groupper && groupper !== curGroupper;\n }\n\n if (tabsterOnElement.root) {\n root = tabsterOnElement.root;\n }\n\n if ((_c = tabsterOnElement.focusable) === null || _c === void 0 ? void 0 : _c.ignoreKeydown) {\n Object.assign(ignoreKeydown, tabsterOnElement.focusable.ignoreKeydown);\n }\n\n curElement = getParent(curElement);\n } // No root element could be found, try to get an auto root\n\n\n if (!root) {\n const rootAPI = tabster.root;\n const autoRoot = rootAPI._autoRoot;\n\n if (autoRoot) {\n if ((_d = element.ownerDocument) === null || _d === void 0 ? void 0 : _d.body) {\n root = rootAPI._autoRootCreate();\n }\n }\n }\n\n if (groupper && !mover) {\n groupperBeforeMover = true;\n }\n\n if (process.env.NODE_ENV === 'development' && !root) {\n if (modalizer || groupper || mover) {\n console.error(\"Tabster Root is required for Mover, Groupper and Modalizer to work.\");\n }\n }\n\n const shouldIgnoreKeydown = event => !!ignoreKeydown[event.key];\n\n return root ? {\n root,\n modalizer,\n groupper,\n mover,\n groupperBeforeMover,\n modalizerInGroupper,\n rtl: checkRtl ? !!dirRightToLeft : undefined,\n uncontrolled,\n excludedFromMover,\n ignoreKeydown: shouldIgnoreKeydown\n } : undefined;\n }\n\n static getRoot(tabster, element) {\n var _a;\n\n const getParent = tabster.getParent;\n\n for (let el = element; el; el = getParent(el)) {\n const root = (_a = getTabsterOnElement(tabster, el)) === null || _a === void 0 ? void 0 : _a.root;\n\n if (root) {\n return root;\n }\n }\n\n return undefined;\n }\n\n onRoot(root, removed) {\n if (removed) {\n delete this.rootById[root.uid];\n } else {\n this.rootById[root.uid] = root;\n }\n }\n\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\nconst _containerHistoryLength = 10;\nclass DeloserItemBase {}\nclass DeloserItem extends DeloserItemBase {\n constructor(tabster, deloser) {\n super();\n this.uid = deloser.uid;\n this._tabster = tabster;\n this._deloser = deloser;\n }\n\n belongsTo(deloser) {\n return deloser === this._deloser;\n }\n\n unshift(element) {\n this._deloser.unshift(element);\n }\n\n async focusAvailable() {\n const available = this._deloser.findAvailable();\n\n const deloserElement = this._deloser.getElement();\n\n if (available && deloserElement) {\n if (!deloserElement.dispatchEvent(new TabsterMoveFocusEvent({\n by: \"deloser\",\n owner: deloserElement,\n next: available\n }))) {\n // Default action is prevented, don't look further.\n return null;\n }\n\n return this._tabster.focusedElement.focus(available);\n }\n\n return false;\n }\n\n async resetFocus() {\n const getWindow = this._tabster.getWindow;\n return getPromise(getWindow).resolve(this._deloser.resetFocus());\n }\n\n}\nclass DeloserHistoryByRootBase {\n constructor(tabster, rootUId) {\n this._history = [];\n this._tabster = tabster;\n this.rootUId = rootUId;\n }\n\n getLength() {\n return this._history.length;\n }\n\n removeDeloser(deloser) {\n this._history = this._history.filter(c => !c.belongsTo(deloser));\n }\n\n hasDeloser(deloser) {\n return this._history.some(d => d.belongsTo(deloser));\n }\n\n}\n\nclass DeloserHistoryByRoot extends DeloserHistoryByRootBase {\n unshiftToDeloser(deloser, element) {\n let item;\n\n for (let i = 0; i < this._history.length; i++) {\n if (this._history[i].belongsTo(deloser)) {\n item = this._history[i];\n\n this._history.splice(i, 1);\n\n break;\n }\n }\n\n if (!item) {\n item = new DeloserItem(this._tabster, deloser);\n }\n\n item.unshift(element);\n\n this._history.unshift(item);\n\n this._history.splice(_containerHistoryLength, this._history.length - _containerHistoryLength);\n }\n\n async focusAvailable(from) {\n let skip = !!from;\n\n for (const i of this._history) {\n if (from && i.belongsTo(from)) {\n skip = false;\n }\n\n if (!skip) {\n const result = await i.focusAvailable(); // Result is null when the default action is prevented by the application\n // and we don't need to look further.\n\n if (result || result === null) {\n return result;\n }\n }\n }\n\n return false;\n }\n\n async resetFocus(from) {\n let skip = !!from;\n const resetQueue = {};\n\n for (const i of this._history) {\n if (from && i.belongsTo(from)) {\n skip = false;\n }\n\n if (!skip && !resetQueue[i.uid]) {\n resetQueue[i.uid] = i;\n }\n } // Nothing is found, at least try to reset.\n\n\n for (const id of Object.keys(resetQueue)) {\n if (await resetQueue[id].resetFocus()) {\n return true;\n }\n }\n\n return false;\n }\n\n}\n\nclass DeloserHistory {\n constructor(tabster) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n this._history = [];\n this._tabster = tabster;\n }\n\n dispose() {\n this._history = [];\n }\n\n process(element) {\n var _a;\n\n const ctx = RootAPI.getTabsterContext(this._tabster, element);\n const rootUId = ctx && ctx.root.uid;\n const deloser = DeloserAPI.getDeloser(this._tabster, element);\n\n if (!rootUId || !deloser) {\n return undefined;\n }\n\n const historyByRoot = this.make(rootUId, () => new DeloserHistoryByRoot(this._tabster, rootUId));\n\n if (!ctx || !ctx.modalizer || ((_a = ctx.modalizer) === null || _a === void 0 ? void 0 : _a.isActive())) {\n historyByRoot.unshiftToDeloser(deloser, element);\n }\n\n return deloser;\n }\n\n make(rootUId, createInstance) {\n let historyByRoot;\n\n for (let i = 0; i < this._history.length; i++) {\n const hbr = this._history[i];\n\n if (hbr.rootUId === rootUId) {\n historyByRoot = hbr;\n\n this._history.splice(i, 1);\n\n break;\n }\n }\n\n if (!historyByRoot) {\n historyByRoot = createInstance();\n }\n\n this._history.unshift(historyByRoot);\n\n this._history.splice(_containerHistoryLength, this._history.length - _containerHistoryLength);\n\n return historyByRoot;\n }\n\n removeDeloser(deloser) {\n this._history.forEach(i => {\n i.removeDeloser(deloser);\n });\n\n this._history = this._history.filter(i => i.getLength() > 0);\n }\n\n async focusAvailable(from) {\n let skip = !!from;\n\n for (const h of this._history) {\n if (from && h.hasDeloser(from)) {\n skip = false;\n }\n\n if (!skip) {\n const result = await h.focusAvailable(from); // Result is null when the default action is prevented by the application\n // and we don't need to look further.\n\n if (result || result === null) {\n return result;\n }\n }\n }\n\n return false;\n }\n\n async resetFocus(from) {\n let skip = !!from;\n\n for (const h of this._history) {\n if (from && h.hasDeloser(from)) {\n skip = false;\n }\n\n if (!skip && (await h.resetFocus(from))) {\n return true;\n }\n }\n\n return false;\n }\n\n}\n\nfunction _setInformativeStyle$2(weakElement, remove, isActive, snapshotIndex) {\n if (process.env.NODE_ENV === 'development') {\n const element = weakElement.get();\n\n if (element) {\n if (remove) {\n element.style.removeProperty(\"--tabster-deloser\");\n } else {\n element.style.setProperty(\"--tabster-deloser\", (isActive ? \"active\" : \"inactive\") + \",\" + (\"snapshot-\" + snapshotIndex));\n }\n }\n }\n}\n\nfunction buildElementSelector(element, withClass, withIndex) {\n const selector = [];\n const escapeRegExp = /(:|\\.|\\[|\\]|,|=|@)/g;\n const escapeReplaceValue = \"\\\\$1\";\n const elementId = element.getAttribute(\"id\");\n\n if (elementId) {\n selector.push(\"#\" + elementId.replace(escapeRegExp, escapeReplaceValue));\n }\n\n if (withClass !== false && element.className) {\n element.className.split(\" \").forEach(cls => {\n cls = cls.trim();\n\n if (cls) {\n selector.push(\".\" + cls.replace(escapeRegExp, escapeReplaceValue));\n }\n });\n }\n\n let index = 0;\n let el;\n\n if (withIndex !== false && selector.length === 0) {\n el = element;\n\n while (el) {\n index++;\n el = el.previousElementSibling;\n }\n\n selector.unshift(\":nth-child(\" + index + \")\");\n }\n\n selector.unshift(element.tagName.toLowerCase());\n return selector.join(\"\");\n}\n\nfunction buildSelector(element) {\n if (!documentContains(element.ownerDocument, element)) {\n return undefined;\n }\n\n const selector = [buildElementSelector(element)];\n let node = dom.getParentNode(element);\n\n while (node && node.nodeType !== Node.DOCUMENT_FRAGMENT_NODE) {\n // Stop at the shadow root as cross shadow selectors won't work.\n if (node.nodeType === Node.ELEMENT_NODE) {\n const isBody = node.tagName === \"BODY\";\n selector.unshift(buildElementSelector(node, false, !isBody));\n\n if (isBody) {\n break;\n }\n }\n\n node = dom.getParentNode(node);\n }\n\n return selector.join(\" \");\n}\n\nclass Deloser extends TabsterPart {\n constructor(tabster, element, onDispose, props) {\n super(tabster, element, props);\n this._isActive = false;\n this._history = [[]];\n this._snapshotIndex = 0;\n\n this.isActive = () => {\n return this._isActive;\n };\n\n this.setSnapshot = index => {\n this._snapshotIndex = index;\n\n if (this._history.length > index + 1) {\n this._history.splice(index + 1, this._history.length - index - 1);\n }\n\n if (!this._history[index]) {\n this._history[index] = [];\n }\n\n if (process.env.NODE_ENV === 'development') {\n _setInformativeStyle$2(this._element, false, this._isActive, this._snapshotIndex);\n }\n };\n\n this.focusFirst = () => {\n const e = this._element.get();\n\n return !!e && this._tabster.focusedElement.focusFirst({\n container: e\n });\n };\n\n this.focusDefault = () => {\n const e = this._element.get();\n\n return !!e && this._tabster.focusedElement.focusDefault(e);\n };\n\n this.resetFocus = () => {\n const e = this._element.get();\n\n return !!e && this._tabster.focusedElement.resetFocus(e);\n };\n\n this.clearHistory = preserveExisting => {\n const element = this._element.get();\n\n if (!element) {\n this._history[this._snapshotIndex] = [];\n return;\n }\n\n this._history[this._snapshotIndex] = this._history[this._snapshotIndex].filter(we => {\n const e = we.get();\n return e && preserveExisting ? dom.nodeContains(element, e) : false;\n });\n };\n\n this.uid = getElementUId(tabster.getWindow, element);\n this.strategy = props.strategy || DeloserStrategies.Auto;\n this._onDispose = onDispose;\n\n if (process.env.NODE_ENV === 'development') {\n _setInformativeStyle$2(this._element, false, this._isActive, this._snapshotIndex);\n }\n }\n\n dispose() {\n this._remove();\n\n this._onDispose(this);\n\n this._isActive = false;\n this._snapshotIndex = 0;\n this._props = {};\n this._history = [];\n }\n\n setActive(active) {\n this._isActive = active;\n\n if (process.env.NODE_ENV === 'development') {\n _setInformativeStyle$2(this._element, false, this._isActive, this._snapshotIndex);\n }\n }\n\n getActions() {\n return {\n focusDefault: this.focusDefault,\n focusFirst: this.focusFirst,\n resetFocus: this.resetFocus,\n clearHistory: this.clearHistory,\n setSnapshot: this.setSnapshot,\n isActive: this.isActive\n };\n }\n\n unshift(element) {\n let cur = this._history[this._snapshotIndex];\n cur = this._history[this._snapshotIndex] = cur.filter(we => {\n const e = we.get();\n return e && e !== element;\n });\n cur.unshift(new WeakHTMLElement(this._tabster.getWindow, element, buildSelector(element)));\n\n while (cur.length > _containerHistoryLength) {\n cur.pop();\n }\n }\n\n findAvailable() {\n const element = this._element.get();\n\n if (!element || !this._tabster.focusable.isVisible(element)) {\n return null;\n }\n\n let restoreFocusOrder = this._props.restoreFocusOrder;\n let available = null;\n const ctx = RootAPI.getTabsterContext(this._tabster, element);\n\n if (!ctx) {\n return null;\n }\n\n const root = ctx.root;\n const rootElement = root.getElement();\n\n if (!rootElement) {\n return null;\n }\n\n if (restoreFocusOrder === undefined) {\n restoreFocusOrder = root.getProps().restoreFocusOrder;\n }\n\n if (restoreFocusOrder === RestoreFocusOrders.RootDefault) {\n available = this._tabster.focusable.findDefault({\n container: rootElement\n });\n }\n\n if (!available && restoreFocusOrder === RestoreFocusOrders.RootFirst) {\n available = this._findFirst(rootElement);\n }\n\n if (available) {\n return available;\n }\n\n const availableInHistory = this._findInHistory();\n\n if (availableInHistory && restoreFocusOrder === RestoreFocusOrders.History) {\n return availableInHistory;\n }\n\n const availableDefault = this._tabster.focusable.findDefault({\n container: element\n });\n\n if (availableDefault && restoreFocusOrder === RestoreFocusOrders.DeloserDefault) {\n return availableDefault;\n }\n\n const availableFirst = this._findFirst(element);\n\n if (availableFirst && restoreFocusOrder === RestoreFocusOrders.DeloserFirst) {\n return availableFirst;\n }\n\n return availableDefault || availableInHistory || availableFirst || null;\n }\n\n customFocusLostHandler(element) {\n return element.dispatchEvent(new DeloserFocusLostEvent(this.getActions()));\n }\n\n _findInHistory() {\n const cur = this._history[this._snapshotIndex].slice(0);\n\n this.clearHistory(true);\n\n for (let i = 0; i < cur.length; i++) {\n const we = cur[i];\n const e = we.get();\n\n const element = this._element.get();\n\n if (e && element && dom.nodeContains(element, e)) {\n if (this._tabster.focusable.isFocusable(e)) {\n return e;\n }\n } else if (!this._props.noSelectorCheck) {\n // Element is not in the DOM, try to locate the node by it's\n // selector. This might return not exactly the right node,\n // but it would be easily fixable by having more detailed selectors.\n const selector = we.getData();\n\n if (selector && element) {\n let els;\n\n try {\n els = dom.querySelectorAll(element.ownerDocument, selector);\n } catch (e) {\n if (process.env.NODE_ENV === 'development') {\n // This should never happen, unless there is some bug in buildElementSelector().\n console.error(`Failed to querySelectorAll('${selector}')`);\n }\n\n continue;\n }\n\n for (let i = 0; i < els.length; i++) {\n const el = els[i];\n\n if (el && this._tabster.focusable.isFocusable(el)) {\n return el;\n }\n }\n }\n }\n }\n\n return null;\n }\n\n _findFirst(element) {\n if (this._tabster.keyboardNavigation.isNavigatingWithKeyboard()) {\n const first = this._tabster.focusable.findFirst({\n container: element,\n useActiveModalizer: true\n });\n\n if (first) {\n return first;\n }\n }\n\n return null;\n }\n\n _remove() {\n if (process.env.NODE_ENV === 'development') {\n _setInformativeStyle$2(this._element, true);\n }\n }\n\n} // eslint-disable-next-line @typescript-eslint/no-unused-vars\n\nclass DeloserAPI {\n constructor(tabster, props) {\n /**\r\n * Tracks if focus is inside a deloser\r\n */\n this._inDeloser = false;\n this._isRestoringFocus = false;\n this._isPaused = false;\n\n this._onRestoreFocus = event => {\n var _a;\n\n const target = event.composedPath()[0];\n\n if (target) {\n const available = (_a = DeloserAPI.getDeloser(this._tabster, target)) === null || _a === void 0 ? void 0 : _a.findAvailable();\n\n if (available) {\n this._tabster.focusedElement.focus(available);\n }\n\n event.stopImmediatePropagation();\n }\n };\n\n this._onFocus = e => {\n if (this._restoreFocusTimer) {\n this._win().clearTimeout(this._restoreFocusTimer);\n\n this._restoreFocusTimer = undefined;\n }\n\n if (!e) {\n this._scheduleRestoreFocus();\n\n return;\n }\n\n const deloser = this._history.process(e);\n\n if (deloser) {\n this._activate(deloser);\n } else {\n this._deactivate();\n }\n };\n\n this._onDeloserDispose = deloser => {\n this._history.removeDeloser(deloser);\n\n if (deloser.isActive()) {\n this._scheduleRestoreFocus();\n }\n };\n\n this._tabster = tabster;\n this._win = tabster.getWindow;\n this._history = new DeloserHistory(tabster);\n tabster.queueInit(() => {\n this._tabster.focusedElement.subscribe(this._onFocus);\n\n const doc = this._win().document;\n\n doc.addEventListener(DeloserRestoreFocusEventName, this._onRestoreFocus);\n const activeElement = dom.getActiveElement(doc);\n\n if (activeElement && activeElement !== doc.body) {\n // Adding currently focused element to the deloser history.\n this._onFocus(activeElement);\n }\n });\n const autoDeloser = props === null || props === void 0 ? void 0 : props.autoDeloser;\n\n if (autoDeloser) {\n this._autoDeloser = autoDeloser;\n }\n }\n\n dispose() {\n const win = this._win();\n\n if (this._restoreFocusTimer) {\n win.clearTimeout(this._restoreFocusTimer);\n this._restoreFocusTimer = undefined;\n }\n\n if (this._autoDeloserInstance) {\n this._autoDeloserInstance.dispose();\n\n delete this._autoDeloserInstance;\n delete this._autoDeloser;\n }\n\n this._tabster.focusedElement.unsubscribe(this._onFocus);\n\n win.document.removeEventListener(DeloserRestoreFocusEventName, this._onRestoreFocus);\n\n this._history.dispose();\n\n delete this._curDeloser;\n }\n\n createDeloser(element, props) {\n var _a;\n\n if (process.env.NODE_ENV === 'development') ;\n\n const deloser = new Deloser(this._tabster, element, this._onDeloserDispose, props);\n\n if (dom.nodeContains(element, (_a = this._tabster.focusedElement.getFocusedElement()) !== null && _a !== void 0 ? _a : null)) {\n this._activate(deloser);\n }\n\n return deloser;\n }\n\n getActions(element) {\n for (let e = element; e; e = dom.getParentElement(e)) {\n const tabsterOnElement = getTabsterOnElement(this._tabster, e);\n\n if (tabsterOnElement && tabsterOnElement.deloser) {\n return tabsterOnElement.deloser.getActions();\n }\n }\n\n return undefined;\n }\n\n pause() {\n this._isPaused = true;\n\n if (this._restoreFocusTimer) {\n this._win().clearTimeout(this._restoreFocusTimer);\n\n this._restoreFocusTimer = undefined;\n }\n }\n\n resume(restore) {\n this._isPaused = false;\n\n if (restore) {\n this._scheduleRestoreFocus();\n }\n }\n /**\r\n * Activates and sets the current deloser\r\n */\n\n\n _activate(deloser) {\n const curDeloser = this._curDeloser;\n\n if (curDeloser !== deloser) {\n this._inDeloser = true;\n curDeloser === null || curDeloser === void 0 ? void 0 : curDeloser.setActive(false);\n deloser.setActive(true);\n this._curDeloser = deloser;\n }\n }\n /**\r\n * Called when focus should no longer be in a deloser\r\n */\n\n\n _deactivate() {\n var _a;\n\n this._inDeloser = false;\n (_a = this._curDeloser) === null || _a === void 0 ? void 0 : _a.setActive(false);\n this._curDeloser = undefined;\n }\n\n _scheduleRestoreFocus(force) {\n if (this._isPaused || this._isRestoringFocus) {\n return;\n }\n\n const restoreFocus = async () => {\n this._restoreFocusTimer = undefined;\n\n const lastFocused = this._tabster.focusedElement.getLastFocusedElement();\n\n if (!force && (this._isRestoringFocus || !this._inDeloser || lastFocused && !isDisplayNone(lastFocused))) {\n return;\n }\n\n const curDeloser = this._curDeloser;\n let isManual = false;\n\n if (curDeloser) {\n if (lastFocused && curDeloser.customFocusLostHandler(lastFocused)) {\n return;\n }\n\n if (curDeloser.strategy === DeloserStrategies.Manual) {\n isManual = true;\n } else {\n const curDeloserElement = curDeloser.getElement();\n const el = curDeloser.findAvailable();\n\n if (el && (!(curDeloserElement === null || curDeloserElement === void 0 ? void 0 : curDeloserElement.dispatchEvent(new TabsterMoveFocusEvent({\n by: \"deloser\",\n owner: curDeloserElement,\n next: el\n }))) || this._tabster.focusedElement.focus(el))) {\n return;\n }\n }\n }\n\n this._deactivate();\n\n if (isManual) {\n return;\n }\n\n this._isRestoringFocus = true; // focusAvailable returns null when the default action is prevented by the application, false\n // when nothing was focused and true when something was focused.\n\n if ((await this._history.focusAvailable(null)) === false) {\n await this._history.resetFocus(null);\n }\n\n this._isRestoringFocus = false;\n };\n\n if (force) {\n restoreFocus();\n } else {\n this._restoreFocusTimer = this._win().setTimeout(restoreFocus, 100);\n }\n }\n\n static getDeloser(tabster, element) {\n var _a;\n\n let root;\n\n for (let e = element; e; e = dom.getParentElement(e)) {\n const tabsterOnElement = getTabsterOnElement(tabster, e);\n\n if (tabsterOnElement) {\n if (!root) {\n root = tabsterOnElement.root;\n }\n\n const deloser = tabsterOnElement.deloser;\n\n if (deloser) {\n return deloser;\n }\n }\n }\n\n const deloserAPI = tabster.deloser && tabster.deloser;\n\n if (deloserAPI) {\n if (deloserAPI._autoDeloserInstance) {\n return deloserAPI._autoDeloserInstance;\n }\n\n const autoDeloserProps = deloserAPI._autoDeloser;\n\n if (root && !deloserAPI._autoDeloserInstance && autoDeloserProps) {\n const body = (_a = element.ownerDocument) === null || _a === void 0 ? void 0 : _a.body;\n\n if (body) {\n deloserAPI._autoDeloserInstance = new Deloser(tabster, body, tabster.deloser._onDeloserDispose, autoDeloserProps);\n }\n }\n\n return deloserAPI._autoDeloserInstance;\n }\n\n return undefined;\n }\n\n static getHistory(instance) {\n return instance._history;\n }\n\n static forceRestoreFocus(instance) {\n instance._scheduleRestoreFocus(true);\n }\n\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\nclass Subscribable {\n constructor() {\n this._callbacks = [];\n }\n\n dispose() {\n this._callbacks = [];\n delete this._val;\n }\n\n subscribe(callback) {\n const callbacks = this._callbacks;\n const index = callbacks.indexOf(callback);\n\n if (index < 0) {\n callbacks.push(callback);\n }\n }\n\n subscribeFirst(callback) {\n const callbacks = this._callbacks;\n const index = callbacks.indexOf(callback);\n\n if (index >= 0) {\n callbacks.splice(index, 1);\n }\n\n callbacks.unshift(callback);\n }\n\n unsubscribe(callback) {\n const index = this._callbacks.indexOf(callback);\n\n if (index >= 0) {\n this._callbacks.splice(index, 1);\n }\n }\n\n setVal(val, detail) {\n if (this._val === val) {\n return;\n }\n\n this._val = val;\n\n this._callCallbacks(val, detail);\n }\n\n getVal() {\n return this._val;\n }\n\n trigger(val, detail) {\n this._callCallbacks(val, detail);\n }\n\n _callCallbacks(val, detail) {\n this._callbacks.forEach(callback => callback(val, detail));\n }\n\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\nconst _transactionTimeout = 1500;\nconst _pingTimeout = 3000;\nconst _targetIdUp = \"up\";\nconst CrossOriginTransactionTypes = {\n Bootstrap: 1,\n FocusElement: 2,\n State: 3,\n GetElement: 4,\n RestoreFocusInDeloser: 5,\n Ping: 6\n};\n\nclass CrossOriginDeloserItem extends DeloserItemBase {\n constructor(tabster, deloser, trasactions) {\n super();\n this._deloser = deloser;\n this._transactions = trasactions;\n }\n\n belongsTo(deloser) {\n return deloser.deloserUId === this._deloser.deloserUId;\n }\n\n async focusAvailable() {\n const data = { ...this._deloser,\n reset: false\n };\n return this._transactions.beginTransaction(RestoreFocusInDeloserTransaction, data).then(value => !!value);\n }\n\n async resetFocus() {\n const data = { ...this._deloser,\n reset: true\n };\n return this._transactions.beginTransaction(RestoreFocusInDeloserTransaction, data).then(value => !!value);\n }\n\n}\n\nclass CrossOriginDeloserHistoryByRoot extends DeloserHistoryByRootBase {\n constructor(tabster, rootUId, transactions) {\n super(tabster, rootUId);\n this._transactions = transactions;\n }\n\n unshift(deloser) {\n let item;\n\n for (let i = 0; i < this._history.length; i++) {\n if (this._history[i].belongsTo(deloser)) {\n item = this._history[i];\n\n this._history.splice(i, 1);\n\n break;\n }\n }\n\n if (!item) {\n item = new CrossOriginDeloserItem(this._tabster, deloser, this._transactions);\n }\n\n this._history.unshift(item);\n\n this._history.splice(10, this._history.length - 10);\n }\n\n async focusAvailable() {\n for (const i of this._history) {\n if (await i.focusAvailable()) {\n return true;\n }\n }\n\n return false;\n }\n\n async resetFocus() {\n for (const i of this._history) {\n if (await i.resetFocus()) {\n return true;\n }\n }\n\n return false;\n }\n\n}\n\nclass CrossOriginTransaction {\n constructor(tabster, getOwner, knownTargets, value, timeout, sentTo, targetId, sendUp) {\n this._inProgress = {};\n this._isDone = false;\n this._isSelfResponding = false;\n this._sentCount = 0;\n this.tabster = tabster;\n this.owner = getOwner;\n this.ownerId = getWindowUId(getOwner());\n this.id = getUId(getOwner());\n this.beginData = value;\n this._knownTargets = knownTargets;\n this._sentTo = sentTo || {\n [this.ownerId]: true\n };\n this.targetId = targetId;\n this.sendUp = sendUp;\n this.timeout = timeout;\n this._promise = new (getPromise(getOwner))((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n }\n\n getTargets(knownTargets) {\n return this.targetId === _targetIdUp ? this.sendUp ? {\n [_targetIdUp]: {\n send: this.sendUp\n }\n } : null : this.targetId ? knownTargets[this.targetId] ? {\n [this.targetId]: {\n send: knownTargets[this.targetId].send\n }\n } : null : Object.keys(knownTargets).length === 0 && this.sendUp ? {\n [_targetIdUp]: {\n send: this.sendUp\n }\n } : Object.keys(knownTargets).length > 0 ? knownTargets : null;\n }\n\n begin(selfResponse) {\n const targets = this.getTargets(this._knownTargets);\n const sentTo = { ...this._sentTo\n };\n\n if (targets) {\n for (const id of Object.keys(targets)) {\n sentTo[id] = true;\n }\n }\n\n const data = {\n transaction: this.id,\n type: this.type,\n isResponse: false,\n timestamp: Date.now(),\n owner: this.ownerId,\n sentto: sentTo,\n timeout: this.timeout,\n beginData: this.beginData\n };\n\n if (this.targetId) {\n data.target = this.targetId;\n }\n\n if (selfResponse) {\n this._isSelfResponding = true;\n selfResponse(data).then(value => {\n this._isSelfResponding = false;\n\n if (value !== undefined) {\n if (!this.endData) {\n this.endData = value;\n }\n }\n\n if (this.endData || this._sentCount === 0) {\n this.end();\n }\n });\n }\n\n if (targets) {\n for (const id of Object.keys(targets)) {\n if (!(id in this._sentTo)) {\n this._send(targets[id].send, id, data);\n }\n }\n }\n\n if (this._sentCount === 0 && !this._isSelfResponding) {\n this.end();\n }\n\n return this._promise;\n }\n\n _send(send, targetId, data) {\n if (this._inProgress[targetId] === undefined) {\n this._inProgress[targetId] = true;\n this._sentCount++;\n send(data);\n }\n }\n\n end(error) {\n if (this._isDone) {\n return;\n }\n\n this._isDone = true;\n\n if (this.endData === undefined && error) {\n if (this._reject) {\n this._reject(error);\n }\n } else if (this._resolve) {\n this._resolve(this.endData);\n }\n }\n\n onResponse(data) {\n const endData = data.endData;\n\n if (endData !== undefined && !this.endData) {\n this.endData = endData;\n }\n\n const inProgressId = data.target === _targetIdUp ? _targetIdUp : data.owner;\n\n if (this._inProgress[inProgressId]) {\n this._inProgress[inProgressId] = false;\n this._sentCount--;\n\n if (this.endData || this._sentCount === 0 && !this._isSelfResponding) {\n this.end();\n }\n }\n }\n\n}\n\nclass BootstrapTransaction extends CrossOriginTransaction {\n constructor() {\n super(...arguments);\n this.type = CrossOriginTransactionTypes.Bootstrap;\n }\n\n static shouldForward() {\n return false;\n }\n\n static async makeResponse(tabster) {\n return {\n isNavigatingWithKeyboard: tabster.keyboardNavigation.isNavigatingWithKeyboard()\n };\n }\n\n}\n\nclass FocusElementTransaction extends CrossOriginTransaction {\n constructor() {\n super(...arguments);\n this.type = CrossOriginTransactionTypes.FocusElement;\n }\n\n static shouldSelfRespond() {\n return true;\n }\n\n static shouldForward(tabster, data, getOwner) {\n const el = GetElementTransaction.findElement(tabster, getOwner, data.beginData);\n return !el || !tabster.focusable.isFocusable(el);\n }\n\n static async makeResponse(tabster, data, getOwner, ownerId, transactions, forwardResult) {\n const el = GetElementTransaction.findElement(tabster, getOwner, data.beginData);\n return !!el && tabster.focusedElement.focus(el, true) || !!(await forwardResult);\n }\n\n}\n\nconst CrossOriginStates = {\n Focused: 1,\n Blurred: 2,\n Observed: 3,\n DeadWindow: 4,\n KeyboardNavigation: 5,\n Outline: 6\n};\n\nclass StateTransaction extends CrossOriginTransaction {\n constructor() {\n super(...arguments);\n this.type = CrossOriginTransactionTypes.State;\n }\n\n static shouldSelfRespond(tabster, data) {\n return data.state !== CrossOriginStates.DeadWindow && data.state !== CrossOriginStates.KeyboardNavigation;\n }\n\n static async makeResponse(tabster, data, getOwner, ownerId, transactions, forwardResult, isSelfResponse) {\n const timestamp = data.timestamp;\n const beginData = data.beginData;\n\n if (timestamp && beginData) {\n switch (beginData.state) {\n case CrossOriginStates.Focused:\n return StateTransaction._makeFocusedResponse(tabster, timestamp, beginData, transactions, isSelfResponse);\n\n case CrossOriginStates.Blurred:\n return StateTransaction._makeBlurredResponse(tabster, timestamp, beginData, transactions.ctx);\n\n case CrossOriginStates.Observed:\n return StateTransaction._makeObservedResponse(tabster, beginData);\n\n case CrossOriginStates.DeadWindow:\n return StateTransaction._makeDeadWindowResponse(tabster, beginData, transactions, forwardResult);\n\n case CrossOriginStates.KeyboardNavigation:\n return StateTransaction._makeKeyboardNavigationResponse(tabster, transactions.ctx, beginData.isNavigatingWithKeyboard);\n\n case CrossOriginStates.Outline:\n return StateTransaction._makeOutlineResponse(tabster, transactions.ctx, beginData.outline);\n }\n }\n\n return true;\n }\n\n static createElement(tabster, beginData) {\n return beginData.uid ? new CrossOriginElement(tabster, beginData.uid, beginData.ownerUId, beginData.id, beginData.rootUId, beginData.observedName, beginData.observedDetails) : null;\n }\n\n static async _makeFocusedResponse(tabster, timestamp, beginData, transactions, isSelfResponse) {\n const element = StateTransaction.createElement(tabster, beginData);\n\n if (beginData && beginData.ownerUId && element) {\n transactions.ctx.focusOwner = beginData.ownerUId;\n transactions.ctx.focusOwnerTimestamp = timestamp;\n\n if (!isSelfResponse && beginData.rootUId && beginData.deloserUId) {\n const deloserAPI = tabster.deloser;\n\n if (deloserAPI) {\n const history = DeloserAPI.getHistory(deloserAPI);\n const deloser = {\n ownerUId: beginData.ownerUId,\n deloserUId: beginData.deloserUId,\n rootUId: beginData.rootUId\n };\n const historyItem = history.make(beginData.rootUId, () => new CrossOriginDeloserHistoryByRoot(tabster, deloser.rootUId, transactions));\n historyItem.unshift(deloser);\n }\n }\n\n CrossOriginFocusedElementState.setVal( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tabster.crossOrigin.focusedElement, element, {\n isFocusedProgrammatically: beginData.isFocusedProgrammatically\n });\n }\n\n return true;\n }\n\n static async _makeBlurredResponse(tabster, timestamp, beginData, context) {\n if (beginData && (beginData.ownerUId === context.focusOwner || beginData.force) && (!context.focusOwnerTimestamp || context.focusOwnerTimestamp < timestamp)) {\n CrossOriginFocusedElementState.setVal( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tabster.crossOrigin.focusedElement, undefined, {});\n }\n\n return true;\n }\n\n static async _makeObservedResponse(tabster, beginData) {\n const name = beginData.observedName;\n const element = StateTransaction.createElement(tabster, beginData);\n\n if (name && element) {\n CrossOriginObservedElementState.trigger( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tabster.crossOrigin.observedElement, element, {\n names: [name],\n details: beginData.observedDetails\n });\n }\n\n return true;\n }\n\n static async _makeDeadWindowResponse(tabster, beginData, transactions, forwardResult) {\n const deadUId = beginData && beginData.ownerUId;\n\n if (deadUId) {\n transactions.removeTarget(deadUId);\n }\n\n return forwardResult.then(() => {\n if (deadUId === transactions.ctx.focusOwner) {\n const deloserAPI = tabster.deloser;\n\n if (deloserAPI) {\n DeloserAPI.forceRestoreFocus(deloserAPI);\n }\n }\n\n return true;\n });\n }\n\n static async _makeKeyboardNavigationResponse(tabster, context, isNavigatingWithKeyboard) {\n if (isNavigatingWithKeyboard !== undefined && tabster.keyboardNavigation.isNavigatingWithKeyboard() !== isNavigatingWithKeyboard) {\n context.ignoreKeyboardNavigationStateUpdate = true;\n tabster.keyboardNavigation.setNavigatingWithKeyboard(isNavigatingWithKeyboard);\n context.ignoreKeyboardNavigationStateUpdate = false;\n }\n\n return true;\n }\n\n static async _makeOutlineResponse(tabster, context, props) {\n if (context.origOutlineSetup) {\n context.origOutlineSetup.call( // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n tabster.outline, props);\n }\n\n return true;\n }\n\n}\n\nclass GetElementTransaction extends CrossOriginTransaction {\n constructor() {\n super(...arguments);\n this.type = CrossOriginTransactionTypes.GetElement;\n }\n\n static shouldSelfRespond() {\n return true;\n }\n\n static findElement(tabster, getOwner, data) {\n let element;\n\n if (data && (!data.ownerId || data.ownerId === getWindowUId(getOwner()))) {\n if (data.id) {\n element = dom.getElementById(getOwner().document, data.id);\n\n if (element && data.rootId) {\n const ctx = RootAPI.getTabsterContext(tabster, element);\n\n if (!ctx || ctx.root.uid !== data.rootId) {\n return null;\n }\n }\n } else if (data.uid) {\n const ref = getInstanceContext(getOwner).elementByUId[data.uid];\n element = ref && ref.get();\n } else if (data.observedName) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n element = tabster.observedElement.getElement(data.observedName, data.accessibility);\n }\n }\n\n return element || null;\n }\n\n static getElementData(tabster, element, getOwner, context, ownerUId) {\n const deloser = DeloserAPI.getDeloser(tabster, element);\n const ctx = RootAPI.getTabsterContext(tabster, element);\n const tabsterOnElement = getTabsterOnElement(tabster, element);\n const observed = tabsterOnElement && tabsterOnElement.observed;\n return {\n uid: getElementUId(getOwner, element),\n ownerUId,\n id: element.id || undefined,\n rootUId: ctx ? ctx.root.uid : undefined,\n deloserUId: deloser ? getDeloserUID(getOwner, context, deloser) : undefined,\n observedName: observed && observed.names && observed.names[0],\n observedDetails: observed && observed.details\n };\n }\n\n static async makeResponse(tabster, data, getOwner, ownerUId, transactions, forwardResult) {\n const beginData = data.beginData;\n let element;\n let dataOut;\n\n if (beginData === undefined) {\n element = tabster.focusedElement.getFocusedElement();\n } else if (beginData) {\n element = GetElementTransaction.findElement(tabster, getOwner, beginData) || undefined;\n }\n\n if (!element && beginData) {\n const name = beginData.observedName;\n const timeout = data.timeout;\n const accessibility = beginData.accessibility;\n\n if (name && timeout) {\n const e = await new (getPromise(getOwner))(resolve => {\n let isWaitElementResolved = false;\n let isForwardResolved = false;\n let isResolved = false; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n tabster.observedElement.waitElement(name, timeout, accessibility).result.then(value => {\n isWaitElementResolved = true;\n\n if (!isResolved && (value || isForwardResolved)) {\n isResolved = true;\n resolve({\n element: value\n });\n }\n });\n forwardResult.then(value => {\n isForwardResolved = true;\n\n if (!isResolved && (value || isWaitElementResolved)) {\n isResolved = true;\n resolve({\n crossOrigin: value\n });\n }\n });\n });\n\n if (e.element) {\n element = e.element;\n } else if (e.crossOrigin) {\n dataOut = e.crossOrigin;\n }\n }\n }\n\n return element ? GetElementTransaction.getElementData(tabster, element, getOwner, transactions.ctx, ownerUId) : dataOut;\n }\n\n}\n\nclass RestoreFocusInDeloserTransaction extends CrossOriginTransaction {\n constructor() {\n super(...arguments);\n this.type = CrossOriginTransactionTypes.RestoreFocusInDeloser;\n }\n\n static async makeResponse(tabster, data, getOwner, ownerId, transactions, forwardResult) {\n const forwardRet = await forwardResult;\n const begin = !forwardRet && data.beginData;\n const uid = begin && begin.deloserUId;\n const deloser = uid && transactions.ctx.deloserByUId[uid];\n const deloserAPI = tabster.deloser;\n\n if (begin && deloser && deloserAPI) {\n const history = DeloserAPI.getHistory(deloserAPI);\n return begin.reset ? history.resetFocus(deloser) : history.focusAvailable(deloser);\n }\n\n return !!forwardRet;\n }\n\n}\n\nclass PingTransaction extends CrossOriginTransaction {\n constructor() {\n super(...arguments);\n this.type = CrossOriginTransactionTypes.Ping;\n }\n\n static shouldForward() {\n return false;\n }\n\n static async makeResponse() {\n return true;\n }\n\n}\n\nclass CrossOriginTransactions {\n constructor(tabster, getOwner, context) {\n this._knownTargets = {};\n this._transactions = {};\n this._isDefaultSendUp = false;\n this.isSetUp = false;\n\n this._onMessage = e => {\n if (e.data.owner === this._ownerUId || !this._tabster) {\n return;\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n const data = e.data;\n let transactionId;\n\n if (!data || !(transactionId = data.transaction) || !data.type || !data.timestamp || !data.owner || !data.sentto) {\n return;\n }\n\n let knownTarget = this._knownTargets[data.owner];\n\n if (!knownTarget && e.send && data.owner !== this._ownerUId) {\n knownTarget = this._knownTargets[data.owner] = {\n send: e.send\n };\n }\n\n if (knownTarget) {\n knownTarget.last = Date.now();\n }\n\n if (data.isResponse) {\n const t = this._transactions[transactionId];\n\n if (t && t.transaction && t.transaction.type === data.type) {\n t.transaction.onResponse(data);\n }\n } else {\n const Transaction = this._getTransactionClass(data.type);\n\n const forwardResult = this.forwardTransaction(data);\n\n if (Transaction && e.send) {\n Transaction.makeResponse(this._tabster, data, this._owner, this._ownerUId, this, forwardResult, false).then(r => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const response = {\n transaction: data.transaction,\n type: data.type,\n isResponse: true,\n timestamp: Date.now(),\n owner: this._ownerUId,\n timeout: data.timeout,\n sentto: {},\n target: data.target === _targetIdUp ? _targetIdUp : data.owner,\n endData: r\n };\n e.send(response);\n });\n }\n }\n };\n\n this._onPageHide = () => {\n this._dead();\n };\n\n this._onBrowserMessage = e => {\n if (e.source === this._owner()) {\n return;\n } // eslint-disable-next-line @typescript-eslint/no-explicit-any\n\n\n const send = data => {\n if (e.source && e.source.postMessage) {\n // eslint-disable-next-line @typescript-eslint/ban-types\n e.source.postMessage(JSON.stringify(data), \"*\");\n }\n };\n\n try {\n this._onMessage({\n data: JSON.parse(e.data),\n send\n });\n } catch (e) {\n /* Ignore */\n }\n };\n\n this._tabster = tabster;\n this._owner = getOwner;\n this._ownerUId = getWindowUId(getOwner());\n this.ctx = context;\n }\n\n setup(sendUp) {\n if (this.isSetUp) {\n if (process.env.NODE_ENV === 'development') {\n console.error(\"CrossOrigin is already set up.\");\n }\n } else {\n this.isSetUp = true;\n this.setSendUp(sendUp);\n\n this._owner().addEventListener(\"pagehide\", this._onPageHide);\n\n this._ping();\n }\n\n return this._onMessage;\n }\n\n setSendUp(sendUp) {\n if (!this.isSetUp) {\n throw new Error(\"CrossOrigin is not set up.\");\n }\n\n this.sendUp = sendUp || undefined;\n\n const owner = this._owner();\n\n if (sendUp === undefined) {\n if (!this._isDefaultSendUp) {\n if (owner.document) {\n this._isDefaultSendUp = true;\n\n if (owner.parent && owner.parent !== owner && owner.parent.postMessage) {\n this.sendUp = ( // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data) => {\n owner.parent.postMessage(JSON.stringify(data), \"*\");\n };\n }\n\n owner.addEventListener(\"message\", this._onBrowserMessage);\n }\n }\n } else if (this._isDefaultSendUp) {\n owner.removeEventListener(\"message\", this._onBrowserMessage);\n this._isDefaultSendUp = false;\n }\n\n return this._onMessage;\n }\n\n async dispose() {\n const owner = this._owner();\n\n if (this._pingTimer) {\n owner.clearTimeout(this._pingTimer);\n this._pingTimer = undefined;\n }\n\n owner.removeEventListener(\"message\", this._onBrowserMessage);\n owner.removeEventListener(\"pagehide\", this._onPageHide);\n await this._dead();\n delete this._deadPromise;\n\n for (const id of Object.keys(this._transactions)) {\n const t = this._transactions[id];\n\n if (t.timer) {\n owner.clearTimeout(t.timer);\n delete t.timer;\n }\n\n t.transaction.end();\n }\n\n this._knownTargets = {};\n delete this.sendUp;\n }\n\n beginTransaction(Transaction, value, timeout, sentTo, targetId, withReject) {\n if (!this._owner) {\n return getPromise(this._owner).reject();\n }\n\n const transaction = new Transaction(this._tabster, this._owner, this._knownTargets, value, timeout, sentTo, targetId, this.sendUp);\n let selfResponse;\n\n if (Transaction.shouldSelfRespond && Transaction.shouldSelfRespond(this._tabster, value, this._owner, this._ownerUId)) {\n selfResponse = data => {\n return Transaction.makeResponse(this._tabster, data, this._owner, this._ownerUId, this, getPromise(this._owner).resolve(undefined), true);\n };\n }\n\n return this._beginTransaction(transaction, timeout, selfResponse, withReject);\n }\n\n removeTarget(uid) {\n delete this._knownTargets[uid];\n }\n\n _beginTransaction(transaction, timeout, selfResponse, withReject) {\n const owner = this._owner();\n\n const wrapper = {\n transaction,\n timer: owner.setTimeout(() => {\n delete wrapper.timer;\n transaction.end(\"Cross origin transaction timed out.\");\n }, _transactionTimeout + (timeout || 0))\n };\n this._transactions[transaction.id] = wrapper;\n const ret = transaction.begin(selfResponse);\n ret.catch(() => {\n /**/\n }).finally(() => {\n if (wrapper.timer) {\n owner.clearTimeout(wrapper.timer);\n }\n\n delete this._transactions[transaction.id];\n });\n return ret.then(value => value, withReject ? undefined : () => undefined);\n }\n\n forwardTransaction( // eslint-disable-next-line @typescript-eslint/no-explicit-any\n data // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) {\n const owner = this._owner;\n let targetId = data.target;\n\n if (targetId === this._ownerUId) {\n return getPromise(owner).resolve();\n }\n\n const Transaction = this._getTransactionClass(data.type);\n\n if (Transaction) {\n if (Transaction.shouldForward === undefined || Transaction.shouldForward(this._tabster, data, owner, this._ownerUId)) {\n const sentTo = data.sentto;\n\n if (targetId === _targetIdUp) {\n targetId = undefined;\n sentTo[this._ownerUId] = true;\n }\n\n delete sentTo[_targetIdUp];\n return this._beginTransaction(new Transaction(this._tabster, owner, this._knownTargets, data.beginData, data.timeout, sentTo, targetId, this.sendUp), data.timeout);\n } else {\n return getPromise(owner).resolve();\n }\n }\n\n return getPromise(owner).reject(`Unknown transaction type ${data.type}`);\n }\n\n _getTransactionClass(type // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) {\n switch (type) {\n case CrossOriginTransactionTypes.Bootstrap:\n return BootstrapTransaction;\n\n case CrossOriginTransactionTypes.FocusElement:\n return FocusElementTransaction;\n\n case CrossOriginTransactionTypes.State:\n return StateTransaction;\n\n case CrossOriginTransactionTypes.GetElement:\n return GetElementTransaction;\n\n case CrossOriginTransactionTypes.RestoreFocusInDeloser:\n return RestoreFocusInDeloserTransaction;\n\n case CrossOriginTransactionTypes.Ping:\n return PingTransaction;\n\n default:\n return null;\n }\n }\n\n async _dead() {\n if (!this._deadPromise && this.ctx.focusOwner === this._ownerUId) {\n this._deadPromise = this.beginTransaction(StateTransaction, {\n ownerUId: this._ownerUId,\n state: CrossOriginStates.DeadWindow\n });\n }\n\n if (this._deadPromise) {\n await this._deadPromise;\n }\n }\n\n async _ping() {\n if (this._pingTimer) {\n return;\n }\n\n let deadWindows;\n const now = Date.now();\n const targets = Object.keys(this._knownTargets).filter(uid => now - (this._knownTargets[uid].last || 0) > _pingTimeout);\n\n if (this.sendUp) {\n targets.push(_targetIdUp);\n }\n\n if (targets.length) {\n await getPromise(this._owner).all(targets.map(uid => this.beginTransaction(PingTransaction, undefined, undefined, undefined, uid, true).then(() => true, () => {\n if (uid !== _targetIdUp) {\n if (!deadWindows) {\n deadWindows = {};\n }\n\n deadWindows[uid] = true;\n delete this._knownTargets[uid];\n }\n\n return false;\n })));\n }\n\n if (deadWindows) {\n const focused = await this.beginTransaction(GetElementTransaction, undefined);\n\n if (!focused && this.ctx.focusOwner && this.ctx.focusOwner in deadWindows) {\n await this.beginTransaction(StateTransaction, {\n ownerUId: this._ownerUId,\n state: CrossOriginStates.Blurred,\n force: true\n });\n const deloserAPI = this._tabster.deloser;\n\n if (deloserAPI) {\n DeloserAPI.forceRestoreFocus(deloserAPI);\n }\n }\n }\n\n this._pingTimer = this._owner().setTimeout(() => {\n this._pingTimer = undefined;\n\n this._ping();\n }, _pingTimeout);\n }\n\n}\n\nclass CrossOriginElement {\n constructor(tabster, uid, ownerId, id, rootId, observedName, observedDetails) {\n this._tabster = tabster;\n this.uid = uid;\n this.ownerId = ownerId;\n this.id = id;\n this.rootId = rootId;\n this.observedName = observedName;\n this.observedDetails = observedDetails;\n }\n\n focus(noFocusedProgrammaticallyFlag, noAccessibleCheck) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n return this._tabster.crossOrigin.focusedElement.focus(this, noFocusedProgrammaticallyFlag, noAccessibleCheck);\n }\n\n}\nclass CrossOriginFocusedElementState extends Subscribable {\n constructor(transactions) {\n super();\n this._transactions = transactions;\n }\n\n async focus(element, noFocusedProgrammaticallyFlag, noAccessibleCheck) {\n return this._focus({\n uid: element.uid,\n id: element.id,\n rootId: element.rootId,\n ownerId: element.ownerId,\n observedName: element.observedName\n }, noFocusedProgrammaticallyFlag, noAccessibleCheck);\n }\n\n async focusById(elementId, rootId, noFocusedProgrammaticallyFlag, noAccessibleCheck) {\n return this._focus({\n id: elementId,\n rootId\n }, noFocusedProgrammaticallyFlag, noAccessibleCheck);\n }\n\n async focusByObservedName(observedName, timeout, rootId, noFocusedProgrammaticallyFlag, noAccessibleCheck) {\n return this._focus({\n observedName,\n rootId\n }, noFocusedProgrammaticallyFlag, noAccessibleCheck, timeout);\n }\n\n async _focus(elementData, noFocusedProgrammaticallyFlag, noAccessibleCheck, timeout) {\n return this._transactions.beginTransaction(FocusElementTransaction, { ...elementData,\n noFocusedProgrammaticallyFlag,\n noAccessibleCheck\n }, timeout).then(value => !!value);\n }\n\n static setVal(instance, val, detail) {\n instance.setVal(val, detail);\n }\n\n}\nclass CrossOriginObservedElementState extends Subscribable {\n constructor(tabster, transactions) {\n super();\n this._lastRequestFocusId = 0;\n this._tabster = tabster;\n this._transactions = transactions;\n }\n\n async getElement(observedName, accessibility) {\n return this.waitElement(observedName, 0, accessibility);\n }\n\n async waitElement(observedName, timeout, accessibility) {\n return this._transactions.beginTransaction(GetElementTransaction, {\n observedName,\n accessibility\n }, timeout).then(value => value ? StateTransaction.createElement(this._tabster, value) : null);\n }\n\n async requestFocus(observedName, timeout) {\n const requestId = ++this._lastRequestFocusId;\n return this.waitElement(observedName, timeout, ObservedElementAccessibilities.Focusable).then(element => this._lastRequestFocusId === requestId && element ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._tabster.crossOrigin.focusedElement.focus(element, true) : false);\n }\n\n static trigger(instance, element, details) {\n instance.trigger(element, details);\n }\n\n}\nclass CrossOriginAPI {\n constructor(tabster) {\n this._init = () => {\n const tabster = this._tabster;\n tabster.keyboardNavigation.subscribe(this._onKeyboardNavigationStateChanged);\n tabster.focusedElement.subscribe(this._onFocus); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n tabster.observedElement.subscribe(this._onObserved);\n\n if (!this._ctx.origOutlineSetup) {\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n this._ctx.origOutlineSetup = tabster.outline.setup; // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n\n tabster.outline.setup = this._outlineSetup;\n }\n\n this._transactions.beginTransaction(BootstrapTransaction, undefined, undefined, undefined, _targetIdUp).then(data => {\n if (data && this._tabster.keyboardNavigation.isNavigatingWithKeyboard() !== data.isNavigatingWithKeyboard) {\n this._ctx.ignoreKeyboardNavigationStateUpdate = true;\n\n this._tabster.keyboardNavigation.setNavigatingWithKeyboard(data.isNavigatingWithKeyboard);\n\n this._ctx.ignoreKeyboardNavigationStateUpdate = false;\n }\n });\n };\n\n this._onKeyboardNavigationStateChanged = value => {\n if (!this._ctx.ignoreKeyboardNavigationStateUpdate) {\n this._transactions.beginTransaction(StateTransaction, {\n state: CrossOriginStates.KeyboardNavigation,\n ownerUId: getWindowUId(this._win()),\n isNavigatingWithKeyboard: value\n });\n }\n };\n\n this._onFocus = element => {\n const win = this._win();\n\n const ownerUId = getWindowUId(win);\n\n if (this._blurTimer) {\n win.clearTimeout(this._blurTimer);\n this._blurTimer = undefined;\n }\n\n if (element) {\n this._transactions.beginTransaction(StateTransaction, { ...GetElementTransaction.getElementData(this._tabster, element, this._win, this._ctx, ownerUId),\n state: CrossOriginStates.Focused\n });\n } else {\n this._blurTimer = win.setTimeout(() => {\n this._blurTimer = undefined;\n\n if (this._ctx.focusOwner && this._ctx.focusOwner === ownerUId) {\n this._transactions.beginTransaction(GetElementTransaction, undefined).then(value => {\n if (!value && this._ctx.focusOwner === ownerUId) {\n this._transactions.beginTransaction(StateTransaction, {\n ownerUId,\n state: CrossOriginStates.Blurred,\n force: false\n });\n }\n });\n }\n }, 0);\n }\n };\n\n this._onObserved = (element, details) => {\n var _a;\n\n const d = GetElementTransaction.getElementData(this._tabster, element, this._win, this._ctx, getWindowUId(this._win()));\n d.state = CrossOriginStates.Observed;\n d.observedName = (_a = details.names) === null || _a === void 0 ? void 0 : _a[0];\n d.observedDetails = details.details;\n\n this._transactions.beginTransaction(StateTransaction, d);\n };\n\n this._outlineSetup = props => {\n this._transactions.beginTransaction(StateTransaction, {\n state: CrossOriginStates.Outline,\n ownerUId: getWindowUId(this._win()),\n outline: props\n });\n };\n\n this._tabster = tabster;\n this._win = tabster.getWindow;\n this._ctx = {\n ignoreKeyboardNavigationStateUpdate: false,\n deloserByUId: {}\n };\n this._transactions = new CrossOriginTransactions(tabster, this._win, this._ctx);\n this.focusedElement = new CrossOriginFocusedElementState(this._transactions);\n this.observedElement = new CrossOriginObservedElementState(tabster, this._transactions);\n }\n\n setup(sendUp) {\n if (this.isSetUp()) {\n return this._transactions.setSendUp(sendUp);\n } else {\n this._tabster.queueInit(this._init);\n\n return this._transactions.setup(sendUp);\n }\n }\n\n isSetUp() {\n return this._transactions.isSetUp;\n }\n\n dispose() {\n var _a;\n\n const tabster = this._tabster;\n tabster.keyboardNavigation.unsubscribe(this._onKeyboardNavigationStateChanged);\n tabster.focusedElement.unsubscribe(this._onFocus);\n (_a = tabster.observedElement) === null || _a === void 0 ? void 0 : _a.unsubscribe(this._onObserved);\n\n this._transactions.dispose();\n\n this.focusedElement.dispose();\n this.observedElement.dispose();\n this._ctx.deloserByUId = {};\n }\n\n}\n\nfunction getDeloserUID(getWindow, context, deloser) {\n const deloserElement = deloser.getElement();\n\n if (deloserElement) {\n const uid = getElementUId(getWindow, deloserElement);\n\n if (!context.deloserByUId[uid]) {\n context.deloserByUId[uid] = deloser;\n }\n\n return uid;\n }\n\n return undefined;\n}\n\n/*!\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License.\r\n */\nclass FocusableAPI {\n constructor(tabster) {\n this._tabster = tabster;\n }\n\n dispose() {\n /**/\n }\n\n getProps(element) {\n const tabsterOnElement = getTabsterOnElement(this._tabster, element);\n return tabsterOnElement && tabsterOnElement.focusable || {};\n }\n\n isFocusable(el, includeProgrammaticallyFocusable, noVisibleCheck, noAccessibleCheck) {\n if (matchesSelector(el, FOCUSABLE_SELECTOR) && (includeProgrammaticallyFocusable || el.tabIndex !== -1)) {\n return (noVisibleCheck || this.isVisible(el)) && (noAccessibleCheck || this.isAccessible(el));\n }\n\n return false;\n }\n\n isVisible(el) {\n if (!el.ownerDocument || el.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n\n if (isDisplayNone(el)) {\n return false;\n }\n\n const rect = el.ownerDocument.body.getBoundingClientRect();\n\n if (rect.width === 0 && rect.height === 0) {\n // This might happen, for example, if our is in hidden