pixi.js
Version:
<p align="center"> <a href="https://pixijs.com" target="_blank" rel="noopener noreferrer"> <img height="150" src="https://files.pixijs.download/branding/pixijs-logo-transparent-dark.svg?v=1" alt="PixiJS logo"> </a> </p> <br/> <p align="center">
1 lines • 44.9 kB
Source Map (JSON)
{"version":3,"file":"AccessibilitySystem.mjs","sources":["../../src/accessibility/AccessibilitySystem.ts"],"sourcesContent":["/* eslint-disable no-restricted-globals */\nimport { CanvasObserver } from '../dom/CanvasObserver';\nimport { FederatedEvent } from '../events/FederatedEvent';\nimport { ExtensionType } from '../extensions/Extensions';\nimport { isMobile } from '../utils/browser/isMobile';\nimport { removeItems } from '../utils/data/removeItems';\nimport { type AccessibleHTMLElement } from './accessibilityTarget';\n\nimport type { Rectangle } from '../maths/shapes/Rectangle';\nimport type { System } from '../rendering/renderers/shared/system/System';\nimport type { Renderer } from '../rendering/renderers/types';\nimport type { Container } from '../scene/container/Container';\nimport type { isMobileResult } from '../utils/browser/isMobile';\n\n/** @ignore */\nconst KEY_CODE_TAB = 9;\n\nconst DIV_TOUCH_SIZE = 100;\nconst DIV_TOUCH_POS_X = 0;\nconst DIV_TOUCH_POS_Y = 0;\nconst DIV_TOUCH_ZINDEX = 2;\n\nconst DIV_HOOK_SIZE = 1;\nconst DIV_HOOK_POS_X = -1000;\nconst DIV_HOOK_POS_Y = -1000;\nconst DIV_HOOK_ZINDEX = 2;\n\n/**\n * Initialisation options for the accessibility system when used with an Application.\n * @category accessibility\n * @advanced\n */\nexport interface AccessibilitySystemOptions\n{\n /** Options for the accessibility system */\n accessibilityOptions?: AccessibilityOptions;\n}\n\n/**\n * The options for the accessibility system.\n * @category accessibility\n * @advanced\n */\nexport interface AccessibilityOptions\n{\n /** Whether to enable accessibility features on initialization instead of waiting for tab key */\n enabledByDefault?: boolean;\n /** Whether to visually show the accessibility divs for debugging */\n debug?: boolean;\n /** Whether to allow tab key press to activate accessibility features */\n activateOnTab?: boolean;\n /** Whether to deactivate accessibility when mouse moves */\n deactivateOnMouseMove?: boolean;\n}\n\n/**\n * The Accessibility system provides screen reader and keyboard navigation support for PixiJS content.\n * It creates an accessible DOM layer over the canvas that can be controlled programmatically or through user interaction.\n *\n * By default, the system activates when users press the tab key. This behavior can be customized through options:\n * ```js\n * const app = new Application({\n * accessibilityOptions: {\n * // Enable immediately instead of waiting for tab\n * enabledByDefault: true,\n * // Disable tab key activation\n * activateOnTab: false,\n * // Show/hide accessibility divs\n * debug: false,\n * // Prevent accessibility from being deactivated when mouse moves\n * deactivateOnMouseMove: false,\n * }\n * });\n * ```\n *\n * The system can also be controlled programmatically by accessing the `renderer.accessibility` property:\n * ```js\n * app.renderer.accessibility.setAccessibilityEnabled(true);\n * ```\n *\n * To make individual containers accessible:\n * ```js\n * container.accessible = true;\n * ```\n * There are several properties that can be set on a Container to control its accessibility which can\n * be found here: {@link AccessibleOptions}.\n * @category accessibility\n * @standard\n */\nexport class AccessibilitySystem implements System<AccessibilitySystemOptions>\n{\n /** @ignore */\n public static extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem,\n ],\n name: 'accessibility',\n } as const;\n\n /**\n * The default options used by the system.\n * You can set these before initializing the {@link Application} to change the default behavior.\n * @example\n * ```js\n * import { AccessibilitySystem } from 'pixi.js';\n *\n * AccessibilitySystem.defaultOptions.enabledByDefault = true;\n *\n * const app = new Application()\n * app.init()\n * ```\n */\n public static defaultOptions: AccessibilityOptions = {\n /**\n * Whether to enable accessibility features on initialization\n * @default false\n */\n enabledByDefault: false,\n /**\n * Whether to visually show the accessibility divs for debugging\n * @default false\n */\n debug: false,\n /**\n * Whether to activate accessibility when tab key is pressed\n * @default true\n */\n activateOnTab: true,\n /**\n * Whether to deactivate accessibility when mouse moves\n * @default true\n */\n deactivateOnMouseMove: true,\n };\n\n /** Whether accessibility divs are visible for debugging */\n public debug = false;\n\n /** Whether to activate on tab key press */\n private _activateOnTab = true;\n\n /** Whether to deactivate accessibility when mouse moves */\n private _deactivateOnMouseMove = true;\n\n /**\n * The renderer this accessibility manager works for.\n * @type {WebGLRenderer|WebGPURenderer}\n */\n private _renderer: Renderer;\n\n /** Internal variable, see isActive getter. */\n private _isActive = false;\n\n /** Internal variable, see isMobileAccessibility getter. */\n private _isMobileAccessibility = false;\n\n /** Button element for handling touch hooks. */\n private _hookDiv: HTMLElement | null;\n\n /** This is the dom element that will sit over the PixiJS element. This is where the div overlays will go. */\n private _div: HTMLElement | null = null;\n\n /** A simple pool for storing divs. */\n private _pools: Record<string, AccessibleHTMLElement[]> = {};\n\n /** This is a tick used to check if an object is no longer being rendered. */\n private _renderId = 0;\n\n /** The array of currently active accessible items. */\n private _children: Container[] = [];\n\n /** Count to throttle div updates on android devices. */\n private _androidUpdateCount = 0;\n\n /** The frequency to update the div elements. */\n private readonly _androidUpdateFrequency = 500; // 2fps\n private _canvasObserver: CanvasObserver;\n\n // eslint-disable-next-line @typescript-eslint/prefer-readonly\n private _isRunningTests: boolean = false;\n\n /** Bound function references for proper event listener removal */\n private _boundOnKeyDown: (e: KeyboardEvent) => void = this._onKeyDown.bind(this);\n private _boundOnMouseMove: (e: MouseEvent) => void = this._onMouseMove.bind(this);\n\n // eslint-disable-next-line jsdoc/require-param\n /**\n * @param {WebGLRenderer|WebGPURenderer} renderer - A reference to the current renderer\n */\n constructor(renderer: Renderer, private readonly _mobileInfo: isMobileResult = isMobile)\n {\n this._hookDiv = null;\n\n if (_mobileInfo.tablet || _mobileInfo.phone)\n {\n this._createTouchHook();\n }\n\n this._renderer = renderer;\n }\n\n /**\n * Value of `true` if accessibility is currently active and accessibility layers are showing.\n * @type {boolean}\n * @readonly\n */\n get isActive(): boolean\n {\n return this._isActive;\n }\n\n /**\n * Value of `true` if accessibility is enabled for touch devices.\n * @type {boolean}\n * @readonly\n */\n get isMobileAccessibility(): boolean\n {\n return this._isMobileAccessibility;\n }\n\n /**\n * Button element for handling touch hooks.\n * @readonly\n */\n get hookDiv()\n {\n return this._hookDiv;\n }\n\n /**\n * The DOM element that will sit over the PixiJS element. This is where the div overlays will go.\n * @readonly\n */\n get div()\n {\n return this._div;\n }\n\n /**\n * Creates the touch hooks.\n * @private\n */\n private _createTouchHook(): void\n {\n const hookDiv = document.createElement('button');\n\n hookDiv.style.width = `${DIV_HOOK_SIZE}px`;\n hookDiv.style.height = `${DIV_HOOK_SIZE}px`;\n hookDiv.style.position = 'absolute';\n hookDiv.style.top = `${DIV_HOOK_POS_X}px`;\n hookDiv.style.left = `${DIV_HOOK_POS_Y}px`;\n hookDiv.style.zIndex = DIV_HOOK_ZINDEX.toString();\n hookDiv.style.backgroundColor = '#FF0000';\n hookDiv.title = 'select to enable accessibility for this content';\n\n hookDiv.addEventListener('focus', () =>\n {\n this._isMobileAccessibility = true;\n this._activate();\n this._destroyTouchHook();\n });\n\n document.body.appendChild(hookDiv);\n this._hookDiv = hookDiv;\n }\n\n /**\n * Destroys the touch hooks.\n * @private\n */\n private _destroyTouchHook(): void\n {\n if (!this._hookDiv)\n {\n return;\n }\n document.body.removeChild(this._hookDiv);\n this._hookDiv = null;\n }\n\n /**\n * Activating will cause the Accessibility layer to be shown.\n * This is called when a user presses the tab key.\n * @private\n */\n private _activate(): void\n {\n if (this._isActive)\n {\n return;\n }\n\n this._isActive = true;\n\n // Create and add div if needed\n if (!this._div)\n {\n this._div = document.createElement('div');\n this._div.style.position = 'absolute';\n this._div.style.top = `${DIV_TOUCH_POS_X}px`;\n this._div.style.left = `${DIV_TOUCH_POS_Y}px`;\n this._div.style.pointerEvents = 'none';\n this._div.style.zIndex = DIV_TOUCH_ZINDEX.toString();\n\n // Initialize the CanvasTransformSync to keep the DOM element in sync with the canvas\n this._canvasObserver = new CanvasObserver({\n domElement: this._div,\n renderer: this._renderer,\n });\n }\n\n // Add listeners using the stored bound references\n if (this._activateOnTab)\n {\n globalThis.addEventListener('keydown', this._boundOnKeyDown, false);\n }\n\n if (this._deactivateOnMouseMove)\n {\n globalThis.document.addEventListener('mousemove', this._boundOnMouseMove, true);\n }\n\n // Check if canvas is in DOM\n const canvas = this._renderer.view.canvas;\n\n if (!canvas.parentNode)\n {\n const observer = new MutationObserver(() =>\n {\n if (canvas.parentNode)\n {\n observer.disconnect();\n\n // Add to DOM\n this._canvasObserver.ensureAttached();\n // Only start the postrender runner after div is ready\n this._initAccessibilitySetup();\n }\n });\n\n observer.observe(document.body, { childList: true, subtree: true });\n }\n else\n {\n // Add to DOM\n this._canvasObserver.ensureAttached();\n // Div is ready, initialize accessibility\n this._initAccessibilitySetup();\n }\n }\n\n // New method to handle initialization after div is ready\n private _initAccessibilitySetup(): void\n {\n // Add the postrender runner to start processing accessible objects\n this._renderer.runners.postrender.add(this);\n\n // Force an initial update of accessible objects\n if (this._renderer.lastObjectRendered)\n {\n this._updateAccessibleObjects(this._renderer.lastObjectRendered as Container);\n }\n }\n\n /**\n * Deactivates the accessibility system. Removes listeners and accessibility elements.\n * @private\n */\n private _deactivate(): void\n {\n if (!this._isActive || this._isMobileAccessibility)\n {\n return;\n }\n\n this._isActive = false;\n\n // Switch listeners\n globalThis.document.removeEventListener('mousemove', this._boundOnMouseMove, true);\n if (this._activateOnTab)\n {\n globalThis.addEventListener('keydown', this._boundOnKeyDown, false);\n }\n\n this._renderer.runners.postrender.remove(this);\n\n // Remove all active accessibility elements\n for (const child of this._children)\n {\n if (child._accessibleDiv?.parentNode)\n {\n child._accessibleDiv.parentNode.removeChild(child._accessibleDiv);\n child._accessibleDiv = null;\n }\n child._accessibleActive = false;\n }\n\n // Clear the pool of divs\n for (const accessibleType in this._pools)\n {\n const pool = this._pools[accessibleType];\n\n pool.forEach((div) =>\n {\n if (div.parentNode)\n {\n div.parentNode.removeChild(div);\n }\n });\n delete this._pools[accessibleType];\n }\n\n // Remove parent div from DOM\n if (this._div?.parentNode)\n {\n this._div.parentNode.removeChild(this._div);\n }\n\n this._pools = {};\n this._children = [];\n }\n\n /**\n * This recursive function will run through the scene graph and add any new accessible objects to the DOM layer.\n * @private\n * @param {Container} container - The Container to check.\n */\n private _updateAccessibleObjects(container: Container): void\n {\n if (!container.visible || !container.accessibleChildren)\n {\n return;\n }\n\n // Separate check for accessibility without requiring interactivity\n if (container.accessible)\n {\n if (!container._accessibleActive)\n {\n this._addChild(container);\n }\n\n container._renderId = this._renderId;\n }\n\n const children = container.children;\n\n if (children)\n {\n for (let i = 0; i < children.length; i++)\n {\n this._updateAccessibleObjects(children[i] as Container);\n }\n }\n }\n\n /**\n * Runner init called, view is available at this point.\n * @ignore\n */\n public init(options?: AccessibilitySystemOptions): void\n {\n // Ensure we have the accessibilityOptions object\n const defaultOpts = AccessibilitySystem.defaultOptions;\n const mergedOptions = {\n accessibilityOptions: {\n ...defaultOpts,\n ...(options?.accessibilityOptions || {})\n }\n };\n\n this.debug = mergedOptions.accessibilityOptions.debug;\n this._activateOnTab = mergedOptions.accessibilityOptions.activateOnTab;\n this._deactivateOnMouseMove = mergedOptions.accessibilityOptions.deactivateOnMouseMove;\n\n if (mergedOptions.accessibilityOptions.enabledByDefault)\n {\n this._activate();\n }\n\n this._renderer.runners.postrender.remove(this);\n }\n\n /**\n * Updates the accessibility layer during rendering.\n * - Removes divs for containers no longer in the scene\n * - Updates the position and dimensions of the root div\n * - Updates positions of active accessibility divs\n * Only fires while the accessibility system is active.\n * @ignore\n */\n public postrender(): void\n {\n /* On Android default web browser, tab order seems to be calculated by position rather than tabIndex,\n * moving buttons can cause focus to flicker between two buttons making it hard/impossible to navigate,\n * so I am just running update every half a second, seems to fix it.\n */\n const now = performance.now();\n\n if (this._mobileInfo.android.device && now < this._androidUpdateCount)\n {\n return;\n }\n\n this._androidUpdateCount = now + this._androidUpdateFrequency;\n\n if ((!this._renderer.renderingToScreen || !this._renderer.view.canvas)\n && !this._isRunningTests)\n {\n return;\n }\n\n // Track which containers are still active this frame\n const activeIds = new Set<number>();\n\n if (this._renderer.lastObjectRendered)\n {\n this._updateAccessibleObjects(this._renderer.lastObjectRendered as Container);\n\n // Mark all updated containers as active\n for (const child of this._children)\n {\n if (child._renderId === this._renderId)\n {\n activeIds.add(this._children.indexOf(child));\n }\n }\n }\n\n // Remove any containers that weren't updated this frame\n for (let i = this._children.length - 1; i >= 0; i--)\n {\n const child = this._children[i];\n\n if (!activeIds.has(i))\n {\n // Container was removed, clean up its accessibility div\n if (child._accessibleDiv && child._accessibleDiv.parentNode)\n {\n child._accessibleDiv.parentNode.removeChild(child._accessibleDiv);\n\n const pool = this._getPool(child.accessibleType);\n\n pool.push(child._accessibleDiv);\n child._accessibleDiv = null;\n }\n child._accessibleActive = false;\n removeItems(this._children, i, 1);\n }\n }\n\n // Update root div dimensions if needed\n if (this._renderer.renderingToScreen)\n {\n // Ensure the main DOM element is attached to the same parent as the canvas\n this._canvasObserver.ensureAttached();\n }\n\n // Update positions of existing divs\n for (let i = 0; i < this._children.length; i++)\n {\n const child = this._children[i];\n\n if (!child._accessibleActive || !child._accessibleDiv)\n {\n continue;\n }\n\n // Only update position-related properties\n const div = child._accessibleDiv;\n const hitArea = (child.hitArea || child.getBounds().rectangle) as Rectangle;\n\n if (child.hitArea)\n {\n const wt = child.worldTransform;\n\n div.style.left = `${(wt.tx + (hitArea.x * wt.a))}px`;\n div.style.top = `${(wt.ty + (hitArea.y * wt.d))}px`;\n div.style.width = `${hitArea.width * wt.a}px`;\n div.style.height = `${hitArea.height * wt.d}px`;\n }\n else\n {\n this._capHitArea(hitArea);\n div.style.left = `${hitArea.x}px`;\n div.style.top = `${hitArea.y}px`;\n div.style.width = `${hitArea.width}px`;\n div.style.height = `${hitArea.height}px`;\n }\n }\n\n // increment the render id..\n this._renderId++;\n }\n\n /**\n * private function that will visually add the information to the\n * accessibility div\n * @param {HTMLElement} div -\n */\n private _updateDebugHTML(div: AccessibleHTMLElement): void\n {\n div.innerHTML = `type: ${div.type}</br> title : ${div.title}</br> tabIndex: ${div.tabIndex}`;\n }\n\n /**\n * Adjust the hit area based on the bounds of a display object\n * @param {Rectangle} hitArea - Bounds of the child\n */\n private _capHitArea(hitArea: Rectangle): void\n {\n if (hitArea.x < 0)\n {\n hitArea.width += hitArea.x;\n hitArea.x = 0;\n }\n\n if (hitArea.y < 0)\n {\n hitArea.height += hitArea.y;\n hitArea.y = 0;\n }\n\n const { width: viewWidth, height: viewHeight } = this._renderer;\n\n if (hitArea.x + hitArea.width > viewWidth)\n {\n hitArea.width = viewWidth - hitArea.x;\n }\n\n if (hitArea.y + hitArea.height > viewHeight)\n {\n hitArea.height = viewHeight - hitArea.y;\n }\n }\n\n /**\n * Creates or reuses a div element for a Container and adds it to the accessibility layer.\n * Sets up ARIA attributes, event listeners, and positioning based on the container's properties.\n * @private\n * @param {Container} container - The child to make accessible.\n */\n private _addChild<T extends Container>(container: T): void\n {\n const pool = this._getPool(container.accessibleType);\n\n let div = pool.pop();\n\n if (div)\n {\n /*\n * Reset these properties so we don't have outdated metadata.\n * It was possible to end up with:\n * - the old tabIndex if container.interactive is false\n * - the old aria-label if container.accessibleHint is not set\n */\n div.innerHTML = '';\n div.removeAttribute('title');\n div.removeAttribute('aria-label');\n div.tabIndex = 0;\n }\n else\n {\n if (container.accessibleType === 'button')\n {\n div = document.createElement('button');\n }\n else\n {\n div = document.createElement(container.accessibleType);\n div.style.cssText = `\n color: transparent;\n pointer-events: none;\n padding: 0;\n margin: 0;\n border: 0;\n outline: 0;\n background: transparent;\n box-sizing: border-box;\n user-select: none;\n -webkit-user-select: none;\n -moz-user-select: none;\n -ms-user-select: none;\n `;\n if (container.accessibleText)\n {\n div.innerText = container.accessibleText;\n }\n }\n div.style.width = `${DIV_TOUCH_SIZE}px`;\n div.style.height = `${DIV_TOUCH_SIZE}px`;\n div.style.backgroundColor = this.debug ? 'rgba(255,255,255,0.5)' : 'transparent';\n div.style.position = 'absolute';\n div.style.zIndex = DIV_TOUCH_ZINDEX.toString();\n div.style.borderStyle = 'none';\n\n // ARIA attributes ensure that button title and hint updates are announced properly\n if (navigator.userAgent.toLowerCase().includes('chrome'))\n {\n // Chrome doesn't need aria-live to work as intended; in fact it just gets more confused.\n div.setAttribute('aria-live', 'off');\n }\n else\n {\n div.setAttribute('aria-live', 'polite');\n }\n\n if (navigator.userAgent.match(/rv:.*Gecko\\//))\n {\n // FireFox needs this to announce only the new button name\n div.setAttribute('aria-relevant', 'additions');\n }\n else\n {\n // required by IE, other browsers don't much care\n div.setAttribute('aria-relevant', 'text');\n }\n\n div.addEventListener('click', this._onClick.bind(this));\n div.addEventListener('focus', this._onFocus.bind(this));\n div.addEventListener('focusout', this._onFocusOut.bind(this));\n }\n\n // set pointer events\n div.style.pointerEvents = container.accessiblePointerEvents;\n // set the type, this defaults to button!\n div.type = container.accessibleType;\n\n if (container.accessibleTitle && container.accessibleTitle !== null)\n {\n div.title = container.accessibleTitle;\n }\n else if (!container.accessibleHint\n || container.accessibleHint === null)\n {\n div.title = `container ${container.tabIndex}`;\n }\n\n if (container.accessibleHint\n && container.accessibleHint !== null)\n {\n div.setAttribute('aria-label', container.accessibleHint);\n }\n\n if (container.interactive)\n {\n div.tabIndex = container.tabIndex;\n }\n else\n {\n // reset tabIndex back to 0 in case this div instance was pulled from the pool and already had a value\n div.tabIndex = 0;\n }\n\n if (this.debug)\n {\n this._updateDebugHTML(div);\n }\n\n container._accessibleActive = true;\n container._accessibleDiv = div;\n div.container = container;\n\n this._children.push(container);\n this._div.appendChild(container._accessibleDiv);\n }\n\n /**\n * Dispatch events with the EventSystem.\n * @param e\n * @param type\n * @private\n */\n private _dispatchEvent(e: UIEvent, type: string[]): void\n {\n const { container: target } = e.target as AccessibleHTMLElement;\n const boundary = this._renderer.events.rootBoundary;\n const event: FederatedEvent = Object.assign(new FederatedEvent(boundary), { target });\n\n boundary.rootTarget = this._renderer.lastObjectRendered as Container;\n type.forEach((type) => boundary.dispatchEvent(event, type));\n }\n\n /**\n * Maps the div button press to pixi's EventSystem (click)\n * @private\n * @param {MouseEvent} e - The click event.\n */\n private _onClick(e: MouseEvent): void\n {\n this._dispatchEvent(e, ['click', 'pointertap', 'tap']);\n }\n\n /**\n * Maps the div focus events to pixi's EventSystem (mouseover)\n * @private\n * @param {FocusEvent} e - The focus event.\n */\n private _onFocus(e: FocusEvent): void\n {\n if (!(e.target as Element).getAttribute('aria-live'))\n {\n (e.target as Element).setAttribute('aria-live', 'assertive');\n }\n\n this._dispatchEvent(e, ['mouseover']);\n }\n\n /**\n * Maps the div focus events to pixi's EventSystem (mouseout)\n * @private\n * @param {FocusEvent} e - The focusout event.\n */\n private _onFocusOut(e: FocusEvent): void\n {\n if (!(e.target as Element).getAttribute('aria-live'))\n {\n (e.target as Element).setAttribute('aria-live', 'polite');\n }\n\n this._dispatchEvent(e, ['mouseout']);\n }\n\n /**\n * Is called when a key is pressed\n * @private\n * @param {KeyboardEvent} e - The keydown event.\n */\n private _onKeyDown(e: KeyboardEvent): void\n {\n if (e.keyCode !== KEY_CODE_TAB || !this._activateOnTab)\n {\n return;\n }\n\n this._activate();\n }\n\n /**\n * Is called when the mouse moves across the renderer element\n * @private\n * @param {MouseEvent} e - The mouse event.\n */\n private _onMouseMove(e: MouseEvent): void\n {\n if (e.movementX === 0 && e.movementY === 0)\n {\n return;\n }\n\n this._deactivate();\n }\n\n /**\n * Destroys the accessibility system. Removes all elements and listeners.\n * > [!IMPORTANT] This is typically called automatically when the {@link Application} is destroyed.\n * > A typically user should not need to call this method directly.\n */\n public destroy(): void\n {\n this._deactivate();\n this._destroyTouchHook();\n\n this._canvasObserver?.destroy();\n this._canvasObserver = null;\n\n this._div = null;\n this._pools = null;\n this._children = null;\n this._renderer = null;\n this._hookDiv = null;\n\n // Remove listeners using the stored bound references\n globalThis.removeEventListener('keydown', this._boundOnKeyDown);\n this._boundOnKeyDown = null;\n globalThis.document.removeEventListener('mousemove', this._boundOnMouseMove, true);\n this._boundOnMouseMove = null;\n }\n\n /**\n * Enables or disables the accessibility system.\n * @param enabled - Whether to enable or disable accessibility.\n * @example\n * ```js\n * app.renderer.accessibility.setAccessibilityEnabled(true); // Enable accessibility\n * app.renderer.accessibility.setAccessibilityEnabled(false); // Disable accessibility\n * ```\n */\n public setAccessibilityEnabled(enabled: boolean): void\n {\n if (enabled)\n {\n this._activate();\n }\n else\n {\n this._deactivate();\n }\n }\n\n private _getPool(accessibleType: string): AccessibleHTMLElement[]\n {\n if (!this._pools[accessibleType])\n {\n this._pools[accessibleType] = [];\n }\n\n return this._pools[accessibleType];\n }\n}\n"],"names":["type"],"mappings":"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"}