@annotorious/openseadragon 3.2.0 → 3.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/annotorious-openseadragon.es.js +34365 -10
- package/dist/annotorious-openseadragon.es.js.map +1 -1
- package/dist/annotorious-openseadragon.js +1032 -972
- package/dist/annotorious-openseadragon.js.map +1 -1
- package/package.json +4 -4
- package/dist/CanvasPool-YpLnDXhe.js +0 -47
- package/dist/CanvasPool-YpLnDXhe.js.map +0 -1
- package/dist/SharedSystems-CkNt_hd1.js +0 -2543
- package/dist/SharedSystems-CkNt_hd1.js.map +0 -1
- package/dist/WebGLRenderer-D4J_4T0q.js +0 -2618
- package/dist/WebGLRenderer-D4J_4T0q.js.map +0 -1
- package/dist/WebGPURenderer-bp_Mr1WJ.js +0 -1614
- package/dist/WebGPURenderer-bp_Mr1WJ.js.map +0 -1
- package/dist/browserAll-BuClNU5V.js +0 -2057
- package/dist/browserAll-BuClNU5V.js.map +0 -1
- package/dist/colorToUniform-BcHZBaJ_.js +0 -219
- package/dist/colorToUniform-BcHZBaJ_.js.map +0 -1
- package/dist/index-Bxy_vBCw.js +0 -20939
- package/dist/index-Bxy_vBCw.js.map +0 -1
- package/dist/init-CxAUULxM.js +0 -3716
- package/dist/init-CxAUULxM.js.map +0 -1
- package/dist/webworkerAll-BtY9uC7i.js +0 -3
- package/dist/webworkerAll-BtY9uC7i.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"init-CxAUULxM.js","sources":["../../../node_modules/pixi.js/lib/app/ResizePlugin.mjs","../../../node_modules/pixi.js/lib/app/TickerPlugin.mjs","../../../node_modules/pixi.js/lib/scene/text-bitmap/AbstractBitmapFont.mjs","../../../node_modules/pixi.js/lib/scene/text/utils/generateTextStyleKey.mjs","../../../node_modules/pixi.js/lib/scene/text/TextStyle.mjs","../../../node_modules/pixi.js/lib/scene/text/canvas/utils/fontStringFromTextStyle.mjs","../../../node_modules/pixi.js/lib/scene/text/canvas/CanvasTextMetrics.mjs","../../../node_modules/pixi.js/lib/scene/text/canvas/utils/getCanvasFillStyle.mjs","../../../node_modules/pixi.js/lib/scene/text-bitmap/utils/resolveCharacters.mjs","../../../node_modules/pixi.js/lib/scene/text-bitmap/DynamicBitmapFont.mjs","../../../node_modules/pixi.js/lib/scene/text-bitmap/utils/getBitmapTextLayout.mjs","../../../node_modules/pixi.js/lib/scene/text-bitmap/BitmapFontManager.mjs","../../../node_modules/pixi.js/lib/filters/FilterPipe.mjs","../../../node_modules/pixi.js/lib/scene/container/bounds/getRenderableBounds.mjs","../../../node_modules/pixi.js/lib/filters/FilterSystem.mjs","../../../node_modules/pixi.js/lib/scene/mesh/shared/MeshGeometry.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/textStyleToCSS.mjs","../../../node_modules/pixi.js/lib/scene/text-html/HTMLTextStyle.mjs","../../../node_modules/pixi.js/lib/scene/text-html/HTMLTextRenderData.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/measureHtmlText.mjs","../../../node_modules/pixi.js/lib/scene/graphics/shared/GraphicsPipe.mjs","../../../node_modules/pixi.js/lib/scene/mesh-plane/PlaneGeometry.mjs","../../../node_modules/pixi.js/lib/scene/mesh/shared/BatchableMesh.mjs","../../../node_modules/pixi.js/lib/scene/mesh/shared/MeshPipe.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/gl/GlParticleContainerAdaptor.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/gpu/GpuParticleContainerAdaptor.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/utils/createIndicesForQuads.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/utils/generateParticleUpdateFunction.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/ParticleBuffer.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/shader/particles.frag.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/shader/particles.vert.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/shader/particles.wgsl.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/shader/ParticleShader.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/ParticleContainerPipe.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/GlParticleContainerPipe.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/shared/GpuParticleContainerPipe.mjs","../../../node_modules/pixi.js/lib/scene/sprite-nine-slice/NineSliceGeometry.mjs","../../../node_modules/pixi.js/lib/scene/sprite-nine-slice/NineSliceSpritePipe.mjs","../../../node_modules/pixi.js/lib/scene/sprite-tiling/shader/tilingBit.mjs","../../../node_modules/pixi.js/lib/scene/sprite-tiling/shader/TilingSpriteShader.mjs","../../../node_modules/pixi.js/lib/scene/sprite-tiling/utils/QuadGeometry.mjs","../../../node_modules/pixi.js/lib/scene/sprite-tiling/utils/setPositions.mjs","../../../node_modules/pixi.js/lib/scene/sprite-tiling/utils/applyMatrix.mjs","../../../node_modules/pixi.js/lib/scene/sprite-tiling/utils/setUvs.mjs","../../../node_modules/pixi.js/lib/scene/sprite-tiling/TilingSpritePipe.mjs","../../../node_modules/pixi.js/lib/scene/text/sdfShader/shader-bits/localUniformMSDFBit.mjs","../../../node_modules/pixi.js/lib/scene/text/sdfShader/shader-bits/mSDFBit.mjs","../../../node_modules/pixi.js/lib/scene/text/sdfShader/SdfShader.mjs","../../../node_modules/pixi.js/lib/scene/text-bitmap/BitmapTextPipe.mjs","../../../node_modules/pixi.js/lib/scene/text/utils/updateTextBounds.mjs","../../../node_modules/pixi.js/lib/scene/text-html/HTMLTextPipe.mjs","../../../node_modules/pixi.js/lib/utils/browser/isSafari.mjs","../../../node_modules/pixi.js/lib/scene/text/utils/getPo2TextureFromSource.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/extractFontFamilies.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/loadFontAsBase64.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/loadFontCSS.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/getFontCss.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/getSVGUrl.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/getTemporaryCanvasFromImage.mjs","../../../node_modules/pixi.js/lib/scene/text-html/utils/loadSVGImage.mjs","../../../node_modules/pixi.js/lib/scene/text-html/HTMLTextSystem.mjs","../../../node_modules/pixi.js/lib/scene/text/canvas/CanvasTextPipe.mjs","../../../node_modules/pixi.js/lib/utils/canvas/getCanvasBoundingBox.mjs","../../../node_modules/pixi.js/lib/scene/text/canvas/CanvasTextSystem.mjs","../../../node_modules/pixi.js/lib/app/init.mjs","../../../node_modules/pixi.js/lib/scene/graphics/init.mjs","../../../node_modules/pixi.js/lib/scene/mesh/init.mjs","../../../node_modules/pixi.js/lib/scene/particle-container/init.mjs","../../../node_modules/pixi.js/lib/scene/text/init.mjs","../../../node_modules/pixi.js/lib/scene/text-bitmap/init.mjs","../../../node_modules/pixi.js/lib/scene/text-html/init.mjs","../../../node_modules/pixi.js/lib/scene/sprite-tiling/init.mjs","../../../node_modules/pixi.js/lib/scene/sprite-nine-slice/init.mjs","../../../node_modules/pixi.js/lib/filters/init.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 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 /** should the fill for this font be applied as a tint to the text. */\n this.applyFillAsTint = true;\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","import { Color } from '../../../color/Color.mjs';\n\n\"use strict\";\nconst valuesToIterateForKeys = [\n \"align\",\n \"breakWords\",\n \"cssOverrides\",\n \"fontVariant\",\n \"fontWeight\",\n \"leading\",\n \"letterSpacing\",\n \"lineHeight\",\n \"padding\",\n \"textBaseline\",\n \"trim\",\n \"whiteSpace\",\n \"wordWrap\",\n \"wordWrapWidth\",\n \"fontFamily\",\n \"fontStyle\",\n \"fontSize\"\n];\nfunction generateTextStyleKey(style) {\n const key = [];\n let index = 0;\n for (let i = 0; i < valuesToIterateForKeys.length; i++) {\n const prop = `_${valuesToIterateForKeys[i]}`;\n key[index++] = style[prop];\n }\n index = addFillStyleKey(style._fill, key, index);\n index = addStokeStyleKey(style._stroke, key, index);\n index = addDropShadowKey(style.dropShadow, key, index);\n return key.join(\"-\");\n}\nfunction addFillStyleKey(fillStyle, key, index) {\n if (!fillStyle)\n return index;\n key[index++] = fillStyle.color;\n key[index++] = fillStyle.alpha;\n key[index++] = fillStyle.fill?.styleKey;\n return index;\n}\nfunction addStokeStyleKey(strokeStyle, key, index) {\n if (!strokeStyle)\n return index;\n index = addFillStyleKey(strokeStyle, key, index);\n key[index++] = strokeStyle.width;\n key[index++] = strokeStyle.alignment;\n key[index++] = strokeStyle.cap;\n key[index++] = strokeStyle.join;\n key[index++] = strokeStyle.miterLimit;\n return index;\n}\nfunction addDropShadowKey(dropShadow, key, index) {\n if (!dropShadow)\n return index;\n key[index++] = dropShadow.alpha;\n key[index++] = dropShadow.angle;\n key[index++] = dropShadow.blur;\n key[index++] = dropShadow.distance;\n key[index++] = Color.shared.setValue(dropShadow.color).toNumber();\n return index;\n}\n\nexport { generateTextStyleKey };\n//# sourceMappingURL=generateTextStyleKey.mjs.map\n","import EventEmitter from 'eventemitter3';\nimport { Color } from '../../color/Color.mjs';\nimport { deprecation, v8_0_0 } from '../../utils/logging/deprecation.mjs';\nimport { FillGradient } from '../graphics/shared/fill/FillGradient.mjs';\nimport { FillPattern } from '../graphics/shared/fill/FillPattern.mjs';\nimport { GraphicsContext } from '../graphics/shared/GraphicsContext.mjs';\nimport { toFillStyle, toStrokeStyle } from '../graphics/shared/utils/convertFillInputToFillStyle.mjs';\nimport { generateTextStyleKey } from './utils/generateTextStyleKey.mjs';\n\n\"use strict\";\nconst _TextStyle = class _TextStyle extends EventEmitter {\n constructor(style = {}) {\n super();\n convertV7Tov8Style(style);\n const fullStyle = { ..._TextStyle.defaultTextStyle, ...style };\n for (const key in fullStyle) {\n const thisKey = key;\n this[thisKey] = fullStyle[key];\n }\n this.update();\n }\n /**\n * Alignment for multiline text, does not affect single line text.\n * @member {'left'|'center'|'right'|'justify'}\n */\n get align() {\n return this._align;\n }\n set align(value) {\n this._align = value;\n this.update();\n }\n /** Indicates if lines can be wrapped within words, it needs wordWrap to be set to true. */\n get breakWords() {\n return this._breakWords;\n }\n set breakWords(value) {\n this._breakWords = value;\n this.update();\n }\n /** Set a drop shadow for the text. */\n get dropShadow() {\n return this._dropShadow;\n }\n set dropShadow(value) {\n if (value !== null && typeof value === \"object\") {\n this._dropShadow = this._createProxy({ ..._TextStyle.defaultDropShadow, ...value });\n } else {\n this._dropShadow = value ? this._createProxy({ ..._TextStyle.defaultDropShadow }) : null;\n }\n this.update();\n }\n /** The font family, can be a single font name, or a list of names where the first is the preferred font. */\n get fontFamily() {\n return this._fontFamily;\n }\n set fontFamily(value) {\n this._fontFamily = value;\n this.update();\n }\n /** The font size (as a number it converts to px, but as a string, equivalents are '26px','20pt','160%' or '1.6em') */\n get fontSize() {\n return this._fontSize;\n }\n set fontSize(value) {\n if (typeof value === \"string\") {\n this._fontSize = parseInt(value, 10);\n } else {\n this._fontSize = value;\n }\n this.update();\n }\n /**\n * The font style.\n * @member {'normal'|'italic'|'oblique'}\n */\n get fontStyle() {\n return this._fontStyle;\n }\n set fontStyle(value) {\n this._fontStyle = value.toLowerCase();\n this.update();\n }\n /**\n * The font variant.\n * @member {'normal'|'small-caps'}\n */\n get fontVariant() {\n return this._fontVariant;\n }\n set fontVariant(value) {\n this._fontVariant = value;\n this.update();\n }\n /**\n * The font weight.\n * @member {'normal'|'bold'|'bolder'|'lighter'|'100'|'200'|'300'|'400'|'500'|'600'|'700'|'800'|'900'}\n */\n get fontWeight() {\n return this._fontWeight;\n }\n set fontWeight(value) {\n this._fontWeight = value;\n this.update();\n }\n /** The space between lines. */\n get leading() {\n return this._leading;\n }\n set leading(value) {\n this._leading = value;\n this.update();\n }\n /** The amount of spacing between letters, default is 0. */\n get letterSpacing() {\n return this._letterSpacing;\n }\n set letterSpacing(value) {\n this._letterSpacing = value;\n this.update();\n }\n /** The line height, a number that represents the vertical space that a letter uses. */\n get lineHeight() {\n return this._lineHeight;\n }\n set lineHeight(value) {\n this._lineHeight = value;\n this.update();\n }\n /**\n * Occasionally some fonts are cropped. Adding some padding will prevent this from happening\n * by adding padding to all sides of the text.\n */\n get padding() {\n return this._padding;\n }\n set padding(value) {\n this._padding = value;\n this.update();\n }\n /** Trim transparent borders. This is an expensive operation so only use this if you have to! */\n get trim() {\n return this._trim;\n }\n set trim(value) {\n this._trim = value;\n this.update();\n }\n /**\n * The baseline of the text that is rendered.\n * @member {'alphabetic'|'top'|'hanging'|'middle'|'ideographic'|'bottom'}\n */\n get textBaseline() {\n return this._textBaseline;\n }\n set textBaseline(value) {\n this._textBaseline = value;\n this.update();\n }\n /**\n * How newlines and spaces should be handled.\n * Default is 'pre' (preserve, preserve).\n *\n * value | New lines | Spaces\n * --- | --- | ---\n * 'normal' | Collapse | Collapse\n * 'pre' | Preserve | Preserve\n * 'pre-line' | Preserve | Collapse\n * @member {'normal'|'pre'|'pre-line'}\n */\n get whiteSpace() {\n return this._whiteSpace;\n }\n set whiteSpace(value) {\n this._whiteSpace = value;\n this.update();\n }\n /** Indicates if word wrap should be used. */\n get wordWrap() {\n return this._wordWrap;\n }\n set wordWrap(value) {\n this._wordWrap = value;\n this.update();\n }\n /** The width at which text will wrap, it needs wordWrap to be set to true. */\n get wordWrapWidth() {\n return this._wordWrapWidth;\n }\n set wordWrapWidth(value) {\n this._wordWrapWidth = value;\n this.update();\n }\n /**\n * The fill style that will be used to color the text.\n * This can be:\n * - A color string like 'red', '#00FF00', or 'rgba(255,0,0,0.5)'\n * - A hex number like 0xff0000 for red\n * - A FillStyle object with properties like { color: 0xff0000, alpha: 0.5 }\n * - A FillGradient for gradient fills\n * - A FillPattern for pattern/texture fills\n *\n * When using a FillGradient, vertical gradients (angle of 90 degrees) are applied per line of text,\n * while gradients at any other angle are spread across the entire text body as a whole.\n * @example\n * // Vertical gradient applied per line\n * const verticalGradient = new FillGradient(0, 0, 0, 1)\n * .addColorStop(0, 0xff0000)\n * .addColorStop(1, 0x0000ff);\n *\n * const text = new Text({\n * text: 'Line 1\\nLine 2',\n * style: { fill: verticalGradient }\n * });\n *\n * To manage the gradient in a global scope, set the textureSpace property of the FillGradient to 'global'.\n * @type {string|number|FillStyle|FillGradient|FillPattern}\n */\n get fill() {\n return this._originalFill;\n }\n set fill(value) {\n if (value === this._originalFill)\n return;\n this._originalFill = value;\n if (this._isFillStyle(value)) {\n this._originalFill = this._createProxy({ ...GraphicsContext.defaultFillStyle, ...value }, () => {\n this._fill = toFillStyle(\n { ...this._originalFill },\n GraphicsContext.defaultFillStyle\n );\n });\n }\n this._fill = toFillStyle(\n value === 0 ? \"black\" : value,\n GraphicsContext.defaultFillStyle\n );\n this.update();\n }\n /** A fillstyle that will be used on the text stroke, e.g., 'blue', '#FCFF00'. */\n get stroke() {\n return this._originalStroke;\n }\n set stroke(value) {\n if (value === this._originalStroke)\n return;\n this._originalStroke = value;\n if (this._isFillStyle(value)) {\n this._originalStroke = this._createProxy({ ...GraphicsContext.defaultStrokeStyle, ...value }, () => {\n this._stroke = toStrokeStyle(\n { ...this._originalStroke },\n GraphicsContext.defaultStrokeStyle\n );\n });\n }\n this._stroke = toStrokeStyle(value, GraphicsContext.defaultStrokeStyle);\n this.update();\n }\n _generateKey() {\n this._styleKey = generateTextStyleKey(this);\n return this._styleKey;\n }\n update() {\n this._styleKey = null;\n this.emit(\"update\", this);\n }\n /** Resets all properties to the default values */\n reset() {\n const defaultStyle = _TextStyle.defaultTextStyle;\n for (const key in defaultStyle) {\n this[key] = defaultStyle[key];\n }\n }\n get styleKey() {\n return this._styleKey || this._generateKey();\n }\n /**\n * Creates a new TextStyle object with the same values as this one.\n * @returns New cloned TextStyle object\n */\n clone() {\n return new _TextStyle({\n align: this.align,\n breakWords: this.breakWords,\n dropShadow: this._dropShadow ? { ...this._dropShadow } : null,\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 leading: this.leading,\n letterSpacing: this.letterSpacing,\n lineHeight: this.lineHeight,\n padding: this.padding,\n stroke: this._stroke,\n textBaseline: this.textBaseline,\n whiteSpace: this.whiteSpace,\n wordWrap: this.wordWrap,\n wordWrapWidth: this.wordWrapWidth\n });\n }\n /**\n * Destroys this text style.\n * @param options - Options parameter. A boolean will act as if all options\n * have been set to that value\n * @param {boolean} [options.texture=false] - Should it destroy the texture of the this style\n * @param {boolean} [options.textureSource=false] - Should it destroy the textureSource of the this style\n */\n destroy(options = false) {\n this.removeAllListeners();\n const destroyTexture = typeof options === \"boolean\" ? options : options?.texture;\n if (destroyTexture) {\n const destroyTextureSource = typeof options === \"boolean\" ? options : options?.textureSource;\n if (this._fill?.texture) {\n this._fill.texture.destroy(destroyTextureSource);\n }\n if (this._originalFill?.texture) {\n this._originalFill.texture.destroy(destroyTextureSource);\n }\n if (this._stroke?.texture) {\n this._stroke.texture.destroy(destroyTextureSource);\n }\n if (this._originalStroke?.texture) {\n this._originalStroke.texture.destroy(destroyTextureSource);\n }\n }\n this._fill = null;\n this._stroke = null;\n this.dropShadow = null;\n this._originalStroke = null;\n this._originalFill = null;\n }\n _createProxy(value, cb) {\n return new Proxy(value, {\n set: (target, property, newValue) => {\n target[property] = newValue;\n cb?.(property, newValue);\n this.update();\n return true;\n }\n });\n }\n _isFillStyle(value) {\n return (value ?? null) !== null && !(Color.isColorLike(value) || value instanceof FillGradient || value instanceof FillPattern);\n }\n};\n/** The default drop shadow settings */\n_TextStyle.defaultDropShadow = {\n /** Set alpha for the drop shadow */\n alpha: 1,\n /** Set a angle of the drop shadow */\n angle: Math.PI / 6,\n /** Set a shadow blur radius */\n blur: 0,\n /** A fill style to be used on the e.g., 'red', '#00FF00' */\n color: \"black\",\n /** Set a distance of the drop shadow */\n distance: 5\n};\n/** The default text style settings */\n_TextStyle.defaultTextStyle = {\n /**\n * See {@link TextStyle.align}\n * @type {'left'|'center'|'right'|'justify'}\n */\n align: \"left\",\n /** See {@link TextStyle.breakWords} */\n breakWords: false,\n /** See {@link TextStyle.dropShadow} */\n dropShadow: null,\n /**\n * See {@link TextStyle.fill}\n * @type {string|string[]|number|number[]|CanvasGradient|CanvasPattern}\n */\n fill: \"black\",\n /**\n * See {@link TextStyle.fontFamily}\n * @type {string|string[]}\n */\n fontFamily: \"Arial\",\n /**\n * See {@link TextStyle.fontSize}\n * @type {number|string}\n */\n fontSize: 26,\n /**\n * See {@link TextStyle.fontStyle}\n * @type {'normal'|'italic'|'oblique'}\n */\n fontStyle: \"normal\",\n /**\n * See {@link TextStyle.fontVariant}\n * @type {'normal'|'small-caps'}\n */\n fontVariant: \"normal\",\n /**\n * See {@link TextStyle.fontWeight}\n * @type {'normal'|'bold'|'bolder'|'lighter'|'100'|'200'|'300'|'400'|'500'|'600'|'700'|'800'|'900'}\n */\n fontWeight: \"normal\",\n /** See {@link TextStyle.leading} */\n leading: 0,\n /** See {@link TextStyle.letterSpacing} */\n letterSpacing: 0,\n /** See {@link TextStyle.lineHeight} */\n lineHeight: 0,\n /** See {@link TextStyle.padding} */\n padding: 0,\n /**\n * See {@link TextStyle.stroke}\n * @type {string|number}\n */\n stroke: null,\n /**\n * See {@link TextStyle.textBaseline}\n * @type {'alphabetic'|'top'|'hanging'|'middle'|'ideographic'|'bottom'}\n */\n textBaseline: \"alphabetic\",\n /** See {@link TextStyle.trim} */\n trim: false,\n /**\n * See {@link TextStyle.whiteSpace}\n * @type {'normal'|'pre'|'pre-line'}\n */\n whiteSpace: \"pre\",\n /** See {@link TextStyle.wordWrap} */\n wordWrap: false,\n /** See {@link TextStyle.wordWrapWidth} */\n wordWrapWidth: 100\n};\nlet TextStyle = _TextStyle;\nfunction convertV7Tov8Style(style) {\n const oldStyle = style;\n if (typeof oldStyle.dropShadow === \"boolean\" && oldStyle.dropShadow) {\n const defaults = TextStyle.defaultDropShadow;\n style.dropShadow = {\n alpha: oldStyle.dropShadowAlpha ?? defaults.alpha,\n angle: oldStyle.dropShadowAngle ?? defaults.angle,\n blur: oldStyle.dropShadowBlur ?? defaults.blur,\n color: oldStyle.dropShadowColor ?? defaults.color,\n distance: oldStyle.dropShadowDistance ?? defaults.distance\n };\n }\n if (oldStyle.strokeThickness !== void 0) {\n deprecation(v8_0_0, \"strokeThickness is now a part of stroke\");\n const color = oldStyle.stroke;\n let obj = {};\n if (Color.isColorLike(color)) {\n obj.color = color;\n } else if (color instanceof FillGradient || color instanceof FillPattern) {\n obj.fill = color;\n } else if (Object.hasOwnProperty.call(color, \"color\") || Object.hasOwnProperty.call(color, \"fill\")) {\n obj = color;\n } else {\n throw new Error(\"Invalid stroke value.\");\n }\n style.stroke = {\n ...obj,\n width: oldStyle.strokeThickness\n };\n }\n if (Array.isArray(oldStyle.fillGradientStops)) {\n deprecation(v8_0_0, \"gradient fill is now a fill pattern: `new FillGradient(...)`\");\n let fontSize;\n if (style.fontSize == null) {\n style.fontSize = TextStyle.defaultTextStyle.fontSize;\n } else if (typeof style.fontSize === \"string\") {\n fontSize = parseInt(style.fontSize, 10);\n } else {\n fontSize = style.fontSize;\n }\n const gradientFill = new FillGradient({\n start: { x: 0, y: 0 },\n end: { x: 0, y: (fontSize || 0) * 1.7 }\n });\n const fills = oldStyle.fillGradientStops.map((color) => Color.shared.setValue(color).toNumber());\n fills.forEach((number, index) => {\n const ratio = index / (fills.length - 1);\n gradientFill.addColorStop(ratio, number);\n });\n style.fill = {\n fill: gradientFill\n };\n }\n}\n\nexport { TextStyle };\n//# sourceMappingURL=TextStyle.mjs.map\n","\"use strict\";\nconst genericFontFamilies = [\n \"serif\",\n \"sans-serif\",\n \"monospace\",\n \"cursive\",\n \"fantasy\",\n \"system-ui\"\n];\nfunction fontStringFromTextStyle(style) {\n const fontSizeString = typeof style.fontSize === \"number\" ? `${style.fontSize}px` : style.fontSize;\n let fontFamilies = style.fontFamily;\n if (!Array.isArray(style.fontFamily)) {\n fontFamilies = style.fontFamily.split(\",\");\n }\n for (let i = fontFamilies.length - 1; i >= 0; i--) {\n let fontFamily = fontFamilies[i].trim();\n if (!/([\\\"\\'])[^\\'\\\"]+\\1/.test(fontFamily) && !genericFontFamilies.includes(fontFamily)) {\n fontFamily = `\"${fontFamily}\"`;\n }\n fontFamilies[i] = fontFamily;\n }\n return `${style.fontStyle} ${style.fontVariant} ${style.fontWeight} ${fontSizeString} ${fontFamilies.join(\",\")}`;\n}\n\nexport { fontStringFromTextStyle };\n//# sourceMappingURL=fontStringFromTextStyle.mjs.map\n","import { DOMAdapter } from '../../../environment/adapter.mjs';\nimport { fontStringFromTextStyle } from './utils/fontStringFromTextStyle.mjs';\n\n\"use strict\";\nconst contextSettings = {\n // TextMetrics requires getImageData readback for measuring fonts.\n willReadFrequently: true\n};\nconst _CanvasTextMetrics = class _CanvasTextMetrics {\n /**\n * Checking that we can use modern canvas 2D API.\n *\n * Note: This is an unstable API, Chrome < 94 use `textLetterSpacing`, later versions use `letterSpacing`.\n * @see TextMetrics.experimentalLetterSpacing\n * @see https://developer.mozilla.org/en-US/docs/Web/API/ICanvasRenderingContext2D/letterSpacing\n * @see https://developer.chrome.com/origintrials/#/view_trial/3585991203293757441\n */\n static get experimentalLetterSpacingSupported() {\n let result = _CanvasTextMetrics._experimentalLetterSpacingSupported;\n if (result !== void 0) {\n const proto = DOMAdapter.get().getCanvasRenderingContext2D().prototype;\n result = _CanvasTextMetrics._experimentalLetterSpacingSupported = \"letterSpacing\" in proto || \"textLetterSpacing\" in proto;\n }\n return result;\n }\n /**\n * @param text - the text that was measured\n * @param style - the style that was measured\n * @param width - the measured width of the text\n * @param height - the measured height of the text\n * @param lines - an array of the lines of text broken by new lines and wrapping if specified in style\n * @param lineWidths - an array of the line widths for each line matched to `lines`\n * @param lineHeight - the measured line height for this style\n * @param maxLineWidth - the maximum line width for all measured lines\n * @param {FontMetrics} fontProperties - the font properties object from TextMetrics.measureFont\n */\n constructor(text, style, width, height, lines, lineWidths, lineHeight, maxLineWidth, fontProperties) {\n this.text = text;\n this.style = style;\n this.width = width;\n this.height = height;\n this.lines = lines;\n this.lineWidths = lineWidths;\n this.lineHeight = lineHeight;\n this.maxLineWidth = maxLineWidth;\n this.fontProperties = fontProperties;\n }\n /**\n * Measures the supplied string of text and returns a Rectangle.\n * @param text - The text to measure.\n * @param style - The text style to use for measuring\n * @param canvas - optional specification of the canvas to use for measuring.\n * @param wordWrap\n * @returns Measured width and height of the text.\n */\n static measureText(text = \" \", style, canvas = _CanvasTextMetrics._canvas, wordWrap = style.wordWrap) {\n const textKey = `${text}:${style.styleKey}`;\n if (_CanvasTextMetrics._measurementCache[textKey])\n return _CanvasTextMetrics._measurementCache[textKey];\n const font = fontStringFromTextStyle(style);\n const fontProperties = _CanvasTextMetrics.measureFont(font);\n if (fontProperties.fontSize === 0) {\n fontProperties.fontSize = style.fontSize;\n fontProperties.ascent = style.fontSize;\n }\n const context = _CanvasTextMetrics.__context;\n context.font = font;\n const outputText = wordWrap ? _CanvasTextMetrics._wordWrap(text, style, canvas) : text;\n const lines = outputText.split(/(?:\\r\\n|\\r|\\n)/);\n const lineWidths = new Array(lines.length);\n let maxLineWidth = 0;\n for (let i = 0; i < lines.length; i++) {\n const lineWidth = _CanvasTextMetrics._measureText(lines[i], style.letterSpacing, context);\n lineWidths[i] = lineWidth;\n maxLineWidth = Math.max(maxLineWidth, lineWidth);\n }\n const strokeWidth = style._stroke?.width || 0;\n let width = maxLineWidth + strokeWidth;\n if (style.dropShadow) {\n width += style.dropShadow.distance;\n }\n const lineHeight = style.lineHeight || fontProperties.fontSize;\n let height = Math.max(lineHeight, fontProperties.fontSize + strokeWidth) + (lines.length - 1) * (lineHeight + style.leading);\n if (style.dropShadow) {\n height += style.dropShadow.distance;\n }\n const measurements = new _CanvasTextMetrics(\n text,\n style,\n width,\n height,\n lines,\n lineWidths,\n lineHeight + style.leading,\n maxLineWidth,\n fontProperties\n );\n return measurements;\n }\n static _measureText(text, letterSpacing, context) {\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 const metrics = context.measureText(text);\n let metricWidth = metrics.width;\n const actualBoundingBoxLeft = -metrics.actualBoundingBoxLeft;\n const actualBoundingBoxRight = metrics.actualBoundingBoxRight;\n let boundsWidth = actualBoundingBoxRight - actualBoundingBoxLeft;\n if (metricWidth > 0) {\n if (useExperimentalLetterSpacing) {\n metricWidth -= letterSpacing;\n boundsWidth -= letterSpacing;\n } else {\n const val = (_CanvasTextMetrics.graphemeSegmenter(text).length - 1) * letterSpacing;\n metricWidth += val;\n boundsWidth += val;\n }\n }\n return Math.max(metricWidth, boundsWidth);\n }\n /**\n * Applies newlines to a string to have it optimally fit into the horizontal\n * bounds set by the Text object's wordWrapWidth property.\n * @param text - String to apply word wrapping to\n * @param style - the style to use when wrapping\n * @param canvas - optional specification of the canvas to use for measuring.\n * @returns New string with new lines applied where required\n */\n static _wordWrap(text, style, canvas = _CanvasTextMetrics._canvas) {\n const context = canvas.getContext(\"2d\", contextSettings);\n let width = 0;\n let line = \"\";\n let lines = \"\";\n const cache = /* @__PURE__ */ Object.create(null);\n const { letterSpacing, whiteSpace } = style;\n const collapseSpaces = _CanvasTextMetrics._collapseSpaces(whiteSpace);\n const collapseNewlines = _CanvasTextMetrics._collapseNewlines(whiteSpace);\n let canPrependSpaces = !collapseSpaces;\n const wordWrapWidth = style.wordWrapWidth + letterSpacing;\n const tokens = _CanvasTextMetrics._tokenize(text);\n for (let i = 0; i < tokens.length; i++) {\n let token = tokens[i];\n if (_CanvasTextMetrics._isNewline(token)) {\n if (!collapseNewlines) {\n lines += _CanvasTextMetrics._addLine(line);\n canPrependSpaces = !collapseSpaces;\n line = \"\";\n width = 0;\n continue;\n }\n token = \" \";\n }\n if (collapseSpaces) {\n const currIsBreakingSpace = _CanvasTextMetrics.isBreakingSpace(token);\n const lastIsBreakingSpace = _CanvasTextMetrics.isBreakingSpace(line[line.length - 1]);\n if (currIsBreakingSpace && lastIsBreakingSpace) {\n continue;\n }\n }\n const tokenWidth = _CanvasTextMetrics._getFromCache(token, letterSpacing, cache, context);\n if (tokenWidth > wordWrapWidth) {\n if (line !== \"\") {\n lines += _CanvasTextMetrics._addLine(line);\n line = \"\";\n width = 0;\n }\n if (_CanvasTextMetrics.canBreakWords(token, style.breakWords)) {\n const characters = _CanvasTextMetrics.wordWrapSplit(token);\n for (let j = 0; j < characters.length; j++) {\n let char = characters[j];\n let lastChar = char;\n let k = 1;\n while (characters[j + k]) {\n const nextChar = characters[j + k];\n if (!_CanvasTextMetrics.canBreakChars(lastChar, nextChar, token, j, style.breakWords)) {\n char += nextChar;\n } else {\n break;\n }\n lastChar = nextChar;\n k++;\n }\n j += k - 1;\n const characterWidth = _CanvasTextMetrics._getFromCache(char, letterSpacing, cache, context);\n if (characterWidth + width > wordWrapWidth) {\n lines += _CanvasTextMetrics._addLine(line);\n canPrependSpaces = false;\n line = \"\";\n width = 0;\n }\n line += char;\n width += characterWidth;\n }\n } else {\n if (line.length > 0) {\n lines += _CanvasTextMetrics._addLine(line);\n line = \"\";\n width = 0;\n }\n const isLastToken = i === tokens.length - 1;\n lines += _CanvasTextMetrics._addLine(token, !isLastToken);\n canPrependSpaces = false;\n line = \"\";\n width = 0;\n }\n } else {\n if (tokenWidth + width > wordWrapWidth) {\n canPrependSpaces = false;\n lines += _CanvasTextMetrics._addLine(line);\n line = \"\";\n width = 0;\n }\n if (line.length > 0 || !_CanvasTextMetrics.isBreakingSpace(token) || canPrependSpaces) {\n line += token;\n width += tokenWidth;\n }\n }\n }\n lines += _CanvasTextMetrics._addLine(line, false);\n return lines;\n }\n /**\n * Convenience function for logging each line added during the wordWrap method.\n * @param line - The line of text to add\n * @param newLine - Add new line character to end\n * @returns A formatted line\n */\n static _addLine(line, newLine = true) {\n line = _CanvasTextMetrics._trimRight(line);\n line = newLine ? `${line}\n` : line;\n return line;\n }\n /**\n * Gets & sets the widths of calculated characters in a cache object\n * @param key - The key\n * @param letterSpacing - The letter spacing\n * @param cache - The cache\n * @param context - The canvas context\n * @returns The from cache.\n */\n static _getFromCache(key, letterSpacing, cache, context) {\n let width = cache[key];\n if (typeof width !== \"number\") {\n width = _CanvasTextMetrics._measureText(key, letterSpacing, context) + letterSpacing;\n cache[key] = width;\n }\n return width;\n }\n /**\n * Determines whether we should collapse breaking spaces.\n * @param whiteSpace - The TextStyle property whiteSpace\n * @returns Should collapse\n */\n static _collapseSpaces(whiteSpace) {\n return whiteSpace === \"normal\" || whiteSpace === \"pre-line\";\n }\n /**\n * Determines whether we should collapse newLine chars.\n * @param whiteSpace - The white space\n * @returns should collapse\n */\n static _collapseNewlines(whiteSpace) {\n return whiteSpace === \"normal\";\n }\n /**\n * Trims breaking whitespaces from string.\n * @param text - The text\n * @returns Trimmed string\n */\n static _trimRight(text) {\n if (typeof text !== \"string\") {\n return \"\";\n }\n for (let i = text.length - 1; i >= 0; i--) {\n const char = text[i];\n if (!_CanvasTextMetrics.isBreakingSpace(char)) {\n break;\n }\n text = text.slice(0, -1);\n }\n return text;\n }\n /**\n * Determines if char is a newline.\n * @param char - The character\n * @returns True if newline, False otherwise.\n */\n static _isNewline(char) {\n if (typeof char !== \"string\") {\n return false;\n }\n return _CanvasTextMetrics._newlines.includes(char.charCodeAt(0));\n }\n /**\n * Determines if char is a breaking whitespace.\n *\n * It allows one to determine whether char should be a breaking whitespace\n * For example certain characters in CJK langs or numbers.\n * It must return a boolean.\n * @param char - The character\n * @param [_nextChar] - The next character\n * @returns True if whitespace, False otherwise.\n */\n static isBreakingSpace(char, _nextChar) {\n if (typeof char !== \"string\") {\n return false;\n }\n return _CanvasTextMetrics._breakingSpaces.includes(char.charCodeAt(0));\n }\n /**\n * Splits a string into words, breaking-spaces and newLine characters\n * @param text - The text\n * @returns A tokenized array\n */\n static _tokenize(text) {\n const tokens = [];\n let token = \"\";\n if (typeof text !== \"string\") {\n return tokens;\n }\n for (let i = 0; i < text.length; i++) {\n const char = text[i];\n const nextChar = text[i + 1];\n if (_CanvasTextMetrics.isBreakingSpace(char, nextChar) || _CanvasTextMetrics._isNewline(char)) {\n if (token !== \"\") {\n tokens.push(token);\n token = \"\";\n }\n tokens.push(char);\n continue;\n }\n token += char;\n }\n if (token !== \"\") {\n tokens.push(token);\n }\n return tokens;\n }\n /**\n * Overridable helper method used internally by TextMetrics, exposed to allow customizing the class's behavior.\n *\n * It allows one to customise which words should break\n * Examples are if the token is CJK or numbers.\n * It must return a boolean.\n * @param _token - The token\n * @param breakWords - The style attr break words\n * @returns Whether to break word or not\n */\n static canBreakWords(_token, breakWords) {\n return breakWords;\n }\n /**\n * Overridable helper method used internally by TextMetrics, exposed to allow customizing the class's behavior.\n *\n * It allows one to determine whether a pair of characters\n * should be broken by newlines\n * For example certain characters in CJK langs or numbers.\n * It must return a boolean.\n * @param _char - The character\n * @param _nextChar - The next character\n * @param _token - The token/word the characters are from\n * @param _index - The index in the token of the char\n * @param _breakWords - The style attr break words\n * @returns whether to break word or not\n */\n static canBreakChars(_char, _nextChar, _token, _index, _breakWords) {\n return true;\n }\n /**\n * Overridable helper method used internally by TextMetrics, exposed to allow customizing the class's behavior.\n *\n * It is called when a token (usually a word) has to be split into separate pieces\n * in order to determine the point to break a word.\n * It must return an array of characters.\n * @param token - The token to split\n * @returns The characters of the token\n * @see CanvasTextMetrics.graphemeSegmenter\n */\n static wordWrapSplit(token) {\n return _CanvasTextMetrics.graphemeSegmenter(token);\n }\n /**\n * Calculates the ascent, descent and fontSize of a given font-style\n * @param font - String representing the style of the font\n * @returns Font properties object\n */\n static measureFont(font) {\n if (_CanvasTextMetrics._fonts[font]) {\n return _CanvasTextMetrics._fonts[font];\n }\n const context = _CanvasTextMetrics._context;\n context.font = font;\n const metrics = context.measureText(_CanvasTextMetrics.METRICS_STRING + _CanvasTextMetrics.BASELINE_SYMBOL);\n const properties = {\n ascent: metrics.actualBoundingBoxAscent,\n descent: metrics.actualBoundingBoxDescent,\n fontSize: metrics.actualBoundingBoxAscent + metrics.actualBoundingBoxDescent\n };\n _CanvasTextMetrics._fonts[font] = properties;\n return properties;\n }\n /**\n * Clear font metrics in metrics cache.\n * @param {string} [font] - font name. If font name not set then clear cache for all fonts.\n */\n static clearMetrics(font = \"\") {\n if (font) {\n delete _CanvasTextMetrics._fonts[font];\n } else {\n _CanvasTextMetrics._fonts = {};\n }\n }\n /**\n * Cached canvas element for measuring text\n * TODO: this should be private, but isn't because of backward compat, will fix later.\n * @ignore\n */\n static get _canvas() {\n if (!_CanvasTextMetrics.__canvas) {\n let canvas;\n try {\n const c = new OffscreenCanvas(0, 0);\n const context = c.getContext(\"2d\", contextSettings);\n if (context?.measureText) {\n _CanvasTextMetrics.__canvas = c;\n return c;\n }\n canvas = DOMAdapter.get().createCanvas();\n } catch (_cx) {\n canvas = DOMAdapter.get().createCanvas();\n }\n canvas.width = canvas.height = 10;\n _CanvasTextMetrics.__canvas = canvas;\n }\n return _CanvasTextMetrics.__canvas;\n }\n /**\n * TODO: this should be private, but isn't because of backward compat, will fix later.\n * @ignore\n */\n static get _context() {\n if (!_CanvasTextMetrics.__context) {\n _CanvasTextMetrics.__context = _CanvasTextMetrics._canvas.getContext(\"2d\", contextSettings);\n }\n return _CanvasTextMetrics.__context;\n }\n};\n/**\n * String used for calculate font metrics.\n * These characters are all tall to help calculate the height required for text.\n */\n_CanvasTextMetrics.METRICS_STRING = \"|\\xC9q\\xC5\";\n/** Baseline symbol for calculate font metrics. */\n_CanvasTextMetrics.BASELINE_SYMBOL = \"M\";\n/** Baseline multiplier for calculate font metrics. */\n_CanvasTextMetrics.BASELINE_MULTIPLIER = 1.4;\n/** Height multiplier for setting height of canvas to calculate font metrics. */\n_CanvasTextMetrics.HEIGHT_MULTIPLIER = 2;\n/**\n * A Unicode \"character\", or \"grapheme cluster\", can be composed of multiple Unicode code points,\n * such as letters with diacritical marks (e.g. `'\\u0065\\u0301'`, letter e with acute)\n * or emojis with modifiers (e.g. `'\\uD83E\\uDDD1\\u200D\\uD83D\\uDCBB'`, technologist).\n * The new `Intl.Segmenter` API in ES2022 can split the string into grapheme clusters correctly. If it is not available,\n * PixiJS will fallback to use the iterator of String, which can only spilt the string into code points.\n * If you want to get full functionality in environments that don't support `Intl.Segmenter` (such as Firefox),\n * you can use other libraries such as [grapheme-splitter]{@link https://www.npmjs.com/package/grapheme-splitter}\n * or [graphemer]{@link https://www.npmjs.com/package/graphemer} to create a polyfill. Since these libraries can be\n * relatively large in size to handle various Unicode grapheme clusters properly, PixiJS won't use them directly.\n */\n_CanvasTextMetrics.graphemeSegmenter = (() => {\n if (typeof Intl?.Segmenter === \"function\") {\n const segmenter = new Intl.Segmenter();\n return (s) => [...segmenter.segment(s)].map((x) => x.segment);\n }\n return (s) => [...s];\n})();\n/**\n * New rendering behavior for letter-spacing which uses Chrome's new native API. This will\n * lead to more accurate letter-spacing results because it does not try to manually draw\n * each character. However, this Chrome API is experimental and may not serve all cases yet.\n * @see TextMetrics.experimentalLetterSpacingSupported\n */\n_CanvasTextMetrics.experimentalLetterSpacing = false;\n/** Cache of {@see TextMetrics.FontMetrics} objects. */\n_CanvasTextMetrics._fonts = {};\n/** Cache of new line chars. */\n_CanvasTextMetrics._newlines = [\n 10,\n // line feed\n 13\n // carriage return\n];\n/** Cache of breaking spaces. */\n_CanvasTextMetrics._breakingSpaces = [\n 9,\n // character tabulation\n 32,\n // space\n 8192,\n // en quad\n 8193,\n // em quad\n 8194,\n // en space\n 8195,\n // em space\n 8196,\n // three-per-em space\n 8197,\n // four-per-em space\n 8198,\n // six-per-em space\n 8200,\n // punctuation space\n 8201,\n // thin space\n 8202,\n // hair space\n 8287,\n // medium mathematical space\n 12288\n // ideographic space\n];\n_CanvasTextMetrics._measurementCache = {};\nlet CanvasTextMetrics = _CanvasTextMetrics;\n\nexport { CanvasTextMetrics };\n//# sourceMappingURL=CanvasTextMetrics.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\";\nconst PRECISION = 1e5;\nfunction getCanvasFillStyle(fillStyle, context, textMetrics, padding = 0) {\n if (fillStyle.texture === Texture.WHITE && !fillStyle.fill) {\n return Color.shared.setValue(fillStyle.color).setAlpha(fillStyle.alpha ?? 1).toHexa();\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 const isLinear = fillGradient.type === \"linear\";\n const isLocal = fillGradient.textureSpace === \"local\";\n let width = 1;\n let height = 1;\n if (isLocal && textMetrics) {\n width = textMetrics.width + padding;\n height = textMetrics.height + padding;\n }\n let gradient;\n let isNearlyVertical = false;\n if (isLinear) {\n const { start, end } = fillGradient;\n gradient = context.createLinearGradient(\n start.x * width,\n start.y * height,\n end.x * width,\n end.y * height\n );\n isNearlyVertical = Math.abs(end.x - start.x) < Math.abs((end.y - start.y) * 0.1);\n } else {\n const { center, innerRadius, outerCenter, outerRadius } = fillGradient;\n gradient = context.createRadialGradient(\n center.x * width,\n center.y * height,\n innerRadius * width,\n outerCenter.x * width,\n outerCenter.y * height,\n outerRadius * width\n );\n }\n if (isNearlyVertical && isLocal && textMetrics) {\n const ratio = textMetrics.lineHeight / height;\n for (let i = 0; i < textMetrics.lines.length; i++) {\n const start = (i * textMetrics.lineHeight + padding / 2) / height;\n fillGradient.colorStops.forEach((stop) => {\n const globalStop = start + stop.offset * ratio;\n gradient.addColorStop(\n // fix to 5 decimal places to avoid floating point precision issues\n Math.floor(globalStop * PRECISION) / PRECISION,\n Color.shared.setValue(stop.color).toHex()\n );\n });\n }\n } else {\n fillGradient.colorStops.forEach((stop) => {\n gradient.addColorStop(stop.offset, Color.shared.setValue(stop.color).toHex());\n });\n }\n return gradient;\n }\n warn(\"FillStyle not recognised\", fillStyle);\n return \"red\";\n}\n\nexport { getCanvasFillStyle };\n//# sourceMappingURL=getCanvasFillStyle.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 { TextStyle } from '../text/TextStyle.mjs';\nimport { AbstractBitmapFont } from './AbstractBitmapFont.mjs';\nimport { resolveCharacters } from './utils/resolveCharacters.mjs';\n\n\"use strict\";\nconst _DynamicBitmapFont = class _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 = 0;\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 = { ..._DynamicBitmapFont.defaultOptions, ...options };\n this._textureSize = dynamicOptions.textureSize;\n this._mipmap = dynamicOptions.mipmap;\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 this.applyFillAsTint = dynamicOptions.overrideFill;\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 let maxCharHeight = 0;\n let skipTexture = false;\n const maxTextureWidth = canvas.width / this.resolution;\n const maxTextureHeight = canvas.height / this.resolution;\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 = metrics.width * fontScale;\n const textureGlyphWidth = Math.ceil((style.fontStyle === \"italic\" ? 2 : 1) * width);\n const height = metrics.height * fontScale;\n const paddedWidth = textureGlyphWidth + 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 > maxTextureWidth) {\n currentY += maxCharHeight;\n maxCharHeight = paddedHeight;\n currentX = 0;\n if (currentY + maxCharHeight > maxTextureHeight) {\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(\n this._textureSize,\n this._textureSize,\n textureResolution\n );\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 autoGenerateMipmaps: this._mipmap\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_DynamicBitmapFont.defaultOptions = {\n textureSize: 512,\n style: new TextStyle(),\n mipmap: true\n};\nlet DynamicBitmapFont = _DynamicBitmapFont;\n\nexport { DynamicBitmapFont };\n//# sourceMappingURL=DynamicBitmapFont.mjs.map\n","\"use strict\";\nfunction getBitmapTextLayout(chars, style, font, trimEnd) {\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 if (trimEnd) {\n let lastChar = currentLine.chars[index];\n while (lastChar === \" \") {\n currentLine.width -= font.chars[lastChar].xAdvance;\n lastChar = currentLine.chars[--index];\n }\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 { warn } from '../../utils/logging/warn.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\";\nlet fontCount = 0;\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 && !style._stroke) {\n fontFamilyKey += style._fill.fill.styleKey;\n overrideFill = false;\n } else if (style._stroke || style.dropShadow) {\n let key = style.styleKey;\n key = key.substring(0, key.lastIndexOf(\"-\"));\n fontFamilyKey = `${key}-bitmap`;\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 fontCount++;\n if (fontCount > 50) {\n warn(\"BitmapText\", `You have dynamically created ${fontCount} bitmap fonts, this can be inefficient. Try pre installing your font styles using \\`BitmapFont.install({name:\"style1\", style})\\``);\n }\n fnt.once(\"destroy\", () => {\n fontCount--;\n Cache.remove(fontFamilyKey);\n });\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 * @param trimEnd - Whether to ignore whitespaces at the end of each line\n */\n getLayout(text, style, trimEnd = true) {\n const bitmapFont = this.getFont(text, style);\n return getBitmapTextLayout([...text], style, bitmapFont, trimEnd);\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 * @param trimEnd - Whether to ignore whitespaces at the end of each line\n */\n measureText(text, style, trimEnd = true) {\n return this.getLayout(text, style, trimEnd);\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 font.destroy();\n }\n }\n}\nconst BitmapFontManager = new BitmapFontManagerClass();\n\nexport { BitmapFontManager };\n//# sourceMappingURL=BitmapFontManager.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","\"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 bounds.addBounds(renderable.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 { 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 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<f32>\" },\n uInputPixel: { value: new Float32Array(4), type: \"vec4<f32>\" },\n uInputClamp: { value: new Float32Array(4), type: \"vec4<f32>\" },\n uOutputFrame: { value: new Float32Array(4), type: \"vec4<f32>\" },\n uGlobalFrame: { value: new Float32Array(4), type: \"vec4<f32>\" },\n uOutputTexture: { value: new Float32Array(4), type: \"vec4<f32>\" }\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 instruction.container.getFastGlobalBounds(true, bounds);\n }\n if (instruction.container) {\n const renderGroup = instruction.container.renderGroup || instruction.container.parentRenderGroup;\n const filterFrameTransform = renderGroup.cacheToLocalTransform;\n if (filterFrameTransform) {\n bounds.applyMatrix(filterFrameTransform);\n }\n }\n const colorTextureSource = renderer.renderTarget.renderTarget.colorTexture.source;\n let resolution = Infinity;\n let padding = 0;\n let antialias = true;\n let blendRequired = false;\n let enabled = false;\n let clipToViewport = true;\n for (let i = 0; i < filters.length; i++) {\n const filter = filters[i];\n resolution = Math.min(resolution, filter.resolution === \"inherit\" ? colorTextureSource._resolution : filter.resolution);\n padding += filter.padding;\n if (filter.antialias === \"off\") {\n antialias = false;\n } else if (filter.antialias === \"inherit\") {\n antialias && (antialias = colorTextureSource.antialias);\n }\n if (!filter.clipToViewport) {\n clipToViewport = false;\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 if (clipToViewport) {\n const viewPort = renderer.renderTarget.rootViewPort;\n const rootResolution = renderer.renderTarget.renderTarget.resolution;\n bounds.fitBounds(0, viewPort.width / rootResolution, 0, viewPort.height / rootResolution);\n }\n bounds.scale(resolution).ceil().scale(1 / resolution).pad(padding | 0);\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 const renderGroup = sprite.renderGroup || sprite.parentRenderGroup;\n if (renderGroup && renderGroup.cacheToLocalTransform) {\n worldTransform.prepend(renderGroup.cacheToLocalTransform);\n }\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 { 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 let uvs = options.uvs;\n if (!uvs) {\n if (options.positions) {\n uvs = new Float32Array(positions.length);\n } else {\n uvs = new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]);\n }\n }\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 /**\n * Set the positions of the mesh.\n * When setting the positions, its important that the uvs array is at least as long as the positions array.\n * otherwise the geometry will not be valid.\n * @param {Float32Array} value - The positions of the mesh.\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 /**\n * Set the UVs of the mesh.\n * Its important that the uvs array you set is at least as long as the positions array.\n * otherwise the geometry will not be valid.\n * @param {Float32Array} value - The UVs of the mesh.\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 { 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 ? { ...this.dropShadow } : null,\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\";\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 { 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 = `<style>${style.cssStyle};</style><div style='padding:0'>${text}</div>`;\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 doublePadding = style.padding * 2;\n return {\n width: contentBounds.width - doublePadding,\n height: contentBounds.height - doublePadding\n };\n}\n\nexport { measureHtmlText };\n//# sourceMappingURL=measureHtmlText.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._destroyRenderableBound = this.destroyRenderable.bind(this);\n this.renderer = renderer;\n this._adaptor = adaptor;\n this._adaptor.init();\n this.renderer.renderableGC.addManagedHash(this, \"_graphicsBatchesHash\");\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.didViewUpdate) {\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 graphics.off(\"destroyed\", this._destroyRenderableBound);\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\", this._destroyRenderableBound);\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 { 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","\"use strict\";\nclass BatchableMesh {\n constructor() {\n this.batcherName = \"default\";\n this.packAsQuad = false;\n this.indexOffset = 0;\n this.attributeOffset = 0;\n this.roundPixels = 0;\n this._batcher = null;\n this._batch = null;\n this._textureMatrixUpdateId = -1;\n this._uvUpdateId = -1;\n }\n get blendMode() {\n return this.renderable.groupBlendMode;\n }\n get topology() {\n return this._topology || this.geometry.topology;\n }\n set topology(value) {\n this._topology = value;\n }\n reset() {\n this.renderable = null;\n this.texture = null;\n this._batcher = null;\n this._batch = null;\n this.geometry = null;\n this._uvUpdateId = -1;\n this._textureMatrixUpdateId = -1;\n }\n /**\n * Sets the texture for the batchable mesh.\n * As it does so, it resets the texture matrix update ID.\n * this is to ensure that the texture matrix is recalculated when the uvs are referenced\n * @param value - The texture to set.\n */\n setTexture(value) {\n if (this.texture === value)\n return;\n this.texture = value;\n this._textureMatrixUpdateId = -1;\n }\n get uvs() {\n const geometry = this.geometry;\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 return transformedUvs;\n }\n get positions() {\n return this.geometry.positions;\n }\n get indices() {\n return this.geometry.indices;\n }\n get color() {\n return this.renderable.groupColorAlpha;\n }\n get groupTransform() {\n return this.renderable.groupTransform;\n }\n get attributeSize() {\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 { 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 { getAdjustedBlendModeBlend } from '../../../rendering/renderers/shared/state/getAdjustedBlendModeBlend.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<f32>\" },\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: \"vec4<f32>\" },\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._destroyRenderableBound = this.destroyRenderable.bind(this);\n this.renderer = renderer;\n this._adaptor = adaptor;\n this._adaptor.init();\n renderer.renderableGC.addManagedHash(this, \"_gpuBatchableMeshHash\");\n renderer.renderableGC.addManagedHash(this, \"_meshDataHash\");\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 if (batchableMesh.texture.uid !== mesh._texture.uid) {\n batchableMesh._textureMatrixUpdateId = -1;\n }\n return !batchableMesh._batcher.checkAndUpdateTexture(\n batchableMesh,\n mesh._texture\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.setTexture(mesh._texture);\n gpuBatchableMesh.geometry = mesh._geometry;\n batcher.addToBatch(gpuBatchableMesh, instructionSet);\n } else {\n batcher.break(instructionSet);\n instructionSet.add(mesh);\n }\n }\n updateRenderable(mesh) {\n if (mesh.batched) {\n const gpuBatchableMesh = this._gpuBatchableMeshHash[mesh.uid];\n gpuBatchableMesh.setTexture(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 mesh.off(\"destroyed\", this._destroyRenderableBound);\n }\n execute(mesh) {\n if (!mesh.isRenderable)\n return;\n mesh.state.blendMode = getAdjustedBlendModeBlend(mesh.groupBlendMode, mesh.texture._source);\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\", this._destroyRenderableBound);\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.renderable = mesh;\n gpuMesh.setTexture(mesh._texture);\n gpuMesh.transform = mesh.groupTransform;\n gpuMesh.roundPixels = this.renderer._roundPixels | mesh._roundPixels;\n this._gpuBatchableMeshHash[mesh.uid] = gpuMesh;\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","\"use strict\";\nclass GlParticleContainerAdaptor {\n execute(particleContainerPipe, container) {\n const state = particleContainerPipe.state;\n const renderer = particleContainerPipe.renderer;\n const shader = container.shader || particleContainerPipe.defaultShader;\n shader.resources.uTexture = container.texture._source;\n shader.resources.uniforms = particleContainerPipe.localUniforms;\n const gl = renderer.gl;\n const buffer = particleContainerPipe.getBuffers(container);\n renderer.shader.bind(shader);\n renderer.state.set(state);\n renderer.geometry.bind(buffer.geometry, shader.glProgram);\n const byteSize = buffer.geometry.indexBuffer.data.BYTES_PER_ELEMENT;\n const glType = byteSize === 2 ? gl.UNSIGNED_SHORT : gl.UNSIGNED_INT;\n gl.drawElements(gl.TRIANGLES, container.particleChildren.length * 6, glType, 0);\n }\n}\n\nexport { GlParticleContainerAdaptor };\n//# sourceMappingURL=GlParticleContainerAdaptor.mjs.map\n","\"use strict\";\nclass GpuParticleContainerAdaptor {\n execute(particleContainerPipe, container) {\n const renderer = particleContainerPipe.renderer;\n const shader = container.shader || particleContainerPipe.defaultShader;\n shader.groups[0] = renderer.renderPipes.uniformBatch.getUniformBindGroup(particleContainerPipe.localUniforms, true);\n shader.groups[1] = renderer.texture.getTextureBindGroup(container.texture);\n const state = particleContainerPipe.state;\n const buffer = particleContainerPipe.getBuffers(container);\n renderer.encoder.draw({\n geometry: buffer.geometry,\n shader: container.shader || particleContainerPipe.defaultShader,\n state,\n size: container.particleChildren.length * 6\n });\n }\n}\n\nexport { GpuParticleContainerAdaptor };\n//# sourceMappingURL=GpuParticleContainerAdaptor.mjs.map\n","\"use strict\";\nfunction createIndicesForQuads(size, outBuffer = null) {\n const totalIndices = size * 6;\n if (totalIndices > 65535) {\n outBuffer || (outBuffer = new Uint32Array(totalIndices));\n } else {\n outBuffer || (outBuffer = new Uint16Array(totalIndices));\n }\n if (outBuffer.length !== totalIndices) {\n throw new Error(`Out buffer length is incorrect, got ${outBuffer.length} and expected ${totalIndices}`);\n }\n for (let i = 0, j = 0; i < totalIndices; i += 6, j += 4) {\n outBuffer[i + 0] = j + 0;\n outBuffer[i + 1] = j + 1;\n outBuffer[i + 2] = j + 2;\n outBuffer[i + 3] = j + 0;\n outBuffer[i + 4] = j + 2;\n outBuffer[i + 5] = j + 3;\n }\n return outBuffer;\n}\n\nexport { createIndicesForQuads };\n//# sourceMappingURL=createIndicesForQuads.mjs.map\n","import { getAttributeInfoFromFormat } from '../../../../rendering/renderers/shared/geometry/utils/getAttributeInfoFromFormat.mjs';\n\n\"use strict\";\nfunction generateParticleUpdateFunction(properties) {\n return {\n dynamicUpdate: generateUpdateFunction(properties, true),\n staticUpdate: generateUpdateFunction(properties, false)\n };\n}\nfunction generateUpdateFunction(properties, dynamic) {\n const funcFragments = [];\n funcFragments.push(`\n \n var index = 0;\n\n for (let i = 0; i < ps.length; ++i)\n {\n const p = ps[i];\n\n `);\n let offset = 0;\n for (const i in properties) {\n const property = properties[i];\n if (dynamic !== property.dynamic)\n continue;\n funcFragments.push(`offset = index + ${offset}`);\n funcFragments.push(property.code);\n const attributeInfo = getAttributeInfoFromFormat(property.format);\n offset += attributeInfo.stride / 4;\n }\n funcFragments.push(`\n index += stride * 4;\n }\n `);\n funcFragments.unshift(`\n var stride = ${offset};\n `);\n const functionSource = funcFragments.join(\"\\n\");\n return new Function(\"ps\", \"f32v\", \"u32v\", functionSource);\n}\n\nexport { generateParticleUpdateFunction };\n//# sourceMappingURL=generateParticleUpdateFunction.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 { getAttributeInfoFromFormat } from '../../../rendering/renderers/shared/geometry/utils/getAttributeInfoFromFormat.mjs';\nimport { ViewableBuffer } from '../../../utils/data/ViewableBuffer.mjs';\nimport { createIndicesForQuads } from './utils/createIndicesForQuads.mjs';\nimport { generateParticleUpdateFunction } from './utils/generateParticleUpdateFunction.mjs';\n\n\"use strict\";\nclass ParticleBuffer {\n constructor(options) {\n this._size = 0;\n this._generateParticleUpdateCache = {};\n const size = this._size = options.size ?? 1e3;\n const properties = options.properties;\n let staticVertexSize = 0;\n let dynamicVertexSize = 0;\n for (const i in properties) {\n const property = properties[i];\n const attributeInfo = getAttributeInfoFromFormat(property.format);\n if (property.dynamic) {\n dynamicVertexSize += attributeInfo.stride;\n } else {\n staticVertexSize += attributeInfo.stride;\n }\n }\n this._dynamicStride = dynamicVertexSize / 4;\n this._staticStride = staticVertexSize / 4;\n this.staticAttributeBuffer = new ViewableBuffer(size * 4 * staticVertexSize);\n this.dynamicAttributeBuffer = new ViewableBuffer(size * 4 * dynamicVertexSize);\n this.indexBuffer = createIndicesForQuads(size);\n const geometry = new Geometry();\n let dynamicOffset = 0;\n let staticOffset = 0;\n this._staticBuffer = new Buffer({\n data: new Float32Array(1),\n label: \"static-particle-buffer\",\n shrinkToFit: false,\n usage: BufferUsage.VERTEX | BufferUsage.COPY_DST\n });\n this._dynamicBuffer = new Buffer({\n data: new Float32Array(1),\n label: \"dynamic-particle-buffer\",\n shrinkToFit: false,\n usage: BufferUsage.VERTEX | BufferUsage.COPY_DST\n });\n for (const i in properties) {\n const property = properties[i];\n const attributeInfo = getAttributeInfoFromFormat(property.format);\n if (property.dynamic) {\n geometry.addAttribute(property.attributeName, {\n buffer: this._dynamicBuffer,\n stride: this._dynamicStride * 4,\n offset: dynamicOffset * 4,\n format: property.format\n });\n dynamicOffset += attributeInfo.size;\n } else {\n geometry.addAttribute(property.attributeName, {\n buffer: this._staticBuffer,\n stride: this._staticStride * 4,\n offset: staticOffset * 4,\n format: property.format\n });\n staticOffset += attributeInfo.size;\n }\n }\n geometry.addIndex(this.indexBuffer);\n const uploadFunction = this.getParticleUpdate(properties);\n this._dynamicUpload = uploadFunction.dynamicUpdate;\n this._staticUpload = uploadFunction.staticUpdate;\n this.geometry = geometry;\n }\n getParticleUpdate(properties) {\n const key = getParticleSyncKey(properties);\n if (this._generateParticleUpdateCache[key]) {\n return this._generateParticleUpdateCache[key];\n }\n this._generateParticleUpdateCache[key] = this.generateParticleUpdate(properties);\n return this._generateParticleUpdateCache[key];\n }\n generateParticleUpdate(properties) {\n return generateParticleUpdateFunction(properties);\n }\n update(particles, uploadStatic) {\n if (particles.length > this._size) {\n uploadStatic = true;\n this._size = Math.max(particles.length, this._size * 1.5 | 0);\n this.staticAttributeBuffer = new ViewableBuffer(this._size * this._staticStride * 4 * 4);\n this.dynamicAttributeBuffer = new ViewableBuffer(this._size * this._dynamicStride * 4 * 4);\n this.indexBuffer = createIndicesForQuads(this._size);\n this.geometry.indexBuffer.setDataWithSize(\n this.indexBuffer,\n this.indexBuffer.byteLength,\n true\n );\n }\n const dynamicAttributeBuffer = this.dynamicAttributeBuffer;\n this._dynamicUpload(particles, dynamicAttributeBuffer.float32View, dynamicAttributeBuffer.uint32View);\n this._dynamicBuffer.setDataWithSize(\n this.dynamicAttributeBuffer.float32View,\n particles.length * this._dynamicStride * 4,\n true\n );\n if (uploadStatic) {\n const staticAttributeBuffer = this.staticAttributeBuffer;\n this._staticUpload(particles, staticAttributeBuffer.float32View, staticAttributeBuffer.uint32View);\n this._staticBuffer.setDataWithSize(\n staticAttributeBuffer.float32View,\n particles.length * this._staticStride * 4,\n true\n );\n }\n }\n destroy() {\n this._staticBuffer.destroy();\n this._dynamicBuffer.destroy();\n this.geometry.destroy();\n }\n}\nfunction getParticleSyncKey(properties) {\n const keyGen = [];\n for (const key in properties) {\n const property = properties[key];\n keyGen.push(key, property.code, property.dynamic ? \"d\" : \"s\");\n }\n return keyGen.join(\"_\");\n}\n\nexport { ParticleBuffer };\n//# sourceMappingURL=ParticleBuffer.mjs.map\n","var fragment = \"varying vec2 vUV;\\nvarying vec4 vColor;\\n\\nuniform sampler2D uTexture;\\n\\nvoid main(void){\\n vec4 color = texture2D(uTexture, vUV) * vColor;\\n gl_FragColor = color;\\n}\";\n\nexport { fragment as default };\n//# sourceMappingURL=particles.frag.mjs.map\n","var vertex = \"attribute vec2 aVertex;\\nattribute vec2 aUV;\\nattribute vec4 aColor;\\n\\nattribute vec2 aPosition;\\nattribute float aRotation;\\n\\nuniform mat3 uTranslationMatrix;\\nuniform float uRound;\\nuniform vec2 uResolution;\\nuniform vec4 uColor;\\n\\nvarying vec2 vUV;\\nvarying vec4 vColor;\\n\\nvec2 roundPixels(vec2 position, vec2 targetSize)\\n{ \\n return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;\\n}\\n\\nvoid main(void){\\n float cosRotation = cos(aRotation);\\n float sinRotation = sin(aRotation);\\n float x = aVertex.x * cosRotation - aVertex.y * sinRotation;\\n float y = aVertex.x * sinRotation + aVertex.y * cosRotation;\\n\\n vec2 v = vec2(x, y);\\n v = v + aPosition;\\n\\n gl_Position = vec4((uTranslationMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);\\n\\n if(uRound == 1.0)\\n {\\n gl_Position.xy = roundPixels(gl_Position.xy, uResolution);\\n }\\n\\n vUV = aUV;\\n vColor = vec4(aColor.rgb * aColor.a, aColor.a) * uColor;\\n}\\n\";\n\nexport { vertex as default };\n//# sourceMappingURL=particles.vert.mjs.map\n","var wgsl = \"\\nstruct ParticleUniforms {\\n uProjectionMatrix:mat3x3<f32>,\\n uColor:vec4<f32>,\\n uResolution:vec2<f32>,\\n uRoundPixels:f32,\\n};\\n\\n@group(0) @binding(0) var<uniform> uniforms: ParticleUniforms;\\n\\n@group(1) @binding(0) var uTexture: texture_2d<f32>;\\n@group(1) @binding(1) var uSampler : sampler;\\n\\nstruct VSOutput {\\n @builtin(position) position: vec4<f32>,\\n @location(0) uv : vec2<f32>,\\n @location(1) color : vec4<f32>,\\n };\\n@vertex\\nfn mainVertex(\\n @location(0) aVertex: vec2<f32>,\\n @location(1) aPosition: vec2<f32>,\\n @location(2) aUV: vec2<f32>,\\n @location(3) aColor: vec4<f32>,\\n @location(4) aRotation: f32,\\n) -> VSOutput {\\n \\n let v = vec2(\\n aVertex.x * cos(aRotation) - aVertex.y * sin(aRotation),\\n aVertex.x * sin(aRotation) + aVertex.y * cos(aRotation)\\n ) + aPosition;\\n\\n let position = vec4((uniforms.uProjectionMatrix * vec3(v, 1.0)).xy, 0.0, 1.0);\\n\\n let vColor = vec4(aColor.rgb * aColor.a, aColor.a) * uniforms.uColor;\\n\\n return VSOutput(\\n position,\\n aUV,\\n vColor,\\n );\\n}\\n\\n@fragment\\nfn mainFragment(\\n @location(0) uv: vec2<f32>,\\n @location(1) color: vec4<f32>,\\n @builtin(position) position: vec4<f32>,\\n) -> @location(0) vec4<f32> {\\n\\n var sample = textureSample(uTexture, uSampler, uv) * color;\\n \\n return sample;\\n}\";\n\nexport { wgsl as default };\n//# sourceMappingURL=particles.wgsl.mjs.map\n","import { Color } from '../../../../color/Color.mjs';\nimport { Matrix } from '../../../../maths/matrix/Matrix.mjs';\nimport { GlProgram } from '../../../../rendering/renderers/gl/shader/GlProgram.mjs';\nimport { GpuProgram } from '../../../../rendering/renderers/gpu/shader/GpuProgram.mjs';\nimport { Shader } from '../../../../rendering/renderers/shared/shader/Shader.mjs';\nimport { Texture } from '../../../../rendering/renderers/shared/texture/Texture.mjs';\nimport { TextureStyle } from '../../../../rendering/renderers/shared/texture/TextureStyle.mjs';\nimport fragment from './particles.frag.mjs';\nimport vertex from './particles.vert.mjs';\nimport wgsl from './particles.wgsl.mjs';\n\n\"use strict\";\nclass ParticleShader extends Shader {\n constructor() {\n const glProgram = GlProgram.from({\n vertex,\n fragment\n });\n const gpuProgram = GpuProgram.from({\n fragment: {\n source: wgsl,\n entryPoint: \"mainFragment\"\n },\n vertex: {\n source: wgsl,\n entryPoint: \"mainVertex\"\n }\n });\n super({\n glProgram,\n gpuProgram,\n resources: {\n // this will be replaced with the texture from the particle container\n uTexture: Texture.WHITE.source,\n // this will be replaced with the texture style from the particle container\n uSampler: new TextureStyle({}),\n // this will be replaced with the local uniforms from the particle container\n uniforms: {\n uTranslationMatrix: { value: new Matrix(), type: \"mat3x3<f32>\" },\n uColor: { value: new Color(16777215), type: \"vec4<f32>\" },\n uRound: { value: 1, type: \"f32\" },\n uResolution: { value: [0, 0], type: \"vec2<f32>\" }\n }\n }\n });\n }\n}\n\nexport { ParticleShader };\n//# sourceMappingURL=ParticleShader.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { UniformGroup } from '../../../rendering/renderers/shared/shader/UniformGroup.mjs';\nimport { getAdjustedBlendModeBlend } from '../../../rendering/renderers/shared/state/getAdjustedBlendModeBlend.mjs';\nimport { State } from '../../../rendering/renderers/shared/state/State.mjs';\nimport { color32BitToUniform } from '../../graphics/gpu/colorToUniform.mjs';\nimport { ParticleBuffer } from './ParticleBuffer.mjs';\nimport { ParticleShader } from './shader/ParticleShader.mjs';\n\n\"use strict\";\nclass ParticleContainerPipe {\n /**\n * @param renderer - The renderer this sprite batch works for.\n * @param adaptor\n */\n constructor(renderer, adaptor) {\n this.state = State.for2d();\n this._gpuBufferHash = /* @__PURE__ */ Object.create(null);\n // eslint-disable-next-line max-len\n this._destroyRenderableBound = this.destroyRenderable.bind(this);\n this.localUniforms = new UniformGroup({\n uTranslationMatrix: { value: new Matrix(), type: \"mat3x3<f32>\" },\n uColor: { value: new Float32Array(4), type: \"vec4<f32>\" },\n uRound: { value: 1, type: \"f32\" },\n uResolution: { value: [0, 0], type: \"vec2<f32>\" }\n });\n this.renderer = renderer;\n this.adaptor = adaptor;\n this.defaultShader = new ParticleShader();\n this.state = State.for2d();\n }\n validateRenderable(_renderable) {\n return false;\n }\n addRenderable(renderable, instructionSet) {\n this.renderer.renderPipes.batch.break(instructionSet);\n instructionSet.add(renderable);\n }\n getBuffers(renderable) {\n return this._gpuBufferHash[renderable.uid] || this._initBuffer(renderable);\n }\n _initBuffer(renderable) {\n this._gpuBufferHash[renderable.uid] = new ParticleBuffer({\n size: renderable.particleChildren.length,\n properties: renderable._properties\n });\n renderable.on(\"destroyed\", this._destroyRenderableBound);\n return this._gpuBufferHash[renderable.uid];\n }\n updateRenderable(_renderable) {\n }\n destroyRenderable(renderable) {\n const buffer = this._gpuBufferHash[renderable.uid];\n buffer.destroy();\n this._gpuBufferHash[renderable.uid] = null;\n renderable.off(\"destroyed\", this._destroyRenderableBound);\n }\n execute(container) {\n const children = container.particleChildren;\n if (children.length === 0) {\n return;\n }\n const renderer = this.renderer;\n const buffer = this.getBuffers(container);\n container.texture || (container.texture = children[0].texture);\n const state = this.state;\n buffer.update(children, container._childrenDirty);\n container._childrenDirty = false;\n state.blendMode = getAdjustedBlendModeBlend(container.blendMode, container.texture._source);\n const uniforms = this.localUniforms.uniforms;\n const transformationMatrix = uniforms.uTranslationMatrix;\n container.worldTransform.copyTo(transformationMatrix);\n transformationMatrix.prepend(renderer.globalUniforms.globalUniformData.projectionMatrix);\n uniforms.uResolution = renderer.globalUniforms.globalUniformData.resolution;\n uniforms.uRound = renderer._roundPixels | container._roundPixels;\n color32BitToUniform(\n container.groupColorAlpha,\n uniforms.uColor,\n 0\n );\n this.adaptor.execute(this, container);\n }\n /** Destroys the ParticleRenderer. */\n destroy() {\n if (this.defaultShader) {\n this.defaultShader.destroy();\n this.defaultShader = null;\n }\n }\n}\n\nexport { ParticleContainerPipe };\n//# sourceMappingURL=ParticleContainerPipe.mjs.map\n","import { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { GlParticleContainerAdaptor } from '../gl/GlParticleContainerAdaptor.mjs';\nimport { ParticleContainerPipe } from './ParticleContainerPipe.mjs';\n\n\"use strict\";\nclass GlParticleContainerPipe extends ParticleContainerPipe {\n constructor(renderer) {\n super(renderer, new GlParticleContainerAdaptor());\n }\n}\n/** @ignore */\nGlParticleContainerPipe.extension = {\n type: [\n ExtensionType.WebGLPipes\n ],\n name: \"particle\"\n};\n\nexport { GlParticleContainerPipe };\n//# sourceMappingURL=GlParticleContainerPipe.mjs.map\n","import { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { GpuParticleContainerAdaptor } from '../gpu/GpuParticleContainerAdaptor.mjs';\nimport { ParticleContainerPipe } from './ParticleContainerPipe.mjs';\n\n\"use strict\";\nclass GpuParticleContainerPipe extends ParticleContainerPipe {\n constructor(renderer) {\n super(renderer, new GpuParticleContainerAdaptor());\n }\n}\n/** @ignore */\nGpuParticleContainerPipe.extension = {\n type: [\n ExtensionType.WebGPUPipes\n ],\n name: \"particle\"\n};\n\nexport { GpuParticleContainerPipe };\n//# sourceMappingURL=GpuParticleContainerPipe.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._anchorX = options.anchor?.x;\n this._anchorY = options.anchor?.y;\n this.updateUvs();\n this.updatePositions();\n }\n /** Updates the positions of the vertices. */\n updatePositions() {\n const p = this.positions;\n const {\n width,\n height,\n _leftWidth,\n _rightWidth,\n _topHeight,\n _bottomHeight,\n _anchorX,\n _anchorY\n } = this;\n const w = _leftWidth + _rightWidth;\n const scaleW = width > w ? 1 : width / w;\n const h = _topHeight + _bottomHeight;\n const scaleH = height > h ? 1 : height / h;\n const scale = Math.min(scaleW, scaleH);\n const anchorOffsetX = _anchorX * width;\n const anchorOffsetY = _anchorY * height;\n p[0] = p[8] = p[16] = p[24] = -anchorOffsetX;\n p[2] = p[10] = p[18] = p[26] = _leftWidth * scale - anchorOffsetX;\n p[4] = p[12] = p[20] = p[28] = width - _rightWidth * scale - anchorOffsetX;\n p[6] = p[14] = p[22] = p[30] = width - anchorOffsetX;\n p[1] = p[3] = p[5] = p[7] = -anchorOffsetY;\n p[9] = p[11] = p[13] = p[15] = _topHeight * scale - anchorOffsetY;\n p[17] = p[19] = p[21] = p[23] = height - _bottomHeight * scale - anchorOffsetY;\n p[25] = p[27] = p[29] = p[31] = height - anchorOffsetY;\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._destroyRenderableBound = this.destroyRenderable.bind(this);\n this._renderer = renderer;\n this._renderer.renderableGC.addManagedHash(this, \"_gpuSpriteHash\");\n }\n addRenderable(sprite, instructionSet) {\n const gpuSprite = this._getGpuSprite(sprite);\n if (sprite.didViewUpdate)\n this._updateBatchableSprite(sprite, gpuSprite);\n this._renderer.renderPipes.batch.addToBatch(gpuSprite, instructionSet);\n }\n updateRenderable(sprite) {\n const gpuSprite = this._gpuSpriteHash[sprite.uid];\n if (sprite.didViewUpdate)\n this._updateBatchableSprite(sprite, gpuSprite);\n gpuSprite._batcher.updateElement(gpuSprite);\n }\n validateRenderable(sprite) {\n const gpuSprite = this._getGpuSprite(sprite);\n return !gpuSprite._batcher.checkAndUpdateTexture(\n gpuSprite,\n sprite._texture\n );\n }\n destroyRenderable(sprite) {\n const batchableMesh = this._gpuSpriteHash[sprite.uid];\n BigPool.return(batchableMesh.geometry);\n BigPool.return(batchableMesh);\n this._gpuSpriteHash[sprite.uid] = null;\n sprite.off(\"destroyed\", this._destroyRenderableBound);\n }\n _updateBatchableSprite(sprite, batchableSprite) {\n batchableSprite.geometry.update(sprite);\n batchableSprite.setTexture(sprite._texture);\n }\n _getGpuSprite(sprite) {\n return this._gpuSpriteHash[sprite.uid] || this._initGPUSprite(sprite);\n }\n _initGPUSprite(sprite) {\n const batchableMesh = BigPool.get(BatchableMesh);\n batchableMesh.geometry = BigPool.get(NineSliceGeometry);\n batchableMesh.renderable = sprite;\n batchableMesh.transform = sprite.groupTransform;\n batchableMesh.texture = sprite._texture;\n batchableMesh.roundPixels = this._renderer._roundPixels | sprite._roundPixels;\n this._gpuSpriteHash[sprite.uid] = batchableMesh;\n if (!sprite.didViewUpdate) {\n this._updateBatchableSprite(sprite, batchableMesh);\n }\n sprite.on(\"destroyed\", this._destroyRenderableBound);\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","\"use strict\";\nconst tilingBit = {\n name: \"tiling-bit\",\n vertex: {\n header: (\n /* wgsl */\n `\n struct TilingUniforms {\n uMapCoord:mat3x3<f32>,\n uClampFrame:vec4<f32>,\n uClampOffset:vec2<f32>,\n uTextureTransform:mat3x3<f32>,\n uSizeAnchor:vec4<f32>\n };\n\n @group(2) @binding(0) var<uniform> tilingUniforms: TilingUniforms;\n @group(2) @binding(1) var uTexture: texture_2d<f32>;\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<f32>,\n uClampFrame:vec4<f32>,\n uClampOffset:vec2<f32>,\n uTextureTransform:mat3x3<f32>,\n uSizeAnchor:vec4<f32>\n };\n\n @group(2) @binding(0) var<uniform> tilingUniforms: TilingUniforms;\n @group(2) @binding(1) var uTexture: texture_2d<f32>;\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<f32>\" },\n uClampFrame: { value: new Float32Array([0, 0, 1, 1]), type: \"vec4<f32>\" },\n uClampOffset: { value: new Float32Array([0, 0]), type: \"vec2<f32>\" },\n uTextureTransform: { value: new Matrix(), type: \"mat3x3<f32>\" },\n uSizeAnchor: { value: new Float32Array([100, 100, 0.5, 0.5]), type: \"vec4<f32>\" }\n });\n super({\n glProgram,\n gpuProgram,\n resources: {\n localUniforms: new UniformGroup({\n uTransformMatrix: { value: new Matrix(), type: \"mat3x3<f32>\" },\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: \"vec4<f32>\" },\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 { getAdjustedBlendModeBlend } from '../../rendering/renderers/shared/state/getAdjustedBlendModeBlend.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._state = State.default2d;\n this._tilingSpriteDataHash = /* @__PURE__ */ Object.create(null);\n this._destroyRenderableBound = this.destroyRenderable.bind(this);\n this._renderer = renderer;\n this._renderer.renderableGC.addManagedHash(this, \"_tilingSpriteDataHash\");\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 return !batchableMesh._batcher.checkAndUpdateTexture(\n batchableMesh,\n 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.didViewUpdate) {\n this._updateBatchableMesh(tilingSprite);\n batchableMesh.geometry = geometry;\n batchableMesh.renderable = tilingSprite;\n batchableMesh.transform = tilingSprite.groupTransform;\n batchableMesh.setTexture(tilingSprite._texture);\n }\n batchableMesh.roundPixels = this._renderer._roundPixels | tilingSprite._roundPixels;\n batcher.addToBatch(batchableMesh, instructionSet);\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._state.blendMode = getAdjustedBlendModeBlend(tilingSprite.groupBlendMode, tilingSprite.texture._source);\n this._renderer.encoder.draw({\n geometry: sharedQuad,\n shader,\n state: this._state\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.didViewUpdate)\n this._updateBatchableMesh(tilingSprite);\n batchableMesh._batcher.updateElement(batchableMesh);\n } else if (tilingSprite.didViewUpdate) {\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 }\n destroyRenderable(tilingSprite) {\n const tilingSpriteData = this._getTilingSpriteData(tilingSprite);\n tilingSpriteData.batchableMesh = null;\n tilingSpriteData.shader?.destroy();\n this._tilingSpriteDataHash[tilingSprite.uid] = null;\n tilingSprite.off(\"destroyed\", this._destroyRenderableBound);\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\", this._destroyRenderableBound);\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","\"use strict\";\nconst localUniformMSDFBit = {\n name: \"local-uniform-msdf-bit\",\n vertex: {\n header: (\n /* wgsl */\n `\n struct LocalUniforms {\n uColor:vec4<f32>,\n uTransformMatrix:mat3x3<f32>,\n uDistance: f32,\n uRound:f32,\n }\n\n @group(2) @binding(0) var<uniform> 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<f32>,\n uTransformMatrix:mat3x3<f32>,\n uDistance: f32\n }\n\n @group(2) @binding(0) var<uniform> localUniforms : LocalUniforms;\n `\n ),\n main: (\n /* wgsl */\n ` \n outColor = vec4<f32>(calculateMSDFAlpha(outColor, localUniforms.uColor, 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 = vec4(calculateMSDFAlpha(outColor, vColor, 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<f32>, shapeColor:vec4<f32>, 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 // Gamma correction for coverage-like alpha\n var luma: f32 = dot(shapeColor.rgb, vec3<f32>(0.299, 0.587, 0.114));\n var gamma: f32 = mix(1.0, 1.0 / 2.2, luma);\n var coverage: f32 = pow(shapeColor.a * alpha, gamma);\n\n return coverage;\n \n }\n `\n )\n }\n};\nconst mSDFBitGl = {\n name: \"msdf-bit\",\n fragment: {\n header: (\n /* glsl */\n `\n float calculateMSDFAlpha(vec4 msdfColor, vec4 shapeColor, 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 // Gamma correction for coverage-like alpha\n float luma = dot(shapeColor.rgb, vec3(0.299, 0.587, 0.114));\n float gamma = mix(1.0, 1.0 / 2.2, luma);\n float coverage = pow(shapeColor.a * alpha, gamma); \n \n return coverage;\n }\n `\n )\n }\n};\n\nexport { mSDFBit, mSDFBitGl };\n//# sourceMappingURL=mSDFBit.mjs.map\n","import { Matrix } from '../../../maths/matrix/Matrix.mjs';\nimport { getMaxTexturesPerBatch } from '../../../rendering/batcher/gl/utils/maxRecommendedTextures.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 { localUniformMSDFBit, localUniformMSDFBitGl } from './shader-bits/localUniformMSDFBit.mjs';\nimport { mSDFBit, mSDFBitGl } from './shader-bits/mSDFBit.mjs';\n\n\"use strict\";\nlet gpuProgram;\nlet glProgram;\nclass SdfShader extends Shader {\n constructor() {\n const uniforms = new UniformGroup({\n uColor: { value: new Float32Array([1, 1, 1, 1]), type: \"vec4<f32>\" },\n uTransformMatrix: { value: new Matrix(), type: \"mat3x3<f32>\" },\n uDistance: { value: 4, type: \"f32\" },\n uRound: { value: 0, type: \"f32\" }\n });\n const maxTextures = getMaxTexturesPerBatch();\n gpuProgram ?? (gpuProgram = compileHighShaderGpuProgram({\n name: \"sdf-shader\",\n bits: [\n colorBit,\n generateTextureBatchBit(maxTextures),\n localUniformMSDFBit,\n mSDFBit,\n roundPixelsBit\n ]\n }));\n glProgram ?? (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._destroyRenderableBound = this.destroyRenderable.bind(this);\n this._renderer = renderer;\n this._renderer.renderableGC.addManagedHash(this, \"_gpuBitmapText\");\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 bitmapText.off(\"destroyed\", this._destroyRenderableBound);\n this._destroyRenderableByUid(bitmapText.uid);\n }\n _destroyRenderableByUid(renderableUid) {\n const context = this._gpuBitmapText[renderableUid].context;\n if (context.customShader) {\n BigPool.return(context.customShader);\n context.customShader = null;\n }\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 context.customShader = BigPool.get(SdfShader);\n }\n }\n const chars = Array.from(bitmapText.text);\n const style = bitmapText._style;\n let currentY = bitmapFont.baseLineOffset;\n const bitmapTextLayout = getBitmapTextLayout(chars, style, bitmapFont, true);\n let index = 0;\n const padding = style.padding;\n const scale = bitmapTextLayout.scale;\n let tx = bitmapTextLayout.width;\n let ty = bitmapTextLayout.height + bitmapTextLayout.offsetY;\n if (style._stroke) {\n tx += style._stroke.width / scale;\n ty += style._stroke.width / scale;\n }\n context.translate(-bitmapText._anchor._x * tx - padding, -bitmapText._anchor._y * ty - padding).scale(scale, scale);\n const tint = bitmapFont.applyFillAsTint ? style._fill.color : 16777215;\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\", this._destroyRenderableBound);\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 distance = worldScale * dynamicFont.distanceField.range * (1 / fontScale);\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._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 { updateQuadBounds } from '../../../utils/data/updateQuadBounds.mjs';\n\n\"use strict\";\nfunction updateTextBounds(batchableSprite, text) {\n const { texture, bounds } = batchableSprite;\n updateQuadBounds(bounds, text._anchor, texture);\n const padding = text._style.padding;\n bounds.minX -= padding;\n bounds.minY -= padding;\n bounds.maxX -= padding;\n bounds.maxY -= padding;\n}\n\nexport { updateTextBounds };\n//# sourceMappingURL=updateTextBounds.mjs.map\n","import { ExtensionType } from '../../extensions/Extensions.mjs';\nimport { Texture } from '../../rendering/renderers/shared/texture/Texture.mjs';\nimport { BigPool } from '../../utils/pool/PoolGroup.mjs';\nimport { BatchableSprite } from '../sprite/BatchableSprite.mjs';\nimport { updateTextBounds } from '../text/utils/updateTextBounds.mjs';\n\n\"use strict\";\nclass HTMLTextPipe {\n constructor(renderer) {\n this._gpuText = /* @__PURE__ */ Object.create(null);\n this._destroyRenderableBound = this.destroyRenderable.bind(this);\n this._renderer = renderer;\n this._renderer.runners.resolutionChange.add(this);\n this._renderer.renderableGC.addManagedHash(this, \"_gpuText\");\n }\n resolutionChange() {\n for (const i in this._gpuText) {\n const gpuText = this._gpuText[i];\n if (!gpuText)\n continue;\n const text = gpuText.batchableSprite.renderable;\n if (text._autoResolution) {\n text._resolution = this._renderer.resolution;\n text.onViewUpdate();\n }\n }\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, instructionSet) {\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, instructionSet);\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 htmlText.off(\"destroyed\", this._destroyRenderableBound);\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 updateTextBounds(batchableSprite, htmlText);\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 updateTextBounds(batchableSprite, htmlText);\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.transform = htmlText.groupTransform;\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 htmlText._resolution = htmlText._autoResolution ? this._renderer.resolution : htmlText.resolution;\n this._gpuText[htmlText.uid] = gpuTextData;\n htmlText.on(\"destroyed\", this._destroyRenderableBound);\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","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","\"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({\n fontWeight: style.fontWeight,\n fontStyle: style.fontStyle,\n fontFamily\n }, 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 = `<style>${style.cssStyle}</style><div style='padding:0;'>${text}</div>`;\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 return canvasAndContext;\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 { ExtensionType } from '../../extensions/Extensions.mjs';\nimport { CanvasPool } from '../../rendering/renderers/shared/texture/CanvasPool.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 const uvSafeOffset = 2;\n image.width = (width | 0) + uvSafeOffset;\n image.height = (height | 0) + uvSafeOffset;\n const svgURL = getSVGUrl(text, style, resolution, fontCSS, htmlTextData);\n await loadSVGImage(image, svgURL, isSafari() && fontFamilies.length > 0);\n const resource = image;\n let canvasAndContext;\n if (this._createCanvas) {\n canvasAndContext = getTemporaryCanvasFromImage(image, resolution);\n }\n const texture = getPo2TextureFromSource(\n canvasAndContext ? canvasAndContext.canvas : resource,\n image.width - uvSafeOffset,\n image.height - uvSafeOffset,\n resolution\n );\n if (this._createCanvas) {\n this._renderer.texture.initSource(texture.source);\n CanvasPool.returnCanvasAndContext(canvasAndContext);\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 { ExtensionType } from '../../../extensions/Extensions.mjs';\nimport { BigPool } from '../../../utils/pool/PoolGroup.mjs';\nimport { BatchableSprite } from '../../sprite/BatchableSprite.mjs';\nimport { updateTextBounds } from '../utils/updateTextBounds.mjs';\n\n\"use strict\";\nclass CanvasTextPipe {\n constructor(renderer) {\n this._gpuText = /* @__PURE__ */ Object.create(null);\n this._destroyRenderableBound = this.destroyRenderable.bind(this);\n this._renderer = renderer;\n this._renderer.runners.resolutionChange.add(this);\n this._renderer.renderableGC.addManagedHash(this, \"_gpuText\");\n }\n resolutionChange() {\n for (const i in this._gpuText) {\n const gpuText = this._gpuText[i];\n if (!gpuText)\n continue;\n const text = gpuText.batchableSprite.renderable;\n if (text._autoResolution) {\n text._resolution = this._renderer.resolution;\n text.onViewUpdate();\n }\n }\n }\n validateRenderable(text) {\n const gpuText = this._getGpuText(text);\n const newKey = text._getKey();\n if (gpuText.currentKey !== newKey) {\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, instructionSet);\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 text.off(\"destroyed\", this._destroyRenderableBound);\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 updateTextBounds(batchableSprite, text);\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.transform = text.groupTransform;\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 text._resolution = text._autoResolution ? this._renderer.resolution : text.resolution;\n this._updateText(text);\n text.on(\"destroyed\", this._destroyRenderableBound);\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 text._resolution = text._autoResolution ? this._renderer.resolution : text.resolution;\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 /**\n * Returns a texture that was created wit the above `getTexture` function.\n * Handy if you are done with a texture and want to return it to the pool.\n * @param texture - The texture to be returned.\n */\n returnTexture(texture) {\n const source = texture.source;\n source.resource = null;\n source.uploadMethodId = \"unknown\";\n source.alphaMode = \"no-premultiply-alpha\";\n TexturePool.returnTexture(texture);\n }\n decreaseReferenceCount(textKey) {\n const activeTexture = this._activeTextures[textKey];\n activeTexture.usageCount--;\n if (activeTexture.usageCount === 0) {\n CanvasPool.returnCanvasAndContext(activeTexture.canvasAndContext);\n this.returnTexture(activeTexture.texture);\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 context.textBaseline = style.textBaseline;\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.fillStyle = style._fill ? getCanvasFillStyle(style._fill, context, measured) : null;\n if (style._stroke?.width) {\n const padding = style._stroke.width * style._stroke.alignment;\n context.strokeStyle = getCanvasFillStyle(style._stroke, context, measured, padding);\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 { 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 { 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 { extensions } from '../../extensions/Extensions.mjs';\nimport { MeshPipe } from './shared/MeshPipe.mjs';\n\n\"use strict\";\nextensions.add(MeshPipe);\n//# sourceMappingURL=init.mjs.map\n","import { extensions } from '../../extensions/Extensions.mjs';\nimport { GlParticleContainerPipe } from './shared/GlParticleContainerPipe.mjs';\nimport { GpuParticleContainerPipe } from './shared/GpuParticleContainerPipe.mjs';\n\n\"use strict\";\nextensions.add(GlParticleContainerPipe);\nextensions.add(GpuParticleContainerPipe);\n//# sourceMappingURL=init.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 { extensions } from '../../extensions/Extensions.mjs';\nimport { BitmapTextPipe } from './BitmapTextPipe.mjs';\n\n\"use strict\";\nextensions.add(BitmapTextPipe);\n//# sourceMappingURL=init.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 { extensions } from '../../extensions/Extensions.mjs';\nimport { TilingSpritePipe } from './TilingSpritePipe.mjs';\n\n\"use strict\";\nextensions.add(TilingSpritePipe);\n//# sourceMappingURL=init.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","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"],"names":["ResizePlugin","options","dom","width","height","clientWidth","clientHeight","ExtensionType","TickerPlugin","ticker","UPDATE_PRIORITY","Ticker","oldTicker","AbstractBitmapFont","EventEmitter","deprecation","v8_0_0","destroyTextures","i","_a","page","valuesToIterateForKeys","generateTextStyleKey","style","key","index","prop","addFillStyleKey","addStokeStyleKey","addDropShadowKey","fillStyle","strokeStyle","dropShadow","Color","_TextStyle","convertV7Tov8Style","fullStyle","thisKey","value","GraphicsContext","toFillStyle","toStrokeStyle","defaultStyle","destroyTextureSource","_b","_c","_d","cb","target","property","newValue","FillGradient","FillPattern","TextStyle","oldStyle","defaults","color","obj","fontSize","gradientFill","fills","number","ratio","genericFontFamilies","fontStringFromTextStyle","fontSizeString","fontFamilies","fontFamily","contextSettings","_CanvasTextMetrics","result","proto","DOMAdapter","text","lines","lineWidths","lineHeight","maxLineWidth","fontProperties","canvas","wordWrap","textKey","font","context","lineWidth","strokeWidth","letterSpacing","useExperimentalLetterSpacing","metrics","metricWidth","actualBoundingBoxLeft","boundsWidth","val","line","cache","whiteSpace","collapseSpaces","collapseNewlines","canPrependSpaces","wordWrapWidth","tokens","token","currIsBreakingSpace","lastIsBreakingSpace","tokenWidth","characters","j","char","lastChar","k","nextChar","characterWidth","isLastToken","newLine","_nextChar","_token","breakWords","_char","_index","_breakWords","properties","c","segmenter","s","x","CanvasTextMetrics","PRECISION","getCanvasFillStyle","textMetrics","padding","Texture","fillPattern","pattern","tempMatrix","Matrix","fillGradient","isLinear","isLocal","gradient","isNearlyVertical","start","end","center","innerRadius","outerCenter","outerRadius","stop","globalStop","warn","resolveCharacters","chars","item","startCode","endCode","i2","j2","_DynamicBitmapFont","dynamicOptions","requestedFontSize","charList","self","pageData","textureSource","currentX","currentY","fontScale","maxCharHeight","skipTexture","maxTextureWidth","maxTextureHeight","textureGlyphWidth","paddedWidth","paddedHeight","pageData2","xAdvance","px","py","frame","Rectangle","newChars","measureCache","first","second","c1","c2","total","amount","textureResolution","canvasAndContext","CanvasPool","resolution","texture","ImageSource","stroke","strokeThickness","shadowOptions","rgb","dropShadowBlur","dropShadowDistance","y","tx","ty","descent","DynamicBitmapFont","getBitmapTextLayout","trimEnd","layoutData","currentLine","previousChar","firstWord","currentWord","nextWord","word","position","nextLine","scale","adjustedLetterSpacing","adjustedWordWrapWidth","isEnd","charData","spaceWidth","kerning","nextCharWidth","alignCenter","alignRight","alignJustify","measurementData","offset","indy","spaceIndex","totalSpaces","fontCount","BitmapFontManagerClass","fontFamilyKey","overrideFill","Cache","fnt","dynamicFont","bitmapFont","args","name","textStyle","flatChars","cacheKey","BitmapFontManager","FilterPipe","renderer","filterEffect","container","instructionSet","_filterEffect","_container","instruction","getGlobalRenderableBounds","renderables","bounds","renderable","quadGeometry","Geometry","FilterSystem","UniformGroup","BindGroup","filters","filterData","filterFrameTransform","colorTextureSource","antialias","blendRequired","enabled","clipToViewport","filter","viewPort","rootResolution","TexturePool","inputTexture","backTexture","previousBounds","renderTarget","flip","flop","t","lastRenderSurface","backgroundResolution","input","output","clear","Point","isFinalTarget","currentIndex","filterUniforms","uniforms","outputFrame","inputSize","inputPixel","inputClamp","globalFrame","outputTexture","lastIndex","filterData2","rootTexture","batchUniforms","RendererType","Bounds","outputMatrix","sprite","data","mappedMatrix","worldTransform","renderGroup","_MeshGeometry","positions","uvs","indices","shrinkToFit","positionBuffer","Buffer","BufferUsage","uvBuffer","indexBuffer","MeshGeometry","textStyleToCSS","fill","cssStyles","strokeToCSS","dropShadowToCSS","tagStyleToCSS","dropShadowStyle","templates","transform","tagStyles","out","tagStyle","cssTagStyle","HTMLTextStyle","toAdd","v","toRemove","nssvg","nsxhtml","HTMLTextRenderData","foreignObject","svgRoot","styleElement","domElement","tempHTMLTextRenderData","measureHtmlText","fontStyleCSS","htmlTextRenderData","contentBounds","doublePadding","GraphicsPipe","adaptor","State","graphics","wasBatched","gpuContext","batches","batch","shader","localUniforms","color32BitToUniform","batchPipe","roundPixels","batchClone","BigPool","BatchableGraphics","graphicsUid","_PlaneGeometry","verts","verticesX","verticesY","sizeX","sizeY","totalSub","xpos","ypos","value2","value3","value4","PlaneGeometry","BatchableMesh","transformedUvs","textureMatrix","MeshPipe","mesh","meshData","isBatched","geometry","batchableMesh","batcher","batched","gpuBatchableMesh","gpuMesh","getAdjustedBlendModeBlend","GlParticleContainerAdaptor","particleContainerPipe","state","gl","buffer","glType","GpuParticleContainerAdaptor","createIndicesForQuads","size","outBuffer","totalIndices","generateParticleUpdateFunction","generateUpdateFunction","dynamic","funcFragments","attributeInfo","getAttributeInfoFromFormat","functionSource","ParticleBuffer","staticVertexSize","dynamicVertexSize","ViewableBuffer","dynamicOffset","staticOffset","uploadFunction","getParticleSyncKey","particles","uploadStatic","dynamicAttributeBuffer","staticAttributeBuffer","keyGen","fragment","vertex","wgsl","ParticleShader","Shader","glProgram","GlProgram","gpuProgram","GpuProgram","TextureStyle","ParticleContainerPipe","_renderable","children","transformationMatrix","GlParticleContainerPipe","GpuParticleContainerPipe","_NineSliceGeometry","p","_leftWidth","_rightWidth","_topHeight","_bottomHeight","_anchorX","_anchorY","w","scaleW","h","scaleH","anchorOffsetX","anchorOffsetY","_uvw","_uvh","NineSliceGeometry","NineSliceSpritePipe","gpuSprite","batchableSprite","tilingBit","tilingBitGl","TilingSpriteShader","compileHighShaderGpuProgram","localUniformBit","roundPixelsBit","compileHighShaderGlProgram","localUniformBitGl","roundPixelsBitGl","tilingUniforms","matrix","anchorX","anchorY","textureWidth","textureHeight","uTextureTransform","QuadGeometry","setPositions","tilingSprite","applyMatrix","array","stride","b","d","setUvs","sharedQuad","TilingSpritePipe","tilingSpriteData","couldBatch","canBatch","renderableData","_nonPowOf2wrapping","localUniformMSDFBit","localUniformMSDFBitGl","mSDFBit","mSDFBitGl","SdfShader","maxTextures","getMaxTexturesPerBatch","colorBit","generateTextureBatchBit","colorBitGl","generateTextureBatchBitGl","getBatchSamplersUniformGroup","BitmapTextPipe","bitmapText","graphicsRenderable","syncWithProxy","renderableUid","proxyGraphics","bitmapTextLayout","tint","proxyRenderable","Graphics","a","dx","dy","worldScale","distance","uid","proxy","updateTextBounds","updateQuadBounds","HTMLTextPipe","gpuText","htmlText","newKey","htmlTextUid","e","gpuTextData","BatchableSprite","isSafari","userAgent","tempBounds","getPo2TextureFromSource","image","extractFontFamilies","dedupe","regex","matches","addFontFamily","fontFamily2","match","loadFontAsBase64","url","blob","reader","resolve","reject","loadFontCSS","dataSrc","FontStylePromiseCache","getFontCss","defaultOptions","fontPromises","getSVGUrl","fontCSS","htmlTextData","getTemporaryCanvasFromImage","loadSVGImage","delay","resolve2","HTMLTextSystem","promise","measured","uvSafeOffset","svgURL","resource","activeTexture","CanvasTextPipe","textUid","checkRow","checkColumn","top","bottom","getCanvasBoundingBox","left","right","CanvasTextSystem","_renderer","nextPow2","_textKey","trimmed","source","linePositionX","linePositionY","passesCount","isShadowPass","dsOffsetText","dsOffsetShadow","dropShadowColor","dropShadowAlpha","linePositionYShift","isStroke","currentPosition","stringArray","previousWidth","currentWidth","currentChar","textStr","extensions","GraphicsContextSystem"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73]}
|