shadow$provide.module$node_modules$pixi_DOT_js$lib$accessibility$AccessibilitySystem = function(global, require, module, exports) { var CanvasObserver = require("module$node_modules$pixi_DOT_js$lib$dom$CanvasObserver"), FederatedEvent = require("module$node_modules$pixi_DOT_js$lib$events$FederatedEvent"); global = require("module$node_modules$pixi_DOT_js$lib$extensions$Extensions"); var isMobile = require("module$node_modules$pixi_DOT_js$lib$utils$browser$isMobile"), removeItems = require("module$node_modules$pixi_DOT_js$lib$utils$data$removeItems"); "use strict"; const node_modules$pixi_DOT_js$lib$accessibility$AccessibilitySystem$classdecl$var4 = class { constructor(renderer, _mobileInfo = isMobile.isMobile) { this._mobileInfo = _mobileInfo; this.debug = !1; this._deactivateOnMouseMove = this._activateOnTab = !0; this._isMobileAccessibility = this._isActive = !1; this._div = null; this._pools = {}; this._renderId = 0; this._children = []; this._androidUpdateCount = 0; this._androidUpdateFrequency = 500; this._isRunningTests = !1; this._boundOnKeyDown = this._onKeyDown.bind(this); this._boundOnMouseMove = this._onMouseMove.bind(this); this._hookDiv = null; (_mobileInfo.tablet || _mobileInfo.phone) && this._createTouchHook(); this._renderer = renderer; } get isActive() { return this._isActive; } get isMobileAccessibility() { return this._isMobileAccessibility; } get hookDiv() { return this._hookDiv; } get div() { return this._div; } _createTouchHook() { const hookDiv = document.createElement("button"); hookDiv.style.width = "1px"; hookDiv.style.height = "1px"; hookDiv.style.position = "absolute"; hookDiv.style.top = "-1000px"; hookDiv.style.left = "-1000px"; hookDiv.style.zIndex = (2).toString(); hookDiv.style.backgroundColor = "#FF0000"; hookDiv.title = "select to enable accessibility for this content"; hookDiv.addEventListener("focus", () => { this._isMobileAccessibility = !0; this._activate(); this._destroyTouchHook(); }); document.body.appendChild(hookDiv); this._hookDiv = hookDiv; } _destroyTouchHook() { this._hookDiv && (document.body.removeChild(this._hookDiv), this._hookDiv = null); } _activate() { if (!this._isActive) { this._isActive = !0; this._div || (this._div = document.createElement("div"), this._div.style.position = "absolute", this._div.style.top = "0px", this._div.style.left = "0px", this._div.style.pointerEvents = "none", this._div.style.zIndex = (2).toString(), this._canvasObserver = new CanvasObserver.CanvasObserver({domElement:this._div, renderer:this._renderer})); this._activateOnTab && globalThis.addEventListener("keydown", this._boundOnKeyDown, !1); this._deactivateOnMouseMove && globalThis.document.addEventListener("mousemove", this._boundOnMouseMove, !0); var canvas = this._renderer.view.canvas; if (canvas.parentNode) { this._canvasObserver.ensureAttached(), this._initAccessibilitySetup(); } else { const observer = new MutationObserver(() => { canvas.parentNode && (observer.disconnect(), this._canvasObserver.ensureAttached(), this._initAccessibilitySetup()); }); observer.observe(document.body, {childList:!0, subtree:!0}); } } } _initAccessibilitySetup() { this._renderer.runners.postrender.add(this); this._renderer.lastObjectRendered && this._updateAccessibleObjects(this._renderer.lastObjectRendered); } _deactivate() { if (this._isActive && !this._isMobileAccessibility) { this._isActive = !1; globalThis.document.removeEventListener("mousemove", this._boundOnMouseMove, !0); this._activateOnTab && globalThis.addEventListener("keydown", this._boundOnKeyDown, !1); this._renderer.runners.postrender.remove(this); for (const child of this._children) { child._accessibleDiv?.parentNode && (child._accessibleDiv.parentNode.removeChild(child._accessibleDiv), child._accessibleDiv = null), child._accessibleActive = !1; } for (const accessibleType in this._pools) { this._pools[accessibleType].forEach(div => { div.parentNode && div.parentNode.removeChild(div); }), delete this._pools[accessibleType]; } this._div?.parentNode && this._div.parentNode.removeChild(this._div); this._pools = {}; this._children = []; } } _updateAccessibleObjects(container) { if (container.visible && container.accessibleChildren && (container.accessible && (container._accessibleActive || this._addChild(container), container._renderId = this._renderId), container = container.children)) { for (let i = 0; i < container.length; i++) { this._updateAccessibleObjects(container[i]); } } } init(options) { options = {...node_modules$pixi_DOT_js$lib$accessibility$AccessibilitySystem$classdecl$var4.defaultOptions, ...(options?.accessibilityOptions || {})}; this.debug = options.debug; this._activateOnTab = options.activateOnTab; this._deactivateOnMouseMove = options.deactivateOnMouseMove; options.enabledByDefault && this._activate(); this._renderer.runners.postrender.remove(this); } postrender() { var now = performance.now(); if (!(this._mobileInfo.android.device && now < this._androidUpdateCount) && (this._androidUpdateCount = now + this._androidUpdateFrequency, this._renderer.renderingToScreen && this._renderer.view.canvas || this._isRunningTests)) { now = new Set(); if (this._renderer.lastObjectRendered) { this._updateAccessibleObjects(this._renderer.lastObjectRendered); for (var child of this._children) { child._renderId === this._renderId && now.add(this._children.indexOf(child)); } } for (child = this._children.length - 1; 0 <= child; child--) { var child$jscomp$0 = this._children[child]; now.has(child) || (child$jscomp$0._accessibleDiv && child$jscomp$0._accessibleDiv.parentNode && (child$jscomp$0._accessibleDiv.parentNode.removeChild(child$jscomp$0._accessibleDiv), this._getPool(child$jscomp$0.accessibleType).push(child$jscomp$0._accessibleDiv), child$jscomp$0._accessibleDiv = null), child$jscomp$0._accessibleActive = !1, removeItems.removeItems(this._children, child, 1)); } this._renderer.renderingToScreen && this._canvasObserver.ensureAttached(); for (now = 0; now < this._children.length; now++) { var child$jscomp$1 = this._children[now]; child$jscomp$1._accessibleActive && child$jscomp$1._accessibleDiv && (child = child$jscomp$1._accessibleDiv, child$jscomp$0 = child$jscomp$1.hitArea || child$jscomp$1.getBounds().rectangle, child$jscomp$1.hitArea ? (child$jscomp$1 = child$jscomp$1.worldTransform, child.style.left = `${child$jscomp$1.tx + child$jscomp$0.x * child$jscomp$1.a}px`, child.style.top = `${child$jscomp$1.ty + child$jscomp$0.y * child$jscomp$1.d}px`, child.style.width = `${child$jscomp$0.width * child$jscomp$1.a}px`, child.style.height = `${child$jscomp$0.height * child$jscomp$1.d}px`) : (this._capHitArea(child$jscomp$0), child.style.left = `${child$jscomp$0.x}px`, child.style.top = `${child$jscomp$0.y}px`, child.style.width = `${child$jscomp$0.width}px`, child.style.height = `${child$jscomp$0.height}px`)); } this._renderId++; } } _updateDebugHTML(div) { div.innerHTML = `type: ${div.type}
title : ${div.title}
tabIndex: ${div.tabIndex}`; } _capHitArea(hitArea) { 0 > hitArea.x && (hitArea.width += hitArea.x, hitArea.x = 0); 0 > hitArea.y && (hitArea.height += hitArea.y, hitArea.y = 0); const {width:viewWidth, height:viewHeight} = this._renderer; hitArea.x + hitArea.width > viewWidth && (hitArea.width = viewWidth - hitArea.x); hitArea.y + hitArea.height > viewHeight && (hitArea.height = viewHeight - hitArea.y); } _addChild(container) { let div = this._getPool(container.accessibleType).pop(); div ? (div.innerHTML = "", div.removeAttribute("title"), div.removeAttribute("aria-label"), div.tabIndex = 0) : ("button" === container.accessibleType ? div = document.createElement("button") : (div = document.createElement(container.accessibleType), 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 ", container.accessibleText && (div.innerText = container.accessibleText)), div.style.width = "100px", div.style.height = "100px", div.style.backgroundColor = this.debug ? "rgba(255,255,255,0.5)" : "transparent", div.style.position = "absolute", div.style.zIndex = (2).toString(), div.style.borderStyle = "none", navigator.userAgent.toLowerCase().includes("chrome") ? div.setAttribute("aria-live", "off") : div.setAttribute("aria-live", "polite"), navigator.userAgent.match(/rv:.*Gecko\//) ? div.setAttribute("aria-relevant", "additions") : div.setAttribute("aria-relevant", "text"), div.addEventListener("click", this._onClick.bind(this)), div.addEventListener("focus", this._onFocus.bind(this)), div.addEventListener("focusout", this._onFocusOut.bind(this))); div.style.pointerEvents = container.accessiblePointerEvents; div.type = container.accessibleType; container.accessibleTitle && null !== container.accessibleTitle ? div.title = container.accessibleTitle : container.accessibleHint && null !== container.accessibleHint || (div.title = `container ${container.tabIndex}`); container.accessibleHint && null !== container.accessibleHint && div.setAttribute("aria-label", container.accessibleHint); div.tabIndex = container.interactive ? container.tabIndex : 0; this.debug && this._updateDebugHTML(div); container._accessibleActive = !0; container._accessibleDiv = div; div.container = container; this._children.push(container); this._div.appendChild(container._accessibleDiv); } _dispatchEvent(e, type) { ({container:e} = e.target); const boundary = this._renderer.events.rootBoundary, event = Object.assign(new FederatedEvent.FederatedEvent(boundary), {target:e}); boundary.rootTarget = this._renderer.lastObjectRendered; type.forEach(type2 => boundary.dispatchEvent(event, type2)); } _onClick(e) { this._dispatchEvent(e, ["click", "pointertap", "tap"]); } _onFocus(e) { e.target.getAttribute("aria-live") || e.target.setAttribute("aria-live", "assertive"); this._dispatchEvent(e, ["mouseover"]); } _onFocusOut(e) { e.target.getAttribute("aria-live") || e.target.setAttribute("aria-live", "polite"); this._dispatchEvent(e, ["mouseout"]); } _onKeyDown(e) { 9 === e.keyCode && this._activateOnTab && this._activate(); } _onMouseMove(e) { 0 === e.movementX && 0 === e.movementY || this._deactivate(); } destroy() { this._deactivate(); this._destroyTouchHook(); this._canvasObserver?.destroy(); this._hookDiv = this._renderer = this._children = this._pools = this._div = this._canvasObserver = null; globalThis.removeEventListener("keydown", this._boundOnKeyDown); this._boundOnKeyDown = null; globalThis.document.removeEventListener("mousemove", this._boundOnMouseMove, !0); this._boundOnMouseMove = null; } setAccessibilityEnabled(enabled) { enabled ? this._activate() : this._deactivate(); } _getPool(accessibleType) { this._pools[accessibleType] || (this._pools[accessibleType] = []); return this._pools[accessibleType]; } }; require = node_modules$pixi_DOT_js$lib$accessibility$AccessibilitySystem$classdecl$var4; require.extension = {type:[global.ExtensionType.WebGLSystem, global.ExtensionType.WebGPUSystem], name:"accessibility"}; require.defaultOptions = {enabledByDefault:!1, debug:!1, activateOnTab:!0, deactivateOnMouseMove:!0}; exports.AccessibilitySystem = require; }; //# sourceMappingURL=module$node_modules$pixi_DOT_js$lib$accessibility$AccessibilitySystem.js.map