{"version":3,"file":"main-89ddf503.js","sources":["../../.tmp/js/components/autocomplete/autocomplete.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/constants.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/array.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/is.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabOrder.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabUtils.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/tabbables.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/DOMutils.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/all-affected.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/getActiveElement.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/focusInside.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/correctFocus.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/firstFocus.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/solver.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/auto-focus.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/utils/parenting.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/focusMerge.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/setFocus.js","../../node_modules/dom-focus-lock/dist/index.esm.js","../../node_modules/dom-focus-lock/node_modules/focus-lock/dist/es2015/focusIsHidden.js","../../.tmp/js/functions/setScrollbarWidthOnDocument.js","../../.tmp/js/functions/toggleAriaHiddenOnBodyChildren.js","../../.tmp/js/functions/reducedMotion.js","../../.tmp/js/components/header/toggleMenu.js","../../.tmp/js/components/header/toggleSearch.js","../../.tmp/js/components/pagination/pagination.js","../../.tmp/js/components/header/header.js","../../.tmp/js/components/search-page/search-page.js","../../.tmp/js/components/planned-work/planned-work.js","../../.tmp/js/components/line-direction/line-direction.js","../../.tmp/js/components/card/card.js","../../.tmp/js/components/table-of-contents/table-of-contents.js","../../.tmp/js/components/generictoc-page/generictoc-page.js","../../.tmp/js/functions/debounce.js","../../.tmp/js/functions/inviewCallback.js","../../.tmp/js/components/responsive-table/responsive-table.js","../../.tmp/js/functions/makeResponsiveTable.js","../../.tmp/js/components/list-filter/list-filter.js","../../.tmp/js/functions/addClassWhenInView.js","../../.tmp/js/components/help/help.js","../../.tmp/js/components/accordion/accordion.js","../../.tmp/js/components/tabs/tabs.js","../../.tmp/js/components/tagfilter/helpers.js","../../.tmp/js/components/tagfilter/tagfilter.js","../../.tmp/js/components/autosavedform/autosavedform.js","../../.tmp/js/components/autosavedform/editmode-toggler.js","../../.tmp/js/components/autosavedform/check-for-duplicate-ids.js","../../.tmp/js/components/readmore/readmore.js","../../.tmp/js/components/fileupload/fileupload.js","../../.tmp/js/components/more-results/more-results.js","../../.tmp/js/components/reorderable-section-form/reorderable-section-form.js","../../.tmp/js/components/boilerplate/boilerplate.js","../../.tmp/js/components/start-page/start-page-hero.js","../../.tmp/js/components/start-page/start-page-bg.js","../../.tmp/js/components/textarea-length-counter/counter.js","../../.tmp/js/components/sorted/sorted.js"],"sourcesContent":["export default function autocomplete(element) {\n const searchForm = document.getElementById(element.elementID);\n if (searchForm) {\n import('./lazy-autocomplete.js').then(({ default: lazyAutocomplete }) => lazyAutocomplete(searchForm));\n }\n}\n//# sourceMappingURL=autocomplete.js.map","/**\n * defines a focus group\n */\nexport var FOCUS_GROUP = 'data-focus-lock';\n/**\n * disables element discovery inside a group marked by key\n */\nexport var FOCUS_DISABLED = 'data-focus-lock-disabled';\n/**\n * allows uncontrolled focus within the marked area, effectively disabling focus lock for it's content\n */\nexport var FOCUS_ALLOW = 'data-no-focus-lock';\n/**\n * instructs autofocus engine to pick default autofocus inside a given node\n * can be set on the element or container\n */\nexport var FOCUS_AUTO = 'data-autofocus-inside';\n/**\n * instructs autofocus to ignore elements within a given node\n * can be set on the element or container\n */\nexport var FOCUS_NO_AUTOFOCUS = 'data-no-autofocus';\n","/*\nIE11 support\n */\nexport var toArray = function (a) {\n var ret = Array(a.length);\n for (var i = 0; i < a.length; ++i) {\n ret[i] = a[i];\n }\n return ret;\n};\nexport var asArray = function (a) { return (Array.isArray(a) ? a : [a]); };\nexport var getFirst = function (a) { return (Array.isArray(a) ? a[0] : a); };\n","import { FOCUS_NO_AUTOFOCUS } from '../constants';\nvar isElementHidden = function (node) {\n // we can measure only \"elements\"\n // consider others as \"visible\"\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return false;\n }\n var computedStyle = window.getComputedStyle(node, null);\n if (!computedStyle || !computedStyle.getPropertyValue) {\n return false;\n }\n return (computedStyle.getPropertyValue('display') === 'none' || computedStyle.getPropertyValue('visibility') === 'hidden');\n};\nvar getParentNode = function (node) {\n // DOCUMENT_FRAGMENT_NODE can also point on ShadowRoot. In this case .host will point on the next node\n return node.parentNode && node.parentNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE\n ? // eslint-disable-next-line @typescript-eslint/no-explicit-any\n node.parentNode.host\n : node.parentNode;\n};\nvar isTopNode = function (node) {\n // @ts-ignore\n return node === document || (node && node.nodeType === Node.DOCUMENT_NODE);\n};\nvar isVisibleUncached = function (node, checkParent) {\n return !node || isTopNode(node) || (!isElementHidden(node) && checkParent(getParentNode(node)));\n};\nexport var isVisibleCached = function (visibilityCache, node) {\n var cached = visibilityCache.get(node);\n if (cached !== undefined) {\n return cached;\n }\n var result = isVisibleUncached(node, isVisibleCached.bind(undefined, visibilityCache));\n visibilityCache.set(node, result);\n return result;\n};\nvar isAutoFocusAllowedUncached = function (node, checkParent) {\n return node && !isTopNode(node) ? (isAutoFocusAllowed(node) ? checkParent(getParentNode(node)) : false) : true;\n};\nexport var isAutoFocusAllowedCached = function (cache, node) {\n var cached = cache.get(node);\n if (cached !== undefined) {\n return cached;\n }\n var result = isAutoFocusAllowedUncached(node, isAutoFocusAllowedCached.bind(undefined, cache));\n cache.set(node, result);\n return result;\n};\nexport var getDataset = function (node) {\n // @ts-ignore\n return node.dataset;\n};\nexport var isHTMLButtonElement = function (node) { return node.tagName === 'BUTTON'; };\nexport var isHTMLInputElement = function (node) { return node.tagName === 'INPUT'; };\nexport var isRadioElement = function (node) {\n return isHTMLInputElement(node) && node.type === 'radio';\n};\nexport var notHiddenInput = function (node) {\n return !((isHTMLInputElement(node) || isHTMLButtonElement(node)) && (node.type === 'hidden' || node.disabled));\n};\nexport var isAutoFocusAllowed = function (node) {\n var attribute = node.getAttribute(FOCUS_NO_AUTOFOCUS);\n return ![true, 'true', ''].includes(attribute);\n};\nexport var isGuard = function (node) { var _a; return Boolean(node && ((_a = getDataset(node)) === null || _a === void 0 ? void 0 : _a.focusGuard)); };\nexport var isNotAGuard = function (node) { return !isGuard(node); };\nexport var isDefined = function (x) { return Boolean(x); };\n","import { toArray } from './array';\nexport var tabSort = function (a, b) {\n var tabDiff = a.tabIndex - b.tabIndex;\n var indexDiff = a.index - b.index;\n if (tabDiff) {\n if (!a.tabIndex) {\n return 1;\n }\n if (!b.tabIndex) {\n return -1;\n }\n }\n return tabDiff || indexDiff;\n};\nexport var orderByTabIndex = function (nodes, filterNegative, keepGuards) {\n return toArray(nodes)\n .map(function (node, index) { return ({\n node: node,\n index: index,\n tabIndex: keepGuards && node.tabIndex === -1 ? ((node.dataset || {}).focusGuard ? 0 : -1) : node.tabIndex,\n }); })\n .filter(function (data) { return !filterNegative || data.tabIndex >= 0; })\n .sort(tabSort);\n};\n","import { FOCUS_AUTO } from '../constants';\nimport { toArray } from './array';\nimport { tabbables } from './tabbables';\nvar queryTabbables = tabbables.join(',');\nvar queryGuardTabbables = \"\".concat(queryTabbables, \", [data-focus-guard]\");\nvar getFocusablesWithShadowDom = function (parent, withGuards) {\n var _a;\n return toArray(((_a = parent.shadowRoot) === null || _a === void 0 ? void 0 : _a.children) || parent.children).reduce(function (acc, child) {\n return acc.concat(child.matches(withGuards ? queryGuardTabbables : queryTabbables) ? [child] : [], getFocusablesWithShadowDom(child));\n }, []);\n};\nvar getFocusablesWithIFrame = function (parent, withGuards) {\n if (parent instanceof HTMLIFrameElement && parent.contentDocument) {\n return getFocusables([parent.contentDocument.body], withGuards);\n }\n return [parent];\n};\nexport var getFocusables = function (parents, withGuards) {\n return parents.reduce(function (acc, parent) {\n var _a;\n var focusableWithShadowDom = getFocusablesWithShadowDom(parent, withGuards);\n var focusableWithIframes = (_a = []).concat.apply(_a, focusableWithShadowDom.map(function (node) { return getFocusablesWithIFrame(node, withGuards); }));\n return acc.concat(\n // add all tabbables inside and within shadow DOMs in DOM order\n focusableWithIframes, \n // add if node is tabbable itself\n parent.parentNode\n ? toArray(parent.parentNode.querySelectorAll(queryTabbables)).filter(function (node) { return node === parent; })\n : []);\n }, []);\n};\n/**\n * return a list of focusable nodes within an area marked as \"auto-focusable\"\n * @param parent\n */\nexport var getParentAutofocusables = function (parent) {\n var parentFocus = parent.querySelectorAll(\"[\".concat(FOCUS_AUTO, \"]\"));\n return toArray(parentFocus)\n .map(function (node) { return getFocusables([node]); })\n .reduce(function (acc, nodes) { return acc.concat(nodes); }, []);\n};\n","/**\n * list of the object to be considered as focusable\n */\nexport var tabbables = [\n 'button:enabled',\n 'select:enabled',\n 'textarea:enabled',\n 'input:enabled',\n // elements with explicit roles will also use explicit tabindex\n // '[role=\"button\"]',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[tabindex]',\n '[contenteditable]',\n '[autofocus]',\n];\n","import { toArray } from './array';\nimport { isAutoFocusAllowedCached, isVisibleCached, notHiddenInput } from './is';\nimport { orderByTabIndex } from './tabOrder';\nimport { getFocusables, getParentAutofocusables } from './tabUtils';\n/**\n * given list of focusable elements keeps the ones user can interact with\n * @param nodes\n * @param visibilityCache\n */\nexport var filterFocusable = function (nodes, visibilityCache) {\n return toArray(nodes)\n .filter(function (node) { return isVisibleCached(visibilityCache, node); })\n .filter(function (node) { return notHiddenInput(node); });\n};\nexport var filterAutoFocusable = function (nodes, cache) {\n if (cache === void 0) { cache = new Map(); }\n return toArray(nodes).filter(function (node) { return isAutoFocusAllowedCached(cache, node); });\n};\n/**\n * only tabbable ones\n * (but with guards which would be ignored)\n */\nexport var getTabbableNodes = function (topNodes, visibilityCache, withGuards) {\n return orderByTabIndex(filterFocusable(getFocusables(topNodes, withGuards), visibilityCache), true, withGuards);\n};\n/**\n * actually anything \"focusable\", not only tabbable\n * (without guards, as long as they are not expected to be focused)\n */\nexport var getAllTabbableNodes = function (topNodes, visibilityCache) {\n return orderByTabIndex(filterFocusable(getFocusables(topNodes), visibilityCache), false);\n};\n/**\n * return list of nodes which are expected to be auto-focused\n * @param topNode\n * @param visibilityCache\n */\nexport var parentAutofocusables = function (topNode, visibilityCache) {\n return filterFocusable(getParentAutofocusables(topNode), visibilityCache);\n};\n/*\n * Determines if element is contained in scope, including nested shadow DOMs\n */\nexport var contains = function (scope, element) {\n if (scope.shadowRoot) {\n return contains(scope.shadowRoot, element);\n }\n else {\n if (Object.getPrototypeOf(scope).contains !== undefined &&\n Object.getPrototypeOf(scope).contains.call(scope, element)) {\n return true;\n }\n return toArray(scope.children).some(function (child) {\n var _a;\n if (child instanceof HTMLIFrameElement) {\n var iframeBody = (_a = child.contentDocument) === null || _a === void 0 ? void 0 : _a.body;\n if (iframeBody) {\n return contains(iframeBody, element);\n }\n return false;\n }\n return contains(child, element);\n });\n }\n};\n","import { FOCUS_DISABLED, FOCUS_GROUP } from '../constants';\nimport { asArray, toArray } from './array';\n/**\n * in case of multiple nodes nested inside each other\n * keeps only top ones\n * this is O(nlogn)\n * @param nodes\n * @returns {*}\n */\nvar filterNested = function (nodes) {\n var contained = new Set();\n var l = nodes.length;\n for (var i = 0; i < l; i += 1) {\n for (var j = i + 1; j < l; j += 1) {\n var position = nodes[i].compareDocumentPosition(nodes[j]);\n /* eslint-disable no-bitwise */\n if ((position & Node.DOCUMENT_POSITION_CONTAINED_BY) > 0) {\n contained.add(j);\n }\n if ((position & Node.DOCUMENT_POSITION_CONTAINS) > 0) {\n contained.add(i);\n }\n /* eslint-enable */\n }\n }\n return nodes.filter(function (_, index) { return !contained.has(index); });\n};\n/**\n * finds top most parent for a node\n * @param node\n * @returns {*}\n */\nvar getTopParent = function (node) {\n return node.parentNode ? getTopParent(node.parentNode) : node;\n};\n/**\n * returns all \"focus containers\" inside a given node\n * @param node\n * @returns {T}\n */\nexport var getAllAffectedNodes = function (node) {\n var nodes = asArray(node);\n return nodes.filter(Boolean).reduce(function (acc, currentNode) {\n var group = currentNode.getAttribute(FOCUS_GROUP);\n acc.push.apply(acc, (group\n ? filterNested(toArray(getTopParent(currentNode).querySelectorAll(\"[\".concat(FOCUS_GROUP, \"=\\\"\").concat(group, \"\\\"]:not([\").concat(FOCUS_DISABLED, \"=\\\"disabled\\\"])\"))))\n : [currentNode]));\n return acc;\n }, []);\n};\n","/**\n * returns active element from document or from nested shadowdoms\n */\nexport var getActiveElement = function (inDocument) {\n var _a;\n if (inDocument === void 0) { inDocument = document; }\n if (!inDocument || !inDocument.activeElement) {\n return undefined;\n }\n var activeElement = inDocument.activeElement;\n return (activeElement.shadowRoot\n ? getActiveElement(activeElement.shadowRoot)\n : activeElement instanceof HTMLIFrameElement && ((_a = activeElement.contentWindow) === null || _a === void 0 ? void 0 : _a.document)\n ? getActiveElement(activeElement.contentWindow.document)\n : activeElement);\n};\n","import { contains } from './utils/DOMutils';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { getFirst, toArray } from './utils/array';\nimport { getActiveElement } from './utils/getActiveElement';\nvar focusInFrame = function (frame, activeElement) { return frame === activeElement; };\nvar focusInsideIframe = function (topNode, activeElement) {\n return Boolean(toArray(topNode.querySelectorAll('iframe')).some(function (node) { return focusInFrame(node, activeElement); }));\n};\n/**\n * @returns {Boolean} true, if the current focus is inside given node or nodes\n */\nexport var focusInside = function (topNode, activeElement) {\n // const activeElement = document && getActiveElement();\n if (activeElement === void 0) { activeElement = getActiveElement(getFirst(topNode).ownerDocument); }\n if (!activeElement || (activeElement.dataset && activeElement.dataset.focusGuard)) {\n return false;\n }\n return getAllAffectedNodes(topNode).some(function (node) {\n return contains(node, activeElement) || focusInsideIframe(node, activeElement);\n });\n};\n","import { isRadioElement } from './is';\nvar findSelectedRadio = function (node, nodes) {\n return nodes\n .filter(isRadioElement)\n .filter(function (el) { return el.name === node.name; })\n .filter(function (el) { return el.checked; })[0] || node;\n};\nexport var correctNode = function (node, nodes) {\n if (isRadioElement(node) && node.name) {\n return findSelectedRadio(node, nodes);\n }\n return node;\n};\n/**\n * giving a set of radio inputs keeps only selected (tabbable) ones\n * @param nodes\n */\nexport var correctNodes = function (nodes) {\n // IE11 has no Set(array) constructor\n var resultSet = new Set();\n nodes.forEach(function (node) { return resultSet.add(correctNode(node, nodes)); });\n // using filter to support IE11\n return nodes.filter(function (node) { return resultSet.has(node); });\n};\n","import { correctNode } from './correctFocus';\nexport var pickFirstFocus = function (nodes) {\n if (nodes[0] && nodes.length > 1) {\n return correctNode(nodes[0], nodes);\n }\n return nodes[0];\n};\nexport var pickFocusable = function (nodes, index) {\n if (nodes.length > 1) {\n return nodes.indexOf(correctNode(nodes[index], nodes));\n }\n return index;\n};\n","import { correctNodes } from './utils/correctFocus';\nimport { pickFocusable } from './utils/firstFocus';\nimport { isGuard } from './utils/is';\nexport var NEW_FOCUS = 'NEW_FOCUS';\n/**\n * Main solver for the \"find next focus\" question\n * @param innerNodes\n * @param outerNodes\n * @param activeElement\n * @param lastNode\n * @returns {number|string|undefined|*}\n */\nexport var newFocus = function (innerNodes, outerNodes, activeElement, lastNode) {\n var cnt = innerNodes.length;\n var firstFocus = innerNodes[0];\n var lastFocus = innerNodes[cnt - 1];\n var isOnGuard = isGuard(activeElement);\n // focus is inside\n if (activeElement && innerNodes.indexOf(activeElement) >= 0) {\n return undefined;\n }\n var activeIndex = activeElement !== undefined ? outerNodes.indexOf(activeElement) : -1;\n var lastIndex = lastNode ? outerNodes.indexOf(lastNode) : activeIndex;\n var lastNodeInside = lastNode ? innerNodes.indexOf(lastNode) : -1;\n var indexDiff = activeIndex - lastIndex;\n var firstNodeIndex = outerNodes.indexOf(firstFocus);\n var lastNodeIndex = outerNodes.indexOf(lastFocus);\n var correctedNodes = correctNodes(outerNodes);\n var correctedIndex = activeElement !== undefined ? correctedNodes.indexOf(activeElement) : -1;\n var correctedIndexDiff = correctedIndex - (lastNode ? correctedNodes.indexOf(lastNode) : activeIndex);\n var returnFirstNode = pickFocusable(innerNodes, 0);\n var returnLastNode = pickFocusable(innerNodes, cnt - 1);\n // new focus\n if (activeIndex === -1 || lastNodeInside === -1) {\n return NEW_FOCUS;\n }\n // old focus\n if (!indexDiff && lastNodeInside >= 0) {\n return lastNodeInside;\n }\n // first element\n if (activeIndex <= firstNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n return returnLastNode;\n }\n // last element\n if (activeIndex >= lastNodeIndex && isOnGuard && Math.abs(indexDiff) > 1) {\n return returnFirstNode;\n }\n // jump out, but not on the guard\n if (indexDiff && Math.abs(correctedIndexDiff) > 1) {\n return lastNodeInside;\n }\n // focus above lock\n if (activeIndex <= firstNodeIndex) {\n return returnLastNode;\n }\n // focus below lock\n if (activeIndex > lastNodeIndex) {\n return returnFirstNode;\n }\n // index is inside tab order, but outside Lock\n if (indexDiff) {\n if (Math.abs(indexDiff) > 1) {\n return lastNodeInside;\n }\n return (cnt + lastNodeInside + indexDiff) % cnt;\n }\n // do nothing\n return undefined;\n};\n","import { filterAutoFocusable } from './DOMutils';\nimport { pickFirstFocus } from './firstFocus';\nimport { getDataset } from './is';\nvar findAutoFocused = function (autoFocusables) {\n return function (node) {\n var _a;\n var autofocus = (_a = getDataset(node)) === null || _a === void 0 ? void 0 : _a.autofocus;\n return (\n // @ts-expect-error\n node.autofocus ||\n //\n (autofocus !== undefined && autofocus !== 'false') ||\n //\n autoFocusables.indexOf(node) >= 0);\n };\n};\nexport var pickAutofocus = function (nodesIndexes, orderedNodes, groups) {\n var nodes = nodesIndexes.map(function (_a) {\n var node = _a.node;\n return node;\n });\n var autoFocusable = filterAutoFocusable(nodes.filter(findAutoFocused(groups)));\n if (autoFocusable && autoFocusable.length) {\n return pickFirstFocus(autoFocusable);\n }\n return pickFirstFocus(filterAutoFocusable(orderedNodes));\n};\n","import { parentAutofocusables } from './DOMutils';\nimport { contains } from './DOMutils';\nimport { asArray } from './array';\nvar getParents = function (node, parents) {\n if (parents === void 0) { parents = []; }\n parents.push(node);\n if (node.parentNode) {\n getParents(node.parentNode.host || node.parentNode, parents);\n }\n return parents;\n};\n/**\n * finds a parent for both nodeA and nodeB\n * @param nodeA\n * @param nodeB\n * @returns {boolean|*}\n */\nexport var getCommonParent = function (nodeA, nodeB) {\n var parentsA = getParents(nodeA);\n var parentsB = getParents(nodeB);\n // tslint:disable-next-line:prefer-for-of\n for (var i = 0; i < parentsA.length; i += 1) {\n var currentParent = parentsA[i];\n if (parentsB.indexOf(currentParent) >= 0) {\n return currentParent;\n }\n }\n return false;\n};\nexport var getTopCommonParent = function (baseActiveElement, leftEntry, rightEntries) {\n var activeElements = asArray(baseActiveElement);\n var leftEntries = asArray(leftEntry);\n var activeElement = activeElements[0];\n var topCommon = false;\n leftEntries.filter(Boolean).forEach(function (entry) {\n topCommon = getCommonParent(topCommon || entry, entry) || topCommon;\n rightEntries.filter(Boolean).forEach(function (subEntry) {\n var common = getCommonParent(activeElement, subEntry);\n if (common) {\n if (!topCommon || contains(common, topCommon)) {\n topCommon = common;\n }\n else {\n topCommon = getCommonParent(common, topCommon);\n }\n }\n });\n });\n // TODO: add assert here?\n return topCommon;\n};\n/**\n * return list of nodes which are expected to be autofocused inside a given top nodes\n * @param entries\n * @param visibilityCache\n */\nexport var allParentAutofocusables = function (entries, visibilityCache) {\n return entries.reduce(function (acc, node) { return acc.concat(parentAutofocusables(node, visibilityCache)); }, []);\n};\n","import { NEW_FOCUS, newFocus } from './solver';\nimport { getAllTabbableNodes, getTabbableNodes } from './utils/DOMutils';\nimport { getAllAffectedNodes } from './utils/all-affected';\nimport { asArray, getFirst } from './utils/array';\nimport { pickAutofocus } from './utils/auto-focus';\nimport { getActiveElement } from './utils/getActiveElement';\nimport { isDefined, isNotAGuard } from './utils/is';\nimport { allParentAutofocusables, getTopCommonParent } from './utils/parenting';\nvar reorderNodes = function (srcNodes, dstNodes) {\n var remap = new Map();\n // no Set(dstNodes) for IE11 :(\n dstNodes.forEach(function (entity) { return remap.set(entity.node, entity); });\n // remap to dstNodes\n return srcNodes.map(function (node) { return remap.get(node); }).filter(isDefined);\n};\n/**\n * given top node(s) and the last active element return the element to be focused next\n * @param topNode\n * @param lastNode\n */\nexport var getFocusMerge = function (topNode, lastNode) {\n var activeElement = getActiveElement(asArray(topNode).length > 0 ? document : getFirst(topNode).ownerDocument);\n var entries = getAllAffectedNodes(topNode).filter(isNotAGuard);\n var commonParent = getTopCommonParent(activeElement || topNode, topNode, entries);\n var visibilityCache = new Map();\n var anyFocusable = getAllTabbableNodes(entries, visibilityCache);\n var innerElements = getTabbableNodes(entries, visibilityCache).filter(function (_a) {\n var node = _a.node;\n return isNotAGuard(node);\n });\n if (!innerElements[0]) {\n innerElements = anyFocusable;\n if (!innerElements[0]) {\n return undefined;\n }\n }\n var outerNodes = getAllTabbableNodes([commonParent], visibilityCache).map(function (_a) {\n var node = _a.node;\n return node;\n });\n var orderedInnerElements = reorderNodes(outerNodes, innerElements);\n var innerNodes = orderedInnerElements.map(function (_a) {\n var node = _a.node;\n return node;\n });\n var newId = newFocus(innerNodes, outerNodes, activeElement, lastNode);\n if (newId === NEW_FOCUS) {\n var focusNode = pickAutofocus(anyFocusable, innerNodes, allParentAutofocusables(entries, visibilityCache));\n if (focusNode) {\n return { node: focusNode };\n }\n else {\n console.warn('focus-lock: cannot find any node to move focus into');\n return undefined;\n }\n }\n if (newId === undefined) {\n return newId;\n }\n return orderedInnerElements[newId];\n};\n","import { getFocusMerge } from './focusMerge';\nexport var focusOn = function (target, focusOptions) {\n if ('focus' in target) {\n target.focus(focusOptions);\n }\n if ('contentWindow' in target && target.contentWindow) {\n target.contentWindow.focus();\n }\n};\nvar guardCount = 0;\nvar lockDisabled = false;\n/**\n * Sets focus at a given node. The last focused element will help to determine which element(first or last) should be focused.\n * HTML markers (see {@link import('./constants').FOCUS_AUTO} constants) can control autofocus\n * @param topNode\n * @param lastNode\n * @param options\n */\nexport var setFocus = function (topNode, lastNode, options) {\n if (options === void 0) { options = {}; }\n var focusable = getFocusMerge(topNode, lastNode);\n if (lockDisabled) {\n return;\n }\n if (focusable) {\n if (guardCount > 2) {\n // tslint:disable-next-line:no-console\n console.error('FocusLock: focus-fighting detected. Only one focus management system could be active. ' +\n 'See https://github.com/theKashey/focus-lock/#focus-fighting');\n lockDisabled = true;\n setTimeout(function () {\n lockDisabled = false;\n }, 1);\n return;\n }\n guardCount++;\n focusOn(focusable.node, options.focusOptions);\n guardCount--;\n }\n};\n","import moveFocusInside, { focusIsHidden, focusInside } from 'focus-lock';\n\nvar lastActiveTrap = 0;\nvar lastActiveFocus = null;\n\nvar focusOnBody = function focusOnBody() {\n return document && document.activeElement === document.body;\n};\n\nvar isFreeFocus = function isFreeFocus() {\n return focusOnBody() || focusIsHidden();\n};\n\nvar activateTrap = function activateTrap() {\n var result = false;\n\n if (lastActiveTrap) {\n var observed = lastActiveTrap;\n\n if (!isFreeFocus()) {\n if (observed && !focusInside(observed)) {\n result = moveFocusInside(observed, lastActiveFocus);\n }\n\n lastActiveFocus = document.activeElement;\n }\n }\n\n return result;\n};\n\nvar reducePropsToState = function reducePropsToState(propsList) {\n return propsList.filter(function (node) {\n return node;\n }).slice(-1)[0];\n};\n\nvar handleStateChangeOnClient = function handleStateChangeOnClient(trap) {\n lastActiveTrap = trap;\n\n if (trap) {\n activateTrap();\n }\n};\n\nvar instances = [];\n\nvar emitChange = function emitChange(event) {\n if (handleStateChangeOnClient(reducePropsToState(instances))) {\n event && event.preventDefault();\n return true;\n }\n\n return false;\n};\n\nvar attachHandler = function attachHandler() {\n document.addEventListener('focusin', emitChange);\n};\n\nvar detachHandler = function detachHandler() {\n document.removeEventListener('focusin', emitChange);\n};\n\nvar focusLock = {\n on: function on(domNode) {\n if (instances.length === 0) {\n attachHandler();\n }\n\n if (instances.indexOf(domNode) < 0) {\n instances.push(domNode);\n emitChange();\n }\n },\n off: function off(domNode) {\n instances = instances.filter(function (node) {\n return node !== domNode;\n });\n emitChange();\n\n if (instances.length === 0) {\n detachHandler();\n }\n }\n};\n\nexport default focusLock;\n","import { FOCUS_ALLOW } from './constants';\nimport { contains } from './utils/DOMutils';\nimport { toArray } from './utils/array';\nimport { getActiveElement } from './utils/getActiveElement';\n/**\n * focus is hidden FROM the focus-lock\n * ie contained inside a node focus-lock shall ignore\n * @returns {boolean} focus is currently is in \"allow\" area\n */\nexport var focusIsHidden = function (inDocument) {\n if (inDocument === void 0) { inDocument = document; }\n var activeElement = getActiveElement(inDocument);\n if (!activeElement) {\n return false;\n }\n // this does not support setting FOCUS_ALLOW within shadow dom\n return toArray(inDocument.querySelectorAll(\"[\".concat(FOCUS_ALLOW, \"]\"))).some(function (node) { return contains(node, activeElement); });\n};\n","export function setScrollbarWidthOnDocument() {\n const docElement = document.documentElement;\n const scrollbarWidthBefore = window.innerWidth - docElement.clientWidth;\n if (scrollbarWidthBefore > 0) {\n const scrollbarWidthAfter = docElement.clientWidth - docElement.offsetWidth;\n const scrollbarWidth = scrollbarWidthBefore - scrollbarWidthAfter;\n docElement.style.setProperty('--scrollbar-width', scrollbarWidth + 'px');\n }\n}\n//# sourceMappingURL=setScrollbarWidthOnDocument.js.map","export function toggleAriaHiddenOnBodyChildren(dialogNode, toggle) {\n if (!dialogNode)\n return;\n Array.prototype.forEach.call(document.querySelectorAll('body > *'), node => {\n if (node === dialogNode) {\n return;\n }\n if (toggle === 'off') {\n node.removeAttribute('aria-hidden');\n }\n else {\n node.setAttribute('aria-hidden', 'true');\n }\n });\n}\n//# sourceMappingURL=toggleAriaHiddenOnBodyChildren.js.map","export const prefersReducedMotionMediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\nexport const noPreferenceMediaQuery = window.matchMedia('(prefers-reduced-motion: no-preference)');\nexport const noPreferenceReducedMotion = noPreferenceMediaQuery.matches;\nexport const prefersReducedMotion = prefersReducedMotionMediaQuery.matches;\n//# sourceMappingURL=reducedMotion.js.map","import focusLock from 'dom-focus-lock';\nimport { setScrollbarWidthOnDocument } from '../../functions/setScrollbarWidthOnDocument';\nimport { toggleAriaHiddenOnBodyChildren } from '../../functions/toggleAriaHiddenOnBodyChildren';\nimport { noPreferenceReducedMotion } from '../../functions/reducedMotion';\nexport default function toggleMenu(menuSelector, buttonSelector, headerSelector, close) {\n const menu = document.querySelector(menuSelector);\n const menuButton = document.querySelector(buttonSelector);\n const header = document.querySelector(headerSelector);\n const shellHeader = document.querySelector('#spv-shell-header');\n const allMenus = Array.from(document.querySelectorAll(menuSelector));\n if (!menu || !menuButton || !header)\n return;\n const menuItems = Array.from(menu.querySelectorAll('li'));\n function closeAllMenus() {\n allMenus.forEach((menu) => {\n if (menu?.classList.contains('spv-header__menu--isOpen')) {\n closeNavigation();\n }\n });\n }\n function closeNavigation() {\n menu?.classList.remove('spv-header__menu--isOpen');\n header?.classList.remove('spv-header--menuIsOpen');\n menuButton?.setAttribute('aria-expanded', 'false');\n window.removeEventListener('keyup', escapeEvent);\n toggleAriaHiddenOnBodyChildren(shellHeader, 'off');\n setScrollbarWidthOnDocument();\n if (!close) {\n focusLock.off(header);\n document.documentElement.classList.remove('spv-scrollLock');\n menuButton?.focus();\n }\n }\n function openNavigation() {\n closeAllMenus();\n setScrollbarWidthOnDocument();\n document.documentElement.classList.add('spv-scrollLock');\n menu?.classList.add('spv-header__menu--isOpen');\n header?.classList.add('spv-header--menuIsOpen');\n menuButton?.setAttribute('aria-expanded', 'true');\n window.addEventListener('keyup', escapeEvent);\n toggleAriaHiddenOnBodyChildren(shellHeader, 'on');\n focusLock.on(header);\n if (noPreferenceReducedMotion) {\n import('gsap').then(({ gsap }) => {\n gsap.set(menuItems, { y: '-100%', opacity: 0 });\n gsap.to(menuItems, {\n y: 0,\n opacity: 1,\n duration: 0.2,\n stagger: 0.02,\n ease: 'back.out',\n });\n });\n }\n }\n function escapeEvent(event) {\n if (event.defaultPrevented) {\n return;\n }\n const key = event.key || event.code;\n if (key === 'Escape' || key === 'Esc' || key === '27') {\n closeNavigation();\n }\n }\n if (menu?.classList.contains('spv-header__menu--isOpen') || close) {\n closeNavigation();\n }\n else {\n openNavigation();\n }\n}\n//# sourceMappingURL=toggleMenu.js.map","import focusLock from 'dom-focus-lock';\nimport { setScrollbarWidthOnDocument } from '../../functions/setScrollbarWidthOnDocument';\nimport { toggleAriaHiddenOnBodyChildren } from '../../functions/toggleAriaHiddenOnBodyChildren';\nexport default function toggleSearch(close) {\n const searchModal = document.querySelector('#header-search');\n const searchButton = document.querySelector('#header-search-button');\n const header = document.querySelector('.spv-header');\n const shellHeader = document.querySelector('#spv-shell-header');\n if (!searchModal || !searchButton || !header)\n return;\n function syncHeight() {\n document.documentElement.style.setProperty('--window-inner-height', `${window.innerHeight}px`);\n }\n function closeSearchModal() {\n searchModal?.classList.remove('spv-headerSearch--open');\n header?.classList.remove('spv-header--searchIsOpen');\n searchButton?.setAttribute('aria-expanded', 'false');\n window.removeEventListener('keyup', escapeEvent);\n toggleAriaHiddenOnBodyChildren(shellHeader, 'off');\n setScrollbarWidthOnDocument();\n if (!close) {\n focusLock.off(header);\n document.documentElement.classList.remove('spv-scrollLock');\n searchButton.focus();\n }\n }\n function openSearchModal() {\n toggleAriaHiddenOnBodyChildren(shellHeader, 'on');\n setScrollbarWidthOnDocument();\n document.documentElement.classList.add('spv-scrollLock');\n searchModal?.classList.add('spv-headerSearch--open');\n header?.classList.add('spv-header--searchIsOpen');\n searchButton?.setAttribute('aria-expanded', 'true');\n window.addEventListener('keyup', escapeEvent);\n focusLock.on(header);\n searchModal.querySelector('input')?.focus();\n syncHeight();\n }\n function escapeEvent(event) {\n if (event.defaultPrevented) {\n return;\n }\n const key = event.key || event.code;\n if (key === 'Escape' || key === 'Esc' || key === '27') {\n closeSearchModal();\n }\n }\n if (searchModal?.classList.contains('spv-headerSearch--open') || close) {\n closeSearchModal();\n }\n else {\n openSearchModal();\n }\n}\n//# sourceMappingURL=toggleSearch.js.map","export function pagination() {\n const pagination = document.querySelector('#pagination');\n if (!pagination)\n return;\n const text = pagination.dataset.text;\n const listElements = pagination.querySelectorAll('li:not(:first-child):not(:last-child):not(.spv-pagination__item--disabled)');\n listElements.forEach(element => {\n const link = element.querySelector('.js-pagination-link');\n const string = `${text} ${link.innerText}`;\n if (element.classList.contains('js-pagination-active')) {\n link.setAttribute('aria-current', 'page');\n }\n link.setAttribute('aria-label', string);\n });\n}\npagination();\n//# sourceMappingURL=pagination.js.map","import autocomplete from '../autocomplete/autocomplete';\nimport toggleMenu from './toggleMenu';\nimport toggleSearch from './toggleSearch';\nexport default function header() {\n const menuButton = document.querySelector('#spv-menuButton');\n const searchButton = document.querySelector('#header-search-button');\n const shortcutsButton = document.querySelector('#header-shortcuts-button');\n const systemsButton = document.querySelector('#header-systems-button');\n autocomplete({ elementID: 'header-autocomplete' });\n function syncHeight() {\n document.documentElement.style.setProperty('--window-inner-height', `${window.innerHeight}px`);\n }\n function closeAllMenus(exclude) {\n if (exclude !== '#header-systems') {\n toggleMenu('#header-systems', '#header-systems-button', '.spv-header', true);\n }\n if (exclude !== '#header-menu') {\n toggleMenu('#header-menu', '#spv-menuButton', '.spv-header', true);\n }\n if (exclude !== '#header-shortcuts') {\n toggleMenu('#header-shortcuts', '#header-shortcuts-button', '.spv-header', true);\n }\n }\n function handleSystemsMenu() {\n syncHeight();\n toggleSearch(true);\n closeAllMenus('#header-systems');\n toggleMenu('#header-systems', '#header-systems-button', '.spv-header');\n }\n function handleShortcutsMenu() {\n syncHeight();\n toggleSearch(true);\n closeAllMenus('#header-shortcuts');\n toggleMenu('#header-shortcuts', '#header-shortcuts-button', '.spv-header');\n }\n function handleGlobalMenu() {\n syncHeight();\n toggleSearch(true);\n closeAllMenus('#header-menu');\n toggleMenu('#header-menu', '#spv-menuButton', '.spv-header');\n }\n function handleSearch() {\n syncHeight();\n closeAllMenus();\n toggleSearch();\n }\n menuButton.addEventListener('click', handleGlobalMenu);\n searchButton.addEventListener('click', handleSearch);\n if (shortcutsButton) {\n shortcutsButton.addEventListener('click', handleShortcutsMenu);\n }\n if (systemsButton) {\n systemsButton.addEventListener('click', handleSystemsMenu);\n }\n}\nheader();\n//# sourceMappingURL=header.js.map","import autocomplete from '../autocomplete/autocomplete';\nexport default function searchPage() {\n autocomplete({ elementID: 'search-page-autocomplete' });\n}\nsearchPage();\n//# sourceMappingURL=search-page.js.map","export default function plannedWork() {\n const plannedWorkView = document.querySelector('#spv-plannedWorkView');\n const ongoingWorkView = document.querySelector('#spv-ongoingWorkView');\n const ongoingWorkButton = document.querySelector('#spv-ongoingWorkButton');\n const plannedWorkButton = document.querySelector('#spv-plannedWorkButton');\n if (!plannedWorkView || !ongoingWorkView || !ongoingWorkButton || !plannedWorkButton) {\n return;\n }\n plannedWorkView.style.display = 'none';\n function togglePlanned() {\n if (plannedWorkView.style.display === 'none') {\n plannedWorkView.style.display = 'block';\n ongoingWorkView.style.display = 'none';\n plannedWorkButton.classList.remove('spv-button--secondary');\n plannedWorkButton.classList.add('spv-button--primary');\n ongoingWorkButton.classList.remove('spv-button--primary');\n ongoingWorkButton.classList.add('spv-button--secondary');\n plannedWorkButton.ariaPressed = 'true';\n ongoingWorkButton.ariaPressed = 'false';\n }\n else {\n return;\n }\n }\n function toggleOngoing() {\n if (ongoingWorkView.style.display === 'none') {\n ongoingWorkView.style.display = 'block';\n plannedWorkView.style.display = 'none';\n plannedWorkButton.classList.remove('spv-button--primary');\n plannedWorkButton.classList.add('spv-button--secondary');\n ongoingWorkButton.classList.remove('spv-button--secondary');\n ongoingWorkButton.classList.add('spv-button--primary');\n ongoingWorkButton.ariaPressed = 'true';\n plannedWorkButton.ariaPressed = 'false';\n }\n else {\n return;\n }\n }\n ongoingWorkButton.onclick = toggleOngoing;\n plannedWorkButton.onclick = togglePlanned;\n}\nplannedWork();\n//# sourceMappingURL=planned-work.js.map","export default function linedirection() {\n const button = document.querySelector('#spv-reverseButton');\n const list = document.querySelector('#spv-list');\n const unreversedNameOfStation = (document.querySelector('#unreversed-station-name'));\n const reversedNameOfStation = (document.querySelector('#reversed-station-name'));\n function toggleDirection() {\n let i = 0;\n if (list) {\n i = list.childNodes.length;\n while (i--)\n list.appendChild(list?.childNodes[i]);\n }\n if (unreversedNameOfStation.style.display === 'none') {\n unreversedNameOfStation.style.display = 'block';\n }\n else {\n unreversedNameOfStation.style.display = 'none';\n }\n if (reversedNameOfStation.style.display === 'block') {\n reversedNameOfStation.style.display = 'none';\n }\n else {\n reversedNameOfStation.style.display = 'block';\n }\n }\n button?.addEventListener('click', toggleDirection);\n}\nlinedirection();\n//# sourceMappingURL=line-direction.js.map","export default function findCardLinks() {\n const cards = document.querySelectorAll('.spv-card, .spv-listCard');\n cards?.forEach(card => {\n let down;\n let up;\n let ctrlIsPressed;\n const link = card.querySelector('a');\n const originalTargetAttribute = link?.getAttribute('target');\n function setOrRemoveAttr() {\n originalTargetAttribute\n ? link?.setAttribute('target', originalTargetAttribute)\n : link?.removeAttribute('target');\n }\n card.onmousedown = e => {\n ctrlIsPressed = e.ctrlKey || e.metaKey;\n down = +new Date();\n };\n card.onmouseup = e => {\n up = +new Date();\n const fastClick = up - down < 200;\n ctrlIsPressed ? link?.setAttribute('target', '_blank') : setOrRemoveAttr();\n if (e.button === 0 && fastClick) {\n link?.click();\n }\n };\n });\n}\nfindCardLinks();\n//# sourceMappingURL=card.js.map","export class TOC {\n static parse(headingSet) {\n const tocData = [];\n headingSet.forEach((heading, index) => {\n const titleText = heading.innerText;\n const id = heading.id\n ? heading.id\n : `toc-${titleText.replace(/ /g, '-').toLowerCase()}-${index}`;\n const currentTocItem = { id: id, text: titleText };\n if (heading.id === '') {\n heading.id = id;\n }\n tocData.push(currentTocItem);\n });\n return tocData;\n }\n static build(tocData) {\n let result = '