{"version":3,"file":"217.bundle.js","mappings":"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","sources":["webpack://nars-30anniversary/./node_modules/pixi.js/lib/app/ResizePlugin.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/app/TickerPlugin.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/app/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/FederatedEvent.mjs","webpack://nars-30anniversary/./node_modules/ismobilejs/esm/isMobile.js","webpack://nars-30anniversary/./node_modules/pixi.js/lib/utils/browser/isMobile.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/accessibility/AccessibilitySystem.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/accessibility/accessibilityTarget.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/accessibility/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/EventTicker.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/FederatedMouseEvent.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/FederatedPointerEvent.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/FederatedWheelEvent.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/EventBoundary.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/EventSystem.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/FederatedEventTarget.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/events/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/filters/FilterPipe.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/container/bounds/getFastGlobalBounds.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/container/bounds/getRenderableBounds.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/filters/FilterSystem.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/filters/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/compiler/utils/addBits.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/compiler/utils/compileHooks.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/compiler/utils/compileInputs.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/compiler/utils/compileOutputs.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/compiler/utils/injectBits.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/compiler/compileHighShader.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/defaultProgramTemplate.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/shader-bits/globalUniformsBit.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/compileHighShaderToProgram.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/shader-bits/colorBit.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/shader-bits/generateTextureBatchBit.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/shader-bits/localUniformBit.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/high-shader/shader-bits/roundPixelsBit.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/renderers/gl/shader/getBatchSamplersUniformGroup.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/rendering/renderers/shared/texture/CanvasPool.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/graphics/gpu/colorToUniform.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/graphics/shared/GraphicsPipe.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/graphics/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/mesh/shared/MeshPipe.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/mesh/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/mesh/shared/BatchableMesh.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/mesh/shared/MeshGeometry.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/mesh-plane/PlaneGeometry.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-nine-slice/NineSliceGeometry.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-nine-slice/NineSliceSpritePipe.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-nine-slice/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-tiling/shader/tilingBit.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-tiling/shader/TilingSpriteShader.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-tiling/utils/QuadGeometry.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-tiling/utils/setPositions.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-tiling/utils/applyMatrix.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-tiling/utils/setUvs.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-tiling/TilingSpritePipe.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite-tiling/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/sprite/BatchableSprite.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/AbstractBitmapFont.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/utils/resolveCharacters.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/DynamicBitmapFont.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/utils/getBitmapTextLayout.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/BitmapFontManager.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/BitmapFont.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/asset/bitmapFontTextParser.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/asset/bitmapFontXMLParser.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/asset/bitmapFontXMLStringParser.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/asset/loadBitmapFont.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text/sdfShader/shader-bits/localUniformMSDFBit.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text/sdfShader/shader-bits/mSDFBit.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text/sdfShader/SdfShader.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/BitmapTextPipe.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-bitmap/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/HTMLTextPipe.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/utils/browser/isSafari.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/HTMLTextRenderData.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/textStyleToCSS.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/HtmlTextStyle.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/extractFontFamilies.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/loadFontAsBase64.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/loadFontCSS.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/getFontCss.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/getSVGUrl.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/getTemporaryCanvasFromImage.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/loadSVGImage.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/utils/measureHtmlText.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/HTMLTextSystem.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text-html/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text/canvas/utils/getCanvasFillStyle.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text/canvas/CanvasTextPipe.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/utils/canvas/getCanvasBoundingBox.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text/canvas/CanvasTextSystem.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text/init.mjs","webpack://nars-30anniversary/./node_modules/pixi.js/lib/scene/text/utils/getPo2TextureFromSource.mjs"],"sourcesContent":["import { ExtensionType } from '../extensions/Extensions.mjs';\n\n\"use strict\";\nclass ResizePlugin {\n /**\n * Initialize the plugin with scope of application instance\n * @static\n * @private\n * @param {object} [options] - See application options\n */\n static init(options) {\n Object.defineProperty(\n this,\n \"resizeTo\",\n /**\n * The HTML element or window to automatically resize the\n * renderer's view element to match width and height.\n * @member {Window|HTMLElement}\n * @name resizeTo\n * @memberof app.Application#\n */\n {\n set(dom) {\n globalThis.removeEventListener(\"resize\", this.queueResize);\n this._resizeTo = dom;\n if (dom) {\n globalThis.addEventListener(\"resize\", this.queueResize);\n this.resize();\n }\n },\n get() {\n return this._resizeTo;\n }\n }\n );\n this.queueResize = () => {\n if (!this._resizeTo) {\n return;\n }\n this._cancelResize();\n this._resizeId = requestAnimationFrame(() => this.resize());\n };\n this._cancelResize = () => {\n if (this._resizeId) {\n cancelAnimationFrame(this._resizeId);\n this._resizeId = null;\n }\n };\n this.resize = () => {\n if (!this._resizeTo) {\n return;\n }\n this._cancelResize();\n let width;\n let height;\n if (this._resizeTo === globalThis.window) {\n width = globalThis.innerWidth;\n height = globalThis.innerHeight;\n } else {\n const { clientWidth, clientHeight } = this._resizeTo;\n width = clientWidth;\n height = clientHeight;\n }\n this.renderer.resize(width, height);\n this.render();\n };\n this._resizeId = null;\n this._resizeTo = null;\n this.resizeTo = options.resizeTo || null;\n }\n /**\n * Clean up the ticker, scoped to application\n * @static\n * @private\n */\n static destroy() {\n globalThis.removeEventListener(\"resize\", this.queueResize);\n this._cancelResize();\n this._cancelResize = null;\n this.queueResize = null;\n this.resizeTo = null;\n this.resize = null;\n }\n}\n/** @ignore */\nResizePlugin.extension = ExtensionType.Application;\n\nexport { ResizePlugin };\n//# sourceMappingURL=ResizePlugin.mjs.map\n","import { ExtensionType } from '../extensions/Extensions.mjs';\nimport { UPDATE_PRIORITY } from '../ticker/const.mjs';\nimport { Ticker } from '../ticker/Ticker.mjs';\n\n\"use strict\";\nclass TickerPlugin {\n /**\n * Initialize the plugin with scope of application instance\n * @static\n * @private\n * @param {object} [options] - See application options\n */\n static init(options) {\n options = Object.assign({\n autoStart: true,\n sharedTicker: false\n }, options);\n Object.defineProperty(\n this,\n \"ticker\",\n {\n set(ticker) {\n if (this._ticker) {\n this._ticker.remove(this.render, this);\n }\n this._ticker = ticker;\n if (ticker) {\n ticker.add(this.render, this, UPDATE_PRIORITY.LOW);\n }\n },\n get() {\n return this._ticker;\n }\n }\n );\n this.stop = () => {\n this._ticker.stop();\n };\n this.start = () => {\n this._ticker.start();\n };\n this._ticker = null;\n this.ticker = options.sharedTicker ? Ticker.shared : new Ticker();\n if (options.autoStart) {\n this.start();\n }\n }\n /**\n * Clean up the ticker, scoped to application.\n * @static\n * @private\n */\n static destroy() {\n if (this._ticker) {\n const oldTicker = this._ticker;\n this.ticker = null;\n oldTicker.destroy();\n }\n }\n}\n/** @ignore */\nTickerPlugin.extension = ExtensionType.Application;\n\nexport { TickerPlugin };\n//# sourceMappingURL=TickerPlugin.mjs.map\n","import { extensions } from '../extensions/Extensions.mjs';\nimport { ResizePlugin } from './ResizePlugin.mjs';\nimport { TickerPlugin } from './TickerPlugin.mjs';\n\n\"use strict\";\nextensions.add(ResizePlugin);\nextensions.add(TickerPlugin);\n//# sourceMappingURL=init.mjs.map\n","import { Point } from '../maths/point/Point.mjs';\n\n\"use strict\";\nclass FederatedEvent {\n /**\n * @param manager - The event boundary which manages this event. Propagation can only occur\n * within the boundary's jurisdiction.\n */\n constructor(manager) {\n /** Flags whether this event bubbles. This will take effect only if it is set before propagation. */\n this.bubbles = true;\n /** @deprecated since 7.0.0 */\n this.cancelBubble = true;\n /**\n * Flags whether this event can be canceled using {@link FederatedEvent.preventDefault}. This is always\n * false (for now).\n */\n this.cancelable = false;\n /**\n * Flag added for compatibility with DOM {@code Event}. It is not used in the Federated Events\n * API.\n * @see https://dom.spec.whatwg.org/#dom-event-composed\n */\n this.composed = false;\n /** Flags whether the default response of the user agent was prevent through this event. */\n this.defaultPrevented = false;\n /**\n * The propagation phase.\n * @default {@link FederatedEvent.NONE}\n */\n this.eventPhase = FederatedEvent.prototype.NONE;\n /** Flags whether propagation was stopped. */\n this.propagationStopped = false;\n /** Flags whether propagation was immediately stopped. */\n this.propagationImmediatelyStopped = false;\n /** The coordinates of the event relative to the nearest DOM layer. This is a non-standard property. */\n this.layer = new Point();\n /** The coordinates of the event relative to the DOM document. This is a non-standard property. */\n this.page = new Point();\n this.NONE = 0;\n this.CAPTURING_PHASE = 1;\n this.AT_TARGET = 2;\n this.BUBBLING_PHASE = 3;\n this.manager = manager;\n }\n /** @readonly */\n get layerX() {\n return this.layer.x;\n }\n /** @readonly */\n get layerY() {\n return this.layer.y;\n }\n /** @readonly */\n get pageX() {\n return this.page.x;\n }\n /** @readonly */\n get pageY() {\n return this.page.y;\n }\n /**\n * Fallback for the deprecated @code{InteractionEvent.data}.\n * @deprecated since 7.0.0\n */\n get data() {\n return this;\n }\n /** The propagation path for this event. Alias for {@link EventBoundary.propagationPath}. */\n composedPath() {\n if (this.manager && (!this.path || this.path[this.path.length - 1] !== this.target)) {\n this.path = this.target ? this.manager.propagationPath(this.target) : [];\n }\n return this.path;\n }\n /**\n * Unimplemented method included for implementing the DOM interface {@code Event}. It will throw an {@code Error}.\n * @deprecated\n * @param _type\n * @param _bubbles\n * @param _cancelable\n */\n initEvent(_type, _bubbles, _cancelable) {\n throw new Error(\"initEvent() is a legacy DOM API. It is not implemented in the Federated Events API.\");\n }\n /**\n * Unimplemented method included for implementing the DOM interface {@code UIEvent}. It will throw an {@code Error}.\n * @deprecated\n * @param _typeArg\n * @param _bubblesArg\n * @param _cancelableArg\n * @param _viewArg\n * @param _detailArg\n */\n initUIEvent(_typeArg, _bubblesArg, _cancelableArg, _viewArg, _detailArg) {\n throw new Error(\"initUIEvent() is a legacy DOM API. It is not implemented in the Federated Events API.\");\n }\n /** Prevent default behavior of PixiJS and the user agent. */\n preventDefault() {\n if (this.nativeEvent instanceof Event && this.nativeEvent.cancelable) {\n this.nativeEvent.preventDefault();\n }\n this.defaultPrevented = true;\n }\n /**\n * Stop this event from propagating to any addition listeners, including on the\n * {@link FederatedEventTarget.currentTarget currentTarget} and also the following\n * event targets on the propagation path.\n */\n stopImmediatePropagation() {\n this.propagationImmediatelyStopped = true;\n }\n /**\n * Stop this event from propagating to the next {@link FederatedEventTarget}. The rest of the listeners\n * on the {@link FederatedEventTarget.currentTarget currentTarget} will still be notified.\n */\n stopPropagation() {\n this.propagationStopped = true;\n }\n}\n\nexport { FederatedEvent };\n//# sourceMappingURL=FederatedEvent.mjs.map\n","var appleIphone = /iPhone/i;\nvar appleIpod = /iPod/i;\nvar appleTablet = /iPad/i;\nvar appleUniversal = /\\biOS-universal(?:.+)Mac\\b/i;\nvar androidPhone = /\\bAndroid(?:.+)Mobile\\b/i;\nvar androidTablet = /Android/i;\nvar amazonPhone = /(?:SD4930UR|\\bSilk(?:.+)Mobile\\b)/i;\nvar amazonTablet = /Silk/i;\nvar windowsPhone = /Windows Phone/i;\nvar windowsTablet = /\\bWindows(?:.+)ARM\\b/i;\nvar otherBlackBerry = /BlackBerry/i;\nvar otherBlackBerry10 = /BB10/i;\nvar otherOpera = /Opera Mini/i;\nvar otherChrome = /\\b(CriOS|Chrome)(?:.+)Mobile/i;\nvar otherFirefox = /Mobile(?:.+)Firefox\\b/i;\nvar isAppleTabletOnIos13 = function (navigator) {\n return (typeof navigator !== 'undefined' &&\n navigator.platform === 'MacIntel' &&\n typeof navigator.maxTouchPoints === 'number' &&\n navigator.maxTouchPoints > 1 &&\n typeof MSStream === 'undefined');\n};\nfunction createMatch(userAgent) {\n return function (regex) { return regex.test(userAgent); };\n}\nexport default function isMobile(param) {\n var nav = {\n userAgent: '',\n platform: '',\n maxTouchPoints: 0\n };\n if (!param && typeof navigator !== 'undefined') {\n nav = {\n userAgent: navigator.userAgent,\n platform: navigator.platform,\n maxTouchPoints: navigator.maxTouchPoints || 0\n };\n }\n else if (typeof param === 'string') {\n nav.userAgent = param;\n }\n else if (param && param.userAgent) {\n nav = {\n userAgent: param.userAgent,\n platform: param.platform,\n maxTouchPoints: param.maxTouchPoints || 0\n };\n }\n var userAgent = nav.userAgent;\n var tmp = userAgent.split('[FBAN');\n if (typeof tmp[1] !== 'undefined') {\n userAgent = tmp[0];\n }\n tmp = userAgent.split('Twitter');\n if (typeof tmp[1] !== 'undefined') {\n userAgent = tmp[0];\n }\n var match = createMatch(userAgent);\n var result = {\n apple: {\n phone: match(appleIphone) && !match(windowsPhone),\n ipod: match(appleIpod),\n tablet: !match(appleIphone) &&\n (match(appleTablet) || isAppleTabletOnIos13(nav)) &&\n !match(windowsPhone),\n universal: match(appleUniversal),\n device: (match(appleIphone) ||\n match(appleIpod) ||\n match(appleTablet) ||\n match(appleUniversal) ||\n isAppleTabletOnIos13(nav)) &&\n !match(windowsPhone)\n },\n amazon: {\n phone: match(amazonPhone),\n tablet: !match(amazonPhone) && match(amazonTablet),\n device: match(amazonPhone) || match(amazonTablet)\n },\n android: {\n phone: (!match(windowsPhone) && match(amazonPhone)) ||\n (!match(windowsPhone) && match(androidPhone)),\n tablet: !match(windowsPhone) &&\n !match(amazonPhone) &&\n !match(androidPhone) &&\n (match(amazonTablet) || match(androidTablet)),\n device: (!match(windowsPhone) &&\n (match(amazonPhone) ||\n match(amazonTablet) ||\n match(androidPhone) ||\n match(androidTablet))) ||\n match(/\\bokhttp\\b/i)\n },\n windows: {\n phone: match(windowsPhone),\n tablet: match(windowsTablet),\n device: match(windowsPhone) || match(windowsTablet)\n },\n other: {\n blackberry: match(otherBlackBerry),\n blackberry10: match(otherBlackBerry10),\n opera: match(otherOpera),\n firefox: match(otherFirefox),\n chrome: match(otherChrome),\n device: match(otherBlackBerry) ||\n match(otherBlackBerry10) ||\n match(otherOpera) ||\n match(otherFirefox) ||\n match(otherChrome)\n },\n any: false,\n phone: false,\n tablet: false\n };\n result.any =\n result.apple.device ||\n result.android.device ||\n result.windows.device ||\n result.other.device;\n result.phone =\n result.apple.phone || result.android.phone || result.windows.phone;\n result.tablet =\n result.apple.tablet || result.android.tablet || result.windows.tablet;\n return result;\n}\n//# sourceMappingURL=isMobile.js.map","import isMobileJs from 'ismobilejs';\n\n\"use strict\";\nconst isMobileCall = isMobileJs.default ?? isMobileJs;\nconst isMobile = isMobileCall(globalThis.navigator);\n\nexport { isMobile };\n//# sourceMappingURL=isMobile.mjs.map\n","import { FederatedEvent } from '../events/FederatedEvent.mjs';\nimport { ExtensionType } from '../extensions/Extensions.mjs';\nimport { isMobile } from '../utils/browser/isMobile.mjs';\nimport { removeItems } from '../utils/data/removeItems.mjs';\n\n\"use strict\";\nconst KEY_CODE_TAB = 9;\nconst DIV_TOUCH_SIZE = 100;\nconst DIV_TOUCH_POS_X = 0;\nconst DIV_TOUCH_POS_Y = 0;\nconst DIV_TOUCH_ZINDEX = 2;\nconst DIV_HOOK_SIZE = 1;\nconst DIV_HOOK_POS_X = -1e3;\nconst DIV_HOOK_POS_Y = -1e3;\nconst DIV_HOOK_ZINDEX = 2;\nclass AccessibilitySystem {\n // 2fps\n // eslint-disable-next-line jsdoc/require-param\n /**\n * @param {WebGLRenderer|WebGPURenderer} renderer - A reference to the current renderer\n */\n constructor(renderer, _mobileInfo = isMobile) {\n this._mobileInfo = _mobileInfo;\n /** Setting this to true will visually show the divs. */\n this.debug = false;\n /** Internal variable, see isActive getter. */\n this._isActive = false;\n /** Internal variable, see isMobileAccessibility getter. */\n this._isMobileAccessibility = false;\n /** A simple pool for storing divs. */\n this._pool = [];\n /** This is a tick used to check if an object is no longer being rendered. */\n this._renderId = 0;\n /** The array of currently active accessible items. */\n this._children = [];\n /** Count to throttle div updates on android devices. */\n this._androidUpdateCount = 0;\n /** The frequency to update the div elements. */\n this._androidUpdateFrequency = 500;\n this._hookDiv = null;\n if (_mobileInfo.tablet || _mobileInfo.phone) {\n this._createTouchHook();\n }\n const div = document.createElement(\"div\");\n div.style.width = `${DIV_TOUCH_SIZE}px`;\n div.style.height = `${DIV_TOUCH_SIZE}px`;\n div.style.position = \"absolute\";\n div.style.top = `${DIV_TOUCH_POS_X}px`;\n div.style.left = `${DIV_TOUCH_POS_Y}px`;\n div.style.zIndex = DIV_TOUCH_ZINDEX.toString();\n this._div = div;\n this._renderer = renderer;\n this._onKeyDown = this._onKeyDown.bind(this);\n this._onMouseMove = this._onMouseMove.bind(this);\n globalThis.addEventListener(\"keydown\", this._onKeyDown, false);\n }\n /**\n * Value of `true` if accessibility is currently active and accessibility layers are showing.\n * @member {boolean}\n * @readonly\n */\n get isActive() {\n return this._isActive;\n }\n /**\n * Value of `true` if accessibility is enabled for touch devices.\n * @member {boolean}\n * @readonly\n */\n get isMobileAccessibility() {\n return this._isMobileAccessibility;\n }\n get hookDiv() {\n return this._hookDiv;\n }\n /**\n * Creates the touch hooks.\n * @private\n */\n _createTouchHook() {\n const hookDiv = document.createElement(\"button\");\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 hookDiv.addEventListener(\"focus\", () => {\n this._isMobileAccessibility = true;\n this._activate();\n this._destroyTouchHook();\n });\n document.body.appendChild(hookDiv);\n this._hookDiv = hookDiv;\n }\n /**\n * Destroys the touch hooks.\n * @private\n */\n _destroyTouchHook() {\n if (!this._hookDiv) {\n return;\n }\n document.body.removeChild(this._hookDiv);\n this._hookDiv = null;\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 _activate() {\n if (this._isActive) {\n return;\n }\n this._isActive = true;\n globalThis.document.addEventListener(\"mousemove\", this._onMouseMove, true);\n globalThis.removeEventListener(\"keydown\", this._onKeyDown, false);\n this._renderer.runners.postrender.add(this);\n this._renderer.view.canvas.parentNode?.appendChild(this._div);\n }\n /**\n * Deactivating will cause the Accessibility layer to be hidden.\n * This is called when a user moves the mouse.\n * @private\n */\n _deactivate() {\n if (!this._isActive || this._isMobileAccessibility) {\n return;\n }\n this._isActive = false;\n globalThis.document.removeEventListener(\"mousemove\", this._onMouseMove, true);\n globalThis.addEventListener(\"keydown\", this._onKeyDown, false);\n this._renderer.runners.postrender.remove(this);\n this._div.parentNode?.removeChild(this._div);\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 _updateAccessibleObjects(container) {\n if (!container.visible || !container.accessibleChildren) {\n return;\n }\n if (container.accessible && container.isInteractive()) {\n if (!container._accessibleActive) {\n this._addChild(container);\n }\n container._renderId = this._renderId;\n }\n const children = container.children;\n if (children) {\n for (let i = 0; i < children.length; i++) {\n this._updateAccessibleObjects(children[i]);\n }\n }\n }\n /**\n * Runner init called, view is available at this point.\n * @ignore\n */\n init(options) {\n this.debug = options?.debug ?? this.debug;\n this._renderer.runners.postrender.remove(this);\n }\n /**\n * Runner postrender was called, ensure that all divs are mapped correctly to their Containers.\n * Only fires while active.\n * @ignore\n */\n postrender() {\n const now = performance.now();\n if (this._mobileInfo.android.device && now < this._androidUpdateCount) {\n return;\n }\n this._androidUpdateCount = now + this._androidUpdateFrequency;\n if (!this._renderer.renderingToScreen || !this._renderer.view.canvas) {\n return;\n }\n if (this._renderer.lastObjectRendered) {\n this._updateAccessibleObjects(this._renderer.lastObjectRendered);\n }\n const { x, y, width, height } = this._renderer.view.canvas.getBoundingClientRect();\n const { width: viewWidth, height: viewHeight, resolution } = this._renderer;\n const sx = width / viewWidth * resolution;\n const sy = height / viewHeight * resolution;\n let div = this._div;\n div.style.left = `${x}px`;\n div.style.top = `${y}px`;\n div.style.width = `${viewWidth}px`;\n div.style.height = `${viewHeight}px`;\n for (let i = 0; i < this._children.length; i++) {\n const child = this._children[i];\n if (child._renderId !== this._renderId) {\n child._accessibleActive = false;\n removeItems(this._children, i, 1);\n this._div.removeChild(child._accessibleDiv);\n this._pool.push(child._accessibleDiv);\n child._accessibleDiv = null;\n i--;\n } else {\n div = child._accessibleDiv;\n let hitArea = child.hitArea;\n const wt = child.worldTransform;\n if (child.hitArea) {\n div.style.left = `${(wt.tx + hitArea.x * wt.a) * sx}px`;\n div.style.top = `${(wt.ty + hitArea.y * wt.d) * sy}px`;\n div.style.width = `${hitArea.width * wt.a * sx}px`;\n div.style.height = `${hitArea.height * wt.d * sy}px`;\n } else {\n hitArea = child.getBounds().rectangle;\n this._capHitArea(hitArea);\n div.style.left = `${hitArea.x * sx}px`;\n div.style.top = `${hitArea.y * sy}px`;\n div.style.width = `${hitArea.width * sx}px`;\n div.style.height = `${hitArea.height * sy}px`;\n if (div.title !== child.accessibleTitle && child.accessibleTitle !== null) {\n div.title = child.accessibleTitle || \"\";\n }\n if (div.getAttribute(\"aria-label\") !== child.accessibleHint && child.accessibleHint !== null) {\n div.setAttribute(\"aria-label\", child.accessibleHint || \"\");\n }\n }\n if (child.accessibleTitle !== div.title || child.tabIndex !== div.tabIndex) {\n div.title = child.accessibleTitle || \"\";\n div.tabIndex = child.tabIndex;\n if (this.debug) {\n this._updateDebugHTML(div);\n }\n }\n }\n }\n this._renderId++;\n }\n /**\n * private function that will visually add the information to the\n * accessibility div\n * @param {HTMLElement} div -\n */\n _updateDebugHTML(div) {\n div.innerHTML = `type: ${div.type}
title : ${div.title}
tabIndex: ${div.tabIndex}`;\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 _capHitArea(hitArea) {\n if (hitArea.x < 0) {\n hitArea.width += hitArea.x;\n hitArea.x = 0;\n }\n if (hitArea.y < 0) {\n hitArea.height += hitArea.y;\n hitArea.y = 0;\n }\n const { width: viewWidth, height: viewHeight } = this._renderer;\n if (hitArea.x + hitArea.width > viewWidth) {\n hitArea.width = viewWidth - hitArea.x;\n }\n if (hitArea.y + hitArea.height > viewHeight) {\n hitArea.height = viewHeight - hitArea.y;\n }\n }\n /**\n * Adds a Container to the accessibility manager\n * @private\n * @param {Container} container - The child to make accessible.\n */\n _addChild(container) {\n let div = this._pool.pop();\n if (!div) {\n div = document.createElement(\"button\");\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 if (navigator.userAgent.toLowerCase().includes(\"chrome\")) {\n div.setAttribute(\"aria-live\", \"off\");\n } else {\n div.setAttribute(\"aria-live\", \"polite\");\n }\n if (navigator.userAgent.match(/rv:.*Gecko\\//)) {\n div.setAttribute(\"aria-relevant\", \"additions\");\n } else {\n div.setAttribute(\"aria-relevant\", \"text\");\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 div.style.pointerEvents = container.accessiblePointerEvents;\n div.type = container.accessibleType;\n if (container.accessibleTitle && container.accessibleTitle !== null) {\n div.title = container.accessibleTitle;\n } else if (!container.accessibleHint || container.accessibleHint === null) {\n div.title = `container ${container.tabIndex}`;\n }\n if (container.accessibleHint && container.accessibleHint !== null) {\n div.setAttribute(\"aria-label\", container.accessibleHint);\n }\n if (this.debug) {\n this._updateDebugHTML(div);\n }\n container._accessibleActive = true;\n container._accessibleDiv = div;\n div.container = container;\n this._children.push(container);\n this._div.appendChild(container._accessibleDiv);\n container._accessibleDiv.tabIndex = container.tabIndex;\n }\n /**\n * Dispatch events with the EventSystem.\n * @param e\n * @param type\n * @private\n */\n _dispatchEvent(e, type) {\n const { container: target } = e.target;\n const boundary = this._renderer.events.rootBoundary;\n const event = Object.assign(new FederatedEvent(boundary), { target });\n boundary.rootTarget = this._renderer.lastObjectRendered;\n type.forEach((type2) => boundary.dispatchEvent(event, type2));\n }\n /**\n * Maps the div button press to pixi's EventSystem (click)\n * @private\n * @param {MouseEvent} e - The click event.\n */\n _onClick(e) {\n this._dispatchEvent(e, [\"click\", \"pointertap\", \"tap\"]);\n }\n /**\n * Maps the div focus events to pixi's EventSystem (mouseover)\n * @private\n * @param {FocusEvent} e - The focus event.\n */\n _onFocus(e) {\n if (!e.target.getAttribute(\"aria-live\")) {\n e.target.setAttribute(\"aria-live\", \"assertive\");\n }\n this._dispatchEvent(e, [\"mouseover\"]);\n }\n /**\n * Maps the div focus events to pixi's EventSystem (mouseout)\n * @private\n * @param {FocusEvent} e - The focusout event.\n */\n _onFocusOut(e) {\n if (!e.target.getAttribute(\"aria-live\")) {\n e.target.setAttribute(\"aria-live\", \"polite\");\n }\n this._dispatchEvent(e, [\"mouseout\"]);\n }\n /**\n * Is called when a key is pressed\n * @private\n * @param {KeyboardEvent} e - The keydown event.\n */\n _onKeyDown(e) {\n if (e.keyCode !== KEY_CODE_TAB) {\n return;\n }\n this._activate();\n }\n /**\n * Is called when the mouse moves across the renderer element\n * @private\n * @param {MouseEvent} e - The mouse event.\n */\n _onMouseMove(e) {\n if (e.movementX === 0 && e.movementY === 0) {\n return;\n }\n this._deactivate();\n }\n /** Destroys the accessibility manager */\n destroy() {\n this._destroyTouchHook();\n this._div = null;\n globalThis.document.removeEventListener(\"mousemove\", this._onMouseMove, true);\n globalThis.removeEventListener(\"keydown\", this._onKeyDown);\n this._pool = null;\n this._children = null;\n this._renderer = null;\n }\n}\n/** @ignore */\nAccessibilitySystem.extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem\n ],\n name: \"accessibility\"\n};\n\nexport { AccessibilitySystem };\n//# sourceMappingURL=AccessibilitySystem.mjs.map\n","\"use strict\";\nconst accessibilityTarget = {\n /**\n * Flag for if the object is accessible. If true AccessibilityManager will overlay a\n * shadow div with attributes set\n * @member {boolean}\n * @memberof scene.Container#\n */\n accessible: false,\n /**\n * Sets the title attribute of the shadow div\n * If accessibleTitle AND accessibleHint has not been this will default to 'container [tabIndex]'\n * @member {string}\n * @memberof scene.Container#\n */\n accessibleTitle: null,\n /**\n * Sets the aria-label attribute of the shadow div\n * @member {string}\n * @memberof scene.Container#\n */\n accessibleHint: null,\n /**\n * @member {number}\n * @memberof scene.Container#\n * @todo Needs docs.\n */\n tabIndex: 0,\n /**\n * @member {boolean}\n * @memberof scene.Container#\n * @private\n */\n _accessibleActive: false,\n /**\n * @memberof scene.Container#\n * @private\n */\n _accessibleDiv: null,\n /**\n * Specify the type of div the accessible layer is. Screen readers treat the element differently\n * depending on this type. Defaults to button.\n * @member {string}\n * @memberof scene.Container#\n * @default 'button'\n */\n accessibleType: \"button\",\n /**\n * Specify the pointer-events the accessible div will use\n * Defaults to auto.\n * @type {PointerEvents}\n * @memberof scene.Container#\n * @default 'auto'\n */\n accessiblePointerEvents: \"auto\",\n /**\n * Setting to false will prevent any children inside this container to\n * be accessible. Defaults to true.\n * @member {boolean}\n * @memberof scene.Container#\n * @default true\n */\n accessibleChildren: true,\n /**\n * @member {number}\n * @memberof scene.Container#\n * @private\n */\n _renderId: -1\n};\n\nexport { accessibilityTarget };\n//# sourceMappingURL=accessibilityTarget.mjs.map\n","import { extensions } from '../extensions/Extensions.mjs';\nimport { Container } from '../scene/container/Container.mjs';\nimport { AccessibilitySystem } from './AccessibilitySystem.mjs';\nimport { accessibilityTarget } from './accessibilityTarget.mjs';\n\n\"use strict\";\nextensions.add(AccessibilitySystem);\nContainer.mixin(accessibilityTarget);\n//# sourceMappingURL=init.mjs.map\n","import { UPDATE_PRIORITY } from '../ticker/const.mjs';\nimport { Ticker } from '../ticker/Ticker.mjs';\n\n\"use strict\";\nclass EventsTickerClass {\n constructor() {\n /** The frequency that fake events will be fired. */\n this.interactionFrequency = 10;\n this._deltaTime = 0;\n this._didMove = false;\n this._tickerAdded = false;\n this._pauseUpdate = true;\n }\n /**\n * Initializes the event ticker.\n * @param events - The event system.\n */\n init(events) {\n this.removeTickerListener();\n this.events = events;\n this.interactionFrequency = 10;\n this._deltaTime = 0;\n this._didMove = false;\n this._tickerAdded = false;\n this._pauseUpdate = true;\n }\n /** Whether to pause the update checks or not. */\n get pauseUpdate() {\n return this._pauseUpdate;\n }\n set pauseUpdate(paused) {\n this._pauseUpdate = paused;\n }\n /** Adds the ticker listener. */\n addTickerListener() {\n if (this._tickerAdded || !this.domElement) {\n return;\n }\n Ticker.system.add(this._tickerUpdate, this, UPDATE_PRIORITY.INTERACTION);\n this._tickerAdded = true;\n }\n /** Removes the ticker listener. */\n removeTickerListener() {\n if (!this._tickerAdded) {\n return;\n }\n Ticker.system.remove(this._tickerUpdate, this);\n this._tickerAdded = false;\n }\n /** Sets flag to not fire extra events when the user has already moved there mouse */\n pointerMoved() {\n this._didMove = true;\n }\n /** Updates the state of interactive objects. */\n _update() {\n if (!this.domElement || this._pauseUpdate) {\n return;\n }\n if (this._didMove) {\n this._didMove = false;\n return;\n }\n const rootPointerEvent = this.events[\"_rootPointerEvent\"];\n if (this.events.supportsTouchEvents && rootPointerEvent.pointerType === \"touch\") {\n return;\n }\n globalThis.document.dispatchEvent(new PointerEvent(\"pointermove\", {\n clientX: rootPointerEvent.clientX,\n clientY: rootPointerEvent.clientY\n }));\n }\n /**\n * Updates the state of interactive objects if at least {@link interactionFrequency}\n * milliseconds have passed since the last invocation.\n *\n * Invoked by a throttled ticker update from {@link Ticker.system}.\n * @param ticker - The throttled ticker.\n */\n _tickerUpdate(ticker) {\n this._deltaTime += ticker.deltaTime;\n if (this._deltaTime < this.interactionFrequency) {\n return;\n }\n this._deltaTime = 0;\n this._update();\n }\n}\nconst EventsTicker = new EventsTickerClass();\n\nexport { EventsTicker };\n//# sourceMappingURL=EventTicker.mjs.map\n","import { Point } from '../maths/point/Point.mjs';\nimport { FederatedEvent } from './FederatedEvent.mjs';\n\n\"use strict\";\nclass FederatedMouseEvent extends FederatedEvent {\n constructor() {\n super(...arguments);\n /** The coordinates of the mouse event relative to the canvas. */\n this.client = new Point();\n /** The movement in this pointer relative to the last `mousemove` event. */\n this.movement = new Point();\n /** The offset of the pointer coordinates w.r.t. target Container in world space. This is not supported at the moment. */\n this.offset = new Point();\n /** The pointer coordinates in world space. */\n this.global = new Point();\n /**\n * The pointer coordinates in the renderer's {@link Renderer.screen screen}. This has slightly\n * different semantics than native PointerEvent screenX/screenY.\n */\n this.screen = new Point();\n }\n /** @readonly */\n get clientX() {\n return this.client.x;\n }\n /** @readonly */\n get clientY() {\n return this.client.y;\n }\n /**\n * Alias for {@link FederatedMouseEvent.clientX this.clientX}.\n * @readonly\n */\n get x() {\n return this.clientX;\n }\n /**\n * Alias for {@link FederatedMouseEvent.clientY this.clientY}.\n * @readonly\n */\n get y() {\n return this.clientY;\n }\n /** @readonly */\n get movementX() {\n return this.movement.x;\n }\n /** @readonly */\n get movementY() {\n return this.movement.y;\n }\n /** @readonly */\n get offsetX() {\n return this.offset.x;\n }\n /** @readonly */\n get offsetY() {\n return this.offset.y;\n }\n /** @readonly */\n get globalX() {\n return this.global.x;\n }\n /** @readonly */\n get globalY() {\n return this.global.y;\n }\n /**\n * The pointer coordinates in the renderer's screen. Alias for {@code screen.x}.\n * @readonly\n */\n get screenX() {\n return this.screen.x;\n }\n /**\n * The pointer coordinates in the renderer's screen. Alias for {@code screen.y}.\n * @readonly\n */\n get screenY() {\n return this.screen.y;\n }\n /**\n * This will return the local coordinates of the specified container for this InteractionData\n * @param {Container} container - The Container that you would like the local\n * coords off\n * @param {PointData} point - A Point object in which to store the value, optional (otherwise\n * will create a new point)\n * @param {PointData} globalPos - A Point object containing your custom global coords, optional\n * (otherwise will use the current global coords)\n * @returns - A point containing the coordinates of the InteractionData position relative\n * to the Container\n */\n getLocalPosition(container, point, globalPos) {\n return container.worldTransform.applyInverse(globalPos || this.global, point);\n }\n /**\n * Whether the modifier key was pressed when this event natively occurred.\n * @param key - The modifier key.\n */\n getModifierState(key) {\n return \"getModifierState\" in this.nativeEvent && this.nativeEvent.getModifierState(key);\n }\n /**\n * Not supported.\n * @param _typeArg\n * @param _canBubbleArg\n * @param _cancelableArg\n * @param _viewArg\n * @param _detailArg\n * @param _screenXArg\n * @param _screenYArg\n * @param _clientXArg\n * @param _clientYArg\n * @param _ctrlKeyArg\n * @param _altKeyArg\n * @param _shiftKeyArg\n * @param _metaKeyArg\n * @param _buttonArg\n * @param _relatedTargetArg\n * @deprecated since 7.0.0\n */\n // eslint-disable-next-line max-params\n initMouseEvent(_typeArg, _canBubbleArg, _cancelableArg, _viewArg, _detailArg, _screenXArg, _screenYArg, _clientXArg, _clientYArg, _ctrlKeyArg, _altKeyArg, _shiftKeyArg, _metaKeyArg, _buttonArg, _relatedTargetArg) {\n throw new Error(\"Method not implemented.\");\n }\n}\n\nexport { FederatedMouseEvent };\n//# sourceMappingURL=FederatedMouseEvent.mjs.map\n","import { FederatedMouseEvent } from './FederatedMouseEvent.mjs';\n\n\"use strict\";\nclass FederatedPointerEvent extends FederatedMouseEvent {\n constructor() {\n super(...arguments);\n /**\n * The width of the pointer's contact along the x-axis, measured in CSS pixels.\n * radiusX of TouchEvents will be represented by this value.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/width\n */\n this.width = 0;\n /**\n * The height of the pointer's contact along the y-axis, measured in CSS pixels.\n * radiusY of TouchEvents will be represented by this value.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/height\n */\n this.height = 0;\n /**\n * Indicates whether or not the pointer device that created the event is the primary pointer.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/PointerEvent/isPrimary\n */\n this.isPrimary = false;\n }\n // Only included for completeness for now\n getCoalescedEvents() {\n if (this.type === \"pointermove\" || this.type === \"mousemove\" || this.type === \"touchmove\") {\n return [this];\n }\n return [];\n }\n // Only included for completeness for now\n getPredictedEvents() {\n throw new Error(\"getPredictedEvents is not supported!\");\n }\n}\n\nexport { FederatedPointerEvent };\n//# sourceMappingURL=FederatedPointerEvent.mjs.map\n","import { FederatedMouseEvent } from './FederatedMouseEvent.mjs';\n\n\"use strict\";\nclass FederatedWheelEvent extends FederatedMouseEvent {\n constructor() {\n super(...arguments);\n /** Units specified in pixels. */\n this.DOM_DELTA_PIXEL = 0;\n /** Units specified in lines. */\n this.DOM_DELTA_LINE = 1;\n /** Units specified in pages. */\n this.DOM_DELTA_PAGE = 2;\n }\n}\n/** Units specified in pixels. */\nFederatedWheelEvent.DOM_DELTA_PIXEL = 0;\n/** Units specified in lines. */\nFederatedWheelEvent.DOM_DELTA_LINE = 1;\n/** Units specified in pages. */\nFederatedWheelEvent.DOM_DELTA_PAGE = 2;\n\nexport { FederatedWheelEvent };\n//# sourceMappingURL=FederatedWheelEvent.mjs.map\n","import EventEmitter from 'eventemitter3';\nimport { Point } from '../maths/point/Point.mjs';\nimport { warn } from '../utils/logging/warn.mjs';\nimport { EventsTicker } from './EventTicker.mjs';\nimport { FederatedMouseEvent } from './FederatedMouseEvent.mjs';\nimport { FederatedPointerEvent } from './FederatedPointerEvent.mjs';\nimport { FederatedWheelEvent } from './FederatedWheelEvent.mjs';\n\n\"use strict\";\nconst PROPAGATION_LIMIT = 2048;\nconst tempHitLocation = new Point();\nconst tempLocalMapping = new Point();\nclass EventBoundary {\n /**\n * @param rootTarget - The holder of the event boundary.\n */\n constructor(rootTarget) {\n /**\n * Emits events after they were dispatched into the scene graph.\n *\n * This can be used for global events listening, regardless of the scene graph being used. It should\n * not be used by interactive libraries for normal use.\n *\n * Special events that do not bubble all the way to the root target are not emitted from here,\n * e.g. pointerenter, pointerleave, click.\n */\n this.dispatch = new EventEmitter();\n /**\n * This flag would emit `pointermove`, `touchmove`, and `mousemove` events on all Containers.\n *\n * The `moveOnAll` semantics mirror those of earlier versions of PixiJS. This was disabled in favor of\n * the Pointer Event API's approach.\n */\n this.moveOnAll = false;\n /** Enables the global move events. `globalpointermove`, `globaltouchmove`, and `globalmousemove` */\n this.enableGlobalMoveEvents = true;\n /**\n * State object for mapping methods.\n * @see EventBoundary#trackingData\n */\n this.mappingState = {\n trackingData: {}\n };\n /**\n * The event pool maps event constructors to an free pool of instances of those specific events.\n * @see EventBoundary#allocateEvent\n * @see EventBoundary#freeEvent\n */\n this.eventPool = /* @__PURE__ */ new Map();\n /** Every interactive element gathered from the scene. Only used in `pointermove` */\n this._allInteractiveElements = [];\n /** Every element that passed the hit test. Only used in `pointermove` */\n this._hitElements = [];\n /** Whether or not to collect all the interactive elements from the scene. Enabled in `pointermove` */\n this._isPointerMoveEvent = false;\n this.rootTarget = rootTarget;\n this.hitPruneFn = this.hitPruneFn.bind(this);\n this.hitTestFn = this.hitTestFn.bind(this);\n this.mapPointerDown = this.mapPointerDown.bind(this);\n this.mapPointerMove = this.mapPointerMove.bind(this);\n this.mapPointerOut = this.mapPointerOut.bind(this);\n this.mapPointerOver = this.mapPointerOver.bind(this);\n this.mapPointerUp = this.mapPointerUp.bind(this);\n this.mapPointerUpOutside = this.mapPointerUpOutside.bind(this);\n this.mapWheel = this.mapWheel.bind(this);\n this.mappingTable = {};\n this.addEventMapping(\"pointerdown\", this.mapPointerDown);\n this.addEventMapping(\"pointermove\", this.mapPointerMove);\n this.addEventMapping(\"pointerout\", this.mapPointerOut);\n this.addEventMapping(\"pointerleave\", this.mapPointerOut);\n this.addEventMapping(\"pointerover\", this.mapPointerOver);\n this.addEventMapping(\"pointerup\", this.mapPointerUp);\n this.addEventMapping(\"pointerupoutside\", this.mapPointerUpOutside);\n this.addEventMapping(\"wheel\", this.mapWheel);\n }\n /**\n * Adds an event mapping for the event `type` handled by `fn`.\n *\n * Event mappings can be used to implement additional or custom events. They take an event\n * coming from the upstream scene (or directly from the {@link EventSystem}) and dispatch new downstream events\n * generally trickling down and bubbling up to {@link EventBoundary.rootTarget this.rootTarget}.\n *\n * To modify the semantics of existing events, the built-in mapping methods of EventBoundary should be overridden\n * instead.\n * @param type - The type of upstream event to map.\n * @param fn - The mapping method. The context of this function must be bound manually, if desired.\n */\n addEventMapping(type, fn) {\n if (!this.mappingTable[type]) {\n this.mappingTable[type] = [];\n }\n this.mappingTable[type].push({\n fn,\n priority: 0\n });\n this.mappingTable[type].sort((a, b) => a.priority - b.priority);\n }\n /**\n * Dispatches the given event\n * @param e - The event to dispatch.\n * @param type - The type of event to dispatch. Defaults to `e.type`.\n */\n dispatchEvent(e, type) {\n e.propagationStopped = false;\n e.propagationImmediatelyStopped = false;\n this.propagate(e, type);\n this.dispatch.emit(type || e.type, e);\n }\n /**\n * Maps the given upstream event through the event boundary and propagates it downstream.\n * @param e - The event to map.\n */\n mapEvent(e) {\n if (!this.rootTarget) {\n return;\n }\n const mappers = this.mappingTable[e.type];\n if (mappers) {\n for (let i = 0, j = mappers.length; i < j; i++) {\n mappers[i].fn(e);\n }\n } else {\n warn(`[EventBoundary]: Event mapping not defined for ${e.type}`);\n }\n }\n /**\n * Finds the Container that is the target of a event at the given coordinates.\n *\n * The passed (x,y) coordinates are in the world space above this event boundary.\n * @param x - The x coordinate of the event.\n * @param y - The y coordinate of the event.\n */\n hitTest(x, y) {\n EventsTicker.pauseUpdate = true;\n const useMove = this._isPointerMoveEvent && this.enableGlobalMoveEvents;\n const fn = useMove ? \"hitTestMoveRecursive\" : \"hitTestRecursive\";\n const invertedPath = this[fn](\n this.rootTarget,\n this.rootTarget.eventMode,\n tempHitLocation.set(x, y),\n this.hitTestFn,\n this.hitPruneFn\n );\n return invertedPath && invertedPath[0];\n }\n /**\n * Propagate the passed event from from {@link EventBoundary.rootTarget this.rootTarget} to its\n * target {@code e.target}.\n * @param e - The event to propagate.\n * @param type - The type of event to propagate. Defaults to `e.type`.\n */\n propagate(e, type) {\n if (!e.target) {\n return;\n }\n const composedPath = e.composedPath();\n e.eventPhase = e.CAPTURING_PHASE;\n for (let i = 0, j = composedPath.length - 1; i < j; i++) {\n e.currentTarget = composedPath[i];\n this.notifyTarget(e, type);\n if (e.propagationStopped || e.propagationImmediatelyStopped)\n return;\n }\n e.eventPhase = e.AT_TARGET;\n e.currentTarget = e.target;\n this.notifyTarget(e, type);\n if (e.propagationStopped || e.propagationImmediatelyStopped)\n return;\n e.eventPhase = e.BUBBLING_PHASE;\n for (let i = composedPath.length - 2; i >= 0; i--) {\n e.currentTarget = composedPath[i];\n this.notifyTarget(e, type);\n if (e.propagationStopped || e.propagationImmediatelyStopped)\n return;\n }\n }\n /**\n * Emits the event {@code e} to all interactive containers. The event is propagated in the bubbling phase always.\n *\n * This is used in the `globalpointermove` event.\n * @param e - The emitted event.\n * @param type - The listeners to notify.\n * @param targets - The targets to notify.\n */\n all(e, type, targets = this._allInteractiveElements) {\n if (targets.length === 0)\n return;\n e.eventPhase = e.BUBBLING_PHASE;\n const events = Array.isArray(type) ? type : [type];\n for (let i = targets.length - 1; i >= 0; i--) {\n events.forEach((event) => {\n e.currentTarget = targets[i];\n this.notifyTarget(e, event);\n });\n }\n }\n /**\n * Finds the propagation path from {@link EventBoundary.rootTarget rootTarget} to the passed\n * {@code target}. The last element in the path is {@code target}.\n * @param target - The target to find the propagation path to.\n */\n propagationPath(target) {\n const propagationPath = [target];\n for (let i = 0; i < PROPAGATION_LIMIT && (target !== this.rootTarget && target.parent); i++) {\n if (!target.parent) {\n throw new Error(\"Cannot find propagation path to disconnected target\");\n }\n propagationPath.push(target.parent);\n target = target.parent;\n }\n propagationPath.reverse();\n return propagationPath;\n }\n hitTestMoveRecursive(currentTarget, eventMode, location, testFn, pruneFn, ignore = false) {\n let shouldReturn = false;\n if (this._interactivePrune(currentTarget))\n return null;\n if (currentTarget.eventMode === \"dynamic\" || eventMode === \"dynamic\") {\n EventsTicker.pauseUpdate = false;\n }\n if (currentTarget.interactiveChildren && currentTarget.children) {\n const children = currentTarget.children;\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n const nestedHit = this.hitTestMoveRecursive(\n child,\n this._isInteractive(eventMode) ? eventMode : child.eventMode,\n location,\n testFn,\n pruneFn,\n ignore || pruneFn(currentTarget, location)\n );\n if (nestedHit) {\n if (nestedHit.length > 0 && !nestedHit[nestedHit.length - 1].parent) {\n continue;\n }\n const isInteractive = currentTarget.isInteractive();\n if (nestedHit.length > 0 || isInteractive) {\n if (isInteractive)\n this._allInteractiveElements.push(currentTarget);\n nestedHit.push(currentTarget);\n }\n if (this._hitElements.length === 0)\n this._hitElements = nestedHit;\n shouldReturn = true;\n }\n }\n }\n const isInteractiveMode = this._isInteractive(eventMode);\n const isInteractiveTarget = currentTarget.isInteractive();\n if (isInteractiveTarget && isInteractiveTarget)\n this._allInteractiveElements.push(currentTarget);\n if (ignore || this._hitElements.length > 0)\n return null;\n if (shouldReturn)\n return this._hitElements;\n if (isInteractiveMode && (!pruneFn(currentTarget, location) && testFn(currentTarget, location))) {\n return isInteractiveTarget ? [currentTarget] : [];\n }\n return null;\n }\n /**\n * Recursive implementation for {@link EventBoundary.hitTest hitTest}.\n * @param currentTarget - The Container that is to be hit tested.\n * @param eventMode - The event mode for the `currentTarget` or one of its parents.\n * @param location - The location that is being tested for overlap.\n * @param testFn - Callback that determines whether the target passes hit testing. This callback\n * can assume that `pruneFn` failed to prune the container.\n * @param pruneFn - Callback that determiness whether the target and all of its children\n * cannot pass the hit test. It is used as a preliminary optimization to prune entire subtrees\n * of the scene graph.\n * @returns An array holding the hit testing target and all its ancestors in order. The first element\n * is the target itself and the last is {@link EventBoundary.rootTarget rootTarget}. This is the opposite\n * order w.r.t. the propagation path. If no hit testing target is found, null is returned.\n */\n hitTestRecursive(currentTarget, eventMode, location, testFn, pruneFn) {\n if (this._interactivePrune(currentTarget) || pruneFn(currentTarget, location)) {\n return null;\n }\n if (currentTarget.eventMode === \"dynamic\" || eventMode === \"dynamic\") {\n EventsTicker.pauseUpdate = false;\n }\n if (currentTarget.interactiveChildren && currentTarget.children) {\n const children = currentTarget.children;\n const relativeLocation = location;\n for (let i = children.length - 1; i >= 0; i--) {\n const child = children[i];\n const nestedHit = this.hitTestRecursive(\n child,\n this._isInteractive(eventMode) ? eventMode : child.eventMode,\n relativeLocation,\n testFn,\n pruneFn\n );\n if (nestedHit) {\n if (nestedHit.length > 0 && !nestedHit[nestedHit.length - 1].parent) {\n continue;\n }\n const isInteractive = currentTarget.isInteractive();\n if (nestedHit.length > 0 || isInteractive)\n nestedHit.push(currentTarget);\n return nestedHit;\n }\n }\n }\n const isInteractiveMode = this._isInteractive(eventMode);\n const isInteractiveTarget = currentTarget.isInteractive();\n if (isInteractiveMode && testFn(currentTarget, location)) {\n return isInteractiveTarget ? [currentTarget] : [];\n }\n return null;\n }\n _isInteractive(int) {\n return int === \"static\" || int === \"dynamic\";\n }\n _interactivePrune(container) {\n if (!container || !container.visible || !container.renderable || !container.includeInBuild || !container.measurable) {\n return true;\n }\n if (container.eventMode === \"none\") {\n return true;\n }\n if (container.eventMode === \"passive\" && !container.interactiveChildren) {\n return true;\n }\n return false;\n }\n /**\n * Checks whether the container or any of its children cannot pass the hit test at all.\n *\n * {@link EventBoundary}'s implementation uses the {@link Container.hitArea hitArea}\n * and {@link Container._maskEffect} for pruning.\n * @param container - The container to prune.\n * @param location - The location to test for overlap.\n */\n hitPruneFn(container, location) {\n if (container.hitArea) {\n container.worldTransform.applyInverse(location, tempLocalMapping);\n if (!container.hitArea.contains(tempLocalMapping.x, tempLocalMapping.y)) {\n return true;\n }\n }\n if (container.effects && container.effects.length) {\n for (let i = 0; i < container.effects.length; i++) {\n const effect = container.effects[i];\n if (effect.containsPoint) {\n const effectContainsPoint = effect.containsPoint(location, this.hitTestFn);\n if (!effectContainsPoint) {\n return true;\n }\n }\n }\n }\n return false;\n }\n /**\n * Checks whether the container passes hit testing for the given location.\n * @param container - The container to test.\n * @param location - The location to test for overlap.\n * @returns - Whether `container` passes hit testing for `location`.\n */\n hitTestFn(container, location) {\n if (container.hitArea) {\n return true;\n }\n if (container?.containsPoint) {\n container.worldTransform.applyInverse(location, tempLocalMapping);\n return container.containsPoint(tempLocalMapping);\n }\n return false;\n }\n /**\n * Notify all the listeners to the event's `currentTarget`.\n *\n * If the `currentTarget` contains the property `on`, then it is called here,\n * simulating the behavior from version 6.x and prior.\n * @param e - The event passed to the target.\n * @param type - The type of event to notify. Defaults to `e.type`.\n */\n notifyTarget(e, type) {\n type = type ?? e.type;\n const handlerKey = `on${type}`;\n e.currentTarget[handlerKey]?.(e);\n const key = e.eventPhase === e.CAPTURING_PHASE || e.eventPhase === e.AT_TARGET ? `${type}capture` : type;\n this._notifyListeners(e, key);\n if (e.eventPhase === e.AT_TARGET) {\n this._notifyListeners(e, type);\n }\n }\n /**\n * Maps the upstream `pointerdown` events to a downstream `pointerdown` event.\n *\n * `touchstart`, `rightdown`, `mousedown` events are also dispatched for specific pointer types.\n * @param from - The upstream `pointerdown` event.\n */\n mapPointerDown(from) {\n if (!(from instanceof FederatedPointerEvent)) {\n warn(\"EventBoundary cannot map a non-pointer event as a pointer event\");\n return;\n }\n const e = this.createPointerEvent(from);\n this.dispatchEvent(e, \"pointerdown\");\n if (e.pointerType === \"touch\") {\n this.dispatchEvent(e, \"touchstart\");\n } else if (e.pointerType === \"mouse\" || e.pointerType === \"pen\") {\n const isRightButton = e.button === 2;\n this.dispatchEvent(e, isRightButton ? \"rightdown\" : \"mousedown\");\n }\n const trackingData = this.trackingData(from.pointerId);\n trackingData.pressTargetsByButton[from.button] = e.composedPath();\n this.freeEvent(e);\n }\n /**\n * Maps the upstream `pointermove` to downstream `pointerout`, `pointerover`, and `pointermove` events, in that order.\n *\n * The tracking data for the specific pointer has an updated `overTarget`. `mouseout`, `mouseover`,\n * `mousemove`, and `touchmove` events are fired as well for specific pointer types.\n * @param from - The upstream `pointermove` event.\n */\n mapPointerMove(from) {\n if (!(from instanceof FederatedPointerEvent)) {\n warn(\"EventBoundary cannot map a non-pointer event as a pointer event\");\n return;\n }\n this._allInteractiveElements.length = 0;\n this._hitElements.length = 0;\n this._isPointerMoveEvent = true;\n const e = this.createPointerEvent(from);\n this._isPointerMoveEvent = false;\n const isMouse = e.pointerType === \"mouse\" || e.pointerType === \"pen\";\n const trackingData = this.trackingData(from.pointerId);\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n if (trackingData.overTargets?.length > 0 && outTarget !== e.target) {\n const outType = from.type === \"mousemove\" ? \"mouseout\" : \"pointerout\";\n const outEvent = this.createPointerEvent(from, outType, outTarget);\n this.dispatchEvent(outEvent, \"pointerout\");\n if (isMouse)\n this.dispatchEvent(outEvent, \"mouseout\");\n if (!e.composedPath().includes(outTarget)) {\n const leaveEvent = this.createPointerEvent(from, \"pointerleave\", outTarget);\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n while (leaveEvent.target && !e.composedPath().includes(leaveEvent.target)) {\n leaveEvent.currentTarget = leaveEvent.target;\n this.notifyTarget(leaveEvent);\n if (isMouse)\n this.notifyTarget(leaveEvent, \"mouseleave\");\n leaveEvent.target = leaveEvent.target.parent;\n }\n this.freeEvent(leaveEvent);\n }\n this.freeEvent(outEvent);\n }\n if (outTarget !== e.target) {\n const overType = from.type === \"mousemove\" ? \"mouseover\" : \"pointerover\";\n const overEvent = this.clonePointerEvent(e, overType);\n this.dispatchEvent(overEvent, \"pointerover\");\n if (isMouse)\n this.dispatchEvent(overEvent, \"mouseover\");\n let overTargetAncestor = outTarget?.parent;\n while (overTargetAncestor && overTargetAncestor !== this.rootTarget.parent) {\n if (overTargetAncestor === e.target)\n break;\n overTargetAncestor = overTargetAncestor.parent;\n }\n const didPointerEnter = !overTargetAncestor || overTargetAncestor === this.rootTarget.parent;\n if (didPointerEnter) {\n const enterEvent = this.clonePointerEvent(e, \"pointerenter\");\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n while (enterEvent.target && enterEvent.target !== outTarget && enterEvent.target !== this.rootTarget.parent) {\n enterEvent.currentTarget = enterEvent.target;\n this.notifyTarget(enterEvent);\n if (isMouse)\n this.notifyTarget(enterEvent, \"mouseenter\");\n enterEvent.target = enterEvent.target.parent;\n }\n this.freeEvent(enterEvent);\n }\n this.freeEvent(overEvent);\n }\n const allMethods = [];\n const allowGlobalPointerEvents = this.enableGlobalMoveEvents ?? true;\n this.moveOnAll ? allMethods.push(\"pointermove\") : this.dispatchEvent(e, \"pointermove\");\n allowGlobalPointerEvents && allMethods.push(\"globalpointermove\");\n if (e.pointerType === \"touch\") {\n this.moveOnAll ? allMethods.splice(1, 0, \"touchmove\") : this.dispatchEvent(e, \"touchmove\");\n allowGlobalPointerEvents && allMethods.push(\"globaltouchmove\");\n }\n if (isMouse) {\n this.moveOnAll ? allMethods.splice(1, 0, \"mousemove\") : this.dispatchEvent(e, \"mousemove\");\n allowGlobalPointerEvents && allMethods.push(\"globalmousemove\");\n this.cursor = e.target?.cursor;\n }\n if (allMethods.length > 0) {\n this.all(e, allMethods);\n }\n this._allInteractiveElements.length = 0;\n this._hitElements.length = 0;\n trackingData.overTargets = e.composedPath();\n this.freeEvent(e);\n }\n /**\n * Maps the upstream `pointerover` to downstream `pointerover` and `pointerenter` events, in that order.\n *\n * The tracking data for the specific pointer gets a new `overTarget`.\n * @param from - The upstream `pointerover` event.\n */\n mapPointerOver(from) {\n if (!(from instanceof FederatedPointerEvent)) {\n warn(\"EventBoundary cannot map a non-pointer event as a pointer event\");\n return;\n }\n const trackingData = this.trackingData(from.pointerId);\n const e = this.createPointerEvent(from);\n const isMouse = e.pointerType === \"mouse\" || e.pointerType === \"pen\";\n this.dispatchEvent(e, \"pointerover\");\n if (isMouse)\n this.dispatchEvent(e, \"mouseover\");\n if (e.pointerType === \"mouse\")\n this.cursor = e.target?.cursor;\n const enterEvent = this.clonePointerEvent(e, \"pointerenter\");\n enterEvent.eventPhase = enterEvent.AT_TARGET;\n while (enterEvent.target && enterEvent.target !== this.rootTarget.parent) {\n enterEvent.currentTarget = enterEvent.target;\n this.notifyTarget(enterEvent);\n if (isMouse)\n this.notifyTarget(enterEvent, \"mouseenter\");\n enterEvent.target = enterEvent.target.parent;\n }\n trackingData.overTargets = e.composedPath();\n this.freeEvent(e);\n this.freeEvent(enterEvent);\n }\n /**\n * Maps the upstream `pointerout` to downstream `pointerout`, `pointerleave` events, in that order.\n *\n * The tracking data for the specific pointer is cleared of a `overTarget`.\n * @param from - The upstream `pointerout` event.\n */\n mapPointerOut(from) {\n if (!(from instanceof FederatedPointerEvent)) {\n warn(\"EventBoundary cannot map a non-pointer event as a pointer event\");\n return;\n }\n const trackingData = this.trackingData(from.pointerId);\n if (trackingData.overTargets) {\n const isMouse = from.pointerType === \"mouse\" || from.pointerType === \"pen\";\n const outTarget = this.findMountedTarget(trackingData.overTargets);\n const outEvent = this.createPointerEvent(from, \"pointerout\", outTarget);\n this.dispatchEvent(outEvent);\n if (isMouse)\n this.dispatchEvent(outEvent, \"mouseout\");\n const leaveEvent = this.createPointerEvent(from, \"pointerleave\", outTarget);\n leaveEvent.eventPhase = leaveEvent.AT_TARGET;\n while (leaveEvent.target && leaveEvent.target !== this.rootTarget.parent) {\n leaveEvent.currentTarget = leaveEvent.target;\n this.notifyTarget(leaveEvent);\n if (isMouse)\n this.notifyTarget(leaveEvent, \"mouseleave\");\n leaveEvent.target = leaveEvent.target.parent;\n }\n trackingData.overTargets = null;\n this.freeEvent(outEvent);\n this.freeEvent(leaveEvent);\n }\n this.cursor = null;\n }\n /**\n * Maps the upstream `pointerup` event to downstream `pointerup`, `pointerupoutside`,\n * and `click`/`rightclick`/`pointertap` events, in that order.\n *\n * The `pointerupoutside` event bubbles from the original `pointerdown` target to the most specific\n * ancestor of the `pointerdown` and `pointerup` targets, which is also the `click` event's target. `touchend`,\n * `rightup`, `mouseup`, `touchendoutside`, `rightupoutside`, `mouseupoutside`, and `tap` are fired as well for\n * specific pointer types.\n * @param from - The upstream `pointerup` event.\n */\n mapPointerUp(from) {\n if (!(from instanceof FederatedPointerEvent)) {\n warn(\"EventBoundary cannot map a non-pointer event as a pointer event\");\n return;\n }\n const now = performance.now();\n const e = this.createPointerEvent(from);\n this.dispatchEvent(e, \"pointerup\");\n if (e.pointerType === \"touch\") {\n this.dispatchEvent(e, \"touchend\");\n } else if (e.pointerType === \"mouse\" || e.pointerType === \"pen\") {\n const isRightButton = e.button === 2;\n this.dispatchEvent(e, isRightButton ? \"rightup\" : \"mouseup\");\n }\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n let clickTarget = pressTarget;\n if (pressTarget && !e.composedPath().includes(pressTarget)) {\n let currentTarget = pressTarget;\n while (currentTarget && !e.composedPath().includes(currentTarget)) {\n e.currentTarget = currentTarget;\n this.notifyTarget(e, \"pointerupoutside\");\n if (e.pointerType === \"touch\") {\n this.notifyTarget(e, \"touchendoutside\");\n } else if (e.pointerType === \"mouse\" || e.pointerType === \"pen\") {\n const isRightButton = e.button === 2;\n this.notifyTarget(e, isRightButton ? \"rightupoutside\" : \"mouseupoutside\");\n }\n currentTarget = currentTarget.parent;\n }\n delete trackingData.pressTargetsByButton[from.button];\n clickTarget = currentTarget;\n }\n if (clickTarget) {\n const clickEvent = this.clonePointerEvent(e, \"click\");\n clickEvent.target = clickTarget;\n clickEvent.path = null;\n if (!trackingData.clicksByButton[from.button]) {\n trackingData.clicksByButton[from.button] = {\n clickCount: 0,\n target: clickEvent.target,\n timeStamp: now\n };\n }\n const clickHistory = trackingData.clicksByButton[from.button];\n if (clickHistory.target === clickEvent.target && now - clickHistory.timeStamp < 200) {\n ++clickHistory.clickCount;\n } else {\n clickHistory.clickCount = 1;\n }\n clickHistory.target = clickEvent.target;\n clickHistory.timeStamp = now;\n clickEvent.detail = clickHistory.clickCount;\n if (clickEvent.pointerType === \"mouse\") {\n const isRightButton = clickEvent.button === 2;\n this.dispatchEvent(clickEvent, isRightButton ? \"rightclick\" : \"click\");\n } else if (clickEvent.pointerType === \"touch\") {\n this.dispatchEvent(clickEvent, \"tap\");\n }\n this.dispatchEvent(clickEvent, \"pointertap\");\n this.freeEvent(clickEvent);\n }\n this.freeEvent(e);\n }\n /**\n * Maps the upstream `pointerupoutside` event to a downstream `pointerupoutside` event, bubbling from the original\n * `pointerdown` target to `rootTarget`.\n *\n * (The most specific ancestor of the `pointerdown` event and the `pointerup` event must the\n * `{@link EventBoundary}'s root because the `pointerup` event occurred outside of the boundary.)\n *\n * `touchendoutside`, `mouseupoutside`, and `rightupoutside` events are fired as well for specific pointer\n * types. The tracking data for the specific pointer is cleared of a `pressTarget`.\n * @param from - The upstream `pointerupoutside` event.\n */\n mapPointerUpOutside(from) {\n if (!(from instanceof FederatedPointerEvent)) {\n warn(\"EventBoundary cannot map a non-pointer event as a pointer event\");\n return;\n }\n const trackingData = this.trackingData(from.pointerId);\n const pressTarget = this.findMountedTarget(trackingData.pressTargetsByButton[from.button]);\n const e = this.createPointerEvent(from);\n if (pressTarget) {\n let currentTarget = pressTarget;\n while (currentTarget) {\n e.currentTarget = currentTarget;\n this.notifyTarget(e, \"pointerupoutside\");\n if (e.pointerType === \"touch\") {\n this.notifyTarget(e, \"touchendoutside\");\n } else if (e.pointerType === \"mouse\" || e.pointerType === \"pen\") {\n this.notifyTarget(e, e.button === 2 ? \"rightupoutside\" : \"mouseupoutside\");\n }\n currentTarget = currentTarget.parent;\n }\n delete trackingData.pressTargetsByButton[from.button];\n }\n this.freeEvent(e);\n }\n /**\n * Maps the upstream `wheel` event to a downstream `wheel` event.\n * @param from - The upstream `wheel` event.\n */\n mapWheel(from) {\n if (!(from instanceof FederatedWheelEvent)) {\n warn(\"EventBoundary cannot map a non-wheel event as a wheel event\");\n return;\n }\n const wheelEvent = this.createWheelEvent(from);\n this.dispatchEvent(wheelEvent);\n this.freeEvent(wheelEvent);\n }\n /**\n * Finds the most specific event-target in the given propagation path that is still mounted in the scene graph.\n *\n * This is used to find the correct `pointerup` and `pointerout` target in the case that the original `pointerdown`\n * or `pointerover` target was unmounted from the scene graph.\n * @param propagationPath - The propagation path was valid in the past.\n * @returns - The most specific event-target still mounted at the same location in the scene graph.\n */\n findMountedTarget(propagationPath) {\n if (!propagationPath) {\n return null;\n }\n let currentTarget = propagationPath[0];\n for (let i = 1; i < propagationPath.length; i++) {\n if (propagationPath[i].parent === currentTarget) {\n currentTarget = propagationPath[i];\n } else {\n break;\n }\n }\n return currentTarget;\n }\n /**\n * Creates an event whose {@code originalEvent} is {@code from}, with an optional `type` and `target` override.\n *\n * The event is allocated using {@link EventBoundary#allocateEvent this.allocateEvent}.\n * @param from - The {@code originalEvent} for the returned event.\n * @param [type=from.type] - The type of the returned event.\n * @param target - The target of the returned event.\n */\n createPointerEvent(from, type, target) {\n const event = this.allocateEvent(FederatedPointerEvent);\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n event.target = target ?? this.hitTest(event.global.x, event.global.y) ?? this._hitElements[0];\n if (typeof type === \"string\") {\n event.type = type;\n }\n return event;\n }\n /**\n * Creates a wheel event whose {@code originalEvent} is {@code from}.\n *\n * The event is allocated using {@link EventBoundary#allocateEvent this.allocateEvent}.\n * @param from - The upstream wheel event.\n */\n createWheelEvent(from) {\n const event = this.allocateEvent(FederatedWheelEvent);\n this.copyWheelData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from;\n event.target = this.hitTest(event.global.x, event.global.y);\n return event;\n }\n /**\n * Clones the event {@code from}, with an optional {@code type} override.\n *\n * The event is allocated using {@link EventBoundary#allocateEvent this.allocateEvent}.\n * @param from - The event to clone.\n * @param [type=from.type] - The type of the returned event.\n */\n clonePointerEvent(from, type) {\n const event = this.allocateEvent(FederatedPointerEvent);\n event.nativeEvent = from.nativeEvent;\n event.originalEvent = from.originalEvent;\n this.copyPointerData(from, event);\n this.copyMouseData(from, event);\n this.copyData(from, event);\n event.target = from.target;\n event.path = from.composedPath().slice();\n event.type = type ?? event.type;\n return event;\n }\n /**\n * Copies wheel {@link FederatedWheelEvent} data from {@code from} into {@code to}.\n *\n * The following properties are copied:\n * + deltaMode\n * + deltaX\n * + deltaY\n * + deltaZ\n * @param from - The event to copy data from.\n * @param to - The event to copy data into.\n */\n copyWheelData(from, to) {\n to.deltaMode = from.deltaMode;\n to.deltaX = from.deltaX;\n to.deltaY = from.deltaY;\n to.deltaZ = from.deltaZ;\n }\n /**\n * Copies pointer {@link FederatedPointerEvent} data from {@code from} into {@code to}.\n *\n * The following properties are copied:\n * + pointerId\n * + width\n * + height\n * + isPrimary\n * + pointerType\n * + pressure\n * + tangentialPressure\n * + tiltX\n * + tiltY\n * @param from - The event to copy data from.\n * @param to - The event to copy data into.\n */\n copyPointerData(from, to) {\n if (!(from instanceof FederatedPointerEvent && to instanceof FederatedPointerEvent))\n return;\n to.pointerId = from.pointerId;\n to.width = from.width;\n to.height = from.height;\n to.isPrimary = from.isPrimary;\n to.pointerType = from.pointerType;\n to.pressure = from.pressure;\n to.tangentialPressure = from.tangentialPressure;\n to.tiltX = from.tiltX;\n to.tiltY = from.tiltY;\n to.twist = from.twist;\n }\n /**\n * Copies mouse {@link FederatedMouseEvent} data from {@code from} to {@code to}.\n *\n * The following properties are copied:\n * + altKey\n * + button\n * + buttons\n * + clientX\n * + clientY\n * + metaKey\n * + movementX\n * + movementY\n * + pageX\n * + pageY\n * + x\n * + y\n * + screen\n * + shiftKey\n * + global\n * @param from - The event to copy data from.\n * @param to - The event to copy data into.\n */\n copyMouseData(from, to) {\n if (!(from instanceof FederatedMouseEvent && to instanceof FederatedMouseEvent))\n return;\n to.altKey = from.altKey;\n to.button = from.button;\n to.buttons = from.buttons;\n to.client.copyFrom(from.client);\n to.ctrlKey = from.ctrlKey;\n to.metaKey = from.metaKey;\n to.movement.copyFrom(from.movement);\n to.screen.copyFrom(from.screen);\n to.shiftKey = from.shiftKey;\n to.global.copyFrom(from.global);\n }\n /**\n * Copies base {@link FederatedEvent} data from {@code from} into {@code to}.\n *\n * The following properties are copied:\n * + isTrusted\n * + srcElement\n * + timeStamp\n * + type\n * @param from - The event to copy data from.\n * @param to - The event to copy data into.\n */\n copyData(from, to) {\n to.isTrusted = from.isTrusted;\n to.srcElement = from.srcElement;\n to.timeStamp = performance.now();\n to.type = from.type;\n to.detail = from.detail;\n to.view = from.view;\n to.which = from.which;\n to.layer.copyFrom(from.layer);\n to.page.copyFrom(from.page);\n }\n /**\n * @param id - The pointer ID.\n * @returns The tracking data stored for the given pointer. If no data exists, a blank\n * state will be created.\n */\n trackingData(id) {\n if (!this.mappingState.trackingData[id]) {\n this.mappingState.trackingData[id] = {\n pressTargetsByButton: {},\n clicksByButton: {},\n overTarget: null\n };\n }\n return this.mappingState.trackingData[id];\n }\n /**\n * Allocate a specific type of event from {@link EventBoundary#eventPool this.eventPool}.\n *\n * This allocation is constructor-agnostic, as long as it only takes one argument - this event\n * boundary.\n * @param constructor - The event's constructor.\n */\n allocateEvent(constructor) {\n if (!this.eventPool.has(constructor)) {\n this.eventPool.set(constructor, []);\n }\n const event = this.eventPool.get(constructor).pop() || new constructor(this);\n event.eventPhase = event.NONE;\n event.currentTarget = null;\n event.path = null;\n event.target = null;\n return event;\n }\n /**\n * Frees the event and puts it back into the event pool.\n *\n * It is illegal to reuse the event until it is allocated again, using `this.allocateEvent`.\n *\n * It is also advised that events not allocated from {@link EventBoundary#allocateEvent this.allocateEvent}\n * not be freed. This is because of the possibility that the same event is freed twice, which can cause\n * it to be allocated twice & result in overwriting.\n * @param event - The event to be freed.\n * @throws Error if the event is managed by another event boundary.\n */\n freeEvent(event) {\n if (event.manager !== this)\n throw new Error(\"It is illegal to free an event not managed by this EventBoundary!\");\n const constructor = event.constructor;\n if (!this.eventPool.has(constructor)) {\n this.eventPool.set(constructor, []);\n }\n this.eventPool.get(constructor).push(event);\n }\n /**\n * Similar to {@link EventEmitter.emit}, except it stops if the `propagationImmediatelyStopped` flag\n * is set on the event.\n * @param e - The event to call each listener with.\n * @param type - The event key.\n */\n _notifyListeners(e, type) {\n const listeners = e.currentTarget._events[type];\n if (!listeners)\n return;\n if (!e.currentTarget.isInteractive())\n return;\n if (\"fn\" in listeners) {\n if (listeners.once)\n e.currentTarget.removeListener(type, listeners.fn, void 0, true);\n listeners.fn.call(listeners.context, e);\n } else {\n for (let i = 0, j = listeners.length; i < j && !e.propagationImmediatelyStopped; i++) {\n if (listeners[i].once)\n e.currentTarget.removeListener(type, listeners[i].fn, void 0, true);\n listeners[i].fn.call(listeners[i].context, e);\n }\n }\n }\n}\n\nexport { EventBoundary };\n//# sourceMappingURL=EventBoundary.mjs.map\n","import { ExtensionType } from '../extensions/Extensions.mjs';\nimport { EventBoundary } from './EventBoundary.mjs';\nimport { EventsTicker } from './EventTicker.mjs';\nimport { FederatedPointerEvent } from './FederatedPointerEvent.mjs';\nimport { FederatedWheelEvent } from './FederatedWheelEvent.mjs';\n\n\"use strict\";\nconst MOUSE_POINTER_ID = 1;\nconst TOUCH_TO_POINTER = {\n touchstart: \"pointerdown\",\n touchend: \"pointerup\",\n touchendoutside: \"pointerupoutside\",\n touchmove: \"pointermove\",\n touchcancel: \"pointercancel\"\n};\nconst _EventSystem = class _EventSystem {\n /**\n * @param {Renderer} renderer\n */\n constructor(renderer) {\n /** Does the device support touch events https://www.w3.org/TR/touch-events/ */\n this.supportsTouchEvents = \"ontouchstart\" in globalThis;\n /** Does the device support pointer events https://www.w3.org/Submission/pointer-events/ */\n this.supportsPointerEvents = !!globalThis.PointerEvent;\n /**\n * The DOM element to which the root event listeners are bound. This is automatically set to\n * the renderer's {@link Renderer#view view}.\n */\n this.domElement = null;\n /** The resolution used to convert between the DOM client space into world space. */\n this.resolution = 1;\n this.renderer = renderer;\n this.rootBoundary = new EventBoundary(null);\n EventsTicker.init(this);\n this.autoPreventDefault = true;\n this._eventsAdded = false;\n this._rootPointerEvent = new FederatedPointerEvent(null);\n this._rootWheelEvent = new FederatedWheelEvent(null);\n this.cursorStyles = {\n default: \"inherit\",\n pointer: \"pointer\"\n };\n this.features = new Proxy({ ..._EventSystem.defaultEventFeatures }, {\n set: (target, key, value) => {\n if (key === \"globalMove\") {\n this.rootBoundary.enableGlobalMoveEvents = value;\n }\n target[key] = value;\n return true;\n }\n });\n this._onPointerDown = this._onPointerDown.bind(this);\n this._onPointerMove = this._onPointerMove.bind(this);\n this._onPointerUp = this._onPointerUp.bind(this);\n this._onPointerOverOut = this._onPointerOverOut.bind(this);\n this.onWheel = this.onWheel.bind(this);\n }\n /**\n * The default interaction mode for all display objects.\n * @see Container.eventMode\n * @type {EventMode}\n * @readonly\n * @since 7.2.0\n */\n static get defaultEventMode() {\n return this._defaultEventMode;\n }\n /**\n * Runner init called, view is available at this point.\n * @ignore\n */\n init(options) {\n const { canvas, resolution } = this.renderer;\n this.setTargetElement(canvas);\n this.resolution = resolution;\n _EventSystem._defaultEventMode = options.eventMode ?? \"passive\";\n Object.assign(this.features, options.eventFeatures ?? {});\n this.rootBoundary.enableGlobalMoveEvents = this.features.globalMove;\n }\n /**\n * Handle changing resolution.\n * @ignore\n */\n resolutionChange(resolution) {\n this.resolution = resolution;\n }\n /** Destroys all event listeners and detaches the renderer. */\n destroy() {\n this.setTargetElement(null);\n this.renderer = null;\n this._currentCursor = null;\n }\n /**\n * Sets the current cursor mode, handling any callbacks or CSS style changes.\n * @param mode - cursor mode, a key from the cursorStyles dictionary\n */\n setCursor(mode) {\n mode = mode || \"default\";\n let applyStyles = true;\n if (globalThis.OffscreenCanvas && this.domElement instanceof OffscreenCanvas) {\n applyStyles = false;\n }\n if (this._currentCursor === mode) {\n return;\n }\n this._currentCursor = mode;\n const style = this.cursorStyles[mode];\n if (style) {\n switch (typeof style) {\n case \"string\":\n if (applyStyles) {\n this.domElement.style.cursor = style;\n }\n break;\n case \"function\":\n style(mode);\n break;\n case \"object\":\n if (applyStyles) {\n Object.assign(this.domElement.style, style);\n }\n break;\n }\n } else if (applyStyles && typeof mode === \"string\" && !Object.prototype.hasOwnProperty.call(this.cursorStyles, mode)) {\n this.domElement.style.cursor = mode;\n }\n }\n /**\n * The global pointer event.\n * Useful for getting the pointer position without listening to events.\n * @since 7.2.0\n */\n get pointer() {\n return this._rootPointerEvent;\n }\n /**\n * Event handler for pointer down events on {@link EventSystem#domElement this.domElement}.\n * @param nativeEvent - The native mouse/pointer/touch event.\n */\n _onPointerDown(nativeEvent) {\n if (!this.features.click)\n return;\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n const events = this._normalizeToPointerData(nativeEvent);\n if (this.autoPreventDefault && events[0].isNormalized) {\n const cancelable = nativeEvent.cancelable || !(\"cancelable\" in nativeEvent);\n if (cancelable) {\n nativeEvent.preventDefault();\n }\n }\n for (let i = 0, j = events.length; i < j; i++) {\n const nativeEvent2 = events[i];\n const federatedEvent = this._bootstrapEvent(this._rootPointerEvent, nativeEvent2);\n this.rootBoundary.mapEvent(federatedEvent);\n }\n this.setCursor(this.rootBoundary.cursor);\n }\n /**\n * Event handler for pointer move events on on {@link EventSystem#domElement this.domElement}.\n * @param nativeEvent - The native mouse/pointer/touch events.\n */\n _onPointerMove(nativeEvent) {\n if (!this.features.move)\n return;\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n EventsTicker.pointerMoved();\n const normalizedEvents = this._normalizeToPointerData(nativeEvent);\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this._bootstrapEvent(this._rootPointerEvent, normalizedEvents[i]);\n this.rootBoundary.mapEvent(event);\n }\n this.setCursor(this.rootBoundary.cursor);\n }\n /**\n * Event handler for pointer up events on {@link EventSystem#domElement this.domElement}.\n * @param nativeEvent - The native mouse/pointer/touch event.\n */\n _onPointerUp(nativeEvent) {\n if (!this.features.click)\n return;\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n let target = nativeEvent.target;\n if (nativeEvent.composedPath && nativeEvent.composedPath().length > 0) {\n target = nativeEvent.composedPath()[0];\n }\n const outside = target !== this.domElement ? \"outside\" : \"\";\n const normalizedEvents = this._normalizeToPointerData(nativeEvent);\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this._bootstrapEvent(this._rootPointerEvent, normalizedEvents[i]);\n event.type += outside;\n this.rootBoundary.mapEvent(event);\n }\n this.setCursor(this.rootBoundary.cursor);\n }\n /**\n * Event handler for pointer over & out events on {@link EventSystem#domElement this.domElement}.\n * @param nativeEvent - The native mouse/pointer/touch event.\n */\n _onPointerOverOut(nativeEvent) {\n if (!this.features.click)\n return;\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n const normalizedEvents = this._normalizeToPointerData(nativeEvent);\n for (let i = 0, j = normalizedEvents.length; i < j; i++) {\n const event = this._bootstrapEvent(this._rootPointerEvent, normalizedEvents[i]);\n this.rootBoundary.mapEvent(event);\n }\n this.setCursor(this.rootBoundary.cursor);\n }\n /**\n * Passive handler for `wheel` events on {@link EventSystem.domElement this.domElement}.\n * @param nativeEvent - The native wheel event.\n */\n onWheel(nativeEvent) {\n if (!this.features.wheel)\n return;\n const wheelEvent = this.normalizeWheelEvent(nativeEvent);\n this.rootBoundary.rootTarget = this.renderer.lastObjectRendered;\n this.rootBoundary.mapEvent(wheelEvent);\n }\n /**\n * Sets the {@link EventSystem#domElement domElement} and binds event listeners.\n *\n * To deregister the current DOM element without setting a new one, pass {@code null}.\n * @param element - The new DOM element.\n */\n setTargetElement(element) {\n this._removeEvents();\n this.domElement = element;\n EventsTicker.domElement = element;\n this._addEvents();\n }\n /** Register event listeners on {@link Renderer#domElement this.domElement}. */\n _addEvents() {\n if (this._eventsAdded || !this.domElement) {\n return;\n }\n EventsTicker.addTickerListener();\n const style = this.domElement.style;\n if (style) {\n if (globalThis.navigator.msPointerEnabled) {\n style.msContentZooming = \"none\";\n style.msTouchAction = \"none\";\n } else if (this.supportsPointerEvents) {\n style.touchAction = \"none\";\n }\n }\n if (this.supportsPointerEvents) {\n globalThis.document.addEventListener(\"pointermove\", this._onPointerMove, true);\n this.domElement.addEventListener(\"pointerdown\", this._onPointerDown, true);\n this.domElement.addEventListener(\"pointerleave\", this._onPointerOverOut, true);\n this.domElement.addEventListener(\"pointerover\", this._onPointerOverOut, true);\n globalThis.addEventListener(\"pointerup\", this._onPointerUp, true);\n } else {\n globalThis.document.addEventListener(\"mousemove\", this._onPointerMove, true);\n this.domElement.addEventListener(\"mousedown\", this._onPointerDown, true);\n this.domElement.addEventListener(\"mouseout\", this._onPointerOverOut, true);\n this.domElement.addEventListener(\"mouseover\", this._onPointerOverOut, true);\n globalThis.addEventListener(\"mouseup\", this._onPointerUp, true);\n if (this.supportsTouchEvents) {\n this.domElement.addEventListener(\"touchstart\", this._onPointerDown, true);\n this.domElement.addEventListener(\"touchend\", this._onPointerUp, true);\n this.domElement.addEventListener(\"touchmove\", this._onPointerMove, true);\n }\n }\n this.domElement.addEventListener(\"wheel\", this.onWheel, {\n passive: true,\n capture: true\n });\n this._eventsAdded = true;\n }\n /** Unregister event listeners on {@link EventSystem#domElement this.domElement}. */\n _removeEvents() {\n if (!this._eventsAdded || !this.domElement) {\n return;\n }\n EventsTicker.removeTickerListener();\n const style = this.domElement.style;\n if (style) {\n if (globalThis.navigator.msPointerEnabled) {\n style.msContentZooming = \"\";\n style.msTouchAction = \"\";\n } else if (this.supportsPointerEvents) {\n style.touchAction = \"\";\n }\n }\n if (this.supportsPointerEvents) {\n globalThis.document.removeEventListener(\"pointermove\", this._onPointerMove, true);\n this.domElement.removeEventListener(\"pointerdown\", this._onPointerDown, true);\n this.domElement.removeEventListener(\"pointerleave\", this._onPointerOverOut, true);\n this.domElement.removeEventListener(\"pointerover\", this._onPointerOverOut, true);\n globalThis.removeEventListener(\"pointerup\", this._onPointerUp, true);\n } else {\n globalThis.document.removeEventListener(\"mousemove\", this._onPointerMove, true);\n this.domElement.removeEventListener(\"mousedown\", this._onPointerDown, true);\n this.domElement.removeEventListener(\"mouseout\", this._onPointerOverOut, true);\n this.domElement.removeEventListener(\"mouseover\", this._onPointerOverOut, true);\n globalThis.removeEventListener(\"mouseup\", this._onPointerUp, true);\n if (this.supportsTouchEvents) {\n this.domElement.removeEventListener(\"touchstart\", this._onPointerDown, true);\n this.domElement.removeEventListener(\"touchend\", this._onPointerUp, true);\n this.domElement.removeEventListener(\"touchmove\", this._onPointerMove, true);\n }\n }\n this.domElement.removeEventListener(\"wheel\", this.onWheel, true);\n this.domElement = null;\n this._eventsAdded = false;\n }\n /**\n * Maps x and y coords from a DOM object and maps them correctly to the PixiJS view. The\n * resulting value is stored in the point. This takes into account the fact that the DOM\n * element could be scaled and positioned anywhere on the screen.\n * @param {PointData} point - the point that the result will be stored in\n * @param {number} x - the x coord of the position to map\n * @param {number} y - the y coord of the position to map\n */\n mapPositionToPoint(point, x, y) {\n const rect = this.domElement.isConnected ? this.domElement.getBoundingClientRect() : {\n x: 0,\n y: 0,\n width: this.domElement.width,\n height: this.domElement.height,\n left: 0,\n top: 0\n };\n const resolutionMultiplier = 1 / this.resolution;\n point.x = (x - rect.left) * (this.domElement.width / rect.width) * resolutionMultiplier;\n point.y = (y - rect.top) * (this.domElement.height / rect.height) * resolutionMultiplier;\n }\n /**\n * Ensures that the original event object contains all data that a regular pointer event would have\n * @param event - The original event data from a touch or mouse event\n * @returns An array containing a single normalized pointer event, in the case of a pointer\n * or mouse event, or a multiple normalized pointer events if there are multiple changed touches\n */\n _normalizeToPointerData(event) {\n const normalizedEvents = [];\n if (this.supportsTouchEvents && event instanceof TouchEvent) {\n for (let i = 0, li = event.changedTouches.length; i < li; i++) {\n const touch = event.changedTouches[i];\n if (typeof touch.button === \"undefined\")\n touch.button = 0;\n if (typeof touch.buttons === \"undefined\")\n touch.buttons = 1;\n if (typeof touch.isPrimary === \"undefined\") {\n touch.isPrimary = event.touches.length === 1 && event.type === \"touchstart\";\n }\n if (typeof touch.width === \"undefined\")\n touch.width = touch.radiusX || 1;\n if (typeof touch.height === \"undefined\")\n touch.height = touch.radiusY || 1;\n if (typeof touch.tiltX === \"undefined\")\n touch.tiltX = 0;\n if (typeof touch.tiltY === \"undefined\")\n touch.tiltY = 0;\n if (typeof touch.pointerType === \"undefined\")\n touch.pointerType = \"touch\";\n if (typeof touch.pointerId === \"undefined\")\n touch.pointerId = touch.identifier || 0;\n if (typeof touch.pressure === \"undefined\")\n touch.pressure = touch.force || 0.5;\n if (typeof touch.twist === \"undefined\")\n touch.twist = 0;\n if (typeof touch.tangentialPressure === \"undefined\")\n touch.tangentialPressure = 0;\n if (typeof touch.layerX === \"undefined\")\n touch.layerX = touch.offsetX = touch.clientX;\n if (typeof touch.layerY === \"undefined\")\n touch.layerY = touch.offsetY = touch.clientY;\n touch.isNormalized = true;\n touch.type = event.type;\n normalizedEvents.push(touch);\n }\n } else if (!globalThis.MouseEvent || event instanceof MouseEvent && (!this.supportsPointerEvents || !(event instanceof globalThis.PointerEvent))) {\n const tempEvent = event;\n if (typeof tempEvent.isPrimary === \"undefined\")\n tempEvent.isPrimary = true;\n if (typeof tempEvent.width === \"undefined\")\n tempEvent.width = 1;\n if (typeof tempEvent.height === \"undefined\")\n tempEvent.height = 1;\n if (typeof tempEvent.tiltX === \"undefined\")\n tempEvent.tiltX = 0;\n if (typeof tempEvent.tiltY === \"undefined\")\n tempEvent.tiltY = 0;\n if (typeof tempEvent.pointerType === \"undefined\")\n tempEvent.pointerType = \"mouse\";\n if (typeof tempEvent.pointerId === \"undefined\")\n tempEvent.pointerId = MOUSE_POINTER_ID;\n if (typeof tempEvent.pressure === \"undefined\")\n tempEvent.pressure = 0.5;\n if (typeof tempEvent.twist === \"undefined\")\n tempEvent.twist = 0;\n if (typeof tempEvent.tangentialPressure === \"undefined\")\n tempEvent.tangentialPressure = 0;\n tempEvent.isNormalized = true;\n normalizedEvents.push(tempEvent);\n } else {\n normalizedEvents.push(event);\n }\n return normalizedEvents;\n }\n /**\n * Normalizes the native {@link https://w3c.github.io/uievents/#interface-wheelevent WheelEvent}.\n *\n * The returned {@link FederatedWheelEvent} is a shared instance. It will not persist across\n * multiple native wheel events.\n * @param nativeEvent - The native wheel event that occurred on the canvas.\n * @returns A federated wheel event.\n */\n normalizeWheelEvent(nativeEvent) {\n const event = this._rootWheelEvent;\n this._transferMouseData(event, nativeEvent);\n event.deltaX = nativeEvent.deltaX;\n event.deltaY = nativeEvent.deltaY;\n event.deltaZ = nativeEvent.deltaZ;\n event.deltaMode = nativeEvent.deltaMode;\n this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);\n event.global.copyFrom(event.screen);\n event.offset.copyFrom(event.screen);\n event.nativeEvent = nativeEvent;\n event.type = nativeEvent.type;\n return event;\n }\n /**\n * Normalizes the `nativeEvent` into a federateed {@link FederatedPointerEvent}.\n * @param event\n * @param nativeEvent\n */\n _bootstrapEvent(event, nativeEvent) {\n event.originalEvent = null;\n event.nativeEvent = nativeEvent;\n event.pointerId = nativeEvent.pointerId;\n event.width = nativeEvent.width;\n event.height = nativeEvent.height;\n event.isPrimary = nativeEvent.isPrimary;\n event.pointerType = nativeEvent.pointerType;\n event.pressure = nativeEvent.pressure;\n event.tangentialPressure = nativeEvent.tangentialPressure;\n event.tiltX = nativeEvent.tiltX;\n event.tiltY = nativeEvent.tiltY;\n event.twist = nativeEvent.twist;\n this._transferMouseData(event, nativeEvent);\n this.mapPositionToPoint(event.screen, nativeEvent.clientX, nativeEvent.clientY);\n event.global.copyFrom(event.screen);\n event.offset.copyFrom(event.screen);\n event.isTrusted = nativeEvent.isTrusted;\n if (event.type === \"pointerleave\") {\n event.type = \"pointerout\";\n }\n if (event.type.startsWith(\"mouse\")) {\n event.type = event.type.replace(\"mouse\", \"pointer\");\n }\n if (event.type.startsWith(\"touch\")) {\n event.type = TOUCH_TO_POINTER[event.type] || event.type;\n }\n return event;\n }\n /**\n * Transfers base & mouse event data from the {@code nativeEvent} to the federated event.\n * @param event\n * @param nativeEvent\n */\n _transferMouseData(event, nativeEvent) {\n event.isTrusted = nativeEvent.isTrusted;\n event.srcElement = nativeEvent.srcElement;\n event.timeStamp = performance.now();\n event.type = nativeEvent.type;\n event.altKey = nativeEvent.altKey;\n event.button = nativeEvent.button;\n event.buttons = nativeEvent.buttons;\n event.client.x = nativeEvent.clientX;\n event.client.y = nativeEvent.clientY;\n event.ctrlKey = nativeEvent.ctrlKey;\n event.metaKey = nativeEvent.metaKey;\n event.movement.x = nativeEvent.movementX;\n event.movement.y = nativeEvent.movementY;\n event.page.x = nativeEvent.pageX;\n event.page.y = nativeEvent.pageY;\n event.relatedTarget = null;\n event.shiftKey = nativeEvent.shiftKey;\n }\n};\n/** @ignore */\n_EventSystem.extension = {\n name: \"events\",\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.CanvasSystem,\n ExtensionType.WebGPUSystem\n ],\n priority: -1\n};\n/**\n * The event features that are enabled by the EventSystem\n * (included in the **pixi.js** and **pixi.js-legacy** bundle), otherwise it will be ignored.\n * @since 7.2.0\n */\n_EventSystem.defaultEventFeatures = {\n /** Enables pointer events associated with pointer movement. */\n move: true,\n /** Enables global pointer move events. */\n globalMove: true,\n /** Enables pointer events associated with clicking. */\n click: true,\n /** Enables wheel events. */\n wheel: true\n};\nlet EventSystem = _EventSystem;\n\nexport { EventSystem };\n//# sourceMappingURL=EventSystem.mjs.map\n","import { EventSystem } from './EventSystem.mjs';\nimport { FederatedEvent } from './FederatedEvent.mjs';\n\n\"use strict\";\nconst FederatedContainer = {\n /**\n * Property-based event handler for the `click` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onclick = (event) => {\n * //some function here that happens on click\n * }\n */\n onclick: null,\n /**\n * Property-based event handler for the `mousedown` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onmousedown = (event) => {\n * //some function here that happens on mousedown\n * }\n */\n onmousedown: null,\n /**\n * Property-based event handler for the `mouseenter` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onmouseenter = (event) => {\n * //some function here that happens on mouseenter\n * }\n */\n onmouseenter: null,\n /**\n * Property-based event handler for the `mouseleave` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onmouseleave = (event) => {\n * //some function here that happens on mouseleave\n * }\n */\n onmouseleave: null,\n /**\n * Property-based event handler for the `mousemove` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onmousemove = (event) => {\n * //some function here that happens on mousemove\n * }\n */\n onmousemove: null,\n /**\n * Property-based event handler for the `globalmousemove` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onglobalmousemove = (event) => {\n * //some function here that happens on globalmousemove\n * }\n */\n onglobalmousemove: null,\n /**\n * Property-based event handler for the `mouseout` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onmouseout = (event) => {\n * //some function here that happens on mouseout\n * }\n */\n onmouseout: null,\n /**\n * Property-based event handler for the `mouseover` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onmouseover = (event) => {\n * //some function here that happens on mouseover\n * }\n */\n onmouseover: null,\n /**\n * Property-based event handler for the `mouseup` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onmouseup = (event) => {\n * //some function here that happens on mouseup\n * }\n */\n onmouseup: null,\n /**\n * Property-based event handler for the `mouseupoutside` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onmouseupoutside = (event) => {\n * //some function here that happens on mouseupoutside\n * }\n */\n onmouseupoutside: null,\n /**\n * Property-based event handler for the `pointercancel` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointercancel = (event) => {\n * //some function here that happens on pointercancel\n * }\n */\n onpointercancel: null,\n /**\n * Property-based event handler for the `pointerdown` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointerdown = (event) => {\n * //some function here that happens on pointerdown\n * }\n */\n onpointerdown: null,\n /**\n * Property-based event handler for the `pointerenter` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointerenter = (event) => {\n * //some function here that happens on pointerenter\n * }\n */\n onpointerenter: null,\n /**\n * Property-based event handler for the `pointerleave` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointerleave = (event) => {\n * //some function here that happens on pointerleave\n * }\n */\n onpointerleave: null,\n /**\n * Property-based event handler for the `pointermove` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointermove = (event) => {\n * //some function here that happens on pointermove\n * }\n */\n onpointermove: null,\n /**\n * Property-based event handler for the `globalpointermove` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onglobalpointermove = (event) => {\n * //some function here that happens on globalpointermove\n * }\n */\n onglobalpointermove: null,\n /**\n * Property-based event handler for the `pointerout` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointerout = (event) => {\n * //some function here that happens on pointerout\n * }\n */\n onpointerout: null,\n /**\n * Property-based event handler for the `pointerover` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointerover = (event) => {\n * //some function here that happens on pointerover\n * }\n */\n onpointerover: null,\n /**\n * Property-based event handler for the `pointertap` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointertap = (event) => {\n * //some function here that happens on pointertap\n * }\n */\n onpointertap: null,\n /**\n * Property-based event handler for the `pointerup` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointerup = (event) => {\n * //some function here that happens on pointerup\n * }\n */\n onpointerup: null,\n /**\n * Property-based event handler for the `pointerupoutside` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onpointerupoutside = (event) => {\n * //some function here that happens on pointerupoutside\n * }\n */\n onpointerupoutside: null,\n /**\n * Property-based event handler for the `rightclick` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onrightclick = (event) => {\n * //some function here that happens on rightclick\n * }\n */\n onrightclick: null,\n /**\n * Property-based event handler for the `rightdown` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onrightdown = (event) => {\n * //some function here that happens on rightdown\n * }\n */\n onrightdown: null,\n /**\n * Property-based event handler for the `rightup` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onrightup = (event) => {\n * //some function here that happens on rightup\n * }\n */\n onrightup: null,\n /**\n * Property-based event handler for the `rightupoutside` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onrightupoutside = (event) => {\n * //some function here that happens on rightupoutside\n * }\n */\n onrightupoutside: null,\n /**\n * Property-based event handler for the `tap` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.ontap = (event) => {\n * //some function here that happens on tap\n * }\n */\n ontap: null,\n /**\n * Property-based event handler for the `touchcancel` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.ontouchcancel = (event) => {\n * //some function here that happens on touchcancel\n * }\n */\n ontouchcancel: null,\n /**\n * Property-based event handler for the `touchend` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.ontouchend = (event) => {\n * //some function here that happens on touchend\n * }\n */\n ontouchend: null,\n /**\n * Property-based event handler for the `touchendoutside` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.ontouchendoutside = (event) => {\n * //some function here that happens on touchendoutside\n * }\n */\n ontouchendoutside: null,\n /**\n * Property-based event handler for the `touchmove` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.ontouchmove = (event) => {\n * //some function here that happens on touchmove\n * }\n */\n ontouchmove: null,\n /**\n * Property-based event handler for the `globaltouchmove` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onglobaltouchmove = (event) => {\n * //some function here that happens on globaltouchmove\n * }\n */\n onglobaltouchmove: null,\n /**\n * Property-based event handler for the `touchstart` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.ontouchstart = (event) => {\n * //some function here that happens on touchstart\n * }\n */\n ontouchstart: null,\n /**\n * Property-based event handler for the `wheel` event.\n * @memberof scene.Container#\n * @default null\n * @example\n * this.onwheel = (event) => {\n * //some function here that happens on wheel\n * }\n */\n onwheel: null,\n /**\n * Enable interaction events for the Container. Touch, pointer and mouse\n * @memberof scene.Container#\n */\n get interactive() {\n return this.eventMode === \"dynamic\" || this.eventMode === \"static\";\n },\n set interactive(value) {\n this.eventMode = value ? \"static\" : \"passive\";\n },\n /**\n * @ignore\n */\n _internalEventMode: void 0,\n /**\n * Enable interaction events for the Container. Touch, pointer and mouse.\n * There are 5 types of interaction settings:\n * - `'none'`: Ignores all interaction events, even on its children.\n * - `'passive'`: **(default)** Does not emit events and ignores all hit testing on itself and non-interactive children.\n * Interactive children will still emit events.\n * - `'auto'`: Does not emit events but is hit tested if parent is interactive. Same as `interactive = false` in v7\n * - `'static'`: Emit events and is hit tested. Same as `interaction = true` in v7\n * - `'dynamic'`: Emits events and is hit tested but will also receive mock interaction events fired from a ticker to\n * allow for interaction when the mouse isn't moving\n * @example\n * import { Sprite } from 'pixi.js';\n *\n * const sprite = new Sprite(texture);\n * sprite.eventMode = 'static';\n * sprite.on('tap', (event) => {\n * // Handle event\n * });\n * @memberof scene.Container#\n * @since 7.2.0\n */\n get eventMode() {\n return this._internalEventMode ?? EventSystem.defaultEventMode;\n },\n set eventMode(value) {\n this._internalEventMode = value;\n },\n /**\n * Determines if the container is interactive or not\n * @returns {boolean} Whether the container is interactive or not\n * @memberof scene.Container#\n * @since 7.2.0\n * @example\n * import { Sprite } from 'pixi.js';\n *\n * const sprite = new Sprite(texture);\n * sprite.eventMode = 'static';\n * sprite.isInteractive(); // true\n *\n * sprite.eventMode = 'dynamic';\n * sprite.isInteractive(); // true\n *\n * sprite.eventMode = 'none';\n * sprite.isInteractive(); // false\n *\n * sprite.eventMode = 'passive';\n * sprite.isInteractive(); // false\n *\n * sprite.eventMode = 'auto';\n * sprite.isInteractive(); // false\n */\n isInteractive() {\n return this.eventMode === \"static\" || this.eventMode === \"dynamic\";\n },\n /**\n * Determines if the children to the container can be clicked/touched\n * Setting this to false allows PixiJS to bypass a recursive `hitTest` function\n * @memberof scene.Container#\n */\n interactiveChildren: true,\n /**\n * Interaction shape. Children will be hit first, then this shape will be checked.\n * Setting this will cause this shape to be checked in hit tests rather than the container's bounds.\n * @example\n * import { Rectangle, Sprite } from 'pixi.js';\n *\n * const sprite = new Sprite(texture);\n * sprite.interactive = true;\n * sprite.hitArea = new Rectangle(0, 0, 100, 100);\n * @member {IHitArea}\n * @memberof scene.Container#\n */\n hitArea: null,\n /**\n * Unlike `on` or `addListener` which are methods from EventEmitter, `addEventListener`\n * seeks to be compatible with the DOM's `addEventListener` with support for options.\n * @memberof scene.Container\n * @param type - The type of event to listen to.\n * @param listener - The listener callback or object.\n * @param options - Listener options, used for capture phase.\n * @example\n * // Tell the user whether they did a single, double, triple, or nth click.\n * button.addEventListener('click', {\n * handleEvent(e): {\n * let prefix;\n *\n * switch (e.detail) {\n * case 1: prefix = 'single'; break;\n * case 2: prefix = 'double'; break;\n * case 3: prefix = 'triple'; break;\n * default: prefix = e.detail + 'th'; break;\n * }\n *\n * console.log('That was a ' + prefix + 'click');\n * }\n * });\n *\n * // But skip the first click!\n * button.parent.addEventListener('click', function blockClickOnce(e) {\n * e.stopImmediatePropagation();\n * button.parent.removeEventListener('click', blockClickOnce, true);\n * }, {\n * capture: true,\n * });\n */\n addEventListener(type, listener, options) {\n const capture = typeof options === \"boolean\" && options || typeof options === \"object\" && options.capture;\n const signal = typeof options === \"object\" ? options.signal : void 0;\n const once = typeof options === \"object\" ? options.once === true : false;\n const context = typeof listener === \"function\" ? void 0 : listener;\n type = capture ? `${type}capture` : type;\n const listenerFn = typeof listener === \"function\" ? listener : listener.handleEvent;\n const emitter = this;\n if (signal) {\n signal.addEventListener(\"abort\", () => {\n emitter.off(type, listenerFn, context);\n });\n }\n if (once) {\n emitter.once(type, listenerFn, context);\n } else {\n emitter.on(type, listenerFn, context);\n }\n },\n /**\n * Unlike `off` or `removeListener` which are methods from EventEmitter, `removeEventListener`\n * seeks to be compatible with the DOM's `removeEventListener` with support for options.\n * @memberof scene.Container\n * @param type - The type of event the listener is bound to.\n * @param listener - The listener callback or object.\n * @param options - The original listener options. This is required to deregister a capture phase listener.\n */\n removeEventListener(type, listener, options) {\n const capture = typeof options === \"boolean\" && options || typeof options === \"object\" && options.capture;\n const context = typeof listener === \"function\" ? void 0 : listener;\n type = capture ? `${type}capture` : type;\n listener = typeof listener === \"function\" ? listener : listener.handleEvent;\n this.off(type, listener, context);\n },\n /**\n * Dispatch the event on this {@link Container} using the event's {@link EventBoundary}.\n *\n * The target of the event is set to `this` and the `defaultPrevented` flag is cleared before dispatch.\n * @memberof scene.Container\n * @param e - The event to dispatch.\n * @returns Whether the {@link FederatedEvent.preventDefault preventDefault}() method was not invoked.\n * @example\n * // Reuse a click event!\n * button.dispatchEvent(clickEvent);\n */\n dispatchEvent(e) {\n if (!(e instanceof FederatedEvent)) {\n throw new Error(\"Container cannot propagate events outside of the Federated Events API\");\n }\n e.defaultPrevented = false;\n e.path = null;\n e.target = this;\n e.manager.dispatchEvent(e);\n return !e.defaultPrevented;\n }\n};\n\nexport { FederatedContainer };\n//# sourceMappingURL=FederatedEventTarget.mjs.map\n","import { extensions } from '../extensions/Extensions.mjs';\nimport { Container } from '../scene/container/Container.mjs';\nimport { EventSystem } from './EventSystem.mjs';\nimport { FederatedContainer } from './FederatedEventTarget.mjs';\n\n\"use strict\";\nextensions.add(EventSystem);\nContainer.mixin(FederatedContainer);\n//# sourceMappingURL=init.mjs.map\n","import { ExtensionType } from '../extensions/Extensions.mjs';\n\n\"use strict\";\nclass FilterPipe {\n constructor(renderer) {\n this._renderer = renderer;\n }\n push(filterEffect, container, instructionSet) {\n const renderPipes = this._renderer.renderPipes;\n renderPipes.batch.break(instructionSet);\n instructionSet.add({\n renderPipeId: \"filter\",\n canBundle: false,\n action: \"pushFilter\",\n container,\n filterEffect\n });\n }\n pop(_filterEffect, _container, instructionSet) {\n this._renderer.renderPipes.batch.break(instructionSet);\n instructionSet.add({\n renderPipeId: \"filter\",\n action: \"popFilter\",\n canBundle: false\n });\n }\n execute(instruction) {\n if (instruction.action === \"pushFilter\") {\n this._renderer.filter.push(instruction);\n } else if (instruction.action === \"popFilter\") {\n this._renderer.filter.pop();\n }\n }\n destroy() {\n this._renderer = null;\n }\n}\nFilterPipe.extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes\n ],\n name: \"filter\"\n};\n\nexport { FilterPipe };\n//# sourceMappingURL=FilterPipe.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { boundsPool } from './utils/matrixAndBoundsPool.mjs';\n\n\"use strict\";\nconst tempMatrix = new Matrix();\nfunction getFastGlobalBounds(target, bounds) {\n bounds.clear();\n _getGlobalBoundsRecursive(target, bounds);\n if (!bounds.isValid) {\n bounds.set(0, 0, 0, 0);\n }\n if (!target.renderGroup) {\n bounds.applyMatrix(target.parentRenderGroup.worldTransform);\n } else {\n bounds.applyMatrix(target.renderGroup.localTransform);\n }\n return bounds;\n}\nfunction _getGlobalBoundsRecursive(target, bounds) {\n if (target.localDisplayStatus !== 7 || !target.measurable) {\n return;\n }\n const manageEffects = !!target.effects.length;\n let localBounds = bounds;\n if (target.renderGroup || manageEffects) {\n localBounds = boundsPool.get().clear();\n }\n if (target.boundsArea) {\n bounds.addRect(target.boundsArea, target.worldTransform);\n } else {\n if (target.renderPipeId) {\n const viewBounds = target.bounds;\n localBounds.addFrame(\n viewBounds.minX,\n viewBounds.minY,\n viewBounds.maxX,\n viewBounds.maxY,\n target.groupTransform\n );\n }\n const children = target.children;\n for (let i = 0; i < children.length; i++) {\n _getGlobalBoundsRecursive(children[i], localBounds);\n }\n }\n if (manageEffects) {\n let advanced = false;\n for (let i = 0; i < target.effects.length; i++) {\n if (target.effects[i].addBounds) {\n if (!advanced) {\n advanced = true;\n localBounds.applyMatrix(target.parentRenderGroup.worldTransform);\n }\n target.effects[i].addBounds(localBounds, true);\n }\n }\n if (advanced) {\n localBounds.applyMatrix(target.parentRenderGroup.worldTransform.copyTo(tempMatrix).invert());\n bounds.addBounds(localBounds, target.relativeGroupTransform);\n }\n bounds.addBounds(localBounds);\n boundsPool.return(localBounds);\n } else if (target.renderGroup) {\n bounds.addBounds(localBounds, target.relativeGroupTransform);\n boundsPool.return(localBounds);\n }\n}\n\nexport { _getGlobalBoundsRecursive, getFastGlobalBounds };\n//# sourceMappingURL=getFastGlobalBounds.mjs.map\n","\"use strict\";\nfunction getGlobalRenderableBounds(renderables, bounds) {\n bounds.clear();\n const tempMatrix = bounds.matrix;\n for (let i = 0; i < renderables.length; i++) {\n const renderable = renderables[i];\n if (renderable.globalDisplayStatus < 7) {\n continue;\n }\n bounds.matrix = renderable.worldTransform;\n renderable.addBounds(bounds);\n }\n bounds.matrix = tempMatrix;\n return bounds;\n}\n\nexport { getGlobalRenderableBounds };\n//# sourceMappingURL=getRenderableBounds.mjs.map\n","import { ExtensionType } from '../extensions/Extensions.mjs';\nimport { Matrix } from '../maths/matrix/Matrix.mjs';\nimport { Point } from '../maths/point/Point.mjs';\nimport { BindGroup } from '../rendering/renderers/gpu/shader/BindGroup.mjs';\nimport { Geometry } from '../rendering/renderers/shared/geometry/Geometry.mjs';\nimport { UniformGroup } from '../rendering/renderers/shared/shader/UniformGroup.mjs';\nimport { Texture } from '../rendering/renderers/shared/texture/Texture.mjs';\nimport { TexturePool } from '../rendering/renderers/shared/texture/TexturePool.mjs';\nimport { RendererType } from '../rendering/renderers/types.mjs';\nimport { Bounds } from '../scene/container/bounds/Bounds.mjs';\nimport { getFastGlobalBounds } from '../scene/container/bounds/getFastGlobalBounds.mjs';\nimport { getGlobalRenderableBounds } from '../scene/container/bounds/getRenderableBounds.mjs';\nimport { warn } from '../utils/logging/warn.mjs';\n\n\"use strict\";\nconst quadGeometry = new Geometry({\n attributes: {\n aPosition: {\n buffer: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]),\n location: 0,\n format: \"float32x2\",\n stride: 2 * 4,\n offset: 0\n }\n },\n indexBuffer: new Uint32Array([0, 1, 2, 0, 2, 3])\n});\nclass FilterSystem {\n constructor(renderer) {\n this._filterStackIndex = 0;\n this._filterStack = [];\n this._filterGlobalUniforms = new UniformGroup({\n uInputSize: { value: new Float32Array(4), type: \"vec4\" },\n uInputPixel: { value: new Float32Array(4), type: \"vec4\" },\n uInputClamp: { value: new Float32Array(4), type: \"vec4\" },\n uOutputFrame: { value: new Float32Array(4), type: \"vec4\" },\n uGlobalFrame: { value: new Float32Array(4), type: \"vec4\" },\n uOutputTexture: { value: new Float32Array(4), type: \"vec4\" }\n });\n this._globalFilterBindGroup = new BindGroup({});\n this.renderer = renderer;\n }\n /**\n * The back texture of the currently active filter. Requires the filter to have `blendRequired` set to true.\n * @readonly\n */\n get activeBackTexture() {\n return this._activeFilterData?.backTexture;\n }\n push(instruction) {\n const renderer = this.renderer;\n const filters = instruction.filterEffect.filters;\n if (!this._filterStack[this._filterStackIndex]) {\n this._filterStack[this._filterStackIndex] = this._getFilterData();\n }\n const filterData = this._filterStack[this._filterStackIndex];\n this._filterStackIndex++;\n if (filters.length === 0) {\n filterData.skip = true;\n return;\n }\n const bounds = filterData.bounds;\n if (instruction.renderables) {\n getGlobalRenderableBounds(instruction.renderables, bounds);\n } else if (instruction.filterEffect.filterArea) {\n bounds.clear();\n bounds.addRect(instruction.filterEffect.filterArea);\n bounds.applyMatrix(instruction.container.worldTransform);\n } else {\n getFastGlobalBounds(instruction.container, bounds);\n }\n const colorTextureSource = renderer.renderTarget.rootRenderTarget.colorTexture.source;\n let resolution = colorTextureSource._resolution;\n let padding = 0;\n let antialias = colorTextureSource.antialias;\n let blendRequired = false;\n let enabled = false;\n for (let i = 0; i < filters.length; i++) {\n const filter = filters[i];\n resolution = Math.min(resolution, filter.resolution);\n padding += filter.padding;\n if (filter.antialias !== \"inherit\") {\n if (filter.antialias === \"on\") {\n antialias = true;\n } else {\n antialias = false;\n }\n }\n const isCompatible = !!(filter.compatibleRenderers & renderer.type);\n if (!isCompatible) {\n enabled = false;\n break;\n }\n if (filter.blendRequired && !(renderer.backBuffer?.useBackBuffer ?? true)) {\n warn(\"Blend filter requires backBuffer on WebGL renderer to be enabled. Set `useBackBuffer: true` in the renderer options.\");\n enabled = false;\n break;\n }\n enabled = filter.enabled || enabled;\n blendRequired = blendRequired || filter.blendRequired;\n }\n if (!enabled) {\n filterData.skip = true;\n return;\n }\n const viewPort = renderer.renderTarget.rootViewPort;\n bounds.scale(resolution).fitBounds(0, viewPort.width, 0, viewPort.height).scale(1 / resolution).pad(padding).ceil();\n if (!bounds.isPositive) {\n filterData.skip = true;\n return;\n }\n filterData.skip = false;\n filterData.bounds = bounds;\n filterData.blendRequired = blendRequired;\n filterData.container = instruction.container;\n filterData.filterEffect = instruction.filterEffect;\n filterData.previousRenderSurface = renderer.renderTarget.renderSurface;\n filterData.inputTexture = TexturePool.getOptimalTexture(\n bounds.width,\n bounds.height,\n resolution,\n antialias\n );\n renderer.renderTarget.bind(filterData.inputTexture, true);\n renderer.globalUniforms.push({\n offset: bounds\n });\n }\n pop() {\n const renderer = this.renderer;\n this._filterStackIndex--;\n const filterData = this._filterStack[this._filterStackIndex];\n if (filterData.skip) {\n return;\n }\n this._activeFilterData = filterData;\n const inputTexture = filterData.inputTexture;\n const bounds = filterData.bounds;\n let backTexture = Texture.EMPTY;\n renderer.renderTarget.finishRenderPass();\n if (filterData.blendRequired) {\n const previousBounds = this._filterStackIndex > 0 ? this._filterStack[this._filterStackIndex - 1].bounds : null;\n const renderTarget = renderer.renderTarget.getRenderTarget(filterData.previousRenderSurface);\n backTexture = this.getBackTexture(renderTarget, bounds, previousBounds);\n }\n filterData.backTexture = backTexture;\n const filters = filterData.filterEffect.filters;\n this._globalFilterBindGroup.setResource(inputTexture.source.style, 2);\n this._globalFilterBindGroup.setResource(backTexture.source, 3);\n renderer.globalUniforms.pop();\n if (filters.length === 1) {\n filters[0].apply(this, inputTexture, filterData.previousRenderSurface, false);\n TexturePool.returnTexture(inputTexture);\n } else {\n let flip = filterData.inputTexture;\n let flop = TexturePool.getOptimalTexture(\n bounds.width,\n bounds.height,\n flip.source._resolution,\n false\n );\n let i = 0;\n for (i = 0; i < filters.length - 1; ++i) {\n const filter = filters[i];\n filter.apply(this, flip, flop, true);\n const t = flip;\n flip = flop;\n flop = t;\n }\n filters[i].apply(this, flip, filterData.previousRenderSurface, false);\n TexturePool.returnTexture(flip);\n TexturePool.returnTexture(flop);\n }\n if (filterData.blendRequired) {\n TexturePool.returnTexture(backTexture);\n }\n }\n getBackTexture(lastRenderSurface, bounds, previousBounds) {\n const backgroundResolution = lastRenderSurface.colorTexture.source._resolution;\n const backTexture = TexturePool.getOptimalTexture(\n bounds.width,\n bounds.height,\n backgroundResolution,\n false\n );\n let x = bounds.minX;\n let y = bounds.minY;\n if (previousBounds) {\n x -= previousBounds.minX;\n y -= previousBounds.minY;\n }\n x = Math.floor(x * backgroundResolution);\n y = Math.floor(y * backgroundResolution);\n const width = Math.ceil(bounds.width * backgroundResolution);\n const height = Math.ceil(bounds.height * backgroundResolution);\n this.renderer.renderTarget.copyToTexture(\n lastRenderSurface,\n backTexture,\n { x, y },\n { width, height },\n { x: 0, y: 0 }\n );\n return backTexture;\n }\n applyFilter(filter, input, output, clear) {\n const renderer = this.renderer;\n const filterData = this._filterStack[this._filterStackIndex];\n const bounds = filterData.bounds;\n const offset = Point.shared;\n const previousRenderSurface = filterData.previousRenderSurface;\n const isFinalTarget = previousRenderSurface === output;\n let resolution = this.renderer.renderTarget.rootRenderTarget.colorTexture.source._resolution;\n let currentIndex = this._filterStackIndex - 1;\n while (currentIndex > 0 && this._filterStack[currentIndex].skip) {\n --currentIndex;\n }\n if (currentIndex > 0) {\n resolution = this._filterStack[currentIndex].inputTexture.source._resolution;\n }\n const filterUniforms = this._filterGlobalUniforms;\n const uniforms = filterUniforms.uniforms;\n const outputFrame = uniforms.uOutputFrame;\n const inputSize = uniforms.uInputSize;\n const inputPixel = uniforms.uInputPixel;\n const inputClamp = uniforms.uInputClamp;\n const globalFrame = uniforms.uGlobalFrame;\n const outputTexture = uniforms.uOutputTexture;\n if (isFinalTarget) {\n let lastIndex = this._filterStackIndex;\n while (lastIndex > 0) {\n lastIndex--;\n const filterData2 = this._filterStack[this._filterStackIndex - 1];\n if (!filterData2.skip) {\n offset.x = filterData2.bounds.minX;\n offset.y = filterData2.bounds.minY;\n break;\n }\n }\n outputFrame[0] = bounds.minX - offset.x;\n outputFrame[1] = bounds.minY - offset.y;\n } else {\n outputFrame[0] = 0;\n outputFrame[1] = 0;\n }\n outputFrame[2] = input.frame.width;\n outputFrame[3] = input.frame.height;\n inputSize[0] = input.source.width;\n inputSize[1] = input.source.height;\n inputSize[2] = 1 / inputSize[0];\n inputSize[3] = 1 / inputSize[1];\n inputPixel[0] = input.source.pixelWidth;\n inputPixel[1] = input.source.pixelHeight;\n inputPixel[2] = 1 / inputPixel[0];\n inputPixel[3] = 1 / inputPixel[1];\n inputClamp[0] = 0.5 * inputPixel[2];\n inputClamp[1] = 0.5 * inputPixel[3];\n inputClamp[2] = input.frame.width * inputSize[2] - 0.5 * inputPixel[2];\n inputClamp[3] = input.frame.height * inputSize[3] - 0.5 * inputPixel[3];\n const rootTexture = this.renderer.renderTarget.rootRenderTarget.colorTexture;\n globalFrame[0] = offset.x * resolution;\n globalFrame[1] = offset.y * resolution;\n globalFrame[2] = rootTexture.source.width * resolution;\n globalFrame[3] = rootTexture.source.height * resolution;\n const renderTarget = this.renderer.renderTarget.getRenderTarget(output);\n renderer.renderTarget.bind(output, !!clear);\n if (output instanceof Texture) {\n outputTexture[0] = output.frame.width;\n outputTexture[1] = output.frame.height;\n } else {\n outputTexture[0] = renderTarget.width;\n outputTexture[1] = renderTarget.height;\n }\n outputTexture[2] = renderTarget.isRoot ? -1 : 1;\n filterUniforms.update();\n if (renderer.renderPipes.uniformBatch) {\n const batchUniforms = renderer.renderPipes.uniformBatch.getUboResource(filterUniforms);\n this._globalFilterBindGroup.setResource(batchUniforms, 0);\n } else {\n this._globalFilterBindGroup.setResource(filterUniforms, 0);\n }\n this._globalFilterBindGroup.setResource(input.source, 1);\n this._globalFilterBindGroup.setResource(input.source.style, 2);\n filter.groups[0] = this._globalFilterBindGroup;\n renderer.encoder.draw({\n geometry: quadGeometry,\n shader: filter,\n state: filter._state,\n topology: \"triangle-list\"\n });\n if (renderer.type === RendererType.WEBGL) {\n renderer.renderTarget.finishRenderPass();\n }\n }\n _getFilterData() {\n return {\n skip: false,\n inputTexture: null,\n bounds: new Bounds(),\n container: null,\n filterEffect: null,\n blendRequired: false,\n previousRenderSurface: null\n };\n }\n /**\n * Multiply _input normalized coordinates_ to this matrix to get _sprite texture normalized coordinates_.\n *\n * Use `outputMatrix * vTextureCoord` in the shader.\n * @param outputMatrix - The matrix to output to.\n * @param {Sprite} sprite - The sprite to map to.\n * @returns The mapped matrix.\n */\n calculateSpriteMatrix(outputMatrix, sprite) {\n const data = this._activeFilterData;\n const mappedMatrix = outputMatrix.set(\n data.inputTexture._source.width,\n 0,\n 0,\n data.inputTexture._source.height,\n data.bounds.minX,\n data.bounds.minY\n );\n const worldTransform = sprite.worldTransform.copyTo(Matrix.shared);\n worldTransform.invert();\n mappedMatrix.prepend(worldTransform);\n mappedMatrix.scale(\n 1 / sprite.texture.frame.width,\n 1 / sprite.texture.frame.height\n );\n mappedMatrix.translate(sprite.anchor.x, sprite.anchor.y);\n return mappedMatrix;\n }\n}\n/** @ignore */\nFilterSystem.extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem\n ],\n name: \"filter\"\n};\n\nexport { FilterSystem };\n//# sourceMappingURL=FilterSystem.mjs.map\n","import { extensions } from '../extensions/Extensions.mjs';\nimport { FilterPipe } from './FilterPipe.mjs';\nimport { FilterSystem } from './FilterSystem.mjs';\n\n\"use strict\";\nextensions.add(FilterSystem);\nextensions.add(FilterPipe);\n//# sourceMappingURL=init.mjs.map\n","import { warn } from '../../../../utils/logging/warn.mjs';\n\n\"use strict\";\nfunction addBits(srcParts, parts, name) {\n if (srcParts) {\n for (const i in srcParts) {\n const id = i.toLocaleLowerCase();\n const part = parts[id];\n if (part) {\n let sanitisedPart = srcParts[i];\n if (i === \"header\") {\n sanitisedPart = sanitisedPart.replace(/@in\\s+[^;]+;\\s*/g, \"\").replace(/@out\\s+[^;]+;\\s*/g, \"\");\n }\n if (name) {\n part.push(`//----${name}----//`);\n }\n part.push(sanitisedPart);\n } else {\n warn(`${i} placement hook does not exist in shader`);\n }\n }\n }\n}\n\nexport { addBits };\n//# sourceMappingURL=addBits.mjs.map\n","\"use strict\";\nconst findHooksRx = /\\{\\{(.*?)\\}\\}/g;\nfunction compileHooks(programSrc) {\n const parts = {};\n const partMatches = programSrc.match(findHooksRx)?.map((hook) => hook.replace(/[{()}]/g, \"\")) ?? [];\n partMatches.forEach((hook) => {\n parts[hook] = [];\n });\n return parts;\n}\n\nexport { compileHooks, findHooksRx };\n//# sourceMappingURL=compileHooks.mjs.map\n","\"use strict\";\nfunction extractInputs(fragmentSource, out) {\n let match;\n const regex = /@in\\s+([^;]+);/g;\n while ((match = regex.exec(fragmentSource)) !== null) {\n out.push(match[1]);\n }\n}\nfunction compileInputs(fragments, template, sort = false) {\n const results = [];\n extractInputs(template, results);\n fragments.forEach((fragment) => {\n if (fragment.header) {\n extractInputs(fragment.header, results);\n }\n });\n const mainInput = results;\n if (sort) {\n mainInput.sort();\n }\n const finalString = mainInput.map((inValue, i) => ` @location(${i}) ${inValue},`).join(\"\\n\");\n let cleanedString = template.replace(/@in\\s+[^;]+;\\s*/g, \"\");\n cleanedString = cleanedString.replace(\"{{in}}\", `\n${finalString}\n`);\n return cleanedString;\n}\n\nexport { compileInputs };\n//# sourceMappingURL=compileInputs.mjs.map\n","\"use strict\";\nfunction extractOutputs(fragmentSource, out) {\n let match;\n const regex = /@out\\s+([^;]+);/g;\n while ((match = regex.exec(fragmentSource)) !== null) {\n out.push(match[1]);\n }\n}\nfunction extractVariableName(value) {\n const regex = /\\b(\\w+)\\s*:/g;\n const match = regex.exec(value);\n return match ? match[1] : \"\";\n}\nfunction stripVariable(value) {\n const regex = /@.*?\\s+/g;\n return value.replace(regex, \"\");\n}\nfunction compileOutputs(fragments, template) {\n const results = [];\n extractOutputs(template, results);\n fragments.forEach((fragment) => {\n if (fragment.header) {\n extractOutputs(fragment.header, results);\n }\n });\n let index = 0;\n const mainStruct = results.sort().map((inValue) => {\n if (inValue.indexOf(\"builtin\") > -1) {\n return inValue;\n }\n return `@location(${index++}) ${inValue}`;\n }).join(\",\\n\");\n const mainStart = results.sort().map((inValue) => ` var ${stripVariable(inValue)};`).join(\"\\n\");\n const mainEnd = `return VSOutput(\n ${results.sort().map((inValue) => ` ${extractVariableName(inValue)}`).join(\",\\n\")});`;\n let compiledCode = template.replace(/@out\\s+[^;]+;\\s*/g, \"\");\n compiledCode = compiledCode.replace(\"{{struct}}\", `\n${mainStruct}\n`);\n compiledCode = compiledCode.replace(\"{{start}}\", `\n${mainStart}\n`);\n compiledCode = compiledCode.replace(\"{{return}}\", `\n${mainEnd}\n`);\n return compiledCode;\n}\n\nexport { compileOutputs };\n//# sourceMappingURL=compileOutputs.mjs.map\n","\"use strict\";\nfunction injectBits(templateSrc, fragmentParts) {\n let out = templateSrc;\n for (const i in fragmentParts) {\n const parts = fragmentParts[i];\n const toInject = parts.join(\"\\n\");\n if (toInject.length) {\n out = out.replace(`{{${i}}}`, `//-----${i} START-----//\n${parts.join(\"\\n\")}\n//----${i} FINISH----//`);\n } else {\n out = out.replace(`{{${i}}}`, \"\");\n }\n }\n return out;\n}\n\nexport { injectBits };\n//# sourceMappingURL=injectBits.mjs.map\n","import { addBits } from './utils/addBits.mjs';\nimport { compileHooks } from './utils/compileHooks.mjs';\nimport { compileInputs } from './utils/compileInputs.mjs';\nimport { compileOutputs } from './utils/compileOutputs.mjs';\nimport { injectBits } from './utils/injectBits.mjs';\n\n\"use strict\";\nconst cacheMap = /* @__PURE__ */ Object.create(null);\nconst bitCacheMap = /* @__PURE__ */ new Map();\nlet CACHE_UID = 0;\nfunction compileHighShader({\n template,\n bits\n}) {\n const cacheId = generateCacheId(template, bits);\n if (cacheMap[cacheId])\n return cacheMap[cacheId];\n const { vertex, fragment } = compileInputsAndOutputs(template, bits);\n cacheMap[cacheId] = compileBits(vertex, fragment, bits);\n return cacheMap[cacheId];\n}\nfunction compileHighShaderGl({\n template,\n bits\n}) {\n const cacheId = generateCacheId(template, bits);\n if (cacheMap[cacheId])\n return cacheMap[cacheId];\n cacheMap[cacheId] = compileBits(template.vertex, template.fragment, bits);\n return cacheMap[cacheId];\n}\nfunction compileInputsAndOutputs(template, bits) {\n const vertexFragments = bits.map((shaderBit) => shaderBit.vertex).filter((v) => !!v);\n const fragmentFragments = bits.map((shaderBit) => shaderBit.fragment).filter((v) => !!v);\n let compiledVertex = compileInputs(vertexFragments, template.vertex, true);\n compiledVertex = compileOutputs(vertexFragments, compiledVertex);\n const compiledFragment = compileInputs(fragmentFragments, template.fragment, true);\n return {\n vertex: compiledVertex,\n fragment: compiledFragment\n };\n}\nfunction generateCacheId(template, bits) {\n return bits.map((highFragment) => {\n if (!bitCacheMap.has(highFragment)) {\n bitCacheMap.set(highFragment, CACHE_UID++);\n }\n return bitCacheMap.get(highFragment);\n }).sort((a, b) => a - b).join(\"-\") + template.vertex + template.fragment;\n}\nfunction compileBits(vertex, fragment, bits) {\n const vertexParts = compileHooks(vertex);\n const fragmentParts = compileHooks(fragment);\n bits.forEach((shaderBit) => {\n addBits(shaderBit.vertex, vertexParts, shaderBit.name);\n addBits(shaderBit.fragment, fragmentParts, shaderBit.name);\n });\n return {\n vertex: injectBits(vertex, vertexParts),\n fragment: injectBits(fragment, fragmentParts)\n };\n}\n\nexport { compileHighShader, compileHighShaderGl };\n//# sourceMappingURL=compileHighShader.mjs.map\n","\"use strict\";\nconst vertexGPUTemplate = (\n /* wgsl */\n `\n @in aPosition: vec2;\n @in aUV: vec2;\n\n @out @builtin(position) vPosition: vec4;\n @out vUV : vec2;\n @out vColor : vec4;\n\n {{header}}\n\n struct VSOutput {\n {{struct}}\n };\n\n @vertex\n fn main( {{in}} ) -> VSOutput {\n\n var worldTransformMatrix = globalUniforms.uWorldTransformMatrix;\n var modelMatrix = mat3x3(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n var position = aPosition;\n var uv = aUV;\n\n {{start}}\n \n vColor = vec4(1., 1., 1., 1.);\n\n {{main}}\n\n vUV = uv;\n\n var modelViewProjectionMatrix = globalUniforms.uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n vPosition = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n \n vColor *= globalUniforms.uWorldColorAlpha;\n\n {{end}}\n\n {{return}}\n };\n`\n);\nconst fragmentGPUTemplate = (\n /* wgsl */\n `\n @in vUV : vec2;\n @in vColor : vec4;\n \n {{header}}\n\n @fragment\n fn main(\n {{in}}\n ) -> @location(0) vec4 {\n \n {{start}}\n\n var outColor:vec4;\n \n {{main}}\n \n return outColor * vColor;\n };\n`\n);\nconst vertexGlTemplate = (\n /* glsl */\n `\n in vec2 aPosition;\n in vec2 aUV;\n\n out vec4 vColor;\n out vec2 vUV;\n\n {{header}}\n\n void main(void){\n\n mat3 worldTransformMatrix = uWorldTransformMatrix;\n mat3 modelMatrix = mat3(\n 1.0, 0.0, 0.0,\n 0.0, 1.0, 0.0,\n 0.0, 0.0, 1.0\n );\n vec2 position = aPosition;\n vec2 uv = aUV;\n \n {{start}}\n \n vColor = vec4(1.);\n \n {{main}}\n \n vUV = uv;\n \n mat3 modelViewProjectionMatrix = uProjectionMatrix * worldTransformMatrix * modelMatrix;\n\n gl_Position = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);\n\n vColor *= uWorldColorAlpha;\n\n {{end}}\n }\n`\n);\nconst fragmentGlTemplate = (\n /* glsl */\n `\n \n in vec4 vColor;\n in vec2 vUV;\n\n out vec4 finalColor;\n\n {{header}}\n\n void main(void) {\n \n {{start}}\n\n vec4 outColor;\n \n {{main}}\n \n finalColor = outColor * vColor;\n }\n`\n);\n\nexport { fragmentGPUTemplate, fragmentGlTemplate, vertexGPUTemplate, vertexGlTemplate };\n//# sourceMappingURL=defaultProgramTemplate.mjs.map\n","\"use strict\";\nconst globalUniformsBit = {\n name: \"global-uniforms-bit\",\n vertex: {\n header: (\n /* wgsl */\n `\n struct GlobalUniforms {\n uProjectionMatrix:mat3x3,\n uWorldTransformMatrix:mat3x3,\n uWorldColorAlpha: vec4,\n uResolution: vec2,\n }\n\n @group(0) @binding(0) var globalUniforms : GlobalUniforms;\n `\n )\n }\n};\nconst globalUniformsUBOBitGl = {\n name: \"global-uniforms-ubo-bit\",\n vertex: {\n header: (\n /* glsl */\n `\n uniform globalUniforms {\n mat3 uProjectionMatrix;\n mat3 uWorldTransformMatrix;\n vec4 uWorldColorAlpha;\n vec2 uResolution;\n };\n `\n )\n }\n};\nconst globalUniformsBitGl = {\n name: \"global-uniforms-bit\",\n vertex: {\n header: (\n /* glsl */\n `\n uniform mat3 uProjectionMatrix;\n uniform mat3 uWorldTransformMatrix;\n uniform vec4 uWorldColorAlpha;\n uniform vec2 uResolution;\n `\n )\n }\n};\n\nexport { globalUniformsBit, globalUniformsBitGl, globalUniformsUBOBitGl };\n//# sourceMappingURL=globalUniformsBit.mjs.map\n","import { GlProgram } from '../renderers/gl/shader/GlProgram.mjs';\nimport { GpuProgram } from '../renderers/gpu/shader/GpuProgram.mjs';\nimport { compileHighShader, compileHighShaderGl } from './compiler/compileHighShader.mjs';\nimport { fragmentGPUTemplate, vertexGPUTemplate, vertexGlTemplate, fragmentGlTemplate } from './defaultProgramTemplate.mjs';\nimport { globalUniformsBit, globalUniformsBitGl } from './shader-bits/globalUniformsBit.mjs';\n\n\"use strict\";\nfunction compileHighShaderGpuProgram({ bits, name }) {\n const source = compileHighShader({\n template: {\n fragment: fragmentGPUTemplate,\n vertex: vertexGPUTemplate\n },\n bits: [\n globalUniformsBit,\n ...bits\n ]\n });\n return GpuProgram.from({\n name,\n vertex: {\n source: source.vertex,\n entryPoint: \"main\"\n },\n fragment: {\n source: source.fragment,\n entryPoint: \"main\"\n }\n });\n}\nfunction compileHighShaderGlProgram({ bits, name }) {\n return new GlProgram({\n name,\n ...compileHighShaderGl({\n template: {\n vertex: vertexGlTemplate,\n fragment: fragmentGlTemplate\n },\n bits: [\n globalUniformsBitGl,\n ...bits\n ]\n })\n });\n}\n\nexport { compileHighShaderGlProgram, compileHighShaderGpuProgram };\n//# sourceMappingURL=compileHighShaderToProgram.mjs.map\n","\"use strict\";\nconst colorBit = {\n name: \"color-bit\",\n vertex: {\n header: (\n /* wgsl */\n `\n @in aColor: vec4;\n `\n ),\n main: (\n /* wgsl */\n `\n vColor *= vec4(aColor.rgb * aColor.a, aColor.a);\n `\n )\n }\n};\nconst colorBitGl = {\n name: \"color-bit\",\n vertex: {\n header: (\n /* glsl */\n `\n in vec4 aColor;\n `\n ),\n main: (\n /* glsl */\n `\n vColor *= vec4(aColor.rgb * aColor.a, aColor.a);\n `\n )\n }\n};\n\nexport { colorBit, colorBitGl };\n//# sourceMappingURL=colorBit.mjs.map\n","import { maxRecommendedTextures } from '../../renderers/shared/texture/utils/maxRecommendedTextures.mjs';\n\n\"use strict\";\nconst textureBatchBitGpuCache = {};\nfunction generateBindingSrc(maxTextures) {\n const src = [];\n if (maxTextures === 1) {\n src.push(\"@group(1) @binding(0) var textureSource1: texture_2d;\");\n src.push(\"@group(1) @binding(1) var textureSampler1: sampler;\");\n } else {\n let bindingIndex = 0;\n for (let i = 0; i < maxTextures; i++) {\n src.push(`@group(1) @binding(${bindingIndex++}) var textureSource${i + 1}: texture_2d;`);\n src.push(`@group(1) @binding(${bindingIndex++}) var textureSampler${i + 1}: sampler;`);\n }\n }\n return src.join(\"\\n\");\n}\nfunction generateSampleSrc(maxTextures) {\n const src = [];\n if (maxTextures === 1) {\n src.push(\"outColor = textureSampleGrad(textureSource1, textureSampler1, vUV, uvDx, uvDy);\");\n } else {\n src.push(\"switch vTextureId {\");\n for (let i = 0; i < maxTextures; i++) {\n if (i === maxTextures - 1) {\n src.push(` default:{`);\n } else {\n src.push(` case ${i}:{`);\n }\n src.push(` outColor = textureSampleGrad(textureSource${i + 1}, textureSampler${i + 1}, vUV, uvDx, uvDy);`);\n src.push(` break;}`);\n }\n src.push(`}`);\n }\n return src.join(\"\\n\");\n}\nfunction generateTextureBatchBit(maxTextures) {\n if (!textureBatchBitGpuCache[maxTextures]) {\n textureBatchBitGpuCache[maxTextures] = {\n name: \"texture-batch-bit\",\n vertex: {\n header: `\n @in aTextureIdAndRound: vec2;\n @out @interpolate(flat) vTextureId : u32;\n `,\n main: `\n vTextureId = aTextureIdAndRound.y;\n `,\n end: `\n if(aTextureIdAndRound.x == 1)\n {\n vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);\n }\n `\n },\n fragment: {\n header: `\n @in @interpolate(flat) vTextureId: u32;\n \n ${generateBindingSrc(maxRecommendedTextures())}\n `,\n main: `\n var uvDx = dpdx(vUV);\n var uvDy = dpdy(vUV);\n \n ${generateSampleSrc(maxRecommendedTextures())}\n `\n }\n };\n }\n return textureBatchBitGpuCache[maxTextures];\n}\nconst textureBatchBitGlCache = {};\nfunction generateSampleGlSrc(maxTextures) {\n const src = [];\n for (let i = 0; i < maxTextures; i++) {\n if (i > 0) {\n src.push(\"else\");\n }\n if (i < maxTextures - 1) {\n src.push(`if(vTextureId < ${i}.5)`);\n }\n src.push(\"{\");\n src.push(`\toutColor = texture(uTextures[${i}], vUV);`);\n src.push(\"}\");\n }\n return src.join(\"\\n\");\n}\nfunction generateTextureBatchBitGl(maxTextures) {\n if (!textureBatchBitGlCache[maxTextures]) {\n textureBatchBitGlCache[maxTextures] = {\n name: \"texture-batch-bit\",\n vertex: {\n header: `\n in vec2 aTextureIdAndRound;\n out float vTextureId;\n \n `,\n main: `\n vTextureId = aTextureIdAndRound.y;\n `,\n end: `\n if(aTextureIdAndRound.x == 1.)\n {\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n }\n `\n },\n fragment: {\n header: `\n in float vTextureId;\n \n uniform sampler2D uTextures[${maxTextures}];\n \n `,\n main: `\n \n ${generateSampleGlSrc(maxRecommendedTextures())}\n `\n }\n };\n }\n return textureBatchBitGlCache[maxTextures];\n}\n\nexport { generateTextureBatchBit, generateTextureBatchBitGl };\n//# sourceMappingURL=generateTextureBatchBit.mjs.map\n","\"use strict\";\nconst localUniformBit = {\n name: \"local-uniform-bit\",\n vertex: {\n header: (\n /* wgsl */\n `\n\n struct LocalUniforms {\n uTransformMatrix:mat3x3,\n uColor:vec4,\n uRound:f32,\n }\n\n @group(1) @binding(0) var localUniforms : LocalUniforms;\n `\n ),\n main: (\n /* wgsl */\n `\n vColor *= localUniforms.uColor;\n modelMatrix *= localUniforms.uTransformMatrix;\n `\n ),\n end: (\n /* wgsl */\n `\n if(localUniforms.uRound == 1)\n {\n vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);\n }\n `\n )\n }\n};\nconst localUniformBitGroup2 = {\n ...localUniformBit,\n vertex: {\n ...localUniformBit.vertex,\n // replace the group!\n header: localUniformBit.vertex.header.replace(\"group(1)\", \"group(2)\")\n }\n};\nconst localUniformBitGl = {\n name: \"local-uniform-bit\",\n vertex: {\n header: (\n /* glsl */\n `\n\n uniform mat3 uTransformMatrix;\n uniform vec4 uColor;\n uniform float uRound;\n `\n ),\n main: (\n /* glsl */\n `\n vColor *= uColor;\n modelMatrix = uTransformMatrix;\n `\n ),\n end: (\n /* glsl */\n `\n if(uRound == 1.)\n {\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n }\n `\n )\n }\n};\n\nexport { localUniformBit, localUniformBitGl, localUniformBitGroup2 };\n//# sourceMappingURL=localUniformBit.mjs.map\n","\"use strict\";\nconst roundPixelsBit = {\n name: \"round-pixels-bit\",\n vertex: {\n header: (\n /* wgsl */\n `\n fn roundPixels(position: vec2, targetSize: vec2) -> vec2 \n {\n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n }\n `\n )\n }\n};\nconst roundPixelsBitGl = {\n name: \"round-pixels-bit\",\n vertex: {\n header: (\n /* glsl */\n ` \n vec2 roundPixels(vec2 position, vec2 targetSize)\n { \n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\n }\n `\n )\n }\n};\n\nexport { roundPixelsBit, roundPixelsBitGl };\n//# sourceMappingURL=roundPixelsBit.mjs.map\n","import { UniformGroup } from '../../shared/shader/UniformGroup.mjs';\n\n\"use strict\";\nconst batchSamplersUniformGroupHash = {};\nfunction getBatchSamplersUniformGroup(maxTextures) {\n let batchSamplersUniformGroup = batchSamplersUniformGroupHash[maxTextures];\n if (batchSamplersUniformGroup)\n return batchSamplersUniformGroup;\n const sampleValues = new Int32Array(maxTextures);\n for (let i = 0; i < maxTextures; i++) {\n sampleValues[i] = i;\n }\n batchSamplersUniformGroup = batchSamplersUniformGroupHash[maxTextures] = new UniformGroup({\n uTextures: { value: sampleValues, type: `i32`, size: maxTextures }\n }, { isStatic: true });\n return batchSamplersUniformGroup;\n}\n\nexport { getBatchSamplersUniformGroup };\n//# sourceMappingURL=getBatchSamplersUniformGroup.mjs.map\n","import { DOMAdapter } from '../../../../environment/adapter.mjs';\nimport { nextPow2 } from '../../../../maths/misc/pow2.mjs';\n\n\"use strict\";\nclass CanvasPoolClass {\n constructor(canvasOptions) {\n this._canvasPool = /* @__PURE__ */ Object.create(null);\n this.canvasOptions = canvasOptions || {};\n this.enableFullScreen = false;\n }\n /**\n * Creates texture with params that were specified in pool constructor.\n * @param pixelWidth - Width of texture in pixels.\n * @param pixelHeight - Height of texture in pixels.\n */\n _createCanvasAndContext(pixelWidth, pixelHeight) {\n const canvas = DOMAdapter.get().createCanvas();\n canvas.width = pixelWidth;\n canvas.height = pixelHeight;\n const context = canvas.getContext(\"2d\");\n return { canvas, context };\n }\n /**\n * Gets a Power-of-Two render texture or fullScreen texture\n * @param minWidth - The minimum width of the render texture.\n * @param minHeight - The minimum height of the render texture.\n * @param resolution - The resolution of the render texture.\n * @returns The new render texture.\n */\n getOptimalCanvasAndContext(minWidth, minHeight, resolution = 1) {\n minWidth = Math.ceil(minWidth * resolution - 1e-6);\n minHeight = Math.ceil(minHeight * resolution - 1e-6);\n minWidth = nextPow2(minWidth);\n minHeight = nextPow2(minHeight);\n const key = (minWidth << 17) + (minHeight << 1);\n if (!this._canvasPool[key]) {\n this._canvasPool[key] = [];\n }\n let canvasAndContext = this._canvasPool[key].pop();\n if (!canvasAndContext) {\n canvasAndContext = this._createCanvasAndContext(minWidth, minHeight);\n }\n return canvasAndContext;\n }\n /**\n * Place a render texture back into the pool.\n * @param canvasAndContext\n */\n returnCanvasAndContext(canvasAndContext) {\n const { width, height } = canvasAndContext.canvas;\n const key = (width << 17) + (height << 1);\n this._canvasPool[key].push(canvasAndContext);\n }\n clear() {\n this._canvasPool = {};\n }\n}\nconst CanvasPool = new CanvasPoolClass();\n\nexport { CanvasPool, CanvasPoolClass };\n//# sourceMappingURL=CanvasPool.mjs.map\n","\"use strict\";\nfunction colorToUniform(rgb, alpha, out, offset) {\n out[offset++] = (rgb >> 16 & 255) / 255;\n out[offset++] = (rgb >> 8 & 255) / 255;\n out[offset++] = (rgb & 255) / 255;\n out[offset++] = alpha;\n}\nfunction color32BitToUniform(abgr, out, offset) {\n const alpha = (abgr >> 24 & 255) / 255;\n out[offset++] = (abgr & 255) / 255 * alpha;\n out[offset++] = (abgr >> 8 & 255) / 255 * alpha;\n out[offset++] = (abgr >> 16 & 255) / 255 * alpha;\n out[offset++] = alpha;\n}\n\nexport { color32BitToUniform, colorToUniform };\n//# sourceMappingURL=colorToUniform.mjs.map\n","import { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { State } from '../../../rendering/renderers/shared/state/State.mjs';\nimport { BigPool } from '../../../utils/pool/PoolGroup.mjs';\nimport { color32BitToUniform } from '../gpu/colorToUniform.mjs';\nimport { BatchableGraphics } from './BatchableGraphics.mjs';\n\n\"use strict\";\nclass GraphicsPipe {\n constructor(renderer, adaptor) {\n this.state = State.for2d();\n // batchable graphics list, used to render batches\n this._graphicsBatchesHash = /* @__PURE__ */ Object.create(null);\n this.renderer = renderer;\n this._adaptor = adaptor;\n this._adaptor.init();\n }\n validateRenderable(graphics) {\n const context = graphics.context;\n const wasBatched = !!this._graphicsBatchesHash[graphics.uid];\n const gpuContext = this.renderer.graphicsContext.updateGpuContext(context);\n if (gpuContext.isBatchable || wasBatched !== gpuContext.isBatchable) {\n return true;\n }\n return false;\n }\n addRenderable(graphics, instructionSet) {\n const gpuContext = this.renderer.graphicsContext.updateGpuContext(graphics.context);\n if (graphics._didGraphicsUpdate) {\n graphics._didGraphicsUpdate = false;\n this._rebuild(graphics);\n }\n if (gpuContext.isBatchable) {\n this._addToBatcher(graphics, instructionSet);\n } else {\n this.renderer.renderPipes.batch.break(instructionSet);\n instructionSet.add(graphics);\n }\n }\n updateRenderable(graphics) {\n const batches = this._graphicsBatchesHash[graphics.uid];\n if (batches) {\n for (let i = 0; i < batches.length; i++) {\n const batch = batches[i];\n batch.batcher.updateElement(batch);\n }\n }\n }\n destroyRenderable(graphics) {\n if (this._graphicsBatchesHash[graphics.uid]) {\n this._removeBatchForRenderable(graphics.uid);\n }\n }\n execute(graphics) {\n if (!graphics.isRenderable)\n return;\n const renderer = this.renderer;\n const context = graphics.context;\n const contextSystem = renderer.graphicsContext;\n if (!contextSystem.getGpuContext(context).batches.length) {\n return;\n }\n const shader = context.customShader || this._adaptor.shader;\n this.state.blendMode = graphics.groupBlendMode;\n const localUniforms = shader.resources.localUniforms.uniforms;\n localUniforms.uTransformMatrix = graphics.groupTransform;\n localUniforms.uRound = renderer._roundPixels | graphics._roundPixels;\n color32BitToUniform(\n graphics.groupColorAlpha,\n localUniforms.uColor,\n 0\n );\n this._adaptor.execute(this, graphics);\n }\n _rebuild(graphics) {\n const wasBatched = !!this._graphicsBatchesHash[graphics.uid];\n const gpuContext = this.renderer.graphicsContext.updateGpuContext(graphics.context);\n if (wasBatched) {\n this._removeBatchForRenderable(graphics.uid);\n }\n if (gpuContext.isBatchable) {\n this._initBatchesForRenderable(graphics);\n }\n graphics.batched = gpuContext.isBatchable;\n }\n _addToBatcher(graphics, instructionSet) {\n const batchPipe = this.renderer.renderPipes.batch;\n const batches = this._getBatchesForRenderable(graphics);\n for (let i = 0; i < batches.length; i++) {\n const batch = batches[i];\n batchPipe.addToBatch(batch, instructionSet);\n }\n }\n _getBatchesForRenderable(graphics) {\n return this._graphicsBatchesHash[graphics.uid] || this._initBatchesForRenderable(graphics);\n }\n _initBatchesForRenderable(graphics) {\n const context = graphics.context;\n const gpuContext = this.renderer.graphicsContext.getGpuContext(context);\n const roundPixels = this.renderer._roundPixels | graphics._roundPixels;\n const batches = gpuContext.batches.map((batch) => {\n const batchClone = BigPool.get(BatchableGraphics);\n batch.copyTo(batchClone);\n batchClone.renderable = graphics;\n batchClone.roundPixels = roundPixels;\n return batchClone;\n });\n if (this._graphicsBatchesHash[graphics.uid] === void 0) {\n graphics.on(\"destroyed\", () => {\n this.destroyRenderable(graphics);\n });\n }\n this._graphicsBatchesHash[graphics.uid] = batches;\n return batches;\n }\n _removeBatchForRenderable(graphicsUid) {\n this._graphicsBatchesHash[graphicsUid].forEach((batch) => {\n BigPool.return(batch);\n });\n this._graphicsBatchesHash[graphicsUid] = null;\n }\n destroy() {\n this.renderer = null;\n this._adaptor.destroy();\n this._adaptor = null;\n this.state = null;\n for (const i in this._graphicsBatchesHash) {\n this._removeBatchForRenderable(i);\n }\n this._graphicsBatchesHash = null;\n }\n}\n/** @ignore */\nGraphicsPipe.extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes\n ],\n name: \"graphics\"\n};\n\nexport { GraphicsPipe };\n//# sourceMappingURL=GraphicsPipe.mjs.map\n","import { extensions } from '../../extensions/Extensions.mjs';\nimport { GraphicsContextSystem } from './shared/GraphicsContextSystem.mjs';\nimport { GraphicsPipe } from './shared/GraphicsPipe.mjs';\n\n\"use strict\";\nextensions.add(GraphicsPipe);\nextensions.add(GraphicsContextSystem);\n//# sourceMappingURL=init.mjs.map\n","import { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { BindGroup } from '../../../rendering/renderers/gpu/shader/BindGroup.mjs';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup.mjs';\nimport { BigPool } from '../../../utils/pool/PoolGroup.mjs';\nimport { color32BitToUniform } from '../../graphics/gpu/colorToUniform.mjs';\nimport { BatchableMesh } from './BatchableMesh.mjs';\n\n\"use strict\";\nclass MeshPipe {\n constructor(renderer, adaptor) {\n this.localUniforms = new UniformGroup({\n uTransformMatrix: { value: new Matrix(), type: \"mat3x3\" },\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: \"vec4\" },\n uRound: { value: 0, type: \"f32\" }\n });\n this.localUniformsBindGroup = new BindGroup({\n 0: this.localUniforms\n });\n this._meshDataHash = /* @__PURE__ */ Object.create(null);\n this._gpuBatchableMeshHash = /* @__PURE__ */ Object.create(null);\n this.renderer = renderer;\n this._adaptor = adaptor;\n this._adaptor.init();\n }\n validateRenderable(mesh) {\n const meshData = this._getMeshData(mesh);\n const wasBatched = meshData.batched;\n const isBatched = mesh.batched;\n meshData.batched = isBatched;\n if (wasBatched !== isBatched) {\n return true;\n } else if (isBatched) {\n const geometry = mesh._geometry;\n if (geometry.indices.length !== meshData.indexSize || geometry.positions.length !== meshData.vertexSize) {\n meshData.indexSize = geometry.indices.length;\n meshData.vertexSize = geometry.positions.length;\n return true;\n }\n const batchableMesh = this._getBatchableMesh(mesh);\n const texture = mesh.texture;\n if (batchableMesh.texture._source !== texture._source) {\n if (batchableMesh.texture._source !== texture._source) {\n return !batchableMesh.batcher.checkAndUpdateTexture(batchableMesh, texture);\n }\n }\n }\n return false;\n }\n addRenderable(mesh, instructionSet) {\n const batcher = this.renderer.renderPipes.batch;\n const { batched } = this._getMeshData(mesh);\n if (batched) {\n const gpuBatchableMesh = this._getBatchableMesh(mesh);\n gpuBatchableMesh.texture = mesh._texture;\n gpuBatchableMesh.geometry = mesh._geometry;\n batcher.addToBatch(gpuBatchableMesh);\n } else {\n batcher.break(instructionSet);\n instructionSet.add({\n renderPipeId: \"mesh\",\n mesh\n });\n }\n }\n updateRenderable(mesh) {\n if (mesh.batched) {\n const gpuBatchableMesh = this._gpuBatchableMeshHash[mesh.uid];\n gpuBatchableMesh.texture = mesh._texture;\n gpuBatchableMesh.geometry = mesh._geometry;\n gpuBatchableMesh.batcher.updateElement(gpuBatchableMesh);\n }\n }\n destroyRenderable(mesh) {\n this._meshDataHash[mesh.uid] = null;\n const gpuMesh = this._gpuBatchableMeshHash[mesh.uid];\n if (gpuMesh) {\n BigPool.return(gpuMesh);\n this._gpuBatchableMeshHash[mesh.uid] = null;\n }\n }\n execute({ mesh }) {\n if (!mesh.isRenderable)\n return;\n mesh.state.blendMode = mesh.groupBlendMode;\n const localUniforms = this.localUniforms;\n localUniforms.uniforms.uTransformMatrix = mesh.groupTransform;\n localUniforms.uniforms.uRound = this.renderer._roundPixels | mesh._roundPixels;\n localUniforms.update();\n color32BitToUniform(\n mesh.groupColorAlpha,\n localUniforms.uniforms.uColor,\n 0\n );\n this._adaptor.execute(this, mesh);\n }\n _getMeshData(mesh) {\n return this._meshDataHash[mesh.uid] || this._initMeshData(mesh);\n }\n _initMeshData(mesh) {\n this._meshDataHash[mesh.uid] = {\n batched: mesh.batched,\n indexSize: mesh._geometry.indices?.length,\n vertexSize: mesh._geometry.positions?.length\n };\n mesh.on(\"destroyed\", () => {\n this.destroyRenderable(mesh);\n });\n return this._meshDataHash[mesh.uid];\n }\n _getBatchableMesh(mesh) {\n return this._gpuBatchableMeshHash[mesh.uid] || this._initBatchableMesh(mesh);\n }\n _initBatchableMesh(mesh) {\n const gpuMesh = BigPool.get(BatchableMesh);\n gpuMesh.mesh = mesh;\n gpuMesh.texture = mesh._texture;\n gpuMesh.roundPixels = this.renderer._roundPixels | mesh._roundPixels;\n this._gpuBatchableMeshHash[mesh.uid] = gpuMesh;\n gpuMesh.mesh = mesh;\n return gpuMesh;\n }\n destroy() {\n for (const i in this._gpuBatchableMeshHash) {\n if (this._gpuBatchableMeshHash[i]) {\n BigPool.return(this._gpuBatchableMeshHash[i]);\n }\n }\n this._gpuBatchableMeshHash = null;\n this._meshDataHash = null;\n this.localUniforms = null;\n this.localUniformsBindGroup = null;\n this._adaptor.destroy();\n this._adaptor = null;\n this.renderer = null;\n }\n}\n/** @ignore */\nMeshPipe.extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes\n ],\n name: \"mesh\"\n};\n\nexport { MeshPipe };\n//# sourceMappingURL=MeshPipe.mjs.map\n","import { extensions } from '../../extensions/Extensions.mjs';\nimport { MeshPipe } from './shared/MeshPipe.mjs';\n\n\"use strict\";\nextensions.add(MeshPipe);\n//# sourceMappingURL=init.mjs.map\n","\"use strict\";\nclass BatchableMesh {\n constructor() {\n this.batcher = null;\n this.batch = null;\n this.roundPixels = 0;\n this._uvUpdateId = -1;\n this._textureMatrixUpdateId = -1;\n }\n get blendMode() {\n return this.mesh.groupBlendMode;\n }\n reset() {\n this.mesh = null;\n this.texture = null;\n this.batcher = null;\n this.batch = null;\n }\n packIndex(indexBuffer, index, indicesOffset) {\n const indices = this.geometry.indices;\n for (let i = 0; i < indices.length; i++) {\n indexBuffer[index++] = indices[i] + indicesOffset;\n }\n }\n packAttributes(float32View, uint32View, index, textureId) {\n const mesh = this.mesh;\n const geometry = this.geometry;\n const wt = mesh.groupTransform;\n const textureIdAndRound = textureId << 16 | this.roundPixels & 65535;\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n const positions = geometry.positions;\n const uvBuffer = geometry.getBuffer(\"aUV\");\n const uvs = uvBuffer.data;\n let transformedUvs = uvs;\n const textureMatrix = this.texture.textureMatrix;\n if (!textureMatrix.isSimple) {\n transformedUvs = this._transformedUvs;\n if (this._textureMatrixUpdateId !== textureMatrix._updateID || this._uvUpdateId !== uvBuffer._updateID) {\n if (!transformedUvs || transformedUvs.length < uvs.length) {\n transformedUvs = this._transformedUvs = new Float32Array(uvs.length);\n }\n this._textureMatrixUpdateId = textureMatrix._updateID;\n this._uvUpdateId = uvBuffer._updateID;\n textureMatrix.multiplyUvs(uvs, transformedUvs);\n }\n }\n const abgr = mesh.groupColorAlpha;\n for (let i = 0; i < positions.length; i += 2) {\n const x = positions[i];\n const y = positions[i + 1];\n float32View[index] = a * x + c * y + tx;\n float32View[index + 1] = b * x + d * y + ty;\n float32View[index + 2] = transformedUvs[i];\n float32View[index + 3] = transformedUvs[i + 1];\n uint32View[index + 4] = abgr;\n uint32View[index + 5] = textureIdAndRound;\n index += 6;\n }\n }\n get vertexSize() {\n return this.geometry.positions.length / 2;\n }\n get indexSize() {\n return this.geometry.indices.length;\n }\n}\n\nexport { BatchableMesh };\n//# sourceMappingURL=BatchableMesh.mjs.map\n","import { Buffer } from '../../../rendering/renderers/shared/buffer/Buffer.mjs';\nimport { BufferUsage } from '../../../rendering/renderers/shared/buffer/const.mjs';\nimport { Geometry } from '../../../rendering/renderers/shared/geometry/Geometry.mjs';\nimport { deprecation, v8_0_0 } from '../../../utils/logging/deprecation.mjs';\n\n\"use strict\";\nconst _MeshGeometry = class _MeshGeometry extends Geometry {\n constructor(...args) {\n let options = args[0] ?? {};\n if (options instanceof Float32Array) {\n deprecation(v8_0_0, \"use new MeshGeometry({ positions, uvs, indices }) instead\");\n options = {\n positions: options,\n uvs: args[1],\n indices: args[2]\n };\n }\n options = { ..._MeshGeometry.defaultOptions, ...options };\n const positions = options.positions || new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);\n const uvs = options.uvs || new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);\n const indices = options.indices || new Uint32Array([0, 1, 2, 0, 2, 3]);\n const shrinkToFit = options.shrinkBuffersToFit;\n const positionBuffer = new Buffer({\n data: positions,\n label: \"attribute-mesh-positions\",\n shrinkToFit,\n usage: BufferUsage.VERTEX | BufferUsage.COPY_DST\n });\n const uvBuffer = new Buffer({\n data: uvs,\n label: \"attribute-mesh-uvs\",\n shrinkToFit,\n usage: BufferUsage.VERTEX | BufferUsage.COPY_DST\n });\n const indexBuffer = new Buffer({\n data: indices,\n label: \"index-mesh-buffer\",\n shrinkToFit,\n usage: BufferUsage.INDEX | BufferUsage.COPY_DST\n });\n super({\n attributes: {\n aPosition: {\n buffer: positionBuffer,\n format: \"float32x2\",\n stride: 2 * 4,\n offset: 0\n },\n aUV: {\n buffer: uvBuffer,\n format: \"float32x2\",\n stride: 2 * 4,\n offset: 0\n }\n },\n indexBuffer,\n topology: options.topology\n });\n this.batchMode = \"auto\";\n }\n /** The positions of the mesh. */\n get positions() {\n return this.attributes.aPosition.buffer.data;\n }\n set positions(value) {\n this.attributes.aPosition.buffer.data = value;\n }\n /** The UVs of the mesh. */\n get uvs() {\n return this.attributes.aUV.buffer.data;\n }\n set uvs(value) {\n this.attributes.aUV.buffer.data = value;\n }\n /** The indices of the mesh. */\n get indices() {\n return this.indexBuffer.data;\n }\n set indices(value) {\n this.indexBuffer.data = value;\n }\n};\n_MeshGeometry.defaultOptions = {\n topology: \"triangle-list\",\n shrinkBuffersToFit: false\n};\nlet MeshGeometry = _MeshGeometry;\n\nexport { MeshGeometry };\n//# sourceMappingURL=MeshGeometry.mjs.map\n","import { deprecation, v8_0_0 } from '../../utils/logging/deprecation.mjs';\nimport { MeshGeometry } from '../mesh/shared/MeshGeometry.mjs';\n\n\"use strict\";\nconst _PlaneGeometry = class _PlaneGeometry extends MeshGeometry {\n constructor(...args) {\n super({});\n let options = args[0] ?? {};\n if (typeof options === \"number\") {\n deprecation(v8_0_0, \"PlaneGeometry constructor changed please use { width, height, verticesX, verticesY } instead\");\n options = {\n width: options,\n height: args[1],\n verticesX: args[2],\n verticesY: args[3]\n };\n }\n this.build(options);\n }\n /**\n * Refreshes plane coordinates\n * @param options - Options to be applied to plane geometry\n */\n build(options) {\n options = { ..._PlaneGeometry.defaultOptions, ...options };\n this.verticesX = this.verticesX ?? options.verticesX;\n this.verticesY = this.verticesY ?? options.verticesY;\n this.width = this.width ?? options.width;\n this.height = this.height ?? options.height;\n const total = this.verticesX * this.verticesY;\n const verts = [];\n const uvs = [];\n const indices = [];\n const verticesX = this.verticesX - 1;\n const verticesY = this.verticesY - 1;\n const sizeX = this.width / verticesX;\n const sizeY = this.height / verticesY;\n for (let i = 0; i < total; i++) {\n const x = i % this.verticesX;\n const y = i / this.verticesX | 0;\n verts.push(x * sizeX, y * sizeY);\n uvs.push(x / verticesX, y / verticesY);\n }\n const totalSub = verticesX * verticesY;\n for (let i = 0; i < totalSub; i++) {\n const xpos = i % verticesX;\n const ypos = i / verticesX | 0;\n const value = ypos * this.verticesX + xpos;\n const value2 = ypos * this.verticesX + xpos + 1;\n const value3 = (ypos + 1) * this.verticesX + xpos;\n const value4 = (ypos + 1) * this.verticesX + xpos + 1;\n indices.push(\n value,\n value2,\n value3,\n value2,\n value4,\n value3\n );\n }\n this.buffers[0].data = new Float32Array(verts);\n this.buffers[1].data = new Float32Array(uvs);\n this.indexBuffer.data = new Uint32Array(indices);\n this.buffers[0].update();\n this.buffers[1].update();\n this.indexBuffer.update();\n }\n};\n_PlaneGeometry.defaultOptions = {\n width: 100,\n height: 100,\n verticesX: 10,\n verticesY: 10\n};\nlet PlaneGeometry = _PlaneGeometry;\n\nexport { PlaneGeometry };\n//# sourceMappingURL=PlaneGeometry.mjs.map\n","import { PlaneGeometry } from '../mesh-plane/PlaneGeometry.mjs';\n\n\"use strict\";\nconst _NineSliceGeometry = class _NineSliceGeometry extends PlaneGeometry {\n constructor(options = {}) {\n options = { ..._NineSliceGeometry.defaultOptions, ...options };\n super({\n width: options.width,\n height: options.height,\n verticesX: 4,\n verticesY: 4\n });\n this.update(options);\n }\n /**\n * Updates the NineSliceGeometry with the options.\n * @param options - The options of the NineSliceGeometry.\n */\n update(options) {\n this.width = options.width ?? this.width;\n this.height = options.height ?? this.height;\n this._originalWidth = options.originalWidth ?? this._originalWidth;\n this._originalHeight = options.originalHeight ?? this._originalHeight;\n this._leftWidth = options.leftWidth ?? this._leftWidth;\n this._rightWidth = options.rightWidth ?? this._rightWidth;\n this._topHeight = options.topHeight ?? this._topHeight;\n this._bottomHeight = options.bottomHeight ?? this._bottomHeight;\n this.updateUvs();\n this.updatePositions();\n }\n /** Updates the positions of the vertices. */\n updatePositions() {\n const positions = this.positions;\n const w = this._leftWidth + this._rightWidth;\n const scaleW = this.width > w ? 1 : this.width / w;\n const h = this._topHeight + this._bottomHeight;\n const scaleH = this.height > h ? 1 : this.height / h;\n const scale = Math.min(scaleW, scaleH);\n positions[9] = positions[11] = positions[13] = positions[15] = this._topHeight * scale;\n positions[17] = positions[19] = positions[21] = positions[23] = this.height - this._bottomHeight * scale;\n positions[25] = positions[27] = positions[29] = positions[31] = this.height;\n positions[2] = positions[10] = positions[18] = positions[26] = this._leftWidth * scale;\n positions[4] = positions[12] = positions[20] = positions[28] = this.width - this._rightWidth * scale;\n positions[6] = positions[14] = positions[22] = positions[30] = this.width;\n this.getBuffer(\"aPosition\").update();\n }\n /** Updates the UVs of the vertices. */\n updateUvs() {\n const uvs = this.uvs;\n uvs[0] = uvs[8] = uvs[16] = uvs[24] = 0;\n uvs[1] = uvs[3] = uvs[5] = uvs[7] = 0;\n uvs[6] = uvs[14] = uvs[22] = uvs[30] = 1;\n uvs[25] = uvs[27] = uvs[29] = uvs[31] = 1;\n const _uvw = 1 / this._originalWidth;\n const _uvh = 1 / this._originalHeight;\n uvs[2] = uvs[10] = uvs[18] = uvs[26] = _uvw * this._leftWidth;\n uvs[9] = uvs[11] = uvs[13] = uvs[15] = _uvh * this._topHeight;\n uvs[4] = uvs[12] = uvs[20] = uvs[28] = 1 - _uvw * this._rightWidth;\n uvs[17] = uvs[19] = uvs[21] = uvs[23] = 1 - _uvh * this._bottomHeight;\n this.getBuffer(\"aUV\").update();\n }\n};\n/** The default options for the NineSliceGeometry. */\n_NineSliceGeometry.defaultOptions = {\n /** The width of the NineSlicePlane, setting this will actually modify the vertices and UV's of this plane. */\n width: 100,\n /** The height of the NineSlicePlane, setting this will actually modify the vertices and UV's of this plane. */\n height: 100,\n /** The width of the left column. */\n leftWidth: 10,\n /** The height of the top row. */\n topHeight: 10,\n /** The width of the right column. */\n rightWidth: 10,\n /** The height of the bottom row. */\n bottomHeight: 10,\n /** The original width of the texture */\n originalWidth: 100,\n /** The original height of the texture */\n originalHeight: 100\n};\nlet NineSliceGeometry = _NineSliceGeometry;\n\nexport { NineSliceGeometry };\n//# sourceMappingURL=NineSliceGeometry.mjs.map\n","import { ExtensionType } from '../../extensions/Extensions.mjs';\nimport { BigPool } from '../../utils/pool/PoolGroup.mjs';\nimport { BatchableMesh } from '../mesh/shared/BatchableMesh.mjs';\nimport { NineSliceGeometry } from './NineSliceGeometry.mjs';\n\n\"use strict\";\nclass NineSliceSpritePipe {\n constructor(renderer) {\n this._gpuSpriteHash = /* @__PURE__ */ Object.create(null);\n this._renderer = renderer;\n }\n addRenderable(sprite, _instructionSet) {\n const gpuSprite = this._getGpuSprite(sprite);\n if (sprite._didSpriteUpdate)\n this._updateBatchableSprite(sprite, gpuSprite);\n this._renderer.renderPipes.batch.addToBatch(gpuSprite);\n }\n updateRenderable(sprite) {\n const gpuSprite = this._gpuSpriteHash[sprite.uid];\n if (sprite._didSpriteUpdate)\n this._updateBatchableSprite(sprite, gpuSprite);\n gpuSprite.batcher.updateElement(gpuSprite);\n }\n validateRenderable(sprite) {\n const texture = sprite._texture;\n const gpuSprite = this._getGpuSprite(sprite);\n if (gpuSprite.texture._source !== texture._source) {\n return !gpuSprite.batcher.checkAndUpdateTexture(gpuSprite, texture);\n }\n return false;\n }\n destroyRenderable(sprite) {\n const batchableSprite = this._gpuSpriteHash[sprite.uid];\n BigPool.return(batchableSprite);\n this._gpuSpriteHash[sprite.uid] = null;\n }\n _updateBatchableSprite(sprite, batchableSprite) {\n sprite._didSpriteUpdate = false;\n batchableSprite.geometry.update(sprite);\n batchableSprite.texture = sprite._texture;\n }\n _getGpuSprite(sprite) {\n return this._gpuSpriteHash[sprite.uid] || this._initGPUSprite(sprite);\n }\n _initGPUSprite(sprite) {\n const batchableMesh = new BatchableMesh();\n batchableMesh.geometry = new NineSliceGeometry();\n batchableMesh.mesh = sprite;\n batchableMesh.texture = sprite._texture;\n batchableMesh.roundPixels = this._renderer._roundPixels | sprite._roundPixels;\n this._gpuSpriteHash[sprite.uid] = batchableMesh;\n sprite.on(\"destroyed\", () => {\n this.destroyRenderable(sprite);\n });\n return batchableMesh;\n }\n destroy() {\n for (const i in this._gpuSpriteHash) {\n const batchableMesh = this._gpuSpriteHash[i];\n batchableMesh.geometry.destroy();\n }\n this._gpuSpriteHash = null;\n this._renderer = null;\n }\n}\n/** @ignore */\nNineSliceSpritePipe.extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes\n ],\n name: \"nineSliceSprite\"\n};\n\nexport { NineSliceSpritePipe };\n//# sourceMappingURL=NineSliceSpritePipe.mjs.map\n","import { extensions } from '../../extensions/Extensions.mjs';\nimport { NineSliceSpritePipe } from './NineSliceSpritePipe.mjs';\n\n\"use strict\";\nextensions.add(NineSliceSpritePipe);\n//# sourceMappingURL=init.mjs.map\n","\"use strict\";\nconst tilingBit = {\n name: \"tiling-bit\",\n vertex: {\n header: (\n /* wgsl */\n `\n struct TilingUniforms {\n uMapCoord:mat3x3,\n uClampFrame:vec4,\n uClampOffset:vec2,\n uTextureTransform:mat3x3,\n uSizeAnchor:vec4\n };\n\n @group(2) @binding(0) var tilingUniforms: TilingUniforms;\n @group(2) @binding(1) var uTexture: texture_2d;\n @group(2) @binding(2) var uSampler: sampler;\n `\n ),\n main: (\n /* wgsl */\n `\n uv = (tilingUniforms.uTextureTransform * vec3(uv, 1.0)).xy;\n\n position = (position - tilingUniforms.uSizeAnchor.zw) * tilingUniforms.uSizeAnchor.xy;\n `\n )\n },\n fragment: {\n header: (\n /* wgsl */\n `\n struct TilingUniforms {\n uMapCoord:mat3x3,\n uClampFrame:vec4,\n uClampOffset:vec2,\n uTextureTransform:mat3x3,\n uSizeAnchor:vec4\n };\n\n @group(2) @binding(0) var tilingUniforms: TilingUniforms;\n @group(2) @binding(1) var uTexture: texture_2d;\n @group(2) @binding(2) var uSampler: sampler;\n `\n ),\n main: (\n /* wgsl */\n `\n\n var coord = vUV + ceil(tilingUniforms.uClampOffset - vUV);\n coord = (tilingUniforms.uMapCoord * vec3(coord, 1.0)).xy;\n var unclamped = coord;\n coord = clamp(coord, tilingUniforms.uClampFrame.xy, tilingUniforms.uClampFrame.zw);\n\n var bias = 0.;\n\n if(unclamped.x == coord.x && unclamped.y == coord.y)\n {\n bias = -32.;\n } \n\n outColor = textureSampleBias(uTexture, uSampler, coord, bias);\n `\n )\n }\n};\nconst tilingBitGl = {\n name: \"tiling-bit\",\n vertex: {\n header: (\n /* glsl */\n `\n uniform mat3 uTextureTransform;\n uniform vec4 uSizeAnchor;\n \n `\n ),\n main: (\n /* glsl */\n `\n uv = (uTextureTransform * vec3(aUV, 1.0)).xy;\n\n position = (position - uSizeAnchor.zw) * uSizeAnchor.xy;\n `\n )\n },\n fragment: {\n header: (\n /* glsl */\n `\n uniform sampler2D uTexture;\n uniform mat3 uMapCoord;\n uniform vec4 uClampFrame;\n uniform vec2 uClampOffset;\n `\n ),\n main: (\n /* glsl */\n `\n\n vec2 coord = vUV + ceil(uClampOffset - vUV);\n coord = (uMapCoord * vec3(coord, 1.0)).xy;\n vec2 unclamped = coord;\n coord = clamp(coord, uClampFrame.xy, uClampFrame.zw);\n \n outColor = texture(uTexture, coord, unclamped == coord ? 0.0 : -32.0);// lod-bias very negative to force lod 0\n \n `\n )\n }\n};\n\nexport { tilingBit, tilingBitGl };\n//# sourceMappingURL=tilingBit.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { compileHighShaderGpuProgram, compileHighShaderGlProgram } from '../../../rendering/high-shader/compileHighShaderToProgram.mjs';\nimport { localUniformBit, localUniformBitGl } from '../../../rendering/high-shader/shader-bits/localUniformBit.mjs';\nimport { roundPixelsBit, roundPixelsBitGl } from '../../../rendering/high-shader/shader-bits/roundPixelsBit.mjs';\nimport { Shader } from '../../../rendering/renderers/shared/shader/Shader.mjs';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup.mjs';\nimport { Texture } from '../../../rendering/renderers/shared/texture/Texture.mjs';\nimport { tilingBit, tilingBitGl } from './tilingBit.mjs';\n\n\"use strict\";\nlet gpuProgram;\nlet glProgram;\nclass TilingSpriteShader extends Shader {\n constructor() {\n gpuProgram ?? (gpuProgram = compileHighShaderGpuProgram({\n name: \"tiling-sprite-shader\",\n bits: [\n localUniformBit,\n tilingBit,\n roundPixelsBit\n ]\n }));\n glProgram ?? (glProgram = compileHighShaderGlProgram({\n name: \"tiling-sprite-shader\",\n bits: [\n localUniformBitGl,\n tilingBitGl,\n roundPixelsBitGl\n ]\n }));\n const tilingUniforms = new UniformGroup({\n uMapCoord: { value: new Matrix(), type: \"mat3x3\" },\n uClampFrame: { value: new Float32Array([0, 0, 1, 1]), type: \"vec4\" },\n uClampOffset: { value: new Float32Array([0, 0]), type: \"vec2\" },\n uTextureTransform: { value: new Matrix(), type: \"mat3x3\" },\n uSizeAnchor: { value: new Float32Array([100, 100, 0.5, 0.5]), type: \"vec4\" }\n });\n super({\n glProgram,\n gpuProgram,\n resources: {\n localUniforms: new UniformGroup({\n uTransformMatrix: { value: new Matrix(), type: \"mat3x3\" },\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: \"vec4\" },\n uRound: { value: 0, type: \"f32\" }\n }),\n tilingUniforms,\n uTexture: Texture.EMPTY.source,\n uSampler: Texture.EMPTY.source.style\n }\n });\n }\n updateUniforms(width, height, matrix, anchorX, anchorY, texture) {\n const tilingUniforms = this.resources.tilingUniforms;\n const textureWidth = texture.width;\n const textureHeight = texture.height;\n const textureMatrix = texture.textureMatrix;\n const uTextureTransform = tilingUniforms.uniforms.uTextureTransform;\n uTextureTransform.set(\n matrix.a * textureWidth / width,\n matrix.b * textureWidth / height,\n matrix.c * textureHeight / width,\n matrix.d * textureHeight / height,\n matrix.tx / width,\n matrix.ty / height\n );\n uTextureTransform.invert();\n tilingUniforms.uniforms.uMapCoord = textureMatrix.mapCoord;\n tilingUniforms.uniforms.uClampFrame = textureMatrix.uClampFrame;\n tilingUniforms.uniforms.uClampOffset = textureMatrix.uClampOffset;\n tilingUniforms.uniforms.uTextureTransform = uTextureTransform;\n tilingUniforms.uniforms.uSizeAnchor[0] = width;\n tilingUniforms.uniforms.uSizeAnchor[1] = height;\n tilingUniforms.uniforms.uSizeAnchor[2] = anchorX;\n tilingUniforms.uniforms.uSizeAnchor[3] = anchorY;\n if (texture) {\n this.resources.uTexture = texture.source;\n this.resources.uSampler = texture.source.style;\n }\n }\n}\n\nexport { TilingSpriteShader };\n//# sourceMappingURL=TilingSpriteShader.mjs.map\n","import { MeshGeometry } from '../../mesh/shared/MeshGeometry.mjs';\n\n\"use strict\";\nclass QuadGeometry extends MeshGeometry {\n constructor() {\n super({\n positions: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]),\n uvs: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]),\n indices: new Uint32Array([0, 1, 2, 0, 2, 3])\n });\n }\n}\n\nexport { QuadGeometry };\n//# sourceMappingURL=QuadGeometry.mjs.map\n","\"use strict\";\nfunction setPositions(tilingSprite, positions) {\n const anchorX = tilingSprite.anchor.x;\n const anchorY = tilingSprite.anchor.y;\n positions[0] = -anchorX * tilingSprite.width;\n positions[1] = -anchorY * tilingSprite.height;\n positions[2] = (1 - anchorX) * tilingSprite.width;\n positions[3] = -anchorY * tilingSprite.height;\n positions[4] = (1 - anchorX) * tilingSprite.width;\n positions[5] = (1 - anchorY) * tilingSprite.height;\n positions[6] = -anchorX * tilingSprite.width;\n positions[7] = (1 - anchorY) * tilingSprite.height;\n}\n\nexport { setPositions };\n//# sourceMappingURL=setPositions.mjs.map\n","\"use strict\";\nfunction applyMatrix(array, stride, offset, matrix) {\n let index = 0;\n const size = array.length / (stride || 2);\n const a = matrix.a;\n const b = matrix.b;\n const c = matrix.c;\n const d = matrix.d;\n const tx = matrix.tx;\n const ty = matrix.ty;\n offset *= stride;\n while (index < size) {\n const x = array[offset];\n const y = array[offset + 1];\n array[offset] = a * x + c * y + tx;\n array[offset + 1] = b * x + d * y + ty;\n offset += stride;\n index++;\n }\n}\n\nexport { applyMatrix };\n//# sourceMappingURL=applyMatrix.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { applyMatrix } from './applyMatrix.mjs';\n\n\"use strict\";\nfunction setUvs(tilingSprite, uvs) {\n const texture = tilingSprite.texture;\n const width = texture.frame.width;\n const height = texture.frame.height;\n let anchorX = 0;\n let anchorY = 0;\n if (tilingSprite._applyAnchorToTexture) {\n anchorX = tilingSprite.anchor.x;\n anchorY = tilingSprite.anchor.y;\n }\n uvs[0] = uvs[6] = -anchorX;\n uvs[2] = uvs[4] = 1 - anchorX;\n uvs[1] = uvs[3] = -anchorY;\n uvs[5] = uvs[7] = 1 - anchorY;\n const textureMatrix = Matrix.shared;\n textureMatrix.copyFrom(tilingSprite._tileTransform.matrix);\n textureMatrix.tx /= tilingSprite.width;\n textureMatrix.ty /= tilingSprite.height;\n textureMatrix.invert();\n textureMatrix.scale(tilingSprite.width / width, tilingSprite.height / height);\n applyMatrix(uvs, 2, 0, textureMatrix);\n}\n\nexport { setUvs };\n//# sourceMappingURL=setUvs.mjs.map\n","import { ExtensionType } from '../../extensions/Extensions.mjs';\nimport { State } from '../../rendering/renderers/shared/state/State.mjs';\nimport { RendererType } from '../../rendering/renderers/types.mjs';\nimport { color32BitToUniform } from '../graphics/gpu/colorToUniform.mjs';\nimport { BatchableMesh } from '../mesh/shared/BatchableMesh.mjs';\nimport { MeshGeometry } from '../mesh/shared/MeshGeometry.mjs';\nimport { TilingSpriteShader } from './shader/TilingSpriteShader.mjs';\nimport { QuadGeometry } from './utils/QuadGeometry.mjs';\nimport { setPositions } from './utils/setPositions.mjs';\nimport { setUvs } from './utils/setUvs.mjs';\n\n\"use strict\";\nconst sharedQuad = new QuadGeometry();\nclass TilingSpritePipe {\n constructor(renderer) {\n this._tilingSpriteDataHash = /* @__PURE__ */ Object.create(null);\n this._renderer = renderer;\n }\n validateRenderable(renderable) {\n const tilingSpriteData = this._getTilingSpriteData(renderable);\n const couldBatch = tilingSpriteData.canBatch;\n this._updateCanBatch(renderable);\n const canBatch = tilingSpriteData.canBatch;\n if (canBatch && canBatch === couldBatch) {\n const { batchableMesh } = tilingSpriteData;\n if (batchableMesh.texture._source !== renderable.texture._source) {\n return !batchableMesh.batcher.checkAndUpdateTexture(batchableMesh, renderable.texture);\n }\n }\n return couldBatch !== canBatch;\n }\n addRenderable(tilingSprite, instructionSet) {\n const batcher = this._renderer.renderPipes.batch;\n this._updateCanBatch(tilingSprite);\n const tilingSpriteData = this._getTilingSpriteData(tilingSprite);\n const { geometry, canBatch } = tilingSpriteData;\n if (canBatch) {\n tilingSpriteData.batchableMesh || (tilingSpriteData.batchableMesh = new BatchableMesh());\n const batchableMesh = tilingSpriteData.batchableMesh;\n if (tilingSprite._didTilingSpriteUpdate) {\n tilingSprite._didTilingSpriteUpdate = false;\n this._updateBatchableMesh(tilingSprite);\n batchableMesh.geometry = geometry;\n batchableMesh.mesh = tilingSprite;\n batchableMesh.texture = tilingSprite._texture;\n }\n batchableMesh.roundPixels = this._renderer._roundPixels | tilingSprite._roundPixels;\n batcher.addToBatch(batchableMesh);\n } else {\n batcher.break(instructionSet);\n tilingSpriteData.shader || (tilingSpriteData.shader = new TilingSpriteShader());\n this.updateRenderable(tilingSprite);\n instructionSet.add(tilingSprite);\n }\n }\n execute(tilingSprite) {\n const { shader } = this._tilingSpriteDataHash[tilingSprite.uid];\n shader.groups[0] = this._renderer.globalUniforms.bindGroup;\n const localUniforms = shader.resources.localUniforms.uniforms;\n localUniforms.uTransformMatrix = tilingSprite.groupTransform;\n localUniforms.uRound = this._renderer._roundPixels | tilingSprite._roundPixels;\n color32BitToUniform(\n tilingSprite.groupColorAlpha,\n localUniforms.uColor,\n 0\n );\n this._renderer.encoder.draw({\n geometry: sharedQuad,\n shader,\n state: State.default2d\n });\n }\n updateRenderable(tilingSprite) {\n const tilingSpriteData = this._getTilingSpriteData(tilingSprite);\n const { canBatch } = tilingSpriteData;\n if (canBatch) {\n const { batchableMesh } = tilingSpriteData;\n if (tilingSprite._didTilingSpriteUpdate)\n this._updateBatchableMesh(tilingSprite);\n batchableMesh.batcher.updateElement(batchableMesh);\n } else if (tilingSprite._didTilingSpriteUpdate) {\n const { shader } = tilingSpriteData;\n shader.updateUniforms(\n tilingSprite.width,\n tilingSprite.height,\n tilingSprite._tileTransform.matrix,\n tilingSprite.anchor.x,\n tilingSprite.anchor.y,\n tilingSprite.texture\n );\n }\n tilingSprite._didTilingSpriteUpdate = false;\n }\n destroyRenderable(tilingSprite) {\n const tilingSpriteData = this._getTilingSpriteData(tilingSprite);\n tilingSpriteData.batchableMesh = null;\n tilingSpriteData.shader?.destroy();\n this._tilingSpriteDataHash[tilingSprite.uid] = null;\n }\n _getTilingSpriteData(renderable) {\n return this._tilingSpriteDataHash[renderable.uid] || this._initTilingSpriteData(renderable);\n }\n _initTilingSpriteData(tilingSprite) {\n const geometry = new MeshGeometry({\n indices: sharedQuad.indices,\n positions: sharedQuad.positions.slice(),\n uvs: sharedQuad.uvs.slice()\n });\n this._tilingSpriteDataHash[tilingSprite.uid] = {\n canBatch: true,\n renderable: tilingSprite,\n geometry\n };\n tilingSprite.on(\"destroyed\", () => {\n this.destroyRenderable(tilingSprite);\n });\n return this._tilingSpriteDataHash[tilingSprite.uid];\n }\n _updateBatchableMesh(tilingSprite) {\n const renderableData = this._getTilingSpriteData(tilingSprite);\n const { geometry } = renderableData;\n const style = tilingSprite.texture.source.style;\n if (style.addressMode !== \"repeat\") {\n style.addressMode = \"repeat\";\n style.update();\n }\n setUvs(tilingSprite, geometry.uvs);\n setPositions(tilingSprite, geometry.positions);\n }\n destroy() {\n for (const i in this._tilingSpriteDataHash) {\n this.destroyRenderable(this._tilingSpriteDataHash[i].renderable);\n }\n this._tilingSpriteDataHash = null;\n this._renderer = null;\n }\n _updateCanBatch(tilingSprite) {\n const renderableData = this._getTilingSpriteData(tilingSprite);\n const texture = tilingSprite.texture;\n let _nonPowOf2wrapping = true;\n if (this._renderer.type === RendererType.WEBGL) {\n _nonPowOf2wrapping = this._renderer.context.supports.nonPowOf2wrapping;\n }\n renderableData.canBatch = texture.textureMatrix.isSimple && (_nonPowOf2wrapping || texture.source.isPowerOfTwo);\n return renderableData.canBatch;\n }\n}\n/** @ignore */\nTilingSpritePipe.extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes\n ],\n name: \"tilingSprite\"\n};\n\nexport { TilingSpritePipe };\n//# sourceMappingURL=TilingSpritePipe.mjs.map\n","import { extensions } from '../../extensions/Extensions.mjs';\nimport { TilingSpritePipe } from './TilingSpritePipe.mjs';\n\n\"use strict\";\nextensions.add(TilingSpritePipe);\n//# sourceMappingURL=init.mjs.map\n","\"use strict\";\nclass BatchableSprite {\n constructor() {\n // batch specific..\n this.vertexSize = 4;\n this.indexSize = 6;\n this.location = 0;\n // location in the buffer\n this.batcher = null;\n this.batch = null;\n this.roundPixels = 0;\n }\n get blendMode() {\n return this.renderable.groupBlendMode;\n }\n packAttributes(float32View, uint32View, index, textureId) {\n const sprite = this.renderable;\n const texture = this.texture;\n const wt = sprite.groupTransform;\n const a = wt.a;\n const b = wt.b;\n const c = wt.c;\n const d = wt.d;\n const tx = wt.tx;\n const ty = wt.ty;\n const bounds = this.bounds;\n const w0 = bounds.maxX;\n const w1 = bounds.minX;\n const h0 = bounds.maxY;\n const h1 = bounds.minY;\n const uvs = texture.uvs;\n const argb = sprite.groupColorAlpha;\n const textureIdAndRound = textureId << 16 | this.roundPixels & 65535;\n float32View[index + 0] = a * w1 + c * h1 + tx;\n float32View[index + 1] = d * h1 + b * w1 + ty;\n float32View[index + 2] = uvs.x0;\n float32View[index + 3] = uvs.y0;\n uint32View[index + 4] = argb;\n uint32View[index + 5] = textureIdAndRound;\n float32View[index + 6] = a * w0 + c * h1 + tx;\n float32View[index + 7] = d * h1 + b * w0 + ty;\n float32View[index + 8] = uvs.x1;\n float32View[index + 9] = uvs.y1;\n uint32View[index + 10] = argb;\n uint32View[index + 11] = textureIdAndRound;\n float32View[index + 12] = a * w0 + c * h0 + tx;\n float32View[index + 13] = d * h0 + b * w0 + ty;\n float32View[index + 14] = uvs.x2;\n float32View[index + 15] = uvs.y2;\n uint32View[index + 16] = argb;\n uint32View[index + 17] = textureIdAndRound;\n float32View[index + 18] = a * w1 + c * h0 + tx;\n float32View[index + 19] = d * h0 + b * w1 + ty;\n float32View[index + 20] = uvs.x3;\n float32View[index + 21] = uvs.y3;\n uint32View[index + 22] = argb;\n uint32View[index + 23] = textureIdAndRound;\n }\n packIndex(indexBuffer, index, indicesOffset) {\n indexBuffer[index] = indicesOffset + 0;\n indexBuffer[index + 1] = indicesOffset + 1;\n indexBuffer[index + 2] = indicesOffset + 2;\n indexBuffer[index + 3] = indicesOffset + 0;\n indexBuffer[index + 4] = indicesOffset + 2;\n indexBuffer[index + 5] = indicesOffset + 3;\n }\n reset() {\n this.renderable = null;\n this.texture = null;\n this.batcher = null;\n this.batch = null;\n this.bounds = null;\n }\n}\n\nexport { BatchableSprite };\n//# sourceMappingURL=BatchableSprite.mjs.map\n","import EventEmitter from 'eventemitter3';\nimport { deprecation, v8_0_0 } from '../../utils/logging/deprecation.mjs';\n\n\"use strict\";\nclass AbstractBitmapFont extends EventEmitter {\n constructor() {\n super(...arguments);\n /** The map of characters by character code. */\n this.chars = /* @__PURE__ */ Object.create(null);\n /**\n * The line-height of the font face in pixels.\n * @type {number}\n */\n this.lineHeight = 0;\n /**\n * The name of the font face\n * @type {string}\n */\n this.fontFamily = \"\";\n /** The metrics of the font face. */\n this.fontMetrics = { fontSize: 0, ascent: 0, descent: 0 };\n /**\n * The offset of the font face from the baseline.\n * @type {number}\n */\n this.baseLineOffset = 0;\n /** The range and type of the distance field for this font. */\n this.distanceField = { type: \"none\", range: 0 };\n /** The map of base page textures (i.e., sheets of glyphs). */\n this.pages = [];\n /** The size of the font face in pixels. */\n this.baseMeasurementFontSize = 100;\n this.baseRenderedFontSize = 100;\n }\n /**\n * The name of the font face.\n * @deprecated since 8.0.0 Use `fontFamily` instead.\n */\n get font() {\n deprecation(v8_0_0, \"BitmapFont.font is deprecated, please use BitmapFont.fontFamily instead.\");\n return this.fontFamily;\n }\n /**\n * The map of base page textures (i.e., sheets of glyphs).\n * @deprecated since 8.0.0 Use `pages` instead.\n */\n get pageTextures() {\n deprecation(v8_0_0, \"BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead.\");\n return this.pages;\n }\n /**\n * The size of the font face in pixels.\n * @deprecated since 8.0.0 Use `fontMetrics.fontSize` instead.\n */\n get size() {\n deprecation(v8_0_0, \"BitmapFont.size is deprecated, please use BitmapFont.fontMetrics.fontSize instead.\");\n return this.fontMetrics.fontSize;\n }\n /**\n * The kind of distance field for this font or \"none\".\n * @deprecated since 8.0.0 Use `distanceField.type` instead.\n */\n get distanceFieldRange() {\n deprecation(v8_0_0, \"BitmapFont.distanceFieldRange is deprecated, please use BitmapFont.distanceField.range instead.\");\n return this.distanceField.range;\n }\n /**\n * The range of the distance field in pixels.\n * @deprecated since 8.0.0 Use `distanceField.range` instead.\n */\n get distanceFieldType() {\n deprecation(v8_0_0, \"BitmapFont.distanceFieldType is deprecated, please use BitmapFont.distanceField.type instead.\");\n return this.distanceField.type;\n }\n destroy(destroyTextures = false) {\n this.emit(\"destroy\", this);\n this.removeAllListeners();\n for (const i in this.chars) {\n this.chars[i].texture.destroy();\n }\n this.chars = null;\n if (destroyTextures) {\n this.pages.forEach((page) => page.texture.destroy(true));\n this.pages = null;\n }\n }\n}\n\nexport { AbstractBitmapFont };\n//# sourceMappingURL=AbstractBitmapFont.mjs.map\n","\"use strict\";\nfunction resolveCharacters(chars) {\n if (chars === \"\") {\n return [];\n }\n if (typeof chars === \"string\") {\n chars = [chars];\n }\n const result = [];\n for (let i = 0, j = chars.length; i < j; i++) {\n const item = chars[i];\n if (Array.isArray(item)) {\n if (item.length !== 2) {\n throw new Error(`[BitmapFont]: Invalid character range length, expecting 2 got ${item.length}.`);\n }\n if (item[0].length === 0 || item[1].length === 0) {\n throw new Error(\"[BitmapFont]: Invalid character delimiter.\");\n }\n const startCode = item[0].charCodeAt(0);\n const endCode = item[1].charCodeAt(0);\n if (endCode < startCode) {\n throw new Error(\"[BitmapFont]: Invalid character range.\");\n }\n for (let i2 = startCode, j2 = endCode; i2 <= j2; i2++) {\n result.push(String.fromCharCode(i2));\n }\n } else {\n result.push(...Array.from(item));\n }\n }\n if (result.length === 0) {\n throw new Error(\"[BitmapFont]: Empty set when resolving characters.\");\n }\n return result;\n}\n\nexport { resolveCharacters };\n//# sourceMappingURL=resolveCharacters.mjs.map\n","import { Color } from '../../color/Color.mjs';\nimport { Rectangle } from '../../maths/shapes/Rectangle.mjs';\nimport { CanvasPool } from '../../rendering/renderers/shared/texture/CanvasPool.mjs';\nimport { ImageSource } from '../../rendering/renderers/shared/texture/sources/ImageSource.mjs';\nimport { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs';\nimport { deprecation, v8_0_0 } from '../../utils/logging/deprecation.mjs';\nimport { CanvasTextMetrics } from '../text/canvas/CanvasTextMetrics.mjs';\nimport { fontStringFromTextStyle } from '../text/canvas/utils/fontStringFromTextStyle.mjs';\nimport { getCanvasFillStyle } from '../text/canvas/utils/getCanvasFillStyle.mjs';\nimport { AbstractBitmapFont } from './AbstractBitmapFont.mjs';\nimport { resolveCharacters } from './utils/resolveCharacters.mjs';\n\n\"use strict\";\nclass DynamicBitmapFont extends AbstractBitmapFont {\n /**\n * @param options - The options for the dynamic bitmap font.\n */\n constructor(options) {\n super();\n /**\n * this is a resolution modifier for the font size..\n * texture resolution will also be used to scale texture according to its font size also\n */\n this.resolution = 1;\n /** The pages of the font. */\n this.pages = [];\n this._padding = 4;\n this._measureCache = /* @__PURE__ */ Object.create(null);\n this._currentChars = [];\n this._currentX = 0;\n this._currentY = 0;\n this._currentPageIndex = -1;\n this._skipKerning = false;\n const dynamicOptions = options;\n const style = dynamicOptions.style.clone();\n if (dynamicOptions.overrideFill) {\n style._fill.color = 16777215;\n style._fill.alpha = 1;\n style._fill.texture = Texture.WHITE;\n style._fill.fill = null;\n }\n const requestedFontSize = style.fontSize;\n style.fontSize = this.baseMeasurementFontSize;\n const font = fontStringFromTextStyle(style);\n if (dynamicOptions.overrideSize) {\n if (style._stroke) {\n style._stroke.width *= this.baseRenderedFontSize / requestedFontSize;\n }\n } else {\n style.fontSize = this.baseRenderedFontSize = requestedFontSize;\n }\n this._style = style;\n this._skipKerning = dynamicOptions.skipKerning ?? false;\n this.resolution = dynamicOptions.resolution ?? 1;\n this._padding = dynamicOptions.padding ?? 4;\n this.fontMetrics = CanvasTextMetrics.measureFont(font);\n this.lineHeight = style.lineHeight || this.fontMetrics.fontSize || style.fontSize;\n }\n ensureCharacters(chars) {\n const charList = resolveCharacters(chars).filter((char) => !this._currentChars.includes(char)).filter((char, index, self) => self.indexOf(char) === index);\n if (!charList.length)\n return;\n this._currentChars = [...this._currentChars, ...charList];\n let pageData;\n if (this._currentPageIndex === -1) {\n pageData = this._nextPage();\n } else {\n pageData = this.pages[this._currentPageIndex];\n }\n let { canvas, context } = pageData.canvasAndContext;\n let textureSource = pageData.texture.source;\n const style = this._style;\n let currentX = this._currentX;\n let currentY = this._currentY;\n const fontScale = this.baseRenderedFontSize / this.baseMeasurementFontSize;\n const padding = this._padding * fontScale;\n const widthScale = style.fontStyle === \"italic\" ? 2 : 1;\n let maxCharHeight = 0;\n let skipTexture = false;\n for (let i = 0; i < charList.length; i++) {\n const char = charList[i];\n const metrics = CanvasTextMetrics.measureText(char, style, canvas, false);\n metrics.lineHeight = metrics.height;\n const width = widthScale * metrics.width * fontScale;\n const height = metrics.height * fontScale;\n const paddedWidth = width + padding * 2;\n const paddedHeight = height + padding * 2;\n skipTexture = false;\n if (char !== \"\\n\" && char !== \"\\r\" && char !== \"\t\" && char !== \" \") {\n skipTexture = true;\n maxCharHeight = Math.ceil(Math.max(paddedHeight, maxCharHeight));\n }\n if (currentX + paddedWidth > 512) {\n currentY += maxCharHeight;\n maxCharHeight = paddedHeight;\n currentX = 0;\n if (currentY + maxCharHeight > 512) {\n textureSource.update();\n const pageData2 = this._nextPage();\n canvas = pageData2.canvasAndContext.canvas;\n context = pageData2.canvasAndContext.context;\n textureSource = pageData2.texture.source;\n currentY = 0;\n }\n }\n const xAdvance = width / fontScale - (style.dropShadow?.distance ?? 0) - (style._stroke?.width ?? 0);\n this.chars[char] = {\n id: char.codePointAt(0),\n xOffset: -this._padding,\n yOffset: -this._padding,\n xAdvance,\n kerning: {}\n };\n if (skipTexture) {\n this._drawGlyph(\n context,\n metrics,\n currentX + padding,\n currentY + padding,\n fontScale,\n style\n );\n const px = textureSource.width * fontScale;\n const py = textureSource.height * fontScale;\n const frame = new Rectangle(\n currentX / px * textureSource.width,\n currentY / py * textureSource.height,\n paddedWidth / px * textureSource.width,\n paddedHeight / py * textureSource.height\n );\n this.chars[char].texture = new Texture({\n source: textureSource,\n frame\n });\n currentX += Math.ceil(paddedWidth);\n }\n }\n textureSource.update();\n this._currentX = currentX;\n this._currentY = currentY;\n this._skipKerning && this._applyKerning(charList, context);\n }\n /**\n * @deprecated since 8.0.0\n * The map of base page textures (i.e., sheets of glyphs).\n */\n get pageTextures() {\n deprecation(v8_0_0, \"BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead.\");\n return this.pages;\n }\n _applyKerning(newChars, context) {\n const measureCache = this._measureCache;\n for (let i = 0; i < newChars.length; i++) {\n const first = newChars[i];\n for (let j = 0; j < this._currentChars.length; j++) {\n const second = this._currentChars[j];\n let c1 = measureCache[first];\n if (!c1)\n c1 = measureCache[first] = context.measureText(first).width;\n let c2 = measureCache[second];\n if (!c2)\n c2 = measureCache[second] = context.measureText(second).width;\n let total = context.measureText(first + second).width;\n let amount = total - (c1 + c2);\n if (amount) {\n this.chars[first].kerning[second] = amount;\n }\n total = context.measureText(first + second).width;\n amount = total - (c1 + c2);\n if (amount) {\n this.chars[second].kerning[first] = amount;\n }\n }\n }\n }\n _nextPage() {\n this._currentPageIndex++;\n const textureResolution = this.resolution;\n const canvasAndContext = CanvasPool.getOptimalCanvasAndContext(512, 512, textureResolution);\n this._setupContext(canvasAndContext.context, this._style, textureResolution);\n const resolution = textureResolution * (this.baseRenderedFontSize / this.baseMeasurementFontSize);\n const texture = new Texture({\n source: new ImageSource({\n resource: canvasAndContext.canvas,\n resolution,\n alphaMode: \"premultiply-alpha-on-upload\"\n })\n });\n const pageData = {\n canvasAndContext,\n texture\n };\n this.pages[this._currentPageIndex] = pageData;\n return pageData;\n }\n // canvas style!\n _setupContext(context, style, resolution) {\n style.fontSize = this.baseRenderedFontSize;\n context.scale(resolution, resolution);\n context.font = fontStringFromTextStyle(style);\n style.fontSize = this.baseMeasurementFontSize;\n context.textBaseline = style.textBaseline;\n const stroke = style._stroke;\n const strokeThickness = stroke?.width ?? 0;\n if (stroke) {\n context.lineWidth = strokeThickness;\n context.lineJoin = stroke.join;\n context.miterLimit = stroke.miterLimit;\n context.strokeStyle = getCanvasFillStyle(stroke, context);\n }\n if (style._fill) {\n context.fillStyle = getCanvasFillStyle(style._fill, context);\n }\n if (style.dropShadow) {\n const shadowOptions = style.dropShadow;\n const rgb = Color.shared.setValue(shadowOptions.color).toArray();\n const dropShadowBlur = shadowOptions.blur * resolution;\n const dropShadowDistance = shadowOptions.distance * resolution;\n context.shadowColor = `rgba(${rgb[0] * 255},${rgb[1] * 255},${rgb[2] * 255},${shadowOptions.alpha})`;\n context.shadowBlur = dropShadowBlur;\n context.shadowOffsetX = Math.cos(shadowOptions.angle) * dropShadowDistance;\n context.shadowOffsetY = Math.sin(shadowOptions.angle) * dropShadowDistance;\n } else {\n context.shadowColor = \"black\";\n context.shadowBlur = 0;\n context.shadowOffsetX = 0;\n context.shadowOffsetY = 0;\n }\n }\n _drawGlyph(context, metrics, x, y, fontScale, style) {\n const char = metrics.text;\n const fontProperties = metrics.fontProperties;\n const stroke = style._stroke;\n const strokeThickness = (stroke?.width ?? 0) * fontScale;\n const tx = x + strokeThickness / 2;\n const ty = y - strokeThickness / 2;\n const descent = fontProperties.descent * fontScale;\n const lineHeight = metrics.lineHeight * fontScale;\n if (style.stroke && strokeThickness) {\n context.strokeText(char, tx, ty + lineHeight - descent);\n }\n if (style._fill) {\n context.fillText(char, tx, ty + lineHeight - descent);\n }\n }\n destroy() {\n super.destroy();\n for (let i = 0; i < this.pages.length; i++) {\n const { canvasAndContext, texture } = this.pages[i];\n CanvasPool.returnCanvasAndContext(canvasAndContext);\n texture.destroy(true);\n }\n this.pages = null;\n }\n}\n\nexport { DynamicBitmapFont };\n//# sourceMappingURL=DynamicBitmapFont.mjs.map\n","\"use strict\";\nfunction getBitmapTextLayout(chars, style, font) {\n const layoutData = {\n width: 0,\n height: 0,\n offsetY: 0,\n scale: style.fontSize / font.baseMeasurementFontSize,\n lines: [{\n width: 0,\n charPositions: [],\n spaceWidth: 0,\n spacesIndex: [],\n chars: []\n }]\n };\n layoutData.offsetY = font.baseLineOffset;\n let currentLine = layoutData.lines[0];\n let previousChar = null;\n let firstWord = true;\n const currentWord = {\n spaceWord: false,\n width: 0,\n start: 0,\n index: 0,\n // use index to not modify the array as we use it a lot!\n positions: [],\n chars: []\n };\n const nextWord = (word) => {\n const start = currentLine.width;\n for (let j = 0; j < currentWord.index; j++) {\n const position = word.positions[j];\n currentLine.chars.push(word.chars[j]);\n currentLine.charPositions.push(position + start);\n }\n currentLine.width += word.width;\n firstWord = false;\n currentWord.width = 0;\n currentWord.index = 0;\n currentWord.chars.length = 0;\n };\n const nextLine = () => {\n let index = currentLine.chars.length - 1;\n let lastChar = currentLine.chars[index];\n while (lastChar === \" \") {\n currentLine.width -= font.chars[lastChar].xAdvance;\n lastChar = currentLine.chars[--index];\n }\n layoutData.width = Math.max(layoutData.width, currentLine.width);\n currentLine = {\n width: 0,\n charPositions: [],\n chars: [],\n spaceWidth: 0,\n spacesIndex: []\n };\n firstWord = true;\n layoutData.lines.push(currentLine);\n layoutData.height += font.lineHeight;\n };\n const scale = font.baseMeasurementFontSize / style.fontSize;\n const adjustedLetterSpacing = style.letterSpacing * scale;\n const adjustedWordWrapWidth = style.wordWrapWidth * scale;\n for (let i = 0; i < chars.length + 1; i++) {\n let char;\n const isEnd = i === chars.length;\n if (!isEnd) {\n char = chars[i];\n }\n const charData = font.chars[char] || font.chars[\" \"];\n const isSpace = /(?:\\s)/.test(char);\n const isWordBreak = isSpace || char === \"\\r\" || char === \"\\n\" || isEnd;\n if (isWordBreak) {\n const addWordToNextLine = !firstWord && style.wordWrap && currentLine.width + currentWord.width - adjustedLetterSpacing > adjustedWordWrapWidth;\n if (addWordToNextLine) {\n nextLine();\n nextWord(currentWord);\n if (!isEnd) {\n currentLine.charPositions.push(0);\n }\n } else {\n currentWord.start = currentLine.width;\n nextWord(currentWord);\n if (!isEnd) {\n currentLine.charPositions.push(0);\n }\n }\n if (char === \"\\r\" || char === \"\\n\") {\n if (currentLine.width !== 0) {\n nextLine();\n }\n } else if (!isEnd) {\n const spaceWidth = charData.xAdvance + (charData.kerning[previousChar] || 0) + adjustedLetterSpacing;\n currentLine.width += spaceWidth;\n currentLine.spaceWidth = spaceWidth;\n currentLine.spacesIndex.push(currentLine.charPositions.length);\n currentLine.chars.push(char);\n }\n } else {\n const kerning = charData.kerning[previousChar] || 0;\n const nextCharWidth = charData.xAdvance + kerning + adjustedLetterSpacing;\n currentWord.positions[currentWord.index++] = currentWord.width + kerning;\n currentWord.chars.push(char);\n currentWord.width += nextCharWidth;\n }\n previousChar = char;\n }\n nextLine();\n if (style.align === \"center\") {\n alignCenter(layoutData);\n } else if (style.align === \"right\") {\n alignRight(layoutData);\n } else if (style.align === \"justify\") {\n alignJustify(layoutData);\n }\n return layoutData;\n}\nfunction alignCenter(measurementData) {\n for (let i = 0; i < measurementData.lines.length; i++) {\n const line = measurementData.lines[i];\n const offset = measurementData.width / 2 - line.width / 2;\n for (let j = 0; j < line.charPositions.length; j++) {\n line.charPositions[j] += offset;\n }\n }\n}\nfunction alignRight(measurementData) {\n for (let i = 0; i < measurementData.lines.length; i++) {\n const line = measurementData.lines[i];\n const offset = measurementData.width - line.width;\n for (let j = 0; j < line.charPositions.length; j++) {\n line.charPositions[j] += offset;\n }\n }\n}\nfunction alignJustify(measurementData) {\n const width = measurementData.width;\n for (let i = 0; i < measurementData.lines.length; i++) {\n const line = measurementData.lines[i];\n let indy = 0;\n let spaceIndex = line.spacesIndex[indy++];\n let offset = 0;\n const totalSpaces = line.spacesIndex.length;\n const newSpaceWidth = (width - line.width) / totalSpaces;\n const spaceWidth = newSpaceWidth;\n for (let j = 0; j < line.charPositions.length; j++) {\n if (j === spaceIndex) {\n spaceIndex = line.spacesIndex[indy++];\n offset += spaceWidth;\n }\n line.charPositions[j] += offset;\n }\n }\n}\n\nexport { getBitmapTextLayout };\n//# sourceMappingURL=getBitmapTextLayout.mjs.map\n","import { Cache } from '../../assets/cache/Cache.mjs';\nimport { deprecation, v8_0_0 } from '../../utils/logging/deprecation.mjs';\nimport { TextStyle } from '../text/TextStyle.mjs';\nimport { DynamicBitmapFont } from './DynamicBitmapFont.mjs';\nimport { getBitmapTextLayout } from './utils/getBitmapTextLayout.mjs';\nimport { resolveCharacters } from './utils/resolveCharacters.mjs';\n\n\"use strict\";\nclass BitmapFontManagerClass {\n constructor() {\n /**\n * This character set includes all the letters in the alphabet (both lower- and upper- case).\n * @type {string[][]}\n * @example\n * BitmapFont.from('ExampleFont', style, { chars: BitmapFont.ALPHA })\n */\n this.ALPHA = [[\"a\", \"z\"], [\"A\", \"Z\"], \" \"];\n /**\n * This character set includes all decimal digits (from 0 to 9).\n * @type {string[][]}\n * @example\n * BitmapFont.from('ExampleFont', style, { chars: BitmapFont.NUMERIC })\n */\n this.NUMERIC = [[\"0\", \"9\"]];\n /**\n * This character set is the union of `BitmapFont.ALPHA` and `BitmapFont.NUMERIC`.\n * @type {string[][]}\n */\n this.ALPHANUMERIC = [[\"a\", \"z\"], [\"A\", \"Z\"], [\"0\", \"9\"], \" \"];\n /**\n * This character set consists of all the ASCII table.\n * @member {string[][]}\n * @see http://www.asciitable.com/\n */\n this.ASCII = [[\" \", \"~\"]];\n /** Default options for installing a new BitmapFont. */\n this.defaultOptions = {\n chars: this.ALPHANUMERIC,\n resolution: 1,\n padding: 4,\n skipKerning: false\n };\n }\n /**\n * Get a font for the specified text and style.\n * @param text - The text to get the font for\n * @param style - The style to use\n */\n getFont(text, style) {\n let fontFamilyKey = `${style.fontFamily}-bitmap`;\n let overrideFill = true;\n if (style._fill.fill) {\n fontFamilyKey += style._fill.fill.uid;\n overrideFill = false;\n }\n if (!Cache.has(fontFamilyKey)) {\n const fnt = new DynamicBitmapFont({\n style,\n overrideFill,\n overrideSize: true,\n ...this.defaultOptions\n });\n fnt.once(\"destroy\", () => Cache.remove(fontFamilyKey));\n Cache.set(\n fontFamilyKey,\n fnt\n );\n }\n const dynamicFont = Cache.get(fontFamilyKey);\n dynamicFont.ensureCharacters?.(text);\n return dynamicFont;\n }\n /**\n * Get the layout of a text for the specified style.\n * @param text - The text to get the layout for\n * @param style - The style to use\n */\n getLayout(text, style) {\n const bitmapFont = this.getFont(text, style);\n return getBitmapTextLayout([...text], style, bitmapFont);\n }\n /**\n * Measure the text using the specified style.\n * @param text - The text to measure\n * @param style - The style to use\n */\n measureText(text, style) {\n return this.getLayout(text, style);\n }\n // eslint-disable-next-line max-len\n install(...args) {\n let options = args[0];\n if (typeof options === \"string\") {\n options = {\n name: options,\n style: args[1],\n chars: args[2]?.chars,\n resolution: args[2]?.resolution,\n padding: args[2]?.padding,\n skipKerning: args[2]?.skipKerning\n };\n deprecation(v8_0_0, \"BitmapFontManager.install(name, style, options) is deprecated, use BitmapFontManager.install({name, style, ...options})\");\n }\n const name = options?.name;\n if (!name) {\n throw new Error(\"[BitmapFontManager] Property `name` is required.\");\n }\n options = { ...this.defaultOptions, ...options };\n const textStyle = options.style;\n const style = textStyle instanceof TextStyle ? textStyle : new TextStyle(textStyle);\n const overrideFill = style._fill.fill !== null && style._fill.fill !== void 0;\n const font = new DynamicBitmapFont({\n style,\n overrideFill,\n skipKerning: options.skipKerning,\n padding: options.padding,\n resolution: options.resolution,\n overrideSize: false\n });\n const flatChars = resolveCharacters(options.chars);\n font.ensureCharacters(flatChars.join(\"\"));\n Cache.set(`${name}-bitmap`, font);\n font.once(\"destroy\", () => Cache.remove(`${name}-bitmap`));\n return font;\n }\n /**\n * Uninstalls a bitmap font from the cache.\n * @param {string} name - The name of the bitmap font to uninstall.\n */\n uninstall(name) {\n const cacheKey = `${name}-bitmap`;\n const font = Cache.get(cacheKey);\n if (font) {\n Cache.remove(cacheKey);\n font.destroy();\n }\n }\n}\nconst BitmapFontManager = new BitmapFontManagerClass();\n\nexport { BitmapFontManager };\n//# sourceMappingURL=BitmapFontManager.mjs.map\n","import { Rectangle } from '../../maths/shapes/Rectangle.mjs';\nimport { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs';\nimport { AbstractBitmapFont } from './AbstractBitmapFont.mjs';\nimport { BitmapFontManager } from './BitmapFontManager.mjs';\n\n\"use strict\";\nclass BitmapFont extends AbstractBitmapFont {\n constructor(options, url) {\n super();\n const { textures, data } = options;\n Object.keys(data.pages).forEach((key) => {\n const pageData = data.pages[parseInt(key, 10)];\n const texture = textures[pageData.id];\n this.pages.push({ texture });\n });\n Object.keys(data.chars).forEach((key) => {\n const charData = data.chars[key];\n const {\n frame: textureFrame,\n source: textureSource\n } = textures[charData.page];\n const frameReal = new Rectangle(\n charData.x + textureFrame.x,\n charData.y + textureFrame.y,\n charData.width,\n charData.height\n );\n const texture = new Texture({\n source: textureSource,\n frame: frameReal\n });\n this.chars[key] = {\n id: key.codePointAt(0),\n xOffset: charData.xOffset,\n yOffset: charData.yOffset,\n xAdvance: charData.xAdvance,\n kerning: charData.kerning ?? {},\n texture\n };\n });\n this.baseRenderedFontSize = data.fontSize;\n this.baseMeasurementFontSize = data.fontSize;\n this.fontMetrics = {\n ascent: 0,\n descent: 0,\n fontSize: data.fontSize\n };\n this.baseLineOffset = data.baseLineOffset;\n this.lineHeight = data.lineHeight;\n this.fontFamily = data.fontFamily;\n this.distanceField = data.distanceField ?? {\n type: \"none\",\n range: 0\n };\n this.url = url;\n }\n /** Destroys the BitmapFont object. */\n destroy() {\n super.destroy();\n for (let i = 0; i < this.pages.length; i++) {\n const { texture } = this.pages[i];\n texture.destroy(true);\n }\n this.pages = null;\n }\n /**\n * Generates a bitmap-font for the given style and character set\n * @param options - Setup options for font generation.\n * @returns Font generated by style options.\n * @example\n * import { BitmapFont, BitmapText } from 'pixi.js';\n *\n * BitmapFont.install('TitleFont', {\n * fontFamily: 'Arial',\n * fontSize: 12,\n * strokeThickness: 2,\n * fill: 'purple',\n * });\n *\n * const title = new BitmapText({ text: 'This is the title', fontFamily: 'TitleFont' });\n */\n static install(options) {\n BitmapFontManager.install(options);\n }\n /**\n * Uninstalls a bitmap font from the cache.\n * @param {string} name - The name of the bitmap font to uninstall.\n */\n static uninstall(name) {\n BitmapFontManager.uninstall(name);\n }\n}\n\nexport { BitmapFont };\n//# sourceMappingURL=BitmapFont.mjs.map\n","\"use strict\";\nconst bitmapFontTextParser = {\n test(data) {\n return typeof data === \"string\" && data.startsWith(\"info face=\");\n },\n parse(txt) {\n const items = txt.match(/^[a-z]+\\s+.+$/gm);\n const rawData = {\n info: [],\n common: [],\n page: [],\n char: [],\n chars: [],\n kerning: [],\n kernings: [],\n distanceField: []\n };\n for (const i in items) {\n const name = items[i].match(/^[a-z]+/gm)[0];\n const attributeList = items[i].match(/[a-zA-Z]+=([^\\s\"']+|\"([^\"]*)\")/gm);\n const itemData = {};\n for (const i2 in attributeList) {\n const split = attributeList[i2].split(\"=\");\n const key = split[0];\n const strValue = split[1].replace(/\"/gm, \"\");\n const floatValue = parseFloat(strValue);\n const value = isNaN(floatValue) ? strValue : floatValue;\n itemData[key] = value;\n }\n rawData[name].push(itemData);\n }\n const font = {\n chars: {},\n pages: [],\n lineHeight: 0,\n fontSize: 0,\n fontFamily: \"\",\n distanceField: null,\n baseLineOffset: 0\n };\n const [info] = rawData.info;\n const [common] = rawData.common;\n const [distanceField] = rawData.distanceField ?? [];\n if (distanceField) {\n font.distanceField = {\n range: parseInt(distanceField.distanceRange, 10),\n type: distanceField.fieldType\n };\n }\n font.fontSize = parseInt(info.size, 10);\n font.fontFamily = info.face;\n font.lineHeight = parseInt(common.lineHeight, 10);\n const page = rawData.page;\n for (let i = 0; i < page.length; i++) {\n font.pages.push({\n id: parseInt(page[i].id, 10) || 0,\n file: page[i].file\n });\n }\n const map = {};\n font.baseLineOffset = font.lineHeight - parseInt(common.base, 10);\n const char = rawData.char;\n for (let i = 0; i < char.length; i++) {\n const charNode = char[i];\n const id = parseInt(charNode.id, 10);\n let letter = charNode.letter ?? charNode.char ?? String.fromCharCode(id);\n if (letter === \"space\")\n letter = \" \";\n map[id] = letter;\n font.chars[letter] = {\n id,\n // texture deets..\n page: parseInt(charNode.page, 10) || 0,\n x: parseInt(charNode.x, 10),\n y: parseInt(charNode.y, 10),\n width: parseInt(charNode.width, 10),\n height: parseInt(charNode.height, 10),\n xOffset: parseInt(charNode.xoffset, 10),\n yOffset: parseInt(charNode.yoffset, 10),\n xAdvance: parseInt(charNode.xadvance, 10),\n kerning: {}\n };\n }\n const kerning = rawData.kerning || [];\n for (let i = 0; i < kerning.length; i++) {\n const first = parseInt(kerning[i].first, 10);\n const second = parseInt(kerning[i].second, 10);\n const amount = parseInt(kerning[i].amount, 10);\n font.chars[map[second]].kerning[map[first]] = amount;\n }\n return font;\n }\n};\n\nexport { bitmapFontTextParser };\n//# sourceMappingURL=bitmapFontTextParser.mjs.map\n","\"use strict\";\nconst bitmapFontXMLParser = {\n test(data) {\n const xml = data;\n return typeof xml !== \"string\" && \"getElementsByTagName\" in xml && xml.getElementsByTagName(\"page\").length && xml.getElementsByTagName(\"info\")[0].getAttribute(\"face\") !== null;\n },\n parse(xml) {\n const data = {\n chars: {},\n pages: [],\n lineHeight: 0,\n fontSize: 0,\n fontFamily: \"\",\n distanceField: null,\n baseLineOffset: 0\n };\n const info = xml.getElementsByTagName(\"info\")[0];\n const common = xml.getElementsByTagName(\"common\")[0];\n const distanceField = xml.getElementsByTagName(\"distanceField\")[0];\n if (distanceField) {\n data.distanceField = {\n type: distanceField.getAttribute(\"fieldType\"),\n range: parseInt(distanceField.getAttribute(\"distanceRange\"), 10)\n };\n }\n const page = xml.getElementsByTagName(\"page\");\n const char = xml.getElementsByTagName(\"char\");\n const kerning = xml.getElementsByTagName(\"kerning\");\n data.fontSize = parseInt(info.getAttribute(\"size\"), 10);\n data.fontFamily = info.getAttribute(\"face\");\n data.lineHeight = parseInt(common.getAttribute(\"lineHeight\"), 10);\n for (let i = 0; i < page.length; i++) {\n data.pages.push({\n id: parseInt(page[i].getAttribute(\"id\"), 10) || 0,\n file: page[i].getAttribute(\"file\")\n });\n }\n const map = {};\n data.baseLineOffset = data.lineHeight - parseInt(common.getAttribute(\"base\"), 10);\n for (let i = 0; i < char.length; i++) {\n const charNode = char[i];\n const id = parseInt(charNode.getAttribute(\"id\"), 10);\n let letter = charNode.getAttribute(\"letter\") ?? charNode.getAttribute(\"char\") ?? String.fromCharCode(id);\n if (letter === \"space\")\n letter = \" \";\n map[id] = letter;\n data.chars[letter] = {\n id,\n // texture deets..\n page: parseInt(charNode.getAttribute(\"page\"), 10) || 0,\n x: parseInt(charNode.getAttribute(\"x\"), 10),\n y: parseInt(charNode.getAttribute(\"y\"), 10),\n width: parseInt(charNode.getAttribute(\"width\"), 10),\n height: parseInt(charNode.getAttribute(\"height\"), 10),\n // render deets..\n xOffset: parseInt(charNode.getAttribute(\"xoffset\"), 10),\n yOffset: parseInt(charNode.getAttribute(\"yoffset\"), 10),\n // + baseLineOffset,\n xAdvance: parseInt(charNode.getAttribute(\"xadvance\"), 10),\n kerning: {}\n };\n }\n for (let i = 0; i < kerning.length; i++) {\n const first = parseInt(kerning[i].getAttribute(\"first\"), 10);\n const second = parseInt(kerning[i].getAttribute(\"second\"), 10);\n const amount = parseInt(kerning[i].getAttribute(\"amount\"), 10);\n data.chars[map[second]].kerning[map[first]] = amount;\n }\n return data;\n }\n};\n\nexport { bitmapFontXMLParser };\n//# sourceMappingURL=bitmapFontXMLParser.mjs.map\n","import { DOMAdapter } from '../../../environment/adapter.mjs';\nimport { bitmapFontXMLParser } from './bitmapFontXMLParser.mjs';\n\n\"use strict\";\nconst bitmapFontXMLStringParser = {\n test(data) {\n if (typeof data === \"string\" && data.includes(\"\")) {\n return bitmapFontXMLParser.test(DOMAdapter.get().parseXML(data));\n }\n return false;\n },\n parse(data) {\n return bitmapFontXMLParser.parse(DOMAdapter.get().parseXML(data));\n }\n};\n\nexport { bitmapFontXMLStringParser };\n//# sourceMappingURL=bitmapFontXMLStringParser.mjs.map\n","import { LoaderParserPriority } from '../../../assets/loader/parsers/LoaderParser.mjs';\nimport { copySearchParams } from '../../../assets/utils/copySearchParams.mjs';\nimport { DOMAdapter } from '../../../environment/adapter.mjs';\nimport { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { path } from '../../../utils/path.mjs';\nimport { BitmapFont } from '../BitmapFont.mjs';\nimport { bitmapFontTextParser } from './bitmapFontTextParser.mjs';\nimport { bitmapFontXMLStringParser } from './bitmapFontXMLStringParser.mjs';\n\n\"use strict\";\nconst validExtensions = [\".xml\", \".fnt\"];\nconst bitmapFontCachePlugin = {\n extension: ExtensionType.CacheParser,\n test: (asset) => asset instanceof BitmapFont,\n getCacheableAssets(keys, asset) {\n const out = {};\n keys.forEach((key) => {\n out[key] = asset;\n });\n out[`${asset.fontFamily}-bitmap`] = asset;\n return out;\n }\n};\nconst loadBitmapFont = {\n extension: {\n type: ExtensionType.LoadParser,\n priority: LoaderParserPriority.Normal\n },\n test(url) {\n return validExtensions.includes(path.extname(url).toLowerCase());\n },\n async testParse(data) {\n return bitmapFontTextParser.test(data) || bitmapFontXMLStringParser.test(data);\n },\n async parse(asset, data, loader) {\n const bitmapFontData = bitmapFontTextParser.test(asset) ? bitmapFontTextParser.parse(asset) : bitmapFontXMLStringParser.parse(asset);\n const { src } = data;\n const { pages } = bitmapFontData;\n const textureUrls = [];\n for (let i = 0; i < pages.length; ++i) {\n const pageFile = pages[i].file;\n let imagePath = path.join(path.dirname(src), pageFile);\n imagePath = copySearchParams(imagePath, src);\n textureUrls.push(imagePath);\n }\n const loadedTextures = await loader.load(textureUrls);\n const textures = textureUrls.map((url) => loadedTextures[url]);\n const bitmapFont = new BitmapFont({\n data: bitmapFontData,\n textures\n }, src);\n return bitmapFont;\n },\n async load(url, _options) {\n const response = await DOMAdapter.get().fetch(url);\n return await response.text();\n },\n async unload(bitmapFont, _resolvedAsset, loader) {\n await Promise.all(bitmapFont.pages.map((page) => loader.unload(page.texture.source._sourceOrigin)));\n bitmapFont.destroy();\n }\n};\n\nexport { bitmapFontCachePlugin, loadBitmapFont };\n//# sourceMappingURL=loadBitmapFont.mjs.map\n","\"use strict\";\nconst localUniformMSDFBit = {\n name: \"local-uniform-msdf-bit\",\n vertex: {\n header: (\n /* wgsl */\n `\n struct LocalUniforms {\n uColor:vec4,\n uTransformMatrix:mat3x3,\n uDistance: f32,\n uRound:f32,\n }\n\n @group(2) @binding(0) var localUniforms : LocalUniforms;\n `\n ),\n main: (\n /* wgsl */\n `\n vColor *= localUniforms.uColor;\n modelMatrix *= localUniforms.uTransformMatrix;\n `\n ),\n end: (\n /* wgsl */\n `\n if(localUniforms.uRound == 1)\n {\n vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);\n }\n `\n )\n },\n fragment: {\n header: (\n /* wgsl */\n `\n struct LocalUniforms {\n uColor:vec4,\n uTransformMatrix:mat3x3,\n uDistance: f32\n }\n\n @group(2) @binding(0) var localUniforms : LocalUniforms;\n `\n ),\n main: (\n /* wgsl */\n ` \n outColor = vColor * calculateMSDFAlpha(outColor, localUniforms.uDistance);\n `\n )\n }\n};\nconst localUniformMSDFBitGl = {\n name: \"local-uniform-msdf-bit\",\n vertex: {\n header: (\n /* glsl */\n `\n uniform mat3 uTransformMatrix;\n uniform vec4 uColor;\n uniform float uRound;\n `\n ),\n main: (\n /* glsl */\n `\n vColor *= uColor;\n modelMatrix *= uTransformMatrix;\n `\n ),\n end: (\n /* glsl */\n `\n if(uRound == 1.)\n {\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\n }\n `\n )\n },\n fragment: {\n header: (\n /* glsl */\n `\n uniform float uDistance;\n `\n ),\n main: (\n /* glsl */\n ` \n outColor = vColor * calculateMSDFAlpha(outColor, uDistance);\n `\n )\n }\n};\n\nexport { localUniformMSDFBit, localUniformMSDFBitGl };\n//# sourceMappingURL=localUniformMSDFBit.mjs.map\n","\"use strict\";\nconst mSDFBit = {\n name: \"msdf-bit\",\n fragment: {\n header: (\n /* wgsl */\n `\n fn calculateMSDFAlpha(msdfColor:vec4, distance:f32) -> f32 {\n \n // MSDF\n var median = msdfColor.r + msdfColor.g + msdfColor.b -\n min(msdfColor.r, min(msdfColor.g, msdfColor.b)) -\n max(msdfColor.r, max(msdfColor.g, msdfColor.b));\n \n // SDF\n median = min(median, msdfColor.a);\n\n var screenPxDistance = distance * (median - 0.5);\n var alpha = clamp(screenPxDistance + 0.5, 0.0, 1.0);\n if (median < 0.01) {\n alpha = 0.0;\n } else if (median > 0.99) {\n alpha = 1.0;\n }\n\n return alpha;\n }\n `\n )\n }\n};\nconst mSDFBitGl = {\n name: \"msdf-bit\",\n fragment: {\n header: (\n /* glsl */\n `\n float calculateMSDFAlpha(vec4 msdfColor, float distance) {\n \n // MSDF\n float median = msdfColor.r + msdfColor.g + msdfColor.b -\n min(msdfColor.r, min(msdfColor.g, msdfColor.b)) -\n max(msdfColor.r, max(msdfColor.g, msdfColor.b));\n \n // SDF\n median = min(median, msdfColor.a);\n \n float screenPxDistance = distance * (median - 0.5);\n float alpha = clamp(screenPxDistance + 0.5, 0.0, 1.0);\n \n if (median < 0.01) {\n alpha = 0.0;\n } else if (median > 0.99) {\n alpha = 1.0;\n }\n\n return alpha;\n }\n `\n )\n }\n};\n\nexport { mSDFBit, mSDFBitGl };\n//# sourceMappingURL=mSDFBit.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { compileHighShaderGpuProgram, compileHighShaderGlProgram } from '../../../rendering/high-shader/compileHighShaderToProgram.mjs';\nimport { colorBit, colorBitGl } from '../../../rendering/high-shader/shader-bits/colorBit.mjs';\nimport { generateTextureBatchBit, generateTextureBatchBitGl } from '../../../rendering/high-shader/shader-bits/generateTextureBatchBit.mjs';\nimport { roundPixelsBit, roundPixelsBitGl } from '../../../rendering/high-shader/shader-bits/roundPixelsBit.mjs';\nimport { getBatchSamplersUniformGroup } from '../../../rendering/renderers/gl/shader/getBatchSamplersUniformGroup.mjs';\nimport { Shader } from '../../../rendering/renderers/shared/shader/Shader.mjs';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup.mjs';\nimport { maxRecommendedTextures } from '../../../rendering/renderers/shared/texture/utils/maxRecommendedTextures.mjs';\nimport { localUniformMSDFBit, localUniformMSDFBitGl } from './shader-bits/localUniformMSDFBit.mjs';\nimport { mSDFBit, mSDFBitGl } from './shader-bits/mSDFBit.mjs';\n\n\"use strict\";\nclass SdfShader extends Shader {\n constructor() {\n const uniforms = new UniformGroup({\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: \"vec4\" },\n uTransformMatrix: { value: new Matrix(), type: \"mat3x3\" },\n uDistance: { value: 4, type: \"f32\" },\n uRound: { value: 0, type: \"f32\" }\n });\n const maxTextures = maxRecommendedTextures();\n const gpuProgram = compileHighShaderGpuProgram({\n name: \"sdf-shader\",\n bits: [\n colorBit,\n generateTextureBatchBit(maxTextures),\n localUniformMSDFBit,\n mSDFBit,\n roundPixelsBit\n ]\n });\n const glProgram = compileHighShaderGlProgram({\n name: \"sdf-shader\",\n bits: [\n colorBitGl,\n generateTextureBatchBitGl(maxTextures),\n localUniformMSDFBitGl,\n mSDFBitGl,\n roundPixelsBitGl\n ]\n });\n super({\n glProgram,\n gpuProgram,\n resources: {\n localUniforms: uniforms,\n batchSamplers: getBatchSamplersUniformGroup(maxTextures)\n }\n });\n }\n}\n\nexport { SdfShader };\n//# sourceMappingURL=SdfShader.mjs.map\n","import { Cache } from '../../assets/cache/Cache.mjs';\nimport { ExtensionType } from '../../extensions/Extensions.mjs';\nimport { BigPool } from '../../utils/pool/PoolGroup.mjs';\nimport { Graphics } from '../graphics/shared/Graphics.mjs';\nimport { SdfShader } from '../text/sdfShader/SdfShader.mjs';\nimport { BitmapFontManager } from './BitmapFontManager.mjs';\nimport { getBitmapTextLayout } from './utils/getBitmapTextLayout.mjs';\n\n\"use strict\";\nclass BitmapTextPipe {\n constructor(renderer) {\n this._gpuBitmapText = {};\n this._renderer = renderer;\n }\n validateRenderable(bitmapText) {\n const graphicsRenderable = this._getGpuBitmapText(bitmapText);\n if (bitmapText._didTextUpdate) {\n bitmapText._didTextUpdate = false;\n this._updateContext(bitmapText, graphicsRenderable);\n }\n return this._renderer.renderPipes.graphics.validateRenderable(graphicsRenderable);\n }\n addRenderable(bitmapText, instructionSet) {\n const graphicsRenderable = this._getGpuBitmapText(bitmapText);\n syncWithProxy(bitmapText, graphicsRenderable);\n if (bitmapText._didTextUpdate) {\n bitmapText._didTextUpdate = false;\n this._updateContext(bitmapText, graphicsRenderable);\n }\n this._renderer.renderPipes.graphics.addRenderable(graphicsRenderable, instructionSet);\n if (graphicsRenderable.context.customShader) {\n this._updateDistanceField(bitmapText);\n }\n }\n destroyRenderable(bitmapText) {\n this._destroyRenderableByUid(bitmapText.uid);\n }\n _destroyRenderableByUid(renderableUid) {\n BigPool.return(this._gpuBitmapText[renderableUid]);\n this._gpuBitmapText[renderableUid] = null;\n }\n updateRenderable(bitmapText) {\n const graphicsRenderable = this._getGpuBitmapText(bitmapText);\n syncWithProxy(bitmapText, graphicsRenderable);\n this._renderer.renderPipes.graphics.updateRenderable(graphicsRenderable);\n if (graphicsRenderable.context.customShader) {\n this._updateDistanceField(bitmapText);\n }\n }\n _updateContext(bitmapText, proxyGraphics) {\n const { context } = proxyGraphics;\n const bitmapFont = BitmapFontManager.getFont(bitmapText.text, bitmapText._style);\n context.clear();\n if (bitmapFont.distanceField.type !== \"none\") {\n if (!context.customShader) {\n if (!this._sdfShader) {\n this._sdfShader = new SdfShader();\n }\n context.customShader = this._sdfShader;\n }\n }\n const chars = Array.from(bitmapText.text);\n const style = bitmapText._style;\n let currentY = (style._stroke?.width || 0) / 2;\n currentY += bitmapFont.baseLineOffset;\n const bitmapTextLayout = getBitmapTextLayout(chars, style, bitmapFont);\n let index = 0;\n const padding = style.padding;\n const scale = bitmapTextLayout.scale;\n context.translate(\n -bitmapText._anchor._x * bitmapTextLayout.width - padding,\n -bitmapText._anchor._y * (bitmapTextLayout.height + bitmapTextLayout.offsetY) - padding\n ).scale(scale, scale);\n const tint = style._fill.color;\n for (let i = 0; i < bitmapTextLayout.lines.length; i++) {\n const line = bitmapTextLayout.lines[i];\n for (let j = 0; j < line.charPositions.length; j++) {\n const char = chars[index++];\n const charData = bitmapFont.chars[char];\n if (charData?.texture) {\n context.texture(\n charData.texture,\n tint ? tint : \"black\",\n Math.round(line.charPositions[j] + charData.xOffset),\n Math.round(currentY + charData.yOffset)\n );\n }\n }\n currentY += bitmapFont.lineHeight;\n }\n }\n _getGpuBitmapText(bitmapText) {\n return this._gpuBitmapText[bitmapText.uid] || this.initGpuText(bitmapText);\n }\n initGpuText(bitmapText) {\n const proxyRenderable = BigPool.get(Graphics);\n this._gpuBitmapText[bitmapText.uid] = proxyRenderable;\n this._updateContext(bitmapText, proxyRenderable);\n bitmapText.on(\"destroyed\", () => {\n this.destroyRenderable(bitmapText);\n });\n return this._gpuBitmapText[bitmapText.uid];\n }\n _updateDistanceField(bitmapText) {\n const context = this._getGpuBitmapText(bitmapText).context;\n const fontFamily = bitmapText._style.fontFamily;\n const dynamicFont = Cache.get(`${fontFamily}-bitmap`);\n const { a, b, c, d } = bitmapText.groupTransform;\n const dx = Math.sqrt(a * a + b * b);\n const dy = Math.sqrt(c * c + d * d);\n const worldScale = (Math.abs(dx) + Math.abs(dy)) / 2;\n const fontScale = dynamicFont.baseRenderedFontSize / bitmapText._style.fontSize;\n const resolution = bitmapText.resolution ?? this._renderer.resolution;\n const distance = worldScale * dynamicFont.distanceField.range * (1 / fontScale) * resolution;\n context.customShader.resources.localUniforms.uniforms.uDistance = distance;\n }\n destroy() {\n for (const uid in this._gpuBitmapText) {\n this._destroyRenderableByUid(uid);\n }\n this._gpuBitmapText = null;\n this._sdfShader?.destroy(true);\n this._sdfShader = null;\n this._renderer = null;\n }\n}\n/** @ignore */\nBitmapTextPipe.extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes\n ],\n name: \"bitmapText\"\n};\nfunction syncWithProxy(container, proxy) {\n proxy.groupTransform = container.groupTransform;\n proxy.groupColorAlpha = container.groupColorAlpha;\n proxy.groupColor = container.groupColor;\n proxy.groupBlendMode = container.groupBlendMode;\n proxy.globalDisplayStatus = container.globalDisplayStatus;\n proxy.groupTransform = container.groupTransform;\n proxy.localDisplayStatus = container.localDisplayStatus;\n proxy.groupAlpha = container.groupAlpha;\n proxy._roundPixels = container._roundPixels;\n}\n\nexport { BitmapTextPipe };\n//# sourceMappingURL=BitmapTextPipe.mjs.map\n","import { extensions } from '../../extensions/Extensions.mjs';\nimport { loadBitmapFont, bitmapFontCachePlugin } from './asset/loadBitmapFont.mjs';\nimport { BitmapTextPipe } from './BitmapTextPipe.mjs';\n\n\"use strict\";\nextensions.add(BitmapTextPipe, loadBitmapFont, bitmapFontCachePlugin);\n//# sourceMappingURL=init.mjs.map\n","import { ExtensionType } from '../../extensions/Extensions.mjs';\nimport { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs';\nimport { updateQuadBounds } from '../../utils/data/updateQuadBounds.mjs';\nimport { BigPool } from '../../utils/pool/PoolGroup.mjs';\nimport { BatchableSprite } from '../sprite/BatchableSprite.mjs';\n\n\"use strict\";\nclass HTMLTextPipe {\n constructor(renderer) {\n this._gpuText = /* @__PURE__ */ Object.create(null);\n this._renderer = renderer;\n }\n validateRenderable(htmlText) {\n const gpuText = this._getGpuText(htmlText);\n const newKey = htmlText._getKey();\n if (gpuText.textureNeedsUploading) {\n gpuText.textureNeedsUploading = false;\n return true;\n }\n if (gpuText.currentKey !== newKey) {\n return true;\n }\n return false;\n }\n addRenderable(htmlText) {\n const gpuText = this._getGpuText(htmlText);\n const batchableSprite = gpuText.batchableSprite;\n if (htmlText._didTextUpdate) {\n this._updateText(htmlText);\n }\n this._renderer.renderPipes.batch.addToBatch(batchableSprite);\n }\n updateRenderable(htmlText) {\n const gpuText = this._getGpuText(htmlText);\n const batchableSprite = gpuText.batchableSprite;\n if (htmlText._didTextUpdate) {\n this._updateText(htmlText);\n }\n batchableSprite.batcher.updateElement(batchableSprite);\n }\n destroyRenderable(htmlText) {\n this._destroyRenderableById(htmlText.uid);\n }\n _destroyRenderableById(htmlTextUid) {\n const gpuText = this._gpuText[htmlTextUid];\n this._renderer.htmlText.decreaseReferenceCount(gpuText.currentKey);\n BigPool.return(gpuText.batchableSprite);\n this._gpuText[htmlTextUid] = null;\n }\n _updateText(htmlText) {\n const newKey = htmlText._getKey();\n const gpuText = this._getGpuText(htmlText);\n const batchableSprite = gpuText.batchableSprite;\n if (gpuText.currentKey !== newKey) {\n this._updateGpuText(htmlText).catch((e) => {\n console.error(e);\n });\n }\n htmlText._didTextUpdate = false;\n const padding = htmlText._style.padding;\n updateQuadBounds(batchableSprite.bounds, htmlText._anchor, batchableSprite.texture, padding);\n }\n async _updateGpuText(htmlText) {\n htmlText._didTextUpdate = false;\n const gpuText = this._getGpuText(htmlText);\n if (gpuText.generatingTexture)\n return;\n const newKey = htmlText._getKey();\n this._renderer.htmlText.decreaseReferenceCount(gpuText.currentKey);\n gpuText.generatingTexture = true;\n gpuText.currentKey = newKey;\n const resolution = htmlText.resolution ?? this._renderer.resolution;\n const texture = await this._renderer.htmlText.getManagedTexture(\n htmlText.text,\n resolution,\n htmlText._style,\n htmlText._getKey()\n );\n const batchableSprite = gpuText.batchableSprite;\n batchableSprite.texture = gpuText.texture = texture;\n gpuText.generatingTexture = false;\n gpuText.textureNeedsUploading = true;\n htmlText.onViewUpdate();\n const padding = htmlText._style.padding;\n updateQuadBounds(batchableSprite.bounds, htmlText._anchor, batchableSprite.texture, padding);\n }\n _getGpuText(htmlText) {\n return this._gpuText[htmlText.uid] || this.initGpuText(htmlText);\n }\n initGpuText(htmlText) {\n const gpuTextData = {\n texture: Texture.EMPTY,\n currentKey: \"--\",\n batchableSprite: BigPool.get(BatchableSprite),\n textureNeedsUploading: false,\n generatingTexture: false\n };\n const batchableSprite = gpuTextData.batchableSprite;\n batchableSprite.renderable = htmlText;\n batchableSprite.texture = Texture.EMPTY;\n batchableSprite.bounds = { minX: 0, maxX: 1, minY: 0, maxY: 0 };\n batchableSprite.roundPixels = this._renderer._roundPixels | htmlText._roundPixels;\n this._gpuText[htmlText.uid] = gpuTextData;\n htmlText.on(\"destroyed\", () => {\n this.destroyRenderable(htmlText);\n });\n return gpuTextData;\n }\n destroy() {\n for (const i in this._gpuText) {\n this._destroyRenderableById(i);\n }\n this._gpuText = null;\n this._renderer = null;\n }\n}\n/** @ignore */\nHTMLTextPipe.extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes\n ],\n name: \"htmlText\"\n};\n\nexport { HTMLTextPipe };\n//# sourceMappingURL=HTMLTextPipe.mjs.map\n","import { DOMAdapter } from '../../environment/adapter.mjs';\n\n\"use strict\";\nfunction isSafari() {\n const { userAgent } = DOMAdapter.get().getNavigator();\n return /^((?!chrome|android).)*safari/i.test(userAgent);\n}\n\nexport { isSafari };\n//# sourceMappingURL=isSafari.mjs.map\n","\"use strict\";\nconst nssvg = \"http://www.w3.org/2000/svg\";\nconst nsxhtml = \"http://www.w3.org/1999/xhtml\";\nclass HTMLTextRenderData {\n constructor() {\n this.svgRoot = document.createElementNS(nssvg, \"svg\");\n this.foreignObject = document.createElementNS(nssvg, \"foreignObject\");\n this.domElement = document.createElementNS(nsxhtml, \"div\");\n this.styleElement = document.createElementNS(nsxhtml, \"style\");\n this.image = new Image();\n const { foreignObject, svgRoot, styleElement, domElement } = this;\n foreignObject.setAttribute(\"width\", \"10000\");\n foreignObject.setAttribute(\"height\", \"10000\");\n foreignObject.style.overflow = \"hidden\";\n svgRoot.appendChild(foreignObject);\n foreignObject.appendChild(styleElement);\n foreignObject.appendChild(domElement);\n }\n}\n\nexport { HTMLTextRenderData, nssvg, nsxhtml };\n//# sourceMappingURL=HTMLTextRenderData.mjs.map\n","import { Color } from '../../../color/Color.mjs';\n\n\"use strict\";\nfunction textStyleToCSS(style) {\n const stroke = style._stroke;\n const fill = style._fill;\n const cssStyleString = [\n `color: ${Color.shared.setValue(fill.color).toHex()}`,\n `font-size: ${style.fontSize}px`,\n `font-family: ${style.fontFamily}`,\n `font-weight: ${style.fontWeight}`,\n `font-style: ${style.fontStyle}`,\n `font-variant: ${style.fontVariant}`,\n `letter-spacing: ${style.letterSpacing}px`,\n `text-align: ${style.align}`,\n `padding: ${style.padding}px`,\n `white-space: ${style.whiteSpace === \"pre\" && style.wordWrap ? \"pre-wrap\" : style.whiteSpace}`,\n ...style.lineHeight ? [`line-height: ${style.lineHeight}px`] : [],\n ...style.wordWrap ? [\n `word-wrap: ${style.breakWords ? \"break-all\" : \"break-word\"}`,\n `max-width: ${style.wordWrapWidth}px`\n ] : [],\n ...stroke ? [strokeToCSS(stroke)] : [],\n ...style.dropShadow ? [dropShadowToCSS(style.dropShadow)] : [],\n ...style.cssOverrides\n ].join(\";\");\n const cssStyles = [`div { ${cssStyleString} }`];\n tagStyleToCSS(style.tagStyles, cssStyles);\n return cssStyles.join(\" \");\n}\nfunction dropShadowToCSS(dropShadowStyle) {\n const color = Color.shared.setValue(dropShadowStyle.color).setAlpha(dropShadowStyle.alpha).toHexa();\n const x = Math.round(Math.cos(dropShadowStyle.angle) * dropShadowStyle.distance);\n const y = Math.round(Math.sin(dropShadowStyle.angle) * dropShadowStyle.distance);\n const position = `${x}px ${y}px`;\n if (dropShadowStyle.blur > 0) {\n return `text-shadow: ${position} ${dropShadowStyle.blur}px ${color}`;\n }\n return `text-shadow: ${position} ${color}`;\n}\nfunction strokeToCSS(stroke) {\n return [\n `-webkit-text-stroke-width: ${stroke.width}px`,\n `-webkit-text-stroke-color: ${Color.shared.setValue(stroke.color).toHex()}`,\n `text-stroke-width: ${stroke.width}px`,\n `text-stroke-color: ${Color.shared.setValue(stroke.color).toHex()}`,\n \"paint-order: stroke\"\n ].join(\";\");\n}\nconst templates = {\n fontSize: `font-size: {{VALUE}}px`,\n fontFamily: `font-family: {{VALUE}}`,\n fontWeight: `font-weight: {{VALUE}}`,\n fontStyle: `font-style: {{VALUE}}`,\n fontVariant: `font-variant: {{VALUE}}`,\n letterSpacing: `letter-spacing: {{VALUE}}px`,\n align: `text-align: {{VALUE}}`,\n padding: `padding: {{VALUE}}px`,\n whiteSpace: `white-space: {{VALUE}}`,\n lineHeight: `line-height: {{VALUE}}px`,\n wordWrapWidth: `max-width: {{VALUE}}px`\n};\nconst transform = {\n fill: (value) => `color: ${Color.shared.setValue(value).toHex()}`,\n breakWords: (value) => `word-wrap: ${value ? \"break-all\" : \"break-word\"}`,\n stroke: strokeToCSS,\n dropShadow: dropShadowToCSS\n};\nfunction tagStyleToCSS(tagStyles, out) {\n for (const i in tagStyles) {\n const tagStyle = tagStyles[i];\n const cssTagStyle = [];\n for (const j in tagStyle) {\n if (transform[j]) {\n cssTagStyle.push(transform[j](tagStyle[j]));\n } else if (templates[j]) {\n cssTagStyle.push(templates[j].replace(\"{{VALUE}}\", tagStyle[j]));\n }\n }\n out.push(`${i} { ${cssTagStyle.join(\";\")} }`);\n }\n}\n\nexport { textStyleToCSS };\n//# sourceMappingURL=textStyleToCSS.mjs.map\n","import { warn } from '../../utils/logging/warn.mjs';\nimport { TextStyle } from '../text/TextStyle.mjs';\nimport { generateTextStyleKey } from '../text/utils/generateTextStyleKey.mjs';\nimport { textStyleToCSS } from './utils/textStyleToCSS.mjs';\n\n\"use strict\";\nclass HTMLTextStyle extends TextStyle {\n constructor(options = {}) {\n super(options);\n this._cssOverrides = [];\n this.cssOverrides ?? (this.cssOverrides = options.cssOverrides);\n this.tagStyles = options.tagStyles ?? {};\n }\n /** List of style overrides that will be applied to the HTML text. */\n set cssOverrides(value) {\n this._cssOverrides = value instanceof Array ? value : [value];\n this.update();\n }\n get cssOverrides() {\n return this._cssOverrides;\n }\n _generateKey() {\n this._styleKey = generateTextStyleKey(this) + this._cssOverrides.join(\"-\");\n return this._styleKey;\n }\n update() {\n this._cssStyle = null;\n super.update();\n }\n /**\n * Creates a new HTMLTextStyle object with the same values as this one.\n * @returns New cloned HTMLTextStyle object\n */\n clone() {\n return new HTMLTextStyle({\n align: this.align,\n breakWords: this.breakWords,\n dropShadow: this.dropShadow,\n fill: this._fill,\n fontFamily: this.fontFamily,\n fontSize: this.fontSize,\n fontStyle: this.fontStyle,\n fontVariant: this.fontVariant,\n fontWeight: this.fontWeight,\n letterSpacing: this.letterSpacing,\n lineHeight: this.lineHeight,\n padding: this.padding,\n stroke: this._stroke,\n whiteSpace: this.whiteSpace,\n wordWrap: this.wordWrap,\n wordWrapWidth: this.wordWrapWidth,\n cssOverrides: this.cssOverrides\n });\n }\n get cssStyle() {\n if (!this._cssStyle) {\n this._cssStyle = textStyleToCSS(this);\n }\n return this._cssStyle;\n }\n /**\n * Add a style override, this can be any CSS property\n * it will override any built-in style. This is the\n * property and the value as a string (e.g., `color: red`).\n * This will override any other internal style.\n * @param {string} value - CSS style(s) to add.\n * @example\n * style.addOverride('background-color: red');\n */\n addOverride(...value) {\n const toAdd = value.filter((v) => !this.cssOverrides.includes(v));\n if (toAdd.length > 0) {\n this.cssOverrides.push(...toAdd);\n this.update();\n }\n }\n /**\n * Remove any overrides that match the value.\n * @param {string} value - CSS style to remove.\n * @example\n * style.removeOverride('background-color: red');\n */\n removeOverride(...value) {\n const toRemove = value.filter((v) => this.cssOverrides.includes(v));\n if (toRemove.length > 0) {\n this.cssOverrides = this.cssOverrides.filter((v) => !toRemove.includes(v));\n this.update();\n }\n }\n set fill(value) {\n if (typeof value !== \"string\" && typeof value !== \"number\") {\n warn(\"[HTMLTextStyle] only color fill is not supported by HTMLText\");\n }\n super.fill = value;\n }\n set stroke(value) {\n if (value && typeof value !== \"string\" && typeof value !== \"number\") {\n warn(\"[HTMLTextStyle] only color stroke is not supported by HTMLText\");\n }\n super.stroke = value;\n }\n}\n\nexport { HTMLTextStyle };\n//# sourceMappingURL=HtmlTextStyle.mjs.map\n","\"use strict\";\nfunction extractFontFamilies(text, style) {\n const fontFamily = style.fontFamily;\n const fontFamilies = [];\n const dedupe = {};\n const regex = /font-family:([^;\"\\s]+)/g;\n const matches = text.match(regex);\n function addFontFamily(fontFamily2) {\n if (!dedupe[fontFamily2]) {\n fontFamilies.push(fontFamily2);\n dedupe[fontFamily2] = true;\n }\n }\n if (Array.isArray(fontFamily)) {\n for (let i = 0; i < fontFamily.length; i++) {\n addFontFamily(fontFamily[i]);\n }\n } else {\n addFontFamily(fontFamily);\n }\n if (matches) {\n matches.forEach((match) => {\n const fontFamily2 = match.split(\":\")[1].trim();\n addFontFamily(fontFamily2);\n });\n }\n for (const i in style.tagStyles) {\n const fontFamily2 = style.tagStyles[i].fontFamily;\n addFontFamily(fontFamily2);\n }\n return fontFamilies;\n}\n\nexport { extractFontFamilies };\n//# sourceMappingURL=extractFontFamilies.mjs.map\n","import { DOMAdapter } from '../../../environment/adapter.mjs';\n\n\"use strict\";\nasync function loadFontAsBase64(url) {\n const response = await DOMAdapter.get().fetch(url);\n const blob = await response.blob();\n const reader = new FileReader();\n const dataSrc = await new Promise((resolve, reject) => {\n reader.onloadend = () => resolve(reader.result);\n reader.onerror = reject;\n reader.readAsDataURL(blob);\n });\n return dataSrc;\n}\n\nexport { loadFontAsBase64 };\n//# sourceMappingURL=loadFontAsBase64.mjs.map\n","import { loadFontAsBase64 } from './loadFontAsBase64.mjs';\n\n\"use strict\";\nasync function loadFontCSS(style, url) {\n const dataSrc = await loadFontAsBase64(url);\n return `@font-face {\n font-family: \"${style.fontFamily}\";\n src: url('${dataSrc}');\n font-weight: ${style.fontWeight};\n font-style: ${style.fontStyle};\n }`;\n}\n\nexport { loadFontCSS };\n//# sourceMappingURL=loadFontCSS.mjs.map\n","import { Cache } from '../../../assets/cache/Cache.mjs';\nimport { loadFontCSS } from './loadFontCSS.mjs';\n\n\"use strict\";\nconst FontStylePromiseCache = /* @__PURE__ */ new Map();\nasync function getFontCss(fontFamilies, style, defaultOptions) {\n const fontPromises = fontFamilies.filter((fontFamily) => Cache.has(`${fontFamily}-and-url`)).map((fontFamily, i) => {\n if (!FontStylePromiseCache.has(fontFamily)) {\n const { url } = Cache.get(`${fontFamily}-and-url`);\n if (i === 0) {\n FontStylePromiseCache.set(fontFamily, loadFontCSS(style, url));\n } else {\n FontStylePromiseCache.set(fontFamily, loadFontCSS({\n fontWeight: defaultOptions.fontWeight,\n fontStyle: defaultOptions.fontStyle,\n fontFamily\n }, url));\n }\n }\n return FontStylePromiseCache.get(fontFamily);\n });\n return (await Promise.all(fontPromises)).join(\"\\n\");\n}\n\nexport { FontStylePromiseCache, getFontCss };\n//# sourceMappingURL=getFontCss.mjs.map\n","\"use strict\";\nfunction getSVGUrl(text, style, resolution, fontCSS, htmlTextData) {\n const { domElement, styleElement, svgRoot } = htmlTextData;\n domElement.innerHTML = `
${text}
`;\n domElement.setAttribute(\"style\", `transform: scale(${resolution});transform-origin: top left; display: inline-block`);\n styleElement.textContent = fontCSS;\n const { width, height } = htmlTextData.image;\n svgRoot.setAttribute(\"width\", width.toString());\n svgRoot.setAttribute(\"height\", height.toString());\n return new XMLSerializer().serializeToString(svgRoot);\n}\n\nexport { getSVGUrl };\n//# sourceMappingURL=getSVGUrl.mjs.map\n","import { CanvasPool } from '../../../rendering/renderers/shared/texture/CanvasPool.mjs';\n\n\"use strict\";\nfunction getTemporaryCanvasFromImage(image, resolution) {\n const canvasAndContext = CanvasPool.getOptimalCanvasAndContext(\n image.width,\n image.height,\n resolution\n );\n const { context } = canvasAndContext;\n context.clearRect(0, 0, image.width, image.height);\n context.drawImage(image, 0, 0);\n CanvasPool.returnCanvasAndContext(canvasAndContext);\n return canvasAndContext.canvas;\n}\n\nexport { getTemporaryCanvasFromImage };\n//# sourceMappingURL=getTemporaryCanvasFromImage.mjs.map\n","\"use strict\";\nfunction loadSVGImage(image, url, delay) {\n return new Promise(async (resolve) => {\n if (delay) {\n await new Promise((resolve2) => setTimeout(resolve2, 100));\n }\n image.onload = () => {\n resolve();\n };\n image.src = `data:image/svg+xml;charset=utf8,${encodeURIComponent(url)}`;\n image.crossOrigin = \"anonymous\";\n });\n}\n\nexport { loadSVGImage };\n//# sourceMappingURL=loadSVGImage.mjs.map\n","import { CanvasTextMetrics } from '../../text/canvas/CanvasTextMetrics.mjs';\nimport { HTMLTextRenderData } from '../HTMLTextRenderData.mjs';\n\n\"use strict\";\nlet tempHTMLTextRenderData;\nfunction measureHtmlText(text, style, fontStyleCSS, htmlTextRenderData) {\n htmlTextRenderData = htmlTextRenderData || tempHTMLTextRenderData || (tempHTMLTextRenderData = new HTMLTextRenderData());\n const { domElement, styleElement, svgRoot } = htmlTextRenderData;\n domElement.innerHTML = `
${text}
`;\n domElement.setAttribute(\"style\", \"transform-origin: top left; display: inline-block\");\n if (fontStyleCSS) {\n styleElement.textContent = fontStyleCSS;\n }\n document.body.appendChild(svgRoot);\n const contentBounds = domElement.getBoundingClientRect();\n svgRoot.remove();\n const descenderPadding = CanvasTextMetrics.measureFont(style.fontStyle).descent;\n return {\n width: contentBounds.width,\n height: contentBounds.height + descenderPadding\n };\n}\n\nexport { measureHtmlText };\n//# sourceMappingURL=measureHtmlText.mjs.map\n","import { ExtensionType } from '../../extensions/Extensions.mjs';\nimport { TexturePool } from '../../rendering/renderers/shared/texture/TexturePool.mjs';\nimport { RendererType } from '../../rendering/renderers/types.mjs';\nimport { isSafari } from '../../utils/browser/isSafari.mjs';\nimport { warn } from '../../utils/logging/warn.mjs';\nimport { BigPool } from '../../utils/pool/PoolGroup.mjs';\nimport { getPo2TextureFromSource } from '../text/utils/getPo2TextureFromSource.mjs';\nimport { HTMLTextRenderData } from './HTMLTextRenderData.mjs';\nimport { HTMLTextStyle } from './HtmlTextStyle.mjs';\nimport { extractFontFamilies } from './utils/extractFontFamilies.mjs';\nimport { getFontCss } from './utils/getFontCss.mjs';\nimport { getSVGUrl } from './utils/getSVGUrl.mjs';\nimport { getTemporaryCanvasFromImage } from './utils/getTemporaryCanvasFromImage.mjs';\nimport { loadSVGImage } from './utils/loadSVGImage.mjs';\nimport { measureHtmlText } from './utils/measureHtmlText.mjs';\n\n\"use strict\";\nclass HTMLTextSystem {\n constructor(renderer) {\n this._activeTextures = {};\n this._renderer = renderer;\n this._createCanvas = renderer.type === RendererType.WEBGPU;\n }\n getTexture(options) {\n return this._buildTexturePromise(\n options.text,\n options.resolution,\n options.style\n );\n }\n getManagedTexture(text, resolution, style, textKey) {\n if (this._activeTextures[textKey]) {\n this._increaseReferenceCount(textKey);\n return this._activeTextures[textKey].promise;\n }\n const promise = this._buildTexturePromise(text, resolution, style).then((texture) => {\n this._activeTextures[textKey].texture = texture;\n return texture;\n });\n this._activeTextures[textKey] = {\n texture: null,\n promise,\n usageCount: 1\n };\n return promise;\n }\n async _buildTexturePromise(text, resolution, style) {\n const htmlTextData = BigPool.get(HTMLTextRenderData);\n const fontFamilies = extractFontFamilies(text, style);\n const fontCSS = await getFontCss(\n fontFamilies,\n style,\n HTMLTextStyle.defaultTextStyle\n );\n const measured = measureHtmlText(text, style, fontCSS, htmlTextData);\n const width = Math.ceil(Math.ceil(Math.max(1, measured.width) + style.padding * 2) * resolution);\n const height = Math.ceil(Math.ceil(Math.max(1, measured.height) + style.padding * 2) * resolution);\n const image = htmlTextData.image;\n image.width = width | 0;\n image.height = height | 0;\n const svgURL = getSVGUrl(text, style, resolution, fontCSS, htmlTextData);\n await loadSVGImage(image, svgURL, isSafari() && fontFamilies.length > 0);\n let resource = image;\n if (this._createCanvas) {\n resource = getTemporaryCanvasFromImage(image, resolution);\n }\n const texture = getPo2TextureFromSource(resource, image.width, image.height, resolution);\n if (this._createCanvas) {\n this._renderer.texture.initSource(texture.source);\n }\n BigPool.return(htmlTextData);\n return texture;\n }\n _increaseReferenceCount(textKey) {\n this._activeTextures[textKey].usageCount++;\n }\n decreaseReferenceCount(textKey) {\n const activeTexture = this._activeTextures[textKey];\n if (!activeTexture)\n return;\n activeTexture.usageCount--;\n if (activeTexture.usageCount === 0) {\n if (activeTexture.texture) {\n this._cleanUp(activeTexture);\n } else {\n activeTexture.promise.then((texture) => {\n activeTexture.texture = texture;\n this._cleanUp(activeTexture);\n }).catch(() => {\n warn(\"HTMLTextSystem: Failed to clean texture\");\n });\n }\n this._activeTextures[textKey] = null;\n }\n }\n _cleanUp(activeTexture) {\n TexturePool.returnTexture(activeTexture.texture);\n activeTexture.texture.source.resource = null;\n activeTexture.texture.source.uploadMethodId = \"unknown\";\n }\n getReferenceCount(textKey) {\n return this._activeTextures[textKey].usageCount;\n }\n destroy() {\n this._activeTextures = null;\n }\n}\n/** @ignore */\nHTMLTextSystem.extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem,\n ExtensionType.CanvasSystem\n ],\n name: \"htmlText\"\n};\nHTMLTextSystem.defaultFontOptions = {\n fontFamily: \"Arial\",\n fontStyle: \"normal\",\n fontWeight: \"normal\"\n};\n\nexport { HTMLTextSystem };\n//# sourceMappingURL=HTMLTextSystem.mjs.map\n","import { extensions } from '../../extensions/Extensions.mjs';\nimport { HTMLTextPipe } from './HTMLTextPipe.mjs';\nimport { HTMLTextSystem } from './HTMLTextSystem.mjs';\n\n\"use strict\";\nextensions.add(HTMLTextSystem);\nextensions.add(HTMLTextPipe);\n//# sourceMappingURL=init.mjs.map\n","import { Color } from '../../../../color/Color.mjs';\nimport { Matrix } from '../../../../maths/matrix/Matrix.mjs';\nimport { Texture } from '../../../../rendering/renderers/shared/texture/Texture.mjs';\nimport { warn } from '../../../../utils/logging/warn.mjs';\nimport { FillGradient } from '../../../graphics/shared/fill/FillGradient.mjs';\nimport { FillPattern } from '../../../graphics/shared/fill/FillPattern.mjs';\n\n\"use strict\";\nfunction getCanvasFillStyle(fillStyle, context) {\n if (fillStyle.texture === Texture.WHITE && !fillStyle.fill) {\n return Color.shared.setValue(fillStyle.color).toHex();\n } else if (!fillStyle.fill) {\n const pattern = context.createPattern(fillStyle.texture.source.resource, \"repeat\");\n const tempMatrix = fillStyle.matrix.copyTo(Matrix.shared);\n tempMatrix.scale(fillStyle.texture.frame.width, fillStyle.texture.frame.height);\n pattern.setTransform(tempMatrix);\n return pattern;\n } else if (fillStyle.fill instanceof FillPattern) {\n const fillPattern = fillStyle.fill;\n const pattern = context.createPattern(fillPattern.texture.source.resource, \"repeat\");\n const tempMatrix = fillPattern.transform.copyTo(Matrix.shared);\n tempMatrix.scale(\n fillPattern.texture.frame.width,\n fillPattern.texture.frame.height\n );\n pattern.setTransform(tempMatrix);\n return pattern;\n } else if (fillStyle.fill instanceof FillGradient) {\n const fillGradient = fillStyle.fill;\n if (fillGradient.type === \"linear\") {\n const gradient = context.createLinearGradient(\n fillGradient.x0,\n fillGradient.y0,\n fillGradient.x1,\n fillGradient.y1\n );\n fillGradient.gradientStops.forEach((stop) => {\n gradient.addColorStop(stop.offset, Color.shared.setValue(stop.color).toHex());\n });\n return gradient;\n }\n }\n warn(\"FillStyle not recognised\", fillStyle);\n return \"red\";\n}\n\nexport { getCanvasFillStyle };\n//# sourceMappingURL=getCanvasFillStyle.mjs.map\n","import { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { updateQuadBounds } from '../../../utils/data/updateQuadBounds.mjs';\nimport { BigPool } from '../../../utils/pool/PoolGroup.mjs';\nimport { BatchableSprite } from '../../sprite/BatchableSprite.mjs';\n\n\"use strict\";\nclass CanvasTextPipe {\n constructor(renderer) {\n this._gpuText = /* @__PURE__ */ Object.create(null);\n this._renderer = renderer;\n }\n validateRenderable(text) {\n const gpuText = this._getGpuText(text);\n const newKey = text._getKey();\n if (gpuText.currentKey !== newKey) {\n const resolution = text.resolution ?? this._renderer.resolution;\n const { width, height } = this._renderer.canvasText.getTextureSize(\n text.text,\n resolution,\n text._style\n );\n if (\n // is only being used by this text:\n this._renderer.canvasText.getReferenceCount(gpuText.currentKey) === 1 && width === gpuText.texture._source.width && height === gpuText.texture._source.height\n ) {\n return false;\n }\n return true;\n }\n return false;\n }\n addRenderable(text, _instructionSet) {\n const gpuText = this._getGpuText(text);\n const batchableSprite = gpuText.batchableSprite;\n if (text._didTextUpdate) {\n this._updateText(text);\n }\n this._renderer.renderPipes.batch.addToBatch(batchableSprite);\n }\n updateRenderable(text) {\n const gpuText = this._getGpuText(text);\n const batchableSprite = gpuText.batchableSprite;\n if (text._didTextUpdate) {\n this._updateText(text);\n }\n batchableSprite.batcher.updateElement(batchableSprite);\n }\n destroyRenderable(text) {\n this._destroyRenderableById(text.uid);\n }\n _destroyRenderableById(textUid) {\n const gpuText = this._gpuText[textUid];\n this._renderer.canvasText.decreaseReferenceCount(gpuText.currentKey);\n BigPool.return(gpuText.batchableSprite);\n this._gpuText[textUid] = null;\n }\n _updateText(text) {\n const newKey = text._getKey();\n const gpuText = this._getGpuText(text);\n const batchableSprite = gpuText.batchableSprite;\n if (gpuText.currentKey !== newKey) {\n this._updateGpuText(text);\n }\n text._didTextUpdate = false;\n const padding = text._style.padding;\n updateQuadBounds(batchableSprite.bounds, text._anchor, batchableSprite.texture, padding);\n }\n _updateGpuText(text) {\n const gpuText = this._getGpuText(text);\n const batchableSprite = gpuText.batchableSprite;\n if (gpuText.texture) {\n this._renderer.canvasText.decreaseReferenceCount(gpuText.currentKey);\n }\n gpuText.texture = batchableSprite.texture = this._renderer.canvasText.getManagedTexture(text);\n gpuText.currentKey = text._getKey();\n batchableSprite.texture = gpuText.texture;\n }\n _getGpuText(text) {\n return this._gpuText[text.uid] || this.initGpuText(text);\n }\n initGpuText(text) {\n const gpuTextData = {\n texture: null,\n currentKey: \"--\",\n batchableSprite: BigPool.get(BatchableSprite)\n };\n gpuTextData.batchableSprite.renderable = text;\n gpuTextData.batchableSprite.bounds = { minX: 0, maxX: 1, minY: 0, maxY: 0 };\n gpuTextData.batchableSprite.roundPixels = this._renderer._roundPixels | text._roundPixels;\n this._gpuText[text.uid] = gpuTextData;\n this._updateText(text);\n text.on(\"destroyed\", () => {\n this.destroyRenderable(text);\n });\n return gpuTextData;\n }\n destroy() {\n for (const i in this._gpuText) {\n this._destroyRenderableById(i);\n }\n this._gpuText = null;\n this._renderer = null;\n }\n}\n/** @ignore */\nCanvasTextPipe.extension = {\n type: [\n ExtensionType.WebGLPipes,\n ExtensionType.WebGPUPipes,\n ExtensionType.CanvasPipes\n ],\n name: \"text\"\n};\n\nexport { CanvasTextPipe };\n//# sourceMappingURL=CanvasTextPipe.mjs.map\n","import { Rectangle } from '../../maths/shapes/Rectangle.mjs';\n\n\"use strict\";\nfunction checkRow(data, width, y) {\n for (let x = 0, index = 4 * y * width; x < width; ++x, index += 4) {\n if (data[index + 3] !== 0)\n return false;\n }\n return true;\n}\nfunction checkColumn(data, width, x, top, bottom) {\n const stride = 4 * width;\n for (let y = top, index = top * stride + 4 * x; y <= bottom; ++y, index += stride) {\n if (data[index + 3] !== 0)\n return false;\n }\n return true;\n}\nfunction getCanvasBoundingBox(canvas, resolution = 1) {\n const { width, height } = canvas;\n const context = canvas.getContext(\"2d\", {\n willReadFrequently: true\n });\n if (context === null) {\n throw new TypeError(\"Failed to get canvas 2D context\");\n }\n const imageData = context.getImageData(0, 0, width, height);\n const data = imageData.data;\n let left = 0;\n let top = 0;\n let right = width - 1;\n let bottom = height - 1;\n while (top < height && checkRow(data, width, top))\n ++top;\n if (top === height)\n return Rectangle.EMPTY;\n while (checkRow(data, width, bottom))\n --bottom;\n while (checkColumn(data, width, left, top, bottom))\n ++left;\n while (checkColumn(data, width, right, top, bottom))\n --right;\n ++right;\n ++bottom;\n return new Rectangle(left / resolution, top / resolution, (right - left) / resolution, (bottom - top) / resolution);\n}\n\nexport { getCanvasBoundingBox };\n//# sourceMappingURL=getCanvasBoundingBox.mjs.map\n","import { Color } from '../../../color/Color.mjs';\nimport { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { nextPow2 } from '../../../maths/misc/pow2.mjs';\nimport { CanvasPool } from '../../../rendering/renderers/shared/texture/CanvasPool.mjs';\nimport { TexturePool } from '../../../rendering/renderers/shared/texture/TexturePool.mjs';\nimport { getCanvasBoundingBox } from '../../../utils/canvas/getCanvasBoundingBox.mjs';\nimport { deprecation } from '../../../utils/logging/deprecation.mjs';\nimport { TextStyle } from '../TextStyle.mjs';\nimport { getPo2TextureFromSource } from '../utils/getPo2TextureFromSource.mjs';\nimport { CanvasTextMetrics } from './CanvasTextMetrics.mjs';\nimport { fontStringFromTextStyle } from './utils/fontStringFromTextStyle.mjs';\nimport { getCanvasFillStyle } from './utils/getCanvasFillStyle.mjs';\n\n\"use strict\";\nclass CanvasTextSystem {\n constructor(_renderer) {\n this._activeTextures = {};\n this._renderer = _renderer;\n }\n getTextureSize(text, resolution, style) {\n const measured = CanvasTextMetrics.measureText(text || \" \", style);\n let width = Math.ceil(Math.ceil(Math.max(1, measured.width) + style.padding * 2) * resolution);\n let height = Math.ceil(Math.ceil(Math.max(1, measured.height) + style.padding * 2) * resolution);\n width = Math.ceil(width - 1e-6);\n height = Math.ceil(height - 1e-6);\n width = nextPow2(width);\n height = nextPow2(height);\n return { width, height };\n }\n getTexture(options, resolution, style, _textKey) {\n if (typeof options === \"string\") {\n deprecation(\"8.0.0\", \"CanvasTextSystem.getTexture: Use object TextOptions instead of separate arguments\");\n options = {\n text: options,\n style,\n resolution\n };\n }\n if (!(options.style instanceof TextStyle)) {\n options.style = new TextStyle(options.style);\n }\n const { texture, canvasAndContext } = this.createTextureAndCanvas(\n options\n );\n this._renderer.texture.initSource(texture._source);\n CanvasPool.returnCanvasAndContext(canvasAndContext);\n return texture;\n }\n createTextureAndCanvas(options) {\n const { text, style } = options;\n const resolution = options.resolution ?? this._renderer.resolution;\n const measured = CanvasTextMetrics.measureText(text || \" \", style);\n const width = Math.ceil(Math.ceil(Math.max(1, measured.width) + style.padding * 2) * resolution);\n const height = Math.ceil(Math.ceil(Math.max(1, measured.height) + style.padding * 2) * resolution);\n const canvasAndContext = CanvasPool.getOptimalCanvasAndContext(width, height);\n const { canvas } = canvasAndContext;\n this.renderTextToCanvas(text, style, resolution, canvasAndContext);\n const texture = getPo2TextureFromSource(canvas, width, height, resolution);\n if (style.trim) {\n const trimmed = getCanvasBoundingBox(canvas, resolution);\n texture.frame.copyFrom(trimmed);\n texture.updateUvs();\n }\n return { texture, canvasAndContext };\n }\n getManagedTexture(text) {\n const textKey = text._getKey();\n if (this._activeTextures[textKey]) {\n this._increaseReferenceCount(textKey);\n return this._activeTextures[textKey].texture;\n }\n const { texture, canvasAndContext } = this.createTextureAndCanvas(text);\n this._activeTextures[textKey] = {\n canvasAndContext,\n texture,\n usageCount: 1\n };\n return texture;\n }\n _increaseReferenceCount(textKey) {\n this._activeTextures[textKey].usageCount++;\n }\n decreaseReferenceCount(textKey) {\n const activeTexture = this._activeTextures[textKey];\n activeTexture.usageCount--;\n if (activeTexture.usageCount === 0) {\n CanvasPool.returnCanvasAndContext(activeTexture.canvasAndContext);\n TexturePool.returnTexture(activeTexture.texture);\n const source = activeTexture.texture.source;\n source.resource = null;\n source.uploadMethodId = \"unknown\";\n source.alphaMode = \"no-premultiply-alpha\";\n this._activeTextures[textKey] = null;\n }\n }\n getReferenceCount(textKey) {\n return this._activeTextures[textKey].usageCount;\n }\n /**\n * Renders text to its canvas, and updates its texture.\n *\n * By default this is used internally to ensure the texture is correct before rendering,\n * but it can be used called externally, for example from this class to 'pre-generate' the texture from a piece of text,\n * and then shared across multiple Sprites.\n * @param text\n * @param style\n * @param resolution\n * @param canvasAndContext\n */\n renderTextToCanvas(text, style, resolution, canvasAndContext) {\n const { canvas, context } = canvasAndContext;\n const font = fontStringFromTextStyle(style);\n const measured = CanvasTextMetrics.measureText(text || \" \", style);\n const lines = measured.lines;\n const lineHeight = measured.lineHeight;\n const lineWidths = measured.lineWidths;\n const maxLineWidth = measured.maxLineWidth;\n const fontProperties = measured.fontProperties;\n const height = canvas.height;\n context.resetTransform();\n context.scale(resolution, resolution);\n const padding = style.padding * 2;\n context.clearRect(0, 0, measured.width + 4 + padding, measured.height + 4 + padding);\n if (style._stroke?.width) {\n const strokeStyle = style._stroke;\n context.lineWidth = strokeStyle.width;\n context.miterLimit = strokeStyle.miterLimit;\n context.lineJoin = strokeStyle.join;\n context.lineCap = strokeStyle.cap;\n }\n context.font = font;\n let linePositionX;\n let linePositionY;\n const passesCount = style.dropShadow ? 2 : 1;\n for (let i = 0; i < passesCount; ++i) {\n const isShadowPass = style.dropShadow && i === 0;\n const dsOffsetText = isShadowPass ? Math.ceil(Math.max(1, height) + style.padding * 2) : 0;\n const dsOffsetShadow = dsOffsetText * resolution;\n if (isShadowPass) {\n context.fillStyle = \"black\";\n context.strokeStyle = \"black\";\n const shadowOptions = style.dropShadow;\n const dropShadowColor = shadowOptions.color;\n const dropShadowAlpha = shadowOptions.alpha;\n context.shadowColor = Color.shared.setValue(dropShadowColor).setAlpha(dropShadowAlpha).toRgbaString();\n const dropShadowBlur = shadowOptions.blur * resolution;\n const dropShadowDistance = shadowOptions.distance * resolution;\n context.shadowBlur = dropShadowBlur;\n context.shadowOffsetX = Math.cos(shadowOptions.angle) * dropShadowDistance;\n context.shadowOffsetY = Math.sin(shadowOptions.angle) * dropShadowDistance + dsOffsetShadow;\n } else {\n context.globalAlpha = style._fill?.alpha ?? 1;\n context.fillStyle = style._fill ? getCanvasFillStyle(style._fill, context) : null;\n if (style._stroke?.width) {\n context.strokeStyle = getCanvasFillStyle(style._stroke, context);\n }\n context.shadowColor = \"black\";\n }\n let linePositionYShift = (lineHeight - fontProperties.fontSize) / 2;\n if (lineHeight - fontProperties.fontSize < 0) {\n linePositionYShift = 0;\n }\n const strokeWidth = style._stroke?.width ?? 0;\n for (let i2 = 0; i2 < lines.length; i2++) {\n linePositionX = strokeWidth / 2;\n linePositionY = strokeWidth / 2 + i2 * lineHeight + fontProperties.ascent + linePositionYShift;\n if (style.align === \"right\") {\n linePositionX += maxLineWidth - lineWidths[i2];\n } else if (style.align === \"center\") {\n linePositionX += (maxLineWidth - lineWidths[i2]) / 2;\n }\n if (style._stroke?.width) {\n this._drawLetterSpacing(\n lines[i2],\n style,\n canvasAndContext,\n linePositionX + style.padding,\n linePositionY + style.padding - dsOffsetText,\n true\n );\n }\n if (style._fill !== void 0) {\n this._drawLetterSpacing(\n lines[i2],\n style,\n canvasAndContext,\n linePositionX + style.padding,\n linePositionY + style.padding - dsOffsetText\n );\n }\n }\n }\n }\n /**\n * Render the text with letter-spacing.\n * @param text - The text to draw\n * @param style\n * @param canvasAndContext\n * @param x - Horizontal position to draw the text\n * @param y - Vertical position to draw the text\n * @param isStroke - Is this drawing for the outside stroke of the\n * text? If not, it's for the inside fill\n */\n _drawLetterSpacing(text, style, canvasAndContext, x, y, isStroke = false) {\n const { context } = canvasAndContext;\n const letterSpacing = style.letterSpacing;\n let useExperimentalLetterSpacing = false;\n if (CanvasTextMetrics.experimentalLetterSpacingSupported) {\n if (CanvasTextMetrics.experimentalLetterSpacing) {\n context.letterSpacing = `${letterSpacing}px`;\n context.textLetterSpacing = `${letterSpacing}px`;\n useExperimentalLetterSpacing = true;\n } else {\n context.letterSpacing = \"0px\";\n context.textLetterSpacing = \"0px\";\n }\n }\n if (letterSpacing === 0 || useExperimentalLetterSpacing) {\n if (isStroke) {\n context.strokeText(text, x, y);\n } else {\n context.fillText(text, x, y);\n }\n return;\n }\n let currentPosition = x;\n const stringArray = CanvasTextMetrics.graphemeSegmenter(text);\n let previousWidth = context.measureText(text).width;\n let currentWidth = 0;\n for (let i = 0; i < stringArray.length; ++i) {\n const currentChar = stringArray[i];\n if (isStroke) {\n context.strokeText(currentChar, currentPosition, y);\n } else {\n context.fillText(currentChar, currentPosition, y);\n }\n let textStr = \"\";\n for (let j = i + 1; j < stringArray.length; ++j) {\n textStr += stringArray[j];\n }\n currentWidth = context.measureText(textStr).width;\n currentPosition += previousWidth - currentWidth + letterSpacing;\n previousWidth = currentWidth;\n }\n }\n destroy() {\n this._activeTextures = null;\n }\n}\n/** @ignore */\nCanvasTextSystem.extension = {\n type: [\n ExtensionType.WebGLSystem,\n ExtensionType.WebGPUSystem,\n ExtensionType.CanvasSystem\n ],\n name: \"canvasText\"\n};\n\nexport { CanvasTextSystem };\n//# sourceMappingURL=CanvasTextSystem.mjs.map\n","import { extensions } from '../../extensions/Extensions.mjs';\nimport { CanvasTextPipe } from './canvas/CanvasTextPipe.mjs';\nimport { CanvasTextSystem } from './canvas/CanvasTextSystem.mjs';\n\n\"use strict\";\nextensions.add(CanvasTextSystem);\nextensions.add(CanvasTextPipe);\n//# sourceMappingURL=init.mjs.map\n","import { TexturePool } from '../../../rendering/renderers/shared/texture/TexturePool.mjs';\nimport { Bounds } from '../../container/bounds/Bounds.mjs';\n\n\"use strict\";\nconst tempBounds = new Bounds();\nfunction getPo2TextureFromSource(image, width, height, resolution) {\n const bounds = tempBounds;\n bounds.minX = 0;\n bounds.minY = 0;\n bounds.maxX = image.width / resolution | 0;\n bounds.maxY = image.height / resolution | 0;\n const texture = TexturePool.getOptimalTexture(\n bounds.width,\n bounds.height,\n resolution,\n false\n );\n texture.source.uploadMethodId = \"image\";\n texture.source.resource = image;\n texture.source.alphaMode = \"premultiply-alpha-on-upload\";\n texture.frame.width = width / resolution;\n texture.frame.height = height / resolution;\n texture.source.emit(\"update\", texture.source);\n texture.updateUvs();\n return texture;\n}\n\nexport { getPo2TextureFromSource };\n//# sourceMappingURL=getPo2TextureFromSource.mjs.map\n"],"names":["ResizePlugin","static","options","Object","defineProperty","this","set","dom","globalThis","removeEventListener","queueResize","_resizeTo","addEventListener","resize","get","_cancelResize","_resizeId","requestAnimationFrame","cancelAnimationFrame","width","height","window","innerWidth","innerHeight","clientWidth","clientHeight","renderer","render","resizeTo","extension","Application","TickerPlugin","assign","autoStart","sharedTicker","ticker","_ticker","remove","add","LOW","stop","start","Ticker","shared","oldTicker","destroy","FederatedEvent","constructor","manager","bubbles","cancelBubble","cancelable","composed","defaultPrevented","eventPhase","prototype","NONE","propagationStopped","propagationImmediatelyStopped","layer","Point","page","CAPTURING_PHASE","AT_TARGET","BUBBLING_PHASE","layerX","x","layerY","y","pageX","pageY","data","composedPath","path","length","target","propagationPath","initEvent","_type","_bubbles","_cancelable","Error","initUIEvent","_typeArg","_bubblesArg","_cancelableArg","_viewArg","_detailArg","preventDefault","nativeEvent","Event","stopImmediatePropagation","stopPropagation","appleIphone","appleIpod","appleTablet","appleUniversal","androidPhone","androidTablet","amazonPhone","amazonTablet","windowsPhone","windowsTablet","otherBlackBerry","otherBlackBerry10","otherOpera","otherChrome","otherFirefox","isAppleTabletOnIos13","navigator","platform","maxTouchPoints","MSStream","createMatch","userAgent","regex","test","isMobile","param","nav","tmp","split","match","result","apple","phone","ipod","tablet","universal","device","amazon","android","windows","other","blackberry","blackberry10","opera","firefox","chrome","any","isMobileCall","KEY_CODE_TAB","DIV_TOUCH_SIZE","DIV_TOUCH_POS_X","DIV_TOUCH_POS_Y","DIV_TOUCH_ZINDEX","DIV_HOOK_SIZE","DIV_HOOK_POS_X","DIV_HOOK_POS_Y","DIV_HOOK_ZINDEX","AccessibilitySystem","_mobileInfo","debug","_isActive","_isMobileAccessibility","_pool","_renderId","_children","_androidUpdateCount","_androidUpdateFrequency","_hookDiv","_createTouchHook","div","document","createElement","style","position","top","left","zIndex","toString","_div","_renderer","_onKeyDown","bind","_onMouseMove","isActive","isMobileAccessibility","hookDiv","backgroundColor","title","_activate","_destroyTouchHook","body","appendChild","removeChild","runners","postrender","view","canvas","parentNode","_deactivate","_updateAccessibleObjects","container","visible","accessibleChildren","accessible","isInteractive","_accessibleActive","_addChild","children","i","init","now","performance","renderingToScreen","lastObjectRendered","getBoundingClientRect","viewWidth","viewHeight","resolution","sx","sy","child","removeItems","_accessibleDiv","push","hitArea","wt","worldTransform","tx","a","ty","d","getBounds","rectangle","_capHitArea","accessibleTitle","getAttribute","accessibleHint","setAttribute","tabIndex","_updateDebugHTML","innerHTML","type","pop","borderStyle","toLowerCase","includes","_onClick","_onFocus","_onFocusOut","pointerEvents","accessiblePointerEvents","accessibleType","_dispatchEvent","e","boundary","events","rootBoundary","event","rootTarget","forEach","type2","dispatchEvent","keyCode","movementX","movementY","WebGLSystem","WebGPUSystem","name","accessibilityTarget","Container","mixin","EventsTickerClass","interactionFrequency","_deltaTime","_didMove","_tickerAdded","_pauseUpdate","removeTickerListener","pauseUpdate","paused","addTickerListener","domElement","system","_tickerUpdate","INTERACTION","pointerMoved","_update","rootPointerEvent","supportsTouchEvents","pointerType","PointerEvent","clientX","clientY","deltaTime","EventsTicker","FederatedMouseEvent","super","arguments","client","movement","offset","global","screen","offsetX","offsetY","globalX","globalY","screenX","screenY","getLocalPosition","point","globalPos","applyInverse","getModifierState","key","initMouseEvent","_canBubbleArg","_screenXArg","_screenYArg","_clientXArg","_clientYArg","_ctrlKeyArg","_altKeyArg","_shiftKeyArg","_metaKeyArg","_buttonArg","_relatedTargetArg","FederatedPointerEvent","isPrimary","getCoalescedEvents","getPredictedEvents","FederatedWheelEvent","DOM_DELTA_PIXEL","DOM_DELTA_LINE","DOM_DELTA_PAGE","PROPAGATION_LIMIT","tempHitLocation","tempLocalMapping","EventBoundary","dispatch","moveOnAll","enableGlobalMoveEvents","mappingState","trackingData","eventPool","Map","_allInteractiveElements","_hitElements","_isPointerMoveEvent","hitPruneFn","hitTestFn","mapPointerDown","mapPointerMove","mapPointerOut","mapPointerOver","mapPointerUp","mapPointerUpOutside","mapWheel","mappingTable","addEventMapping","fn","priority","sort","b","propagate","emit","mapEvent","mappers","j","warn","hitTest","useMove","invertedPath","eventMode","currentTarget","notifyTarget","all","targets","Array","isArray","parent","reverse","hitTestMoveRecursive","location","testFn","pruneFn","ignore","shouldReturn","_interactivePrune","interactiveChildren","nestedHit","_isInteractive","isInteractiveMode","isInteractiveTarget","hitTestRecursive","relativeLocation","int","renderable","includeInBuild","measurable","contains","effects","effect","containsPoint","effectContainsPoint","handlerKey","_notifyListeners","from","createPointerEvent","isRightButton","button","pointerId","pressTargetsByButton","freeEvent","isMouse","outTarget","findMountedTarget","overTargets","outType","outEvent","leaveEvent","overType","overEvent","clonePointerEvent","overTargetAncestor","didPointerEnter","enterEvent","allMethods","allowGlobalPointerEvents","splice","cursor","pressTarget","clickTarget","clickEvent","clicksByButton","clickCount","timeStamp","clickHistory","detail","wheelEvent","createWheelEvent","allocateEvent","copyPointerData","copyMouseData","copyData","originalEvent","copyWheelData","slice","to","deltaMode","deltaX","deltaY","deltaZ","pressure","tangentialPressure","tiltX","tiltY","twist","altKey","buttons","copyFrom","ctrlKey","metaKey","shiftKey","isTrusted","srcElement","which","id","overTarget","has","listeners","_events","once","removeListener","call","context","MOUSE_POINTER_ID","TOUCH_TO_POINTER","touchstart","touchend","touchendoutside","touchmove","touchcancel","_EventSystem","supportsPointerEvents","autoPreventDefault","_eventsAdded","_rootPointerEvent","_rootWheelEvent","cursorStyles","default","pointer","features","Proxy","defaultEventFeatures","value","_onPointerDown","_onPointerMove","_onPointerUp","_onPointerOverOut","onWheel","defaultEventMode","_defaultEventMode","setTargetElement","eventFeatures","globalMove","resolutionChange","_currentCursor","setCursor","mode","applyStyles","OffscreenCanvas","hasOwnProperty","click","_normalizeToPointerData","isNormalized","nativeEvent2","federatedEvent","_bootstrapEvent","move","normalizedEvents","outside","wheel","normalizeWheelEvent","element","_removeEvents","_addEvents","msPointerEnabled","msContentZooming","msTouchAction","touchAction","passive","capture","mapPositionToPoint","rect","isConnected","resolutionMultiplier","TouchEvent","li","changedTouches","touch","touches","radiusX","radiusY","identifier","force","MouseEvent","tempEvent","_transferMouseData","startsWith","replace","relatedTarget","CanvasSystem","EventSystem","FederatedContainer","onclick","onmousedown","onmouseenter","onmouseleave","onmousemove","onglobalmousemove","onmouseout","onmouseover","onmouseup","onmouseupoutside","onpointercancel","onpointerdown","onpointerenter","onpointerleave","onpointermove","onglobalpointermove","onpointerout","onpointerover","onpointertap","onpointerup","onpointerupoutside","onrightclick","onrightdown","onrightup","onrightupoutside","ontap","ontouchcancel","ontouchend","ontouchendoutside","ontouchmove","onglobaltouchmove","ontouchstart","onwheel","interactive","_internalEventMode","listener","signal","listenerFn","handleEvent","emitter","off","on","FilterPipe","filterEffect","instructionSet","renderPipes","batch","break","renderPipeId","canBundle","action","_filterEffect","_container","execute","instruction","filter","WebGLPipes","WebGPUPipes","CanvasPipes","tempMatrix","Matrix","getFastGlobalBounds","bounds","clear","_getGlobalBoundsRecursive","isValid","renderGroup","applyMatrix","localTransform","parentRenderGroup","localDisplayStatus","manageEffects","localBounds","boundsArea","addRect","viewBounds","addFrame","minX","minY","maxX","maxY","groupTransform","advanced","addBounds","copyTo","invert","relativeGroupTransform","return","getGlobalRenderableBounds","renderables","matrix","globalDisplayStatus","quadGeometry","Geometry","attributes","aPosition","buffer","Float32Array","format","stride","indexBuffer","Uint32Array","FilterSystem","_filterStackIndex","_filterStack","_filterGlobalUniforms","UniformGroup","uInputSize","uInputPixel","uInputClamp","uOutputFrame","uGlobalFrame","uOutputTexture","_globalFilterBindGroup","BindGroup","activeBackTexture","_activeFilterData","backTexture","filters","_getFilterData","filterData","skip","filterArea","colorTextureSource","renderTarget","rootRenderTarget","colorTexture","source","_resolution","padding","antialias","blendRequired","enabled","Math","min","isCompatible","compatibleRenderers","backBuffer","useBackBuffer","viewPort","rootViewPort","scale","fitBounds","pad","ceil","isPositive","previousRenderSurface","renderSurface","inputTexture","TexturePool","getOptimalTexture","globalUniforms","Texture","EMPTY","finishRenderPass","previousBounds","getRenderTarget","getBackTexture","setResource","apply","returnTexture","flip","flop","t","lastRenderSurface","backgroundResolution","floor","copyToTexture","applyFilter","input","output","isFinalTarget","currentIndex","filterUniforms","uniforms","outputFrame","inputSize","inputPixel","inputClamp","globalFrame","outputTexture","lastIndex","filterData2","frame","pixelWidth","pixelHeight","rootTexture","isRoot","update","uniformBatch","batchUniforms","getUboResource","groups","encoder","draw","geometry","shader","state","_state","topology","WEBGL","Bounds","calculateSpriteMatrix","outputMatrix","sprite","mappedMatrix","_source","prepend","texture","translate","anchor","addBits","srcParts","parts","toLocaleLowerCase","part","sanitisedPart","findHooksRx","compileHooks","programSrc","partMatches","map","hook","extractInputs","fragmentSource","out","exec","compileInputs","fragments","template","results","fragment","header","mainInput","finalString","inValue","join","cleanedString","extractOutputs","extractVariableName","stripVariable","compileOutputs","index","mainStruct","indexOf","mainStart","mainEnd","compiledCode","injectBits","templateSrc","fragmentParts","toInject","cacheMap","create","bitCacheMap","CACHE_UID","compileHighShader","bits","cacheId","generateCacheId","vertex","compileInputsAndOutputs","compileBits","compileHighShaderGl","vertexFragments","shaderBit","v","fragmentFragments","compiledVertex","compiledFragment","highFragment","vertexParts","vertexGPUTemplate","fragmentGPUTemplate","vertexGlTemplate","fragmentGlTemplate","globalUniformsBit","globalUniformsBitGl","compileHighShaderGpuProgram","GpuProgram","entryPoint","compileHighShaderGlProgram","GlProgram","colorBit","main","colorBitGl","textureBatchBitGpuCache","generateBindingSrc","maxTextures","src","bindingIndex","generateSampleSrc","generateTextureBatchBit","end","textureBatchBitGlCache","generateSampleGlSrc","generateTextureBatchBitGl","localUniformBit","localUniformBitGroup2","localUniformBitGl","roundPixelsBit","roundPixelsBitGl","batchSamplersUniformGroupHash","getBatchSamplersUniformGroup","batchSamplersUniformGroup","sampleValues","Int32Array","uTextures","size","isStatic","CanvasPoolClass","canvasOptions","_canvasPool","enableFullScreen","_createCanvasAndContext","createCanvas","getContext","getOptimalCanvasAndContext","minWidth","minHeight","canvasAndContext","returnCanvasAndContext","CanvasPool","color32BitToUniform","abgr","alpha","GraphicsPipe","adaptor","State","for2d","_graphicsBatchesHash","_adaptor","validateRenderable","graphics","wasBatched","uid","gpuContext","graphicsContext","updateGpuContext","isBatchable","addRenderable","_didGraphicsUpdate","_rebuild","_addToBatcher","updateRenderable","batches","batcher","updateElement","destroyRenderable","_removeBatchForRenderable","isRenderable","contextSystem","getGpuContext","customShader","blendMode","groupBlendMode","localUniforms","resources","uTransformMatrix","uRound","_roundPixels","groupColorAlpha","uColor","_initBatchesForRenderable","batched","batchPipe","_getBatchesForRenderable","addToBatch","roundPixels","batchClone","BatchableGraphics","graphicsUid","GraphicsContextSystem","MeshPipe","localUniformsBindGroup","_meshDataHash","_gpuBatchableMeshHash","mesh","meshData","_getMeshData","isBatched","_geometry","indices","indexSize","positions","vertexSize","batchableMesh","_getBatchableMesh","checkAndUpdateTexture","gpuBatchableMesh","_texture","gpuMesh","_initMeshData","_initBatchableMesh","BatchableMesh","_uvUpdateId","_textureMatrixUpdateId","reset","packIndex","indicesOffset","packAttributes","float32View","uint32View","textureId","textureIdAndRound","c","uvBuffer","getBuffer","uvs","transformedUvs","textureMatrix","isSimple","_transformedUvs","_updateID","multiplyUvs","_MeshGeometry","args","defaultOptions","shrinkToFit","shrinkBuffersToFit","positionBuffer","label","usage","VERTEX","COPY_DST","INDEX","aUV","batchMode","MeshGeometry","_PlaneGeometry","deprecation","verticesX","verticesY","build","total","verts","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","buffers","PlaneGeometry","_NineSliceGeometry","_originalWidth","originalWidth","_originalHeight","originalHeight","_leftWidth","leftWidth","_rightWidth","rightWidth","_topHeight","topHeight","_bottomHeight","bottomHeight","updateUvs","updatePositions","w","scaleW","h","scaleH","_uvw","_uvh","NineSliceGeometry","NineSliceSpritePipe","_gpuSpriteHash","_instructionSet","gpuSprite","_getGpuSprite","_didSpriteUpdate","_updateBatchableSprite","batchableSprite","_initGPUSprite","tilingBit","tilingBitGl","gpuProgram","glProgram","TilingSpriteShader","Shader","tilingUniforms","uMapCoord","uClampFrame","uClampOffset","uTextureTransform","uSizeAnchor","uTexture","uSampler","updateUniforms","anchorX","anchorY","textureWidth","textureHeight","mapCoord","QuadGeometry","setPositions","tilingSprite","array","setUvs","_applyAnchorToTexture","_tileTransform","sharedQuad","TilingSpritePipe","_tilingSpriteDataHash","tilingSpriteData","_getTilingSpriteData","couldBatch","canBatch","_updateCanBatch","_didTilingSpriteUpdate","_updateBatchableMesh","bindGroup","default2d","_initTilingSpriteData","renderableData","addressMode","_nonPowOf2wrapping","supports","nonPowOf2wrapping","isPowerOfTwo","BatchableSprite","w0","w1","h0","h1","argb","x0","y0","x1","y1","x2","y2","x3","y3","AbstractBitmapFont","chars","lineHeight","fontFamily","fontMetrics","fontSize","ascent","descent","baseLineOffset","distanceField","range","pages","baseMeasurementFontSize","baseRenderedFontSize","font","pageTextures","distanceFieldRange","distanceFieldType","destroyTextures","removeAllListeners","resolveCharacters","item","startCode","charCodeAt","endCode","i2","j2","String","fromCharCode","DynamicBitmapFont","_padding","_measureCache","_currentChars","_currentX","_currentY","_currentPageIndex","_skipKerning","dynamicOptions","clone","overrideFill","_fill","color","WHITE","fill","requestedFontSize","fontStringFromTextStyle","overrideSize","_stroke","_style","skipKerning","CanvasTextMetrics","measureFont","ensureCharacters","charList","char","self","pageData","_nextPage","textureSource","currentX","currentY","fontScale","widthScale","fontStyle","maxCharHeight","skipTexture","metrics","measureText","paddedWidth","paddedHeight","max","pageData2","xAdvance","dropShadow","distance","codePointAt","xOffset","yOffset","kerning","_drawGlyph","px","py","Rectangle","_applyKerning","newChars","measureCache","first","second","c1","c2","amount","textureResolution","_setupContext","ImageSource","resource","alphaMode","textBaseline","stroke","strokeThickness","lineWidth","lineJoin","miterLimit","strokeStyle","getCanvasFillStyle","fillStyle","shadowOptions","rgb","Color","setValue","toArray","dropShadowBlur","blur","dropShadowDistance","shadowColor","shadowBlur","shadowOffsetX","cos","angle","shadowOffsetY","sin","text","fontProperties","strokeText","fillText","getBitmapTextLayout","layoutData","lines","charPositions","spaceWidth","spacesIndex","currentLine","previousChar","firstWord","currentWord","spaceWord","nextWord","word","nextLine","lastChar","adjustedLetterSpacing","letterSpacing","adjustedWordWrapWidth","wordWrapWidth","isEnd","charData","isSpace","isWordBreak","addWordToNextLine","wordWrap","nextCharWidth","align","alignCenter","alignRight","alignJustify","measurementData","line","indy","spaceIndex","totalSpaces","newSpaceWidth","BitmapFontManagerClass","ALPHA","NUMERIC","ALPHANUMERIC","ASCII","getFont","fontFamilyKey","Cache","C","fnt","dynamicFont","getLayout","bitmapFont","install","textStyle","TextStyle","flatChars","uninstall","cacheKey","BitmapFontManager","BitmapFont","url","textures","keys","parseInt","textureFrame","frameReal","bitmapFontTextParser","parse","txt","items","rawData","info","common","kernings","attributeList","itemData","strValue","floatValue","parseFloat","isNaN","distanceRange","fieldType","face","file","base","charNode","letter","xoffset","yoffset","xadvance","bitmapFontXMLParser","xml","getElementsByTagName","bitmapFontXMLStringParser","parseXML","validExtensions","bitmapFontCachePlugin","CacheParser","asset","getCacheableAssets","loadBitmapFont","LoadParser","LoaderParser","Normal","extname","async","loader","bitmapFontData","textureUrls","pageFile","imagePath","dirname","copySearchParams","loadedTextures","load","_options","response","fetch","_resolvedAsset","Promise","unload","_sourceOrigin","localUniformMSDFBit","localUniformMSDFBitGl","mSDFBit","mSDFBitGl","SdfShader","uDistance","maxRecommendedTextures","batchSamplers","BitmapTextPipe","_gpuBitmapText","bitmapText","graphicsRenderable","_getGpuBitmapText","_didTextUpdate","_updateContext","syncWithProxy","_updateDistanceField","_destroyRenderableByUid","renderableUid","proxyGraphics","_sdfShader","bitmapTextLayout","_anchor","_x","_y","tint","round","initGpuText","proxyRenderable","Graphics","dx","sqrt","dy","worldScale","abs","proxy","groupColor","groupAlpha","HTMLTextPipe","_gpuText","htmlText","gpuText","_getGpuText","newKey","_getKey","textureNeedsUploading","currentKey","_updateText","_destroyRenderableById","htmlTextUid","decreaseReferenceCount","_updateGpuText","catch","console","error","updateQuadBounds","generatingTexture","getManagedTexture","onViewUpdate","gpuTextData","isSafari","getNavigator","nssvg","nsxhtml","HTMLTextRenderData","svgRoot","createElementNS","foreignObject","styleElement","image","Image","overflow","textStyleToCSS","cssStyleString","toHex","fontWeight","fontVariant","whiteSpace","breakWords","strokeToCSS","dropShadowToCSS","cssOverrides","cssStyles","tagStyleToCSS","tagStyles","dropShadowStyle","setAlpha","toHexa","templates","transform","tagStyle","cssTagStyle","HTMLTextStyle","_cssOverrides","_generateKey","_styleKey","generateTextStyleKey","_cssStyle","cssStyle","addOverride","toAdd","removeOverride","toRemove","extractFontFamilies","fontFamilies","dedupe","matches","addFontFamily","fontFamily2","trim","loadFontAsBase64","blob","reader","FileReader","dataSrc","resolve","reject","onloadend","onerror","readAsDataURL","loadFontCSS","FontStylePromiseCache","getFontCss","fontPromises","getSVGUrl","fontCSS","htmlTextData","textContent","XMLSerializer","serializeToString","getTemporaryCanvasFromImage","clearRect","drawImage","loadSVGImage","delay","resolve2","setTimeout","onload","encodeURIComponent","crossOrigin","tempHTMLTextRenderData","measureHtmlText","fontStyleCSS","htmlTextRenderData","contentBounds","descenderPadding","HTMLTextSystem","_activeTextures","_createCanvas","WEBGPU","getTexture","_buildTexturePromise","textKey","_increaseReferenceCount","promise","then","usageCount","defaultTextStyle","measured","svgURL","getPo2TextureFromSource","initSource","activeTexture","_cleanUp","uploadMethodId","getReferenceCount","defaultFontOptions","pattern","createPattern","setTransform","fillPattern","fillGradient","gradient","createLinearGradient","gradientStops","addColorStop","CanvasTextPipe","canvasText","getTextureSize","textUid","checkRow","checkColumn","bottom","getCanvasBoundingBox","willReadFrequently","TypeError","imageData","getImageData","right","CanvasTextSystem","_textKey","createTextureAndCanvas","renderTextToCanvas","trimmed","lineWidths","maxLineWidth","resetTransform","lineCap","cap","linePositionX","linePositionY","passesCount","isShadowPass","dsOffsetText","dsOffsetShadow","dropShadowColor","dropShadowAlpha","toRgbaString","globalAlpha","linePositionYShift","strokeWidth","_drawLetterSpacing","isStroke","useExperimentalLetterSpacing","experimentalLetterSpacingSupported","experimentalLetterSpacing","textLetterSpacing","currentPosition","stringArray","graphemeSegmenter","previousWidth","currentWidth","currentChar","textStr","tempBounds"],"sourceRoot":""}