modern-canvas 0.7.4 → 0.7.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -5561,9 +5561,9 @@ class CanvasContext extends modernPath2d.Path2D {
5561
5561
  }
5562
5562
  this.buildUvs(0, vertices, uvs, current.texture, current.uvTransform);
5563
5563
  batchables.push({
5564
- vertices,
5565
- indices,
5566
- uvs,
5564
+ vertices: new Float32Array(vertices),
5565
+ indices: new Float32Array(indices),
5566
+ uvs: new Float32Array(uvs),
5567
5567
  texture: current.texture,
5568
5568
  type: current.type,
5569
5569
  disableWrapMode: current.disableWrapMode,
package/dist/index.d.cts CHANGED
@@ -916,9 +916,9 @@ declare class WebGLStateModule extends WebGLModule {
916
916
  }
917
917
 
918
918
  interface Batchable2D {
919
- vertices: number[];
920
- indices: number[];
921
- uvs?: number[];
919
+ vertices: Float32Array;
920
+ indices: Float32Array;
921
+ uvs?: Float32Array;
922
922
  texture?: WebGLTexture;
923
923
  backgroundColor?: number;
924
924
  modulate?: number;
@@ -1888,7 +1888,7 @@ declare class Node2D extends CanvasItem {
1888
1888
  getTransform(cb?: (transform: Transform2D) => void): Transform2D;
1889
1889
  updateTransform(): void;
1890
1890
  updateGlobalTransform(): void;
1891
- protected _transformVertices(vertices: number[], vertTransform?: VertTransform): number[];
1891
+ protected _transformVertices(vertices: Float32Array, vertTransform?: VertTransform): Float32Array;
1892
1892
  protected _relayout(batchables: CanvasBatchable[]): CanvasBatchable[];
1893
1893
  protected _process(delta: number): void;
1894
1894
  }
package/dist/index.d.mts CHANGED
@@ -916,9 +916,9 @@ declare class WebGLStateModule extends WebGLModule {
916
916
  }
917
917
 
918
918
  interface Batchable2D {
919
- vertices: number[];
920
- indices: number[];
921
- uvs?: number[];
919
+ vertices: Float32Array;
920
+ indices: Float32Array;
921
+ uvs?: Float32Array;
922
922
  texture?: WebGLTexture;
923
923
  backgroundColor?: number;
924
924
  modulate?: number;
@@ -1888,7 +1888,7 @@ declare class Node2D extends CanvasItem {
1888
1888
  getTransform(cb?: (transform: Transform2D) => void): Transform2D;
1889
1889
  updateTransform(): void;
1890
1890
  updateGlobalTransform(): void;
1891
- protected _transformVertices(vertices: number[], vertTransform?: VertTransform): number[];
1891
+ protected _transformVertices(vertices: Float32Array, vertTransform?: VertTransform): Float32Array;
1892
1892
  protected _relayout(batchables: CanvasBatchable[]): CanvasBatchable[];
1893
1893
  protected _process(delta: number): void;
1894
1894
  }
package/dist/index.d.ts CHANGED
@@ -916,9 +916,9 @@ declare class WebGLStateModule extends WebGLModule {
916
916
  }
917
917
 
918
918
  interface Batchable2D {
919
- vertices: number[];
920
- indices: number[];
921
- uvs?: number[];
919
+ vertices: Float32Array;
920
+ indices: Float32Array;
921
+ uvs?: Float32Array;
922
922
  texture?: WebGLTexture;
923
923
  backgroundColor?: number;
924
924
  modulate?: number;
@@ -1888,7 +1888,7 @@ declare class Node2D extends CanvasItem {
1888
1888
  getTransform(cb?: (transform: Transform2D) => void): Transform2D;
1889
1889
  updateTransform(): void;
1890
1890
  updateGlobalTransform(): void;
1891
- protected _transformVertices(vertices: number[], vertTransform?: VertTransform): number[];
1891
+ protected _transformVertices(vertices: Float32Array, vertTransform?: VertTransform): Float32Array;
1892
1892
  protected _relayout(batchables: CanvasBatchable[]): CanvasBatchable[];
1893
1893
  protected _process(delta: number): void;
1894
1894
  }
package/dist/index.js CHANGED
@@ -108,7 +108,7 @@ uniform sampler2D sampler;
108
108
  uniform vec4 tint;
109
109
  void main(void) {
110
110
  gl_FragColor = texture2D(sampler, vUv) * tint;
111
- }`,uniforms:{sampler:0,projectionMatrix:new Float32Array([1,0,0,0,1,0,0,0,1]),modelViewMatrix:new Float32Array([1,0,0,0,1,0,0,0,1]),tint:new Float32Array([1,1,1,1])}})}}class ut extends dr{static _instance;static get instance(){return this._instance??=new this}static draw(t,e=Bi.instance,A){this.instance.draw(t,e,A)}constructor(){super({vertexAttributes:{position:new he({buffer:new ze({data:new Float32Array([-1,-1,1,-1,1,1,-1,1]),dynamic:!1}),size:2,normalized:!1,type:"float"}),uv:new he({buffer:new ze({data:new Float32Array([0,0,1,0,1,1,0,1]),dynamic:!1}),size:2,normalized:!1,type:"float"})},indexBuffer:new GA({data:new Uint16Array([0,1,2,0,2,3]),dynamic:!1})})}}class uu extends dr{positionBuffer;uvBuffer;constructor(){const t=new ze({data:new Float32Array,dynamic:!0}),e=new ze({data:new Float32Array,dynamic:!0});super({vertexAttributes:{position:new he({buffer:t,size:2,normalized:!1,type:"float"}),uv:new he({buffer:e,size:2,normalized:!1,type:"float"})},indexBuffer:new GA({data:new Uint16Array,dynamic:!0})}),this.positionBuffer=t,this.uvBuffer=e}}var fu=Object.defineProperty,OA=(r,t,e,A)=>{for(var i=void 0,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(t,e,i)||i);return i&&fu(t,e,i),i};class mt extends Ye{static get EMPTY(){return new this({width:1,height:1,pixels:null})}static get WHITE(){return new this({width:1,height:1,pixels:new Uint8Array([255,255,255,255])})}static get BLACK(){return new this({width:1,height:1,pixels:new Uint8Array([0,0,0,255])})}static get RED(){return new this({width:1,height:1,pixels:new Uint8Array([255,0,0,255])})}static get GREEN(){return new this({width:1,height:1,pixels:new Uint8Array([0,255,0,255])})}static get BLUE(){return new this({width:1,height:1,pixels:new Uint8Array([0,0,255,255])})}_isPowerOfTwo=!1;_needsUpload=!1;get valid(){return!!(this.width&&this.height)}get realWidth(){return Math.round(this.width*this.pixelRatio)}get realHeight(){return Math.round(this.height*this.pixelRatio)}constructor(t){super(),this.source=t,this._updateSize()}_glTextureOptions(t,e){let A=this.wrapMode;return t.version===1&&!this._isPowerOfTwo&&(A="clamp_to_edge"),{value:this.source,target:"texture_2d",location:0,filterMode:this.filterMode,wrapMode:A,...e}}_glTexture(t,e){return t.getRelated(this,()=>t.texture.create(this._glTextureOptions(t,e)))}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"width":case"height":this._updatePOT();break;case"source":this._updateSize();break;case"filterMode":case"wrapMode":case"pixelRatio":this.requestUpload();break}}_updatePOT(){this._isPowerOfTwo=fs(this.realWidth)&&fs(this.realHeight),this.requestUpload()}_updateSize(){const t=this.source;"pixels"in t?(this.width=t.width/this.pixelRatio,this.height=t.height/this.pixelRatio):(this.width=Number(t.naturalWidth||t.videoWidth||t.width||0)/this.pixelRatio,this.height=Number(t.naturalHeight||t.videoHeight||t.height||0)/this.pixelRatio),this.requestUpload()}requestUpload(){this._needsUpload=!0}upload(t,e){return this._needsUpload&&this.valid?(this._needsUpload=!1,t.texture.update(this._glTexture(t,e),this._glTextureOptions(t,e)),!0):!1}activate(t,e=0){return this.valid?(t.texture.bind({target:"texture_2d",value:this._glTexture(t,{location:e}),location:e}),this.upload(t,{location:e}),!0):!1}inactivate(t){t.texture.unbind(this._glTexture(t))}free(){mo&&this.source instanceof ImageBitmap&&this.source.close()}}OA([v({protected:!0})],mt.prototype,"source"),OA([v({fallback:0})],mt.prototype,"width"),OA([v({fallback:0})],mt.prototype,"height"),OA([v({fallback:"linear"})],mt.prototype,"filterMode"),OA([v({fallback:"clamp_to_edge"})],mt.prototype,"wrapMode"),OA([v({fallback:1})],mt.prototype,"pixelRatio");class Ir extends Ye{frames;constructor(t){super();let e;if(Array.isArray(t))e=t;else if(t instanceof mt)e=[{texture:t,duration:0}];else throw new TypeError("Failed new AnimatedTexture");this.frames=e,this.updateDuration()}updateDuration(){return this.duration=this.frames.reduce((t,e)=>e.duration+t,0),this}free(){this.frames.forEach(t=>{t.texture.free()})}}var du=Object.defineProperty,Iu=(r,t,e,A)=>{for(var i=void 0,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(t,e,i)||i);return i&&du(t,e,i),i};class pr extends mt{constructor(t=document.createElement("canvas")){super(t)}_updateProperty(t,e,A,i){switch(t){case"width":this.source.width=Math.max(1,Math.ceil(e*this.pixelRatio));break;case"height":this.source.height=Math.max(1,Math.ceil(e*this.pixelRatio));break}super._updateProperty(t,e,A,i)}}Iu([v({fallback:2})],pr.prototype,"pixelRatio");class Pa extends mt{static _cached=new Map;static get(t){const e=new xe(t),A=e.toHex();let i=this._cached.get(A);return i||(i=new mt({width:1,height:1,pixels:new Uint8Array([e.r8,e.g8,e.b8,e.a8])}),this._cached.set(A,i)),i}constructor(t){const e=new xe(t);super({width:1,height:1,pixels:new Uint8Array([e.r8,e.g8,e.b8,e.a8])})}}class Er extends mt{static test(t){return li(t)}static linearGradient(t,e,A){e=e||1,A=A||1;const i=document.createElement("canvas");i.width=e,i.height=A;const s=i.getContext("2d");if(!s)throw new Error("Failed to parse linear gradient, get canvas context is null.");let{angle:n=0,stops:o}=t;n-=Math.PI/2;const a=e/2,l=A/2,c=Math.sqrt(e*e+A*A)/2,h=a+c*Math.cos(n+Math.PI),u=l+c*Math.sin(n+Math.PI),d=a+c*Math.cos(n),f=l+c*Math.sin(n),B=s.createLinearGradient(h,u,d,f);o.forEach(x=>{B.addColorStop(x.offset,x.color)}),s.fillStyle=B,s.fillRect(0,0,i.width,i.height);const I=s.getImageData(0,0,i.width,i.height);return{width:I.width,height:I.height,pixels:new Uint8Array(I.data.buffer)}}constructor(t,e,A){super(Er.linearGradient(t,e,A))}}function pu(r){return{autoLoad:!!(r?.autoLoad??!0),useBitmap:!!(r?.useBitmap??!0)&&Is,crossorigin:r?.crossorigin??null}}class Eu extends mt{bitmap;useBitmap;preserveBitmap=!1;_loadSource;_loadBitmap;constructor(t,e){const A=pu(e);super(t);const i=t.src,s=i.includes(".svg")||i.startsWith("data:image/svg+xml");this.useBitmap=A.useBitmap&&!s,A.autoLoad&&this.load()}async load(){return this._loadSource||(this._loadSource=new Promise(t=>{this._loadSource=void 0;const e=this.source,A=()=>{e.onload=null,e.onerror=null},i=()=>{A(),this.requestUpload(),this.useBitmap?this.genBitmap().finally(()=>t(this)):t(this)},s=n=>{A(),console.warn(`Failed to load ImageTexture, src: ${e.src}`,n),this.emit("error",n),t(this)};e.complete&&e.src?i():(e.onload=i,e.onerror=s)})),this._loadSource}genBitmap(){if(this._loadBitmap)return this._loadBitmap;if(this.bitmap||!Is)return Promise.resolve(this);const t=this.source,e=!t.crossOrigin||t.crossOrigin==="anonymous";return this._loadBitmap=fetch(t.src,{mode:e?"cors":"no-cors"}).then(A=>A.blob()).then(A=>createImageBitmap(A,0,0,t.width,t.height,{premultiplyAlpha:"premultiply"})).then(A=>(this.bitmap=A,this.requestUpload(),this._loadBitmap=void 0,this)).catch(A=>(console.warn("Failed to genBitmap",A),this)),this._loadBitmap}_glTextureOptions(t){return{...super._glTextureOptions(t),value:this.bitmap??this.source}}upload(t){if(this.useBitmap){if(!this.bitmap)return this.genBitmap(),!1}else{const A=this.source;if(gi&&A instanceof HTMLImageElement&&(!A.complete||A.naturalWidth===0))return!1}const e=super.upload(t);return this.preserveBitmap&&this.bitmap&&(this.bitmap.close(),this.bitmap=void 0),e}}class Os extends mt{constructor(t,e=1,A=1){const i={width:e,height:A,pixels:null};t&&(ArrayBuffer.isView(t)?i.pixels=new Uint8Array(t.buffer):i.pixels=new Uint8Array(t)),super(i)}_updateProperty(t,e,A,i){switch(t){case"width":this.source.width=Math.round(this.width*this.pixelRatio);break;case"height":this.source.height=Math.round(this.height*this.pixelRatio);break;case"pixelRatio":this.source.width=Math.round(this.width*this.pixelRatio),this.source.height=Math.round(this.height*this.pixelRatio);break}super._updateProperty(t,e,A,i)}}var Bu=Object.defineProperty,Ua=(r,t,e,A)=>{for(var i=void 0,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(t,e,i)||i);return i&&Bu(t,e,i),i};function Cu(r){return{autoLoad:!!(r?.autoLoad??!0),autoPlay:!!(r?.autoPlay??!1),fps:Number(r?.fps??0),crossorigin:r?.crossorigin??null,loop:!!(r?.loop??!1),muted:!!(r?.muted??!1),playsinline:!!(r?.playsinline??!0)}}const Hs=class xc extends mt{static mimeTypes=new Map(Object.entries({ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"}));get isReady(){return this.source.readyState>2}get isPlaying(){return!this.source.paused&&!this.source.ended&&this.isReady}get duration(){return this.source.duration}get seeking(){return this.source.seeking}get currentTime(){return this.source.currentTime}set currentTime(t){this.source.currentTime=t}_spf=0;_autoPlay=!1;_sourceLoad;_nextTime=0;_connected=!1;_requestId;_resolve;_reject;constructor(t,e){const A=Cu(e);if(!xo(t)){typeof t=="string"&&(t=[t]);const i=t[0].src||t[0],s=document.createElement("video");A.autoLoad&&s.setAttribute("preload","auto"),A.playsinline&&(s.setAttribute("webkit-playsinline",""),s.setAttribute("playsinline","")),A.muted&&(s.setAttribute("muted",""),s.muted=!0),A.loop&&s.setAttribute("loop",""),A.autoPlay&&s.setAttribute("autoplay",""),Po(s,i,A.crossorigin);for(let n=0;n<t.length;++n){let{src:o,mime:a}=t[n];if(o=o||t[n],o.startsWith("data:"))a=o.slice(5,o.indexOf(";"));else if(!o.startsWith("blob:")){const c=o.split("?").shift().toLowerCase(),h=c.slice(c.lastIndexOf(".")+1);a=a||xc.mimeTypes.get(h)||`video/${h}`}const l=document.createElement("source");l.src=o,a&&(l.type=a),s.appendChild(l)}t=s}super(t),this.fps=A.fps,this._autoPlay=A.autoPlay,A.autoPlay&&this.load(),this._setupAutoUpdate()}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"fps":this._spf=e?Math.floor(1e3/e):0,this._setupAutoUpdate();break;case"autoUpdate":this._setupAutoUpdate();break}}_onPlayStart=()=>{this.valid||this._onCanPlay(),this._setupAutoUpdate()};_onPlayStop=()=>{this._setupAutoUpdate()};_onCanPlay=()=>{const t=this.source;t.removeEventListener("canplay",this._onCanPlay),t.removeEventListener("canplaythrough",this._onCanPlay);const e=this.valid;this._nextTime=0,this._updateSize(),this.requestUpload(),this._nextTime=0,!e&&this._resolve&&(this._resolve(this),this._sourceLoad=void 0,this._resolve=void 0,this._reject=void 0),this.isPlaying?this._onPlayStart():this._autoPlay&&t.play()};_onError=t=>{this.source.removeEventListener("error",this._onError,!0),this.emit("error",t),this._reject&&(this._reject(t),this._reject=void 0,this._resolve=void 0)};_onSeeked=()=>{this.autoUpdate&&!this.isPlaying&&(this._nextTime=0,this.requestUpload(),this._nextTime=0)};_setupAutoUpdate(){this.autoUpdate&&this.isPlaying?!this.fps&&this.source.requestVideoFrameCallback?(this._connected&&(Yt.off(this.requestUpload),this._connected=!1,this._nextTime=0),this._requestId===void 0&&(this._requestId=this.source.requestVideoFrameCallback(this._videoFrameRequestCallback))):(this._requestId!==void 0&&(this.source.cancelVideoFrameCallback(this._requestId),this._requestId=void 0),this._connected||(Yt.on(this.requestUpload),this._connected=!0,this._nextTime=0)):(this._requestId!==void 0&&(this.source.cancelVideoFrameCallback(this._requestId),this._requestId=void 0),this._connected&&(Yt.off(this.requestUpload),this._connected=!1,this._nextTime=0))}_videoFrameRequestCallback=()=>{this.requestUpload(),this._requestId=this.source.requestVideoFrameCallback(this._videoFrameRequestCallback)};requestUpload=()=>{const t=Math.floor(Yt.elapsed*this.source.playbackRate);this._nextTime-=t,(!this._spf||this._nextTime<=0)&&(super.requestUpload(),this._nextTime=this._spf||0)};async load(){if(!this._sourceLoad){const t=this.source;(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),t.addEventListener("play",this._onPlayStart),t.addEventListener("pause",this._onPlayStop),t.addEventListener("seeked",this._onSeeked),this.isReady?this._onCanPlay():(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("error",this._onError,!0)),this._sourceLoad=new Promise((e,A)=>{this.valid?(this._sourceLoad=void 0,e(this)):(this._resolve=e,this._reject=A,t.load())})}return this._sourceLoad}free(){this._setupAutoUpdate();const t=this.source;t&&(t.removeEventListener("play",this._onPlayStart),t.removeEventListener("pause",this._onPlayStop),t.removeEventListener("seeked",this._onSeeked),t.removeEventListener("canplay",this._onCanPlay),t.removeEventListener("canplaythrough",this._onCanPlay),t.removeEventListener("error",this._onError,!0),t.pause(),t.src="",t.load())}};Ua([v({protected:!0,fallback:!0})],Hs.prototype,"autoUpdate"),Ua([v({protected:!0,fallback:0})],Hs.prototype,"fps");let Na=Hs;class Js extends Os{}class Fa extends Rt{fillStyle;strokeStyle;lineCap;lineJoin;lineWidth;miterLimit;uvTransform;vertTransform;_defaultStyle=mt.EMPTY;_draws=[];_toTexture(t){return t instanceof mt?t:Pa.get(t)}stroke(t){if(!this.curves.length)return;let e=this.strokeStyle;if(!e&&this.style.stroke)switch(typeof this.style.stroke){case"string":e=this.style.stroke;break;case"object":cs(this.style.stroke)&&(e=this.style.stroke.color);break}this._draws.push({...t,type:"stroke",path:new Rt(this),texture:e?this._toTexture(e):this._defaultStyle,uvTransform:this.uvTransform,vertTransform:this.vertTransform,style:{alignment:.5,cap:this.lineCap??"butt",join:this.lineJoin??"miter",width:this.lineWidth??1,miterLimit:this.miterLimit??10}}),super.reset()}fillRect(t,e,A,i){this.rect(t,e,A,i).fill()}strokeRect(t,e,A,i){this.rect(t,e,A,i).stroke()}fill(t){if(!this.curves.length)return;let e=this.fillStyle;if(!e&&this.style.fill)switch(typeof this.style.fill){case"string":e=this.style.fill;break;case"object":cs(this.style.fill)&&(e=this.style.fill.color);break}this._draws.push({...t,type:"fill",path:new Rt(this),texture:e?this._toTexture(e):this._defaultStyle,uvTransform:this.uvTransform,vertTransform:this.vertTransform}),super.reset()}copy(t){return super.copy(t),this.strokeStyle=t.strokeStyle,this.fillStyle=t.fillStyle,this.uvTransform=t.uvTransform,this.vertTransform=t.vertTransform,this.lineCap=t.lineCap,this.lineJoin=t.lineJoin,this.lineWidth=t.lineWidth,this.miterLimit=t.miterLimit,this._draws=t._draws.slice(),this}reset(){return super.reset(),this.strokeStyle=void 0,this.fillStyle=void 0,this.uvTransform=void 0,this.vertTransform=void 0,this.lineCap=void 0,this.lineJoin=void 0,this.lineWidth=void 0,this.miterLimit=void 0,this._draws.length=0,this}buildUvs(t,e,A,i,s){if(i){const n=s&&(typeof s=="function"?s:(l,c)=>s.applyToPoint(l,c)),o=i.width,a=i.height;for(let l=e.length,c=t;c<l;c+=2){const h=e[c],u=e[c+1];let d,f;n?[d,f]=n(h,u):[d,f]=[h/o,u/a],A.push(d,f)}}else for(let n=e.length,o=t;o<n;o+=2)A.push(0,0)}toBatchables(){const t=[];for(let e=this._draws.length,A=0;A<e;A++){const i=this._draws[A],s=[],n=[],o=[];i.type==="fill"?i.path.fillTriangulate({vertices:s,indices:n}):i.path.strokeTriangulate({vertices:s,indices:n,lineStyle:i.style,flipAlignment:!1,closed:!0}),this.buildUvs(0,s,o,i.texture,i.uvTransform),t.push({vertices:s,indices:n,uvs:o,texture:i.texture,type:i.type,disableWrapMode:i.disableWrapMode,vertTransform:i.vertTransform})}return t}}class Ta extends Array{front=[];back=[];get internal(){return[...this.front,...this,...this.back]}constructor(...t){super(),this.set(t)}set(t){return this.front.length=0,this.length=0,this.back.length=0,t.forEach(e=>{switch(e.internalMode){case"front":this.front.push(e);break;case"default":this.push(e);break;case"back":this.back.push(e);break}}),this}getInternal(t){switch(t){case"front":return this.front;case"default":return this;case"back":return this.back;default:throw new Error(`Unknown internal mode: ${t}`)}}toJSON(){return[...this]}}var Qu=Object.defineProperty,yu=Object.getOwnPropertyDescriptor,qe=(r,t,e,A)=>{for(var i=A>1?void 0:A?yu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Qu(t,e,i),i};const La={};function mu(r){let t=La[r]??0;return t++,La[r]=t,t}g.Node=class extends sA{_readyed=!1;constructor(t,e=[]){super(),this._onTreeEnter=this._onTreeEnter.bind(this),this._onTreeExit=this._onTreeExit.bind(this),this._onParented=this._onParented.bind(this),this._onUnparented=this._onUnparented.bind(this),this._onReady=this._onReady.bind(this),this._onProcess=this._onProcess.bind(this),this.setProperties({name:`${this.is}:${mu(this.is)}`,...t}).append(e),this.on("treeEnter",this._onTreeEnter).on("treeExit",this._onTreeExit).on("parented",this._onParented).on("unparented",this._onUnparented).on("ready",this._onReady).on("process",this._onProcess)}setProperties(t){if(t){const{meta:e,...A}=t;if(e)for(const i in e)this.meta[i]=e[i];super.setProperties(A)}return this}getName(){return this.name}setName(t){return this.name=t,this}_tree;get tree(){return this.getTree()}set tree(t){this.setTree(t)}getTree(){return this._tree}getViewport(){return this.parent?.getViewport()??this.getWindow()}getWindow(){return this._tree?.root}isInsideTree(){return!!this._tree}setTree(t){const e=this._tree;if(!t?.equal(e)){e&&this.emit("treeExit",e),this._tree=t,t&&this.emit("treeEnter",t);const A=this._children.internal;for(let i=A.length,s=0;s<i;s++){const n=A[s];!t&&this.emit("childExitingTree",n),n.setTree(t),t&&this.emit("childEnteredTree",n)}t&&(this.emit("treePostEnter",t),this._readyed||(this._readyed=!0,this.emit("ready")))}return this}log(...t){this._tree?.log(...t)}_parent;get parent(){return this._parent}set parent(t){this.setParent(t)}hasParent(){return!!this._parent}getParent(){return this._parent}setParent(t){if(!this._parent?.equal(t)){const e=this._parent;e&&this.emit("unparented",e),this._parent=t,t&&this.emit("parented",t),this.setTree(t?._tree)}return this}_children=new Ta;get children(){return this._children}set children(t){t instanceof Ta?this._children=t:this._children.set(t)}getChild(t=0){return this._children[t]}get siblingIndex(){return this.getIndex()}set siblingIndex(t){this._parent?.moveChild(this,t)}get previousSibling(){return this._parent?.children[this.getIndex()-1]}get nextSibling(){return this._parent?.children[this.getIndex()+1]}get firstSibling(){return this._parent?.children[0]}get lastSibling(){const t=this._parent?.children;return t?t[t.length-1]:void 0}canProcess(){if(!this._tree)return!1;switch(this.processMode){case"inherit":return this._parent?.canProcess()??!0;case"pausable":return!this._tree.processPaused;case"when_paused":return this._tree.processPaused;case"always":return!0;case"disabled":default:return!1}}canRender(){if(!this._tree)return!1;switch(this.renderMode){case"inherit":return this._parent?.canRender()??!0;case"always":return!0;case"disabled":default:return!1}}_updateProperty(t,e,A,i){super._updateProperty(t,e,A,i)}_onTreeEnter(t){this._treeEnter(t),this.emit("treeEntered",t)}_onTreeExit(t){this.emit("treeExiting",t),this._treeExit(t),this.emit("treeExited",t)}_onParented(t){this._parented(t)}_onUnparented(t){this._unparented(t)}_onReady(){this._ready()}_onProcess(t=0){const e=this._tree,A=this.canRender(),i=this.canProcess(),s=[],n=[];this._children.internal.forEach(a=>{switch(a.processSortMode){case"default":n.push(a);break;case"parent_before":s.push(a);break}}),s.forEach(a=>{a.emit("process",t)}),i&&(e?.emit("nodeProcessing",this),this.emit("processing",t),this._process(t));let o;if(A){const a=e.renderStack.push(this);o=e.renderStack.currentCall,e.renderStack.currentCall=a}if(this.mask instanceof g.Node)this.getNode("__$mask")||(this.mask.processMode="disabled",this.appendChild(this.mask,"front"));else{const a=this.getNode("__$mask");a&&this.removeChild(a)}n.forEach(a=>{a.emit("process",t)}),A&&(e.renderStack.currentCall=o),i&&(this.emit("processed",t),e?.emit("nodeProcessed",this))}render(t,e){const A=this.mask;A&&(t.flush(),t.mask.push(this,A)),this._render(t),e?.(),A&&(t.flush(),t.mask.pop(this))}input(t,e){const A=this._children.internal;for(let i=A.length-1;i>=0;i--)A[i].input(t,e);this._input(t,e)}getIndex(){return this._parent?.children.getInternal(this.internalMode).indexOf(this)??0}getNode(t){return this._children.internal.find(e=>e.name===t)}removeNode(t){this.getNode(t)?.remove()}addSibling(t){return this.equal(t)||!this.hasParent()||t.hasParent()?this:(t.internalMode=this.internalMode,this._parent.moveChild(t,this.getIndex()+1),this)}prepend(...t){let e;Array.isArray(t[0])?e=t[0]:e=t,e.forEach(A=>{this.moveChild(A,0)})}append(...t){let e;Array.isArray(t[0])?e=t[0]:e=t,e.forEach(A=>{this.appendChild(A)})}before(...t){let e;Array.isArray(t[0])?e=t[0]:e=t,e.forEach(A=>{this._parent?.moveChild(A,this.getIndex())})}after(...t){let e;Array.isArray(t[0])?e=t[0]:e=t,e.forEach(A=>{this._parent?.moveChild(A,this.getIndex()+1)})}insertBefore(t,e){return!e.hasParent()||!this.equal(e.parent)||this.moveChild(t,e.getIndex()),t}appendChild(t,e=t.internalMode){if(this.equal(t)||t.hasParent())return t;switch(e){case"front":this._children.front.push(t);break;case"default":this._children.push(t);break;case"back":this._children.back.push(t);break}return t.internalMode!==e&&(t.internalMode=e),t.setParent(this),this.emit("appendChild",t),t}moveChild(t,e,A=t.internalMode){if(this.equal(t)||t.hasParent()&&!this.equal(t.parent))return this;const i=this._children.getInternal(t.internalMode),s=i.indexOf(t),n=this._children.getInternal(A);return(t.internalMode!==A||e!==s)&&(s>-1&&i.splice(s,1),t.setParent(this),e>-1&&e<n.length?n.splice(e,0,t):n.push(t),s>-1?this.emit("moveChild",t,e,s):this.emit("appendChild",t)),t.internalMode!==A&&(t.internalMode=A),this}removeChild(t){const e=t.getIndex();return this.equal(t.parent)&&e>-1&&(this._children.getInternal(t.internalMode).splice(e,1),t.setParent(void 0),this.emit("removeChild",t,e)),t}removeChildren(){this._children.forEach(t=>this.removeChild(t))}remove(){this._parent?.removeChild(this)}forEachChild(t){return this._children.forEach(t),this}forEachDescendant(t){return this._children.forEach(e=>{t(e),e.forEachDescendant(t)}),this}forEachAncestor(t){const e=this.parent;return e&&(t(e),e.forEachAncestor(t)),this}_ready(){}_treeEnter(t){}_treeExit(t){}_parented(t){}_unparented(t){}_process(t){}_input(t,e){}_render(t){}clone(){return new this.constructor(this.toJSON(),this._children.internal)}toJSON(){return ae({...super.toJSON(),children:this._children.length?[...this._children.map(t=>t.toJSON())]:void 0,meta:{...this.meta,inCanvasIs:this.is}})}static parse(t){if(Array.isArray(t))return t.map(a=>this.parse(a));const{meta:e={},children:A,...i}=t,{inCanvasIs:s="Node"}=e,n=rr.get(s)??g.Node,o=new n({...i,meta:e});return A?.forEach(a=>o.appendChild(this.parse(a))),o}},qe([v({fallback:uo()})],g.Node.prototype,"id",2),qe([v({fallback:uo()})],g.Node.prototype,"name",2),qe([v({default:()=>({})})],g.Node.prototype,"meta",2),qe([v({protected:!0,fallback:"inherit"})],g.Node.prototype,"processMode",2),qe([v({protected:!0,fallback:"default"})],g.Node.prototype,"processSortMode",2),qe([v({protected:!0,fallback:"inherit"})],g.Node.prototype,"renderMode",2),qe([v({protected:!0,fallback:"default"})],g.Node.prototype,"internalMode",2),qe([v({protected:!0})],g.Node.prototype,"mask",2),g.Node=qe([st("Node")],g.Node);var wu=Object.defineProperty,vu=Object.getOwnPropertyDescriptor,Ci=(r,t,e,A)=>{for(var i=A>1?void 0:A?vu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&wu(t,e,i),i};g.TimelineNode=class extends g.Node{constructor(t,e=[]){super(),this.setProperties(t).append(e)}computedDuration=0;_currentTime=0;_startTime=0;get timeline(){return this._tree?.timeline}get timelineCurrentTime(){return this.timeline?.currentTime??0}get parentStartTime(){return this._parent?.startTime??0}get currentTime(){return ce(this._currentTime,0,this.computedDuration)}get startTime(){return this._startTime}set startTime(t){this.delay=t-this.parentStartTime,this._updateCurrentTime(!0)}get endTime(){return this._startTime+this.computedDuration}get currentTimeProgress(){return this.computedDuration?ce(this._currentTime/this.computedDuration,0,1):0}isInsideTimeRange(){const t=this._currentTime;return this.computedDuration?t>=0&&t<=this.computedDuration:t>=0}_updateCurrentTime(t=!1){if(t||!this.paused){const e=this._parent;this._startTime=this.delay+this.parentStartTime,this.computedDuration=e?.computedDuration?Math.min(this._startTime+this.duration,e.endTime)-this._startTime:this.duration,this._currentTime=this.timelineCurrentTime-this._startTime,this.emit("updateCurrentTime",this._currentTime),this.insideTimeRange=this.isInsideTimeRange()}}_process(t){super._process(t),this._updateCurrentTime()}},Ci([v({fallback:0})],g.TimelineNode.prototype,"delay",2),Ci([v({fallback:0})],g.TimelineNode.prototype,"duration",2),Ci([v({fallback:!1})],g.TimelineNode.prototype,"paused",2),Ci([v({protected:!0,fallback:!1})],g.TimelineNode.prototype,"insideTimeRange",2),g.TimelineNode=Ci([st("TimelineNode")],g.TimelineNode);var _u=Object.defineProperty,bu=Object.getOwnPropertyDescriptor,Qi=(r,t,e,A)=>{for(var i=A>1?void 0:A?bu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&_u(t,e,i),i};g.CanvasItem=class extends g.TimelineNode{_parentGlobalVisible;_globalVisible;get globalVisible(){return this._globalVisible??!0}_parentGlobalOpacity;_globalOpacity;get globalOpacity(){return this._globalOpacity??1}_modulate=new xe(4294967295);context=new Fa;_resetContext=!0;_redrawing=!0;_relayouting=!1;_repainting=!1;_originalBatchables=[];_layoutedBatchables=[];_batchables=[];constructor(t,e=[]){super(),this.setProperties(t).append(e)}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"modulate":this._modulate.value=e,this.requestRepaint();break;case"blendMode":this.requestRepaint();break;case"opacity":this._updateGlobalOpacity();break;case"visible":case"insideTimeRange":this._updateGlobalVisible();break}}show(){this.visible=!0}hide(){this.visible=!1}isVisibleInTree(){return this.globalOpacity>0&&this.globalVisible}canRender(){return super.canRender()&&this.isVisibleInTree()}requestRedraw(){this._redrawing=!0}requestRelayout(){this._relayouting=!0}requestRepaint(){this._repainting=!0}_updateGlobalVisible(){this._parentGlobalVisible=this.getParent()?.globalVisible,this._globalVisible=(this._parentGlobalVisible??!0)&&this.visible&&this.insideTimeRange}_updateGlobalOpacity(){this._parentGlobalOpacity=this.getParent()?.opacity;const t=ce(this.opacity,0,1)*(this._parentGlobalOpacity??1);this._globalOpacity!==t&&(this._globalOpacity=t,this.requestRepaint())}_draw(){this.emit("draw")}_redraw(){return this.log(this.name,"drawing"),this._draw(),this.context.toBatchables()}_relayout(t){return this.log(this.name,"layouting"),t}_repaint(t){return this.log(this.name,"painting"),t.map(e=>({...e,modulate:this._modulate.toArgb(this.globalOpacity,!0),blendMode:this.blendMode}))}_process(t){super._process(t);const e=this.getParent();this._parentGlobalVisible!==e?.globalVisible&&this._updateGlobalVisible(),this._parentGlobalOpacity!==e?.globalOpacity&&this._updateGlobalOpacity()}_updateBatchables(){const t=this._redrawing;let e=this._relayouting,A=this._repainting,i;t&&(this._originalBatchables=this._redraw(),e=!0),e&&(this._layoutedBatchables=this._relayout(this._originalBatchables),A=!0),A&&(i=this._repaint(this._layoutedBatchables)),t&&this._resetContext&&this.context.reset(),i&&(this._batchables=i,this._redrawing=!1,this._relayouting=!1,this._repainting=!1)}_render(t){this._updateBatchables(),this._batchables.forEach(e=>{e.texture?.upload(t),t.batch2D.render({...e,texture:e.texture?._glTexture(t)})}),super._render(t)}},Qi([v()],g.CanvasItem.prototype,"modulate",2),Qi([v()],g.CanvasItem.prototype,"blendMode",2),Qi([v({protected:!0,fallback:!0})],g.CanvasItem.prototype,"visible",2),Qi([v({protected:!0,fallback:1})],g.CanvasItem.prototype,"opacity",2),g.CanvasItem=Qi([st("CanvasItem")],g.CanvasItem);var Du=Object.defineProperty,xu=Object.getOwnPropertyDescriptor,yi=(r,t,e,A)=>{for(var i=A>1?void 0:A?xu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Du(t,e,i),i};g.Viewport=class extends g.Node{constructor(t=!1){super(),this.flipY=t,this.projection.flipY(t)}projection=new Ho;canvasTransform=new Lt;_framebufferIndex=0;_framebuffers=[{texture:new Js,needsUpload:!1},{texture:new Js,needsUpload:!1}];get valid(){return!!(this.width&&this.height)}get framebuffer(){return this._framebuffers[this._framebufferIndex]}get texture(){return this.framebuffer.texture}getViewport(){return this}_glFramebufferOptions(t){const{width:e,height:A}=this,{pixelRatio:i}=t;return this._framebuffers.forEach(s=>{const n=s.texture;n.width=e,n.height=A,n.pixelRatio=i,n.upload(t)}),{width:e,height:A,colorTextures:[this.texture._glTexture(t)]}}_glFramebuffer(t){return t.getRelated(this.framebuffer,()=>t.framebuffer.create(this._glFramebufferOptions(t)))}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"x":case"y":this.requestUpload(),this.projection.translate(this.x,this.y),this.emit("updateRect");break;case"width":case"height":this.requestUpload(),this.projection.resize(this.width,this.height),this.emit("updateRect");break}}requestUpload(){this._framebuffers.forEach(t=>t.needsUpload=!0)}resize(t,e){this.width=t,this.height=e}upload(t){const e=this.framebuffer;return e.needsUpload&&this.valid?(e.needsUpload=!1,t.framebuffer.update(this._glFramebuffer(t),this._glFramebufferOptions(t)),!0):!1}activate(t){return this.valid?(t.flush(),this._tree?.setCurrentViewport(this),this.upload(t),t.framebuffer.bind(this._glFramebuffer(t)),!0):!1}redraw(t,e){if(this.valid){t.flush();const A=this.framebuffer.texture;return this._framebufferIndex=(this._framebufferIndex+1)%this._framebuffers.length,this.activate(t),t.clear(),A.activate(t,0),e(),!0}return!1}activateWithCopy(t,e){this.resize(e.width,e.height),this.activate(t)&&(t.clear(),e.texture.activate(t,0),ut.draw(t,Bi.instance,{sampler:0}))}render(t,e){const A=this._tree?.getCurrentViewport();t.program.uniforms.projectionMatrix=this.projection.toArray(!0),t.program.uniforms.worldTransformMatrix=this.canvasTransform.toArray(!0),this.activate(t),t.clear(),super.render(t,e),t.flush(),A?A.activate(t):(t.framebuffer.bind(null),this._tree?.setCurrentViewport(void 0))}getRect(){return new _s(this.x,this.y,this.width,this.height)}},yi([v({fallback:0})],g.Viewport.prototype,"x",2),yi([v({fallback:0})],g.Viewport.prototype,"y",2),yi([v({fallback:0})],g.Viewport.prototype,"width",2),yi([v({fallback:0})],g.Viewport.prototype,"height",2),g.Viewport=yi([st("Viewport")],g.Viewport);var Su=Object.defineProperty,Mu=Object.getOwnPropertyDescriptor,mi=(r,t,e,A)=>{for(var i=A>1?void 0:A?Mu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Su(t,e,i),i};g.Effect=class extends g.TimelineNode{material;get _effectMode(){return this.effectMode??"parent"}viewport1=new g.Viewport;viewport2=new g.Viewport;_renderId=0;_renderViewport;_previousSibling;_nextSibling;constructor(t,e=[]){super(),this._onProcessing=this._onProcessing.bind(this),this._onNodeProcessed=this._onNodeProcessed.bind(this),this.setProperties(t).append(e)}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"glsl":{const s=new Ei(e);!this.effectMode&&s.has.transition&&(this.effectMode="transition"),this.material=s;break}case"glslSrc":{e?Le.text.load(e).then(s=>this.glsl=s):this.glsl="";break}}}_treeEnter(t){t.on("processing",this._onProcessing),t.on("nodeProcessed",this._onNodeProcessed),this.viewport1.setTree(t),this.viewport2.setTree(t)}_treeExit(t){t.off("processing",this._onProcessing),t.off("nodeProcessed",this._onNodeProcessed),this.viewport1.setTree(void 0),this.viewport2.setTree(void 0)}_onProcessing(){if(this.canProcess())switch(this._updateCurrentTime(),this._effectMode){case"transition":this._previousSibling=this.previousSibling,this._nextSibling=this.nextSibling;break;default:this._previousSibling=void 0,this._nextSibling=void 0;break}}_onNodeProcessed(t){if(!this.canProcess()||!this.isInsideTimeRange())return;const e=this._tree?.renderStack;if(e)switch(this._effectMode){case"transition":t.equal(this._previousSibling)?(this._previousSibling=void 0,e.push(this)):t.equal(this._nextSibling)&&(this._nextSibling=void 0,e.push(this));break}}_processParent(){const t=this._tree?.renderStack;if(!t)return;const e=t.currentCall?.parentCall;if(!e)return;const A=e.calls;let i,s;A.forEach((n,o)=>{(n.renderable.equal(this._parent)||n.renderable.parent?.equal(this._parent))&&(i=i??o,s=o)}),!(i===void 0||s===void 0)&&(A.splice(s+1,0,t.createCall(this)),A.splice(i,0,t.createCall(this)))}_processChildren(){this._children.length&&(super.emit("process"),this._tree?.renderStack.push(this))}_onProcess(t=0){if(this.canProcess())switch(this._renderId=0,this._effectMode){case"before":super._onProcess(t);break;case"parent":this._processParent();break;case"children":this._processChildren();break}}_renderBefore(t){const e=this._tree?.getCurrentViewport();e&&this.apply(t,e,{redraw:!0})}_renderTransition(t){if(this._renderId%2===0)this._renderViewport=this._tree?.getCurrentViewport(),this._renderViewport&&(this.viewport1.activateWithCopy(t,this._renderViewport),this.viewport2.resize(this._renderViewport.width,this._renderViewport.height)),this.viewport2.activate(t),t.clear();else{const e=this._renderViewport;this._renderViewport=void 0,e&&(e.activate(t),t.clear(),this.viewport1.texture.activate(t,0),this.viewport2.texture.activate(t,1),this.apply(t,e,{from:this.viewport1,to:this.viewport2}),t.texture.unbind(0),t.texture.unbind(1))}}_renderParentOrChildren(t){if(this._renderId%2===0)this._renderViewport=this._tree?.getCurrentViewport(),this._renderViewport&&this.viewport1.resize(this._renderViewport.width,this._renderViewport.height),this.viewport1.activate(t),t.clear();else{const e=this._renderViewport;this._renderViewport=void 0,e&&(this.viewport1.activate(t),this.apply(t,this.viewport1,{redraw:!0,target:this._effectMode==="parent"?this._parent??void 0:void 0,targetArea:this._parseTargetArea()}),e.activate(t),this.viewport1.texture.activate(t,0),ut.draw(t))}}_parseTargetArea(){if(this._effectMode==="parent"&&this._parent&&"getRect"in this._parent){const t=this._parent.getRect();if(t)return[t.left/this.viewport1.width,t.top/this.viewport1.height,t.width/this.viewport1.width,t.height/this.viewport1.height]}}_render(t){switch(this._effectMode){case"before":this._renderBefore(t);break;case"transition":this._renderTransition(t);break;case"parent":case"children":default:this._renderParentOrChildren(t);break}this._renderId++}apply(t,e,A){this.material&&(A?.redraw?e.redraw(t,()=>{ut.draw(t,this.material,{from:0,to:1,progress:this.currentTimeProgress,ratio:e.width/e.height})}):ut.draw(t,this.material,{from:0,to:1,progress:this.currentTimeProgress,ratio:A?.from?A.from.width/A.from.height:0}))}},mi([v({protected:!0})],g.Effect.prototype,"material",2),mi([v()],g.Effect.prototype,"effectMode",2),mi([v()],g.Effect.prototype,"glsl",2),mi([v()],g.Effect.prototype,"glslSrc",2),g.Effect=mi([st("Effect")],g.Effect);class Ru{currentCall;calls=[];createCall(t){return{renderable:t,parentCall:this.currentCall,fn:t.render.bind(t),calls:[]}}push(t){const e=this.createCall(t);return(this.currentCall?.calls??this.calls).push(e),e}render(t){this.calls.forEach(function e(A){A.fn(t,()=>{A.calls.forEach(e)})}),this.calls=[]}}var ku=Object.defineProperty,Pu=Object.getOwnPropertyDescriptor,wi=(r,t,e,A)=>{for(var i=A>1?void 0:A?Pu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&ku(t,e,i),i};g.Timeline=class extends g.Node{static from(t,e=!1){const[A,i]=t?Array.isArray(t)?t:[0,t]:[];return new g.Timeline({startTime:A,endTime:i,loop:e})}constructor(t){super(),this.setProperties(t)}_updateProperty(t,e,A){switch(super._updateProperty(t,e,A),t){case"startTime":this.startTime=Math.min(e,this.endTime);break;case"endTime":this.endTime=e||Number.MAX_SAFE_INTEGER;break}}addTime(t){const e=this.startTime,A=this.endTime;let i=this.currentTime;return i=i+t,this.loop&&i>A&&(i=e+i%A),i=ce(i,e,A),this.currentTime=i,this.emit("updateCurrentTime",i,t),this}_process(t){super._process(t),this.addTime(t)}},wi([v({fallback:0})],g.Timeline.prototype,"startTime",2),wi([v({fallback:0})],g.Timeline.prototype,"currentTime",2),wi([v({fallback:Number.MAX_SAFE_INTEGER})],g.Timeline.prototype,"endTime",2),wi([v({fallback:!1})],g.Timeline.prototype,"loop",2),g.Timeline=wi([st("Timeline")],g.Timeline);var Uu=Object.getOwnPropertyDescriptor,Nu=(r,t,e,A)=>{for(var i=A>1?void 0:A?Uu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(i)||i);return i};g.Window=class extends g.Viewport{},g.Window=Nu([st("Window")],g.Window);var Fu=Object.defineProperty,Ks=(r,t,e,A)=>{for(var i=void 0,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(t,e,i)||i);return i&&Fu(t,e,i),i};class vi extends or{input=new Fo;renderStack=new Ru;root=new g.Window(!0).setTree(this);timeline;_backgroundColor=new xe;_currentViewport;getCurrentViewport(){return this._currentViewport}setCurrentViewport(t){this._currentViewport=t}constructor(t=new g.Timeline){super(),this.timeline=t.setTree(this)}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"backgroundColor":this._backgroundColor.value=e;break}}log(...t){this.debug&&console.log(`[modern-canvas][${performance.now().toFixed(4)}ms]`,...t)}_process(t=0){this.timeline.emit("process",t),this.emit("processing"),this.root.emit("process",t),this.emit("processed")}_render(t){this.emit("rendering"),this.renderStack.render(t),this._renderScreen(t),this.emit("rendered")}_renderScreen(t){t.state.reset(),t.framebuffer.bind(null),t.viewport.bind({x:0,y:0,width:this.root.width*t.pixelRatio,height:this.root.height*t.pixelRatio}),this.backgroundColor&&t.gl.clearColor(...this._backgroundColor.toArray()),t.clear(),this.backgroundColor&&t.gl.clearColor(0,0,0,0);const e=this.root.texture;e.activate(t,0),ut.draw(t),t.texture.unbind(e)}free(){super.free(),this.root.children.internal.forEach(t=>this.root.removeChild(t)),this.input.removeEventListeners()}}Ks([v({protected:!0,fallback:!1})],vi.prototype,"processPaused"),Ks([v()],vi.prototype,"backgroundColor"),Ks([v({protected:!0,fallback:!1})],vi.prototype,"debug");var Tu=Object.getOwnPropertyDescriptor,Lu=(r,t,e,A)=>{for(var i=A>1?void 0:A?Tu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(i)||i);return i};g.Transition=class extends g.Effect{constructor(t,e=[]){super(),this.setProperties(t).append(e)}},g.Transition=Lu([st("Transition",{effectMode:"transition",processMode:"pausable",duration:2e3})],g.Transition);var Gu=Object.defineProperty,Ou=Object.getOwnPropertyDescriptor,Ys=(r,t,e,A)=>{for(var i=A>1?void 0:A?Ou(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Gu(t,e,i),i};g.Node2D=class extends g.CanvasItem{position=new Vt().on("update",()=>this.updateGlobalTransform());scale=new Vt(1,1).on("update",()=>this.updateGlobalTransform());skew=new Vt().on("update",()=>this.updateGlobalTransform());transform=new Lt;globalPosition=new Vt;globalScale=new Vt;globalSkew=new Vt;globalTransform=new Lt;_parentTransformDirtyId;constructor(t,e=[]){super(),this.setProperties(t).append(e)}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"rotation":this.requestRelayout();break}}getTransformOrigin(){return new Vt(0,0)}getTransform(t){const e=this.getTransformOrigin(),A=new Lt;return A.translate(-e.x,-e.y).scale(this.scale.x,this.scale.y).skew(this.skew.x,this.skew.y).rotate(this.rotation),t?.(A),A.translate(this.position.x,this.position.y).translate(e.x,e.y),A}updateTransform(){this.transform.copy(this.getTransform())}updateGlobalTransform(){this.updateTransform();const t=this.getParent();t?.globalTransform?(this._parentTransformDirtyId=t.globalTransform.dirtyId,this.globalScale.set(t.globalScale.x*this.scale.x,t.globalScale.y*this.scale.y),this.globalRotation=t.globalRotation+this.rotation,t.globalTransform.multiply(this.transform,this.globalTransform)):(this.globalScale.copy(this.scale),this.globalRotation=this.rotation,this.globalTransform.copy(this.transform));const[e,A,i,s,n,o]=this.globalTransform.toArray();this.globalPosition.set(i,o),this.globalSkew.x=Math.atan2(A,e)-this.globalRotation,this.globalSkew.y=Math.atan2(s,n)-this.globalRotation,this.requestRelayout()}_transformVertices(t,e){let A,i,s,n,o,a;if(e){const c=this.globalTransform.clone();c.multiply(typeof e=="function"?e?.():e),[A,i,s,n,o,a]=c.toArray()}else[A,i,s,n,o,a]=this.globalTransform.toArray();const l=t.slice();for(let c=t.length,h=0;h<c;h+=2){const u=t[h],d=t[h+1];l[h]=A*u+i*d+s,l[h+1]=n*u+o*d+a}return l}_relayout(t){return t=super._relayout(t),this.updateGlobalTransform(),t.map(e=>({...e,vertices:this._transformVertices(e.vertices,e.vertTransform)}))}_process(t){super._process(t);const e=this.getParent();e?.globalTransform&&this._parentTransformDirtyId!==e?.globalTransform?.dirtyId&&this.requestRelayout()}},Ys([v({protected:!0,fallback:0})],g.Node2D.prototype,"rotation",2),Ys([v({protected:!0,fallback:0})],g.Node2D.prototype,"globalRotation",2),g.Node2D=Ys([st("Node2D")],g.Node2D);var Hu=Object.getOwnPropertyDescriptor,Ju=(r,t,e,A)=>{for(var i=A>1?void 0:A?Hu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(i)||i);return i};g.Camera2D=class extends g.Node2D{zoom=new Vt(1,1).on("update",()=>this.updateCanvasTransform());maxZoom=new Vt(6,6);minZoom=new Vt(.1,.1);constructor(t,e=[]){super(),this.setProperties(t).append(e)}addZoom(t,e=t){return this.zoom.set(ce(this.zoom.x+t,this.minZoom.x,this.maxZoom.x),ce(this.zoom.y+e,this.minZoom.y,this.maxZoom.y)),this}setZoom(t,e=t){return this.zoom.set(ce(t,this.minZoom.x,this.maxZoom.x),ce(e,this.minZoom.y,this.maxZoom.y)),this}_input(t,e){if(super._input(t,e),e==="wheel"){const A=t;if(A.ctrlKey){if(!(A.wheelDeltaY?Math.abs(Math.abs(A.wheelDeltaY)-Math.abs(3*A.deltaY))<3:A.deltaMode===0)){A.preventDefault();const s=this.zoom.x;this.addZoom(A.deltaY*-.015);const n=1-this.zoom.x/s;this.position.add((A.screenX-this.position.x)*n,(A.screenY-this.position.y)*n)}}else A.preventDefault(),this.position.add(-A.deltaX,-A.deltaY)}}updateTransform(){super.updateTransform(),this.updateCanvasTransform()}updateCanvasTransform(){const t=this.getViewport();t&&(t.canvasTransform.identity().scale(this.zoom.x,this.zoom.y).translate(this.position.x,this.position.y),this.emit("updateCanvasTransform"))}},g.Camera2D=Ju([st("Camera2D",{processMode:"disabled",renderMode:"disabled"})],g.Camera2D);const Ga={brightness:1,contrast:1,grayscale:0,"hue-rotate":0,invert:0,opacity:1,saturate:1,sepia:0};function Ku(r){const t=new ws;if(r==="none")return t;const e=hi(r).reduce((A,{name:i,args:s})=>(A[i]=s[0].normalizedIntValue,A),{});Object.keys(Ga).forEach(A=>{e[A]=e[A]??Ga[A]});for(const A in e){const i=e[A];switch(A){case"hue-rotate":t.hueRotate(i*le);break;case"saturate":t.saturate(i);break;case"brightness":t.brightness(i);break;case"contrast":t.contrast(i);break;case"invert":t.invert(i);break;case"sepia":t.sepia(i);break;case"opacity":t.opacity(i);break;case"grayscale":t.grayscale(i);break}}return t}function Oa(r,t,e,A=new Lt){return r=!r||r==="none"?"":r,hi(r,{width:t,height:e}).reverse().forEach(({name:i,args:s})=>{const n=s.map(o=>o.normalizedIntValue);switch(i){case"translate":A.translate(n[0]*t,(n[1]??n[0])*e);break;case"translateX":A.translateX(n[0]*t);break;case"translateY":A.translateY(n[0]*e);break;case"translateZ":A.translateZ(n[0]);break;case"translate3d":A.translate3d(n[0]*t,(n[1]??n[0])*e,n[2]??n[1]??n[0]);break;case"scale":A.scale(n[0],n[1]??n[0]);break;case"scaleX":A.scaleX(n[0]);break;case"scaleY":A.scaleY(n[0]);break;case"scale3d":A.scale3d(n[0],n[1]??n[0],n[2]??n[1]??n[0]);break;case"rotate":A.rotate(n[0]*le);break;case"rotateX":A.rotateX(n[0]*le);break;case"rotateY":A.rotateY(n[0]*le);break;case"rotateZ":A.rotateZ(n[0]*le);break;case"rotate3d":A.rotate3d(n[0]*le,(n[1]??n[0])*le,(n[2]??n[1]??n[0])*le,(n[3]??n[2]??n[1]??n[0])*le);break;case"skew":A.skew(n[0],n[0]??n[1]);break;case"skewX":A.skewX(n[0]);break;case"skewY":A.skewY(n[0]);break;case"matrix":A.set(n);break}}),A}function Ha(r){const[t,e=t]=r.split(" ");return[t,e].map(A=>{switch(A=A.trim(),A){case"left":case"top":return 0;case"center":return .5;case"right":case"bottom":return 1;default:return Number(A)}})}var Ja=Object.defineProperty,Yu=Object.getOwnPropertyDescriptor,Vu=(r,t,e)=>t in r?Ja(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,Xe=(r,t,e,A)=>{for(var i=A>1?void 0:A?Yu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Ja(t,e,i),i},Wu=(r,t,e)=>Vu(r,t+"",e);g.ColorAdjustEffect=class extends g.Effect{constructor(t,e=[]){super(),this.setProperties(t).append(e)}apply(t,e){e.redraw(t,()=>{ut.draw(t,g.ColorAdjustEffect.material,{sampler:0,saturation:this.saturation,contrast:this.contrast,brightness:this.brightness,red:this.red,green:this.green,blue:this.blue,alpha:this.alpha,gamma:Math.max(this.gamma??1,1e-4)})})}},Wu(g.ColorAdjustEffect,"material",new Qt({vert:`precision mediump float;
111
+ }`,uniforms:{sampler:0,projectionMatrix:new Float32Array([1,0,0,0,1,0,0,0,1]),modelViewMatrix:new Float32Array([1,0,0,0,1,0,0,0,1]),tint:new Float32Array([1,1,1,1])}})}}class ut extends dr{static _instance;static get instance(){return this._instance??=new this}static draw(t,e=Bi.instance,A){this.instance.draw(t,e,A)}constructor(){super({vertexAttributes:{position:new he({buffer:new ze({data:new Float32Array([-1,-1,1,-1,1,1,-1,1]),dynamic:!1}),size:2,normalized:!1,type:"float"}),uv:new he({buffer:new ze({data:new Float32Array([0,0,1,0,1,1,0,1]),dynamic:!1}),size:2,normalized:!1,type:"float"})},indexBuffer:new GA({data:new Uint16Array([0,1,2,0,2,3]),dynamic:!1})})}}class uu extends dr{positionBuffer;uvBuffer;constructor(){const t=new ze({data:new Float32Array,dynamic:!0}),e=new ze({data:new Float32Array,dynamic:!0});super({vertexAttributes:{position:new he({buffer:t,size:2,normalized:!1,type:"float"}),uv:new he({buffer:e,size:2,normalized:!1,type:"float"})},indexBuffer:new GA({data:new Uint16Array,dynamic:!0})}),this.positionBuffer=t,this.uvBuffer=e}}var fu=Object.defineProperty,OA=(r,t,e,A)=>{for(var i=void 0,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(t,e,i)||i);return i&&fu(t,e,i),i};class mt extends Ye{static get EMPTY(){return new this({width:1,height:1,pixels:null})}static get WHITE(){return new this({width:1,height:1,pixels:new Uint8Array([255,255,255,255])})}static get BLACK(){return new this({width:1,height:1,pixels:new Uint8Array([0,0,0,255])})}static get RED(){return new this({width:1,height:1,pixels:new Uint8Array([255,0,0,255])})}static get GREEN(){return new this({width:1,height:1,pixels:new Uint8Array([0,255,0,255])})}static get BLUE(){return new this({width:1,height:1,pixels:new Uint8Array([0,0,255,255])})}_isPowerOfTwo=!1;_needsUpload=!1;get valid(){return!!(this.width&&this.height)}get realWidth(){return Math.round(this.width*this.pixelRatio)}get realHeight(){return Math.round(this.height*this.pixelRatio)}constructor(t){super(),this.source=t,this._updateSize()}_glTextureOptions(t,e){let A=this.wrapMode;return t.version===1&&!this._isPowerOfTwo&&(A="clamp_to_edge"),{value:this.source,target:"texture_2d",location:0,filterMode:this.filterMode,wrapMode:A,...e}}_glTexture(t,e){return t.getRelated(this,()=>t.texture.create(this._glTextureOptions(t,e)))}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"width":case"height":this._updatePOT();break;case"source":this._updateSize();break;case"filterMode":case"wrapMode":case"pixelRatio":this.requestUpload();break}}_updatePOT(){this._isPowerOfTwo=fs(this.realWidth)&&fs(this.realHeight),this.requestUpload()}_updateSize(){const t=this.source;"pixels"in t?(this.width=t.width/this.pixelRatio,this.height=t.height/this.pixelRatio):(this.width=Number(t.naturalWidth||t.videoWidth||t.width||0)/this.pixelRatio,this.height=Number(t.naturalHeight||t.videoHeight||t.height||0)/this.pixelRatio),this.requestUpload()}requestUpload(){this._needsUpload=!0}upload(t,e){return this._needsUpload&&this.valid?(this._needsUpload=!1,t.texture.update(this._glTexture(t,e),this._glTextureOptions(t,e)),!0):!1}activate(t,e=0){return this.valid?(t.texture.bind({target:"texture_2d",value:this._glTexture(t,{location:e}),location:e}),this.upload(t,{location:e}),!0):!1}inactivate(t){t.texture.unbind(this._glTexture(t))}free(){mo&&this.source instanceof ImageBitmap&&this.source.close()}}OA([v({protected:!0})],mt.prototype,"source"),OA([v({fallback:0})],mt.prototype,"width"),OA([v({fallback:0})],mt.prototype,"height"),OA([v({fallback:"linear"})],mt.prototype,"filterMode"),OA([v({fallback:"clamp_to_edge"})],mt.prototype,"wrapMode"),OA([v({fallback:1})],mt.prototype,"pixelRatio");class Ir extends Ye{frames;constructor(t){super();let e;if(Array.isArray(t))e=t;else if(t instanceof mt)e=[{texture:t,duration:0}];else throw new TypeError("Failed new AnimatedTexture");this.frames=e,this.updateDuration()}updateDuration(){return this.duration=this.frames.reduce((t,e)=>e.duration+t,0),this}free(){this.frames.forEach(t=>{t.texture.free()})}}var du=Object.defineProperty,Iu=(r,t,e,A)=>{for(var i=void 0,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(t,e,i)||i);return i&&du(t,e,i),i};class pr extends mt{constructor(t=document.createElement("canvas")){super(t)}_updateProperty(t,e,A,i){switch(t){case"width":this.source.width=Math.max(1,Math.ceil(e*this.pixelRatio));break;case"height":this.source.height=Math.max(1,Math.ceil(e*this.pixelRatio));break}super._updateProperty(t,e,A,i)}}Iu([v({fallback:2})],pr.prototype,"pixelRatio");class Pa extends mt{static _cached=new Map;static get(t){const e=new xe(t),A=e.toHex();let i=this._cached.get(A);return i||(i=new mt({width:1,height:1,pixels:new Uint8Array([e.r8,e.g8,e.b8,e.a8])}),this._cached.set(A,i)),i}constructor(t){const e=new xe(t);super({width:1,height:1,pixels:new Uint8Array([e.r8,e.g8,e.b8,e.a8])})}}class Er extends mt{static test(t){return li(t)}static linearGradient(t,e,A){e=e||1,A=A||1;const i=document.createElement("canvas");i.width=e,i.height=A;const s=i.getContext("2d");if(!s)throw new Error("Failed to parse linear gradient, get canvas context is null.");let{angle:n=0,stops:o}=t;n-=Math.PI/2;const a=e/2,l=A/2,c=Math.sqrt(e*e+A*A)/2,h=a+c*Math.cos(n+Math.PI),u=l+c*Math.sin(n+Math.PI),d=a+c*Math.cos(n),f=l+c*Math.sin(n),B=s.createLinearGradient(h,u,d,f);o.forEach(x=>{B.addColorStop(x.offset,x.color)}),s.fillStyle=B,s.fillRect(0,0,i.width,i.height);const I=s.getImageData(0,0,i.width,i.height);return{width:I.width,height:I.height,pixels:new Uint8Array(I.data.buffer)}}constructor(t,e,A){super(Er.linearGradient(t,e,A))}}function pu(r){return{autoLoad:!!(r?.autoLoad??!0),useBitmap:!!(r?.useBitmap??!0)&&Is,crossorigin:r?.crossorigin??null}}class Eu extends mt{bitmap;useBitmap;preserveBitmap=!1;_loadSource;_loadBitmap;constructor(t,e){const A=pu(e);super(t);const i=t.src,s=i.includes(".svg")||i.startsWith("data:image/svg+xml");this.useBitmap=A.useBitmap&&!s,A.autoLoad&&this.load()}async load(){return this._loadSource||(this._loadSource=new Promise(t=>{this._loadSource=void 0;const e=this.source,A=()=>{e.onload=null,e.onerror=null},i=()=>{A(),this.requestUpload(),this.useBitmap?this.genBitmap().finally(()=>t(this)):t(this)},s=n=>{A(),console.warn(`Failed to load ImageTexture, src: ${e.src}`,n),this.emit("error",n),t(this)};e.complete&&e.src?i():(e.onload=i,e.onerror=s)})),this._loadSource}genBitmap(){if(this._loadBitmap)return this._loadBitmap;if(this.bitmap||!Is)return Promise.resolve(this);const t=this.source,e=!t.crossOrigin||t.crossOrigin==="anonymous";return this._loadBitmap=fetch(t.src,{mode:e?"cors":"no-cors"}).then(A=>A.blob()).then(A=>createImageBitmap(A,0,0,t.width,t.height,{premultiplyAlpha:"premultiply"})).then(A=>(this.bitmap=A,this.requestUpload(),this._loadBitmap=void 0,this)).catch(A=>(console.warn("Failed to genBitmap",A),this)),this._loadBitmap}_glTextureOptions(t){return{...super._glTextureOptions(t),value:this.bitmap??this.source}}upload(t){if(this.useBitmap){if(!this.bitmap)return this.genBitmap(),!1}else{const A=this.source;if(gi&&A instanceof HTMLImageElement&&(!A.complete||A.naturalWidth===0))return!1}const e=super.upload(t);return this.preserveBitmap&&this.bitmap&&(this.bitmap.close(),this.bitmap=void 0),e}}class Os extends mt{constructor(t,e=1,A=1){const i={width:e,height:A,pixels:null};t&&(ArrayBuffer.isView(t)?i.pixels=new Uint8Array(t.buffer):i.pixels=new Uint8Array(t)),super(i)}_updateProperty(t,e,A,i){switch(t){case"width":this.source.width=Math.round(this.width*this.pixelRatio);break;case"height":this.source.height=Math.round(this.height*this.pixelRatio);break;case"pixelRatio":this.source.width=Math.round(this.width*this.pixelRatio),this.source.height=Math.round(this.height*this.pixelRatio);break}super._updateProperty(t,e,A,i)}}var Bu=Object.defineProperty,Ua=(r,t,e,A)=>{for(var i=void 0,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(t,e,i)||i);return i&&Bu(t,e,i),i};function Cu(r){return{autoLoad:!!(r?.autoLoad??!0),autoPlay:!!(r?.autoPlay??!1),fps:Number(r?.fps??0),crossorigin:r?.crossorigin??null,loop:!!(r?.loop??!1),muted:!!(r?.muted??!1),playsinline:!!(r?.playsinline??!0)}}const Hs=class xc extends mt{static mimeTypes=new Map(Object.entries({ogv:"video/ogg",mov:"video/quicktime",m4v:"video/mp4"}));get isReady(){return this.source.readyState>2}get isPlaying(){return!this.source.paused&&!this.source.ended&&this.isReady}get duration(){return this.source.duration}get seeking(){return this.source.seeking}get currentTime(){return this.source.currentTime}set currentTime(t){this.source.currentTime=t}_spf=0;_autoPlay=!1;_sourceLoad;_nextTime=0;_connected=!1;_requestId;_resolve;_reject;constructor(t,e){const A=Cu(e);if(!xo(t)){typeof t=="string"&&(t=[t]);const i=t[0].src||t[0],s=document.createElement("video");A.autoLoad&&s.setAttribute("preload","auto"),A.playsinline&&(s.setAttribute("webkit-playsinline",""),s.setAttribute("playsinline","")),A.muted&&(s.setAttribute("muted",""),s.muted=!0),A.loop&&s.setAttribute("loop",""),A.autoPlay&&s.setAttribute("autoplay",""),Po(s,i,A.crossorigin);for(let n=0;n<t.length;++n){let{src:o,mime:a}=t[n];if(o=o||t[n],o.startsWith("data:"))a=o.slice(5,o.indexOf(";"));else if(!o.startsWith("blob:")){const c=o.split("?").shift().toLowerCase(),h=c.slice(c.lastIndexOf(".")+1);a=a||xc.mimeTypes.get(h)||`video/${h}`}const l=document.createElement("source");l.src=o,a&&(l.type=a),s.appendChild(l)}t=s}super(t),this.fps=A.fps,this._autoPlay=A.autoPlay,A.autoPlay&&this.load(),this._setupAutoUpdate()}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"fps":this._spf=e?Math.floor(1e3/e):0,this._setupAutoUpdate();break;case"autoUpdate":this._setupAutoUpdate();break}}_onPlayStart=()=>{this.valid||this._onCanPlay(),this._setupAutoUpdate()};_onPlayStop=()=>{this._setupAutoUpdate()};_onCanPlay=()=>{const t=this.source;t.removeEventListener("canplay",this._onCanPlay),t.removeEventListener("canplaythrough",this._onCanPlay);const e=this.valid;this._nextTime=0,this._updateSize(),this.requestUpload(),this._nextTime=0,!e&&this._resolve&&(this._resolve(this),this._sourceLoad=void 0,this._resolve=void 0,this._reject=void 0),this.isPlaying?this._onPlayStart():this._autoPlay&&t.play()};_onError=t=>{this.source.removeEventListener("error",this._onError,!0),this.emit("error",t),this._reject&&(this._reject(t),this._reject=void 0,this._resolve=void 0)};_onSeeked=()=>{this.autoUpdate&&!this.isPlaying&&(this._nextTime=0,this.requestUpload(),this._nextTime=0)};_setupAutoUpdate(){this.autoUpdate&&this.isPlaying?!this.fps&&this.source.requestVideoFrameCallback?(this._connected&&(Yt.off(this.requestUpload),this._connected=!1,this._nextTime=0),this._requestId===void 0&&(this._requestId=this.source.requestVideoFrameCallback(this._videoFrameRequestCallback))):(this._requestId!==void 0&&(this.source.cancelVideoFrameCallback(this._requestId),this._requestId=void 0),this._connected||(Yt.on(this.requestUpload),this._connected=!0,this._nextTime=0)):(this._requestId!==void 0&&(this.source.cancelVideoFrameCallback(this._requestId),this._requestId=void 0),this._connected&&(Yt.off(this.requestUpload),this._connected=!1,this._nextTime=0))}_videoFrameRequestCallback=()=>{this.requestUpload(),this._requestId=this.source.requestVideoFrameCallback(this._videoFrameRequestCallback)};requestUpload=()=>{const t=Math.floor(Yt.elapsed*this.source.playbackRate);this._nextTime-=t,(!this._spf||this._nextTime<=0)&&(super.requestUpload(),this._nextTime=this._spf||0)};async load(){if(!this._sourceLoad){const t=this.source;(t.readyState===t.HAVE_ENOUGH_DATA||t.readyState===t.HAVE_FUTURE_DATA)&&t.width&&t.height&&(t.complete=!0),t.addEventListener("play",this._onPlayStart),t.addEventListener("pause",this._onPlayStop),t.addEventListener("seeked",this._onSeeked),this.isReady?this._onCanPlay():(t.addEventListener("canplay",this._onCanPlay),t.addEventListener("canplaythrough",this._onCanPlay),t.addEventListener("error",this._onError,!0)),this._sourceLoad=new Promise((e,A)=>{this.valid?(this._sourceLoad=void 0,e(this)):(this._resolve=e,this._reject=A,t.load())})}return this._sourceLoad}free(){this._setupAutoUpdate();const t=this.source;t&&(t.removeEventListener("play",this._onPlayStart),t.removeEventListener("pause",this._onPlayStop),t.removeEventListener("seeked",this._onSeeked),t.removeEventListener("canplay",this._onCanPlay),t.removeEventListener("canplaythrough",this._onCanPlay),t.removeEventListener("error",this._onError,!0),t.pause(),t.src="",t.load())}};Ua([v({protected:!0,fallback:!0})],Hs.prototype,"autoUpdate"),Ua([v({protected:!0,fallback:0})],Hs.prototype,"fps");let Na=Hs;class Js extends Os{}class Fa extends Rt{fillStyle;strokeStyle;lineCap;lineJoin;lineWidth;miterLimit;uvTransform;vertTransform;_defaultStyle=mt.EMPTY;_draws=[];_toTexture(t){return t instanceof mt?t:Pa.get(t)}stroke(t){if(!this.curves.length)return;let e=this.strokeStyle;if(!e&&this.style.stroke)switch(typeof this.style.stroke){case"string":e=this.style.stroke;break;case"object":cs(this.style.stroke)&&(e=this.style.stroke.color);break}this._draws.push({...t,type:"stroke",path:new Rt(this),texture:e?this._toTexture(e):this._defaultStyle,uvTransform:this.uvTransform,vertTransform:this.vertTransform,style:{alignment:.5,cap:this.lineCap??"butt",join:this.lineJoin??"miter",width:this.lineWidth??1,miterLimit:this.miterLimit??10}}),super.reset()}fillRect(t,e,A,i){this.rect(t,e,A,i).fill()}strokeRect(t,e,A,i){this.rect(t,e,A,i).stroke()}fill(t){if(!this.curves.length)return;let e=this.fillStyle;if(!e&&this.style.fill)switch(typeof this.style.fill){case"string":e=this.style.fill;break;case"object":cs(this.style.fill)&&(e=this.style.fill.color);break}this._draws.push({...t,type:"fill",path:new Rt(this),texture:e?this._toTexture(e):this._defaultStyle,uvTransform:this.uvTransform,vertTransform:this.vertTransform}),super.reset()}copy(t){return super.copy(t),this.strokeStyle=t.strokeStyle,this.fillStyle=t.fillStyle,this.uvTransform=t.uvTransform,this.vertTransform=t.vertTransform,this.lineCap=t.lineCap,this.lineJoin=t.lineJoin,this.lineWidth=t.lineWidth,this.miterLimit=t.miterLimit,this._draws=t._draws.slice(),this}reset(){return super.reset(),this.strokeStyle=void 0,this.fillStyle=void 0,this.uvTransform=void 0,this.vertTransform=void 0,this.lineCap=void 0,this.lineJoin=void 0,this.lineWidth=void 0,this.miterLimit=void 0,this._draws.length=0,this}buildUvs(t,e,A,i,s){if(i){const n=s&&(typeof s=="function"?s:(l,c)=>s.applyToPoint(l,c)),o=i.width,a=i.height;for(let l=e.length,c=t;c<l;c+=2){const h=e[c],u=e[c+1];let d,f;n?[d,f]=n(h,u):[d,f]=[h/o,u/a],A.push(d,f)}}else for(let n=e.length,o=t;o<n;o+=2)A.push(0,0)}toBatchables(){const t=[];for(let e=this._draws.length,A=0;A<e;A++){const i=this._draws[A],s=[],n=[],o=[];i.type==="fill"?i.path.fillTriangulate({vertices:s,indices:n}):i.path.strokeTriangulate({vertices:s,indices:n,lineStyle:i.style,flipAlignment:!1,closed:!0}),this.buildUvs(0,s,o,i.texture,i.uvTransform),t.push({vertices:new Float32Array(s),indices:new Float32Array(n),uvs:new Float32Array(o),texture:i.texture,type:i.type,disableWrapMode:i.disableWrapMode,vertTransform:i.vertTransform})}return t}}class Ta extends Array{front=[];back=[];get internal(){return[...this.front,...this,...this.back]}constructor(...t){super(),this.set(t)}set(t){return this.front.length=0,this.length=0,this.back.length=0,t.forEach(e=>{switch(e.internalMode){case"front":this.front.push(e);break;case"default":this.push(e);break;case"back":this.back.push(e);break}}),this}getInternal(t){switch(t){case"front":return this.front;case"default":return this;case"back":return this.back;default:throw new Error(`Unknown internal mode: ${t}`)}}toJSON(){return[...this]}}var Qu=Object.defineProperty,yu=Object.getOwnPropertyDescriptor,qe=(r,t,e,A)=>{for(var i=A>1?void 0:A?yu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Qu(t,e,i),i};const La={};function mu(r){let t=La[r]??0;return t++,La[r]=t,t}g.Node=class extends sA{_readyed=!1;constructor(t,e=[]){super(),this._onTreeEnter=this._onTreeEnter.bind(this),this._onTreeExit=this._onTreeExit.bind(this),this._onParented=this._onParented.bind(this),this._onUnparented=this._onUnparented.bind(this),this._onReady=this._onReady.bind(this),this._onProcess=this._onProcess.bind(this),this.setProperties({name:`${this.is}:${mu(this.is)}`,...t}).append(e),this.on("treeEnter",this._onTreeEnter).on("treeExit",this._onTreeExit).on("parented",this._onParented).on("unparented",this._onUnparented).on("ready",this._onReady).on("process",this._onProcess)}setProperties(t){if(t){const{meta:e,...A}=t;if(e)for(const i in e)this.meta[i]=e[i];super.setProperties(A)}return this}getName(){return this.name}setName(t){return this.name=t,this}_tree;get tree(){return this.getTree()}set tree(t){this.setTree(t)}getTree(){return this._tree}getViewport(){return this.parent?.getViewport()??this.getWindow()}getWindow(){return this._tree?.root}isInsideTree(){return!!this._tree}setTree(t){const e=this._tree;if(!t?.equal(e)){e&&this.emit("treeExit",e),this._tree=t,t&&this.emit("treeEnter",t);const A=this._children.internal;for(let i=A.length,s=0;s<i;s++){const n=A[s];!t&&this.emit("childExitingTree",n),n.setTree(t),t&&this.emit("childEnteredTree",n)}t&&(this.emit("treePostEnter",t),this._readyed||(this._readyed=!0,this.emit("ready")))}return this}log(...t){this._tree?.log(...t)}_parent;get parent(){return this._parent}set parent(t){this.setParent(t)}hasParent(){return!!this._parent}getParent(){return this._parent}setParent(t){if(!this._parent?.equal(t)){const e=this._parent;e&&this.emit("unparented",e),this._parent=t,t&&this.emit("parented",t),this.setTree(t?._tree)}return this}_children=new Ta;get children(){return this._children}set children(t){t instanceof Ta?this._children=t:this._children.set(t)}getChild(t=0){return this._children[t]}get siblingIndex(){return this.getIndex()}set siblingIndex(t){this._parent?.moveChild(this,t)}get previousSibling(){return this._parent?.children[this.getIndex()-1]}get nextSibling(){return this._parent?.children[this.getIndex()+1]}get firstSibling(){return this._parent?.children[0]}get lastSibling(){const t=this._parent?.children;return t?t[t.length-1]:void 0}canProcess(){if(!this._tree)return!1;switch(this.processMode){case"inherit":return this._parent?.canProcess()??!0;case"pausable":return!this._tree.processPaused;case"when_paused":return this._tree.processPaused;case"always":return!0;case"disabled":default:return!1}}canRender(){if(!this._tree)return!1;switch(this.renderMode){case"inherit":return this._parent?.canRender()??!0;case"always":return!0;case"disabled":default:return!1}}_updateProperty(t,e,A,i){super._updateProperty(t,e,A,i)}_onTreeEnter(t){this._treeEnter(t),this.emit("treeEntered",t)}_onTreeExit(t){this.emit("treeExiting",t),this._treeExit(t),this.emit("treeExited",t)}_onParented(t){this._parented(t)}_onUnparented(t){this._unparented(t)}_onReady(){this._ready()}_onProcess(t=0){const e=this._tree,A=this.canRender(),i=this.canProcess(),s=[],n=[];this._children.internal.forEach(a=>{switch(a.processSortMode){case"default":n.push(a);break;case"parent_before":s.push(a);break}}),s.forEach(a=>{a.emit("process",t)}),i&&(e?.emit("nodeProcessing",this),this.emit("processing",t),this._process(t));let o;if(A){const a=e.renderStack.push(this);o=e.renderStack.currentCall,e.renderStack.currentCall=a}if(this.mask instanceof g.Node)this.getNode("__$mask")||(this.mask.processMode="disabled",this.appendChild(this.mask,"front"));else{const a=this.getNode("__$mask");a&&this.removeChild(a)}n.forEach(a=>{a.emit("process",t)}),A&&(e.renderStack.currentCall=o),i&&(this.emit("processed",t),e?.emit("nodeProcessed",this))}render(t,e){const A=this.mask;A&&(t.flush(),t.mask.push(this,A)),this._render(t),e?.(),A&&(t.flush(),t.mask.pop(this))}input(t,e){const A=this._children.internal;for(let i=A.length-1;i>=0;i--)A[i].input(t,e);this._input(t,e)}getIndex(){return this._parent?.children.getInternal(this.internalMode).indexOf(this)??0}getNode(t){return this._children.internal.find(e=>e.name===t)}removeNode(t){this.getNode(t)?.remove()}addSibling(t){return this.equal(t)||!this.hasParent()||t.hasParent()?this:(t.internalMode=this.internalMode,this._parent.moveChild(t,this.getIndex()+1),this)}prepend(...t){let e;Array.isArray(t[0])?e=t[0]:e=t,e.forEach(A=>{this.moveChild(A,0)})}append(...t){let e;Array.isArray(t[0])?e=t[0]:e=t,e.forEach(A=>{this.appendChild(A)})}before(...t){let e;Array.isArray(t[0])?e=t[0]:e=t,e.forEach(A=>{this._parent?.moveChild(A,this.getIndex())})}after(...t){let e;Array.isArray(t[0])?e=t[0]:e=t,e.forEach(A=>{this._parent?.moveChild(A,this.getIndex()+1)})}insertBefore(t,e){return!e.hasParent()||!this.equal(e.parent)||this.moveChild(t,e.getIndex()),t}appendChild(t,e=t.internalMode){if(this.equal(t)||t.hasParent())return t;switch(e){case"front":this._children.front.push(t);break;case"default":this._children.push(t);break;case"back":this._children.back.push(t);break}return t.internalMode!==e&&(t.internalMode=e),t.setParent(this),this.emit("appendChild",t),t}moveChild(t,e,A=t.internalMode){if(this.equal(t)||t.hasParent()&&!this.equal(t.parent))return this;const i=this._children.getInternal(t.internalMode),s=i.indexOf(t),n=this._children.getInternal(A);return(t.internalMode!==A||e!==s)&&(s>-1&&i.splice(s,1),t.setParent(this),e>-1&&e<n.length?n.splice(e,0,t):n.push(t),s>-1?this.emit("moveChild",t,e,s):this.emit("appendChild",t)),t.internalMode!==A&&(t.internalMode=A),this}removeChild(t){const e=t.getIndex();return this.equal(t.parent)&&e>-1&&(this._children.getInternal(t.internalMode).splice(e,1),t.setParent(void 0),this.emit("removeChild",t,e)),t}removeChildren(){this._children.forEach(t=>this.removeChild(t))}remove(){this._parent?.removeChild(this)}forEachChild(t){return this._children.forEach(t),this}forEachDescendant(t){return this._children.forEach(e=>{t(e),e.forEachDescendant(t)}),this}forEachAncestor(t){const e=this.parent;return e&&(t(e),e.forEachAncestor(t)),this}_ready(){}_treeEnter(t){}_treeExit(t){}_parented(t){}_unparented(t){}_process(t){}_input(t,e){}_render(t){}clone(){return new this.constructor(this.toJSON(),this._children.internal)}toJSON(){return ae({...super.toJSON(),children:this._children.length?[...this._children.map(t=>t.toJSON())]:void 0,meta:{...this.meta,inCanvasIs:this.is}})}static parse(t){if(Array.isArray(t))return t.map(a=>this.parse(a));const{meta:e={},children:A,...i}=t,{inCanvasIs:s="Node"}=e,n=rr.get(s)??g.Node,o=new n({...i,meta:e});return A?.forEach(a=>o.appendChild(this.parse(a))),o}},qe([v({fallback:uo()})],g.Node.prototype,"id",2),qe([v({fallback:uo()})],g.Node.prototype,"name",2),qe([v({default:()=>({})})],g.Node.prototype,"meta",2),qe([v({protected:!0,fallback:"inherit"})],g.Node.prototype,"processMode",2),qe([v({protected:!0,fallback:"default"})],g.Node.prototype,"processSortMode",2),qe([v({protected:!0,fallback:"inherit"})],g.Node.prototype,"renderMode",2),qe([v({protected:!0,fallback:"default"})],g.Node.prototype,"internalMode",2),qe([v({protected:!0})],g.Node.prototype,"mask",2),g.Node=qe([st("Node")],g.Node);var wu=Object.defineProperty,vu=Object.getOwnPropertyDescriptor,Ci=(r,t,e,A)=>{for(var i=A>1?void 0:A?vu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&wu(t,e,i),i};g.TimelineNode=class extends g.Node{constructor(t,e=[]){super(),this.setProperties(t).append(e)}computedDuration=0;_currentTime=0;_startTime=0;get timeline(){return this._tree?.timeline}get timelineCurrentTime(){return this.timeline?.currentTime??0}get parentStartTime(){return this._parent?.startTime??0}get currentTime(){return ce(this._currentTime,0,this.computedDuration)}get startTime(){return this._startTime}set startTime(t){this.delay=t-this.parentStartTime,this._updateCurrentTime(!0)}get endTime(){return this._startTime+this.computedDuration}get currentTimeProgress(){return this.computedDuration?ce(this._currentTime/this.computedDuration,0,1):0}isInsideTimeRange(){const t=this._currentTime;return this.computedDuration?t>=0&&t<=this.computedDuration:t>=0}_updateCurrentTime(t=!1){if(t||!this.paused){const e=this._parent;this._startTime=this.delay+this.parentStartTime,this.computedDuration=e?.computedDuration?Math.min(this._startTime+this.duration,e.endTime)-this._startTime:this.duration,this._currentTime=this.timelineCurrentTime-this._startTime,this.emit("updateCurrentTime",this._currentTime),this.insideTimeRange=this.isInsideTimeRange()}}_process(t){super._process(t),this._updateCurrentTime()}},Ci([v({fallback:0})],g.TimelineNode.prototype,"delay",2),Ci([v({fallback:0})],g.TimelineNode.prototype,"duration",2),Ci([v({fallback:!1})],g.TimelineNode.prototype,"paused",2),Ci([v({protected:!0,fallback:!1})],g.TimelineNode.prototype,"insideTimeRange",2),g.TimelineNode=Ci([st("TimelineNode")],g.TimelineNode);var _u=Object.defineProperty,bu=Object.getOwnPropertyDescriptor,Qi=(r,t,e,A)=>{for(var i=A>1?void 0:A?bu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&_u(t,e,i),i};g.CanvasItem=class extends g.TimelineNode{_parentGlobalVisible;_globalVisible;get globalVisible(){return this._globalVisible??!0}_parentGlobalOpacity;_globalOpacity;get globalOpacity(){return this._globalOpacity??1}_modulate=new xe(4294967295);context=new Fa;_resetContext=!0;_redrawing=!0;_relayouting=!1;_repainting=!1;_originalBatchables=[];_layoutedBatchables=[];_batchables=[];constructor(t,e=[]){super(),this.setProperties(t).append(e)}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"modulate":this._modulate.value=e,this.requestRepaint();break;case"blendMode":this.requestRepaint();break;case"opacity":this._updateGlobalOpacity();break;case"visible":case"insideTimeRange":this._updateGlobalVisible();break}}show(){this.visible=!0}hide(){this.visible=!1}isVisibleInTree(){return this.globalOpacity>0&&this.globalVisible}canRender(){return super.canRender()&&this.isVisibleInTree()}requestRedraw(){this._redrawing=!0}requestRelayout(){this._relayouting=!0}requestRepaint(){this._repainting=!0}_updateGlobalVisible(){this._parentGlobalVisible=this.getParent()?.globalVisible,this._globalVisible=(this._parentGlobalVisible??!0)&&this.visible&&this.insideTimeRange}_updateGlobalOpacity(){this._parentGlobalOpacity=this.getParent()?.opacity;const t=ce(this.opacity,0,1)*(this._parentGlobalOpacity??1);this._globalOpacity!==t&&(this._globalOpacity=t,this.requestRepaint())}_draw(){this.emit("draw")}_redraw(){return this.log(this.name,"drawing"),this._draw(),this.context.toBatchables()}_relayout(t){return this.log(this.name,"layouting"),t}_repaint(t){return this.log(this.name,"painting"),t.map(e=>({...e,modulate:this._modulate.toArgb(this.globalOpacity,!0),blendMode:this.blendMode}))}_process(t){super._process(t);const e=this.getParent();this._parentGlobalVisible!==e?.globalVisible&&this._updateGlobalVisible(),this._parentGlobalOpacity!==e?.globalOpacity&&this._updateGlobalOpacity()}_updateBatchables(){const t=this._redrawing;let e=this._relayouting,A=this._repainting,i;t&&(this._originalBatchables=this._redraw(),e=!0),e&&(this._layoutedBatchables=this._relayout(this._originalBatchables),A=!0),A&&(i=this._repaint(this._layoutedBatchables)),t&&this._resetContext&&this.context.reset(),i&&(this._batchables=i,this._redrawing=!1,this._relayouting=!1,this._repainting=!1)}_render(t){this._updateBatchables(),this._batchables.forEach(e=>{e.texture?.upload(t),t.batch2D.render({...e,texture:e.texture?._glTexture(t)})}),super._render(t)}},Qi([v()],g.CanvasItem.prototype,"modulate",2),Qi([v()],g.CanvasItem.prototype,"blendMode",2),Qi([v({protected:!0,fallback:!0})],g.CanvasItem.prototype,"visible",2),Qi([v({protected:!0,fallback:1})],g.CanvasItem.prototype,"opacity",2),g.CanvasItem=Qi([st("CanvasItem")],g.CanvasItem);var Du=Object.defineProperty,xu=Object.getOwnPropertyDescriptor,yi=(r,t,e,A)=>{for(var i=A>1?void 0:A?xu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Du(t,e,i),i};g.Viewport=class extends g.Node{constructor(t=!1){super(),this.flipY=t,this.projection.flipY(t)}projection=new Ho;canvasTransform=new Lt;_framebufferIndex=0;_framebuffers=[{texture:new Js,needsUpload:!1},{texture:new Js,needsUpload:!1}];get valid(){return!!(this.width&&this.height)}get framebuffer(){return this._framebuffers[this._framebufferIndex]}get texture(){return this.framebuffer.texture}getViewport(){return this}_glFramebufferOptions(t){const{width:e,height:A}=this,{pixelRatio:i}=t;return this._framebuffers.forEach(s=>{const n=s.texture;n.width=e,n.height=A,n.pixelRatio=i,n.upload(t)}),{width:e,height:A,colorTextures:[this.texture._glTexture(t)]}}_glFramebuffer(t){return t.getRelated(this.framebuffer,()=>t.framebuffer.create(this._glFramebufferOptions(t)))}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"x":case"y":this.requestUpload(),this.projection.translate(this.x,this.y),this.emit("updateRect");break;case"width":case"height":this.requestUpload(),this.projection.resize(this.width,this.height),this.emit("updateRect");break}}requestUpload(){this._framebuffers.forEach(t=>t.needsUpload=!0)}resize(t,e){this.width=t,this.height=e}upload(t){const e=this.framebuffer;return e.needsUpload&&this.valid?(e.needsUpload=!1,t.framebuffer.update(this._glFramebuffer(t),this._glFramebufferOptions(t)),!0):!1}activate(t){return this.valid?(t.flush(),this._tree?.setCurrentViewport(this),this.upload(t),t.framebuffer.bind(this._glFramebuffer(t)),!0):!1}redraw(t,e){if(this.valid){t.flush();const A=this.framebuffer.texture;return this._framebufferIndex=(this._framebufferIndex+1)%this._framebuffers.length,this.activate(t),t.clear(),A.activate(t,0),e(),!0}return!1}activateWithCopy(t,e){this.resize(e.width,e.height),this.activate(t)&&(t.clear(),e.texture.activate(t,0),ut.draw(t,Bi.instance,{sampler:0}))}render(t,e){const A=this._tree?.getCurrentViewport();t.program.uniforms.projectionMatrix=this.projection.toArray(!0),t.program.uniforms.worldTransformMatrix=this.canvasTransform.toArray(!0),this.activate(t),t.clear(),super.render(t,e),t.flush(),A?A.activate(t):(t.framebuffer.bind(null),this._tree?.setCurrentViewport(void 0))}getRect(){return new _s(this.x,this.y,this.width,this.height)}},yi([v({fallback:0})],g.Viewport.prototype,"x",2),yi([v({fallback:0})],g.Viewport.prototype,"y",2),yi([v({fallback:0})],g.Viewport.prototype,"width",2),yi([v({fallback:0})],g.Viewport.prototype,"height",2),g.Viewport=yi([st("Viewport")],g.Viewport);var Su=Object.defineProperty,Mu=Object.getOwnPropertyDescriptor,mi=(r,t,e,A)=>{for(var i=A>1?void 0:A?Mu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Su(t,e,i),i};g.Effect=class extends g.TimelineNode{material;get _effectMode(){return this.effectMode??"parent"}viewport1=new g.Viewport;viewport2=new g.Viewport;_renderId=0;_renderViewport;_previousSibling;_nextSibling;constructor(t,e=[]){super(),this._onProcessing=this._onProcessing.bind(this),this._onNodeProcessed=this._onNodeProcessed.bind(this),this.setProperties(t).append(e)}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"glsl":{const s=new Ei(e);!this.effectMode&&s.has.transition&&(this.effectMode="transition"),this.material=s;break}case"glslSrc":{e?Le.text.load(e).then(s=>this.glsl=s):this.glsl="";break}}}_treeEnter(t){t.on("processing",this._onProcessing),t.on("nodeProcessed",this._onNodeProcessed),this.viewport1.setTree(t),this.viewport2.setTree(t)}_treeExit(t){t.off("processing",this._onProcessing),t.off("nodeProcessed",this._onNodeProcessed),this.viewport1.setTree(void 0),this.viewport2.setTree(void 0)}_onProcessing(){if(this.canProcess())switch(this._updateCurrentTime(),this._effectMode){case"transition":this._previousSibling=this.previousSibling,this._nextSibling=this.nextSibling;break;default:this._previousSibling=void 0,this._nextSibling=void 0;break}}_onNodeProcessed(t){if(!this.canProcess()||!this.isInsideTimeRange())return;const e=this._tree?.renderStack;if(e)switch(this._effectMode){case"transition":t.equal(this._previousSibling)?(this._previousSibling=void 0,e.push(this)):t.equal(this._nextSibling)&&(this._nextSibling=void 0,e.push(this));break}}_processParent(){const t=this._tree?.renderStack;if(!t)return;const e=t.currentCall?.parentCall;if(!e)return;const A=e.calls;let i,s;A.forEach((n,o)=>{(n.renderable.equal(this._parent)||n.renderable.parent?.equal(this._parent))&&(i=i??o,s=o)}),!(i===void 0||s===void 0)&&(A.splice(s+1,0,t.createCall(this)),A.splice(i,0,t.createCall(this)))}_processChildren(){this._children.length&&(super.emit("process"),this._tree?.renderStack.push(this))}_onProcess(t=0){if(this.canProcess())switch(this._renderId=0,this._effectMode){case"before":super._onProcess(t);break;case"parent":this._processParent();break;case"children":this._processChildren();break}}_renderBefore(t){const e=this._tree?.getCurrentViewport();e&&this.apply(t,e,{redraw:!0})}_renderTransition(t){if(this._renderId%2===0)this._renderViewport=this._tree?.getCurrentViewport(),this._renderViewport&&(this.viewport1.activateWithCopy(t,this._renderViewport),this.viewport2.resize(this._renderViewport.width,this._renderViewport.height)),this.viewport2.activate(t),t.clear();else{const e=this._renderViewport;this._renderViewport=void 0,e&&(e.activate(t),t.clear(),this.viewport1.texture.activate(t,0),this.viewport2.texture.activate(t,1),this.apply(t,e,{from:this.viewport1,to:this.viewport2}),t.texture.unbind(0),t.texture.unbind(1))}}_renderParentOrChildren(t){if(this._renderId%2===0)this._renderViewport=this._tree?.getCurrentViewport(),this._renderViewport&&this.viewport1.resize(this._renderViewport.width,this._renderViewport.height),this.viewport1.activate(t),t.clear();else{const e=this._renderViewport;this._renderViewport=void 0,e&&(this.viewport1.activate(t),this.apply(t,this.viewport1,{redraw:!0,target:this._effectMode==="parent"?this._parent??void 0:void 0,targetArea:this._parseTargetArea()}),e.activate(t),this.viewport1.texture.activate(t,0),ut.draw(t))}}_parseTargetArea(){if(this._effectMode==="parent"&&this._parent&&"getRect"in this._parent){const t=this._parent.getRect();if(t)return[t.left/this.viewport1.width,t.top/this.viewport1.height,t.width/this.viewport1.width,t.height/this.viewport1.height]}}_render(t){switch(this._effectMode){case"before":this._renderBefore(t);break;case"transition":this._renderTransition(t);break;case"parent":case"children":default:this._renderParentOrChildren(t);break}this._renderId++}apply(t,e,A){this.material&&(A?.redraw?e.redraw(t,()=>{ut.draw(t,this.material,{from:0,to:1,progress:this.currentTimeProgress,ratio:e.width/e.height})}):ut.draw(t,this.material,{from:0,to:1,progress:this.currentTimeProgress,ratio:A?.from?A.from.width/A.from.height:0}))}},mi([v({protected:!0})],g.Effect.prototype,"material",2),mi([v()],g.Effect.prototype,"effectMode",2),mi([v()],g.Effect.prototype,"glsl",2),mi([v()],g.Effect.prototype,"glslSrc",2),g.Effect=mi([st("Effect")],g.Effect);class Ru{currentCall;calls=[];createCall(t){return{renderable:t,parentCall:this.currentCall,fn:t.render.bind(t),calls:[]}}push(t){const e=this.createCall(t);return(this.currentCall?.calls??this.calls).push(e),e}render(t){this.calls.forEach(function e(A){A.fn(t,()=>{A.calls.forEach(e)})}),this.calls=[]}}var ku=Object.defineProperty,Pu=Object.getOwnPropertyDescriptor,wi=(r,t,e,A)=>{for(var i=A>1?void 0:A?Pu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&ku(t,e,i),i};g.Timeline=class extends g.Node{static from(t,e=!1){const[A,i]=t?Array.isArray(t)?t:[0,t]:[];return new g.Timeline({startTime:A,endTime:i,loop:e})}constructor(t){super(),this.setProperties(t)}_updateProperty(t,e,A){switch(super._updateProperty(t,e,A),t){case"startTime":this.startTime=Math.min(e,this.endTime);break;case"endTime":this.endTime=e||Number.MAX_SAFE_INTEGER;break}}addTime(t){const e=this.startTime,A=this.endTime;let i=this.currentTime;return i=i+t,this.loop&&i>A&&(i=e+i%A),i=ce(i,e,A),this.currentTime=i,this.emit("updateCurrentTime",i,t),this}_process(t){super._process(t),this.addTime(t)}},wi([v({fallback:0})],g.Timeline.prototype,"startTime",2),wi([v({fallback:0})],g.Timeline.prototype,"currentTime",2),wi([v({fallback:Number.MAX_SAFE_INTEGER})],g.Timeline.prototype,"endTime",2),wi([v({fallback:!1})],g.Timeline.prototype,"loop",2),g.Timeline=wi([st("Timeline")],g.Timeline);var Uu=Object.getOwnPropertyDescriptor,Nu=(r,t,e,A)=>{for(var i=A>1?void 0:A?Uu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(i)||i);return i};g.Window=class extends g.Viewport{},g.Window=Nu([st("Window")],g.Window);var Fu=Object.defineProperty,Ks=(r,t,e,A)=>{for(var i=void 0,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(t,e,i)||i);return i&&Fu(t,e,i),i};class vi extends or{input=new Fo;renderStack=new Ru;root=new g.Window(!0).setTree(this);timeline;_backgroundColor=new xe;_currentViewport;getCurrentViewport(){return this._currentViewport}setCurrentViewport(t){this._currentViewport=t}constructor(t=new g.Timeline){super(),this.timeline=t.setTree(this)}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"backgroundColor":this._backgroundColor.value=e;break}}log(...t){this.debug&&console.log(`[modern-canvas][${performance.now().toFixed(4)}ms]`,...t)}_process(t=0){this.timeline.emit("process",t),this.emit("processing"),this.root.emit("process",t),this.emit("processed")}_render(t){this.emit("rendering"),this.renderStack.render(t),this._renderScreen(t),this.emit("rendered")}_renderScreen(t){t.state.reset(),t.framebuffer.bind(null),t.viewport.bind({x:0,y:0,width:this.root.width*t.pixelRatio,height:this.root.height*t.pixelRatio}),this.backgroundColor&&t.gl.clearColor(...this._backgroundColor.toArray()),t.clear(),this.backgroundColor&&t.gl.clearColor(0,0,0,0);const e=this.root.texture;e.activate(t,0),ut.draw(t),t.texture.unbind(e)}free(){super.free(),this.root.children.internal.forEach(t=>this.root.removeChild(t)),this.input.removeEventListeners()}}Ks([v({protected:!0,fallback:!1})],vi.prototype,"processPaused"),Ks([v()],vi.prototype,"backgroundColor"),Ks([v({protected:!0,fallback:!1})],vi.prototype,"debug");var Tu=Object.getOwnPropertyDescriptor,Lu=(r,t,e,A)=>{for(var i=A>1?void 0:A?Tu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(i)||i);return i};g.Transition=class extends g.Effect{constructor(t,e=[]){super(),this.setProperties(t).append(e)}},g.Transition=Lu([st("Transition",{effectMode:"transition",processMode:"pausable",duration:2e3})],g.Transition);var Gu=Object.defineProperty,Ou=Object.getOwnPropertyDescriptor,Ys=(r,t,e,A)=>{for(var i=A>1?void 0:A?Ou(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Gu(t,e,i),i};g.Node2D=class extends g.CanvasItem{position=new Vt().on("update",()=>this.updateGlobalTransform());scale=new Vt(1,1).on("update",()=>this.updateGlobalTransform());skew=new Vt().on("update",()=>this.updateGlobalTransform());transform=new Lt;globalPosition=new Vt;globalScale=new Vt;globalSkew=new Vt;globalTransform=new Lt;_parentTransformDirtyId;constructor(t,e=[]){super(),this.setProperties(t).append(e)}_updateProperty(t,e,A,i){switch(super._updateProperty(t,e,A,i),t){case"rotation":this.requestRelayout();break}}getTransformOrigin(){return new Vt(0,0)}getTransform(t){const e=this.getTransformOrigin(),A=new Lt;return A.translate(-e.x,-e.y).scale(this.scale.x,this.scale.y).skew(this.skew.x,this.skew.y).rotate(this.rotation),t?.(A),A.translate(this.position.x,this.position.y).translate(e.x,e.y),A}updateTransform(){this.transform.copy(this.getTransform())}updateGlobalTransform(){this.updateTransform();const t=this.getParent();t?.globalTransform?(this._parentTransformDirtyId=t.globalTransform.dirtyId,this.globalScale.set(t.globalScale.x*this.scale.x,t.globalScale.y*this.scale.y),this.globalRotation=t.globalRotation+this.rotation,t.globalTransform.multiply(this.transform,this.globalTransform)):(this.globalScale.copy(this.scale),this.globalRotation=this.rotation,this.globalTransform.copy(this.transform));const[e,A,i,s,n,o]=this.globalTransform.toArray();this.globalPosition.set(i,o),this.globalSkew.x=Math.atan2(A,e)-this.globalRotation,this.globalSkew.y=Math.atan2(s,n)-this.globalRotation,this.requestRelayout()}_transformVertices(t,e){let A,i,s,n,o,a;if(e){const c=this.globalTransform.clone();c.multiply(typeof e=="function"?e?.():e),[A,i,s,n,o,a]=c.toArray()}else[A,i,s,n,o,a]=this.globalTransform.toArray();const l=t.slice();for(let c=t.length,h=0;h<c;h+=2){const u=t[h],d=t[h+1];l[h]=A*u+i*d+s,l[h+1]=n*u+o*d+a}return l}_relayout(t){return t=super._relayout(t),this.updateGlobalTransform(),t.map(e=>({...e,vertices:this._transformVertices(e.vertices,e.vertTransform)}))}_process(t){super._process(t);const e=this.getParent();e?.globalTransform&&this._parentTransformDirtyId!==e?.globalTransform?.dirtyId&&this.requestRelayout()}},Ys([v({protected:!0,fallback:0})],g.Node2D.prototype,"rotation",2),Ys([v({protected:!0,fallback:0})],g.Node2D.prototype,"globalRotation",2),g.Node2D=Ys([st("Node2D")],g.Node2D);var Hu=Object.getOwnPropertyDescriptor,Ju=(r,t,e,A)=>{for(var i=A>1?void 0:A?Hu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=n(i)||i);return i};g.Camera2D=class extends g.Node2D{zoom=new Vt(1,1).on("update",()=>this.updateCanvasTransform());maxZoom=new Vt(6,6);minZoom=new Vt(.1,.1);constructor(t,e=[]){super(),this.setProperties(t).append(e)}addZoom(t,e=t){return this.zoom.set(ce(this.zoom.x+t,this.minZoom.x,this.maxZoom.x),ce(this.zoom.y+e,this.minZoom.y,this.maxZoom.y)),this}setZoom(t,e=t){return this.zoom.set(ce(t,this.minZoom.x,this.maxZoom.x),ce(e,this.minZoom.y,this.maxZoom.y)),this}_input(t,e){if(super._input(t,e),e==="wheel"){const A=t;if(A.ctrlKey){if(!(A.wheelDeltaY?Math.abs(Math.abs(A.wheelDeltaY)-Math.abs(3*A.deltaY))<3:A.deltaMode===0)){A.preventDefault();const s=this.zoom.x;this.addZoom(A.deltaY*-.015);const n=1-this.zoom.x/s;this.position.add((A.screenX-this.position.x)*n,(A.screenY-this.position.y)*n)}}else A.preventDefault(),this.position.add(-A.deltaX,-A.deltaY)}}updateTransform(){super.updateTransform(),this.updateCanvasTransform()}updateCanvasTransform(){const t=this.getViewport();t&&(t.canvasTransform.identity().scale(this.zoom.x,this.zoom.y).translate(this.position.x,this.position.y),this.emit("updateCanvasTransform"))}},g.Camera2D=Ju([st("Camera2D",{processMode:"disabled",renderMode:"disabled"})],g.Camera2D);const Ga={brightness:1,contrast:1,grayscale:0,"hue-rotate":0,invert:0,opacity:1,saturate:1,sepia:0};function Ku(r){const t=new ws;if(r==="none")return t;const e=hi(r).reduce((A,{name:i,args:s})=>(A[i]=s[0].normalizedIntValue,A),{});Object.keys(Ga).forEach(A=>{e[A]=e[A]??Ga[A]});for(const A in e){const i=e[A];switch(A){case"hue-rotate":t.hueRotate(i*le);break;case"saturate":t.saturate(i);break;case"brightness":t.brightness(i);break;case"contrast":t.contrast(i);break;case"invert":t.invert(i);break;case"sepia":t.sepia(i);break;case"opacity":t.opacity(i);break;case"grayscale":t.grayscale(i);break}}return t}function Oa(r,t,e,A=new Lt){return r=!r||r==="none"?"":r,hi(r,{width:t,height:e}).reverse().forEach(({name:i,args:s})=>{const n=s.map(o=>o.normalizedIntValue);switch(i){case"translate":A.translate(n[0]*t,(n[1]??n[0])*e);break;case"translateX":A.translateX(n[0]*t);break;case"translateY":A.translateY(n[0]*e);break;case"translateZ":A.translateZ(n[0]);break;case"translate3d":A.translate3d(n[0]*t,(n[1]??n[0])*e,n[2]??n[1]??n[0]);break;case"scale":A.scale(n[0],n[1]??n[0]);break;case"scaleX":A.scaleX(n[0]);break;case"scaleY":A.scaleY(n[0]);break;case"scale3d":A.scale3d(n[0],n[1]??n[0],n[2]??n[1]??n[0]);break;case"rotate":A.rotate(n[0]*le);break;case"rotateX":A.rotateX(n[0]*le);break;case"rotateY":A.rotateY(n[0]*le);break;case"rotateZ":A.rotateZ(n[0]*le);break;case"rotate3d":A.rotate3d(n[0]*le,(n[1]??n[0])*le,(n[2]??n[1]??n[0])*le,(n[3]??n[2]??n[1]??n[0])*le);break;case"skew":A.skew(n[0],n[0]??n[1]);break;case"skewX":A.skewX(n[0]);break;case"skewY":A.skewY(n[0]);break;case"matrix":A.set(n);break}}),A}function Ha(r){const[t,e=t]=r.split(" ");return[t,e].map(A=>{switch(A=A.trim(),A){case"left":case"top":return 0;case"center":return .5;case"right":case"bottom":return 1;default:return Number(A)}})}var Ja=Object.defineProperty,Yu=Object.getOwnPropertyDescriptor,Vu=(r,t,e)=>t in r?Ja(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,Xe=(r,t,e,A)=>{for(var i=A>1?void 0:A?Yu(t,e):t,s=r.length-1,n;s>=0;s--)(n=r[s])&&(i=(A?n(t,e,i):n(i))||i);return A&&i&&Ja(t,e,i),i},Wu=(r,t,e)=>Vu(r,t+"",e);g.ColorAdjustEffect=class extends g.Effect{constructor(t,e=[]){super(),this.setProperties(t).append(e)}apply(t,e){e.redraw(t,()=>{ut.draw(t,g.ColorAdjustEffect.material,{sampler:0,saturation:this.saturation,contrast:this.contrast,brightness:this.brightness,red:this.red,green:this.green,blue:this.blue,alpha:this.alpha,gamma:Math.max(this.gamma??1,1e-4)})})}},Wu(g.ColorAdjustEffect,"material",new Qt({vert:`precision mediump float;
112
112
  attribute vec2 position;
113
113
  attribute vec2 uv;
114
114
  varying vec2 vUv;
package/dist/index.mjs CHANGED
@@ -5555,9 +5555,9 @@ class CanvasContext extends Path2D {
5555
5555
  }
5556
5556
  this.buildUvs(0, vertices, uvs, current.texture, current.uvTransform);
5557
5557
  batchables.push({
5558
- vertices,
5559
- indices,
5560
- uvs,
5558
+ vertices: new Float32Array(vertices),
5559
+ indices: new Float32Array(indices),
5560
+ uvs: new Float32Array(uvs),
5561
5561
  texture: current.texture,
5562
5562
  type: current.type,
5563
5563
  disableWrapMode: current.disableWrapMode,
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "modern-canvas",
3
3
  "type": "module",
4
- "version": "0.7.4",
4
+ "version": "0.7.5",
5
5
  "packageManager": "pnpm@9.15.1",
6
6
  "description": "A JavaScript WebGL rendering engine.",
7
7
  "author": "wxm",