modern-canvas 0.12.2 → 0.12.4
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 +7 -7
- package/dist/index.d.cts +1 -2
- package/dist/index.d.mts +1 -2
- package/dist/index.d.ts +1 -2
- package/dist/index.js +1 -1
- package/dist/index.mjs +7 -7
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -10096,7 +10096,6 @@ class BaseElement2DText extends CoreObject {
|
|
|
10096
10096
|
this.base.setPropertyAccessor(this);
|
|
10097
10097
|
}
|
|
10098
10098
|
base;
|
|
10099
|
-
measureResult;
|
|
10100
10099
|
_texture = new CanvasTexture();
|
|
10101
10100
|
_textureMap = /* @__PURE__ */ new Map();
|
|
10102
10101
|
setProperties(properties) {
|
|
@@ -10114,20 +10113,19 @@ class BaseElement2DText extends CoreObject {
|
|
|
10114
10113
|
case "measureDom":
|
|
10115
10114
|
case "fonts":
|
|
10116
10115
|
this.update();
|
|
10117
|
-
this.parent.requestRedraw();
|
|
10118
10116
|
break;
|
|
10119
10117
|
case "fill":
|
|
10120
10118
|
case "outline":
|
|
10121
10119
|
case "content":
|
|
10122
10120
|
this.update();
|
|
10123
10121
|
this._updateTextureMap();
|
|
10124
|
-
this.parent.requestRedraw();
|
|
10125
10122
|
break;
|
|
10126
10123
|
}
|
|
10127
10124
|
}
|
|
10128
10125
|
update() {
|
|
10129
10126
|
this.base.fonts = this.base.fonts ?? this.parent.tree?.fonts;
|
|
10130
10127
|
this.base.update();
|
|
10128
|
+
this.parent.requestRedraw();
|
|
10131
10129
|
}
|
|
10132
10130
|
_updateTextureMap() {
|
|
10133
10131
|
this._textureMap.clear();
|
|
@@ -10187,10 +10185,6 @@ class BaseElement2DText extends CoreObject {
|
|
|
10187
10185
|
this.update();
|
|
10188
10186
|
return this.base.measure();
|
|
10189
10187
|
}
|
|
10190
|
-
updateMeasure() {
|
|
10191
|
-
this.measureResult = this.measure();
|
|
10192
|
-
return this;
|
|
10193
|
-
}
|
|
10194
10188
|
isValid() {
|
|
10195
10189
|
return Boolean(
|
|
10196
10190
|
this.enabled && !/^\s*$/.test(this.base.toString())
|
|
@@ -10405,6 +10399,12 @@ exports.BaseElement2D = class BaseElement2D extends exports.Node2D {
|
|
|
10405
10399
|
this.style = new BaseElement2DStyle();
|
|
10406
10400
|
this.setProperties(properties).append(nodes);
|
|
10407
10401
|
}
|
|
10402
|
+
_treeEnter(tree) {
|
|
10403
|
+
super._treeEnter(tree);
|
|
10404
|
+
if (this._text.isValid()) {
|
|
10405
|
+
this._text.update();
|
|
10406
|
+
}
|
|
10407
|
+
}
|
|
10408
10408
|
setProperties(properties) {
|
|
10409
10409
|
if (properties) {
|
|
10410
10410
|
const {
|
package/dist/index.d.cts
CHANGED
|
@@ -2104,7 +2104,6 @@ declare class BaseElement2DText extends CoreObject {
|
|
|
2104
2104
|
measureDom: Text['measureDom'];
|
|
2105
2105
|
fonts: Text['fonts'];
|
|
2106
2106
|
readonly base: Text;
|
|
2107
|
-
measureResult?: MeasureResult;
|
|
2108
2107
|
protected _texture: CanvasTexture;
|
|
2109
2108
|
protected _textureMap: Map<string, {
|
|
2110
2109
|
texture: Texture2D | undefined;
|
|
@@ -2119,7 +2118,6 @@ declare class BaseElement2DText extends CoreObject {
|
|
|
2119
2118
|
protected _loadTexture(fill: NormalizedFill, box: any): Promise<Texture2D | undefined>;
|
|
2120
2119
|
setContent(content: TextContent): void;
|
|
2121
2120
|
measure(): MeasureResult;
|
|
2122
|
-
updateMeasure(): this;
|
|
2123
2121
|
isValid(): boolean;
|
|
2124
2122
|
protected _createVertTransform(): Transform2D | undefined;
|
|
2125
2123
|
useTextureDraw(): boolean;
|
|
@@ -2176,6 +2174,7 @@ declare class BaseElement2D extends Node2D implements Rectangulable {
|
|
|
2176
2174
|
get shadow(): BaseElement2DShadow;
|
|
2177
2175
|
set shadow(value: Shadow);
|
|
2178
2176
|
constructor(properties?: Partial<BaseElement2DProperties>, nodes?: Node[]);
|
|
2177
|
+
protected _treeEnter(tree: SceneTree): void;
|
|
2179
2178
|
setProperties(properties?: Record<string, any>): this;
|
|
2180
2179
|
protected _updateStyleProperty(key: string, value: any, oldValue: any): void;
|
|
2181
2180
|
protected _process(delta: number): void;
|
package/dist/index.d.mts
CHANGED
|
@@ -2104,7 +2104,6 @@ declare class BaseElement2DText extends CoreObject {
|
|
|
2104
2104
|
measureDom: Text['measureDom'];
|
|
2105
2105
|
fonts: Text['fonts'];
|
|
2106
2106
|
readonly base: Text;
|
|
2107
|
-
measureResult?: MeasureResult;
|
|
2108
2107
|
protected _texture: CanvasTexture;
|
|
2109
2108
|
protected _textureMap: Map<string, {
|
|
2110
2109
|
texture: Texture2D | undefined;
|
|
@@ -2119,7 +2118,6 @@ declare class BaseElement2DText extends CoreObject {
|
|
|
2119
2118
|
protected _loadTexture(fill: NormalizedFill, box: any): Promise<Texture2D | undefined>;
|
|
2120
2119
|
setContent(content: TextContent): void;
|
|
2121
2120
|
measure(): MeasureResult;
|
|
2122
|
-
updateMeasure(): this;
|
|
2123
2121
|
isValid(): boolean;
|
|
2124
2122
|
protected _createVertTransform(): Transform2D | undefined;
|
|
2125
2123
|
useTextureDraw(): boolean;
|
|
@@ -2176,6 +2174,7 @@ declare class BaseElement2D extends Node2D implements Rectangulable {
|
|
|
2176
2174
|
get shadow(): BaseElement2DShadow;
|
|
2177
2175
|
set shadow(value: Shadow);
|
|
2178
2176
|
constructor(properties?: Partial<BaseElement2DProperties>, nodes?: Node[]);
|
|
2177
|
+
protected _treeEnter(tree: SceneTree): void;
|
|
2179
2178
|
setProperties(properties?: Record<string, any>): this;
|
|
2180
2179
|
protected _updateStyleProperty(key: string, value: any, oldValue: any): void;
|
|
2181
2180
|
protected _process(delta: number): void;
|
package/dist/index.d.ts
CHANGED
|
@@ -2104,7 +2104,6 @@ declare class BaseElement2DText extends CoreObject {
|
|
|
2104
2104
|
measureDom: Text['measureDom'];
|
|
2105
2105
|
fonts: Text['fonts'];
|
|
2106
2106
|
readonly base: Text;
|
|
2107
|
-
measureResult?: MeasureResult;
|
|
2108
2107
|
protected _texture: CanvasTexture;
|
|
2109
2108
|
protected _textureMap: Map<string, {
|
|
2110
2109
|
texture: Texture2D | undefined;
|
|
@@ -2119,7 +2118,6 @@ declare class BaseElement2DText extends CoreObject {
|
|
|
2119
2118
|
protected _loadTexture(fill: NormalizedFill, box: any): Promise<Texture2D | undefined>;
|
|
2120
2119
|
setContent(content: TextContent): void;
|
|
2121
2120
|
measure(): MeasureResult;
|
|
2122
|
-
updateMeasure(): this;
|
|
2123
2121
|
isValid(): boolean;
|
|
2124
2122
|
protected _createVertTransform(): Transform2D | undefined;
|
|
2125
2123
|
useTextureDraw(): boolean;
|
|
@@ -2176,6 +2174,7 @@ declare class BaseElement2D extends Node2D implements Rectangulable {
|
|
|
2176
2174
|
get shadow(): BaseElement2DShadow;
|
|
2177
2175
|
set shadow(value: Shadow);
|
|
2178
2176
|
constructor(properties?: Partial<BaseElement2DProperties>, nodes?: Node[]);
|
|
2177
|
+
protected _treeEnter(tree: SceneTree): void;
|
|
2179
2178
|
setProperties(properties?: Record<string, any>): this;
|
|
2180
2179
|
protected _updateStyleProperty(key: string, value: any, oldValue: any): void;
|
|
2181
2180
|
protected _process(delta: number): void;
|
package/dist/index.js
CHANGED
|
@@ -954,7 +954,7 @@ void main() {
|
|
|
954
954
|
gl_FragColor = color;
|
|
955
955
|
}`})),ai([_()],f.ZoomBlurEffect.prototype,"center",2),ai([_({fallback:20})],f.ZoomBlurEffect.prototype,"innerRadius",2),ai([_({fallback:-1})],f.ZoomBlurEffect.prototype,"radius",2),ai([_({fallback:.1})],f.ZoomBlurEffect.prototype,"strength",2),f.ZoomBlurEffect=ai([X("ZoomBlurEffect")],f.ZoomBlurEffect);function rs(s,e){let t=!1;const{left:r=0,top:i=0,width:n,height:o}=e,a=new ke().translate(-r,-i).scale(1/n,1/o);if(s.cropRect){const{left:l=0,top:c=0,right:h=0,bottom:u=0}=s.cropRect;a.scale(Math.abs(1-(l+h)),Math.abs(1-(c+u))).translate(l,c),t=!0}if(s.tile){const{translateX:l=0,translateY:c=0,scaleX:h=1,scaleY:u=1}=s.tile;a.translate(-l/n,-c/o).scale(1/h,1/u),t=!0}else if(s.stretchRect){const{left:l=0,top:c=0,right:h=0,bottom:u=0}=s.stretchRect;a.scale(Math.abs(1-(-l+-h)),Math.abs(1-(-c+-u))).translate(-l,-c),t=!0}return{disableWrapMode:t,uvTransform:a}}var eg=Object.defineProperty,st=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&eg(e,t,i),i};class Oe extends xt{constructor(e){super(),this.parent=e}_texture;_animatedTexture;_setProperties(e){return super.setProperties(e)}setProperties(e){return this._setProperties(K(e)?void 0:ct(e))}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"color":case"cropRect":case"stretchRect":case"dpi":case"rotateWithShape":case"tile":case"opacity":case"enabled":this.parent.requestRedraw();break;case"image":case"linearGradient":case"radialGradient":this._updateTexture();break}}async loadTexture(){this.linearGradient||this.radialGradient?this._texture=new zr(this.linearGradient??this.radialGradient,this.parent.size.width,this.parent.size.height):K(this.image)||(this.parent.tree?.log(`load image ${this.image}`),this.image.split("?")[0].endsWith(".gif")?this._animatedTexture=await Ke.gif.load(this.image):this._texture=await Ke.texture.load(this.image))}async _updateTexture(){await this.loadTexture(),this.parent.requestRedraw()}isValid(){return!!(this.enabled&&(this._texture||this._animatedTexture||this.color))}draw(){const e=this.parent.context,{uvTransform:t,disableWrapMode:r}=rs(this,{width:this.parent.size.width,height:this.parent.size.height});e.uvTransform=t,e.fillStyle=this._animatedTexture?.currentFrame.texture??this._texture??this.color,e.fill({disableWrapMode:r})}_getFrameCurrentTime(){const e=this._animatedTexture?.duration??0;if(!e)return 0;const t=this.parent._currentTime;return t<0?0:t%e}updateFrameIndex(){if(!this._animatedTexture)return this;const e=this._getFrameCurrentTime(),t=this._animatedTexture.frames,r=t.length;if(r<=1&&this._animatedTexture.frameIndex===0)return this;let i=r-1;for(let n=0,o=0;o<r;o++)if(n+=t[o].duration??0,n>=e){i=o;break}return this._animatedTexture.frameIndex!==i&&(this._animatedTexture.frameIndex=i,this.parent.requestRedraw()),this}}st([_({fallback:!0})],Oe.prototype,"enabled"),st([_()],Oe.prototype,"color"),st([_()],Oe.prototype,"image"),st([_()],Oe.prototype,"linearGradient"),st([_()],Oe.prototype,"radialGradient"),st([_()],Oe.prototype,"cropRect"),st([_()],Oe.prototype,"stretchRect"),st([_()],Oe.prototype,"dpi"),st([_()],Oe.prototype,"rotateWithShape"),st([_()],Oe.prototype,"tile"),st([_()],Oe.prototype,"opacity");var tg=Object.defineProperty,rg=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&tg(e,t,i),i};class Dn extends Oe{setProperties(e){return super._setProperties(K(e)?void 0:Yc(e))}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"fillWithShape":this.parent.requestRedraw();break}}}rg([_()],Dn.prototype,"fillWithShape");var ig=Object.defineProperty,sg=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&ig(e,t,i),i};class In extends Oe{setProperties(e){return super._setProperties(K(e)?void 0:Kc(e))}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"fillWithShape":this.parent.requestRedraw();break}}}sg([_()],In.prototype,"fillWithShape");var ng=Object.defineProperty,li=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&ng(e,t,i),i};class tr extends Oe{setProperties(e){return super._setProperties(K(e)?void 0:bi(e))}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"width":case"style":case"lineCap":case"lineJoin":case"enabled":this.parent.requestRedraw();break}}isValid(){return!!(this.enabled&&(this.width||this.color||super.isValid()))}draw(){const e=this.parent.context,{uvTransform:t,disableWrapMode:r}=rs(this,{width:this.parent.size.width,height:this.parent.size.height});e.lineWidth=this.width||1,e.uvTransform=t,e.strokeStyle=this._texture??this.color,e.lineCap=this.lineCap,e.lineJoin=this.lineJoin,e.stroke({disableWrapMode:r})}}li([_({fallback:"#00000000"})],tr.prototype,"color"),li([_({fallback:0})],tr.prototype,"width"),li([_({fallback:"solid"})],tr.prototype,"style"),li([_({fallback:"butt"})],tr.prototype,"lineCap"),li([_({fallback:"miter"})],tr.prototype,"lineJoin");var og=Object.defineProperty,ci=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&og(e,t,i),i};class rr extends xt{constructor(e){super(),this.parent=e}setProperties(e){return super.setProperties(K(e)?void 0:Zc(e))}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"color":case"blur":case"offsetX":case"offsetY":this.updateEffect();break}}updateEffect(){const e="__$shadow";let t=this.parent.getNode(e);this.blur||this.offsetX||this.offsetY?(t||(t=new f.DropShadowEffect({name:e}),this.parent.appendChild(t,"back")),t.setProperties(this.getProperties())):t&&this.parent.removeChild(t)}}ci([_({fallback:!0})],rr.prototype,"enabled"),ci([_({fallback:"#000000FF"})],rr.prototype,"color"),ci([_({fallback:0})],rr.prototype,"blur"),ci([_({fallback:0})],rr.prototype,"offsetY"),ci([_({fallback:0})],rr.prototype,"offsetX");var ag=Object.defineProperty,hi=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&ag(e,t,i),i};class ir extends xt{constructor(e){super(),this.parent=e,this._updatePath2DSet()}_path2DSet=new Tt;setProperties(e){return super.setProperties(K(e)?void 0:Qc(e))}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"svg":case"paths":case"viewBox":case"enabled":this._updatePath2DSet(),this.parent.requestRedraw();break}}_updatePath2DSet(){let e;if(this.svg){const o=Gs(this.svg);this._path2DSet=Ws(o),e=this._path2DSet.viewBox}else this.paths?.forEach((o,a)=>{const{data:l,...c}=o,h=new ge;h.style=c,h.addData(l),this._path2DSet.paths[a]=h});if(!e){const o=this._path2DSet.getBoundingBox();e=o?[o.x,o.y,o.width||1,o.height||1]:[0,0,1,1]}const[t,r,i,n]=e;this._path2DSet.paths.forEach(o=>{o.applyTransform(new _e().translate(-t,-r).scale(1/i,1/n))})}draw(e=!1){if(!e&&this.enabled&&this._path2DSet.paths.length){const t=this.parent.context,{width:r,height:i}=this.parent.size;this._path2DSet.paths.forEach(n=>{t.addPath(n.clone().applyTransform(new _e().scale(r,i)))})}else this._drawRect()}_drawRect(){const e=this.parent.context,{width:t,height:r}=this.parent.size,{borderRadius:i}=this.parent.style;t&&r&&(i?e.roundRect(0,0,t,r,i):e.rect(0,0,t,r))}}hi([_({fallback:!0})],ir.prototype,"enabled"),hi([_()],ir.prototype,"preset"),hi([_()],ir.prototype,"svg"),hi([_()],ir.prototype,"viewBox"),hi([_()],ir.prototype,"paths");class ui extends Pt{constructor(e){super(),this.setProperties(e)}}const $l=Po();for(const s in $l){const e=$l[s];mi(ui,s,{fallback:e})}function Rn(s,e,t){if(typeof e=="string"&&e.startsWith("linear-gradient")){const{x0:r,y0:i,x1:n,y1:o,stops:a}=lg(e,t.left,t.top,t.width,t.height),l=s.createLinearGradient(r,i,n,o);return a.forEach(c=>l.addColorStop(c.offset,c.color)),l}return e}function is(s,e,t){s?.color&&(s.color=Rn(t,s.color,e)),s?.backgroundColor&&(s.backgroundColor=Rn(t,s.backgroundColor,e)),s?.textStrokeColor&&(s.textStrokeColor=Rn(t,s.textStrokeColor,e))}function lg(s,e,t,r,i){const n=s.match(/linear-gradient\((.+)\)$/)?.[1]??"",o=n.split(",")[0],a=o.includes("deg")?o:"0deg",l=n.replace(a,"").matchAll(/(#|rgba|rgb)(.+?) ([\d.]+%)/gi),h=(Number(a.replace("deg",""))||0)*Math.PI/180,u=r*Math.sin(h),d=i*Math.cos(h);return{x0:e+r/2-u,y0:t+i/2+d,x1:e+r/2+u,y1:t+i/2-d,stops:Array.from(l).map(g=>{let p=g[2];return p.startsWith("(")?p=p.split(",").length>3?`rgba${p}`:`rgb${p}`:p=`#${p}`,{offset:Number(g[3].replace("%",""))/100,color:p}})}}function Pr(s){const{ctx:e,path:t,fontSize:r,clipRect:i}=s;e.save(),e.beginPath();const n=t.style,o={...n,fill:s.color??n.fill,stroke:s.textStrokeColor??n.stroke,strokeWidth:s.textStrokeWidth?s.textStrokeWidth*r:n.strokeWidth,strokeLinecap:"round",strokeLinejoin:"round",shadowOffsetX:(s.shadowOffsetX??0)*r,shadowOffsetY:(s.shadowOffsetY??0)*r,shadowBlur:(s.shadowBlur??0)*r,shadowColor:s.shadowColor};i&&(e.rect(i.left,i.top,i.width,i.height),e.clip(),e.beginPath()),t.drawTo(e,o),e.restore()}function cg(s,e,t){const{left:r,top:i,width:n,height:o}=t,a=s.canvas;a.dataset.viewBox=`${r} ${i} ${n} ${o}`,a.dataset.pixelRatio=String(e);const l=n,c=o;a.width=Math.max(1,Math.ceil(l*e)),a.height=Math.max(1,Math.ceil(c*e)),a.style.width=`${l}px`,a.style.height=`${c}px`,s.clearRect(0,0,a.width,a.height),s.scale(e,e),s.translate(-r,-i)}function hg(s,e){const{paragraphs:t,computedStyle:r,glyphBox:i}=e;is(r,i,s),t.forEach(n=>{is(n.computedStyle,n.lineBox,s),n.fragments.forEach(o=>{is(o.computedStyle,o.inlineBox,s)})})}const ug=new Set(["©","®","÷"]),fg=new Set(["—","…","“","”","﹏","﹋","﹌","‘","’","˜"]),dg={1:"italic",32:"bold"},pg={1:"italic",2:"bold"},zl={100:-.2,200:-.1,300:0,400:0,normal:0,500:.1,600:.2,700:.3,bold:.3,800:.4,900:.5};class Vl{constructor(e,t,r){this.content=e,this.index=t,this.parent=r}path=new ge().setMeta(this);lineBox=new Z;inlineBox=new Z;glyphBox;advanceWidth=0;advanceHeight=0;underlinePosition=0;underlineThickness=0;strikeoutPosition=0;strikeoutSize=0;ascender=0;descender=0;typoAscender=0;typoDescender=0;typoLineGap=0;winAscent=0;winDescent=0;xHeight=0;capHeight=0;baseline=0;centerDiviation=0;fontStyle;get compatibleGlyphBox(){const e=this.computedStyle.fontSize*.8;return this.glyphBox??(this.isVertical?new Z(this.lineBox.left+this.lineBox.width/2-e/2,this.lineBox.top,e,this.lineBox.height):new Z(this.lineBox.left,this.lineBox.top+this.lineBox.height/2-e/2,this.lineBox.width,e))}get center(){return this.compatibleGlyphBox.center}get computedFill(){return this.parent.computedFill}get computedOutline(){return this.parent.computedOutline}get computedStyle(){return this.parent.computedStyle}get isVertical(){return this.computedStyle.writingMode.includes("vertical")}get fontSize(){return this.computedStyle.fontSize}get fontHeight(){return this.fontSize*this.computedStyle.lineHeight}_getFontSFNT(e){const t=this.computedStyle.fontFamily,r=e??Tn;let n=(t?r.get(t):r.fallbackFont)?.getSFNT();return n?.textToGlyphIndexes(this.content).includes(0)&&(n=r.fallbackFont?.getSFNT()),n}updateGlyph(e=this._getFontSFNT()){if(!e)return this;const{hhea:t,os2:r,post:i,head:n}=e,o=n.unitsPerEm,a=t.ascent,l=t.descent,{content:c,computedStyle:h,isVertical:u}=this,{fontSize:d}=h,g=o/d,p=e.getAdvanceWidth(c,d),y=(a+Math.abs(l))/g,m=a/g;return this.advanceWidth=p,this.advanceHeight=y,this.inlineBox.width=u?y:p,this.inlineBox.height=u?p:y,this.underlinePosition=(a-i.underlinePosition)/g,this.underlineThickness=i.underlineThickness/g,this.strikeoutPosition=(a-r.yStrikeoutPosition)/g,this.strikeoutSize=r.yStrikeoutSize/g,this.ascender=a/g,this.descender=l/g,this.typoAscender=r.sTypoAscender/g,this.typoDescender=r.sTypoDescender/g,this.typoLineGap=r.sTypoLineGap/g,this.winAscent=r.usWinAscent/g,this.winDescent=r.usWinDescent/g,this.xHeight=r.sxHeight/g,this.capHeight=r.sCapHeight/g,this.baseline=m,this.centerDiviation=y/2-m,this.fontStyle=dg[r.fsSelection]??pg[n.macStyle],this}update(e){const t=this._getFontSFNT(e);if(!t)return this;this.updateGlyph(t);const{isVertical:r,content:i,computedStyle:n,baseline:o,inlineBox:a,ascender:l,descender:c,typoAscender:h,fontStyle:u,advanceWidth:d,advanceHeight:g}=this,{left:p,top:y}=a,m=n.fontStyle==="italic"&&u!=="italic";let P=p,E=y+o,b;const S=new ge().setMeta(this);if(r&&(P+=(g-d)/2,Math.abs(d-g)>.1&&(E-=(l-h)/(l+Math.abs(c))*g),b=void 0),r&&!ug.has(i)&&(i.codePointAt(0)<=256||fg.has(i))){S.addCommands(t.getPathCommands(i,P,y+o-(g-d)/2,n.fontSize));const x={y:y-(g-d)/2+g/2,x:P+d/2};m&&this._italic(S,r?{x:x.x,y:y-(g-d)/2+o}:void 0),S.rotate(90,x)}else b!==void 0?(S.addCommands(t.glyphs.get(b).getPathCommands(P,E,n.fontSize)),m&&this._italic(S,r?{x:P+d/2,y:y+h/(l+Math.abs(c))*g}:void 0)):(S.addCommands(t.getPathCommands(i,P,E,n.fontSize)),m&&this._italic(S,r?{x:P+g/2,y:E}:void 0));const w=n.fontWeight??400;return w in zl&&(w===700||w==="bold")&&u!=="bold"&&S.bold(zl[w]*n.fontSize*.05),S.style={fill:this.computedFill??n.color,fillRule:"nonzero",stroke:this.computedOutline??(n.textStrokeWidth?n.textStrokeColor:"none"),strokeWidth:n.textStrokeWidth?n.textStrokeWidth*n.fontSize*.03:0},this.path=S,this.glyphBox=this.getGlyphBoundingBox(),this}_italic(e,t){e.skew(-.24,0,t||{y:this.inlineBox.top+this.baseline,x:this.inlineBox.left+this.inlineBox.width/2})}getGlyphMinMax(e,t,r){if(this.path.curves[0]?.curves.length)return this.path.getMinMax(e,t,r)}getGlyphBoundingBox(e){const t=this.getGlyphMinMax(void 0,void 0,e);if(!t)return;const{min:r,max:i}=t;return new Z(r.x,r.y,i.x-r.x,i.y-r.y)}drawTo(e,t={}){const r=this.computedStyle,i={ctx:e,path:this.path,fontSize:r.fontSize,color:r.color,...t};if(this.glyphBox)Pr(i);else{e.save(),e.beginPath();const n=this.path.style,o={...n,fill:i.color??n.fill,stroke:i.textStrokeColor??n.stroke,strokeWidth:i.textStrokeWidth?i.textStrokeWidth*i.fontSize:n.strokeWidth,shadowOffsetX:(i.shadowOffsetX??0)*i.fontSize,shadowOffsetY:(i.shadowOffsetY??0)*i.fontSize,shadowBlur:(i.shadowBlur??0)*i.fontSize,shadowColor:i.shadowColor};zs(e,o),e.font=`${i.fontSize}px ${i.fontFamily}`,this.isVertical?(e.textBaseline="middle",e.fillText(this.content,this.inlineBox.left,this.inlineBox.top+this.inlineBox.height/2)):(e.textBaseline="alphabetic",e.fillText(this.content,this.inlineBox.left,this.inlineBox.top+this.baseline)),e.restore()}}}function Gl(){const s=new Map;async function e(r){if(!s.has(r)){s.set(r,r);try{s.set(r,await fetch(r).then(i=>i.text()))}catch(i){console.warn(i),s.delete(r)}}}function t(r){return r.startsWith("http://")||r.startsWith("https://")||r.startsWith("blob://")}return{loaded:s,needsLoad:t,load:e}}function jl(s){const e=new Map;function t(r){let i=e.get(r);if(!i){const n=Gs(s.needsLoad(r)?s.loaded.get(r)??r:r),o=Ws(n);i={dom:n,pathSet:o},e.set(r,i)}return i}return{parsed:e,parse:t}}function Un(s,e){return typeof s=="number"?s:s.endsWith("%")?(s=s.substring(0,s.length-1),Math.ceil(Number(s)/100*e.total)):s.endsWith("rem")?(s=s.substring(0,s.length-3),Number(s)*e.fontSize):s.endsWith("em")?(s=s.substring(0,s.length-2),Number(s)*e.fontSize):Number(s)}function Bn(s){return K(s)?{}:s}function gg(s,e){const t=Object.keys(s),r=Object.keys(e);return Array.from(new Set([...t,...r])).every(n=>Cr(s[n],e[n]))}function Cr(s,e){const t=typeof s;return t===typeof e?t==="object"?gg(s,e):s===e:!1}function Ln(s){if(!s)return s;const e={};for(const t in s)s[t]!==""&&s[t]!==void 0&&(e[t]=s[t]);return e}class mg{constructor(e,t={},r,i){this.content=e,this.style=t,this.index=r,this.parent=i,this.updateComputedStyle().initCharacters()}inlineBox=new Z;fill;outline;get computedFill(){return this.fill??this.parent.computedFill}get computedOutline(){return this.outline??this.parent.computedOutline}get computedContent(){const e=this.computedStyle;return e.textTransform==="uppercase"?this.content.toUpperCase():e.textTransform==="lowercase"?this.content.toLowerCase():this.content}updateComputedStyle(){return this.computedStyle={...this.parent.computedStyle,...Ln(this.style)},this}initCharacters(){const e=[];let t=0;for(const r of this.computedContent)e.push(new Vl(r,t++,this));return this.characters=e,this}}class yg{constructor(e,t,r){this.style=e,this.index=t,this.parent=r,this.updateComputedStyle()}lineBox=new Z;fragments=[];fill;outline;get computedFill(){return this.fill??this.parent.fill}get computedOutline(){return this.outline??this.parent.outline}updateComputedStyle(){return this.computedStyle={...Ln(this.parent.computedStyle),...Ln(this.style)},this}}function km(s){return s}class ss{static notZeroStyles=new Set(["width","height"]);static pxStyles=new Set(["width","height","fontSize","letterSpacing","textStrokeWidth","textIndent","shadowOffsetX","shadowOffsetY","shadowBlur","margin","marginLeft","marginTop","marginRight","marginBottom","padding","paddingLeft","paddingTop","paddingRight","paddingBottom"]);_toDomStyle(e){const t={};for(const r in e){const i=e[r];ss.notZeroStyles.has(r)&&i===0||(typeof i=="number"&&ss.pxStyles.has(r)?t[r]=`${i}px`:t[r]=i)}return t}createDom(e,t){const r=document.createElement("section"),i={...t},n=t.writingMode.includes("horizontal");switch(t.textAlign){case"start":case"left":i.justifyContent="flex-start";break;case"center":i.justifyContent="center";break;case"end":case"right":i.justifyContent="flex-end";break}switch(t.verticalAlign){case"top":i.alignItems="flex-start";break;case"middle":i.alignItems="center";break;case"bottom":i.alignItems="flex-end";break}const o=!!(i.justifyContent||i.alignItems);Object.assign(r.style,{...this._toDomStyle({...i,boxSizing:i.boxSizing??"border-box",display:i.display??(o?"inline-flex":void 0),width:i.width??"max-content",height:i.height??"max-content"}),whiteSpace:"pre-wrap",wordBreak:"break-all"});const a=document.createElement("ul");return Object.assign(a.style,{verticalAlign:"inherit",listStyleType:"inherit",padding:"0",margin:"0",width:o&&n?"100%":void 0,height:o&&!n?"100%":void 0}),e.forEach(l=>{const c=document.createElement("li");Object.assign(c.style,{verticalAlign:"inherit",...this._toDomStyle(l.style)}),l.fragments.forEach(h=>{const u=document.createElement("span");Object.assign(u.style,{verticalAlign:"inherit",...this._toDomStyle(h.style)}),u.appendChild(document.createTextNode(h.content)),c.appendChild(u)}),a.appendChild(c)}),r.appendChild(a),r}measureDomText(e){const t=document.createRange();t.selectNodeContents(e);const r=e.data??"";let i=0;return Array.from(r).map(n=>{const o=i+=r.substring(i).indexOf(n),a=o+n.length;i+=n.length,t.setStart(e,Math.max(o,0)),t.setEnd(e,a);const l=t.getClientRects?.()??[t.getBoundingClientRect()];let c=l[l.length-1];l.length>1&&c.width<2&&(c=l[l.length-2]);const h=t.toString();if(h!==""&&c&&c.width+c.height!==0)return{content:h,top:c.top,left:c.left,height:c.height,width:c.width}}).filter(Boolean)}measureDom(e){const t=[],r=[],i=[];return e.querySelectorAll("li").forEach((n,o)=>{const a=n.getBoundingClientRect();t.push({paragraphIndex:o,left:a.left,top:a.top,width:a.width,height:a.height}),n.querySelectorAll(":scope > *").forEach((l,c)=>{const h=l.getBoundingClientRect();r.push({paragraphIndex:o,fragmentIndex:c,left:h.left,top:h.top,width:h.width,height:h.height});let u=0;!l.children.length&&l.firstChild instanceof window.Text?this.measureDomText(l.firstChild).forEach(d=>{i.push({...d,newParagraphIndex:-1,paragraphIndex:o,fragmentIndex:c,characterIndex:u++,textWidth:-1,textHeight:-1})}):l.querySelectorAll(":scope > *").forEach(d=>{d.firstChild instanceof window.Text&&this.measureDomText(d.firstChild).forEach(g=>{i.push({...g,newParagraphIndex:-1,paragraphIndex:o,fragmentIndex:c,characterIndex:u++,textWidth:-1,textHeight:-1})})})})}),{paragraphs:t,fragments:r,characters:i}}measureParagraphDom(e,t){const r=t.getBoundingClientRect(),i=this.measureDom(t);i.paragraphs.forEach(a=>{const l=e[a.paragraphIndex];l.lineBox.left=a.left-r.left,l.lineBox.top=a.top-r.top,l.lineBox.width=a.width,l.lineBox.height=a.height}),i.fragments.forEach(a=>{const l=e[a.paragraphIndex].fragments[a.fragmentIndex];l.inlineBox.left=a.left-r.left,l.inlineBox.top=a.top-r.top,l.inlineBox.width=a.width,l.inlineBox.height=a.height});const n=[];let o=0;return i.characters.forEach(a=>{const{paragraphIndex:l,fragmentIndex:c,characterIndex:h}=a;n.push({...a,newParagraphIndex:l,left:a.left-r.left,top:a.top-r.top});const u=e[l].fragments[c].characters[h],{fontHeight:d,isVertical:g}=u,p=n[o];u.inlineBox.left=p.left,u.inlineBox.top=p.top,u.inlineBox.width=p.width,u.inlineBox.height=p.height,g?(u.lineBox.left=p.left+(p.width-d)/2,u.lineBox.top=p.top,u.lineBox.width=d,u.lineBox.height=p.height):(u.lineBox.left=p.left,u.lineBox.top=p.top+(p.height-d)/2,u.lineBox.width=p.width,u.lineBox.height=d),o++}),{paragraphs:e,boundingBox:new Z(0,0,r.width,r.height)}}measure(e,t,r){let i;r||(r=this.createDom(e,t),Object.assign(r.style,{position:"fixed",visibility:"hidden"}),document.body.appendChild(r),i=()=>r?.parentNode?.removeChild(r));const n=this.measureParagraphDom(e,r);return i?.(),n}}function vg(){const s=new Tt,e=Gl(),t=jl(e);return{name:"background",pathSet:s,load:async r=>{const{backgroundImage:i}=r.computedStyle;i&&e.needsLoad(i)&&await e.load(i)},update:r=>{s.paths.length=0;const{computedStyle:i,lineBox:n,isVertical:o}=r,{backgroundImage:a,backgroundSize:l,backgroundColormap:c}=i;if(K(a))return;const{pathSet:h}=t.parse(a),u=h.getBoundingBox(!0);let d,g,p,y;o?{x:g,y:d,width:y,height:p}=n:{x:d,y:g,width:p,height:y}=n;const m=Bn(c??"none"),P=h.paths.map(w=>{const x=w.clone();return x.style.fill&&x.style.fill in m&&(x.style.fill=m[x.style.fill]),x.style.stroke&&x.style.stroke in m&&(x.style.stroke=m[x.style.stroke]),x});let E,b;if(l==="rigid"){E=Math.max(r.fontSize*5/u.width),b=E;const w=new k;w.x=u.width-p/E,w.y=u.height-y/b,P.forEach(x=>{x.applyTransform(T=>{const C=T.x>u.left+u.width/2,L=T.y>u.top+u.height/2;C&&(T.x-=w.x),L&&(T.y-=w.y)})})}else E=p/u.width,b=y/u.height;const S=new _e;S.translate(-u.x,-u.y),S.scale(E,b),o&&(S.translate(-p/2,-y/2),S.rotate(-Math.PI/2),S.translate(y/2,p/2)),S.translate(d,g),P.forEach(w=>{w.applyTransform(x=>{x.applyMatrix3(S)})}),s.paths.push(...P)},renderOrder:-2,render:(r,i)=>{const{boundingBox:n,computedStyle:o}=i;K(o.backgroundColor)||(r.fillStyle=o.backgroundColor,r.fillRect(...n.array)),s.paths.forEach(a=>{if(Pr({ctx:r,path:a,fontSize:o.fontSize}),i.debug){const l=new Tt([a]).getBoundingBox();l&&r.strokeRect(l.x,l.y,l.width,l.height)}}),i.paragraphs.forEach(a=>{const{lineBox:l,style:c}=a;K(c.backgroundColor)||(r.fillStyle=c.backgroundColor,r.fillRect(...l.array)),a.fragments.forEach(h=>{const{inlineBox:u,style:d}=h;K(d.backgroundColor)||(r.fillStyle=d.backgroundColor,r.fillRect(...u.array))})})}}}function Fn(s){const{highlight:e,highlightImage:t,highlightReferImage:r,highlightColormap:i,highlightLine:n,highlightSize:o,highlightThickness:a}=s;return{image:e?.image??t??"none",referImage:e?.referImage??r??"none",colormap:e?.colormap??i??"none",line:e?.line??n??"none",size:e?.size??o??"cover",thickness:e?.thickness??a??"100%"}}function _g(){const s=new Tt,e=[],t=Gl(),r=jl(t);return{name:"highlight",pathSet:s,load:async i=>{const n=new Set;i.forEachCharacter(o=>{const{computedStyle:a}=o,{image:l,referImage:c}=Fn(a);l&&t.needsLoad(l)&&n.add(l),c&&t.needsLoad(c)&&n.add(c)}),await Promise.all(Array.from(n).map(o=>t.load(o)))},update:i=>{e.length=0,s.paths.length=0;let n=[],o,a;i.forEachCharacter(l=>{const{computedStyle:c}=l,h=Fn(c),{image:u,colormap:d,line:g,size:p,thickness:y}=h;if(K(u))o?.length&&(o=[],n.push(o));else{const{inlineBox:m,isVertical:P}=l,{fontSize:E}=c;(!a||Cr(a.image,u)&&Cr(a.colormap,d)&&Cr(a.line,g)&&Cr(a.size,p)&&Cr(a.thickness,y))&&o?.length&&(P?o[0].inlineBox.left===m.left:o[0].inlineBox.top===m.top)&&o[0].fontSize===E?o.push(l):(o=[],o.push(l),n.push(o))}a=h}),n=n.filter(l=>l.length);for(let l=0;l<n.length;l++){const c=n[l],h=c[0],u=Z.from(...c.map(O=>O.compatibleGlyphBox));if(!u.height||!u.width)continue;const{computedStyle:d,isVertical:g,inlineBox:p,compatibleGlyphBox:y,strikeoutPosition:m,underlinePosition:P}=h,{fontSize:E}=d,{image:b,referImage:S,colormap:w,line:x,size:T,thickness:C}=Fn(d),L=Un(C,{fontSize:E,total:u.width})/u.width,G=Bn(w),{pathSet:U,dom:R}=r.parse(b),z=U.getBoundingBox(!0),B=E/z.width*2,D=new Z().copy(u);g&&(D.width=u.height,D.height=u.width,D.left=u.left+u.width);const H=Math.floor(D.width);let I=H;T!=="cover"&&(I=Un(T,{fontSize:E,total:u.width})||H,D.width=I);const F=!K(S)&&K(x);if(F)z.copy(r.parse(S).pathSet.getBoundingBox(!0));else{let O;if(K(x))if(z.width/z.height>4){O="underline";const $=R.getAttribute("viewBox");if($){const[A,M,N,V]=$.split(" ").map(J=>Number(J)),Y=M+V/2;z.y<Y&&z.y+z.height>Y?O="line-through":z.y+z.height<Y?O="overline":O="underline"}}else O="outline";else O=x;switch(O){case"outline":{const $=D.width*.2,A=D.height*.2;g?(D.x-=A/2,D.y-=$/2,D.x-=D.height):(D.x-=$/2,D.y-=A/2),D.width+=$,D.height+=A;break}case"overline":D.height=z.height*B,g?D.x=p.left+p.width:D.y=p.top;break;case"line-through":D.height=z.height*B,g?D.x=p.left+p.width-m+D.height/2:D.y=p.top+m-D.height/2;break;case"underline":D.height=z.height*B,g?D.x=y.left+y.width-P:D.y=p.top+P;break}}const j=new _e;if(j.translate(-z.x,-z.y),j.scale(D.width/z.width,D.height/z.height),g){const O=D.width/2,$=D.height/2;F||j.translate(-O,-$),j.rotate(-Math.PI/2),F||j.translate($,O)}j.translate(D.x,D.y);for(let O=0;O<Math.ceil(H/I);O++){const $=j.clone();g?$.translate(0,O*D.width):$.translate(O*D.width,0),U.paths.forEach(A=>{const M=A.clone().applyTransform($);M.style.strokeWidth&&(M.style.strokeWidth*=B*L),M.style.strokeMiterlimit&&(M.style.strokeMiterlimit*=B),M.style.strokeDashoffset&&(M.style.strokeDashoffset*=B),M.style.strokeDasharray&&(M.style.strokeDasharray=M.style.strokeDasharray.map(N=>N*B)),M.style.fill&&M.style.fill in G&&(M.style.fill=G[M.style.fill]),M.style.stroke&&M.style.stroke in G&&(M.style.stroke=G[M.style.stroke]),s.paths.push(M),H!==I&&(g?e[s.paths.length-1]=new Z(u.left-u.width*2,u.top,u.width*4,u.height):e[s.paths.length-1]=new Z(u.left,u.top-u.height*2,u.width,u.height*4))})}}},renderOrder:-1,getBoundingBox:()=>{const i=[];return s.paths.forEach((n,o)=>{const a=e[o];let l=n.getBoundingBox();if(a){const c=Math.max(l.x,a.x),h=Math.max(l.y,a.y),u=Math.min(l.right,a.right),d=Math.min(l.bottom,a.bottom);l=new Z(c,h,u-c,d-h)}i.push(l)}),Z.from(...i)},render:(i,n)=>{s.paths.forEach((o,a)=>{if(Pr({ctx:i,path:o,fontSize:n.computedStyle.fontSize,clipRect:e[a]}),n.debug){const l=new Tt([o]).getBoundingBox();l&&i.strokeRect(l.x,l.y,l.width,l.height)}})}}}function bg(s,e){return`<svg width="${s*2}" height="${s*2}" xmlns="http://www.w3.org/2000/svg">
|
|
956
956
|
<circle cx="${s}" cy="${s}" r="${s}" fill="${e}" />
|
|
957
|
-
</svg>`}function wg(){const s=new Tt;return{name:"listStyle",pathSet:s,update:e=>{s.paths.length=0;const{paragraphs:t,isVertical:r,fontSize:i}=e,n=i*.45;t.forEach(o=>{const{computedStyle:a}=o,{color:l,listStyleImage:c,listStyleColormap:h,listStyleSize:u,listStyleType:d}=a,g=Bn(h);let p=u,y;if(!K(c))y=c;else if(!K(d)){const x=i*.38/2;switch(p=p==="cover"?x*2:p,d){case"disc":y=bg(x,String(l));break}}if(!y)return;const m=Ws(y),P=m.getBoundingBox(),E=o.fragments[0]?.characters[0];if(!E)return;const{inlineBox:b}=E,S=p==="cover"?1:Un(p,{total:i,fontSize:i})/i,w=new _e;if(r){const x=i/P.height*S;w.translate(-P.left,-P.top).rotate(Math.PI/2).scale(x,x).translate(b.left+(b.width-P.height*x)/2,b.top-n)}else{const x=i/P.height*S;w.translate(-P.left,-P.top).scale(x,x).translate(b.left-P.width*x-n,b.top+(b.height-P.height*x)/2)}s.paths.push(...m.paths.map(x=>{const T=x.clone();return T.applyTransform(w),T.style.fill&&T.style.fill in g&&(T.style.fill=g[T.style.fill]),T.style.stroke&&T.style.stroke in g&&(T.style.stroke=g[T.style.stroke]),T}))})}}}function xg(){return{name:"outline"}}const $t=new k,Tr=new _e,zt=new _e;function Pg(){const s=new Tt;return{name:"render",pathSet:s,update:e=>{s.paths.length=0;const{paragraphs:t}=e;t.forEach(r=>{r.fragments.forEach(i=>{i.characters.forEach(n=>{s.paths.push(n.path)})})})},getBoundingBox:e=>{const{characters:t,fontSize:r,effects:i}=e,n=[];return t.forEach(o=>{i?.forEach(a=>{if(!o.glyphBox)return;const l=o.glyphBox.clone(),c=Nn(e,a);$t.set(l.left,l.top),$t.applyMatrix3(c),l.left=$t.x,l.top=$t.y,$t.set(l.right,l.bottom),$t.applyMatrix3(c),l.width=$t.x-l.left,l.height=$t.y-l.top;const h=(a.shadowOffsetX??0)*r,u=(a.shadowOffsetY??0)*r,d=Math.max(.1,a.textStrokeWidth??0)*r;l.left+=h-d,l.top+=u-d,l.width+=d*2,l.height+=d*2,n.push(l)})}),n.length?Z.from(...n):void 0},render:(e,t)=>{const{paragraphs:r,glyphBox:i,effects:n}=t;n?n.forEach(o=>{is(o,i,e),e.save();const[a,l,c,h,u,d]=Nn(t,o).transpose().elements;e.transform(a,h,l,u,c,d),t.forEachCharacter(g=>{g.drawTo(e,o)}),e.restore()}):r.forEach(o=>{o.fragments.forEach(a=>{a.characters.forEach(l=>{l.drawTo(e)})})}),t.debug&&r.forEach(o=>{e.strokeRect(o.lineBox.x,o.lineBox.y,o.lineBox.width,o.lineBox.height)})}}}function Nn(s,e){const{fontSize:t,glyphBox:r}=s,i=(e.translateX??0)*t,n=(e.translateY??0)*t,o=Math.PI*2,a=(e.skewX??0)/360*o,l=(e.skewY??0)/360*o,{left:c,top:h,width:u,height:d}=r,g=c+u/2,p=h+d/2;return Tr.identity(),zt.makeTranslation(i,n),Tr.multiply(zt),zt.makeTranslation(g,p),Tr.multiply(zt),zt.set(1,Math.tan(a),0,Math.tan(l),1,0,0,0,1),Tr.multiply(zt),zt.makeTranslation(-g,-p),Tr.multiply(zt),Tr.clone()}function Cg(){const s=new Tt;return{name:"textDecoration",pathSet:s,update:e=>{s.paths.length=0;const t=[];let r,i;e.forEachCharacter(n=>{const{computedStyle:o,isVertical:a,inlineBox:l,underlinePosition:c,underlineThickness:h,strikeoutPosition:u,strikeoutSize:d}=n,{color:g,textDecoration:p,writingMode:y}=o;if(K(p))i=void 0;else{let m=!1;if(i?.textDecoration===p&&i?.writingMode===y&&i?.color===g&&(a?r[0].inlineBox.left===l.left:r[0].inlineBox.top===l.top))switch(p){case"underline":r[0].underlinePosition===c&&r[0].underlineThickness===h&&(m=!0);break;case"line-through":r[0].strikeoutPosition===u&&r[0].strikeoutSize===d&&(m=!0);break}m?r.push(n):(r=[],r.push(n),t.push(r)),i=o}}),t.forEach(n=>{const{computedStyle:o,isVertical:a,underlinePosition:l,underlineThickness:c,strikeoutPosition:h,strikeoutSize:u}=n[0],{color:d,textDecoration:g}=o,p=Z.from(...n.map(T=>T.inlineBox)),{left:y,top:m,width:P,height:E}=p;let b=a?y+P:m;const S=a?-1:1;let w=0;switch(g){case"overline":w=c*2;break;case"underline":b+=S*l,w=c*2;break;case"line-through":b+=S*h,w=u*2;break}b-=w;let x;a?x=new ge([{type:"M",x:b,y:m},{type:"L",x:b,y:m+E},{type:"L",x:b+w,y:m+E},{type:"L",x:b+w,y:m},{type:"Z"}],{fill:d}):x=new ge([{type:"M",x:y,y:b},{type:"L",x:y+P,y:b},{type:"L",x:y+P,y:b+w},{type:"L",x:y,y:b+w},{type:"Z"}],{fill:d}),s.paths.push(x)})},render:(e,t)=>{const{effects:r,computedStyle:i}=t;r?r.forEach(n=>{e.save();const[o,a,l,c,h,u]=Nn(t,n).transpose().elements;e.transform(o,c,a,h,l,u),s.paths.forEach(d=>{Pr({ctx:e,path:d,fontSize:i.fontSize,...n})}),e.restore()}):s.paths.forEach(n=>{Pr({ctx:e,path:n,fontSize:i.fontSize})})}}}var Tg=Object.defineProperty,Vt=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&Tg(e,t,i),i};const Wl=Po();class kt extends bs{needsUpdate=!0;computedStyle={...Wl};paragraphs=[];lineBox=new Z;rawGlyphBox=new Z;glyphBox=new Z;pathBox=new Z;boundingBox=new Z;measurer=new ss;plugins=new Map;pathSets=[];get fontSize(){return this.computedStyle.fontSize}get isVertical(){return this.computedStyle.writingMode.includes("vertical")}get characters(){return this.paragraphs.flatMap(e=>e.fragments.flatMap(t=>t.characters))}constructor(e={}){super(),this.set(e)}set(e={}){const{content:t,effects:r,style:i,measureDom:n,fonts:o,fill:a,outline:l}=To(e);this.debug=e.debug??!1,this.content=t,this.effects=r,this.style=i,this.measureDom=n,this.fonts=o,this.fill=a,this.outline=l,this.use(vg()).use(xg()).use(wg()).use(Cg()).use(_g()).use(Pg()),(e.plugins??[]).forEach(c=>{this.use(c)}),this.updateParagraphs()}use(e){return this.plugins.set(e.name,e),this}forEachCharacter(e){return this.paragraphs.forEach((t,r)=>{t.fragments.forEach((i,n)=>{i.characters.forEach((o,a)=>{e(o,{paragraphIndex:r,fragmentIndex:n,characterIndex:a})})})}),this}async load(){await Promise.all(Array.from(this.plugins.values()).map(e=>e.load?.(this)))}updateParagraphs(){this.computedStyle={...Wl,...this.style};const{content:e}=this,t=[];return e.forEach((r,i)=>{const{fragments:n,fill:o,outline:a,...l}=r,c=new yg(l,i,this);c.fill=o,c.outline=a,n.forEach((h,u)=>{const{content:d,fill:g,outline:p,...y}=h;if(d!==void 0){const m=new mg(d,y,u,c);c.fragments.push(m),m.fill=g,m.outline=p}}),t.push(c)}),this.paragraphs=t,this}createDom(){return this.updateParagraphs(),this.measurer.createDom(this.paragraphs,this.computedStyle)}measure(e=this.measureDom){const t={paragraphs:this.paragraphs,lineBox:this.lineBox,rawGlyphBox:this.rawGlyphBox,glyphBox:this.glyphBox,pathBox:this.pathBox,boundingBox:this.boundingBox};this.updateParagraphs();const r=this.measurer.measure(this.paragraphs,this.computedStyle,e);this.paragraphs=r.paragraphs,this.lineBox=r.boundingBox,this.characters.forEach(i=>{i.update(this.fonts)}),this.rawGlyphBox=this.getGlyphBox(),Array.from(this.plugins.values()).sort((i,n)=>(i.updateOrder??0)-(n.updateOrder??0)).forEach(i=>{i.update?.(this)}),this.pathSets.length=0,Array.from(this.plugins.values()).sort((i,n)=>(i.renderOrder??0)-(n.renderOrder??0)).forEach(i=>{i.pathSet?.paths.length&&this.pathSets.push(i.pathSet)}),this.glyphBox=this.getGlyphBox(),this.updatePathBox().updateBoundingBox();for(const i in t)r[i]=this[i],this[i]=t[i];return this.emit("measure",{text:this,result:r}),r}getGlyphBox(){const e=k.MAX,t=k.MIN;return this.characters.forEach(r=>{if(!r.getGlyphMinMax(e,t)){const{inlineBox:i}=r,{left:n,top:o,width:a,height:l}=i,c=new k(n,o),h=new k(n+a,o+l);e.min(c,h),t.max(c,h)}}),new Z(e.x,e.y,t.x-e.x,t.y-e.y)}updatePathBox(){return this.pathBox=Z.from(this.glyphBox,...Array.from(this.plugins.values()).map(e=>e.getBoundingBox?e.getBoundingBox(this):e.pathSet?.getBoundingBox()).filter(Boolean)),this}updateBoundingBox(){return this.boundingBox=Z.from(this.rawGlyphBox,this.lineBox,this.pathBox),this}requestUpdate(){return this.needsUpdate=!0,this}update(e=this.measureDom){this.needsUpdate=!1;const t=this.measure(e);for(const r in t)this[r]=t[r];return this.emit("update",{text:this}),this}render(e){const{view:t,pixelRatio:r=2}=e,i=t.getContext("2d");i&&(this.needsUpdate&&this.update(),cg(i,r,this.boundingBox),hg(i,this),Array.from(this.plugins.values()).sort((n,o)=>(n.renderOrder??0)-(o.renderOrder??0)).forEach(n=>{if(n.render)n.render?.(i,this);else if(n.pathSet){const o=this.computedStyle;n.pathSet.paths.forEach(a=>{Pr({ctx:i,path:a,fontSize:o.fontSize})})}}),this.emit("render",{text:this,view:t,pixelRatio:r}),e.onContext?.(i))}toString(){return this.content.flatMap(e=>e.fragments.map(t=>t.content)).join("")}}Vt([_({internal:!0})],kt.prototype,"debug"),Vt([_()],kt.prototype,"content"),Vt([_()],kt.prototype,"style"),Vt([_()],kt.prototype,"effects"),Vt([_()],kt.prototype,"fill"),Vt([_()],kt.prototype,"outline"),Vt([_({internal:!0})],kt.prototype,"measureDom"),Vt([_({internal:!0})],kt.prototype,"fonts");var Sg=Object.defineProperty,Gt=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&Sg(e,t,i),i};class vt extends xt{constructor(e){super(),this.parent=e,this.base=new kt,this.base.setPropertyAccessor(this)}base;measureResult;_texture=new Ui;_textureMap=new Map;setProperties(e){return super.setProperties(K(e)?void 0:To(e))}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"enabled":this.parent.requestRedraw();break;case"effects":case"measureDom":case"fonts":this.update(),this.parent.requestRedraw();break;case"fill":case"outline":case"content":this.update(),this._updateTextureMap(),this.parent.requestRedraw();break}}update(){this.base.fonts=this.base.fonts??this.parent.tree?.fonts,this.base.update()}_updateTextureMap(){this._textureMap.clear();const e=[];if(this.base.paragraphs.forEach((t,r)=>{const i=[];if(t.fragments.forEach((n,o)=>{if(n.characters.length){const a=Z.from(...n.characters.map(l=>l.compatibleGlyphBox));this._updateTexture(`${r}.${o}.fill`,n.fill,a),this._updateTexture(`${r}.${o}.outline`,n.outline,a),i.push(a)}}),i.length){const n=Z.from(...i);this._updateTexture(`${r}.fill`,t.fill,n),this._updateTexture(`${r}.outline`,t.outline,n),e.push(n)}}),e.length){const t=Z.from(...e);this._updateTexture("fill",this.fill,t),this._updateTexture("outline",this.outline,t)}}async _updateTexture(e,t,r){t&&Object.keys(t).length>0&&(this._textureMap.set(e,{texture:await this._loadTexture(t,r),box:r}),this.parent.requestRedraw())}async _loadTexture(e,t){return e.linearGradient||e.radialGradient?new zr(e.linearGradient??e.radialGradient,t.width,t.height):K(e.image)?void 0:(this.parent.tree?.log(`load image ${e.image}`),await Ke.texture.load(e.image))}setContent(e){this.content=Ps(e)}measure(){return this.update(),this.base.measure()}updateMeasure(){return this.measureResult=this.measure(),this}isValid(){return!!(this.enabled&&!/^\s*$/.test(this.base.toString()))}_createVertTransform(){const e=this.parent;if(e.scale.x>0&&e.scale.y>0)return;const t=e.scale.x*e.scale.y,r=e.getTransformOrigin();return new ke().translate(-r.x,-r.y).scale(t>0?1:-1,1).translate(r.x,r.y)}useTextureDraw(){return!!this.effects?.length||this.content.some(e=>e.fragments.some(t=>!!t.highlightImage))}_pathDraw(e){this.base.pathSets.forEach(t=>{t.paths.forEach(r=>{const i=r.getMeta();if(i instanceof Vl){const n=i.parent.index,o=i.parent.parent.index;if(r.style.fill&&!K(r.style.fill))if(typeof r.style.fill=="object"){const a=r.style.fill,l=this._textureMap.get(`${o}.${n}.fill`)??this._textureMap.get(`${o}.fill`)??this._textureMap.get("fill");if(a.enabled!==!1&&(l||a.color)){const{uvTransform:c,disableWrapMode:h}=rs(a,l?.box??{width:this.parent.size.width,height:this.parent.size.height});e.addPath(r),e.style={...r.style},e.uvTransform=c,e.fillStyle=l?.texture??a.color,e.vertTransform=this._createVertTransform(),e.fill({disableWrapMode:h})}}else e.addPath(r),e.style={...r.style},e.vertTransform=this._createVertTransform(),e.fill();if(r.style.stroke&&!K(r.style.stroke))if(typeof r.style.stroke=="object"){const a=r.style.stroke,l=this._textureMap.get(`${o}.${n}.outline`)??this._textureMap.get(`${o}.outline`)??this._textureMap.get("outline");if(a.enabled!==!1&&(l||a.color)&&(a.width===void 0||a.width)){const{uvTransform:c,disableWrapMode:h}=rs(a,l?.box??{width:this.parent.size.width,height:this.parent.size.height});e.addPath(r),e.style={...r.style},e.lineWidth=a.width||1,e.uvTransform=c,e.strokeStyle=l?.texture??a.color,e.lineCap=a.lineCap,e.lineJoin=a.lineJoin,e.vertTransform=this._createVertTransform(),e.stroke({disableWrapMode:h})}}else e.addPath(r),e.style={...r.style},e.vertTransform=this._createVertTransform(),e.stroke()}else e.addPath(r),e.style={...r.style},e.vertTransform=this._createVertTransform(),e.fill()})})}_textureDraw(e){this._texture.width=Math.round(this.base.boundingBox.width),this._texture.height=Math.round(this.base.boundingBox.height),this.base.render({view:this._texture.source}),e.fillStyle=this._texture,e.vertTransform=this._createVertTransform(),e.fill()}draw(){const e=this.parent.context;this.useTextureDraw()?this._textureDraw(e):this._pathDraw(e)}}Gt([_({fallback:!0})],vt.prototype,"enabled"),Gt([_({fallback:()=>[]})],vt.prototype,"content"),Gt([_({alias:"parent.style.json"})],vt.prototype,"style"),Gt([_()],vt.prototype,"effects"),Gt([_()],vt.prototype,"fill"),Gt([_()],vt.prototype,"outline"),Gt([_({alias:"base.measureDom"})],vt.prototype,"measureDom"),Gt([_({alias:"base.fonts"})],vt.prototype,"fonts");var Eg=Object.getOwnPropertyDescriptor,Mg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Eg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i};const Ag=new Set(Object.keys(wo())),Og=new Set(Object.keys(xo()));f.BaseElement2D=class extends f.Node2D{size=new de().on("update",()=>{this.updateGlobalTransform(),this.requestRedraw()});get style(){return this._style}set style(e){const t=(...r)=>{this.emit("updateStyleProperty",r[0],r[1],r[2]),this._updateStyleProperty(r[0],r[1],r[2])};e.on("updateProperty",t),this._style?.off("updateProperty",t),this._style=e}_background=new Dn(this);get background(){return this._background}set background(e){this._background.resetProperties().setProperties(e)}_shape=new ir(this);get shape(){return this._shape}set shape(e){this._shape.resetProperties().setProperties(e)}_fill=new Oe(this);get fill(){return this._fill}set fill(e){this._fill.resetProperties().setProperties(e)}_outline=new tr(this);get outline(){return this._outline}set outline(e){this._outline.resetProperties().setProperties(e)}_foreground=new In(this);get foreground(){return this._foreground}set foreground(e){this._foreground.resetProperties().setProperties(e)}_text=new vt(this);get text(){return this._text}set text(e){this._text.resetProperties().setProperties(e)}_shadow=new rr(this);get shadow(){return this._shadow}set shadow(e){this._shadow.resetProperties().setProperties(e)}constructor(e,t=[]){super(),this._updateStyleProperty=this._updateStyleProperty.bind(this),this.style=new ui,this.setProperties(e).append(t)}setProperties(e){if(e){const{style:t,text:r,shape:i,background:n,fill:o,outline:a,foreground:l,shadow:c,...h}=e;t&&this.style.setProperties(t),n&&this.background.setProperties(n),i&&this.shape.setProperties(i),o&&this.fill.setProperties(o),a&&this.outline.setProperties(a),r&&this.text.setProperties(r),l&&this.foreground.setProperties(l),c&&this.shadow.setProperties(c),super.setProperties(h)}return this}_updateStyleProperty(e,t,r){switch(e){case"rotate":this.rotation=this.style.rotate*Xo;break;case"scaleX":this.scale.x=this.style.scaleX,this.text.isValid()&&(t^r)<0&&this.requestRedraw();break;case"scaleY":this.scale.y=this.style.scaleY,this.text.isValid()&&(t^r)<0&&this.requestRedraw();break;case"skewX":this.skew.x=this.style.skewX;break;case"skewY":this.skew.y=this.style.skewY;break;case"transform":case"transformOrigin":this.updateGlobalTransform();break;case"opacity":this.opacity=this.style.opacity;break;case"visibility":this.visible=this.style.visibility==="visible";break;case"filter":this.requestRepaint();break;case"maskImage":this._updateMaskImage();break;case"backgroundColor":this.background.color=this.style.backgroundColor;break;case"backgroundImage":this.background.image=this.style.backgroundImage;break;case"borderStyle":case"outlineStyle":this.outline.style=t;break;case"borderWidth":case"outlineWidth":this.outline.width=t;break;case"borderColor":case"outlineColor":this.outline.color=t;break;case"borderRadius":default:this.requestRedraw();break}(Og.has(e)||Ag.has(e))&&this.text.isValid()&&this.text.update()}_process(e){this.foreground.updateFrameIndex(),this.fill.updateFrameIndex(),this.outline.updateFrameIndex(),this.background.updateFrameIndex(),super._process(e)}_updateMaskImage(){const e="__$style.maskImage",t=this.style.maskImage;if(t&&t!=="none"){const r=this.getNode(e);r?r.src=t:this.appendChild(new f.MaskEffect({name:e,src:t}),"back")}else{const r=this.getNode(e);r&&this.removeChild(r)}}getTransformOrigin(){const{width:e,height:t}=this.size,[r,i]=ml(this.style.transformOrigin);return new de(r*e,i*t)}updateTransform(e){const{width:t,height:r}=this.size;super.updateTransform(i=>{gl(this.style.transform??"",t,r,i),e?.(i)})}updateGlobalTransform(){super.updateGlobalTransform(),this._updateOverflow()}_relayout(e){return super._relayout(e).map(t=>({...t,dimension:this.size.toFloat32Array()}))}getRect(){return this.getGlobalAabb()}_getPointArray(){const{width:e,height:t}=this.size,r=0,i=0,n=r+e,o=i+t;return[{x:r,y:i},{x:r,y:o},{x:n,y:i},{x:n,y:o}]}getAabb(){return new It(this._getPointArray().map(e=>this.transform.apply(e)))}getGlobalAabb(){return new It(this._getPointArray().map(e=>this.globalTransform.apply(e)))}getObb(){const e=this.getTransformOrigin(),t=this.transform.apply(e).sub(e);return{rect:new It(this._getPointArray().map(r=>(r.x+=t.x,r.y+=t.y,r))),rotation:this.rotation}}getGlobalObb(){const e=this.getTransformOrigin(),t=this.globalTransform.apply(e).sub(e);return{rect:new It(this._getPointArray().map(r=>(r.x+=t.x,r.y+=t.y,r))),rotation:this.globalRotation}}_updateOverflow(){this.style.overflow==="hidden"?this.mask=this.getRect().toJSON():this.mask=void 0}_draw(){super._draw(),this._background.isValid()&&(this._tree?.log(this.name,"background drawing"),this._shape.draw(!this._background.fillWithShape),this._background.draw()),this._fill.isValid()&&(this._tree?.log(this.name,"fill drawing"),this._shape.draw(),this._fill.draw()),this._outline.isValid()&&(this._tree?.log(this.name,"outline drawing"),this._shape.draw(),this._outline.draw()),this._foreground.isValid()&&(this._tree?.log(this.name,"foreground drawing"),this._shape.draw(!this._foreground.fillWithShape),this._foreground.draw()),this._text.isValid()&&(this._tree?.log(this.name,"text drawing"),this._text.useTextureDraw()&&this._shape.draw(!0),this._text.draw()),this._drawContent()}_drawContent(){}_repaint(e){return super._repaint(e).map(t=>({...t}))}canPointerEvents(){return this.style.pointerEvents!=="none"}input(e,t){const r=this.getChildren(!0);for(let i=r.length-1;i>=0;i--)r[i].input(e,t);this.isVisibleInTree()&&this._input(e,t)}_positionInput(e,t){const{width:r,height:i}=this.size;return e.x>=0&&e.x<r&&e.y>=0&&e.y<i}_input(e,t){switch(t){case"pointerdown":case"pointermove":case"pointerup":{if(this.canPointerEvents()){const{screenX:r,screenY:i}=e;if(r&&i){const n=new de(r,i),o=this.getViewport();o&&o.toCanvasGlobal(n,n),this.toLocal(n,n),this._positionInput(n,t)&&(e.target||(e.target=this),this.emit(t,e))}}break}}}toJSON(){const e=t=>Object.keys(t).length>0?t:void 0;return Ve({...super.toJSON(),style:e(this.style.toJSON()),background:e(this.background.toJSON()),shape:e(this.shape.toJSON()),fill:e(this.fill.toJSON()),outline:e(this.outline.toJSON()),text:e(this.text.toJSON()),foreground:e(this.foreground.toJSON()),shadow:e(this.shadow.toJSON())})}},f.BaseElement2D=Mg([X("BaseElement2D")],f.BaseElement2D);class $n extends ui{constructor(e){super(),this.setProperties(e)}}const ql={left:0,top:0,width:0,height:0};for(const s in ql)mi($n,s,{fallback:ql[s]});class Xl extends ui{constructor(e){super(),this.setProperties(e)}}var kg=Object.getOwnPropertyDescriptor,Dg=(s,e,t,r)=>{for(var i=r>1?void 0:r?kg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i};f.Element2D=class extends f.BaseElement2D{get style(){return this._style}set style(e){const t=(...r)=>{this.emit("updateStyleProperty",r[0],r[1],r[2]),this._updateStyleProperty(r[0],r[1],r[2])};e.on("updateProperty",t),this._style?.off("updateProperty",t),this._style=e}constructor(e,t=[]){super(),this.style=new $n,this.setProperties(e).append(t)}_updateStyleProperty(e,t,r){switch(super._updateStyleProperty(e,t,r),e){case"left":this.position.x=Number(t);break;case"top":this.position.y=Number(t);break;case"width":this.size.width=Number(t);break;case"height":this.size.height=Number(t);break}switch(e){case"width":case"height":this.mask instanceof f.BaseElement2D&&(this.mask.size.width=this.size.width,this.mask.size.height=this.size.height);break}}},f.Element2D=Dg([X("Element2D")],f.Element2D);const fe={left:0,top:1,right:2,bottom:3,start:4,end:5,horizontal:6,vertical:7,all:8},Hl={column:0,row:1,all:2},sr={auto:0,"flex-start":1,center:2,"flex-end":3,stretch:4,baseline:5,"space-between":6,"space-around":7,"space-evenly":8},zn={flex:0,none:1,contents:2},ns={inherit:0,ltr:1,rtl:2},Vn={column:0,"column-reverse":1,row:2,"row-reverse":3},Gn={"no-wrap":0,wrap:1,"Wrap-reverse":2},jn={"flex-start":0,center:1,"flex-end":2,"space-between":3,"space-around":4,"space-evenly":5},Wn={visible:0,hidden:1,scroll:2},qn={static:0,relative:1,absolute:2},Xn={"border-box":0,"content-box":1};class os{constructor(e){this._element=e}static _yoga;static async load(){const{loadYoga:e}=await import("yoga-layout/load");this._yoga=await e()}_node=os._yoga.Node.create();get _style(){return this._element.style}get offsetLeft(){return this._node.getComputedLeft()}get offsetTop(){return this._node.getComputedTop()}get offsetWidth(){return this._node.getComputedWidth()}get offsetHeight(){return this._node.getComputedHeight()}calculateLayout(e,t,r){return this._node.calculateLayout(e,t,r)}getComputedLayout(){return this._node.getComputedLayout()}updateStyleProperty(e,t,r){switch(e){case"alignContent":this._node.setAlignContent(t?sr[t]:sr["flex-start"]);break;case"alignItems":this._node.setAlignItems(t?sr[t]:sr["flex-start"]);break;case"alignSelf":this._node.setAlignSelf(t?sr[t]:sr["flex-start"]);break;case"aspectRatio":this._node.setAspectRatio(t);break;case"borderTop":this._node.setBorder(fe.top,this._style.borderWidth);break;case"borderBottom":this._node.setBorder(fe.bottom,this._style.borderWidth);break;case"borderLeft":this._node.setBorder(fe.left,this._style.borderWidth);break;case"borderRight":this._node.setBorder(fe.right,this._style.borderWidth);break;case"border":this._node.setBorder(fe.all,this._style.borderWidth);break;case"direction":this._node.setDirection(t?ns[t]:ns.inherit);break;case"display":this._node.setDisplay(t?zn[t]:zn.flex);break;case"flex":this._node.setFlex(this._style.flex);break;case"flexBasis":this._node.setFlexBasis(this._style.flexBasis);break;case"flexDirection":this._node.setFlexDirection(t?Vn[t]:Vn.row);break;case"flexGrow":this._node.setFlexGrow(this._style.flexGrow);break;case"flexShrink":this._node.setFlexShrink(this._style.flexShrink);break;case"flexWrap":this._node.setFlexWrap(t?Gn[t]:Gn.wrap);break;case"height":this._node.setHeight(this._style.height);break;case"justifyContent":this._node.setJustifyContent(t?jn[t]:jn["flex-start"]);break;case"gap":t!==void 0&&this._node.setGap(Hl.all,t);break;case"marginTop":this._node.setMargin(fe.top,t);break;case"marginBottom":this._node.setMargin(fe.bottom,t);break;case"marginLeft":this._node.setMargin(fe.left,t);break;case"marginRight":this._node.setMargin(fe.right,t);break;case"margin":this._node.setMargin(fe.all,t);break;case"maxHeight":this._node.setMaxHeight(t);break;case"maxWidth":this._node.setMaxWidth(t);break;case"minHeight":this._node.setMinHeight(this._style.minHeight);break;case"minWidth":this._node.setMinWidth(this._style.minWidth);break;case"overflow":this._node.setOverflow(t?Wn[t]:Wn.visible);break;case"paddingTop":this._node.setPadding(fe.top,this._style.paddingTop);break;case"paddingBottom":this._node.setPadding(fe.bottom,this._style.paddingBottom);break;case"paddingLeft":this._node.setPadding(fe.left,this._style.paddingLeft);break;case"paddingRight":this._node.setPadding(fe.right,this._style.paddingRight);break;case"padding":this._node.setPadding(fe.all,this._style.padding);break;case"top":this._node.setPosition(fe.top,this._style.top);break;case"bottom":this._node.setPosition(fe.bottom,this._style.bottom);break;case"left":this._node.setPosition(fe.left,this._style.left);break;case"right":this._node.setPosition(fe.right,this._style.right);break;case"position":this._node.setPositionType(t?qn[t]:qn.static);break;case"boxSizing":this._node.setBoxSizing(t?Xn[t]:Xn["content-box"]);break;case"width":this._node.setWidth(this._style.width);break}}}var Ig=Object.getOwnPropertyDescriptor,Rg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Ig(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i};f.FlexElement2D=class extends f.BaseElement2D{get style(){return this._style}set style(e){const t=(...r)=>{this.emit("updateStyleProperty",r[0],r[1],r[2]),this._updateStyleProperty(r[0],r[1],r[2])};e.on("updateProperty",t),this._style?.off("updateProperty",t),this._style=e}_layout=new os(this);get offsetLeft(){return this._layout.offsetLeft}get offsetTop(){return this._layout.offsetTop}get offsetWidth(){return this._layout.offsetWidth}get offsetHeight(){return this._layout.offsetHeight}constructor(e,t=[]){super(),this.style=new Xl,this.setProperties(e).append(t)}_parented(e){super._parented(e),e._layout&&this._layout._node&&e._layout._node.insertChild(this._layout._node,e._layout._node.getChildCount())}_unparented(e){super._unparented(e),e._layout?._node&&e._layout._node.removeChild(this._layout._node)}_updateStyleProperty(e,t,r){super._updateStyleProperty(e,t,r),this._layout.updateStyleProperty(e,t,r),this._layout._node.isDirty()&&this.requestRelayout()}updateTransform(){this.calculateLayout(void 0,void 0,ns.ltr);const{left:e,top:t,width:r,height:i}=this._layout.getComputedLayout();this.position.x=e,this.position.y=t,this.size.x=r,this.size.y=i,super.updateTransform()}calculateLayout(e,t,r){const i=this.getParent();i?._layout?.calculateLayout?i?._layout.calculateLayout(e,t,r):this._layout.calculateLayout(e,t,r)}},f.FlexElement2D=Rg([X("FlexElement2D")],f.FlexElement2D);var Ug=Object.defineProperty,Bg=Object.getOwnPropertyDescriptor,fi=(s,e,t,r)=>{for(var i=r>1?void 0:r?Bg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&Ug(e,t,i),i};f.Image2D=class extends f.Element2D{get currentFrameTexture(){return this.texture?.frames[this._frameIndex]?.texture}get textureDuration(){return this.texture?.duration??0}get naturalWidth(){return this.currentFrameTexture?.realWidth??0}get naturalHeight(){return this.currentFrameTexture?.realHeight??0}get complete(){return this._complete}_frameIndex=0;_complete=!1;_wait=Promise.resolve();constructor(e,t=[]){super(),this.setProperties(e),this.append(t)}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"src":this._wait=this._load(t);break;case"srcRect":this.requestRedraw();break}}decode(){return this._wait}setResource(e){let t;if(e instanceof Ri?t=e:t=new Ri(e),this.texture=t.updateDuration(),this.currentFrameTexture&&(!this.style.width||!this.style.height)){const r=this.currentFrameTexture;this.style.width=r.realWidth,this.style.height=r.realHeight}return this}async _load(e){if(this._complete=!1,e)try{this.setResource(this.gif||e?.includes(".gif")?await Ke.gif.load(e):await Ke.texture.load(e)),this.requestRedraw(),this.emit("load")}catch(t){console.warn(t),this.emit("error",t)}else this.texture=void 0;this._complete=!0}_getFrameCurrentTime(){const e=this.textureDuration;if(!e||!this._tree)return 0;const t=this._currentTime;return t<0?0:t%e}_updateFrameIndex(){if(!this.texture)return this;const e=this._getFrameCurrentTime(),t=this.texture.frames,r=t.length;if(r<=1&&this._frameIndex===0)return this;let i=r-1;for(let n=0,o=0;o<r;o++)if(n+=t[o].duration??0,n>=e){i=o;break}return this._frameIndex!==i&&(this._frameIndex=i,this.requestRedraw()),this}_process(e){this._updateFrameIndex(),super._process(e)}_drawContent(){const e=this.currentFrameTexture;if(e?.isValid()){const{left:t=0,top:r=0,right:i=0,bottom:n=0}=this.srcRect??{},{width:o,height:a}=this.size;this.context.fillStyle=e;const l=Math.abs(1+(t+i))*o,c=Math.abs(1+(r+n))*a,h=1/l,u=1/c,d=t*o*h,g=r*a*u;this.context.uvTransform=new ke().scale(h,u).translate(d,g),this.shape.draw(),this.context.fill()}}_repaint(e){return super._repaint(e).map(t=>({...t,disableWrapMode:!0}))}},fi([_({internal:!0})],f.Image2D.prototype,"texture",2),fi([_({fallback:""})],f.Image2D.prototype,"src",2),fi([_()],f.Image2D.prototype,"srcRect",2),fi([_({fallback:!1})],f.Image2D.prototype,"gif",2),f.Image2D=fi([X("Image2D")],f.Image2D);class Hn extends f.Element2D{texture;constructor(e,t=[]){super(),this.setProperties(e).append(t)}_drawContent(){this.texture?.isValid()&&(this.shape.draw(!0),this.context.fillStyle=this.texture,this.context.fill())}}var Lg=Object.defineProperty,Fg=Object.getOwnPropertyDescriptor,Yl=(s,e,t,r)=>{for(var i=r>1?void 0:r?Fg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&Lg(e,t,i),i};f.Lottie2D=class extends Hn{texture=new Ui;animation;constructor(e,t=[]){super(),this.setProperties(e),this.append(t)}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"src":this._load();break}}_updateStyleProperty(e,t,r){switch(super._updateStyleProperty(e,t,r),e){case"width":this.texture.width=this.style.width;break;case"height":this.texture.height=this.style.height;break}}async _load(){this.animation=await Ke.lottie.load(this.src,this.texture.source),this.duration=this.animation.getDuration(!1)*1e3,this.texture.requestUpload(),this.requestRedraw()}_process(e){this.animation?.goToAndStop(this.currentTime,!1),this.texture.requestUpload(),this.requestRedraw(),super._process(e)}},Yl([_({fallback:""})],f.Lottie2D.prototype,"src",2),f.Lottie2D=Yl([X("Lottie2D")],f.Lottie2D);var Ng=Object.defineProperty,$g=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&Ng(e,t,i),i};class Kl extends f.Element2D{constructor(e,t=[]){super(),this.setProperties(e).append(t)}_updateStyleProperty(e,t,r){switch(super._updateStyleProperty(e,t,r),e){case"width":case"height":this.requestRedraw();break}}_drawCircle(e,t){this.context.arc(e,t,this.handleSize,0,Math.PI*2,!0),this.context.fillStyle=le.WHITE,this.context.fill(),this.context.arc(e,t,this.handleSize,0,Math.PI*2,!0),this.context.strokeStyle="rgba(0, 0, 0, 0.2)",this.context.stroke()}_drawEllipse(e,t){this.context.roundRect(e-this.handleSize,t-this.handleSize*2,this.handleSize*2,this.handleSize*4,this.handleSize),this.context.fillStyle=le.WHITE,this.context.fill(),this.context.roundRect(e-this.handleSize,t-this.handleSize*2,this.handleSize*2,this.handleSize*4,this.handleSize),this.context.strokeStyle="rgba(0, 0, 0, 0.2)",this.context.stroke()}_draw(){const{width:e,height:t}=this.getRect();this.context.rect(0,0,e,t),this.context.strokeStyle="#00FF00",this.context.stroke(),this._drawCircle(0,0),this._drawCircle(e,t),this._drawCircle(0,t),this._drawEllipse(0,t/2),this._drawCircle(e,0),this._drawEllipse(e,t/2)}}$g([_({fallback:6})],Kl.prototype,"handleSize");var zg=Object.defineProperty,Vg=Object.getOwnPropertyDescriptor,Zl=(s,e,t,r)=>{for(var i=r>1?void 0:r?Vg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&zg(e,t,i),i};f.Video2D=class extends Hn{get videoDuration(){return(this.texture?.duration??0)*1e3}_wait=Promise.resolve();constructor(e,t=[]){super(),this.setProperties(e),this.append(t)}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"src":this._wait=this._load(t);break}}waitLoad(){return this._wait}async _load(e){this.texture=await Ke.video.load(e),(!this.style.width||!this.style.height)&&(this.style.width=this.texture.width,this.style.height=this.texture.height),this.requestRedraw()}_updateVideoCurrentTime(){let e=this._currentTime;if(e<0)return;const t=this.texture;if(!t)return;const r=t.duration;e=r?e%(r*1e3):0,!t.isPlaying&&!t.seeking&&(e=~~e/1e3,t.currentTime!==e&&(t.currentTime=e))}_process(e){this._updateVideoCurrentTime(),super._process(e)}},Zl([_({fallback:""})],f.Video2D.prototype,"src",2),f.Video2D=Zl([X("Video2D")],f.Video2D);var Gg=Object.defineProperty,jg=Object.getOwnPropertyDescriptor,as=(s,e,t,r)=>{for(var i=r>1?void 0:r?jg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&Gg(e,t,i),i};const Jl=s=>s,Ql=Sr(.25,.1,.25,1),ec=Sr(.42,0,1,1),tc=Sr(0,0,.58,1),rc=Sr(.42,0,.58,1);function Sr(s,e,t,r){const n=3*s-3*t+1,o=3*t-6*s,a=3*s,l=3*e-3*r+1,c=3*r-6*e,h=3*e,u=y=>(3*n*y+2*o)*y+a,d=y=>((n*y+o)*y+a)*y,g=y=>((l*y+c)*y+h)*y;function p(y){let m=y,P,E;for(let w=0;w<8;w++){if(E=d(m)-y,Math.abs(E)<1e-6)return m;if(P=u(m),Math.abs(P)<1e-6)break;m-=E/P}let b=1,S=0;for(m=y;b>S;){if(E=d(m)-y,Math.abs(E)<1e-6)return m;E>0?b=m:S=m,m=(b+S)/2}return m}return y=>g(p(y))}const ls={linear:Jl,ease:Ql,easeIn:ec,easeOut:tc,easeInOut:rc};f.Animation=class extends f.TimelineNode{_keyframes=[];_isFirstUpdatePosition=!1;_cachedProps=new ho;_stoped=!1;constructor(e,t=[]){super(),this.setProperties(e).append(t)}_parented(e){super._parented(e),this._updateCachedProps()}_unparented(e){super._unparented(e),this.cancel()}_process(){this.canProcess()&&this.commitStyles()}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"effectMode":case"keyframes":this._updateKeyframes();break}}_getTargets(){let e;switch(this.effectMode){case"sibling":e=this.getParent()?.getChildren(!0).filter(t=>t instanceof f.CanvasItem)??[];break;case"parent":default:e=[this.getParent()].filter(Boolean);break}return e.map(t=>t.style)}_updateKeyframes(){const e=[],t=this.keyframes;for(let n=t.length,o=0;o<n;o++){const{offset:a=o===0?0:o/(n-1),easing:l="linear",...c}=t[o];e.push({offset:a,easing:this._parseEasing(l),props:c})}const r=e[0],i=e[e.length-1];r&&r.offset!==0&&e.unshift({offset:0,easing:this._parseEasing("linear"),props:{}}),i&&i.offset!==1&&e.push({offset:1,easing:this._parseEasing("linear"),props:{}}),this._keyframes=e,this._updateCachedProps()}commitStyles(){if(!this.keyframes.length)return;if(this._updateCurrentTime(),this.isInsideTimeRange())this._isFirstUpdatePosition||(this._isFirstUpdatePosition=!0,this._updateCachedProps());else{if(!this._isFirstUpdatePosition)return;this._isFirstUpdatePosition=!1}const e=this._getTargets(),t=1/e.length,r=this.currentTimeProgress;e.forEach((i,n)=>{const o=t===1?r:ut(Math.max(0,r-t*n)/t,0,1),a=this._cachedProps.get(i);if(!a)return;const l=this._parseKeyframes(o,a);l?.length&&this._commitStyle(o,i,a,l[0],l[1])})}_updateCachedProps(){this.cancel(),this._getTargets().forEach(e=>{const t=new Map,r=this._keyframes;for(let i=r.length,n=0;n<i;n++)Object.keys(r[n].props).forEach(o=>{t.set(o,e[o])});this._cachedProps.set(e,t)})}_parseEasing(e){if(!e)return ls.linear;if(e in ls)return ls[e];const t=e.replace(/cubic-bezier\((.+)\)/,"$1").split(",").map(r=>Number(r));return Sr(t[0],t[1],t[2],t[3])}_parseKeyframes(e,t){let r;const i=this._keyframes;for(let n=i.length,o=0;o<n;o++){const a=i[o],{offset:l,easing:c}=a,h={...a.props};if(r&&e<=l){const{offset:u,easing:d}=r,g={...r.props};return t.forEach((p,y)=>{(!(y in g)||g[y]===null)&&(g[y]=p),(!(y in h)||h[y]===null)&&(h[y]=p)}),[{offset:u,easing:d,props:g},{offset:l,easing:c,props:h}]}r=a}return null}_commitStyle(e,t,r,i,n){const{offset:o,easing:a,props:l}=i,{offset:c,props:h}=n,u=c-o,d=a((e-o)/u),g={width:t.width,height:t.height,fontSize:t.fontSize};r.forEach((p,y)=>{t[y]=this._getDiffValue(y,l[y],h[y],d,g)})}_getDiffValue(e,t,r,i,n){let o,a;if(t==="none"&&(t=void 0),r==="none"&&(r=void 0),t===void 0||r===void 0)if(t!==void 0)o=Or(e,String(t),n),a=Ss(o);else if(r!==void 0)a=Or(e,String(r),n),o=Ss(a);else return;else o=Or(e,String(t),n),a=Or(e,String(r),n);if(Array.isArray(o)&&Array.isArray(a)){const l=new Set,c={},h={};o.forEach(({name:d,args:g})=>{c[d]=g,l.add(d)}),a.forEach(({name:d,args:g})=>{h[d]=g,l.add(d)});let u="";return l.forEach(d=>{const g=Math.max(c[d]?.length??0,h[d]?.length??0),p=c[d],y=h[d];u+=`${d}(${Array.from({length:g},(m,P)=>{const E=p?.[P],b=y?.[P],S=E?.normalizedIntValue??0,w=b?.normalizedIntValue??0;return Number.isNaN(S)||Number.isNaN(w)?b?.value??0:he(S,w,i)}).join(", ")}) `}),u}else if(!Array.isArray(o)&&!Array.isArray(a))return Number.isNaN(o.normalizedIntValue)||Number.isNaN(a.normalizedIntValue)?a.value:he(o.normalizedIntValue,a.normalizedIntValue,i)}isPlaying(){return!this.paused&&this.isInsideTimeRange()}play(){return this._stoped?(this._stoped=!1,this.startTime=this.timelineCurrentTime):this.startTime=this.timelineCurrentTime-this.currentTime,this.paused=!1,!0}pause(){return this.paused=!0,!0}stop(){return this._stoped=!0,this.paused=!0,this._currentTime=0,!0}cancel(){this._getTargets().forEach(e=>{this._cachedProps.get(e)?.forEach((t,r)=>{e[r]=t}),this._cachedProps.delete(e)})}},as([_({fallback:"parent"})],f.Animation.prototype,"effectMode",2),as([_({default:()=>[]})],f.Animation.prototype,"keyframes",2),as([_()],f.Animation.prototype,"easing",2),f.Animation=as([X("Animation",{renderMode:"disabled",processMode:"pausable",processSortMode:"parent_before",duration:2e3})],f.Animation);class cs extends Dt{static _instance;static get instance(){return this._instance||(this._instance=new cs),this._instance}playbackRate=1;muted=!1;volume=1;paused=!1;refresh(){this.emit("refresh")}refreshPaused(){this.emit("refreshPaused")}get processors(){return console.warn("HTML Audio does not support processors"),[]}set processors(e){console.warn("HTML Audio does not support processors")}get audioContext(){return console.warn("HTML Audio does not support audioContext"),null}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this.paused}}class di extends Dt{static PADDING=.1;_source=null;_audio=null;_end=0;_pausedReal=!1;_duration=0;_start=0;_playing=!1;get progress(){return(this._source?.currentTime??0)/this._duration}_paused=!1;get paused(){return this._paused}set paused(e){this._paused!==e&&(this._paused=e,this.refreshPaused())}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){this._playbackRate!==e&&(this._playbackRate=e,this.refresh())}_volume=1;get volume(){return this._volume}set volume(e){this._volume!==e&&(this._volume=e,this.refresh())}_loop=!1;get loop(){return this._loop}set loop(e){this._loop!==e&&(this._loop=e,this.refresh())}_muted=!1;get muted(){return this._muted}set muted(e){this._muted!==e&&(this._muted=e,this.refresh())}set(e,t){if(this[e]===void 0)throw new Error(`Property with name ${e} does not exist.`);switch(e){case"playbackRate":this.playbackRate=t;break;case"volume":this.volume=t;break;case"paused":this.paused=t;break;case"loop":this.loop=t;break;case"muted":this.muted=t;break}return this}_onPlay(){this._playing=!0}_onPause(){this._playing=!1}init(e){this._playing=!1,this._duration=e.source.duration;const t=this._source=e.source.cloneNode(!1);return t.src=e.parent.src,t.onplay=this._onPlay.bind(this),t.onpause=this._onPause.bind(this),e.context.on("refresh",this.refresh),e.context.on("refreshPaused",this.refreshPaused),this._audio=e,this}_stop(){this._source&&this._playing&&(this._source.onended=null,this._source.pause())}stop(){this._stop(),this._source&&this.emit("stop")}get processors(){return console.warn("HTML Audio does not support processors"),[]}set processors(e){console.warn("HTML Audio does not support processors")}refresh(){if(!this._audio||!this._source)return;const e=this._audio.context,t=this._audio.parent;this._source.loop=this._loop||t.loop;const r=e.volume*(e.muted?0:1),i=t.volume*(t.muted?0:1),n=this._volume*(this._muted?0:1);this._source.volume=n*r*i,this._source.playbackRate=this._playbackRate*e.playbackRate*t.playbackRate}refreshPaused(){if(!this._source||!this._audio)return;const e=this._paused||this._audio.parent.paused||this._audio.context.paused;e!==this._pausedReal&&(this._pausedReal=e,e?(this._stop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._source.currentTime,end:this._end,volume:this._volume,playbackRate:this._playbackRate,loop:this._loop})),this.emit("pause",e))}play(e={}){if(!this._source)return;const{start:t=0,end:r=0}=e;r&&console.assert(r>t,"End time is before start time"),e.playbackRate!==void 0&&(this._playbackRate=e.playbackRate),e.volume!==void 0&&(this._volume=e.volume),e.loop!==void 0&&(this._loop=e.loop),e.muted!==void 0&&(this._muted=e.muted),this.refresh(),this.loop&&r!==null&&(console.warn('Looping not support when specifying an "end" time'),this.loop=!1),this._start=t,this._end=r||this._duration,this._start=Math.max(0,this._start-di.PADDING),this._end=Math.min(this._end+di.PADDING,this._duration),this._source.onloadedmetadata=()=>{this._source&&(this._source.currentTime=t,this._source.onloadedmetadata=null,this.emit("progress",t,this._duration),Ce.on(this._onUpdate))},this._source.onended=this._onComplete.bind(this),this._source.play(),this.emit("start")}_onUpdate=()=>{this._source&&(this.emit("progress",this.progress,this._duration),this._source.currentTime>=this._end&&!this._source.loop&&this._onComplete())};_onComplete(){Ce.off(this._onUpdate),this._stop(),this.emit("progress",1,this._duration),this.emit("end",this)}destroy(){Ce.off(this._onUpdate),super.destroy();const e=this._source;e&&(e.onended=null,e.onplay=null,e.onpause=null,this._stop()),this._source=null,this._playbackRate=1,this._volume=1,this._loop=!1,this._end=0,this._start=0,this._duration=0,this._playing=!1,this._pausedReal=!1,this._paused=!1,this._muted=!1,this._audio&&(this._audio.context.off("refresh",this.refresh),this._audio.context.off("refreshPaused",this.refreshPaused),this._audio=null)}}class ic{constructor(e){this.parent=e}source=new globalThis.Audio;_src="";get src(){return this._src}set src(e){this._src!==e&&(this._src=e,this.load())}get duration(){return this.source.duration}get isPlayable(){return!!this.source&&this.source.readyState===4}get context(){return cs.instance}async load(){return new Promise(e=>{this.source.onload=()=>e(this),this.source.src=this._src,this.source.load()})}createSound(){return new di}}class Yn extends Dt{constructor(e,t){super(),this._input=e,this._output=t}_processers=[];get processors(){return this._processers}set processors(e){if(this._processers.forEach(t=>t.disconnect()),this._processers.length=0,this._input.connect(this._output),e.length){this._processers=e.slice(0),this._input.disconnect();let t;e.forEach(r=>{t?t.connect(r.destination):this._input.connect(r.destination),t=r}),t.connect(this._output)}}get destination(){return this._input}}class Wg{constructor(e,t=null){this.destination=e,this.source=t}connect(e){this.source?.connect(e)}disconnect(){this.source?.disconnect()}}function qg(){if(Ms)return new AudioContext;if(As){const s=globalThis.webkitAudioContext;return new s}else throw new Error("Failed to createAudioContext")}function Xg(s,e,t){if(Os)return new OfflineAudioContext(s,e,t);if(Io){const r=globalThis.webkitOfflineAudioContext;return new r(s,e,t)}else throw new Error("Failed to createOfflineAudioContext")}class jt extends Yn{static _instance;static get instance(){return this._instance||(this._instance=new jt),this._instance}static get audioContext(){return this.instance.audioContext}static get offlineContext(){return this.instance.offlineContext}static setParamValue(e,t){this.instance.setParamValue(e,t)}static decode(e){return this.instance.decode(e)}_context;_offlineContext;get audioContext(){return this._context}get offlineContext(){return this._offlineContext}_locked;muted=!1;volume=1;playbackRate=1;autoPause=!0;_paused=!1;_pausedOnBlur=!1;get paused(){return this._paused}set paused(e){e&&this._context.state==="running"?this._context.suspend():!e&&this._context.state==="suspended"&&this._context.resume(),this._paused=e}_compressor;_analyser;constructor(){const e=qg(),t=Xg(1,2,Os?Math.max(8e3,Math.min(96e3,e.sampleRate)):44100),r=e.createDynamicsCompressor(),i=e.createAnalyser();i.connect(r),r.connect(e.destination),super(i,r),this._context=e,this._offlineContext=t,this._compressor=r,this._analyser=i,this._locked=e.state==="suspended"&&(wt||Do),Dr&&(this._locked&&(this._unlock(),document.addEventListener("mousedown",this._unlock,!0),document.addEventListener("touchstart",this._unlock,!0),document.addEventListener("touchend",this._unlock,!0)),globalThis.addEventListener("focus",this._onFocus),globalThis.addEventListener("blur",this._onBlur))}_onFocus(){if(!this.autoPause)return;const e=this._context.state;(e==="suspended"||e==="interrupted"||!this._locked)&&(this.paused=this._pausedOnBlur,this.refreshPaused())}_onBlur(){this.autoPause&&(this._locked||(this._pausedOnBlur=this._paused,this.paused=!0,this.refreshPaused()))}_unlock=()=>{this._locked&&(this.playEmptySound(),this._context.state==="running"&&(document.removeEventListener("mousedown",this._unlock,!0),document.removeEventListener("touchend",this._unlock,!0),document.removeEventListener("touchstart",this._unlock,!0),this._locked=!1))};playEmptySound(){const e=this._context.createBufferSource();e.buffer=this._context.createBuffer(1,1,22050),e.connect(this._context.destination),e.start(0,0,0),e.context.state==="suspended"&&e.context.resume()}refresh(){this.emit("refresh")}refreshPaused(){this.emit("refreshPaused")}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this._paused}decode(e){return new Promise((t,r)=>{const i=o=>{r(new Error(o?.message||"Unable to decode file"))},n=this._offlineContext.decodeAudioData(e,t,i);n&&n.catch(i)})}setParamValue(e,t){e.setValueAtTime?e.setValueAtTime(t,this._context.currentTime):e.value=t}}class sc extends Dt{_audio=null;_sourceNode=null;_gain=null;_progress=0;get progress(){return this._progress}_pausedReal=!1;_paused=!1;get paused(){return this._paused}set paused(e){this._paused!==e&&(this._paused=e,this.refreshPaused())}_volume=1;get volume(){return this._volume}set volume(e){this._volume!==e&&(this._volume=e,this.refresh())}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){this._playbackRate!==e&&(this._playbackRate=e,this.refresh(),this._update(!0))}_loop=!1;get loop(){return this._loop}set loop(e){this._loop!==e&&(this._loop=e,this.refresh())}_muted=!1;get muted(){return this._muted}set muted(e){this._muted!==e&&(this._muted=e,this.refresh())}_duration=0;_end=0;_elapsed=0;_lastUpdate=this._now();_processors=[];init(e){return this._audio=e,e.context.on("refresh",this.refresh),e.context.on("refreshPaused",this.refreshPaused),this}_now(){return this._audio?.context.audioContext.currentTime??0}play(e={}){if(!this._audio)return;const{end:t=0,start:r=0}=e;t&&console.assert(t>r,"End time is before start time"),this._end=t,this._elapsed=r,e.volume!==void 0&&(this._volume=e.volume),e.playbackRate!==void 0&&(this._playbackRate=e.playbackRate),e.muted!==void 0&&(this._muted=e.muted),e.loop!==void 0&&(this._loop=e.loop),e.processors!==void 0&&(this._processors=e.processors),this._paused=!1;const{source:i,gain:n}=this._audio.cloneSource();this._sourceNode=i,this._gain=n,this.refresh(),i.onended=this._onComplete.bind(this),this._duration=i.buffer?.duration??0,this._lastUpdate=this._now(),this._loop?(i.loopStart=r,i.loopEnd=t,i.start(0,r)):t?i.start(0,r,t-r):i.start(0,r),this.emit("start"),this._update(!0),this._enableTicker(!0)}_stop(){if(this._sourceNode){this._enableTicker(!1),this._sourceNode.onended=null,this._sourceNode.stop(0),this._sourceNode.disconnect();try{this._sourceNode.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._sourceNode=null}}stop(){this._sourceNode&&(this._stop(),this.emit("stop"))}_update(e=!1){if(this._sourceNode){const t=this._now(),r=t-this._lastUpdate;if(r>0||e){this._elapsed+=r*this._sourceNode.playbackRate.value,this._lastUpdate=t;const i=this._duration;let n;if(this._sourceNode.loopStart){const o=this._sourceNode.loopEnd-this._sourceNode.loopStart;n=(this._sourceNode.loopStart+this._elapsed%o)/i}else n=this._elapsed%i/i;this._progress=n,this.emit("progress",n,i)}}}refresh(){if(!this._audio||!this._sourceNode)return;const e=this._audio.context,t=this._audio.parent;this._sourceNode.loop=this._loop||t.loop,e.setParamValue(this._gain.gain,this._volume*(this._muted?0:1)*t.volume*(t.muted?0:1)*e.volume*(e.muted?0:1)),e.setParamValue(this._sourceNode.playbackRate,this._playbackRate*t.playbackRate*e.playbackRate),this.applyProcessors()}applyProcessors(){if(this._sourceNode&&this._processors.length){this._sourceNode.disconnect();let e=this._sourceNode;this._processors.forEach(t=>{e.connect(t.destination),e=t}),e.connect(this._gain)}}refreshPaused(){if(!this._audio)return;const e=this._paused||this._audio.parent.paused||this._audio.context.paused;e!==this._pausedReal&&(this._pausedReal=e,e?(this._stop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._elapsed%this._duration,end:this._end,playbackRate:this._playbackRate,loop:this._loop,volume:this._volume})),this.emit("pause",e))}_onComplete=()=>{if(this._sourceNode){this._enableTicker(!1),this._sourceNode.onended=null,this._sourceNode.disconnect();try{this._sourceNode.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}}this._sourceNode=null,this._progress=1,this.emit("progress",1,this._duration),this.emit("end",this)};_updateListener=()=>this._update();_enableTicker(e){Ce.off(this._updateListener),e&&Ce.on(this._updateListener)}destroy(){super.destroy(),this._stop(),this._gain?.disconnect(),this._gain=null,this._audio?.context.off("refresh",this.refresh),this._audio?.context.off("refreshPaused",this.refreshPaused),this._audio=null,this._processors.forEach(e=>e.disconnect()),this._processors.length=0,this._end=0,this._playbackRate=1,this._volume=1,this._loop=!1,this._elapsed=0,this._duration=0,this._paused=!1,this._muted=!1,this._pausedReal=!1}}class nc extends Yn{constructor(e){const t=jt.audioContext,r=t.createBufferSource(),i=t.createGain(),n=t.createAnalyser();r.connect(n),n.connect(i),i.connect(jt.instance.destination),super(n,i),this.parent=e,this._sourceNode=r,this.gain=i,this.analyser=n}_sourceBuffer;_sourceNode;_sourceLoad;gain;analyser;get context(){return jt.instance}get isPlayable(){return!!this._sourceNode.buffer}get duration(){return this._sourceNode.buffer?.duration??0}get buffer(){return this._sourceNode.buffer}set buffer(e){this._sourceNode.buffer=e}async load(){return this._sourceLoad||(this._sourceLoad=new Promise(e=>{this._sourceBuffer?this._decode(this._sourceBuffer).then(()=>e(this)):this.parent.src?this._loadUrl(this.parent.src).then(()=>e(this)):e(this)})),this._sourceLoad}_loadUrl(e){return new Promise(t=>{fetch(e).then(r=>r.arrayBuffer()).then(r=>this._decode(r)).finally(()=>t(this))})}_decode(e){return Promise.resolve(e instanceof AudioBuffer?e:jt.decode(e)).then(t=>(this.parent.isLoaded=!0,this.buffer=t,t))}cloneSource(){const e=this.context,t=this._sourceNode,r=e.audioContext.createBufferSource(),i=e.audioContext.createGain();return r.buffer=t.buffer,r.loop=t.loop,e.setParamValue(r.playbackRate,t.playbackRate.value),r.connect(i),i.connect(this.destination),{source:r,gain:i}}createSound(){return new sc}}var Hg=Object.defineProperty,Yg=Object.getOwnPropertyDescriptor,Kg=(s,e,t)=>e in s?Hg(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,Zg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Yg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i},Jg=(s,e,t)=>Kg(s,e+"",t);f.Audio=class extends f.TimelineNode{_sounds=[];_platformAudio=Ro?new nc(this):new ic(this);get platformAudio(){return this._platformAudio}_src;get src(){return this._src}set src(e){this._src!==e&&(this._src=e,this.load())}isLoaded=!1;get isPlayable(){return this.isLoaded&&this._platformAudio.isPlayable}get audioDuration(){return this._platformAudio.duration*1e3}_volume=1;get volume(){return this._volume}set volume(e){this._volume!==e&&(this._volume=e,this.refresh())}_muted=!1;get muted(){return this._muted}set muted(e){this._muted!==e&&(this._muted=e,this.refresh())}_loop=!1;get loop(){return this._loop}set loop(e){this._loop!==e&&(this._loop=e,this.refresh())}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){this._playbackRate!==e&&(this._playbackRate=e,this.refresh())}_isPlaying=!1;get isPlaying(){return this._isPlaying}multiple=!1;start=0;end=0;constructor(e=""){super(),this.src=e}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"paused":this.refreshPaused();break}}async load(){return await this._platformAudio.load(),this}pause(){return this._isPlaying=!1,this.paused=!0,this}resume(){return this._isPlaying=this._sounds.length>0,this.paused=!1,this}stop(){if(!this.isPlayable)return this;this._isPlaying=!1;for(let e=this._sounds.length-1;e>=0;e--)this._sounds[e].stop();return this}play(e={}){if(!this.isLoaded)return;this.multiple||this._removeSounds(),this._isPlaying=!0;const t=this._createSound();this._sounds.push(t),t.once("end",()=>{e.complete?.(),this._onComplete(t)}),t.once("stop",()=>this._onComplete(t));const r=(e?.start??this.start)/1e3,i=(e?.end??this.end)/1e3;return t.play({...e,start:r,end:i}),t}_removeSounds(){for(let e=this._sounds.length-1;e>=0;e--)this._recycleSound(this._sounds[e]);this._sounds.length=0}_createSound(){return f.Audio._soundPool.length>0?f.Audio._soundPool.pop().init(this._platformAudio):this._platformAudio.createSound().init(this._platformAudio)}refresh(){for(let e=this._sounds.length,t=0;t<e;t++)this._sounds[t].refresh()}refreshPaused(){for(let e=this._sounds.length,t=0;t<e;t++)this._sounds[t].refreshPaused()}_onComplete=e=>{if(this._sounds){const t=this._sounds.indexOf(e);t>-1&&this._sounds.splice(t,1),this._isPlaying=this._sounds.length>0}this._recycleSound(e)};_recycleSound(e){e.destroy(),f.Audio._soundPool.includes(e)||f.Audio._soundPool.push(e)}_prevTime=0;_timer=0;_process(e){if(super._process(e),this.canProcess()){const t=this._tree?.timeline.currentTime??0;t-this._prevTime>0&&(this._timer||(this._setTimeStop(),this.play({start:this.start+(t-this.delay)%this.duration})),this._isPlaying&&this._setTimeStop()),this._prevTime=t}}_setTimeStop(){this._timer&&clearTimeout(this._timer),this._timer=setTimeout(()=>{this.stop(),this._timer=0},100)}},Jg(f.Audio,"_soundPool",[]),f.Audio=Zg([X("Audio")],f.Audio);class Qg extends f.Node2D{}var em=Object.defineProperty,tm=Object.getOwnPropertyDescriptor,hs=(s,e,t,r)=>{for(var i=r>1?void 0:r?tm(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&em(e,t,i),i};f.AudioWaveform=class extends f.Element2D{_audioBuffer;_src=Dr?new le(document.createElement("canvas")):void 0;_needsUpdateTexture=!1;constructor(e={}){super(),this.setProperties(e)}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"src":this._loadSrc(t);break;case"gap":case"color":case"width":case"height":this._needsUpdateTexture=!0;break}}async _loadSrc(e){await globalThis.fetch(e).then(t=>t.arrayBuffer()).then(t=>jt.decode(t)).then(t=>{this._audioBuffer=t,this.syncTexture(!0)})}syncTexture(e=!1){const t=this._audioBuffer;if(!t||!e&&!this._needsUpdateTexture)return;this._needsUpdateTexture=!1;const r=this._src?.source;if(!r)return;const{width:i=0,height:n=0}=this.style;r.width=i,r.height=n;const o=r.getContext("2d");if(!o){console.warn("Failed to getContext('2d') in syncTexture");return}o.fillStyle=this.color;const a=t.getChannelData(0),l=Math.ceil(a.length/i),c=n/2;for(let h=1,u=-1,d=0;d<i;d++){for(let g=0;g<l;g++){const p=a[d*l+g];p<h&&(h=p),p>u&&(u=p)}if(!this.gap||d%(this.gap*2)===0){const g=d,p=(1+h)*c,y=this.gap||1,m=Math.max(1,(u-h)*c);o.fillRect(g,p,y,m),h=1,u=-1}}this._src?.requestUpload(),this.requestRedraw()}_process(e){this.syncTexture(),super._process(e)}_drawSrc(){const e=this._src;e?.isValid()&&(this.context.fillStyle=e,this.context.uvTransform=new ke().scale(1/this.style.width,1/this.style.height))}},hs([_()],f.AudioWaveform.prototype,"src",2),hs([_({fallback:0})],f.AudioWaveform.prototype,"gap",2),hs([_({fallback:"#000000"})],f.AudioWaveform.prototype,"color",2),f.AudioWaveform=hs([X("AudioWaveform")],f.AudioWaveform);var rm=Object.defineProperty,im=Object.getOwnPropertyDescriptor,sm=(s,e,t)=>e in s?rm(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,nm=(s,e,t,r)=>{for(var i=r>1?void 0:r?im(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i},om=(s,e,t)=>sm(s,e+"",t);f.KawaseTransition=class extends f.Transition{blur=10;quality=10;apply(e,t){const r=this.currentTimeProgress;let i,n;r<.5?(i=0,n=(.5-r)/.5):(i=1,n=(r-.5)/.5);const o=this.blur,a=this.quality,l=t.width,c=t.height,h=[],u=[o];if(o>0){let P=o;const E=o/a;for(let b=1;b<a;b++)P-=E,u.push(P)}const d=1/l,g=1/c,p=[];let y;const m=a-1;for(let P=0;P<m;P++)y=u[P]+.5,p[0]=y*d,p[1]=y*g,h.push({offset:p});y=u[m]+.5,p[0]=y*d,p[1]=y*g,h.push({offset:p}),h.forEach(P=>{Q.draw(e,f.KawaseTransition.material,{sampler:i,progress:n,...P})})}},om(f.KawaseTransition,"material",new re({vert:`attribute vec2 position;
|
|
957
|
+
</svg>`}function wg(){const s=new Tt;return{name:"listStyle",pathSet:s,update:e=>{s.paths.length=0;const{paragraphs:t,isVertical:r,fontSize:i}=e,n=i*.45;t.forEach(o=>{const{computedStyle:a}=o,{color:l,listStyleImage:c,listStyleColormap:h,listStyleSize:u,listStyleType:d}=a,g=Bn(h);let p=u,y;if(!K(c))y=c;else if(!K(d)){const x=i*.38/2;switch(p=p==="cover"?x*2:p,d){case"disc":y=bg(x,String(l));break}}if(!y)return;const m=Ws(y),P=m.getBoundingBox(),E=o.fragments[0]?.characters[0];if(!E)return;const{inlineBox:b}=E,S=p==="cover"?1:Un(p,{total:i,fontSize:i})/i,w=new _e;if(r){const x=i/P.height*S;w.translate(-P.left,-P.top).rotate(Math.PI/2).scale(x,x).translate(b.left+(b.width-P.height*x)/2,b.top-n)}else{const x=i/P.height*S;w.translate(-P.left,-P.top).scale(x,x).translate(b.left-P.width*x-n,b.top+(b.height-P.height*x)/2)}s.paths.push(...m.paths.map(x=>{const T=x.clone();return T.applyTransform(w),T.style.fill&&T.style.fill in g&&(T.style.fill=g[T.style.fill]),T.style.stroke&&T.style.stroke in g&&(T.style.stroke=g[T.style.stroke]),T}))})}}}function xg(){return{name:"outline"}}const $t=new k,Tr=new _e,zt=new _e;function Pg(){const s=new Tt;return{name:"render",pathSet:s,update:e=>{s.paths.length=0;const{paragraphs:t}=e;t.forEach(r=>{r.fragments.forEach(i=>{i.characters.forEach(n=>{s.paths.push(n.path)})})})},getBoundingBox:e=>{const{characters:t,fontSize:r,effects:i}=e,n=[];return t.forEach(o=>{i?.forEach(a=>{if(!o.glyphBox)return;const l=o.glyphBox.clone(),c=Nn(e,a);$t.set(l.left,l.top),$t.applyMatrix3(c),l.left=$t.x,l.top=$t.y,$t.set(l.right,l.bottom),$t.applyMatrix3(c),l.width=$t.x-l.left,l.height=$t.y-l.top;const h=(a.shadowOffsetX??0)*r,u=(a.shadowOffsetY??0)*r,d=Math.max(.1,a.textStrokeWidth??0)*r;l.left+=h-d,l.top+=u-d,l.width+=d*2,l.height+=d*2,n.push(l)})}),n.length?Z.from(...n):void 0},render:(e,t)=>{const{paragraphs:r,glyphBox:i,effects:n}=t;n?n.forEach(o=>{is(o,i,e),e.save();const[a,l,c,h,u,d]=Nn(t,o).transpose().elements;e.transform(a,h,l,u,c,d),t.forEachCharacter(g=>{g.drawTo(e,o)}),e.restore()}):r.forEach(o=>{o.fragments.forEach(a=>{a.characters.forEach(l=>{l.drawTo(e)})})}),t.debug&&r.forEach(o=>{e.strokeRect(o.lineBox.x,o.lineBox.y,o.lineBox.width,o.lineBox.height)})}}}function Nn(s,e){const{fontSize:t,glyphBox:r}=s,i=(e.translateX??0)*t,n=(e.translateY??0)*t,o=Math.PI*2,a=(e.skewX??0)/360*o,l=(e.skewY??0)/360*o,{left:c,top:h,width:u,height:d}=r,g=c+u/2,p=h+d/2;return Tr.identity(),zt.makeTranslation(i,n),Tr.multiply(zt),zt.makeTranslation(g,p),Tr.multiply(zt),zt.set(1,Math.tan(a),0,Math.tan(l),1,0,0,0,1),Tr.multiply(zt),zt.makeTranslation(-g,-p),Tr.multiply(zt),Tr.clone()}function Cg(){const s=new Tt;return{name:"textDecoration",pathSet:s,update:e=>{s.paths.length=0;const t=[];let r,i;e.forEachCharacter(n=>{const{computedStyle:o,isVertical:a,inlineBox:l,underlinePosition:c,underlineThickness:h,strikeoutPosition:u,strikeoutSize:d}=n,{color:g,textDecoration:p,writingMode:y}=o;if(K(p))i=void 0;else{let m=!1;if(i?.textDecoration===p&&i?.writingMode===y&&i?.color===g&&(a?r[0].inlineBox.left===l.left:r[0].inlineBox.top===l.top))switch(p){case"underline":r[0].underlinePosition===c&&r[0].underlineThickness===h&&(m=!0);break;case"line-through":r[0].strikeoutPosition===u&&r[0].strikeoutSize===d&&(m=!0);break}m?r.push(n):(r=[],r.push(n),t.push(r)),i=o}}),t.forEach(n=>{const{computedStyle:o,isVertical:a,underlinePosition:l,underlineThickness:c,strikeoutPosition:h,strikeoutSize:u}=n[0],{color:d,textDecoration:g}=o,p=Z.from(...n.map(T=>T.inlineBox)),{left:y,top:m,width:P,height:E}=p;let b=a?y+P:m;const S=a?-1:1;let w=0;switch(g){case"overline":w=c*2;break;case"underline":b+=S*l,w=c*2;break;case"line-through":b+=S*h,w=u*2;break}b-=w;let x;a?x=new ge([{type:"M",x:b,y:m},{type:"L",x:b,y:m+E},{type:"L",x:b+w,y:m+E},{type:"L",x:b+w,y:m},{type:"Z"}],{fill:d}):x=new ge([{type:"M",x:y,y:b},{type:"L",x:y+P,y:b},{type:"L",x:y+P,y:b+w},{type:"L",x:y,y:b+w},{type:"Z"}],{fill:d}),s.paths.push(x)})},render:(e,t)=>{const{effects:r,computedStyle:i}=t;r?r.forEach(n=>{e.save();const[o,a,l,c,h,u]=Nn(t,n).transpose().elements;e.transform(o,c,a,h,l,u),s.paths.forEach(d=>{Pr({ctx:e,path:d,fontSize:i.fontSize,...n})}),e.restore()}):s.paths.forEach(n=>{Pr({ctx:e,path:n,fontSize:i.fontSize})})}}}var Tg=Object.defineProperty,Vt=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&Tg(e,t,i),i};const Wl=Po();class kt extends bs{needsUpdate=!0;computedStyle={...Wl};paragraphs=[];lineBox=new Z;rawGlyphBox=new Z;glyphBox=new Z;pathBox=new Z;boundingBox=new Z;measurer=new ss;plugins=new Map;pathSets=[];get fontSize(){return this.computedStyle.fontSize}get isVertical(){return this.computedStyle.writingMode.includes("vertical")}get characters(){return this.paragraphs.flatMap(e=>e.fragments.flatMap(t=>t.characters))}constructor(e={}){super(),this.set(e)}set(e={}){const{content:t,effects:r,style:i,measureDom:n,fonts:o,fill:a,outline:l}=To(e);this.debug=e.debug??!1,this.content=t,this.effects=r,this.style=i,this.measureDom=n,this.fonts=o,this.fill=a,this.outline=l,this.use(vg()).use(xg()).use(wg()).use(Cg()).use(_g()).use(Pg()),(e.plugins??[]).forEach(c=>{this.use(c)}),this.updateParagraphs()}use(e){return this.plugins.set(e.name,e),this}forEachCharacter(e){return this.paragraphs.forEach((t,r)=>{t.fragments.forEach((i,n)=>{i.characters.forEach((o,a)=>{e(o,{paragraphIndex:r,fragmentIndex:n,characterIndex:a})})})}),this}async load(){await Promise.all(Array.from(this.plugins.values()).map(e=>e.load?.(this)))}updateParagraphs(){this.computedStyle={...Wl,...this.style};const{content:e}=this,t=[];return e.forEach((r,i)=>{const{fragments:n,fill:o,outline:a,...l}=r,c=new yg(l,i,this);c.fill=o,c.outline=a,n.forEach((h,u)=>{const{content:d,fill:g,outline:p,...y}=h;if(d!==void 0){const m=new mg(d,y,u,c);c.fragments.push(m),m.fill=g,m.outline=p}}),t.push(c)}),this.paragraphs=t,this}createDom(){return this.updateParagraphs(),this.measurer.createDom(this.paragraphs,this.computedStyle)}measure(e=this.measureDom){const t={paragraphs:this.paragraphs,lineBox:this.lineBox,rawGlyphBox:this.rawGlyphBox,glyphBox:this.glyphBox,pathBox:this.pathBox,boundingBox:this.boundingBox};this.updateParagraphs();const r=this.measurer.measure(this.paragraphs,this.computedStyle,e);this.paragraphs=r.paragraphs,this.lineBox=r.boundingBox,this.characters.forEach(i=>{i.update(this.fonts)}),this.rawGlyphBox=this.getGlyphBox(),Array.from(this.plugins.values()).sort((i,n)=>(i.updateOrder??0)-(n.updateOrder??0)).forEach(i=>{i.update?.(this)}),this.pathSets.length=0,Array.from(this.plugins.values()).sort((i,n)=>(i.renderOrder??0)-(n.renderOrder??0)).forEach(i=>{i.pathSet?.paths.length&&this.pathSets.push(i.pathSet)}),this.glyphBox=this.getGlyphBox(),this.updatePathBox().updateBoundingBox();for(const i in t)r[i]=this[i],this[i]=t[i];return this.emit("measure",{text:this,result:r}),r}getGlyphBox(){const e=k.MAX,t=k.MIN;return this.characters.forEach(r=>{if(!r.getGlyphMinMax(e,t)){const{inlineBox:i}=r,{left:n,top:o,width:a,height:l}=i,c=new k(n,o),h=new k(n+a,o+l);e.min(c,h),t.max(c,h)}}),new Z(e.x,e.y,t.x-e.x,t.y-e.y)}updatePathBox(){return this.pathBox=Z.from(this.glyphBox,...Array.from(this.plugins.values()).map(e=>e.getBoundingBox?e.getBoundingBox(this):e.pathSet?.getBoundingBox()).filter(Boolean)),this}updateBoundingBox(){return this.boundingBox=Z.from(this.rawGlyphBox,this.lineBox,this.pathBox),this}requestUpdate(){return this.needsUpdate=!0,this}update(e=this.measureDom){this.needsUpdate=!1;const t=this.measure(e);for(const r in t)this[r]=t[r];return this.emit("update",{text:this}),this}render(e){const{view:t,pixelRatio:r=2}=e,i=t.getContext("2d");i&&(this.needsUpdate&&this.update(),cg(i,r,this.boundingBox),hg(i,this),Array.from(this.plugins.values()).sort((n,o)=>(n.renderOrder??0)-(o.renderOrder??0)).forEach(n=>{if(n.render)n.render?.(i,this);else if(n.pathSet){const o=this.computedStyle;n.pathSet.paths.forEach(a=>{Pr({ctx:i,path:a,fontSize:o.fontSize})})}}),this.emit("render",{text:this,view:t,pixelRatio:r}),e.onContext?.(i))}toString(){return this.content.flatMap(e=>e.fragments.map(t=>t.content)).join("")}}Vt([_({internal:!0})],kt.prototype,"debug"),Vt([_()],kt.prototype,"content"),Vt([_()],kt.prototype,"style"),Vt([_()],kt.prototype,"effects"),Vt([_()],kt.prototype,"fill"),Vt([_()],kt.prototype,"outline"),Vt([_({internal:!0})],kt.prototype,"measureDom"),Vt([_({internal:!0})],kt.prototype,"fonts");var Sg=Object.defineProperty,Gt=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&Sg(e,t,i),i};class vt extends xt{constructor(e){super(),this.parent=e,this.base=new kt,this.base.setPropertyAccessor(this)}base;_texture=new Ui;_textureMap=new Map;setProperties(e){return super.setProperties(K(e)?void 0:To(e))}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"enabled":this.parent.requestRedraw();break;case"effects":case"measureDom":case"fonts":this.update();break;case"fill":case"outline":case"content":this.update(),this._updateTextureMap();break}}update(){this.base.fonts=this.base.fonts??this.parent.tree?.fonts,this.base.update(),this.parent.requestRedraw()}_updateTextureMap(){this._textureMap.clear();const e=[];if(this.base.paragraphs.forEach((t,r)=>{const i=[];if(t.fragments.forEach((n,o)=>{if(n.characters.length){const a=Z.from(...n.characters.map(l=>l.compatibleGlyphBox));this._updateTexture(`${r}.${o}.fill`,n.fill,a),this._updateTexture(`${r}.${o}.outline`,n.outline,a),i.push(a)}}),i.length){const n=Z.from(...i);this._updateTexture(`${r}.fill`,t.fill,n),this._updateTexture(`${r}.outline`,t.outline,n),e.push(n)}}),e.length){const t=Z.from(...e);this._updateTexture("fill",this.fill,t),this._updateTexture("outline",this.outline,t)}}async _updateTexture(e,t,r){t&&Object.keys(t).length>0&&(this._textureMap.set(e,{texture:await this._loadTexture(t,r),box:r}),this.parent.requestRedraw())}async _loadTexture(e,t){return e.linearGradient||e.radialGradient?new zr(e.linearGradient??e.radialGradient,t.width,t.height):K(e.image)?void 0:(this.parent.tree?.log(`load image ${e.image}`),await Ke.texture.load(e.image))}setContent(e){this.content=Ps(e)}measure(){return this.update(),this.base.measure()}isValid(){return!!(this.enabled&&!/^\s*$/.test(this.base.toString()))}_createVertTransform(){const e=this.parent;if(e.scale.x>0&&e.scale.y>0)return;const t=e.scale.x*e.scale.y,r=e.getTransformOrigin();return new ke().translate(-r.x,-r.y).scale(t>0?1:-1,1).translate(r.x,r.y)}useTextureDraw(){return!!this.effects?.length||this.content.some(e=>e.fragments.some(t=>!!t.highlightImage))}_pathDraw(e){this.base.pathSets.forEach(t=>{t.paths.forEach(r=>{const i=r.getMeta();if(i instanceof Vl){const n=i.parent.index,o=i.parent.parent.index;if(r.style.fill&&!K(r.style.fill))if(typeof r.style.fill=="object"){const a=r.style.fill,l=this._textureMap.get(`${o}.${n}.fill`)??this._textureMap.get(`${o}.fill`)??this._textureMap.get("fill");if(a.enabled!==!1&&(l||a.color)){const{uvTransform:c,disableWrapMode:h}=rs(a,l?.box??{width:this.parent.size.width,height:this.parent.size.height});e.addPath(r),e.style={...r.style},e.uvTransform=c,e.fillStyle=l?.texture??a.color,e.vertTransform=this._createVertTransform(),e.fill({disableWrapMode:h})}}else e.addPath(r),e.style={...r.style},e.vertTransform=this._createVertTransform(),e.fill();if(r.style.stroke&&!K(r.style.stroke))if(typeof r.style.stroke=="object"){const a=r.style.stroke,l=this._textureMap.get(`${o}.${n}.outline`)??this._textureMap.get(`${o}.outline`)??this._textureMap.get("outline");if(a.enabled!==!1&&(l||a.color)&&(a.width===void 0||a.width)){const{uvTransform:c,disableWrapMode:h}=rs(a,l?.box??{width:this.parent.size.width,height:this.parent.size.height});e.addPath(r),e.style={...r.style},e.lineWidth=a.width||1,e.uvTransform=c,e.strokeStyle=l?.texture??a.color,e.lineCap=a.lineCap,e.lineJoin=a.lineJoin,e.vertTransform=this._createVertTransform(),e.stroke({disableWrapMode:h})}}else e.addPath(r),e.style={...r.style},e.vertTransform=this._createVertTransform(),e.stroke()}else e.addPath(r),e.style={...r.style},e.vertTransform=this._createVertTransform(),e.fill()})})}_textureDraw(e){this._texture.width=Math.round(this.base.boundingBox.width),this._texture.height=Math.round(this.base.boundingBox.height),this.base.render({view:this._texture.source}),e.fillStyle=this._texture,e.vertTransform=this._createVertTransform(),e.fill()}draw(){const e=this.parent.context;this.useTextureDraw()?this._textureDraw(e):this._pathDraw(e)}}Gt([_({fallback:!0})],vt.prototype,"enabled"),Gt([_({fallback:()=>[]})],vt.prototype,"content"),Gt([_({alias:"parent.style.json"})],vt.prototype,"style"),Gt([_()],vt.prototype,"effects"),Gt([_()],vt.prototype,"fill"),Gt([_()],vt.prototype,"outline"),Gt([_({alias:"base.measureDom"})],vt.prototype,"measureDom"),Gt([_({alias:"base.fonts"})],vt.prototype,"fonts");var Eg=Object.getOwnPropertyDescriptor,Mg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Eg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i};const Ag=new Set(Object.keys(wo())),Og=new Set(Object.keys(xo()));f.BaseElement2D=class extends f.Node2D{size=new de().on("update",()=>{this.updateGlobalTransform(),this.requestRedraw()});get style(){return this._style}set style(e){const t=(...r)=>{this.emit("updateStyleProperty",r[0],r[1],r[2]),this._updateStyleProperty(r[0],r[1],r[2])};e.on("updateProperty",t),this._style?.off("updateProperty",t),this._style=e}_background=new Dn(this);get background(){return this._background}set background(e){this._background.resetProperties().setProperties(e)}_shape=new ir(this);get shape(){return this._shape}set shape(e){this._shape.resetProperties().setProperties(e)}_fill=new Oe(this);get fill(){return this._fill}set fill(e){this._fill.resetProperties().setProperties(e)}_outline=new tr(this);get outline(){return this._outline}set outline(e){this._outline.resetProperties().setProperties(e)}_foreground=new In(this);get foreground(){return this._foreground}set foreground(e){this._foreground.resetProperties().setProperties(e)}_text=new vt(this);get text(){return this._text}set text(e){this._text.resetProperties().setProperties(e)}_shadow=new rr(this);get shadow(){return this._shadow}set shadow(e){this._shadow.resetProperties().setProperties(e)}constructor(e,t=[]){super(),this._updateStyleProperty=this._updateStyleProperty.bind(this),this.style=new ui,this.setProperties(e).append(t)}_treeEnter(e){super._treeEnter(e),this._text.isValid()&&this._text.update()}setProperties(e){if(e){const{style:t,text:r,shape:i,background:n,fill:o,outline:a,foreground:l,shadow:c,...h}=e;t&&this.style.setProperties(t),n&&this.background.setProperties(n),i&&this.shape.setProperties(i),o&&this.fill.setProperties(o),a&&this.outline.setProperties(a),r&&this.text.setProperties(r),l&&this.foreground.setProperties(l),c&&this.shadow.setProperties(c),super.setProperties(h)}return this}_updateStyleProperty(e,t,r){switch(e){case"rotate":this.rotation=this.style.rotate*Xo;break;case"scaleX":this.scale.x=this.style.scaleX,this.text.isValid()&&(t^r)<0&&this.requestRedraw();break;case"scaleY":this.scale.y=this.style.scaleY,this.text.isValid()&&(t^r)<0&&this.requestRedraw();break;case"skewX":this.skew.x=this.style.skewX;break;case"skewY":this.skew.y=this.style.skewY;break;case"transform":case"transformOrigin":this.updateGlobalTransform();break;case"opacity":this.opacity=this.style.opacity;break;case"visibility":this.visible=this.style.visibility==="visible";break;case"filter":this.requestRepaint();break;case"maskImage":this._updateMaskImage();break;case"backgroundColor":this.background.color=this.style.backgroundColor;break;case"backgroundImage":this.background.image=this.style.backgroundImage;break;case"borderStyle":case"outlineStyle":this.outline.style=t;break;case"borderWidth":case"outlineWidth":this.outline.width=t;break;case"borderColor":case"outlineColor":this.outline.color=t;break;case"borderRadius":default:this.requestRedraw();break}(Og.has(e)||Ag.has(e))&&this.text.isValid()&&this.text.update()}_process(e){this.foreground.updateFrameIndex(),this.fill.updateFrameIndex(),this.outline.updateFrameIndex(),this.background.updateFrameIndex(),super._process(e)}_updateMaskImage(){const e="__$style.maskImage",t=this.style.maskImage;if(t&&t!=="none"){const r=this.getNode(e);r?r.src=t:this.appendChild(new f.MaskEffect({name:e,src:t}),"back")}else{const r=this.getNode(e);r&&this.removeChild(r)}}getTransformOrigin(){const{width:e,height:t}=this.size,[r,i]=ml(this.style.transformOrigin);return new de(r*e,i*t)}updateTransform(e){const{width:t,height:r}=this.size;super.updateTransform(i=>{gl(this.style.transform??"",t,r,i),e?.(i)})}updateGlobalTransform(){super.updateGlobalTransform(),this._updateOverflow()}_relayout(e){return super._relayout(e).map(t=>({...t,dimension:this.size.toFloat32Array()}))}getRect(){return this.getGlobalAabb()}_getPointArray(){const{width:e,height:t}=this.size,r=0,i=0,n=r+e,o=i+t;return[{x:r,y:i},{x:r,y:o},{x:n,y:i},{x:n,y:o}]}getAabb(){return new It(this._getPointArray().map(e=>this.transform.apply(e)))}getGlobalAabb(){return new It(this._getPointArray().map(e=>this.globalTransform.apply(e)))}getObb(){const e=this.getTransformOrigin(),t=this.transform.apply(e).sub(e);return{rect:new It(this._getPointArray().map(r=>(r.x+=t.x,r.y+=t.y,r))),rotation:this.rotation}}getGlobalObb(){const e=this.getTransformOrigin(),t=this.globalTransform.apply(e).sub(e);return{rect:new It(this._getPointArray().map(r=>(r.x+=t.x,r.y+=t.y,r))),rotation:this.globalRotation}}_updateOverflow(){this.style.overflow==="hidden"?this.mask=this.getRect().toJSON():this.mask=void 0}_draw(){super._draw(),this._background.isValid()&&(this._tree?.log(this.name,"background drawing"),this._shape.draw(!this._background.fillWithShape),this._background.draw()),this._fill.isValid()&&(this._tree?.log(this.name,"fill drawing"),this._shape.draw(),this._fill.draw()),this._outline.isValid()&&(this._tree?.log(this.name,"outline drawing"),this._shape.draw(),this._outline.draw()),this._foreground.isValid()&&(this._tree?.log(this.name,"foreground drawing"),this._shape.draw(!this._foreground.fillWithShape),this._foreground.draw()),this._text.isValid()&&(this._tree?.log(this.name,"text drawing"),this._text.useTextureDraw()&&this._shape.draw(!0),this._text.draw()),this._drawContent()}_drawContent(){}_repaint(e){return super._repaint(e).map(t=>({...t}))}canPointerEvents(){return this.style.pointerEvents!=="none"}input(e,t){const r=this.getChildren(!0);for(let i=r.length-1;i>=0;i--)r[i].input(e,t);this.isVisibleInTree()&&this._input(e,t)}_positionInput(e,t){const{width:r,height:i}=this.size;return e.x>=0&&e.x<r&&e.y>=0&&e.y<i}_input(e,t){switch(t){case"pointerdown":case"pointermove":case"pointerup":{if(this.canPointerEvents()){const{screenX:r,screenY:i}=e;if(r&&i){const n=new de(r,i),o=this.getViewport();o&&o.toCanvasGlobal(n,n),this.toLocal(n,n),this._positionInput(n,t)&&(e.target||(e.target=this),this.emit(t,e))}}break}}}toJSON(){const e=t=>Object.keys(t).length>0?t:void 0;return Ve({...super.toJSON(),style:e(this.style.toJSON()),background:e(this.background.toJSON()),shape:e(this.shape.toJSON()),fill:e(this.fill.toJSON()),outline:e(this.outline.toJSON()),text:e(this.text.toJSON()),foreground:e(this.foreground.toJSON()),shadow:e(this.shadow.toJSON())})}},f.BaseElement2D=Mg([X("BaseElement2D")],f.BaseElement2D);class $n extends ui{constructor(e){super(),this.setProperties(e)}}const ql={left:0,top:0,width:0,height:0};for(const s in ql)mi($n,s,{fallback:ql[s]});class Xl extends ui{constructor(e){super(),this.setProperties(e)}}var kg=Object.getOwnPropertyDescriptor,Dg=(s,e,t,r)=>{for(var i=r>1?void 0:r?kg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i};f.Element2D=class extends f.BaseElement2D{get style(){return this._style}set style(e){const t=(...r)=>{this.emit("updateStyleProperty",r[0],r[1],r[2]),this._updateStyleProperty(r[0],r[1],r[2])};e.on("updateProperty",t),this._style?.off("updateProperty",t),this._style=e}constructor(e,t=[]){super(),this.style=new $n,this.setProperties(e).append(t)}_updateStyleProperty(e,t,r){switch(super._updateStyleProperty(e,t,r),e){case"left":this.position.x=Number(t);break;case"top":this.position.y=Number(t);break;case"width":this.size.width=Number(t);break;case"height":this.size.height=Number(t);break}switch(e){case"width":case"height":this.mask instanceof f.BaseElement2D&&(this.mask.size.width=this.size.width,this.mask.size.height=this.size.height);break}}},f.Element2D=Dg([X("Element2D")],f.Element2D);const fe={left:0,top:1,right:2,bottom:3,start:4,end:5,horizontal:6,vertical:7,all:8},Hl={column:0,row:1,all:2},sr={auto:0,"flex-start":1,center:2,"flex-end":3,stretch:4,baseline:5,"space-between":6,"space-around":7,"space-evenly":8},zn={flex:0,none:1,contents:2},ns={inherit:0,ltr:1,rtl:2},Vn={column:0,"column-reverse":1,row:2,"row-reverse":3},Gn={"no-wrap":0,wrap:1,"Wrap-reverse":2},jn={"flex-start":0,center:1,"flex-end":2,"space-between":3,"space-around":4,"space-evenly":5},Wn={visible:0,hidden:1,scroll:2},qn={static:0,relative:1,absolute:2},Xn={"border-box":0,"content-box":1};class os{constructor(e){this._element=e}static _yoga;static async load(){const{loadYoga:e}=await import("yoga-layout/load");this._yoga=await e()}_node=os._yoga.Node.create();get _style(){return this._element.style}get offsetLeft(){return this._node.getComputedLeft()}get offsetTop(){return this._node.getComputedTop()}get offsetWidth(){return this._node.getComputedWidth()}get offsetHeight(){return this._node.getComputedHeight()}calculateLayout(e,t,r){return this._node.calculateLayout(e,t,r)}getComputedLayout(){return this._node.getComputedLayout()}updateStyleProperty(e,t,r){switch(e){case"alignContent":this._node.setAlignContent(t?sr[t]:sr["flex-start"]);break;case"alignItems":this._node.setAlignItems(t?sr[t]:sr["flex-start"]);break;case"alignSelf":this._node.setAlignSelf(t?sr[t]:sr["flex-start"]);break;case"aspectRatio":this._node.setAspectRatio(t);break;case"borderTop":this._node.setBorder(fe.top,this._style.borderWidth);break;case"borderBottom":this._node.setBorder(fe.bottom,this._style.borderWidth);break;case"borderLeft":this._node.setBorder(fe.left,this._style.borderWidth);break;case"borderRight":this._node.setBorder(fe.right,this._style.borderWidth);break;case"border":this._node.setBorder(fe.all,this._style.borderWidth);break;case"direction":this._node.setDirection(t?ns[t]:ns.inherit);break;case"display":this._node.setDisplay(t?zn[t]:zn.flex);break;case"flex":this._node.setFlex(this._style.flex);break;case"flexBasis":this._node.setFlexBasis(this._style.flexBasis);break;case"flexDirection":this._node.setFlexDirection(t?Vn[t]:Vn.row);break;case"flexGrow":this._node.setFlexGrow(this._style.flexGrow);break;case"flexShrink":this._node.setFlexShrink(this._style.flexShrink);break;case"flexWrap":this._node.setFlexWrap(t?Gn[t]:Gn.wrap);break;case"height":this._node.setHeight(this._style.height);break;case"justifyContent":this._node.setJustifyContent(t?jn[t]:jn["flex-start"]);break;case"gap":t!==void 0&&this._node.setGap(Hl.all,t);break;case"marginTop":this._node.setMargin(fe.top,t);break;case"marginBottom":this._node.setMargin(fe.bottom,t);break;case"marginLeft":this._node.setMargin(fe.left,t);break;case"marginRight":this._node.setMargin(fe.right,t);break;case"margin":this._node.setMargin(fe.all,t);break;case"maxHeight":this._node.setMaxHeight(t);break;case"maxWidth":this._node.setMaxWidth(t);break;case"minHeight":this._node.setMinHeight(this._style.minHeight);break;case"minWidth":this._node.setMinWidth(this._style.minWidth);break;case"overflow":this._node.setOverflow(t?Wn[t]:Wn.visible);break;case"paddingTop":this._node.setPadding(fe.top,this._style.paddingTop);break;case"paddingBottom":this._node.setPadding(fe.bottom,this._style.paddingBottom);break;case"paddingLeft":this._node.setPadding(fe.left,this._style.paddingLeft);break;case"paddingRight":this._node.setPadding(fe.right,this._style.paddingRight);break;case"padding":this._node.setPadding(fe.all,this._style.padding);break;case"top":this._node.setPosition(fe.top,this._style.top);break;case"bottom":this._node.setPosition(fe.bottom,this._style.bottom);break;case"left":this._node.setPosition(fe.left,this._style.left);break;case"right":this._node.setPosition(fe.right,this._style.right);break;case"position":this._node.setPositionType(t?qn[t]:qn.static);break;case"boxSizing":this._node.setBoxSizing(t?Xn[t]:Xn["content-box"]);break;case"width":this._node.setWidth(this._style.width);break}}}var Ig=Object.getOwnPropertyDescriptor,Rg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Ig(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i};f.FlexElement2D=class extends f.BaseElement2D{get style(){return this._style}set style(e){const t=(...r)=>{this.emit("updateStyleProperty",r[0],r[1],r[2]),this._updateStyleProperty(r[0],r[1],r[2])};e.on("updateProperty",t),this._style?.off("updateProperty",t),this._style=e}_layout=new os(this);get offsetLeft(){return this._layout.offsetLeft}get offsetTop(){return this._layout.offsetTop}get offsetWidth(){return this._layout.offsetWidth}get offsetHeight(){return this._layout.offsetHeight}constructor(e,t=[]){super(),this.style=new Xl,this.setProperties(e).append(t)}_parented(e){super._parented(e),e._layout&&this._layout._node&&e._layout._node.insertChild(this._layout._node,e._layout._node.getChildCount())}_unparented(e){super._unparented(e),e._layout?._node&&e._layout._node.removeChild(this._layout._node)}_updateStyleProperty(e,t,r){super._updateStyleProperty(e,t,r),this._layout.updateStyleProperty(e,t,r),this._layout._node.isDirty()&&this.requestRelayout()}updateTransform(){this.calculateLayout(void 0,void 0,ns.ltr);const{left:e,top:t,width:r,height:i}=this._layout.getComputedLayout();this.position.x=e,this.position.y=t,this.size.x=r,this.size.y=i,super.updateTransform()}calculateLayout(e,t,r){const i=this.getParent();i?._layout?.calculateLayout?i?._layout.calculateLayout(e,t,r):this._layout.calculateLayout(e,t,r)}},f.FlexElement2D=Rg([X("FlexElement2D")],f.FlexElement2D);var Ug=Object.defineProperty,Bg=Object.getOwnPropertyDescriptor,fi=(s,e,t,r)=>{for(var i=r>1?void 0:r?Bg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&Ug(e,t,i),i};f.Image2D=class extends f.Element2D{get currentFrameTexture(){return this.texture?.frames[this._frameIndex]?.texture}get textureDuration(){return this.texture?.duration??0}get naturalWidth(){return this.currentFrameTexture?.realWidth??0}get naturalHeight(){return this.currentFrameTexture?.realHeight??0}get complete(){return this._complete}_frameIndex=0;_complete=!1;_wait=Promise.resolve();constructor(e,t=[]){super(),this.setProperties(e),this.append(t)}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"src":this._wait=this._load(t);break;case"srcRect":this.requestRedraw();break}}decode(){return this._wait}setResource(e){let t;if(e instanceof Ri?t=e:t=new Ri(e),this.texture=t.updateDuration(),this.currentFrameTexture&&(!this.style.width||!this.style.height)){const r=this.currentFrameTexture;this.style.width=r.realWidth,this.style.height=r.realHeight}return this}async _load(e){if(this._complete=!1,e)try{this.setResource(this.gif||e?.includes(".gif")?await Ke.gif.load(e):await Ke.texture.load(e)),this.requestRedraw(),this.emit("load")}catch(t){console.warn(t),this.emit("error",t)}else this.texture=void 0;this._complete=!0}_getFrameCurrentTime(){const e=this.textureDuration;if(!e||!this._tree)return 0;const t=this._currentTime;return t<0?0:t%e}_updateFrameIndex(){if(!this.texture)return this;const e=this._getFrameCurrentTime(),t=this.texture.frames,r=t.length;if(r<=1&&this._frameIndex===0)return this;let i=r-1;for(let n=0,o=0;o<r;o++)if(n+=t[o].duration??0,n>=e){i=o;break}return this._frameIndex!==i&&(this._frameIndex=i,this.requestRedraw()),this}_process(e){this._updateFrameIndex(),super._process(e)}_drawContent(){const e=this.currentFrameTexture;if(e?.isValid()){const{left:t=0,top:r=0,right:i=0,bottom:n=0}=this.srcRect??{},{width:o,height:a}=this.size;this.context.fillStyle=e;const l=Math.abs(1+(t+i))*o,c=Math.abs(1+(r+n))*a,h=1/l,u=1/c,d=t*o*h,g=r*a*u;this.context.uvTransform=new ke().scale(h,u).translate(d,g),this.shape.draw(),this.context.fill()}}_repaint(e){return super._repaint(e).map(t=>({...t,disableWrapMode:!0}))}},fi([_({internal:!0})],f.Image2D.prototype,"texture",2),fi([_({fallback:""})],f.Image2D.prototype,"src",2),fi([_()],f.Image2D.prototype,"srcRect",2),fi([_({fallback:!1})],f.Image2D.prototype,"gif",2),f.Image2D=fi([X("Image2D")],f.Image2D);class Hn extends f.Element2D{texture;constructor(e,t=[]){super(),this.setProperties(e).append(t)}_drawContent(){this.texture?.isValid()&&(this.shape.draw(!0),this.context.fillStyle=this.texture,this.context.fill())}}var Lg=Object.defineProperty,Fg=Object.getOwnPropertyDescriptor,Yl=(s,e,t,r)=>{for(var i=r>1?void 0:r?Fg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&Lg(e,t,i),i};f.Lottie2D=class extends Hn{texture=new Ui;animation;constructor(e,t=[]){super(),this.setProperties(e),this.append(t)}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"src":this._load();break}}_updateStyleProperty(e,t,r){switch(super._updateStyleProperty(e,t,r),e){case"width":this.texture.width=this.style.width;break;case"height":this.texture.height=this.style.height;break}}async _load(){this.animation=await Ke.lottie.load(this.src,this.texture.source),this.duration=this.animation.getDuration(!1)*1e3,this.texture.requestUpload(),this.requestRedraw()}_process(e){this.animation?.goToAndStop(this.currentTime,!1),this.texture.requestUpload(),this.requestRedraw(),super._process(e)}},Yl([_({fallback:""})],f.Lottie2D.prototype,"src",2),f.Lottie2D=Yl([X("Lottie2D")],f.Lottie2D);var Ng=Object.defineProperty,$g=(s,e,t,r)=>{for(var i=void 0,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(e,t,i)||i);return i&&Ng(e,t,i),i};class Kl extends f.Element2D{constructor(e,t=[]){super(),this.setProperties(e).append(t)}_updateStyleProperty(e,t,r){switch(super._updateStyleProperty(e,t,r),e){case"width":case"height":this.requestRedraw();break}}_drawCircle(e,t){this.context.arc(e,t,this.handleSize,0,Math.PI*2,!0),this.context.fillStyle=le.WHITE,this.context.fill(),this.context.arc(e,t,this.handleSize,0,Math.PI*2,!0),this.context.strokeStyle="rgba(0, 0, 0, 0.2)",this.context.stroke()}_drawEllipse(e,t){this.context.roundRect(e-this.handleSize,t-this.handleSize*2,this.handleSize*2,this.handleSize*4,this.handleSize),this.context.fillStyle=le.WHITE,this.context.fill(),this.context.roundRect(e-this.handleSize,t-this.handleSize*2,this.handleSize*2,this.handleSize*4,this.handleSize),this.context.strokeStyle="rgba(0, 0, 0, 0.2)",this.context.stroke()}_draw(){const{width:e,height:t}=this.getRect();this.context.rect(0,0,e,t),this.context.strokeStyle="#00FF00",this.context.stroke(),this._drawCircle(0,0),this._drawCircle(e,t),this._drawCircle(0,t),this._drawEllipse(0,t/2),this._drawCircle(e,0),this._drawEllipse(e,t/2)}}$g([_({fallback:6})],Kl.prototype,"handleSize");var zg=Object.defineProperty,Vg=Object.getOwnPropertyDescriptor,Zl=(s,e,t,r)=>{for(var i=r>1?void 0:r?Vg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&zg(e,t,i),i};f.Video2D=class extends Hn{get videoDuration(){return(this.texture?.duration??0)*1e3}_wait=Promise.resolve();constructor(e,t=[]){super(),this.setProperties(e),this.append(t)}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"src":this._wait=this._load(t);break}}waitLoad(){return this._wait}async _load(e){this.texture=await Ke.video.load(e),(!this.style.width||!this.style.height)&&(this.style.width=this.texture.width,this.style.height=this.texture.height),this.requestRedraw()}_updateVideoCurrentTime(){let e=this._currentTime;if(e<0)return;const t=this.texture;if(!t)return;const r=t.duration;e=r?e%(r*1e3):0,!t.isPlaying&&!t.seeking&&(e=~~e/1e3,t.currentTime!==e&&(t.currentTime=e))}_process(e){this._updateVideoCurrentTime(),super._process(e)}},Zl([_({fallback:""})],f.Video2D.prototype,"src",2),f.Video2D=Zl([X("Video2D")],f.Video2D);var Gg=Object.defineProperty,jg=Object.getOwnPropertyDescriptor,as=(s,e,t,r)=>{for(var i=r>1?void 0:r?jg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&Gg(e,t,i),i};const Jl=s=>s,Ql=Sr(.25,.1,.25,1),ec=Sr(.42,0,1,1),tc=Sr(0,0,.58,1),rc=Sr(.42,0,.58,1);function Sr(s,e,t,r){const n=3*s-3*t+1,o=3*t-6*s,a=3*s,l=3*e-3*r+1,c=3*r-6*e,h=3*e,u=y=>(3*n*y+2*o)*y+a,d=y=>((n*y+o)*y+a)*y,g=y=>((l*y+c)*y+h)*y;function p(y){let m=y,P,E;for(let w=0;w<8;w++){if(E=d(m)-y,Math.abs(E)<1e-6)return m;if(P=u(m),Math.abs(P)<1e-6)break;m-=E/P}let b=1,S=0;for(m=y;b>S;){if(E=d(m)-y,Math.abs(E)<1e-6)return m;E>0?b=m:S=m,m=(b+S)/2}return m}return y=>g(p(y))}const ls={linear:Jl,ease:Ql,easeIn:ec,easeOut:tc,easeInOut:rc};f.Animation=class extends f.TimelineNode{_keyframes=[];_isFirstUpdatePosition=!1;_cachedProps=new ho;_stoped=!1;constructor(e,t=[]){super(),this.setProperties(e).append(t)}_parented(e){super._parented(e),this._updateCachedProps()}_unparented(e){super._unparented(e),this.cancel()}_process(){this.canProcess()&&this.commitStyles()}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"effectMode":case"keyframes":this._updateKeyframes();break}}_getTargets(){let e;switch(this.effectMode){case"sibling":e=this.getParent()?.getChildren(!0).filter(t=>t instanceof f.CanvasItem)??[];break;case"parent":default:e=[this.getParent()].filter(Boolean);break}return e.map(t=>t.style)}_updateKeyframes(){const e=[],t=this.keyframes;for(let n=t.length,o=0;o<n;o++){const{offset:a=o===0?0:o/(n-1),easing:l="linear",...c}=t[o];e.push({offset:a,easing:this._parseEasing(l),props:c})}const r=e[0],i=e[e.length-1];r&&r.offset!==0&&e.unshift({offset:0,easing:this._parseEasing("linear"),props:{}}),i&&i.offset!==1&&e.push({offset:1,easing:this._parseEasing("linear"),props:{}}),this._keyframes=e,this._updateCachedProps()}commitStyles(){if(!this.keyframes.length)return;if(this._updateCurrentTime(),this.isInsideTimeRange())this._isFirstUpdatePosition||(this._isFirstUpdatePosition=!0,this._updateCachedProps());else{if(!this._isFirstUpdatePosition)return;this._isFirstUpdatePosition=!1}const e=this._getTargets(),t=1/e.length,r=this.currentTimeProgress;e.forEach((i,n)=>{const o=t===1?r:ut(Math.max(0,r-t*n)/t,0,1),a=this._cachedProps.get(i);if(!a)return;const l=this._parseKeyframes(o,a);l?.length&&this._commitStyle(o,i,a,l[0],l[1])})}_updateCachedProps(){this.cancel(),this._getTargets().forEach(e=>{const t=new Map,r=this._keyframes;for(let i=r.length,n=0;n<i;n++)Object.keys(r[n].props).forEach(o=>{t.set(o,e[o])});this._cachedProps.set(e,t)})}_parseEasing(e){if(!e)return ls.linear;if(e in ls)return ls[e];const t=e.replace(/cubic-bezier\((.+)\)/,"$1").split(",").map(r=>Number(r));return Sr(t[0],t[1],t[2],t[3])}_parseKeyframes(e,t){let r;const i=this._keyframes;for(let n=i.length,o=0;o<n;o++){const a=i[o],{offset:l,easing:c}=a,h={...a.props};if(r&&e<=l){const{offset:u,easing:d}=r,g={...r.props};return t.forEach((p,y)=>{(!(y in g)||g[y]===null)&&(g[y]=p),(!(y in h)||h[y]===null)&&(h[y]=p)}),[{offset:u,easing:d,props:g},{offset:l,easing:c,props:h}]}r=a}return null}_commitStyle(e,t,r,i,n){const{offset:o,easing:a,props:l}=i,{offset:c,props:h}=n,u=c-o,d=a((e-o)/u),g={width:t.width,height:t.height,fontSize:t.fontSize};r.forEach((p,y)=>{t[y]=this._getDiffValue(y,l[y],h[y],d,g)})}_getDiffValue(e,t,r,i,n){let o,a;if(t==="none"&&(t=void 0),r==="none"&&(r=void 0),t===void 0||r===void 0)if(t!==void 0)o=Or(e,String(t),n),a=Ss(o);else if(r!==void 0)a=Or(e,String(r),n),o=Ss(a);else return;else o=Or(e,String(t),n),a=Or(e,String(r),n);if(Array.isArray(o)&&Array.isArray(a)){const l=new Set,c={},h={};o.forEach(({name:d,args:g})=>{c[d]=g,l.add(d)}),a.forEach(({name:d,args:g})=>{h[d]=g,l.add(d)});let u="";return l.forEach(d=>{const g=Math.max(c[d]?.length??0,h[d]?.length??0),p=c[d],y=h[d];u+=`${d}(${Array.from({length:g},(m,P)=>{const E=p?.[P],b=y?.[P],S=E?.normalizedIntValue??0,w=b?.normalizedIntValue??0;return Number.isNaN(S)||Number.isNaN(w)?b?.value??0:he(S,w,i)}).join(", ")}) `}),u}else if(!Array.isArray(o)&&!Array.isArray(a))return Number.isNaN(o.normalizedIntValue)||Number.isNaN(a.normalizedIntValue)?a.value:he(o.normalizedIntValue,a.normalizedIntValue,i)}isPlaying(){return!this.paused&&this.isInsideTimeRange()}play(){return this._stoped?(this._stoped=!1,this.startTime=this.timelineCurrentTime):this.startTime=this.timelineCurrentTime-this.currentTime,this.paused=!1,!0}pause(){return this.paused=!0,!0}stop(){return this._stoped=!0,this.paused=!0,this._currentTime=0,!0}cancel(){this._getTargets().forEach(e=>{this._cachedProps.get(e)?.forEach((t,r)=>{e[r]=t}),this._cachedProps.delete(e)})}},as([_({fallback:"parent"})],f.Animation.prototype,"effectMode",2),as([_({default:()=>[]})],f.Animation.prototype,"keyframes",2),as([_()],f.Animation.prototype,"easing",2),f.Animation=as([X("Animation",{renderMode:"disabled",processMode:"pausable",processSortMode:"parent_before",duration:2e3})],f.Animation);class cs extends Dt{static _instance;static get instance(){return this._instance||(this._instance=new cs),this._instance}playbackRate=1;muted=!1;volume=1;paused=!1;refresh(){this.emit("refresh")}refreshPaused(){this.emit("refreshPaused")}get processors(){return console.warn("HTML Audio does not support processors"),[]}set processors(e){console.warn("HTML Audio does not support processors")}get audioContext(){return console.warn("HTML Audio does not support audioContext"),null}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this.paused}}class di extends Dt{static PADDING=.1;_source=null;_audio=null;_end=0;_pausedReal=!1;_duration=0;_start=0;_playing=!1;get progress(){return(this._source?.currentTime??0)/this._duration}_paused=!1;get paused(){return this._paused}set paused(e){this._paused!==e&&(this._paused=e,this.refreshPaused())}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){this._playbackRate!==e&&(this._playbackRate=e,this.refresh())}_volume=1;get volume(){return this._volume}set volume(e){this._volume!==e&&(this._volume=e,this.refresh())}_loop=!1;get loop(){return this._loop}set loop(e){this._loop!==e&&(this._loop=e,this.refresh())}_muted=!1;get muted(){return this._muted}set muted(e){this._muted!==e&&(this._muted=e,this.refresh())}set(e,t){if(this[e]===void 0)throw new Error(`Property with name ${e} does not exist.`);switch(e){case"playbackRate":this.playbackRate=t;break;case"volume":this.volume=t;break;case"paused":this.paused=t;break;case"loop":this.loop=t;break;case"muted":this.muted=t;break}return this}_onPlay(){this._playing=!0}_onPause(){this._playing=!1}init(e){this._playing=!1,this._duration=e.source.duration;const t=this._source=e.source.cloneNode(!1);return t.src=e.parent.src,t.onplay=this._onPlay.bind(this),t.onpause=this._onPause.bind(this),e.context.on("refresh",this.refresh),e.context.on("refreshPaused",this.refreshPaused),this._audio=e,this}_stop(){this._source&&this._playing&&(this._source.onended=null,this._source.pause())}stop(){this._stop(),this._source&&this.emit("stop")}get processors(){return console.warn("HTML Audio does not support processors"),[]}set processors(e){console.warn("HTML Audio does not support processors")}refresh(){if(!this._audio||!this._source)return;const e=this._audio.context,t=this._audio.parent;this._source.loop=this._loop||t.loop;const r=e.volume*(e.muted?0:1),i=t.volume*(t.muted?0:1),n=this._volume*(this._muted?0:1);this._source.volume=n*r*i,this._source.playbackRate=this._playbackRate*e.playbackRate*t.playbackRate}refreshPaused(){if(!this._source||!this._audio)return;const e=this._paused||this._audio.parent.paused||this._audio.context.paused;e!==this._pausedReal&&(this._pausedReal=e,e?(this._stop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._source.currentTime,end:this._end,volume:this._volume,playbackRate:this._playbackRate,loop:this._loop})),this.emit("pause",e))}play(e={}){if(!this._source)return;const{start:t=0,end:r=0}=e;r&&console.assert(r>t,"End time is before start time"),e.playbackRate!==void 0&&(this._playbackRate=e.playbackRate),e.volume!==void 0&&(this._volume=e.volume),e.loop!==void 0&&(this._loop=e.loop),e.muted!==void 0&&(this._muted=e.muted),this.refresh(),this.loop&&r!==null&&(console.warn('Looping not support when specifying an "end" time'),this.loop=!1),this._start=t,this._end=r||this._duration,this._start=Math.max(0,this._start-di.PADDING),this._end=Math.min(this._end+di.PADDING,this._duration),this._source.onloadedmetadata=()=>{this._source&&(this._source.currentTime=t,this._source.onloadedmetadata=null,this.emit("progress",t,this._duration),Ce.on(this._onUpdate))},this._source.onended=this._onComplete.bind(this),this._source.play(),this.emit("start")}_onUpdate=()=>{this._source&&(this.emit("progress",this.progress,this._duration),this._source.currentTime>=this._end&&!this._source.loop&&this._onComplete())};_onComplete(){Ce.off(this._onUpdate),this._stop(),this.emit("progress",1,this._duration),this.emit("end",this)}destroy(){Ce.off(this._onUpdate),super.destroy();const e=this._source;e&&(e.onended=null,e.onplay=null,e.onpause=null,this._stop()),this._source=null,this._playbackRate=1,this._volume=1,this._loop=!1,this._end=0,this._start=0,this._duration=0,this._playing=!1,this._pausedReal=!1,this._paused=!1,this._muted=!1,this._audio&&(this._audio.context.off("refresh",this.refresh),this._audio.context.off("refreshPaused",this.refreshPaused),this._audio=null)}}class ic{constructor(e){this.parent=e}source=new globalThis.Audio;_src="";get src(){return this._src}set src(e){this._src!==e&&(this._src=e,this.load())}get duration(){return this.source.duration}get isPlayable(){return!!this.source&&this.source.readyState===4}get context(){return cs.instance}async load(){return new Promise(e=>{this.source.onload=()=>e(this),this.source.src=this._src,this.source.load()})}createSound(){return new di}}class Yn extends Dt{constructor(e,t){super(),this._input=e,this._output=t}_processers=[];get processors(){return this._processers}set processors(e){if(this._processers.forEach(t=>t.disconnect()),this._processers.length=0,this._input.connect(this._output),e.length){this._processers=e.slice(0),this._input.disconnect();let t;e.forEach(r=>{t?t.connect(r.destination):this._input.connect(r.destination),t=r}),t.connect(this._output)}}get destination(){return this._input}}class Wg{constructor(e,t=null){this.destination=e,this.source=t}connect(e){this.source?.connect(e)}disconnect(){this.source?.disconnect()}}function qg(){if(Ms)return new AudioContext;if(As){const s=globalThis.webkitAudioContext;return new s}else throw new Error("Failed to createAudioContext")}function Xg(s,e,t){if(Os)return new OfflineAudioContext(s,e,t);if(Io){const r=globalThis.webkitOfflineAudioContext;return new r(s,e,t)}else throw new Error("Failed to createOfflineAudioContext")}class jt extends Yn{static _instance;static get instance(){return this._instance||(this._instance=new jt),this._instance}static get audioContext(){return this.instance.audioContext}static get offlineContext(){return this.instance.offlineContext}static setParamValue(e,t){this.instance.setParamValue(e,t)}static decode(e){return this.instance.decode(e)}_context;_offlineContext;get audioContext(){return this._context}get offlineContext(){return this._offlineContext}_locked;muted=!1;volume=1;playbackRate=1;autoPause=!0;_paused=!1;_pausedOnBlur=!1;get paused(){return this._paused}set paused(e){e&&this._context.state==="running"?this._context.suspend():!e&&this._context.state==="suspended"&&this._context.resume(),this._paused=e}_compressor;_analyser;constructor(){const e=qg(),t=Xg(1,2,Os?Math.max(8e3,Math.min(96e3,e.sampleRate)):44100),r=e.createDynamicsCompressor(),i=e.createAnalyser();i.connect(r),r.connect(e.destination),super(i,r),this._context=e,this._offlineContext=t,this._compressor=r,this._analyser=i,this._locked=e.state==="suspended"&&(wt||Do),Dr&&(this._locked&&(this._unlock(),document.addEventListener("mousedown",this._unlock,!0),document.addEventListener("touchstart",this._unlock,!0),document.addEventListener("touchend",this._unlock,!0)),globalThis.addEventListener("focus",this._onFocus),globalThis.addEventListener("blur",this._onBlur))}_onFocus(){if(!this.autoPause)return;const e=this._context.state;(e==="suspended"||e==="interrupted"||!this._locked)&&(this.paused=this._pausedOnBlur,this.refreshPaused())}_onBlur(){this.autoPause&&(this._locked||(this._pausedOnBlur=this._paused,this.paused=!0,this.refreshPaused()))}_unlock=()=>{this._locked&&(this.playEmptySound(),this._context.state==="running"&&(document.removeEventListener("mousedown",this._unlock,!0),document.removeEventListener("touchend",this._unlock,!0),document.removeEventListener("touchstart",this._unlock,!0),this._locked=!1))};playEmptySound(){const e=this._context.createBufferSource();e.buffer=this._context.createBuffer(1,1,22050),e.connect(this._context.destination),e.start(0,0,0),e.context.state==="suspended"&&e.context.resume()}refresh(){this.emit("refresh")}refreshPaused(){this.emit("refreshPaused")}toggleMute(){return this.muted=!this.muted,this.refresh(),this.muted}togglePause(){return this.paused=!this.paused,this.refreshPaused(),this._paused}decode(e){return new Promise((t,r)=>{const i=o=>{r(new Error(o?.message||"Unable to decode file"))},n=this._offlineContext.decodeAudioData(e,t,i);n&&n.catch(i)})}setParamValue(e,t){e.setValueAtTime?e.setValueAtTime(t,this._context.currentTime):e.value=t}}class sc extends Dt{_audio=null;_sourceNode=null;_gain=null;_progress=0;get progress(){return this._progress}_pausedReal=!1;_paused=!1;get paused(){return this._paused}set paused(e){this._paused!==e&&(this._paused=e,this.refreshPaused())}_volume=1;get volume(){return this._volume}set volume(e){this._volume!==e&&(this._volume=e,this.refresh())}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){this._playbackRate!==e&&(this._playbackRate=e,this.refresh(),this._update(!0))}_loop=!1;get loop(){return this._loop}set loop(e){this._loop!==e&&(this._loop=e,this.refresh())}_muted=!1;get muted(){return this._muted}set muted(e){this._muted!==e&&(this._muted=e,this.refresh())}_duration=0;_end=0;_elapsed=0;_lastUpdate=this._now();_processors=[];init(e){return this._audio=e,e.context.on("refresh",this.refresh),e.context.on("refreshPaused",this.refreshPaused),this}_now(){return this._audio?.context.audioContext.currentTime??0}play(e={}){if(!this._audio)return;const{end:t=0,start:r=0}=e;t&&console.assert(t>r,"End time is before start time"),this._end=t,this._elapsed=r,e.volume!==void 0&&(this._volume=e.volume),e.playbackRate!==void 0&&(this._playbackRate=e.playbackRate),e.muted!==void 0&&(this._muted=e.muted),e.loop!==void 0&&(this._loop=e.loop),e.processors!==void 0&&(this._processors=e.processors),this._paused=!1;const{source:i,gain:n}=this._audio.cloneSource();this._sourceNode=i,this._gain=n,this.refresh(),i.onended=this._onComplete.bind(this),this._duration=i.buffer?.duration??0,this._lastUpdate=this._now(),this._loop?(i.loopStart=r,i.loopEnd=t,i.start(0,r)):t?i.start(0,r,t-r):i.start(0,r),this.emit("start"),this._update(!0),this._enableTicker(!0)}_stop(){if(this._sourceNode){this._enableTicker(!1),this._sourceNode.onended=null,this._sourceNode.stop(0),this._sourceNode.disconnect();try{this._sourceNode.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}this._sourceNode=null}}stop(){this._sourceNode&&(this._stop(),this.emit("stop"))}_update(e=!1){if(this._sourceNode){const t=this._now(),r=t-this._lastUpdate;if(r>0||e){this._elapsed+=r*this._sourceNode.playbackRate.value,this._lastUpdate=t;const i=this._duration;let n;if(this._sourceNode.loopStart){const o=this._sourceNode.loopEnd-this._sourceNode.loopStart;n=(this._sourceNode.loopStart+this._elapsed%o)/i}else n=this._elapsed%i/i;this._progress=n,this.emit("progress",n,i)}}}refresh(){if(!this._audio||!this._sourceNode)return;const e=this._audio.context,t=this._audio.parent;this._sourceNode.loop=this._loop||t.loop,e.setParamValue(this._gain.gain,this._volume*(this._muted?0:1)*t.volume*(t.muted?0:1)*e.volume*(e.muted?0:1)),e.setParamValue(this._sourceNode.playbackRate,this._playbackRate*t.playbackRate*e.playbackRate),this.applyProcessors()}applyProcessors(){if(this._sourceNode&&this._processors.length){this._sourceNode.disconnect();let e=this._sourceNode;this._processors.forEach(t=>{e.connect(t.destination),e=t}),e.connect(this._gain)}}refreshPaused(){if(!this._audio)return;const e=this._paused||this._audio.parent.paused||this._audio.context.paused;e!==this._pausedReal&&(this._pausedReal=e,e?(this._stop(),this.emit("paused")):(this.emit("resumed"),this.play({start:this._elapsed%this._duration,end:this._end,playbackRate:this._playbackRate,loop:this._loop,volume:this._volume})),this.emit("pause",e))}_onComplete=()=>{if(this._sourceNode){this._enableTicker(!1),this._sourceNode.onended=null,this._sourceNode.disconnect();try{this._sourceNode.buffer=null}catch(e){console.warn("Failed to set AudioBufferSourceNode.buffer to null:",e)}}this._sourceNode=null,this._progress=1,this.emit("progress",1,this._duration),this.emit("end",this)};_updateListener=()=>this._update();_enableTicker(e){Ce.off(this._updateListener),e&&Ce.on(this._updateListener)}destroy(){super.destroy(),this._stop(),this._gain?.disconnect(),this._gain=null,this._audio?.context.off("refresh",this.refresh),this._audio?.context.off("refreshPaused",this.refreshPaused),this._audio=null,this._processors.forEach(e=>e.disconnect()),this._processors.length=0,this._end=0,this._playbackRate=1,this._volume=1,this._loop=!1,this._elapsed=0,this._duration=0,this._paused=!1,this._muted=!1,this._pausedReal=!1}}class nc extends Yn{constructor(e){const t=jt.audioContext,r=t.createBufferSource(),i=t.createGain(),n=t.createAnalyser();r.connect(n),n.connect(i),i.connect(jt.instance.destination),super(n,i),this.parent=e,this._sourceNode=r,this.gain=i,this.analyser=n}_sourceBuffer;_sourceNode;_sourceLoad;gain;analyser;get context(){return jt.instance}get isPlayable(){return!!this._sourceNode.buffer}get duration(){return this._sourceNode.buffer?.duration??0}get buffer(){return this._sourceNode.buffer}set buffer(e){this._sourceNode.buffer=e}async load(){return this._sourceLoad||(this._sourceLoad=new Promise(e=>{this._sourceBuffer?this._decode(this._sourceBuffer).then(()=>e(this)):this.parent.src?this._loadUrl(this.parent.src).then(()=>e(this)):e(this)})),this._sourceLoad}_loadUrl(e){return new Promise(t=>{fetch(e).then(r=>r.arrayBuffer()).then(r=>this._decode(r)).finally(()=>t(this))})}_decode(e){return Promise.resolve(e instanceof AudioBuffer?e:jt.decode(e)).then(t=>(this.parent.isLoaded=!0,this.buffer=t,t))}cloneSource(){const e=this.context,t=this._sourceNode,r=e.audioContext.createBufferSource(),i=e.audioContext.createGain();return r.buffer=t.buffer,r.loop=t.loop,e.setParamValue(r.playbackRate,t.playbackRate.value),r.connect(i),i.connect(this.destination),{source:r,gain:i}}createSound(){return new sc}}var Hg=Object.defineProperty,Yg=Object.getOwnPropertyDescriptor,Kg=(s,e,t)=>e in s?Hg(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,Zg=(s,e,t,r)=>{for(var i=r>1?void 0:r?Yg(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i},Jg=(s,e,t)=>Kg(s,e+"",t);f.Audio=class extends f.TimelineNode{_sounds=[];_platformAudio=Ro?new nc(this):new ic(this);get platformAudio(){return this._platformAudio}_src;get src(){return this._src}set src(e){this._src!==e&&(this._src=e,this.load())}isLoaded=!1;get isPlayable(){return this.isLoaded&&this._platformAudio.isPlayable}get audioDuration(){return this._platformAudio.duration*1e3}_volume=1;get volume(){return this._volume}set volume(e){this._volume!==e&&(this._volume=e,this.refresh())}_muted=!1;get muted(){return this._muted}set muted(e){this._muted!==e&&(this._muted=e,this.refresh())}_loop=!1;get loop(){return this._loop}set loop(e){this._loop!==e&&(this._loop=e,this.refresh())}_playbackRate=1;get playbackRate(){return this._playbackRate}set playbackRate(e){this._playbackRate!==e&&(this._playbackRate=e,this.refresh())}_isPlaying=!1;get isPlaying(){return this._isPlaying}multiple=!1;start=0;end=0;constructor(e=""){super(),this.src=e}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"paused":this.refreshPaused();break}}async load(){return await this._platformAudio.load(),this}pause(){return this._isPlaying=!1,this.paused=!0,this}resume(){return this._isPlaying=this._sounds.length>0,this.paused=!1,this}stop(){if(!this.isPlayable)return this;this._isPlaying=!1;for(let e=this._sounds.length-1;e>=0;e--)this._sounds[e].stop();return this}play(e={}){if(!this.isLoaded)return;this.multiple||this._removeSounds(),this._isPlaying=!0;const t=this._createSound();this._sounds.push(t),t.once("end",()=>{e.complete?.(),this._onComplete(t)}),t.once("stop",()=>this._onComplete(t));const r=(e?.start??this.start)/1e3,i=(e?.end??this.end)/1e3;return t.play({...e,start:r,end:i}),t}_removeSounds(){for(let e=this._sounds.length-1;e>=0;e--)this._recycleSound(this._sounds[e]);this._sounds.length=0}_createSound(){return f.Audio._soundPool.length>0?f.Audio._soundPool.pop().init(this._platformAudio):this._platformAudio.createSound().init(this._platformAudio)}refresh(){for(let e=this._sounds.length,t=0;t<e;t++)this._sounds[t].refresh()}refreshPaused(){for(let e=this._sounds.length,t=0;t<e;t++)this._sounds[t].refreshPaused()}_onComplete=e=>{if(this._sounds){const t=this._sounds.indexOf(e);t>-1&&this._sounds.splice(t,1),this._isPlaying=this._sounds.length>0}this._recycleSound(e)};_recycleSound(e){e.destroy(),f.Audio._soundPool.includes(e)||f.Audio._soundPool.push(e)}_prevTime=0;_timer=0;_process(e){if(super._process(e),this.canProcess()){const t=this._tree?.timeline.currentTime??0;t-this._prevTime>0&&(this._timer||(this._setTimeStop(),this.play({start:this.start+(t-this.delay)%this.duration})),this._isPlaying&&this._setTimeStop()),this._prevTime=t}}_setTimeStop(){this._timer&&clearTimeout(this._timer),this._timer=setTimeout(()=>{this.stop(),this._timer=0},100)}},Jg(f.Audio,"_soundPool",[]),f.Audio=Zg([X("Audio")],f.Audio);class Qg extends f.Node2D{}var em=Object.defineProperty,tm=Object.getOwnPropertyDescriptor,hs=(s,e,t,r)=>{for(var i=r>1?void 0:r?tm(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=(r?o(e,t,i):o(i))||i);return r&&i&&em(e,t,i),i};f.AudioWaveform=class extends f.Element2D{_audioBuffer;_src=Dr?new le(document.createElement("canvas")):void 0;_needsUpdateTexture=!1;constructor(e={}){super(),this.setProperties(e)}_updateProperty(e,t,r){switch(super._updateProperty(e,t,r),e){case"src":this._loadSrc(t);break;case"gap":case"color":case"width":case"height":this._needsUpdateTexture=!0;break}}async _loadSrc(e){await globalThis.fetch(e).then(t=>t.arrayBuffer()).then(t=>jt.decode(t)).then(t=>{this._audioBuffer=t,this.syncTexture(!0)})}syncTexture(e=!1){const t=this._audioBuffer;if(!t||!e&&!this._needsUpdateTexture)return;this._needsUpdateTexture=!1;const r=this._src?.source;if(!r)return;const{width:i=0,height:n=0}=this.style;r.width=i,r.height=n;const o=r.getContext("2d");if(!o){console.warn("Failed to getContext('2d') in syncTexture");return}o.fillStyle=this.color;const a=t.getChannelData(0),l=Math.ceil(a.length/i),c=n/2;for(let h=1,u=-1,d=0;d<i;d++){for(let g=0;g<l;g++){const p=a[d*l+g];p<h&&(h=p),p>u&&(u=p)}if(!this.gap||d%(this.gap*2)===0){const g=d,p=(1+h)*c,y=this.gap||1,m=Math.max(1,(u-h)*c);o.fillRect(g,p,y,m),h=1,u=-1}}this._src?.requestUpload(),this.requestRedraw()}_process(e){this.syncTexture(),super._process(e)}_drawSrc(){const e=this._src;e?.isValid()&&(this.context.fillStyle=e,this.context.uvTransform=new ke().scale(1/this.style.width,1/this.style.height))}},hs([_()],f.AudioWaveform.prototype,"src",2),hs([_({fallback:0})],f.AudioWaveform.prototype,"gap",2),hs([_({fallback:"#000000"})],f.AudioWaveform.prototype,"color",2),f.AudioWaveform=hs([X("AudioWaveform")],f.AudioWaveform);var rm=Object.defineProperty,im=Object.getOwnPropertyDescriptor,sm=(s,e,t)=>e in s?rm(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t,nm=(s,e,t,r)=>{for(var i=r>1?void 0:r?im(e,t):e,n=s.length-1,o;n>=0;n--)(o=s[n])&&(i=o(i)||i);return i},om=(s,e,t)=>sm(s,e+"",t);f.KawaseTransition=class extends f.Transition{blur=10;quality=10;apply(e,t){const r=this.currentTimeProgress;let i,n;r<.5?(i=0,n=(.5-r)/.5):(i=1,n=(r-.5)/.5);const o=this.blur,a=this.quality,l=t.width,c=t.height,h=[],u=[o];if(o>0){let P=o;const E=o/a;for(let b=1;b<a;b++)P-=E,u.push(P)}const d=1/l,g=1/c,p=[];let y;const m=a-1;for(let P=0;P<m;P++)y=u[P]+.5,p[0]=y*d,p[1]=y*g,h.push({offset:p});y=u[m]+.5,p[0]=y*d,p[1]=y*g,h.push({offset:p}),h.forEach(P=>{Q.draw(e,f.KawaseTransition.material,{sampler:i,progress:n,...P})})}},om(f.KawaseTransition,"material",new re({vert:`attribute vec2 position;
|
|
958
958
|
attribute vec2 uv;
|
|
959
959
|
varying vec2 vUv;
|
|
960
960
|
void main() {
|
package/dist/index.mjs
CHANGED
|
@@ -10090,7 +10090,6 @@ class BaseElement2DText extends CoreObject {
|
|
|
10090
10090
|
this.base.setPropertyAccessor(this);
|
|
10091
10091
|
}
|
|
10092
10092
|
base;
|
|
10093
|
-
measureResult;
|
|
10094
10093
|
_texture = new CanvasTexture();
|
|
10095
10094
|
_textureMap = /* @__PURE__ */ new Map();
|
|
10096
10095
|
setProperties(properties) {
|
|
@@ -10108,20 +10107,19 @@ class BaseElement2DText extends CoreObject {
|
|
|
10108
10107
|
case "measureDom":
|
|
10109
10108
|
case "fonts":
|
|
10110
10109
|
this.update();
|
|
10111
|
-
this.parent.requestRedraw();
|
|
10112
10110
|
break;
|
|
10113
10111
|
case "fill":
|
|
10114
10112
|
case "outline":
|
|
10115
10113
|
case "content":
|
|
10116
10114
|
this.update();
|
|
10117
10115
|
this._updateTextureMap();
|
|
10118
|
-
this.parent.requestRedraw();
|
|
10119
10116
|
break;
|
|
10120
10117
|
}
|
|
10121
10118
|
}
|
|
10122
10119
|
update() {
|
|
10123
10120
|
this.base.fonts = this.base.fonts ?? this.parent.tree?.fonts;
|
|
10124
10121
|
this.base.update();
|
|
10122
|
+
this.parent.requestRedraw();
|
|
10125
10123
|
}
|
|
10126
10124
|
_updateTextureMap() {
|
|
10127
10125
|
this._textureMap.clear();
|
|
@@ -10181,10 +10179,6 @@ class BaseElement2DText extends CoreObject {
|
|
|
10181
10179
|
this.update();
|
|
10182
10180
|
return this.base.measure();
|
|
10183
10181
|
}
|
|
10184
|
-
updateMeasure() {
|
|
10185
|
-
this.measureResult = this.measure();
|
|
10186
|
-
return this;
|
|
10187
|
-
}
|
|
10188
10182
|
isValid() {
|
|
10189
10183
|
return Boolean(
|
|
10190
10184
|
this.enabled && !/^\s*$/.test(this.base.toString())
|
|
@@ -10399,6 +10393,12 @@ let BaseElement2D = class extends Node2D {
|
|
|
10399
10393
|
this.style = new BaseElement2DStyle();
|
|
10400
10394
|
this.setProperties(properties).append(nodes);
|
|
10401
10395
|
}
|
|
10396
|
+
_treeEnter(tree) {
|
|
10397
|
+
super._treeEnter(tree);
|
|
10398
|
+
if (this._text.isValid()) {
|
|
10399
|
+
this._text.update();
|
|
10400
|
+
}
|
|
10401
|
+
}
|
|
10402
10402
|
setProperties(properties) {
|
|
10403
10403
|
if (properties) {
|
|
10404
10404
|
const {
|