@period-year-norway/ngx-bootstrap
Version:
1 lines • 52.8 kB
Source Map (JSON)
{"version":3,"file":"period-year-norway-ngx-bootstrap-focus-trap.mjs","sources":["../../../../src/focus-trap/focus-trap-manager.ts","../../../../src/focus-trap/platform.ts","../../../../src/focus-trap/interactivity-checker.ts","../../../../src/focus-trap/boolean-property.ts","../../../../src/focus-trap/focus-trap.ts","../../../../src/focus-trap/focus-trap.module.ts","../../../../src/focus-trap/period-year-norway-ngx-bootstrap-focus-trap.ts"],"sourcesContent":["/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n * A FocusTrap managed by FocusTrapManager.\r\n * Implemented by ConfigurableFocusTrap to avoid circular dependency.\r\n */\r\nexport interface ManagedFocusTrap {\r\n _enable(): void;\r\n _disable(): void;\r\n focusInitialElementWhenReady(): Promise<boolean>;\r\n}\r\n\r\n/** Injectable that ensures only the most recently enabled FocusTrap is active. */\r\n@Injectable({providedIn: 'root'})\r\nexport class FocusTrapManager {\r\n // A stack of the FocusTraps on the page. Only the FocusTrap at the\r\n // top of the stack is active.\r\n private _focusTrapStack: ManagedFocusTrap[] = [];\r\n\r\n /**\r\n * Disables the FocusTrap at the top of the stack, and then pushes\r\n * the new FocusTrap onto the stack.\r\n */\r\n register(focusTrap: ManagedFocusTrap): void {\r\n // Dedupe focusTraps that register multiple times.\r\n this._focusTrapStack = this._focusTrapStack.filter((ft) => ft !== focusTrap);\r\n\r\n let stack = this._focusTrapStack;\r\n\r\n if (stack.length) {\r\n stack[stack.length - 1]._disable();\r\n }\r\n\r\n stack.push(focusTrap);\r\n focusTrap._enable();\r\n }\r\n\r\n /**\r\n * Removes the FocusTrap from the stack, and activates the\r\n * FocusTrap that is the new top of the stack.\r\n */\r\n deregister(focusTrap: ManagedFocusTrap): void {\r\n focusTrap._disable();\r\n\r\n const stack = this._focusTrapStack;\r\n\r\n const i = stack.indexOf(focusTrap);\r\n if (i !== -1) {\r\n stack.splice(i, 1);\r\n if (stack.length) {\r\n stack[stack.length - 1]._enable();\r\n }\r\n }\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\nimport { Inject, Injectable, PLATFORM_ID } from '@angular/core';\r\nimport { isPlatformBrowser } from '@angular/common';\r\n\r\n// Whether the current platform supports the V8 Break Iterator. The V8 check\r\n// is necessary to detect all Blink based browsers.\r\nlet hasV8BreakIterator: boolean;\r\n\r\n// We need a try/catch around the reference to `Intl`, because accessing it in some cases can\r\n// cause IE to throw. These cases are tied to particular versions of Windows and can happen if\r\n// the consumer is providing a polyfilled `Map`. See:\r\n// https://github.com/Microsoft/ChakraCore/issues/3189\r\n// https://github.com/angular/components/issues/15687\r\ntry {\r\n hasV8BreakIterator = (typeof Intl !== 'undefined' && (Intl as any).v8BreakIterator);\r\n} catch {\r\n hasV8BreakIterator = false;\r\n}\r\n\r\n/**\r\n * Service to detect the current platform by comparing the userAgent strings and\r\n * checking browser-specific global properties.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class Platform {\r\n // We want to use the Angular platform check because if the Document is shimmed\r\n // without the navigator, the following checks will fail. This is preferred because\r\n // sometimes the Document may be shimmed without the user's knowledge or intention\r\n /** Whether the Angular application is being rendered in the browser. */\r\n isBrowser: boolean = this._platformId ?\r\n isPlatformBrowser(this._platformId) : typeof document === 'object' && !!document;\r\n\r\n /** Whether the current browser is Microsoft Edge. */\r\n EDGE: boolean = this.isBrowser && /(edge)/i.test(navigator.userAgent);\r\n\r\n /** Whether the current rendering engine is Microsoft Trident. */\r\n TRIDENT: boolean = this.isBrowser && /(msie|trident)/i.test(navigator.userAgent);\r\n\r\n // EdgeHTML and Trident mock Blink specific things and need to be excluded from this check.\r\n /** Whether the current rendering engine is Blink. */\r\n BLINK: boolean = this.isBrowser && (!!((window as any).chrome || hasV8BreakIterator) &&\r\n typeof CSS !== 'undefined' && !this.EDGE && !this.TRIDENT);\r\n\r\n // Webkit is part of the userAgent in EdgeHTML, Blink and Trident. Therefore we need to\r\n // ensure that Webkit runs standalone and is not used as another engine's base.\r\n /** Whether the current rendering engine is WebKit. */\r\n WEBKIT: boolean = this.isBrowser &&\r\n /AppleWebKit/i.test(navigator.userAgent) && !this.BLINK && !this.EDGE && !this.TRIDENT;\r\n\r\n /** Whether the current platform is Apple iOS. */\r\n IOS: boolean = this.isBrowser && /iPad|iPhone|iPod/.test(navigator.userAgent) &&\r\n !('MSStream' in window);\r\n\r\n // It's difficult to detect the plain Gecko engine, because most of the browsers identify\r\n // them self as Gecko-like browsers and modify the userAgent's according to that.\r\n // Since we only cover one explicit Firefox case, we can simply check for Firefox\r\n // instead of having an unstable check for Gecko.\r\n /** Whether the current browser is Firefox. */\r\n FIREFOX: boolean = this.isBrowser && /(firefox|minefield)/i.test(navigator.userAgent);\r\n\r\n /** Whether the current platform is Android. */\r\n // Trident on mobile adds the android platform to the userAgent to trick detections.\r\n ANDROID: boolean = this.isBrowser && /android/i.test(navigator.userAgent) && !this.TRIDENT;\r\n\r\n // Safari browsers will include the Safari keyword in their userAgent. Some browsers may fake\r\n // this and just place the Safari keyword in the userAgent. To be more safe about Safari every\r\n // Safari browser should also use Webkit as its layout engine.\r\n /** Whether the current browser is Safari. */\r\n SAFARI: boolean = this.isBrowser && /safari/i.test(navigator.userAgent) && this.WEBKIT;\r\n\r\n constructor(@Inject(PLATFORM_ID) private _platformId: Object) {\r\n }\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\nimport { Platform } from './platform';\r\nimport { Injectable } from '@angular/core';\r\n\r\n/**\r\n * Configuration for the isFocusable method.\r\n */\r\nexport class IsFocusableConfig {\r\n /**\r\n * Whether to count an element as focusable even if it is not currently visible.\r\n */\r\n ignoreVisibility: boolean = false;\r\n}\r\n\r\n// The InteractivityChecker leans heavily on the ally.js accessibility utilities.\r\n// Methods like `isTabbable` are only covering specific edge-cases for the browsers which are\r\n// supported.\r\n\r\n/**\r\n * Utility for checking the interactivity of an element, such as whether is is focusable or\r\n * tabbable.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class InteractivityChecker {\r\n\r\n constructor(private _platform: Platform) {\r\n }\r\n\r\n /**\r\n * Gets whether an element is disabled.\r\n *\r\n * @param element Element to be checked.\r\n * @returns Whether the element is disabled.\r\n */\r\n isDisabled(element: HTMLElement): boolean {\r\n // This does not capture some cases, such as a non-form control with a disabled attribute or\r\n // a form control inside of a disabled form, but should capture the most common cases.\r\n return element.hasAttribute('disabled');\r\n }\r\n\r\n /**\r\n * Gets whether an element is visible for the purposes of interactivity.\r\n *\r\n * This will capture states like `display: none` and `visibility: hidden`, but not things like\r\n * being clipped by an `overflow: hidden` parent or being outside the viewport.\r\n *\r\n * @returns Whether the element is visible.\r\n */\r\n isVisible(element: HTMLElement): boolean {\r\n return hasGeometry(element) && getComputedStyle(element).visibility === 'visible';\r\n }\r\n\r\n /**\r\n * Gets whether an element can be reached via Tab key.\r\n * Assumes that the element has already been checked with isFocusable.\r\n *\r\n * @param element Element to be checked.\r\n * @returns Whether the element is tabbable.\r\n */\r\n isTabbable(element: HTMLElement): boolean {\r\n // Nothing is tabbable on the server 😎\r\n if (!this._platform.isBrowser) {\r\n return false;\r\n }\r\n\r\n const frameElement = getFrameElement(getWindow(element));\r\n\r\n if (frameElement) {\r\n // Frame elements inherit their tabindex onto all child elements.\r\n if (getTabIndexValue(frameElement) === -1) {\r\n return false;\r\n }\r\n\r\n // Browsers disable tabbing to an element inside of an invisible frame.\r\n if (!this.isVisible(frameElement)) {\r\n return false;\r\n }\r\n }\r\n\r\n let nodeName = element.nodeName.toLowerCase();\r\n let tabIndexValue = getTabIndexValue(element);\r\n\r\n if (element.hasAttribute('contenteditable')) {\r\n return tabIndexValue !== -1;\r\n }\r\n\r\n if (nodeName === 'iframe' || nodeName === 'object') {\r\n // The frame or object's content may be tabbable depending on the content, but it's\r\n // not possibly to reliably detect the content of the frames. We always consider such\r\n // elements as non-tabbable.\r\n return false;\r\n }\r\n\r\n // In iOS, the browser only considers some specific elements as tabbable.\r\n if (this._platform.WEBKIT && this._platform.IOS && !isPotentiallyTabbableIOS(element)) {\r\n return false;\r\n }\r\n\r\n if (nodeName === 'audio') {\r\n // Audio elements without controls enabled are never tabbable, regardless\r\n // of the tabindex attribute explicitly being set.\r\n if (!element.hasAttribute('controls')) {\r\n return false;\r\n }\r\n // Audio elements with controls are by default tabbable unless the\r\n // tabindex attribute is set to `-1` explicitly.\r\n return tabIndexValue !== -1;\r\n }\r\n\r\n if (nodeName === 'video') {\r\n // For all video elements, if the tabindex attribute is set to `-1`, the video\r\n // is not tabbable. Note: We cannot rely on the default `HTMLElement.tabIndex`\r\n // property as that one is set to `-1` in Chrome, Edge and Safari v13.1. The\r\n // tabindex attribute is the source of truth here.\r\n if (tabIndexValue === -1) {\r\n return false;\r\n }\r\n // If the tabindex is explicitly set, and not `-1` (as per check before), the\r\n // video element is always tabbable (regardless of whether it has controls or not).\r\n if (tabIndexValue !== null) {\r\n return true;\r\n }\r\n // Otherwise (when no explicit tabindex is set), a video is only tabbable if it\r\n // has controls enabled. Firefox is special as videos are always tabbable regardless\r\n // of whether there are controls or not.\r\n return this._platform.FIREFOX || element.hasAttribute('controls');\r\n }\r\n\r\n return element.tabIndex >= 0;\r\n }\r\n\r\n /**\r\n * Gets whether an element can be focused by the user.\r\n *\r\n * @param element Element to be checked.\r\n * @param config The config object with options to customize this method's behavior\r\n * @returns Whether the element is focusable.\r\n */\r\n isFocusable(element: HTMLElement, config?: IsFocusableConfig): boolean {\r\n // Perform checks in order of left to most expensive.\r\n // Again, naive approach that does not capture many edge cases and browser quirks.\r\n return isPotentiallyFocusable(element) && !this.isDisabled(element) &&\r\n (config?.ignoreVisibility || this.isVisible(element));\r\n }\r\n\r\n}\r\n\r\n/**\r\n * Returns the frame element from a window object. Since browsers like MS Edge throw errors if\r\n * the frameElement property is being accessed from a different host address, this property\r\n * should be accessed carefully.\r\n */\r\nfunction getFrameElement(window: Window) {\r\n try {\r\n return window.frameElement as HTMLElement;\r\n } catch {\r\n return null;\r\n }\r\n}\r\n\r\n/** Checks whether the specified element has any geometry / rectangles. */\r\nfunction hasGeometry(element: HTMLElement): boolean {\r\n // Use logic from jQuery to check for an invisible element.\r\n // See https://github.com/jquery/jquery/blob/master/src/css/hiddenVisibleSelectors.js#L12\r\n return !!(element.offsetWidth || element.offsetHeight ||\r\n (typeof element.getClientRects === 'function' && element.getClientRects().length));\r\n}\r\n\r\n/** Gets whether an element's */\r\nfunction isNativeFormElement(element: Node) {\r\n let nodeName = element.nodeName.toLowerCase();\r\n return nodeName === 'input' ||\r\n nodeName === 'select' ||\r\n nodeName === 'button' ||\r\n nodeName === 'textarea';\r\n}\r\n\r\n/** Gets whether an element is an `<input type=\"hidden\">`. */\r\nfunction isHiddenInput(element: HTMLElement): boolean {\r\n return isInputElement(element) && element.type == 'hidden';\r\n}\r\n\r\n/** Gets whether an element is an anchor that has an href attribute. */\r\nfunction isAnchorWithHref(element: HTMLElement): boolean {\r\n return isAnchorElement(element) && element.hasAttribute('href');\r\n}\r\n\r\n/** Gets whether an element is an input element. */\r\nfunction isInputElement(element: HTMLElement): element is HTMLInputElement {\r\n return element.nodeName.toLowerCase() == 'input';\r\n}\r\n\r\n/** Gets whether an element is an anchor element. */\r\nfunction isAnchorElement(element: HTMLElement): element is HTMLAnchorElement {\r\n return element.nodeName.toLowerCase() == 'a';\r\n}\r\n\r\n/** Gets whether an element has a valid tabindex. */\r\nfunction hasValidTabIndex(element: HTMLElement): boolean {\r\n if (!element.hasAttribute('tabindex') || element.tabIndex === undefined) {\r\n return false;\r\n }\r\n\r\n let tabIndex = element.getAttribute('tabindex');\r\n\r\n // IE11 parses tabindex=\"\" as the value \"-32768\"\r\n if (tabIndex == '-32768') {\r\n return false;\r\n }\r\n\r\n return !!(tabIndex && !isNaN(parseInt(tabIndex, 10)));\r\n}\r\n\r\n/**\r\n * Returns the parsed tabindex from the element attributes instead of returning the\r\n * evaluated tabindex from the browsers defaults.\r\n */\r\nfunction getTabIndexValue(element: HTMLElement): number | null {\r\n if (!hasValidTabIndex(element)) {\r\n return null;\r\n }\r\n\r\n // See browser issue in Gecko https://bugzilla.mozilla.org/show_bug.cgi?id=1128054\r\n const tabIndex = parseInt(element.getAttribute('tabindex') || '', 10);\r\n\r\n return isNaN(tabIndex) ? -1 : tabIndex;\r\n}\r\n\r\n/** Checks whether the specified element is potentially tabbable on iOS */\r\nfunction isPotentiallyTabbableIOS(element: HTMLElement): boolean {\r\n let nodeName = element.nodeName.toLowerCase();\r\n let inputType = nodeName === 'input' && (element as HTMLInputElement).type;\r\n\r\n return inputType === 'text'\r\n || inputType === 'password'\r\n || nodeName === 'select'\r\n || nodeName === 'textarea';\r\n}\r\n\r\n/**\r\n * Gets whether an element is potentially focusable without taking current visible/disabled state\r\n * into account.\r\n */\r\nfunction isPotentiallyFocusable(element: HTMLElement): boolean {\r\n // Inputs are potentially focusable *unless* they're type=\"hidden\".\r\n if (isHiddenInput(element)) {\r\n return false;\r\n }\r\n\r\n return isNativeFormElement(element) ||\r\n isAnchorWithHref(element) ||\r\n element.hasAttribute('contenteditable') ||\r\n hasValidTabIndex(element);\r\n}\r\n\r\n/** Gets the parent window of a DOM node with regards of being inside of an iframe. */\r\nfunction getWindow(node: HTMLElement): Window {\r\n // ownerDocument is null if `node` itself *is* a document.\r\n return node.ownerDocument && node.ownerDocument.defaultView || window;\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\n/**\r\n * Type describing the allowed values for a boolean input.\r\n * @docs-private\r\n */\r\nexport type BooleanInput = string | boolean | null | undefined;\r\n\r\n/** Coerces a data-bound value (typically a string) to a boolean. */\r\nexport function coerceBooleanProperty(value: any): boolean {\r\n return value != null && `${value}` !== 'false';\r\n}\r\n","/**\r\n * @license\r\n * Copyright Google LLC All Rights Reserved.\r\n *\r\n * Use of this source code is governed by an MIT-style license that can be\r\n * found in the LICENSE file at https://angular.io/license\r\n */\r\n\r\n/* eslint-disable */\r\n\r\nimport { coerceBooleanProperty, BooleanInput } from './boolean-property';\r\n\r\nimport {\n AfterContentInit,\n Directive,\n ElementRef,\n Inject,\n Injectable,\n Input,\n NgZone,\n OnDestroy,\n DoCheck,\n SimpleChanges,\n OnChanges,\n DOCUMENT\n} from '@angular/core';\r\nimport { take } from 'rxjs/operators';\r\nimport { InteractivityChecker } from './interactivity-checker';\r\n\r\n\r\n/**\r\n * Class that allows for trapping focus within a DOM element.\r\n *\r\n * This class currently uses a relatively simple approach to focus trapping.\r\n * It assumes that the tab order is the same as DOM order, which is not necessarily true.\r\n * Things like `tabIndex > 0`, flex `order`, and shadow roots can cause the two to misalign.\r\n *\r\n * @deprecated Use `ConfigurableFocusTrap` instead.\r\n * @breaking-change for 11.0.0 Remove this class.\r\n */\r\nexport class FocusTrap {\r\n private _startAnchor?: HTMLElement | null;\r\n private _endAnchor?: HTMLElement | null;\r\n private _hasAttached = false;\r\n\r\n // Event listeners for the anchors. Need to be regular functions so that we can unbind them later.\r\n protected startAnchorListener = () => this.focusLastTabbableElement();\r\n protected endAnchorListener = () => this.focusFirstTabbableElement();\r\n\r\n /** Whether the focus trap is active. */\r\n get enabled(): boolean {\r\n return this._enabled;\r\n }\r\n\r\n set enabled(value: boolean) {\r\n this._enabled = value;\r\n\r\n if (this._startAnchor && this._endAnchor) {\r\n this._toggleAnchorTabIndex(value, this._startAnchor);\r\n this._toggleAnchorTabIndex(value, this._endAnchor);\r\n }\r\n }\r\n\r\n protected _enabled: boolean = true;\r\n\r\n constructor(\r\n readonly _element: HTMLElement,\r\n private _checker: InteractivityChecker,\r\n readonly _ngZone: NgZone,\r\n readonly _document: Document,\r\n deferAnchors = false) {\r\n\r\n if (!deferAnchors) {\r\n this.attachAnchors();\r\n }\r\n }\r\n\r\n /** Destroys the focus trap by cleaning up the anchors. */\r\n destroy() {\r\n const startAnchor = this._startAnchor;\r\n const endAnchor = this._endAnchor;\r\n\r\n if (startAnchor) {\r\n startAnchor.removeEventListener('focus', this.startAnchorListener);\r\n\r\n if (startAnchor.parentNode) {\r\n startAnchor.parentNode.removeChild(startAnchor);\r\n }\r\n }\r\n\r\n if (endAnchor) {\r\n endAnchor.removeEventListener('focus', this.endAnchorListener);\r\n\r\n if (endAnchor.parentNode) {\r\n endAnchor.parentNode.removeChild(endAnchor);\r\n }\r\n }\r\n\r\n this._startAnchor = this._endAnchor = null;\r\n this._hasAttached = false;\r\n }\r\n\r\n /**\r\n * Inserts the anchors into the DOM. This is usually done automatically\r\n * in the constructor, but can be deferred for cases like directives with `*ngIf`.\r\n * @returns Whether the focus trap managed to attach successfuly. This may not be the case\r\n * if the target element isn't currently in the DOM.\r\n */\r\n attachAnchors(): boolean {\r\n // If we're not on the browser, there can be no focus to trap.\r\n if (this._hasAttached) {\r\n return true;\r\n }\r\n\r\n this._ngZone.runOutsideAngular(() => {\r\n if (!this._startAnchor) {\r\n this._startAnchor = this._createAnchor();\r\n this._startAnchor!.addEventListener('focus', this.startAnchorListener);\r\n }\r\n\r\n if (!this._endAnchor) {\r\n this._endAnchor = this._createAnchor();\r\n this._endAnchor!.addEventListener('focus', this.endAnchorListener);\r\n }\r\n });\r\n\r\n if (this._element.parentNode) {\r\n this._element.parentNode.insertBefore(this._startAnchor!, this._element);\r\n this._element.parentNode.insertBefore(this._endAnchor!, this._element.nextSibling);\r\n this._hasAttached = true;\r\n }\r\n\r\n return this._hasAttached;\r\n }\r\n\r\n /**\r\n * Waits for the zone to stabilize, then either focuses the first element that the\r\n * user specified, or the first tabbable element.\r\n * @returns Returns a promise that resolves with a boolean, depending\r\n * on whether focus was moved successfully.\r\n */\r\n focusInitialElementWhenReady(): Promise<boolean> {\r\n return new Promise<boolean>(resolve => {\r\n this._executeOnStable(() => resolve(this.focusInitialElement()));\r\n });\r\n }\r\n\r\n /**\r\n * Waits for the zone to stabilize, then focuses\r\n * the first tabbable element within the focus trap region.\r\n * @returns Returns a promise that resolves with a boolean, depending\r\n * on whether focus was moved successfully.\r\n */\r\n focusFirstTabbableElementWhenReady(): Promise<boolean> {\r\n return new Promise<boolean>(resolve => {\r\n this._executeOnStable(() => resolve(this.focusFirstTabbableElement()));\r\n });\r\n }\r\n\r\n /**\r\n * Waits for the zone to stabilize, then focuses\r\n * the last tabbable element within the focus trap region.\r\n * @returns Returns a promise that resolves with a boolean, depending\r\n * on whether focus was moved successfully.\r\n */\r\n focusLastTabbableElementWhenReady(): Promise<boolean> {\r\n return new Promise<boolean>(resolve => {\r\n this._executeOnStable(() => resolve(this.focusLastTabbableElement()));\r\n });\r\n }\r\n\r\n /**\r\n * Get the specified boundary element of the trapped region.\r\n * @param bound The boundary to get (start or end of trapped region).\r\n * @returns The boundary element.\r\n */\r\n private _getRegionBoundary(bound: 'start' | 'end'): HTMLElement | null {\r\n // Contains the deprecated version of selector, for temporary backwards comparability.\r\n let markers = this._element.querySelectorAll(`[cdk-focus-region-${bound}], ` +\r\n `[cdkFocusRegion${bound}], ` +\r\n `[cdk-focus-${bound}]`) as NodeListOf<HTMLElement>;\r\n\r\n for (let i = 0; i < markers.length; i++) {\r\n // @breaking-change 8.0.0\r\n if (markers[i].hasAttribute(`cdk-focus-${bound}`)) {\r\n console.warn(`Found use of deprecated attribute 'cdk-focus-${bound}', ` +\r\n `use 'cdkFocusRegion${bound}' instead. The deprecated ` +\r\n `attribute will be removed in 8.0.0.`, markers[i]);\r\n } else if (markers[i].hasAttribute(`cdk-focus-region-${bound}`)) {\r\n console.warn(`Found use of deprecated attribute 'cdk-focus-region-${bound}', ` +\r\n `use 'cdkFocusRegion${bound}' instead. The deprecated attribute ` +\r\n `will be removed in 8.0.0.`, markers[i]);\r\n }\r\n }\r\n\r\n if (bound == 'start') {\r\n return markers.length ? markers[0] : this._getFirstTabbableElement(this._element);\r\n }\r\n return markers.length ?\r\n markers[markers.length - 1] : this._getLastTabbableElement(this._element);\r\n }\r\n\r\n /**\r\n * Focuses the element that should be focused when the focus trap is initialized.\r\n * @returns Whether focus was moved successfully.\r\n */\r\n focusInitialElement(): boolean {\r\n // Contains the deprecated version of selector, for temporary backwards comparability.\r\n const redirectToElement = this._element.querySelector(`[cdk-focus-initial], ` +\r\n `[cdkFocusInitial]`) as HTMLElement;\r\n\r\n if (redirectToElement) {\r\n // @breaking-change 8.0.0\r\n if (redirectToElement.hasAttribute(`cdk-focus-initial`)) {\r\n console.warn(`Found use of deprecated attribute 'cdk-focus-initial', ` +\r\n `use 'cdkFocusInitial' instead. The deprecated attribute ` +\r\n `will be removed in 8.0.0`, redirectToElement);\r\n }\r\n\r\n // Warn the consumer if the element they've pointed to\r\n // isn't focusable, when not in production mode.\r\n\r\n if (!this._checker.isFocusable(redirectToElement)) {\r\n const focusableChild = this._getFirstTabbableElement(redirectToElement) as HTMLElement;\r\n focusableChild?.focus();\r\n return !!focusableChild;\r\n }\r\n\r\n redirectToElement.focus();\r\n return true;\r\n }\r\n\r\n return this.focusFirstTabbableElement();\r\n }\r\n\r\n /**\r\n * Focuses the first tabbable element within the focus trap region.\r\n * @returns Whether focus was moved successfully.\r\n */\r\n focusFirstTabbableElement(): boolean {\r\n const redirectToElement = this._getRegionBoundary('start');\r\n\r\n if (redirectToElement) {\r\n redirectToElement.focus();\r\n }\r\n\r\n return !!redirectToElement;\r\n }\r\n\r\n /**\r\n * Focuses the last tabbable element within the focus trap region.\r\n * @returns Whether focus was moved successfully.\r\n */\r\n focusLastTabbableElement(): boolean {\r\n const redirectToElement = this._getRegionBoundary('end');\r\n\r\n if (redirectToElement) {\r\n redirectToElement.focus();\r\n }\r\n\r\n return !!redirectToElement;\r\n }\r\n\r\n /**\r\n * Checks whether the focus trap has successfully been attached.\r\n */\r\n hasAttached(): boolean {\r\n return this._hasAttached;\r\n }\r\n\r\n /** Get the first tabbable element from a DOM subtree (inclusive). */\r\n private _getFirstTabbableElement(root: HTMLElement): HTMLElement | null {\r\n if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\r\n return root;\r\n }\r\n\r\n // Iterate in DOM order. Note that IE doesn't have `children` for SVG so we fall\r\n // back to `childNodes` which includes text nodes, comments etc.\r\n let children = root.children || root.childNodes;\r\n\r\n for (let i = 0; i < children.length; i++) {\r\n let tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ?\r\n this._getFirstTabbableElement(children[i] as HTMLElement) :\r\n null;\r\n\r\n if (tabbableChild) {\r\n return tabbableChild;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Get the last tabbable element from a DOM subtree (inclusive). */\r\n private _getLastTabbableElement(root: HTMLElement): HTMLElement | null {\r\n if (this._checker.isFocusable(root) && this._checker.isTabbable(root)) {\r\n return root;\r\n }\r\n\r\n // Iterate in reverse DOM order.\r\n let children = root.children || root.childNodes;\r\n\r\n for (let i = children.length - 1; i >= 0; i--) {\r\n let tabbableChild = children[i].nodeType === this._document.ELEMENT_NODE ?\r\n this._getLastTabbableElement(children[i] as HTMLElement) :\r\n null;\r\n\r\n if (tabbableChild) {\r\n return tabbableChild;\r\n }\r\n }\r\n\r\n return null;\r\n }\r\n\r\n /** Creates an anchor element. */\r\n private _createAnchor(): HTMLElement {\r\n const anchor = this._document.createElement('div');\r\n this._toggleAnchorTabIndex(this._enabled, anchor);\r\n anchor.classList.add('cdk-visually-hidden');\r\n anchor.classList.add('cdk-focus-trap-anchor');\r\n anchor.setAttribute('aria-hidden', 'true');\r\n return anchor;\r\n }\r\n\r\n /**\r\n * Toggles the `tabindex` of an anchor, based on the enabled state of the focus trap.\r\n * @param isEnabled Whether the focus trap is enabled.\r\n * @param anchor Anchor on which to toggle the tabindex.\r\n */\r\n private _toggleAnchorTabIndex(isEnabled: boolean, anchor: HTMLElement) {\r\n // Remove the tabindex completely, rather than setting it to -1, because if the\r\n // element has a tabindex, the user might still hit it when navigating with the arrow keys.\r\n isEnabled ? anchor.setAttribute('tabindex', '0') : anchor.removeAttribute('tabindex');\r\n }\r\n\r\n /**\r\n * Toggles the`tabindex` of both anchors to either trap Tab focus or allow it to escape.\r\n * @param enabled: Whether the anchors should trap Tab.\r\n */\r\n protected toggleAnchors(enabled: boolean) {\r\n if (this._startAnchor && this._endAnchor) {\r\n this._toggleAnchorTabIndex(enabled, this._startAnchor);\r\n this._toggleAnchorTabIndex(enabled, this._endAnchor);\r\n }\r\n }\r\n\r\n /** Executes a function when the zone is stable. */\r\n private _executeOnStable(fn: () => any): void {\r\n if (this._ngZone.isStable) {\r\n fn();\r\n } else {\r\n this._ngZone.onStable.pipe(take(1)).subscribe(fn);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Factory that allows easy instantiation of focus traps.\r\n * @deprecated Use `ConfigurableFocusTrapFactory` instead.\r\n * @breaking-change for 11.0.0 Remove this class.\r\n */\r\n@Injectable({ providedIn: 'root' })\r\nexport class FocusTrapFactory {\r\n private _document: Document;\r\n\r\n constructor(\r\n private _checker: InteractivityChecker,\r\n private _ngZone: NgZone,\r\n @Inject(DOCUMENT) _document: any) {\r\n\r\n this._document = _document;\r\n }\r\n\r\n /**\r\n * Creates a focus-trapped region around the given element.\r\n * @param element The element around which focus will be trapped.\r\n * @param deferCaptureElements Defers the creation of focus-capturing elements to be done\r\n * manually by the user.\r\n * @returns The created focus trap instance.\r\n */\r\n create(element: HTMLElement, deferCaptureElements: boolean = false): FocusTrap {\r\n return new FocusTrap(\r\n element, this._checker, this._ngZone, this._document, deferCaptureElements);\r\n }\r\n}\r\n\r\n/** Directive for trapping focus within a region. */\r\n@Directive({\r\n selector: '[focusTrap]',\r\n exportAs: 'focusTrap',\r\n standalone: false\r\n})\r\nexport class FocusTrapDirective implements OnDestroy, AfterContentInit, OnChanges, DoCheck {\r\n private _document: Document;\r\n\r\n /** Underlying FocusTrap instance. */\r\n focusTrap: FocusTrap;\r\n\r\n /** Previously focused element to restore focus to upon destroy when using autoCapture. */\r\n private _previouslyFocusedElement: HTMLElement | null = null;\r\n\r\n /** Whether the focus trap is active. */\r\n @Input('cdkTrapFocus')\r\n get enabled(): boolean {\r\n return this.focusTrap.enabled;\r\n }\r\n\r\n set enabled(value: boolean) {\r\n this.focusTrap.enabled = coerceBooleanProperty(value);\r\n }\r\n\r\n /**\r\n * Whether the directive should automatically move focus into the trapped region upon\r\n * initialization and return focus to the previous activeElement upon destruction.\r\n */\r\n @Input('cdkTrapFocusAutoCapture')\r\n get autoCapture(): boolean {\r\n return this._autoCapture;\r\n }\r\n\r\n set autoCapture(value: boolean) {\r\n this._autoCapture = coerceBooleanProperty(value);\r\n }\r\n\r\n private _autoCapture = false;\r\n\r\n constructor(\r\n private _elementRef: ElementRef<HTMLElement>,\r\n private _focusTrapFactory: FocusTrapFactory,\r\n @Inject(DOCUMENT) _document: any) {\r\n\r\n this._document = _document;\r\n this.focusTrap = this._focusTrapFactory.create(this._elementRef.nativeElement, true);\r\n }\r\n\r\n ngOnDestroy() {\r\n this.focusTrap.destroy();\r\n\r\n // If we stored a previously focused element when using autoCapture, return focus to that\r\n // element now that the trapped region is being destroyed.\r\n if (this._previouslyFocusedElement) {\r\n this._previouslyFocusedElement.focus();\r\n this._previouslyFocusedElement = null;\r\n }\r\n }\r\n\r\n ngAfterContentInit() {\r\n this.focusTrap.attachAnchors();\r\n\r\n if (this.autoCapture) {\r\n this._captureFocus();\r\n }\r\n }\r\n\r\n ngDoCheck() {\r\n if (!this.focusTrap.hasAttached()) {\r\n this.focusTrap.attachAnchors();\r\n }\r\n }\r\n\r\n ngOnChanges(changes: SimpleChanges) {\r\n const autoCaptureChange = changes['autoCapture'];\r\n\r\n if (autoCaptureChange && !autoCaptureChange.firstChange && this.autoCapture &&\r\n this.focusTrap.hasAttached()) {\r\n this._captureFocus();\r\n }\r\n }\r\n\r\n private _captureFocus() {\r\n this._previouslyFocusedElement = this._document.activeElement as HTMLElement;\r\n this.focusTrap.focusInitialElementWhenReady();\r\n }\r\n\r\n static ngAcceptInputType_enabled: BooleanInput;\r\n static ngAcceptInputType_autoCapture: BooleanInput;\r\n}\r\n","import { ModuleWithProviders, NgModule } from '@angular/core';\r\nimport { CommonModule } from '@angular/common';\r\n\r\nimport { FocusTrapManager } from './focus-trap-manager';\r\nimport { InteractivityChecker } from './interactivity-checker';\r\nimport { FocusTrapDirective } from './focus-trap';\r\nimport { Platform } from './platform';\r\n\r\n@NgModule({\r\n imports: [CommonModule],\r\n declarations: [FocusTrapDirective],\r\n exports: [FocusTrapDirective]\r\n})\r\nexport class FocusTrapModule {\r\n static forRoot(): ModuleWithProviders<FocusTrapModule> {\r\n return {\r\n ngModule: FocusTrapModule,\r\n providers: [\r\n FocusTrapManager,\r\n Platform,\r\n InteractivityChecker\r\n ]\r\n };\r\n }\r\n}\r\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["i1.Platform"],"mappings":"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"}