diff --git a/index.html b/index.html
index 0a9051f..f1da83b 100644
--- a/index.html
+++ b/index.html
@@ -1,7 +1,7 @@
-
+
diff --git a/js/0-jsloadentry.js b/js/0-jsloadentry.js
index f6714e1..f04cd21 100644
--- a/js/0-jsloadentry.js
+++ b/js/0-jsloadentry.js
@@ -3,9 +3,9 @@
(async function() {
if(!(typeof scriptManager=="object"&&"loadjs" in scriptManager)) {
if(typeof loadfail=="function") {
- loadfail("jsloadentry.js:scriptManager.loadjs is not defined");
+ loadfail("jsloadentry.js: scriptManager.loadjs is not defined");
} else {
- window.alert("jsloadentry.js:scriptManager.loadjs is not defined");
+ window.alert("jsloadentry.js: scriptManager.loadjs is not defined");
}
return;
}
@@ -13,7 +13,9 @@
scriptManager.loadjs("./js/libpolyfill.requestAnimationFrame.js");
scriptManager.loadjs("./js/libutil.js");
scriptManager.loadjs("./js/libcubicbezier.js");
- scriptManager.loadjs("./js/libpixi_v891uni.min.js");
- scriptManager.loadjs("./js/libtransition.js");
+ scriptManager.loadjs("./js/libwebglcheck.js");
+ scriptManager.loadjs("./js/libpixi_v891gl.min.js");
await scriptManager.waitAll();
+ await scriptManager.loadjs("./js/libtransition.js");
+ await scriptManager.loadjs("./js/libmain.js");
})();
\ No newline at end of file
diff --git a/js/0-jsloader.js b/js/0-jsloader.js
index 150a185..f47b6ac 100644
--- a/js/0-jsloader.js
+++ b/js/0-jsloader.js
@@ -18,24 +18,28 @@
if(document.readyState=="complete") {
document.body.appendChild(sc);
} else {
- window.addEventListener("load", function() {
+ var hfn=function() {
+ window.removeEventListener("load", hfn);
document.body.appendChild(sc);
- });
+ };
+ window.addEventListener("load", hfn);
}
sc.addEventListener(("readyState" in sc?"readystatechange":"load"), function() {
- console.info("script "+pth+" loaded successfully.");
+ console.debug("script "+pth+" loaded successfully.");
scriptManager.loadingcount--;
+ sc.remove();
resolve();
});
sc.addEventListener("error", function() {
window.loadfail("script "+pth+" load failed");
+ sc.remove();
reject();
});
scriptManager.loadingcount++;
-
+ return ret;
};
scriptManager.isDone=function() {
@@ -44,7 +48,13 @@
scriptManager.waitAll=async function() {
return new Promise(function(resolve, reject) {
-
+ var i;
+ i=setInterval(function() {
+ if(scriptManager.loadingcount==0) {
+ clearInterval(i);
+ resolve();
+ }
+ }, 100);
});
};
diff --git a/js/0-fconsole.js b/js/0-loadfail.js
similarity index 100%
rename from js/0-fconsole.js
rename to js/0-loadfail.js
diff --git a/js/libmain.js b/js/libmain.js
new file mode 100644
index 0000000..1c6f338
--- /dev/null
+++ b/js/libmain.js
@@ -0,0 +1,270 @@
+//libmain.js
+
+(function() {
+ if(typeof PIXI!="object") {
+ if(typeof loadfail=="function") {
+ loadfail("libmain.js: object PIXI(type of "+(typeof PIXI)+") is not defined");
+ } else {
+ window.alert("libmain.js: object PIXI(type of "+(typeof PIXI)+") is not defined");
+ }
+ return;
+ }
+
+ var main_stage= {};
+
+ (function() { //init canvas and frame
+ console.log("[libmain] setting up basic pixi application...");
+ //set up main canvas element
+ main_stage.width=1920;
+ main_stage.height=1080;
+ var mainframe=document.getElementById("mainframe");
+ var canvas=document.getElementById("stagecanvas");
+ if(mainframe===null) {
+ mainframe=document.createElement("div");
+ mainframe.id="mainframe";
+ document.body.appendChild(mainframe);
+ }
+ mainframe.style.display="inline-block";
+ mainframe.style.display="inline-block";
+ mainframe.style.zIndex=0;
+ mainframe.style.backgroundColor="#000000";
+ if(canvas===null) {
+ canvas=document.createElement("canvas");
+ canvas.id="stagecanvas";
+ mainframe.appendChild(canvas);
+ }
+ canvas.style.width="100%";
+ canvas.style.height="100%";
+ canvas.style.display="inline-block";
+ canvas.style.position="absolute";
+ canvas.style.zIndex=1;
+ main_stage.mainframe=mainframe;
+ main_stage.canvas=canvas;
+
+ //document resize handler
+ main_stage.resize=function() {
+ var res=libutil.calcresize(document.body.clientWidth, document.body.clientHeight, main_stage.width, main_stage.height);
+ mainframe.style.width=res[0]+"px";
+ mainframe.style.height=res[1]+"px";
+ mainframe.style.left=res[2]+"px";
+ mainframe.style.top=res[3]+"px";
+ };
+
+ window.addEventListener("resize", main_stage.resize);
+ main_stage.resize();
+
+ //setup pixi application
+ if(window.suppgl) {
+ main_stage.renderer=new PIXI.Renderer({"view":canvas, "antialias":true, "transparent":true, "backgroundAlpha":0, "width":main_stage.width, "height":main_stage.height});
+ } else {
+ main_stage.renderer=new PIXI.CanvasRenderer({"view":canvas, "antialias":true, "transparent":true, "backgroundAlpha":0, "width":main_stage.width, "height":main_stage.height});
+ }
+ main_stage.stage=new PIXI.Container();
+ main_stage.stage.sortableChildren=true;
+ main_stage.render=function() {
+ requestAnimationFrame(main_stage.render);
+ main_stage.renderer.render(main_stage.stage);
+ };
+ main_stage.render();
+
+ })();
+
+ (function() { //api functions
+ console.log("[libmain] initalizing api functions...");
+
+ main_stage.addVideoPIXI=function(pth, width, height, left, top) { //[DEPRECIATED] return=PIXI.Sprite
+ if(arguments.length<=1||isNaN(Number(width))) {
+ width=main_stage.renderer.screen.width;
+ }
+ if(arguments.length<=2||isNaN(Number(height))) {
+ height=main_stage.renderer.screen.height;
+ }
+ if(arguments.length<=3||isNaN(Number(left))) {
+ left=0;
+ }
+ if(arguments.length<=4||isNaN(Number(top))) {
+ top=0;
+ }
+ var tex=PIXI.Texture.from(pth);
+ var spr=PIXI.Sprite.from(tex);
+ spr.width=width;
+ spr.height=height;
+ spr.position.x=left;
+ spr.position.y=top;
+ spr.anchor.x=0;
+ spr.anchor.y=0;
+ main_stage.stage.addChild(spr);
+ tex.baseTexture.on("loaded", function() {
+ setTimeout(function() {
+ tex.baseTexture.resource.source.pause();
+ tex.baseTexture.resource.source.currentTime=0;
+ }, 0);
+ });
+ spr.play=function() {
+ tex.baseTexture.resource.source.play();
+ };
+ spr.pause=function() {
+ tex.baseTexture.resource.source.pause();
+ };
+ spr.stop=function() {
+ tex.baseTexture.resource.source.pause();
+ tex.baseTexture.resource.source.currentTime=0;
+ };
+ spr.seek=function(t) {
+ tex.baseTexture.resource.source.currentTime=t;
+ };
+ spr.mute=function(t) {
+ tex.baseTexture.resource.source.muted=t;
+ };
+ spr.loop=function(t) {
+ tex.baseTexture.resource.source.loop=t;
+ };
+ return spr;
+ };
+
+ main_stage.addVideo=function(pth, width, height, left, top) { //return=HTMLVideoElement
+ if(arguments.length<=1||isNaN(Number(width))) {
+ width=main_stage.renderer.screen.width;
+ }
+ if(arguments.length<=2||isNaN(Number(height))) {
+ height=main_stage.renderer.screen.height;
+ }
+ if(arguments.length<=3||isNaN(Number(left))) {
+ left=0;
+ }
+ if(arguments.length<=4||isNaN(Number(top))) {
+ top=0;
+ }
+ width*=100;
+ width/=main_stage.renderer.screen.width;
+ height*=100;
+ height/=main_stage.renderer.screen.height;
+ left*=100;
+ left/=main_stage.renderer.screen.width;
+ top*=100;
+ top/=main_stage.renderer.screen.height;
+ var elem=document.createElement("video");
+ elem.src=pth;
+ elem.load();
+ elem.style.pointerEvents="none";
+ elem.style.left=left+"%";
+ elem.style.top=top+"%";
+ elem.style.width=width+"%";
+ elem.style.height=height+"%";
+ elem.style.position="absolute";
+ elem.style.display="inline-block";
+ elem.style.zIndex=-1;
+ elem.destroy=function() {
+ elem.parentNode.removeChild(elem);
+ elem=null;
+ };
+ elem.setposi=function(x, y) {
+ x*=100;
+ x/=main_stage.renderer.screen.width;
+ y*=100;
+ y/=main_stage.renderer.screen.height;
+ elem.style.left=x+"%";
+ elem.style.top=y+"%";
+ };
+ main_stage.mainframe.appendChild(elem);
+ return elem;
+ };
+
+ main_stage.addAudio=function(pth) { //return=HTMLAudioElement
+ var elem=document.createElement("audio");
+ elem.style.display="none";
+ elem.src=pth;
+ elem.load();
+ elem.destroy=function() {
+ elem.parentNode.removeChild(elem);
+ elem=null;
+ };
+ main_stage.mainframe.appendChild(elem);
+ return elem;
+ };
+
+ main_stage.addText=function(text, left, top, cfg) { //return=PIXI.Sprite
+ if(arguments.length<=1||isNaN(Number(left))) {
+ left=0;
+ }
+ if(arguments.length<=2||isNaN(Number(top))) {
+ top=0;
+ }
+ if(arguments.length<=3||!(cfg instanceof Object)) {
+ cfg= {"fontFamily":"Arial", "fontSize":35, "fill":0xffffff, "align":"left"};
+ }
+ var spr=new PIXI.Text(text, cfg);
+ spr.position.x=left;
+ spr.position.y=top;
+ spr.anchor.x=0.5;
+ spr.anchor.y=0.5;
+ main_stage.stage.addChild(spr);
+ return spr;
+ };
+
+ main_stage.addShape=function(name, left, top, width, height) { //return=PIXI.Sprite
+ var shape=null;
+ for(var a=0; akey in obj?__defProp$1d(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$1d=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$1d.call(b,prop)&&__defNormalProp$1d(a,prop,b[prop]);if(__getOwnPropSymbols$1d)for(var prop of __getOwnPropSymbols$1d(b))__propIsEnum$1d.call(b,prop)&&__defNormalProp$1d(a,prop,b[prop]);return a},ExtensionType2={Application:"application",WebGLPipes:"webgl-pipes",WebGLPipesAdaptor:"webgl-pipes-adaptor",WebGLSystem:"webgl-system",WebGPUPipes:"webgpu-pipes",WebGPUPipesAdaptor:"webgpu-pipes-adaptor",WebGPUSystem:"webgpu-system",CanvasSystem:"canvas-system",CanvasPipesAdaptor:"canvas-pipes-adaptor",CanvasPipes:"canvas-pipes",Asset:"asset",LoadParser:"load-parser",ResolveParser:"resolve-parser",CacheParser:"cache-parser",DetectionParser:"detection-parser",MaskEffect:"mask-effect",BlendMode:"blend-mode",TextureSource:"texture-source",Environment:"environment",ShapeBuilder:"shape-builder",Batcher:"batcher"};const normalizeExtension=ext=>{if("function"==typeof ext||"object"==typeof ext&&ext.extension){if(!ext.extension)throw new Error("Extension class must have an extension object");var metadata="object"!=typeof ext.extension?{type:ext.extension}:ext.extension,metadata=__spreadValues$1d({},metadata);ext=__defProps$r(metadata,__getOwnPropDescs$r({ref:ext}))}if("object"!=typeof ext)throw new Error("Invalid extension type");return"string"==typeof(ext=__spreadValues$1d({},ext)).type&&(ext.type=[ext.type]),ext},normalizeExtensionPriority=(ext,defaultPriority)=>null!=(ext=normalizeExtension(ext).priority)?ext:defaultPriority,extensions={_addHandlers:{},_removeHandlers:{},_queue:{},remove(...extensions2){return extensions2.map(normalizeExtension).forEach(ext=>{ext.type.forEach(type=>{var _a;return null==(type=(_a=this._removeHandlers)[type])?void 0:type.call(_a,ext)})}),this},add(...extensions2){return extensions2.map(normalizeExtension).forEach(ext=>{ext.type.forEach(type=>{var _b,handlers=this._addHandlers,queue=this._queue;handlers[type]?null!=(_b=handlers[type])&&_b.call(handlers,ext):(queue[type]=queue[type]||[],null!=(_b=queue[type])&&_b.push(ext))})}),this},handle(type,onAdd,onRemove){var addHandlers=this._addHandlers,removeHandlers=this._removeHandlers;if(addHandlers[type]||removeHandlers[type])throw new Error(`Extension type ${type} already has a handler`);return addHandlers[type]=onAdd,removeHandlers[type]=onRemove,(addHandlers=this._queue)[type]&&(null!=(removeHandlers=addHandlers[type])&&removeHandlers.forEach(ext=>onAdd(ext)),delete addHandlers[type]),this},handleByMap(type,map){return this.handle(type,extension=>{extension.name&&(map[extension.name]=extension.ref)},extension=>{extension.name&&delete map[extension.name]})},handleByNamedList(type,map,defaultPriority=-1){return this.handle(type,extension=>{0<=map.findIndex(item=>item.name===extension.name)||(map.push({name:extension.name,value:extension.ref}),map.sort((a,b)=>normalizeExtensionPriority(b.value,defaultPriority)-normalizeExtensionPriority(a.value,defaultPriority)))},extension=>{var index=map.findIndex(item=>item.name===extension.name);-1!==index&&map.splice(index,1)})},handleByList(type,list,defaultPriority=-1){return this.handle(type,extension=>{list.includes(extension.ref)||(list.push(extension.ref),list.sort((a,b)=>normalizeExtensionPriority(b,defaultPriority)-normalizeExtensionPriority(a,defaultPriority)))},extension=>{-1!==(extension=list.indexOf(extension.ref))&&list.splice(extension,1)})},mixin(Target,...sources){for(const source of sources)Object.defineProperties(Target.prototype,Object.getOwnPropertyDescriptors(source))}};function getDefaultExportFromCjs(x){return x&&x.__esModule&&Object.prototype.hasOwnProperty.call(x,"default")?x.default:x}var eventemitter3$1={exports:{}};function t(r){return"string"==typeof r?0key in obj?__defProp$1c(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;!function(r){r.forEach(function(r){S.indexOf(r)<0&&(r(j,y),S.push(r))})}([function(e,f){var d,a={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},r={};for(d in a)r[a[d]]=d;var l={};e.prototype.toName=function(f){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var n=r[this.toHex()];if(n)return n;if(null!=f&&f.closest){var g,o=this.toRgb(),t=1/0,b="black";if(!l.length)for(var c in a)l[c]=new e(a[c]).toRgb();for(g in a){var d=o,i=l[g];(d=Math.pow(d.r-i.r,2)+Math.pow(d.g-i.g,2)+Math.pow(d.b-i.b,2))v===value2[i]):null!==value1&&null!==value2?(type1=Object.keys(value1),keys2=Object.keys(value2),type1.length===keys2.length&&type1.every(key=>value1[key]===value2[key])):value1===value2)}toRgba(){var[r,g,b,a]=this._components;return{r:r,g:g,b:b,a:a}}toRgb(){var[r,g,b]=this._components;return{r:r,g:g,b:b}}toRgbaString(){var[r,g,b]=this.toUint8RgbArray();return`rgba(${r},${g},${b},${this.alpha})`}toUint8RgbArray(out){var[r,g,b]=this._components;return this._arrayRgb||(this._arrayRgb=[]),(out=out||this._arrayRgb)[0]=Math.round(255*r),out[1]=Math.round(255*g),out[2]=Math.round(255*b),out}toArray(out){this._arrayRgba||(this._arrayRgba=[]),out=out||this._arrayRgba;var[r,g,b,a]=this._components;return out[0]=r,out[1]=g,out[2]=b,out[3]=a,out}toRgbArray(out){this._arrayRgb||(this._arrayRgb=[]),out=out||this._arrayRgb;var[r,g,b]=this._components;return out[0]=r,out[1]=g,out[2]=b,out}toNumber(){return this._int}toBgrNumber(){var[r,g,b]=this.toUint8RgbArray();return(b<<16)+(g<<8)+r}toLittleEndianNumber(){var value=this._int;return(value>>16)+(65280&value)+((255&value)<<16)}multiply(value){var[value,g,b,a]=_Color._temp.setValue(value)._components;return this._components[0]*=value,this._components[1]*=g,this._components[2]*=b,this._components[3]*=a,this._refreshInt(),this._value=null,this}premultiply(alpha,applyToRGB=!0){return applyToRGB&&(this._components[0]*=alpha,this._components[1]*=alpha,this._components[2]*=alpha),this._components[3]=alpha,this._refreshInt(),this._value=null,this}toPremultiplied(alpha,applyToRGB=!0){if(1===alpha)return(255<<24)+this._int;if(0===alpha)return applyToRGB?0:this._int;let r=this._int>>16&255,g=this._int>>8&255,b=255&this._int;return applyToRGB&&(r=r*alpha+.5|0,g=g*alpha+.5|0,b=b*alpha+.5|0),(255*alpha<<24)+(r<<16)+(g<<8)+b}toHex(){var hexString=this._int.toString(16);return"#"+("000000".substring(0,6-hexString.length)+hexString)}toHexa(){var alphaString=Math.round(255*this._components[3]).toString(16);return this.toHex()+"00".substring(0,2-alphaString.length)+alphaString}setAlpha(alpha){return this._components[3]=this._clamp(alpha),this}_normalize(value){let r,g,b,a;var match;if(("number"==typeof value||value instanceof Number)&&0<=value&&value<=16777215?(r=(value>>16&255)/255,g=(value>>8&255)/255,b=(255&value)/255,a=1):(Array.isArray(value)||value instanceof Float32Array)&&3<=value.length&&value.length<=4?(value=this._clamp(value),[r,g,b,a=1]=value):(value instanceof Uint8Array||value instanceof Uint8ClampedArray)&&3<=value.length&&value.length<=4?(value=this._clamp(value,0,255),[r,g,b,a=255]=value,r/=255,g/=255,b/=255,a/=255):"string"!=typeof value&&"object"!=typeof value||("string"==typeof value&&(match=_Color.HEX_PATTERN.exec(value))&&(value="#"+match[2]),(match=w(value)).isValid()&&({r,g,b,a}=match.rgba,r/=255,g/=255,b/=255)),void 0===r)throw new Error("Unable to convert color "+value);this._components[0]=r,this._components[1]=g,this._components[2]=b,this._components[3]=a,this._refreshInt()}_refreshInt(){this._clamp(this._components);var[r,g,b]=this._components;this._int=(255*r<<16)+(255*g<<8)+(255*b|0)}_clamp(value,min=0,max=1){return"number"==typeof value?Math.min(Math.max(value,min),max):(value.forEach((v,i)=>{value[i]=Math.min(Math.max(v,min),max)}),value)}static isColorLike(value){return"number"==typeof value||"string"==typeof value||value instanceof Number||value instanceof _Color||Array.isArray(value)||value instanceof Uint8Array||value instanceof Uint8ClampedArray||value instanceof Float32Array||void 0!==value.r&&void 0!==value.g&&void 0!==value.b||void 0!==value.r&&void 0!==value.g&&void 0!==value.b&&void 0!==value.a||void 0!==value.h&&void 0!==value.s&&void 0!==value.l||void 0!==value.h&&void 0!==value.s&&void 0!==value.l&&void 0!==value.a||void 0!==value.h&&void 0!==value.s&&void 0!==value.v||void 0!==value.h&&void 0!==value.s&&void 0!==value.v&&void 0!==value.a}};_Color.shared=new _Color,_Color._temp=new _Color,_Color.HEX_PATTERN=/^(#|0x)?(([a-f0-9]{3}){1,2}([a-f0-9]{2})?)$/i;let Color=_Color;eventemitter3$1={cullArea:null,cullable:!1,cullableChildren:!0};const PI_2=2*Math.PI,RAD_TO_DEG=180/Math.PI,DEG_TO_RAD=Math.PI/180;class Point{constructor(x=0,y=0){this.x=0,this.y=0,this.x=x,this.y=y}clone(){return new Point(this.x,this.y)}copyFrom(p){return this.set(p.x,p.y),this}copyTo(p){return p.set(this.x,this.y),p}equals(p){return p.x===this.x&&p.y===this.y}set(x=0,y=x){return this.x=x,this.y=y,this}toString(){return`[pixi.js/math:Point x=${this.x} y=${this.y}]`}static get shared(){return tempPoint.x=0,tempPoint.y=0,tempPoint}}const tempPoint=new Point;class Matrix{constructor(a=1,b=0,c=0,d=1,tx=0,ty=0){this.array=null,this.a=a,this.b=b,this.c=c,this.d=d,this.tx=tx,this.ty=ty}fromArray(array){this.a=array[0],this.b=array[1],this.c=array[3],this.d=array[4],this.tx=array[2],this.ty=array[5]}set(a,b,c,d,tx,ty){return this.a=a,this.b=b,this.c=c,this.d=d,this.tx=tx,this.ty=ty,this}toArray(transpose,out){return this.array||(this.array=new Float32Array(9)),out=out||this.array,transpose?(out[0]=this.a,out[1]=this.b,out[2]=0,out[3]=this.c,out[4]=this.d,out[5]=0,out[6]=this.tx,out[7]=this.ty):(out[0]=this.a,out[1]=this.c,out[2]=this.tx,out[3]=this.b,out[4]=this.d,out[5]=this.ty,out[6]=0,out[7]=0),out[8]=1,out}apply(pos,newPos){newPos=newPos||new Point;var x=pos.x,pos=pos.y;return newPos.x=this.a*x+this.c*pos+this.tx,newPos.y=this.b*x+this.d*pos+this.ty,newPos}applyInverse(pos,newPos){newPos=newPos||new Point;var a=this.a,b=this.b,c=this.c,d=this.d,tx=this.tx,ty=this.ty,id=1/(a*d+c*-b),x=pos.x,pos=pos.y;return newPos.x=d*id*x+-c*id*pos+(ty*c-tx*d)*id,newPos.y=a*id*pos+-b*id*x+(-ty*a+tx*b)*id,newPos}translate(x,y){return this.tx+=x,this.ty+=y,this}scale(x,y){return this.a*=x,this.d*=y,this.c*=x,this.b*=y,this.tx*=x,this.ty*=y,this}rotate(angle){var cos=Math.cos(angle),angle=Math.sin(angle),a1=this.a,c1=this.c,tx1=this.tx;return this.a=a1*cos-this.b*angle,this.b=a1*angle+this.b*cos,this.c=c1*cos-this.d*angle,this.d=c1*angle+this.d*cos,this.tx=tx1*cos-this.ty*angle,this.ty=tx1*angle+this.ty*cos,this}append(matrix){var a1=this.a,b1=this.b,c1=this.c,d1=this.d;return this.a=matrix.a*a1+matrix.b*c1,this.b=matrix.a*b1+matrix.b*d1,this.c=matrix.c*a1+matrix.d*c1,this.d=matrix.c*b1+matrix.d*d1,this.tx=matrix.tx*a1+matrix.ty*c1+this.tx,this.ty=matrix.tx*b1+matrix.ty*d1+this.ty,this}appendFrom(a,b){var a1=a.a,b1=a.b,c1=a.c,d1=a.d,tx=a.tx,a=a.ty,a2=b.a,b2=b.b,c2=b.c,d2=b.d;return this.a=a1*a2+b1*c2,this.b=a1*b2+b1*d2,this.c=c1*a2+d1*c2,this.d=c1*b2+d1*d2,this.tx=tx*a2+a*c2+b.tx,this.ty=tx*b2+a*d2+b.ty,this}setTransform(x,y,pivotX,pivotY,scaleX,scaleY,rotation,skewX,skewY){return this.a=Math.cos(rotation+skewY)*scaleX,this.b=Math.sin(rotation+skewY)*scaleX,this.c=-Math.sin(rotation-skewX)*scaleY,this.d=Math.cos(rotation-skewX)*scaleY,this.tx=x-(pivotX*this.a+pivotY*this.c),this.ty=y-(pivotX*this.b+pivotY*this.d),this}prepend(matrix){var a1,c1,tx1=this.tx;return 1===matrix.a&&0===matrix.b&&0===matrix.c&&1===matrix.d||(a1=this.a,c1=this.c,this.a=a1*matrix.a+this.b*matrix.c,this.b=a1*matrix.b+this.b*matrix.d,this.c=c1*matrix.a+this.d*matrix.c,this.d=c1*matrix.b+this.d*matrix.d),this.tx=tx1*matrix.a+this.ty*matrix.c+matrix.tx,this.ty=tx1*matrix.b+this.ty*matrix.d+matrix.ty,this}decompose(transform){var a=this.a,b=this.b,c=this.c,d=this.d,pivot=transform.pivot,skewX=-Math.atan2(-c,d),skewY=Math.atan2(b,a),delta=Math.abs(skewX+skewY);return delta<1e-5||Math.abs(PI_2-delta)<1e-5?(transform.rotation=skewY,transform.skew.x=transform.skew.y=0):(transform.rotation=0,transform.skew.x=skewX,transform.skew.y=skewY),transform.scale.x=Math.sqrt(a*a+b*b),transform.scale.y=Math.sqrt(c*c+d*d),transform.position.x=this.tx+(pivot.x*a+pivot.y*c),transform.position.y=this.ty+(pivot.x*b+pivot.y*d),transform}invert(){var a1=this.a,b1=this.b,c1=this.c,d1=this.d,tx1=this.tx,n=a1*d1-b1*c1;return this.a=d1/n,this.b=-b1/n,this.c=-c1/n,this.d=a1/n,this.tx=(c1*this.ty-d1*tx1)/n,this.ty=-(a1*this.ty-b1*tx1)/n,this}isIdentity(){return 1===this.a&&0===this.b&&0===this.c&&1===this.d&&0===this.tx&&0===this.ty}identity(){return this.a=1,this.b=0,this.c=0,this.d=1,this.tx=0,this.ty=0,this}clone(){var matrix=new Matrix;return matrix.a=this.a,matrix.b=this.b,matrix.c=this.c,matrix.d=this.d,matrix.tx=this.tx,matrix.ty=this.ty,matrix}copyTo(matrix){return matrix.a=this.a,matrix.b=this.b,matrix.c=this.c,matrix.d=this.d,matrix.tx=this.tx,matrix.ty=this.ty,matrix}copyFrom(matrix){return this.a=matrix.a,this.b=matrix.b,this.c=matrix.c,this.d=matrix.d,this.tx=matrix.tx,this.ty=matrix.ty,this}equals(matrix){return matrix.a===this.a&&matrix.b===this.b&&matrix.c===this.c&&matrix.d===this.d&&matrix.tx===this.tx&&matrix.ty===this.ty}toString(){return`[pixi.js:Matrix a=${this.a} b=${this.b} c=${this.c} d=${this.d} tx=${this.tx} ty=${this.ty}]`}static get IDENTITY(){return identityMatrix$1.identity()}static get shared(){return tempMatrix$6.identity()}}const tempMatrix$6=new Matrix,identityMatrix$1=new Matrix;class ObservablePoint{constructor(observer,x,y){this._x=x||0,this._y=y||0,this._observer=observer}clone(observer){return new ObservablePoint(null!=observer?observer:this._observer,this._x,this._y)}set(x=0,y=x){return this._x===x&&this._y===y||(this._x=x,this._y=y,this._observer._onUpdate(this)),this}copyFrom(p){return this._x===p.x&&this._y===p.y||(this._x=p.x,this._y=p.y,this._observer._onUpdate(this)),this}copyTo(p){return p.set(this._x,this._y),p}equals(p){return p.x===this._x&&p.y===this._y}toString(){return`[pixi.js/math:ObservablePoint x=0 y=0 scope=${this._observer}]`}get x(){return this._x}set x(value){this._x!==value&&(this._x=value,this._observer._onUpdate(this))}get y(){return this._y}set y(value){this._y!==value&&(this._y=value,this._observer._onUpdate(this))}}const uidCache={default:-1};function uid$1(name="default"){return void 0===uidCache[name]&&(uidCache[name]=-1),++uidCache[name]}const warnings={},v8_0_0="8.0.0";function deprecation(version,message,ignoreDepth=3){if(!warnings[message]){let stack=(new Error).stack;void 0===stack?console.warn("PixiJS Deprecation Warning: ",message+`
+Deprecated since v`+version):(stack=stack.split("\n").splice(ignoreDepth).join("\n"),console.groupCollapsed?(console.groupCollapsed("%cPixiJS Deprecation Warning: %c%s","color:#614108;background:#fffbe6","font-weight:normal;color:#614108;background:#fffbe6",message+`
+Deprecated since v`+version),console.warn(stack),console.groupEnd()):(console.warn("PixiJS Deprecation Warning: ",message+`
+Deprecated since v`+version),console.warn(stack))),warnings[message]=!0}}class Pool{constructor(ClassType,initialSize){this._pool=[],this._count=0,this._index=0,this._classType=ClassType,initialSize&&this.prepopulate(initialSize)}prepopulate(total){for(let i=0;i{var name=stats[pool._classType.name]?pool._classType.name+pool._classType.ID:pool._classType.name;stats[name]={free:pool.totalFree,used:pool.totalUsed,size:pool.totalSize}}),stats}}const BigPool=new PoolGroupClass;var cacheAsTextureMixin={get isCachedAsTexture(){var _a;return!(null==(_a=this.renderGroup)||!_a.isCachedAsTexture)},cacheAsTexture(val){"boolean"==typeof val&&!1===val?this.disableRenderGroup():(this.enableRenderGroup(),this.renderGroup.enableCacheAsTexture(!0===val?{}:val))},updateCacheTexture(){var _a;null!=(_a=this.renderGroup)&&_a.updateCacheTexture()},get cacheAsBitmap(){return this.isCachedAsTexture},set cacheAsBitmap(val){deprecation("v8.6.0","cacheAsBitmap is deprecated, use cacheAsTexture instead."),this.cacheAsTexture(val)}};function removeItems(arr,startIdx,removeCount){var length=arr.length;let i;if(!(length<=startIdx||0===removeCount)){var len=length-(removeCount=length=beginIndex;i--){var child=this.children[i];child&&(removed.push(child),child.parent=null)}removeItems(this.children,beginIndex,endIndex),(endIndex=this.renderGroup||this.parentRenderGroup)&&endIndex.removeChildren(removed);for(let i=0;i=this.children.length)throw new Error(`getChildAt: Index (${index}) does not exist.`);return this.children[index]},setChildIndex(child,index){if(index<0||index>=this.children.length)throw new Error(`The index ${index} supplied is out of bounds `+this.children.length);this.getChildIndex(child),this.addChildAt(child,index)},getChildIndex(child){if(-1===(child=this.children.indexOf(child)))throw new Error("The supplied Container must be a child of the caller");return child},addChildAt(child,index){this.allowChildren||deprecation(v8_0_0,"addChildAt: Only Containers will be allowed to add children in v8.0.0");var children=this.children;if(index<0||index>children.length)throw new Error(child+`addChildAt: The index ${index} supplied is out of bounds `+children.length);if(child.parent){var currentIndex=child.parent.children.indexOf(child);if(child.parent===this&¤tIndex===index)return child;-1!==currentIndex&&child.parent.children.splice(currentIndex,1)}return index===children.length?children.push(child):children.splice(index,0,child),child.parent=this,child.didChange=!0,child._updateFlags=15,(currentIndex=this.renderGroup||this.parentRenderGroup)&¤tIndex.addChild(child),this.sortableChildren&&(this.sortDirty=!0),this.emit("childAdded",child,this,index),child.emit("added",this),child},swapChildren(child,child2){var index2,index1;child!==child2&&(index1=this.getChildIndex(child),index2=this.getChildIndex(child2),this.children[index1]=child2,this.children[index2]=child,(index1=this.renderGroup||this.parentRenderGroup)&&(index1.structureDidChange=!0),this._didContainerChangeTick++)},removeFromParent(){var _a;null!=(_a=this.parent)&&_a.removeChild(this)},reparentChild(...child){return 1===child.length?this.reparentChildAt(child[0],this.children.length):(child.forEach(c=>this.reparentChildAt(c,this.children.length)),child[0])},reparentChildAt(child,index){var childMat;return child.parent===this?this.setChildIndex(child,index):(childMat=child.worldTransform.clone(),child.removeFromParent(),this.addChildAt(child,index),(index=this.worldTransform.clone()).invert(),childMat.prepend(index),child.setFromMatrix(childMat)),child}},collectRenderablesMixin={collectRenderables(instructionSet,renderer,currentLayer){this.parentRenderLayer&&this.parentRenderLayer!==currentLayer||this.globalDisplayStatus<7||!this.includeInBuild||(this.sortableChildren&&this.sortChildren(),this.isSimple?this.collectRenderablesSimple(instructionSet,renderer,currentLayer):this.renderGroup?renderer.renderPipes.renderGroup.addRenderGroup(this.renderGroup,instructionSet):this.collectRenderablesWithEffects(instructionSet,renderer,currentLayer))},collectRenderablesSimple(instructionSet,renderer,currentLayer){var children=this.children,length=children.length;for(let i=0;i{this.add({test:test.test,maskClass:test})}))}add(test){this._tests.push(test)}getMaskEffect(item){this._initialized||this.init();for(let i=0;ikey in obj?__defProp$1b(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$1b=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$1b.call(b,prop)&&__defNormalProp$1b(a,prop,b[prop]);if(__getOwnPropSymbols$1b)for(var prop of __getOwnPropSymbols$1b(b))__propIsEnum$1b.call(b,prop)&&__defNormalProp$1b(a,prop,b[prop]);return a},effectsMixin={_maskEffect:null,_maskOptions:{inverse:!1},_filterEffect:null,effects:[],_markStructureAsChanged(){var renderGroup=this.renderGroup||this.parentRenderGroup;renderGroup&&(renderGroup.structureDidChange=!0)},addEffect(effect){-1===this.effects.indexOf(effect)&&(this.effects.push(effect),this.effects.sort((a,b)=>a.priority-b.priority),this._markStructureAsChanged(),this._updateIsSimple())},removeEffect(effect){-1!==(effect=this.effects.indexOf(effect))&&(this.effects.splice(effect,1),this._markStructureAsChanged(),this._updateIsSimple())},set mask(value){var effect=this._maskEffect;(null==effect?void 0:effect.mask)!==value&&(effect&&(this.removeEffect(effect),MaskEffectManager.returnMaskEffect(effect),this._maskEffect=null),null!=value)&&(this._maskEffect=MaskEffectManager.getMaskEffect(value),this.addEffect(this._maskEffect))},setMask(options){this._maskOptions=__spreadValues$1b(__spreadValues$1b({},this._maskOptions),options),options.mask&&(this.mask=options.mask),this._markStructureAsChanged()},get mask(){var _a;return null==(_a=this._maskEffect)?void 0:_a.mask},set filters(value){Array.isArray(value)||(value=value&&[value]);var effect=this._filterEffect||(this._filterEffect=new FilterEffect),hasFilters=0<(null==value?void 0:value.length),_a=hasFilters!=0<(null==(_a=effect.filters)?void 0:_a.length);value=Array.isArray(value)?value.slice(0):value,effect.filters=Object.freeze(value),_a&&(hasFilters?this.addEffect(effect):(this.removeEffect(effect),effect.filters=null!=value?value:null))},get filters(){var _a;return null==(_a=this._filterEffect)?void 0:_a.filters},set filterArea(value){this._filterEffect||(this._filterEffect=new FilterEffect),this._filterEffect.filterArea=value},get filterArea(){var _a;return null==(_a=this._filterEffect)?void 0:_a.filterArea}},findMixin={label:null,get name(){return deprecation(v8_0_0,"Container.name property has been removed, use Container.label instead"),this.label},set name(value){deprecation(v8_0_0,"Container.name property has been removed, use Container.label instead"),this.label=value},getChildByName(name,deep=!1){return this.getChildByLabel(name,deep)},getChildByLabel(label,deep=!1){var children=this.children;for(let i=0;i=this.x&&x=this.y&&y=x1||Math.max(lt.y,lb.y,rt.y,rb.y)<=y0||Math.min(lt.y,lb.y,rt.y,rb.y)>=y1||(n00=(transform=s*(lb.y-lt.y))*x0+(lb=s*(lt.x-lb.x))*y0,n10=transform*x1+lb*y0,n01=transform*x0+lb*y1,n11=transform*x1+lb*y1,Math.max(n00,n10,n01,n11)<=transform*lt.x+lb*lt.y)||Math.min(n00,n10,n01,n11)>=transform*rb.x+lb*rb.y||(n01=(n00=s*(lt.y-rt.y))*x0+(n10=s*(rt.x-lt.x))*y0,n11=n00*x1+n10*y0,transform=n00*x0+n10*y1,lb=n00*x1+n10*y1,Math.max(n01,n11,transform,lb)<=n00*lt.x+n10*lt.y)||Math.min(n01,n11,transform,lb)>=n00*rb.x+n10*rb.y)):(s=(this.xother.right?other:this).right<=s)&&(this.yother.bottom?other:this).bottom)}pad(paddingX=0,paddingY=paddingX){return this.x-=paddingX,this.y-=paddingY,this.width+=2*paddingX,this.height+=2*paddingY,this}fit(rectangle){var x1=Math.max(this.x,rectangle.x),x2=Math.min(this.x+this.width,rectangle.x+rectangle.width),y1=Math.max(this.y,rectangle.y),rectangle=Math.min(this.y+this.height,rectangle.y+rectangle.height);return this.x=x1,this.width=Math.max(x2-x1,0),this.y=y1,this.height=Math.max(rectangle-y1,0),this}ceil(resolution=1,eps=.001){var x2=Math.ceil((this.x+this.width-eps)*resolution)/resolution,y2=Math.ceil((this.y+this.height-eps)*resolution)/resolution;return this.x=Math.floor((this.x+eps)*resolution)/resolution,this.y=Math.floor((this.y+eps)*resolution)/resolution,this.width=x2-this.x,this.height=y2-this.y,this}enlarge(rectangle){var x1=Math.min(this.x,rectangle.x),x2=Math.max(this.x+this.width,rectangle.x+rectangle.width),y1=Math.min(this.y,rectangle.y),rectangle=Math.max(this.y+this.height,rectangle.y+rectangle.height);return this.x=x1,this.width=x2-x1,this.y=y1,this.height=rectangle-y1,this}getBounds(out){return(out=out||new Rectangle).copyFrom(this),out}containsRect(other){var x1,y1,x2;return!(this.width<=0||this.height<=0)&&(x1=other.x,y1=other.y,x2=other.x+other.width,other=other.y+other.height,x1>=this.x)&&x1=this.y&&y1=this.x&&x2=this.y&&otherthis.maxX||this.minY>this.maxY}get rectangle(){this._rectangle||(this._rectangle=new Rectangle);var rectangle=this._rectangle;return this.minX>this.maxX||this.minY>this.maxY?(rectangle.x=0,rectangle.y=0,rectangle.width=0,rectangle.height=0):rectangle.copyFromBounds(this),rectangle}clear(){return this.minX=1/0,this.minY=1/0,this.maxX=-1/0,this.maxY=-1/0,this.matrix=defaultMatrix,this}set(x0,y0,x1,y1){this.minX=x0,this.minY=y0,this.maxX=x1,this.maxY=y1}addFrame(x0,y0,x1,y1,matrix){var a=(matrix=matrix||this.matrix).a,b=matrix.b,c=matrix.c,d=matrix.d,tx=matrix.tx,matrix=matrix.ty;let minX=this.minX,minY=this.minY,maxX=this.maxX,maxY=this.maxY;var x=a*x0+c*y0+tx,y=b*x0+d*y0+matrix;xmaxX&&(maxX=x),y>maxY&&(maxY=y),y=b*x1+d*y0+matrix,(x=a*x1+c*y0+tx)maxX&&(maxX=x),y>maxY&&(maxY=y),y=b*x0+d*y1+matrix,(x=a*x0+c*y1+tx)maxX&&(maxX=x),y>maxY&&(maxY=y),y=b*x1+d*y1+matrix,(x=a*x1+c*y1+tx)maxX&&(maxX=x),y>maxY&&(maxY=y),this.minX=minX,this.minY=minY,this.maxX=maxX,this.maxY=maxY}addRect(rect,matrix){this.addFrame(rect.x,rect.y,rect.x+rect.width,rect.y+rect.height,matrix)}addBounds(bounds,matrix){this.addFrame(bounds.minX,bounds.minY,bounds.maxX,bounds.maxY,matrix)}addBoundsMask(mask){this.minX=(this.minX>mask.minX?this:mask).minX,this.minY=(this.minY>mask.minY?this:mask).minY,this.maxX=(this.maxXthis.maxX?x:this.maxX,this.maxY=y>this.maxY?y:this.maxY,y=b*minX+d*maxY+ty,this.minX=(x=matrix*minX+c*maxY+tx)this.maxX?x:this.maxX,this.maxY=y>this.maxY?y:this.maxY,y=b*maxX+d*maxY+ty,this.minX=(x=matrix*maxX+c*maxY+tx)this.maxX?x:this.maxX,this.maxY=y>this.maxY?y:this.maxY}fit(rect){return this.minXrect.right&&(this.maxX=rect.right),this.minYrect.bottom&&(this.maxY=rect.bottom),this}fitBounds(left,right,top,bottom){return this.minXright&&(this.maxX=right),this.minYbottom&&(this.maxY=bottom),this}pad(paddingX,paddingY=paddingX){return this.minX-=paddingX,this.maxX+=paddingX,this.minY-=paddingY,this.maxY+=paddingY,this}ceil(){return this.minX=Math.floor(this.minX),this.minY=Math.floor(this.minY),this.maxX=Math.ceil(this.maxX),this.maxY=Math.ceil(this.maxY),this}clone(){return new Bounds(this.minX,this.minY,this.maxX,this.maxY)}scale(x,y=x){return this.minX*=x,this.minY*=y,this.maxX*=x,this.maxY*=y,this}get x(){return this.minX}set x(value){var width=this.maxX-this.minX;this.minX=value,this.maxX=value+width}get y(){return this.minY}set y(value){var height=this.maxY-this.minY;this.minY=value,this.maxY=value+height}get width(){return this.maxX-this.minX}set width(value){this.maxX=this.minX+value}get height(){return this.maxY-this.minY}set height(value){this.maxY=this.minY+value}get left(){return this.minX}get right(){return this.maxX}get top(){return this.minY}get bottom(){return this.maxY}get isPositive(){return 0maxX?x:maxX,maxY=localX>maxY?localX:maxY}this.minX=minX,this.minY=minY,this.maxX=maxX,this.maxY=maxY}containsPoint(x,y){return this.minX<=x&&this.minY<=y&&this.maxX>=x&&this.maxY>=y}toString(){return`[pixi.js:Bounds minX=${this.minX} minY=${this.minY} maxX=${this.maxX} maxY=${this.maxY} width=${this.width} height=${this.height}]`}copyFrom(bounds){return this.minX=bounds.minX,this.minY=bounds.minY,this.maxX=bounds.maxX,this.maxY=bounds.maxY,this}}const matrixPool=new Pool(Matrix),boundsPool=new Pool(Bounds),tempMatrix$5=new Matrix;var getFastGlobalBoundsMixin={getFastGlobalBounds(factorRenderLayers,bounds){return(bounds=bounds||new Bounds).clear(),this._getGlobalBoundsRecursive(!!factorRenderLayers,bounds,this.parentRenderLayer),bounds.isValid||bounds.set(0,0,0,0),factorRenderLayers=this.renderGroup||this.parentRenderGroup,bounds.applyMatrix(factorRenderLayers.worldTransform),bounds},_getGlobalBoundsRecursive(factorRenderLayers,bounds,currentLayer){let localBounds=bounds;if((!factorRenderLayers||!this.parentRenderLayer||this.parentRenderLayer===currentLayer)&&7===this.localDisplayStatus&&this.measurable){var manageEffects=!!this.effects.length;if((this.renderGroup||manageEffects)&&(localBounds=boundsPool.get().clear()),this.boundsArea)bounds.addRect(this.boundsArea,this.worldTransform);else{this.renderPipeId&&(viewBounds=this.bounds,localBounds.addFrame(viewBounds.minX,viewBounds.minY,viewBounds.maxX,viewBounds.maxY,this.groupTransform));var viewBounds,children=this.children;for(let i=0;i>16&255)*(color2>>16&255)/255|0)<<16)+(((color1>>8&255)*(color2>>8&255)/255|0)<<8)+((255&color1)*(255&color2)/255|0):color1:color2}const WHITE_BGR=16777215;function multiplyColors(localBGRColor,parentBGRColor){return localBGRColor===WHITE_BGR?parentBGRColor:parentBGRColor===WHITE_BGR?localBGRColor:multiplyHexColors(localBGRColor,parentBGRColor)}function bgr2rgb(color){return((255&color)<<16)+(65280&color)+(color>>16&255)}var getGlobalMixin={getGlobalAlpha(skipUpdate){if(skipUpdate)return this.renderGroup?this.renderGroup.worldAlpha:this.parentRenderGroup?this.parentRenderGroup.worldAlpha*this.alpha:this.alpha;let alpha=this.alpha,current=this.parent;for(;current;)alpha*=current.alpha,current=current.parent;return alpha},getGlobalTransform(matrix,skipUpdate){return skipUpdate?matrix.copyFrom(this.worldTransform):(this.updateLocalTransform(),skipUpdate=updateTransformBackwards(this,matrixPool.get().identity()),matrix.appendFrom(this.localTransform,skipUpdate),matrixPool.return(skipUpdate),matrix)},getGlobalTint(skipUpdate){if(skipUpdate)return this.renderGroup?bgr2rgb(this.renderGroup.worldColor):this.parentRenderGroup?bgr2rgb(multiplyColors(this.localColor,this.parentRenderGroup.worldColor)):this.tint;let color=this.localColor,parent=this.parent;for(;parent;)color=multiplyColors(color,parent.localColor),parent=parent.parent;return bgr2rgb(color)}};let warnCount=0;const maxWarnings=500;function warn(...args){warnCount!==maxWarnings&&(++warnCount===maxWarnings?console.warn("PixiJS Warning: too many warnings, no more warnings will be reported to the console by PixiJS."):console.warn("PixiJS Warning: ",...args))}function getLocalBounds(target,bounds,relativeMatrix){return bounds.clear(),function _getLocalBounds(target,bounds,parentTransform,rootContainer,isRoot){var _a,_b;let relativeTransform;if(isRoot)relativeTransform=matrixPool.get(),relativeTransform=parentTransform.copyTo(relativeTransform);else{if(!target.visible||!target.measurable)return;target.updateLocalTransform(),isRoot=target.localTransform,(relativeTransform=matrixPool.get()).appendFrom(isRoot,parentTransform)}if(isRoot=bounds,(parentTransform=!!target.effects.length)&&(bounds=boundsPool.get().clear()),target.boundsArea)bounds.addRect(target.boundsArea,relativeTransform);else{target.renderPipeId&&(bounds.matrix=relativeTransform,bounds.addBounds(target.bounds));var children=target.children;for(let i=0;i>>1)|v>>>2)|v>>>4)|v>>>8)|v>>>16)}function isPow2(v){return!(v&v-1||!v)}function definedProps(obj){var result={};for(const key in obj)void 0!==obj[key]&&(result[key]=obj[key]);return result}var __defProp$1a=Object.defineProperty,__getOwnPropSymbols$1a=Object.getOwnPropertySymbols,__hasOwnProp$1a=Object.prototype.hasOwnProperty,__propIsEnum$1a=Object.prototype.propertyIsEnumerable,__defNormalProp$1a=(obj,key,value)=>key in obj?__defProp$1a(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$1a=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$1a.call(b,prop)&&__defNormalProp$1a(a,prop,b[prop]);if(__getOwnPropSymbols$1a)for(var prop of __getOwnPropSymbols$1a(b))__propIsEnum$1a.call(b,prop)&&__defNormalProp$1a(a,prop,b[prop]);return a};const idHash$1=Object.create(null),_TextureStyle=class _TextureStyle extends EventEmitter{constructor(options={}){var _a;super(),this._resourceType="textureSampler",this._touched=0,this._maxAnisotropy=1,this.destroyed=!1,options=__spreadValues$1a(__spreadValues$1a({},_TextureStyle.defaultOptions),options),this.addressMode=options.addressMode,this.addressModeU=null!=(_a=options.addressModeU)?_a:this.addressModeU,this.addressModeV=null!=(_a=options.addressModeV)?_a:this.addressModeV,this.addressModeW=null!=(_a=options.addressModeW)?_a:this.addressModeW,this.scaleMode=options.scaleMode,this.magFilter=null!=(_a=options.magFilter)?_a:this.magFilter,this.minFilter=null!=(_a=options.minFilter)?_a:this.minFilter,this.mipmapFilter=null!=(_a=options.mipmapFilter)?_a:this.mipmapFilter,this.lodMinClamp=options.lodMinClamp,this.lodMaxClamp=options.lodMaxClamp,this.compare=options.compare,this.maxAnisotropy=null!=(_a=options.maxAnisotropy)?_a:1}set addressMode(value){this.addressModeU=value,this.addressModeV=value,this.addressModeW=value}get addressMode(){return this.addressModeU}set wrapMode(value){deprecation(v8_0_0,"TextureStyle.wrapMode is now TextureStyle.addressMode"),this.addressMode=value}get wrapMode(){return this.addressMode}set scaleMode(value){this.magFilter=value,this.minFilter=value,this.mipmapFilter=value}get scaleMode(){return this.magFilter}set maxAnisotropy(value){this._maxAnisotropy=Math.min(value,16),1key in obj?__defProp$19(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$19=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$19.call(b,prop)&&__defNormalProp$19(a,prop,b[prop]);if(__getOwnPropSymbols$19)for(var prop of __getOwnPropSymbols$19(b))__propIsEnum$19.call(b,prop)&&__defNormalProp$19(a,prop,b[prop]);return a};const _TextureSource=class _TextureSource extends EventEmitter{constructor(options={}){var _a;super(),this.options=options,this.uid=uid$1("textureSource"),this._resourceType="textureSource",this._resourceId=uid$1("resource"),this.uploadMethodId="unknown",this._resolution=1,this.pixelWidth=1,this.pixelHeight=1,this.width=1,this.height=1,this.sampleCount=1,this.mipLevelCount=1,this.autoGenerateMipmaps=!1,this.format="rgba8unorm",this.dimension="2d",this.antialias=!1,this._touched=0,this._batchTick=-1,this._textureBindLocation=-1,options=__spreadValues$19(__spreadValues$19({},_TextureSource.defaultOptions),options),this.label=null!=(_a=options.label)?_a:"",this.resource=options.resource,this.autoGarbageCollect=options.autoGarbageCollect,this._resolution=options.resolution,options.width?this.pixelWidth=options.width*this._resolution:this.pixelWidth=this.resource&&null!=(_a=this.resourceWidth)?_a:1,options.height?this.pixelHeight=options.height*this._resolution:this.pixelHeight=this.resource&&null!=(_a=this.resourceHeight)?_a:1,this.width=this.pixelWidth/this._resolution,this.height=this.pixelHeight/this._resolution,this.format=options.format,this.dimension=options.dimensions,this.mipLevelCount=options.mipLevelCount,this.autoGenerateMipmaps=options.autoGenerateMipmaps,this.sampleCount=options.sampleCount,this.antialias=options.antialias,this.alphaMode=options.alphaMode,this.style=new TextureStyle(definedProps(options)),this.destroyed=!1,this._refreshPOT()}get source(){return this}get style(){return this._style}set style(value){var _a;this.style!==value&&(null!=(_a=this._style)&&_a.off("change",this._onStyleChange,this),this._style=value,null!=(_a=this._style)&&_a.on("change",this._onStyleChange,this),this._onStyleChange())}get addressMode(){return this._style.addressMode}set addressMode(value){this._style.addressMode=value}get repeatMode(){return this._style.addressMode}set repeatMode(value){this._style.addressMode=value}get magFilter(){return this._style.magFilter}set magFilter(value){this._style.magFilter=value}get minFilter(){return this._style.minFilter}set minFilter(value){this._style.minFilter=value}get mipmapFilter(){return this._style.mipmapFilter}set mipmapFilter(value){this._style.mipmapFilter=value}get lodMinClamp(){return this._style.lodMinClamp}set lodMinClamp(value){this._style.lodMinClamp=value}get lodMaxClamp(){return this._style.lodMaxClamp}set lodMaxClamp(value){this._style.lodMaxClamp=value}_onStyleChange(){this.emit("styleChange",this)}update(){if(this.resource){var resolution=this._resolution;if(this.resize(this.resourceWidth/resolution,this.resourceHeight/resolution))return}this.emit("update",this)}destroy(){this.destroyed=!0,this.emit("destroy",this),this.emit("change",this),this._style&&(this._style.destroy(),this._style=null),this.uploadMethodId=null,this.resource=null,this.removeAllListeners()}unload(){this._resourceId=uid$1("resource"),this.emit("change",this),this.emit("unload",this)}get resourceWidth(){var resource=this.resource;return resource.naturalWidth||resource.videoWidth||resource.displayWidth||resource.width}get resourceHeight(){var resource=this.resource;return resource.naturalHeight||resource.videoHeight||resource.displayHeight||resource.height}get resolution(){return this._resolution}set resolution(resolution){this._resolution!==resolution&&(this._resolution=resolution,this.width=this.pixelWidth/resolution,this.height=this.pixelHeight/resolution)}resize(width,height,resolution){return resolution=resolution||this._resolution,width=width||this.width,height=height||this.height,width=Math.round(width*resolution),height=Math.round(height*resolution),this.width=width/resolution,this.height=height/resolution,this._resolution=resolution,(this.pixelWidth!==width||this.pixelHeight!==height)&&(this._refreshPOT(),this.pixelWidth=width,this.pixelHeight=height,this.emit("resize",this),this._resourceId=uid$1("resource"),this.emit("change",this),!0)}updateMipmaps(){this.autoGenerateMipmaps&&1ux[ind],uY:ind=>uy[ind],vX:ind=>vx[ind],vY:ind=>vy[ind],inv:rotation=>8&rotation?15&rotation:7&-rotation,add:(rotationSecond,rotationFirst)=>rotationCayley[rotationSecond][rotationFirst],sub:(rotationSecond,rotationFirst)=>rotationCayley[rotationSecond][groupD8.inv(rotationFirst)],rotate180:rotation=>4^rotation,isVertical:rotation=>2==(3&rotation),byDirection:(dx,dy)=>2*Math.abs(dx)<=Math.abs(dy)?0<=dy?groupD8.S:groupD8.N:2*Math.abs(dy)<=Math.abs(dx)?0{(rotation=rotationMatrices[groupD8.inv(rotation)]).tx=tx,rotation.ty=ty,matrix.append(rotation)}};var NOOP=()=>{},__defProp$18=Object.defineProperty,__defProps$q=Object.defineProperties,__getOwnPropDescs$q=Object.getOwnPropertyDescriptors,__getOwnPropSymbols$18=Object.getOwnPropertySymbols,__hasOwnProp$18=Object.prototype.hasOwnProperty,__propIsEnum$18=Object.prototype.propertyIsEnumerable,__defNormalProp$18=(obj,key,value)=>key in obj?__defProp$18(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;class BufferImageSource extends TextureSource{constructor(options){var buffer=options.resource||new Float32Array(options.width*options.height*4),format=options.format||(buffer instanceof Float32Array?"rgba32float":buffer instanceof Int32Array||buffer instanceof Uint32Array?"rgba32uint":buffer instanceof Int16Array||buffer instanceof Uint16Array?"rgba16uint":(0 instanceof Int8Array,"bgra8unorm"));super((options=((a,b)=>{for(var prop in b=options||{})__hasOwnProp$18.call(b,prop)&&__defNormalProp$18(a,prop,b[prop]);if(__getOwnPropSymbols$18)for(var prop of __getOwnPropSymbols$18(b))__propIsEnum$18.call(b,prop)&&__defNormalProp$18(a,prop,b[prop]);return a})({}),__defProps$q(options,__getOwnPropDescs$q({resource:buffer,format:format})))),this.uploadMethodId="buffer"}static test(resource){return resource instanceof Int8Array||resource instanceof Uint8Array||resource instanceof Uint8ClampedArray||resource instanceof Int16Array||resource instanceof Uint16Array||resource instanceof Int32Array||resource instanceof Uint32Array||resource instanceof Float32Array}}BufferImageSource.extension=ExtensionType2.TextureSource;const tempMat=new Matrix;class TextureMatrix{constructor(texture,clampMargin){this.mapCoord=new Matrix,this.uClampFrame=new Float32Array(4),this.uClampOffset=new Float32Array(2),this._textureID=-1,this._updateID=0,this.clampOffset=0,this.clampMargin=void 0===clampMargin?texture.width<10?0:.5:clampMargin,this.isSimple=!1,this.texture=texture}get texture(){return this._texture}set texture(value){var _a;this.texture!==value&&(null!=(_a=this._texture)&&_a.removeListener("update",this.update,this),this._texture=value,this._texture.addListener("update",this.update,this),this.update())}multiplyUvs(uvs,out){void 0===out&&(out=uvs);var mat=this.mapCoord;for(let i=0;ikey in obj?__defProp$17(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;let count=0;class TexturePoolClass{constructor(textureOptions){this._poolKeyHash=Object.create(null),this._texturePool={},this.textureOptions=textureOptions||{},this.enableFullScreen=!1}createTexture(pixelWidth,pixelHeight,antialias){var a=new TextureSource((a=((a,b)=>{for(var prop in b=b||{})__hasOwnProp$17.call(b,prop)&&__defNormalProp$17(a,prop,b[prop]);if(__getOwnPropSymbols$17)for(var prop of __getOwnPropSymbols$17(b))__propIsEnum$17.call(b,prop)&&__defNormalProp$17(a,prop,b[prop]);return a})({},this.textureOptions),__defProps$p(a,__getOwnPropDescs$p({width:pixelWidth,height:pixelHeight,resolution:1,antialias:antialias,autoGarbageCollect:!1}))));return new Texture({source:a,label:"texturePool_"+count++})}getOptimalTexture(frameWidth,frameHeight,resolution=1,antialias){var po2Width=Math.ceil(frameWidth*resolution-1e-6),po2Height=Math.ceil(frameHeight*resolution-1e-6),key=((po2Width=nextPow2(po2Width))<<17)+((po2Height=nextPow2(po2Height))<<1)+(antialias?1:0);this._texturePool[key]||(this._texturePool[key]=[]);let texture=this._texturePool[key].pop();return(texture=texture||this.createTexture(po2Width,po2Height,antialias)).source._resolution=resolution,texture.source.width=po2Width/resolution,texture.source.height=po2Height/resolution,texture.source.pixelWidth=po2Width,texture.source.pixelHeight=po2Height,texture.frame.x=0,texture.frame.y=0,texture.frame.width=frameWidth,texture.frame.height=frameHeight,texture.updateUvs(),this._poolKeyHash[texture.uid]=key,texture}getSameSizeTexture(texture,antialias=!1){var source=texture.source;return this.getOptimalTexture(texture.width,texture.height,source._resolution,antialias)}returnTexture(renderTexture){var key=this._poolKeyHash[renderTexture.uid];this._texturePool[key].push(renderTexture)}clear(destroyTextures){if(destroyTextures=!1!==destroyTextures)for(const i in this._texturePool){var textures=this._texturePool[i];if(textures)for(let j=0;jthis.addChild(child)),null!=(_a=options.parent)&&_a.addChild(this)}static mixin(source){deprecation("8.8.0","Container.mixin is deprecated, please use extensions.mixin instead."),extensions.mixin(Container,source)}set _didChangeId(value){this._didViewChangeTick=value>>12&4095,this._didContainerChangeTick=4095&value}get _didChangeId(){return 4095&this._didContainerChangeTick|(4095&this._didViewChangeTick)<<12}addChild(...children){if(this.allowChildren||deprecation(v8_0_0,"addChild: Only Containers will be allowed to add children in v8.0.0"),1key in obj?__defProp$16(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$16=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$16.call(b,prop)&&__defNormalProp$16(a,prop,b[prop]);if(__getOwnPropSymbols$16)for(var prop of __getOwnPropSymbols$16(b))__propIsEnum$16.call(b,prop)&&__defNormalProp$16(a,prop,b[prop]);return a};const _AccessibilitySystem=class _AccessibilitySystem{constructor(renderer,_mobileInfo=isMobile){this._mobileInfo=_mobileInfo,this.debug=!1,this._activateOnTab=!0,this._deactivateOnMouseMove=!0,this._isActive=!1,this._isMobileAccessibility=!1,this._div=null,this._pool=[],this._renderId=0,this._children=[],this._androidUpdateCount=0,this._androidUpdateFrequency=500,this._hookDiv=null,(_mobileInfo.tablet||_mobileInfo.phone)&&this._createTouchHook(),this._renderer=renderer}get isActive(){return this._isActive}get isMobileAccessibility(){return this._isMobileAccessibility}get hookDiv(){return this._hookDiv}_createTouchHook(){var hookDiv=document.createElement("button");hookDiv.style.width="1px",hookDiv.style.height="1px",hookDiv.style.position="absolute",hookDiv.style.top="-1000px",hookDiv.style.left="-1000px",hookDiv.style.zIndex=2..toString(),hookDiv.style.backgroundColor="#FF0000",hookDiv.title="select to enable accessibility for this content",hookDiv.addEventListener("focus",()=>{this._isMobileAccessibility=!0,this._activate(),this._destroyTouchHook()}),document.body.appendChild(hookDiv),this._hookDiv=hookDiv}_destroyTouchHook(){this._hookDiv&&(document.body.removeChild(this._hookDiv),this._hookDiv=null)}_activate(){if(!this._isActive){this._isActive=!0,this._div||(this._div=document.createElement("div"),this._div.style.width="100px",this._div.style.height="100px",this._div.style.position="absolute",this._div.style.top="0px",this._div.style.left="0px",this._div.style.zIndex=2..toString(),this._div.style.pointerEvents="none"),this._activateOnTab&&(this._onKeyDown=this._onKeyDown.bind(this),globalThis.addEventListener("keydown",this._onKeyDown,!1)),this._deactivateOnMouseMove&&(this._onMouseMove=this._onMouseMove.bind(this),globalThis.document.addEventListener("mousemove",this._onMouseMove,!0));const canvas=this._renderer.view.canvas;if(canvas.parentNode)canvas.parentNode.appendChild(this._div),this._initAccessibilitySetup();else{const observer=new MutationObserver(()=>{canvas.parentNode&&(canvas.parentNode.appendChild(this._div),observer.disconnect(),this._initAccessibilitySetup())});observer.observe(document.body,{childList:!0,subtree:!0})}}}_initAccessibilitySetup(){this._renderer.runners.postrender.add(this),this._renderer.lastObjectRendered&&this._updateAccessibleObjects(this._renderer.lastObjectRendered)}_deactivate(){if(this._isActive&&!this._isMobileAccessibility){this._isActive=!1,globalThis.document.removeEventListener("mousemove",this._onMouseMove,!0),this._activateOnTab&&globalThis.addEventListener("keydown",this._onKeyDown,!1),this._renderer.runners.postrender.remove(this);for(const child of this._children)child._accessibleDiv&&child._accessibleDiv.parentNode&&(child._accessibleDiv.parentNode.removeChild(child._accessibleDiv),child._accessibleDiv=null),child._accessibleActive=!1;this._pool.forEach(div=>{div.parentNode&&div.parentNode.removeChild(div)}),this._div&&this._div.parentNode&&this._div.parentNode.removeChild(this._div),this._pool=[],this._children=[]}}_updateAccessibleObjects(container){if(container.visible&&container.accessibleChildren){container.accessible&&(container._accessibleActive||this._addChild(container),container._renderId=this._renderId);var children=container.children;if(children)for(let i=0;i title : ${div.title} tabIndex: `+div.tabIndex}_capHitArea(hitArea){hitArea.x<0&&(hitArea.width+=hitArea.x,hitArea.x=0),hitArea.y<0&&(hitArea.height+=hitArea.y,hitArea.y=0);var{width:viewWidth,height:viewHeight}=this._renderer;hitArea.x+hitArea.width>viewWidth&&(hitArea.width=viewWidth-hitArea.x),hitArea.y+hitArea.height>viewHeight&&(hitArea.height=viewHeight-hitArea.y)}_addChild(container){let div=this._pool.pop();div||("button"===container.accessibleType?div=document.createElement("button"):((div=document.createElement(container.accessibleType)).style.cssText=`
+ color: transparent;
+ pointer-events: none;
+ padding: 0;
+ margin: 0;
+ border: 0;
+ outline: 0;
+ background: transparent;
+ box-sizing: border-box;
+ user-select: none;
+ -webkit-user-select: none;
+ -moz-user-select: none;
+ -ms-user-select: none;
+ `,container.accessibleText&&(div.innerText=container.accessibleText)),div.style.width="100px",div.style.height="100px",div.style.backgroundColor=this.debug?"rgba(255,255,255,0.5)":"transparent",div.style.position="absolute",div.style.zIndex=2..toString(),div.style.borderStyle="none",navigator.userAgent.toLowerCase().includes("chrome")?div.setAttribute("aria-live","off"):div.setAttribute("aria-live","polite"),navigator.userAgent.match(/rv:.*Gecko\//)?div.setAttribute("aria-relevant","additions"):div.setAttribute("aria-relevant","text"),div.addEventListener("click",this._onClick.bind(this)),div.addEventListener("focus",this._onFocus.bind(this)),div.addEventListener("focusout",this._onFocusOut.bind(this))),div.style.pointerEvents=container.accessiblePointerEvents,div.type=container.accessibleType,container.accessibleTitle&&null!==container.accessibleTitle?div.title=container.accessibleTitle:container.accessibleHint&&null!==container.accessibleHint||(div.title="container "+container.tabIndex),container.accessibleHint&&null!==container.accessibleHint&&div.setAttribute("aria-label",container.accessibleHint),this.debug&&this._updateDebugHTML(div),container._accessibleActive=!0,(container._accessibleDiv=div).container=container,this._children.push(container),this._div.appendChild(container._accessibleDiv),container.interactive&&(container._accessibleDiv.tabIndex=container.tabIndex)}_dispatchEvent(e,type){e=e.target.container;const boundary=this._renderer.events.rootBoundary,event=Object.assign(new FederatedEvent(boundary),{target:e});boundary.rootTarget=this._renderer.lastObjectRendered,type.forEach(type2=>boundary.dispatchEvent(event,type2))}_onClick(e){this._dispatchEvent(e,["click","pointertap","tap"])}_onFocus(e){e.target.getAttribute("aria-live")||e.target.setAttribute("aria-live","assertive"),this._dispatchEvent(e,["mouseover"])}_onFocusOut(e){e.target.getAttribute("aria-live")||e.target.setAttribute("aria-live","polite"),this._dispatchEvent(e,["mouseout"])}_onKeyDown(e){9===e.keyCode&&this._activateOnTab&&this._activate()}_onMouseMove(e){0===e.movementX&&0===e.movementY||this._deactivate()}destroy(){this._deactivate(),this._destroyTouchHook(),this._div=null,this._pool=null,this._children=null,this._renderer=null,this._activateOnTab&&globalThis.removeEventListener("keydown",this._onKeyDown)}setAccessibilityEnabled(enabled){enabled?this._activate():this._deactivate()}};_AccessibilitySystem.extension={type:[ExtensionType2.WebGLSystem,ExtensionType2.WebGPUSystem],name:"accessibility"},_AccessibilitySystem.defaultOptions={enabledByDefault:!1,debug:!1,activateOnTab:!0,deactivateOnMouseMove:!0};var _a=_AccessibilitySystem,accessibilityTarget={accessible:!1,accessibleTitle:null,accessibleHint:null,tabIndex:0,_accessibleActive:!1,_accessibleDiv:null,accessibleType:"button",accessibleText:null,accessiblePointerEvents:"auto",accessibleChildren:!0,_renderId:-1};extensions.add(_a),extensions.mixin(Container,accessibilityTarget);class ResizePlugin{static init(options){Object.defineProperty(this,"resizeTo",{set(dom){globalThis.removeEventListener("resize",this.queueResize),(this._resizeTo=dom)&&(globalThis.addEventListener("resize",this.queueResize),this.resize())},get(){return this._resizeTo}}),this.queueResize=()=>{this._resizeTo&&(this._cancelResize(),this._resizeId=requestAnimationFrame(()=>this.resize()))},this._cancelResize=()=>{this._resizeId&&(cancelAnimationFrame(this._resizeId),this._resizeId=null)},this.resize=()=>{if(this._resizeTo){this._cancelResize();let width,height;var clientWidth,clientHeight;height=this._resizeTo===globalThis.window?(width=globalThis.innerWidth,globalThis.innerHeight):({clientWidth,clientHeight}=this._resizeTo,width=clientWidth,clientHeight),this.renderer.resize(width,height),this.render()}},this._resizeId=null,this._resizeTo=null,this.resizeTo=options.resizeTo||null}static destroy(){globalThis.removeEventListener("resize",this.queueResize),this._cancelResize(),this._cancelResize=null,this.queueResize=null,this.resizeTo=null,this.resize=null}}ResizePlugin.extension=ExtensionType2.Application;var UPDATE_PRIORITY={INTERACTION:50,50:"INTERACTION",HIGH:25,25:"HIGH",NORMAL:0,0:"NORMAL",LOW:-25,"-25":"LOW",UTILITY:-50,"-50":"UTILITY"};class TickerListener{constructor(fn,context=null,priority=0,once=!1){this.next=null,this.previous=null,this._destroyed=!1,this._fn=fn,this._context=context,this.priority=priority,this._once=once}match(fn,context=null){return this._fn===fn&&this._context===context}emit(ticker){return this._fn&&(this._context?this._fn.call(this._context,ticker):this._fn(ticker)),ticker=this.next,this._once&&this.destroy(!0),this._destroyed&&(this.next=null),ticker}connect(previous){(this.previous=previous).next&&(previous.next.previous=this),this.next=previous.next,previous.next=this}destroy(hard=!1){this._destroyed=!0,this._fn=null,this._context=null,this.previous&&(this.previous.next=this.next),this.next&&(this.next.previous=this.previous);var redirect=this.next;return this.next=hard?null:redirect,this.previous=null,redirect}}const _Ticker=class _Ticker{constructor(){this.autoStart=!1,this.deltaTime=1,this.lastTime=-1,this.speed=1,this.started=!1,this._requestId=null,this._maxElapsedMS=100,this._minElapsedMS=0,this._protected=!1,this._lastFrame=-1,this._head=new TickerListener(null,null,1/0),this.deltaMS=1/_Ticker.targetFPMS,this.elapsedMS=1/_Ticker.targetFPMS,this._tick=time=>{this._requestId=null,this.started&&(this.update(time),this.started)&&null===this._requestId&&this._head.next&&(this._requestId=requestAnimationFrame(this._tick))}}_requestIfNeeded(){null===this._requestId&&this._head.next&&(this.lastTime=performance.now(),this._lastFrame=this.lastTime,this._requestId=requestAnimationFrame(this._tick))}_cancelIfNeeded(){null!==this._requestId&&(cancelAnimationFrame(this._requestId),this._requestId=null)}_startIfPossible(){this.started?this._requestIfNeeded():this.autoStart&&this.start()}add(fn,context,priority=UPDATE_PRIORITY.NORMAL){return this._addListener(new TickerListener(fn,context,priority))}addOnce(fn,context,priority=UPDATE_PRIORITY.NORMAL){return this._addListener(new TickerListener(fn,context,priority,!0))}_addListener(listener){let current=this._head.next,previous=this._head;if(current){for(;current;){if(listener.priority>current.priority){listener.connect(previous);break}current=(previous=current).next}listener.previous||listener.connect(previous)}else listener.connect(previous);return this._startIfPossible(),this}remove(fn,context){let listener=this._head.next;for(;listener;)listener=listener.match(fn,context)?listener.destroy():listener.next;return this._head.next||this._cancelIfNeeded(),this}get count(){if(!this._head)return 0;let count=0,current=this._head;for(;current=current.next;)count++;return count}start(){this.started||(this.started=!0,this._requestIfNeeded())}stop(){this.started&&(this.started=!1,this._cancelIfNeeded())}destroy(){if(!this._protected){this.stop();let listener=this._head.next;for(;listener;)listener=listener.destroy(!0);this._head.destroy(),this._head=null}}update(currentTime=performance.now()){let elapsedMS;if(currentTime>this.lastTime){if((elapsedMS=this.elapsedMS=currentTime-this.lastTime)>this._maxElapsedMS&&(elapsedMS=this._maxElapsedMS),elapsedMS*=this.speed,this._minElapsedMS){var delta=currentTime-this._lastFrame|0;if(delta{this._ticker.stop()},this.start=()=>{this._ticker.start()},this._ticker=null,this.ticker=options.sharedTicker?Ticker.shared:new Ticker,options.autoStart&&this.start()}static destroy(){var oldTicker;this._ticker&&(oldTicker=this._ticker,this.ticker=null,oldTicker.destroy())}}TickerPlugin.extension=ExtensionType2.Application,extensions.add(ResizePlugin),extensions.add(TickerPlugin);const EventsTicker=new class{constructor(){this.interactionFrequency=10,this._deltaTime=0,this._didMove=!1,this._tickerAdded=!1,this._pauseUpdate=!0}init(events){this.removeTickerListener(),this.events=events,this.interactionFrequency=10,this._deltaTime=0,this._didMove=!1,this._tickerAdded=!1,this._pauseUpdate=!0}get pauseUpdate(){return this._pauseUpdate}set pauseUpdate(paused){this._pauseUpdate=paused}addTickerListener(){!this._tickerAdded&&this.domElement&&(Ticker.system.add(this._tickerUpdate,this,UPDATE_PRIORITY.INTERACTION),this._tickerAdded=!0)}removeTickerListener(){this._tickerAdded&&(Ticker.system.remove(this._tickerUpdate,this),this._tickerAdded=!1)}pointerMoved(){this._didMove=!0}_update(){var rootPointerEvent;this.domElement&&!this._pauseUpdate&&(this._didMove?this._didMove=!1:(rootPointerEvent=this.events._rootPointerEvent,this.events.supportsTouchEvents&&"touch"===rootPointerEvent.pointerType||globalThis.document.dispatchEvent(new PointerEvent("pointermove",{clientX:rootPointerEvent.clientX,clientY:rootPointerEvent.clientY,pointerType:rootPointerEvent.pointerType,pointerId:rootPointerEvent.pointerId}))))}_tickerUpdate(ticker){this._deltaTime+=ticker.deltaTime,this._deltaTimea.priority-b.priority)}dispatchEvent(e,type){e.propagationStopped=!1,e.propagationImmediatelyStopped=!1,this.propagate(e,type),this.dispatch.emit(type||e.type,e)}mapEvent(e){if(this.rootTarget){var mappers=this.mappingTable[e.type];if(mappers)for(let i=0,j=mappers.length;i{e.currentTarget=targets[i],this.notifyTarget(e,event)})}}propagationPath(target){var propagationPath=[target];for(let i=0;i<2048&&target!==this.rootTarget&&target.parent;i++){if(!target.parent)throw new Error("Cannot find propagation path to disconnected target");propagationPath.push(target.parent),target=target.parent}return propagationPath.reverse(),propagationPath}hitTestMoveRecursive(currentTarget,eventMode,location,testFn,pruneFn,ignore=!1){let shouldReturn=!1;if(this._interactivePrune(currentTarget))return null;if("dynamic"!==currentTarget.eventMode&&"dynamic"!==eventMode||(EventsTicker.pauseUpdate=!1),currentTarget.interactiveChildren&¤tTarget.children){var children=currentTarget.children;for(let i=children.length-1;0<=i;i--){var isInteractive,child=children[i];!(child=this.hitTestMoveRecursive(child,this._isInteractive(eventMode)?eventMode:child.eventMode,location,testFn,pruneFn,ignore||pruneFn(currentTarget,location)))||0key in obj?__defProp$15(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;const TOUCH_TO_POINTER={touchstart:"pointerdown",touchend:"pointerup",touchendoutside:"pointerupoutside",touchmove:"pointermove",touchcancel:"pointercancel"},_EventSystem=class _EventSystem{constructor(renderer){this.supportsTouchEvents="ontouchstart"in globalThis,this.supportsPointerEvents=!!globalThis.PointerEvent,this.domElement=null,this.resolution=1,this.renderer=renderer,this.rootBoundary=new EventBoundary(null),EventsTicker.init(this),this.autoPreventDefault=!0,this._eventsAdded=!1,this._rootPointerEvent=new FederatedPointerEvent(null),this._rootWheelEvent=new FederatedWheelEvent(null),this.cursorStyles={default:"inherit",pointer:"pointer"},this.features=new Proxy(((a,b)=>{for(var prop in b=_EventSystem.defaultEventFeatures||{})__hasOwnProp$15.call(b,prop)&&__defNormalProp$15(a,prop,b[prop]);if(__getOwnPropSymbols$15)for(var prop of __getOwnPropSymbols$15(b))__propIsEnum$15.call(b,prop)&&__defNormalProp$15(a,prop,b[prop]);return a})({}),{set:(target,key,value)=>("globalMove"===key&&(this.rootBoundary.enableGlobalMoveEvents=value),target[key]=value,!0)}),this._onPointerDown=this._onPointerDown.bind(this),this._onPointerMove=this._onPointerMove.bind(this),this._onPointerUp=this._onPointerUp.bind(this),this._onPointerOverOut=this._onPointerOverOut.bind(this),this.onWheel=this.onWheel.bind(this)}static get defaultEventMode(){return this._defaultEventMode}init(options){var{canvas,resolution}=this.renderer;this.setTargetElement(canvas),this.resolution=resolution,_EventSystem._defaultEventMode=null!=(canvas=options.eventMode)?canvas:"passive",Object.assign(this.features,null!=(resolution=options.eventFeatures)?resolution:{}),this.rootBoundary.enableGlobalMoveEvents=this.features.globalMove}resolutionChange(resolution){this.resolution=resolution}destroy(){this.setTargetElement(null),this.renderer=null,this._currentCursor=null}setCursor(mode){mode=mode||"default";let applyStyles=!0;if(globalThis.OffscreenCanvas&&this.domElement instanceof OffscreenCanvas&&(applyStyles=!1),this._currentCursor!==mode){this._currentCursor=mode;var style=this.cursorStyles[mode];if(style)switch(typeof style){case"string":applyStyles&&(this.domElement.style.cursor=style);break;case"function":style(mode);break;case"object":applyStyles&&Object.assign(this.domElement.style,style)}else applyStyles&&"string"==typeof mode&&!Object.prototype.hasOwnProperty.call(this.cursorStyles,mode)&&(this.domElement.style.cursor=mode)}}get pointer(){return this._rootPointerEvent}_onPointerDown(nativeEvent){if(this.features.click){this.rootBoundary.rootTarget=this.renderer.lastObjectRendered;var events=this._normalizeToPointerData(nativeEvent);!this.autoPreventDefault||!events[0].isNormalized||!nativeEvent.cancelable&&"cancelable"in nativeEvent||nativeEvent.preventDefault();for(let i=0,j=events.length;i{emitter.off(type,listenerFn,context)}),options?emitter.once(type,listenerFn,context):emitter.on(type,listenerFn,context)},removeEventListener(type,listener,options){var options="boolean"==typeof options&&options||"object"==typeof options&&options.capture,context="function"==typeof listener?void 0:listener;listener="function"==typeof listener?listener:listener.handleEvent,this.off(type=options?type+"capture":type,listener,context)},dispatchEvent(e){if(e instanceof FederatedEvent)return e.defaultPrevented=!1,e.path=null,e.target=this,e.manager.dispatchEvent(e),!e.defaultPrevented;throw new Error("Container cannot propagate events outside of the Federated Events API")}};extensions.add(EventSystem),extensions.mixin(Container,UPDATE_PRIORITY2);class DOMPipe{constructor(renderer){this._destroyRenderableBound=this.destroyRenderable.bind(this),this._attachedDomElements=[],this._renderer=renderer,this._renderer.runners.postrender.add(this),this._domElement=document.createElement("div"),this._domElement.style.position="absolute",this._domElement.style.top="0",this._domElement.style.left="0",this._domElement.style.pointerEvents="none",this._domElement.style.zIndex="1000"}addRenderable(domContainer,_instructionSet){this._attachedDomElements.includes(domContainer)||(this._attachedDomElements.push(domContainer),domContainer.on("destroyed",this._destroyRenderableBound))}updateRenderable(_domContainer){}validateRenderable(_domContainer){return!0}destroyRenderable(domContainer){var index=this._attachedDomElements.indexOf(domContainer);-1!==index&&this._attachedDomElements.splice(index,1),domContainer.off("destroyed",this._destroyRenderableBound)}postrender(){var _a,attachedDomElements=this._attachedDomElements;if(0===attachedDomElements.length)this._domElement.remove();else{var canvas=this._renderer.view.canvas;this._domElement.parentNode!==canvas.parentNode&&null!=(_a=canvas.parentNode)&&_a.appendChild(this._domElement),this._domElement.style.transform=`translate(${canvas.offsetLeft}px, ${canvas.offsetTop}px)`;for(let i=0;i=bounds.minX&&point<=bounds.maxX&&y>=bounds.minY&&y<=bounds.maxY}onViewUpdate(){var renderGroup;this._didViewChangeTick++,this._boundsDirty=!0,!this.didViewUpdate&&(this.didViewUpdate=!0,renderGroup=this.renderGroup||this.parentRenderGroup)&&renderGroup.onChildViewUpdate(this)}destroy(options){super.destroy(options),this._bounds=null}collectRenderablesSimple(instructionSet,renderer,currentLayer){var{renderPipes,renderableGC}=renderer,children=(renderPipes.blendMode.setBlendMode(this,this.groupBlendMode,instructionSet),renderPipes[this.renderPipeId].addRenderable(this,instructionSet),renderableGC.addRenderable(this),this.didViewUpdate=!1,this.children),length=children.length;for(let i=0;ikey in obj?__defProp$14(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;class DOMContainer extends ViewContainer{constructor(options={}){var anchor=options.anchor;super(((a,b)=>{for(var prop in b=b||{})__hasOwnProp$14.call(b,prop)&&__defNormalProp$14(a,prop,b[prop]);if(__getOwnPropSymbols$14)for(var prop of __getOwnPropSymbols$14(b))__propIsEnum$14.call(b,prop)&&__defNormalProp$14(a,prop,b[prop]);return a})({label:"DOMContainer"},((source,exclude)=>{var target={};for(prop in source)__hasOwnProp$14.call(source,prop)&&exclude.indexOf(prop)<0&&(target[prop]=source[prop]);if(null!=source&&__getOwnPropSymbols$14)for(var prop of __getOwnPropSymbols$14(source))exclude.indexOf(prop)<0&&__propIsEnum$14.call(source,prop)&&(target[prop]=source[prop]);return target})(options,["element","anchor"]))),this.renderPipeId="dom",this.batched=!1,this._anchor=new Point(0,0),anchor&&(this.anchor=anchor),this.element=options.element||document.createElement("div")}get anchor(){return this._anchor}set anchor(value){"number"==typeof value?this._anchor.set(value):this._anchor.copyFrom(value)}set element(value){this._element!==value&&(this._element=value,this.onViewUpdate())}get element(){return this._element}updateBounds(){var offsetHeight,bounds=this._bounds,element=this._element;element?({offsetWidth:element,offsetHeight}=element,bounds.minX=0,bounds.maxX=element,bounds.minY=0,bounds.maxY=offsetHeight):(bounds.minX=0,bounds.minY=0,bounds.maxX=0,bounds.maxY=0)}destroy(options=!1){super.destroy(options),null!=(options=null==(options=this._element)?void 0:options.parentNode)&&options.removeChild(this._element),this._element=null,this._anchor=null}}extensions.add(DOMPipe);var LoaderParserPriority2={Low:0,0:"Low",Normal:1,1:"Normal",High:2,2:"High"},BrowserAdapter={createCanvas:(width,height)=>{var canvas=document.createElement("canvas");return canvas.width=width,canvas.height=height,canvas},getCanvasRenderingContext2D:()=>CanvasRenderingContext2D,getWebGLRenderingContext:()=>WebGLRenderingContext,getNavigator:()=>navigator,getBaseUrl:()=>{var _a;return null!=(_a=document.baseURI)?_a:window.location.href},getFontFaceSet:()=>document.fonts,fetch:(url,options)=>fetch(url,options),parseXML:xml=>(new DOMParser).parseFromString(xml,"text/xml")};let currentAdapter=BrowserAdapter;const DOMAdapter={get(){return currentAdapter},set(adapter){currentAdapter=adapter}};function assertPath(path2){if("string"!=typeof path2)throw new TypeError("Path must be a string. Received "+JSON.stringify(path2))}function removeUrlParams(url){return url.split("?")[0].split("#")[0]}const path={toPosix(path2){return path2.replace(new RegExp("\\".replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),"g"),"/")},isUrl(path2){return/^https?:/.test(this.toPosix(path2))},isDataUrl(path2){return/^data:([a-z]+\/[a-z0-9-+.]+(;[a-z0-9-.!#$%*+.{}|~`]+=[a-z0-9-.!#$%*+.{}()_|~`]+)*)?(;base64)?,([a-z0-9!$&',()*+;=\-._~:@\/?%\s<>]*?)$/i.test(path2)},isBlobUrl(path2){return path2.startsWith("blob:")},hasProtocol(path2){return/^[^/:]+:/.test(this.toPosix(path2))},getProtocol(path2){return assertPath(path2),path2=this.toPosix(path2),(path2=/^file:\/\/\//.exec(path2)||/^[^/:]+:\/{0,2}/.exec(path2))?path2[0]:""},toAbsolute(url,customBaseUrl,customRootUrl){return assertPath(url),this.isDataUrl(url)||this.isBlobUrl(url)?url:(customBaseUrl=removeUrlParams(this.toPosix(null!=customBaseUrl?customBaseUrl:DOMAdapter.get().getBaseUrl())),customRootUrl=removeUrlParams(this.toPosix(null!=customRootUrl?customRootUrl:this.rootname(customBaseUrl))),(url=this.toPosix(url)).startsWith("/")?path.join(customRootUrl,url.slice(1)):this.isAbsolute(url)?url:this.join(customBaseUrl,url))},normalize(path2){if(assertPath(path2),0===path2.length)return".";if(this.isDataUrl(path2)||this.isBlobUrl(path2))return path2;let protocol="";var isAbsolute=(path2=this.toPosix(path2)).startsWith("/"),trailingSeparator=(this.hasProtocol(path2)&&(protocol=this.rootname(path2),path2=path2.slice(protocol.length)),path2.endsWith("/"));return 0<(path2=function(path2){let res="",lastSegmentLength=0,lastSlash=-1,dots=0,code=-1;for(let i=0;i<=path2.length;++i){if(i=start;--i){if(47===(code=path2.charCodeAt(i))){if(matchedSlash)continue;startPart=i+1;break}-1===end&&(matchedSlash=!1,end=i+1),46===code?-1===startDot?startDot=i:1!==preDotState&&(preDotState=1):-1!==startDot&&(preDotState=-1)}-1===startDot||-1===end||0===preDotState||1===preDotState&&startDot===end-1&&startDot===startPart+1?-1!==end&&(0===startPart&&isAbsolute?ret.base=ret.name=path2.slice(1,end):ret.base=ret.name=path2.slice(startPart,end)):(0===startPart&&isAbsolute?(ret.name=path2.slice(1,startDot),ret.base=path2.slice(1,end)):(ret.name=path2.slice(startPart,startDot),ret.base=path2.slice(startPart,end)),ret.ext=path2.slice(startDot,end)),ret.dir=this.dirname(path2)}return ret},sep:"/",delimiter:":",joinExtensions:[".html"]},convertToList=(input,transform,forceTransform=!1)=>(Array.isArray(input)||(input=[input]),transform?input.map(item=>"string"==typeof item||forceTransform?transform(item):item):input);function createStringVariations(string){var result=string.match(/\{(.*?)\}/g),tags=[];if(result){const ids=[];result.forEach(vars=>{vars=vars.substring(1,vars.length-1).split(","),ids.push(vars)}),function processX(base,ids,depth,result,tags){var id=ids[depth];for(let i=0;i!Array.isArray(item);var __defProp$13=Object.defineProperty,__getOwnPropSymbols$13=Object.getOwnPropertySymbols,__hasOwnProp$13=Object.prototype.hasOwnProperty,__propIsEnum$13=Object.prototype.propertyIsEnumerable,__defNormalProp$13=(obj,key,value)=>key in obj?__defProp$13(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$13=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$13.call(b,prop)&&__defNormalProp$13(a,prop,b[prop]);if(__getOwnPropSymbols$13)for(var prop of __getOwnPropSymbols$13(b))__propIsEnum$13.call(b,prop)&&__defNormalProp$13(a,prop,b[prop]);return a};class Resolver{constructor(){this._defaultBundleIdentifierOptions={connector:"-",createBundleAssetId:(bundleId,assetId)=>""+bundleId+this._bundleIdConnector+assetId,extractAssetIdFromBundle:(bundleId,assetBundleId)=>assetBundleId.replace(""+bundleId+this._bundleIdConnector,"")},this._bundleIdConnector=this._defaultBundleIdentifierOptions.connector,this._createBundleAssetId=this._defaultBundleIdentifierOptions.createBundleAssetId,this._extractAssetIdFromBundle=this._defaultBundleIdentifierOptions.extractAssetIdFromBundle,this._assetMap={},this._preferredOrder=[],this._parsers=[],this._resolverHash={},this._bundles={}}setBundleIdentifier(bundleIdentifier){var _a;if(this._bundleIdConnector=null!=(_a=bundleIdentifier.connector)?_a:this._bundleIdConnector,this._createBundleAssetId=null!=(_a=bundleIdentifier.createBundleAssetId)?_a:this._createBundleAssetId,this._extractAssetIdFromBundle=null!=(_a=bundleIdentifier.extractAssetIdFromBundle)?_a:this._extractAssetIdFromBundle,"bar"!==this._extractAssetIdFromBundle("foo",this._createBundleAssetId("foo","bar")))throw new Error("[Resolver] GenerateBundleAssetId are not working correctly")}prefer(...preferOrders){preferOrders.forEach(prefer=>{this._preferredOrder.push(prefer),prefer.priority||(prefer.priority=Object.keys(prefer.params))}),this._resolverHash={}}set basePath(basePath){this._basePath=basePath}get basePath(){return this._basePath}set rootPath(rootPath){this._rootPath=rootPath}get rootPath(){return this._rootPath}get parsers(){return this._parsers}reset(){this.setBundleIdentifier(this._defaultBundleIdentifierOptions),this._assetMap={},this._preferredOrder=[],this._resolverHash={},this._rootPath=null,this._basePath=null,this._manifest=null,this._bundles={},this._defaultSearchParams=null}setDefaultSearchParams(searchParams){if("string"==typeof searchParams)this._defaultSearchParams=searchParams;else{const queryValues=searchParams;this._defaultSearchParams=Object.keys(queryValues).map(key=>encodeURIComponent(key)+"="+encodeURIComponent(queryValues[key])).join("&")}}getAlias(asset){var{alias:asset,src}=asset;return convertToList(asset||src,value=>"string"==typeof value?value:Array.isArray(value)?value.map(v=>{var _a;return null!=(_a=null==v?void 0:v.src)?_a:v}):null!=value&&value.src?value.src:value,!0)}addManifest(manifest){this._manifest&&warn("[Resolver] Manifest already exists, this will be overwritten"),(this._manifest=manifest).bundles.forEach(bundle=>{this.addBundle(bundle.name,bundle.assets)})}addBundle(bundleId,assets){const assetNames=[];let convertedAssets=assets;(convertedAssets=Array.isArray(assets)?convertedAssets:Object.entries(assets).map(([alias,src])=>"string"==typeof src||Array.isArray(src)?{alias:alias,src:src}:__spreadValues$13({alias:alias},src))).forEach(asset=>{var bundleAssetId,srcs=asset.src,aliases="string"==typeof(aliases=asset.alias)?(bundleAssetId=this._createBundleAssetId(bundleId,aliases),assetNames.push(bundleAssetId),[aliases,bundleAssetId]):(bundleAssetId=aliases.map(name=>this._createBundleAssetId(bundleId,name)),assetNames.push(...bundleAssetId),[...aliases,...bundleAssetId]);this.add(__spreadValues$13(__spreadValues$13({},asset),{alias:aliases,src:srcs}))}),this._bundles[bundleId]=assetNames}add(aliases){var assets=[];Array.isArray(aliases)?assets.push(...aliases):assets.push(aliases);let keyCheck;keyCheck=key=>{this.hasKey(key)&&warn(`[Resolver] already has key: ${key} overwriting`)},convertToList(assets).forEach(asset=>{var src=asset.src;let{data,format,loadParser}=asset;src=convertToList(src).map(src2=>"string"==typeof src2?createStringVariations(src2):Array.isArray(src2)?src2:[src2]);const aliasesToUse=this.getAlias(asset),resolvedAssets=(Array.isArray(aliasesToUse)?aliasesToUse.forEach(keyCheck):keyCheck(aliasesToUse),[]);src.forEach(srcs=>{srcs.forEach(src2=>{var _a;let formattedAsset={};if("object"!=typeof src2){formattedAsset.src=src2;for(let i=0;i{this._assetMap[alias]=resolvedAssets})})}resolveBundle(bundleIds){var singleAsset=isSingleItem(bundleIds);bundleIds=convertToList(bundleIds);const out={};return bundleIds.forEach(bundleId=>{var assetNames=this._bundles[bundleId];if(assetNames){var results=this.resolve(assetNames),assets={};for(const key in results){var asset=results[key];assets[this._extractAssetIdFromBundle(bundleId,key)]=asset}out[bundleId]=assets}}),singleAsset?out[bundleIds[0]]:out}resolveUrl(key){var result=this.resolve(key);if("string"==typeof key)return result.src;var out={};for(const i in result)out[i]=result[i].src;return out}resolve(keys){var singleAsset=isSingleItem(keys);keys=convertToList(keys);const result={};return keys.forEach(key=>{if(!this._resolverHash[key])if(this._assetMap[key]){let assets=this._assetMap[key];const preferredOrder=this._getPreferredOrder(assets);null!=preferredOrder&&preferredOrder.priority.forEach(priorityKey=>{preferredOrder.params[priorityKey].forEach(value=>{var filteredAssets=assets.filter(asset=>!!asset[priorityKey]&&asset[priorityKey]===value);filteredAssets.length&&(assets=filteredAssets)})}),this._resolverHash[key]=assets[0]}else this._resolverHash[key]=this._buildResolvedAsset({alias:[key],src:key},{});result[key]=this._resolverHash[key]}),singleAsset?result[keys[0]]:result}hasKey(key){return!!this._assetMap[key]}hasBundle(key){return!!this._bundles[key]}_getPreferredOrder(assets){for(let i=0;ipreference.params.format.includes(asset.format));if(preferred)return preferred}return this._preferredOrder[0]}_appendDefaultSearchParams(url){return this._defaultSearchParams?url+(/\?/.test(url)?"&":"?")+this._defaultSearchParams:url}_buildResolvedAsset(formattedAsset,data){var{aliases:data,data:assetData,loadParser,format}=data;return(this._basePath||this._rootPath)&&(formattedAsset.src=path.toAbsolute(formattedAsset.src,this._basePath,this._rootPath)),formattedAsset.alias=null!=(data=null!=data?data:formattedAsset.alias)?data:[formattedAsset.src],formattedAsset.src=this._appendDefaultSearchParams(formattedAsset.src),formattedAsset.data=__spreadValues$13(__spreadValues$13({},assetData||{}),formattedAsset.data),formattedAsset.loadParser=null!=loadParser?loadParser:formattedAsset.loadParser,formattedAsset.format=null!=(data=null!=format?format:formattedAsset.format)?data:getUrlExtension(formattedAsset.src),formattedAsset}}function getUrlExtension(url){return url.split(".").pop().split("?").shift().split("#").shift()}Resolver.RETINA_PREFIX=/@([0-9\.]+)x/;const copySearchParams=(targetUrl,sourceUrl)=>((sourceUrl=sourceUrl.split("?")[1])&&(targetUrl+="?"+sourceUrl),targetUrl),_Spritesheet=class _Spritesheet{constructor(texture,data){this.linkedSheets=[],this._texture=texture instanceof Texture?texture:null,this.textureSource=texture.source,this.textures={},this.animations={},this.data=data,(data=parseFloat(data.meta.scale))?(this.resolution=data,texture.source.resolution=this.resolution):this.resolution=texture.source._resolution,this._frames=this.data.frames,this._frameKeys=Object.keys(this._frames),this._batchIndex=0,this._callback=null}parse(){return new Promise(resolve=>{this._callback=resolve,this._batchIndex=0,this._frameKeys.length<=_Spritesheet.BATCH_SIZE?(this._processFrames(0),this._processAnimations(),this._parseComplete()):this._nextBatch()})}_processFrames(initialFrameIndex){let frameIndex=initialFrameIndex;for(var maxFrames=_Spritesheet.BATCH_SIZE;frameIndex-initialFrameIndex{this._batchIndex*_Spritesheet.BATCH_SIZEasset instanceof Spritesheet,getCacheableAssets:(keys,asset)=>function getCacheableAssets(keys,asset,ignoreMultiPack){const out={};if(keys.forEach(key=>{out[key]=asset}),Object.keys(asset.textures).forEach(key=>{out[key]=asset.textures[key]}),!ignoreMultiPack){const basePath=path.dirname(keys[0]);asset.linkedSheets.forEach((item,i)=>{i=getCacheableAssets([basePath+"/"+asset.data.meta.related_multi_packs[i]],item,!0),Object.assign(out,i)})}return out}(keys,asset,!1)},resolver:{extension:{type:ExtensionType2.ResolveParser,name:"resolveSpritesheet"},test:value=>{var extension=(value=value.split("?")[0].split(".")).pop(),value=value.pop();return"json"===extension&&validImages.includes(value)},parse:value=>{var _a,split=value.split(".");return{resolution:parseFloat(null!=(_a=null==(_a=Resolver.RETINA_PREFIX.exec(value))?void 0:_a[1])?_a:"1"),format:split[split.length-2],src:value}}},loader:{name:"spritesheetLoader",extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.Normal,name:"spritesheetLoader"},async testParse(asset,options){return".json"===path.extname(options.src).toLowerCase()&&!!asset.frames},async parse(asset,options,loader){var _c,texture,{texture:_a,imageFilename,textureOptions}=null!=(_a=null==options?void 0:options.data)?_a:{};let basePath=path.dirname(options.src);basePath&&basePath.lastIndexOf("/")!==basePath.length-1&&(basePath+="/"),texture=_a instanceof Texture?_a:(_a=copySearchParams(basePath+(null!=imageFilename?imageFilename:asset.meta.image),options.src),(await loader.load([{src:_a,data:textureOptions}]))[_a]);const spritesheet=new Spritesheet(texture.source,asset);if(await spritesheet.parse(),_a=null==(imageFilename=null==asset?void 0:asset.meta)?void 0:imageFilename.related_multi_packs,Array.isArray(_a)){var itemUrl,promises=[];for(const item of _a)"string"!=typeof item||(itemUrl=basePath+item,null!=(_c=options.data)&&_c.ignoreMultiPack)||(itemUrl=copySearchParams(itemUrl,options.src),promises.push(loader.load({src:itemUrl,data:{textureOptions:textureOptions,ignoreMultiPack:!0}})));asset=await Promise.all(promises),(spritesheet.linkedSheets=asset).forEach(item=>{item.linkedSheets=[spritesheet].concat(spritesheet.linkedSheets.filter(sp=>sp!==item))})}return spritesheet},async unload(spritesheet,_resolvedAsset,loader){await loader.unload(spritesheet.textureSource._sourceOrigin),spritesheet.destroy(!1)}}};function updateQuadBounds(bounds,anchor,texture){var sourceWidth,sourceHeight,{width,height}=texture.orig;(texture=texture.trim)?(sourceWidth=texture.width,sourceHeight=texture.height,bounds.minX=texture.x-anchor._x*width,bounds.maxX=bounds.minX+sourceWidth,bounds.minY=texture.y-anchor._y*height,bounds.maxY=bounds.minY+sourceHeight):(bounds.minX=-anchor._x*width,bounds.maxX=bounds.minX+width,bounds.minY=-anchor._y*height,bounds.maxY=bounds.minY+height)}extensions.add(spritesheetAsset);var __defProp$12=Object.defineProperty,__getOwnPropSymbols$12=Object.getOwnPropertySymbols,__hasOwnProp$12=Object.prototype.hasOwnProperty,__propIsEnum$12=Object.prototype.propertyIsEnumerable,__defNormalProp$12=(obj,key,value)=>key in obj?__defProp$12(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;class Sprite extends ViewContainer{constructor(options=Texture.EMPTY){var options=options instanceof Texture?{texture:options}:options,{texture=Texture.EMPTY,anchor,roundPixels,width,height}=options;super(((a,b)=>{for(var prop in b=b||{})__hasOwnProp$12.call(b,prop)&&__defNormalProp$12(a,prop,b[prop]);if(__getOwnPropSymbols$12)for(var prop of __getOwnPropSymbols$12(b))__propIsEnum$12.call(b,prop)&&__defNormalProp$12(a,prop,b[prop]);return a})({label:"Sprite"},((source,exclude)=>{var target={};for(prop in source)__hasOwnProp$12.call(source,prop)&&exclude.indexOf(prop)<0&&(target[prop]=source[prop]);if(null!=source&&__getOwnPropSymbols$12)for(var prop of __getOwnPropSymbols$12(source))exclude.indexOf(prop)<0&&__propIsEnum$12.call(source,prop)&&(target[prop]=source[prop]);return target})(options,["texture","anchor","roundPixels","width","height"]))),this.renderPipeId="sprite",this.batched=!0,this._visualBounds={minX:0,maxX:1,minY:0,maxY:0},this._anchor=new ObservablePoint({_onUpdate:()=>{this.onViewUpdate()}}),anchor?this.anchor=anchor:texture.defaultAnchor&&(this.anchor=texture.defaultAnchor),this.texture=texture,this.allowChildren=!1,this.roundPixels=null!=roundPixels&&roundPixels,void 0!==width&&(this.width=width),void 0!==height&&(this.height=height)}static from(source,skipCache=!1){return source instanceof Texture?new Sprite(source):new Sprite(Texture.from(source,skipCache))}set texture(value){value=value||Texture.EMPTY;var currentTexture=this._texture;currentTexture!==value&&(currentTexture&¤tTexture.dynamic&¤tTexture.off("update",this.onViewUpdate,this),value.dynamic&&value.on("update",this.onViewUpdate,this),this._texture=value,this._width&&this._setWidth(this._width,this._texture.orig.width),this._height&&this._setHeight(this._height,this._texture.orig.height),this.onViewUpdate())}get texture(){return this._texture}get visualBounds(){return updateQuadBounds(this._visualBounds,this._anchor,this._texture),this._visualBounds}get sourceBounds(){return deprecation("8.6.1","Sprite.sourceBounds is deprecated, use visualBounds instead."),this.visualBounds}updateBounds(){var anchor=this._anchor,texture=this._texture,bounds=this._bounds,{width:texture,height}=texture.orig;bounds.minX=-anchor._x*texture,bounds.maxX=bounds.minX+texture,bounds.minY=-anchor._y*height,bounds.maxY=bounds.minY+height}destroy(options=!1){super.destroy(options),("boolean"==typeof options?options:null!=options&&options.texture)&&(options="boolean"==typeof options?options:null==options?void 0:options.textureSource,this._texture.destroy(options)),this._texture=null,this._visualBounds=null,this._bounds=null,this._anchor=null}get anchor(){return this._anchor}set anchor(value){"number"==typeof value?this._anchor.set(value):this._anchor.copyFrom(value)}get width(){return Math.abs(this.scale.x)*this._texture.orig.width}set width(value){this._setWidth(value,this._texture.orig.width),this._width=value}get height(){return Math.abs(this.scale.y)*this._texture.orig.height}set height(value){this._setHeight(value,this._texture.orig.height),this._height=value}getSize(out){return(out=out||{}).width=Math.abs(this.scale.x)*this._texture.orig.width,out.height=Math.abs(this.scale.y)*this._texture.orig.height,out}setSize(value,height){var _a;"object"==typeof value?(height=null!=(_a=value.height)?_a:value.width,value=value.width):null==height&&(height=value),void 0!==value&&this._setWidth(value,this._texture.orig.width),void 0!==height&&this._setHeight(height,this._texture.orig.height)}}const tempBounds$4=new Bounds;function addMaskBounds(mask,bounds,skipUpdateTransform){var boundsToMask=tempBounds$4;mask.measurable=!0,getGlobalBounds(mask,skipUpdateTransform,boundsToMask),bounds.addBoundsMask(boundsToMask),mask.measurable=!1}function addMaskLocalBounds(mask,bounds,localRoot){var boundsToMask=boundsPool.get(),tempMatrix=(mask.measurable=!0,matrixPool.get().identity());getLocalBounds(mask,boundsToMask,getMatrixRelativeToParent(mask,localRoot,tempMatrix)),mask.measurable=!1,bounds.addBoundsMask(boundsToMask),matrixPool.return(tempMatrix),boundsPool.return(boundsToMask)}function getMatrixRelativeToParent(target,root,matrix){return target?target!==root&&(getMatrixRelativeToParent(target.parent,root,matrix),target.updateLocalTransform(),matrix.append(target.localTransform)):warn("Mask bounds, renderable is not inside the root container"),matrix}class AlphaMask{constructor(options){this.priority=0,this.inverse=!1,this.pipe="alphaMask",null!=options&&options.mask&&this.init(options.mask)}init(mask){this.mask=mask,this.renderMaskToTexture=!(mask instanceof Sprite),this.mask.renderable=this.renderMaskToTexture,this.mask.includeInBuild=!this.renderMaskToTexture,this.mask.measurable=!1}reset(){this.mask.measurable=!0,this.mask=null}addBounds(bounds,skipUpdateTransform){this.inverse||addMaskBounds(this.mask,bounds,skipUpdateTransform)}addLocalBounds(bounds,localRoot){addMaskLocalBounds(this.mask,bounds,localRoot)}containsPoint(point,hitTestFn){return hitTestFn(this.mask,point)}destroy(){this.reset()}static test(mask){return mask instanceof Sprite}}AlphaMask.extension=ExtensionType2.MaskEffect;class ColorMask{constructor(options){this.priority=0,this.pipe="colorMask",null!=options&&options.mask&&this.init(options.mask)}init(mask){this.mask=mask}destroy(){}static test(mask){return"number"==typeof mask}}ColorMask.extension=ExtensionType2.MaskEffect;class StencilMask{constructor(options){this.priority=0,this.pipe="stencilMask",null!=options&&options.mask&&this.init(options.mask)}init(mask){this.mask=mask,this.mask.includeInBuild=!1,this.mask.measurable=!1}reset(){this.mask.measurable=!0,this.mask.includeInBuild=!0,this.mask=null}addBounds(bounds,skipUpdateTransform){addMaskBounds(this.mask,bounds,skipUpdateTransform)}addLocalBounds(bounds,localRoot){addMaskLocalBounds(this.mask,bounds,localRoot)}containsPoint(point,hitTestFn){return hitTestFn(this.mask,point)}destroy(){this.reset()}static test(mask){return mask instanceof Container}}StencilMask.extension=ExtensionType2.MaskEffect;class CanvasSource extends TextureSource{constructor(options){options.resource||(options.resource=DOMAdapter.get().createCanvas()),options.width||(options.width=options.resource.width,options.autoDensity)||(options.width/=options.resolution),options.height||(options.height=options.resource.height,options.autoDensity)||(options.height/=options.resolution),super(options),this.uploadMethodId="image",this.autoDensity=options.autoDensity,this.resizeCanvas(),this.transparent=!!options.transparent}resizeCanvas(){this.autoDensity&&"style"in this.resource&&(this.resource.style.width=this.width+"px",this.resource.style.height=this.height+"px"),this.resource.width===this.pixelWidth&&this.resource.height===this.pixelHeight||(this.resource.width=this.pixelWidth,this.resource.height=this.pixelHeight)}resize(width=this.width,height=this.height,resolution=this._resolution){return(width=super.resize(width,height,resolution))&&this.resizeCanvas(),width}static test(resource){return globalThis.HTMLCanvasElement&&resource instanceof HTMLCanvasElement||globalThis.OffscreenCanvas&&resource instanceof OffscreenCanvas}get context2D(){return this._context2D||(this._context2D=this.resource.getContext("2d"))}}CanvasSource.extension=ExtensionType2.TextureSource;class ImageSource extends TextureSource{constructor(options){var canvas;options.resource&&globalThis.HTMLImageElement&&options.resource instanceof HTMLImageElement&&((canvas=DOMAdapter.get().createCanvas(options.resource.width,options.resource.height)).getContext("2d").drawImage(options.resource,0,0,options.resource.width,options.resource.height),options.resource=canvas,warn("ImageSource: Image element passed, converting to canvas. Use CanvasSource instead.")),super(options),this.uploadMethodId="image",this.autoGarbageCollect=!0}static test(resource){return globalThis.HTMLImageElement&&resource instanceof HTMLImageElement||"undefined"!=typeof ImageBitmap&&resource instanceof ImageBitmap||globalThis.VideoFrame&&resource instanceof VideoFrame}}ImageSource.extension=ExtensionType2.TextureSource;let promise;async function detectVideoAlphaMode(){return null!=promise?promise:promise=(async()=>{var texture,framebuffer,video,gl=document.createElement("canvas").getContext("webgl");return gl&&(video=await new Promise(resolve=>{const video2=document.createElement("video");video2.onloadeddata=()=>resolve(video2),video2.onerror=()=>resolve(null),video2.autoplay=!1,video2.crossOrigin="anonymous",video2.preload="auto",video2.src="data:video/webm;base64,GkXfo59ChoEBQveBAULygQRC84EIQoKEd2VibUKHgQJChYECGFOAZwEAAAAAAAHTEU2bdLpNu4tTq4QVSalmU6yBoU27i1OrhBZUrmtTrIHGTbuMU6uEElTDZ1OsggEXTbuMU6uEHFO7a1OsggG97AEAAAAAAABZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAVSalmoCrXsYMPQkBNgIRMYXZmV0GETGF2ZkSJiEBEAAAAAAAAFlSua8yuAQAAAAAAAEPXgQFzxYgAAAAAAAAAAZyBACK1nIN1bmSIgQCGhVZfVlA5g4EBI+ODhAJiWgDglLCBArqBApqBAlPAgQFVsIRVuYEBElTDZ9Vzc9JjwItjxYgAAAAAAAAAAWfInEWjh0VOQ09ERVJEh49MYXZjIGxpYnZweC12cDlnyKJFo4hEVVJBVElPTkSHlDAwOjAwOjAwLjA0MDAwMDAwMAAAH0O2dcfngQCgwqGggQAAAIJJg0IAABAAFgA4JBwYSgAAICAAEb///4r+AAB1oZ2mm+6BAaWWgkmDQgAAEAAWADgkHBhKAAAgIABIQBxTu2uRu4+zgQC3iveBAfGCAXHwgQM=",video2.load()}))&&(texture=gl.createTexture(),gl.bindTexture(gl.TEXTURE_2D,texture),framebuffer=gl.createFramebuffer(),gl.bindFramebuffer(gl.FRAMEBUFFER,framebuffer),gl.framebufferTexture2D(gl.FRAMEBUFFER,gl.COLOR_ATTACHMENT0,gl.TEXTURE_2D,texture,0),gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!1),gl.pixelStorei(gl.UNPACK_COLORSPACE_CONVERSION_WEBGL,gl.NONE),gl.texImage2D(gl.TEXTURE_2D,0,gl.RGBA,gl.RGBA,gl.UNSIGNED_BYTE,video),video=new Uint8Array(4),gl.readPixels(0,0,1,1,gl.RGBA,gl.UNSIGNED_BYTE,video),gl.deleteFramebuffer(framebuffer),gl.deleteTexture(texture),null!=(framebuffer=gl.getExtension("WEBGL_lose_context"))&&framebuffer.loseContext(),video[0]<=video[3])?"premultiplied-alpha":"premultiply-alpha-on-upload"})(),promise}var __defProp$11=Object.defineProperty,__defProps$o=Object.defineProperties,__getOwnPropDescs$o=Object.getOwnPropertyDescriptors,__getOwnPropSymbols$11=Object.getOwnPropertySymbols,__hasOwnProp$11=Object.prototype.hasOwnProperty,__propIsEnum$11=Object.prototype.propertyIsEnumerable,__defNormalProp$11=(obj,key,value)=>key in obj?__defProp$11(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$11=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$11.call(b,prop)&&__defNormalProp$11(a,prop,b[prop]);if(__getOwnPropSymbols$11)for(var prop of __getOwnPropSymbols$11(b))__propIsEnum$11.call(b,prop)&&__defNormalProp$11(a,prop,b[prop]);return a};const _VideoSource=class _VideoSource extends TextureSource{constructor(options){var _a;super(options),this.isReady=!1,this.uploadMethodId="video",options=__spreadValues$11(__spreadValues$11({},_VideoSource.defaultOptions),options),this._autoUpdate=!0,this._isConnectedToTicker=!1,this._updateFPS=options.updateFPS||0,this._msToNextUpdate=0,this.autoPlay=!1!==options.autoPlay,this.alphaMode=null!=(_a=options.alphaMode)?_a:"premultiply-alpha-on-upload",this._videoFrameRequestCallback=this._videoFrameRequestCallback.bind(this),this._videoFrameRequestCallbackHandle=null,this._load=null,this._resolve=null,this._reject=null,this._onCanPlay=this._onCanPlay.bind(this),this._onCanPlayThrough=this._onCanPlayThrough.bind(this),this._onError=this._onError.bind(this),this._onPlayStart=this._onPlayStart.bind(this),this._onPlayStop=this._onPlayStop.bind(this),this._onSeeked=this._onSeeked.bind(this),!1!==options.autoLoad&&this.load()}updateFrame(){var elapsedMS;this.destroyed||(this._updateFPS&&(elapsedMS=Ticker.shared.elapsedMS*this.resource.playbackRate,this._msToNextUpdate=Math.floor(this._msToNextUpdate-elapsedMS)),(!this._updateFPS||this._msToNextUpdate<=0)&&(this._msToNextUpdate=this._updateFPS?Math.floor(1e3/this._updateFPS):0),this.isValid&&this.update())}_videoFrameRequestCallback(){this.updateFrame(),this.destroyed?this._videoFrameRequestCallbackHandle=null:this._videoFrameRequestCallbackHandle=this.resource.requestVideoFrameCallback(this._videoFrameRequestCallback)}get isValid(){return!!this.resource.videoWidth&&!!this.resource.videoHeight}async load(){if(!this._load){const source=this.resource,options=this.options;(source.readyState===source.HAVE_ENOUGH_DATA||source.readyState===source.HAVE_FUTURE_DATA)&&source.width&&source.height&&(source.complete=!0),source.addEventListener("play",this._onPlayStart),source.addEventListener("pause",this._onPlayStop),source.addEventListener("seeked",this._onSeeked),this._isSourceReady()?this._mediaReady():(options.preload||source.addEventListener("canplay",this._onCanPlay),source.addEventListener("canplaythrough",this._onCanPlayThrough),source.addEventListener("error",this._onError,!0)),this.alphaMode=await detectVideoAlphaMode(),this._load=new Promise((resolve,reject)=>{this.isValid?resolve(this):(this._resolve=resolve,this._reject=reject,void 0!==options.preloadTimeoutMs&&(this._preloadTimeout=setTimeout(()=>{this._onError(new ErrorEvent(`Preload exceeded timeout of ${options.preloadTimeoutMs}ms`))})),source.load())})}return this._load}_onError(event){this.resource.removeEventListener("error",this._onError,!0),this.emit("error",event),this._reject&&(this._reject(event),this._reject=null,this._resolve=null)}_isSourcePlaying(){var source=this.resource;return!source.paused&&!source.ended}_isSourceReady(){return 2__defProps$o(a,__getOwnPropDescs$o({autoLoad:!0,autoPlay:!0,updateFPS:0,crossorigin:!0,loop:!1,muted:!0,playsinline:!0,preload:!1})))(__spreadValues$11({},TextureSource.defaultOptions)),_VideoSource.MIME_TYPES={ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"};let VideoSource=_VideoSource;const Cache=new class{constructor(){this._parsers=[],this._cache=new Map,this._cacheMap=new Map}reset(){this._cacheMap.clear(),this._cache.clear()}has(key){return this._cache.has(key)}get(key){var result=this._cache.get(key);return result||warn(`[Assets] Asset id ${key} was not found in the Cache`),result}set(key,value){var keys=convertToList(key);let cacheableAssets;for(let i=0;i{cacheableMap.set(key2,value)}),{cacheKeys:key=[...cacheableMap.keys()],keys:keys});keys.forEach(key2=>{this._cacheMap.set(key2,cachedAssets)}),key.forEach(key2=>{var val=cacheableAssets?cacheableAssets[key2]:value;this._cache.has(key2)&&this._cache.get(key2)!==val&&warn("[Cache] already has key:",key2),this._cache.set(key2,cacheableMap.get(key2))})}remove(key){var cacheMap;this._cacheMap.has(key)?((cacheMap=this._cacheMap.get(key)).cacheKeys.forEach(key2=>{this._cache.delete(key2)}),cacheMap.keys.forEach(key2=>{this._cacheMap.delete(key2)})):warn(`[Assets] Asset id ${key} was not found in the Cache`)}get parsers(){return this._parsers}},sources=[];function textureSourceFrom(options={}){var hasResource=options&&options.resource,res=hasResource?options.resource:options,opts=hasResource?options:{resource:options};for(let i=0;i{Cache.has(resource)&&Cache.remove(resource)}),skipCache||Cache.set(resource,options),options)}function textureFrom(id,skipCache=!1){return"string"==typeof id?Cache.get(id):id instanceof TextureSource?new Texture({source:id}):resourceToTexture(id,skipCache)}extensions.handleByList(ExtensionType2.TextureSource,sources),Texture.from=textureFrom,TextureSource.from=textureSourceFrom,extensions.add(AlphaMask,ColorMask,StencilMask,VideoSource,ImageSource,CanvasSource,BufferImageSource);class BindGroup{constructor(resources){this.resources=Object.create(null),this._dirty=!0;let index=0;for(const i in resources){var resource=resources[i];this.setResource(resource,index++)}this._updateKey()}_updateKey(){if(this._dirty){this._dirty=!1;var keyParts=[];let index=0;for(const i in this.resources)keyParts[index++]=this.resources[i]._resourceId;this._key=keyParts.join("|")}}setResource(resource,index){var currentResource=this.resources[index];resource!==currentResource&&(currentResource&&null!=(currentResource=resource.off)&¤tResource.call(resource,"change",this.onResourceChange,this),null!=(currentResource=resource.on)&¤tResource.call(resource,"change",this.onResourceChange,this),this.resources[index]=resource,this._dirty=!0)}getResource(index){return this.resources[index]}_touch(tick){var resources=this.resources;for(const i in resources)resources[i]._touched=tick}destroy(){var _a,resources=this.resources;for(const i in resources){var resource=resources[i];null!=(_a=resource.off)&&_a.call(resource,"change",this.onResourceChange,this)}this.resources=null}onResourceChange(resource){if(this._dirty=!0,resource.destroyed){var resources=this.resources;for(const i in resources)resources[i]===resource&&(resources[i]=null)}else this._updateKey()}}let context;function getTestContext(){var canvas;return(!context||null!=context&&context.isContextLost())&&(canvas=DOMAdapter.get().createCanvas(),context=canvas.getContext("webgl",{})),context}const fragTemplate$1=["precision mediump float;","void main(void){","float test = 0.1;","%forloop%","gl_FragColor = vec4(0.0);","}"].join("\n");function checkMaxIfStatementsInShader(maxIfs,gl){if(0===maxIfs)throw new Error("Invalid value of `0` passed to `checkMaxIfStatementsInShader`");var shader=gl.createShader(gl.FRAGMENT_SHADER);try{for(;;){var fragmentSrc=fragTemplate$1.replace(/%forloop%/gi,function(maxIfs){let src="";for(let i=0;i>>=0;return cachedGroups[uid]||function(textures,size,key){var bindGroupResources={};let bindIndex=0;maxTextures=maxTextures||getMaxTexturesPerBatch();for(let i=0;ikey in obj?__defProp$10(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$10=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$10.call(b,prop)&&__defNormalProp$10(a,prop,b[prop]);if(__getOwnPropSymbols$10)for(var prop of __getOwnPropSymbols$10(b))__propIsEnum$10.call(b,prop)&&__defNormalProp$10(a,prop,b[prop]);return a};class Batch{constructor(){this.renderPipeId="batch",this.action="startBatch",this.start=0,this.size=0,this.textures=new BatchTextureArray,this.blendMode="normal",this.topology="triangle-strip",this.canBundle=!0}destroy(){this.textures=null,this.gpuBindGroup=null,this.bindGroup=null,this.batcher=null}}const batchPool=[];let batchPoolIndex=0;function getBatchFromPool(){return 0this.attributeBuffer.size&&this._resizeAttributeBuffer(4*this.attributeSize),this.indexSize>this.indexBuffer.length&&this._resizeIndexBuffer(this.indexSize);var f32=this.attributeBuffer.float32View,u32=this.attributeBuffer.uint32View,indexBuffer=this.indexBuffer;let size=this._batchIndexSize,start=this._batchIndexStart,action="startBatch";var maxTextures=this.maxTextures;for(let i=this.elementStart;i=maxTextures||breakRequired)&&(this._finishBatch(batch,start,size-start,textureBatch,blendMode,topology,instructionSet,action),action="renderBatch",start=size,blendMode=adjustedBlendMode,topology=element.topology,batch=getBatchFromPool(),(textureBatch=batch.textures).clear(),++BATCH_TICK),element._textureId=texture._textureBindLocation=textureBatch.count,textureBatch.ids[texture.uid]=textureBatch.count,textureBatch.textures[textureBatch.count++]=texture,element._batch=batch,size+=element.indexSize,element.packAsQuad?(this.packQuadAttributes(element,f32,u32,element._attributeStart,element._textureId),this.packQuadIndex(indexBuffer,element._indexStart,element._attributeStart/this.vertexSize)):(this.packAttributes(element,f32,u32,element._attributeStart,element._textureId),this.packIndex(element,indexBuffer,element._indexStart,element._attributeStart/this.vertexSize))):(element._textureId=texture._textureBindLocation,size+=element.indexSize,element.packAsQuad?(this.packQuadAttributes(element,f32,u32,element._attributeStart,element._textureId),this.packQuadIndex(indexBuffer,element._indexStart,element._attributeStart/this.vertexSize)):(this.packAttributes(element,f32,u32,element._attributeStart,element._textureId),this.packIndex(element,indexBuffer,element._indexStart,element._attributeStart/this.vertexSize)),element._batch=batch)}0maxX&&(maxX=x),y>maxY&&(maxY=y),xbuffer.destroy()),this.attributes=null,this.buffers=null,this.indexBuffer=null,this._bounds=null}}const placeHolderBufferData=new Float32Array(1),placeHolderIndexData=new Uint32Array(1);class BatchGeometry extends Geometry{constructor(){var attributeBuffer=new Buffer({data:placeHolderBufferData,label:"attribute-batch-buffer",usage:BufferUsage.VERTEX|BufferUsage.COPY_DST,shrinkToFit:!1});super({attributes:{aPosition:{buffer:attributeBuffer,format:"float32x2",stride:24,offset:0},aUV:{buffer:attributeBuffer,format:"float32x2",stride:24,offset:8},aColor:{buffer:attributeBuffer,format:"unorm8x4",stride:24,offset:16},aTextureIdAndRound:{buffer:attributeBuffer,format:"uint16x2",stride:24,offset:20}},indexBuffer:new Buffer({data:placeHolderIndexData,label:"index-batch-buffer",usage:BufferUsage.INDEX|BufferUsage.COPY_DST,shrinkToFit:!1})})}}const idCounts=Object.create(null),idHash=Object.create(null);function createIdFromString(value,groupId){let id=idHash[value];return void 0===id&&(void 0===idCounts[groupId]&&(idCounts[groupId]=1),idHash[value]=id=idCounts[groupId]++),id}let maxFragmentPrecision;function getMaxFragmentPrecision(){var gl;return maxFragmentPrecision||(maxFragmentPrecision="mediump",(gl=getTestContext())&&gl.getShaderPrecisionFormat&&(gl=gl.getShaderPrecisionFormat(gl.FRAGMENT_SHADER,gl.HIGH_FLOAT),maxFragmentPrecision=gl.precision?"highp":"mediump")),maxFragmentPrecision}function addProgramDefines(src,isES300,isFragment){return isES300?src:isFragment?`
+
+ #ifdef GL_ES // This checks if it is WebGL1
+ #define in varying
+ #define finalColor gl_FragColor
+ #define texture texture2D
+ #endif
+ ${src=src.replace("out vec4 finalColor;","")}
+ `:`
+
+ #ifdef GL_ES // This checks if it is WebGL1
+ #define in attribute
+ #define out varying
+ #endif
+ ${src}
+ `}function ensurePrecision(src,options,isFragment){var maxSupportedPrecision=isFragment?options.maxSupportedFragmentPrecision:options.maxSupportedVertexPrecision;return"precision"===src.substring(0,9)?"highp"!==maxSupportedPrecision&&"precision highp"===src.substring(0,15)?src.replace("precision highp","precision mediump"):src:`precision ${isFragment="highp"===(isFragment=isFragment?options.requestedFragmentPrecision:options.requestedVertexPrecision)&&"highp"!==maxSupportedPrecision?"mediump":isFragment} float;
+`+src}function insertVersion(src,isES300){return isES300?`#version 300 es
+`+src:src}const fragmentNameCache={},VertexNameCache={};function setProgramName(src,{name="pixi-program"},isFragment=!0){return name=name.replace(/\s+/g,"-"),name+=isFragment?"-fragment":"-vertex",(isFragment=isFragment?fragmentNameCache:VertexNameCache)[name]?(isFragment[name]++,name+="-"+isFragment[name]):isFragment[name]=1,-1!==src.indexOf("#define SHADER_NAME")?src:"#define SHADER_NAME "+name+`
+`+src}function stripVersion(src,isES300){return isES300?src.replace("#version 300 es",""):src}var __defProp$$=Object.defineProperty,__getOwnPropSymbols$$=Object.getOwnPropertySymbols,__hasOwnProp$$=Object.prototype.hasOwnProperty,__propIsEnum$$=Object.prototype.propertyIsEnumerable,__defNormalProp$$=(obj,key,value)=>key in obj?__defProp$$(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$$=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$$.call(b,prop)&&__defNormalProp$$(a,prop,b[prop]);if(__getOwnPropSymbols$$)for(var prop of __getOwnPropSymbols$$(b))__propIsEnum$$.call(b,prop)&&__defNormalProp$$(a,prop,b[prop]);return a};const processes={stripVersion:stripVersion,ensurePrecision:ensurePrecision,addProgramDefines:addProgramDefines,setProgramName:setProgramName,insertVersion:insertVersion},programCache$1=Object.create(null),_GlProgram=class _GlProgram{constructor(options){var isES300=-1!==(options=__spreadValues$$(__spreadValues$$({},_GlProgram.defaultOptions),options)).fragment.indexOf("#version 300 es");const preprocessorOptions={stripVersion:isES300,ensurePrecision:{requestedFragmentPrecision:options.preferredFragmentPrecision,requestedVertexPrecision:options.preferredVertexPrecision,maxSupportedVertexPrecision:"highp",maxSupportedFragmentPrecision:getMaxFragmentPrecision()},setProgramName:{name:options.name},addProgramDefines:isES300,insertVersion:isES300};let fragment=options.fragment,vertex=options.vertex;Object.keys(processes).forEach(processKey=>{var processOptions=preprocessorOptions[processKey];fragment=processes[processKey](fragment,processOptions,!0),vertex=processes[processKey](vertex,processOptions,!1)}),this.fragment=fragment,this.vertex=vertex,this.transformFeedbackVaryings=options.transformFeedbackVaryings,this._key=createIdFromString(this.vertex+":"+this.fragment,"gl-program")}destroy(){this.fragment=null,this.vertex=null,this._attributeData=null,this._uniformData=null,this._uniformBlockData=null,this.transformFeedbackVaryings=null}static from(options){var key=options.vertex+":"+options.fragment;return programCache$1[key]||(programCache$1[key]=new _GlProgram(options)),programCache$1[key]}};_GlProgram.defaultOptions={preferredVertexPrecision:"highp",preferredFragmentPrecision:"mediump"};let GlProgram=_GlProgram;const attributeFormatData={uint8x2:{size:2,stride:2,normalised:!1},uint8x4:{size:4,stride:4,normalised:!1},sint8x2:{size:2,stride:2,normalised:!1},sint8x4:{size:4,stride:4,normalised:!1},unorm8x2:{size:2,stride:2,normalised:!0},unorm8x4:{size:4,stride:4,normalised:!0},snorm8x2:{size:2,stride:2,normalised:!0},snorm8x4:{size:4,stride:4,normalised:!0},uint16x2:{size:2,stride:4,normalised:!1},uint16x4:{size:4,stride:8,normalised:!1},sint16x2:{size:2,stride:4,normalised:!1},sint16x4:{size:4,stride:8,normalised:!1},unorm16x2:{size:2,stride:4,normalised:!0},unorm16x4:{size:4,stride:8,normalised:!0},snorm16x2:{size:2,stride:4,normalised:!0},snorm16x4:{size:4,stride:8,normalised:!0},float16x2:{size:2,stride:4,normalised:!1},float16x4:{size:4,stride:8,normalised:!1},float32:{size:1,stride:4,normalised:!1},float32x2:{size:2,stride:8,normalised:!1},float32x3:{size:3,stride:12,normalised:!1},float32x4:{size:4,stride:16,normalised:!1},uint32:{size:1,stride:4,normalised:!1},uint32x2:{size:2,stride:8,normalised:!1},uint32x3:{size:3,stride:12,normalised:!1},uint32x4:{size:4,stride:16,normalised:!1},sint32:{size:1,stride:4,normalised:!1},sint32x2:{size:2,stride:8,normalised:!1},sint32x3:{size:3,stride:12,normalised:!1},sint32x4:{size:4,stride:16,normalised:!1}};function getAttributeInfoFromFormat(format){return null!=(format=attributeFormatData[format])?format:attributeFormatData.float32}const WGSL_TO_VERTEX_TYPES={f32:"float32","vec2":"float32x2","vec3":"float32x3","vec4":"float32x4",vec2f:"float32x2",vec3f:"float32x3",vec4f:"float32x4",i32:"sint32","vec2":"sint32x2","vec3":"sint32x3","vec4":"sint32x4",u32:"uint32","vec2":"uint32x2","vec3":"uint32x3","vec4":"uint32x4",bool:"uint32","vec2":"uint32x2","vec3":"uint32x3","vec4":"uint32x4"};function extractAttributesFromGpuProgram({source,entryPoint}){var results={};if(-1!==(entryPoint=source.indexOf("fn "+entryPoint))){var arrowFunctionStart=source.indexOf("->",entryPoint);if(-1!==arrowFunctionStart)for(var match,functionArgsSubstring=source.substring(entryPoint,arrowFunctionStart),inputsRegex=/@location\((\d+)\)\s+([a-zA-Z0-9_]+)\s*:\s*([a-zA-Z0-9_<>]+)(?:,|\s|$)/g;null!==(match=inputsRegex.exec(functionArgsSubstring));){var _a=null!=(_a=WGSL_TO_VERTEX_TYPES[match[3]])?_a:"float32";results[match[2]]={location:parseInt(match[1],10),format:_a,stride:getAttributeInfoFromFormat(_a).stride,offset:0,instance:!1,start:0}}}return results}function extractStructAndGroups(wgsl){const groupPattern=/@group\((\d+)\)/,bindingPattern=/@binding\((\d+)\)/,namePattern=/var(<[^>]+>)? (\w+)/,typePattern=/:\s*(\w+)/;var _a;const structMemberPattern=/(\w+)\s*:\s*([\w\<\>]+)/g,structName=/struct\s+(\w+)/,groups=null==(_a=wgsl.match(/(^|[^/])@(group|binding)\(\d+\)[^;]+;/g))?void 0:_a.map(item=>({group:parseInt(item.match(groupPattern)[1],10),binding:parseInt(item.match(bindingPattern)[1],10),name:item.match(namePattern)[2],isUniform:""===item.match(namePattern)[1],type:item.match(typePattern)[1]}));return groups?(_a=null!=(wgsl=null==(_a=wgsl.match(/struct\s+(\w+)\s*{([^}]+)}/g))?void 0:_a.map(struct=>{var name=struct.match(structName)[1];return(struct=struct.match(structMemberPattern).reduce((acc,member)=>{var[member,type]=member.split(":");return acc[member.trim()]=type.trim(),acc},{}))?{name:name,members:struct}:null}).filter(({name})=>groups.some(group=>group.type===name)))?wgsl:[],{groups:groups,structs:_a}):{groups:[],structs:[]}}var ShaderStage=BufferUsage2={VERTEX:1,1:"VERTEX",FRAGMENT:2,2:"FRAGMENT",COMPUTE:4,4:"COMPUTE"};function generateGpuLayoutGroups({groups}){var layout=[];for(let i=0;i!structNameSet.has(struct.name)&&(structNameSet.add(struct.name),!0)),groups:[...vertexStructsAndGroups.groups,...fragmentStructsAndGroups.groups].filter(group=>(group=group.name+"-"+group.binding,!dupeGroupKeySet.has(group)&&(dupeGroupKeySet.add(group),!0)))}}const programCache=Object.create(null);class GpuProgram{constructor(options){this._layoutKey=0,this._attributeLocationsKey=0;var{fragment:options,vertex,layout,gpuLayout,name}=options;this.name=name,this.fragment=options,this.vertex=vertex,options.source===vertex.source?(name=extractStructAndGroups(options.source),this.structsAndGroups=name):(name=extractStructAndGroups(vertex.source),vertex=extractStructAndGroups(options.source),this.structsAndGroups=removeStructAndGroupDuplicates(name,vertex)),this.layout=null!=layout?layout:generateLayoutHash(this.structsAndGroups),this.gpuLayout=null!=gpuLayout?gpuLayout:generateGpuLayoutGroups(this.structsAndGroups),this.autoAssignGlobalUniforms=!(void 0===(null==(options=this.layout[0])?void 0:options.globalUniforms)),this.autoAssignLocalUniforms=!(void 0===(null==(name=this.layout[1])?void 0:name.localUniforms)),this._generateProgramKey()}_generateProgramKey(){var{vertex,fragment}=this,vertex=vertex.source+fragment.source+vertex.entryPoint+fragment.entryPoint;this._layoutKey=createIdFromString(vertex,"program")}get attributeData(){return null==this._attributeData&&(this._attributeData=extractAttributesFromGpuProgram(this.vertex)),this._attributeData}destroy(){this.gpuLayout=null,this.layout=null,this.structsAndGroups=null,this.fragment=null,this.vertex=null}static from(options){var key=`${options.vertex.source}:${options.fragment.source}:${options.fragment.entryPoint}:`+options.vertex.entryPoint;return programCache[key]||(programCache[key]=new GpuProgram(options)),programCache[key]}}function addBits(srcParts,parts,name){if(srcParts)for(const i in srcParts){var part=parts[i.toLocaleLowerCase()];if(part){let sanitisedPart=srcParts[i];"header"===i&&(sanitisedPart=sanitisedPart.replace(/@in\s+[^;]+;\s*/g,"").replace(/@out\s+[^;]+;\s*/g,"")),name&&part.push(`//----${name}----//`),part.push(sanitisedPart)}else warn(i+" placement hook does not exist in shader")}}const findHooksRx=/\{\{(.*?)\}\}/g;function compileHooks(programSrc){const parts={};return(null!=(programSrc=null==(programSrc=programSrc.match(findHooksRx))?void 0:programSrc.map(hook=>hook.replace(/[{()}]/g,"")))?programSrc:[]).forEach(hook=>{parts[hook]=[]}),parts}function extractInputs(fragmentSource,out){for(var match,regex=/@in\s+([^;]+);/g;null!==(match=regex.exec(fragmentSource));)out.push(match[1])}function compileInputs(fragments,template,sort=!1){const results=[];extractInputs(template,results),fragments.forEach(fragment=>{fragment.header&&extractInputs(fragment.header,results)}),fragments=results,sort&&fragments.sort(),sort=fragments.map((inValue,i)=>` @location(${i}) ${inValue},`).join("\n");let cleanedString=template.replace(/@in\s+[^;]+;\s*/g,"");return cleanedString=cleanedString.replace("{{in}}",`
+${sort}
+`)}function extractOutputs(fragmentSource,out){for(var match,regex=/@out\s+([^;]+);/g;null!==(match=regex.exec(fragmentSource));)out.push(match[1])}function compileOutputs(fragments,template){const results=[];extractOutputs(template,results),fragments.forEach(fragment=>{fragment.header&&extractOutputs(fragment.header,results)});let index=0;var fragments=results.sort().map(inValue=>-1` var ${inValue.replace(/@.*?\s+/g,"")};`).join("\n"),mainEnd=`return VSOutput(
+ ${results.sort().map(inValue=>" "+((inValue=/\b(\w+)\s*:/g.exec(inValue))?inValue[1]:"")).join(",\n")});`;let compiledCode=template.replace(/@out\s+[^;]+;\s*/g,"");return compiledCode=(compiledCode=(compiledCode=compiledCode.replace("{{struct}}",`
+${fragments}
+`)).replace("{{start}}",`
+${mainStart}
+`)).replace("{{return}}",`
+${mainEnd}
+`)}function injectBits(templateSrc,fragmentParts){let out=templateSrc;for(const i in fragmentParts){var parts=fragmentParts[i],toInject=parts.join("\n");out=toInject.length?out.replace(`{{${i}}}`,`//-----${i} START-----//
+${parts.join("\n")}
+//----${i} FINISH----//`):out.replace(`{{${i}}}`,"")}return out}const cacheMap=Object.create(null),bitCacheMap=new Map;let CACHE_UID=0;function compileHighShader({template,bits}){var fragment,cacheId=generateCacheId(template,bits);return cacheMap[cacheId]||({vertex:template,fragment}=function(template,bits){var vertexFragments=bits.map(shaderBit=>shaderBit.vertex).filter(v=>!!v),bits=bits.map(shaderBit=>shaderBit.fragment).filter(v=>!!v);return{vertex:compileOutputs(vertexFragments,compileInputs(vertexFragments,template.vertex,!0)),fragment:compileInputs(bits,template.fragment,!0)}}(template,bits),cacheMap[cacheId]=compileBits(template,fragment,bits)),cacheMap[cacheId]}function compileHighShaderGl({template,bits}){var cacheId=generateCacheId(template,bits);return cacheMap[cacheId]||(cacheMap[cacheId]=compileBits(template.vertex,template.fragment,bits)),cacheMap[cacheId]}function generateCacheId(template,bits){return bits.map(highFragment=>(bitCacheMap.has(highFragment)||bitCacheMap.set(highFragment,CACHE_UID++),bitCacheMap.get(highFragment))).sort((a,b)=>a-b).join("-")+template.vertex+template.fragment}function compileBits(vertex,fragment,bits){const vertexParts=compileHooks(vertex),fragmentParts=compileHooks(fragment);return bits.forEach(shaderBit=>{addBits(shaderBit.vertex,vertexParts,shaderBit.name),addBits(shaderBit.fragment,fragmentParts,shaderBit.name)}),{vertex:injectBits(vertex,vertexParts),fragment:injectBits(fragment,fragmentParts)}}const vertexGPUTemplate=`
+ @in aPosition: vec2;
+ @in aUV: vec2;
+
+ @out @builtin(position) vPosition: vec4;
+ @out vUV : vec2;
+ @out vColor : vec4;
+
+ {{header}}
+
+ struct VSOutput {
+ {{struct}}
+ };
+
+ @vertex
+ fn main( {{in}} ) -> VSOutput {
+
+ var worldTransformMatrix = globalUniforms.uWorldTransformMatrix;
+ var modelMatrix = mat3x3(
+ 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0
+ );
+ var position = aPosition;
+ var uv = aUV;
+
+ {{start}}
+
+ vColor = vec4(1., 1., 1., 1.);
+
+ {{main}}
+
+ vUV = uv;
+
+ var modelViewProjectionMatrix = globalUniforms.uProjectionMatrix * worldTransformMatrix * modelMatrix;
+
+ vPosition = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);
+
+ vColor *= globalUniforms.uWorldColorAlpha;
+
+ {{end}}
+
+ {{return}}
+ };
+`,fragmentGPUTemplate=`
+ @in vUV : vec2;
+ @in vColor : vec4;
+
+ {{header}}
+
+ @fragment
+ fn main(
+ {{in}}
+ ) -> @location(0) vec4 {
+
+ {{start}}
+
+ var outColor:vec4;
+
+ {{main}}
+
+ var finalColor:vec4 = outColor * vColor;
+
+ {{end}}
+
+ return finalColor;
+ };
+`,vertexGlTemplate=`
+ in vec2 aPosition;
+ in vec2 aUV;
+
+ out vec4 vColor;
+ out vec2 vUV;
+
+ {{header}}
+
+ void main(void){
+
+ mat3 worldTransformMatrix = uWorldTransformMatrix;
+ mat3 modelMatrix = mat3(
+ 1.0, 0.0, 0.0,
+ 0.0, 1.0, 0.0,
+ 0.0, 0.0, 1.0
+ );
+ vec2 position = aPosition;
+ vec2 uv = aUV;
+
+ {{start}}
+
+ vColor = vec4(1.);
+
+ {{main}}
+
+ vUV = uv;
+
+ mat3 modelViewProjectionMatrix = uProjectionMatrix * worldTransformMatrix * modelMatrix;
+
+ gl_Position = vec4((modelViewProjectionMatrix * vec3(position, 1.0)).xy, 0.0, 1.0);
+
+ vColor *= uWorldColorAlpha;
+
+ {{end}}
+ }
+`,fragmentGlTemplate=`
+
+ in vec4 vColor;
+ in vec2 vUV;
+
+ out vec4 finalColor;
+
+ {{header}}
+
+ void main(void) {
+
+ {{start}}
+
+ vec4 outColor;
+
+ {{main}}
+
+ finalColor = outColor * vColor;
+
+ {{end}}
+ }
+`,globalUniformsBit={name:"global-uniforms-bit",vertex:{header:`
+ struct GlobalUniforms {
+ uProjectionMatrix:mat3x3,
+ uWorldTransformMatrix:mat3x3,
+ uWorldColorAlpha: vec4,
+ uResolution: vec2,
+ }
+
+ @group(0) @binding(0) var globalUniforms : GlobalUniforms;
+ `}};var BufferUsage2={name:"global-uniforms-ubo-bit",vertex:{header:`
+ uniform globalUniforms {
+ mat3 uProjectionMatrix;
+ mat3 uWorldTransformMatrix;
+ vec4 uWorldColorAlpha;
+ vec2 uResolution;
+ };
+ `}};const globalUniformsBitGl={name:"global-uniforms-bit",vertex:{header:`
+ uniform mat3 uProjectionMatrix;
+ uniform mat3 uWorldTransformMatrix;
+ uniform vec4 uWorldColorAlpha;
+ uniform vec2 uResolution;
+ `}};var __defProp$_=Object.defineProperty,__getOwnPropSymbols$_=Object.getOwnPropertySymbols,__hasOwnProp$_=Object.prototype.hasOwnProperty,__propIsEnum$_=Object.prototype.propertyIsEnumerable,__defNormalProp$_=(obj,key,value)=>key in obj?__defProp$_(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;function compileHighShaderGpuProgram({bits,name}){return bits=compileHighShader({template:{fragment:fragmentGPUTemplate,vertex:vertexGPUTemplate},bits:[globalUniformsBit,...bits]}),GpuProgram.from({name:name,vertex:{source:bits.vertex,entryPoint:"main"},fragment:{source:bits.fragment,entryPoint:"main"}})}function compileHighShaderGlProgram({bits,name}){return new GlProgram(((a,b)=>{for(var prop in b=compileHighShaderGl({template:{vertex:vertexGlTemplate,fragment:fragmentGlTemplate},bits:[globalUniformsBitGl,...bits]})||{})__hasOwnProp$_.call(b,prop)&&__defNormalProp$_(a,prop,b[prop]);if(__getOwnPropSymbols$_)for(var prop of __getOwnPropSymbols$_(b))__propIsEnum$_.call(b,prop)&&__defNormalProp$_(a,prop,b[prop]);return a})({name:name}))}const colorBit={name:"color-bit",vertex:{header:`
+ @in aColor: vec4;
+ `,main:`
+ vColor *= vec4(aColor.rgb * aColor.a, aColor.a);
+ `}},colorBitGl={name:"color-bit",vertex:{header:`
+ in vec4 aColor;
+ `,main:`
+ vColor *= vec4(aColor.rgb * aColor.a, aColor.a);
+ `}},textureBatchBitGpuCache={};function generateTextureBatchBit(maxTextures){return textureBatchBitGpuCache[maxTextures]||(textureBatchBitGpuCache[maxTextures]={name:"texture-batch-bit",vertex:{header:`
+ @in aTextureIdAndRound: vec2;
+ @out @interpolate(flat) vTextureId : u32;
+ `,main:`
+ vTextureId = aTextureIdAndRound.y;
+ `,end:`
+ if(aTextureIdAndRound.x == 1)
+ {
+ vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
+ }
+ `},fragment:{header:`
+ @in @interpolate(flat) vTextureId: u32;
+
+ ${function(maxTextures){var src=[];if(1===maxTextures)src.push("@group(1) @binding(0) var textureSource1: texture_2d;"),src.push("@group(1) @binding(1) var textureSampler1: sampler;");else{let bindingIndex=0;for(let i=0;i;`),src.push(`@group(1) @binding(${bindingIndex++}) var textureSampler${i+1}: sampler;`)}return src.join("\n")}(maxTextures)}
+ `,main:`
+ var uvDx = dpdx(vUV);
+ var uvDy = dpdy(vUV);
+
+ ${function(maxTextures){var src=[];if(1===maxTextures)src.push("outColor = textureSampleGrad(textureSource1, textureSampler1, vUV, uvDx, uvDy);");else{src.push("switch vTextureId {");for(let i=0;i, targetSize: vec2) -> vec2
+ {
+ return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;
+ }
+ `}},roundPixelsBitGl={name:"round-pixels-bit",vertex:{header:`
+ vec2 roundPixels(vec2 position, vec2 targetSize)
+ {
+ return (floor(((position * 0.5 + 0.5) * targetSize) + 0.5) / targetSize) * 2.0 - 1.0;
+ }
+ `}},UNIFORM_TYPES_VALUES=["f32","i32","vec2","vec3","vec4","mat2x2","mat3x3","mat4x4","mat3x2","mat4x2","mat2x3","mat4x3","mat2x4","mat3x4","vec2","vec3","vec4"],UNIFORM_TYPES_MAP=UNIFORM_TYPES_VALUES.reduce((acc,type)=>(acc[type]=!0,acc),{});function getDefaultUniformValue(type,size){switch(type){case"f32":return 0;case"vec2":return new Float32Array(2*size);case"vec3":return new Float32Array(3*size);case"vec4":return new Float32Array(4*size);case"mat2x2":return new Float32Array([1,0,0,1]);case"mat3x3":return new Float32Array([1,0,0,0,1,0,0,0,1]);case"mat4x4":return new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}return null}var __defProp$Z=Object.defineProperty,__getOwnPropSymbols$Z=Object.getOwnPropertySymbols,__hasOwnProp$Z=Object.prototype.hasOwnProperty,__propIsEnum$Z=Object.prototype.propertyIsEnumerable,__defNormalProp$Z=(obj,key,value)=>key in obj?__defProp$Z(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$Z=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$Z.call(b,prop)&&__defNormalProp$Z(a,prop,b[prop]);if(__getOwnPropSymbols$Z)for(var prop of __getOwnPropSymbols$Z(b))__propIsEnum$Z.call(b,prop)&&__defNormalProp$Z(a,prop,b[prop]);return a};const _UniformGroup=class _UniformGroup{constructor(uniformStructures,options){this._touched=0,this.uid=uid$1("uniform"),this._resourceType="uniformGroup",this._resourceId=uid$1("resource"),this.isUniformGroup=!0,this._dirtyId=0,this.destroyed=!1,options=__spreadValues$Z(__spreadValues$Z({},_UniformGroup.defaultOptions),options);var _a,uniforms={};for(const i in this.uniformStructures=uniformStructures){var uniformData=uniformStructures[i];if(uniformData.name=i,uniformData.size=null!=(_a=uniformData.size)?_a:1,!UNIFORM_TYPES_MAP[uniformData.type])throw new Error(`Uniform type ${uniformData.type} is not supported. Supported uniform types are: `+UNIFORM_TYPES_VALUES.join(", "));null==uniformData.value&&(uniformData.value=getDefaultUniformValue(uniformData.type,uniformData.size)),uniforms[i]=uniformData.value}this.uniforms=uniforms,this._dirtyId=1,this.ubo=options.ubo,this.isStatic=options.isStatic,this._signature=createIdFromString(Object.keys(uniforms).map(i=>i+"-"+uniformStructures[i].type).join("-"),"uniform-group")}update(){this._dirtyId++}};_UniformGroup.defaultOptions={ubo:!1,isStatic:!1};let UniformGroup=_UniformGroup;const batchSamplersUniformGroupHash={};function getBatchSamplersUniformGroup(maxTextures){var batchSamplersUniformGroup=batchSamplersUniformGroupHash[maxTextures];if(!batchSamplersUniformGroup){var sampleValues=new Int32Array(maxTextures);for(let i=0;ikey in obj?__defProp$Y(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;class Shader extends EventEmitter{constructor(options){super(),this.uid=uid$1("shader"),this._uniformBindMap=Object.create(null),this._ownedBindGroups=[];let{gpuProgram,glProgram,groups,resources,compatibleRenderers,groupMap}=options;this.gpuProgram=gpuProgram,this.glProgram=glProgram,void 0===compatibleRenderers&&(compatibleRenderers=0,gpuProgram&&(compatibleRenderers|=RendererType.WEBGPU),glProgram)&&(compatibleRenderers|=RendererType.WEBGL),this.compatibleRenderers=compatibleRenderers;const nameHash={};if((resources=resources||groups?resources:{})&&groups)throw new Error("[Shader] Cannot have both resources and groups");if(!gpuProgram&&groups&&!groupMap)throw new Error("[Shader] No group map or WebGPU shader provided - consider using resources instead.");if(!gpuProgram&&groups&&groupMap)for(const i in groupMap)for(const j in groupMap[i]){var uniformName=groupMap[i][j];nameHash[uniformName]={group:i,binding:j,name:uniformName}}else if(gpuProgram&&groups&&!groupMap)options=gpuProgram.structsAndGroups.groups,groupMap={},options.forEach(data=>{groupMap[data.group]=groupMap[data.group]||{},groupMap[data.group][data.binding]=data.name,nameHash[data.name]=data});else if(resources){groups={},groupMap={},gpuProgram&&gpuProgram.structsAndGroups.groups.forEach(data=>{groupMap[data.group]=groupMap[data.group]||{},groupMap[data.group][data.binding]=data.name,nameHash[data.name]=data});let bindTick=0;for(const i in resources)nameHash[i]||(groups[99]||(groups[99]=new BindGroup,this._ownedBindGroups.push(groups[99])),nameHash[i]={group:99,binding:bindTick,name:i},groupMap[99]=groupMap[99]||{},groupMap[99][bindTick]=i,bindTick++);for(const i in resources){var name=i;let value=resources[i];value.source||value._resourceType||(value=new UniformGroup(value)),(name=nameHash[name])&&(groups[name.group]||(groups[name.group]=new BindGroup,this._ownedBindGroups.push(groups[name.group])),groups[name.group].setResource(value,name.binding))}}this.groups=groups,this._uniformBindMap=groupMap,this.resources=this._buildResourceAccessor(groups,nameHash)}addResource(name,groupIndex,bindIndex){var _a;(_a=this._uniformBindMap)[groupIndex]||(_a[groupIndex]={}),(_a=this._uniformBindMap[groupIndex])[bindIndex]||(_a[bindIndex]=name),this.groups[groupIndex]||(this.groups[groupIndex]=new BindGroup,this._ownedBindGroups.push(this.groups[groupIndex]))}_buildResourceAccessor(groups,nameHash){var uniformsOut={};for(const i in nameHash){const data=nameHash[i];Object.defineProperty(uniformsOut,data.name,{get(){return groups[data.group].getResource(data.binding)},set(value){groups[data.group].setResource(value,data.binding)}})}return uniformsOut}destroy(destroyPrograms=!1){this.emit("destroy",this),destroyPrograms&&(null!=(destroyPrograms=this.gpuProgram)&&destroyPrograms.destroy(),null!=(destroyPrograms=this.glProgram))&&destroyPrograms.destroy(),this.gpuProgram=null,this.glProgram=null,this.removeAllListeners(),this._uniformBindMap=null,this._ownedBindGroups.forEach(bindGroup=>{bindGroup.destroy()}),this._ownedBindGroups=null,this.resources=null,this.groups=null}static from(options){var{gpu,gl}=options,options=((source,exclude)=>{var target={};for(prop in source)__hasOwnProp$Y.call(source,prop)&&exclude.indexOf(prop)<0&&(target[prop]=source[prop]);if(null!=source&&__getOwnPropSymbols$Y)for(var prop of __getOwnPropSymbols$Y(source))exclude.indexOf(prop)<0&&__propIsEnum$Y.call(source,prop)&&(target[prop]=source[prop]);return target})(options,["gpu","gl"]);let gpuProgram,glProgram;return gpu&&(gpuProgram=GpuProgram.from(gpu)),gl&&(glProgram=GlProgram.from(gl)),new Shader(((a,b)=>{for(var prop in b=options||{})__hasOwnProp$Y.call(b,prop)&&__defNormalProp$Y(a,prop,b[prop]);if(__getOwnPropSymbols$Y)for(var prop of __getOwnPropSymbols$Y(b))__propIsEnum$Y.call(b,prop)&&__defNormalProp$Y(a,prop,b[prop]);return a})({gpuProgram:gpuProgram,glProgram:glProgram}))}}class DefaultShader extends Shader{constructor(maxTextures){super({glProgram:compileHighShaderGlProgram({name:"batch",bits:[colorBitGl,generateTextureBatchBitGl(maxTextures),roundPixelsBitGl]}),gpuProgram:compileHighShaderGpuProgram({name:"batch",bits:[colorBit,generateTextureBatchBit(maxTextures),roundPixelsBit]}),resources:{batchSamplers:getBatchSamplersUniformGroup(maxTextures)}})}}let defaultShader=null;const _DefaultBatcher=class _DefaultBatcher extends STENCIL_MODES2{constructor(){super(...arguments),this.geometry=new BatchGeometry,this.shader=defaultShader=defaultShader||new DefaultShader(this.maxTextures),this.name=_DefaultBatcher.extension.name,this.vertexSize=6}packAttributes(element,float32View,uint32View,index,textureId){var textureIdAndRound=textureId<<16|65535&element.roundPixels,a=(textureId=element.transform).a,b=textureId.b,c=textureId.c,d=textureId.d,tx=textureId.tx,ty=textureId.ty,{positions,uvs}=element,argb=element.color,end=(textureId=element.attributeOffset)+element.attributeSize;for(let i=textureId;i>16|65280&rgb|(255&rgb)<<16,renderable=this.renderable;return renderable?multiplyHexColors(rgb,renderable.groupColor)+(this.alpha*renderable.groupAlpha*255<<24):rgb+(255*this.alpha<<24)}get transform(){var _a;return(null==(_a=this.renderable)?void 0:_a.groupTransform)||identityMatrix}copyTo(gpuBuffer){gpuBuffer.indexOffset=this.indexOffset,gpuBuffer.indexSize=this.indexSize,gpuBuffer.attributeOffset=this.attributeOffset,gpuBuffer.attributeSize=this.attributeSize,gpuBuffer.baseColor=this.baseColor,gpuBuffer.alpha=this.alpha,gpuBuffer.texture=this.texture,gpuBuffer.geometryData=this.geometryData,gpuBuffer.topology=this.topology}reset(){this.applyTransform=!0,this.renderable=null,this.topology="triangle-list"}}var __defProp$X=Object.defineProperty,__defProps$n=Object.defineProperties,__getOwnPropDescs$n=Object.getOwnPropertyDescriptors,__getOwnPropSymbols$X=Object.getOwnPropertySymbols,__hasOwnProp$X=Object.prototype.hasOwnProperty,__propIsEnum$X=Object.prototype.propertyIsEnumerable,__defNormalProp$X=(obj,key,value)=>key in obj?__defProp$X(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,RendererType2=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$X.call(b,prop)&&__defNormalProp$X(a,prop,b[prop]);if(__getOwnPropSymbols$X)for(var prop of __getOwnPropSymbols$X(b))__propIsEnum$X.call(b,prop)&&__defNormalProp$X(a,prop,b[prop]);return a},buildCircle={extension:{type:ExtensionType2.ShapeBuilder,name:"circle"},build(shape,points){let x,y,dx,dy,rx,ry;if("circle"===shape.type?(x=shape.x,y=shape.y,rx=ry=shape.radius,dx=dy=0):"ellipse"===shape.type?(x=shape.x,y=shape.y,rx=shape.halfWidth,ry=shape.halfHeight,dx=dy=0):(halfWidth=shape.width/2,halfHeight=shape.height/2,x=shape.x+halfWidth,y=shape.y+halfHeight,rx=ry=Math.max(0,Math.min(shape.radius,Math.min(halfWidth,halfHeight))),dx=halfWidth-rx,dy=halfHeight-ry),0<=rx&&0<=ry&&0<=dx&&0<=dy){var n=Math.ceil(2.3*Math.sqrt(rx+ry));if(0!=(shape=8*n+(dx?4:0)+(dy?4:0)))if(0===n)points[0]=points[6]=x+dx,points[1]=points[3]=y+dy,points[2]=points[4]=x-dx,points[5]=points[7]=y-dy;else{let j1=0,j2=4*n+(dx?2:0)+2,j3=j2,j4=shape;var halfWidth=dx+rx,halfHeight=dy,shape=x+halfWidth,x2=x-halfWidth,y1=y+halfHeight;points[j1++]=shape,points[j1++]=y1,points[--j2]=y1,points[--j2]=x2,dy&&(y22=y-halfHeight,points[j3++]=x2,points[j3++]=y22,points[--j4]=y22,points[--j4]=shape);for(let i=1;i__defProps$n(a,__getOwnPropDescs$n(b)))(RendererType2({},buildCircle),{extension:__spreadProps$n(RendererType2({},buildCircle.extension),{name:"ellipse"})}),__spreadProps$n=__spreadProps$n(RendererType2({},buildCircle),{extension:__spreadProps$n(RendererType2({},buildCircle.extension),{name:"roundedRectangle"})});const closePointEps=1e-4,curveEps=1e-4;function getOrientationOfPoints(points){var m=points.length;if(m<6)return 1;let area=0;for(let i=0,x1=points[m-2],y1=points[m-1];iangle1&&(angle1+=2*Math.PI);var startAngle=angle0,angleDiff=angle1-angle0,absAngleDiff=Math.abs(angleDiff),radius=Math.sqrt(cx2p0x*cx2p0x+cy2p0y*cy2p0y),segCount=1+(15*absAngleDiff*Math.sqrt(radius)/Math.PI>>0),angleInc=angleDiff/segCount;if(startAngle+=angleInc,clockwise){verts.push(cx,cy),verts.push(sx,sy);for(let i=1,angle=startAngle;i=p.next.y&&p.next.y!==p.y){var x=p.x+(hy-p.y)*(p.next.x-p.x)/(p.next.y-p.y);if(x<=hx&&qx=p.x&&p.x>=mx&&hx!==p.x&&pointInTriangle$1(hym.x||p.x===m.x&&function(m,p){return area(m.prev,m,p.prev)<0&&area(p.next,m,m.next)<0}(m,p)))&&(m=p,tanMin=tan),(p=p.next)!==stop;);return m}(hole,outerNode);return bridge?(filterPoints(hole=splitPolygon(bridge,hole),hole.next),filterPoints(bridge,bridge.next)):outerNode}(queue[i],outerNode);return outerNode}(data,holeIndices,outerNode,dim)),data.length>80*dim){for(var minX=maxX=data[0],minY=maxY=data[1],i=dim;i=minZ&&n&&n.z<=maxZ;){if(p.x>=x0&&p.x<=x1&&p.y>=y0&&p.y<=y1&&p!==a&&p!==c&&pointInTriangle$1(ax,ay,bx,by,cx,cy,p.x,p.y)&&0<=area(p.prev,p,p.next))return;if(p=p.prevZ,n.x>=x0&&n.x<=x1&&n.y>=y0&&n.y<=y1&&n!==a&&n!==c&&pointInTriangle$1(ax,ay,bx,by,cx,cy,n.x,n.y)&&0<=area(n.prev,n,n.next))return;n=n.nextZ}for(;p&&p.z>=minZ;){if(p.x>=x0&&p.x<=x1&&p.y>=y0&&p.y<=y1&&p!==a&&p!==c&&pointInTriangle$1(ax,ay,bx,by,cx,cy,p.x,p.y)&&0<=area(p.prev,p,p.next))return;p=p.prevZ}for(;n&&n.z<=maxZ;){if(n.x>=x0&&n.x<=x1&&n.y>=y0&&n.y<=y1&&n!==a&&n!==c&&pointInTriangle$1(ax,ay,bx,by,cx,cy,n.x,n.y)&&0<=area(n.prev,n,n.next))return;n=n.nextZ}return 1}}(ear,minX,minY,invSize):function(ear){var a=ear.prev,b=ear;if(!(0<=area(a,b,ear=ear.next))){for(var ax=a.x,bx=b.x,cx=ear.x,ay=a.y,by=b.y,cy=ear.y,x0=ax=x0&&p.x<=x1&&p.y>=y0&&p.y<=y1&&pointInTriangle$1(ax,ay,bx,by,cx,cy,p.x,p.y)&&0<=area(p.prev,p,p.next))return;p=p.next}return 1}}(ear))triangles.push(prev.i/dim|0),triangles.push(ear.i/dim|0),triangles.push(next.i/dim|0),removeNode(ear),ear=next.next,stop=next.next;else if((ear=next)===stop){pass?1===pass?earcutLinked(ear=function(start,triangles,dim){var p=start;do{var a=p.prev,b=p.next.next}while(!equals(a,b)&&intersects(a,p,p.next,b)&&locallyInside(a,b)&&locallyInside(b,a)&&(triangles.push(a.i/dim|0),triangles.push(p.i/dim|0),triangles.push(b.i/dim|0),removeNode(p),removeNode(p.next),p=start=b),(p=p.next)!==start);return filterPoints(p)}(filterPoints(ear),triangles,dim),triangles,dim,minX,minY,invSize,2):2===pass&&function(start,triangles,dim,minX,minY,invSize){var a=start;do{for(var c,b=a.next.next;b!==a.prev;){if(a.i!==b.i&&function(a,b){return a.next.i!==b.i&&a.prev.i!==b.i&&!function(a,b){var p=a;do{if(p.i!==a.i&&p.next.i!==a.i&&p.i!==b.i&&p.next.i!==b.i&&intersects(p,p.next,a,b))return 1}while((p=p.next)!==a)}(a,b)&&(locallyInside(a,b)&&locallyInside(b,a)&&function(a,b){for(var p=a,inside=!1,px=(a.x+b.x)/2,py=(a.y+b.y)/2;p.y>py!=p.next.y>py&&p.next.y!==p.y&&px<(p.next.x-p.x)*(py-p.y)/(p.next.y-p.y)+p.x&&(inside=!inside),(p=p.next)!==a;);return inside}(a,b)&&(area(a.prev,a,b.prev)||area(a,b.prev,b))||equals(a,b)&&0=Math.min(p.x,r.x)&&q.y<=Math.max(p.y,r.y)&&q.y>=Math.min(p.y,r.y)}function sign(num){return 0{var indexOffset=indices.length,vertOffset=vertices.length/2,points=[],build=shapeBuilders[shape.type];let topology="triangle-list";if(build.build(shape,points),matrix&&transformVertices(points,matrix),isStroke){var _a=null==(_a=shape.closePath)||_a,lineStyle=style;lineStyle.pixelLine?(buildPixelLine(points,_a,vertices,indices),topology="line-list"):buildLine(points,lineStyle,!1,_a,vertices,indices)}else if(holes){const holeIndices=[],otherPoints=points.slice();(function(holePrimitives){var holeArrays=[];for(let k=0;k{holeIndices.push(otherPoints.length/2),otherPoints.push(...holePoints)}),triangulateWithHoles(otherPoints,holeIndices,vertices,2,vertOffset,indices,indexOffset)}else build.triangulate(points,vertices,2,vertOffset,indices,indexOffset);lineStyle=uvs.length/2,(_a=style.texture)!==Texture.WHITE?(holes=generateTextureMatrix(tempTextureMatrix,style,shape,matrix),buildUvs(vertices,2,vertOffset,uvs,lineStyle,2,vertices.length/2-vertOffset,holes)):buildSimpleUvs(uvs,lineStyle,2,vertices.length/2-vertOffset),(build=BigPool.get(BatchableGraphics)).indexOffset=indexOffset,build.indexSize=indices.length-indexOffset,build.attributeOffset=vertOffset,build.attributeSize=vertices.length/2-vertOffset,build.baseColor=style.color,build.alpha=style.alpha,build.texture=_a,build.geometryData=geometryData,build.topology=topology,batches.push(build)})}class GpuGraphicsContext{constructor(){this.batches=[],this.geometryData={vertices:[],uvs:[],indices:[]}}}class GraphicsContextRenderData{constructor(){this.batcher=new DefaultBatcher,this.instructions=new InstructionSet}init(){this.instructions.reset()}get geometry(){return deprecation("8.3.4","GraphicsContextRenderData#geometry is deprecated, please use batcher.geometry instead."),this.batcher.geometry}}const _GraphicsContextSystem=class _GraphicsContextSystem{constructor(renderer){this._gpuContextHash={},this._graphicsDataContextHash=Object.create(null),renderer.renderableGC.addManagedHash(this,"_gpuContextHash"),renderer.renderableGC.addManagedHash(this,"_graphicsDataContextHash")}init(options){_GraphicsContextSystem.defaultOptions.bezierSmoothness=null!=(options=null==options?void 0:options.bezierSmoothness)?options:_GraphicsContextSystem.defaultOptions.bezierSmoothness}getContextRenderData(context){return this._graphicsDataContextHash[context.uid]||this._initContextRenderData(context)}updateGpuContext(context){let gpuContext=this._gpuContextHash[context.uid]||this._initContext(context);var batchMode;return context.dirty&&(gpuContext?this._cleanGraphicsContextData(context):gpuContext=this._initContext(context),buildContextBatches(context,gpuContext),batchMode=context.batchMode,context.customShader||"no-batch"===batchMode?gpuContext.isBatchable=!1:"auto"===batchMode&&(gpuContext.isBatchable=gpuContext.geometryData.vertices.length<400),context.dirty=!1),gpuContext}getGpuContext(context){return this._gpuContextHash[context.uid]||this._initContext(context)}_initContextRenderData(context){var graphicsData=BigPool.get(GraphicsContextRenderData),{batches,geometryData}=this._gpuContextHash[context.uid],vertexSize=geometryData.vertices.length,geometryData=geometryData.indices.length;for(let i=0;i{BigPool.return(batch)})}destroy(){for(const i in this._gpuContextHash)this._gpuContextHash[i]&&this.onGraphicsContextDestroy(this._gpuContextHash[i].context)}};_GraphicsContextSystem.extension={type:[ExtensionType2.WebGLSystem,ExtensionType2.WebGPUSystem,ExtensionType2.CanvasSystem],name:"graphicsContext"},_GraphicsContextSystem.defaultOptions={bezierSmoothness:.5};let GraphicsContextSystem=_GraphicsContextSystem;const blendModeIds={normal:0,add:1,multiply:2,screen:3,overlay:4,erase:5,"normal-npm":6,"add-npm":7,"screen-npm":8,min:9,max:10},_State=class _State{constructor(){this.data=0,this.blendMode="normal",this.polygonOffset=0,this.blend=!0,this.depthMask=!0}get blend(){return!!(1&this.data)}set blend(value){!!(1&this.data)!==value&&(this.data^=1)}get offsets(){return!!(2&this.data)}set offsets(value){!!(2&this.data)!==value&&(this.data^=2)}set cullMode(value){"none"===value?this.culling=!1:(this.culling=!0,this.clockwiseFrontFace="front"===value)}get cullMode(){return this.culling?this.clockwiseFrontFace?"front":"back":"none"}get culling(){return!!(4&this.data)}set culling(value){!!(4&this.data)!==value&&(this.data^=4)}get depthTest(){return!!(8&this.data)}set depthTest(value){!!(8&this.data)!==value&&(this.data^=8)}get depthMask(){return!!(32&this.data)}set depthMask(value){!!(32&this.data)!==value&&(this.data^=32)}get clockwiseFrontFace(){return!!(16&this.data)}set clockwiseFrontFace(value){!!(16&this.data)!==value&&(this.data^=16)}get blendMode(){return this._blendMode}set blendMode(value){this.blend="none"!==value,this._blendMode=value,this._blendModeId=blendModeIds[value]||0}get polygonOffset(){return this._polygonOffset}set polygonOffset(value){this.offsets=!!value,this._polygonOffset=value}toString(){return`[pixi.js/core:State blendMode=${this.blendMode} clockwiseFrontFace=${this.clockwiseFrontFace} culling=${this.culling} depthMask=${this.depthMask} polygonOffset=${this.polygonOffset}]`}static for2d(){var state=new _State;return state.depthTest=!1,state.blend=!0,state}};_State.default2d=_State.for2d();let State=_State;function color32BitToUniform(abgr,out,offset){var alpha=(abgr>>24&255)/255;out[offset++]=(255&abgr)/255*alpha,out[offset++]=(abgr>>8&255)/255*alpha,out[offset++]=(abgr>>16&255)/255*alpha,out[offset++]=alpha}class GraphicsPipe{constructor(renderer,adaptor){this.state=State.for2d(),this._graphicsBatchesHash=Object.create(null),this._destroyRenderableBound=this.destroyRenderable.bind(this),this.renderer=renderer,this._adaptor=adaptor,this._adaptor.init(),this.renderer.renderableGC.addManagedHash(this,"_graphicsBatchesHash")}validateRenderable(graphics){var context=graphics.context,graphics=!!this._graphicsBatchesHash[graphics.uid];return!(!(context=this.renderer.graphicsContext.updateGpuContext(context)).isBatchable&&graphics===context.isBatchable)}addRenderable(graphics,instructionSet){var gpuContext=this.renderer.graphicsContext.updateGpuContext(graphics.context);graphics.didViewUpdate&&this._rebuild(graphics),gpuContext.isBatchable?this._addToBatcher(graphics,instructionSet):(this.renderer.renderPipes.batch.break(instructionSet),instructionSet.add(graphics))}updateRenderable(graphics){var batches=this._graphicsBatchesHash[graphics.uid];if(batches)for(let i=0;i{var batchClone=BigPool.get(BatchableGraphics);return batch.copyTo(batchClone),batchClone.renderable=graphics,batchClone.roundPixels=roundPixels,batchClone}),void 0===this._graphicsBatchesHash[graphics.uid]&&graphics.on("destroyed",this._destroyRenderableBound),this._graphicsBatchesHash[graphics.uid]=context}_removeBatchForRenderable(graphicsUid){this._graphicsBatchesHash[graphicsUid].forEach(batch=>{BigPool.return(batch)}),this._graphicsBatchesHash[graphicsUid]=null}destroy(){this.renderer=null,this._adaptor.destroy(),this._adaptor=null,this.state=null;for(const i in this._graphicsBatchesHash)this._removeBatchForRenderable(i);this._graphicsBatchesHash=null}}GraphicsPipe.extension={type:[ExtensionType2.WebGLPipes,ExtensionType2.WebGPUPipes,ExtensionType2.CanvasPipes],name:"graphics"},extensions.add(GraphicsPipe),extensions.add(GraphicsContextSystem);class BatchableMesh{constructor(){this.batcherName="default",this.packAsQuad=!1,this.indexOffset=0,this.attributeOffset=0,this.roundPixels=0,this._batcher=null,this._batch=null,this._textureMatrixUpdateId=-1,this._uvUpdateId=-1}get blendMode(){return this.renderable.groupBlendMode}get topology(){return this._topology||this.geometry.topology}set topology(value){this._topology=value}reset(){this.renderable=null,this.texture=null,this._batcher=null,this._batch=null,this.geometry=null,this._uvUpdateId=-1,this._textureMatrixUpdateId=-1}setTexture(value){this.texture!==value&&(this.texture=value,this._textureMatrixUpdateId=-1)}get uvs(){var uvBuffer=this.geometry.getBuffer("aUV"),uvs=uvBuffer.data;let transformedUvs=uvs;var textureMatrix=this.texture.textureMatrix;return textureMatrix.isSimple||(transformedUvs=this._transformedUvs,this._textureMatrixUpdateId===textureMatrix._updateID&&this._uvUpdateId===uvBuffer._updateID)||((!transformedUvs||transformedUvs.length"},uColor:{value:new Float32Array([1,1,1,1]),type:"vec4"},uRound:{value:0,type:"f32"}}),this.localUniformsBindGroup=new BindGroup({0:this.localUniforms}),this._meshDataHash=Object.create(null),this._gpuBatchableMeshHash=Object.create(null),this._destroyRenderableBound=this.destroyRenderable.bind(this),this.renderer=renderer,this._adaptor=adaptor,this._adaptor.init(),renderer.renderableGC.addManagedHash(this,"_gpuBatchableMeshHash"),renderer.renderableGC.addManagedHash(this,"_meshDataHash")}validateRenderable(mesh){var meshData=this._getMeshData(mesh),wasBatched=meshData.batched,isBatched=mesh.batched;return wasBatched!==(meshData.batched=isBatched)||!!isBatched&&((wasBatched=mesh._geometry).indices.length!==meshData.indexSize||wasBatched.positions.length!==meshData.vertexSize?(meshData.indexSize=wasBatched.indices.length,meshData.vertexSize=wasBatched.positions.length,!0):((isBatched=this._getBatchableMesh(mesh)).texture.uid!==mesh._texture.uid&&(isBatched._textureMatrixUpdateId=-1),!isBatched._batcher.checkAndUpdateTexture(isBatched,mesh._texture)))}addRenderable(mesh,instructionSet){var batcher=this.renderer.renderPipes.batch,batched=this._getMeshData(mesh).batched;batched?((batched=this._getBatchableMesh(mesh)).setTexture(mesh._texture),batched.geometry=mesh._geometry,batcher.addToBatch(batched,instructionSet)):(batcher.break(instructionSet),instructionSet.add(mesh))}updateRenderable(mesh){var gpuBatchableMesh;mesh.batched&&((gpuBatchableMesh=this._gpuBatchableMeshHash[mesh.uid]).setTexture(mesh._texture),gpuBatchableMesh.geometry=mesh._geometry,gpuBatchableMesh._batcher.updateElement(gpuBatchableMesh))}destroyRenderable(mesh){this._meshDataHash[mesh.uid]=null;var gpuMesh=this._gpuBatchableMeshHash[mesh.uid];gpuMesh&&(BigPool.return(gpuMesh),this._gpuBatchableMeshHash[mesh.uid]=null),mesh.off("destroyed",this._destroyRenderableBound)}execute(mesh){var localUniforms;mesh.isRenderable&&(mesh.state.blendMode=getAdjustedBlendModeBlend(mesh.groupBlendMode,mesh.texture._source),(localUniforms=this.localUniforms).uniforms.uTransformMatrix=mesh.groupTransform,localUniforms.uniforms.uRound=this.renderer._roundPixels|mesh._roundPixels,localUniforms.update(),color32BitToUniform(mesh.groupColorAlpha,localUniforms.uniforms.uColor,0),this._adaptor.execute(this,mesh))}_getMeshData(mesh){return this._meshDataHash[mesh.uid]||this._initMeshData(mesh)}_initMeshData(mesh){var _a;return this._meshDataHash[mesh.uid]={batched:mesh.batched,indexSize:null==(_a=mesh._geometry.indices)?void 0:_a.length,vertexSize:null==(_a=mesh._geometry.positions)?void 0:_a.length},mesh.on("destroyed",this._destroyRenderableBound),this._meshDataHash[mesh.uid]}_getBatchableMesh(mesh){return this._gpuBatchableMeshHash[mesh.uid]||this._initBatchableMesh(mesh)}_initBatchableMesh(mesh){var gpuMesh=BigPool.get(BatchableMesh);return gpuMesh.renderable=mesh,gpuMesh.setTexture(mesh._texture),gpuMesh.transform=mesh.groupTransform,gpuMesh.roundPixels=this.renderer._roundPixels|mesh._roundPixels,this._gpuBatchableMeshHash[mesh.uid]=gpuMesh}destroy(){for(const i in this._gpuBatchableMeshHash)this._gpuBatchableMeshHash[i]&&BigPool.return(this._gpuBatchableMeshHash[i]);this._gpuBatchableMeshHash=null,this._meshDataHash=null,this.localUniforms=null,this.localUniformsBindGroup=null,this._adaptor.destroy(),this._adaptor=null,this.renderer=null}}MeshPipe.extension={type:[ExtensionType2.WebGLPipes,ExtensionType2.WebGPUPipes,ExtensionType2.CanvasPipes],name:"mesh"},extensions.add(MeshPipe);class GlParticleContainerAdaptor{execute(particleContainerPipe,container){var state=particleContainerPipe.state,renderer=particleContainerPipe.renderer,shader=container.shader||particleContainerPipe.defaultShader,gl=(shader.resources.uTexture=container.texture._source,shader.resources.uniforms=particleContainerPipe.localUniforms,renderer.gl),particleContainerPipe=particleContainerPipe.getBuffers(container);renderer.shader.bind(shader),renderer.state.set(state),renderer.geometry.bind(particleContainerPipe.geometry,shader.glProgram),renderer=2===particleContainerPipe.geometry.indexBuffer.data.BYTES_PER_ELEMENT?gl.UNSIGNED_SHORT:gl.UNSIGNED_INT,gl.drawElements(gl.TRIANGLES,6*container.particleChildren.length,renderer,0)}}function createIndicesForQuads(size,outBuffer=null){var totalIndices=6*size;if((outBuffer=65535this._size&&(uploadStatic=!0,this._size=Math.max(particles.length,1.5*this._size|0),this.staticAttributeBuffer=new ViewableBuffer(this._size*this._staticStride*4*4),this.dynamicAttributeBuffer=new ViewableBuffer(this._size*this._dynamicStride*4*4),this.indexBuffer=createIndicesForQuads(this._size),this.geometry.indexBuffer.setDataWithSize(this.indexBuffer,this.indexBuffer.byteLength,!0));var dynamicAttributeBuffer=this.dynamicAttributeBuffer;this._dynamicUpload(particles,dynamicAttributeBuffer.float32View,dynamicAttributeBuffer.uint32View),this._dynamicBuffer.setDataWithSize(this.dynamicAttributeBuffer.float32View,particles.length*this._dynamicStride*4,!0),uploadStatic&&(dynamicAttributeBuffer=this.staticAttributeBuffer,this._staticUpload(particles,dynamicAttributeBuffer.float32View,dynamicAttributeBuffer.uint32View),this._staticBuffer.setDataWithSize(dynamicAttributeBuffer.float32View,particles.length*this._staticStride*4,!0))}destroy(){this._staticBuffer.destroy(),this._dynamicBuffer.destroy(),this.geometry.destroy()}}var fragment$5="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}",vertex$3="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",wgsl="\nstruct ParticleUniforms {\n uProjectionMatrix:mat3x3,\n uColor:vec4,\n uResolution:vec2,\n uRoundPixels:f32,\n};\n\n@group(0) @binding(0) var uniforms: ParticleUniforms;\n\n@group(1) @binding(0) var uTexture: texture_2d;\n@group(1) @binding(1) var uSampler : sampler;\n\nstruct VSOutput {\n @builtin(position) position: vec4,\n @location(0) uv : vec2,\n @location(1) color : vec4,\n };\n@vertex\nfn mainVertex(\n @location(0) aVertex: vec2,\n @location(1) aPosition: vec2,\n @location(2) aUV: vec2,\n @location(3) aColor: vec4,\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,\n @location(1) color: vec4,\n @builtin(position) position: vec4,\n) -> @location(0) vec4 {\n\n var sample = textureSample(uTexture, uSampler, uv) * color;\n \n return sample;\n}";class ParticleShader extends Shader{constructor(){super({glProgram:GlProgram.from({vertex:vertex$3,fragment:fragment$5}),gpuProgram:GpuProgram.from({fragment:{source:wgsl,entryPoint:"mainFragment"},vertex:{source:wgsl,entryPoint:"mainVertex"}}),resources:{uTexture:Texture.WHITE.source,uSampler:new TextureStyle({}),uniforms:{uTranslationMatrix:{value:new Matrix,type:"mat3x3"},uColor:{value:new Color(16777215),type:"vec4"},uRound:{value:1,type:"f32"},uResolution:{value:[0,0],type:"vec2"}}}})}}class ParticleContainerPipe{constructor(renderer,adaptor){this.state=State.for2d(),this._gpuBufferHash=Object.create(null),this._destroyRenderableBound=this.destroyRenderable.bind(this),this.localUniforms=new UniformGroup({uTranslationMatrix:{value:new Matrix,type:"mat3x3"},uColor:{value:new Float32Array(4),type:"vec4"},uRound:{value:1,type:"f32"},uResolution:{value:[0,0],type:"vec2"}}),this.renderer=renderer,this.adaptor=adaptor,this.defaultShader=new ParticleShader,this.state=State.for2d()}validateRenderable(_renderable){return!1}addRenderable(renderable,instructionSet){this.renderer.renderPipes.batch.break(instructionSet),instructionSet.add(renderable)}getBuffers(renderable){return this._gpuBufferHash[renderable.uid]||this._initBuffer(renderable)}_initBuffer(renderable){return this._gpuBufferHash[renderable.uid]=new ParticleBuffer({size:renderable.particleChildren.length,properties:renderable._properties}),renderable.on("destroyed",this._destroyRenderableBound),this._gpuBufferHash[renderable.uid]}updateRenderable(_renderable){}destroyRenderable(renderable){this._gpuBufferHash[renderable.uid].destroy(),this._gpuBufferHash[renderable.uid]=null,renderable.off("destroyed",this._destroyRenderableBound)}execute(container){var renderer,state,buffer,children=container.particleChildren;0!==children.length&&(renderer=this.renderer,buffer=this.getBuffers(container),container.texture||(container.texture=children[0].texture),state=this.state,buffer.update(children,container._childrenDirty),container._childrenDirty=!1,state.blendMode=getAdjustedBlendModeBlend(container.blendMode,container.texture._source),children=(buffer=this.localUniforms.uniforms).uTranslationMatrix,container.worldTransform.copyTo(children),children.prepend(renderer.globalUniforms.globalUniformData.projectionMatrix),buffer.uResolution=renderer.globalUniforms.globalUniformData.resolution,buffer.uRound=renderer._roundPixels|container._roundPixels,color32BitToUniform(container.groupColorAlpha,buffer.uColor,0),this.adaptor.execute(this,container))}destroy(){this.defaultShader&&(this.defaultShader.destroy(),this.defaultShader=null)}}class GlParticleContainerPipe extends ParticleContainerPipe{constructor(renderer){super(renderer,new GlParticleContainerAdaptor)}}GlParticleContainerPipe.extension={type:[ExtensionType2.WebGLPipes],name:"particle"};class GpuParticleContainerAdaptor{execute(particleContainerPipe,container){var renderer=particleContainerPipe.renderer,shader=((shader=container.shader||particleContainerPipe.defaultShader).groups[0]=renderer.renderPipes.uniformBatch.getUniformBindGroup(particleContainerPipe.localUniforms,!0),shader.groups[1]=renderer.texture.getTextureBindGroup(container.texture),particleContainerPipe.state),buffer=particleContainerPipe.getBuffers(container);renderer.encoder.draw({geometry:buffer.geometry,shader:container.shader||particleContainerPipe.defaultShader,state:shader,size:6*container.particleChildren.length})}}class GpuParticleContainerPipe extends ParticleContainerPipe{constructor(renderer){super(renderer,new GpuParticleContainerAdaptor)}}GpuParticleContainerPipe.extension={type:[ExtensionType2.WebGPUPipes],name:"particle"},extensions.add(GlParticleContainerPipe),extensions.add(GpuParticleContainerPipe);class BatchableSprite{constructor(){this.batcherName="default",this.topology="triangle-list",this.attributeSize=4,this.indexSize=6,this.packAsQuad=!0,this.roundPixels=0,this._attributeStart=0,this._batcher=null,this._batch=null}get blendMode(){return this.renderable.groupBlendMode}get color(){return this.renderable.groupColorAlpha}reset(){this.renderable=null,this.texture=null,this._batcher=null,this._batch=null,this.bounds=null}}function updateTextBounds(batchableSprite,text){var{texture:batchableSprite,bounds}=batchableSprite,batchableSprite=(updateQuadBounds(bounds,text._anchor,batchableSprite),text._style.padding);bounds.minX-=batchableSprite,bounds.minY-=batchableSprite,bounds.maxX-=batchableSprite,bounds.maxY-=batchableSprite}class CanvasTextPipe{constructor(renderer){this._gpuText=Object.create(null),this._destroyRenderableBound=this.destroyRenderable.bind(this),this._renderer=renderer,this._renderer.runners.resolutionChange.add(this),this._renderer.renderableGC.addManagedHash(this,"_gpuText")}resolutionChange(){for(const i in this._gpuText){var gpuText=this._gpuText[i];gpuText&&(gpuText=gpuText.batchableSprite.renderable)._autoResolution&&(gpuText._resolution=this._renderer.resolution,gpuText.onViewUpdate())}}validateRenderable(text){var gpuText=this._getGpuText(text),text=text._getKey();return gpuText.currentKey!==text}addRenderable(text,instructionSet){var batchableSprite=this._getGpuText(text).batchableSprite;text._didTextUpdate&&this._updateText(text),this._renderer.renderPipes.batch.addToBatch(batchableSprite,instructionSet)}updateRenderable(text){var batchableSprite=this._getGpuText(text).batchableSprite;text._didTextUpdate&&this._updateText(text),batchableSprite._batcher.updateElement(batchableSprite)}destroyRenderable(text){text.off("destroyed",this._destroyRenderableBound),this._destroyRenderableById(text.uid)}_destroyRenderableById(textUid){var gpuText=this._gpuText[textUid];this._renderer.canvasText.decreaseReferenceCount(gpuText.currentKey),BigPool.return(gpuText.batchableSprite),this._gpuText[textUid]=null}_updateText(text){var newKey=text._getKey(),gpuText=this._getGpuText(text),batchableSprite=gpuText.batchableSprite;gpuText.currentKey!==newKey&&this._updateGpuText(text),text._didTextUpdate=!1,updateTextBounds(batchableSprite,text)}_updateGpuText(text){var gpuText=this._getGpuText(text),batchableSprite=gpuText.batchableSprite;gpuText.texture&&this._renderer.canvasText.decreaseReferenceCount(gpuText.currentKey),gpuText.texture=batchableSprite.texture=this._renderer.canvasText.getManagedTexture(text),gpuText.currentKey=text._getKey(),batchableSprite.texture=gpuText.texture}_getGpuText(text){return this._gpuText[text.uid]||this.initGpuText(text)}initGpuText(text){var gpuTextData={texture:null,currentKey:"--",batchableSprite:BigPool.get(BatchableSprite)};return gpuTextData.batchableSprite.renderable=text,gpuTextData.batchableSprite.transform=text.groupTransform,gpuTextData.batchableSprite.bounds={minX:0,maxX:1,minY:0,maxY:0},gpuTextData.batchableSprite.roundPixels=this._renderer._roundPixels|text._roundPixels,this._gpuText[text.uid]=gpuTextData,text._resolution=(text._autoResolution?this._renderer:text).resolution,this._updateText(text),text.on("destroyed",this._destroyRenderableBound),gpuTextData}destroy(){for(const i in this._gpuText)this._destroyRenderableById(i);this._gpuText=null,this._renderer=null}}CanvasTextPipe.extension={type:[ExtensionType2.WebGLPipes,ExtensionType2.WebGPUPipes,ExtensionType2.CanvasPipes],name:"text"};class CanvasPoolClass{constructor(canvasOptions){this._canvasPool=Object.create(null),this.canvasOptions=canvasOptions||{},this.enableFullScreen=!1}_createCanvasAndContext(pixelWidth,pixelHeight){var canvas=DOMAdapter.get().createCanvas(),pixelWidth=(canvas.width=pixelWidth,canvas.height=pixelHeight,canvas.getContext("2d"));return{canvas:canvas,context:pixelWidth}}getOptimalCanvasAndContext(minWidth,minHeight,resolution=1){return minWidth=Math.ceil(minWidth*resolution-1e-6),minHeight=Math.ceil(minHeight*resolution-1e-6),resolution=((minWidth=nextPow2(minWidth))<<17)+((minHeight=nextPow2(minHeight))<<1),this._canvasPool[resolution]||(this._canvasPool[resolution]=[]),(resolution=this._canvasPool[resolution].pop())||this._createCanvasAndContext(minWidth,minHeight)}returnCanvasAndContext(canvasAndContext){var{width,height}=canvasAndContext.canvas,key=(width<<17)+(height<<1);canvasAndContext.context.clearRect(0,0,width,height),this._canvasPool[key].push(canvasAndContext)}clear(){this._canvasPool={}}}const CanvasPool=new CanvasPoolClass;function checkRow(data,width,y){for(let x=0,index=4*y*width;xkey in obj?__defProp$W(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$W=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$W.call(b,prop)&&__defNormalProp$W(a,prop,b[prop]);if(__getOwnPropSymbols$W)for(var prop of __getOwnPropSymbols$W(b))__propIsEnum$W.call(b,prop)&&__defNormalProp$W(a,prop,b[prop]);return a};const emptyColorStops=[{offset:0,color:"white"},{offset:1,color:"black"}],_FillGradient=class _FillGradient{constructor(...args){this.uid=uid$1("fillGradient"),this.type="linear",this.colorStops=[];var defaults="radial"===(args=function(args){var _a;let options=null!=(_a=args[0])?_a:{};return"number"!=typeof options&&!args[1]||(deprecation("8.5.2","use options object instead"),options={type:"linear",start:{x:args[0],y:args[1]},end:{x:args[2],y:args[3]},textureSpace:args[4],textureSize:null!=(_a=args[5])?_a:FillGradient.defaultLinearOptions.textureSize}),options}(args)).type?_FillGradient.defaultRadialOptions:_FillGradient.defaultLinearOptions,args=__spreadValues$W(__spreadValues$W({},defaults),definedProps(args));this._textureSize=args.textureSize,"radial"===args.type?(this.center=args.center,this.outerCenter=null!=(defaults=args.outerCenter)?defaults:this.center,this.innerRadius=args.innerRadius,this.outerRadius=args.outerRadius,this.scale=args.scale,this.rotation=args.rotation):(this.start=args.start,this.end=args.end),this.textureSpace=args.textureSpace,this.type=args.type,args.colorStops.forEach(stop=>{this.addColorStop(stop.offset,stop.color)})}addColorStop(offset,color){return this.colorStops.push({offset:offset,color:Color.shared.setValue(color).toHexa()}),this}buildLinearGradient(){var defaultSize,colorStops,gradient,m,context,dist,canvas;this.texture||(colorStops=this.colorStops.length?this.colorStops:emptyColorStops,{canvas,context}=getCanvas(defaultSize=this._textureSize,1),{x:colorStops,y:gradient}=(addColorStops(gradient=context.createLinearGradient(0,0,this._textureSize,0),colorStops),context.fillStyle=gradient,context.fillRect(0,0,defaultSize,1),this.texture=new Texture({source:new ImageSource({resource:canvas})}),this.start),{x:context,y:canvas}=this.end,m=new Matrix,context-=colorStops,canvas-=gradient,dist=Math.sqrt(context*context+canvas*canvas),canvas=Math.atan2(canvas,context),m.scale(dist/defaultSize,1),m.rotate(canvas),m.translate(colorStops,gradient),"local"===this.textureSpace&&m.scale(defaultSize,defaultSize),this.transform=m)}buildGradient(){"linear"===this.type?this.buildLinearGradient():this.buildRadialGradient()}buildRadialGradient(){var colorStops,defaultSize,canvas,context,y1,r1,x0,y0,scale,cx,cy,r0,x1;this.texture||(colorStops=this.colorStops.length?this.colorStops:emptyColorStops,{canvas,context}=getCanvas(defaultSize=this._textureSize,defaultSize),{x:x0,y:y0}=this.center,{x:x1,y:y1}=this.outerCenter,r0=this.innerRadius,r1=this.outerRadius,addColorStops(r0=context.createRadialGradient(cx=(x0-(x0=x1-r1))*(scale=defaultSize/(2*r1)),cy=(y0-(y0=y1-r1))*scale,r0*scale,(x1-x0)*scale,(y1-y0)*scale,r1*scale),colorStops),context.fillStyle=colorStops[colorStops.length-1].color,context.fillRect(0,0,defaultSize,defaultSize),context.fillStyle=r0,context.translate(cx,cy),context.rotate(this.rotation),context.scale(1,this.scale),context.translate(-cx,-cy),context.fillRect(0,0,defaultSize,defaultSize),this.texture=new Texture({source:new ImageSource({resource:canvas,addressModeU:"clamp-to-edge",addressModeV:"clamp-to-edge"})}),(x1=new Matrix).scale(1/scale,1/scale),x1.translate(x0,y0),"local"===this.textureSpace&&x1.scale(defaultSize,defaultSize),this.transform=x1)}get styleKey(){return this.uid}destroy(){var _a;null!=(_a=this.texture)&&_a.destroy(!0),this.texture=null}};_FillGradient.defaultLinearOptions={start:{x:0,y:0},end:{x:0,y:1},colorStops:[],textureSpace:"local",type:"linear",textureSize:256},_FillGradient.defaultRadialOptions={center:{x:.5,y:.5},innerRadius:0,outerRadius:.5,colorStops:[],scale:1,textureSpace:"local",type:"radial",textureSize:256};let FillGradient=_FillGradient;function addColorStops(gradient,colorStops){for(let i=0;imaxX?x:maxX,minY=ymaxY?y:maxY}return out.x=minX,out.width=maxX-minX,out.y=minY,out.height=maxY-minY,out}copyFrom(polygon){return this.points=polygon.points.slice(),this.closePath=polygon.closePath,this}copyTo(polygon){return polygon.copyFrom(this),polygon}toString(){return`[pixi.js/math:PolygoncloseStroke=${this.closePath}points=${this.points.reduce((pointsDesc,currentPoint)=>pointsDesc+", "+currentPoint,"")}]`}get lastX(){return this.points[this.points.length-2]}get lastY(){return this.points[this.points.length-1]}get x(){return this.points[this.points.length-2]}get y(){return this.points[this.points.length-1]}}const isCornerWithinStroke=(pX,pY,cornerX,cornerY,radius,strokeWidthInner,strokeWidthOuter)=>(pX-=cornerX,cornerX=pY-cornerY,radius-strokeWidthInner<=(pY=Math.sqrt(pX*pX+cornerX*cornerX))&&pY<=radius+strokeWidthOuter);class RoundedRectangle{constructor(x=0,y=0,width=0,height=0,radius=20){this.type="roundedRectangle",this.x=x,this.y=y,this.width=width,this.height=height,this.radius=radius}getBounds(out){return(out=out||new Rectangle).x=this.x,out.y=this.y,out.width=this.width,out.height=this.height,out}clone(){return new RoundedRectangle(this.x,this.y,this.width,this.height,this.radius)}copyFrom(rectangle){return this.x=rectangle.x,this.y=rectangle.y,this.width=rectangle.width,this.height=rectangle.height,this}copyTo(rectangle){return rectangle.copyFrom(this),rectangle}contains(x,y){if(!(this.width<=0||this.height<=0)&&x>=this.x&&x<=this.x+this.width&&y>=this.y&&y<=this.y+this.height){var radius=Math.max(0,Math.min(this.radius,Math.min(this.width,this.height)/2));if(y>=this.y+radius&&y<=this.y+this.height-radius||x>=this.x+radius&&x<=this.x+this.width-radius)return!0;var dx=x-(this.x+radius),dy=y-(this.y+radius),radius2=radius*radius;if(dx*dx+dy*dy<=radius2)return!0;if((dx=x-(this.x+this.width-radius))*dx+dy*dy<=radius2)return!0;if(dx*dx+(dy=y-(this.y+this.height-radius))*dy<=radius2)return!0;if((dx=x-(this.x+radius))*dx+dy*dy<=radius2)return!0}return!1}strokeContains(pX,pY,strokeWidth,alignment=.5){var{x,y,width,height,radius}=this,strokeWidth=strokeWidth-(alignment=strokeWidth*(1-alignment)),innerX=x+radius,innerY=y+radius,rightBound=x+width,bottomBound=y+height;return(x-alignment<=pX&&pX<=x+strokeWidth||rightBound-strokeWidth<=pX&&pX<=rightBound+alignment)&&innerY<=pY&&pY<=innerY+(height-2*radius)||(y-alignment<=pY&&pY<=y+strokeWidth||bottomBound-strokeWidth<=pY&&pY<=bottomBound+alignment)&&innerX<=pX&&pX<=innerX+(width-2*radius)||pXRECURSION_LIMIT$1)){var pi=Math.PI,x12=(x1+x2)/2,y12=(y1+y2)/2,x23=(x2+x3)/2,y23=(y2+y3)/2,x34=(x3+x4)/2,y34=(y3+y4)/2,x123=(x12+x23)/2,y123=(y12+y23)/2,x1234=(x123+(x23=(x23+x34)/2))/2,y1234=(y123+(y23=(y23+y34)/2))/2;if(0FLT_EPSILON$1&&d3>FLT_EPSILON$1){if((d2+d3)*(d2+d3)<=distanceTolerance*(dx*dx+dy*dy)){if(mAngleTolerance$1=pi&&(da1=2*pi-da1),da2>=pi&&(da2=2*pi-da2),da1+da2mCuspLimit)return points.push(x2,y2);if(da2>mCuspLimit)return points.push(x3,y3)}}}else if(d2>FLT_EPSILON$1){if(d2*d2<=distanceTolerance*(dx*dx+dy*dy)){if(mAngleTolerance$1=pi?2*pi-da1:da1)mCuspLimit)return points.push(x2,y2)}}else if(d3>FLT_EPSILON$1){if(d3*d3<=distanceTolerance*(dx*dx+dy*dy)){if(mAngleTolerance$1=pi?2*pi-da1:da1)mCuspLimit)return points.push(x3,y3)}}else if((dx=x1234-(x1+x4)/2)*dx+(dy=y1234-(y1+y4)/2)*dy<=distanceTolerance)return points.push(x1234,y1234)}recursive$1(x1,y1,x12,y12,x123,y123,x1234,y1234,points,distanceTolerance,level+1),recursive$1(x1234,y1234,x23,y23,x34,y34,x4,y4,points,distanceTolerance,level+1)}})(sX,sY,cp1x,cp1y,cp2x,cp2y,eX,eY,points,smoothness*=smoothness,0),points.push(eX,eY)}(sX,sY,cp1x,cp1y,cp2x,cp2y,eX,eY,points),points}function buildAdaptiveQuadratic(points,sX,sY,cp1x,cp1y,eX,eY,smoothness){return smoothness=1-Math.min(.99,Math.max(0,null!=smoothness?smoothness:GraphicsContextSystem.defaultOptions.bezierSmoothness)),function(sX,sY,cp1x,cp1y,eX,eY,points){(function recursive(points,x1,y1,x2,y2,x3,y3,distanceTolerance,level){if(!(8(rx=sinPhi*(x*=rx)+cosPhi*(y*=ry),out2.x=cosPhi*x-sinPhi*y+centerX,out2.y=rx+centerY,out2),vectorAngle=(ux,uy,vx,vy)=>{let dot=ux*vx+uy*vy;return(dot=1{var rxSq=Math.pow(rx,2),rySq=Math.pow(ry,2),pxpSq=Math.pow(pxp,2),pypSq=Math.pow(pyp,2);let radicant=rxSq*rySq-rxSq*pypSq-rySq*pxpSq,ang2=(radicant<0&&(radicant=0),radicant/=rxSq*pypSq+rySq*pxpSq,rySq=cosPhi*(rxSq=(radicant=Math.sqrt(radicant)*(largeArcFlag===sweepFlag?-1:1))*rx/ry*pyp)-sinPhi*(pypSq=radicant*-ry/rx*pxp)+(px+cx)/2,pxpSq=sinPhi*rxSq+cosPhi*pypSq+(py+cy)/2,largeArcFlag=(pxp-rxSq)/rx,px=(pyp-pypSq)/ry,cx=(-pxp-rxSq)/rx,sinPhi=(-pyp-pypSq)/ry,cosPhi=vectorAngle(1,0,largeArcFlag,px),vectorAngle(largeArcFlag,px,cx,sinPhi));0===sweepFlag&&0{var x=pp.x-p.x,pp=pp.y-p.y;return{len:p=Math.sqrt(x*x+pp*pp),nx:x/p,ny:pp/p}},sharpCorner=(i,p)=>{0===i?g.moveTo(p.x,p.y):g.lineTo(p.x,p.y)};let p1=points[points.length-1];for(let i=0;iMath.min(v1.len/2,p3.len/2)?(lenOut=Math.min(v1.len/2,p3.len/2),Math.abs(lenOut*Math.sin(halfAngle)/Math.cos(halfAngle))):_a,halfAngle=p2.x+p3.nx*lenOut+-p3.ny*cRadius*radDirection,_a=p2.y+p3.ny*lenOut+p3.nx*cRadius*radDirection,v1=Math.atan2(v1.ny,v1.nx)+Math.PI/2*radDirection,p3=Math.atan2(p3.ny,p3.nx)-Math.PI/2*radDirection,0===i&&g.moveTo(halfAngle+Math.cos(v1)*cRadius,_a+Math.sin(v1)*cRadius),g.arc(halfAngle,_a,cRadius,v1,p3,drawDirection)}}p1=p2}}function roundedShapeQuadraticCurve(g,points,radius,smoothness){var distance=(p1,p2)=>Math.sqrt((p1.x-p2.x)**2+(p1.y-p2.y)**2),pointLerp=(p1,p2,t)=>({x:p1.x+(p2.x-p1.x)*t,y:p1.y+(p2.y-p1.y)*t}),numPoints=points.length;for(let i=0;ikey in obj?__defProp$V(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$V=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$V.call(b,prop)&&__defNormalProp$V(a,prop,b[prop]);if(__getOwnPropSymbols$V)for(var prop of __getOwnPropSymbols$V(b))__propIsEnum$V.call(b,prop)&&__defNormalProp$V(a,prop,b[prop]);return a};function SVGParser(svg,graphicsContext){"string"==typeof svg&&((div=document.createElement("div")).innerHTML=svg.trim(),svg=div.querySelector("svg"));var div,session={context:graphicsContext,defs:{},path:new GraphicsPath},children=(parseSVGDefinitions(svg,session),svg.children),{fillStyle,strokeStyle}=parseSVGStyle(svg,session);for(let i=0;iparseInt(n,10)),session.context.poly(points,!0),fillStyle&&session.context.fill(fillStyle),strokeStyle&&session.context.stroke(strokeStyle);break;case"polyline":pointsString=svg.getAttribute("points"),points=pointsString.match(/\d+/g).map(n=>parseInt(n,10)),session.context.poly(points,!1),strokeStyle&&session.context.stroke(strokeStyle);break;case"g":case"svg":break;default:warn(`[SVG parser] <${svg.nodeName}> elements unsupported`)}f1&&(fillStyle=null);for(let i=0;ikey in obj?__defProp$U(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$U=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$U.call(b,prop)&&__defNormalProp$U(a,prop,b[prop]);if(__getOwnPropSymbols$U)for(var prop of __getOwnPropSymbols$U(b))__propIsEnum$U.call(b,prop)&&__defNormalProp$U(a,prop,b[prop]);return a};function isFillPattern(value){return value instanceof FillPattern}function isFillGradient(value){return value instanceof FillGradient}function handleFillPattern(fill,value,defaultStyle){return fill.fill=value,fill.color=16777215,fill.texture=value.texture,fill.matrix=value.transform,__spreadValues$U(__spreadValues$U({},defaultStyle),fill)}function handleFillGradient(fill,value,defaultStyle){return value.buildGradient(),fill.fill=value,fill.color=16777215,fill.texture=value.texture,fill.matrix=value.transform,fill.textureSpace=value.textureSpace,__spreadValues$U(__spreadValues$U({},defaultStyle),fill)}function toFillStyle(value,defaultStyle){var fill,objectStyle;return null==value?null:(fill={},function(value){return Color.isColorLike(value)}(objectStyle=value)?function(fill,value,defaultStyle){return value=Color.shared.setValue(null!=value?value:0),fill.color=value.toNumber(),fill.alpha=(1===value.alpha?defaultStyle:value).alpha,fill.texture=Texture.WHITE,__spreadValues$U(__spreadValues$U({},defaultStyle),fill)}(fill,value,defaultStyle):function(value){return value instanceof Texture}(value)?function(fill,value,defaultStyle){return fill.texture=value,__spreadValues$U(__spreadValues$U({},defaultStyle),fill)}(fill,value,defaultStyle):isFillPattern(value)?handleFillPattern(fill,value,defaultStyle):isFillGradient(value)?handleFillGradient(fill,value,defaultStyle):objectStyle.fill&&isFillPattern(objectStyle.fill)?handleFillPattern(objectStyle,objectStyle.fill,defaultStyle):objectStyle.fill&&isFillGradient(objectStyle.fill)?handleFillGradient(objectStyle,objectStyle.fill,defaultStyle):function(value,defaultStyle){return defaultStyle=__spreadValues$U(__spreadValues$U({},defaultStyle),value),value=Color.shared.setValue(defaultStyle.color),defaultStyle.alpha*=value.alpha,defaultStyle.color=value.toNumber(),defaultStyle}(objectStyle,defaultStyle))}function toStrokeStyle(value,defaultStyle){var{width,alignment,miterLimit,cap,join,pixelLine}=defaultStyle;return(value=toFillStyle(value,((source,exclude)=>{var target={};for(prop in source)__hasOwnProp$U.call(source,prop)&&exclude.indexOf(prop)<0&&(target[prop]=source[prop]);if(null!=source&&__getOwnPropSymbols$U)for(var prop of __getOwnPropSymbols$U(source))exclude.indexOf(prop)<0&&__propIsEnum$U.call(source,prop)&&(target[prop]=source[prop]);return target})(defaultStyle,["width","alignment","miterLimit","cap","join","pixelLine"])))?__spreadValues$U({width:width,alignment:alignment,miterLimit:miterLimit,cap:cap,join:join,pixelLine:pixelLine},value):null}var __defProp$T=Object.defineProperty,__getOwnPropSymbols$T=Object.getOwnPropertySymbols,__hasOwnProp$T=Object.prototype.hasOwnProperty,__propIsEnum$T=Object.prototype.propertyIsEnumerable,__defNormalProp$T=(obj,key,value)=>key in obj?__defProp$T(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$T=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$T.call(b,prop)&&__defNormalProp$T(a,prop,b[prop]);if(__getOwnPropSymbols$T)for(var prop of __getOwnPropSymbols$T(b))__propIsEnum$T.call(b,prop)&&__defNormalProp$T(a,prop,b[prop]);return a};const tmpPoint=new Point,tempMatrix$3=new Matrix,_GraphicsContext=class _GraphicsContext extends EventEmitter{constructor(){super(...arguments),this.uid=uid$1("graphicsContext"),this.dirty=!0,this.batchMode="auto",this.instructions=[],this._activePath=new GraphicsPath,this._transform=new Matrix,this._fillStyle=__spreadValues$T({},_GraphicsContext.defaultFillStyle),this._strokeStyle=__spreadValues$T({},_GraphicsContext.defaultStrokeStyle),this._stateStack=[],this._tick=0,this._bounds=new Bounds,this._boundsDirty=!0}clone(){var clone=new _GraphicsContext;return clone.batchMode=this.batchMode,clone.instructions=this.instructions.slice(),clone._activePath=this._activePath.clone(),clone._transform=this._transform.clone(),clone._fillStyle=__spreadValues$T({},this._fillStyle),clone._strokeStyle=__spreadValues$T({},this._strokeStyle),clone._stateStack=this._stateStack.slice(),clone._bounds=this._bounds.clone(),clone._boundsDirty=!0,clone}get fillStyle(){return this._fillStyle}set fillStyle(value){this._fillStyle=toFillStyle(value,_GraphicsContext.defaultFillStyle)}get strokeStyle(){return this._strokeStyle}set strokeStyle(value){this._strokeStyle=toStrokeStyle(value,_GraphicsContext.defaultStrokeStyle)}setFillStyle(style){return this._fillStyle=toFillStyle(style,_GraphicsContext.defaultFillStyle),this}setStrokeStyle(style){return this._strokeStyle=toFillStyle(style,_GraphicsContext.defaultStrokeStyle),this}texture(texture,tint,dx,dy,dw,dh){return this.instructions.push({action:"texture",data:{image:texture,dx:dx||0,dy:dy||0,dw:dw||texture.frame.width,dh:dh||texture.frame.height,transform:this._transform.clone(),alpha:this._fillStyle.alpha,style:tint?Color.shared.setValue(tint).toNumber():16777215}}),this.onUpdate(),this}beginPath(){return this._activePath=new GraphicsPath,this}fill(style,alpha){var lastInstruction=this.instructions[this.instructions.length-1];return(lastInstruction=0===this._tick&&lastInstruction&&"stroke"===lastInstruction.action?lastInstruction.data.path:this._activePath.clone())&&(null!=style&&(void 0!==alpha&&"number"==typeof style&&(deprecation(v8_0_0,"GraphicsContext.fill(color, alpha) is deprecated, use GraphicsContext.fill({ color, alpha }) instead"),style={color:style,alpha:alpha}),this._fillStyle=toFillStyle(style,_GraphicsContext.defaultFillStyle)),this.instructions.push({action:"fill",data:{style:this.fillStyle,path:lastInstruction}}),this.onUpdate(),this._initNextPathLocation(),this._tick=0),this}_initNextPathLocation(){var{x,y}=this._activePath.getLastPoint(Point.shared);this._activePath.clear(),this._activePath.moveTo(x,y)}stroke(style){var lastInstruction=this.instructions[this.instructions.length-1];return(lastInstruction=0===this._tick&&lastInstruction&&"fill"===lastInstruction.action?lastInstruction.data.path:this._activePath.clone())&&(null!=style&&(this._strokeStyle=toStrokeStyle(style,_GraphicsContext.defaultStrokeStyle)),this.instructions.push({action:"stroke",data:{style:this.strokeStyle,path:lastInstruction}}),this.onUpdate(),this._initNextPathLocation(),this._tick=0),this}cut(){for(let i=0;i<2;i++){var lastInstruction=this.instructions[this.instructions.length-1-i],holePath=this._activePath.clone();if(lastInstruction&&("stroke"===lastInstruction.action||"fill"===lastInstruction.action)){if(!lastInstruction.data.hole){lastInstruction.data.hole=holePath;break}lastInstruction.data.hole.addPath(holePath)}}return this._initNextPathLocation(),this}arc(x,y,radius,startAngle,endAngle,counterclockwise){this._tick++;var t=this._transform;return this._activePath.arc(t.a*x+t.c*y+t.tx,t.b*x+t.d*y+t.ty,radius,startAngle,endAngle,counterclockwise),this}arcTo(x1,y1,x2,y2,radius){this._tick++;var t=this._transform;return this._activePath.arcTo(t.a*x1+t.c*y1+t.tx,t.b*x1+t.d*y1+t.ty,t.a*x2+t.c*y2+t.tx,t.b*x2+t.d*y2+t.ty,radius),this}arcToSvg(rx,ry,xAxisRotation,largeArcFlag,sweepFlag,x,y){this._tick++;var t=this._transform;return this._activePath.arcToSvg(rx,ry,xAxisRotation,largeArcFlag,sweepFlag,t.a*x+t.c*y+t.tx,t.b*x+t.d*y+t.ty),this}bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y,smoothness){this._tick++;var t=this._transform;return this._activePath.bezierCurveTo(t.a*cp1x+t.c*cp1y+t.tx,t.b*cp1x+t.d*cp1y+t.ty,t.a*cp2x+t.c*cp2y+t.tx,t.b*cp2x+t.d*cp2y+t.ty,t.a*x+t.c*y+t.tx,t.b*x+t.d*y+t.ty,smoothness),this}closePath(){var _a;return this._tick++,null!=(_a=this._activePath)&&_a.closePath(),this}ellipse(x,y,radiusX,radiusY){return this._tick++,this._activePath.ellipse(x,y,radiusX,radiusY,this._transform.clone()),this}circle(x,y,radius){return this._tick++,this._activePath.circle(x,y,radius,this._transform.clone()),this}path(path){return this._tick++,this._activePath.addPath(path,this._transform.clone()),this}lineTo(x,y){this._tick++;var t=this._transform;return this._activePath.lineTo(t.a*x+t.c*y+t.tx,t.b*x+t.d*y+t.ty),this}moveTo(x,y){this._tick++;var t=this._transform,instructions=this._activePath.instructions,transformedX=t.a*x+t.c*y+t.tx,x=t.b*x+t.d*y+t.ty;return 1===instructions.length&&"moveTo"===instructions[0].action?(instructions[0].data[0]=transformedX,instructions[0].data[1]=x):this._activePath.moveTo(transformedX,x),this}quadraticCurveTo(cpx,cpy,x,y,smoothness){this._tick++;var t=this._transform;return this._activePath.quadraticCurveTo(t.a*cpx+t.c*cpy+t.tx,t.b*cpx+t.d*cpy+t.ty,t.a*x+t.c*y+t.tx,t.b*x+t.d*y+t.ty,smoothness),this}rect(x,y,w,h){return this._tick++,this._activePath.rect(x,y,w,h,this._transform.clone()),this}roundRect(x,y,w,h,radius){return this._tick++,this._activePath.roundRect(x,y,w,h,radius,this._transform.clone()),this}poly(points,close){return this._tick++,this._activePath.poly(points,close,this._transform.clone()),this}regularPoly(x,y,radius,sides,rotation=0,transform){return this._tick++,this._activePath.regularPoly(x,y,radius,sides,rotation,transform),this}roundPoly(x,y,radius,sides,corner,rotation){return this._tick++,this._activePath.roundPoly(x,y,radius,sides,corner,rotation),this}roundShape(points,radius,useQuadratic,smoothness){return this._tick++,this._activePath.roundShape(points,radius,useQuadratic,smoothness),this}filletRect(x,y,width,height,fillet){return this._tick++,this._activePath.filletRect(x,y,width,height,fillet),this}chamferRect(x,y,width,height,chamfer,transform){return this._tick++,this._activePath.chamferRect(x,y,width,height,chamfer,transform),this}star(x,y,points,radius,innerRadius=0,rotation=0){return this._tick++,this._activePath.star(x,y,points,radius,innerRadius,rotation,this._transform.clone()),this}svg(svg){return this._tick++,SVGParser(svg,this),this}restore(){var state=this._stateStack.pop();return state&&(this._transform=state.transform,this._fillStyle=state.fillStyle,this._strokeStyle=state.strokeStyle),this}save(){return this._stateStack.push({transform:this._transform.clone(),fillStyle:__spreadValues$T({},this._fillStyle),strokeStyle:__spreadValues$T({},this._strokeStyle)}),this}getTransform(){return this._transform}resetTransform(){return this._transform.identity(),this}rotate(angle){return this._transform.rotate(angle),this}scale(x,y=x){return this._transform.scale(x,y),this}setTransform(a,b,c,d,dx,dy){return a instanceof Matrix?this._transform.set(a.a,a.b,a.c,a.d,a.tx,a.ty):this._transform.set(a,b,c,d,dx,dy),this}transform(a,b,c,d,dx,dy){return a instanceof Matrix?this._transform.append(a):(tempMatrix$3.set(a,b,c,d,dx,dy),this._transform.append(tempMatrix$3)),this}translate(x,y=x){return this._transform.translate(x,y),this}clear(){return this._activePath.clear(),this.instructions.length=0,this.resetTransform(),this.onUpdate(),this}onUpdate(){this.dirty||(this.emit("update",this,16),this.dirty=!0,this._boundsDirty=!0)}get bounds(){if(!this._boundsDirty)return this._bounds;var bounds=this._bounds;bounds.clear();for(let i=0;ikey in obj?__defProp$S(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$S=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$S.call(b,prop)&&__defNormalProp$S(a,prop,b[prop]);if(__getOwnPropSymbols$S)for(var prop of __getOwnPropSymbols$S(b))__propIsEnum$S.call(b,prop)&&__defNormalProp$S(a,prop,b[prop]);return a};const _TextStyle=class _TextStyle extends EventEmitter{constructor(style={}){super(),function(style){var defaults,oldStyle=style;if("boolean"==typeof oldStyle.dropShadow&&oldStyle.dropShadow&&(defaults=TextStyle.defaultDropShadow,style.dropShadow={alpha:null!=(_a=oldStyle.dropShadowAlpha)?_a:defaults.alpha,angle:null!=(_a=oldStyle.dropShadowAngle)?_a:defaults.angle,blur:null!=(_a=oldStyle.dropShadowBlur)?_a:defaults.blur,color:null!=(_a=oldStyle.dropShadowColor)?_a:defaults.color,distance:null!=(_a=oldStyle.dropShadowDistance)?_a:defaults.distance}),void 0!==oldStyle.strokeThickness){deprecation(v8_0_0,"strokeThickness is now a part of stroke");var _a=oldStyle.stroke;let obj={};if(Color.isColorLike(_a))obj.color=_a;else if(_a instanceof FillGradient||_a instanceof FillPattern)obj.fill=_a;else{if(!Object.hasOwnProperty.call(_a,"color")&&!Object.hasOwnProperty.call(_a,"fill"))throw new Error("Invalid stroke value.");obj=_a}style.stroke=(defaults=__spreadValues$S({},obj),_a={width:oldStyle.strokeThickness},__defProps$m(defaults,__getOwnPropDescs$m(_a)))}if(Array.isArray(oldStyle.fillGradientStops)){deprecation(v8_0_0,"gradient fill is now a fill pattern: `new FillGradient(...)`");let fontSize;null==style.fontSize?style.fontSize=TextStyle.defaultTextStyle.fontSize:fontSize="string"==typeof style.fontSize?parseInt(style.fontSize,10):style.fontSize;const gradientFill=new FillGradient({start:{x:0,y:0},end:{x:0,y:1.7*(fontSize||0)}}),fills=oldStyle.fillGradientStops.map(color=>Color.shared.setValue(color).toNumber());fills.forEach((number,index)=>{index/=fills.length-1,gradientFill.addColorStop(index,number)}),style.fill={fill:gradientFill}}}(style);var fullStyle=__spreadValues$S(__spreadValues$S({},_TextStyle.defaultTextStyle),style);for(const key in fullStyle)this[key]=fullStyle[key];this.update()}get align(){return this._align}set align(value){this._align=value,this.update()}get breakWords(){return this._breakWords}set breakWords(value){this._breakWords=value,this.update()}get dropShadow(){return this._dropShadow}set dropShadow(value){this._dropShadow=null!==value&&"object"==typeof value?this._createProxy(__spreadValues$S(__spreadValues$S({},_TextStyle.defaultDropShadow),value)):value?this._createProxy(__spreadValues$S({},_TextStyle.defaultDropShadow)):null,this.update()}get fontFamily(){return this._fontFamily}set fontFamily(value){this._fontFamily=value,this.update()}get fontSize(){return this._fontSize}set fontSize(value){this._fontSize="string"==typeof value?parseInt(value,10):value,this.update()}get fontStyle(){return this._fontStyle}set fontStyle(value){this._fontStyle=value.toLowerCase(),this.update()}get fontVariant(){return this._fontVariant}set fontVariant(value){this._fontVariant=value,this.update()}get fontWeight(){return this._fontWeight}set fontWeight(value){this._fontWeight=value,this.update()}get leading(){return this._leading}set leading(value){this._leading=value,this.update()}get letterSpacing(){return this._letterSpacing}set letterSpacing(value){this._letterSpacing=value,this.update()}get lineHeight(){return this._lineHeight}set lineHeight(value){this._lineHeight=value,this.update()}get padding(){return this._padding}set padding(value){this._padding=value,this.update()}get trim(){return this._trim}set trim(value){this._trim=value,this.update()}get textBaseline(){return this._textBaseline}set textBaseline(value){this._textBaseline=value,this.update()}get whiteSpace(){return this._whiteSpace}set whiteSpace(value){this._whiteSpace=value,this.update()}get wordWrap(){return this._wordWrap}set wordWrap(value){this._wordWrap=value,this.update()}get wordWrapWidth(){return this._wordWrapWidth}set wordWrapWidth(value){this._wordWrapWidth=value,this.update()}get fill(){return this._originalFill}set fill(value){value!==this._originalFill&&(this._originalFill=value,this._isFillStyle(value)&&(this._originalFill=this._createProxy(__spreadValues$S(__spreadValues$S({},GraphicsContext.defaultFillStyle),value),()=>{this._fill=toFillStyle(__spreadValues$S({},this._originalFill),GraphicsContext.defaultFillStyle)})),this._fill=toFillStyle(0===value?"black":value,GraphicsContext.defaultFillStyle),this.update())}get stroke(){return this._originalStroke}set stroke(value){value!==this._originalStroke&&(this._originalStroke=value,this._isFillStyle(value)&&(this._originalStroke=this._createProxy(__spreadValues$S(__spreadValues$S({},GraphicsContext.defaultStrokeStyle),value),()=>{this._stroke=toStrokeStyle(__spreadValues$S({},this._originalStroke),GraphicsContext.defaultStrokeStyle)})),this._stroke=toStrokeStyle(value,GraphicsContext.defaultStrokeStyle),this.update())}_generateKey(){return this._styleKey=generateTextStyleKey(this),this._styleKey}update(){this._styleKey=null,this.emit("update",this)}reset(){var defaultStyle=_TextStyle.defaultTextStyle;for(const key in defaultStyle)this[key]=defaultStyle[key]}get styleKey(){return this._styleKey||this._generateKey()}clone(){return new _TextStyle({align:this.align,breakWords:this.breakWords,dropShadow:this._dropShadow?__spreadValues$S({},this._dropShadow):null,fill:this._fill,fontFamily:this.fontFamily,fontSize:this.fontSize,fontStyle:this.fontStyle,fontVariant:this.fontVariant,fontWeight:this.fontWeight,leading:this.leading,letterSpacing:this.letterSpacing,lineHeight:this.lineHeight,padding:this.padding,stroke:this._stroke,textBaseline:this.textBaseline,whiteSpace:this.whiteSpace,wordWrap:this.wordWrap,wordWrapWidth:this.wordWrapWidth})}destroy(options=!1){this.removeAllListeners();var destroyTexture="boolean"==typeof options?options:null==options?void 0:options.texture;destroyTexture&&(destroyTexture="boolean"==typeof options?options:null==options?void 0:options.textureSource,null!=(options=this._fill)&&options.texture&&this._fill.texture.destroy(destroyTexture),null!=(options=this._originalFill)&&options.texture&&this._originalFill.texture.destroy(destroyTexture),null!=(options=this._stroke)&&options.texture&&this._stroke.texture.destroy(destroyTexture),null!=(options=this._originalStroke))&&options.texture&&this._originalStroke.texture.destroy(destroyTexture),this._fill=null,this._stroke=null,this.dropShadow=null,this._originalStroke=null,this._originalFill=null}_createProxy(value,cb){return new Proxy(value,{set:(target,property,newValue)=>(target[property]=newValue,null!=cb&&cb(property,newValue),this.update(),!0)})}_isFillStyle(value){return null!==(null!=value?value:null)&&!(Color.isColorLike(value)||value instanceof FillGradient||value instanceof FillPattern)}};_TextStyle.defaultDropShadow={alpha:1,angle:Math.PI/6,blur:0,color:"black",distance:5},_TextStyle.defaultTextStyle={align:"left",breakWords:!1,dropShadow:null,fill:"black",fontFamily:"Arial",fontSize:26,fontStyle:"normal",fontVariant:"normal",fontWeight:"normal",leading:0,letterSpacing:0,lineHeight:0,padding:0,stroke:null,textBaseline:"alphabetic",trim:!1,whiteSpace:"pre",wordWrap:!1,wordWrapWidth:100};let TextStyle=_TextStyle;const tempBounds$3=new Bounds;function getPo2TextureFromSource(image,width,height,resolution){var bounds=tempBounds$3;return bounds.minX=0,bounds.minY=0,bounds.maxX=image.width/resolution|0,bounds.maxY=image.height/resolution|0,(bounds=TexturePool.getOptimalTexture(bounds.width,bounds.height,resolution,!1)).source.uploadMethodId="image",bounds.source.resource=image,bounds.source.alphaMode="premultiply-alpha-on-upload",bounds.frame.width=width/resolution,bounds.frame.height=height/resolution,bounds.source.emit("update",bounds.source),bounds.updateUvs(),bounds}const genericFontFamilies=["serif","sans-serif","monospace","cursive","fantasy","system-ui"];function fontStringFromTextStyle(style){var fontSizeString="number"==typeof style.fontSize?style.fontSize+"px":style.fontSize,fontFamilies=style.fontFamily;for(let i=(fontFamilies=Array.isArray(style.fontFamily)?fontFamilies:style.fontFamily.split(",")).length-1;0<=i;i--){let fontFamily=fontFamilies[i].trim();/([\"\'])[^\'\"]+\1/.test(fontFamily)||genericFontFamilies.includes(fontFamily)||(fontFamily=`"${fontFamily}"`),fontFamilies[i]=fontFamily}return`${style.fontStyle} ${style.fontVariant} ${style.fontWeight} ${fontSizeString} `+fontFamilies.join(",")}const contextSettings={willReadFrequently:!0},_CanvasTextMetrics=class _CanvasTextMetrics{static get experimentalLetterSpacingSupported(){let result=_CanvasTextMetrics._experimentalLetterSpacingSupported;var proto;return void 0!==result&&(proto=DOMAdapter.get().getCanvasRenderingContext2D().prototype,result=_CanvasTextMetrics._experimentalLetterSpacingSupported="letterSpacing"in proto||"textLetterSpacing"in proto),result}constructor(text,style,width,height,lines,lineWidths,lineHeight,maxLineWidth,fontProperties){this.text=text,this.style=style,this.width=width,this.height=height,this.lines=lines,this.lineWidths=lineWidths,this.lineHeight=lineHeight,this.maxLineWidth=maxLineWidth,this.fontProperties=fontProperties}static measureText(text=" ",style,canvas=_CanvasTextMetrics._canvas,wordWrap=style.wordWrap){var textKey=text+":"+style.styleKey;if(_CanvasTextMetrics._measurementCache[textKey])return _CanvasTextMetrics._measurementCache[textKey];var textKey=fontStringFromTextStyle(style),fontProperties=_CanvasTextMetrics.measureFont(textKey),context=(0===fontProperties.fontSize&&(fontProperties.fontSize=style.fontSize,fontProperties.ascent=style.fontSize),_CanvasTextMetrics.__context),lines=(context.font=textKey,(wordWrap?_CanvasTextMetrics._wordWrap(text,style,canvas):text).split(/(?:\r\n|\r|\n)/)),lineWidths=new Array(lines.length);let maxLineWidth=0;for(let i=0;iwordWrapWidth&&(lines+=_CanvasTextMetrics._addLine(line),canPrependSpaces=!1,line="",width=0),line+=char,width+=characterWidth}}else 0wordWrapWidth&&(canPrependSpaces=!1,lines+=_CanvasTextMetrics._addLine(line),line="",width=0),(0{if("function"!=typeof(null==Intl?void 0:Intl.Segmenter))return s=>[...s];{const segmenter=new Intl.Segmenter;return s=>[...segmenter.segment(s)].map(x=>x.segment)}})(),_CanvasTextMetrics.experimentalLetterSpacing=!1,_CanvasTextMetrics._fonts={},_CanvasTextMetrics._newlines=[10,13],_CanvasTextMetrics._breakingSpaces=[9,32,8192,8193,8194,8195,8196,8197,8198,8200,8201,8202,8287,12288],_CanvasTextMetrics._measurementCache={};let CanvasTextMetrics=_CanvasTextMetrics;function getCanvasFillStyle(fillStyle,context,textMetrics,padding=0){if(fillStyle.texture===Texture.WHITE&&!fillStyle.fill)return Color.shared.setValue(fillStyle.color).setAlpha(null!=(_a=fillStyle.alpha)?_a:1).toHexa();if(!fillStyle.fill)return _a=context.createPattern(fillStyle.texture.source.resource,"repeat"),(tempMatrix=fillStyle.matrix.copyTo(Matrix.shared)).scale(fillStyle.texture.frame.width,fillStyle.texture.frame.height),_a.setTransform(tempMatrix),_a;if(fillStyle.fill instanceof FillPattern){var _a=fillStyle.fill;const pattern=context.createPattern(_a.texture.source.resource,"repeat"),tempMatrix=_a.transform.copyTo(Matrix.shared);return tempMatrix.scale(_a.texture.frame.width,_a.texture.frame.height),pattern.setTransform(tempMatrix),pattern}if(fillStyle.fill instanceof FillGradient){var end,outerCenter,outerRadius,fillGradient=fillStyle.fill,tempMatrix="linear"===fillGradient.type;let width=1,height=1;(_a="local"===fillGradient.textureSpace)&&textMetrics&&(width=textMetrics.width+padding,height=textMetrics.height+padding);let gradient,isNearlyVertical=!1;if(tempMatrix?({start:tempMatrix,end}=fillGradient,gradient=context.createLinearGradient(tempMatrix.x*width,tempMatrix.y*height,end.x*width,end.y*height),isNearlyVertical=Math.abs(end.x-tempMatrix.x){var globalStop=start+stop.offset*ratio;gradient.addColorStop(Math.floor(1e5*globalStop)/1e5,Color.shared.setValue(stop.color).toHex())})}}else fillGradient.colorStops.forEach(stop=>{gradient.addColorStop(stop.offset,Color.shared.setValue(stop.color).toHex())});return gradient}return warn("FillStyle not recognised",fillStyle),"red"}class CanvasTextSystem{constructor(_renderer){this._activeTextures={},this._renderer=_renderer}getTextureSize(text,resolution,style){var text=CanvasTextMetrics.measureText(text||" ",style),width=Math.ceil(Math.ceil(Math.max(1,text.width)+2*style.padding)*resolution),text=Math.ceil(Math.ceil(Math.max(1,text.height)+2*style.padding)*resolution),width=Math.ceil(width-1e-6),text=Math.ceil(text-1e-6);return{width:nextPow2(width),height:nextPow2(text)}}getTexture(options,resolution,style,_textKey){"string"==typeof options&&(deprecation("8.0.0","CanvasTextSystem.getTexture: Use object TextOptions instead of separate arguments"),options={text:options,style:style,resolution:resolution}),options.style instanceof TextStyle||(options.style=new TextStyle(options.style));var{texture:style,canvasAndContext:resolution}=this.createTextureAndCanvas(options);return this._renderer.texture.initSource(style._source),CanvasPool.returnCanvasAndContext(resolution),style}createTextureAndCanvas(options){var{text,style}=options,options=null!=(options=options.resolution)?options:this._renderer.resolution,measured=CanvasTextMetrics.measureText(text||" ",style),width=Math.ceil(Math.ceil(Math.max(1,measured.width)+2*style.padding)*options),measured=Math.ceil(Math.ceil(Math.max(1,measured.height)+2*style.padding)*options),canvasAndContext=CanvasPool.getOptimalCanvasAndContext(width,measured),canvas=canvasAndContext.canvas,text=(this.renderTextToCanvas(text,style,options,canvasAndContext),getPo2TextureFromSource(canvas,width,measured,options));return style.trim&&(width=getCanvasBoundingBox(canvas,options),text.frame.copyFrom(width),text.updateUvs()),{texture:text,canvasAndContext:canvasAndContext}}getManagedTexture(text){text._resolution=(text._autoResolution?this._renderer:text).resolution;var canvasAndContext,textKey=text._getKey();return this._activeTextures[textKey]?(this._increaseReferenceCount(textKey),this._activeTextures[textKey].texture):({texture:text,canvasAndContext}=this.createTextureAndCanvas(text),this._activeTextures[textKey]={canvasAndContext:canvasAndContext,texture:text,usageCount:1},text)}_increaseReferenceCount(textKey){this._activeTextures[textKey].usageCount++}returnTexture(texture){var source=texture.source;source.resource=null,source.uploadMethodId="unknown",source.alphaMode="no-premultiply-alpha",TexturePool.returnTexture(texture)}decreaseReferenceCount(textKey){var activeTexture=this._activeTextures[textKey];activeTexture.usageCount--,0===activeTexture.usageCount&&(CanvasPool.returnCanvasAndContext(activeTexture.canvasAndContext),this.returnTexture(activeTexture.texture),this._activeTextures[textKey]=null)}getReferenceCount(textKey){return this._activeTextures[textKey].usageCount}renderTextToCanvas(text,style,resolution,canvasAndContext){var _e,linePositionY,{canvas,context}=canvasAndContext,font=fontStringFromTextStyle(style),measured=CanvasTextMetrics.measureText(text||" ",style),lines=measured.lines,lineHeight=measured.lineHeight,lineWidths=measured.lineWidths,maxLineWidth=measured.maxLineWidth,fontProperties=measured.fontProperties,height=canvas.height;context.resetTransform(),context.scale(resolution,resolution),context.textBaseline=style.textBaseline,null!=(text=style._stroke)&&text.width&&(canvas=style._stroke,context.lineWidth=canvas.width,context.miterLimit=canvas.miterLimit,context.lineJoin=canvas.join,context.lineCap=canvas.cap),context.font=font;let linePositionX;var passesCount=style.dropShadow?2:1;for(let i=0;ikey in obj?__defProp$R(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;class Graphics extends ViewContainer{constructor(options){var{context,roundPixels}=options=(options instanceof GraphicsContext?{context:options}:options)||{};super(((a,b)=>{for(var prop in b=b||{})__hasOwnProp$R.call(b,prop)&&__defNormalProp$R(a,prop,b[prop]);if(__getOwnPropSymbols$R)for(var prop of __getOwnPropSymbols$R(b))__propIsEnum$R.call(b,prop)&&__defNormalProp$R(a,prop,b[prop]);return a})({label:"Graphics"},((source,exclude)=>{var target={};for(prop in source)__hasOwnProp$R.call(source,prop)&&exclude.indexOf(prop)<0&&(target[prop]=source[prop]);if(null!=source&&__getOwnPropSymbols$R)for(var prop of __getOwnPropSymbols$R(source))exclude.indexOf(prop)<0&&__propIsEnum$R.call(source,prop)&&(target[prop]=source[prop]);return target})(options,["context","roundPixels"]))),this.renderPipeId="graphics",this._context=context||(this._ownedContext=new GraphicsContext),this._context.on("update",this.onViewUpdate,this),this.allowChildren=!1,this.roundPixels=null!=roundPixels&&roundPixels}set context(context){context!==this._context&&(this._context.off("update",this.onViewUpdate,this),this._context=context,this._context.on("update",this.onViewUpdate,this),this.onViewUpdate())}get context(){return this._context}get bounds(){return this._context.bounds}updateBounds(){}containsPoint(point){return this._context.containsPoint(point)}destroy(options){this._ownedContext&&!options?this._ownedContext.destroy(options):!0!==options&&!0!==(null==options?void 0:options.context)||this._context.destroy(options),this._ownedContext=null,this._context=null,super.destroy(options)}_callContextMethod(method,args){return this.context[method](...args),this}setFillStyle(...args){return this._callContextMethod("setFillStyle",args)}setStrokeStyle(...args){return this._callContextMethod("setStrokeStyle",args)}fill(...args){return this._callContextMethod("fill",args)}stroke(...args){return this._callContextMethod("stroke",args)}texture(...args){return this._callContextMethod("texture",args)}beginPath(){return this._callContextMethod("beginPath",[])}cut(){return this._callContextMethod("cut",[])}arc(...args){return this._callContextMethod("arc",args)}arcTo(...args){return this._callContextMethod("arcTo",args)}arcToSvg(...args){return this._callContextMethod("arcToSvg",args)}bezierCurveTo(...args){return this._callContextMethod("bezierCurveTo",args)}closePath(){return this._callContextMethod("closePath",[])}ellipse(...args){return this._callContextMethod("ellipse",args)}circle(...args){return this._callContextMethod("circle",args)}path(...args){return this._callContextMethod("path",args)}lineTo(...args){return this._callContextMethod("lineTo",args)}moveTo(...args){return this._callContextMethod("moveTo",args)}quadraticCurveTo(...args){return this._callContextMethod("quadraticCurveTo",args)}rect(...args){return this._callContextMethod("rect",args)}roundRect(...args){return this._callContextMethod("roundRect",args)}poly(...args){return this._callContextMethod("poly",args)}regularPoly(...args){return this._callContextMethod("regularPoly",args)}roundPoly(...args){return this._callContextMethod("roundPoly",args)}roundShape(...args){return this._callContextMethod("roundShape",args)}filletRect(...args){return this._callContextMethod("filletRect",args)}chamferRect(...args){return this._callContextMethod("chamferRect",args)}star(...args){return this._callContextMethod("star",args)}svg(...args){return this._callContextMethod("svg",args)}restore(...args){return this._callContextMethod("restore",args)}save(){return this._callContextMethod("save",[])}getTransform(){return this.context.getTransform()}resetTransform(){return this._callContextMethod("resetTransform",[])}rotateTransform(...args){return this._callContextMethod("rotate",args)}scaleTransform(...args){return this._callContextMethod("scale",args)}setTransform(...args){return this._callContextMethod("setTransform",args)}transform(...args){return this._callContextMethod("transform",args)}translateTransform(...args){return this._callContextMethod("translate",args)}clear(){return this._callContextMethod("clear",[])}get fillStyle(){return this._context.fillStyle}set fillStyle(value){this._context.fillStyle=value}get strokeStyle(){return this._context.strokeStyle}set strokeStyle(value){this._context.strokeStyle=value}clone(deep=!1){return deep?new Graphics(this._context.clone()):(this._ownedContext=null,new Graphics(this._context))}lineStyle(width,color,alpha){deprecation(v8_0_0,"Graphics#lineStyle is no longer needed. Use Graphics#setStrokeStyle to set the stroke style.");var strokeStyle={};return width&&(strokeStyle.width=width),color&&(strokeStyle.color=color),alpha&&(strokeStyle.alpha=alpha),this.context.strokeStyle=strokeStyle,this}beginFill(color,alpha){deprecation(v8_0_0,"Graphics#beginFill is no longer needed. Use Graphics#fill to fill the shape with the desired style.");var fillStyle={};return void 0!==color&&(fillStyle.color=color),void 0!==alpha&&(fillStyle.alpha=alpha),this.context.fillStyle=fillStyle,this}endFill(){deprecation(v8_0_0,"Graphics#endFill is no longer needed. Use Graphics#fill to fill the shape with the desired style."),this.context.fill();var strokeStyle=this.context.strokeStyle;return strokeStyle.width===GraphicsContext.defaultStrokeStyle.width&&strokeStyle.color===GraphicsContext.defaultStrokeStyle.color&&strokeStyle.alpha===GraphicsContext.defaultStrokeStyle.alpha||this.context.stroke(),this}drawCircle(...args){return deprecation(v8_0_0,"Graphics#drawCircle has been renamed to Graphics#circle"),this._callContextMethod("circle",args)}drawEllipse(...args){return deprecation(v8_0_0,"Graphics#drawEllipse has been renamed to Graphics#ellipse"),this._callContextMethod("ellipse",args)}drawPolygon(...args){return deprecation(v8_0_0,"Graphics#drawPolygon has been renamed to Graphics#poly"),this._callContextMethod("poly",args)}drawRect(...args){return deprecation(v8_0_0,"Graphics#drawRect has been renamed to Graphics#rect"),this._callContextMethod("rect",args)}drawRoundedRect(...args){return deprecation(v8_0_0,"Graphics#drawRoundedRect has been renamed to Graphics#roundRect"),this._callContextMethod("roundRect",args)}drawStar(...args){return deprecation(v8_0_0,"Graphics#drawStar has been renamed to Graphics#star"),this._callContextMethod("star",args)}}const localUniformMSDFBit={name:"local-uniform-msdf-bit",vertex:{header:`
+ struct LocalUniforms {
+ uColor:vec4,
+ uTransformMatrix:mat3x3,
+ uDistance: f32,
+ uRound:f32,
+ }
+
+ @group(2) @binding(0) var localUniforms : LocalUniforms;
+ `,main:`
+ vColor *= localUniforms.uColor;
+ modelMatrix *= localUniforms.uTransformMatrix;
+ `,end:`
+ if(localUniforms.uRound == 1)
+ {
+ vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
+ }
+ `},fragment:{header:`
+ struct LocalUniforms {
+ uColor:vec4,
+ uTransformMatrix:mat3x3,
+ uDistance: f32
+ }
+
+ @group(2) @binding(0) var localUniforms : LocalUniforms;
+ `,main:`
+ outColor = vec4(calculateMSDFAlpha(outColor, localUniforms.uColor, localUniforms.uDistance));
+ `}},localUniformMSDFBitGl={name:"local-uniform-msdf-bit",vertex:{header:`
+ uniform mat3 uTransformMatrix;
+ uniform vec4 uColor;
+ uniform float uRound;
+ `,main:`
+ vColor *= uColor;
+ modelMatrix *= uTransformMatrix;
+ `,end:`
+ if(uRound == 1.)
+ {
+ gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
+ }
+ `},fragment:{header:`
+ uniform float uDistance;
+ `,main:`
+ outColor = vec4(calculateMSDFAlpha(outColor, vColor, uDistance));
+ `}},mSDFBit={name:"msdf-bit",fragment:{header:`
+ fn calculateMSDFAlpha(msdfColor:vec4, shapeColor:vec4, distance:f32) -> f32 {
+
+ // MSDF
+ var median = msdfColor.r + msdfColor.g + msdfColor.b -
+ min(msdfColor.r, min(msdfColor.g, msdfColor.b)) -
+ max(msdfColor.r, max(msdfColor.g, msdfColor.b));
+
+ // SDF
+ median = min(median, msdfColor.a);
+
+ var screenPxDistance = distance * (median - 0.5);
+ var alpha = clamp(screenPxDistance + 0.5, 0.0, 1.0);
+ if (median < 0.01) {
+ alpha = 0.0;
+ } else if (median > 0.99) {
+ alpha = 1.0;
+ }
+
+ // Gamma correction for coverage-like alpha
+ var luma: f32 = dot(shapeColor.rgb, vec3(0.299, 0.587, 0.114));
+ var gamma: f32 = mix(1.0, 1.0 / 2.2, luma);
+ var coverage: f32 = pow(shapeColor.a * alpha, gamma);
+
+ return coverage;
+
+ }
+ `}},mSDFBitGl={name:"msdf-bit",fragment:{header:`
+ float calculateMSDFAlpha(vec4 msdfColor, vec4 shapeColor, float distance) {
+
+ // MSDF
+ float median = msdfColor.r + msdfColor.g + msdfColor.b -
+ min(msdfColor.r, min(msdfColor.g, msdfColor.b)) -
+ max(msdfColor.r, max(msdfColor.g, msdfColor.b));
+
+ // SDF
+ median = min(median, msdfColor.a);
+
+ float screenPxDistance = distance * (median - 0.5);
+ float alpha = clamp(screenPxDistance + 0.5, 0.0, 1.0);
+
+ if (median < 0.01) {
+ alpha = 0.0;
+ } else if (median > 0.99) {
+ alpha = 1.0;
+ }
+
+ // Gamma correction for coverage-like alpha
+ float luma = dot(shapeColor.rgb, vec3(0.299, 0.587, 0.114));
+ float gamma = mix(1.0, 1.0 / 2.2, luma);
+ float coverage = pow(shapeColor.a * alpha, gamma);
+
+ return coverage;
+ }
+ `}};let gpuProgram$1,glProgram$1;class SdfShader extends Shader{constructor(){var uniforms=new UniformGroup({uColor:{value:new Float32Array([1,1,1,1]),type:"vec4"},uTransformMatrix:{value:new Matrix,type:"mat3x3"},uDistance:{value:4,type:"f32"},uRound:{value:0,type:"f32"}}),maxTextures=getMaxTexturesPerBatch();null!=gpuProgram$1?gpuProgram$1:gpuProgram$1=compileHighShaderGpuProgram({name:"sdf-shader",bits:[colorBit,generateTextureBatchBit(maxTextures),localUniformMSDFBit,mSDFBit,roundPixelsBit]}),null!=glProgram$1?glProgram$1:glProgram$1=compileHighShaderGlProgram({name:"sdf-shader",bits:[colorBitGl,generateTextureBatchBitGl(maxTextures),localUniformMSDFBitGl,mSDFBitGl,roundPixelsBitGl]}),super({glProgram:glProgram$1,gpuProgram:gpuProgram$1,resources:{localUniforms:uniforms,batchSamplers:getBatchSamplersUniformGroup(maxTextures)}})}}class AbstractBitmapFont extends EventEmitter{constructor(){super(...arguments),this.chars=Object.create(null),this.lineHeight=0,this.fontFamily="",this.fontMetrics={fontSize:0,ascent:0,descent:0},this.baseLineOffset=0,this.distanceField={type:"none",range:0},this.pages=[],this.applyFillAsTint=!0,this.baseMeasurementFontSize=100,this.baseRenderedFontSize=100}get font(){return deprecation(v8_0_0,"BitmapFont.font is deprecated, please use BitmapFont.fontFamily instead."),this.fontFamily}get pageTextures(){return deprecation(v8_0_0,"BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead."),this.pages}get size(){return deprecation(v8_0_0,"BitmapFont.size is deprecated, please use BitmapFont.fontMetrics.fontSize instead."),this.fontMetrics.fontSize}get distanceFieldRange(){return deprecation(v8_0_0,"BitmapFont.distanceFieldRange is deprecated, please use BitmapFont.distanceField.range instead."),this.distanceField.range}get distanceFieldType(){return deprecation(v8_0_0,"BitmapFont.distanceFieldType is deprecated, please use BitmapFont.distanceField.type instead."),this.distanceField.type}destroy(destroyTextures=!1){var _a;this.emit("destroy",this),this.removeAllListeners();for(const i in this.chars)null!=(_a=this.chars[i].texture)&&_a.destroy();this.chars=null,destroyTextures&&(this.pages.forEach(page=>page.texture.destroy(!0)),this.pages=null)}}function resolveCharacters(chars){if(""===chars)return[];var result=[];for(let i=0,j=(chars="string"==typeof chars?[chars]:chars).length;ikey in obj?__defProp$Q(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$Q=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$Q.call(b,prop)&&__defNormalProp$Q(a,prop,b[prop]);if(__getOwnPropSymbols$Q)for(var prop of __getOwnPropSymbols$Q(b))__propIsEnum$Q.call(b,prop)&&__defNormalProp$Q(a,prop,b[prop]);return a};const _DynamicBitmapFont=class _DynamicBitmapFont extends AbstractBitmapFont{constructor(options){super(),this.resolution=1,this.pages=[],this._padding=0,this._measureCache=Object.create(null),this._currentChars=[],this._currentX=0,this._currentY=0,this._currentPageIndex=-1,this._skipKerning=!1;var options=__spreadValues$Q(__spreadValues$Q({},_DynamicBitmapFont.defaultOptions),options),style=(this._textureSize=options.textureSize,this._mipmap=options.mipmap,options.style.clone()),requestedFontSize=(options.overrideFill&&(style._fill.color=16777215,style._fill.alpha=1,style._fill.texture=Texture.WHITE,style._fill.fill=null),this.applyFillAsTint=options.overrideFill,style.fontSize),font=(style.fontSize=this.baseMeasurementFontSize,fontStringFromTextStyle(style));options.overrideSize?style._stroke&&(style._stroke.width*=this.baseRenderedFontSize/requestedFontSize):style.fontSize=this.baseRenderedFontSize=requestedFontSize,this._style=style,this._skipKerning=null!=(requestedFontSize=options.skipKerning)&&requestedFontSize,this.resolution=null!=(requestedFontSize=options.resolution)?requestedFontSize:1,this._padding=null!=(requestedFontSize=options.padding)?requestedFontSize:4,this.fontMetrics=CanvasTextMetrics.measureFont(font),this.lineHeight=style.lineHeight||this.fontMetrics.fontSize||style.fontSize}ensureCharacters(chars){var charList=resolveCharacters(chars).filter(char=>!this._currentChars.includes(char)).filter((char,index,self)=>self.indexOf(char)===index);if(charList.length){this._currentChars=[...this._currentChars,...charList];let pageData,{canvas,context}=(pageData=-1===this._currentPageIndex?this._nextPage():this.pages[this._currentPageIndex]).canvasAndContext,textureSource=pageData.texture.source;var style=this._style;let currentX=this._currentX,currentY=this._currentY;var fontScale=this.baseRenderedFontSize/this.baseMeasurementFontSize,padding=this._padding*fontScale;let maxCharHeight=0,skipTexture=!1;var maxTextureWidth=canvas.width/this.resolution,maxTextureHeight=canvas.height/this.resolution;for(let i=0;imaxTextureWidth&&(currentY+=maxCharHeight,maxCharHeight=paddedHeight,currentX=0,currentY+maxCharHeight>maxTextureHeight)&&(textureSource.update(),pageData2=this._nextPage(),canvas=pageData2.canvasAndContext.canvas,context=pageData2.canvasAndContext.context,textureSource=pageData2.texture.source,currentY=0),width/fontScale-(null!=(width=null==(pageData2=style.dropShadow)?void 0:pageData2.distance)?width:0)-(null!=(width=null==(width=style._stroke)?void 0:width.width)?width:0));this.chars[char]={id:char.codePointAt(0),xOffset:-this._padding,yOffset:-this._padding,xAdvance:width,kerning:{}},skipTexture&&(this._drawGlyph(context,metrics,currentX+padding,currentY+padding,fontScale,style),width=textureSource.width*fontScale,metrics=textureSource.height*fontScale,width=new Rectangle(currentX/width*textureSource.width,currentY/metrics*textureSource.height,paddedWidth/width*textureSource.width,paddedHeight/metrics*textureSource.height),this.chars[char].texture=new Texture({source:textureSource,frame:width}),currentX+=Math.ceil(paddedWidth))}textureSource.update(),this._currentX=currentX,this._currentY=currentY,this._skipKerning&&this._applyKerning(charList,context)}}get pageTextures(){return deprecation(v8_0_0,"BitmapFont.pageTextures is deprecated, please use BitmapFont.pages instead."),this.pages}_applyKerning(newChars,context){var measureCache=this._measureCache;for(let i=0;i{let index=currentLine.chars.length-1;if(trimEnd){let lastChar=currentLine.chars[index];for(;" "===lastChar;)currentLine.width-=font.chars[lastChar].xAdvance,lastChar=currentLine.chars[--index]}layoutData.width=Math.max(layoutData.width,currentLine.width),currentLine={width:0,charPositions:[],chars:[],spaceWidth:0,spacesIndex:[]},firstWord=!0,layoutData.lines.push(currentLine),layoutData.height+=font.lineHeight},scale=font.baseMeasurementFontSize/style.fontSize,adjustedLetterSpacing=style.letterSpacing*scale,adjustedWordWrapWidth=style.wordWrapWidth*scale;for(let i=0;iadjustedWordWrapWidth?nextLine():currentWord.start=currentLine.width;var word=currentWord,start=currentLine.width;for(let j=0;jkey in obj?__defProp$P(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$P=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$P.call(b,prop)&&__defNormalProp$P(a,prop,b[prop]);if(__getOwnPropSymbols$P)for(var prop of __getOwnPropSymbols$P(b))__propIsEnum$P.call(b,prop)&&__defNormalProp$P(a,prop,b[prop]);return a};let fontCount=0;const BitmapFontManager=new class{constructor(){this.ALPHA=[["a","z"],["A","Z"]," "],this.NUMERIC=[["0","9"]],this.ALPHANUMERIC=[["a","z"],["A","Z"],["0","9"]," "],this.ASCII=[[" ","~"]],this.defaultOptions={chars:this.ALPHANUMERIC,resolution:1,padding:4,skipKerning:!1}}getFont(text,style){var _a;let fontFamilyKey=style.fontFamily+"-bitmap",overrideFill=!0;if(style._fill.fill&&!style._stroke)fontFamilyKey+=style._fill.fill.styleKey,overrideFill=!1;else if(style._stroke||style.dropShadow){let key=style.styleKey;key=key.substring(0,key.lastIndexOf("-")),fontFamilyKey=key+"-bitmap",overrideFill=!1}return Cache.has(fontFamilyKey)||(style=new DynamicBitmapFont(__spreadValues$P({style:style,overrideFill:overrideFill,overrideSize:!0},this.defaultOptions)),50<++fontCount&&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})\``),style.once("destroy",()=>{fontCount--,Cache.remove(fontFamilyKey)}),Cache.set(fontFamilyKey,style)),null!=(_a=(style=Cache.get(fontFamilyKey)).ensureCharacters)&&_a.call(style,text),style}getLayout(text,style,trimEnd=!0){var bitmapFont=this.getFont(text,style);return getBitmapTextLayout([...text],style,bitmapFont,trimEnd)}measureText(text,style,trimEnd=!0){return this.getLayout(text,style,trimEnd)}install(...args){var _a;let options=args[0];"string"==typeof options&&(options={name:options,style:args[1],chars:null==(_a=args[2])?void 0:_a.chars,resolution:null==(_a=args[2])?void 0:_a.resolution,padding:null==(_a=args[2])?void 0:_a.padding,skipKerning:null==(_a=args[2])?void 0:_a.skipKerning},deprecation(v8_0_0,"BitmapFontManager.install(name, style, options) is deprecated, use BitmapFontManager.install({name, style, ...options})"));const name=null==options?void 0:options.name;if(name)return args=null!==(_a=(args=(options=__spreadValues$P(__spreadValues$P({},this.defaultOptions),options)).style)instanceof TextStyle?args:new TextStyle(args))._fill.fill&&void 0!==_a._fill.fill,_a=new DynamicBitmapFont({style:_a,overrideFill:args,skipKerning:options.skipKerning,padding:options.padding,resolution:options.resolution,overrideSize:!1}),args=resolveCharacters(options.chars),_a.ensureCharacters(args.join("")),Cache.set(name+"-bitmap",_a),_a.once("destroy",()=>Cache.remove(name+"-bitmap")),_a;throw new Error("[BitmapFontManager] Property `name` is required.")}uninstall(name){name+="-bitmap",(name=Cache.get(name))&&name.destroy()}};class BitmapTextPipe{constructor(renderer){this._gpuBitmapText={},this._destroyRenderableBound=this.destroyRenderable.bind(this),this._renderer=renderer,this._renderer.renderableGC.addManagedHash(this,"_gpuBitmapText")}validateRenderable(bitmapText){var graphicsRenderable=this._getGpuBitmapText(bitmapText);return bitmapText._didTextUpdate&&(bitmapText._didTextUpdate=!1,this._updateContext(bitmapText,graphicsRenderable)),this._renderer.renderPipes.graphics.validateRenderable(graphicsRenderable)}addRenderable(bitmapText,instructionSet){var graphicsRenderable=this._getGpuBitmapText(bitmapText);syncWithProxy(bitmapText,graphicsRenderable),bitmapText._didTextUpdate&&(bitmapText._didTextUpdate=!1,this._updateContext(bitmapText,graphicsRenderable)),this._renderer.renderPipes.graphics.addRenderable(graphicsRenderable,instructionSet),graphicsRenderable.context.customShader&&this._updateDistanceField(bitmapText)}destroyRenderable(bitmapText){bitmapText.off("destroyed",this._destroyRenderableBound),this._destroyRenderableByUid(bitmapText.uid)}_destroyRenderableByUid(renderableUid){var context=this._gpuBitmapText[renderableUid].context;context.customShader&&(BigPool.return(context.customShader),context.customShader=null),BigPool.return(this._gpuBitmapText[renderableUid]),this._gpuBitmapText[renderableUid]=null}updateRenderable(bitmapText){var graphicsRenderable=this._getGpuBitmapText(bitmapText);syncWithProxy(bitmapText,graphicsRenderable),this._renderer.renderPipes.graphics.updateRenderable(graphicsRenderable),graphicsRenderable.context.customShader&&this._updateDistanceField(bitmapText)}_updateContext(bitmapText,proxyGraphics){var context=proxyGraphics.context,bitmapFont=BitmapFontManager.getFont(bitmapText.text,bitmapText._style),chars=(context.clear(),"none"===bitmapFont.distanceField.type||context.customShader||(context.customShader=BigPool.get(SdfShader)),Array.from(bitmapText.text)),proxyGraphics=bitmapText._style;let currentY=bitmapFont.baseLineOffset;var bitmapTextLayout=getBitmapTextLayout(chars,proxyGraphics,bitmapFont,!0);let index=0;var padding=proxyGraphics.padding,scale=bitmapTextLayout.scale;let tx=bitmapTextLayout.width,ty=bitmapTextLayout.height+bitmapTextLayout.offsetY;proxyGraphics._stroke&&(tx+=proxyGraphics._stroke.width/scale,ty+=proxyGraphics._stroke.width/scale),context.translate(-bitmapText._anchor._x*tx-padding,-bitmapText._anchor._y*ty-padding).scale(scale,scale);var tint=bitmapFont.applyFillAsTint?proxyGraphics._fill.color:16777215;for(let i=0;i{console.error(e)}),htmlText._didTextUpdate=!1,updateTextBounds(batchableSprite,htmlText)}async _updateGpuText(htmlText){htmlText._didTextUpdate=!1;var newKey,batchableSprite,gpuText=this._getGpuText(htmlText);gpuText.generatingTexture||(newKey=htmlText._getKey(),this._renderer.htmlText.decreaseReferenceCount(gpuText.currentKey),gpuText.generatingTexture=!0,gpuText.currentKey=newKey,newKey=null!=(newKey=htmlText.resolution)?newKey:this._renderer.resolution,newKey=await this._renderer.htmlText.getManagedTexture(htmlText.text,newKey,htmlText._style,htmlText._getKey()),(batchableSprite=gpuText.batchableSprite).texture=gpuText.texture=newKey,gpuText.generatingTexture=!1,gpuText.textureNeedsUploading=!0,htmlText.onViewUpdate(),updateTextBounds(batchableSprite,htmlText))}_getGpuText(htmlText){return this._gpuText[htmlText.uid]||this.initGpuText(htmlText)}initGpuText(htmlText){var gpuTextData={texture:Texture.EMPTY,currentKey:"--",batchableSprite:BigPool.get(BatchableSprite),textureNeedsUploading:!1,generatingTexture:!1},batchableSprite=gpuTextData.batchableSprite;return batchableSprite.renderable=htmlText,batchableSprite.transform=htmlText.groupTransform,batchableSprite.texture=Texture.EMPTY,batchableSprite.bounds={minX:0,maxX:1,minY:0,maxY:0},batchableSprite.roundPixels=this._renderer._roundPixels|htmlText._roundPixels,htmlText._resolution=(htmlText._autoResolution?this._renderer:htmlText).resolution,this._gpuText[htmlText.uid]=gpuTextData,htmlText.on("destroyed",this._destroyRenderableBound),gpuTextData}destroy(){for(const i in this._gpuText)this._destroyRenderableById(i);this._gpuText=null,this._renderer=null}}function isSafari(){var userAgent=DOMAdapter.get().getNavigator().userAgent;return/^((?!chrome|android).)*safari/i.test(userAgent)}HTMLTextPipe.extension={type:[ExtensionType2.WebGLPipes,ExtensionType2.WebGPUPipes,ExtensionType2.CanvasPipes],name:"htmlText"};const nssvg="http://www.w3.org/2000/svg",nsxhtml="http://www.w3.org/1999/xhtml";class HTMLTextRenderData{constructor(){this.svgRoot=document.createElementNS(nssvg,"svg"),this.foreignObject=document.createElementNS(nssvg,"foreignObject"),this.domElement=document.createElementNS(nsxhtml,"div"),this.styleElement=document.createElementNS(nsxhtml,"style"),this.image=new Image;var{foreignObject,svgRoot,styleElement,domElement}=this;foreignObject.setAttribute("width","10000"),foreignObject.setAttribute("height","10000"),foreignObject.style.overflow="hidden",svgRoot.appendChild(foreignObject),foreignObject.appendChild(styleElement),foreignObject.appendChild(domElement)}}function textStyleToCSS(style){var stroke=style._stroke,fill=style._fill,fill=[`div { ${["color: "+Color.shared.setValue(fill.color).toHex(),`font-size: ${style.fontSize}px`,"font-family: "+style.fontFamily,"font-weight: "+style.fontWeight,"font-style: "+style.fontStyle,"font-variant: "+style.fontVariant,`letter-spacing: ${style.letterSpacing}px`,"text-align: "+style.align,`padding: ${style.padding}px`,"white-space: "+("pre"===style.whiteSpace&&style.wordWrap?"pre-wrap":style.whiteSpace),...style.lineHeight?[`line-height: ${style.lineHeight}px`]:[],...style.wordWrap?["word-wrap: "+(style.breakWords?"break-all":"break-word"),`max-width: ${style.wordWrapWidth}px`]:[],...stroke?[strokeToCSS(stroke)]:[],...style.dropShadow?[dropShadowToCSS(style.dropShadow)]:[],...style.cssOverrides].join(";")} }`],tagStyles=style.tagStyles,out=fill;for(const i in tagStyles){var tagStyle=tagStyles[i],cssTagStyle=[];for(const j in tagStyle)transform[j]?cssTagStyle.push(transform[j](tagStyle[j])):templates[j]&&cssTagStyle.push(templates[j].replace("{{VALUE}}",tagStyle[j]));out.push(`${i} { ${cssTagStyle.join(";")} }`)}return fill.join(" ")}function dropShadowToCSS(dropShadowStyle){var color=Color.shared.setValue(dropShadowStyle.color).setAlpha(dropShadowStyle.alpha).toHexa(),position=Math.round(Math.cos(dropShadowStyle.angle)*dropShadowStyle.distance)+`px ${Math.round(Math.sin(dropShadowStyle.angle)*dropShadowStyle.distance)}px`;return 0"color: "+Color.shared.setValue(value).toHex(),breakWords:value=>"word-wrap: "+(value?"break-all":"break-word"),stroke:strokeToCSS,dropShadow:dropShadowToCSS};var __defProp$O=Object.defineProperty,__getOwnPropSymbols$O=Object.getOwnPropertySymbols,__hasOwnProp$O=Object.prototype.hasOwnProperty,__propIsEnum$O=Object.prototype.propertyIsEnumerable,__defNormalProp$O=(obj,key,value)=>key in obj?__defProp$O(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;class HTMLTextStyle extends TextStyle{constructor(options={}){super(options),this._cssOverrides=[],null==this.cssOverrides&&(this.cssOverrides=options.cssOverrides),this.tagStyles=null!=(options=options.tagStyles)?options:{}}set cssOverrides(value){this._cssOverrides=value instanceof Array?value:[value],this.update()}get cssOverrides(){return this._cssOverrides}_generateKey(){return this._styleKey=generateTextStyleKey(this)+this._cssOverrides.join("-"),this._styleKey}update(){this._cssStyle=null,super.update()}clone(){return new HTMLTextStyle({align:this.align,breakWords:this.breakWords,dropShadow:this.dropShadow?((a,b)=>{for(var prop in b=b||{})__hasOwnProp$O.call(b,prop)&&__defNormalProp$O(a,prop,b[prop]);if(__getOwnPropSymbols$O)for(var prop of __getOwnPropSymbols$O(b))__propIsEnum$O.call(b,prop)&&__defNormalProp$O(a,prop,b[prop]);return a})({},this.dropShadow):null,fill:this._fill,fontFamily:this.fontFamily,fontSize:this.fontSize,fontStyle:this.fontStyle,fontVariant:this.fontVariant,fontWeight:this.fontWeight,letterSpacing:this.letterSpacing,lineHeight:this.lineHeight,padding:this.padding,stroke:this._stroke,whiteSpace:this.whiteSpace,wordWrap:this.wordWrap,wordWrapWidth:this.wordWrapWidth,cssOverrides:this.cssOverrides})}get cssStyle(){return this._cssStyle||(this._cssStyle=textStyleToCSS(this)),this._cssStyle}addOverride(...value){0<(value=value.filter(v=>!this.cssOverrides.includes(v))).length&&(this.cssOverrides.push(...value),this.update())}removeOverride(...value){const toRemove=value.filter(v=>this.cssOverrides.includes(v));0!toRemove.includes(v)),this.update())}set fill(value){"string"!=typeof value&&"number"!=typeof value&&warn("[HTMLTextStyle] only color fill is not supported by HTMLText"),super.fill=value}set stroke(value){value&&"string"!=typeof value&&"number"!=typeof value&&warn("[HTMLTextStyle] only color stroke is not supported by HTMLText"),super.stroke=value}}function extractFontFamilies(text,style){var fontFamily=style.fontFamily;const fontFamilies=[],dedupe={};function addFontFamily(fontFamily2){dedupe[fontFamily2]||(fontFamilies.push(fontFamily2),dedupe[fontFamily2]=!0)}if(text=text.match(/font-family:([^;"\s]+)/g),Array.isArray(fontFamily))for(let i=0;i{addFontFamily(match.split(":")[1].trim())});for(const i in style.tagStyles)addFontFamily(style.tagStyles[i].fontFamily);return fontFamilies}async function loadFontAsBase64(url){const blob=await(await DOMAdapter.get().fetch(url)).blob(),reader=new FileReader;return new Promise((resolve,reject)=>{reader.onloadend=()=>resolve(reader.result),reader.onerror=reject,reader.readAsDataURL(blob)})}async function loadFontCSS(style,url){return url=await loadFontAsBase64(url),`@font-face {
+ font-family: "${style.fontFamily}";
+ src: url('${url}');
+ font-weight: ${style.fontWeight};
+ font-style: ${style.fontStyle};
+ }`}const FontStylePromiseCache=new Map;async function getFontCss(fontFamilies,style,defaultOptions){return fontFamilies=fontFamilies.filter(fontFamily=>Cache.has(fontFamily+"-and-url")).map((fontFamily,i)=>{var url;return FontStylePromiseCache.has(fontFamily)||(url=Cache.get(fontFamily+"-and-url").url,0===i?FontStylePromiseCache.set(fontFamily,loadFontCSS({fontWeight:style.fontWeight,fontStyle:style.fontStyle,fontFamily:fontFamily},url)):FontStylePromiseCache.set(fontFamily,loadFontCSS({fontWeight:defaultOptions.fontWeight,fontStyle:defaultOptions.fontStyle,fontFamily:fontFamily},url))),FontStylePromiseCache.get(fontFamily)}),(await Promise.all(fontFamilies)).join("\n")}function getSVGUrl(text,style,resolution,fontCSS,htmlTextData){var{domElement,styleElement,svgRoot}=htmlTextData,{width:style,height:text}=(domElement.innerHTML=`${text}
`,domElement.setAttribute("style",`transform: scale(${resolution});transform-origin: top left; display: inline-block`),styleElement.textContent=fontCSS,htmlTextData.image);return svgRoot.setAttribute("width",style.toString()),svgRoot.setAttribute("height",text.toString()),(new XMLSerializer).serializeToString(svgRoot)}function getTemporaryCanvasFromImage(image,resolution){var context=(resolution=CanvasPool.getOptimalCanvasAndContext(image.width,image.height,resolution)).context;return context.clearRect(0,0,image.width,image.height),context.drawImage(image,0,0),resolution}function loadSVGImage(image,url,delay){return new Promise(async resolve=>{delay&&await new Promise(resolve2=>setTimeout(resolve2,100)),image.onload=()=>{resolve()},image.src="data:image/svg+xml;charset=utf8,"+encodeURIComponent(url),image.crossOrigin="anonymous"})}let tempHTMLTextRenderData;function measureHtmlText(text,style,fontStyleCSS,htmlTextRenderData){var{domElement:htmlTextRenderData,styleElement,svgRoot}=htmlTextRenderData=htmlTextRenderData||(tempHTMLTextRenderData=tempHTMLTextRenderData||new HTMLTextRenderData),text=(htmlTextRenderData.innerHTML=`${text}
`,htmlTextRenderData.setAttribute("style","transform-origin: top left; display: inline-block"),fontStyleCSS&&(styleElement.textContent=fontStyleCSS),document.body.appendChild(svgRoot),htmlTextRenderData.getBoundingClientRect()),styleElement=(svgRoot.remove(),2*style.padding);return{width:text.width-styleElement,height:text.height-styleElement}}class HTMLTextSystem{constructor(renderer){this._activeTextures={},this._renderer=renderer,this._createCanvas=renderer.type===RendererType.WEBGPU}getTexture(options){return this._buildTexturePromise(options.text,options.resolution,options.style)}getManagedTexture(text,resolution,style,textKey){return this._activeTextures[textKey]?(this._increaseReferenceCount(textKey),this._activeTextures[textKey].promise):(text=this._buildTexturePromise(text,resolution,style).then(texture=>this._activeTextures[textKey].texture=texture),this._activeTextures[textKey]={texture:null,promise:text,usageCount:1},text)}async _buildTexturePromise(text,resolution,style){var htmlTextData=BigPool.get(HTMLTextRenderData),fontFamilies=extractFontFamilies(text,style),fontCSS=await getFontCss(fontFamilies,style,HTMLTextStyle.defaultTextStyle),measured=measureHtmlText(text,style,fontCSS,htmlTextData),width=Math.ceil(Math.ceil(Math.max(1,measured.width)+2*style.padding)*resolution),measured=Math.ceil(Math.ceil(Math.max(1,measured.height)+2*style.padding)*resolution),image=htmlTextData.image,width=(image.width=2+(0|width),image.height=2+(0|measured),getSVGUrl(text,style,resolution,fontCSS,htmlTextData)),measured=(await loadSVGImage(image,width,isSafari()&&0{activeTexture.texture=texture,this._cleanUp(activeTexture)}).catch(()=>{warn("HTMLTextSystem: Failed to clean texture")}),this._activeTextures[textKey]=null)}_cleanUp(activeTexture){TexturePool.returnTexture(activeTexture.texture),activeTexture.texture.source.resource=null,activeTexture.texture.source.uploadMethodId="unknown"}getReferenceCount(textKey){return this._activeTextures[textKey].usageCount}destroy(){this._activeTextures=null}}HTMLTextSystem.extension={type:[ExtensionType2.WebGLSystem,ExtensionType2.WebGPUSystem,ExtensionType2.CanvasSystem],name:"htmlText"},HTMLTextSystem.defaultFontOptions={fontFamily:"Arial",fontStyle:"normal",fontWeight:"normal"},extensions.add(HTMLTextSystem),extensions.add(HTMLTextPipe);var __defProp$N=Object.defineProperty,__getOwnPropSymbols$N=Object.getOwnPropertySymbols,__hasOwnProp$N=Object.prototype.hasOwnProperty,__propIsEnum$N=Object.prototype.propertyIsEnumerable,__defNormalProp$N=(obj,key,value)=>key in obj?__defProp$N(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$N=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$N.call(b,prop)&&__defNormalProp$N(a,prop,b[prop]);if(__getOwnPropSymbols$N)for(var prop of __getOwnPropSymbols$N(b))__propIsEnum$N.call(b,prop)&&__defNormalProp$N(a,prop,b[prop]);return a};const _MeshGeometry=class _MeshGeometry extends Geometry{constructor(...args){let options=null!=(_a=args[0])?_a:{};options instanceof Float32Array&&(deprecation(v8_0_0,"use new MeshGeometry({ positions, uvs, indices }) instead"),options={positions:options,uvs:args[1],indices:args[2]});var _a=(options=__spreadValues$N(__spreadValues$N({},_MeshGeometry.defaultOptions),options)).positions||new Float32Array([0,0,1,0,1,1,0,1]),uvs=options.uvs||(options.positions?new Float32Array(_a.length):new Float32Array([0,0,1,0,1,1,0,1])),args=options.indices||new Uint32Array([0,1,2,0,2,3]),shrinkToFit=options.shrinkBuffersToFit;super({attributes:{aPosition:{buffer:new Buffer({data:_a,label:"attribute-mesh-positions",shrinkToFit:shrinkToFit,usage:BufferUsage.VERTEX|BufferUsage.COPY_DST}),format:"float32x2",stride:8,offset:0},aUV:{buffer:new Buffer({data:uvs,label:"attribute-mesh-uvs",shrinkToFit:shrinkToFit,usage:BufferUsage.VERTEX|BufferUsage.COPY_DST}),format:"float32x2",stride:8,offset:0}},indexBuffer:new Buffer({data:args,label:"index-mesh-buffer",shrinkToFit:shrinkToFit,usage:BufferUsage.INDEX|BufferUsage.COPY_DST}),topology:options.topology}),this.batchMode="auto"}get positions(){return this.attributes.aPosition.buffer.data}set positions(value){this.attributes.aPosition.buffer.data=value}get uvs(){return this.attributes.aUV.buffer.data}set uvs(value){this.attributes.aUV.buffer.data=value}get indices(){return this.indexBuffer.data}set indices(value){this.indexBuffer.data=value}};_MeshGeometry.defaultOptions={topology:"triangle-list",shrinkBuffersToFit:!1};let MeshGeometry=_MeshGeometry;var __defProp$M=Object.defineProperty,__defProps$l=Object.defineProperties,__getOwnPropDescs$l=Object.getOwnPropertyDescriptors,__getOwnPropSymbols$M=Object.getOwnPropertySymbols,__hasOwnProp$M=Object.prototype.hasOwnProperty,__propIsEnum$M=Object.prototype.propertyIsEnumerable,__defNormalProp$M=(obj,key,value)=>key in obj?__defProp$M(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadProps$l=(a,b)=>__defProps$l(a,__getOwnPropDescs$l(b));const localUniformBit={name:"local-uniform-bit",vertex:{header:`
+
+ struct LocalUniforms {
+ uTransformMatrix:mat3x3,
+ uColor:vec4,
+ uRound:f32,
+ }
+
+ @group(1) @binding(0) var localUniforms : LocalUniforms;
+ `,main:`
+ vColor *= localUniforms.uColor;
+ modelMatrix *= localUniforms.uTransformMatrix;
+ `,end:`
+ if(localUniforms.uRound == 1)
+ {
+ vPosition = vec4(roundPixels(vPosition.xy, globalUniforms.uResolution), vPosition.zw);
+ }
+ `}},localUniformBitGroup2=__spreadProps$l((__spreadValues$M=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$M.call(b,prop)&&__defNormalProp$M(a,prop,b[prop]);if(__getOwnPropSymbols$M)for(var prop of __getOwnPropSymbols$M(b))__propIsEnum$M.call(b,prop)&&__defNormalProp$M(a,prop,b[prop]);return a})({},localUniformBit),{vertex:__spreadProps$l(__spreadValues$M({},localUniformBit.vertex),{header:localUniformBit.vertex.header.replace("group(1)","group(2)")})}),localUniformBitGl={name:"local-uniform-bit",vertex:{header:`
+
+ uniform mat3 uTransformMatrix;
+ uniform vec4 uColor;
+ uniform float uRound;
+ `,main:`
+ vColor *= uColor;
+ modelMatrix = uTransformMatrix;
+ `,end:`
+ if(uRound == 1.)
+ {
+ gl_Position.xy = roundPixels(gl_Position.xy, uResolution);
+ }
+ `}},tilingBit={name:"tiling-bit",vertex:{header:`
+ struct TilingUniforms {
+ uMapCoord:mat3x3,
+ uClampFrame:vec4,
+ uClampOffset:vec2,
+ uTextureTransform:mat3x3,
+ uSizeAnchor:vec4
+ };
+
+ @group(2) @binding(0) var tilingUniforms: TilingUniforms;
+ @group(2) @binding(1) var uTexture: texture_2d;
+ @group(2) @binding(2) var uSampler: sampler;
+ `,main:`
+ uv = (tilingUniforms.uTextureTransform * vec3(uv, 1.0)).xy;
+
+ position = (position - tilingUniforms.uSizeAnchor.zw) * tilingUniforms.uSizeAnchor.xy;
+ `},fragment:{header:`
+ struct TilingUniforms {
+ uMapCoord:mat3x3,
+ uClampFrame:vec4,
+ uClampOffset:vec2,
+ uTextureTransform:mat3x3,
+ uSizeAnchor:vec4
+ };
+
+ @group(2) @binding(0) var tilingUniforms: TilingUniforms;
+ @group(2) @binding(1) var uTexture: texture_2d;
+ @group(2) @binding(2) var uSampler: sampler;
+ `,main:`
+
+ var coord = vUV + ceil(tilingUniforms.uClampOffset - vUV);
+ coord = (tilingUniforms.uMapCoord * vec3(coord, 1.0)).xy;
+ var unclamped = coord;
+ coord = clamp(coord, tilingUniforms.uClampFrame.xy, tilingUniforms.uClampFrame.zw);
+
+ var bias = 0.;
+
+ if(unclamped.x == coord.x && unclamped.y == coord.y)
+ {
+ bias = -32.;
+ }
+
+ outColor = textureSampleBias(uTexture, uSampler, coord, bias);
+ `}},tilingBitGl={name:"tiling-bit",vertex:{header:`
+ uniform mat3 uTextureTransform;
+ uniform vec4 uSizeAnchor;
+
+ `,main:`
+ uv = (uTextureTransform * vec3(aUV, 1.0)).xy;
+
+ position = (position - uSizeAnchor.zw) * uSizeAnchor.xy;
+ `},fragment:{header:`
+ uniform sampler2D uTexture;
+ uniform mat3 uMapCoord;
+ uniform vec4 uClampFrame;
+ uniform vec2 uClampOffset;
+ `,main:`
+
+ vec2 coord = vUV + ceil(uClampOffset - vUV);
+ coord = (uMapCoord * vec3(coord, 1.0)).xy;
+ vec2 unclamped = coord;
+ coord = clamp(coord, uClampFrame.xy, uClampFrame.zw);
+
+ outColor = texture(uTexture, coord, unclamped == coord ? 0.0 : -32.0);// lod-bias very negative to force lod 0
+
+ `}};let gpuProgram,glProgram;class TilingSpriteShader extends Shader{constructor(){null!=gpuProgram?gpuProgram:gpuProgram=compileHighShaderGpuProgram({name:"tiling-sprite-shader",bits:[localUniformBit,tilingBit,roundPixelsBit]}),null!=glProgram?glProgram:glProgram=compileHighShaderGlProgram({name:"tiling-sprite-shader",bits:[localUniformBitGl,tilingBitGl,roundPixelsBitGl]});var tilingUniforms=new UniformGroup({uMapCoord:{value:new Matrix,type:"mat3x3"},uClampFrame:{value:new Float32Array([0,0,1,1]),type:"vec4"},uClampOffset:{value:new Float32Array([0,0]),type:"vec2"},uTextureTransform:{value:new Matrix,type:"mat3x3"},uSizeAnchor:{value:new Float32Array([100,100,.5,.5]),type:"vec4"}});super({glProgram:glProgram,gpuProgram:gpuProgram,resources:{localUniforms:new UniformGroup({uTransformMatrix:{value:new Matrix,type:"mat3x3"},uColor:{value:new Float32Array([1,1,1,1]),type:"vec4"},uRound:{value:0,type:"f32"}}),tilingUniforms:tilingUniforms,uTexture:Texture.EMPTY.source,uSampler:Texture.EMPTY.source.style}})}updateUniforms(width,height,matrix,anchorX,anchorY,texture){var tilingUniforms=this.resources.tilingUniforms,textureWidth=texture.width,textureHeight=texture.height,textureMatrix=texture.textureMatrix,uTextureTransform=tilingUniforms.uniforms.uTextureTransform;uTextureTransform.set(matrix.a*textureWidth/width,matrix.b*textureWidth/height,matrix.c*textureHeight/width,matrix.d*textureHeight/height,matrix.tx/width,matrix.ty/height),uTextureTransform.invert(),tilingUniforms.uniforms.uMapCoord=textureMatrix.mapCoord,tilingUniforms.uniforms.uClampFrame=textureMatrix.uClampFrame,tilingUniforms.uniforms.uClampOffset=textureMatrix.uClampOffset,tilingUniforms.uniforms.uTextureTransform=uTextureTransform,tilingUniforms.uniforms.uSizeAnchor[0]=width,tilingUniforms.uniforms.uSizeAnchor[1]=height,tilingUniforms.uniforms.uSizeAnchor[2]=anchorX,tilingUniforms.uniforms.uSizeAnchor[3]=anchorY,texture&&(this.resources.uTexture=texture.source,this.resources.uSampler=texture.source.style)}}class QuadGeometry extends MeshGeometry{constructor(){super({positions:new Float32Array([0,0,1,0,1,1,0,1]),uvs:new Float32Array([0,0,1,0,1,1,0,1]),indices:new Uint32Array([0,1,2,0,2,3])})}}function setPositions(tilingSprite,positions){var anchorX=tilingSprite.anchor.x,anchorY=tilingSprite.anchor.y;positions[0]=-anchorX*tilingSprite.width,positions[1]=-anchorY*tilingSprite.height,positions[2]=(1-anchorX)*tilingSprite.width,positions[3]=-anchorY*tilingSprite.height,positions[4]=(1-anchorX)*tilingSprite.width,positions[5]=(1-anchorY)*tilingSprite.height,positions[6]=-anchorX*tilingSprite.width,positions[7]=(1-anchorY)*tilingSprite.height}function applyMatrix(array,stride,offset,matrix){let index=0;var size=array.length/(stride||2),a=matrix.a,b=matrix.b,c=matrix.c,d=matrix.d,tx=matrix.tx,ty=matrix.ty;for(offset*=stride;indexkey in obj?__defProp$L(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$L=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$L.call(b,prop)&&__defNormalProp$L(a,prop,b[prop]);if(__getOwnPropSymbols$L)for(var prop of __getOwnPropSymbols$L(b))__propIsEnum$L.call(b,prop)&&__defNormalProp$L(a,prop,b[prop]);return a};const _PlaneGeometry=class _PlaneGeometry extends MeshGeometry{constructor(...args){var _a;super({});let options=null!=(_a=args[0])?_a:{};"number"==typeof options&&(deprecation(v8_0_0,"PlaneGeometry constructor changed please use { width, height, verticesX, verticesY } instead"),options={width:options,height:args[1],verticesX:args[2],verticesY:args[3]}),this.build(options)}build(options){options=__spreadValues$L(__spreadValues$L({},_PlaneGeometry.defaultOptions),options),this.verticesX=null!=(_a=this.verticesX)?_a:options.verticesX,this.verticesY=null!=(_a=this.verticesY)?_a:options.verticesY,this.width=null!=(_a=this.width)?_a:options.width,this.height=null!=(_a=this.height)?_a:options.height;var _a,total=this.verticesX*this.verticesY,verts=[],uvs=[],indices=[],verticesX=this.verticesX-1,verticesY=this.verticesY-1,sizeX=this.width/verticesX,sizeY=this.height/verticesY;for(let i=0;ikey in obj?__defProp$K(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$K=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$K.call(b,prop)&&__defNormalProp$K(a,prop,b[prop]);if(__getOwnPropSymbols$K)for(var prop of __getOwnPropSymbols$K(b))__propIsEnum$K.call(b,prop)&&__defNormalProp$K(a,prop,b[prop]);return a};const _NineSliceGeometry=class _NineSliceGeometry extends PlaneGeometry{constructor(options={}){super({width:(options=__spreadValues$K(__spreadValues$K({},_NineSliceGeometry.defaultOptions),options)).width,height:options.height,verticesX:4,verticesY:4}),this.update(options)}update(options){var _a;this.width=null!=(_a=options.width)?_a:this.width,this.height=null!=(_a=options.height)?_a:this.height,this._originalWidth=null!=(_a=options.originalWidth)?_a:this._originalWidth,this._originalHeight=null!=(_a=options.originalHeight)?_a:this._originalHeight,this._leftWidth=null!=(_a=options.leftWidth)?_a:this._leftWidth,this._rightWidth=null!=(_a=options.rightWidth)?_a:this._rightWidth,this._topHeight=null!=(_a=options.topHeight)?_a:this._topHeight,this._bottomHeight=null!=(_a=options.bottomHeight)?_a:this._bottomHeight,this._anchorX=null==(_a=options.anchor)?void 0:_a.x,this._anchorY=null==(_a=options.anchor)?void 0:_a.y,this.updateUvs(),this.updatePositions()}updatePositions(){var p=this.positions,{width,height,_leftWidth,_rightWidth,_topHeight,_bottomHeight,_anchorX,_anchorY}=this,w=_leftWidth+_rightWidth,h=_topHeight+_bottomHeight,w=Math.min(w"},uInputPixel:{value:new Float32Array(4),type:"vec4"},uInputClamp:{value:new Float32Array(4),type:"vec4"},uOutputFrame:{value:new Float32Array(4),type:"vec4"},uGlobalFrame:{value:new Float32Array(4),type:"vec4"},uOutputTexture:{value:new Float32Array(4),type:"vec4"}}),this._globalFilterBindGroup=new BindGroup({}),this.renderer=renderer}get activeBackTexture(){var _a;return null==(_a=this._activeFilterData)?void 0:_a.backTexture}push(instruction){var renderer=this.renderer,filters=instruction.filterEffect.filters,filterData=(this._filterStack[this._filterStackIndex]||(this._filterStack[this._filterStackIndex]=this._getFilterData()),this._filterStack[this._filterStackIndex]);if(this._filterStackIndex++,0===filters.length)filterData.skip=!0;else{var filterFrameTransform,rootResolution,bounds=filterData.bounds,colorTextureSource=(instruction.renderables?getGlobalRenderableBounds(instruction.renderables,bounds):instruction.filterEffect.filterArea?(bounds.clear(),bounds.addRect(instruction.filterEffect.filterArea),bounds.applyMatrix(instruction.container.worldTransform)):instruction.container.getFastGlobalBounds(!0,bounds),instruction.container&&(filterFrameTransform=(instruction.container.renderGroup||instruction.container.parentRenderGroup).cacheToLocalTransform)&&bounds.applyMatrix(filterFrameTransform),renderer.renderTarget.renderTarget.colorTexture.source);let resolution=1/0,padding=0,antialias=!0,blendRequired=!1,enabled=!1,clipToViewport=!0;for(let i=0;ikey in obj?__defProp$J(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$J=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$J.call(b,prop)&&__defNormalProp$J(a,prop,b[prop]);if(__getOwnPropSymbols$J)for(var prop of __getOwnPropSymbols$J(b))__propIsEnum$J.call(b,prop)&&__defNormalProp$J(a,prop,b[prop]);return a};const defaultRunners=["init","destroy","contextChange","resolutionChange","resetState","renderEnd","renderStart","render","update","postrender","prerender"],_AbstractRenderer=class _AbstractRenderer extends EventEmitter{constructor(config){super(),this.runners=Object.create(null),this.renderPipes=Object.create(null),this._initOptions={},this._systemsHash=Object.create(null),this.type=config.type,this.name=config.name,this.config=config,config=[...defaultRunners,...null!=(config=this.config.runners)?config:[]],this._addRunners(...config),this._unsafeEvalCheck()}async init(options={}){await loadEnvironmentExtensions(!0===options.skipExtensionImports||!1===options.manageImports),this._addSystems(this.config.systems),this._addPipes(this.config.renderPipes,this.config.renderPipeAdaptors);for(const systemName in this._systemsHash){var defaultSystemOptions=this._systemsHash[systemName].constructor.defaultOptions;options=__spreadValues$J(__spreadValues$J({},defaultSystemOptions),options)}options=__spreadValues$J(__spreadValues$J({},_AbstractRenderer.defaultOptions),options),this._roundPixels=options.roundPixels?1:0;for(let i=0;i{this.runners[runnerId]=new SystemRunner(runnerId)})}_addSystems(systems){let i;for(i in systems){var val=systems[i];this._addSystem(val.value,val.name)}}_addSystem(ClassRef,name){var system=new ClassRef(this);if(this[name])throw new Error(`Whoops! The name "${name}" is already in use`);this[name]=system,this._systemsHash[name]=system;for(const i in this.runners)this.runners[i].add(system);return this}_addPipes(pipes,pipeAdaptors){const adaptors=pipeAdaptors.reduce((acc,adaptor)=>(acc[adaptor.name]=adaptor.value,acc),{});pipes.forEach(pipe=>{var PipeClass=pipe.value,pipe=pipe.name,Adaptor=adaptors[pipe];this.renderPipes[pipe]=new PipeClass(this,Adaptor?new Adaptor:null)})}destroy(options=!1){this.runners.destroy.items.reverse(),this.runners.destroy.emit(options),Object.values(this.runners).forEach(runner=>{runner.destroy()}),this._systemsHash=null,this.renderPipes=null}generateTexture(options){return this.textureGenerator.generateTexture(options)}get roundPixels(){return!!this._roundPixels}_unsafeEvalCheck(){if(!unsafeEvalSupported())throw new Error("Current environment does not allow unsafe-eval, please use pixi.js/unsafe-eval module to enable support.")}resetState(){this.runners.resetState.emit()}};_AbstractRenderer.defaultOptions={resolution:1,failIfMajorPerformanceCaveat:!1,roundPixels:!1};let AbstractRenderer=_AbstractRenderer,_isWebGLSupported;function isWebGLSupported(failIfMajorPerformanceCaveat){return _isWebGLSupported=void 0===_isWebGLSupported?(()=>{var _a,contextOptions={stencil:!0,failIfMajorPerformanceCaveat:null!=failIfMajorPerformanceCaveat?failIfMajorPerformanceCaveat:AbstractRenderer.defaultOptions.failIfMajorPerformanceCaveat};try{if(!DOMAdapter.get().getWebGLRenderingContext())return!1;let gl=DOMAdapter.get().createCanvas().getContext("webgl",contextOptions);var loseContext,success=!(null==(_a=null==gl?void 0:gl.getContextAttributes())||!_a.stencil);return gl&&(loseContext=gl.getExtension("WEBGL_lose_context"))&&loseContext.loseContext(),gl=null,success}catch(_e){return!1}})():_isWebGLSupported}let _isWebGPUSupported;async function isWebGPUSupported(options={}){return _isWebGPUSupported=void 0===_isWebGPUSupported?await(async()=>{var gpu=DOMAdapter.get().getNavigator().gpu;if(!gpu)return!1;try{return await(await gpu.requestAdapter(options)).requestDevice(),!0}catch(_e){return!1}})():_isWebGPUSupported}var __defProp$I=Object.defineProperty,__getOwnPropSymbols$I=Object.getOwnPropertySymbols,__hasOwnProp$I=Object.prototype.hasOwnProperty,__propIsEnum$I=Object.prototype.propertyIsEnumerable,__defNormalProp$I=(obj,key,value)=>key in obj?__defProp$I(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$I=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$I.call(b,prop)&&__defNormalProp$I(a,prop,b[prop]);if(__getOwnPropSymbols$I)for(var prop of __getOwnPropSymbols$I(b))__propIsEnum$I.call(b,prop)&&__defNormalProp$I(a,prop,b[prop]);return a};const renderPriority=["webgl","webgpu","canvas"];async function autoDetectRenderer(options){var renderer;let preferredOrder=[];options.preference?(preferredOrder.push(options.preference),renderPriority.forEach(item=>{item!==options.preference&&preferredOrder.push(item)})):preferredOrder=renderPriority.slice();let RendererClass,finalOptions={};for(let i=0;ikey in obj?__defProp$H(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;const _Application=class _Application{constructor(...args){this.stage=new Container,void 0!==args[0]&&deprecation(v8_0_0,"Application constructor options are deprecated, please use Application.init() instead.")}async init(options){options=((a,b)=>{for(var prop in b=options||{})__hasOwnProp$H.call(b,prop)&&__defNormalProp$H(a,prop,b[prop]);if(__getOwnPropSymbols$H)for(var prop of __getOwnPropSymbols$H(b))__propIsEnum$H.call(b,prop)&&__defNormalProp$H(a,prop,b[prop]);return a})({}),this.renderer=await autoDetectRenderer(options),_Application._plugins.forEach(plugin=>{plugin.init.call(this,options)})}render(){this.renderer.render({container:this.stage})}get canvas(){return this.renderer.canvas}get view(){return deprecation(v8_0_0,"Application.view is deprecated, please use Application.canvas instead."),this.renderer.canvas}get screen(){return this.renderer.screen}destroy(rendererDestroyOptions=!1,options=!1){var plugins=_Application._plugins.slice(0);plugins.reverse(),plugins.forEach(plugin=>{plugin.destroy.call(this)}),this.stage.destroy(options),this.stage=null,this.renderer.destroy(rendererDestroyOptions),this.renderer=null}};_Application._plugins=[],__spreadProps$l=_Application,extensions.handleByList(ExtensionType2.Application,__spreadProps$l._plugins),extensions.add(ApplicationInitHook);class BitmapFont extends AbstractBitmapFont{constructor(options,url){super();const{textures,data}=options;Object.keys(data.pages).forEach(key=>{key=data.pages[parseInt(key,10)],key=textures[key.id],this.pages.push({texture:key})}),Object.keys(data.chars).forEach(key=>{var charData=data.chars[key],{frame:textureFrame,source:textureSource}=textures[charData.page],textureFrame=new Rectangle(charData.x+textureFrame.x,charData.y+textureFrame.y,charData.width,charData.height),textureSource=new Texture({source:textureSource,frame:textureFrame});this.chars[key]={id:key.codePointAt(0),xOffset:charData.xOffset,yOffset:charData.yOffset,xAdvance:charData.xAdvance,kerning:null!=(textureFrame=charData.kerning)?textureFrame:{},texture:textureSource}}),this.baseRenderedFontSize=data.fontSize,this.baseMeasurementFontSize=data.fontSize,this.fontMetrics={ascent:0,descent:0,fontSize:data.fontSize},this.baseLineOffset=data.baseLineOffset,this.lineHeight=data.lineHeight,this.fontFamily=data.fontFamily,this.distanceField=null!=(options=data.distanceField)?options:{type:"none",range:0},this.url=url}destroy(){super.destroy();for(let i=0;i"))&&bitmapFontXMLParser.test(DOMAdapter.get().parseXML(data))},parse(data){return bitmapFontXMLParser.parse(DOMAdapter.get().parseXML(data))}},validExtensions=[".xml",".fnt"];var __spreadValues$M={extension:{type:ExtensionType2.CacheParser,name:"cacheBitmapFont"},test:asset=>asset instanceof BitmapFont,getCacheableAssets(keys,asset){const out={};return keys.forEach(key=>{out[key]=asset,out[key+"-bitmap"]=asset}),out[asset.fontFamily+"-bitmap"]=asset,out}},CLEAR2={extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.Normal},name:"loadBitmapFont",test(url){return validExtensions.includes(path.extname(url).toLowerCase())},async testParse(data){return bitmapFontTextParser.test(data)||bitmapFontXMLStringParser.test(data)},async parse(asset,data,loader){var asset=(bitmapFontTextParser.test(asset)?bitmapFontTextParser:bitmapFontXMLStringParser).parse(asset),src=data.src,pages=asset.pages,textureUrls=[],textureOptions=asset.distanceField?{scaleMode:"linear",alphaMode:"premultiply-alpha-on-upload",autoGenerateMipmaps:!1,resolution:1}:{};for(let i=0;iloadedTextures[url.src]),new BitmapFont({data:asset,textures:data},src)},async load(url,_options){return(await DOMAdapter.get().fetch(url)).text()},async unload(bitmapFont,_resolvedAsset,loader){await Promise.all(bitmapFont.pages.map(page=>loader.unload(page.texture.source._sourceOrigin))),bitmapFont.destroy()}};class BackgroundLoader{constructor(loader,verbose=!1){this._loader=loader,this._assetList=[],this._isLoading=!1,this._maxConcurrent=1,this.verbose=verbose}add(assetUrls){assetUrls.forEach(a=>{this._assetList.push(a)}),this.verbose&&console.log("[BackgroundLoader] assets: ",this._assetList),this._isActive&&!this._isLoading&&this._next()}async _next(){if(this._assetList.length&&this._isActive){this._isLoading=!0;var toLoad=[],toLoadAmount=Math.min(this._assetList.length,this._maxConcurrent);for(let i=0;iArray.isArray(asset)&&asset.every(t=>t instanceof Texture),getCacheableAssets:(keys,asset)=>{const out={};return keys.forEach(key=>{asset.forEach((item,i)=>{out[key+(0===i?"":i+1)]=item})}),out}};async function testImageFormat(imageData){if("Image"in globalThis)return new Promise(resolve=>{var image=new Image;image.onload=()=>{resolve(!0)},image.onerror=()=>{resolve(!1)},image.src=imageData});if("createImageBitmap"in globalThis&&"fetch"in globalThis){try{var blob=await(await fetch(imageData)).blob();await createImageBitmap(blob)}catch(_e){return!1}return!0}return!1}var detectAvif={extension:{type:ExtensionType2.DetectionParser,priority:1},test:async()=>testImageFormat("data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAAB0AAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAIAAAACAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQ0MAAAAABNjb2xybmNseAACAAIAAYAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAACVtZGF0EgAKCBgANogQEAwgMg8f8D///8WfhwB8+ErK42A="),add:async formats=>[...formats,"avif"],remove:async formats=>formats.filter(f=>"avif"!==f)};const imageFormats=["png","jpg","jpeg"];var detectDefaults={extension:{type:ExtensionType2.DetectionParser,priority:-1},test:()=>Promise.resolve(!0),add:async formats=>[...formats,...imageFormats],remove:async formats=>formats.filter(f=>!imageFormats.includes(f))};const inWorker="WorkerGlobalScope"in globalThis&&globalThis instanceof globalThis.WorkerGlobalScope;function testVideoFormat(mimeType){return!inWorker&&""!==document.createElement("video").canPlayType(mimeType)}var detectMp4={extension:{type:ExtensionType2.DetectionParser,priority:0},test:async()=>testVideoFormat("video/mp4"),add:async formats=>[...formats,"mp4","m4v"],remove:async formats=>formats.filter(f=>"mp4"!==f&&"m4v"!==f)},detectOgv={extension:{type:ExtensionType2.DetectionParser,priority:0},test:async()=>testVideoFormat("video/ogg"),add:async formats=>[...formats,"ogv"],remove:async formats=>formats.filter(f=>"ogv"!==f)},detectWebm={extension:{type:ExtensionType2.DetectionParser,priority:0},test:async()=>testVideoFormat("video/webm"),add:async formats=>[...formats,"webm"],remove:async formats=>formats.filter(f=>"webm"!==f)},detectWebp={extension:{type:ExtensionType2.DetectionParser,priority:0},test:async()=>testImageFormat("data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA="),add:async formats=>[...formats,"webp"],remove:async formats=>formats.filter(f=>"webp"!==f)},__defProp$G=Object.defineProperty,__defProps$k=Object.defineProperties,__getOwnPropDescs$k=Object.getOwnPropertyDescriptors,__getOwnPropSymbols$G=Object.getOwnPropertySymbols,__hasOwnProp$G=Object.prototype.hasOwnProperty,__propIsEnum$G=Object.prototype.propertyIsEnumerable,__defNormalProp$G=(obj,key,value)=>key in obj?__defProp$G(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;class Loader{constructor(){this._parsers=[],this._parsersValidated=!1,this.parsers=new Proxy(this._parsers,{set:(target,key,value)=>(this._parsersValidated=!1,target[key]=value,!0)}),this.promiseCache={}}reset(){this._parsersValidated=!1,this.promiseCache={}}_getLoadPromiseAndParser(url,data){const result={promise:null,parser:null};return result.promise=(async()=>{var _a,_b;let asset=null,parser=null;if(data.loadParser&&!(parser=this._parserHash[data.loadParser])&&warn(`[Assets] specified load parser "${data.loadParser}" not found while loading `+url),!parser){for(let i=0;i({alias:[item],src:item,data:{}}))).length;var promises=assetsToLoadIn.map(async asset=>{var url=path.toAbsolute(asset.src);if(!assets[asset.src])try{this.promiseCache[url]||(this.promiseCache[url]=this._getLoadPromiseAndParser(url,asset)),assets[asset.src]=await this.promiseCache[url].promise,onProgress&&onProgress(++count/total)}catch(e){throw delete this.promiseCache[url],delete assets[asset.src],new Error(`[Loader.load] Failed to load ${url}.
+`+e)}});return await Promise.all(promises),singleAsset?assets[assetsToLoadIn[0].src]:assets}async unload(assetsToUnloadIn){assetsToUnloadIn=convertToList(assetsToUnloadIn,item=>({alias:[item],src:item})).map(async asset=>{var loadedAsset,url=path.toAbsolute(asset.src),loadPromise=this.promiseCache[url];loadPromise&&(loadedAsset=await loadPromise.promise,delete this.promiseCache[url],await(null==(loadPromise=null==(url=loadPromise.parser)?void 0:url.unload)?void 0:loadPromise.call(url,loadedAsset,asset,this)))}),await Promise.all(assetsToUnloadIn)}_validateParsers(){this._parsersValidated=!0,this._parserHash=this._parsers.filter(parser=>parser.name).reduce((hash,parser)=>(parser.name?hash[parser.name]&&warn(`[Assets] loadParser name conflict "${parser.name}"`):warn("[Assets] loadParser should have a name"),hash=((a,b)=>{for(var prop in b=hash||{})__hasOwnProp$G.call(b,prop)&&__defNormalProp$G(a,prop,b[prop]);if(__getOwnPropSymbols$G)for(var prop of __getOwnPropSymbols$G(b))__propIsEnum$G.call(b,prop)&&__defNormalProp$G(a,prop,b[prop]);return a})({}),parser={[parser.name]:parser},__defProps$k(hash,__getOwnPropDescs$k(parser))),{})}}function checkDataUrl(url,mimes){if(Array.isArray(mimes)){for(const mime of mimes)if(url.startsWith("data:"+mime))return!0;return!1}return url.startsWith("data:"+mimes)}function checkExtension(url,extension){return url=url.split("?")[0],url=path.extname(url).toLowerCase(),Array.isArray(extension)?extension.includes(url):url===extension}var loadJson={extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.Low},name:"loadJson",test(url){return checkDataUrl(url,"application/json")||checkExtension(url,".json")},async load(url){return(await DOMAdapter.get().fetch(url)).json()}},loadTxt={name:"loadTxt",extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.Low,name:"loadTxt"},test(url){return checkDataUrl(url,"text/plain")||checkExtension(url,".txt")},async load(url){return(await DOMAdapter.get().fetch(url)).text()}},__defProp$F=Object.defineProperty,__defProps$j=Object.defineProperties,__getOwnPropDescs$j=Object.getOwnPropertyDescriptors,__getOwnPropSymbols$F=Object.getOwnPropertySymbols,__hasOwnProp$F=Object.prototype.hasOwnProperty,__propIsEnum$F=Object.prototype.propertyIsEnumerable,__defNormalProp$F=(obj,key,value)=>key in obj?__defProp$F(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;const validWeights=["normal","bold","100","200","300","400","500","600","700","800","900"],validFontExtensions=[".ttf",".otf",".woff",".woff2"],validFontMIMEs=["font/ttf","font/otf","font/woff","font/woff2"],CSS_IDENT_TOKEN_REGEX=/^(--|-?[A-Z_])[0-9A-Z_-]*$/i;function getFontFamilyName(url){var ext=path.extname(url);let valid=0<(url=path.basename(url,ext).replace(/(-|_)/g," ").toLowerCase().split(" ").map(word=>word.charAt(0).toUpperCase()+word.slice(1))).length;for(const token of url)if(!token.match(CSS_IDENT_TOKEN_REGEX)){valid=!1;break}let fontFamilyName=url.join(" ");return fontFamilyName=valid?fontFamilyName:`"${fontFamilyName.replace(/[\\"]/g,"\\$&")}"`}const validURICharactersRegex=/^[0-9A-Za-z%:/?#\[\]@!\$&'()\*\+,;=\-._~]*$/;var loadWebFont={extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.Low},name:"loadWebFont",test(url){return checkDataUrl(url,validFontMIMEs)||checkExtension(url,validFontExtensions)},async load(url,options){var _a,fonts=DOMAdapter.get().getFontFaceSet();if(fonts){var fontFaces=[],name=null!=(_a=null==(_a=options.data)?void 0:_a.family)?_a:getFontFamilyName(url),weights=null!=(_a=null==(_a=null==(_a=options.data)?void 0:_a.weights)?void 0:_a.filter(weight=>validWeights.includes(weight)))?_a:["normal"],data=null!=(_a=options.data)?_a:{};for(let i=0;i{for(var prop in b=data||{})__hasOwnProp$F.call(b,prop)&&__defNormalProp$F(a,prop,b[prop]);if(__getOwnPropSymbols$F)for(var prop of __getOwnPropSymbols$F(b))__propIsEnum$F.call(b,prop)&&__defNormalProp$F(a,prop,b[prop]);return a})({}),__defProps$j(uri,__getOwnPropDescs$j({weight:weight}))));await uri.load(),fonts.add(uri),fontFaces.push(uri)}return Cache.set(name+"-and-url",{url:url,fontFaces:fontFaces}),1===fontFaces.length?fontFaces[0]:fontFaces}return warn("[loadWebFont] FontFace API is not supported. Skipping loading font"),null},unload(font){(Array.isArray(font)?font:[font]).forEach(t=>{Cache.remove(t.family+"-and-url"),DOMAdapter.get().getFontFaceSet().delete(t)})}};function getResolutionOfUrl(url,defaultValue=1){var _a=null==(_a=Resolver.RETINA_PREFIX)?void 0:_a.exec(url);return _a?parseFloat(_a[1]):defaultValue}function createTexture(source,loader,url){source.label=url,source._sourceOrigin=url;var texture=new Texture({source:source,label:url});const unload=()=>{delete loader.promiseCache[url],Cache.has(url)&&Cache.remove(url)};return texture.source.once("destroy",()=>{loader.promiseCache[url]&&(warn("[Assets] A TextureSource managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the TextureSource."),unload())}),texture.once("destroy",()=>{source.destroyed||(warn("[Assets] A Texture managed by Assets was destroyed instead of unloaded! Use Assets.unload() instead of destroying the Texture."),unload())}),texture}var __defProp$E=Object.defineProperty,__getOwnPropSymbols$E=Object.getOwnPropertySymbols,__hasOwnProp$E=Object.prototype.hasOwnProperty,__propIsEnum$E=Object.prototype.propertyIsEnumerable,__defNormalProp$E=(obj,key,value)=>key in obj?__defProp$E(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,loadSvg={extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.Low,name:"loadSVG"},name:"loadSVG",config:{crossOrigin:"anonymous",parseAsGraphicsContext:!1},test(url){return checkDataUrl(url,"image/svg+xml")||checkExtension(url,".svg")},async load(url,asset,loader){var _a;return(null!=(_a=null==(_a=asset.data)?void 0:_a.parseAsGraphicsContext)?_a:this.config.parseAsGraphicsContext)?async function(url){var url=await(url=await DOMAdapter.get().fetch(url)).text(),context=new GraphicsContext;return context.svg(url),context}(url):async function(url,asset,loader,crossOrigin){var response=await(response=await DOMAdapter.get().fetch(url)).blob(),response=URL.createObjectURL(response),image=new Image,response=(image.src=response,image.crossOrigin=crossOrigin,await image.decode(),URL.revokeObjectURL(response),(crossOrigin=document.createElement("canvas")).getContext("2d")),_a=(null==(_a=asset.data)?void 0:_a.resolution)||getResolutionOfUrl(url),_b=null!=(_b=null==(_b=asset.data)?void 0:_b.width)?_b:image.width,_d=null!=(_d=null==(_d=asset.data)?void 0:_d.height)?_d:image.height,{}=(crossOrigin.width=_b*_a,crossOrigin.height=_d*_a,response.drawImage(image,0,0,_b*_a,_d*_a),image=null!=(response=asset.data)?response:{}),_b=((source,exclude)=>{var target={};for(prop in source)__hasOwnProp$E.call(source,prop)&&exclude.indexOf(prop)<0&&(target[prop]=source[prop]);if(null!=source&&__getOwnPropSymbols$E)for(var prop of __getOwnPropSymbols$E(source))exclude.indexOf(prop)<0&&__propIsEnum$E.call(source,prop)&&(target[prop]=source[prop]);return target})(image,["parseAsGraphicsContext"]);return createTexture(new ImageSource(((a,b)=>{for(var prop in b=_b||{})__hasOwnProp$E.call(b,prop)&&__defNormalProp$E(a,prop,b[prop]);if(__getOwnPropSymbols$E)for(var prop of __getOwnPropSymbols$E(b))__propIsEnum$E.call(b,prop)&&__defNormalProp$E(a,prop,b[prop]);return a})({resource:crossOrigin,alphaMode:"premultiply-alpha-on-upload",resolution:_a})),loader,url)}(url,asset,loader,this.config.crossOrigin)},unload(asset){asset.destroy(!0)}};let WORKER_URL$3=null,WorkerInstance$3=class{constructor(){WORKER_URL$3=WORKER_URL$3||URL.createObjectURL(new Blob(['(function () {\n \'use strict\';\n\n const WHITE_PNG = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8/x8AAwMCAO+ip1sAAAAASUVORK5CYII=";\n async function checkImageBitmap() {\n try {\n if (typeof createImageBitmap !== "function")\n return false;\n const response = await fetch(WHITE_PNG);\n const imageBlob = await response.blob();\n const imageBitmap = await createImageBitmap(imageBlob);\n return imageBitmap.width === 1 && imageBitmap.height === 1;\n } catch (_e) {\n return false;\n }\n }\n void checkImageBitmap().then((result) => {\n self.postMessage(result);\n });\n\n})();\n'],{type:"application/javascript"})),this.worker=new Worker(WORKER_URL$3)}},WORKER_URL$2=(WorkerInstance$3.revokeObjectURL=function(){WORKER_URL$3&&(URL.revokeObjectURL(WORKER_URL$3),WORKER_URL$3=null)},null),WorkerInstance$2=class{constructor(){WORKER_URL$2=WORKER_URL$2||URL.createObjectURL(new Blob(['(function () {\n \'use strict\';\n\n async function loadImageBitmap(url, alphaMode) {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`[WorkerManager.loadImageBitmap] Failed to fetch ${url}: ${response.status} ${response.statusText}`);\n }\n const imageBlob = await response.blob();\n return alphaMode === "premultiplied-alpha" ? createImageBitmap(imageBlob, { premultiplyAlpha: "none" }) : createImageBitmap(imageBlob);\n }\n self.onmessage = async (event) => {\n try {\n const imageBitmap = await loadImageBitmap(event.data.data[0], event.data.data[1]);\n self.postMessage({\n data: imageBitmap,\n uuid: event.data.uuid,\n id: event.data.id\n }, [imageBitmap]);\n } catch (e) {\n self.postMessage({\n error: e,\n uuid: event.data.uuid,\n id: event.data.id\n });\n }\n };\n\n})();\n'],{type:"application/javascript"})),this.worker=new Worker(WORKER_URL$2)}},UUID=(WorkerInstance$2.revokeObjectURL=function(){WORKER_URL$2&&(URL.revokeObjectURL(WORKER_URL$2),WORKER_URL$2=null)},0),MAX_WORKERS;const WorkerManager=new class{constructor(){this._initialized=!1,this._createdWorkers=0,this._workerPool=[],this._queue=[],this._resolveHash={}}isImageBitmapSupported(){return void 0===this._isImageBitmapSupported&&(this._isImageBitmapSupported=new Promise(resolve=>{const worker=(new WorkerInstance$3).worker;worker.addEventListener("message",event=>{worker.terminate(),WorkerInstance$3.revokeObjectURL(),resolve(event.data)})})),this._isImageBitmapSupported}loadImageBitmap(src,asset){return this._run("loadImageBitmap",[src,null==(src=null==asset?void 0:asset.data)?void 0:src.alphaMode])}async _initWorkers(){this._initialized||(this._initialized=!0)}_getWorker(){void 0===MAX_WORKERS&&(MAX_WORKERS=navigator.hardwareConcurrency||4);let worker=this._workerPool.pop();return!worker&&this._createdWorkers{this._complete(event.data),this._returnWorker(event.target),this._next()})),worker}_returnWorker(worker){this._workerPool.push(worker)}_complete(data){void 0!==data.error?this._resolveHash[data.uuid].reject(data.error):this._resolveHash[data.uuid].resolve(data.data),this._resolveHash[data.uuid]=null}async _run(id,args){await this._initWorkers();var promise=new Promise((resolve,reject)=>{this._queue.push({id:id,arguments:args,resolve:resolve,reject:reject})});return this._next(),promise}_next(){var worker,toDo,id;this._queue.length&&(worker=this._getWorker())&&(id=(toDo=this._queue.pop()).id,this._resolveHash[UUID]={resolve:toDo.resolve,reject:toDo.reject},worker.postMessage({data:toDo.arguments,uuid:UUID++,id:id}))}};var __defProp$D=Object.defineProperty,__getOwnPropSymbols$D=Object.getOwnPropertySymbols,__hasOwnProp$D=Object.prototype.hasOwnProperty,__propIsEnum$D=Object.prototype.propertyIsEnumerable,__defNormalProp$D=(obj,key,value)=>key in obj?__defProp$D(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value;const validImageExtensions=[".jpeg",".jpg",".png",".webp",".avif"],validImageMIMEs=["image/jpeg","image/png","image/webp","image/avif"];async function loadImageBitmap(url,asset){var imageBlob,response=await DOMAdapter.get().fetch(url);if(response.ok)return imageBlob=await response.blob(),"premultiplied-alpha"===(null==(asset=null==asset?void 0:asset.data)?void 0:asset.alphaMode)?createImageBitmap(imageBlob,{premultiplyAlpha:"none"}):createImageBitmap(imageBlob);throw new Error(`[loadImageBitmap] Failed to fetch ${url}: ${response.status} `+response.statusText)}var loadTextures={name:"loadTextures",extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.High,name:"loadTextures"},config:{preferWorkers:!0,preferCreateImageBitmap:!0,crossOrigin:"anonymous"},test(url){return checkDataUrl(url,validImageMIMEs)||checkExtension(url,validImageExtensions)},async load(url,asset,loader){var _a;let src=null;return src=globalThis.createImageBitmap&&this.config.preferCreateImageBitmap?this.config.preferWorkers&&await WorkerManager.isImageBitmapSupported()?await WorkerManager.loadImageBitmap(url,asset):await loadImageBitmap(url,asset):await new Promise((resolve,reject)=>{(src=new Image).crossOrigin=this.config.crossOrigin,src.src=url,src.complete?resolve(src):(src.onload=()=>{resolve(src)},src.onerror=reject)}),createTexture(new ImageSource(((a,b)=>{for(var prop in b=asset.data||{})__hasOwnProp$D.call(b,prop)&&__defNormalProp$D(a,prop,b[prop]);if(__getOwnPropSymbols$D)for(var prop of __getOwnPropSymbols$D(b))__propIsEnum$D.call(b,prop)&&__defNormalProp$D(a,prop,b[prop]);return a})({resource:src,alphaMode:"premultiply-alpha-on-upload",resolution:(null==(_a=asset.data)?void 0:_a.resolution)||getResolutionOfUrl(url)})),loader,url)},unload(texture){texture.destroy(!0)}},__defProp$C=Object.defineProperty,__defProps$i=Object.defineProperties,__getOwnPropDescs$i=Object.getOwnPropertyDescriptors,__getOwnPropSymbols$C=Object.getOwnPropertySymbols,__hasOwnProp$C=Object.prototype.hasOwnProperty,__propIsEnum$C=Object.prototype.propertyIsEnumerable,__defNormalProp$C=(obj,key,value)=>key in obj?__defProp$C(obj,key,{enumerable:!0,configurable:!0,writable:!0,value:value}):obj[key]=value,__spreadValues$C=(a,b)=>{for(var prop in b=b||{})__hasOwnProp$C.call(b,prop)&&__defNormalProp$C(a,prop,b[prop]);if(__getOwnPropSymbols$C)for(var prop of __getOwnPropSymbols$C(b))__propIsEnum$C.call(b,prop)&&__defNormalProp$C(a,prop,b[prop]);return a},__spreadProps$i=(a,b)=>__defProps$i(a,__getOwnPropDescs$i(b));const validVideoExtensions=[".mp4",".m4v",".webm",".ogg",".ogv",".h264",".avi",".mov"],validVideoMIMEs=validVideoExtensions.map(ext=>"video/"+ext.substring(1));function crossOrigin(element,url,crossorigin){void 0!==crossorigin||url.startsWith("data:")?!1!==crossorigin&&(element.crossOrigin="string"==typeof crossorigin?crossorigin:"anonymous"):element.crossOrigin=determineCrossOrigin(url)}function preloadVideo(element){return new Promise((resolve,reject)=>{function loaded(){cleanup(),resolve()}function error(err){cleanup(),reject(err)}function cleanup(){element.removeEventListener("canplaythrough",loaded),element.removeEventListener("error",error)}element.addEventListener("canplaythrough",loaded),element.addEventListener("error",error),element.load()})}function determineCrossOrigin(url,loc=globalThis.location){return url.startsWith("data:")||(loc=loc||globalThis.location,(url=new URL(url,document.baseURI)).hostname===loc.hostname&&url.port===loc.port&&url.protocol===loc.protocol)?"":"anonymous"}var loadVideoTextures={name:"loadVideo",extension:{type:ExtensionType2.LoadParser,name:"loadVideo"},test(url){var isValidDataUrl=checkDataUrl(url,validVideoMIMEs),url=checkExtension(url,validVideoExtensions);return isValidDataUrl||url},async load(url,asset,loader){var _a;const options=__spreadValues$C(__spreadProps$i(__spreadValues$C({},VideoSource.defaultOptions),{resolution:(null==(_a=asset.data)?void 0:_a.resolution)||getResolutionOfUrl(url),alphaMode:(null==(_a=asset.data)?void 0:_a.alphaMode)||await detectVideoAlphaMode()}),asset.data),videoElement=document.createElement("video"),attributeMap={preload:!1!==options.autoLoad?"auto":void 0,"webkit-playsinline":!1!==options.playsinline?"":void 0,playsinline:!1!==options.playsinline?"":void 0,muted:!0===options.muted?"":void 0,loop:!0===options.loop?"":void 0,autoplay:!1!==options.autoPlay?"":void 0},sourceElement=(Object.keys(attributeMap).forEach(key=>{var value=attributeMap[key];void 0!==value&&videoElement.setAttribute(key,value)}),!0===options.muted&&(videoElement.muted=!0),crossOrigin(videoElement,url,options.crossorigin),document.createElement("source"));let mime;return url.startsWith("data:")?mime=url.slice(5,url.indexOf(";")):url.startsWith("blob:")||(_a=url.split("?")[0].slice(url.lastIndexOf(".")+1).toLowerCase(),mime=VideoSource.MIME_TYPES[_a]||"video/"+_a),sourceElement.src=url,mime&&(sourceElement.type=mime),new Promise(resolve=>{const onCanPlay=async()=>{var base=new VideoSource(__spreadProps$i(__spreadValues$C({},options),{resource:videoElement}));videoElement.removeEventListener("canplay",onCanPlay),asset.data.preload&&await preloadVideo(videoElement),resolve(createTexture(base,loader,url))};videoElement.addEventListener("canplay",onCanPlay),videoElement.appendChild(sourceElement)})},unload(texture){texture.destroy(!0)}},resolveTextureUrl={extension:{type:ExtensionType2.ResolveParser,name:"resolveTexture"},test:loadTextures.test,parse:value=>{var _a;return{resolution:parseFloat(null!=(_a=null==(_a=Resolver.RETINA_PREFIX.exec(value))?void 0:_a[1])?_a:"1"),format:value.split(".").pop(),src:value}}},resolveJsonUrl={extension:{type:ExtensionType2.ResolveParser,priority:-2,name:"resolveJson"},test:value=>Resolver.RETINA_PREFIX.test(value)&&value.endsWith(".json"),parse:resolveTextureUrl.parse};class AssetsClass{constructor(){this._detections=[],this._initialized=!1,this.resolver=new Resolver,this.loader=new Loader,this.cache=Cache,this._backgroundLoader=new BackgroundLoader(this.loader),this._backgroundLoader.active=!0,this.reset()}async init(options={}){if(this._initialized)warn("[Assets]AssetManager already initialized, did you load before calling this Assets.init()?");else{if(this._initialized=!0,options.defaultSearchParams&&this.resolver.setDefaultSearchParams(options.defaultSearchParams),options.basePath&&(this.resolver.basePath=options.basePath),options.bundleIdentifier&&this.resolver.setBundleIdentifier(options.bundleIdentifier),options.manifest){let manifest=options.manifest;"string"==typeof manifest&&(manifest=await this.load(manifest)),this.resolver.addManifest(manifest)}var _a="number"==typeof(_a=null!=(_a=null==(_a=options.texturePreference)?void 0:_a.resolution)?_a:1)?[_a]:_a,_c=await this._detectFormats({preferredFormats:null==(_c=options.texturePreference)?void 0:_c.format,skipDetections:options.skipDetections,detections:this._detections});this.resolver.prefer({params:{format:_c,resolution:_a}}),options.preferences&&this.setPreferences(options.preferences)}}add(assets){this.resolver.add(assets)}async load(urls,onProgress){this._initialized||await this.init();var singleAsset=isSingleItem(urls),urls=convertToList(urls).map(url=>{var aliases;return"string"!=typeof url?((aliases=this.resolver.getAlias(url)).some(alias=>!this.resolver.hasKey(alias))&&this.add(url),Array.isArray(aliases)?aliases[0]:aliases):(this.resolver.hasKey(url)||this.add({alias:url,src:url}),url)}),resolveResults=this.resolver.resolve(urls),resolveResults=await this._mapLoadToResolve(resolveResults,onProgress);return singleAsset?resolveResults[urls[0]]:resolveResults}addBundle(bundleId,assets){this.resolver.addBundle(bundleId,assets)}async loadBundle(bundleIds,onProgress){this._initialized||await this.init();let singleAsset=!1;"string"==typeof bundleIds&&(singleAsset=!0,bundleIds=[bundleIds]);const resolveResults=this.resolver.resolveBundle(bundleIds),out={};var keys=Object.keys(resolveResults);let count=0,total=0;const _onProgress=()=>{null!=onProgress&&onProgress(++count/total)};return keys=keys.map(bundleId=>{var resolveResult=resolveResults[bundleId];return total+=Object.keys(resolveResult).length,this._mapLoadToResolve(resolveResult,_onProgress).then(resolveResult2=>{out[bundleId]=resolveResult2})}),await Promise.all(keys),singleAsset?out[bundleIds[0]]:out}async backgroundLoad(urls){this._initialized||await this.init(),urls=this.resolver.resolve(urls="string"==typeof urls?[urls]:urls),this._backgroundLoader.add(Object.values(urls))}async backgroundLoadBundle(bundleIds){this._initialized||await this.init(),bundleIds=this.resolver.resolveBundle(bundleIds="string"==typeof bundleIds?[bundleIds]:bundleIds),Object.values(bundleIds).forEach(resolveResult=>{this._backgroundLoader.add(Object.values(resolveResult))})}reset(){this.resolver.reset(),this.loader.reset(),this.cache.reset(),this._initialized=!1}get(keys){if("string"==typeof keys)return Cache.get(keys);var assets={};for(let i=0;i{const asset=loadedAssets[resolveResult.src];var keys=[resolveResult.src];resolveResult.alias&&keys.push(...resolveResult.alias),keys.forEach(key=>{out[key]=asset}),Cache.set(keys,asset)}),out}async unload(urls){this._initialized||await this.init(),urls=convertToList(urls).map(url=>"string"!=typeof url?url.src:url),urls=this.resolver.resolve(urls),await this._unloadFromResolved(urls)}async unloadBundle(bundleIds){this._initialized||await this.init(),bundleIds=convertToList(bundleIds);const resolveResults=this.resolver.resolveBundle(bundleIds);bundleIds=Object.keys(resolveResults).map(bundleId=>this._unloadFromResolved(resolveResults[bundleId])),await Promise.all(bundleIds)}async _unloadFromResolved(resolveResult){(resolveResult=Object.values(resolveResult)).forEach(resolveResult2=>{Cache.remove(resolveResult2.src)}),await this.loader.unload(resolveResult)}async _detectFormats(options){let formats=[];options.preferredFormats&&(formats=Array.isArray(options.preferredFormats)?options.preferredFormats:[options.preferredFormats]);for(const detection of options.detections)options.skipDetections||await detection.test()?formats=await detection.add(formats):options.skipDetections||(formats=await detection.remove(formats));return formats=formats.filter((format,index)=>formats.indexOf(format)===index)}get detections(){return this._detections}setPreferences(preferences){this.loader.parsers.forEach(parser=>{parser.config&&Object.keys(parser.config).filter(key=>key in preferences).forEach(key=>{parser.config[key]=preferences[key]})})}}var Assets=new AssetsClass;extensions.handleByList(ExtensionType2.LoadParser,Assets.loader.parsers).handleByList(ExtensionType2.ResolveParser,Assets.resolver.parsers).handleByList(ExtensionType2.CacheParser,Assets.cache.parsers).handleByList(ExtensionType2.DetectionParser,Assets.detections),extensions.add(cacheTextureArray,detectDefaults,detectAvif,detectWebp,detectMp4,detectOgv,detectWebm,loadJson,loadTxt,loadWebFont,loadSvg,loadTextures,loadVideoTextures,CLEAR2,__spreadValues$M,resolveTextureUrl,resolveJsonUrl);const assetKeyMap={loader:ExtensionType2.LoadParser,resolver:ExtensionType2.ResolveParser,cache:ExtensionType2.CacheParser,detection:ExtensionType2.DetectionParser};extensions.handle(ExtensionType2.Asset,extension=>{const ref=extension.ref;Object.entries(assetKeyMap).filter(([key])=>!!ref[key]).forEach(([key,type])=>extensions.add(Object.assign(ref[key],{extension:null!=(key=ref[key].extension)?key:type})))},extension=>{const ref=extension.ref;Object.keys(assetKeyMap).filter(key=>!!ref[key]).forEach(key=>extensions.remove(ref[key]))});var detectBasis={extension:{type:ExtensionType2.DetectionParser,priority:3},test:async()=>!!await isWebGPUSupported()||!!isWebGLSupported(),add:async formats=>[...formats,"basis"],remove:async formats=>formats.filter(f=>"basis"!==f)};class CompressedSource extends TextureSource{constructor(options){super(options),this.uploadMethodId="compressed",this.resource=options.resource,this.mipLevelCount=this.resource.length}}let supportedGLCompressedTextureFormats;function getSupportedGlCompressedTextureFormats(){if(!supportedGLCompressedTextureFormats){var gl=document.createElement("canvas").getContext("webgl");if(!gl)return[];supportedGLCompressedTextureFormats=[...gl.getExtension("EXT_texture_compression_bptc")?["bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb"]:[],...gl.getExtension("WEBGL_compressed_texture_s3tc")?["bc1-rgba-unorm","bc2-rgba-unorm","bc3-rgba-unorm"]:[],...gl.getExtension("WEBGL_compressed_texture_s3tc_srgb")?["bc1-rgba-unorm-srgb","bc2-rgba-unorm-srgb","bc3-rgba-unorm-srgb"]:[],...gl.getExtension("EXT_texture_compression_rgtc")?["bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm"]:[],...gl.getExtension("WEBGL_compressed_texture_etc")?["etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","eac-r11unorm","eac-rg11unorm"]:[],...gl.getExtension("WEBGL_compressed_texture_astc")?["astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"]:[]]}return supportedGLCompressedTextureFormats}let supportedGPUCompressedTextureFormats;async function getSupportedGPUCompressedTextureFormats(){var adapter;return supportedGPUCompressedTextureFormats||(adapter=await DOMAdapter.get().getNavigator().gpu.requestAdapter(),supportedGPUCompressedTextureFormats=[...adapter.features.has("texture-compression-bc")?["bc1-rgba-unorm","bc1-rgba-unorm-srgb","bc2-rgba-unorm","bc2-rgba-unorm-srgb","bc3-rgba-unorm","bc3-rgba-unorm-srgb","bc4-r-unorm","bc4-r-snorm","bc5-rg-unorm","bc5-rg-snorm","bc6h-rgb-ufloat","bc6h-rgb-float","bc7-rgba-unorm","bc7-rgba-unorm-srgb"]:[],...adapter.features.has("texture-compression-etc2")?["etc2-rgb8unorm","etc2-rgb8unorm-srgb","etc2-rgb8a1unorm","etc2-rgb8a1unorm-srgb","etc2-rgba8unorm","etc2-rgba8unorm-srgb","eac-r11unorm","eac-r11snorm","eac-rg11unorm","eac-rg11snorm"]:[],...adapter.features.has("texture-compression-astc")?["astc-4x4-unorm","astc-4x4-unorm-srgb","astc-5x4-unorm","astc-5x4-unorm-srgb","astc-5x5-unorm","astc-5x5-unorm-srgb","astc-6x5-unorm","astc-6x5-unorm-srgb","astc-6x6-unorm","astc-6x6-unorm-srgb","astc-8x5-unorm","astc-8x5-unorm-srgb","astc-8x6-unorm","astc-8x6-unorm-srgb","astc-8x8-unorm","astc-8x8-unorm-srgb","astc-10x5-unorm","astc-10x5-unorm-srgb","astc-10x6-unorm","astc-10x6-unorm-srgb","astc-10x8-unorm","astc-10x8-unorm-srgb","astc-10x10-unorm","astc-10x10-unorm-srgb","astc-12x10-unorm","astc-12x10-unorm-srgb","astc-12x12-unorm","astc-12x12-unorm-srgb"]:[]]),supportedGPUCompressedTextureFormats}let supportedCompressedTextureFormats;async function getSupportedCompressedTextureFormats(){return supportedCompressedTextureFormats=void 0===supportedCompressedTextureFormats?await(async()=>{var _isWebGPUSupported=await isWebGPUSupported(),_isWebGLSupported=isWebGLSupported();if(_isWebGPUSupported&&_isWebGLSupported){var gpuTextureFormats=await getSupportedGPUCompressedTextureFormats();const glTextureFormats=getSupportedGlCompressedTextureFormats();return gpuTextureFormats.filter(format=>glTextureFormats.includes(format))}return _isWebGPUSupported?getSupportedGPUCompressedTextureFormats():_isWebGLSupported?getSupportedGlCompressedTextureFormats():[]})():supportedCompressedTextureFormats}const nonCompressedFormats=["r8unorm","r8snorm","r8uint","r8sint","r16uint","r16sint","r16float","rg8unorm","rg8snorm","rg8uint","rg8sint","r32uint","r32sint","r32float","rg16uint","rg16sint","rg16float","rgba8unorm","rgba8unorm-srgb","rgba8snorm","rgba8uint","rgba8sint","bgra8unorm","bgra8unorm-srgb","rgb9e5ufloat","rgb10a2unorm","rg11b10ufloat","rg32uint","rg32sint","rg32float","rgba16uint","rgba16sint","rgba16float","rgba32uint","rgba32sint","rgba32float","stencil8","depth16unorm","depth24plus","depth24plus-stencil8","depth32float","depth32float-stencil8"];let supportedTextureFormats;async function getSupportedTextureFormats(){var compressedTextureFormats;return void 0===supportedTextureFormats&&(compressedTextureFormats=await getSupportedCompressedTextureFormats(),supportedTextureFormats=[...nonCompressedFormats,...compressedTextureFormats]),supportedTextureFormats}let WORKER_URL$1=null,WorkerInstance$1=class{constructor(){WORKER_URL$1=WORKER_URL$1||URL.createObjectURL(new Blob(['(function () {\n \'use strict\';\n\n function createLevelBuffers(basisTexture, basisTranscoderFormat) {\n const images = basisTexture.getNumImages();\n const levels = basisTexture.getNumLevels(0);\n const success = basisTexture.startTranscoding();\n if (!success) {\n throw new Error("startTranscoding failed");\n }\n const levelBuffers = [];\n for (let levelIndex = 0; levelIndex < levels; ++levelIndex) {\n for (let sliceIndex = 0; sliceIndex < images; ++sliceIndex) {\n const transcodeSize = basisTexture.getImageTranscodedSizeInBytes(sliceIndex, levelIndex, basisTranscoderFormat);\n const levelBuffer = new Uint8Array(transcodeSize);\n const success2 = basisTexture.transcodeImage(levelBuffer, sliceIndex, levelIndex, basisTranscoderFormat, 1, 0);\n if (!success2) {\n throw new Error("transcodeImage failed");\n }\n levelBuffers.push(levelBuffer);\n }\n }\n return levelBuffers;\n }\n\n const gpuFormatToBasisTranscoderFormatMap = {\n "bc3-rgba-unorm": 3,\n // cTFBC3_RGBA\n "bc7-rgba-unorm": 6,\n // cTFBC7_RGBA,\n "etc2-rgba8unorm": 1,\n // cTFETC2_RGBA,\n "astc-4x4-unorm": 10,\n // cTFASTC_4x4_RGBA,\n // Uncompressed\n rgba8unorm: 13,\n // cTFRGBA32,\n rgba4unorm: 16\n // cTFRGBA4444,\n };\n function gpuFormatToBasisTranscoderFormat(transcoderFormat) {\n const format = gpuFormatToBasisTranscoderFormatMap[transcoderFormat];\n if (format) {\n return format;\n }\n throw new Error(`Unsupported transcoderFormat: ${transcoderFormat}`);\n }\n\n const settings = {\n jsUrl: "basis/basis_transcoder.js",\n wasmUrl: "basis/basis_transcoder.wasm"\n };\n let basisTranscoderFormat;\n let basisTranscodedTextureFormat;\n let basisPromise;\n async function getBasis() {\n if (!basisPromise) {\n const absoluteJsUrl = new URL(settings.jsUrl, location.origin).href;\n const absoluteWasmUrl = new URL(settings.wasmUrl, location.origin).href;\n importScripts(absoluteJsUrl);\n basisPromise = new Promise((resolve) => {\n BASIS({\n locateFile: (_file) => absoluteWasmUrl\n }).then((module) => {\n module.initializeBasis();\n resolve(module.BasisFile);\n });\n });\n }\n return basisPromise;\n }\n async function fetchBasisTexture(url, BasisTexture) {\n const basisResponse = await fetch(url);\n if (basisResponse.ok) {\n const basisArrayBuffer = await basisResponse.arrayBuffer();\n return new BasisTexture(new Uint8Array(basisArrayBuffer));\n }\n throw new Error(`Failed to load Basis texture: ${url}`);\n }\n const preferredTranscodedFormat = [\n "bc7-rgba-unorm",\n "astc-4x4-unorm",\n "etc2-rgba8unorm",\n "bc3-rgba-unorm",\n "rgba8unorm"\n ];\n async function load(url) {\n const BasisTexture = await getBasis();\n const basisTexture = await fetchBasisTexture(url, BasisTexture);\n const levelBuffers = createLevelBuffers(basisTexture, basisTranscoderFormat);\n return {\n width: basisTexture.getImageWidth(0, 0),\n height: basisTexture.getImageHeight(0, 0),\n format: basisTranscodedTextureFormat,\n resource: levelBuffers,\n alphaMode: "no-premultiply-alpha"\n };\n }\n async function init(jsUrl, wasmUrl, supportedTextures) {\n if (jsUrl)\n settings.jsUrl = jsUrl;\n if (wasmUrl)\n settings.wasmUrl = wasmUrl;\n basisTranscodedTextureFormat = preferredTranscodedFormat.filter((format) => supportedTextures.includes(format))[0];\n basisTranscoderFormat = gpuFormatToBasisTranscoderFormat(basisTranscodedTextureFormat);\n await getBasis();\n }\n const messageHandlers = {\n init: async (data) => {\n const { jsUrl, wasmUrl, supportedTextures } = data;\n await init(jsUrl, wasmUrl, supportedTextures);\n },\n load: async (data) => {\n var _a;\n try {\n const textureOptions = await load(data.url);\n return {\n type: "load",\n url: data.url,\n success: true,\n textureOptions,\n transferables: (_a = textureOptions.resource) == null ? void 0 : _a.map((arr) => arr.buffer)\n };\n } catch (e) {\n throw e;\n }\n }\n };\n self.onmessage = async (messageEvent) => {\n const message = messageEvent.data;\n const response = await messageHandlers[message.type](message);\n if (response) {\n self.postMessage(response, response.transferables);\n }\n };\n\n})();\n'],{type:"application/javascript"})),this.worker=new Worker(WORKER_URL$1)}};WorkerInstance$1.revokeObjectURL=function(){WORKER_URL$1&&(URL.revokeObjectURL(WORKER_URL$1),WORKER_URL$1=null)};const basisTranscoderUrls={jsUrl:"https://files.pixijs.download/transcoders/basis/basis_transcoder.js",wasmUrl:"https://files.pixijs.download/transcoders/basis/basis_transcoder.wasm"};let basisWorker;const urlHash$1={};function loadBasisOnWorker(url,supportedTextures){const ktxWorker=function(supportedTextures){return basisWorker||((basisWorker=(new WorkerInstance$1).worker).onmessage=messageEvent=>{var{success:messageEvent,url,textureOptions}=messageEvent.data;messageEvent||console.warn("Failed to load Basis texture",url),urlHash$1[url](textureOptions)},basisWorker.postMessage({type:"init",jsUrl:basisTranscoderUrls.jsUrl,wasmUrl:basisTranscoderUrls.wasmUrl,supportedTextures:supportedTextures})),basisWorker}(supportedTextures);return new Promise(resolve=>{urlHash$1[url]=resolve,ktxWorker.postMessage({type:"load",url:url})})}var D3DFMT2,DXGI_FORMAT2,D3D10_RESOURCE_DIMENSION2,loadBasis={extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.High,name:"loadBasis"},name:"loadBasis",test(url){return checkExtension(url,[".basis"])},async load(url,_asset,loader){var textureOptions=await loadBasisOnWorker(url,await getSupportedTextureFormats());return createTexture(new CompressedSource(textureOptions),loader,url)},unload(texture){Array.isArray(texture)?texture.forEach(t=>t.destroy(!0)):texture.destroy(!0)}};const gpuFormatToBasisTranscoderFormatMap$1={"bc3-rgba-unorm":3,"bc7-rgba-unorm":6,"etc2-rgba8unorm":1,"astc-4x4-unorm":10,rgba8unorm:13,rgba4unorm:16};function fourCCToInt32(value){return value.charCodeAt(0)+(value.charCodeAt(1)<<8)+(value.charCodeAt(2)<<16)+(value.charCodeAt(3)<<24)}DXGI_FORMAT2={DXGI_FORMAT_UNKNOWN:0,0:"DXGI_FORMAT_UNKNOWN",DXGI_FORMAT_R32G32B32A32_TYPELESS:1,1:"DXGI_FORMAT_R32G32B32A32_TYPELESS",DXGI_FORMAT_R32G32B32A32_FLOAT:2,2:"DXGI_FORMAT_R32G32B32A32_FLOAT",DXGI_FORMAT_R32G32B32A32_UINT:3,3:"DXGI_FORMAT_R32G32B32A32_UINT",DXGI_FORMAT_R32G32B32A32_SINT:4,4:"DXGI_FORMAT_R32G32B32A32_SINT",DXGI_FORMAT_R32G32B32_TYPELESS:5,5:"DXGI_FORMAT_R32G32B32_TYPELESS",DXGI_FORMAT_R32G32B32_FLOAT:6,6:"DXGI_FORMAT_R32G32B32_FLOAT",DXGI_FORMAT_R32G32B32_UINT:7,7:"DXGI_FORMAT_R32G32B32_UINT",DXGI_FORMAT_R32G32B32_SINT:8,8:"DXGI_FORMAT_R32G32B32_SINT",DXGI_FORMAT_R16G16B16A16_TYPELESS:9,9:"DXGI_FORMAT_R16G16B16A16_TYPELESS",DXGI_FORMAT_R16G16B16A16_FLOAT:10,10:"DXGI_FORMAT_R16G16B16A16_FLOAT",DXGI_FORMAT_R16G16B16A16_UNORM:11,11:"DXGI_FORMAT_R16G16B16A16_UNORM",DXGI_FORMAT_R16G16B16A16_UINT:12,12:"DXGI_FORMAT_R16G16B16A16_UINT",DXGI_FORMAT_R16G16B16A16_SNORM:13,13:"DXGI_FORMAT_R16G16B16A16_SNORM",DXGI_FORMAT_R16G16B16A16_SINT:14,14:"DXGI_FORMAT_R16G16B16A16_SINT",DXGI_FORMAT_R32G32_TYPELESS:15,15:"DXGI_FORMAT_R32G32_TYPELESS",DXGI_FORMAT_R32G32_FLOAT:16,16:"DXGI_FORMAT_R32G32_FLOAT",DXGI_FORMAT_R32G32_UINT:17,17:"DXGI_FORMAT_R32G32_UINT",DXGI_FORMAT_R32G32_SINT:18,18:"DXGI_FORMAT_R32G32_SINT",DXGI_FORMAT_R32G8X24_TYPELESS:19,19:"DXGI_FORMAT_R32G8X24_TYPELESS",DXGI_FORMAT_D32_FLOAT_S8X24_UINT:20,20:"DXGI_FORMAT_D32_FLOAT_S8X24_UINT",DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS:21,21:"DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS",DXGI_FORMAT_X32_TYPELESS_G8X24_UINT:22,22:"DXGI_FORMAT_X32_TYPELESS_G8X24_UINT",DXGI_FORMAT_R10G10B10A2_TYPELESS:23,23:"DXGI_FORMAT_R10G10B10A2_TYPELESS",DXGI_FORMAT_R10G10B10A2_UNORM:24,24:"DXGI_FORMAT_R10G10B10A2_UNORM",DXGI_FORMAT_R10G10B10A2_UINT:25,25:"DXGI_FORMAT_R10G10B10A2_UINT",DXGI_FORMAT_R11G11B10_FLOAT:26,26:"DXGI_FORMAT_R11G11B10_FLOAT",DXGI_FORMAT_R8G8B8A8_TYPELESS:27,27:"DXGI_FORMAT_R8G8B8A8_TYPELESS",DXGI_FORMAT_R8G8B8A8_UNORM:28,28:"DXGI_FORMAT_R8G8B8A8_UNORM",DXGI_FORMAT_R8G8B8A8_UNORM_SRGB:29,29:"DXGI_FORMAT_R8G8B8A8_UNORM_SRGB",DXGI_FORMAT_R8G8B8A8_UINT:30,30:"DXGI_FORMAT_R8G8B8A8_UINT",DXGI_FORMAT_R8G8B8A8_SNORM:31,31:"DXGI_FORMAT_R8G8B8A8_SNORM",DXGI_FORMAT_R8G8B8A8_SINT:32,32:"DXGI_FORMAT_R8G8B8A8_SINT",DXGI_FORMAT_R16G16_TYPELESS:33,33:"DXGI_FORMAT_R16G16_TYPELESS",DXGI_FORMAT_R16G16_FLOAT:34,34:"DXGI_FORMAT_R16G16_FLOAT",DXGI_FORMAT_R16G16_UNORM:35,35:"DXGI_FORMAT_R16G16_UNORM",DXGI_FORMAT_R16G16_UINT:36,36:"DXGI_FORMAT_R16G16_UINT",DXGI_FORMAT_R16G16_SNORM:37,37:"DXGI_FORMAT_R16G16_SNORM",DXGI_FORMAT_R16G16_SINT:38,38:"DXGI_FORMAT_R16G16_SINT",DXGI_FORMAT_R32_TYPELESS:39,39:"DXGI_FORMAT_R32_TYPELESS",DXGI_FORMAT_D32_FLOAT:40,40:"DXGI_FORMAT_D32_FLOAT",DXGI_FORMAT_R32_FLOAT:41,41:"DXGI_FORMAT_R32_FLOAT",DXGI_FORMAT_R32_UINT:42,42:"DXGI_FORMAT_R32_UINT",DXGI_FORMAT_R32_SINT:43,43:"DXGI_FORMAT_R32_SINT",DXGI_FORMAT_R24G8_TYPELESS:44,44:"DXGI_FORMAT_R24G8_TYPELESS",DXGI_FORMAT_D24_UNORM_S8_UINT:45,45:"DXGI_FORMAT_D24_UNORM_S8_UINT",DXGI_FORMAT_R24_UNORM_X8_TYPELESS:46,46:"DXGI_FORMAT_R24_UNORM_X8_TYPELESS",DXGI_FORMAT_X24_TYPELESS_G8_UINT:47,47:"DXGI_FORMAT_X24_TYPELESS_G8_UINT",DXGI_FORMAT_R8G8_TYPELESS:48,48:"DXGI_FORMAT_R8G8_TYPELESS",DXGI_FORMAT_R8G8_UNORM:49,49:"DXGI_FORMAT_R8G8_UNORM",DXGI_FORMAT_R8G8_UINT:50,50:"DXGI_FORMAT_R8G8_UINT",DXGI_FORMAT_R8G8_SNORM:51,51:"DXGI_FORMAT_R8G8_SNORM",DXGI_FORMAT_R8G8_SINT:52,52:"DXGI_FORMAT_R8G8_SINT",DXGI_FORMAT_R16_TYPELESS:53,53:"DXGI_FORMAT_R16_TYPELESS",DXGI_FORMAT_R16_FLOAT:54,54:"DXGI_FORMAT_R16_FLOAT",DXGI_FORMAT_D16_UNORM:55,55:"DXGI_FORMAT_D16_UNORM",DXGI_FORMAT_R16_UNORM:56,56:"DXGI_FORMAT_R16_UNORM",DXGI_FORMAT_R16_UINT:57,57:"DXGI_FORMAT_R16_UINT",DXGI_FORMAT_R16_SNORM:58,58:"DXGI_FORMAT_R16_SNORM",DXGI_FORMAT_R16_SINT:59,59:"DXGI_FORMAT_R16_SINT",DXGI_FORMAT_R8_TYPELESS:60,60:"DXGI_FORMAT_R8_TYPELESS",DXGI_FORMAT_R8_UNORM:61,61:"DXGI_FORMAT_R8_UNORM",DXGI_FORMAT_R8_UINT:62,62:"DXGI_FORMAT_R8_UINT",DXGI_FORMAT_R8_SNORM:63,63:"DXGI_FORMAT_R8_SNORM",DXGI_FORMAT_R8_SINT:64,64:"DXGI_FORMAT_R8_SINT",DXGI_FORMAT_A8_UNORM:65,65:"DXGI_FORMAT_A8_UNORM",DXGI_FORMAT_R1_UNORM:66,66:"DXGI_FORMAT_R1_UNORM",DXGI_FORMAT_R9G9B9E5_SHAREDEXP:67,67:"DXGI_FORMAT_R9G9B9E5_SHAREDEXP",DXGI_FORMAT_R8G8_B8G8_UNORM:68,68:"DXGI_FORMAT_R8G8_B8G8_UNORM",DXGI_FORMAT_G8R8_G8B8_UNORM:69,69:"DXGI_FORMAT_G8R8_G8B8_UNORM",DXGI_FORMAT_BC1_TYPELESS:70,70:"DXGI_FORMAT_BC1_TYPELESS",DXGI_FORMAT_BC1_UNORM:71,71:"DXGI_FORMAT_BC1_UNORM",DXGI_FORMAT_BC1_UNORM_SRGB:72,72:"DXGI_FORMAT_BC1_UNORM_SRGB",DXGI_FORMAT_BC2_TYPELESS:73,73:"DXGI_FORMAT_BC2_TYPELESS",DXGI_FORMAT_BC2_UNORM:74,74:"DXGI_FORMAT_BC2_UNORM",DXGI_FORMAT_BC2_UNORM_SRGB:75,75:"DXGI_FORMAT_BC2_UNORM_SRGB",DXGI_FORMAT_BC3_TYPELESS:76,76:"DXGI_FORMAT_BC3_TYPELESS",DXGI_FORMAT_BC3_UNORM:77,77:"DXGI_FORMAT_BC3_UNORM",DXGI_FORMAT_BC3_UNORM_SRGB:78,78:"DXGI_FORMAT_BC3_UNORM_SRGB",DXGI_FORMAT_BC4_TYPELESS:79,79:"DXGI_FORMAT_BC4_TYPELESS",DXGI_FORMAT_BC4_UNORM:80,80:"DXGI_FORMAT_BC4_UNORM",DXGI_FORMAT_BC4_SNORM:81,81:"DXGI_FORMAT_BC4_SNORM",DXGI_FORMAT_BC5_TYPELESS:82,82:"DXGI_FORMAT_BC5_TYPELESS",DXGI_FORMAT_BC5_UNORM:83,83:"DXGI_FORMAT_BC5_UNORM",DXGI_FORMAT_BC5_SNORM:84,84:"DXGI_FORMAT_BC5_SNORM",DXGI_FORMAT_B5G6R5_UNORM:85,85:"DXGI_FORMAT_B5G6R5_UNORM",DXGI_FORMAT_B5G5R5A1_UNORM:86,86:"DXGI_FORMAT_B5G5R5A1_UNORM",DXGI_FORMAT_B8G8R8A8_UNORM:87,87:"DXGI_FORMAT_B8G8R8A8_UNORM",DXGI_FORMAT_B8G8R8X8_UNORM:88,88:"DXGI_FORMAT_B8G8R8X8_UNORM",DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM:89,89:"DXGI_FORMAT_R10G10B10_XR_BIAS_A2_UNORM",DXGI_FORMAT_B8G8R8A8_TYPELESS:90,90:"DXGI_FORMAT_B8G8R8A8_TYPELESS",DXGI_FORMAT_B8G8R8A8_UNORM_SRGB:91,91:"DXGI_FORMAT_B8G8R8A8_UNORM_SRGB",DXGI_FORMAT_B8G8R8X8_TYPELESS:92,92:"DXGI_FORMAT_B8G8R8X8_TYPELESS",DXGI_FORMAT_B8G8R8X8_UNORM_SRGB:93,93:"DXGI_FORMAT_B8G8R8X8_UNORM_SRGB",DXGI_FORMAT_BC6H_TYPELESS:94,94:"DXGI_FORMAT_BC6H_TYPELESS",DXGI_FORMAT_BC6H_UF16:95,95:"DXGI_FORMAT_BC6H_UF16",DXGI_FORMAT_BC6H_SF16:96,96:"DXGI_FORMAT_BC6H_SF16",DXGI_FORMAT_BC7_TYPELESS:97,97:"DXGI_FORMAT_BC7_TYPELESS",DXGI_FORMAT_BC7_UNORM:98,98:"DXGI_FORMAT_BC7_UNORM",DXGI_FORMAT_BC7_UNORM_SRGB:99,99:"DXGI_FORMAT_BC7_UNORM_SRGB",DXGI_FORMAT_AYUV:100,100:"DXGI_FORMAT_AYUV",DXGI_FORMAT_Y410:101,101:"DXGI_FORMAT_Y410",DXGI_FORMAT_Y416:102,102:"DXGI_FORMAT_Y416",DXGI_FORMAT_NV12:103,103:"DXGI_FORMAT_NV12",DXGI_FORMAT_P010:104,104:"DXGI_FORMAT_P010",DXGI_FORMAT_P016:105,105:"DXGI_FORMAT_P016",DXGI_FORMAT_420_OPAQUE:106,106:"DXGI_FORMAT_420_OPAQUE",DXGI_FORMAT_YUY2:107,107:"DXGI_FORMAT_YUY2",DXGI_FORMAT_Y210:108,108:"DXGI_FORMAT_Y210",DXGI_FORMAT_Y216:109,109:"DXGI_FORMAT_Y216",DXGI_FORMAT_NV11:110,110:"DXGI_FORMAT_NV11",DXGI_FORMAT_AI44:111,111:"DXGI_FORMAT_AI44",DXGI_FORMAT_IA44:112,112:"DXGI_FORMAT_IA44",DXGI_FORMAT_P8:113,113:"DXGI_FORMAT_P8",DXGI_FORMAT_A8P8:114,114:"DXGI_FORMAT_A8P8",DXGI_FORMAT_B4G4R4A4_UNORM:115,115:"DXGI_FORMAT_B4G4R4A4_UNORM",DXGI_FORMAT_P208:116,116:"DXGI_FORMAT_P208",DXGI_FORMAT_V208:117,117:"DXGI_FORMAT_V208",DXGI_FORMAT_V408:118,118:"DXGI_FORMAT_V408",DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE:119,119:"DXGI_FORMAT_SAMPLER_FEEDBACK_MIN_MIP_OPAQUE",DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE:120,120:"DXGI_FORMAT_SAMPLER_FEEDBACK_MIP_REGION_USED_OPAQUE",DXGI_FORMAT_FORCE_UINT:121,121:"DXGI_FORMAT_FORCE_UINT"},D3D10_RESOURCE_DIMENSION2={DDS_DIMENSION_TEXTURE1D:2,2:"DDS_DIMENSION_TEXTURE1D",DDS_DIMENSION_TEXTURE2D:3,3:"DDS_DIMENSION_TEXTURE2D",DDS_DIMENSION_TEXTURE3D:6,6:"DDS_DIMENSION_TEXTURE3D"},(D3DFMT2={UNKNOWN:0,0:"UNKNOWN",R8G8B8:20,20:"R8G8B8",A8R8G8B8:21,21:"A8R8G8B8",X8R8G8B8:22,22:"X8R8G8B8",R5G6B5:23,23:"R5G6B5",X1R5G5B5:24,24:"X1R5G5B5",A1R5G5B5:25,25:"A1R5G5B5",A4R4G4B4:26,26:"A4R4G4B4",R3G3B2:27,27:"R3G3B2",A8:28,28:"A8",A8R3G3B2:29,29:"A8R3G3B2",X4R4G4B4:30,30:"X4R4G4B4",A2B10G10R10:31,31:"A2B10G10R10",A8B8G8R8:32,32:"A8B8G8R8",X8B8G8R8:33,33:"X8B8G8R8",G16R16:34,34:"G16R16",A2R10G10B10:35,35:"A2R10G10B10",A16B16G16R16:36,36:"A16B16G16R16",A8P8:40,40:"A8P8",P8:41,41:"P8",L8:50,50:"L8",A8L8:51,51:"A8L8",A4L4:52,52:"A4L4",V8U8:60,60:"V8U8",L6V5U5:61,61:"L6V5U5",X8L8V8U8:62,62:"X8L8V8U8",Q8W8V8U8:63,63:"Q8W8V8U8",V16U16:64,64:"V16U16",A2W10V10U10:67,67:"A2W10V10U10",Q16W16V16U16:110,110:"Q16W16V16U16",R16F:111,111:"R16F",G16R16F:112,112:"G16R16F",A16B16G16R16F:113,113:"A16B16G16R16F",R32F:114,114:"R32F",G32R32F:115,115:"G32R32F",A32B32G32R32F:116,116:"A32B32G32R32F"})[D3DFMT2.UYVY=fourCCToInt32("UYVY")]="UYVY",D3DFMT2[D3DFMT2.R8G8_B8G8=fourCCToInt32("RGBG")]="R8G8_B8G8",D3DFMT2[D3DFMT2.YUY2=fourCCToInt32("YUY2")]="YUY2",D3DFMT2[D3DFMT2.D3DFMT_G8R8_G8B8=fourCCToInt32("GRGB")]="D3DFMT_G8R8_G8B8",D3DFMT2[D3DFMT2.DXT1=fourCCToInt32("DXT1")]="DXT1",D3DFMT2[D3DFMT2.DXT2=fourCCToInt32("DXT2")]="DXT2",D3DFMT2[D3DFMT2.DXT3=fourCCToInt32("DXT3")]="DXT3",D3DFMT2[D3DFMT2.DXT4=fourCCToInt32("DXT4")]="DXT4",D3DFMT2[D3DFMT2.DXT5=fourCCToInt32("DXT5")]="DXT5",D3DFMT2[D3DFMT2.ATI1=fourCCToInt32("ATI1")]="ATI1",D3DFMT2[D3DFMT2.AT1N=fourCCToInt32("AT1N")]="AT1N",D3DFMT2[D3DFMT2.ATI2=fourCCToInt32("ATI2")]="ATI2",D3DFMT2[D3DFMT2.AT2N=fourCCToInt32("AT2N")]="AT2N",D3DFMT2[D3DFMT2.BC4U=fourCCToInt32("BC4U")]="BC4U",D3DFMT2[D3DFMT2.BC4S=fourCCToInt32("BC4S")]="BC4S",D3DFMT2[D3DFMT2.BC5U=fourCCToInt32("BC5U")]="BC5U",D3DFMT2[D3DFMT2.BC5S=fourCCToInt32("BC5S")]="BC5S",D3DFMT2[D3DFMT2.DX10=fourCCToInt32("DX10")]="DX10";const FOURCC_TO_TEXTURE_FORMAT={[D3DFMT2.DXT1]:"bc1-rgba-unorm",[D3DFMT2.DXT2]:"bc2-rgba-unorm",[D3DFMT2.DXT3]:"bc2-rgba-unorm",[D3DFMT2.DXT4]:"bc3-rgba-unorm",[D3DFMT2.DXT5]:"bc3-rgba-unorm",[D3DFMT2.ATI1]:"bc4-r-unorm",[D3DFMT2.BC4U]:"bc4-r-unorm",[D3DFMT2.BC4S]:"bc4-r-snorm",[D3DFMT2.ATI2]:"bc5-rg-unorm",[D3DFMT2.BC5U]:"bc5-rg-unorm",[D3DFMT2.BC5S]:"bc5-rg-snorm",36:"rgba16uint",110:"rgba16sint",111:"r16float",112:"rg16float",113:"rgba16float",114:"r32float",115:"rg32float",116:"rgba32float"},DXGI_TO_TEXTURE_FORMAT={[70]:"bc1-rgba-unorm",71:"bc1-rgba-unorm",72:"bc1-rgba-unorm-srgb",73:"bc2-rgba-unorm",74:"bc2-rgba-unorm",75:"bc2-rgba-unorm-srgb",76:"bc3-rgba-unorm",77:"bc3-rgba-unorm",78:"bc3-rgba-unorm-srgb",79:"bc4-r-unorm",80:"bc4-r-unorm",81:"bc4-r-snorm",82:"bc5-rg-unorm",83:"bc5-rg-unorm",84:"bc5-rg-snorm",94:"bc6h-rgb-ufloat",95:"bc6h-rgb-ufloat",96:"bc6h-rgb-float",97:"bc7-rgba-unorm",98:"bc7-rgba-unorm",99:"bc7-rgba-unorm-srgb",28:"rgba8unorm",29:"rgba8unorm-srgb",87:"bgra8unorm",91:"bgra8unorm-srgb",41:"r32float",49:"rg8unorm",56:"r16uint",61:"r8unorm",24:"rgb10a2unorm",11:"rgba16uint",13:"rgba16sint",10:"rgba16float",54:"r16float",34:"rg16float",16:"rg32float",2:"rgba32float"},DDS={MAGIC_VALUE:542327876,MAGIC_SIZE:4,HEADER_SIZE:124,HEADER_DX10_SIZE:20,PIXEL_FORMAT_FLAGS:{ALPHAPIXELS:1,ALPHA:2,FOURCC:4,RGB:64,RGBA:65,YUV:512,LUMINANCE:131072,LUMINANCEA:131073},RESOURCE_MISC_TEXTURECUBE:4,HEADER_FIELDS:{MAGIC:0,SIZE:1,FLAGS:2,HEIGHT:3,WIDTH:4,MIPMAP_COUNT:7,PIXEL_FORMAT:19,PF_FLAGS:20,FOURCC:21,RGB_BITCOUNT:22,R_BIT_MASK:23,G_BIT_MASK:24,B_BIT_MASK:25,A_BIT_MASK:26},HEADER_DX10_FIELDS:{DXGI_FORMAT:0,RESOURCE_DIMENSION:1,MISC_FLAG:2,ARRAY_SIZE:3,MISC_FLAGS2:4},DXGI_FORMAT:DXGI_FORMAT2,D3D10_RESOURCE_DIMENSION:D3D10_RESOURCE_DIMENSION2,D3DFMT:D3DFMT2},TEXTURE_FORMAT_BLOCK_SIZE={"bc1-rgba-unorm":8,"bc1-rgba-unorm-srgb":8,"bc2-rgba-unorm":16,"bc2-rgba-unorm-srgb":16,"bc3-rgba-unorm":16,"bc3-rgba-unorm-srgb":16,"bc4-r-unorm":8,"bc4-r-snorm":8,"bc5-rg-unorm":16,"bc5-rg-snorm":16,"bc6h-rgb-ufloat":16,"bc6h-rgb-float":16,"bc7-rgba-unorm":16,"bc7-rgba-unorm-srgb":16};function parseDDS(arrayBuffer,supportedFormats){var{format,fourCC,width,height,dataOffset,mipmapCount}=function(buffer){var header=new Uint32Array(buffer,0,DDS.HEADER_SIZE/Uint32Array.BYTES_PER_ELEMENT);if(header[DDS.HEADER_FIELDS.MAGIC]!==DDS.MAGIC_VALUE)throw new Error("Invalid magic number in DDS header");var height=header[DDS.HEADER_FIELDS.HEIGHT],width=header[DDS.HEADER_FIELDS.WIDTH],mipmapCount=Math.max(1,header[DDS.HEADER_FIELDS.MIPMAP_COUNT]),flags=header[DDS.HEADER_FIELDS.PF_FLAGS],fourCC=header[DDS.HEADER_FIELDS.FOURCC];return{format:function(header,flags,fourCC,buffer){if(flags&DDS.PIXEL_FORMAT_FLAGS.FOURCC){if(fourCC===DDS.D3DFMT.DX10){if((buffer=new Uint32Array(buffer,DDS.MAGIC_SIZE+DDS.HEADER_SIZE,DDS.HEADER_DX10_SIZE/Uint32Array.BYTES_PER_ELEMENT))[DDS.HEADER_DX10_FIELDS.MISC_FLAG]===DDS.RESOURCE_MISC_TEXTURECUBE)throw new Error("DDSParser does not support cubemap textures");if(buffer[DDS.HEADER_DX10_FIELDS.RESOURCE_DIMENSION]===DDS.D3D10_RESOURCE_DIMENSION.DDS_DIMENSION_TEXTURE3D)throw new Error("DDSParser does not supported 3D texture data");if((buffer=buffer[DDS.HEADER_DX10_FIELDS.DXGI_FORMAT])in DXGI_TO_TEXTURE_FORMAT)return DXGI_TO_TEXTURE_FORMAT[buffer];throw new Error("DDSParser cannot parse texture data with DXGI format "+buffer)}if(fourCC in FOURCC_TO_TEXTURE_FORMAT)return FOURCC_TO_TEXTURE_FORMAT[fourCC];throw new Error("DDSParser cannot parse texture data with fourCC format "+fourCC)}if(flags&DDS.PIXEL_FORMAT_FLAGS.RGB||flags&DDS.PIXEL_FORMAT_FLAGS.RGBA)return function(header){var bitCount=header[DDS.HEADER_FIELDS.RGB_BITCOUNT],rBitMask=header[DDS.HEADER_FIELDS.R_BIT_MASK],gBitMask=header[DDS.HEADER_FIELDS.G_BIT_MASK],bBitMask=header[DDS.HEADER_FIELDS.B_BIT_MASK],aBitMask=header[DDS.HEADER_FIELDS.A_BIT_MASK];switch(bitCount){case 32:if(255===rBitMask&&65280===gBitMask&&16711680===bBitMask&&4278190080===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_R8G8B8A8_UNORM];if(16711680===rBitMask&&65280===gBitMask&&255===bBitMask&&4278190080===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_B8G8R8A8_UNORM];if(1072693248===rBitMask&&1047552===gBitMask&&1023===bBitMask&&3221225472===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_R10G10B10A2_UNORM];if(65535===rBitMask&&4294901760===gBitMask&&0===bBitMask&&0===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_R16G16_UNORM];if(4294967295===rBitMask&&0===gBitMask&&0===bBitMask&&0===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_R32_FLOAT];break;case 24:break;case 16:if(31744===rBitMask&&992===gBitMask&&31===bBitMask&&32768===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_B5G5R5A1_UNORM];if(63488===rBitMask&&2016===gBitMask&&31===bBitMask&&0===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_B5G6R5_UNORM];if(3840===rBitMask&&240===gBitMask&&15===bBitMask&&61440===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_B4G4R4A4_UNORM];if(255===rBitMask&&0===gBitMask&&0===bBitMask&&65280===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_R8G8_UNORM];if(65535===rBitMask&&0===gBitMask&&0===bBitMask&&0===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_R16_UNORM];break;case 8:if(255===rBitMask&&0===gBitMask&&0===bBitMask&&0===aBitMask)return DXGI_TO_TEXTURE_FORMAT[DDS.DXGI_FORMAT.DXGI_FORMAT_R8_UNORM]}throw new Error(`DDSParser does not support uncompressed texture with configuration:
+ bitCount = ${bitCount}, rBitMask = ${rBitMask}, gBitMask = ${gBitMask}, aBitMask = `+aBitMask)}(header);if(flags&DDS.PIXEL_FORMAT_FLAGS.YUV)throw new Error("DDSParser does not supported YUV uncompressed texture data.");if(flags&DDS.PIXEL_FORMAT_FLAGS.LUMINANCE||flags&DDS.PIXEL_FORMAT_FLAGS.LUMINANCEA)throw new Error("DDSParser does not support single-channel (lumninance) texture data!");if(flags&DDS.PIXEL_FORMAT_FLAGS.ALPHA||flags&DDS.PIXEL_FORMAT_FLAGS.ALPHAPIXELS)throw new Error("DDSParser does not support single-channel (alpha) texture data!");throw new Error("DDSParser failed to load a texture file due to an unknown reason!")}(header,flags,fourCC,buffer),fourCC:fourCC,width:width,height:height,dataOffset:DDS.MAGIC_SIZE+DDS.HEADER_SIZE+(fourCC===DDS.D3DFMT.DX10?DDS.HEADER_DX10_SIZE:0),mipmapCount:mipmapCount}}(arrayBuffer);if(supportedFormats.includes(format))return mipmapCount<=1?{format:format,width:width,height:height,resource:[new Uint8Array(arrayBuffer,dataOffset)],alphaMode:"no-premultiply-alpha"}:{format:format,width:width,height:height,resource:function(format,width,height,dataOffset,mipmapCount,arrayBuffer){var levelBuffers=[],blockBytes=TEXTURE_FORMAT_BLOCK_SIZE[format];let mipWidth=width,mipHeight=height,offset=dataOffset;for(let level=0;level>1,1),mipHeight=Math.max(mipHeight>>1,1)}return levelBuffers}(format,width,height,dataOffset,mipmapCount,arrayBuffer),alphaMode:"no-premultiply-alpha"};throw new Error(`Unsupported texture format: ${fourCC} ${format}, supported: `+supportedFormats)}var loadDDS={extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.High,name:"loadDDS"},name:"loadDDS",test(url){return checkExtension(url,[".dds"])},async load(url,_asset,loader){var supportedTextures=await getSupportedTextureFormats(),supportedTextures=parseDDS(await(await fetch(url)).arrayBuffer(),supportedTextures);return createTexture(new CompressedSource(supportedTextures),loader,url)},unload(texture){Array.isArray(texture)?texture.forEach(t=>t.destroy(!0)):texture.destroy(!0)}};const KTX={FILE_HEADER_SIZE:64,FILE_IDENTIFIER:[171,75,84,88,32,49,49,187,13,10,26,10],FORMATS_TO_COMPONENTS:{[6408]:4,6407:3,33319:2,6403:1,6409:1,6410:2,6406:1},INTERNAL_FORMAT_TO_BYTES_PER_PIXEL:{[33776]:.5,33777:.5,33778:1,33779:1,35916:.5,35917:.5,35918:1,35919:1,36283:.5,36284:.5,36285:1,36286:1,37488:.5,37489:.5,37490:1,37491:1,37492:.5,37496:1,37493:.5,37497:1,37494:.5,37495:.5,37808:1,37840:1,37809:.8,37841:.8,37810:.64,37842:.64,37811:.53375,37843:.53375,37812:.445,37844:.445,37813:.4,37845:.4,37814:.33375,37846:.33375,37815:.25,37847:.25,37816:.32,37848:.32,37817:.26625,37849:.26625,37818:.2,37850:.2,37819:.16,37851:.16,37820:.13375,37852:.13375,37821:.11125,37853:.11125,36492:1,36493:1,36494:1,36495:1},INTERNAL_FORMAT_TO_TEXTURE_FORMATS:{[33776]:"bc1-rgba-unorm",33777:"bc1-rgba-unorm",33778:"bc2-rgba-unorm",33779:"bc3-rgba-unorm",35916:"bc1-rgba-unorm-srgb",35917:"bc1-rgba-unorm-srgb",35918:"bc2-rgba-unorm-srgb",35919:"bc3-rgba-unorm-srgb",36283:"bc4-r-unorm",36284:"bc4-r-snorm",36285:"bc5-rg-unorm",36286:"bc5-rg-snorm",37488:"eac-r11unorm",37490:"eac-rg11snorm",37492:"etc2-rgb8unorm",37496:"etc2-rgba8unorm",37493:"etc2-rgb8unorm-srgb",37497:"etc2-rgba8unorm-srgb",37494:"etc2-rgb8a1unorm",37495:"etc2-rgb8a1unorm-srgb",37808:"astc-4x4-unorm",37840:"astc-4x4-unorm-srgb",37809:"astc-5x4-unorm",37841:"astc-5x4-unorm-srgb",37810:"astc-5x5-unorm",37842:"astc-5x5-unorm-srgb",37811:"astc-6x5-unorm",37843:"astc-6x5-unorm-srgb",37812:"astc-6x6-unorm",37844:"astc-6x6-unorm-srgb",37813:"astc-8x5-unorm",37845:"astc-8x5-unorm-srgb",37814:"astc-8x6-unorm",37846:"astc-8x6-unorm-srgb",37815:"astc-8x8-unorm",37847:"astc-8x8-unorm-srgb",37816:"astc-10x5-unorm",37848:"astc-10x5-unorm-srgb",37817:"astc-10x6-unorm",37849:"astc-10x6-unorm-srgb",37818:"astc-10x8-unorm",37850:"astc-10x8-unorm-srgb",37819:"astc-10x10-unorm",37851:"astc-10x10-unorm-srgb",37820:"astc-12x10-unorm",37852:"astc-12x10-unorm-srgb",37821:"astc-12x12-unorm",37853:"astc-12x12-unorm-srgb",36492:"bc7-rgba-unorm",36493:"bc7-rgba-unorm-srgb",36494:"bc6h-rgb-float",36495:"bc6h-rgb-ufloat",35907:"rgba8unorm-srgb",36759:"rgba8snorm",36220:"rgba8uint",36238:"rgba8sint",6408:"rgba8unorm"},FIELDS:{FILE_IDENTIFIER:0,ENDIANNESS:12,GL_TYPE:16,GL_TYPE_SIZE:20,GL_FORMAT:24,GL_INTERNAL_FORMAT:28,GL_BASE_INTERNAL_FORMAT:32,PIXEL_WIDTH:36,PIXEL_HEIGHT:40,PIXEL_DEPTH:44,NUMBER_OF_ARRAY_ELEMENTS:48,NUMBER_OF_FACES:52,NUMBER_OF_MIPMAP_LEVELS:56,BYTES_OF_KEY_VALUE_DATA:60},TYPES_TO_BYTES_PER_COMPONENT:{[5121]:1,5123:2,5124:4,5125:4,5126:4,36193:8},TYPES_TO_BYTES_PER_PIXEL:{[32819]:2,32820:2,33635:2},ENDIANNESS:67305985};function parseKTX(arrayBuffer,supportedFormats){if(!function(dataView){for(let i=0;i>1||1,mipHeight=mipHeight>>1||1,alignedMipWidth=mipWidth+4-1&-4,alignedMipHeight=mipHeight+4-1&-4,mipByteSize=alignedMipWidth*alignedMipHeight*imagePixelByteSize}return imageBuffers}(arrayBuffer,glType,function(glType,glFormat,glInternalFormat){if(glInternalFormat=KTX.INTERNAL_FORMAT_TO_BYTES_PER_PIXEL[glInternalFormat],void 0!==(glInternalFormat=0!==glType?KTX.TYPES_TO_BYTES_PER_COMPONENT[glType]?KTX.TYPES_TO_BYTES_PER_COMPONENT[glType]*KTX.FORMATS_TO_COMPONENTS[glFormat]:KTX.TYPES_TO_BYTES_PER_PIXEL[glType]:glInternalFormat))return glInternalFormat;throw new Error("Unable to resolve the pixel format stored in the *.ktx file!")}(glType,glFormat,glInternalFormat),pixelWidth,pixelHeight,offset,numberOfMipmapLevels,littleEndian),alphaMode:"no-premultiply-alpha"};throw new Error(`Unsupported texture format: ${textureFormat}, supportedFormats: `+supportedFormats)}var loadKTX={extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.High,name:"loadKTX"},name:"loadKTX",test(url){return checkExtension(url,".ktx")},async load(url,_asset,loader){var supportedTextures=await getSupportedTextureFormats(),supportedTextures=parseKTX(await(await fetch(url)).arrayBuffer(),supportedTextures);return createTexture(new CompressedSource(supportedTextures),loader,url)},unload(texture){Array.isArray(texture)?texture.forEach(t=>t.destroy(!0)):texture.destroy(!0)}};let WORKER_URL=null;class WorkerInstance{constructor(){WORKER_URL=WORKER_URL||URL.createObjectURL(new Blob(['(function () {\n \'use strict\';\n\n const converters = {\n rgb8unorm: {\n convertedFormat: "rgba8unorm",\n convertFunction: convertRGBtoRGBA\n },\n "rgb8unorm-srgb": {\n convertedFormat: "rgba8unorm-srgb",\n convertFunction: convertRGBtoRGBA\n }\n };\n function convertFormatIfRequired(textureOptions) {\n const format = textureOptions.format;\n if (converters[format]) {\n const convertFunction = converters[format].convertFunction;\n const levelBuffers = textureOptions.resource;\n for (let i = 0; i < levelBuffers.length; i++) {\n levelBuffers[i] = convertFunction(levelBuffers[i]);\n }\n textureOptions.format = converters[format].convertedFormat;\n }\n }\n function convertRGBtoRGBA(levelBuffer) {\n const pixelCount = levelBuffer.byteLength / 3;\n const levelBufferWithAlpha = new Uint32Array(pixelCount);\n for (let i = 0; i < pixelCount; ++i) {\n levelBufferWithAlpha[i] = levelBuffer[i * 3] + (levelBuffer[i * 3 + 1] << 8) + (levelBuffer[i * 3 + 2] << 16) + 4278190080;\n }\n return new Uint8Array(levelBufferWithAlpha.buffer);\n }\n\n function createLevelBuffersFromKTX(ktxTexture) {\n const levelBuffers = [];\n for (let i = 0; i < ktxTexture.numLevels; i++) {\n const imageData = ktxTexture.getImageData(i, 0, 0);\n const levelBuffer = new Uint8Array(imageData.byteLength);\n levelBuffer.set(imageData);\n levelBuffers.push(levelBuffer);\n }\n return levelBuffers;\n }\n\n const glFormatToGPUFormatMap = {\n 6408: "rgba8unorm",\n 32856: "bgra8unorm",\n //\n 32857: "rgb10a2unorm",\n 33189: "depth16unorm",\n 33190: "depth24plus",\n 33321: "r8unorm",\n 33323: "rg8unorm",\n 33325: "r16float",\n 33326: "r32float",\n 33327: "rg16float",\n 33328: "rg32float",\n 33329: "r8sint",\n 33330: "r8uint",\n 33331: "r16sint",\n 33332: "r16uint",\n 33333: "r32sint",\n 33334: "r32uint",\n 33335: "rg8sint",\n 33336: "rg8uint",\n 33337: "rg16sint",\n 33338: "rg16uint",\n 33339: "rg32sint",\n 33340: "rg32uint",\n 33778: "bc2-rgba-unorm",\n 33779: "bc3-rgba-unorm",\n 34836: "rgba32float",\n 34842: "rgba16float",\n 35056: "depth24plus-stencil8",\n 35898: "rg11b10ufloat",\n 35901: "rgb9e5ufloat",\n 35907: "rgba8unorm-srgb",\n // bgra8unorm-srgb\n 36012: "depth32float",\n 36013: "depth32float-stencil8",\n 36168: "stencil8",\n 36208: "rgba32uint",\n 36214: "rgba16uint",\n 36220: "rgba8uint",\n 36226: "rgba32sint",\n 36232: "rgba16sint",\n 36238: "rgba8sint",\n 36492: "bc7-rgba-unorm",\n 36756: "r8snorm",\n 36757: "rg8snorm",\n 36759: "rgba8snorm",\n 37496: "etc2-rgba8unorm",\n 37808: "astc-4x4-unorm"\n };\n function glFormatToGPUFormat(glInternalFormat) {\n const format = glFormatToGPUFormatMap[glInternalFormat];\n if (format) {\n return format;\n }\n throw new Error(`Unsupported glInternalFormat: ${glInternalFormat}`);\n }\n\n const vkFormatToGPUFormatMap = {\n 23: "rgb8unorm",\n // VK_FORMAT_R8G8B8_UNORM\n 37: "rgba8unorm",\n // VK_FORMAT_R8G8B8A8_UNORM\n 43: "rgba8unorm-srgb"\n // VK_FORMAT_R8G8B8A8_SRGB\n // TODO add more!\n };\n function vkFormatToGPUFormat(vkFormat) {\n const format = vkFormatToGPUFormatMap[vkFormat];\n if (format) {\n return format;\n }\n throw new Error(`Unsupported VkFormat: ${vkFormat}`);\n }\n\n function getTextureFormatFromKTXTexture(ktxTexture) {\n if (ktxTexture.classId === 2) {\n return vkFormatToGPUFormat(ktxTexture.vkFormat);\n }\n return glFormatToGPUFormat(ktxTexture.glInternalformat);\n }\n\n const gpuFormatToBasisTranscoderFormatMap = {\n "bc3-rgba-unorm": "BC3_RGBA",\n "bc7-rgba-unorm": "BC7_M5_RGBA",\n "etc2-rgba8unorm": "ETC2_RGBA",\n "astc-4x4-unorm": "ASTC_4x4_RGBA",\n // Uncompressed\n rgba8unorm: "RGBA32",\n rg11b10ufloat: "R11F_G11F_B10F"\n };\n function gpuFormatToKTXBasisTranscoderFormat(transcoderFormat) {\n const format = gpuFormatToBasisTranscoderFormatMap[transcoderFormat];\n if (format) {\n return format;\n }\n throw new Error(`Unsupported transcoderFormat: ${transcoderFormat}`);\n }\n\n const settings = {\n jsUrl: "",\n wasmUrl: ""\n };\n let basisTranscoderFormat;\n let basisTranscodedTextureFormat;\n let ktxPromise;\n async function getKTX() {\n if (!ktxPromise) {\n const absoluteJsUrl = new URL(settings.jsUrl, location.origin).href;\n const absoluteWasmUrl = new URL(settings.wasmUrl, location.origin).href;\n importScripts(absoluteJsUrl);\n ktxPromise = new Promise((resolve) => {\n LIBKTX({\n locateFile: (_file) => absoluteWasmUrl\n }).then((libktx) => {\n resolve(libktx);\n });\n });\n }\n return ktxPromise;\n }\n async function fetchKTXTexture(url, ktx) {\n const ktx2Response = await fetch(url);\n if (ktx2Response.ok) {\n const ktx2ArrayBuffer = await ktx2Response.arrayBuffer();\n return new ktx.ktxTexture(new Uint8Array(ktx2ArrayBuffer));\n }\n throw new Error(`Failed to load KTX(2) texture: ${url}`);\n }\n const preferredTranscodedFormat = [\n "bc7-rgba-unorm",\n "astc-4x4-unorm",\n "etc2-rgba8unorm",\n "bc3-rgba-unorm",\n "rgba8unorm"\n ];\n async function load(url) {\n const ktx = await getKTX();\n const ktxTexture = await fetchKTXTexture(url, ktx);\n let format;\n if (ktxTexture.needsTranscoding) {\n format = basisTranscodedTextureFormat;\n const transcodeFormat = ktx.TranscodeTarget[basisTranscoderFormat];\n const result = ktxTexture.transcodeBasis(transcodeFormat, 0);\n if (result !== ktx.ErrorCode.SUCCESS) {\n throw new Error("Unable to transcode basis texture.");\n }\n } else {\n format = getTextureFormatFromKTXTexture(ktxTexture);\n }\n const levelBuffers = createLevelBuffersFromKTX(ktxTexture);\n const textureOptions = {\n width: ktxTexture.baseWidth,\n height: ktxTexture.baseHeight,\n format,\n mipLevelCount: ktxTexture.numLevels,\n resource: levelBuffers,\n alphaMode: "no-premultiply-alpha"\n };\n convertFormatIfRequired(textureOptions);\n return textureOptions;\n }\n async function init(jsUrl, wasmUrl, supportedTextures) {\n if (jsUrl)\n settings.jsUrl = jsUrl;\n if (wasmUrl)\n settings.wasmUrl = wasmUrl;\n basisTranscodedTextureFormat = preferredTranscodedFormat.filter((format) => supportedTextures.includes(format))[0];\n basisTranscoderFormat = gpuFormatToKTXBasisTranscoderFormat(basisTranscodedTextureFormat);\n await getKTX();\n }\n const messageHandlers = {\n init: async (data) => {\n const { jsUrl, wasmUrl, supportedTextures } = data;\n await init(jsUrl, wasmUrl, supportedTextures);\n },\n load: async (data) => {\n var _a;\n try {\n const textureOptions = await load(data.url);\n return {\n type: "load",\n url: data.url,\n success: true,\n textureOptions,\n transferables: (_a = textureOptions.resource) == null ? void 0 : _a.map((arr) => arr.buffer)\n };\n } catch (e) {\n throw e;\n }\n }\n };\n self.onmessage = async (messageEvent) => {\n var _a;\n const message = messageEvent.data;\n const response = await ((_a = messageHandlers[message.type]) == null ? void 0 : _a.call(messageHandlers, message));\n if (response) {\n self.postMessage(response, response.transferables);\n }\n };\n\n})();\n'],{type:"application/javascript"})),this.worker=new Worker(WORKER_URL)}}WorkerInstance.revokeObjectURL=function(){WORKER_URL&&(URL.revokeObjectURL(WORKER_URL),WORKER_URL=null)};const ktxTranscoderUrls={jsUrl:"https://files.pixijs.download/transcoders/ktx/libktx.js",wasmUrl:"https://files.pixijs.download/transcoders/ktx/libktx.wasm"};let ktxWorker;const urlHash={};function loadKTX2onWorker(url,supportedTextures){const ktxWorker2=function(supportedTextures){return ktxWorker||((ktxWorker=(new WorkerInstance).worker).onmessage=messageEvent=>{var{success:messageEvent,url,textureOptions}=messageEvent.data;messageEvent||console.warn("Failed to load KTX texture",url),urlHash[url](textureOptions)},ktxWorker.postMessage({type:"init",jsUrl:ktxTranscoderUrls.jsUrl,wasmUrl:ktxTranscoderUrls.wasmUrl,supportedTextures:supportedTextures})),ktxWorker}(supportedTextures);return new Promise(resolve=>{urlHash[url]=resolve,ktxWorker2.postMessage({type:"load",url:url})})}var loadKTX2={extension:{type:ExtensionType2.LoadParser,priority:LoaderParserPriority2.High,name:"loadKTX2"},name:"loadKTX2",test(url){return checkExtension(url,".ktx2")},async load(url,_asset,loader){var textureOptions=await loadKTX2onWorker(url,await getSupportedTextureFormats());return createTexture(new CompressedSource(textureOptions),loader,url)},async unload(texture){Array.isArray(texture)?texture.forEach(t=>t.destroy(!0)):texture.destroy(!0)}};const converters={rgb8unorm:{convertedFormat:"rgba8unorm",convertFunction:convertRGBtoRGBA},"rgb8unorm-srgb":{convertedFormat:"rgba8unorm-srgb",convertFunction:convertRGBtoRGBA}};function convertRGBtoRGBA(levelBuffer){var pixelCount=levelBuffer.byteLength/3,levelBufferWithAlpha=new Uint32Array(pixelCount);for(let i=0;icheckExtension(value,[".ktx",".ktx2",".dds"]),parse:value=>{let format;var newFormat,splitValue=value.split(".");return 2