@netless/appliance-plugin 1.1.38-beta.1 → 1.1.38

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.
@@ -0,0 +1 @@
1
+ "use strict";var xo=Object.defineProperty;var bo=(o,n,e)=>n in o?xo(o,n,{enumerable:!0,configurable:!0,writable:!0,value:e}):o[n]=e;var I=(o,n,e)=>bo(o,typeof n!="symbol"?n+"":n,e);const Si=require("./bridge-CX20AaS_.js");require("spritejs");const vi=require("lz-string");require("clipper-lib");require("lineclip");const Bn=require("xss"),j=require("lodash"),Fn=require("eventemitter2"),g=require("react"),fn=require("react-dom"),Rt=require("react-draggable"),Do=require("re-resizable");var ie=(o=>(o.selector="selector",o.clicker="clicker",o.laserPointer="laserPointer",o.pencil="pencil",o.rectangle="rectangle",o.ellipse="ellipse",o.shape="shape",o.eraser="eraser",o.pencilEraser="pencilEraser",o.text="text",o.straight="straight",o.arrow="arrow",o.hand="hand",o.laserPen="laserPen",o))(ie||{}),ce=(o=>(o.Normal="Normal",o.Stroke="Stroke",o.Dotted="Dotted",o.LongDotted="LongDotted",o))(ce||{}),Ue=(o=>(o.Triangle="triangle",o.Rhombus="rhombus",o.Pentagram="pentagram",o.SpeechBalloon="speechBalloon",o.Star="star",o.Polygon="polygon",o))(Ue||{}),B=(o=>(o.None="None",o.ShowFloatBar="ShowFloatBar",o.ZIndexFloatBar="ZIndexFloatBar",o.DeleteNode="DeleteNode",o.CopyNode="CopyNode",o.ZIndexNode="ZIndexNode",o.ZIndexBackgroundSVG="ZIndexBackgroundSVG",o.RotateNode="RotateNode",o.SetColorNode="SetColorNode",o.TranslateNode="TranslateNode",o.ScaleNode="ScaleNode",o.OriginalEvent="OriginalEvent",o.CreateScene="CreateScene",o.ActiveCursor="ActiveCursor",o.MoveCursor="MoveCursor",o.CommandEditor="CommandEditor",o.SetEditorData="SetEditorData",o.SetFontStyle="SetFontStyle",o.SetPoint="SetPoint",o.SetLock="SetLock",o.SetShapeOpt="SetShapeOpt",o.CameraChange="CameraChange",o.ActiveMethod="ActiveMethod",o.HidFloatBarBtn="HidFloatBarBtn",o.SelectMethod="SelectMethod",o))(B||{}),te=(o=>(o.MainEngine="MainEngine",o.Cursor="Cursor",o.BindMainView="BindMainView",o))(te||{}),Ci=(o=>(o[o.MainView=0]="MainView",o[o.Plugin=1]="Plugin",o[o.Both=2]="Both",o))(Ci||{}),ir=(o=>(o.longPencil="longPencil",o))(ir||{}),S=(o=>(o[o.Pencil=1]="Pencil",o[o.Eraser=2]="Eraser",o[o.PencilEraser=3]="PencilEraser",o[o.BitMapEraser=4]="BitMapEraser",o[o.Selector=5]="Selector",o[o.Clicker=6]="Clicker",o[o.Arrow=7]="Arrow",o[o.Hand=8]="Hand",o[o.LaserPen=9]="LaserPen",o[o.Text=10]="Text",o[o.Straight=11]="Straight",o[o.Rectangle=12]="Rectangle",o[o.Ellipse=13]="Ellipse",o[o.Star=14]="Star",o[o.Triangle=15]="Triangle",o[o.Rhombus=16]="Rhombus",o[o.Polygon=17]="Polygon",o[o.SpeechBalloon=18]="SpeechBalloon",o[o.Image=19]="Image",o[o.BackgroundSVG=20]="BackgroundSVG",o))(S||{}),J=(o=>(o[o.Local=1]="Local",o[o.Service=2]="Service",o[o.Worker=3]="Worker",o))(J||{}),E=(o=>(o[o.Pending=0]="Pending",o[o.Start=1]="Start",o[o.Doing=2]="Doing",o[o.Done=3]="Done",o[o.Unwritable=4]="Unwritable",o))(E||{}),F=(o=>(o[o.None=0]="None",o[o.Init=1]="Init",o[o.UpdateCamera=2]="UpdateCamera",o[o.UpdateTools=3]="UpdateTools",o[o.CreateWork=4]="CreateWork",o[o.DrawWork=5]="DrawWork",o[o.FullWork=6]="FullWork",o[o.UpdateNode=7]="UpdateNode",o[o.RemoveNode=8]="RemoveNode",o[o.Clear=9]="Clear",o[o.Select=10]="Select",o[o.Destroy=11]="Destroy",o[o.Snapshot=12]="Snapshot",o[o.BoundingBox=13]="BoundingBox",o[o.Cursor=14]="Cursor",o[o.TextUpdate=15]="TextUpdate",o[o.GetTextActive=16]="GetTextActive",o[o.TasksQueue=17]="TasksQueue",o[o.CursorHover=18]="CursorHover",o[o.CursorBlur=19]="CursorBlur",o[o.Console=20]="Console",o[o.GetImageBitMap=23]="GetImageBitMap",o[o.AuthWriter=24]="AuthWriter",o[o.AuthReader=25]="AuthReader",o[o.AuthClear=26]="AuthClear",o[o.AuthPage=27]="AuthPage",o[o.GetVNodeInfo=28]="GetVNodeInfo",o[o.UpdateDpr=29]="UpdateDpr",o[o.SetFontFace=30]="SetFontFace",o[o.ReportError=31]="ReportError",o[o.ReportLog=32]="ReportLog",o[o.BackgroundSVGUpdate=33]="BackgroundSVGUpdate",o[o.BackgroundSVGDelete=34]="BackgroundSVGDelete",o[o.SelectorTransform=35]="SelectorTransform",o[o.CheckFontFace=36]="CheckFontFace",o[o.RefreshTextRender=37]="RefreshTextRender",o))(F||{}),Qe=(o=>(o[o.None=0]="None",o[o.Bg=1]="Bg",o[o.ServiceFloat=2]="ServiceFloat",o[o.Float=3]="Float",o[o.TopFloat=4]="TopFloat",o))(Qe||{}),Jt=(o=>(o[o.Cursor=1]="Cursor",o[o.TextCreate=2]="TextCreate",o))(Jt||{}),st=(o=>(o[o.Top=1]="Top",o[o.Bottom=2]="Bottom",o))(st||{}),Pe=(o=>(o[o.none=1]="none",o[o.all=2]="all",o[o.both=3]="both",o[o.proportional=4]="proportional",o))(Pe||{}),Et=(o=>(o[o.inside=0]="inside",o[o.outside=1]="outside",o[o.intersect=2]="intersect",o))(Et||{}),be=(o=>(o.renderPage="renderPage",o.addPage="addPage",o.deletePage="deletePage",o.addElement="addElement",o.deleteElement="deleteElement",o.clearPage="clearPage",o.clearViewScenePath="clearViewScenePath",o.clearView="clearView",o.syncUndoStack="syncUndoStack",o.syncRedoStack="syncRedoStack",o))(be||{}),Ze=(o=>(o.setAuth="setAuth",o.setShow="addShow",o.setHide="setHide",o.setClear="setClear",o))(Ze||{}),jt=(o=>(o.Image="image",o.Iconify="iconify",o))(jt||{}),zt=(o=>(o.url="url",o.markmap="markmap",o))(zt||{});const Ni="cursorhover",pn=20,re="mainView",Ao=Si.getWhiteWebSdkBridgeRuntime(),{toJS:an,autorun:An,isRoom:H,isPlayer:or,InvisiblePlugin:ki,RoomPhase:xi}=Ao,Eo={linear:o=>o,easeInQuad:o=>o*o,easeOutQuad:o=>o*(2-o),easeInOutQuad:o=>o<.5?2*o*o:-1+(4-2*o)*o,easeInCubic:o=>o*o*o,easeOutCubic:o=>--o*o*o+1,easeInOutCubic:o=>o<.5?4*o*o*o:(o-1)*(2*o-2)*(2*o-2)+1,easeInQuart:o=>o*o*o*o,easeOutQuart:o=>1- --o*o*o*o,easeInOutQuart:o=>o<.5?8*o*o*o*o:1-8*--o*o*o*o,easeInQuint:o=>o*o*o*o*o,easeOutQuint:o=>1+--o*o*o*o*o,easeInOutQuint:o=>o<.5?16*o*o*o*o*o:1+16*--o*o*o*o*o,easeInSine:o=>1-Math.cos(o*Math.PI/2),easeOutSine:o=>Math.sin(o*Math.PI/2),easeInOutSine:o=>-(Math.cos(Math.PI*o)-1)/2,easeInExpo:o=>o<=0?0:Math.pow(2,10*o-10),easeOutExpo:o=>o>=1?1:1-Math.pow(2,-10*o),easeInOutExpo:o=>o<=0?0:o>=1?1:o<.5?Math.pow(2,20*o-10)/2:(2-Math.pow(2,-20*o+10))/2};class V{constructor(n=0,e=0,t=1){this.x=n,this.y=e,this.z=t}get XY(){return[this.x,this.y]}setz(n){return this.z=n,this}setXY(n=this.x,e=this.y){return this.x=n,this.y=e,this}set(n=this.x,e=this.y,t=this.z){return this.x=n,this.y=e,this.z=t,this}setTo({x:n=0,y:e=0,z:t=1}){return this.x=n,this.y=e,this.z=t,this}rot(n){if(n===0)return this;const{x:e,y:t}=this,r=Math.sin(n),i=Math.cos(n);return this.x=e*i-t*r,this.y=e*r+t*i,this}rotWith(n,e){if(e===0)return this;const t=this.x-n.x,r=this.y-n.y,i=Math.sin(e),s=Math.cos(e);return this.x=n.x+(t*s-r*i),this.y=n.y+(t*i+r*s),this}clone(){const{x:n,y:e,z:t}=this;return new V(n,e,t)}sub(n){return this.x-=n.x,this.y-=n.y,this}subXY(n,e){return this.x-=n,this.y-=e,this}subScalar(n){return this.x-=n,this.y-=n,this}add(n){return this.x+=n.x,this.y+=n.y,this}addXY(n,e){return this.x+=n,this.y+=e,this}addScalar(n){return this.x+=n,this.y+=n,this}clamp(n,e){return this.x=Math.max(this.x,n),this.y=Math.max(this.y,n),e!==void 0&&(this.x=Math.min(this.x,e),this.y=Math.min(this.y,e)),this}div(n){return this.x/=n,this.y/=n,this}divV(n){return this.x/=n.x,this.y/=n.y,this}mul(n){return this.x*=n,this.y*=n,this}mulV(n){return this.x*=n.x,this.y*=n.y,this}abs(){return this.x=Math.abs(this.x),this.y=Math.abs(this.y),this}nudge(n,e){const t=V.Tan(n,this);return this.add(t.mul(e))}neg(){return this.x*=-1,this.y*=-1,this}cross(n){return this.x=this.y*n.z-this.z*n.y,this.y=this.z*n.x-this.x*n.z,this}dpr(n){return V.Dpr(this,n)}cpr(n){return V.Cpr(this,n)}len2(){return V.Len2(this)}len(){return V.Len(this)}pry(n){return V.Pry(this,n)}per(){const{x:n,y:e}=this;return this.x=e,this.y=-n,this}uni(){return V.Uni(this)}tan(n){return V.Tan(this,n)}dist(n){return V.Dist(this,n)}distanceToLineSegment(n,e){return V.DistanceToLineSegment(n,e,this)}slope(n){return V.Slope(this,n)}snapToGrid(n){return this.x=Math.round(this.x/n)*n,this.y=Math.round(this.y/n)*n,this}angle(n){return V.Angle(this,n)}toAngle(){return V.ToAngle(this)}lrp(n,e){return this.x=this.x+(n.x-this.x)*e,this.y=this.y+(n.y-this.y)*e,this}equals(n,e){return V.Equals(this,n,e)}equalsXY(n,e){return V.EqualsXY(this,n,e)}norm(){const n=this.len();return this.x=n===0?0:this.x/n,this.y=n===0?0:this.y/n,this}toFixed(){return V.ToFixed(this)}toString(){return V.ToString(V.ToFixed(this))}toJson(){return V.ToJson(this)}toArray(){return V.ToArray(this)}static Add(n,e){return new V(n.x+e.x,n.y+e.y)}static AddXY(n,e,t){return new V(n.x+e,n.y+t)}static Sub(n,e){return new V(n.x-e.x,n.y-e.y)}static SubXY(n,e,t){return new V(n.x-e,n.y-t)}static AddScalar(n,e){return new V(n.x+e,n.y+e)}static SubScalar(n,e){return new V(n.x-e,n.y-e)}static Div(n,e){return new V(n.x/e,n.y/e)}static Mul(n,e){return new V(n.x*e,n.y*e)}static DivV(n,e){return new V(n.x/e.x,n.y/e.y)}static MulV(n,e){return new V(n.x*e.x,n.y*e.y)}static Neg(n){return new V(-n.x,-n.y)}static Per(n){return new V(n.y,-n.x)}static Dist2(n,e){return V.Sub(n,e).len2()}static Abs(n){return new V(Math.abs(n.x),Math.abs(n.y))}static Dist(n,e){return Math.hypot(n.y-e.y,n.x-e.x)}static Dpr(n,e){return n.x*e.x+n.y*e.y}static Cross(n,e){return new V(n.y*e.z-n.z*e.y,n.z*e.x-n.x*e.z)}static Cpr(n,e){return n.x*e.y-e.x*n.y}static Len2(n){return n.x*n.x+n.y*n.y}static Len(n){return Math.hypot(n.x,n.y)}static Pry(n,e){return V.Dpr(n,e)/V.Len(e)}static Uni(n){return V.Div(n,V.Len(n))}static Tan(n,e){return V.Uni(V.Sub(n,e))}static Min(n,e){return new V(Math.min(n.x,e.x),Math.min(n.y,e.y))}static Max(n,e){return new V(Math.max(n.x,e.x),Math.max(n.y,e.y))}static From(n){return new V().add(n)}static FromArray(n){return new V(n[0],n[1])}static Rot(n,e=0){const t=Math.sin(e),r=Math.cos(e);return new V(n.x*r-n.y*t,n.x*t+n.y*r)}static RotWith(n,e,t){const r=n.x-e.x,i=n.y-e.y,s=Math.sin(t),a=Math.cos(t);return new V(e.x+(r*a-i*s),e.y+(r*s+i*a))}static NearestPointOnLineThroughPoint(n,e,t){return V.Mul(e,V.Sub(t,n).pry(e)).add(n)}static NearestPointOnLineSegment(n,e,t,r=!0){const i=V.Tan(e,n),s=V.Add(n,V.Mul(i,V.Sub(t,n).pry(i)));if(r){if(s.x<Math.min(n.x,e.x))return V.Cast(n.x<e.x?n:e);if(s.x>Math.max(n.x,e.x))return V.Cast(n.x>e.x?n:e);if(s.y<Math.min(n.y,e.y))return V.Cast(n.y<e.y?n:e);if(s.y>Math.max(n.y,e.y))return V.Cast(n.y>e.y?n:e)}return s}static DistanceToLineThroughPoint(n,e,t){return V.Dist(t,V.NearestPointOnLineThroughPoint(n,e,t))}static DistanceToLineSegment(n,e,t,r=!0){return V.Dist(t,V.NearestPointOnLineSegment(n,e,t,r))}static Snap(n,e=1){return new V(Math.round(n.x/e)*e,Math.round(n.y/e)*e)}static Cast(n){return n instanceof V?n:V.From(n)}static Slope(n,e){return n.x===e.y?NaN:(n.y-e.y)/(n.x-e.x)}static Angle(n,e){return Math.atan2(e.y-n.y,e.x-n.x)}static Lrp(n,e,t){return V.Sub(e,n).mul(t).add(n)}static Med(n,e){return new V((n.x+e.x)/2,(n.y+e.y)/2)}static Equals(n,e,t=1e-4){return Math.abs(n.x-e.x)<t&&Math.abs(n.y-e.y)<t}static EqualsXY(n,e,t){return n.x===e&&n.y===t}static EqualsXYZ(n,e,t=1e-4){return V.Equals(n,e,t)&&Math.abs((n.z||0)-(e.z||0))<t}static Clockwise(n,e,t){return(t.x-n.x)*(e.y-n.y)-(e.x-n.x)*(t.y-n.y)<0}static Rescale(n,e){const t=V.Len(n);return new V(e*n.x/t,e*n.y/t)}static ScaleWithOrigin(n,e,t){return V.Sub(n,t).mul(e).add(t)}static ScaleWOrigin(n,e,t){return V.Sub(n,t).mulV(e).add(t)}static ToFixed(n,e=2){return new V(+n.x.toFixed(e),+n.y.toFixed(e),+n.z.toFixed(e))}static Nudge(n,e,t){return V.Add(n,V.Tan(e,n).mul(t))}static ToString(n){return`${n.x}, ${n.y}`}static ToAngle(n){let e=Math.atan2(n.y,n.x);return e<0&&(e+=Math.PI*2),e}static FromAngle(n,e=1){return new V(Math.cos(n)*e,Math.sin(n)*e)}static ToArray(n){return[n.x,n.y,n.z]}static ToJson(n){const{x:e,y:t,z:r}=n;return{x:e,y:t,z:r}}static Average(n){const e=n.length,t=new V(0,0);for(let r=0;r<e;r++)t.add(n[r]);return t.div(e)}static Clamp(n,e,t){return t===void 0?new V(Math.min(Math.max(n.x,e)),Math.min(Math.max(n.y,e))):new V(Math.min(Math.max(n.x,e),t),Math.min(Math.max(n.y,e),t))}static PointsBetween(n,e,t=6){const r=[];for(let i=0;i<t;i++){const s=Eo.easeInQuad(i/(t-1)),a=V.Lrp(n,e,s);a.z=Math.min(1,.5+Math.abs(.5-jo(s))*.65),r.push(a)}return r}static SnapToGrid(n,e=8){return new V(Math.round(n.x/e)*e,Math.round(n.y/e)*e)}}const jo=o=>o<.5?2*o*o:-1+(4-2*o)*o;class ge extends V{constructor(n=0,e=0,t=0,r={x:0,y:0},i=0,s=0){super(n,e,t),this.x=n,this.y=e,this.z=t,this.v=r,this.t=i,this.a=s}get timestamp(){return this.t}get pressure(){return this.z}get angleNum(){return this.a}get XY(){return[this.x,this.y]}setA(n){this.a=n}setT(n){this.t=n}setv(n){return this.v={x:n.x,y:n.y},this}set(n=this.x,e=this.y,t=this.z,r=this.v,i=this.t,s=this.a){return this.x=n,this.y=e,this.z=t,this.v=r,this.t=i,this.a=s,this}clone(){const{x:n,y:e,z:t,v:r,t:i,a:s}=this,a={x:r.x,y:r.y};return new ge(n,e,t,a,i,s)}distance(n){return ge.GetDistance(this,n)}isNear(n,e){return ge.IsNear(this,n,e)}getAngleByPoints(n,e){return ge.GetAngleByPoints(n,this,e)}static Sub(n,e){return new ge(n.x-e.x,n.y-e.y)}static Add(n,e){return new ge(n.x+e.x,n.y+e.y)}static GetDistance(n,e){return ge.Len(n.clone().sub(e))}static GetAngleByPoints(n,e,t){const r=e.x-n.x,i=t.x-e.x,s=e.y-n.y,a=t.y-e.y;let c=0;const l=Math.sqrt(r*r+s*s),u=Math.sqrt(i*i+a*a);if(l&&u){const h=r*i+s*a;c=Math.acos(h/(l*u)),c=c/Math.PI*180;let d=r*a-s*i;d=d>0?1:-1,c=180+d*c}return c}static IsNear(n,e,t){return ge.Len(n.clone().sub(e))<t}static RotWith(n,e,t,r=2){const i=n.x-e.x,s=n.y-e.y,a=Math.sin(t),c=Math.cos(t),l=Math.pow(10,r),u=Math.floor((e.x+(i*c-s*a))*l)/l,h=Math.floor((e.y+(i*a+s*c))*l)/l;return new ge(u,h)}static GetDotStroke(n,e,t=16){const r=new V(1,1),i=Math.PI+.001,s=ge.Add(n,ge.Sub(n,r).uni().per().mul(-e)),a=[];for(let c=1/t,l=c;l<=1;l+=c)a.push(ge.RotWith(s,n,i*2*l));return a}static GetSemicircleStroke(n,e,t=-1,r=8){const i=t*(Math.PI+.001),s=[];for(let a=1/r,c=a;c<=1;c+=a)s.push(ge.RotWith(e,n,i*c));return s}}var on=typeof globalThis<"u"?globalThis:typeof window<"u"?window:typeof global<"u"?global:typeof self<"u"?self:{};function Mn(o){return o&&o.__esModule&&Object.prototype.hasOwnProperty.call(o,"default")?o.default:o}var zo=typeof on=="object"&&on&&on.Object===Object&&on,bi=zo,Lo=bi,Po=typeof self=="object"&&self&&self.Object===Object&&self,Ro=Lo||Po||Function("return this")(),Ke=Ro,Oo=Ke,Uo=Oo.Symbol,Xt=Uo,Dr=Xt,Di=Object.prototype,Yo=Di.hasOwnProperty,Bo=Di.toString,Qt=Dr?Dr.toStringTag:void 0;function Fo(o){var n=Yo.call(o,Qt),e=o[Qt];try{o[Qt]=void 0;var t=!0}catch{}var r=Bo.call(o);return t&&(n?o[Qt]=e:delete o[Qt]),r}var Wo=Fo,Vo=Object.prototype,$o=Vo.toString;function Go(o){return $o.call(o)}var Qo=Go,Ar=Xt,Zo=Wo,Ho=Qo,qo="[object Null]",Ko="[object Undefined]",Er=Ar?Ar.toStringTag:void 0;function Jo(o){return o==null?o===void 0?Ko:qo:Er&&Er in Object(o)?Zo(o):Ho(o)}var Ot=Jo;function Xo(o){return o!=null&&typeof o=="object"}var ct=Xo;function _o(){this.__data__=[],this.size=0}var es=_o;function ts(o,n){return o===n||o!==o&&n!==n}var sr=ts,ns=sr;function rs(o,n){for(var e=o.length;e--;)if(ns(o[e][0],n))return e;return-1}var yn=rs,is=yn,os=Array.prototype,ss=os.splice;function as(o){var n=this.__data__,e=is(n,o);if(e<0)return!1;var t=n.length-1;return e==t?n.pop():ss.call(n,e,1),--this.size,!0}var cs=as,ls=yn;function us(o){var n=this.__data__,e=ls(n,o);return e<0?void 0:n[e][1]}var hs=us,ds=yn;function gs(o){return ds(this.__data__,o)>-1}var fs=gs,ps=yn;function Ms(o,n){var e=this.__data__,t=ps(e,o);return t<0?(++this.size,e.push([o,n])):e[t][1]=n,this}var ys=Ms,ms=es,Is=cs,ws=hs,Ts=fs,Ss=ys;function Ut(o){var n=-1,e=o==null?0:o.length;for(this.clear();++n<e;){var t=o[n];this.set(t[0],t[1])}}Ut.prototype.clear=ms;Ut.prototype.delete=Is;Ut.prototype.get=ws;Ut.prototype.has=Ts;Ut.prototype.set=Ss;var mn=Ut,vs=mn;function Cs(){this.__data__=new vs,this.size=0}var Ns=Cs;function ks(o){var n=this.__data__,e=n.delete(o);return this.size=n.size,e}var xs=ks;function bs(o){return this.__data__.get(o)}var Ds=bs;function As(o){return this.__data__.has(o)}var Es=As;function js(o){var n=typeof o;return o!=null&&(n=="object"||n=="function")}var lt=js,zs=Ot,Ls=lt,Ps="[object AsyncFunction]",Rs="[object Function]",Os="[object GeneratorFunction]",Us="[object Proxy]";function Ys(o){if(!Ls(o))return!1;var n=zs(o);return n==Rs||n==Os||n==Ps||n==Us}var Ai=Ys,Bs=Ke,Fs=Bs["__core-js_shared__"],Ws=Fs,En=Ws,jr=function(){var o=/[^.]+$/.exec(En&&En.keys&&En.keys.IE_PROTO||"");return o?"Symbol(src)_1."+o:""}();function Vs(o){return!!jr&&jr in o}var $s=Vs,Gs=Function.prototype,Qs=Gs.toString;function Zs(o){if(o!=null){try{return Qs.call(o)}catch{}try{return o+""}catch{}}return""}var Ei=Zs,Hs=Ai,qs=$s,Ks=lt,Js=Ei,Xs=/[\\^$.*+?()[\]{}|]/g,_s=/^\[object .+?Constructor\]$/,ea=Function.prototype,ta=Object.prototype,na=ea.toString,ra=ta.hasOwnProperty,ia=RegExp("^"+na.call(ra).replace(Xs,"\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g,"$1.*?")+"$");function oa(o){if(!Ks(o)||qs(o))return!1;var n=Hs(o)?ia:_s;return n.test(Js(o))}var sa=oa;function aa(o,n){return o==null?void 0:o[n]}var ca=aa,la=sa,ua=ca;function ha(o,n){var e=ua(o,n);return la(e)?e:void 0}var Ct=ha,da=Ct,ga=Ke,fa=da(ga,"Map"),ar=fa,pa=Ct,Ma=pa(Object,"create"),In=Ma,zr=In;function ya(){this.__data__=zr?zr(null):{},this.size=0}var ma=ya;function Ia(o){var n=this.has(o)&&delete this.__data__[o];return this.size-=n?1:0,n}var wa=Ia,Ta=In,Sa="__lodash_hash_undefined__",va=Object.prototype,Ca=va.hasOwnProperty;function Na(o){var n=this.__data__;if(Ta){var e=n[o];return e===Sa?void 0:e}return Ca.call(n,o)?n[o]:void 0}var ka=Na,xa=In,ba=Object.prototype,Da=ba.hasOwnProperty;function Aa(o){var n=this.__data__;return xa?n[o]!==void 0:Da.call(n,o)}var Ea=Aa,ja=In,za="__lodash_hash_undefined__";function La(o,n){var e=this.__data__;return this.size+=this.has(o)?0:1,e[o]=ja&&n===void 0?za:n,this}var Pa=La,Ra=ma,Oa=wa,Ua=ka,Ya=Ea,Ba=Pa;function Yt(o){var n=-1,e=o==null?0:o.length;for(this.clear();++n<e;){var t=o[n];this.set(t[0],t[1])}}Yt.prototype.clear=Ra;Yt.prototype.delete=Oa;Yt.prototype.get=Ua;Yt.prototype.has=Ya;Yt.prototype.set=Ba;var Fa=Yt,Lr=Fa,Wa=mn,Va=ar;function $a(){this.size=0,this.__data__={hash:new Lr,map:new(Va||Wa),string:new Lr}}var Ga=$a;function Qa(o){var n=typeof o;return n=="string"||n=="number"||n=="symbol"||n=="boolean"?o!=="__proto__":o===null}var Za=Qa,Ha=Za;function qa(o,n){var e=o.__data__;return Ha(n)?e[typeof n=="string"?"string":"hash"]:e.map}var wn=qa,Ka=wn;function Ja(o){var n=Ka(this,o).delete(o);return this.size-=n?1:0,n}var Xa=Ja,_a=wn;function ec(o){return _a(this,o).get(o)}var tc=ec,nc=wn;function rc(o){return nc(this,o).has(o)}var ic=rc,oc=wn;function sc(o,n){var e=oc(this,o),t=e.size;return e.set(o,n),this.size+=e.size==t?0:1,this}var ac=sc,cc=Ga,lc=Xa,uc=tc,hc=ic,dc=ac;function Bt(o){var n=-1,e=o==null?0:o.length;for(this.clear();++n<e;){var t=o[n];this.set(t[0],t[1])}}Bt.prototype.clear=cc;Bt.prototype.delete=lc;Bt.prototype.get=uc;Bt.prototype.has=hc;Bt.prototype.set=dc;var ji=Bt,gc=mn,fc=ar,pc=ji,Mc=200;function yc(o,n){var e=this.__data__;if(e instanceof gc){var t=e.__data__;if(!fc||t.length<Mc-1)return t.push([o,n]),this.size=++e.size,this;e=this.__data__=new pc(t)}return e.set(o,n),this.size=e.size,this}var mc=yc,Ic=mn,wc=Ns,Tc=xs,Sc=Ds,vc=Es,Cc=mc;function Ft(o){var n=this.__data__=new Ic(o);this.size=n.size}Ft.prototype.clear=wc;Ft.prototype.delete=Tc;Ft.prototype.get=Sc;Ft.prototype.has=vc;Ft.prototype.set=Cc;var zi=Ft;function Nc(o,n){for(var e=-1,t=o==null?0:o.length;++e<t&&n(o[e],e,o)!==!1;);return o}var kc=Nc,xc=Ct,bc=function(){try{var o=xc(Object,"defineProperty");return o({},"",{}),o}catch{}}(),Li=bc,Pr=Li;function Dc(o,n,e){n=="__proto__"&&Pr?Pr(o,n,{configurable:!0,enumerable:!0,value:e,writable:!0}):o[n]=e}var Pi=Dc,Ac=Pi,Ec=sr,jc=Object.prototype,zc=jc.hasOwnProperty;function Lc(o,n,e){var t=o[n];(!(zc.call(o,n)&&Ec(t,e))||e===void 0&&!(n in o))&&Ac(o,n,e)}var Ri=Lc,Pc=Ri,Rc=Pi;function Oc(o,n,e,t){var r=!e;e||(e={});for(var i=-1,s=n.length;++i<s;){var a=n[i],c=t?t(e[a],o[a],a,e,o):void 0;c===void 0&&(c=o[a]),r?Rc(e,a,c):Pc(e,a,c)}return e}var Tn=Oc;function Uc(o,n){for(var e=-1,t=Array(o);++e<o;)t[e]=n(e);return t}var Yc=Uc,Bc=Ot,Fc=ct,Wc="[object Arguments]";function Vc(o){return Fc(o)&&Bc(o)==Wc}var $c=Vc,Rr=$c,Gc=ct,Oi=Object.prototype,Qc=Oi.hasOwnProperty,Zc=Oi.propertyIsEnumerable,Hc=Rr(function(){return arguments}())?Rr:function(o){return Gc(o)&&Qc.call(o,"callee")&&!Zc.call(o,"callee")},Ui=Hc,qc=Array.isArray,_t=qc,ln={exports:{}};function Kc(){return!1}var Jc=Kc;ln.exports;(function(o,n){var e=Ke,t=Jc,r=n&&!n.nodeType&&n,i=r&&!0&&o&&!o.nodeType&&o,s=i&&i.exports===r,a=s?e.Buffer:void 0,c=a?a.isBuffer:void 0,l=c||t;o.exports=l})(ln,ln.exports);var cr=ln.exports,Xc=9007199254740991,_c=/^(?:0|[1-9]\d*)$/;function el(o,n){var e=typeof o;return n=n??Xc,!!n&&(e=="number"||e!="symbol"&&_c.test(o))&&o>-1&&o%1==0&&o<n}var tl=el,nl=9007199254740991;function rl(o){return typeof o=="number"&&o>-1&&o%1==0&&o<=nl}var Yi=rl,il=Ot,ol=Yi,sl=ct,al="[object Arguments]",cl="[object Array]",ll="[object Boolean]",ul="[object Date]",hl="[object Error]",dl="[object Function]",gl="[object Map]",fl="[object Number]",pl="[object Object]",Ml="[object RegExp]",yl="[object Set]",ml="[object String]",Il="[object WeakMap]",wl="[object ArrayBuffer]",Tl="[object DataView]",Sl="[object Float32Array]",vl="[object Float64Array]",Cl="[object Int8Array]",Nl="[object Int16Array]",kl="[object Int32Array]",xl="[object Uint8Array]",bl="[object Uint8ClampedArray]",Dl="[object Uint16Array]",Al="[object Uint32Array]",Se={};Se[Sl]=Se[vl]=Se[Cl]=Se[Nl]=Se[kl]=Se[xl]=Se[bl]=Se[Dl]=Se[Al]=!0;Se[al]=Se[cl]=Se[wl]=Se[ll]=Se[Tl]=Se[ul]=Se[hl]=Se[dl]=Se[gl]=Se[fl]=Se[pl]=Se[Ml]=Se[yl]=Se[ml]=Se[Il]=!1;function El(o){return sl(o)&&ol(o.length)&&!!Se[il(o)]}var jl=El;function zl(o){return function(n){return o(n)}}var Sn=zl,un={exports:{}};un.exports;(function(o,n){var e=bi,t=n&&!n.nodeType&&n,r=t&&!0&&o&&!o.nodeType&&o,i=r&&r.exports===t,s=i&&e.process,a=function(){try{var c=r&&r.require&&r.require("util").types;return c||s&&s.binding&&s.binding("util")}catch{}}();o.exports=a})(un,un.exports);var lr=un.exports,Ll=jl,Pl=Sn,Or=lr,Ur=Or&&Or.isTypedArray,Rl=Ur?Pl(Ur):Ll,Bi=Rl,Ol=Yc,Ul=Ui,Yl=_t,Bl=cr,Fl=tl,Wl=Bi,Vl=Object.prototype,$l=Vl.hasOwnProperty;function Gl(o,n){var e=Yl(o),t=!e&&Ul(o),r=!e&&!t&&Bl(o),i=!e&&!t&&!r&&Wl(o),s=e||t||r||i,a=s?Ol(o.length,String):[],c=a.length;for(var l in o)(n||$l.call(o,l))&&!(s&&(l=="length"||r&&(l=="offset"||l=="parent")||i&&(l=="buffer"||l=="byteLength"||l=="byteOffset")||Fl(l,c)))&&a.push(l);return a}var Fi=Gl,Ql=Object.prototype;function Zl(o){var n=o&&o.constructor,e=typeof n=="function"&&n.prototype||Ql;return o===e}var ur=Zl;function Hl(o,n){return function(e){return o(n(e))}}var Wi=Hl,ql=Wi,Kl=ql(Object.keys,Object),Jl=Kl,Xl=ur,_l=Jl,eu=Object.prototype,tu=eu.hasOwnProperty;function nu(o){if(!Xl(o))return _l(o);var n=[];for(var e in Object(o))tu.call(o,e)&&e!="constructor"&&n.push(e);return n}var ru=nu,iu=Ai,ou=Yi;function su(o){return o!=null&&ou(o.length)&&!iu(o)}var hr=su,au=Fi,cu=ru,lu=hr;function uu(o){return lu(o)?au(o):cu(o)}var dr=uu,hu=Tn,du=dr;function gu(o,n){return o&&hu(n,du(n),o)}var fu=gu;function pu(o){var n=[];if(o!=null)for(var e in Object(o))n.push(e);return n}var Mu=pu,yu=lt,mu=ur,Iu=Mu,wu=Object.prototype,Tu=wu.hasOwnProperty;function Su(o){if(!yu(o))return Iu(o);var n=mu(o),e=[];for(var t in o)t=="constructor"&&(n||!Tu.call(o,t))||e.push(t);return e}var vu=Su,Cu=Fi,Nu=vu,ku=hr;function xu(o){return ku(o)?Cu(o,!0):Nu(o)}var gr=xu,bu=Tn,Du=gr;function Au(o,n){return o&&bu(n,Du(n),o)}var Eu=Au,hn={exports:{}};hn.exports;(function(o,n){var e=Ke,t=n&&!n.nodeType&&n,r=t&&!0&&o&&!o.nodeType&&o,i=r&&r.exports===t,s=i?e.Buffer:void 0,a=s?s.allocUnsafe:void 0;function c(l,u){if(u)return l.slice();var h=l.length,d=a?a(h):new l.constructor(h);return l.copy(d),d}o.exports=c})(hn,hn.exports);var ju=hn.exports;function zu(o,n){var e=-1,t=o.length;for(n||(n=Array(t));++e<t;)n[e]=o[e];return n}var Lu=zu;function Pu(o,n){for(var e=-1,t=o==null?0:o.length,r=0,i=[];++e<t;){var s=o[e];n(s,e,o)&&(i[r++]=s)}return i}var Vi=Pu;function Ru(){return[]}var $i=Ru,Ou=Vi,Uu=$i,Yu=Object.prototype,Bu=Yu.propertyIsEnumerable,Yr=Object.getOwnPropertySymbols,Fu=Yr?function(o){return o==null?[]:(o=Object(o),Ou(Yr(o),function(n){return Bu.call(o,n)}))}:Uu,fr=Fu,Wu=Tn,Vu=fr;function $u(o,n){return Wu(o,Vu(o),n)}var Gu=$u;function Qu(o,n){for(var e=-1,t=n.length,r=o.length;++e<t;)o[r+e]=n[e];return o}var pr=Qu,Zu=Wi,Hu=Zu(Object.getPrototypeOf,Object),Gi=Hu,qu=pr,Ku=Gi,Ju=fr,Xu=$i,_u=Object.getOwnPropertySymbols,eh=_u?function(o){for(var n=[];o;)qu(n,Ju(o)),o=Ku(o);return n}:Xu,Qi=eh,th=Tn,nh=Qi;function rh(o,n){return th(o,nh(o),n)}var ih=rh,oh=pr,sh=_t;function ah(o,n,e){var t=n(o);return sh(o)?t:oh(t,e(o))}var Zi=ah,ch=Zi,lh=fr,uh=dr;function hh(o){return ch(o,uh,lh)}var Hi=hh,dh=Zi,gh=Qi,fh=gr;function ph(o){return dh(o,fh,gh)}var Mh=ph,yh=Ct,mh=Ke,Ih=yh(mh,"DataView"),wh=Ih,Th=Ct,Sh=Ke,vh=Th(Sh,"Promise"),Ch=vh,Nh=Ct,kh=Ke,xh=Nh(kh,"Set"),qi=xh,bh=Ct,Dh=Ke,Ah=bh(Dh,"WeakMap"),Eh=Ah,Wn=wh,Vn=ar,$n=Ch,Gn=qi,Qn=Eh,Ki=Ot,Wt=Ei,Br="[object Map]",jh="[object Object]",Fr="[object Promise]",Wr="[object Set]",Vr="[object WeakMap]",$r="[object DataView]",zh=Wt(Wn),Lh=Wt(Vn),Ph=Wt($n),Rh=Wt(Gn),Oh=Wt(Qn),mt=Ki;(Wn&&mt(new Wn(new ArrayBuffer(1)))!=$r||Vn&&mt(new Vn)!=Br||$n&&mt($n.resolve())!=Fr||Gn&&mt(new Gn)!=Wr||Qn&&mt(new Qn)!=Vr)&&(mt=function(o){var n=Ki(o),e=n==jh?o.constructor:void 0,t=e?Wt(e):"";if(t)switch(t){case zh:return $r;case Lh:return Br;case Ph:return Fr;case Rh:return Wr;case Oh:return Vr}return n});var vn=mt,Uh=Object.prototype,Yh=Uh.hasOwnProperty;function Bh(o){var n=o.length,e=new o.constructor(n);return n&&typeof o[0]=="string"&&Yh.call(o,"index")&&(e.index=o.index,e.input=o.input),e}var Fh=Bh,Wh=Ke,Vh=Wh.Uint8Array,Ji=Vh,Gr=Ji;function $h(o){var n=new o.constructor(o.byteLength);return new Gr(n).set(new Gr(o)),n}var Mr=$h,Gh=Mr;function Qh(o,n){var e=n?Gh(o.buffer):o.buffer;return new o.constructor(e,o.byteOffset,o.byteLength)}var Zh=Qh,Hh=/\w*$/;function qh(o){var n=new o.constructor(o.source,Hh.exec(o));return n.lastIndex=o.lastIndex,n}var Kh=qh,Qr=Xt,Zr=Qr?Qr.prototype:void 0,Hr=Zr?Zr.valueOf:void 0;function Jh(o){return Hr?Object(Hr.call(o)):{}}var Xh=Jh,_h=Mr;function ed(o,n){var e=n?_h(o.buffer):o.buffer;return new o.constructor(e,o.byteOffset,o.length)}var td=ed,nd=Mr,rd=Zh,id=Kh,od=Xh,sd=td,ad="[object Boolean]",cd="[object Date]",ld="[object Map]",ud="[object Number]",hd="[object RegExp]",dd="[object Set]",gd="[object String]",fd="[object Symbol]",pd="[object ArrayBuffer]",Md="[object DataView]",yd="[object Float32Array]",md="[object Float64Array]",Id="[object Int8Array]",wd="[object Int16Array]",Td="[object Int32Array]",Sd="[object Uint8Array]",vd="[object Uint8ClampedArray]",Cd="[object Uint16Array]",Nd="[object Uint32Array]";function kd(o,n,e){var t=o.constructor;switch(n){case pd:return nd(o);case ad:case cd:return new t(+o);case Md:return rd(o,e);case yd:case md:case Id:case wd:case Td:case Sd:case vd:case Cd:case Nd:return sd(o,e);case ld:return new t;case ud:case gd:return new t(o);case hd:return id(o);case dd:return new t;case fd:return od(o)}}var xd=kd,bd=lt,qr=Object.create,Dd=function(){function o(){}return function(n){if(!bd(n))return{};if(qr)return qr(n);o.prototype=n;var e=new o;return o.prototype=void 0,e}}(),Ad=Dd,Ed=Ad,jd=Gi,zd=ur;function Ld(o){return typeof o.constructor=="function"&&!zd(o)?Ed(jd(o)):{}}var Pd=Ld,Rd=vn,Od=ct,Ud="[object Map]";function Yd(o){return Od(o)&&Rd(o)==Ud}var Bd=Yd,Fd=Bd,Wd=Sn,Kr=lr,Jr=Kr&&Kr.isMap,Vd=Jr?Wd(Jr):Fd,$d=Vd,Gd=vn,Qd=ct,Zd="[object Set]";function Hd(o){return Qd(o)&&Gd(o)==Zd}var qd=Hd,Kd=qd,Jd=Sn,Xr=lr,_r=Xr&&Xr.isSet,Xd=_r?Jd(_r):Kd,Xi=Xd;const _d=Mn(Xi);var eg=zi,tg=kc,ng=Ri,rg=fu,ig=Eu,og=ju,sg=Lu,ag=Gu,cg=ih,lg=Hi,ug=Mh,hg=vn,dg=Fh,gg=xd,fg=Pd,pg=_t,Mg=cr,yg=$d,mg=lt,Ig=Xi,wg=dr,Tg=gr,Sg=1,vg=2,Cg=4,_i="[object Arguments]",Ng="[object Array]",kg="[object Boolean]",xg="[object Date]",bg="[object Error]",eo="[object Function]",Dg="[object GeneratorFunction]",Ag="[object Map]",Eg="[object Number]",to="[object Object]",jg="[object RegExp]",zg="[object Set]",Lg="[object String]",Pg="[object Symbol]",Rg="[object WeakMap]",Og="[object ArrayBuffer]",Ug="[object DataView]",Yg="[object Float32Array]",Bg="[object Float64Array]",Fg="[object Int8Array]",Wg="[object Int16Array]",Vg="[object Int32Array]",$g="[object Uint8Array]",Gg="[object Uint8ClampedArray]",Qg="[object Uint16Array]",Zg="[object Uint32Array]",we={};we[_i]=we[Ng]=we[Og]=we[Ug]=we[kg]=we[xg]=we[Yg]=we[Bg]=we[Fg]=we[Wg]=we[Vg]=we[Ag]=we[Eg]=we[to]=we[jg]=we[zg]=we[Lg]=we[Pg]=we[$g]=we[Gg]=we[Qg]=we[Zg]=!0;we[bg]=we[eo]=we[Rg]=!1;function cn(o,n,e,t,r,i){var s,a=n&Sg,c=n&vg,l=n&Cg;if(e&&(s=r?e(o,t,r,i):e(o)),s!==void 0)return s;if(!mg(o))return o;var u=pg(o);if(u){if(s=dg(o),!a)return sg(o,s)}else{var h=hg(o),d=h==eo||h==Dg;if(Mg(o))return og(o,a);if(h==to||h==_i||d&&!r){if(s=c||d?{}:fg(o),!a)return c?cg(o,ig(s,o)):ag(o,rg(s,o))}else{if(!we[h])return r?o:{};s=gg(o,h,a)}}i||(i=new eg);var f=i.get(o);if(f)return f;i.set(o,s),Ig(o)?o.forEach(function(N){s.add(cn(N,n,e,N,o,i))}):yg(o)&&o.forEach(function(N,y){s.set(y,cn(N,n,e,y,o,i))});var p=l?c?ug:lg:c?Tg:wg,w=u?void 0:p(o);return tg(w||o,function(N,y){w&&(y=N,N=o[y]),ng(s,y,cn(N,n,e,y,o,i))}),s}var Hg=cn,qg=Hg,Kg=1,Jg=4;function Xg(o){return qg(o,Kg|Jg)}var _g=Xg;const en=Mn(_g),no="1.1.38",ef="@netless/appliance-plugin",ei=typeof OffscreenCanvas=="function"?"worker":"mainThread";if(typeof window<"u"){let o=window.__netlessUA||"";o+=` ${ef}@${no}`,window.__netlessUA=o}const ye={useWorker:"auto",useSimple:!0,useBackgroundThread:!1,syncOpt:{interval:300,smoothSync:!0},cursor:{enable:!0,expirationTime:5e3,moveDelayTime:40},bufferSize:{full:2e4,sub:600},bezier:{enable:!1,maxDrawCount:1/0,combineUnitTime:300},pencilEraser:{useBitMap:!0,maxImageWidth:1920,maxImageHeight:1920,maxCombineTime:500},strokeWidth:{min:1,max:10},textEditor:{showFloatBar:!0,canSelectorSwitch:!0,rightBoundBreak:!0,extendFontFaces:[],loadFontFacesTimeout:2e4},longDottedStroke:{lineCap:"round",segment:1,gap:2},dottedStroke:{lineCap:"round",segment:1,gap:2},normalStroke:{lineCap:"round"},undoRedo:{enableGlobal:!1,maxStackLength:20,timingFix:!0,ackTimeout:5e3,gracePeriodTimeout:3e3,doingFallbackTimeout:3e4},markmap:{enable:!0,timeout:1e4,options:{autoFit:!0,duration:0,zoom:!1,pan:!1,maxInitialScale:10}},overwriteSelectorStyles:{}};function Cn(o){return JSON.parse(vi.decompress(o))}function St(o){return vi.compress(JSON.stringify(o))}const Ae=Object.keys,Be="++",q="selector",ro="all";var tf="__lodash_hash_undefined__";function nf(o){return this.__data__.set(o,tf),this}var rf=nf;function of(o){return this.__data__.has(o)}var sf=of,af=ji,cf=rf,lf=sf;function dn(o){var n=-1,e=o==null?0:o.length;for(this.__data__=new af;++n<e;)this.add(o[n])}dn.prototype.add=dn.prototype.push=cf;dn.prototype.has=lf;var yr=dn;function uf(o,n){for(var e=-1,t=o==null?0:o.length;++e<t;)if(n(o[e],e,o))return!0;return!1}var hf=uf;function df(o,n){return o.has(n)}var mr=df,gf=yr,ff=hf,pf=mr,Mf=1,yf=2;function mf(o,n,e,t,r,i){var s=e&Mf,a=o.length,c=n.length;if(a!=c&&!(s&&c>a))return!1;var l=i.get(o),u=i.get(n);if(l&&u)return l==n&&u==o;var h=-1,d=!0,f=e&yf?new gf:void 0;for(i.set(o,n),i.set(n,o);++h<a;){var p=o[h],w=n[h];if(t)var N=s?t(w,p,h,n,o,i):t(p,w,h,o,n,i);if(N!==void 0){if(N)continue;d=!1;break}if(f){if(!ff(n,function(y,M){if(!pf(f,M)&&(p===y||r(p,y,e,t,i)))return f.push(M)})){d=!1;break}}else if(!(p===w||r(p,w,e,t,i))){d=!1;break}}return i.delete(o),i.delete(n),d}var io=mf;function If(o){var n=-1,e=Array(o.size);return o.forEach(function(t,r){e[++n]=[r,t]}),e}var wf=If;function Tf(o){var n=-1,e=Array(o.size);return o.forEach(function(t){e[++n]=t}),e}var Ir=Tf,ti=Xt,ni=Ji,Sf=sr,vf=io,Cf=wf,Nf=Ir,kf=1,xf=2,bf="[object Boolean]",Df="[object Date]",Af="[object Error]",Ef="[object Map]",jf="[object Number]",zf="[object RegExp]",Lf="[object Set]",Pf="[object String]",Rf="[object Symbol]",Of="[object ArrayBuffer]",Uf="[object DataView]",ri=ti?ti.prototype:void 0,jn=ri?ri.valueOf:void 0;function Yf(o,n,e,t,r,i,s){switch(e){case Uf:if(o.byteLength!=n.byteLength||o.byteOffset!=n.byteOffset)return!1;o=o.buffer,n=n.buffer;case Of:return!(o.byteLength!=n.byteLength||!i(new ni(o),new ni(n)));case bf:case Df:case jf:return Sf(+o,+n);case Af:return o.name==n.name&&o.message==n.message;case zf:case Pf:return o==n+"";case Ef:var a=Cf;case Lf:var c=t&kf;if(a||(a=Nf),o.size!=n.size&&!c)return!1;var l=s.get(o);if(l)return l==n;t|=xf,s.set(o,n);var u=vf(a(o),a(n),t,r,i,s);return s.delete(o),u;case Rf:if(jn)return jn.call(o)==jn.call(n)}return!1}var Bf=Yf;function tn(o,n,e){return"#"+((o<<16)+(n<<8)+e).toString(16).padStart(6,"0")}function Ee(o,n=1){return"rgba("+parseInt("0x"+o.slice(1,3))+","+parseInt("0x"+o.slice(3,5))+","+parseInt("0x"+o.slice(5,7))+","+n+")"}function bt(o,n,e,t=1){return`rgba(${o},${n},${e},${t})`}function Nn(o){const n=o.split(","),e=parseInt(n[0].split("(")[1]),t=parseInt(n[1]),r=parseInt(n[2]),i=Number(n[3].split(")")[0]);return[tn(e,t,r),i]}function Kt(o){const n=o.split(","),e=parseInt(n[0].split("(")[1]),t=parseInt(n[1]),r=parseInt(n[2]),i=Number(n[3].split(")")[0]);return[e,t,r,i]}function sn(o){return o==="transparent"}var qe=(o=>(o[o.Text=1]="Text",o[o.Shape=2]="Shape",o))(qe||{});const Oe=class Oe{createProxy(n){const e=new Proxy(n,{get(t,r,i){const s=Oe.interceptors.hasOwnProperty(r)?Oe.interceptors:t;return Reflect.get(s,r,i)}});return Oe.proxyToRaw.set(e,n),e}};I(Oe,"proxyToRaw",new WeakMap),I(Oe,"interceptors",{entries(...n){return Oe.proxyToRaw.get(this).entries(...n)},forEach(...n){return Oe.proxyToRaw.get(this).forEach(...n)},size(){return Oe.proxyToRaw.get(this).size},get(n){return Oe.proxyToRaw.get(this).get(n)},set(n,e){return Oe.proxyToRaw.get(this).set(n,e)},delete(n){return Oe.proxyToRaw.get(this).delete(n)},clear(){return Oe.proxyToRaw.get(this).clear()}});let It=Oe;const Zn=5;class Ff{constructor(n){I(this,"internalMsgEmitter");I(this,"publicMsgEmitter");I(this,"control");I(this,"editors");I(this,"activeId");I(this,"proxyMap");I(this,"taskqueue",new Map);I(this,"undoTickerId");I(this,"checkLocalTextBlur",j.debounce(()=>{if(this.collector)for(const[n,e]of this.editors.entries())e.opt.workState!==E.Done&&this.collector.isLocalId(n)&&this.activeId!==n&&(e.opt.text&&e.opt.text.replace(/\s*,/g,"")?this.unActive(n):this.delete(n,!0,!0))},100));const{control:e,internalMsgEmitter:t,publicMsgEmitter:r}=n;this.control=e,this.internalMsgEmitter=t,this.publicMsgEmitter=r;const i=new Map;this.proxyMap=new It;const s=this,a=It.interceptors.set;It.interceptors.set=function(l,u){return s.interceptors.set(l,u),a.call(this,l,u)};const c=It.interceptors.delete;It.interceptors.delete=function(l){return s.interceptors.delete(l),c.call(this,l)},this.editors=this.proxyMap.createProxy(i)}get collector(){return this.control.collector}set UndoTickerId(n){this.undoTickerId=n}get UndoTickerId(){return this.undoTickerId}getDoneUndoTicker(n,e,t){const r=t??e,i=this.control.viewContainerManager.getUndoTickerId(n);if(r===E.Done)return this.undoTickerId&&i===this.undoTickerId?this.undoTickerId:i}ackDoneRender(n,e,t,r,i){n&&(this.internalMsgEmitter.emit("ackRenderUndoTicker",n,e,t,{requestId:r,emitEventType:i}),this.undoTickerId=void 0)}filterEditor(n){const e=new Map;return this.editors.forEach((t,r)=>{t.viewId===n&&e.set(r,t)}),e}get interceptors(){return{set:(n,e)=>{var M,v,m,T,C,k,z,A,x;if(!this.collector)return!0;const{viewId:t,scenePath:r,canSync:i,canWorker:s,type:a,opt:c,dataType:l,updateNodeOpt:u,requestId:h,emitEventType:d,skipStorageDispatch:f}=e,p=this.getDoneUndoTicker(t,c==null?void 0:c.workState,u==null?void 0:u.workState);if(!s&&!i)return!0;const N=((M=this.collector)==null?void 0:M.isLocalId(n))?(v=this.collector)==null?void 0:v.transformKey(n):n,y=((m=this.collector)==null?void 0:m.storage[t])&&this.collector.storage[t][r]&&this.collector.storage[t][r][N]||void 0;y?y.toolsType===S.Text&&(s&&(this.control.worker.queryTaskBatchData({workId:n,msgType:F.UpdateNode}).forEach(D=>{var b;(b=this.control.worker)==null||b.taskBatchData.delete(D)}),(z=this.control.worker)==null||z.taskBatchData.add({workId:n,msgType:F.UpdateNode,dataType:l||J.Local,toolsType:S.Text,opt:c,viewId:t,scenePath:r,willRefresh:!0}),(A=this.control.worker)==null||A.runAnimation()),i&&!f&&((x=this.collector)==null||x.dispatch({type:F.UpdateNode,workId:n,toolsType:S.Text,opt:c,viewId:t,scenePath:r,updateNodeOpt:u,requestId:h,emitEventType:d,needUndoTicker:p}),this.ackDoneRender(p,t,r,h,d),c.workState===E.Done&&this.control.runEffectWork(()=>{this.control.worker.setShapeSelectorByWorkId(n,t)}))):a===qe.Text&&(i&&!f&&((T=this.collector)==null||T.dispatch({type:c.text&&F.FullWork||F.CreateWork,workId:n,toolsType:S.Text,opt:c,isSync:!0,viewId:t,scenePath:r,updateNodeOpt:u,requestId:h,emitEventType:d,needUndoTicker:p}),this.ackDoneRender(p,t,r,h,d)),s&&((C=this.control.worker)==null||C.taskBatchData.add({workId:n,msgType:c.text&&F.FullWork||F.CreateWork,dataType:l||J.Local,toolsType:S.Text,opt:c,viewId:t,scenePath:r,willRefresh:!0}),(k=this.control.worker)==null||k.runAnimation()))},delete:n=>{var c,l,u;if(!this.collector)return!0;const e=this.editors.get(n);if(!e)return!0;const{viewId:t,scenePath:r,canSync:i,canWorker:s}=e,a=this.getDoneUndoTicker(t,E.Done);if(!s&&!i)return!0;s&&((c=this.control.worker)==null||c.taskBatchData.add({workId:n,toolsType:S.Text,msgType:F.RemoveNode,dataType:J.Local,viewId:t,scenePath:r,willRefresh:!0}),(l=this.control.worker)==null||l.runAnimation()),i&&((u=this.collector)==null||u.dispatch({type:F.RemoveNode,removeIds:[n],toolsType:S.Text,viewId:t,scenePath:r,needUndoTicker:a}),this.ackDoneRender(a,t,r))},clear(){return!0}}}computeTextActive(n,e){var i,s,a,c;const t=(i=this.control.viewContainerManager)==null?void 0:i.transformToScenePoint(n,e),r=(s=this.control.viewContainerManager)==null?void 0:s.getCurScenePath(e);e&&r&&((a=this.control.worker)==null||a.taskBatchData.add({msgType:F.GetTextActive,dataType:J.Local,op:t,viewId:e,scenePath:r}),(c=this.control.worker)==null||c.runAnimation())}checkEmptyTextBlur(){var e;let n=this.activeId;for(const[t,r]of this.editors.entries())if(r.opt.uid&&r.opt.uid===((e=this.collector)==null?void 0:e.uid)){n=t;break}if(n){const t=this.editors.get(n);(t==null?void 0:t.opt.text)&&(t==null?void 0:t.opt.text.replace(/\s*,/g,""))?this.unActive(n):this.delete(n,!0,!0)}this.checkLocalTextBlur()}onCameraChange(n,e){var t,r;for(const[i,s]of this.editors.entries())if(s.viewId===e){const{boxPoint:a,boxSize:c}=s.opt,l=a&&((t=this.control.viewContainerManager)==null?void 0:t.transformToOriginPoint(a,s.viewId)),u=(r=this.control.viewContainerManager)==null?void 0:r.getCurScenePath(e);if(u&&e){const h={x:l&&l[0]||0,y:l&&l[1]||0,w:c&&c[0]||0,h:c&&c[1]||0,opt:s.opt,scale:n.scale,type:qe.Text,viewId:e,scenePath:u,canWorker:!1,canSync:!1};this.editors.set(i,h),this.control.viewContainerManager.updateTextEditorInfo(e,this.activeId)}}}deriveTextEditorInfoFromServiceData(n,e={}){var N,y,M;const{workId:t,opt:r,msgType:i,viewId:s,scenePath:a,dataType:c,updateNodeOpt:l}=n;if(!t||!s||!a)return;const u=t.toString();if(i===F.RemoveNode){this.delete(u,!0,!0);return}const{boxPoint:h,boxSize:d}=r,f=h&&((N=this.control.viewContainerManager)==null?void 0:N.transformToOriginPoint(h,s)),p=this.control.viewContainerManager.getView(s),w={x:f&&f[0]||0,y:f&&f[1]||0,w:d&&d[0]||0,h:d&&d[1]||0,opt:r,type:qe.Text,canWorker:e.canWorker??!0,canSync:e.canSync??!1,dataType:c,scale:((y=p==null?void 0:p.cameraOpt)==null?void 0:y.scale)||1,viewId:s,scenePath:a};if(r&&r.workState===E.Done&&!this.control.cursor.isEnableCursor&&h&&d){let m=l==null?void 0:l.uid;if(!m){const T=this.editors.get(u);m=T&&((M=T.opt)==null?void 0:M.uid)}m&&this.control.cursor.collectServiceCursor({op:h&&[h[0]+d[0],h[1]+d[1]],uid:m,workState:E.Done,viewId:s,type:F.Cursor})}return this.editors.set(u,w),c===J.Service&&r.workState===E.Done&&this.activeId===u&&(this.activeId=void 0),(e.updateView??!0)&&this.control.viewContainerManager.updateTextEditorInfo(s,this.activeId),w}onServiceDerive(n){this.deriveTextEditorInfoFromServiceData(n)}updateForViewEdited(n,e){var r;this.editors.set(n,e);const t=(r=this.taskqueue.get(n))==null?void 0:r.resolve;t&&t(e)}active(n,e){var r;const t=this.editors.get(n);t&&t.viewId&&(t.opt.workState=E.Start,t.opt.uid=(r=this.collector)==null?void 0:r.uid,this.activeId=n,t.canWorker=!0,t.canSync=!0,e&&t.viewId&&this.addUndoTicker(e,t.viewId),t.undoTickerId=e||t.undoTickerId||this.undoTickerId,this.editors.set(n,t),this.control.viewContainerManager.updateTextEditorInfo(t.viewId,this.activeId))}unActive(n){var t;const e=this.editors.get(n);if(e&&e.viewId){const r=e.undoTickerId||this.control.viewContainerManager.getUndoTickerId(e.viewId)||this.undoTickerId;r&&this.internalMsgEmitter.emit("finalizeRequested",r,e.viewId,[n],e.scenePath),e.opt.workState=E.Done,e.opt.uid=void 0,e.canWorker=!0,e.canSync=!0,this.editors.set(n,e),this.activeId=void 0;const i=(t=this.control.viewContainerManager.getView(e.viewId))==null?void 0:t.container;if(i){const s=CSS.escape(n),a=i.querySelector(`.editor-box #${s}`);a&&a.blur()}this.control.viewContainerManager.updateTextEditorInfo(e.viewId,this.activeId)}}addUndoTicker(n,e){this.internalMsgEmitter.emit("addUndoTicker",n,e,{render:!0,storage:!0}),this.undoTickerId=n}createTextForMasterController(n,e){var s;const{workId:t,isActive:r,...i}=n;e&&this.addUndoTicker(e,i.viewId),i.opt.uid=(s=this.collector)==null?void 0:s.uid,i.undoTickerId=e||i.undoTickerId||this.undoTickerId,r&&(this.activeId=t),i.dataType=J.Local,i.canWorker=!0,i.canSync=!0,this.editors.set(t,i),this.control.viewContainerManager.updateTextEditorInfo(i.viewId,this.activeId)}updateTextForMasterController(n,e){var s;const{workId:t,...r}=n;e&&this.addUndoTicker(e,r.viewId);const i=this.editors.get(t)||{};r.opt&&(r.opt.uid=(s=this.collector)==null?void 0:s.uid),r.undoTickerId=e||i.undoTickerId||this.undoTickerId,r.dataType=J.Local,this.editors.set(t,{...i,...r}),this.control.viewContainerManager.updateTextEditorInfo(r.viewId,this.activeId)}async updateTextControllerWithEffectAsync(n,e){var u;const{workId:t,...r}=n;e&&this.addUndoTicker(e,r.viewId);const i=this.editors.get(t)||{};r.opt&&(r.opt.uid=(u=this.collector)==null?void 0:u.uid),r.undoTickerId=e||i.undoTickerId||this.undoTickerId,r.dataType=J.Local;const s={...i,...r};if(this.editors.set(t,s),this.control.viewContainerManager.updateTextEditorInfo(r.viewId,this.activeId),this.taskqueue.has(t)){const h=this.taskqueue.get(t);return h&&(h.clocker&&clearTimeout(h.clocker),this.taskqueue.delete(t)),await this.updateTextControllerWithEffectAsync(n)}const a=setTimeout(()=>{var d;const h=(d=this.taskqueue.get(t))==null?void 0:d.resolve;h&&h(s)},50),c=await new Promise(h=>{this.taskqueue.set(t,{resolve:h,clocker:a})}),l=this.taskqueue.get(t);return l&&(l.clocker&&clearTimeout(l.clocker),this.taskqueue.delete(t)),c}updateTextForWorker(n,e){const{workId:t,isActive:r,...i}=n,s=this.editors.get(t)||{},a={...s,...i};if(e&&this.addUndoTicker(e,i.viewId),a.undoTickerId=e||s.undoTickerId||this.undoTickerId,r){a.canWorker=!1,a.canSync=!1,this.editors.set(t,a),this.active(t);return}this.editors.set(t,a),this.control.viewContainerManager.updateTextEditorInfo(i.viewId,this.activeId)}get(n){return this.editors.get(n)}delete(n,e,t){const r=this.editors.get(n);if(r){const i=r.viewId;r.canSync=e,r.canWorker=t,this.editors.delete(n),this.activeId===n&&(this.activeId=void 0),this.control.viewContainerManager.updateTextEditorInfo(i,this.activeId)}}deleteBatch(n,e,t){const r=new Set;for(const i of n){const s=this.editors.get(i);if(s){const a=s.viewId;s.canSync=e,s.canWorker=t,this.editors.delete(i),this.activeId===i&&(this.activeId=void 0),r.add(a)}}for(const i of r)this.control.viewContainerManager.updateTextEditorInfo(i,this.activeId)}clear(n,e){this.editors.forEach((t,r)=>{t.viewId===n&&(e&&(t.canSync=!1),t.canWorker=!1,this.editors.delete(r))}),this.activeId=void 0,this.control.viewContainerManager.updateTextEditorInfo(n,this.activeId)}destory(){this.editors.clear(),this.activeId=void 0}insertText(n,e,t,r){var p,w;const i=(p=this.control.room)==null?void 0:p.state.memberState;if(!i)return;const s=this.control.viewContainerManager.getView(n);if(!(s!=null&&s.focusScenePath))return;const a=s==null?void 0:s.cameraOpt,c=this.control.getToolsOpt(S.Text,i);if(!c)return;const l=(w=this.control.viewContainerManager)==null?void 0:w.transformToOriginPoint([e,t],n),h=Bn(r,{whiteList:{},stripIgnoreTag:!0,stripIgnoreTagBody:["script"]}).split(/\n/),d=c.toolsOpt;d.text=St(h),d.workState=E.Doing,d.boxPoint=[Math.round(e),Math.round(t)],d.boxSize=[d.fontSize,d.fontSize];const f=this.control.worker.now;return this.control.textEditorManager.checkEmptyTextBlur(),this.control.textEditorManager.createTextForMasterController({workId:f.toString(),x:l&&l[0]||0,y:l&&l[1]||0,scale:(a==null?void 0:a.scale)||1,opt:d,type:qe.Text,isActive:!0,viewId:n,scenePath:s.focusScenePath},f),f.toString()}updateText(n,e){const t=this.editors.get(n.toString());if(!t)return;const i=Bn(e,{whiteList:{},stripIgnoreTag:!0,stripIgnoreTagBody:["script"]}).split(/\n/);t.opt.text=St(i),this.control.textEditorManager.updateTextForMasterController({workId:n,opt:t.opt,viewId:t.viewId,canSync:!0,canWorker:!0},this.control.worker.now)}}function Wf(o){return o}var oo=Wf;function Vf(o,n,e){switch(e.length){case 0:return o.call(n);case 1:return o.call(n,e[0]);case 2:return o.call(n,e[0],e[1]);case 3:return o.call(n,e[0],e[1],e[2])}return o.apply(n,e)}var $f=Vf,Gf=$f,ii=Math.max;function Qf(o,n,e){return n=ii(n===void 0?o.length-1:n,0),function(){for(var t=arguments,r=-1,i=ii(t.length-n,0),s=Array(i);++r<i;)s[r]=t[n+r];r=-1;for(var a=Array(n+1);++r<n;)a[r]=t[r];return a[n]=e(s),Gf(o,this,a)}}var Zf=Qf;function Hf(o){return function(){return o}}var qf=Hf,Kf=qf,oi=Li,Jf=oo,Xf=oi?function(o,n){return oi(o,"toString",{configurable:!0,enumerable:!1,value:Kf(n),writable:!0})}:Jf,_f=Xf,ep=800,tp=16,np=Date.now;function rp(o){var n=0,e=0;return function(){var t=np(),r=tp-(t-e);if(e=t,r>0){if(++n>=ep)return arguments[0]}else n=0;return o.apply(void 0,arguments)}}var ip=rp,op=_f,sp=ip,ap=sp(op),cp=ap,lp=oo,up=Zf,hp=cp;function dp(o,n){return hp(up(o,n,lp),o+"")}var gp=dp;function fp(o,n,e,t){for(var r=o.length,i=e+(t?1:-1);t?i--:++i<r;)if(n(o[i],i,o))return i;return-1}var pp=fp;function Mp(o){return o!==o}var yp=Mp;function mp(o,n,e){for(var t=e-1,r=o.length;++t<r;)if(o[t]===n)return t;return-1}var Ip=mp,wp=pp,Tp=yp,Sp=Ip;function vp(o,n,e){return n===n?Sp(o,n,e):wp(o,Tp,e)}var Cp=vp,Np=Cp;function kp(o,n){var e=o==null?0:o.length;return!!e&&Np(o,n,0)>-1}var so=kp;function xp(o,n,e){for(var t=-1,r=o==null?0:o.length;++t<r;)if(e(n,o[t]))return!0;return!1}var ao=xp;function bp(o,n){for(var e=-1,t=o==null?0:o.length,r=Array(t);++e<t;)r[e]=n(o[e],e,o);return r}var Dp=bp,Ap=yr,Ep=so,jp=ao,zp=Dp,Lp=Sn,Pp=mr,Rp=200;function Op(o,n,e,t){var r=-1,i=Ep,s=!0,a=o.length,c=[],l=n.length;if(!a)return c;e&&(n=zp(n,Lp(e))),t?(i=jp,s=!1):n.length>=Rp&&(i=Pp,s=!1,n=new Ap(n));e:for(;++r<a;){var u=o[r],h=e==null?u:e(u);if(u=t||u!==0?u:0,s&&h===h){for(var d=l;d--;)if(n[d]===h)continue e;c.push(u)}else i(n,h,t)||c.push(u)}return c}var Up=Op,si=Xt,Yp=Ui,Bp=_t,ai=si?si.isConcatSpreadable:void 0;function Fp(o){return Bp(o)||Yp(o)||!!(ai&&o&&o[ai])}var Wp=Fp,Vp=pr,$p=Wp;function co(o,n,e,t,r){var i=-1,s=o.length;for(e||(e=$p),r||(r=[]);++i<s;){var a=o[i];n>0&&e(a)?n>1?co(a,n-1,e,t,r):Vp(r,a):t||(r[r.length]=a)}return r}var Gp=co;function Qp(){}var Zp=Qp,zn=qi,Hp=Zp,qp=Ir,Kp=1/0,Jp=zn&&1/qp(new zn([,-0]))[1]==Kp?function(o){return new zn(o)}:Hp,Xp=Jp,_p=yr,eM=so,tM=ao,nM=mr,rM=Xp,iM=Ir,oM=200;function sM(o,n,e){var t=-1,r=eM,i=o.length,s=!0,a=[],c=a;if(e)s=!1,r=tM;else if(i>=oM){var l=n?null:rM(o);if(l)return iM(l);s=!1,r=nM,c=new _p}else c=n?[]:a;e:for(;++t<i;){var u=o[t],h=n?n(u):u;if(u=e||u!==0?u:0,s&&h===h){for(var d=c.length;d--;)if(c[d]===h)continue e;n&&c.push(h),a.push(u)}else r(c,h,e)||(c!==a&&c.push(h),a.push(u))}return a}var aM=sM,cM=Up,lM=Gp,ci=aM;function uM(o,n,e){var t=o.length;if(t<2)return t?ci(o[0]):[];for(var r=-1,i=Array(t);++r<t;)for(var s=o[r],a=-1;++a<t;)a!=r&&(i[r]=cM(i[r]||s,o[a],n,e));return ci(lM(i,1),n,e)}var hM=uM,dM=hr,gM=ct;function fM(o){return gM(o)&&dM(o)}var pM=fM,MM=Vi,yM=gp,mM=hM,IM=pM;yM(function(o){return mM(MM(o,IM))});function wM(o,n){if(o&&n){const e=Math.min(o.x,n.x),t=Math.min(o.y,n.y),r=Math.max(o.x+o.w,n.x+n.w),i=Math.max(o.y+o.h,n.y+n.h),s=r-e,a=i-t;return{x:e,y:t,w:s,h:a}}return n||o}function wr(o,n){if(o&&n){const e=Math.min(o.originX,n.originX),t=Math.min(o.originY,n.originY),r=Math.max(o.originX+o.width,n.originX+n.width),i=Math.max(o.originY+o.height,n.originY+n.height),s=r-e,a=i-t;return{originX:e,originY:t,width:s,height:a}}return n||o}function Tr(o,n=0){const e={x:0,y:0,w:0,h:0};let t=1/0,r=1/0,i=-1/0,s=-1/0;return o.forEach(a=>{const[c,l]=a.XY;t=Math.min(t,c-n),r=Math.min(r,l-n),i=Math.max(i,c+n),s=Math.max(s,l+n)}),e.x=t,e.y=r,e.w=i-t,e.h=s-r,e}function TM(o,n){return!(o.x+o.w<n.x||o.x>n.x+n.w||o.y+o.h<n.y||o.y>n.y+n.h)}function SM(o,n=10){return{x:Math.floor(o.x-n),y:Math.floor(o.y-n),w:Math.ceil(o.w+n*2),h:Math.ceil(o.h+n*2)}}function vM(o,n){return{x:o.x+n[0],y:o.y+n[1],w:o.w,h:o.h}}function CM(o,n){const e=new V(o.x,o.y),t=new V(o.x+o.w,o.y),r=new V(o.x+o.w,o.y+o.h),i=new V(o.x,o.y+o.h),s=new V(o.x+o.w/2,o.y+o.h/2),a=Math.PI*n/180,c=V.RotWith(e,s,a),l=V.RotWith(t,s,a),u=V.RotWith(r,s,a),h=V.RotWith(i,s,a);return[c,l,u,h]}function NM(o,n){const e=CM(o,n);return Tr(e)}function kM(o,n,e){const t=new V(o.x,o.y),r=new V(o.x+o.w,o.y),i=new V(o.x+o.w,o.y+o.h),s=new V(o.x,o.y+o.h),a=new V(e[0],e[1]),c=new V(n[0],n[1]),l=V.ScaleWOrigin(t,c,a),u=V.ScaleWOrigin(r,c,a),h=V.ScaleWOrigin(i,c,a),d=V.ScaleWOrigin(s,c,a);return Tr([l,u,h,d])}function xM(o,n,e){const t=new V(n[0],n[1]);for(let r=0;r<o.length;r+=3){const i=new V(o[r],o[r+1]),s=Math.PI*e/180,a=V.RotWith(i,t,s);o[r]=a.x,o[r+1]=a.y}}function bM(o,n,e){const t=new V(n[0],n[1]);for(let r=0;r<o.length;r+=2){const i=new V(o[r],o[r+1]),s=Math.PI*e/180,a=V.RotWith(i,t,s);o[r]=a.x,o[r+1]=a.y}}function DM(o,n,e,t=[0,0]){const r=new V(n[0],n[1]);for(let i=0;i<o.length;i+=3){const s=new V(o[i],o[i+1]),a=new V(e[0],e[1]),c=V.ScaleWOrigin(s,a,r);o[i]=c.x+t[0],o[i+1]=c.y+t[1]}}function AM(o,n,e,t=[0,0]){const r=new V(n[0],n[1]);for(let i=0;i<o.length;i+=2){const s=new V(o[i],o[i+1]),a=new V(e[0],e[1]),c=V.ScaleWOrigin(s,a,r);o[i]=c.x+t[0],o[i+1]=c.y+t[1]}}function lo(o,n){return o[0]>=n.x&&o[0]<=n.x+n.w&&o[1]>=n.y&&o[1]<=n.y+n.h}function EM(o,n){const e=o<=n?1:o/n,t=n<=o?1:n/o;return[e,t]}function jM(o){for(const n of o)if(isNaN(n)||n===1/0||n===-1/0)return!1;return!0}function zM(o){return o!==Math.floor(o)}function LM(o){const n=o.toString();return n.indexOf(".")!==-1?n.split(".")[1].length:0}function PM(o,n){for(;n!==0;)[o,n]=[n,o%n];return o}function RM(o){return`${gn(o.x)},${gn(o.y)} `}function OM(o,n){return`${gn((o.x+n.x)/2)},${gn((o.y+n.y)/2)} `}function gn(o){return+o.toFixed(4)}const He=async(o,n,e=!1)=>{let t,r;return new Promise(function(i){if(e&&requestIdleCallback)requestIdleCallback(()=>{i(1)},{timeout:n});else{if(typeof window.requestIdleCallback=="function"){const s=typeof n=="number"&&!isNaN(n)&&n>0?n:0;r=window.requestIdleCallback(()=>{clearTimeout(t),i(1)},{timeout:s})}t=setTimeout(()=>{r&&window.cancelIdleCallback(r),i(1)},n||0)}}).then(function(){o()}).catch(function(){o()})},Pt=o=>Math.max(1,(window.devicePixelRatio||1)/1),UM=(o,n)=>o.x+o.w<n.x||o.x>n.x+n.w||o.y+o.h<n.y||o.y>n.y+n.h?Et.outside:o.x>=n.x&&o.y>=n.y&&o.x+o.w<=n.x+n.w&&o.y+o.h<=n.y+n.h?Et.inside:Et.intersect;function YM(o){let n=0;for(let e=0;e<o.length;e++){const t=o.charCodeAt(e);t>=1&&t<=126||65376<=t&&t<=65439?n++:n+=2}return n}function BM(o){if(!o||typeof o!="string")return!1;const n=o.trim();if(!n)return!1;const e=[/^\s*#{1,6}\s+.+/m,/^\s*[-*+]\s+.+/m,/^\s*\d+\.\s+.+/m,/\[([^\]]+)\]\(([^)]+)\)/,/\[([^\]]+)\]\[([^\]]+)\]/,/```[\s\S]*?```/,/`[^`]+`/,/^\s*\|.+\|/m,/!\[([^\]]*)\]\(([^)]+)\)/,/\*\*[^*]+\*\*/,/__[^_]+__/,/\*[^*]+\*/,/_[^_]+_/,/~~[^~]+~~/,/==[^=]+==/,/^\s*[-*+]\s+\[[ xX]\]\s+.+/m,/^\s*>\s+.+/m,/^\s*[-*]{3,}\s*$/m];let t=0;for(const s of e)s.test(n)&&t++;const i=[/^\s*#{1,6}\s+/m,/^\s*[-*+]\s+/m,/^\s*\d+\.\s+/m,/```[\s\S]*?```/,/^\s*\|.+\|/m].some(s=>s.test(n));return t>=2||i}class FM{constructor(n,e){I(this,"plugin");I(this,"uid");I(this,"control");this.control=n,this.plugin=e,this.uid=e.displayer.uid}getNamespaceData(){var n;return an((n=this.plugin)==null?void 0:n.attributes[this.namespace])||{}}getAuthSpaceData(){var n;return an((n=this.plugin)==null?void 0:n.attributes[this.authSpace])||{}}getGlobalUndoRedoStackData(){var n;return an((n=this.plugin)==null?void 0:n.attributes[this.globalUndoRedoStackSpace])||{}}getUidFromKey(n){return n.split(Be).length===2&&n.split(Be)[0]||this.uid}isLocalId(n){return n.split(Be).length===1}getLocalId(n){return n.split(Be)[1]}isSelector(n){return this.getLocalId(n)===q}}const Re=class Re extends FM{constructor(e,t,r){super(e,t);I(this,"namespace");I(this,"authSpace");I(this,"globalUndoRedoStackSpace");I(this,"serviceStorage",{});I(this,"storage",{});I(this,"authStorage",{});I(this,"globalUndoRedoStackStorage",{});I(this,"stateDisposer");I(this,"authDisposer");I(this,"asyncClockState",!1);I(this,"limitNums",new Map);I(this,"syncInterval");I(this,"limitComponents",j.debounce((e,t)=>{var s,a,c,l,u,h,d,f;const r=((a=(s=this.storage)==null?void 0:s[e])==null?void 0:a[t])&&Object.keys(this.storage[e][t]).length||0;if(r===0)return;let i=this.limitNums.get(`${e}/${t}`);if(!i){const p=this.getLimitNum(r);this.limitNums.set(`${e}/${t}`,p),i=p}if(i>0&&r>=i){const p=Re.componentsLimits.indexOf(i),w=p>=0&&p<Re.componentsLimits.length-1;if((u=(l=(c=this.control.room)==null?void 0:c.callbacks)==null?void 0:l.listeners)!=null&&u.map.onObjectsLimit&&((d=(h=this.control.room)==null?void 0:h.callbacks)==null||d.dispatch("onObjectsLimit",y=>y(i,w))),!w){this.Logger.error(`[Appliance]: exceeds the limit of ${i} components, current: ${r}`),(f=this.control.room)==null||f.disconnect().then(()=>{var y,M,v,m,T;(v=(M=(y=this.control.room)==null?void 0:y.callbacks)==null?void 0:M.listeners)!=null&&v.map.onKickedWithReason&&(this.Logger.info("[Appliance]: onKickedWithReason callback is called"),(T=(m=this.control.room)==null?void 0:m.callbacks)==null||T.dispatch("onKickedWithReason",C=>C("kickByAdmin")))});return}console.warn(`exceeds the limit of ${i} components, current: ${r}`);const N=w?Re.componentsLimits[p+1]:0;this.limitNums.set(`${e}/${t}`,N)}},2e3,{maxWait:5e3}));I(this,"clearLimitComponents",(e,t)=>{if(t)this.limitNums.delete(`${e}/${t}`);else for(const r of this.limitNums.keys())`${e}/`.indexOf(r)===0&&this.limitNums.delete(r)});this.syncInterval=r,this.namespace=Re.namespace,this.authSpace=Re.authSpace,this.globalUndoRedoStackSpace=Re.globalUndoRedoStackSpace,this.serviceStorage=this.getNamespaceData(),this.storage=j.cloneDeep(this.serviceStorage),this.authStorage=this.getAuthSpaceData(),this.globalUndoRedoStackStorage={},this.getLimitNums()}get Logger(){return this.control.logger}hasId(e,t,r){const i=this.getLocalId(r)?this.transformKey(r):r;return!!(this.storage[e]&&this.storage[e][t]&&this.storage[e][t][i])}getLimitNum(e){return e>=Re.componentsLimits[0]?Re.componentsLimits[1]:Re.componentsLimits[0]}getLimitNums(){for(const[e,t]of Object.entries(this.storage))if(e&&t){for(const[r,i]of Object.entries(t))if(r&&i){const s=this.getLimitNum(Object.keys(i).length);this.limitNums.set(`${e}/${r}`,s)}}}getViewIdBySecenPath(e){const t=this.getNamespaceData();for(const[r,i]of Object.entries(t))if(i){for(const s of Object.keys(i))if(s===e)return r}}getScenePathData(e){const t=this.getNamespaceData();for(const r of Object.values(t))if(r){for(const i of Object.keys(r))if(i===e)return j.cloneDeep(r[i])}}hasTargetDataByViewId(e,t){const r=this.getNamespaceData();if(r&&r[e]){for(const i of Object.values(r[e]))for(const s of Object.keys(i))if(s===t)return!0}}getTargetDataByViewId(e,t){const r=this.getNamespaceData();let i,s;if(r&&r[e])for(const[a,c]of Object.entries(r[e]))for(const l of Object.keys(c))l===t&&(i=j.cloneDeep(c[l]),s=a);return{data:i,scenePath:s}}getStorageData(e,t){const r=this.getNamespaceData();return r&&r[e]&&j.cloneDeep(r[e][t])||void 0}hasSelector(e,t){const r=this.storage&&this.storage[e]&&this.storage[e][t];return!!(r&&Object.keys(r).find(i=>this.isOwn(i)&&this.getLocalId(i)===q))}hasIncludeSelector(e,t,r){for(const i of Object.keys(this.storage))if(!(t&&i!==t)){for(const s of Object.keys(this.storage[i]))if(!(r&&s!==r)){for(const a of Object.keys(this.storage[i][s]))if(this.getLocalId(a)===q){const c=this.storage[i][s][a],l=this.isLocalId(e)?this.transformKey(e):e;if(c&&c.selectIds&&c.selectIds.length&&c.selectIds.includes(l))return!0}}}return!1}addStorageStateListener(e){this.stateDisposer=An(async()=>{var c,l,u,h,d,f;const t=this.getNamespaceData(),{diffView:r,diffScenePath:i,diffData:s}=this.diffFunByView(this.serviceStorage,t);this.serviceStorage=t;const a={};if(Object.keys(r).length>0)for(const[p,w]of Object.entries(r))w&&!j.isEqual((c=this.storage)==null?void 0:c[p],w.newValue)&&(a.diffView||(a.diffView={}),a.diffView[p]=w,this.storage||(this.storage={}),w.newValue===void 0?delete this.storage[p]:this.storage[p]=j.cloneDeep(w.newValue));if(Object.keys(i).length>0){for(const[p,w]of Object.entries(i))if(w){const{viewId:N,newValue:y}=w;w&&!j.isEqual((u=(l=this.storage)==null?void 0:l[N])==null?void 0:u[p],y)&&(a.diffScenePath||(a.diffScenePath={}),a.diffScenePath[p]=w,this.storage||(this.storage={}),this.storage[N]||(this.storage[N]={}),w.newValue===void 0?delete this.storage[N][p]:this.storage[N][p]=j.cloneDeep(w.newValue))}}if(Object.keys(s).length>0){for(const[p,w]of Object.entries(s))if(w){const{viewId:N,scenePath:y,newValue:M}=w;w&&!j.isEqual((f=(d=(h=this.storage)==null?void 0:h[N])==null?void 0:d[y])==null?void 0:f[p],M)&&(a.diffData||(a.diffData={}),a.diffData[p]=w,this.storage||(this.storage={}),this.storage[N]||(this.storage[N]={}),this.storage[N][y]||(this.storage[N][y]={}),w.newValue===void 0?delete this.storage[N][y][p]:this.storage[N][y][p]=j.cloneDeep(w.newValue))}}Object.keys(a).length>0&&e(a),this.control.worker.publicMsgEmitter.emit("syncStorageChange",this.serviceStorage)})}removeStorageStateListener(){this.stateDisposer&&this.stateDisposer()}diffFunByView(e,t){const r=Ae(e),i=Ae(t),s={},a={},c={};for(const l of i)if(!r.includes(l)||e[l]===void 0){s[l]={newValue:t[l],oldValue:void 0};continue}for(const l of r){if(j.isEqual(e[l],t[l]))continue;if(!i.includes(l)||t[l]===void 0){s[l]={newValue:void 0,oldValue:e[l]};continue}const u=this.diffFunByScenePath(e[l],t[l],l);Object.assign(a,u.diffScenePath),Object.assign(c,u.diffData)}return{diffData:c,diffScenePath:a,diffView:s}}diffFunByScenePath(e,t,r){const i=Ae(e),s=Ae(t),a={},c={};for(const l of s)if(!i.includes(l)||e[l]===void 0){a[l]={newValue:t[l],oldValue:void 0,viewId:r};continue}for(const l of i){if(j.isEqual(e[l],t[l]))continue;if(!s.includes(l)||t[l]===void 0){a[l]={newValue:void 0,oldValue:e[l],viewId:r};continue}const u=this.diffFunByKeys(e[l],t[l],l,r);Object.assign(c,u)}return{diffScenePath:a,diffData:c}}diffFunByKeys(e,t,r,i){const s=Ae(e),a=Ae(t),c={};for(const l of a)(!s.includes(l)||e[l]===void 0)&&(c[l]={oldValue:void 0,newValue:t[l],viewId:i,scenePath:r});for(const l of s)if(!j.isEqual(e[l],t[l])){if(!a.includes(l)||t[l]===void 0){c[l]={newValue:void 0,oldValue:e[l],viewId:i,scenePath:r};continue}a.includes(l)&&(c[l]={oldValue:e[l],newValue:t[l],viewId:i,scenePath:r})}return c}transformKey(e){return this.uid+Be+e}isOwn(e){return e.split(Be)[0]===this.uid}dispatch(e){var M,v;const{type:t,workId:r,ops:i,index:s,opt:a,toolsType:c,removeIds:l,updateNodeOpt:u,op:h,selectIds:d,isSync:f,scenePath:p,viewId:w}=e;if(!w)return;const N=Number(e.needUndoTicker??e.collectUndoTicker??void 0),y=m=>{N?this.control.internalMsgEmitter.emit("ackStorageUndoTicker",N,w,p,m,{requestId:e.requestId,emitEventType:e.emitEventType}):e.emitEventType===B.TranslateNode||(e.emitEventType,B.CopyNode)};switch(t){case F.Clear:const m={};p&&this.storage[w]&&this.storage[w][p]?(delete this.storage[w][p],this.setState(m,{isSync:f,viewId:w,scenePath:p})):this.storage[w]&&(delete this.storage[w],this.setState(m,{isSync:f,viewId:w,scenePath:""})),He(()=>{var A,x;(A=this.control.pluginManager)==null||A.dispatchPluginEvent("syncStorage",w,p),this.control.isUseSimple||(x=this.control.miniMapManager)==null||x.updateMiniMapCamera(w),this.clearLimitComponents(w,p)},this.syncInterval,this.control.hasPolyfillMethod("requestIdleCallback"));break;case F.CreateWork:if(p&&r&&c&&a){const A=this.isLocalId(r.toString())?this.transformKey(r):r;this.control.renderControl.isUsePageAuth(w)&&this.control.renderControl.addRenderPageElementId({viewId:w,scenePath:p,elementId:A.toString()}),this.updateValue(A.toString(),{type:F.CreateWork,workId:r,toolsType:c,opt:a},{isSync:f,viewId:w,scenePath:p,onApplied:()=>y(A.toString())})}break;case F.DrawWork:if(p&&r&&typeof s=="number"&&(h!=null&&h.length)){const A=this.isLocalId(r.toString())?this.transformKey(r):r,x=this.storage[w]&&this.storage[w][p]&&this.storage[w][p][A]||void 0;if(x!=null&&x.ops||(x==null?void 0:x.type)===F.FullWork)return;const D=s?((x==null?void 0:x.op)||[]).slice(0,s).concat(h):h||(x==null?void 0:x.op),b=c||(x==null?void 0:x.toolsType),R=a||(x==null?void 0:x.opt),O=u||(x==null?void 0:x.updateNodeOpt);r&&b&&R&&D&&(this.control.renderControl.isUsePageAuth(w)&&this.control.renderControl.addRenderPageElementId({viewId:w,scenePath:p,elementId:A.toString()}),this.updateValue(A.toString(),{...x,type:F.DrawWork,workId:r,updateNodeOpt:O,toolsType:b,opt:R,op:D,index:s},{isSync:f,viewId:w,scenePath:p,onApplied:()=>y(A.toString())}))}break;case F.FullWork:if(p&&r){const A=this.isLocalId(r.toString())?this.transformKey(r):r,x=this.storage[w]&&this.storage[w][p]&&this.storage[w][p][A]||void 0,D=u||(x==null?void 0:x.updateNodeOpt),b=c||(x==null?void 0:x.toolsType),R=a||(x==null?void 0:x.opt),O=i||(x==null?void 0:x.ops);b&&R&&(this.control.renderControl.isUsePageAuth(w)&&this.control.renderControl.addRenderPageElementId({viewId:w,scenePath:p,elementId:A.toString()}),this.updateValue(A.toString(),{type:F.FullWork,updateNodeOpt:D,workId:A,toolsType:b,opt:R,ops:O},{isSync:f,viewId:w,scenePath:p,onApplied:()=>{y(A.toString())}}),He(()=>{var U,$;(U=this.control.pluginManager)==null||U.dispatchPluginEvent("syncStorage",w,p),this.control.isUseSimple||($=this.control.miniMapManager)==null||$.updateMiniMapCamera(w),this.limitComponents(w,p)},this.syncInterval,this.control.hasPolyfillMethod("requestIdleCallback")))}break;case F.RemoveNode:if(p&&(l!=null&&l.length)){const A=l.map(b=>this.isLocalId(b+"")?this.transformKey(b):b);let x=0;const D=(M=this.storage[w])==null?void 0:M[p];D&&(Object.keys(D).map(b=>{A!=null&&A.includes(b)&&(x++,this.control.renderControl.isUsePageAuth(w)&&this.control.renderControl.delRenderPageElementId({viewId:w,scenePath:p,elementId:b}),this.updateValue(b,void 0,{isSync:f,viewId:w,scenePath:p,onApplied:()=>y(b)}))}),(v=this.control.pluginManager)==null||v.dispatchPluginEvent("syncStorage",w,p),this.control.isUseSimple||He(()=>{var b;(b=this.control.miniMapManager)==null||b.updateMiniMapCamera(w)},this.syncInterval,this.control.hasPolyfillMethod("requestIdleCallback"))),N&&x===0&&y()}break;case F.UpdateNode:if(p&&r&&(u||i||a)){const A=this.isLocalId(r.toString())?this.transformKey(r):r,x=this.storage[w]&&this.storage[w][p]&&this.storage[w][p][A]||void 0;x&&(x.updateNodeOpt=u,(i||h)&&(x.ops=i,x.op=h),a&&(x.opt=a),x.type=F.FullWork,this.updateValue(A.toString(),x,{isSync:f,viewId:w,scenePath:p,onApplied:()=>y(A.toString())}),this.control.isUseSimple||He(()=>{var D;(D=this.control.miniMapManager)==null||D.updateMiniMapCamera(w)},this.syncInterval,this.control.hasPolyfillMethod("requestIdleCallback")))}break;case F.Select:if(!p)return;let T;d!=null&&d.length&&(T=d.map(A=>this.isLocalId(A+"")?this.transformKey(A):A));const C=this.transformKey(q),k=this.storage[w]&&this.storage[w][p]&&this.storage[w][p][C]||void 0,z=a||(k==null?void 0:k.opt);T&&this.checkOtherSelector(C,T,{isSync:f,viewId:w,scenePath:p}),this.updateValue(C,T&&{type:F.Select,toolsType:S.Selector,opt:z,selectIds:T},{isSync:f,viewId:w,scenePath:p,onApplied:()=>y(C)});break}}checkOtherSelector(e,t,r){const{viewId:i,scenePath:s}=r;for(const a of Object.keys(this.storage[i][s]))if(a!==e&&this.getLocalId(a)===q){const c=this.storage[i][s][a];if(c&&c.selectIds){const l=c.selectIds.filter(u=>!t.includes(u));l.length>0&&(c.selectIds=l),this.updateValue(a,l.length&&c||void 0,r)}}}setState(e,t){const{viewId:r,scenePath:i}=t,s=Ae(e);for(let a=0;a<s.length;a++){const c=s[a],l=e[c];typeof l<"u"?(this.storage[r]||(this.storage[r]={}),this.storage[r][i]||(this.storage[r][i]={}),this.storage[r][i][c]=l):delete this.storage[r][i][c]}this.runSyncService(t)}updateValue(e,t,r){var l;const{viewId:i,scenePath:s,storage:a}=r,c=a||this.storage;t===void 0?delete c[i][s][e]:(c[i]||(c[i]={}),c[i][s]||(c[i][s]={}),c[i][s][e]=t),r.onApplied,(l=r.onApplied)==null||l.call(r),this.runSyncService(r)}runSyncService(e){if(!this.control.renderControl.isWritable){this.Logger.error("[Appliance]: The current state is not writable and synchronization cannot be synchronized");return}this.asyncClockState||(this.asyncClockState=!0,e.isSync?(this.asyncClockState=!1,this.syncSerivice(e)):He(()=>{this.asyncClockState=!1,this.syncSerivice(e)},this.syncInterval,this.control.hasPolyfillMethod("requestIdleCallback")))}syncSerivice(e={storage:this.storage}){const{storage:t}=e,r=t||this.storage,i=Ae(this.serviceStorage),s=Ae(r),a=new Map;for(const c of i){if(!s.includes(c)){a.set(c,void 0);continue}j.isEqual(this.serviceStorage[c],r[c])||this.syncViewData(r,c)}for(const c of s)i.includes(c)||a.set(c,r[c]);if(a.size>=s.length||a.size>5&&s.length<20)this.syncStorageView(r);else for(const[c,l]of a.entries())this.syncUpdataView(r,c,l)}syncViewData(e,t){const r=Ae(this.serviceStorage[t]),i=Ae(e[t]),s=new Map;for(const a of r){if(!i.includes(a)){s.set(a,void 0);continue}j.isEqual(this.serviceStorage[t][a],e[t][a])||this.syncScenePathData(e,t,a)}for(const a of i)r.includes(a)||s.set(a,e[t][a]);if(s.size>=i.length||s.size>5&&i.length<20)this.syncStorageScenePath(t,e[t]);else for(const[a,c]of s.entries())this.syncUpdataScenePath(e,t,a,c)}syncScenePathData(e,t,r){const i=Ae(this.serviceStorage[t][r]),s=Ae(e[t][r]),a=new Map;for(const c of i){if(!s.includes(c)){a.set(c,void 0);continue}j.isEqual(this.serviceStorage[t][r][c],e[t][r][c])||a.set(c,e[t][r][c])}for(const c of s)i.includes(c)||a.set(c,e[t][r][c]);if(a.size>=s.length||a.size>5&&s.length<50)this.syncStorageKey(t,r,e[t][r]);else for(const[c,l]of a.entries())this.syncUpdataKey(e,t,r,c,l)}syncUpdataView(e,t,r){var s;Object.keys(this.serviceStorage).length?(s=this.plugin)==null||s.updateAttributes([this.namespace,t],r):this.syncStorageView(e)}syncStorageView(e){var t;(t=this.plugin)==null||t.updateAttributes([this.namespace],e)}syncUpdataScenePath(e,t,r,i){var a;Object.keys(this.serviceStorage[t]).length?(a=this.plugin)==null||a.updateAttributes([this.namespace,t,r],i):this.syncStorageScenePath(t,e[t])}syncStorageScenePath(e,t){var r;(r=this.plugin)==null||r.updateAttributes([this.namespace,e],t)}syncUpdataKey(e,t,r,i,s){var c;Object.keys(this.serviceStorage[t][r]).length?(c=this.plugin)==null||c.updateAttributes([this.namespace,t,r,i],s):this.syncStorageKey(t,r,e[t][r])}syncStorageKey(e,t,r){var i;(i=this.plugin)==null||i.updateAttributes([this.namespace,e,t],r)}keyTransformWorkId(e){const t=e.split(Be);return t.length===2?t[1]:e}destroy(){this.removeStorageStateListener(),this.serviceStorage={},this.storage={},this.removeAuthStateListener(),this.authStorage={},this.globalUndoRedoStackStorage={}}transformToSerializableUndoStackItemData(e){const{data:t,scenePath:r}=e,i={};for(const s of t)i[s.key]={dataType:s.dataType,data:s.data};return{data:i,scenePath:r}}dispatchUndoTicker(e){const{viewId:t,undoTickerId:r,data:i,syncType:s,operation:a}=e,c=a===be.syncUndoStack?"undoStack":"redoStack",l=s==="delete"?void 0:this.transformToSerializableUndoStackItemData(i);if(this.plugin){if(s==="delete"){const u=this.globalUndoRedoStackStorage[t]&&this.globalUndoRedoStackStorage[t][c];if(!u)return;delete u[r],this.plugin.updateAttributes([this.globalUndoRedoStackSpace,t,c,r],void 0);return}if(this.plugin.getAttributesValue([this.globalUndoRedoStackSpace]))if(this.plugin.getAttributesValue([this.globalUndoRedoStackSpace,t]))if(this.plugin.getAttributesValue([this.globalUndoRedoStackSpace,t,c]))this.globalUndoRedoStackStorage[t][c][r]=l,this.plugin.updateAttributes([this.globalUndoRedoStackSpace,t,c,r],l);else{const u={[r]:l};this.globalUndoRedoStackStorage[t][c]=u,this.plugin.updateAttributes([this.globalUndoRedoStackSpace,t,c],u)}else{const u={[c]:{[r]:l}};this.globalUndoRedoStackStorage[t]=u,this.plugin.updateAttributes([this.globalUndoRedoStackSpace,t],u)}else{const u={[t]:{[c]:{[r]:l}}};this.globalUndoRedoStackStorage=u,this.plugin.updateAttributes(this.globalUndoRedoStackSpace,u)}}}addGlobalUndoRedoStackListener(e){this.authDisposer=An(async()=>{const t=this.getGlobalUndoRedoStackData();if(j.isEqual(this.globalUndoRedoStackStorage,t))return;const r=this.diffGlobalUndoRedoStackFun(this.globalUndoRedoStackStorage,t);this.globalUndoRedoStackStorage=t,e(r)})}diffGlobalUndoRedoStackFun(e,t){const r=Ae(e),i=Ae(t),s={};for(const a of i)if(!r.includes(a)||e[a]===void 0){s[a]={newValue:t[a],oldValue:void 0};continue}for(const a of r)if(!j.isEqual(e[a],t[a])){if(!i.includes(a)||t[a]===void 0){s[a]={newValue:void 0,oldValue:e[a]};continue}s[a]={newValue:t[a],oldValue:e[a]}}return s}dispatchPageAuth(e,t=!0){var l,u,h,d,f,p,w,N,y,M,v,m,T,C,k,z,A,x,D,b,R,O,U,$,Y,Z,Q,W,X,pe,ae,de,le,tt,ut,ht,dt,gt;const{operation:r,viewId:i,scenePath:s,pageId:a,pageData:c}=e;switch(r){case be.addPage:{if(!i||!s||!a)return;const xe=[this.authSpace];Object.keys(this.authStorage).length&&xe.push("pageAuth");const Le=this.authStorage.pageAuth||{};this.authStorage.pageAuth=Le,Object.keys(Le).length&&xe.push(i),Le[i]=Le[i]||{},Object.keys(Le[i]).length&&xe.push(s),Le[i][s]=Le[i][s]||{render:(c==null?void 0:c.render)||"localSelf",pages:{}},Object.keys(Le[i][s].pages).length&&xe.push("pages",a);const nt={};if(c!=null&&c.elementIds)for(const Vt of c.elementIds.keys())nt[Vt]=!0;Le[i][s].pages[a]=nt,t&&(xe.length===1?(l=this.plugin)==null||l.updateAttributes(xe,j.cloneDeep(this.authStorage)):xe.length===2?(u=this.plugin)==null||u.updateAttributes(xe,j.cloneDeep(Le)):xe.length===3?(h=this.plugin)==null||h.updateAttributes(xe,j.cloneDeep(Le[i])):xe.length===4?(d=this.plugin)==null||d.updateAttributes(xe,j.cloneDeep(Le[i][s])):(f=this.plugin)==null||f.updateAttributes(xe,j.cloneDeep(nt)));return}case be.renderPage:{if(!i||!s||!(c!=null&&c.render))return;this.authStorage.pageAuth&&this.authStorage.pageAuth[i]&&this.authStorage.pageAuth[i][s]&&c.render!==this.authStorage.pageAuth[i][s].render&&(this.authStorage.pageAuth[i][s].render=c.render,t&&((p=this.plugin)==null||p.updateAttributes([this.authSpace,"pageAuth",i,s,"render"],c.render)));return}case be.deletePage:{if(!i||!s||!a)return;(v=(M=(y=(N=(w=this.authStorage)==null?void 0:w.pageAuth)==null?void 0:N[i])==null?void 0:y[s])==null?void 0:M.pages)!=null&&v[a]&&(delete this.authStorage.pageAuth[i][s].pages[a],t&&((m=this.plugin)==null||m.updateAttributes([this.authSpace,"pageAuth",i,s,"pages",a],void 0)));return}case be.clearPage:{if(!i||!s||!a)return;(A=(z=(k=(C=(T=this.authStorage)==null?void 0:T.pageAuth)==null?void 0:C[i])==null?void 0:k[s])==null?void 0:z.pages)!=null&&A[a]&&(delete this.authStorage.pageAuth[i][s].pages[a],t&&((x=this.plugin)==null||x.updateAttributes([this.authSpace,"pageAuth",i,s,"pages",a],{})));return}case be.addElement:{if(!i||!s||!a||!(c!=null&&c.elementId))return;(U=(O=(R=(b=(D=this.authStorage)==null?void 0:D.pageAuth)==null?void 0:b[i])==null?void 0:R[s])==null?void 0:O.pages)!=null&&U[a]&&(this.authStorage.pageAuth[i][s].pages[a][c.elementId]=!0,t&&(($=this.plugin)==null||$.updateAttributes([this.authSpace,"pageAuth",i,s,"pages",a,c.elementId],!0)));return}case be.deleteElement:{if(!i||!s||!a||!(c!=null&&c.elementId))return;(pe=(X=(W=(Q=(Z=(Y=this.authStorage)==null?void 0:Y.pageAuth)==null?void 0:Z[i])==null?void 0:Q[s])==null?void 0:W.pages)==null?void 0:X[a])!=null&&pe[c.elementId]&&(delete this.authStorage.pageAuth[i][s].pages[a][c.elementId],t&&((ae=this.plugin)==null||ae.updateAttributes([this.authSpace,"pageAuth",i,s,"pages",a,c.elementId],void 0)));return}case be.clearViewScenePath:{if(!i||!s)return;(tt=(le=(de=this.authStorage)==null?void 0:de.pageAuth)==null?void 0:le[i])!=null&&tt[s]&&(delete this.authStorage.pageAuth[i][s],t&&((ut=this.plugin)==null||ut.updateAttributes([this.authSpace,"pageAuth",i,s],void 0)));return}case be.clearView:{if(!i)return;(dt=(ht=this.authStorage)==null?void 0:ht.pageAuth)!=null&&dt[i]&&(delete this.authStorage.pageAuth[i],t&&((gt=this.plugin)==null||gt.updateAttributes([this.authSpace,"pageAuth",i],void 0)));return}}}dispatchRenderAuth(e,t=!0){var l,u,h,d,f,p,w,N,y,M,v,m,T,C,k,z,A,x,D,b;const{operation:r,viewId:i,uid:s,renderData:a,isClear:c}=e;if(i)switch(r){case Ze.setAuth:{if(!a||a.render===void 0&&a.hide===void 0&&a.clear===void 0){this.authStorage.renderAuth&&this.authStorage.renderAuth[i]&&(delete this.authStorage.renderAuth[i],t&&((l=this.plugin)==null||l.updateAttributes([this.authSpace,"renderAuth",i],void 0)));return}const R=[this.authSpace];Object.keys(this.authStorage).length&&R.push("renderAuth");const O=this.authStorage.renderAuth||{};Object.keys(O).length&&R.push(i),O[i]={},this.authStorage.renderAuth=O;const{render:U,hide:$,clear:Y}=a;if(U===!0)O[i].render=!0;else if(j.isSet(U)){O[i].render={};for(const Z of U.keys())O[i].render[Z]=!0}if($===!0)O[i].hide=!0;else if(j.isSet($)){O[i].hide={};for(const Z of $.keys())O[i].hide[Z]=!0}if(Y===!0)O[i].clear=!0;else if(j.isSet(Y)){O[i].clear={};for(const Z of Y.keys())O[i].clear[Z]=!0}t&&(R.length===1?(u=this.plugin)==null||u.updateAttributes(R,j.cloneDeep(this.authStorage)):R.length===2?(h=this.plugin)==null||h.updateAttributes(R,j.cloneDeep(O)):(d=this.plugin)==null||d.updateAttributes(R,j.cloneDeep(O[i])));return}case Ze.setShow:{if(!s)return;const R=[this.authSpace];Object.keys(this.authStorage).length&&R.push("renderAuth");const O=this.authStorage.renderAuth||{};Object.keys(O).length&&R.push(i),O[i]=O[i]||{},this.authStorage.renderAuth=O,Object.keys(O[i]).length&&R.push("render"),O[i].render=O[i].render||{},O[i].render!==!0&&(Object.keys(O[i].render).length&&R.push(s),O[i].render[s]=!0),O[i].hide!==!0&&((f=O[i].hide)!=null&&f[s])&&(delete O[i].hide[s],t&&((p=this.plugin)==null||p.updateAttributes([this.authSpace,"renderAuth",i,"hide",s],void 0))),t&&(R.length===1?(w=this.plugin)==null||w.updateAttributes(R,j.cloneDeep(this.authStorage)):R.length===2?(N=this.plugin)==null||N.updateAttributes(R,j.cloneDeep(O)):R.length===3?(y=this.plugin)==null||y.updateAttributes(R,j.cloneDeep(O[i])):(M=this.plugin)==null||M.updateAttributes(R,!0));return}case Ze.setHide:{if(!s)return;const R=[this.authSpace];Object.keys(this.authStorage).length&&R.push("renderAuth");const O=this.authStorage.renderAuth||{};Object.keys(O).length&&R.push(i),O[i]=O[i]||{},this.authStorage.renderAuth=O,Object.keys(O[i]).length&&R.push("hide"),O[i].hide=O[i].hide||{},O[i].hide!==!0&&(Object.keys(O[i].hide).length&&R.push(s),O[i].hide[s]=!0),O[i].render!==!0&&((v=O[i].render)!=null&&v[s])&&(delete O[i].render[s],t&&((m=this.plugin)==null||m.updateAttributes([this.authSpace,"renderAuth",i,"render",s],void 0))),t&&(R.length===1?(T=this.plugin)==null||T.updateAttributes(R,j.cloneDeep(this.authStorage)):R.length===2?(C=this.plugin)==null||C.updateAttributes(R,j.cloneDeep(O)):R.length===3?(k=this.plugin)==null||k.updateAttributes(R,j.cloneDeep(O[i])):(z=this.plugin)==null||z.updateAttributes(R,!0));return}case Ze.setClear:{if(!s)return;const R=[this.authSpace];Object.keys(this.authStorage).length&&R.push("renderAuth");const O=this.authStorage.renderAuth||{};Object.keys(O).length&&R.push(i),O[i]=O[i]||{},this.authStorage.renderAuth=O,Object.keys(O[i]).length&&R.push("clear"),O[i].clear=O[i].clear||{},O[i].clear!==!0&&(Object.keys(O[i].clear).length&&R.push(s),c?O[i].clear[s]=!0:delete O[i].clear[s]),t&&(R.length===1?(A=this.plugin)==null||A.updateAttributes(R,j.cloneDeep(this.authStorage)):R.length===2?(x=this.plugin)==null||x.updateAttributes(R,j.cloneDeep(O)):R.length===3?(D=this.plugin)==null||D.updateAttributes(R,j.cloneDeep(O[i])):(b=this.plugin)==null||b.updateAttributes(R,c?!0:void 0));return}}}addAuthStateListener(e){this.authDisposer=An(async()=>{const t=this.getAuthSpaceData(),{renderAuth:r,pageAuth:i}=t;let s,a;j.isEqual(r,this.authStorage.renderAuth)||(s=this.diffAuthFun(this.authStorage.renderAuth||{},r||{}),this.authStorage.renderAuth=r),j.isEqual(i,this.authStorage.pageAuth)||(a=this.diffAuthPageFun(this.authStorage.pageAuth||{},i||{}),this.authStorage.pageAuth=i),(s||a)&&e(s,a)})}removeAuthStateListener(){this.authDisposer&&this.authDisposer()}diffAuthFun(e,t){const r=Ae(e),i=Ae(t),s={};for(const a of i)if(!r.includes(a)||e[a]===void 0){s[a]={newValue:t[a],oldValue:void 0};continue}for(const a of r)if(!j.isEqual(e[a],t[a])){if(!i.includes(a)||t[a]===void 0){s[a]={newValue:void 0,oldValue:e[a]};continue}s[a]={newValue:t[a],oldValue:e[a]}}return s}diffAuthPageFun(e,t){const r=Ae(e),i=Ae(t),s={};for(const a of i)if(!r.includes(a)||e[a]===void 0){s[a]={newValue:t[a],oldValue:void 0};continue}for(const a of r)if(!j.isEqual(e[a],t[a])){if(!i.includes(a)||t[a]===void 0){s[a]={newValue:void 0,oldValue:e[a]};continue}s[a]={newValue:t[a],oldValue:e[a]}}return s}};I(Re,"namespace","PluginState"),I(Re,"authSpace","PluginAuth"),I(Re,"globalUndoRedoStackSpace","GlobalUndoRedoStack"),I(Re,"componentsLimits",[500,1e3]);let _e=Re;var Ye=(o=>(o[o.Draw=1]="Draw",o[o.Delete=2]="Delete",o[o.Update=3]="Update",o))(Ye||{});class WM{constructor(){I(this,"roomMembers",[]);I(this,"onChangeHooks",new Set)}setRoomMembers(n){this.executChangeUidHook(this.roomMembers,n),this.roomMembers=n}executChangeUidHook(n,e){const t={online:e.map(r=>{var i;return((i=r.payload)==null?void 0:i.uid)||r.session}),offline:n.map(r=>{var i;return((i=r.payload)==null?void 0:i.uid)||r.session})};this.onChangeHooks.forEach(r=>r(t))}getAllRoomMembers(){return this.roomMembers}getRoomMember(n){return this.roomMembers.find(e=>{var t;return((t=e.payload)==null?void 0:t.uid)===n})}isOnLine(n){return!!this.getRoomMember(n)}onUidChangeHook(n){this.onChangeHooks.add(n)}destroy(){this.onChangeHooks.clear()}}class VM{constructor(n){I(this,"expirationTime",ye.cursor.expirationTime);I(this,"isEnableCursor");I(this,"internalMsgEmitter");I(this,"publicMsgEmitter");I(this,"control");I(this,"eventName","applianc-cursor");I(this,"displayer");I(this,"roomMember");I(this,"animationId");I(this,"maxLastSyncTime");I(this,"willSendEventWorkers",[]);I(this,"willConsumeEventWorkers",new Map);I(this,"sendEventTimerId");I(this,"animationDrawWorkers",new Map);I(this,"animationEventWorkers",new Map);I(this,"cursorInfoMap",new Map);I(this,"doneRenderCursorInfoMap",new Map);const{control:e,internalMsgEmitter:t,publicMsgEmitter:r}=n;this.internalMsgEmitter=t,this.publicMsgEmitter=r,this.expirationTime=j.isNumber(e.pluginOptions.extras.cursor.expirationTime)?e.pluginOptions.extras.cursor.expirationTime:this.expirationTime,this.control=e,this.roomMember=e.roomMember,this.maxLastSyncTime=this.control.pluginOptions.extras.syncOpt.interval,this.isEnableCursor=this.control.pluginOptions.extras.cursor.enable}activeCollector(){this.control.plugin&&this.isEnableCursor&&(this.displayer=this.control.room||this.control.play,this.displayer.addMagixEventListener(this.eventName,this.mainMagixEventListener.bind(this)))}mainMagixEventListener(n){var a;const{event:e,payload:t}=n;if(e!==this.eventName)return;const{uid:r,op:i,type:s}=t;if(((a=this.control.collector)==null?void 0:a.uid)!==r&&s===Jt.Cursor&&(i!=null&&i.length)){const c=this.willConsumeEventWorkers.get(r)||[];for(const l of i){const{viewId:u}=l;j.isNumber(l.consumPoint[0])&&j.isNumber(l.consumPoint[1])&&(l.consumPoint=this.control.viewContainerManager.transformToOriginPoint(l.consumPoint,u)),this.control.renderControl.isFilterCursor(u)&&c.unshift({...l,timestamp:this.control.worker.now})}this.willConsumeEventWorkers.set(r,c),this.runAnimation()}}onFocusViewChange(){this.isEnableCursor&&(this.checkDrawWorks(),this.runAnimation())}updateRoomMembers(n){const{offline:e}=n;for(const t of this.cursorInfoMap.keys())t&&e.includes(t)&&this.cursorInfoMap.delete(t)}getKey(n,e){return`${n}${Be}${e}`}getUidAndviewId(n){const[e,t]=n.split(Be);return{uid:e,viewId:t}}runAnimation(){this.animationId||(this.animationId=requestAnimationFrame(this.animationCursor.bind(this)))}checkDrawWorks(){var e;const n=this.control.viewContainerManager.focuedViewId;for(const[t,r]of this.animationDrawWorkers.entries()){const{viewId:i,uid:s}=this.getUidAndviewId(t);s!==((e=this.control.collector)==null?void 0:e.uid)&&i!==n&&r.workState===E.Done&&(r.consumPoint=[void 0,void 0])}}animationCursor(){this.animationId=void 0;const n=this.control.worker.now;for(const[t,r]of this.animationDrawWorkers.entries()){const{uid:i,viewId:s}=this.getUidAndviewId(t),a=this.roomMember.getRoomMember(i);if(!a){this.animationDrawWorkers.delete(t);continue}const{consumPoint:c,timestamp:l,workState:u}=r,h=this.cursorInfoMap.get(s)||new Map;c&&j.isNumber(c[0])&&j.isNumber(c[1])&&l+this.expirationTime>n?h.set(a.memberId,{x:c[0],y:c[1],roomMember:a,timestamp:l,type:1,workState:u}):h.delete(a.memberId),h.size?this.cursorInfoMap.set(s,h):this.cursorInfoMap.delete(s),this.animationDrawWorkers.delete(t)}const e=new Set;for(const[t,r]of this.cursorInfoMap.entries())if(r)for(const[i,s]of r.entries())s.type===1&&s.workState!==E.Done&&e.add(i);else this.cursorInfoMap.delete(t);for(const[t,r]of this.willConsumeEventWorkers.entries()){const i=this.roomMember.getRoomMember(t);if(j.isNumber(i==null?void 0:i.memberId)&&!e.has(i.memberId)){const s=r.pop();s?this.animationEventWorkers.set(t,s):this.willConsumeEventWorkers.delete(t)}}for(const[t,r]of this.animationEventWorkers.entries()){const i=this.roomMember.getRoomMember(t);if(!i){this.animationEventWorkers.delete(t);continue}const{viewId:s,consumPoint:a,timestamp:c}=r,l=this.cursorInfoMap.get(s)||new Map;a&&j.isNumber(a[0])&&j.isNumber(a[1])&&c+this.expirationTime>n?l.set(i.memberId,{x:a[0],y:a[1],roomMember:i,timestamp:c,type:0}):l.delete(i.memberId),l.size?this.cursorInfoMap.set(s,l):this.cursorInfoMap.delete(s),this.animationEventWorkers.delete(t)}for(const t of this.doneRenderCursorInfoMap.keys())this.cursorInfoMap.has(t)||(this.doneRenderCursorInfoMap.delete(t),this.internalMsgEmitter.emit([te.Cursor,t],[]));for(const[t,r]of this.cursorInfoMap.entries())if(r!=null&&r.size){const i=[];for(const[a,c]of r.entries()){const{timestamp:l,...u}=c;l+this.expirationTime>n?i.push(u):(r.delete(a),r.size===0&&(this.cursorInfoMap.delete(t),this.doneRenderCursorInfoMap.delete(t),this.internalMsgEmitter.emit([te.Cursor,t],[])))}const s=this.doneRenderCursorInfoMap.get(t);j.isEqual(s,i)||(this.doneRenderCursorInfoMap.set(t,i),this.internalMsgEmitter.emit([te.Cursor,t],i))}else this.cursorInfoMap.delete(t),this.doneRenderCursorInfoMap.delete(t),this.internalMsgEmitter.emit([te.Cursor,t],[]);(this.willConsumeEventWorkers.size||this.cursorInfoMap.size)&&this.runAnimation()}sendEvent(n,e){if(this.displayer&&H(this.displayer)){const t=j.isNumber(n[0])&&j.isNumber(n[1])&&this.control.viewContainerManager.transformToScenePoint(n,e)||[void 0,void 0];this.willSendEventWorkers.push({consumPoint:t,viewId:e}),this.sendEventTimerId||(this.sendEventTimerId=setTimeout(()=>{this.dispatchMagixEvent()},this.maxLastSyncTime))}}dispatchMagixEvent(){var n;this.displayer&&H(this.displayer)&&this.displayer.isWritable&&this.displayer.dispatchMagixEvent(this.eventName,{type:Jt.Cursor,op:j.cloneDeep(this.willSendEventWorkers),uid:(n=this.control.collector)==null?void 0:n.uid}),this.willSendEventWorkers.length=0,this.sendEventTimerId&&(clearTimeout(this.sendEventTimerId),this.sendEventTimerId=void 0)}collectServiceCursor(n){var s;if(!this.isEnableCursor&&!this.control.renderControl.isWritable)return;const{op:e,uid:t,workState:r,viewId:i}=n;if(t&&e&&r&&i){const a=this.roomMember.getRoomMember(t);if(!a||t===((s=this.control.collector)==null?void 0:s.uid))return;const c=this.getKey(t,i);let l=[void 0,void 0];if(j.isNumber(e[0])&&j.isNumber(e[1])){const[h,d]=this.control.viewContainerManager.transformToOriginPoint(e,i);l=[h,d]}if(r===E.Start){for(const h of this.cursorInfoMap.values())if(h!=null&&h.size)for(const d of h.keys())d===a.memberId&&h.delete(d)}const u={consumPoint:l,workState:r,viewId:i,timestamp:this.control.worker.now};if(r===E.Start||r===E.Done){const h=this.willConsumeEventWorkers.get(t);r===E.Start&&h&&this.willConsumeEventWorkers.delete(t),h&&r===E.Done&&(u.timestamp=u.timestamp-this.expirationTime)}this.animationDrawWorkers.set(c,u),this.runAnimation()}}unabled(){var n;this.displayer&&H(this.displayer)&&(this.willSendEventWorkers.length=0,this.displayer.dispatchMagixEvent(this.eventName,{type:Jt.Cursor,op:[{viewId:this.control.viewContainerManager.focuedViewId,consumPoint:[void 0,void 0]}],uid:(n=this.control.collector)==null?void 0:n.uid}),this.sendEventTimerId&&(clearTimeout(this.sendEventTimerId),this.sendEventTimerId=void 0)),this.isEnableCursor||this.stopAnimation()}clearViewCursor(n){var e,t,r;for(const[i]of this.animationDrawWorkers.entries()){const{uid:s}=this.getUidAndviewId(i);s===((e=this.control.collector)==null?void 0:e.uid)&&n===n&&this.animationDrawWorkers.delete(i)}for(const[i]of this.willConsumeEventWorkers.entries())i===((t=this.control.collector)==null?void 0:t.uid)&&this.willConsumeEventWorkers.delete(i);for(const[i]of this.animationEventWorkers.entries())i===((r=this.control.collector)==null?void 0:r.uid)&&this.animationEventWorkers.delete(i);for(const[i]of this.cursorInfoMap.entries())i===i&&(this.cursorInfoMap.delete(i),this.doneRenderCursorInfoMap.delete(i),this.internalMsgEmitter.emit([te.Cursor,i],[]))}stopAnimation(){this.animationDrawWorkers.clear(),this.willConsumeEventWorkers.clear(),this.cursorInfoMap.clear()}destroy(){var n;(n=this.displayer)==null||n.removeMagixEventListener(this.eventName),this.stopAnimation()}}class Ge{constructor(){I(this,"useEmtMsg");I(this,"emtType");I(this,"control");I(this,"mainEngine");I(this,"collectListener",(n,e)=>{this.collect(n,e)})}static dispatch(n,e,t){var r;(r=fe.InternalMsgEmitter)==null||r.emit([n,e],t)}get serviceColloctor(){return this.control.collector}registerForMainEngine(n,e){return this.emtType=n,this.control=e,this.mainEngine=e.worker,this.mainEngine.internalMsgEmitter.on([this.emtType,this.emitEventType],this.collectListener),this}destroy(){this.emtType&&this.mainEngine&&this.mainEngine.internalMsgEmitter.off([this.emtType,this.emitEventType],this.collectListener)}collectForLocalWorker(n,e){var t,r,i;for(const[s,a]of n)(t=this.mainEngine)==null||t.queryTaskBatchData(a).forEach(c=>{var l;(l=this.mainEngine)==null||l.taskBatchData.delete(c)}),(r=this.mainEngine)==null||r.taskBatchData.add(s);if(e){this.mainEngine.consume();return}(i=this.mainEngine)==null||i.runAnimation()}collectForServiceWorker(n){He(()=>{n.forEach(e=>{var t;(t=this.serviceColloctor)==null||t.dispatch(e)})},this.mainEngine.maxLastSyncTime,this.control.hasPolyfillMethod("requestIdleCallback"))}pause(){var n;if(this.lastEmtData){this.useEmtMsg=!0;const e={...this.lastEmtData,workState:E.Done};this.collect(e,!0),(n=fe.InternalMsgEmitter)==null||n.emit(B.ActiveMethod,!1)}}recover(){var n;this.useEmtMsg&&fe.InternalMsgEmitter.hasListeners(B.ActiveMethod)&&((n=fe.InternalMsgEmitter)==null||n.emit(B.ActiveMethod,!0))}}function uo(o,n,e){return`${e.isLocalId(o)?o:e.getLocalId(o)}-${n}`}function $M(o,n,e){const t=new Map,r=[];for(const i of o){const s=uo(i,n,e);t.set(i,s),r.push(s)}return{copyNodeKeyBySourceKey:t,expectedWorkIds:r}}class GM extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.CopyNode)}collect(e){var l;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:t,viewId:r,requestId:i}=e,s=this.control.viewContainerManager.getView(r);if(!(s!=null&&s.displayer))return;const a=s.focusScenePath,c=this.mainEngine.now;this.mainEngine.internalMsgEmitter.emit("addUndoTicker",c,r,{render:!0,storage:!0,copyAck:!0});for(const u of t){const h=u.toString(),f=this.serviceColloctor.isLocalId(h)?this.serviceColloctor.transformKey(u):h,p=(l=this.serviceColloctor.getStorageData(r,a))==null?void 0:l[f];if(p){if(u===q){const w=p&&this.copySelector({viewId:r,store:p});w&&this.pasteSelector({...w,viewId:r,scenePath:a,undoTickerId:c,requestId:i});break}if(p.toolsType===S.Text&&p.opt&&p.opt.workState&&p.opt.workState!==E.Done){const w=p&&this.copyText({viewId:r,store:p});w&&this.pasteText({...w,viewId:r,scenePath:a,key:f,store:p,undoTickerId:c,requestId:i});break}}}}copyText(e){const{viewId:t,store:r}=e,i=this.control.viewContainerManager.getView(t);if(!this.serviceColloctor||!i)return;const s=i==null?void 0:i.cameraOpt,a=s&&[s.centerX,s.centerY],c=r.opt,l=c.boxPoint&&c.boxSize&&[c.boxPoint[0]+c.boxSize[0]/2,c.boxPoint[1]+c.boxSize[1]/2];return{bgCenter:a,textCenter:l}}pasteText(e){var N,y;const{bgCenter:t,textCenter:r,store:i,key:s,viewId:a,scenePath:c,undoTickerId:l,requestId:u}=e,h=this.control.viewContainerManager.getView(a);if(!this.serviceColloctor||!h)return;const d=Math.floor(Math.random()*30+1),f=((N=h.cameraOpt)==null?void 0:N.scale)||1,p=t&&r&&[t[0]-r[0]+d,t[1]-r[1]+d]||[d/f,d/f],w=uo(s,l,this.serviceColloctor);if(i.toolsType===S.Text&&i.opt){const M=i.opt;if(M&&M.boxPoint&&M.text){M.workState=E.Done;const v=M.boxPoint;M.boxPoint=[Math.round(v[0]+p[0]),Math.round(v[1]+p[1])],M.workState=E.Done;const m=this.control.viewContainerManager.transformToOriginPoint(M.boxPoint,a);this.control.textEditorManager.createTextForMasterController({workId:w,x:m[0],y:m[1],opt:M,scale:((y=h.cameraOpt)==null?void 0:y.scale)||1,type:qe.Text,isActive:!1,viewId:a,scenePath:c,requestId:u,emitEventType:B.CopyNode}),this.collectForServiceWorker([{...i,opt:M,type:F.FullWork,workId:w,viewId:a,scenePath:c,needUndoTicker:l,requestId:u,emitEventType:B.CopyNode}]),l&&this.mainEngine.internalMsgEmitter.emit("finalizeRequested",l,a,[w],c)}}}copySelector(e){var w,N,y,M,v,m,T,C,k;const{viewId:t,store:r}=e,i=this.control.viewContainerManager.getView(t),s=r.selectIds;if(!this.serviceColloctor||!(s!=null&&s.length)||!i)return;const a=new Map,c={offset:{x:0,y:0},cameraOpt:{centerX:((w=i.cameraOpt)==null?void 0:w.centerX)||0,centerY:((N=i.cameraOpt)==null?void 0:N.centerY)||0,scale:((y=i.cameraOpt)==null?void 0:y.scale)||1}},l=this.control.hasOffscreenCanvas&&((M=i.displayer.canvasBgRef.current)==null?void 0:M.getBoundingClientRect())||((v=i.displayer.canvasContainerRef.current)==null?void 0:v.getBoundingClientRect()),u=(T=(m=i.displayer)==null?void 0:m.floatBarRef.current)==null?void 0:T.getBoundingClientRect(),h=l&&[l.x+l.width/2,l.y+l.height/2],d=u&&[u.x+u.width/2,u.y+u.height/2],f=h&&i.viewData&&i.viewData.convertToPointInWorld({x:h[0],y:h[1]}),p=d&&i.viewData&&i.viewData.convertToPointInWorld({x:d[0],y:d[1]});f&&p&&(c.offset={x:f.x-p.x,y:f.y-p.y});for(const z of s){const A=this.serviceColloctor.isLocalId(z)?this.serviceColloctor.transformKey(z):z,x=(k=(C=this.serviceColloctor)==null?void 0:C.getStorageData(i.id,i.focusScenePath))==null?void 0:k[A];x&&a.set(z,x)}return{copyStores:a,copyCoordInfo:c}}pasteSelector(e){var v,m,T,C;const{copyStores:t,copyCoordInfo:r,viewId:i,scenePath:s,undoTickerId:a,requestId:c}=e,l=this.control.viewContainerManager.getView(i);if(!t.size||!this.serviceColloctor||!l)return;const{offset:u,cameraOpt:h}=r,{scale:d}=h,f=Math.floor(Math.random()*30+1),p=u&&[u.x+f,u.y+f]||[f/d,f/d],w=[],N=[],{copyNodeKeyBySourceKey:y,expectedWorkIds:M}=$M(t.keys(),a,this.serviceColloctor);a&&M.length&&this.mainEngine.internalMsgEmitter.emit("finalizeRequested",a,i,M,s);for(const[k,z]of t.entries()){const A=y.get(k);if(!A)continue;const x={useAnimation:!1};if(z.toolsType===S.Text&&z.opt){const D=z.opt;if(D&&D.boxPoint&&D.text){D.workState=E.Done;const b=D.boxPoint;D.boxPoint=[Math.round(b[0]+p[0]),Math.round(b[1]+p[1])],D.workState=E.Done;const R=this.control.viewContainerManager.transformToOriginPoint(D.boxPoint,i);this.control.textEditorManager.createTextForMasterController({workId:A,x:R[0],y:R[1],opt:D,scale:((v=l.cameraOpt)==null?void 0:v.scale)||1,type:qe.Text,isActive:!1,viewId:i,scenePath:s,requestId:c,emitEventType:B.CopyNode})}N.push({...z,opt:D,type:F.FullWork,workId:A,viewId:i,scenePath:s,requestId:c,needUndoTicker:a,emitEventType:B.CopyNode});continue}if((z.toolsType===S.Image||z.toolsType===S.BackgroundSVG)&&(z.opt.uuid=A,z.opt.centerX=z.opt.centerX+p[0],z.opt.centerY=z.opt.centerY+p[1]),z.ops){const D=Cn(z.ops).map((R,O)=>{const U=O%3;return U===0?R+p[0]:U===1?R+p[1]:R}),b=St(D);z.ops=b}if((m=z==null?void 0:z.opt)!=null&&m.eraserlines&&(T=z==null?void 0:z.opt)!=null&&T.eraserlines.length)for(const D of(C=z==null?void 0:z.opt)==null?void 0:C.eraserlines){const{op:b}=D;for(let R=0;R<b.length;R++){const O=b[R].map((U,$)=>$%2?U+p[1]:U+p[0]);D.op[R]=O}}N.push({...z,updateNodeOpt:x,type:F.FullWork,workId:A,viewId:i,scenePath:s,requestId:c,needUndoTicker:a,emitEventType:B.CopyNode}),w.push([{...z,updateNodeOpt:x,workId:A,msgType:F.FullWork,dataType:J.Local,emitEventType:B.CopyNode,willSyncService:!1,willRefresh:!0,viewId:i,requestId:c,needUndoTicker:this.control.viewContainerManager.getUndoTickerId(i),isRunBackgroundThread:this.control.isUseBackgroundThread},{workId:A,msgType:F.FullWork,emitEventType:B.CopyNode}])}w.length&&this.collectForLocalWorker(w),N.length&&this.collectForServiceWorker(N)}}class QM extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.SetColorNode);I(this,"undoTickerId")}ensureUndoTicker(e,t,r,i){if(!(r===E.Start||r===E.Done&&!this.undoTickerId))return this.undoTickerId;const a=this.mainEngine.now;return this.undoTickerId=a,this.mainEngine.internalMsgEmitter.emit("addUndoTicker",a,e,{render:!0,storage:!0}),a}setTextColor(e,t,r,i,s,a){const{fontColor:c,fontBgColor:l}=r;t.opt&&(c&&(t.opt.fontColor=c),l&&(t.opt.fontBgColor=l),this.control.textEditorManager.updateTextForMasterController({workId:e,opt:t.opt,viewId:i,canSync:!0,canWorker:!0,requestId:s,needUndoTicker:a}))}collect(e){var T,C;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:t,strokeColor:r,fillColor:i,fontColor:s,fontBgColor:a,viewId:c,workState:l,thickness:u,strokeType:h,requestId:d}=e,f=this.control.viewContainerManager.getView(c);if(!(f!=null&&f.displayer))return;const p=f.focusScenePath,w=[...t],N=this.serviceColloctor.storage,y=[],M={},v=this.ensureUndoTicker(c,p,l,t);this.undoTickerId&&(this.control.textEditorManager.UndoTickerId=this.undoTickerId);const m=new Set;for(;w.length;){const k=w.pop();if(!k)continue;const z=k.toString(),A=this.serviceColloctor.isLocalId(z),x=A?this.serviceColloctor.transformKey(k):z;let D=z;!A&&this.serviceColloctor.isOwn(D)&&(D=this.serviceColloctor.getLocalId(D));const b=(C=(T=N==null?void 0:N[c])==null?void 0:T[p])==null?void 0:C[x];if(b){const R=b.updateNodeOpt||{};if(s||a){if(s){R.fontColor=s;const[U,$,Y,Z]=Kt(s);M.textColor=[U,$,Y],M.textOpacity=Z}if(a)if(R.fontBgColor=sn(a)?"transparent":a,sn(a))M.textBgColor=void 0,M.textBgOpacity=void 0;else{const[U,$,Y,Z]=Kt(a);M.textBgColor=[U,$,Y],M.textBgOpacity=Z}if(b.toolsType===S.Text&&b.opt&&l!==E.Start){D&&l===E.Done&&m.add(D.toString()),this.setTextColor(D,en(b),R,c,d,l===E.Done&&v||void 0);continue}}if(r){R.strokeColor=r;const[U,$,Y,Z]=Kt(r);M.strokeColor=[U,$,Y],M.strokeOpacity=Z}if(i)if(R.fillColor=sn(i)?"transparent":i,sn(i))M.fillColor=void 0,M.fillOpacity=void 0;else{const[U,$,Y,Z]=Kt(i);M.fillColor=[U,$,Y],M.fillOpacity=Z}u&&(R.thickness=u,M.strokeWidth=u),h&&(M.strokeType=h,R.strokeType=h,R.lineCap=this.control.getLineCap(h),R.lineDash=this.control.getLineDash(h));const O={workId:D,msgType:F.UpdateNode,dataType:J.Local,updateNodeOpt:R,emitEventType:this.emitEventType,willRefresh:!0,willRefreshSelector:!0,willSyncService:!0,textUpdateForWoker:!0,viewId:c,requestId:d,needUndoTicker:l===E.Done&&v||void 0};D&&l===E.Done&&m.add(D.toString()),y.push([O,{workId:D,msgType:F.UpdateNode,emitEventType:this.emitEventType}])}}if(l===E.Done&&v){const k=[...m];k.length&&this.mainEngine.internalMsgEmitter.emit("finalizeRequested",v,c,k,p)}y.length?(l===E.Done&&(this.undoTickerId=void 0,this.control.textEditorManager.UndoTickerId=void 0),this.collectForLocalWorker(y)):l===E.Done&&(this.undoTickerId=void 0,this.control.textEditorManager.UndoTickerId=void 0),Object.keys(M).length&&setTimeout(()=>{var k;(k=this.control.room)==null||k.setMemberState(M)},0)}}class ZM extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.ZIndexNode);I(this,"zIndexMap",new Map);I(this,"zIndexMapForBackgroundSVG",new Map)}clearZIndex(e){this.zIndexMap.delete(e),this.zIndexMapForBackgroundSVG.delete(e)}getMinZIndex(e){var t;return((t=this.zIndexMap.get(e))==null?void 0:t.min)||0}getMinZIndexForBackgroundSVG(e){var t;return((t=this.zIndexMapForBackgroundSVG.get(e))==null?void 0:t.min)||0}getMaxZIndex(e){var t;return((t=this.zIndexMap.get(e))==null?void 0:t.max)||0}getMaxZIndexForBackgroundSVG(e){var t;return((t=this.zIndexMapForBackgroundSVG.get(e))==null?void 0:t.max)||0}setMaxZIndex(e,t){const r=this.getMinZIndex(t);this.zIndexMap.set(t,{min:r,max:e})}setMaxZIndexForBackgroundSVG(e,t){const r=this.getMinZIndexForBackgroundSVG(t);this.zIndexMapForBackgroundSVG.set(t,{min:r,max:e})}setMinZIndex(e,t){const r=this.getMaxZIndex(t);this.zIndexMap.set(t,{min:e,max:r})}setMinZIndexForBackgroundSVG(e,t){const r=this.getMaxZIndexForBackgroundSVG(t);this.zIndexMapForBackgroundSVG.set(t,{min:e,max:r})}addMaxLayer(e){const t=this.getMaxZIndex(e)+1;this.setMaxZIndex(t,e)}addMaxLayerForBackgroundSVG(e){const t=this.getMaxZIndexForBackgroundSVG(e)+1;this.setMaxZIndexForBackgroundSVG(t,e)}addMinLayer(e){const t=this.getMinZIndex(e)-1;this.setMinZIndex(t,e)}addMinLayerForBackgroundSVG(e){const t=this.getMinZIndexForBackgroundSVG(e)-1;this.setMinZIndexForBackgroundSVG(t,e)}correct(e){const t=e.sort((r,i)=>r[1]-i[1]);for(let r=1;r<t.length;r++){const i=t[r][1],s=t[r-1][1];i<=s&&(t[r][1]=s+1)}return t}collect(e){var N,y;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:t,layer:r,viewId:i,requestId:s}=e,a=this.control.viewContainerManager.getView(i);if(!(a!=null&&a.displayer))return;const c=a.focusScenePath,l=[...t],u=this.serviceColloctor.storage,h=[],d=[],f=[],p=this.mainEngine.now;for(this.mainEngine.internalMsgEmitter.emit("addUndoTicker",p,i,{render:!0,storage:!0});l.length;){const M=l.pop();if(!M)continue;const v=M.toString(),m=this.serviceColloctor.isLocalId(v),T=m?this.serviceColloctor.transformKey(M):v;let C=v;!m&&this.serviceColloctor.isOwn(C)&&(C=this.serviceColloctor.getLocalId(C));const k=en(u[i][c][T]);let z,A;if(k&&C===q){if(k.selectIds){for(const b of k.selectIds){const R=w(b,this.serviceColloctor),O=(y=(N=u==null?void 0:u[i])==null?void 0:N[c])==null?void 0:y[R];O&&O.toolsType===S.BackgroundSVG?(f.push(b),f.sort((U,$)=>{var Q,W,X,pe;const Y=((W=(Q=u[w(U,this.serviceColloctor)])==null?void 0:Q.opt)==null?void 0:W.zIndex)||0,Z=((pe=(X=u[w(U,this.serviceColloctor)])==null?void 0:X.opt)==null?void 0:pe.zIndex)||0;return Y>Z?1:U<$?-1:0})):(d.push(b),d.sort((U,$)=>{var Q,W,X,pe;const Y=((W=(Q=u[w(U,this.serviceColloctor)])==null?void 0:Q.opt)==null?void 0:W.zIndex)||0,Z=((pe=(X=u[w(U,this.serviceColloctor)])==null?void 0:X.opt)==null?void 0:pe.zIndex)||0;return Y>Z?1:U<$?-1:0}))}const x=k.updateNodeOpt||{};x.zIndexLayer=r;const D={workId:M,msgType:F.UpdateNode,dataType:J.Local,updateNodeOpt:x,emitEventType:this.emitEventType,willRefreshSelector:!0,willSyncService:!0,viewId:i,requestId:s,needUndoTicker:this.control.viewContainerManager.getUndoTickerId(i)};d.length&&(r===st.Top?(this.addMaxLayer(i),z=this.getMaxZIndex(i)):(this.addMinLayer(i),z=this.getMinZIndex(i)),d.forEach(b=>{var $,Y,Z,Q,W;const R=($=this.serviceColloctor)==null?void 0:$.isLocalId(b);let O=R&&((Y=this.serviceColloctor)==null?void 0:Y.transformKey(b))||b;const U=(Q=(Z=u==null?void 0:u[i])==null?void 0:Z[c])==null?void 0:Q[O];U&&(!R&&((W=this.serviceColloctor)!=null&&W.isOwn(O))&&(O=this.serviceColloctor.getLocalId(O)),x.zIndex=z,U!=null&&U.opt&&(U.opt.zIndex=z))})),f.length&&(r===st.Top?(this.addMaxLayerForBackgroundSVG(i),A=this.getMaxZIndexForBackgroundSVG(i)):(this.addMinLayerForBackgroundSVG(i),A=this.getMinZIndexForBackgroundSVG(i)),f.forEach(b=>{var $,Y,Z,Q,W;const R=($=this.serviceColloctor)==null?void 0:$.isLocalId(b);let O=R&&((Y=this.serviceColloctor)==null?void 0:Y.transformKey(b))||b;const U=(Q=(Z=u==null?void 0:u[i])==null?void 0:Z[c])==null?void 0:Q[O];U&&(!R&&((W=this.serviceColloctor)!=null&&W.isOwn(O))&&(O=this.serviceColloctor.getLocalId(O)),x.zIndexForBackgroundSVG=A,U!=null&&U.opt&&(U.opt.zIndex=A))})),D.willSerializeData=!0,h.push([D,{workId:M,msgType:F.UpdateNode,emitEventType:this.emitEventType}])}continue}}h.length&&(this.mainEngine.internalMsgEmitter.emit("finalizeRequested",p,i,h.map(([M])=>{var v;return(v=M.workId)==null?void 0:v.toString()}).filter(Boolean),c),this.collectForLocalWorker(h));function w(M,v){return v.isLocalId(M)&&v.transformKey(M)||M}}}class HM extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.TranslateNode);I(this,"cachePosition")}collect(e,t){var w,N,y;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:r,position:i,workState:s,viewId:a}=e;this.lastEmtData=e;const c=this.control.viewContainerManager.getView(a);if(!(c!=null&&c.displayer))return;const l=c.focusScenePath,u=[...r],h=(w=this.serviceColloctor)==null?void 0:w.storage,d=[],f=new Set,p=s===E.Start&&this.mainEngine.now||void 0;for(p&&this.mainEngine.internalMsgEmitter.emit("addUndoTicker",p,a,{render:!0,storage:!0,isWritable:!0});u.length;){const M=u.pop();if(!M)continue;const v=M.toString(),m=this.serviceColloctor.isLocalId(v),T=m&&this.serviceColloctor.transformKey(M)||v;let C=v;!m&&this.serviceColloctor.isOwn(C)&&(C=this.serviceColloctor.getLocalId(C));const k=(y=(N=h==null?void 0:h[a])==null?void 0:N[l])==null?void 0:y[T];if(k&&C===q){if(k.selectIds){s===E.Done&&k.selectIds.forEach(A=>{f.add(A.toString())});const z=this.control.viewContainerManager.transformToScenePoint([i.x,i.y],a);if(s===E.Start&&(this.cachePosition=z),this.cachePosition){const A=k.updateNodeOpt||{};A.translate=[z[0]-this.cachePosition[0],z[1]-this.cachePosition[1]],A.workState=s,this.control.cursor.isEnableCursor?A.useAnimation=!1:(A.uid=this.serviceColloctor.uid,s===E.Start?A.useAnimation=!1:s===E.Done&&(A.useAnimation=!0));const x={workId:M,msgType:F.UpdateNode,dataType:J.Local,updateNodeOpt:A,emitEventType:this.emitEventType,willSyncService:!0,textUpdateForWoker:!0,viewId:a,smoothSync:this.mainEngine.smoothSync};s===E.Done&&(x.textUpdateForWoker=!0,x.willSerializeData=!0,this.cachePosition=void 0,x.needUndoTicker=this.control.viewContainerManager.getUndoTickerId(a)),d.push([x,{workId:M,msgType:F.UpdateNode,emitEventType:this.emitEventType,workState:s}])}}continue}}if(s===E.Start?this.mainEngine.unWritable():s===E.Done&&(this.mainEngine.abled(),this.lastEmtData=void 0),d.length){if(s===E.Done){const M=this.control.viewContainerManager.getUndoTickerId(a);if(M){const v=[...f];this.mainEngine.internalMsgEmitter.emit("finalizeRequested",M,a,v,l)}}this.collectForLocalWorker(d,t)}}}class qM extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.DeleteNode)}collect(e){var f,p;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:t,viewId:r,requestId:i}=e,s=this.control.viewContainerManager.getView(r);if(!(s!=null&&s.displayer))return;const a=s.focusScenePath,c=this.serviceColloctor.storage,l=[...t],u=[],h=[],d=this.mainEngine.now;for(this.control.textEditorManager.UndoTickerId=d;l.length;){const w=l.pop();if(!w)continue;const N=w.toString(),y=this.serviceColloctor.isLocalId(N),M=y?this.serviceColloctor.transformKey(w):N,v=(p=(f=c==null?void 0:c[r])==null?void 0:f[a])==null?void 0:p[M];if(v){let m=N;if(!y&&this.serviceColloctor.isOwn(m)&&(m=this.serviceColloctor.getLocalId(m)),v.toolsType===S.Text){this.control.textEditorManager.delete(m,!0,!0);continue}h.push(m)}}h.length&&(this.mainEngine.internalMsgEmitter.emit("addUndoTicker",d,r,{render:!0,storage:!0}),this.mainEngine.internalMsgEmitter.emit("finalizeRequested",d,r,h.slice(),a),u.push([{msgType:F.RemoveNode,emitEventType:B.DeleteNode,removeIds:h,dataType:J.Local,willSyncService:!0,willRefresh:!0,viewId:r,requestId:i,isRunBackgroundThread:this.control.isUseBackgroundThread,needUndoTicker:this.control.viewContainerManager.getUndoTickerId(r)},void 0]),this.collectForLocalWorker(u))}}class KM extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.ScaleNode);I(this,"targetText",new Map);I(this,"cacheTextInfo",new Map)}async setTextStyle(e,t,r){const i=await this.control.textEditorManager.updateTextControllerWithEffectAsync({workId:e,opt:t,viewId:r,canSync:!1,canWorker:!1});return{key:e,textInfo:i}}async collect(e,t){var M,v,m,T,C,k,z;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:r,workState:i,viewId:s,originPoint:a,scenePoint:c,dir:l,scale:u,translate:h}=e;this.lastEmtData=e;const d=this.control.viewContainerManager.getView(s);if(!(d!=null&&d.displayer))return;const f=d.focusScenePath,p=[...r],w=(M=this.serviceColloctor)==null?void 0:M.storage,N=[],y=i===E.Start&&this.mainEngine.now||void 0;for(y&&(this.mainEngine.internalMsgEmitter.emit("addUndoTicker",y,s,{render:!0,storage:!0,isWritable:!0}),this.control.textEditorManager.UndoTickerId=y);p.length;){const A=p.pop();if(!A)continue;const x=A.toString(),D=this.serviceColloctor.isLocalId(x),b=D&&this.serviceColloctor.transformKey(A)||x;let R=x;!D&&this.serviceColloctor.isOwn(R)&&(R=this.serviceColloctor.getLocalId(R));const O=(m=(v=w==null?void 0:w[s])==null?void 0:v[f])==null?void 0:m[b];if(O&&R===q&&O.selectIds){const U=O.updateNodeOpt||{};if(U.dir=l,U.originPoint=a,U.scenePoint=c,U.workState=i,U.scale=u,U.translate=h,i===E.Start){this.cacheTextInfo.clear();for(const Y of O.selectIds){const Z=(T=this.serviceColloctor)==null?void 0:T.isLocalId(Y),Q=Z&&((C=this.serviceColloctor)==null?void 0:C.transformKey(Y))||Y;let W=Q;!Z&&((k=this.serviceColloctor)!=null&&k.isOwn(Q))&&(W=this.serviceColloctor.getLocalId(Q));const X=this.control.textEditorManager.get(W);X&&i===E.Start&&this.targetText.set(W,en(X))}}if(this.targetText.size&&i!==E.Start&&u){const Y=[];for(const[Q,W]of this.targetText.entries()){const{opt:X}=W,pe=Math.floor(X.fontSize*u[0]),ae=this.cacheTextInfo.get(Q),de=!ae&&X.fontSize!==pe||ae&&ae.fontSize!==pe||!1,le=(z=this.control.textEditorManager.get(Q))==null?void 0:z.opt;if(de&&le&&X.boxSize&&X.boxPoint){const tt=this.setTextStyle(Q,{...le,fontSize:pe},s);Y.push(tt)}}const Z=await Promise.all(Y);for(const Q of Z)if(Q){const{key:W,textInfo:X}=Q;this.cacheTextInfo.set(W,{fontSize:X.opt.fontSize,boxSize:X.opt.boxSize,boxPoint:X.opt.boxPoint})}U.textInfos=this.cacheTextInfo}this.control.cursor.isEnableCursor?U.useAnimation=!1:(U.uid=this.serviceColloctor.uid,i===E.Start?U.useAnimation=!1:i===E.Done&&(U.useAnimation=!0));const $={workId:A,msgType:F.UpdateNode,dataType:J.Local,updateNodeOpt:U,emitEventType:this.emitEventType,willRefreshSelector:!0,willSyncService:!0,viewId:s,smoothSync:this.mainEngine.smoothSync};i===E.Done&&($.willSerializeData=!0,this.targetText.clear(),$.needUndoTicker=this.control.viewContainerManager.getUndoTickerId(s)),N.push([$,{workId:A,msgType:F.UpdateNode,emitEventType:this.emitEventType,workState:i}]);continue}}if(i===E.Start?this.mainEngine.unWritable():i===E.Done&&(this.mainEngine.abled(),this.lastEmtData=void 0),N.length){if(i===E.Done){const A=this.control.viewContainerManager.getUndoTickerId(s);A&&this.mainEngine.internalMsgEmitter.emit("finalizeRequested",A,s,N.map(([x])=>{var D;return(D=x.workId)==null?void 0:D.toString()}).filter(Boolean),f)}this.collectForLocalWorker(N,t)}}}class JM extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.RotateNode);I(this,"cacheOriginRotate",0)}collect(e,t){var w,N,y,M,v,m,T;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:r,angle:i,workState:s,viewId:a}=e;this.lastEmtData=e;const c=this.control.viewContainerManager.getView(a);if(!(c!=null&&c.displayer))return;const l=c.focusScenePath,u=[...r],h=(w=this.serviceColloctor)==null?void 0:w.storage,d=[],f=new Set,p=s===E.Start&&this.mainEngine.now||void 0;for(p&&this.mainEngine.internalMsgEmitter.emit("addUndoTicker",p,a,{render:!0,storage:!0,isWritable:!0});u.length;){const C=u.pop();if(!C)continue;const k=C.toString(),z=this.serviceColloctor.isLocalId(k),A=z&&this.serviceColloctor.transformKey(C)||k;let x=k;!z&&this.serviceColloctor.isOwn(x)&&(x=this.serviceColloctor.getLocalId(x));const D=(y=(N=h==null?void 0:h[a])==null?void 0:N[l])==null?void 0:y[A];if(D&&x===q){if(((M=D.selectIds)==null?void 0:M.length)===1){const b=D.selectIds[0];if(s===E.Done&&f.add(b.toString()),s===E.Start){const $=((v=this.serviceColloctor)==null?void 0:v.isLocalId(b))&&((m=this.serviceColloctor)==null?void 0:m.transformKey(b))||b,Y=h[a][l][$];this.cacheOriginRotate=((T=Y==null?void 0:Y.opt)==null?void 0:T.rotate)||0}const R=D.updateNodeOpt||{};R.angle=(i+this.cacheOriginRotate)%360,R.workState=s,this.control.cursor.isEnableCursor?R.useAnimation=!1:(R.uid=this.serviceColloctor.uid,s===E.Start?R.useAnimation=!1:s===E.Done&&(R.useAnimation=!0));const O={workId:C,msgType:F.UpdateNode,dataType:J.Local,updateNodeOpt:R,emitEventType:this.emitEventType,willRefreshSelector:!1,willSyncService:!0,viewId:a,smoothSync:this.mainEngine.smoothSync};s===E.Done&&(O.willRefreshSelector=!0,O.willSerializeData=!0,this.cacheOriginRotate=0,O.needUndoTicker=this.control.viewContainerManager.getUndoTickerId(a)),d.push([O,{workId:C,msgType:F.UpdateNode,emitEventType:this.emitEventType,workState:s}])}continue}}if(s===E.Start?this.mainEngine.unWritable():s===E.Done&&(this.mainEngine.abled(),this.lastEmtData=void 0),d.length){if(s===E.Done){const C=this.control.viewContainerManager.getUndoTickerId(a);if(C){const k=[...f];this.mainEngine.internalMsgEmitter.emit("finalizeRequested",C,a,k,l)}}this.collectForLocalWorker(d,t)}}}function XM(o){switch(o){case S.Text:return qe.Text;case S.SpeechBalloon:case S.Star:case S.Ellipse:case S.Rectangle:case S.Triangle:case S.Rhombus:case S.Polygon:return qe.Shape}}function ho(o){const n=o.lastChild;if(!n){const r=document.createElement("div"),i=document.createTextNode("");return r.appendChild(i),o.appendChild(r),i}if(n.nodeType===Node.TEXT_NODE)return n;const e=n;if(!e.lastChild){const r=document.createTextNode("");return e.appendChild(r),r}if(e.lastChild.nodeType===Node.TEXT_NODE)return e.lastChild;const t=document.createTextNode("");return e.appendChild(t),t}function _M(o,n){var r;const e=document.createRange(),t=ho(n);t.nodeType===Node.TEXT_NODE?e.setStart(t,((r=t.textContent)==null?void 0:r.length)||0):e.setStart(t,0),e.collapse(!0),o.removeAllRanges(),o.addRange(e)}function go(o){const n=document.createTreeWalker(o,NodeFilter.SHOW_TEXT,null),e=[];let t;for(;(t=n.nextNode())!==null;)e.push(t);return e}function ey(o,n,e){var a;const t=document.createRange();t.setStart(o,n),t.collapse(!0);const r=t.getBoundingClientRect();if(!r.width&&!r.height){const c=(a=o.parentElement)==null?void 0:a.getBoundingClientRect();if(c){const l=e.y<c.top?c.top-e.y:e.y>c.bottom?e.y-c.bottom:0,u=n===0?c.left:c.right;return Math.abs(e.x-u)+l*4}}const i=r.left+r.width/2,s=r.top+r.height/2;return Math.abs(e.x-i)+Math.abs(e.y-s)*4}function ty(o,n){var r;const e=go(o);if(!e.length){const i=ho(o);return i.nodeType===Node.TEXT_NODE?{node:i,offset:0}:void 0}let t;for(const i of e){const s=((r=i.textContent)==null?void 0:r.length)||0;for(let a=0;a<=s;a++){const c=ey(i,a,n);(!t||c<t.distance)&&(t={node:i,offset:a,distance:c})}}return t?{node:t.node,offset:t.offset}:void 0}function ny(o,n,e){const t=ty(n,e);if(!t)return!1;const r=document.createRange();return r.setStart(t.node,t.offset),r.collapse(!0),o.removeAllRanges(),o.addRange(r),!0}function li(o,n){return!!(o!=null&&o.anchorNode)&&n.contains(o.anchorNode)}function ui(o){let n=null,e=!1;for(const r of Array.from(o.childNodes)){if(r instanceof HTMLDivElement){n=r;continue}r.nodeType===Node.TEXT_NODE&&(n||(n=document.createElement("div"),o.insertBefore(n,r),e=!0),n.appendChild(r),e=!0)}const t=Array.from(o.childNodes).reverse().find(r=>r instanceof HTMLDivElement);return{changed:e,lastLine:t||null}}function ry(o){const n=go(o);return{textContent:n.map(e=>e.textContent||"").join(""),textNodes:n}}function fo(o){const n=[];for(let e=0;e<o.childNodes.length;e++){const t=o.childNodes[e];if(t.nodeName==="#text"&&e===0){const r=t.textContent.split(/\n/),i=r.pop();n.push(...r),i&&n.push(i)}else if(t.nodeName==="DIV"){const i=(t.innerText??t.textContent??"").split(/\n/);if(i.length===2&&i[0]===""&&i[1]==="")n.push("");else{const s=i.shift();(s||s==="")&&n.push(s);const a=i.pop();n.push(...i),a&&n.push(a)}}}return n}function po(o){return St(fo(o))}function Zt(o,n){var r,i;if(!o.length)return;let e=Math.max(0,n);for(const s of o){const a=((r=s.textContent)==null?void 0:r.length)||0;if(e<=a)return{node:s,offset:e};e-=a}const t=o[o.length-1];return{node:t,offset:((i=t.textContent)==null?void 0:i.length)||0}}function iy(o){const{hasPoint:n,previousByPoint:e,hasSelectionInEditor:t,rangeCount:r,isCollapsed:i}=o;return!n&&e&&t&&r>0&&i}class oy extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.SetFontStyle);I(this,"timerId")}async setTextStyle(e,t,r,i,s,a){const{bold:c,underline:l,lineThrough:u,italic:h,fontSize:d}=r;if(t.toolsType&&XM(t.toolsType)===qe.Text){t.opt&&(c&&(t.opt.bold=c),j.isBoolean(l)&&(t.opt.underline=l),j.isBoolean(u)&&(t.opt.lineThrough=u),h&&(t.opt.italic=h),d&&(t.opt.fontSize=d));const p=await this.control.textEditorManager.updateTextControllerWithEffectAsync({workId:e,opt:t.opt,viewId:i,canSync:!1,canWorker:!1,requestId:s,needUndoTicker:a});return{key:e,textInfo:p}}}async collect(e){var m,T,C,k,z,A;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:t,bold:r,italic:i,lineThrough:s,underline:a,viewId:c,fontSize:l,requestId:u}=e,h=this.control.viewContainerManager.getView(c);if(!(h!=null&&h.displayer))return;const d=h.focusScenePath,f=[...t],p=this.serviceColloctor.storage,w={},N=this.mainEngine.now;this.mainEngine.internalMsgEmitter.emit("addUndoTicker",N,c,{render:!0,storage:!0}),this.control.textEditorManager.UndoTickerId=N;const y=[],M=[];for(;f.length;){const x=f.pop();if(!x)continue;const D=x.toString(),b=this.serviceColloctor.isLocalId(D),R=b?this.serviceColloctor.transformKey(x):D;let O=D;!b&&this.serviceColloctor.isOwn(O)&&(O=this.serviceColloctor.getLocalId(O));const U=(T=(m=p==null?void 0:p[c])==null?void 0:m[d])==null?void 0:T[R];if(U){const $=U.updateNodeOpt||{};if(r&&($.bold=r,w.bold=r==="bold"),i&&($.italic=i,w.italic=i==="italic"),j.isBoolean(s)&&($.lineThrough=s,w.lineThrough=s),j.isBoolean(a)&&($.underline=a,w.underline=a),l&&($.fontSize=l,w.textSize=l),U.toolsType===S.Text&&U.opt){const Y=this.setTextStyle(O,j.cloneDeep(U),$,c,u,N);y.push(O),M.push(Y);continue}if(U&&O===q&&((C=U.selectIds)!=null&&C.length))for(const Y of U.selectIds){const Z=(k=this.serviceColloctor)==null?void 0:k.isLocalId(Y);let Q=Z&&((z=this.serviceColloctor)==null?void 0:z.transformKey(Y))||Y;const W=p[c][d][Q]||void 0;if(!Z&&((A=this.serviceColloctor)!=null&&A.isOwn(Q))&&(Q=this.serviceColloctor.getLocalId(Q)),W&&W.toolsType===S.Text&&U.opt){const X=this.setTextStyle(Q,j.cloneDeep(W),$,c,u,N);y.push(Q),M.push(X);continue}}}}const v=await Promise.all(M);for(const x of v)if(x){const{key:D,textInfo:b}=x;b&&(b.canSync=!0,b.canWorker=!0,this.control.textEditorManager.updateForViewEdited(D,b))}Object.keys(w).length&&(this.timerId&&(clearTimeout(this.timerId),this.timerId=void 0),this.timerId=setTimeout(()=>{var x;this.timerId=void 0,(x=this.control.room)==null||x.setMemberState(w)},0)),y.length&&this.mainEngine.internalMsgEmitter.emit("finalizeRequested",N,c,y,d)}}class sy extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.SetPoint);I(this,"undoTickerId")}collect(e){var M,v,m;if(!this.serviceColloctor||!this.mainEngine)return;const{workId:t,pointMap:r,workState:i,viewId:s}=e,a=this.control.viewContainerManager.getView(s);if(!(a!=null&&a.displayer))return;const c=a.focusScenePath,l=(M=this.serviceColloctor)==null?void 0:M.storage,u=[],h=i===E.Start&&this.mainEngine.now||void 0;h&&(this.undoTickerId=h,this.mainEngine.internalMsgEmitter.emit("addUndoTicker",h,s,{render:!0,storage:!0,isWritable:!0}));const d=t;if(!d)return;const f=d.toString(),p=this.serviceColloctor.isLocalId(f),w=p&&this.serviceColloctor.transformKey(d)||f;let N=f;!p&&this.serviceColloctor.isOwn(N)&&(N=this.serviceColloctor.getLocalId(N));const y=(m=(v=l==null?void 0:l[s])==null?void 0:v[c])==null?void 0:m[w];if(y&&N===q&&y.selectIds){const T=y.updateNodeOpt||{};T.pointMap=r,T.workState=i;const C={workId:d,msgType:F.UpdateNode,dataType:J.Local,updateNodeOpt:T,emitEventType:this.emitEventType,willRefreshSelector:!0,willSyncService:!0,viewId:s,needUndoTicker:i===E.Done&&this.control.viewContainerManager.getUndoTickerId(s)||void 0};u.push([C,{workId:d,msgType:F.UpdateNode,emitEventType:this.emitEventType}])}i===E.Start?this.mainEngine.unWritable():i===E.Done&&this.mainEngine.abled(),u.length&&(i===E.Done&&this.undoTickerId&&this.mainEngine.internalMsgEmitter.emit("finalizeRequested",this.undoTickerId,s,u.map(([T])=>{var C;return(C=T.workId)==null?void 0:C.toString()}).filter(Boolean),c),this.collectForLocalWorker(u))}}class ay extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.SetLock)}collect(e){var f,p;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:t,isLocked:r,viewId:i,requestId:s}=e,a=this.control.viewContainerManager.getView(i);if(!(a!=null&&a.displayer))return;const c=a.focusScenePath,l=[...t],u=this.serviceColloctor.storage,h=[],d=this.mainEngine.now;for(this.mainEngine.internalMsgEmitter.emit("addUndoTicker",d,i,{render:!0,storage:!0});l.length;){const w=l.pop();if(!w)continue;const N=w.toString(),y=this.serviceColloctor.isLocalId(N),M=y?this.serviceColloctor.transformKey(w):N;let v=N;!y&&this.serviceColloctor.isOwn(v)&&(v=this.serviceColloctor.getLocalId(v));const m=(p=(f=u==null?void 0:u[i])==null?void 0:f[c])==null?void 0:p[M];if(m){const T=m.updateNodeOpt||{};T.isLocked=r;const C={workId:v,msgType:F.UpdateNode,dataType:J.Local,updateNodeOpt:T,emitEventType:this.emitEventType,willRefresh:!0,willRefreshSelector:!0,willSyncService:!0,viewId:i,requestId:s,needUndoTicker:this.control.viewContainerManager.getUndoTickerId(i)};h.push([C,{workId:v,msgType:F.UpdateNode,emitEventType:this.emitEventType}])}}h.length&&(this.mainEngine.internalMsgEmitter.emit("finalizeRequested",d,i,h.map(([w])=>{var N;return(N=w.workId)==null?void 0:N.toString()}).filter(Boolean),c),this.collectForLocalWorker(h))}}class cy extends Ge{constructor(){super(...arguments);I(this,"lastEmtData");I(this,"emitEventType",B.SetShapeOpt)}collect(e){var f,p;if(!this.serviceColloctor||!this.mainEngine)return;const{workIds:t,viewId:r,requestId:i,...s}=e,a=this.control.viewContainerManager.getView(r);if(!(a!=null&&a.displayer))return;const c=a.focusScenePath,l=[...t],u=this.serviceColloctor.storage,h=[],d=this.mainEngine.now;for(this.mainEngine.internalMsgEmitter.emit("addUndoTicker",d,r,{render:!0,storage:!0});l.length;){const w=l.pop();if(!w)continue;const N=w.toString(),y=this.serviceColloctor.isLocalId(N),M=y?this.serviceColloctor.transformKey(w):N;let v=N;!y&&this.serviceColloctor.isOwn(v)&&(v=this.serviceColloctor.getLocalId(v));const m=(p=(f=u==null?void 0:u[r])==null?void 0:f[c])==null?void 0:p[M];if(m){const T={...m.updateNodeOpt,...s,willRefresh:!0};if(m&&v===q){const C={workId:v,msgType:F.UpdateNode,dataType:J.Local,updateNodeOpt:T,emitEventType:this.emitEventType,willRefresh:!0,willRefreshSelector:!0,willSyncService:!0,viewId:r,requestId:i,needUndoTicker:this.control.viewContainerManager.getUndoTickerId(r)};h.push([C,{workId:v,msgType:F.UpdateNode,emitEventType:this.emitEventType}])}}}h.length&&(this.mainEngine.internalMsgEmitter.emit("finalizeRequested",d,r,h.map(([w])=>{var N;return(N=w.workId)==null?void 0:N.toString()}).filter(Boolean),c),this.collectForLocalWorker(h))}}class ee{constructor(n){I(this,"builders",new Map);this.builders=new Map(n.map(e=>[e,this.build(e)]))}build(n){switch(n){case B.TranslateNode:return new HM;case B.ZIndexNode:return new ZM;case B.CopyNode:return new GM;case B.SetColorNode:return new QM;case B.DeleteNode:return new qM;case B.ScaleNode:return new KM;case B.RotateNode:return new JM;case B.SetFontStyle:return new oy;case B.SetPoint:return new sy;case B.SetLock:return new ay;case B.SetShapeOpt:return new cy}}getBuilder(n){return this.builders.get(n)}registerForMainEngine(n,e){return this.builders.forEach(t=>{t&&t.registerForMainEngine(n,e)}),this}destroy(){this.builders.forEach(n=>{n&&n.destroy()}),this.builders.clear()}pause(){return this.builders.forEach(n=>{n&&n.pause()}),this}recover(){return this.builders.forEach(n=>{n&&n.recover()}),this}static emitMethod(n,e,t){Ge.dispatch(n,e,t)}static activeListener(n){fe.InternalMsgEmitter.on(B.ActiveMethod,n)}static unmountActiveListener(n){fe.InternalMsgEmitter.off(B.ActiveMethod,n)}}const ly=async(o,n)=>{const{src:e,isgl:t}=o;if(typeof Image=="function"){const r=new Image;return typeof e=="string"&&(r.crossOrigin="anonymous"),new Promise(i=>{r.onload=function(){createImageBitmap(r,{imageOrientation:t?"flipY":"none"}).then(s=>{i(s)})},r.onerror=function(){i(void 0)},r.src=e})}else return fetch(e,{method:"GET",mode:"cors",cache:"default"}).then(r=>r.blob()).then(r=>createImageBitmap(r,{imageOrientation:t?"flipY":"none"}).then(i=>i))};function uy(o){return o===ce.Stroke?ce.Normal:o}function Nt(o){const{pencilOptions:n}=o,e=uy(n.strokeType);return{strokeColor:n.strokeColor,thickness:n.thickness,isOpacity:n.isOpacity,zIndex:n.zIndex,scale:n.scale,rotate:n.rotate,translate:n.translate,eraserlines:n.eraserlines,strokeType:e,lineCap:e===ce.Normal?void 0:n.lineCap,lineDash:e===ce.Normal?void 0:n.lineDash}}function Mo(o){return[o.start[0],o.start[1],0,o.end[0],o.end[1],0]}function kn(o){const{minX:n,minY:e,maxX:t,maxY:r}=o.bbox;return[n,e,0,t,r,0]}function hy(o){const{minX:n,minY:e,maxX:t,maxY:r}=o.bbox;return[n,e,0,t,e,0,t,r,0,n,r,0]}const dy=(o,n)=>({toolsType:S.Straight,opt:Nt(n),op:Mo(o)}),gy=(o,n)=>({toolsType:S.Arrow,opt:Nt(n),op:Mo(o)}),fy=(o,n)=>({toolsType:S.Rectangle,opt:{...Nt(n),fillColor:"transparent"},op:hy(o)}),py=(o,n)=>({toolsType:S.Ellipse,opt:{...Nt(n),fillColor:"transparent"},op:kn(o)}),My=(o,n)=>({toolsType:S.Polygon,opt:{...Nt(n),fillColor:"transparent",vertices:3,shapeType:Ue.Triangle},op:kn(o)}),yy=(o,n)=>({toolsType:S.Polygon,opt:{...Nt(n),fillColor:"transparent",vertices:4,shapeType:Ue.Rhombus},op:kn(o)}),my=(o,n)=>({toolsType:S.Star,opt:{...Nt(n),fillColor:"transparent",vertices:10,innerVerticeStep:2,innerRatio:.4,shapeType:Ue.Pentagram},op:kn(o)}),Mt={straight:dy,arrow:gy,rectangle:fy,ellipse:py,triangle:My,rhombus:yy,star:my};function Iy(o){return St(o.op)}function at(o){if(!o.length)return o;const[n,e]=o[0],[t,r]=o[o.length-1];return n===t&&e===r?o:[...o,o[0]]}function wy(o,n){const e=at(o).slice(0,-1),t=(n%e.length+e.length)%e.length;return at(e.slice(t).concat(e.slice(0,t)))}function Sr(o){return[...o].reverse()}function kt(o,n,e,t,r){const i=[];for(let s=0;s<r;s++){const a=wy(e,s),c=Sr(a);i.push({id:`${n}-cw-${s}`,semanticKind:o,points:a,threshold:t},{id:`${n}-ccw-${s}`,semanticKind:o,points:c,threshold:t})}return i}function Ty(o,n,e,t){const r=[];return e.forEach((i,s)=>{r.push({id:`${n}-forward-${s}`,semanticKind:o,points:i,threshold:t},{id:`${n}-reverse-${s}`,semanticKind:o,points:Sr(i),threshold:t})}),r}const hi=[[0,.5],[.25,.5],[.5,.5],[.75,.5],[1,.5]],Sy=[[.05,.5],[.3,.5],[.55,.5],[.78,.5],[1,.5],[.8,.32],[1,.5],[.8,.68]],vy=[[.05,.5],[.3,.5],[.55,.5],[.78,.5],[1,.5],[.8,.68],[1,.5],[.8,.32]],Cy=at([[.15,.2],[.85,.2],[.85,.8],[.15,.8]]),Ny=at([[.5,.12],[.88,.82],[.12,.82]]),ky=at([[.5,.08],[.92,.5],[.5,.92],[.08,.5]]),xy=at([[.5,.04],[.62,.34],[.95,.36],[.68,.56],[.78,.9],[.5,.7],[.22,.9],[.32,.56],[.05,.36],[.38,.34]]),by=at([[.5,.04],[.74,.88],[.08,.34],[.92,.34],[.26,.88]]),Dy=Array.from({length:24},(o,n)=>{const e=Math.PI*2*n/24;return[.5+Math.cos(e)*.42,.5+Math.sin(e)*.3]}),yt=[{id:"straight-base",semanticKind:"straight",points:hi,threshold:.72},{id:"straight-reverse",semanticKind:"straight",points:Sr(hi),threshold:.72},...Ty("arrow","arrow",[Sy,vy],.71),...kt("rectangle","rectangle",Cy,.68,4),...kt("ellipse","ellipse",at(Dy),.64,12),...kt("triangle","triangle",Ny,.68,3),...kt("rhombus","rhombus",ky,.66,4),...kt("star","star",xy,.7,5),...kt("star","pentagram",by,.68,5)];function Ht(o,n,e,t){const{metrics:r}=n;return r.closureRatio>.24||r.cornerCount<e||r.cornerCount>t?null:o}const Ay=[{kind:"straight",templates:yt.filter(o=>o.semanticKind==="straight"),postProcessor(o,n){const{metrics:e}=n;return e.bboxDiagonal<8||e.closureRatio<.75||e.straightness<.94&&o.score<.8?null:o},mapper:Mt.straight,enabledInV1:!0},{kind:"arrow",templates:yt.filter(o=>o.semanticKind==="arrow"),postProcessor(o,n){const{metrics:e}=n;return e.closureRatio<.12||e.cornerCount<4||e.cornerCount>7||e.straightness>.93?null:o.score>=Math.max(o.threshold,.71)?o:null},mapper:Mt.arrow,enabledInV1:!0},{kind:"rectangle",templates:yt.filter(o=>o.semanticKind==="rectangle"),postProcessor(o,n){const e=Ht(o,n,4,6);return!e||n.metrics.bboxCornerCloseness>.15||n.metrics.bboxCornerCloseness>=n.metrics.diamondCloseness?null:e},mapper:Mt.rectangle,enabledInV1:!0},{kind:"ellipse",templates:yt.filter(o=>o.semanticKind==="ellipse"),postProcessor(o,n){const e=Ht(o,n,6,12);return!e||n.metrics.radialVariance>.5?null:e},mapper:Mt.ellipse,enabledInV1:!0},{kind:"triangle",templates:yt.filter(o=>o.semanticKind==="triangle"),postProcessor(o,n){return Ht(o,n,3,4)},mapper:Mt.triangle,enabledInV1:!0},{kind:"rhombus",templates:yt.filter(o=>o.semanticKind==="rhombus"),postProcessor(o,n){const e=Ht(o,n,4,5);return!e||n.metrics.diamondCloseness>=n.metrics.bboxCornerCloseness?null:e},mapper:Mt.rhombus,enabledInV1:!0},{kind:"star",templates:yt.filter(o=>o.semanticKind==="star"),postProcessor(o,n){const e=o.templateId.startsWith("pentagram"),t=Ht(o,n,e?5:8,12);if(!t)return null;if(e){if(n.metrics.bboxCornerCloseness<.22||n.metrics.angleVariance<35)return null}else if(n.metrics.radialVariance<.34)return null;return t},mapper:Mt.star,enabledInV1:!0}];function vr(){return Ay}const Ey=64,Hn=250;function et(o,n){const e=o[0]-n[0],t=o[1]-n[1];return Math.hypot(e,t)}function jy(o){const n=[];for(const e of o){const t=n[n.length-1];(!t||et(t,e)>.5)&&n.push(e)}return n}function yo(o){let n=0;for(let e=1;e<o.length;e++)n+=et(o[e-1],o[e]);return n}function mo(o){let n=Number.POSITIVE_INFINITY,e=Number.POSITIVE_INFINITY,t=Number.NEGATIVE_INFINITY,r=Number.NEGATIVE_INFINITY;for(const[i,s]of o)n=Math.min(n,i),e=Math.min(e,s),t=Math.max(t,i),r=Math.max(r,s);return{minX:n,minY:e,maxX:t,maxY:r}}function zy(o,n=Ey){if(o.length<=1)return o;const e=yo(o)/Math.max(n-1,1),t=[o[0]];let r=0,i=o[0],s=1;const a=[...o];for(;s<a.length;){const c=a[s],l=et(i,c);if(l===0){s++;continue}if(r+l>=e){const u=(e-r)/l,h=[i[0]+u*(c[0]-i[0]),i[1]+u*(c[1]-i[1])];t.push(h),a.splice(s,0,h),r=0,i=h,s++}else r+=l,i=c,s++}for(;t.length<n;)t.push(a[a.length-1]);return t}function xn(o){const n=o.reduce((e,t)=>[e[0]+t[0],e[1]+t[1]],[0,0]);return[n[0]/o.length,n[1]/o.length]}function Ly(o,n){const e=xn(o),t=Math.cos(n),r=Math.sin(n);return o.map(([i,s])=>{const a=i-e[0],c=s-e[1];return[a*t-c*r+e[0],a*r+c*t+e[1]]})}function Py(o){const n=xn(o);return Math.atan2(n[1]-o[0][1],n[0]-o[0][0])}function Ry(o,n=Hn){const e=mo(o),t=Math.max(e.maxX-e.minX,1),r=Math.max(e.maxY-e.minY,1);return o.map(([i,s])=>[(i-e.minX)/t*n,(s-e.minY)/r*n])}function Oy(o){const n=xn(o);return o.map(([e,t])=>[e-n[0],t-n[1]])}function Io(o){const n=zy(o),e=Ly(n,-Py(n)),t=Ry(e);return Oy(t)}function Uy(o,n){let e=0;const t=Math.min(o.length,n.length);for(let r=0;r<t;r++)e+=et(o[r],n[r]);return e/Math.max(t,1)}function Yy(o,n,e){const[t,r]=o,[i,s]=n,[a,c]=e,l=Math.abs((c-s)*t-(a-i)*r+a*s-c*i),u=Math.hypot(c-s,a-i)||1;return l/u}function qn(o,n){if(o.length<=2)return o;let e=0,t=0;for(let s=1;s<o.length-1;s++){const a=Yy(o[s],o[0],o[o.length-1]);a>e&&(e=a,t=s)}if(e<=n)return[o[0],o[o.length-1]];const r=qn(o.slice(0,t+1),n),i=qn(o.slice(t),n);return r.slice(0,-1).concat(i)}function By(o){if(o.length<3)return[];const n=[];for(let e=0;e<o.length;e++){const t=o[(e-1+o.length)%o.length],r=o[e],i=o[(e+1)%o.length],s=[t[0]-r[0],t[1]-r[1]],a=[i[0]-r[0],i[1]-r[1]],c=s[0]*a[0]+s[1]*a[1],l=Math.hypot(s[0],s[1])*Math.hypot(a[0],a[1])||1,u=Math.acos(Math.max(-1,Math.min(1,c/l)));n.push(u*180/Math.PI)}return n}function Fy(o){const n=mo(o),e=Math.max(n.maxX-n.minX,1),t=Math.max(n.maxY-n.minY,1),r=Math.hypot(e,t)||1,i=yo(o),s=et(o[0],o[o.length-1]),a=et(o[0],o[o.length-1]),c=a/r,l=r*.045,h=c<.24&&o.length>2?o.slice(0,et(o[0],o[o.length-1])<.5?-1:o.length):o,d=qn(h,l),f=By(d),p=f.length>0?Math.max(...f.map(k=>Math.abs(k-90))):90,w=d.map(([k,z])=>[(k-n.minX)/e,(z-n.minY)/t]),N=[[0,0],[1,0],[1,1],[0,1]],y=[[.5,0],[1,.5],[.5,1],[0,.5]],M=(k,z)=>k.reduce((A,x)=>{const D=Math.min(...z.map(b=>et(x,b)));return A+D},0)/Math.max(k.length,1),v=xn(o),m=o.map(k=>et(k,v)),T=m.reduce((k,z)=>k+z,0)/Math.max(m.length,1),C=T>0?m.reduce((k,z)=>k+Math.abs(z-T)/T,0)/Math.max(m.length,1):0;return{bbox:n,metrics:{pathLength:i,chordLength:s,straightness:s/Math.max(i,1),closureDistance:a,closureRatio:c,bboxWidth:e,bboxHeight:t,bboxDiagonal:r,aspectRatio:e/t,cornerCount:Math.max(0,d.length),angleVariance:p,radialVariance:C,bboxCornerCloseness:M(w,N),diamondCloseness:M(w,y)}}}function Wy(o){return o.map(n=>({template:n,normalized:Io(n.points)}))}const Vy=Wy(vr().flatMap(o=>o.templates));function $y(o){const n=jy(o.rawPoints);if(n.length<2)return null;const{bbox:e,metrics:t}=Fy(n);return{rawPoints:o.rawPoints,points:n,pencilOptions:o.pencilOptions,viewId:o.viewId,scenePath:o.scenePath,start:n[0],end:n[n.length-1],bbox:e,metrics:t}}function Gy(o){const n=Io(o.points),e=new Map;for(const{template:t,normalized:r}of Vy){const i=Uy(n,r),s=Math.max(0,1-i/(.5*Math.sqrt(2*Hn*Hn))),a={kind:t.semanticKind,templateId:t.id,threshold:t.threshold||.7,distance:i,score:s},c=e.get(t.semanticKind);(!c||a.score>c.score)&&e.set(t.semanticKind,a)}return[...e.values()].sort((t,r)=>r.score-t.score)}function Qy(o){const n=vr(),e=Gy(o);if(o.metrics.bboxDiagonal>=8&&o.metrics.straightness>.975&&o.metrics.closureRatio>.75){const r=e.find(i=>i.kind==="straight")||{templateId:"straight-heuristic",score:.99,threshold:.72};return{kind:"straight",score:r.score,threshold:r.threshold,recognized:!0,bbox:o.bbox,start:o.start,end:o.end,points:o.points,templateId:r.templateId,metrics:o.metrics,candidates:e}}for(const r of e){const i=n.find(a=>a.kind===r.kind);if(!i||r.score<r.threshold)continue;const s=i.postProcessor?i.postProcessor(r,o):r;if(s)return{kind:i.kind,score:s.score,threshold:s.threshold,recognized:!0,bbox:o.bbox,start:o.start,end:o.end,points:o.points,templateId:s.templateId,metrics:o.metrics,candidates:e}}const t=e[0];return{kind:"none",score:(t==null?void 0:t.score)||0,threshold:(t==null?void 0:t.threshold)||1,recognized:!1,bbox:o.bbox,start:o.start,end:o.end,points:o.points,templateId:t==null?void 0:t.templateId,metrics:o.metrics,candidates:e}}function Zy(o){return $y(o)}function Hy(o){return Qy(o)}function di(o,n){if(!o.recognized||o.kind==="none")return null;const e=vr().find(t=>t.kind===o.kind);return(e==null?void 0:e.mapper(o,n))||null}const qy="__netless_appliance_plugin_markmap_runtime__";function Ky(){return globalThis}function Jy(){return Ky()[qy]}function Xy(){return new Error('Markmap runtime is not registered. Install "markmap-lib", "markmap-view", and "mermaid", then import "@netless/appliance-plugin/markmap" before using insertMarkmap/updateMarkmap.')}function wo(){const o=Jy();if(!o)throw Xy();return o}const Tt=class Tt{constructor(){I(this,"fontDB");I(this,"FONT_DB_NAME","__APPLIANCE_PLUGIN_FONT_DB");I(this,"FONT_STORE_NAME","fonts");I(this,"FONT_DB_VERSION",1)}static getInstance(){return Tt.instance||(Tt.instance=new Tt),Tt.instance}async initFontDB(){return this.fontDB?this.fontDB:new Promise((n,e)=>{const t=indexedDB.open(this.FONT_DB_NAME,this.FONT_DB_VERSION);t.onerror=()=>{e(new Error(`Failed to open font database: ${t.error}`))},t.onsuccess=()=>{this.fontDB=t.result,n(t.result)},t.onupgradeneeded=r=>{const i=r.target.result;i.objectStoreNames.contains(this.FONT_STORE_NAME)||i.createObjectStore(this.FONT_STORE_NAME,{keyPath:"fontFamily"}).createIndex("url","url",{unique:!1})}})}async getFontFromDB(n,e){try{return this.fontDB||(this.fontDB=await this.initFontDB()),new Promise((t,r)=>{const a=this.fontDB.transaction([this.FONT_STORE_NAME],"readonly").objectStore(this.FONT_STORE_NAME).get(n);a.onsuccess=()=>{a.result&&a.result.buffer&&(!e||a.result.url===e)?t(a.result.buffer):t(null)},a.onerror=()=>{r(a.error)}})}catch(t){return console.error(`Failed to get font from database for ${n}:`,t),null}}async saveFontToDB(n,e,t){try{return this.fontDB||(this.fontDB=await this.initFontDB()),new Promise((r,i)=>{const a=this.fontDB.transaction([this.FONT_STORE_NAME],"readwrite").objectStore(this.FONT_STORE_NAME),c={fontFamily:n,url:e,buffer:t,timestamp:Date.now()},l=a.put(c);l.onsuccess=()=>{r(!0)},l.onerror=()=>{i(l.error)}})}catch(r){return console.error(`Failed to save font to database for ${n}:`,r),!1}}async clearFontCache(){try{return this.fontDB||(this.fontDB=await this.initFontDB()),new Promise((n,e)=>{const i=this.fontDB.transaction([this.FONT_STORE_NAME],"readwrite").objectStore(this.FONT_STORE_NAME).clear();i.onsuccess=()=>{console.log("Font cache cleared successfully"),n(!0)},i.onerror=()=>{e(i.error)}})}catch(n){return console.error("Failed to clear font cache:",n),!1}}async getFontCacheStatus(){try{return this.fontDB||(this.fontDB=await this.initFontDB()),new Promise((n,e)=>{const i=this.fontDB.transaction([this.FONT_STORE_NAME],"readonly").objectStore(this.FONT_STORE_NAME).getAll();i.onsuccess=()=>{const s=i.result||[],a=s.reduce((c,l)=>c+(l.buffer?l.buffer.byteLength:0),0);n({count:s.length,totalSize:a})},i.onerror=()=>{e(i.error)}})}catch(n){return console.error("Failed to get font cache status:",n),{count:0,totalSize:0}}}};I(Tt,"instance");let Kn=Tt;class _y{constructor(n){I(this,"control");I(this,"getFullWorker");I(this,"getSubWorker");I(this,"indexDBUtils",Kn.getInstance());I(this,"fontFaceWorkerResolveMap",new Map);I(this,"fontFacesLoadingPromise");I(this,"lastFontFacesAlreadyReady",!1);I(this,"fontFaceLoadStateStarted",!1);I(this,"documentFontsReadyLogged",!1);this.control=n.control,this.getFullWorker=n.getFullWorker,this.getSubWorker=n.getSubWorker}destroy(){for(const n of this.fontFaceWorkerResolveMap.values())n.timer&&clearTimeout(n.timer),n.resolve(!1);this.fontFaceWorkerResolveMap.clear(),this.fontFacesLoadingPromise=void 0,this.lastFontFacesAlreadyReady=!1,this.fontFaceLoadStateStarted=!1,this.documentFontsReadyLogged=!1}get Logger(){return this.control.logger}async waitDocumentFontsReady(n){var e;if(!(typeof document>"u"||!((e=document.fonts)!=null&&e.ready)))try{await document.fonts.ready,this.documentFontsReadyLogged||(this.documentFontsReadyLogged=!0,this.Logger.info(`[Appliance]: document fonts ready for ${n}`))}catch(t){this.Logger.warn(`[Appliance]: document fonts ready failed for ${n}: ${(t==null?void 0:t.message)||t}`)}}async clearFontCache(){return await this.indexDBUtils.clearFontCache()}async getFontCacheStatus(){return await this.indexDBUtils.getFontCacheStatus()}createFontFaceRequestId(n){return`${n}-${Date.now()}-${Math.random().toString(16).slice(2)}`}getFontFaceCssValue(n){return`12px "${n.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}"`}isDocumentFontFaceReady(n){if(typeof document>"u"||!document.fonts)return!1;let e=!1;for(const t of document.fonts)if(t.family===n&&(e=!0,t.status!=="loaded"))return!1;return e&&(!document.fonts.check||document.fonts.check(this.getFontFaceCssValue(n)))}areDocumentFontFacesReady(){return this.control.extendFontFaces.every(n=>this.isDocumentFontFaceReady(n.fontFamily))}resolveFontFaceWorkerRequest(n,e){const t=this.fontFaceWorkerResolveMap.get(n);t&&(t.timer&&clearTimeout(t.timer),this.fontFaceWorkerResolveMap.delete(n),t.resolve(e))}requestFontFaceWorker(n,e,t){const r=e.requestId;return r?new Promise(i=>{const s=setTimeout(()=>{this.Logger.warn(`[Appliance]: font face worker request timeout: ${r}`),this.resolveFontFaceWorkerRequest(r,!1)},this.control.loadFontFacesTimeout);this.fontFaceWorkerResolveMap.set(r,{timer:s,resolve:i}),n.postMessage(new Set([e]),t||[])}):Promise.resolve(!1)}getWorkers(){return[this.getFullWorker(),this.getSubWorker()].filter(Boolean)}async areWorkerFontFacesReady(){if(!this.control.hasOffscreenCanvas)return!0;const n=this.getWorkers();if(!n.length)return!1;const e=this.control.extendFontFaces.map(({fontFamily:r})=>({fontFamily:r}));return(await Promise.all(n.map(r=>this.requestFontFaceWorker(r,{msgType:F.CheckFontFace,dataType:J.Local,viewId:"",fontFaces:e,requestId:this.createFontFaceRequestId("check")})))).every(Boolean)}async waitWorkerReadyForFontFaces(){if(!this.control.hasOffscreenCanvas)return!0;const n=()=>this.control.isUseSimple?!!this.getFullWorker():!!this.getFullWorker()&&!!this.getSubWorker();if(n())return!0;const e=Date.now();return new Promise(t=>{const r=()=>{if(n()){t(!0);return}if(Date.now()-e>=this.control.loadFontFacesTimeout){t(!1);return}setTimeout(r,16)};r()})}async getRuntimeFontFacesReadyState(){if(!this.control.hasExtendFontFaces)return{documentReady:!0,workerReady:!0};const n=this.areDocumentFontFacesReady(),e=await this.areWorkerFontFacesReady();return{documentReady:n,workerReady:e}}async loadFontFaceBuffers(){const n=[];for(const e of this.control.extendFontFaces){let t;const r=await this.indexDBUtils.getFontFromDB(e.fontFamily,e.src);r&&r.byteLength>0&&this.validateFontData(new Uint8Array(r))&&(t=r),t||(t=await this.loadFontInMainThread(e.src),t&&t.byteLength>0&&(await this.indexDBUtils.saveFontToDB(e.fontFamily,e.src,t)||this.Logger.warn(`[Appliance]: Failed to save font ${e.fontFamily} to IndexedDB, but continuing with font loading`))),t&&t.byteLength>0?n.push({fontFamily:e.fontFamily,buffer:t}):this.Logger.warn(`[Appliance]: Font ${e.fontFamily} could not be loaded from any source`)}return n}async setDocumentFontFaces(n){if(typeof document>"u"||!document.fonts)return!1;try{for(const{fontFamily:e,buffer:t}of n){if(this.isDocumentFontFaceReady(e))continue;const r=new FontFace(e,t.slice(0));await r.load(),document.fonts.add(r),await r.loaded}return this.areDocumentFontFacesReady()}catch(e){return this.Logger.error(`[Appliance]: set document font faces error: ${(e==null?void 0:e.message)||e}`),!1}}async setWorkerFontFaces(n){if(!this.control.hasOffscreenCanvas)return!0;const e=this.getWorkers();return e.length?(await Promise.all(e.map(r=>{const i=n.map(({fontFamily:s,buffer:a})=>({fontFamily:s,buffer:a.slice(0)}));return this.requestFontFaceWorker(r,{msgType:F.SetFontFace,dataType:J.Local,viewId:"",fontBuffers:i,requestId:this.createFontFaceRequestId("set")},i.map(({buffer:s})=>s))}))).every(Boolean)&&await this.areWorkerFontFacesReady():!1}async doLoadFontFaces(n){if(this.lastFontFacesAlreadyReady=!1,!this.control.hasExtendFontFaces)return this.lastFontFacesAlreadyReady=!0,{status:"success"};if(await this.waitDocumentFontsReady("fontFaceLoad"),!await this.waitWorkerReadyForFontFaces())return{status:"timeout"};const e=await this.getRuntimeFontFacesReadyState();if(e.documentReady&&e.workerReady)return this.lastFontFacesAlreadyReady=!0,{status:"success"};n==null||n(),this.Logger.info(`[Appliance]: load font faces ${JSON.stringify(this.control.extendFontFaces)}`);const t=await this.loadFontFaceBuffers();if(t.length!==this.control.extendFontFaces.length)return{status:"error"};const r=e.documentReady||await this.setDocumentFontFaces(t),i=e.workerReady||await this.setWorkerFontFaces(t);return r&&i?(this.Logger.info("[Appliance]: set font faces success"),{status:"success"}):{status:"error"}}getLastFontFacesAlreadyReady(){return this.lastFontFacesAlreadyReady}async loadFontFaces(){if(!this.fontFacesLoadingPromise){this.fontFaceLoadStateStarted=!1;let n=!1;const e=()=>{n||this.fontFaceLoadStateStarted||(this.fontFaceLoadStateStarted=!0,this.control.emitFontFaceLoadState({status:"start"}))},t=new Promise(r=>{setTimeout(()=>{n=!0,r({status:"timeout"})},this.control.loadFontFacesTimeout)});this.fontFacesLoadingPromise=Promise.race([this.doLoadFontFaces(e),t]).then(r=>(this.fontFaceLoadStateStarted&&this.control.emitFontFaceLoadState(r),r.status!=="success"&&(this.fontFacesLoadingPromise=void 0,this.fontFaceLoadStateStarted=!1),r)).catch(r=>{this.Logger.error(`[Appliance]: load font faces error: ${(r==null?void 0:r.message)||r}`);const i={status:"error"};return this.fontFaceLoadStateStarted&&this.control.emitFontFaceLoadState(i),this.fontFacesLoadingPromise=void 0,this.fontFaceLoadStateStarted=!1,i})}return this.fontFacesLoadingPromise}async loadFontInMainThread(n){try{const e=await fetch(n);if(!e.ok)throw new Error(`HTTP ${e.status}: ${e.statusText}`);const t=await e.arrayBuffer();if(!t||t.byteLength===0)throw new Error("Empty font data received");const r=new Uint8Array(t);if(!this.validateFontData(r))throw new Error("Invalid font data format: not a valid font file");return t}catch(e){this.Logger.error(`[Appliance]: Failed to load font from ${n}: ${e instanceof Error?e.message:String(e)}`);return}}validateFontData(n){return n.length<4?!1:n[0]===119&&n[1]===79&&n[2]===70&&n[3]===50||n[0]===119&&n[1]===79&&n[2]===70&&n[3]===70||n[0]===0&&n[1]===1&&n[2]===0&&n[3]===0||n[0]===79&&n[1]===84&&n[2]===84&&n[3]===79||n.length>36&&n[36]===0&&n[37]===1&&n[38]===0&&n[39]===0}handleWorkerMessage(n){const{type:e,requestId:t,setFontFaceResult:r,fontFaceCheckResult:i,failedFonts:s}=n;return e!==F.SetFontFace&&e!==F.CheckFontFace?!1:(e===F.SetFontFace&&(s!=null&&s.length)&&this.Logger.info("[Appliance]: set font face has failed fonts: "+s.join(", ")),t&&this.resolveFontFaceWorkerRequest(t,e===F.CheckFontFace?!!i:!!r&&!(s!=null&&s.length)),!0)}}const em=new Set([S.Eraser,S.PencilEraser,S.BitMapEraser]),tm=new Set([S.Pencil,S.Arrow,S.Straight,S.Ellipse,S.Rectangle,S.Star,S.Polygon,S.SpeechBalloon]),Ln=o=>typeof o=="number"&&em.has(o),nm=o=>o===F.FullWork||o===F.UpdateNode||o===F.RemoveNode||o===F.DrawWork;class rm{get now(){var n;return((n=this.control.room)==null?void 0:n.calibrationTimestamp)||Date.now()}get newWorkId(){return this.now.toString()}setCurrentToolsData(n){this.currentToolsData=n}getCurrentToolsData(){return this.currentToolsData}setCurrentLocalWorkData(n){this.currentLocalWorkData=n}getWorkId(){return this.currentLocalWorkData.workId}get workState(){return this.currentLocalWorkData.workState}}class im extends rm{constructor(e){super();I(this,"maxLastSyncTime",ye.syncOpt.interval);I(this,"combineUnitTime",ye.bezier.combineUnitTime);I(this,"maxCombineEraserTime",ye.pencilEraser.maxCombineTime);I(this,"smoothSync",ye.syncOpt.smoothSync);I(this,"isActive",!1);I(this,"currentToolsData");I(this,"currentLocalWorkData");I(this,"control");I(this,"internalMsgEmitter");I(this,"publicMsgEmitter");I(this,"taskBatchData",new Set);I(this,"fullWorker");I(this,"subWorker");I(this,"fullWorkerUrl");I(this,"subWorkerUrl");I(this,"methodBuilder");I(this,"zIndexNodeMethod");I(this,"subWorkerDrawCount",0);I(this,"fullWorkerDrawCount",0);I(this,"maxDrawCount",0);I(this,"_consumeCount",0);I(this,"_postCount",0);I(this,"reRenders",new Map);I(this,"localWorkViewId");I(this,"localPointsBatchData",new Map);I(this,"tasksqueue",new Map);I(this,"useTasksqueue",!1);I(this,"useTasksClockId");I(this,"mainTasksqueueCount");I(this,"workerTasksqueueCount");I(this,"snapshotMap",new Map);I(this,"boundingRectMap",new Map);I(this,"clearAllResolveMap",new Map);I(this,"delayWorkStateToDoneResolve");I(this,"animationId");I(this,"tmpImageConfigMap",new Map);I(this,"mainThread");I(this,"backgroundThreadManager");I(this,"willSelectorWorkId");I(this,"isLockSentEventCursor",!1);I(this,"getVNodeInfoResolveMap",new Map);I(this,"refreshTextRenderResolveMap",new Map);I(this,"fontFaceManager");I(this,"isLocalWorkActive",!1);I(this,"markmapIdResolveMap",new Map);const{control:t,internalMsgEmitter:r,publicMsgEmitter:i}=e;this.control=t,this.maxLastSyncTime=this.control.pluginOptions.extras.syncOpt.interval,this.combineUnitTime=this.control.pluginOptions.extras.bezier.combineUnitTime||this.combineUnitTime,this.smoothSync=j.isBoolean(this.control.pluginOptions.extras.syncOpt.smoothSync)?this.control.pluginOptions.extras.syncOpt.smoothSync:this.smoothSync,this.maxCombineEraserTime=this.control.pluginOptions.extras.pencilEraser.maxCombineTime||this.maxCombineEraserTime,this.fullWorkerUrl=this.control.pluginOptions.cdn.fullWorkerUrl||"",this.subWorkerUrl=this.control.pluginOptions.cdn.subWorkerUrl||"",this.internalMsgEmitter=r,this.publicMsgEmitter=i,this.currentLocalWorkData={workState:E.Pending},this.fontFaceManager=new _y({control:this.control,getFullWorker:()=>this.fullWorker,getSubWorker:()=>this.subWorker})}get isBezier(){return this.control.pluginOptions.extras.bezier.enable}get Logger(){return this.control.logger}assertMarkmapRuntimeRegistered(e,t){try{wo()}catch(r){const i=r instanceof Error?r.message:String(r);throw this.Logger.error(`[Appliance]: [markmap] ${e} failed: ${i}; viewId=${t}`),r}}destroy(){var e,t,r,i,s;(e=this.methodBuilder)==null||e.destroy(),this.unWritable(),this.taskBatchData.clear(),this.tasksqueue.clear(),this.tmpImageConfigMap.clear(),this.localPointsBatchData.clear(),this.isActive=!1,this.clearAllResolveMap.clear(),this.snapshotMap.clear(),this.boundingRectMap.clear(),this.refreshTextRenderResolveMap.forEach(({timer:a,resolve:c})=>{a&&clearTimeout(a),c==null||c(!1)}),this.refreshTextRenderResolveMap.clear(),this.fontFaceManager.destroy(),(t=this.mainThread)==null||t.destroy(),this.mainThread=void 0,(r=this.backgroundThreadManager)==null||r.destroy(),this.backgroundThreadManager=void 0,(i=this.fullWorker)==null||i.terminate(),this.fullWorker=void 0,(s=this.subWorker)==null||s.terminate(),this.subWorker=void 0}get consumeCount(){return this._consumeCount}set consumeCount(e){this._consumeCount=e}get postCount(){return this._postCount}set postCount(e){this._postCount=e}get viewContainerManager(){return this.control.viewContainerManager}get collector(){return this.control.collector}get isRunSubWork(){var t;const e=(t=this.currentToolsData)==null?void 0:t.toolsType;return e===S.Pencil||e===S.PencilEraser||e===S.BitMapEraser||e===S.LaserPen||e===S.Arrow||e===S.Straight||e===S.Ellipse||e===S.Rectangle||e===S.Star||e===S.Polygon||e===S.SpeechBalloon||e===S.Selector}get isCanDrawWork(){var t;const e=(t=this.currentToolsData)==null?void 0:t.toolsType;return e===S.Pencil||e===S.LaserPen||e===S.Arrow||e===S.Straight||e===S.Ellipse||e===S.Rectangle||e===S.Star||e===S.Polygon||e===S.SpeechBalloon||e===S.Triangle||e===S.Rhombus||e===S.BitMapEraser||e===S.PencilEraser}get isUseZIndex(){var t;const e=(t=this.currentToolsData)==null?void 0:t.toolsType;return e===S.Pencil||e===S.Arrow||e===S.Straight||e===S.Ellipse||e===S.Rectangle||e===S.Star||e===S.Polygon||e===S.SpeechBalloon||e===S.Text||e===S.Image}get isCanRecordUndoRedo(){var t;const e=(t=this.currentToolsData)==null?void 0:t.toolsType;return e===S.Pencil||e===S.Eraser||e===S.PencilEraser||e===S.BitMapEraser||e===S.Arrow||e===S.Straight||e===S.Ellipse||e===S.Rectangle||e===S.Star||e===S.Polygon||e===S.SpeechBalloon||e===S.Text||e===S.Image}get isCanSentCursor(){var t;const e=(t=this.currentToolsData)==null?void 0:t.toolsType;return e===S.Pencil||e===S.Text||e===S.LaserPen||e===S.Arrow||e===S.Straight||e===S.Ellipse||e===S.Rectangle||e===S.Star||e===S.Polygon||e===S.SpeechBalloon||e===S.Triangle||e===S.Rhombus||e===S.Eraser||e===S.PencilEraser||e===S.BitMapEraser||e===S.Selector}get isPostCountType(){var t;const e=(t=this.currentToolsData)==null?void 0:t.toolsType;return e===S.Pencil||e===S.Arrow||e===S.Straight||e===S.Ellipse||e===S.Rectangle||e===S.Star||e===S.Polygon||e===S.SpeechBalloon||e===S.Triangle||e===S.Rhombus||e===S.Eraser||e===S.PencilEraser||e===S.BitMapEraser||e===S.Selector}get isCanPostDraw(){var t;const e=(t=this.currentToolsData)==null?void 0:t.toolsType;return e===S.Pencil||e===S.PencilEraser||e===S.BitMapEraser}get isCanStartEventConsum(){var t;const e=(t=this.currentToolsData)==null?void 0:t.toolsType;return e===S.Selector||e===S.Eraser||e===S.PencilEraser||e===S.BitMapEraser}async init(){this.destroy(),this.control.emitInitLoadingChange({loading:!0,phase:"worker",status:"start"});try{this.Logger.info(`[Appliance]: [plugin-options] ${JSON.stringify(this.control.pluginOptions.extras)}`)}catch(e){this.Logger.warn(`[Appliance]: [plugin-options] stringify failed: ${(e==null?void 0:e.message)||e}`)}try{await this.on(),this.internalMsgEmitterListener(),this.isActive=!0,this.control.emitInitLoadingChange({loading:!0,phase:"worker",status:"success"})}catch(e){throw this.control.emitInitLoadingChange({loading:!1,phase:"worker",status:"error"}),e}}async useBackgroundThread(){this.Logger.info("[Appliance]: use background thread");const{BackgroundThreadManagerImpl:e}=await Promise.resolve().then(()=>require("./index-CSCrzdrM.js"));this.backgroundThreadManager=new e(this)}async useMainThread(){this.Logger.info("[Appliance]: no OffscreenCanvas");const{MainThreadManagerImpl:e}=await Promise.resolve().then(()=>require("./index-RsaaN_Cx.js"));this.mainThread=new e(this)}async on(){if(await this.fontFaceManager.waitDocumentFontsReady("init"),this.control.isUseBackgroundThread&&await this.useBackgroundThread(),!this.control.hasOffscreenCanvas){await this.useMainThread();return}if(!this.fullWorkerUrl||!this.subWorkerUrl){this.Logger.error("[Appliance]: no worker url config");return}this.fullWorker=new Worker(this.fullWorkerUrl,{type:"classic"}),this.control.isUseSimple||(this.subWorker=new Worker(this.subWorkerUrl,{type:"classic"})),this.fullWorker.onmessage=e=>{if(e.data){const{render:t,sp:r,fullWorkerDrawCount:i,workerTasksqueueCount:s,viewId:a,consumeCount:c}=e.data;if(c&&(this.consumeCount=c),this.isBusy&&s&&this.setWorkerTasksqueueCount(s),r!=null&&r.length&&this.collectorSyncData(r),this.control.isUseSimple){if(this.control.isUseOffscreenTransfer)return;t&&(t!=null&&t.length)&&this.viewContainerManager.render(t);return}const l=(t==null?void 0:t.length)&&t||[];if(i&&a){if(this.fullWorkerDrawCount=i,this.fullWorkerDrawCount<1/0){const u=Math.max(this.maxDrawCount,this.fullWorkerDrawCount);this.setMaxDrawCount(u),this.clearReRenders(this.fullWorkerDrawCount)}else this.setMaxDrawCount(0),this.clearReRenders(1/0);if(this.reRenders.size)for(const u of this.reRenders.values())l.push(...u)}l.length&&this.viewContainerManager.render(l)}},this.subWorker&&(this.subWorker.onmessage=e=>{if(e.data){const{render:t,sp:r,subWorkerDrawCount:i,consumeCount:s}=e.data;s&&(this.consumeCount=s),r!=null&&r.length&&this.collectorSyncData(r);const a=(t==null?void 0:t.length)&&t||[];if(j.isNumber(i)){if(this.subWorkerDrawCount=i,this.fullWorkerDrawCount<1/0){const c=Math.max(this.maxDrawCount,this.subWorkerDrawCount);this.setMaxDrawCount(c)}if(t!=null&&t.length)if(this.subWorkerDrawCount>this.fullWorkerDrawCount){const c=[];for(const l of t)l.imageBitmap&&(l.isUnClose=!0,c.push(l));this.reRenders.set(this.subWorkerDrawCount,c)}else this.reRenders.size&&this.clearReRenders(this.subWorkerDrawCount)}a.length&&this.viewContainerManager.render(a)}})}async clearFontCache(){return await this.fontFaceManager.clearFontCache()}async getFontCacheStatus(){return await this.fontFaceManager.getFontCacheStatus()}getLastFontFacesAlreadyReady(){return this.fontFaceManager.getLastFontFacesAlreadyReady()}async loadFontFaces(){return await this.fontFaceManager.loadFontFaces()}createInternalRequestId(e){return`${e}_${this.now}_${Math.random().toString(36).slice(2)}`}waitRefreshTextRender(e){return new Promise(t=>{const r=setTimeout(()=>{this.refreshTextRenderResolveMap.delete(e),t(!1)},5e3);this.refreshTextRenderResolveMap.set(e,{timer:r,resolve:t})})}resolveRefreshTextRender(e,t=!0){var i;if(!e)return;const r=this.refreshTextRenderResolveMap.get(e);r&&(r.timer&&clearTimeout(r.timer),(i=r.resolve)==null||i.call(r,t),this.refreshTextRenderResolveMap.delete(e))}async refreshTextRenderForWorker(e){if(!e.length)return!0;const t=new Set,r=[];for(const s of e){const a=this.createInternalRequestId("refresh_text_render");r.push(this.waitRefreshTextRender(a)),t.add({...s,requestId:a,msgType:F.UpdateNode,type:F.UpdateNode,dataType:J.Service,toolsType:S.Text,refreshTextRender:!0,useAnimation:!1,willRefresh:!0})}return this.post(t),(await Promise.all(r)).every(Boolean)}buildPropertyAppliedData(e,t,r){switch(e){case B.SetColorNode:return{strokeColor:t==null?void 0:t.strokeColor,fillColor:t==null?void 0:t.fillColor,fontColor:t==null?void 0:t.fontColor,fontBgColor:t==null?void 0:t.fontBgColor,thickness:t==null?void 0:t.thickness,strokeType:t==null?void 0:t.strokeType};case B.SetFontStyle:return{fontSize:t==null?void 0:t.fontSize,bold:t==null?void 0:t.bold,italic:t==null?void 0:t.italic,underline:t==null?void 0:t.underline,lineThrough:t==null?void 0:t.lineThrough};case B.SetLock:return{isLocked:r==null?void 0:r.isLocked};case B.SetShapeOpt:return{vertices:t==null?void 0:t.vertices,innerVerticeStep:t==null?void 0:t.innerVerticeStep,innerRatio:t==null?void 0:t.innerRatio,placement:t==null?void 0:t.placement};case B.ZIndexNode:return{zIndexLayer:r==null?void 0:r.zIndexLayer};default:return{}}}clearReRenders(e=1/0){for(const t of this.reRenders.keys())if(j.isNumber(Number(t))&&Number(t)<=e){const r=this.reRenders.get(Number(t));r==null||r.forEach(i=>{var s;(s=i.imageBitmap)==null||s.close()}),this.reRenders.delete(t)}}get isBusy(){return this.getTasksqueueState()===E.Doing}getLockSentEventCursor(){return this.isLockSentEventCursor}setLockSentEventCursor(e){this.isLockSentEventCursor=e}getTasksqueueState(){return this.useTasksqueue&&E.Doing||E.Done}setMaxDrawCount(e){this.maxDrawCount=e}getFullWorkDrawCount(){return this.fullWorkerDrawCount}getMaxDrawCount(){return this.maxDrawCount}setSubWorkerDrawCount(e){this.subWorkerDrawCount=e}setConsumeCount(e){this.consumeCount=e}getConsumeCount(){return this.consumeCount}setWorkerTasksqueueCount(e){const t=Math.max(this.workerTasksqueueCount||0,e);this.workerTasksqueueCount=t}collectorSyncData(e){var r,i,s,a,c,l,u,h,d,f,p,w,N,y,M;let t=!1;for(const v of e){if(this.fontFaceManager.handleWorkerMessage(v))continue;const{type:m,selectIds:T,opt:C,selectRect:k,strokeColor:z,fillColor:A,willSyncService:x,isSync:D,imageBitmap:b,canvasHeight:R,canvasWidth:O,rect:U,op:$,canTextEdit:Y,points:Z,selectorColor:Q,canRotate:W,scaleType:X,textOpt:pe,toolsType:ae,workId:de,viewId:le,dataType:tt,canLock:ut,isLocked:ht,shapeOpt:dt,toolsTypes:gt,thickness:xe,strokeType:Le,useStroke:nt,isgl:Vt,imageSrc:$t,isSubWorker:rn,updateNodeOpt:K,emitEventType:_,requestId:ne,reportString:ue,index:Ce,imageElement:Me,workState:Ne,isSelecting:me,needUndoTicker:De}=v;if(!le)return;const Ie=v.scenePath||this.viewContainerManager.getCurScenePath(le);switch(m){case F.RefreshTextRender:this.resolveRefreshTextRender(ne,!0);break;case F.SelectorTransform:{if(_&&Ne)try{(r=this.control.selectorApi)==null||r.onSelectorTransform({viewId:le,emitEventType:_,workState:Ne})}catch(G){(s=(i=this.Logger)==null?void 0:i.error)==null||s.call(i,`[Appliance]: [selector] onSelectorTransform failed: ${G==null?void 0:G.message}`)}break}case F.Select:{const G=T!=null&&T.length?{...k,selectIds:T,canvasHeight:R,canvasWidth:O,points:Z}:void 0;if(G&&(C!=null&&C.strokeColor)&&(G.selectorColor=C.strokeColor),G&&Q&&(G.selectorColor=Q),G&&z&&(G.strokeColor=z),G&&(C!=null&&C.fillColor)&&(G.fillColor=C.fillColor),G&&A&&(G.fillColor=A),G&&j.isBoolean(W)&&(G.canRotate=W),G&&X&&(G.scaleType=X),G&&Y&&(G.canTextEdit=Y),G&&pe&&(G.textOpt=pe),G&&j.isBoolean(ut)&&(G.canLock=ut),G&&j.isBoolean(ht)&&(G.isLocked=ht),G&&dt&&(G.shapeOpt=dt),G&&gt&&(G.toolsTypes=gt),G&&xe&&(G.thickness=xe),G&&Le&&(G.strokeType=Le),G&&j.isBoolean(nt)&&(G.useStroke=nt),le&&this.viewContainerManager.showFloatBar(le,!!G,G),x&&((a=this.collector)==null||a.dispatch({type:m,selectIds:T,opt:C,isSync:D,viewId:le,scenePath:Ie,needUndoTicker:De,requestId:ne,emitEventType:_})),me)break;try{(c=this.control.selectorApi)==null||c.onSelectorSync({viewId:le,scenePath:Ie,selectIds:T,selectRect:k,selectorInfo:G})}catch(se){(u=(l=this.Logger)==null?void 0:l.error)==null||u.call(l,`[Appliance]: [selector] onSelectorSync failed: ${se==null?void 0:se.message}`)}break}case F.Snapshot:if((b||Me)&&Ie){const G=this.snapshotMap.get(Ie);if(G){const{resolve:se,value:Te}=G;if(Te&&se){const je=Ce||0;Te[je]=b||Me,Te.every(Fe=>Fe!==void 0)&&se(Te)}}}break;case F.BoundingBox:if(U&&Ie){const G=this.boundingRectMap.get(Ie);G&&G(U)}break;case F.Cursor:$&&this.control.cursor.collectServiceCursor({...v});break;case F.Clear:if(le){this.viewContainerManager.showFloatBar(le,!1);const G=(h=this.clearAllResolveMap.get(le))==null?void 0:h.resolve;G&&G(le);try{(d=this.control.selectorApi)==null||d.onSelectorCleared({viewId:le,scenePath:Ie})}catch(se){(p=(f=this.Logger)==null?void 0:f.error)==null||p.call(f,`[Appliance]: [selector] onSelectorCleared failed: ${se==null?void 0:se.message}`)}}break;case F.BackgroundSVGDelete:this.backgroundThreadManager&&le&&this.backgroundThreadManager.consumeTargetOne(le,{...v,msgType:F.BackgroundSVGDelete,viewId:le,dataType:J.Local});break;case F.BackgroundSVGUpdate:this.backgroundThreadManager&&le&&this.backgroundThreadManager.consumeTargetOne(le,{...v,msgType:F.BackgroundSVGUpdate,viewId:le,dataType:J.Local});break;case F.TextUpdate:if(ae===S.Text&&de&&le){_&&[B.SetColorNode,B.SetFontStyle,B.SetLock,B.SetShapeOpt,B.ZIndexNode].includes(_)&&((w=this.control.selectorApi)==null||w.onPropertyApplied({type:_,viewId:le,scenePath:Ie,requestId:ne,data:this.buildPropertyAppliedData(_,C,K)}));const G=this.viewContainerManager.transformToOriginPoint((C==null?void 0:C.boxPoint)||[0,0],le),se=(C==null?void 0:C.boxSize)||[0,0],Te=(N=this.viewContainerManager.getView(le))==null?void 0:N.cameraOpt;C?this.control.textEditorManager.updateTextForWorker({x:G[0],y:G[1],w:se[0],h:se[1],scale:(Te==null?void 0:Te.scale)||1,workId:de,opt:C,dataType:tt,viewId:le,canSync:x||!1,canWorker:!1,updateNodeOpt:K,skipStorageDispatch:!0}):this.control.textEditorManager.delete(de,x||!1,!1),De&&((y=this.collector)==null||y.dispatch({type:F.UpdateNode,workId:de,toolsType:S.Text,opt:C,updateNodeOpt:K,isSync:x||!1,viewId:le,scenePath:Ie,needUndoTicker:De,requestId:ne,emitEventType:_}))}break;case F.GetTextActive:ae===S.Text&&de&&le&&this.control.textEditorManager.updateTextForWorker({workId:de,isActive:!0,viewId:le,dataType:J.Local,canWorker:!1,canSync:!0},this.now);break;case F.GetImageBitMap:$t&&le&&de&&ly({src:$t,isgl:Vt}).then(G=>{var Te;const se=new Set;if(se.add({msgType:F.GetImageBitMap,dataType:J.Local,workId:de,viewId:le,imageSrc:$t,isSubWorker:rn,imageBitmap:G}),!this.control.hasOffscreenCanvas)(Te=this.mainThread)==null||Te.consume(se);else{const je=rn&&this.subWorker?this.subWorker:this.fullWorker;G?je.postMessage(se,[G]):je.postMessage(se)}});break;case F.GetVNodeInfo:if(de){const G=de.toString(),se=(M=this.getVNodeInfoResolveMap.get(G))==null?void 0:M.resolve,Te={...v,uuid:G};se&&se(Te)}break;case F.ReportError:case F.ReportLog:ue&&(m===F.ReportError?this.Logger.error(`[Appliance]: [MasterControlForWorker] reportError ${ue}`):this.Logger.info(`[Appliance]: [MasterControlForWorker] reportLog ${ue}`));break;default:t=!0;break}}t&&this.collectorAsyncData(e)}collectorAsyncData(e){var t,r,i,s,a,c;for(const l of e){const{type:u,op:h,workId:d,index:f,removeIds:p,ops:w,opt:N,updateNodeOpt:y,emitEventType:M,requestId:v,toolsType:m,isSync:T,viewId:C,isLockSentEventCursor:k,nextTasks:z,needUndoTicker:A,collectUndoTicker:x,undoScopeIds:D,undoScopePhase:b}=l;if(!C){console.error("[MasterControlForWorker] collectorAsyncData on viewId in",l);return}const R=l.scenePath||this.viewContainerManager.getCurScenePath(C),O=Number(x??A??void 0);switch(O&&(D!=null&&D.length)&&(b==="collect"||b==="finalize")&&this.internalMsgEmitter.emit("collectExpectedWorkIds",O,C,D,R),A&&Number(A)&&nm(u)&&(D!=null&&D.length)&&this.internalMsgEmitter.emit("reopenStorageAck",Number(A),C,D,R),u){case F.None:{k&&He(()=>{this.setLockSentEventCursor(!1)},this.maxLastSyncTime,this.control.hasPolyfillMethod("requestIdleCallback")),A&&Number(A)&&He(()=>{this.internalMsgEmitter.emit("ackRenderUndoTicker",Number(A),C,R,{requestId:v,emitEventType:M})},0,this.control.hasPolyfillMethod("requestIdleCallback"));break}case F.DrawWork:{(t=this.collector)==null||t.dispatch({type:u,op:h,opt:N,toolsType:m,workId:d,index:f,isSync:T,viewId:C,scenePath:R,updateNodeOpt:y,needUndoTicker:A,collectUndoTicker:x,requestId:v,emitEventType:M});break}case F.FullWork:{if((r=this.collector)==null||r.dispatch({type:u,ops:w,workId:d,updateNodeOpt:y,opt:N,toolsType:m,isSync:T,viewId:C,scenePath:R,needUndoTicker:A,collectUndoTicker:x,requestId:v,emitEventType:M}),m===S.BackgroundSVG&&d&&this.markmapIdResolveMap.has(d.toString())){const U=this.markmapIdResolveMap.get(d.toString());U!=null&&U.timer&&(clearTimeout(U.timer),U.timer=void 0),U!=null&&U.resolve&&U.resolve(d.toString()),this.markmapIdResolveMap.delete(d.toString())}this.willSelectorWorkId&&d&&d.toString()===this.willSelectorWorkId&&this.control.runEffectWork(()=>{this.setShapeSelectorByWorkId(this.willSelectorWorkId,C),this.willSelectorWorkId=void 0});break}case F.UpdateNode:{M&&[B.SetColorNode,B.SetFontStyle,B.SetLock,B.SetShapeOpt,B.ZIndexNode].includes(M)&&((i=this.control.selectorApi)==null||i.onPropertyApplied({type:M,viewId:C,scenePath:R,requestId:v,data:this.buildPropertyAppliedData(M,N,y)})),(s=this.collector)==null||s.dispatch({type:u,updateNodeOpt:y,workId:d,opt:N,ops:w,op:h,isSync:T,viewId:C,scenePath:R,needUndoTicker:A,collectUndoTicker:x,requestId:v,emitEventType:M});break}case F.RemoveNode:{M===B.DeleteNode&&((a=this.control.selectorApi)==null||a.onRemoveNodeApplied({viewId:C,requestId:v,removeIds:p})),p&&this.control.textEditorManager.deleteBatch(p,!1,!1),(c=this.collector)==null||c.dispatch({type:u,removeIds:p,isSync:T,viewId:C,scenePath:R,needUndoTicker:A,collectUndoTicker:x,requestId:v,emitEventType:M}),this.willSelectorWorkId&&(p!=null&&p.includes(this.willSelectorWorkId))&&(this.willSelectorWorkId=void 0);break}}z&&this.collectorAsyncData(z)}}async onLocalEventEnd(e,t){var u,h,d,f;const r=this.viewContainerManager.getView(t);if(!r)return;const{focusScenePath:i,cameraOpt:s}=r,a=this.viewContainerManager.transformToScenePoint(e,t),c=[],l=[];(u=this.currentToolsData)==null||u.toolsType,S.Pencil;for(const p of this.localPointsBatchData.keys())if(((h=this.currentToolsData)==null?void 0:h.toolsType)===S.Text){const w=this.getLocalPointInfo(p),N=w==null?void 0:w.state;if(N&&N===E.Start){const y=this.currentLocalWorkData.toolsOpt;y.workState=E.Doing,y.boxPoint=[Math.round(a[0]),Math.round(a[1])],y.boxSize=[y.fontSize,y.fontSize],this.control.textEditorManager.checkEmptyTextBlur(),this.control.textEditorManager.createTextForMasterController({workId:this.newWorkId,x:e[0],y:e[1],scale:(s==null?void 0:s.scale)||1,opt:y,type:qe.Text,isActive:!0,viewId:t,scenePath:i},this.now)}this.deleteLocalPoint(p);continue}else{this.pushLocalPoint(p,a,E.Done,t);const w=this.getLocalPointInfo(p);if(w){const N=this.createAutoShapeTask({workId:p,viewId:t,scenePath:i,points:[...w.rawPoints],opt:w.opt});N&&l.push(N)}c.push(p)}if(c.length){if(Ln((d=this.currentToolsData)==null?void 0:d.toolsType)){const p=this.currentLocalWorkData.undoTickerId;p&&i&&this.internalMsgEmitter.emit("finalizeRequested",p,t,[],i)}(f=this.currentToolsData)==null||f.toolsType,S.Pencil;try{if(await new Promise(w=>{setTimeout(async()=>{const N=new Set(l.map(y=>{var M;return(M=y.workId)==null?void 0:M.toString()}).filter(Boolean));c.forEach(y=>{if(N.has(y.toString())){this.deleteLocalPoint(y);return}this.setLocalPointIsFullWork(y)}),l.forEach(y=>{y.needUndoTicker&&i&&y.workId!==void 0&&y.workId!==null&&this.internalMsgEmitter.emit("finalizeRequested",Number(y.needUndoTicker),t,[y.workId.toString()],i),this.taskBatchData.add(y)}),this.delayWorkStateToDoneResolve=w,l.length&&N.size===c.length&&this.delayWorkStateToDoneResolve(!0),this.consume()},0)})&&c[0]){const w=c[0];c.forEach(N=>{this.deleteLocalPoint(N)}),this.willSelectorWorkId=w.toString()}}catch(p){this.Logger.error(`[Appliance]: [MasterControlForWorker] onLocalEventEnd error: ${p instanceof Error?p.message:String(p)}`)}this.delayWorkStateToDoneResolve=void 0,c.length=0}}onLocalEventDoing(e,t){var i;if(((i=this.currentToolsData)==null?void 0:i.toolsType)===S.Text)return;this.currentLocalWorkData.workState===E.Start&&this.setCurrentLocalWorkData({...this.currentLocalWorkData,workState:E.Doing});let r=!1;for(const[s,{state:a}]of this.localPointsBatchData.entries())if(this.isAbled()&&a!==E.Pending){const c=this.viewContainerManager.transformToScenePoint(e,t);this.pushLocalPoint(s,c,a===E.Start?E.Doing:a,t),r=!0}if(r){this.runAnimation();return}}onLocalEventStart(e,t){var c,l;this.viewContainerManager.focuedViewId!==t&&this.viewContainerManager.setFocuedViewId(t),this.isCanDrawWork&&this.control.room&&!this.control.room.disableDeviceInputs&&(this.control.room.disableDeviceInputs=!0);const r=(c=this.currentToolsData)==null?void 0:c.toolsType,i=r===S.Selector?q:this.newWorkId,s=this.setZIndex(t);S.Pencil,this.setCurrentLocalWorkData({workState:E.Start,toolsOpt:s,viewId:t});const a=this.viewContainerManager.transformToScenePoint(e,t);if(this.pushLocalPoint(i,a,E.Start,t,s),r!==S.Text){if(this.control.textEditorManager.checkEmptyTextBlur(),this.isCanRecordUndoRedo){const u=this.now,h=Ln(r)?{render:!0,storage:!0,scopeMode:"dynamic"}:{render:!0,storage:!0};S.Pencil,this.internalMsgEmitter.emit("addUndoTicker",u,t,h),this.setCurrentLocalWorkData({...this.currentLocalWorkData,undoTickerId:u})}if(i&&s&&r&&this.isCanStartEventConsum&&this.prepareOnceWork({workId:i,toolsOpt:s,viewId:t},r),this.consumeCount=0,this.postCount=0,this.maxDrawCount=0,this.fullWorkerDrawCount=0,this.subWorkerDrawCount=0,this.clearReRenders(1/0),this.isCanDrawWork){const u=this.viewContainerManager.getCurScenePath(t);u&&((l=this.collector)!=null&&l.hasSelector(t,u))&&(S.Pencil,this.blurSelector(t,u))}this.consume()}}setLocalPointIsFullWork(e){const t=this.getLocalPointInfo(e);t&&(t.isFullWork=!0,this.localPointsBatchData.set(e,t))}pushLocalPoint(e,t,r,i,s){let a=this.getLocalPointInfo(e);r===E.Start?a={state:E.Start,points:[...t],rawPoints:[...t],opt:s||this.currentLocalWorkData.toolsOpt,isFullWork:!1,viewId:i,undoTickerId:this.currentLocalWorkData.undoTickerId}:a&&(a.state=r,a.points.push(t[0],t[1]),a.rawPoints.push(t[0],t[1]),this.currentLocalWorkData.undoTickerId!==void 0&&(a.undoTickerId=this.currentLocalWorkData.undoTickerId)),a&&this.localPointsBatchData.set(e,a)}deleteLocalPoint(e){this.localPointsBatchData.delete(e)}getLocalPointInfo(e){return this.localPointsBatchData.get(e)}getLocalPointsInfo(){return this.localPointsBatchData}shouldUseAutoShape(e){var t;return((t=this.currentToolsData)==null?void 0:t.toolsType)===S.Pencil&&!!(e!=null&&e.autoShape)}toAutoShapePoints(e){const t=[];for(let r=0;r<e.length-1;r+=2)t.push([e[r],e[r+1]]);return t}logAutoShapeResult(e){}emitAutoShapeResult(e){const{viewId:t,workId:r,scenePath:i,result:s,recognized:a,mappedToolsType:c}=e,l=s.candidates[0],u={workId:r.toString(),viewId:t,scenePath:i,recognized:a,fallbackToPencil:!a,kind:s.kind,score:s.score,threshold:s.threshold,templateId:s.templateId,mappedToolsType:c,topCandidate:l?{kind:l.kind,score:l.score,threshold:l.threshold,templateId:l.templateId}:void 0,metrics:{cornerCount:s.metrics.cornerCount,straightness:s.metrics.straightness,closureRatio:s.metrics.closureRatio,radialVariance:s.metrics.radialVariance,bboxCornerCloseness:s.metrics.bboxCornerCloseness,diamondCloseness:s.metrics.diamondCloseness}};this.publicMsgEmitter.emit("autoShape",u)}createAutoShapeTask(e){const{workId:t,viewId:r,scenePath:i,points:s,opt:a}=e;if(!this.shouldUseAutoShape(a))return;const c=Zy({rawPoints:this.toAutoShapePoints(s),pencilOptions:j.cloneDeep(a),viewId:r,scenePath:i});if(!c)return;const l=Hy(c),u=di(l,c)||this.mapAutoShapeFallback(l,c);if(this.logAutoShapeResult({viewId:r,workId:t,result:l,recognized:!!u}),this.emitAutoShapeResult({viewId:r,workId:t,scenePath:i,result:l,recognized:!!u,mappedToolsType:u==null?void 0:u.toolsType}),!!u)return{msgType:F.FullWork,dataType:J.Local,workId:t,viewId:r,scenePath:i,toolsType:u.toolsType,opt:u.opt,ops:Iy(u),willRefresh:!0,willSyncService:!0,isRunSubWork:!0,clearPreviewLocalWork:!0,isLockSentEventCursor:!0,autoShapeResult:l,needUndoTicker:this.viewContainerManager.getUndoTickerId(r)}}mapAutoShapeFallback(e,t){const{metrics:r}=e;if(e.recognized||r.closureRatio>.1)return null;let i;return r.cornerCount>=4&&r.cornerCount<=6&&r.bboxCornerCloseness<=.15&&r.diamondCloseness>r.bboxCornerCloseness+.15?i="rectangle":r.cornerCount===3&&r.radialVariance<.28?i="triangle":r.cornerCount>=8&&r.cornerCount<=12&&r.radialVariance>.28?i="star":r.cornerCount>=5&&r.radialVariance<.22&&r.bboxCornerCloseness>.2&&(i="ellipse"),i?di({...e,kind:i,recognized:!0},t):null}correctStorage(e,t,r){var h,d;const i=new Map,s=[],a=new Map,c=[];Object.keys(e).forEach(f=>{var N,y,M;const p=(y=(N=e[f])==null?void 0:N.opt)==null?void 0:y.zIndex,w=(M=e[f])==null?void 0:M.toolsType;j.isNumber(p)&&(w&&w===S.BackgroundSVG?c.push([f,p]):s.push([f,p]))});const l=s.length&&((h=this.zIndexNodeMethod)==null?void 0:h.correct(s))||[],u=c.length&&((d=this.zIndexNodeMethod)==null?void 0:d.correct(c))||[];this.zIndexNodeMethod&&l.length&&(this.zIndexNodeMethod.setMinZIndex(l[0][1]||0,t),this.zIndexNodeMethod.setMaxZIndex(l[l.length-1][1]||0,t)),this.zIndexNodeMethod&&u.length&&(this.zIndexNodeMethod.setMinZIndexForBackgroundSVG(u[0][1]||0,t),this.zIndexNodeMethod.setMaxZIndexForBackgroundSVG(u[u.length-1][1]||0,t));for(const[f,p]of l){if(!e[f])continue;const w=e[f];w.opt&&j.isNumber(w.opt.zIndex)&&w.opt.zIndex!==p&&(w.opt.zIndex=p,i.set(f,w))}i.size&&i.forEach((f,p)=>{var w;(w=this.collector)==null||w.updateValue(p,f,{viewId:t,scenePath:r,isSync:!0}),e[p]=f});for(const[f,p]of u){if(!e[f])continue;const w=e[f];w.opt&&j.isNumber(w.opt.zIndex)&&w.opt.zIndex!==p&&(w.opt.zIndex=p,a.set(f,w))}return a.size&&a.forEach((f,p)=>{var w;(w=this.collector)==null||w.updateValue(p,f,{viewId:t,scenePath:r,isSync:!0}),e[p]=f}),e}async originalEventLintener(e,t,r){var c,l,u;if(!this.isAbled())return;const i=(c=this.collector)==null?void 0:c.uid,s=this.viewContainerManager.getCurScenePath(r);if(i&&!this.control.renderControl.isWritable)return;const a=((l=this.currentToolsData)==null?void 0:l.toolsType)===S.Selector;switch((u=this.currentToolsData)==null?void 0:u.toolsType){case S.Eraser:case S.PencilEraser:case S.BitMapEraser:{if(i&&!this.control.renderControl.isClearAble({uid:i,viewId:r,scenePath:s}))return;break}default:{if(i&&!this.control.renderControl.isRenderAble({uid:i,viewId:r,scenePath:s}))return;break}}switch(e){case E.Start:this.isLocalWorkActive=!0,this.setLocalWorkViewId(r),r&&this.onLocalEventStart(t,r),a&&this.viewContainerManager.showFloatBarBtn(r,!1);break;case E.Doing:r&&r===this.getLocalWorkViewId()&&this.onLocalEventDoing(t,r);break;case E.Done:r&&r===this.getLocalWorkViewId()&&(this.setCurrentLocalWorkData({...this.currentLocalWorkData,workState:E.Done}),await this.onLocalEventEnd(t,r),setTimeout(()=>{this.isLocalWorkActive=!1,this.setCurrentLocalWorkData({workState:E.Pending}),a&&this.viewContainerManager.showFloatBarBtn(r,!0),this.setLocalWorkViewId(void 0)},0));break}this.isLocalWorkActive&&this.viewContainerManager.focuedViewId===r&&this.publicMsgEmitter.emit("workState",e,r),He(()=>{var h;(h=this.control.pluginManager)==null||h.dispatchPluginEvent("localEvent",r,e,t)},pn,this.control.hasPolyfillMethod("requestIdleCallback"))}getLocalWorkViewId(){return this.localWorkViewId}setLocalWorkViewId(e){this.localWorkViewId=e}setCurrentToolsData(e){var i,s,a;const t=e.toolsType,r=((i=this.currentToolsData)==null?void 0:i.toolsType)!==e.toolsType;if(super.setCurrentToolsData(e),r){const c=(s=this.viewContainerManager)==null?void 0:s.getAllViews();for(const l of c)if(l){const{id:u,focusScenePath:h}=l;r&&u&&h&&((a=this.collector)!=null&&a.hasSelector(u,h)&&this.blurSelector(u,h),this.control.textEditorManager.checkEmptyTextBlur())}this.taskBatchData.add({msgType:F.UpdateTools,dataType:J.Local,toolsType:t,opt:{...e.toolsOpt,syncUnitTime:this.maxLastSyncTime},combineUnitTime:this.isBezier?this.combineUnitTime:1/0,maxCombineEraserTime:this.maxCombineEraserTime,isRunSubWork:this.isRunSubWork,viewId:ro,isRunBackgroundThread:this.control.isUseBackgroundThread}),this.runAnimation()}}prepareOnceWork(e,t){const{workId:r,toolsOpt:i,viewId:s}=e,a={msgType:F.CreateWork,dataType:J.Local,viewId:s,toolsType:t};this.queryTaskBatchData(a).forEach(c=>{this.taskBatchData.delete(c)}),this.taskBatchData.add({...a,workId:r,opt:{...i,syncUnitTime:this.maxLastSyncTime},dataType:J.Local,isRunSubWork:this.isRunSubWork}),this.runAnimation()}createViewWorker(e,t,r){const{offscreenCanvasOpt:i,layerOpt:s,dpr:a,cameraOpt:c}=t,l={msgType:F.Init,dataType:J.Local,viewId:e,offscreenCanvasOpt:i,layerOpt:s,dpr:a,cameraOpt:c,isRunSubWork:!0,isSafari:navigator.userAgent.indexOf("Safari")!==-1&&navigator.userAgent.indexOf("Chrome")===-1,combineUnitTime:this.isBezier?this.combineUnitTime:1/0,maxCombineEraserTime:this.maxCombineEraserTime,syncUnitTime:this.maxLastSyncTime,isUseSimple:this.control.isUseSimple,offscreenCanvas:r.transferControlToOffscreenCanvas};this.isBusy&&this.destroyTaskQueue(),this.post(new Set([l])),this.taskBatchData.size&&this.consume()}destroyViewWorker(e,t=!1){var r;this.getLocalWorkViewId()===e&&this.setLocalWorkViewId(void 0),this.zIndexNodeMethod&&this.zIndexNodeMethod.clearZIndex(e),this.taskBatchData.add({msgType:F.Destroy,dataType:J.Local,viewId:e,isRunSubWork:!0}),this.consume(),t||(r=this.collector)==null||r.dispatch({type:F.Clear,viewId:e}),this.control.renderControl.destoryByViewId(e,t)}onServiceDerive(e,t){var p,w,N,y,M,v,m,T,C;const{newValue:r,oldValue:i,viewId:s,scenePath:a}=t,c=j.cloneDeep(r)||{},l=e;let u=c.type;if(!r&&i){if(l&&((p=this.collector)==null?void 0:p.getLocalId(l))===q){this.collector.isOwn(l)?this.blurSelector(s,a):this.blurSelector(s,a,l);return}if(u=F.RemoveNode,i.toolsType===S.LaserPen)return}const h=(w=this.viewContainerManager.getView(s))==null?void 0:w.focusScenePath;if(h&&h!==a)return;if((N=this.collector)!=null&&N.isSelector(e)){const k=(y=this.collector)==null?void 0:y.getUidFromKey(e);if(k&&!this.control.roomMember.isOnLine(k))return}if(u&&l){if(!this.control.renderControl.isFilterAble({viewId:s,elementId:e,scenePath:a},u))return;const k=c;if(k.workId=(M=this.collector)!=null&&M.isOwn(l)?(v=this.collector)==null?void 0:v.getLocalId(l):l,k.msgType=u,k.toolsType===S.LaserPen&&(k.isRunSubWork=!0),k.toolsType===S.BackgroundSVG){if(!this.control.isUseBackgroundThread)return;k.isRunBackgroundThread=!0}if(k.dataType=J.Service,k.viewId=s,k.scenePath=a,k.useAnimation=this.smoothSync&&((m=k.updateNodeOpt)==null?void 0:m.useAnimation)||!1,k.selectIds&&(k.selectIds=k.selectIds.map(z=>{var A,x;return(A=this.collector)!=null&&A.isOwn(z)?(x=this.collector)==null?void 0:x.getLocalId(z):z})),k&&k.toolsType===S.Text||(i==null?void 0:i.toolsType)===S.Text){this.control.textEditorManager.onServiceDerive(k);return}k.isEnableCursor=this.control.cursor.isEnableCursor,this.taskBatchData.add(k)}this.runAnimation();const d=t.newValue&&((T=t.newValue)==null?void 0:T.toolsType),f=t.newValue&&((C=t.newValue.opt)==null?void 0:C.zIndex);if(d&&d===S.BackgroundSVG){if(this.zIndexNodeMethod&&j.isNumber(f)){const k=this.zIndexNodeMethod.getMinZIndexForBackgroundSVG(s);this.zIndexNodeMethod.getMaxZIndexForBackgroundSVG(s)<f&&this.zIndexNodeMethod.setMaxZIndexForBackgroundSVG(f,s),k>f&&this.zIndexNodeMethod.setMinZIndexForBackgroundSVG(f,s)}}else if(this.zIndexNodeMethod&&j.isNumber(f)){const k=this.zIndexNodeMethod.getMinZIndex(s);this.zIndexNodeMethod.getMaxZIndex(s)<f&&this.zIndexNodeMethod.setMaxZIndex(f,s),k>f&&this.zIndexNodeMethod.setMinZIndex(f,s)}}pullServiceData(e,t,r={isAsync:!1,useAnimation:!1}){var c,l,u,h,d,f,p;let i=(c=this.collector)==null?void 0:c.getStorageData(e,t);const{isAsync:s,useAnimation:a}=r;if(i){this.control.renderControl.isWritable&&(i=this.correctStorage(i,e,t));const w=Object.keys(i);for(const N of w){if((l=this.collector)!=null&&l.isSelector(N)){const M=(u=this.collector)==null?void 0:u.getUidFromKey(N);if(M&&!this.control.roomMember.isOnLine(M))continue}const y=(h=i[N])==null?void 0:h.type;if(y&&N){if(!this.control.renderControl.isFilterAble({viewId:e,elementId:N,scenePath:t},y))continue;const M=i[N];if(M.workId=(d=this.collector)!=null&&d.isOwn(N)?(f=this.collector)==null?void 0:f.getLocalId(N):N,M.msgType=y,M.dataType=J.Service,M.viewId=e,M.scenePath=t,M.useAnimation=this.smoothSync&&(M.ops?!!a:(p=M.updateNodeOpt)==null?void 0:p.useAnimation)||!1,M.selectIds&&(M.selectIds=M.selectIds.map(v=>{var m,T;return(m=this.collector)!=null&&m.isOwn(v)?(T=this.collector)==null?void 0:T.getLocalId(v):v})),M.toolsType===S.Text){this.control.shouldHoldServiceTextRenderForFontFace()?this.control.markInitFontFaceTextRenderSkipped():this.control.textEditorManager.onServiceDerive(M);continue}if(M.toolsType===S.BackgroundSVG){if(!this.control.isUseBackgroundThread)continue;M.isRunBackgroundThread=!0}s&&M.updateNodeOpt&&M.updateNodeOpt.useAnimation&&(M.updateNodeOpt.useAnimation=!1),M.isEnableCursor=this.control.cursor.isEnableCursor,this.taskBatchData.add(M)}this.internalMsgEmitter.emit("excludeIds",w,e)}s?this.consume():this.runAnimation()}}runAnimation(){!this.animationId&&!this.isBusy&&(this.animationId=requestAnimationFrame(this.consume.bind(this)))}consume(){var t,r,i;this.animationId=void 0;const{viewId:e}=this.currentLocalWorkData;if(this.tasksqueue.size){const s=this.consumeQueue(),a=!!s.size;if(this.taskBatchData.size)for(const c of this.taskBatchData.values())c.dataType===J.Service&&(s.add(c),this.taskBatchData.delete(c));s.size?(this.post(s),a&&this.tasksqueue.clear()):this.tasksqueue.size&&(this.animationId=requestAnimationFrame(this.consume.bind(this)));return}if(this.isAbled()&&this.localPointsBatchData.size&&e)for(const[s,{state:a,isFullWork:c,points:l,opt:u,undoTickerId:h}]of this.localPointsBatchData.entries()){if(a===E.Done&&!c||a===E.Start&&!this.isCanStartEventConsum)continue;const d=l.map(f=>f);if(d.length){if(this.isPostCountType&&a===E.Doing){if(this.postCount>this.consumeCount)continue;this.postCount++}this.delayWorkStateToDoneResolve&&a===E.Done&&(this.delayWorkStateToDoneResolve(!0),this.setLockSentEventCursor(!0));const f=e&&this.viewContainerManager.getCurScenePath(e);a===E.Done&&h&&f&&tm.has((t=this.currentToolsData)==null?void 0:t.toolsType)&&this.internalMsgEmitter.emit("finalizeRequested",h,e,[s.toString()],f),this.taskBatchData.add({op:d,workState:a,workId:s,dataType:J.Local,msgType:F.DrawWork,isRunSubWork:this.isRunSubWork,toolsType:(r=this.currentToolsData)==null?void 0:r.toolsType,viewId:e,scenePath:f,opt:u,smoothSync:this.smoothSync,isLockSentEventCursor:this.getLockSentEventCursor(),syncUnitTime:this.maxLastSyncTime,disableEraseImage:this.control.disableEraseImage,disableEraseText:this.control.disableEraseText,postCount:this.isPostCountType&&this.postCount||void 0,fullWorkerDrawCount:this.isCanPostDraw&&this.fullWorkerDrawCount||void 0,needUndoTicker:a===E.Done&&h||void 0,collectUndoTicker:a!==E.Done&&Ln((i=this.currentToolsData)==null?void 0:i.toolsType)&&h||void 0}),l.length=0}}if(this.taskBatchData.size){const s=new Set(this.taskBatchData);this.post(s),this.taskBatchData.clear()}this.taskBatchData.size&&(this.animationId=requestAnimationFrame(this.consume.bind(this)))}unWritable(){this.setCurrentLocalWorkData({workState:E.Unwritable}),this.setLockSentEventCursor(!0)}abled(){this.setCurrentLocalWorkData({workState:E.Pending}),this.setLockSentEventCursor(!1)}isAbled(){return this.currentLocalWorkData.workState!==E.Unwritable}postMainThread(e){if(!this.control.hasOffscreenCanvas&&this.mainThread){this.mainThread.consume(e);return}}postWebWorker(e){if(this.control.isUseSimple){const t=[...e].find(r=>r.msgType===F.Init&&r.offscreenCanvas);t!=null&&t.offscreenCanvas?this.fullWorker.postMessage(e,[t.offscreenCanvas.bgCanvas,t.offscreenCanvas.localCanvas,t.offscreenCanvas.serviceCanvas]):this.fullWorker.postMessage(e);return}else if(this.subWorker){this.fullWorker.postMessage(e);const t=new Set;for(const r of e.values()){const i=r.msgType;(i===F.Init||i===F.Clear||i===F.Destroy||i===F.UpdateCamera||i===F.Console||r.isRunSubWork)&&t.add(r)}t.size&&this.subWorker.postMessage(t)}}post(e){if(this.control.isUseBackgroundThread){if(!this.backgroundThreadManager){let r=[];r=j.cloneDeep([...e]),setTimeout(()=>{for(const i of r)this.taskBatchData.add(i)},0);return}const t=new Set;for(const r of e.values()){const i=r.msgType;(i===F.Init||i===F.Clear||i===F.Destroy||i===F.Console||r.isRunBackgroundThread)&&t.add(r)}t.size&&this.backgroundThreadManager.consume(t)}if(!this.control.hasOffscreenCanvas){if(!this.mainThread){let t=[];t=j.cloneDeep([...e]),setTimeout(()=>{for(const r of t)this.taskBatchData.add(r)},0);return}this.postMainThread(e);return}this.postWebWorker(e)}updateNode(e,t,r,i){this.taskBatchData.add({msgType:F.UpdateNode,workId:e,updateNodeOpt:t,viewId:r,scenePath:i,dataType:J.Local}),this.runAnimation()}destroyTaskQueue(){this.useTasksqueue=!1,this.useTasksClockId&&(clearTimeout(this.useTasksClockId),this.useTasksClockId=void 0),this.mainTasksqueueCount=void 0,this.workerTasksqueueCount=void 0}updateDpr(e,t){this.queryTaskBatchData({msgType:F.UpdateDpr,dataType:J.Local,viewId:e}).forEach(r=>{this.taskBatchData.delete(r)}),this.taskBatchData.add({dataType:J.Local,msgType:F.UpdateDpr,viewId:e,dpr:t,isRunSubWork:!0}),this.runAnimation()}updateCamera(e,t){var r,i,s,a;if(this.useTasksqueue||((r=this.methodBuilder)==null||r.pause(),this.blurCursor(e),this.checkDrawingWork(e),this.useTasksqueue=!0,this.mainTasksqueueCount=1,this.workerTasksqueueCount=1),this.useTasksqueue){this.tasksqueue.set(e,{msgType:F.UpdateCamera,dataType:J.Local,cameraOpt:{...t,width:t.width,height:t.height},scenePath:this.viewContainerManager.getCurScenePath(e),isRunSubWork:!0,viewId:e}),this.consume(),this.useTasksClockId&&clearTimeout(this.useTasksClockId),this.updateCameraDone();try{(i=this.control.selectorApi)==null||i.onCameraChange(e)}catch(c){(a=(s=this.Logger)==null?void 0:s.error)==null||a.call(s,`[Appliance]: [selector] onCameraChange failed: ${c==null?void 0:c.message}`)}}}updateCameraDone(){this.useTasksClockId=setTimeout(()=>{var e;this.useTasksClockId=void 0,this.mainTasksqueueCount===this.workerTasksqueueCount?(this.tasksqueue.size&&this.consume(),this.useTasksqueue=!1,this.mainTasksqueueCount=void 0,this.workerTasksqueueCount=void 0,(e=this.methodBuilder)==null||e.recover(),this.runAnimation()):this.updateCameraDone()},this.maxLastSyncTime)}consumeQueue(){const e=new Set;let t=!this.isBusy;if(this.isBusy&&this.mainTasksqueueCount&&this.workerTasksqueueCount&&this.mainTasksqueueCount<=this.workerTasksqueueCount&&(t=!0),t){this.mainTasksqueueCount&&this.workerTasksqueueCount&&this.mainTasksqueueCount++,e.add({msgType:F.TasksQueue,dataType:J.Local,isRunSubWork:!0,isRunBackgroundThread:this.control.isUseBackgroundThread,mainTasksqueueCount:this.mainTasksqueueCount,tasksqueue:this.tasksqueue,viewId:""});for(const[r,i]of this.tasksqueue.entries())i.cameraOpt&&this.control.textEditorManager.onCameraChange(i.cameraOpt,r)}return e}async clearViewScenePath(e,t,r){var s,a;const i=this.viewContainerManager.getCurScenePath(e);if(r){const c=(s=this.collector)==null?void 0:s.uid;if(c&&!this.control.renderControl.isClearAble({uid:c,viewId:e,scenePath:i}))return}this.control.textEditorManager.clear(e,t),this.queryTaskBatchData({msgType:F.Clear,dataType:J.Local,viewId:e}).forEach(c=>{this.taskBatchData.delete(c)}),this.taskBatchData.add({dataType:J.Local,msgType:F.Clear,viewId:e}),this.runAnimation(),t||(this.control.renderControl.isUsePageAuth(e)&&i?this.control.renderControl.clearRenderPage(e,i):(a=this.collector)==null||a.dispatch({type:F.Clear,viewId:e,scenePath:i})),this.zIndexNodeMethod&&this.zIndexNodeMethod.clearZIndex(e);for(const[c,l]of this.localPointsBatchData.entries())l.viewId===e&&this.localPointsBatchData.delete(c);await new Promise(c=>{const l=this.clearAllResolveMap.get(e)||{resolve:void 0,timer:void 0};l.timer&&clearTimeout(l.timer),l.resolve=c,l.timer=setTimeout(()=>{const u=this.clearAllResolveMap.get(e);u!=null&&u.resolve&&u.resolve(e)},this.maxLastSyncTime),this.clearAllResolveMap.set(e,l)}).then(c=>{this.clearAllResolveMap.delete(c)})}internalMsgEmitterListener(){var e;this.methodBuilder=new ee([B.CopyNode,B.SetColorNode,B.DeleteNode,B.RotateNode,B.ScaleNode,B.TranslateNode,B.ZIndexNode,B.SetFontStyle,B.SetPoint,B.SetLock,B.SetShapeOpt]).registerForMainEngine(te.MainEngine,this.control),this.zIndexNodeMethod=(e=this.methodBuilder)==null?void 0:e.getBuilder(B.ZIndexNode)}setZIndex(e){const t=this.currentToolsData&&j.cloneDeep(this.currentToolsData.toolsOpt);return t&&this.zIndexNodeMethod&&this.isUseZIndex&&(this.zIndexNodeMethod.addMaxLayer(e),t.zIndex=this.zIndexNodeMethod.getMaxZIndex(e)),t}checkDrawingWork(e){var i,s,a,c,l;let t=!1;const r=[];for(const[u,{state:h,viewId:d,points:f,opt:p}]of this.localPointsBatchData.entries())if(e===d&&h===E.Start||h===E.Doing){if(h===E.Doing&&this.isCanDrawWork){Number(u)&&Number(u)+60>this.now&&(r.push(u.toString()),this.taskBatchData.add({msgType:F.RemoveNode,workId:u,viewId:d,dataType:J.Local,isRunSubWork:!0}));const w=f.map(N=>N);this.taskBatchData.add({op:w,workState:E.Done,workId:u,dataType:J.Local,msgType:F.DrawWork,isRunSubWork:this.isRunSubWork,toolsType:(i=this.currentToolsData)==null?void 0:i.toolsType,viewId:d,opt:p,scenePath:d&&this.viewContainerManager.getCurScenePath(d)}),t=!0}this.deleteLocalPoint(u)}if((t||r.length)&&((s=this.currentToolsData)==null||s.toolsType,S.Pencil,this.consume(),r.length)){const u=(a=this.viewContainerManager.getView(e))==null?void 0:a.focusScenePath;(c=this.currentToolsData)==null||c.toolsType,S.Pencil,(l=this.collector)==null||l.dispatch({type:F.RemoveNode,removeIds:r,viewId:e,scenePath:u})}}removeDrawingWork(e){var r,i,s,a;const t=[];for(const[c,{state:l,viewId:u}]of this.localPointsBatchData.entries())(e===u&&l===E.Start||l===E.Doing)&&(this.deleteLocalPoint(c),l===E.Doing&&this.isCanDrawWork&&(t.push(c.toString()),this.taskBatchData.add({msgType:F.RemoveNode,workId:c,viewId:u,dataType:J.Local,isRunSubWork:!0})));if(t.length){(r=this.currentToolsData)==null||r.toolsType,S.Pencil,this.consume();const c=(i=this.viewContainerManager.getView(e))==null?void 0:i.focusScenePath;(s=this.currentToolsData)==null||s.toolsType,S.Pencil,(a=this.collector)==null||a.dispatch({type:F.RemoveNode,removeIds:t,viewId:e,scenePath:c})}}removeNodes(e,t){var i,s;const r=(i=this.viewContainerManager.getView(e))==null?void 0:i.focusScenePath;if(r&&t.length){for(const a of t)this.taskBatchData.add({msgType:F.RemoveNode,workId:a,viewId:e,dataType:J.Local,isRunSubWork:!1});this.consume(),(s=this.collector)==null||s.dispatch({type:F.RemoveNode,removeIds:t,viewId:e,scenePath:r})}}hoverCursor(e,t){var r;if(((r=this.currentToolsData)==null?void 0:r.toolsType)===S.Selector&&!this.isBusy){const i=this.viewContainerManager.getView(t);if(i&&i.displayer&&i.displayer.vDom){const c=i.displayer.vDom.state.floatBarData;if(c){const{x:l,y:u,w:h,h:d}=c;if(lo(e,{x:l,y:u,w:h,h:d}))return}}const s=this.viewContainerManager.transformToScenePoint(e,t),a={msgType:F.CursorHover,dataType:J.Local,point:s,toolsType:this.currentToolsData.toolsType,opt:this.currentToolsData.toolsOpt,isRunSubWork:!1,viewId:t};this.queryTaskBatchData({msgType:F.CursorHover,dataType:J.Local,toolsType:this.currentToolsData.toolsType,viewId:t}).forEach(c=>{this.taskBatchData.delete(c)}),this.taskBatchData.add(a),this.runAnimation()}}blurCursor(e){var r;if(((r=this.currentToolsData)==null?void 0:r.toolsType)!==S.Selector)return;const t={msgType:F.CursorBlur,dataType:J.Local,isRunSubWork:!1,viewId:e};this.queryTaskBatchData({msgType:F.CursorHover,dataType:J.Local,viewId:e}).forEach(i=>{this.taskBatchData.delete(i)}),this.taskBatchData.add(t),this.consume()}sendCursorEvent(e,t){var c,l,u;if(!this.currentLocalWorkData||this.currentLocalWorkData.workState===E.Unwritable||this.isBusy)return;const r=(c=this.currentToolsData)==null?void 0:c.toolsType;if(!this.useTasksqueue&&this.workState===E.Pending&&r===S.Selector&&(j.isNumber(e[0])&&j.isNumber(e[1])?this.hoverCursor(e,t):e[0]===void 0&&e[1]===void 0&&this.blurCursor(t)),!this.currentToolsData||!this.isCanSentCursor||!this.control.pluginOptions.extras.cursor.enable)return;const i=(l=this.collector)==null?void 0:l.uid,s=this.viewContainerManager.getCurScenePath(t);switch((u=this.currentToolsData)==null?void 0:u.toolsType){case S.Eraser:case S.PencilEraser:case S.BitMapEraser:{if(i&&!this.control.renderControl.isClearAble({uid:i,viewId:t,filterLocalSelf:!1,scenePath:s}))return;break}default:if(i&&!this.control.renderControl.isWritable||i&&!this.control.renderControl.isRenderAble({uid:i,viewId:t,filterLocalSelf:!1,scenePath:s}))return;break}let a=[void 0,void 0];this.currentToolsData&&this.isCanSentCursor&&!this.localPointsBatchData.size&&!this.getLockSentEventCursor()&&(a=e,this.control.cursor.sendEvent(a,t))}getBoundingRect(e){var r,i;if(!((r=this.boundingRectMap)==null?void 0:r.get(e))){const s=(i=this.collector)==null?void 0:i.getScenePathData(e);if(!s)return;if(Object.keys(s).forEach(a=>{var c;((c=this.collector)==null?void 0:c.getLocalId(a))===q&&delete s[a]}),Object.keys(s).length&&this.viewContainerManager.mainView&&this.viewContainerManager.mainView.cameraOpt){const a={msgType:F.BoundingBox,dataType:J.Local,scenePath:e,scenes:s,cameraOpt:{...this.viewContainerManager.mainView.cameraOpt},isRunSubWork:!0,viewId:this.viewContainerManager.mainView.id};return this.taskBatchData.add(a),this.runAnimation(),new Promise(c=>{this.boundingRectMap.set(e,c)}).then(c=>(this.boundingRectMap.delete(e),c))}}}getSnapshot(e,t,r,i){var a,c,l,u,h;if(!((a=this.snapshotMap)==null?void 0:a.get(e))){const d=(c=this.collector)==null?void 0:c.getViewIdBySecenPath(e);if(!d)return;const f=(l=this.collector)==null?void 0:l.getStorageData(d,e);if(!f)return;if(Object.keys(f).forEach(p=>{var w;((w=this.collector)==null?void 0:w.getLocalId(p))===q&&delete f[p]}),Object.keys(f).length){const p=this.viewContainerManager.mainView;if(!p)return;const w=t||((u=p.cameraOpt)==null?void 0:u.width),N=r||((h=p.cameraOpt)==null?void 0:h.height),y={msgType:F.Snapshot,dataType:J.Local,scenePath:e,scenes:f,w,h:N,cameraOpt:i&&{...i,width:w,height:N}||p.cameraOpt,isRunSubWork:!0,isRunBackgroundThread:this.control.isUseBackgroundThread,viewId:d};return this.taskBatchData.add(y),this.runAnimation(),new Promise(M=>{this.snapshotMap.set(e,{resolve:M,value:this.control.isUseBackgroundThread?[void 0,void 0]:[void 0]})}).then(M=>(this.snapshotMap.delete(e),M.reverse()))}}}queryTaskBatchData(e){const t=[];if(e)for(const r of this.taskBatchData.values()){let i=!0;for(const[s,a]of Object.entries(e))if(r[s]!==a){i=!1;break}i&&t.push(r)}return t}insertIconify(e,t){var a;const r=this.viewContainerManager.getView(e);if(!r)throw new Error("insertIconify viewId is not exist");if(!t.src)throw new Error("iconify src must be required");if(!/^(http|https):\/\//.test(t.src))throw new Error("iconify src must be http or https");t.strokeColor||(t.strokeColor=(a=this.currentLocalWorkData.toolsOpt)==null?void 0:a.strokeColor);const s=r==null?void 0:r.focusScenePath;if(e&&s){const c=this.now;fe.InternalMsgEmitter.emit("addUndoTicker",c,e,{render:!0,storage:!0}),fe.InternalMsgEmitter.emit("finalizeRequested",c,e,[t.uuid],s);const l={...t,type:jt.Iconify};this.zIndexNodeMethod&&(this.zIndexNodeMethod.addMaxLayer(e),l.zIndex=this.zIndexNodeMethod.getMaxZIndex(e)),this.taskBatchData.add({msgType:F.FullWork,dataType:J.Local,toolsType:S.Image,workId:t.uuid,opt:l,viewId:e,willRefresh:!0,willSyncService:!0,needUndoTicker:c}),this.runAnimation()}}insertBackgroundSVG(e,t){if(!this.control.isUseBackgroundThread)throw new Error("useBackgroundThread of pluginOptions should be true");const r=this.viewContainerManager.getView(e);if(!r)throw new Error("insertBackgroundSVG viewId is not exist");if(!t.src)throw new Error("src must be required");if(t.src&&!/^(http|https):\/\//.test(t.src))throw new Error("iconify src must be http or https");const i=r==null?void 0:r.focusScenePath;if(e&&i){const s=this.now;fe.InternalMsgEmitter.emit("addUndoTicker",s,e,{render:!0,storage:!0}),fe.InternalMsgEmitter.emit("finalizeRequested",s,e,[t.uuid],i);const a={...t,type:zt.url};this.zIndexNodeMethod&&(this.zIndexNodeMethod.addMaxLayerForBackgroundSVG(e),a.zIndex=this.zIndexNodeMethod.getMaxZIndexForBackgroundSVG(e)),this.taskBatchData.add({msgType:F.FullWork,dataType:J.Local,toolsType:S.BackgroundSVG,workId:t.uuid,opt:a,viewId:e,willRefresh:!0,willSyncService:!0,needUndoTicker:s,isRunBackgroundThread:!0}),this.runAnimation()}}async insertBackgroundMarkMap(e,t){var s;if(this.assertMarkmapRuntimeRegistered("insertBackgroundMarkMap",e),!this.control.isUseBackgroundThread)throw new Error("useBackgroundThread of pluginOptions should be true");const r=this.viewContainerManager.getView(e);if(!r)throw new Error("instertBackgroundMarkMap viewId is not exist");if(!t.data)throw new Error("data must be required");if(t.data&&!BM(t.data))throw new Error("data must be markdown string");const i=r==null?void 0:r.focusScenePath;if(e&&i){const a=t.uuid.toString();if((s=this.collector)!=null&&s.hasId(e,i,a))throw new Error("instertBackgroundMarkMap svgInfo.uuid is already exist");if(this.markmapIdResolveMap.has(a))throw new Error("instertBackgroundMarkMap svgInfo.uuid is already resolving");const c=this.now;fe.InternalMsgEmitter.emit("addUndoTicker",c,e,{render:!0,storage:!0}),fe.InternalMsgEmitter.emit("finalizeRequested",c,e,[a],i);const l={...t,type:zt.markmap};return this.zIndexNodeMethod&&(this.zIndexNodeMethod.addMaxLayerForBackgroundSVG(e),l.zIndex=this.zIndexNodeMethod.getMaxZIndexForBackgroundSVG(e)),this.taskBatchData.add({msgType:F.FullWork,dataType:J.Local,toolsType:S.BackgroundSVG,workId:a,opt:l,viewId:e,willRefresh:!0,willSyncService:!0,needUndoTicker:c,isRunBackgroundThread:!0}),this.runAnimation(),new Promise((u,h)=>{this.markmapIdResolveMap.set(a,{resolve:u,timer:setTimeout(()=>{const d=this.markmapIdResolveMap.get(a);d!=null&&d.timer&&(d.timer=void 0),h(a)},this.control.pluginOptions.extras.markmap.timeout)})}).then(u=>{if(u)return this.markmapIdResolveMap.delete(u),u}).catch(u=>{throw this.markmapIdResolveMap.delete(u),fe.InternalMsgEmitter.emit("ackRenderUndoTicker",c,e,i),fe.InternalMsgEmitter.emit("ackStorageUndoTicker",c,e,i),new Error(`instertBackgroundMarkMap svgInfo.uuid ${u} insert timeout`)})}}async updateBackgroundMarkMap(e,t,r){var l;this.assertMarkmapRuntimeRegistered("updateBackgroundMarkMap",e);const i=this.viewContainerManager.getView(e);if(!i)throw new Error("updateBackgroundMarkMap viewId is not exist");const s=i==null?void 0:i.focusScenePath;if(!s)throw new Error("updateBackgroundMarkMap scenePath is not exist");if((l=this.collector)!=null&&l.hasId(e,s,t))throw new Error("instertBackgroundMarkMap svgInfo.uuid is already exist");if(this.markmapIdResolveMap.has(t))throw new Error("instertBackgroundMarkMap svgInfo.uuid is already resolving");const a=this.now;fe.InternalMsgEmitter.emit("addUndoTicker",a,e,{render:!0,storage:!0}),fe.InternalMsgEmitter.emit("finalizeRequested",a,e,[t],s);const c={...r,type:zt.markmap};this.taskBatchData.add({msgType:F.UpdateNode,dataType:J.Local,toolsType:S.BackgroundSVG,workId:t,opt:c,viewId:e,willRefresh:!0,willSyncService:!0,needUndoTicker:a,isRunBackgroundThread:!0}),this.runAnimation()}insertImage(e,t){const r=this.viewContainerManager.getView(e);if(!r)throw new Error("insertImage viewId is not exist");if(t.src&&!/^(http|https):\/\//.test(t.src))throw new Error("Image src must be http or https");const i=r==null?void 0:r.focusScenePath;if(e&&i){const{src:s,uuid:a}=t;if(a&&!s){this.tmpImageConfigMap.set(a,t);return}const c=this.now;fe.InternalMsgEmitter.emit("addUndoTicker",c,e,{render:!0,storage:!0});const l={...t,type:jt.Image};this.zIndexNodeMethod&&(this.zIndexNodeMethod.addMaxLayer(e),l.zIndex=this.zIndexNodeMethod.getMaxZIndex(e)),this.taskBatchData.add({msgType:F.FullWork,dataType:J.Local,toolsType:S.Image,workId:t.uuid,opt:l,viewId:e,willRefresh:!0,willSyncService:!0,needUndoTicker:c}),this.runAnimation(),fe.InternalMsgEmitter.emit("finalizeRequested",c,e,[t.uuid],i)}}lockImage(e,t,r){var a,c;const i=this.viewContainerManager.getView(e);if(!i)throw new Error("insertImage viewId is not exist");const s=i==null?void 0:i.focusScenePath;if(e&&s&&this.collector){const l=this.collector.getStorageData(e,s);if(!l)return;for(const[u,h]of Object.entries(l))if(h&&h.toolsType===S.Image&&h.opt.uuid===t){const d=this.now,f=(a=this.collector)!=null&&a.isOwn(u)?(c=this.collector)==null?void 0:c.getLocalId(u):u;fe.InternalMsgEmitter.emit("addUndoTicker",d,e,{render:!0,storage:!0});const p={...h.opt,locked:r,type:jt.Image};this.taskBatchData.add({msgType:F.FullWork,dataType:J.Local,toolsType:S.Image,workId:f,opt:p,viewId:e,willRefresh:!0,willSyncService:!0,needUndoTicker:d}),this.runAnimation(),fe.InternalMsgEmitter.emit("finalizeRequested",d,e,[f],s);return}}}completeImageUpload(e,t,r){const i=this.viewContainerManager.getView(e);if(!i)throw new Error("insertImage viewId is not exist");const s=i==null?void 0:i.focusScenePath;if(e&&s){const a=this.tmpImageConfigMap.get(t);a&&(a.src=r,this.insertImage(e,a),this.tmpImageConfigMap.delete(t));return}}getImagesInformation(e){const t=[];if(this.collector){const r=this.collector.getScenePathData(e);if(!r)return t;for(const i of Object.values(r))if(i&&i.toolsType===S.Image){const s=i.opt;t.push({uuid:s.uuid,centerX:s.centerX,centerY:s.centerY,width:s.width,height:s.height,locked:s.locked,uniformScale:s.uniformScale,crossOrigin:s.crossOrigin})}}return t}setShapeSelectorByWorkId(e,t){this.taskBatchData.add({workId:q,selectIds:[e],msgType:F.Select,dataType:J.Local,viewId:t,willSyncService:!0}),this.runAnimation()}blurSelector(e,t,r){this.taskBatchData.add({workId:r||q,selectIds:[],msgType:F.Select,dataType:J.Service,viewId:e,scenePath:t}),this.runAnimation()}consoleWorkerInfo(){this.taskBatchData.add({msgType:F.Console,dataType:J.Local,isRunSubWork:!0,viewId:""}),this.consume()}sendClearUids(e,t){var i,s;const r=new Set;r.add({msgType:F.AuthClear,dataType:J.Local,viewId:e,clearUids:t,localUid:(i=this.collector)==null?void 0:i.uid}),this.control.hasOffscreenCanvas?this.fullWorker.postMessage(r):(s=this.mainThread)==null||s.consume(r)}async getVNodeInfo(e,t,r){if(!this.getVNodeInfoResolveMap.has(e))return this.taskBatchData.add({msgType:F.GetVNodeInfo,dataType:J.Local,isRunSubWork:!0,viewId:t,workIds:r,workId:e}),this.consume(),await new Promise(i=>{const s=this.getVNodeInfoResolveMap.get(e)||{resolve:void 0,timer:void 0};s.timer&&clearTimeout(s.timer),s.resolve=i,s.timer=setTimeout(()=>{const a=this.getVNodeInfoResolveMap.get(e);a!=null&&a.resolve&&a.resolve({uuid:e})},this.maxLastSyncTime*5),this.getVNodeInfoResolveMap.set(e,s)}).then(i=>{const{uuid:s}=i;return this.getVNodeInfoResolveMap.delete(s),i})}}class om{constructor(n){I(this,"internalMsgEmitter");I(this,"control");I(this,"roomHotkeyCheckers");I(this,"tmpCopyStore",new Map);I(this,"tmpCopyCoordInfo");var r;const{control:e,internalMsgEmitter:t}=n;this.control=e,this.internalMsgEmitter=t,this.roomHotkeyCheckers=((r=this.control.room)==null?void 0:r.viewsParams.hotKeys.nodes)||[]}get isUseSelf(){var n,e;return((e=(n=this.control)==null?void 0:n.room)==null?void 0:e.disableDeviceInputs)||!1}get isSelector(){var n;return((n=this.control.worker.currentToolsData)==null?void 0:n.toolsType)===S.Selector}get collector(){return this.control.collector}get mainEngine(){return this.control.worker}get keyboardKind(){return/^Mac/i.test(navigator.platform)?"mac":"windows"}getEventKey(n){switch(n.type){case"keydown":return"KeyDown"}return"KeyUp"}onActiveHotkey(n){var r,i,s;const e=this.control.viewContainerManager.focuedViewId,t=(r=this.control.viewContainerManager.focuedView)==null?void 0:r.focusScenePath;if(e&&t)switch(n){case"delete":this.isSelector&&((i=this.collector)!=null&&i.hasSelector(e,t))&&ee.emitMethod(te.MainEngine,B.DeleteNode,{workIds:[q],viewId:e});break;case"copy":this.isSelector&&((s=this.collector)!=null&&s.hasSelector(e,t))&&this.copySelectorToTemp(e,t);break;case"paste":this.tmpCopyStore.size&&this.pasteTempToFocusView(e,t);break}(n==="changeToPencil"||n==="redo"||n==="undo")&&this.onSelfActiveHotkey(n)}colloctHotkey(n){if(this.isUseSelf){const e=this.checkHotkey(n);e&&this.onSelfActiveHotkey(e)}}onSelfActiveHotkey(n){switch(n){case"changeToPencil":this.setMemberState({currentApplianceName:ie.pencil,useNewPencil:!0});break;case"changeToArrow":this.setMemberState({currentApplianceName:ie.arrow});break;case"changeToClick":this.setMemberState({currentApplianceName:ie.clicker});break;case"changeToEllipse":this.setMemberState({currentApplianceName:ie.ellipse});break;case"changeToEraser":this.setMemberState({currentApplianceName:ie.eraser});break;case"changeToHand":this.setMemberState({currentApplianceName:ie.hand});break;case"changeToLaserPointer":this.setMemberState({currentApplianceName:ie.laserPointer});break;case"changeToSelector":this.setMemberState({currentApplianceName:ie.selector});break;case"changeToRectangle":this.setMemberState({currentApplianceName:ie.rectangle});break;case"changeToStraight":this.setMemberState({currentApplianceName:ie.straight});break;case"redo":this.control.room&&!this.control.room.disableSerialization&&this.control.viewContainerManager.redo();break;case"undo":this.control.room&&!this.control.room.disableSerialization&&this.control.viewContainerManager.undo();break;case"changeToText":this.setMemberState({currentApplianceName:ie.text});break;case"changeToPencilEraser":this.setMemberState({currentApplianceName:ie.pencilEraser});break;case"delete":case"copy":case"paste":this.onActiveHotkey(n);break}}checkHotkey(n){for(const e of this.roomHotkeyCheckers){const{kind:t,checker:r}=e;if(r({nativeEvent:n,kind:this.getEventKey(n),key:n.key,altKey:n.altKey,ctrlKey:n.ctrlKey,shiftKey:n.shiftKey},this.keyboardKind))return t}}copySelectorToTemp(n,e){var l,u;const t=this.control.viewContainerManager.getView(n),r=(u=(l=this.mainEngine)==null?void 0:l.methodBuilder)==null?void 0:u.getBuilder(B.CopyNode);if(!t||!this.collector||!r)return;const i=this.collector.transformKey(q),s=this.collector.getStorageData(n,e);if(!s)return;const a=s[i],c=a&&r.copySelector({viewId:n,store:a});c&&(this.tmpCopyCoordInfo=c==null?void 0:c.copyCoordInfo,this.tmpCopyStore=c==null?void 0:c.copyStores)}pasteTempToFocusView(n,e){var i,s;const t=this.control.viewContainerManager.getView(n),r=(s=(i=this.mainEngine)==null?void 0:i.methodBuilder)==null?void 0:s.getBuilder(B.CopyNode);if(!(!t||!this.tmpCopyCoordInfo||!this.tmpCopyStore.size||!this.collector||!r)&&t.viewData&&this.tmpCopyCoordInfo){const a=j.cloneDeep(this.tmpCopyCoordInfo.offset),c=this.tmpCopyCoordInfo.cameraOpt,l=t.viewData.camera;a.x=a.x+l.centerX-c.centerX,a.y=a.y+l.centerY-c.centerY;const u=this.control.worker.now;this.control.worker.internalMsgEmitter.emit("addUndoTicker",u,n,{render:!0,storage:!0,copyAck:!0}),r.pasteSelector({viewId:n,scenePath:e,copyStores:j.cloneDeep(this.tmpCopyStore),copyCoordInfo:{offset:a,cameraOpt:l},undoTickerId:u})}}setMemberState(n){var e;(e=this.control.room)==null||e.setMemberState(n)}}class sm{constructor(n){I(this,"control");I(this,"roomMemberManager");I(this,"worker");I(this,"publicMsgEmitter");I(this,"renderUids",new Map);I(this,"pageAuth",new Map);I(this,"isLocalRender",!1);I(this,"isCurWritable",!1);var r;const{control:e,publicMsgEmitter:t}=n;this.control=e,this.publicMsgEmitter=t,this.roomMemberManager=e.roomMember,this.worker=e.worker,this.isCurWritable=((r=this.control.room)==null?void 0:r.isWritable)||!1}get isWritable(){return this.isCurWritable}onWritableChange(n){this.isCurWritable=n}addPage(n,e=!0){var l,u;const{viewId:t,render:r="localSelf",elementIds:i,pageId:s=(l=this.control.collector)==null?void 0:l.uid}=n,a=this.pageAuth.get(t)||new Map,c=this.control.viewContainerManager.getCurScenePath(t);if(c&&s){const h=a.get(c)||{render:"localSelf",pages:new Map};e&&(h.render=r);const d=i&&this.cloneElementIds(t,c,i,s)||new Set;h.pages.set(s,d),a.set(c,h),this.pageAuth.set(t,a),e&&this.pageAuthEffect(t),this.isLocalRender=!1,(u=this.control.collector)==null||u.dispatchPageAuth({operation:be.addPage,viewId:t,scenePath:c,pageId:s,pageData:{render:r,elementIds:d}},!0)}}delPage(n,e){var s,a;const t=this.pageAuth.get(e);if(!t)return;const r=[...t.keys()].find(c=>{const l=t.get(c);return!!(l&&l.pages.has(n))});if(!r)return;const i=t.get(r);if(i){const{render:c,pages:l}=i,u=c==="localSelf"?(s=this.control.collector)==null?void 0:s.uid:c,h=l.get(n);h!=null&&h.size&&this.delElementIds(e,r,h),l.delete(n),u===n&&this.pageAuthEffect(e)}(a=this.control.collector)==null||a.dispatchPageAuth({operation:be.deletePage,viewId:e,scenePath:r,pageId:n},!0)}delViewPage(n,e=!0){var r;this.pageAuth.get(n)&&(this.pageAuth.delete(n),e&&((r=this.control.collector)==null||r.dispatchPageAuth({operation:be.clearView,viewId:n},e)))}clearRenderPage(n,e,t=!0){var a,c;const r=this.pageAuth.get(n);if(!r)return;const i=r.get(e);let s;if(i){const{render:l,pages:u}=i,h=l==="localSelf"?(a=this.control.collector)==null?void 0:a.uid:l;if(h){if(t){const d=u.get(h);d&&this.delElementIds(n,e,d)}u.set(h,new Set),s=h}}t&&s&&((c=this.control.collector)==null||c.dispatchPageAuth({operation:be.clearPage,viewId:n,scenePath:e,pageId:s},t))}hasPage(n,e,t){const r=this.pageAuth.get(e);if(!r)return!1;const i=r.get(t);return i?i.pages.has(n):!1}getPageInfo(n,e,t){const r=this.pageAuth.get(e);if(!r)return;const i=r.get(t);if(i)return i.pages.get(n)}addRenderPageElementId(n,e=!0,t=!1){var u,h;const{viewId:r,elementId:i,scenePath:s}=n,a=this.pageAuth.get(r);if(!a)throw new Error(`no view info in viewId: ${r}`);const c=a.get(s);let l;if(c){const{render:d,pages:f}=c,p=d==="localSelf"?(u=this.control.collector)==null?void 0:u.uid:d;if(p&&f.has(p)){const w=f.get(p)||new Set;w.add(i),f.set(p,w),l=p}}t&&this.pageAuthEffect(r),e&&l&&((h=this.control.collector)==null||h.dispatchPageAuth({operation:be.addElement,viewId:r,scenePath:s,pageId:l,pageData:{elementId:i}},e))}delRenderPageElementId(n,e=!0,t=!1){var u,h;const{viewId:r,elementId:i,scenePath:s}=n,a=this.pageAuth.get(r);if(!a)throw new Error(`no view info in viewId: ${r}`);const c=a.get(s);let l;if(c){const{render:d,pages:f}=c,p=d==="localSelf"?(u=this.control.collector)==null?void 0:u.uid:d;if(p&&f.has(p)){const w=f.get(p);w&&(w.delete(i),f.set(p,w),l=p)}}t&&this.pageAuthEffect(r),e&&l&&((h=this.control.collector)==null||h.dispatchPageAuth({operation:be.deleteElement,viewId:r,scenePath:s,pageId:l,pageData:{elementId:i}},e))}setPageRender(n,e,t,r=!0){var a;const i=this.pageAuth.get(n);if(!i)throw new Error(`no view info in viewId: ${n}`);const s=i.get(e);s&&(s.render=t),e===this.control.viewContainerManager.getCurScenePath(n)&&this.pageAuthEffect(n),r||(this.isLocalRender=!0),r&&(this.isLocalRender=!1,(a=this.control.collector)==null||a.dispatchPageAuth({operation:be.renderPage,viewId:n,scenePath:e,pageData:{render:t}},r))}isRenderAble(n){var c,l;const{uid:e,viewId:t,filterLocalSelf:r=!0,scenePath:i}=n,s=this.renderUids.get(t);if(s){const{render:u,hide:h}=s;if(u===void 0&&h===void 0)return!0;if(j.isSet(u)){if(u.has(e)||r&&((c=this.control.collector)==null?void 0:c.uid)===e&&u.has("localSelf"))return!0}else if(u===!0&&(!h||j.isSet(h)&&!h.has(e)&&!(r&&h.has("localSelf")&&((l=this.control.collector)==null?void 0:l.uid)===e)))return!0;return!1}const a=this.pageAuth.get(t);if(a&&i){const u=a.get(i);if(u){const{render:h}=u;if(h)return!(h==="localSelf"&&!r)}}return!0}isClearAble(n){var c;const{uid:e,viewId:t,filterLocalSelf:r=!0,scenePath:i}=n,s=this.renderUids.get(t);if(s){const{clear:l}=s;return!!(l===void 0||l===!0||j.isSet(l)&&(l.has(e)||r&&((c=this.control.collector)==null?void 0:c.uid)===e&&l.has("localSelf")))}const a=this.pageAuth.get(t);if(a&&i){const l=a.get(i);if(l){const{render:u}=l;if(u)return!(u==="localSelf"&&!r)}}return!0}isFilterAble(n,e){var c,l,u,h;const{viewId:t,scenePath:r,elementId:i}=n,s=this.renderUids.get(t);if(s&&i){const{render:d,hide:f}=s;if(d===void 0&&f===void 0)return!0;const p=(c=this.control.collector)==null?void 0:c.getUidFromKey(i);return p?!!(j.isSet(d)&&(d.has(p)||d.has("localSelf")&&((l=this.control.collector)==null?void 0:l.uid)===p)||d===!0&&(!f||j.isSet(f)&&!f.has(p)&&!(f.has("localSelf")&&((u=this.control.collector)==null?void 0:u.uid)===p))):!1}const a=this.pageAuth.get(t);if(a&&r&&i){const d=a.get(r);if(d){const{render:f,pages:p}=d;if(!f)return!0;const w=(h=this.control.collector)==null?void 0:h.uid,N=f==="localSelf"?w:f,y=N&&p.get(N)||void 0;if(y)switch(e){case F.RemoveNode:return!0;default:return y.has(i)}return!1}}return!0}isFilterCursor(n){if(this.isUsePageAuth(n)){const e=this.control.viewContainerManager.getCurScenePath(n),t=this.pageAuth.get(n);if(e&&t){const r=t.get(e);if(r){const{render:i}=r;return i!=="localSelf"}}}return!0}isUsePageAuth(n){var r;if(!this.pageAuth.has(n))return!1;const t=this.control.viewContainerManager.getCurScenePath(n);return t&&((r=this.pageAuth.get(n))==null?void 0:r.has(t))||!1}publishRender(n){var s;const{viewId:e,option:t,isSync:r=!0}=n,i={};if(t){const{render:a,hide:c,clear:l}=t;a&&(i.render=a===!0&&!0||new Set(a)),c&&(i.hide=c===!0&&!0||new Set(c)),l&&(i.clear=l===!0&&!0||new Set(l)),this.renderUids.set(e,i)}else this.renderUids.delete(e);r&&((s=this.control.collector)==null||s.dispatchRenderAuth({operation:Ze.setAuth,viewId:e,renderData:i},r)),this.renderEffect(e)}publishOneRender(n,e,t,r=!0){var a;const i=this.renderUids.get(n);let s;switch(t){case"show":i?(i.render||(i.render=new Set),j.isSet(i.render)&&i.render.add(e),j.isSet(i.hide)&&i.hide.delete(e)):this.renderUids.set(n,{render:new Set([e])}),s=Ze.setShow;break;case"hide":i?(i.hide||(i.hide=new Set),j.isSet(i.hide)&&i.hide.add(e),j.isSet(i.render)&&i.render.delete(e)):this.renderUids.set(n,{hide:new Set([e])}),s=Ze.setHide;break}i?this.renderUids.set(n,i):this.renderUids.delete(n),r&&s&&((a=this.control.collector)==null||a.dispatchRenderAuth({operation:s,viewId:n,uid:e},r)),this.renderEffect(n)}publishOneClear(n,e,t,r=!0){var s;const i=this.renderUids.get(n);t?i?(i.clear||(i.clear=new Set),j.isSet(i.clear)&&i.clear.add(e)):this.renderUids.set(n,{clear:new Set([e])}):i&&j.isSet(i.clear)&&i.clear.has(e)&&i.clear.delete(e),i?this.renderUids.set(n,i):this.renderUids.delete(n),r&&((s=this.control.collector)==null||s.dispatchRenderAuth({operation:Ze.setClear,viewId:n,uid:e,isClear:t},r)),this.renderEffect(n)}syncRenderUids(n,e,t,r){const i=e===!0?!0:e&&Object.keys(e)?new Set(Object.keys(e)):void 0,s=t===!0?!0:t&&Object.keys(t)?new Set(Object.keys(t)):void 0,a=r===!0?!0:r&&Object.keys(r)?new Set(Object.keys(r)):void 0;i||s||a?this.renderUids.set(n,{render:i,hide:s,clear:a}):this.renderUids.delete(n),this.renderEffect(n),this.publicMsgEmitter.emit("syncRenderUids",n,{render:i,hide:s,clear:a})}syncPageAuth(n,e,t=!1){let r=!1;if(!e)this.pageAuth.delete(n);else{const i=this.pageAuth.get(n)||new Map;for(const[s,a]of Object.entries(e)){const{render:c,pages:l}=a,u=i.get(s),h=this.isLocalRender?u==null?void 0:u.render:c;if(h){h!==(u==null?void 0:u.render)&&(r=!0);const d=new Map;for(const[p,w]of Object.entries(l))d.set(p,new Set(Object.keys(w)));const f={render:h,pages:d};d.size&&i.set(s,f)}}i.size&&(this.pageAuth.set(n,i),this.publicMsgEmitter.emit("syncPageAuth",n,i))}(t||r)&&this.pageAuthEffect(n)}destoryByViewId(n,e=!1){var t;this.renderUids.has(n)&&(this.renderUids.delete(n),e||(t=this.control.collector)==null||t.dispatchRenderAuth({operation:Ze.setAuth,viewId:n})),this.pageAuth.has(n)&&this.control.renderControl.delViewPage(n,!e)}renderEffect(n){var t;const e=(t=this.control.viewContainerManager.getView(n))==null?void 0:t.focusScenePath;e&&this.worker.clearViewScenePath(n,!0).then(()=>{var r;this.worker.pullServiceData(n,e,{isAsync:!0,useAnimation:!1}),this.worker.sendClearUids(n,(r=this.renderUids.get(n))==null?void 0:r.clear)})}pageAuthEffect(n){var t;const e=(t=this.control.viewContainerManager.getView(n))==null?void 0:t.focusScenePath;e&&this.worker.clearViewScenePath(n,!0).then(()=>{this.worker.pullServiceData(n,e,{isAsync:!0,useAnimation:!1}),this.worker.sendClearUids(n,!0)})}cloneElementIds(n,e,t,r){var a,c;const i=(a=this.control.collector)==null?void 0:a.getStorageData(n,e),s=new Set;if(i){for(const l of Object.keys(i))if(t.has(l)){const u=`${l}_${r}`;if(s.add(u),!Object.keys(i).includes(u)){const h=j.cloneDeep(i[l]);(c=this.control.collector)==null||c.updateValue(u,{type:F.FullWork,...h,workId:u},{isSync:!0,viewId:n,scenePath:e})}}}return s}delElementIds(n,e,t){var i,s;const r=(i=this.control.collector)==null?void 0:i.getStorageData(n,e);if(r)for(const a of Object.keys(r))t.has(a)&&Object.keys(r).includes(a)&&((s=this.control.collector)==null||s.updateValue(a,void 0,{isSync:!0,viewId:n,scenePath:e}))}}class am{constructor(n){I(this,"internalMsgEmitter");I(this,"control");I(this,"maps",new Map);I(this,"showId");I(this,"color");I(this,"timer");I(this,"updateMiniMapCamera",j.debounce(async n=>{const e=this.maps.get(n);if(e){const t=await this.getMiniMapCamera(n);if(t){const r=t.width/t.scale,i=t.height/t.scale,s=e.miniMapCamera.width/e.miniMapCamera.scale,a=e.miniMapCamera.height/e.miniMapCamera.scale;(r>=s||i>=a)&&(e.miniMapCamera=t);const c=e.miniMapCanvas.current;if(c){const l=c.getContext("2d");if(l){const u=this.control.viewContainerManager.getView(n);if(!(u!=null&&u.focusScenePath))return;const{miniMapCamera:h,contianer:d}=e,{width:f,height:p}=d.getBoundingClientRect(),w=Math.min(f/h.width,p/h.height);l.clearRect(0,0,c.width,c.height),c.width=h.width,c.height=h.height,c.style.width=`${h.width*w}px`,c.style.height=`${h.height*w}px`,await this.control.screenshotToCanvas(l,u.focusScenePath,h.width,h.height,h),this.listener.emitAsync([n,"viewCameraUpate"],1)}}}}},2e3,{maxWait:5e3}));var r;const{control:e,internalMsgEmitter:t}=n;this.control=e,this.internalMsgEmitter=t,this.color=((r=this.control.worker.currentToolsData)==null?void 0:r.toolsOpt.strokeColor)||"#000"}get listener(){return this.internalMsgEmitter}get activeViewId(){return this.showId}get highlightColor(){return this.color}setHighlightColor(n){this.color=n}async createMiniMap(n,e,t){const r=this.control.viewContainerManager.getView(n);if(!r)throw new Error("view not found");const i=r.cameraOpt;if(!i)throw new Error("view camera not found");const{width:s,height:a}=e.getBoundingClientRect();if(!s||!a)throw new Error("contianer width or height is 0");const c=g.createRef();this.maps.set(n,{contianer:e,miniMapCanvas:c,miniMapCamera:t,viewCamera:i}),this.showId=n,this.control.viewContainerManager.setActiveMiniMap(this.showId,!0);const l=Math.min(s/t.width,a/t.height),u=await new Promise(h=>{this.listener.once([n,"miniMapCreate"],()=>{const d=c.current;d&&(d.width=t.width,d.height=t.height,d.style.width=`${t.width*l}px`,d.style.height=`${t.height*l}px`),h(!0)}),this.timer=setTimeout(()=>{h(!1)},2e3)});return this.timer&&clearTimeout(this.timer),u}async getMiniMapCamera(n){const e=this.control.viewContainerManager.getView(n);if(!e)return;const{cameraOpt:t,focusScenePath:r}=e;if(!t||!r)return;const i={originX:t.centerX-t.width/t.scale/2,originY:t.centerY-t.height/t.scale/2,width:t.width/t.scale,height:t.height/t.scale};let s=await this.control.getBoundingRect(r)||i;s=wr(s,i)||i;let a=s.width,c=s.height,l=1;const u=a>t.width&&Math.min(t.width/a,l)||l,h=c>t.height&&Math.min(t.height/c,l)||l;return u<=h?(a=u<1&&t.width||a,c=Math.floor(c*u)+1,l=u):u>h&&(c=h<1&&t.height||c,a=Math.floor(a*h)+1,l=h),{scale:l,centerX:s.originX+s.width/2,centerY:s.originY+s.height/2,width:a,height:c}}getMiniMapCanvas(n){const e=this.maps.get(n);return(e==null?void 0:e.miniMapCanvas.current)||null}updateViewCamera(n,e){const t=this.maps.get(n);t&&(t.viewCamera=e,this.listener.emitAsync([n,"viewCameraUpate"],1))}destroyMiniMap(n){const e=n||this.showId;e&&(this.maps.delete(e),this.control.viewContainerManager.setActiveMiniMap(e,!1))}}const Pn=200;function cm(o){return o instanceof TouchEvent||o instanceof window.TouchEvent||(o==null?void 0:o.touches)&&(o==null?void 0:o.touches.length)||(o==null?void 0:o.changedTouches)&&(o==null?void 0:o.changedTouches.length)}function lm(o){return cm(o)&&(o.touches&&o.touches.length===1||o.changedTouches&&o.changedTouches.length===1)}function To(o){return o.touches&&o.touches.length?{x:o.touches[0].pageX,y:o.touches[0].pageY}:o.changedTouches&&o.changedTouches.length?{x:o.changedTouches[0].pageX,y:o.changedTouches[0].pageY}:{x:o.pageX,y:o.pageY}}class Cr{constructor(n){I(this,"_logger");I(this,"pendingArgsByChannel",new Map);I(this,"flushTimerByChannel",new Map);this._logger=n}emit(n,e){if(this._logger){this._logger[n](...e);return}(n==="info"?console.info:n==="warn"?console.warn:console.error)(...e)}flush(n,e){this.flushTimerByChannel.set(e,null);const t=this.pendingArgsByChannel.get(e)||null;this.pendingArgsByChannel.set(e,null),t&&this.emit(n,t)}debounce(n,e,t,r){this.pendingArgsByChannel.set(e,t);const i=this.flushTimerByChannel.get(e);i!=null&&clearTimeout(i),this.flushTimerByChannel.set(e,setTimeout(()=>this.flush(n,e),r))}error(...n){this.emit("error",n)}info(...n){this.emit("info",n)}warn(...n){this.emit("warn",n)}errorDebounced(n,...e){this.debounce("error",n,e,Pn)}infoDebounced(n,...e){this.debounce("info",n,e,Pn)}warnDebounced(n,...e){this.debounce("warn",n,e,Pn)}destroy(){for(const n of this.flushTimerByChannel.keys()){const e=this.flushTimerByChannel.get(n);e!=null&&clearTimeout(e),this.flushTimerByChannel.set(n,null),this.pendingArgsByChannel.set(n,null)}}}const um=new Set([S.Image,S.BackgroundSVG]),gi={"shape.vertices":new Set([S.Polygon,S.Star]),"shape.innerVerticeStep":new Set([S.Star]),"shape.innerRatio":new Set([S.Star]),"shape.placement":new Set([S.SpeechBalloon])},hm=new Set(["fontColor","fontBgColor","fontSize","bold","italic","underline","lineThrough"]),dm=new Set(["strokeColor","thickness","strokeType"]),gm=new Set(["fillColor"]),fm=new Set(["zIndexLayer"]),pm=new Set([S.Pencil,S.LaserPen,S.Arrow,S.Straight]),fi=new Set([S.Rectangle,S.Ellipse,S.Triangle,S.Rhombus,S.Polygon,S.Star,S.SpeechBalloon]),Mm=new Set([S.Pencil]),ym=new Set([S.LaserPen,S.Arrow,S.Straight,S.Rectangle,S.Ellipse,S.Star,S.Polygon,S.SpeechBalloon]);function So(o){return o===ce.Normal||o===ce.Stroke||o===ce.Dotted||o===ce.LongDotted}function Dt(o,n){return o?fm.has(n)?!0:n==="isLocked"?um.has(o):hm.has(n)?o===S.Text:n in gi?gi[n].has(o):gm.has(n)?fi.has(o):dm.has(n)?pm.has(o)||fi.has(o):!1:!1}function mm(o){return["strokeColor","fillColor","thickness","strokeType","fontColor","fontBgColor","fontSize","bold","italic","underline","lineThrough","isLocked","zIndexLayer","shape.vertices","shape.innerVerticeStep","shape.innerRatio","shape.placement"].filter(e=>Dt(o,e))}function qt(o){var e,t,r,i;const n=[];return o.strokeColor!==void 0&&n.push("strokeColor"),o.fillColor!==void 0&&n.push("fillColor"),o.thickness!==void 0&&n.push("thickness"),o.strokeType!==void 0&&n.push("strokeType"),o.fontColor!==void 0&&n.push("fontColor"),o.fontBgColor!==void 0&&n.push("fontBgColor"),o.fontSize!==void 0&&n.push("fontSize"),o.bold!==void 0&&n.push("bold"),o.italic!==void 0&&n.push("italic"),o.underline!==void 0&&n.push("underline"),o.lineThrough!==void 0&&n.push("lineThrough"),o.isLocked!==void 0&&n.push("isLocked"),o.zIndexLayer!==void 0&&n.push("zIndexLayer"),((e=o.shape)==null?void 0:e.vertices)!==void 0&&n.push("shape.vertices"),((t=o.shape)==null?void 0:t.innerVerticeStep)!==void 0&&n.push("shape.innerVerticeStep"),((r=o.shape)==null?void 0:r.innerRatio)!==void 0&&n.push("shape.innerRatio"),((i=o.shape)==null?void 0:i.placement)!==void 0&&n.push("shape.placement"),n}function pi(o,n){return!o||n===void 0||!Dt(o,"strokeType")?!1:Mm.has(o)?So(n):ym.has(o)?n===ce.Normal||n===ce.Dotted||n===ce.LongDotted:!1}const oe="[Appliance]: [selector]",Im=["bold","normal"],wm=["italic","normal"],Tm=["top","left","right","bottom","topLeft","topRight","bottomLeft","bottomRight","leftTop","leftBottom","rightTop","rightBottom"];class Sm{constructor(n){I(this,"control");I(this,"logger");I(this,"lastSelectedIdsByView",new Map);I(this,"lastViewRectByView",new Map);I(this,"updateResolveMap",new Map);I(this,"clearResolveMap",new Map);I(this,"copyResolveMap",new Map);I(this,"deleteResolveMap",new Map);I(this,"lastRemoteSelectorByView",new Map);I(this,"cameraEmitThrottleByView",new Map);I(this,"pendingCameraChangeByView",new Map);I(this,"pendingPropertyGeometryByKey",new Map);I(this,"publicStorageHandler");I(this,"onUndoAckApplied",n=>{var a,c;const{viewId:e,scenePath:t,requestId:r,emitEventType:i}=n;if(!r)return;const s=this.copyResolveMap.get(r);!s||s.viewId!==e||i===B.CopyNode&&(this.copyResolveMap.delete(r),s.timer&&clearTimeout(s.timer),(c=(a=this.logger)==null?void 0:a.info)==null||c.call(a,`${oe} copySelectedElements done requestId=${r} viewId=${e} scenePath=${t} sourceCount=${s.sourceSelectedIds.length}`),s.resolve({ok:!0,requestId:r,sourceSelectedIds:s.sourceSelectedIds,createdIds:[]}))});this.control=n,this.logger=n.logger,this.bindPublicStorageListener(),this.control.internalMsgEmitter.on("undoAckApplied",this.onUndoAckApplied)}formatFieldsFromChanges(n){return qt(n).join("/")||"-"}hasShapeChanges(n){var e,t,r,i;return((e=n.shape)==null?void 0:e.vertices)!==void 0||((t=n.shape)==null?void 0:t.innerVerticeStep)!==void 0||((r=n.shape)==null?void 0:r.innerRatio)!==void 0||((i=n.shape)==null?void 0:i.placement)!==void 0}resolveShapeDispatchToolsTypes(n,e,t,r){if(!this.hasShapeChanges(r))return[];const i=qt(r).filter(a=>a.startsWith("shape.")),s=[];return t.forEach(a=>{const c=this.lookupToolsType(n,e,a);c&&(!r.toolsType||c===r.toolsType)&&i.some(l=>Dt(c,l))&&!s.includes(c)&&s.push(c)}),s}cancelUndoTicker(n,e,t){var i,s,a;if(!n)return;const r=t||((i=this.control.viewContainerManager)==null?void 0:i.getCurScenePath(e));r&&((a=(s=this.control.worker)==null?void 0:s.internalMsgEmitter)==null||a.emit("cancelUndoTicker",n,e,r))}resolveCancelableUndoTickerId(n,e){var t,r;return n??((r=(t=this.control.viewContainerManager)==null?void 0:t.getUndoTickerId)==null?void 0:r.call(t,e))}captureUndoTickerDuringDispatch(n){var r,i;let e;const t=(s,a)=>{a===n&&e===void 0&&(e=s)};return(i=(r=this.control.internalMsgEmitter)==null?void 0:r.on)==null||i.call(r,"addUndoTicker",t),{getUndoTickerId:()=>e,dispose:()=>{var s,a;(a=(s=this.control.internalMsgEmitter)==null?void 0:s.off)==null||a.call(s,"addUndoTicker",t)}}}destroy(){for(const[,n]of this.updateResolveMap)n.timer&&clearTimeout(n.timer),n.resolve({requestId:"",ok:!1,viewId:n.viewId,reason:"busy",selectedIds:n.selectedIds,skippedIds:n.skippedIds.length?n.skippedIds:void 0,warnings:n.warnings.length?n.warnings:void 0,geometryChanged:n.geometryChanged});this.updateResolveMap.clear();for(const[,n]of this.clearResolveMap)n.timer&&clearTimeout(n.timer),n.resolve({ok:!1,requestId:"",reason:"busy"});this.clearResolveMap.clear();for(const[,n]of this.copyResolveMap)n.timer&&clearTimeout(n.timer),n.resolve({ok:!1,requestId:"",reason:"busy"});this.copyResolveMap.clear();for(const[,n]of this.deleteResolveMap)n.timer&&clearTimeout(n.timer),n.resolve({ok:!1,requestId:"",reason:"busy"});this.deleteResolveMap.clear();for(const[,n]of this.pendingPropertyGeometryByKey)n.timer&&clearTimeout(n.timer);this.pendingPropertyGeometryByKey.clear(),this.control.internalMsgEmitter.off("undoAckApplied",this.onUndoAckApplied),this.unbindPublicStorageListener()}resolveViewId(n){const e=this.control.viewContainerManager;return n||(e==null?void 0:e.focuedViewId)||re}getSelectedElements(n){var u,h,d;const e=this.resolveViewId(n);if(!e)return;const t=this.control.viewContainerManager,r=t==null?void 0:t.getView(e);if(!r)return;const i=(d=(h=(u=r.displayer)==null?void 0:u.vDom)==null?void 0:h.state)==null?void 0:d.floatBarData,s=(i==null?void 0:i.selectIds)??[],a=i&&j.isNumber(i.x)&&j.isNumber(i.y)&&j.isNumber(i.w)&&j.isNumber(i.h)?{x:i.x,y:i.y,w:i.w,h:i.h}:void 0,c=r.focusScenePath,l=[];for(const f of s){const p=this.buildSelectedElementInfo(e,c,f,i);p&&l.push(p)}return{viewId:e,scenePath:c,viewRect:a,selectedIds:s,selectedElements:l}}isElementPropertySupported(n,e){return Dt(n,e)}async blurSelector(n){var c,l,u,h,d,f,p,w,N;const e=this.genRequestId("clear"),t=this.resolveViewId(n);if(!t)return(l=(c=this.logger)==null?void 0:c.warn)==null||l.call(c,`${oe} blurSelector rejected: no-view requestId=${e}`),{ok:!1,requestId:e,reason:"no-selection"};const r=this.getSelectedElements(t),i=(r==null?void 0:r.selectedIds)??[];if(!i.length)return(h=(u=this.logger)==null?void 0:u.warn)==null||h.call(u,`${oe} blurSelector rejected: no-selection requestId=${e} viewId=${t}`),{ok:!1,requestId:e,reason:"no-selection"};const s=this.detectSelectorTransforming(t);if(s)return(f=(d=this.logger)==null?void 0:d.warn)==null||f.call(d,`${oe} blurSelector rejected: ${s} requestId=${e} viewId=${t}`),{ok:!1,requestId:e,reason:s};(w=(p=this.logger)==null?void 0:p.info)==null||w.call(p,`${oe} blurSelector request requestId=${e} viewId=${t} selectedCount=${i.length}`);const a=(r==null?void 0:r.scenePath)||((N=this.control.viewContainerManager)==null?void 0:N.getCurScenePath(t));return new Promise(y=>{var v,m,T;const M=setTimeout(()=>{var C,k;this.clearResolveMap.has(e)&&(this.clearResolveMap.delete(e),(k=(C=this.logger)==null?void 0:C.warn)==null||k.call(C,`${oe} blurSelector timeout requestId=${e} viewId=${t}`),y({ok:!1,requestId:e,reason:"busy"}))},5e3);this.clearResolveMap.set(e,{timer:M,resolve:y,viewId:t});try{(v=this.control.worker)==null||v.blurSelector(t,a||"",q)}catch(C){this.clearResolveMap.delete(e),clearTimeout(M),(T=(m=this.logger)==null?void 0:m.error)==null||T.call(m,`${oe} blurSelector failed requestId=${e} viewId=${t} err=${C==null?void 0:C.message}`),y({ok:!1,requestId:e,reason:"busy"})}})}async updateSelectedElements(n,e){var y,M,v,m,T,C,k,z,A,x,D,b,R,O;const t=this.genRequestId("update"),r=this.resolveViewId(n),i=e||{};if(!r)return(M=(y=this.logger)==null?void 0:y.warn)==null||M.call(y,`${oe} updateSelectedElements rejected: no-view requestId=${t}`),{requestId:t,viewId:"",ok:!1,reason:"no-selection"};const s=this.getSelectedElements(r),a=(s==null?void 0:s.selectedIds)??[];if(!a.length)return(m=(v=this.logger)==null?void 0:v.warn)==null||m.call(v,`${oe} updateSelectedElements rejected: no-selection requestId=${t} viewId=${r}`),{requestId:t,viewId:r,ok:!1,reason:"no-selection",selectedIds:a};const c=this.detectSelectorTransforming(r);if(c)return(C=(T=this.logger)==null?void 0:T.warn)==null||C.call(T,`${oe} updateSelectedElements rejected: ${c} requestId=${t} viewId=${r}`),{requestId:t,viewId:r,ok:!1,reason:c,selectedIds:a};if(!Object.keys(i).some(U=>i[U]!==void 0))return(z=(k=this.logger)==null?void 0:k.warn)==null||z.call(k,`${oe} updateSelectedElements rejected: unsupported-change requestId=${t} viewId=${r}`),{requestId:t,viewId:r,ok:!1,reason:"unsupported-change",selectedIds:a};const u=[],h=[],d=[];let f={...i};for(const U of a){const $=this.lookupToolsType(r,s==null?void 0:s.scenePath,U);if(!$){h.push(U);continue}const Y=this.validateStrokeTypeForChanges(U,f,$,u);Y.strokeType!==f.strokeType&&(f=Y)}if(f.strokeType!==void 0){const U=a.map(Y=>this.lookupToolsType(r,s==null?void 0:s.scenePath,Y)).filter(Y=>!!Y&&Dt(Y,"strokeType"));U.length>0?f.strokeType===ce.Stroke&&(U.every(Z=>Z===S.Pencil)||(delete f.strokeType,u.push({id:a.join(","),field:"strokeType",code:"unsupported-by-toolsType",message:"strokeType=Stroke requires all strokeType-capable selected elements to be Pencil"}))):delete f.strokeType}if(!this.collectPendingMethods(f).size)return this.flushUpdateSelectedElementsWarnings(r,t,u),(x=(A=this.logger)==null?void 0:A.warn)==null||x.call(A,`${oe} updateSelectedElements no-valid-fields requestId=${t} viewId=${r} warnings=${u.length}`),{requestId:t,viewId:r,ok:!1,reason:"unsupported-change",selectedIds:a,skippedIds:h.length?h:void 0,warnings:u.length?u:void 0};const w=qt(f);for(const U of a){const $=this.lookupToolsType(r,s==null?void 0:s.scenePath,U),Y=this.hasShapeChanges(f)&&!!f.toolsType&&$!==f.toolsType;this.hasApplicableChangesForToolsType(f,$)?d.push(U):h.includes(U)||(h.push(U),$&&w.length&&u.push({id:U,field:w.join(","),code:"unsupported-by-toolsType",toolsType:$,message:Y?`selected element id=${U} toolsType=${$} skipped by requested toolsType=${f.toolsType}`:`selected element id=${U} toolsType=${$} does not support requested fields=[${w.join(",")}]`}))}const N=this.resolveShapeDispatchToolsTypes(r,s==null?void 0:s.scenePath,d,f);return d.length?((O=(R=this.logger)==null?void 0:R.info)==null||O.call(R,`${oe} updateSelectedElements request requestId=${t} viewId=${r} scenePath=${(s==null?void 0:s.scenePath)||"-"} selectedCount=${a.length} fields=[${this.formatFieldsFromChanges(i)}]`),this.flushUpdateSelectedElementsWarnings(r,t,u),new Promise(U=>{var Z,Q;const $=setTimeout(()=>{var X,pe;const W=this.updateResolveMap.get(t);W&&(this.updateResolveMap.delete(t),(pe=(X=this.logger)==null?void 0:X.warn)==null||pe.call(X,`${oe} updateSelectedElements timeout requestId=${t} viewId=${r}`),U({requestId:t,viewId:r,ok:!1,reason:"worker-failed",selectedIds:W.selectedIds,skippedIds:W.skippedIds.length?W.skippedIds:void 0,warnings:W.warnings.length?W.warnings:void 0,geometryChanged:W.geometryChanged}))},8e3);this.updateResolveMap.set(t,{timer:$,resolve:U,viewId:r,selectedIds:a,appliedIds:d,skippedIds:h,warnings:u,geometryChanged:!1});const Y=this.captureUndoTickerDuringDispatch(r);try{this.dispatchUpdate(r,[q],f,t,N)}catch(W){this.updateResolveMap.delete(t),clearTimeout($),this.cancelUndoTicker(this.resolveCancelableUndoTickerId(Y.getUndoTickerId(),r),r,s==null?void 0:s.scenePath),(Q=(Z=this.logger)==null?void 0:Z.error)==null||Q.call(Z,`${oe} updateSelectedElements dispatch failed requestId=${t} viewId=${r} err=${W==null?void 0:W.message}`),U({requestId:t,viewId:r,ok:!1,reason:"worker-failed",selectedIds:a,skippedIds:h.length?h:void 0,warnings:u.length?u:void 0})}finally{Y.dispose()}})):(this.flushUpdateSelectedElementsWarnings(r,t,u),(b=(D=this.logger)==null?void 0:D.warn)==null||b.call(D,`${oe} updateSelectedElements rejected: no-applicable-selection requestId=${t} viewId=${r}`),{requestId:t,viewId:r,ok:!1,reason:"unsupported-change",selectedIds:a,skippedIds:h.length?h:void 0,warnings:u.length?u:void 0})}async copySelectedElements(n){var a,c,l,u,h,d,f,p;const e=this.genRequestId("copy"),t=this.resolveViewId(n);if(!t)return(c=(a=this.logger)==null?void 0:a.warn)==null||c.call(a,`${oe} copySelectedElements rejected: no-view requestId=${e}`),{ok:!1,requestId:e,reason:"no-selection"};const r=this.getSelectedElements(t),i=(r==null?void 0:r.selectedIds)??[];if(!i.length)return(u=(l=this.logger)==null?void 0:l.warn)==null||u.call(l,`${oe} copySelectedElements rejected: no-selection requestId=${e} viewId=${t}`),{ok:!1,requestId:e,reason:"no-selection"};const s=this.detectSelectorTransforming(t);return s?((d=(h=this.logger)==null?void 0:h.warn)==null||d.call(h,`${oe} copySelectedElements rejected: ${s} requestId=${e} viewId=${t}`),{ok:!1,requestId:e,reason:s}):((p=(f=this.logger)==null?void 0:f.info)==null||p.call(f,`${oe} copySelectedElements request requestId=${e} viewId=${t} scenePath=${(r==null?void 0:r.scenePath)||"-"} selectedCount=${i.length}`),new Promise(w=>{var M,v;const N=setTimeout(()=>{var m,T;this.copyResolveMap.has(e)&&(this.copyResolveMap.delete(e),(T=(m=this.logger)==null?void 0:m.warn)==null||T.call(m,`${oe} copySelectedElements timeout requestId=${e} viewId=${t}`),w({ok:!1,requestId:e,reason:"busy"}))},5e3);this.copyResolveMap.set(e,{timer:N,resolve:w,viewId:t,sourceSelectedIds:i});const y=this.captureUndoTickerDuringDispatch(t);try{ee.emitMethod(te.MainEngine,B.CopyNode,{workIds:[q],viewId:t,requestId:e})}catch(m){this.copyResolveMap.delete(e),clearTimeout(N),this.cancelUndoTicker(this.resolveCancelableUndoTickerId(y.getUndoTickerId(),t),t,r==null?void 0:r.scenePath),(v=(M=this.logger)==null?void 0:M.error)==null||v.call(M,`${oe} copySelectedElements failed requestId=${e} viewId=${t} err=${m==null?void 0:m.message}`),w({ok:!1,requestId:e,reason:"busy"})}finally{y.dispose()}}))}async deleteSelectedElements(n){var a,c,l,u,h,d,f,p;const e=this.genRequestId("delete"),t=this.resolveViewId(n);if(!t)return(c=(a=this.logger)==null?void 0:a.warn)==null||c.call(a,`${oe} deleteSelectedElements rejected: no-view requestId=${e}`),{ok:!1,requestId:e,reason:"no-selection"};const r=this.getSelectedElements(t),i=(r==null?void 0:r.selectedIds)??[];if(!i.length)return(u=(l=this.logger)==null?void 0:l.warn)==null||u.call(l,`${oe} deleteSelectedElements rejected: no-selection requestId=${e} viewId=${t}`),{ok:!1,requestId:e,reason:"no-selection"};const s=this.detectSelectorTransforming(t);return s?((d=(h=this.logger)==null?void 0:h.warn)==null||d.call(h,`${oe} deleteSelectedElements rejected: ${s} requestId=${e} viewId=${t}`),{ok:!1,requestId:e,reason:s}):((p=(f=this.logger)==null?void 0:f.info)==null||p.call(f,`${oe} deleteSelectedElements request requestId=${e} viewId=${t} scenePath=${(r==null?void 0:r.scenePath)||"-"} selectedCount=${i.length}`),new Promise(w=>{var M,v;const N=setTimeout(()=>{var m,T;this.deleteResolveMap.has(e)&&(this.deleteResolveMap.delete(e),(T=(m=this.logger)==null?void 0:m.warn)==null||T.call(m,`${oe} deleteSelectedElements timeout requestId=${e} viewId=${t}`),w({ok:!1,requestId:e,reason:"busy"}))},5e3);this.deleteResolveMap.set(e,{timer:N,resolve:w,viewId:t,removedIds:i.slice()});const y=this.captureUndoTickerDuringDispatch(t);try{ee.emitMethod(te.MainEngine,B.DeleteNode,{workIds:[q],viewId:t,requestId:e})}catch(m){this.deleteResolveMap.delete(e),clearTimeout(N),this.cancelUndoTicker(this.resolveCancelableUndoTickerId(y.getUndoTickerId(),t),t,r==null?void 0:r.scenePath),(v=(M=this.logger)==null?void 0:M.error)==null||v.call(M,`${oe} deleteSelectedElements failed requestId=${e} viewId=${t} err=${m==null?void 0:m.message}`),w({ok:!1,requestId:e,reason:"busy"})}finally{y.dispose()}}))}async updateElement(n,e,t,r,i=!0){var p,w,N,y,M,v,m,T,C,k,z,A,x;const s=this.control.collector,a=this.control.worker;if(!s||!a||!n||!e||!t||!r)return(w=(p=this.logger)==null?void 0:p.warn)==null||w.call(p,`${oe} updateElement ignored: invalid-args viewId=${t||"-"} scenePath=${e||"-"} elementId=${n||"-"}`),!1;const c=(N=s.isLocalId)!=null&&N.call(s,n)&&typeof s.transformKey=="function"?s.transformKey(n):n;if((y=s.isSelector)!=null&&y.call(s,c))return(v=(M=this.logger)==null?void 0:M.warn)==null||v.call(M,`${oe} updateElement ignored: selector-not-allowed viewId=${t} scenePath=${e}`),!1;let l=(C=(T=(m=s.storage)==null?void 0:m[t])==null?void 0:T[e])==null?void 0:C[c];if(!l)return(z=(k=this.logger)==null?void 0:k.warn)==null||z.call(k,`${oe} updateElement ignored: not-found viewId=${t} scenePath=${e} elementId=${n}`),!1;const u=l.toolsType;if(!u||r.toolsType!==u)return(x=(A=this.logger)==null?void 0:A.warn)==null||x.call(A,`${oe} updateElement ignored: toolsType-mismatch viewId=${t} scenePath=${e} elementId=${n} declared=${r.toolsType} actual=${u}`),!1;const h=this.normalizeUpdateElementInfo(r,u),d=this.buildUpdatedElementValue(l,h),f=a.now;return i&&(a.internalMsgEmitter.emit("addUndoTicker",f,t,{render:!0,storage:!0}),a.internalMsgEmitter.emit("finalizeRequested",f,t,[c],e)),await new Promise(D=>{He(()=>{var R,O;const b=s.plugin;b==null||b.updateAttributes([_e.namespace,t,e,c],d),i&&(a.internalMsgEmitter.emit("ackRenderUndoTicker",f,t,e),a.internalMsgEmitter.emit("ackStorageUndoTicker",f,t,e,c)),D(!0),(O=(R=this.logger)==null?void 0:R.info)==null||O.call(R,`${oe} updateElement notify viewId=${t} scenePath=${e} elementId=${n} toolsType=${u} fields=[${qt(h).join("/")||"-"}]`)},0,this.control.hasPolyfillMethod("requestIdleCallback")).catch(b=>{var R,O;this.cancelUndoTicker(f,t,e),(O=(R=this.logger)==null?void 0:R.warn)==null||O.call(R,`${oe} updateElement err: ${b.message??"has unknown error"} viewId=${t} scenePath=${e} elementId=${n}`),D(!1)})})}onSelectorTransform(n){var a,c;const{viewId:e,emitEventType:t,workState:r}=n;this.control.publicMsgEmitter.emit("selectorTransformChange",n);const i=`${oe} selectorTransformChange viewId=${e} emitEventType=${t} workState=${r}`,s=this.getDebounceLogger();s!=null&&s.infoDebounced?s.infoDebounced(`selector-transform-change:${e}`,i):(c=(a=this.logger)==null?void 0:a.info)==null||c.call(a,i)}onSelectorSync(n){var w,N,y,M;const{viewId:e,scenePath:t,selectIds:r,selectRect:i,selectorInfo:s}=n,a=r&&r.slice().sort()||[],c=this.lastSelectedIdsByView.get(e)||[],l=!this.isArrayEqual(a,c),u=i&&j.isNumber(i.x)&&j.isNumber(i.y)&&j.isNumber(i.w)&&j.isNumber(i.h)?{x:i.x,y:i.y,w:i.w,h:i.h}:void 0,d=!!this.pendingCameraChangeByView.get(e)&&!l&&!!(r!=null&&r.length);if(l){const v=this.getSelectedElements(e),m={viewId:e,scenePath:t,selectorId:q,reason:r!=null&&r.length?"select":"clear",viewRect:u,selectedIds:(v==null?void 0:v.selectedIds)??r??[],selectorInfo:s};this.lastSelectedIdsByView.set(e,a),this.control.publicMsgEmitter.emit("selectedElementsChange",m);const T=`${oe} selectedElementsChange reason=${m.reason} viewId=${e} count=${m.selectedIds.length}`,C=this.getDebounceLogger();C!=null&&C.infoDebounced?C.infoDebounced(`selected-elements-change:${e}`,T):(N=(w=this.logger)==null?void 0:w.info)==null||N.call(w,T)}const f=this.lastViewRectByView.get(e),p=!this.isRectEqual(f,u);if(p||l){let v="selector-action",m=r!=null&&r.length?"select":"clear";d&&p?(v="camera-change",m="cameraTransform"):p&&!l&&(r!=null&&r.length)&&(m="selectorTransform"),this.lastViewRectByView.set(e,u);const T={viewId:e,scenePath:t,selectorId:q,source:v,action:m,viewRect:u};this.control.publicMsgEmitter.emit("selectorGeometryChange",T),this.logGeometry(e,m,(r==null?void 0:r.length)||0),v==="camera-change"&&this.clearPendingCameraChange(e)}if(!(r!=null&&r.length)&&l)for(const[v,m]of this.clearResolveMap.entries())m.viewId===e&&(this.clearResolveMap.delete(v),m.timer&&clearTimeout(m.timer),(M=(y=this.logger)==null?void 0:y.info)==null||M.call(y,`${oe} blurSelector done requestId=${v} viewId=${e}`),m.resolve({ok:!0,requestId:v}))}onSelectorCleared(n){var a,c,l,u;const{viewId:e,scenePath:t,requestId:r}=n;if((this.lastSelectedIdsByView.get(e)||[]).length){const h={viewId:e,scenePath:t,selectorId:q,reason:"clear",viewRect:void 0,selectedIds:[]};this.lastSelectedIdsByView.set(e,[]),this.control.publicMsgEmitter.emit("selectedElementsChange",h);const d=`${oe} selectedElementsChange reason=clear viewId=${e} requestId=${r||"-"}`,f=this.logger;f!=null&&f.infoDebounced?f.infoDebounced(`selected-elements-change:${e}`,d):(c=(a=this.logger)==null?void 0:a.info)==null||c.call(a,d)}if(this.lastViewRectByView.get(e)){const h={viewId:e,scenePath:t,selectorId:q,source:"selector-action",action:"clear",viewRect:void 0,requestId:r};this.lastViewRectByView.set(e,void 0),this.control.publicMsgEmitter.emit("selectorGeometryChange",h),this.logGeometry(e,"clear",0)}if(r&&this.clearResolveMap.has(r)){const h=this.clearResolveMap.get(r);this.clearResolveMap.delete(r),h.timer&&clearTimeout(h.timer),(u=(l=this.logger)==null?void 0:l.info)==null||u.call(l,`${oe} blurSelector done requestId=${r} viewId=${e}`),h.resolve({ok:!0,requestId:r})}}onCameraChange(n){const e=this.getSelectedElements(n);if(!(e!=null&&e.selectedIds.length)){this.clearPendingCameraChange(n);return}this.setPendingCameraChange(n,{ts:Date.now(),viewRect:e.viewRect,selectedIds:e.selectedIds.slice()});let t=this.cameraEmitThrottleByView.get(n);t||(t=j.throttle(r=>this.emitCameraGeometry(r),60,{leading:!0,trailing:!0}),this.cameraEmitThrottleByView.set(n,t)),t(n)}emitCameraGeometry(n){const e=this.getSelectedElements(n);if(!e||!e.selectedIds.length||!e.viewRect){this.clearPendingCameraChange(n);return}const t=this.lastViewRectByView.get(n);if(this.isRectEqual(t,e.viewRect))return;this.lastViewRectByView.set(n,e.viewRect);const r={viewId:n,scenePath:e.scenePath,selectorId:q,source:"camera-change",action:"cameraTransform",viewRect:e.viewRect};this.control.publicMsgEmitter.emit("selectorGeometryChange",r),this.logGeometry(n,"cameraTransform",e.selectedIds.length),this.clearPendingCameraChange(n)}bindPublicStorageListener(){this.publicStorageHandler||(this.publicStorageHandler=n=>this.onSyncStorageChange(n),this.control.publicMsgEmitter.on("syncStorageChange",this.publicStorageHandler))}unbindPublicStorageListener(){this.publicStorageHandler&&(this.control.publicMsgEmitter.off("syncStorageChange",this.publicStorageHandler),this.publicStorageHandler=void 0)}tryResolveUpdateElements(n,e,t,r){var s,a;if(!e)return;const i=this.updateResolveMap.get(e);!i||i.viewId!==n||(i.geometryChanged=i.geometryChanged||r,this.updateResolveMap.delete(e),i.timer&&clearTimeout(i.timer),(a=(s=this.logger)==null?void 0:s.info)==null||a.call(s,`${oe} updateSelectedElements done requestId=${e} viewId=${n} type=${t} geometryChanged=${i.geometryChanged} applied=${i.appliedIds.length}`),i.resolve({requestId:e,viewId:n,ok:!0,selectedIds:i.selectedIds,appliedIds:i.appliedIds,skippedIds:i.skippedIds.length?i.skippedIds:void 0,warnings:i.warnings.length?i.warnings:void 0,geometryChanged:i.geometryChanged}))}onRemoveNodeApplied(n){var i,s;const{viewId:e,requestId:t,removeIds:r}=n;if(t){const a=this.deleteResolveMap.get(t);if(a&&a.viewId===e){const c=r!=null&&r.length?r:a.removedIds;this.deleteResolveMap.delete(t),a.timer&&clearTimeout(a.timer),(s=(i=this.logger)==null?void 0:i.info)==null||s.call(i,`${oe} deleteSelectedElements done requestId=${t} viewId=${e} removedCount=${c.length}`),a.resolve({ok:!0,requestId:t,removedIds:c});return}}}onSyncStorageChange(n){var r,i,s;if(!n||typeof n!="object")return;const e=this.control.collector;if(!e)return;const t=e.uid;for(const[a,c]of Object.entries(n)){if(!c)continue;let l=this.lastRemoteSelectorByView.get(a);l||(l=new Map,this.lastRemoteSelectorByView.set(a,l));const u=new Set;for(const[h,d]of Object.entries(c))if(d)for(const[f,p]of Object.entries(d)){if(((r=e.isLocalId)!=null&&r.call(e,f)?f:((i=e.getLocalId)==null?void 0:i.call(e,f))??f)!==q)continue;const N=((s=e.getUidFromKey)==null?void 0:s.call(e,f))??(f.split(Be)[0]||"");!N||N===t||(u.add(N),this.handleRemoteSelectorState(a,h,N,f,p,l))}for(const h of[...l.keys()]){if(u.has(h))continue;const d=l.get(h);if(!d||!d.selectedIds.length){l.delete(h);continue}this.handleRemoteSelectorState(a,"",h,`${h}${Be}${q}`,void 0,l)}}}handleRemoteSelectorState(n,e,t,r,i,s){var p;const a=s.get(t)||{selectedIds:[]};let c="update",l=[],u;if(i){const w=i,N=(w.selectIds||[]).slice().sort(),y=a.selectedIds,M=!this.isArrayEqual(N,y);!y.length&&N.length?c="select":M&&!N.length?c="clear":c=M?"select":"update",l=w.selectIds||[];const v=w.selectRect||w.rect||((p=w.updateNodeOpt)==null?void 0:p.rect);v&&j.isNumber(v.x)&&j.isNumber(v.y)&&j.isNumber(v.w)&&j.isNumber(v.h)&&(u={x:v.x,y:v.y,w:v.w,h:v.h})}else{if(!a.selectedIds.length)return;c="clear",l=[],u=void 0}const h=!this.isRectEqual(a.viewRect,u);if(!!this.isArrayEqual(a.selectedIds,l)&&!h)return;s.set(t,{selectedIds:l,viewRect:u});const f={viewId:n,scenePath:e,uid:t,selectorId:r,source:"sync",action:c,viewRect:u,selectedIds:l,selectedElements:this.buildRemoteSelectedElements(n,e,t,l)};this.control.publicMsgEmitter.emit("remoteSelectorChange",f),this.logRemoteSelector(n,t,c,l.length)}logRemoteSelector(n,e,t,r){var a,c;const i=`${oe} remoteSelectorChange uid=${e} action=${t} viewId=${n} count=${r}`,s=this.getDebounceLogger();if(s!=null&&s.infoDebounced){s.infoDebounced(`remote-selector:${n}@${e}`,i);return}(c=(a=this.logger)==null?void 0:a.info)==null||c.call(a,i)}genRequestId(n){return`${n}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`}setPendingCameraChange(n,e){this.clearPendingCameraChange(n);const t=setTimeout(()=>{const r=this.pendingCameraChangeByView.get(n);(r==null?void 0:r.ts)===e.ts&&this.pendingCameraChangeByView.delete(n)},400);this.pendingCameraChangeByView.set(n,{...e,timer:t})}clearPendingCameraChange(n){const e=this.pendingCameraChangeByView.get(n);e!=null&&e.timer&&clearTimeout(e.timer),this.pendingCameraChangeByView.delete(n)}getDebounceLogger(){return this.logger}detectSelectorTransforming(n){var l,u,h,d,f;const e=this.control.worker;if(!e)return null;const t=(l=e.getLocalWorkViewId)==null?void 0:l.call(e),r=e.isLocalWorkActive===!0&&t===n,i=(u=e.currentLocalWorkData)==null?void 0:u.workState,s=(f=(d=(h=this.control.viewContainerManager.getView(n))==null?void 0:h.displayer)==null?void 0:d.vDom)==null?void 0:f.state,a=s==null?void 0:s.operationType,c=a===B.TranslateNode||a===B.ScaleNode||a===B.RotateNode||a===B.SetPoint;return r&&c&&i&&i!==E.Pending&&i!==E.Done||r&&c?"selector-transforming":e.isBusy===!0?"busy":null}isArrayEqual(n,e){if(n.length!==e.length)return!1;for(let t=0;t<n.length;t++)if(n[t]!==e[t])return!1;return!0}isRectEqual(n,e){return!n&&!e?!0:!n||!e?!1:n.x===e.x&&n.y===e.y&&n.w===e.w&&n.h===e.h}onPropertyApplied(n){const{type:e,viewId:t,requestId:r,data:i}=n,s=e===B.SetFontStyle&&i.fontSize!==void 0||e===B.SetColorNode&&i.thickness!==void 0;this.tryResolveUpdateElements(t,r,e,s),s&&this.schedulePropertyGeometryEmit(t,e,r)}schedulePropertyGeometryEmit(n,e,t){const r=t?`property-geometry:${n}:${e}:${t}`:`property-geometry:${n}:${e}`,i=this.pendingPropertyGeometryByKey.get(r);i!=null&&i.timer&&clearTimeout(i.timer);const s=setTimeout(()=>{this.pendingPropertyGeometryByKey.delete(r);const a=this.getSelectedElements(n);if(!a||!a.selectedIds.length)return;const c=e===B.SetFontStyle?"setFontStyle":"setStyle",l={viewId:n,scenePath:a.scenePath,selectorId:q,source:"property-change",action:c,viewRect:a.viewRect,requestId:t};this.lastViewRectByView.set(n,a.viewRect),this.control.publicMsgEmitter.emit("selectorGeometryChange",l),this.logGeometry(n,c,a.selectedIds.length)},0);this.pendingPropertyGeometryByKey.set(r,{timer:s,viewId:n,type:e,requestId:t})}lookupToolsType(n,e,t){var a,c,l,u;const r=this.control.collector;if(!r)return;const i=(a=r.isLocalId)!=null&&a.call(r,t)&&typeof r.transformKey=="function"?r.transformKey(t):t,s=(u=(l=(c=r.storage)==null?void 0:c[n])==null?void 0:l[e||""])==null?void 0:u[i];return s==null?void 0:s.toolsType}validateStrokeTypeForChanges(n,e,t,r){return e.strokeType===void 0?e:So(e.strokeType)?(pi(t,e.strokeType)||r.push({id:n,field:"strokeType",code:"unsupported-by-toolsType",toolsType:t,message:`strokeType not supported by toolsType=${t} for id=${n}, skipped`}),e):(r.push({id:n,field:"strokeType",code:"unsupported-value",toolsType:t,message:`strokeType=${e.strokeType} is not a valid EStrokeType for id=${n}, skipped`}),e)}flushUpdateSelectedElementsWarnings(n,e,t){var s,a,c,l;if(!t.length)return;const r=new Map,i=new Map;for(const u of t)if(u.code==="unsupported-by-toolsType"){const h=r.get(u.field)||{ids:[],toolsTypes:[]};h.ids.push(u.id),h.toolsTypes.push(u.toolsType),r.set(u.field,h)}else if(u.code==="unsupported-value"){const h=i.get(u.field)||[];h.push(u.id),i.set(u.field,h)}for(const[u,h]of r.entries()){const d=[...new Set(h.toolsTypes.filter(Boolean))].join(","),f=[...new Set(h.ids)].join(",");(a=(s=this.logger)==null?void 0:s.warn)==null||a.call(s,`${oe} updateSelectedElements warn unsupported-by-toolsType requestId=${e} viewId=${n} field=${u} toolsTypes=[${d}] ids=[${f}]`)}for(const[u,h]of i.entries())(l=(c=this.logger)==null?void 0:c.warn)==null||l.call(c,`${oe} updateSelectedElements warn unsupported-value requestId=${e} viewId=${n} field=${u} ids=[${[...new Set(h)].join(",")}]`)}collectPendingMethods(n){var t,r,i,s;const e=new Set;return(n.strokeColor!==void 0||n.fillColor!==void 0||n.fontColor!==void 0||n.fontBgColor!==void 0||n.thickness!==void 0||n.strokeType!==void 0)&&e.add(B.SetColorNode),(n.fontSize!==void 0||n.bold!==void 0||n.italic!==void 0||n.underline!==void 0||n.lineThrough!==void 0)&&e.add(B.SetFontStyle),n.isLocked!==void 0&&e.add(B.SetLock),n.zIndexLayer!==void 0&&e.add(B.ZIndexNode),(((t=n.shape)==null?void 0:t.vertices)!==void 0||((r=n.shape)==null?void 0:r.innerVerticeStep)!==void 0||((i=n.shape)==null?void 0:i.innerRatio)!==void 0||((s=n.shape)==null?void 0:s.placement)!==void 0)&&e.add(B.SetShapeOpt),e}hasApplicableChangesForToolsType(n,e){return e?qt(n).some(t=>t.startsWith("shape.")&&n.toolsType&&e!==n.toolsType?!1:Dt(e,t)):!1}buildUpdatedElementValue(n,e){var s,a,c,l;const t=e,r={...n,opt:n.opt?{...n.opt}:void 0},i=r.opt||{};return t.strokeColor!==void 0&&(i.strokeColor=t.strokeColor),t.fillColor!==void 0&&(i.fillColor=t.fillColor),t.thickness!==void 0&&(i.thickness=t.thickness),t.strokeType!==void 0&&(i.strokeType=t.strokeType),t.fontColor!==void 0&&(i.fontColor=t.fontColor),t.fontBgColor!==void 0&&(i.fontBgColor=t.fontBgColor),t.fontSize!==void 0&&(i.fontSize=t.fontSize),t.bold!==void 0&&(i.bold=t.bold),t.italic!==void 0&&(i.italic=t.italic),t.underline!==void 0&&(i.underline=t.underline),t.lineThrough!==void 0&&(i.lineThrough=t.lineThrough),t.isLocked!==void 0&&(i.locked=t.isLocked),((s=t.shape)==null?void 0:s.vertices)!==void 0&&(i.vertices=t.shape.vertices),((a=t.shape)==null?void 0:a.innerVerticeStep)!==void 0&&(i.innerVerticeStep=t.shape.innerVerticeStep),((c=t.shape)==null?void 0:c.innerRatio)!==void 0&&(i.innerRatio=t.shape.innerRatio),((l=t.shape)==null?void 0:l.placement)!==void 0&&(i.placement=t.shape.placement),r.opt=i,t.zIndexLayer!==void 0&&(r.updateNodeOpt={...r.updateNodeOpt||{},zIndexLayer:t.zIndexLayer}),r}normalizeUpdateElementInfo(n,e){var d,f;const t={...n},r=[],i=p=>{var w,N;p in t&&(delete t[p],r.push(p),(N=(w=this.logger)==null?void 0:w.warn)==null||N.call(w,`${oe} updateElement warn unsupported-by-toolsType toolsType=${e} field=${p}`))},s=p=>{var w,N;t.shape&&p in t.shape&&(delete t.shape[p],r.push(`shape.${p}`),(N=(w=this.logger)==null?void 0:w.warn)==null||N.call(w,`${oe} updateElement warn unsupported-by-toolsType toolsType=${e} field=shape.${p}`)),t.shape&&!Object.keys(t.shape).length&&delete t.shape},a=p=>{var w,N;p in t&&(r.push(p),(N=(w=this.logger)==null?void 0:w.warn)==null||N.call(w,`${oe} updateElement warn invalid-format toolsType=${e} field=${p} value=${JSON.stringify(t[p])}`),delete t[p])},c=p=>{var w,N;!t.shape||!(p in t.shape)||(r.push(`shape.${p}`),(N=(w=this.logger)==null?void 0:w.warn)==null||N.call(w,`${oe} updateElement warn invalid-format toolsType=${e} field=shape.${p} value=${JSON.stringify(t.shape[p])}`),delete t.shape[p],Object.keys(t.shape).length||delete t.shape)};"strokeColor"in t&&typeof t.strokeColor!="string"&&a("strokeColor"),"fillColor"in t&&typeof t.fillColor!="string"&&a("fillColor"),"fontColor"in t&&typeof t.fontColor!="string"&&a("fontColor"),"fontBgColor"in t&&typeof t.fontBgColor!="string"&&a("fontBgColor"),"thickness"in t&&!Number.isFinite(t.thickness)&&a("thickness"),"fontSize"in t&&!Number.isFinite(t.fontSize)&&a("fontSize"),"strokeType"in t&&!Object.values(ce).includes(t.strokeType)&&a("strokeType"),"strokeType"in t&&t.strokeType!==void 0&&!pi(e,t.strokeType)&&i("strokeType"),"bold"in t&&!Im.includes(t.bold)&&a("bold"),"italic"in t&&!wm.includes(t.italic)&&a("italic"),"underline"in t&&typeof t.underline!="boolean"&&a("underline"),"lineThrough"in t&&typeof t.lineThrough!="boolean"&&a("lineThrough"),"isLocked"in t&&typeof t.isLocked!="boolean"&&a("isLocked"),"zIndexLayer"in t&&![st.Top,st.Bottom].includes(t.zIndexLayer)&&a("zIndexLayer"),t.shape&&("vertices"in t.shape&&!Number.isFinite(t.shape.vertices)&&c("vertices"),"innerVerticeStep"in t.shape&&!Number.isFinite(t.shape.innerVerticeStep)&&c("innerVerticeStep"),"innerRatio"in t.shape&&!Number.isFinite(t.shape.innerRatio)&&c("innerRatio"),"placement"in t.shape&&!Tm.includes(t.shape.placement)&&c("placement"));const l=new Set(mm(e));return["strokeColor","fillColor","thickness","strokeType","fontColor","fontBgColor","fontSize","bold","italic","underline","lineThrough","isLocked","zIndexLayer"].forEach(p=>{l.has(p)||i(p)}),["vertices","innerVerticeStep","innerRatio","placement"].forEach(p=>{l.has(`shape.${p}`)||s(p)}),r.length&&((f=(d=this.logger)==null?void 0:d.info)==null||f.call(d,`${oe} updateElement filtered toolsType=${e} dropped=[${r.join(",")}]`)),t}dispatchUpdate(n,e,t,r,i=[]){const s=te.MainEngine,a={};t.strokeColor!==void 0&&(a.strokeColor=t.strokeColor),t.fillColor!==void 0&&(a.fillColor=t.fillColor),t.fontColor!==void 0&&(a.fontColor=t.fontColor),t.fontBgColor!==void 0&&(a.fontBgColor=t.fontBgColor),t.thickness!==void 0&&(a.thickness=t.thickness),t.strokeType!==void 0&&(a.strokeType=t.strokeType),Object.keys(a).length&&ee.emitMethod(s,B.SetColorNode,{workIds:e,viewId:n,requestId:r,workState:E.Done,...a});const c={};if(t.fontSize!==void 0&&(c.fontSize=t.fontSize),t.bold!==void 0&&(c.bold=t.bold),t.italic!==void 0&&(c.italic=t.italic),t.underline!==void 0&&(c.underline=t.underline),t.lineThrough!==void 0&&(c.lineThrough=t.lineThrough),Object.keys(c).length&&ee.emitMethod(s,B.SetFontStyle,{workIds:e,viewId:n,requestId:r,workState:E.Done,...c}),t.isLocked!==void 0&&ee.emitMethod(s,B.SetLock,{workIds:e,viewId:n,requestId:r,workState:E.Done,isLocked:t.isLocked}),t.zIndexLayer!==void 0&&ee.emitMethod(s,B.ZIndexNode,{workIds:e,viewId:n,requestId:r,workState:E.Done,layer:t.zIndexLayer}),t.shape){const l={};if(t.shape.vertices!==void 0&&(l.vertices=t.shape.vertices),t.shape.innerVerticeStep!==void 0&&(l.innerVerticeStep=t.shape.innerVerticeStep),t.shape.innerRatio!==void 0&&(l.innerRatio=t.shape.innerRatio),t.shape.placement!==void 0&&(l.placement=t.shape.placement),Object.keys(l).length){if(!i.length)return;i.forEach(u=>{ee.emitMethod(s,B.SetShapeOpt,{workIds:e,viewId:n,toolsType:u,requestId:r,workState:E.Done,...l})})}}}buildSelectedElementInfo(n,e,t,r){var w,N,y;const i=this.control.collector,s=i&&i.isLocalId(t)?i.transformKey(t):t,a=(y=(N=(w=i==null?void 0:i.storage)==null?void 0:w[n])==null?void 0:N[e||""])==null?void 0:y[s];if(!a)return;const c=a.toolsType,l=a.opt,u=a.updateNodeOpt||{},h={};(l==null?void 0:l.strokeColor)!==void 0&&(h.strokeColor=l.strokeColor),(l==null?void 0:l.fillColor)!==void 0&&(h.fillColor=l.fillColor),(l==null?void 0:l.thickness)!==void 0&&(h.thickness=l.thickness),(l==null?void 0:l.strokeType)!==void 0&&(h.strokeType=l.strokeType),(l==null?void 0:l.fontColor)!==void 0&&(h.fontColor=l.fontColor),(l==null?void 0:l.fontBgColor)!==void 0&&(h.fontBgColor=l.fontBgColor),(l==null?void 0:l.zIndex)!==void 0&&(h.zIndex=l.zIndex);const d={id:t,toolsType:c,style:h};if(r&&(j.isBoolean(r.canRotate)&&(d.canRotate=r.canRotate),j.isBoolean(r.canLock)&&(d.canLock=r.canLock),r.scaleType&&(d.scaleType=r.scaleType),j.isBoolean(r.isLocked)&&(d.isLocked=r.isLocked)),c===S.Text&&l){const M=l,v={text:M.text,fontSize:M.fontSize,fontFamily:M.fontFamily,bold:M.bold,italic:M.italic,underline:M.underline,lineThrough:M.lineThrough,textAlign:M.textAlign,verticalAlign:M.verticalAlign,boxPoint:M.boxPoint,boxSize:M.boxSize};d.text=v}if(c===S.Polygon){const M=l;d.shape={vertices:M.vertices}}else if(c===S.Star){const M=l;d.shape={vertices:M.vertices,innerVerticeStep:M.innerVerticeStep,innerRatio:M.innerRatio}}else if(c===S.SpeechBalloon){const M=l;d.shape={placement:M.placement}}const f=u.rect;f&&(d.rect={x:f.x,y:f.y,w:f.w,h:f.h});const p=u.centerPos;return p&&(d.centerPos=p),d}buildRemoteSelectedElements(n,e,t,r){if(!r.length)return[];const i=[];for(const s of r){const a=this.buildSelectedElementInfo(n,e,`${t}${Be}${s}`,void 0);a&&(a.id=s,i.push(a))}return i}logGeometry(n,e,t){var a,c;const r=`${oe} selectorGeometryChange action=${e} viewId=${n} count=${t}`,i=this.getDebounceLogger();if((e==="select"||e==="selectorTransform"||e==="cameraTransform")&&i!=null&&i.infoDebounced){i.infoDebounced(`selector-geometry:${n}:${e}`,r);return}(c=(a=this.logger)==null?void 0:a.info)==null||c.call(a,r)}}const vt="__undo_scope_clear_all__";function vm(o){const{viewId:n,scenePath:e,expectedAcks:t,fallbackTimer:r}=o;return{viewId:n,scenePath:e,expectedRender:t.render,expectedStorage:t.storage,gotRender:!t.render,gotStorage:!t.storage,scopeMode:t.scopeMode||"static",finalizeRequested:!1,collectedScopeKeys:new Set,scopeKeys:new Set,ackedStorageKeys:new Set,meta:{copyAck:t.copyAck,isWritable:t.isWritable},fallbackTimer:r}}function Cm(o,n){n&&(o.meta={...o.meta,...n})}function Nm(o){return(!o.expectedRender||o.gotRender)&&(!o.expectedStorage||o.gotStorage)}function km(o){return!o.ackTimer&&(o.gotRender||o.gotStorage)}function xm(o,n){return o.size>0?o.has(vt)?n===vt:!!n&&o.has(n):!n||o.has(n)}function Rn(o,n){const e=n.toString();return o.isLocalId(e)?o.transformKey(e):e}function On(o,n,e,t){var s,a;const r=new Set;if(!o)return r;const i=o.getStorageData(n,e);for(const c of t){if(c==null)continue;if(c===vt){r.add(vt);continue}const l=Rn(o,c),u=i==null?void 0:i[l];if(o.getLocalId(l)===q){(s=u==null?void 0:u.selectIds)==null||s.forEach(h=>{r.add(Rn(o,h))});continue}r.add(l),(a=u==null?void 0:u.selectIds)==null||a.forEach(h=>{r.add(Rn(o,h))})}return r}function Mi(o,n,e){return e!=null&&e.has(vt)?!n.has(o):e!=null&&e.size?e.has(o):!n.has(o)}const We=class We{constructor(n){I(this,"version",no);I(this,"plugin");I(this,"logger");I(this,"room");I(this,"play");I(this,"collector");I(this,"hasSwitchToSelectorEffect");I(this,"snapshootStateMap");I(this,"_disableDeviceInputs");I(this,"_disableEraseImage");I(this,"_disableEraseText");I(this,"_disableCameraTransform");I(this,"_disableUseWorker",!1);I(this,"initFontFaceTextRenderGate",!1);I(this,"initFontFaceTextRenderSkipped",!1);I(this,"effectResolve");I(this,"hotkeyManager");I(this,"pluginOptions");I(this,"roomMember");I(this,"cursor");I(this,"textEditorManager");I(this,"worker");I(this,"renderControl");I(this,"miniMapManager");I(this,"pluginManager");I(this,"onInitLoadingChange");I(this,"selectorApi");I(this,"_isPolyfill",{requestIdleCallback:!1,cancelIdleCallback:!1});I(this,"onSceneChange",async(n,e)=>{var s;const t=this.viewContainerManager.getView(e);t!=null&&t.focusScenePath&&(s=this.collector)!=null&&s.hasSelector(e,t.focusScenePath)&&this.worker.blurSelector(e,t.focusScenePath),this.textEditorManager.checkEmptyTextBlur();const r=t==null?void 0:t.displayer;r&&(r.setActive(!1),await r.stopEventHandler());const i=n;i&&this.viewContainerManager.setViewScenePath(e,i),r==null||r.setActive(!0)});I(this,"onRoomMembersChange",n=>{this.roomMember.setRoomMembers(an(n))});I(this,"onMemberChange",j.throttle(n=>{var s,a;if(!this.room||!this.worker||!n||!this.room.isWritable)return;const e=this.getToolsKey(n),t=(s=this.worker.getCurrentToolsData())==null?void 0:s.toolsType,r=this.viewContainerManager.focuedViewId;r&&t===S.Selector&&e!==S.Selector&&this.worker.blurCursor(r);const i=this.getToolsOpt(e,n);this.worker.setCurrentToolsData(i),(a=this.pluginManager)==null||a.dispatchPluginEvent("setToolkey",e),this.effectViewContainer(e),this.effectResolve&&this.effectResolve(!0)},100,{leading:!1}));I(this,"internalSceneChange",(n,e)=>{var t,r,i,s;this.isUseSimple||((t=this.miniMapManager)==null?void 0:t.activeViewId)===n&&((r=this.miniMapManager)==null||r.destroyMiniMap(n)),(i=this.pluginManager)==null||i.dispatchPluginEvent("sceneChange",n,e),(s=this.worker)==null||s.clearViewScenePath(n,!0).then(()=>{var a;(a=this.worker)==null||a.pullServiceData(n,e,{isAsync:!0,useAnimation:!1})})});I(this,"internalCameraChange",(n,e)=>{var t,r;(t=this.worker)==null||t.updateCamera(n,e),this.isUseSimple||(r=this.miniMapManager)==null||r.updateViewCamera(n,e)});var c,l;const{displayer:e,plugin:t,options:r,onInitLoadingChange:i}=n;this.plugin=t,this.onInitLoadingChange=i,this.room=H(e)?e:void 0,this.play=or(e)?e:void 0;let s;this.room&&(s=(c=this.room)==null?void 0:c.logger,this._disableDeviceInputs=this.room.disableDeviceInputs,this._disableEraseImage=this.room.disableEraseImage,this._disableEraseText=!1),this.pluginOptions=r,((l=r.extras)==null?void 0:l.useWorker)==="mainThread"?this._disableUseWorker=!0:this._disableUseWorker=ei!=="worker",this.roomMember=new WM;const a={control:this,internalMsgEmitter:We.InternalMsgEmitter,publicMsgEmitter:We.PublicMsgEmitter};this.cursor=new VM(a),this.textEditorManager=new Ff(a),this.worker=new im(a),this.hotkeyManager=new om(a),this.renderControl=new sm(a),this.pluginManager=new Si.PluginManager(a),this.isUseSimple||(this.miniMapManager=new am(a)),this.logger=new Cr(s)}get publicMsgEmitter(){return We.PublicMsgEmitter}get internalMsgEmitter(){return We.InternalMsgEmitter}emitInitLoadingChange(n){var e,t,r;try{(e=this.onInitLoadingChange)==null||e.call(this,n)}catch(i){(r=(t=this.logger)==null?void 0:t.error)==null||r.call(t,`[Appliance]: onInitLoadingChange error: ${(i==null?void 0:i.message)||i}`)}}emitFontFaceLoadState(n){var e,t;try{this.publicMsgEmitter.emit("fontFaceLoadState",n)}catch(r){(t=(e=this.logger)==null?void 0:e.error)==null||t.call(e,`[Appliance]: fontFaceLoadState listener error: ${(r==null?void 0:r.message)||r}`)}}emitFontFaceRenderState(n){var e,t;try{this.publicMsgEmitter.emit("fontFaceRenderState",n)}catch(r){(t=(e=this.logger)==null?void 0:e.error)==null||t.call(e,`[Appliance]: fontFaceRenderState listener error: ${(r==null?void 0:r.message)||r}`)}}hasPolyfillMethod(n){return this._isPolyfill[n]}registerPolyfillMethod(n){this._isPolyfill[n]=!0}get hasExtendFontFaces(){return this.extendFontFaces.length>0}get extendFontFaces(){var n;return((n=this.pluginOptions.extras.textEditor)==null?void 0:n.extendFontFaces)??ye.textEditor.extendFontFaces}get loadFontFacesTimeout(){var n;return((n=this.pluginOptions.extras.textEditor)==null?void 0:n.loadFontFacesTimeout)??ye.textEditor.loadFontFacesTimeout}loadFontFaces(){return this.worker.loadFontFaces()}beginInitFontFaceTextRenderGate(){this.initFontFaceTextRenderGate=!0,this.initFontFaceTextRenderSkipped=!1}markInitFontFaceTextRenderSkipped(){this.initFontFaceTextRenderGate&&(this.initFontFaceTextRenderSkipped=!0)}shouldHoldServiceTextRenderForFontFace(){return this.initFontFaceTextRenderGate}hasInitFontFaceTextRenderSkipped(){return this.initFontFaceTextRenderSkipped}endInitFontFaceTextRenderGate(){this.initFontFaceTextRenderGate=!1,this.initFontFaceTextRenderSkipped=!1}startInitFontFaceLoadAndRender(){this.hasExtendFontFaces&&(this.beginInitFontFaceTextRenderGate(),setTimeout(()=>{this.loadFontFaces().then(n=>{if(n.status==="success"&&(!this.worker.getLastFontFacesAlreadyReady()||this.hasInitFontFaceTextRenderSkipped()))return this.refreshTextRender()}).catch(n=>{var e,t;(t=(e=this.logger)==null?void 0:e.error)==null||t.call(e,`[Appliance]: init font face load and render failed: ${(n==null?void 0:n.message)||n}`)}).finally(()=>{this.endInitFontFaceTextRenderGate()})},0))}waitNextFrame(){return new Promise(n=>requestAnimationFrame(()=>n()))}getSortedRefreshViews(){const n=this.viewContainerManager.getAllViews().filter(t=>!!t),e=this.viewContainerManager.focuedViewId;return n.sort((t,r)=>t.id===e?-1:r.id===e?1:0)}escapeCssIdentifier(n){return typeof CSS<"u"&&typeof CSS.escape=="function"?CSS.escape(n):n.replace(/([ #;?%&,.+*~':"!^$[\]()=>|/@])/g,"\\$1")}getTextEditorElement(n,e){var i;const t=`.editor-box #${this.escapeCssIdentifier(e)}`,r=[];n.container&&r.push(n.container),(i=n.viewData)!=null&&i.divElement&&r.push(n.viewData.divElement),n.displayer.eventTragetElement&&r.push(n.displayer.eventTragetElement),r.push(document);for(const s of r){const a=s.querySelector(t);if(a)return a}return document.getElementById(e)}measureViewTextEditorsForRender(n){const e=this.viewContainerManager.getView(n);if(!e)return{changed:!1,tasks:[]};let t=!1;const r=[];return this.textEditorManager.filterEditor(n).forEach((s,a)=>{const c=this.getTextEditorElement(e,a);let l=s.opt;if(c){const h=[c.offsetWidth,c.offsetHeight];h[0]&&h[1]&&!j.isEqual(s.opt.boxSize,h)&&(l={...s.opt,boxSize:h},this.textEditorManager.updateForViewEdited(a,{...s,opt:l,canSync:!1,canWorker:!1,skipStorageDispatch:!0}),t=!0)}const u=this.textEditorManager.get(a)||s;r.push({viewId:n,scenePath:u.scenePath,workId:a,opt:u.opt})}),{changed:t,tasks:r}}async refreshViewTextRenderInternal(n){const e=this.viewContainerManager.getView(n),t=e==null?void 0:e.focusScenePath;if(!t||!this.collector)return{status:"error"};const r=this.collector.getStorageData(n,t);if(this.textEditorManager.clear(n,!0),r)for(const c of Object.keys(r)){const l=r[c];if(!l||l.toolsType!==S.Text)continue;const u=l.type;if(!u||!this.renderControl.isFilterAble({viewId:n,elementId:c,scenePath:t},u))continue;const h={...l,workId:this.collector.isOwn(c)?this.collector.getLocalId(c):c,msgType:u,dataType:J.Service,viewId:n,scenePath:t};this.textEditorManager.deriveTextEditorInfoFromServiceData(h,{canWorker:!1,canSync:!1,updateView:!1})}await this.viewContainerManager.renderTextEditorInfoAsync(n,this.textEditorManager.activeId),await this.waitNextFrame();const{changed:i,tasks:s}=this.measureViewTextEditorsForRender(n);return i&&(await this.viewContainerManager.renderTextEditorInfoAsync(n,this.textEditorManager.activeId),await this.waitNextFrame()),{status:await this.worker.refreshTextRenderForWorker(s)?"success":"error"}}async refreshViewTextRender(n,e=!0){var t,r;e&&this.emitFontFaceRenderState({status:"start"});try{const i=await this.refreshViewTextRenderInternal(n);return e&&this.emitFontFaceRenderState({status:i.status==="success"?"success":"error"}),i}catch(i){return(r=(t=this.logger)==null?void 0:t.error)==null||r.call(t,`[Appliance]: refreshViewTextRender failed: ${(i==null?void 0:i.message)||i}`),e&&this.emitFontFaceRenderState({status:"error"}),{status:"error"}}}async refreshTextRender(){var e,t;this.emitFontFaceRenderState({status:"start"});let n="success";try{for(const r of this.getSortedRefreshViews())(await this.refreshViewTextRenderInternal(r.id)).status==="error"&&(n="error");return this.emitFontFaceRenderState({status:n}),{status:n}}catch(r){return(t=(e=this.logger)==null?void 0:e.error)==null||t.call(e,`[Appliance]: refreshTextRender failed: ${(r==null?void 0:r.message)||r}`),this.emitFontFaceRenderState({status:"error"}),{status:"error"}}}async refreshViewRender(n){var e,t;try{const r=this.viewContainerManager.getView(n),i=r==null?void 0:r.focusScenePath;return i?(await this.worker.clearViewScenePath(n,!0),this.worker.pullServiceData(n,i,{isAsync:!0,useAnimation:!1}),await this.viewContainerManager.updateTextEditorInfoAsync(n,this.textEditorManager.activeId),await this.waitNextFrame(),{status:"success"}):{status:"error"}}catch(r){return(t=(e=this.logger)==null?void 0:e.error)==null||t.call(e,`[Appliance]: refreshViewRender failed: ${(r==null?void 0:r.message)||r}`),{status:"error"}}}async refreshRender(){let n="success";for(const e of this.getSortedRefreshViews())(await this.refreshViewRender(e.id)).status==="error"&&(n="error");return{status:n}}get disableEraseText(){return this._disableEraseText||!1}set disableEraseText(n){this._disableEraseText=n}get disableEraseImage(){return this._disableEraseImage||!1}set disableEraseImage(n){this._disableEraseImage=n,this.room.disableEraseImage=n}get disableDeviceInputs(){return this._disableDeviceInputs||!1}set disableDeviceInputs(n){var t;this._disableDeviceInputs=n;const e=(t=this.worker.getCurrentToolsData())==null?void 0:t.toolsType;e&&this.effectViewContainer(e)}get disableCameraTransform(){return this._disableCameraTransform||!1}set disableCameraTransform(n){this._disableCameraTransform=n,this.room.disableCameraTransform=n}get disableUseWorker(){return this._disableUseWorker||!1}set disableUseWorker(n){this._disableUseWorker=n}get hasOffscreenCanvas(){return this._disableUseWorker?!1:ei==="worker"}get canUseTransferControlToOffscreen(){return this._disableUseWorker?!1:!!HTMLCanvasElement.prototype.transferControlToOffscreen}get isUseOffscreenTransfer(){return this.isUseSimple&&this.hasOffscreenCanvas&&this.canUseTransferControlToOffscreen}get isUseSimple(){return this.pluginOptions.extras.useSimple}get isUseBackgroundThread(){return this.pluginOptions.extras.useBackgroundThread}bindPlugin(n){this.plugin=n,this.collector&&(this.collector.removeStorageStateListener(),this.collector.removeAuthStateListener()),this.collector=new _e(this,n,this.pluginOptions.extras.syncOpt.interval),this.activePlugin(),this.selectorApi&&this.selectorApi.destroy(),this.selectorApi=new Sm(this)}destroy(){var n,e,t,r,i,s,a,c;this.roomMember.destroy(),(n=this.collector)==null||n.destroy(),(e=this.worker)==null||e.destroy(),(t=this.viewContainerManager)==null||t.destroy(),(r=this.cursor)==null||r.destroy(),(i=this.textEditorManager)==null||i.destory(),(s=this.pluginManager)==null||s.destroy(),(a=this.miniMapManager)==null||a.destroyMiniMap(),(c=this.selectorApi)==null||c.destroy(),this.selectorApi=void 0}cleanCurrentScene(){var t,r;const n=this.worker.now,e=this.worker.getLocalWorkViewId()||this.viewContainerManager.focuedViewId;if(e){const i=this.viewContainerManager.getCurScenePath(e),s=(i&&((r=(t=this.collector)==null?void 0:t.storage[e])!=null&&r[i])?Object.keys(this.collector.storage[e][i]):[])||[];We.InternalMsgEmitter.emit("addUndoTicker",n,e,{render:!0,storage:!0}),s.length&&We.InternalMsgEmitter.emit("finalizeRequested",n,e,[vt],i),this.worker.clearViewScenePath(e,!1,!0).then(()=>{We.InternalMsgEmitter.emit("ackRenderUndoTicker",n,e,i),We.InternalMsgEmitter.emit("ackStorageUndoTicker",n,e,i,vt)})}}async setWritable(n){var e,t;if(!n){(e=this.cursor)==null||e.unabled(),this.textEditorManager.checkEmptyTextBlur();const r=this.viewContainerManager.getAllViews();for(const i of r){i!=null&&i.focusScenePath&&(t=this.collector)!=null&&t.hasSelector(i.id,i.focusScenePath)&&this.worker.blurSelector(i.id,i.focusScenePath);const s=i==null?void 0:i.displayer;s&&(s.setActive(!1),await s.stopEventHandler())}}await new Promise(r=>{setTimeout(()=>{r()},500)})}onWritableChange(n){var r;n?this.worker.abled():this.worker.unWritable(),((r=this.worker.getCurrentToolsData())==null?void 0:r.toolsType)===S.Text&&this.viewContainerManager.focuedViewId&&(n?this.viewContainerManager.activeTextEditor(this.viewContainerManager.focuedViewId):this.viewContainerManager.unActiveTextEditor(this.viewContainerManager.focuedViewId)),this.renderControl.onWritableChange(n),this.viewContainerManager.getAllViews().forEach(i=>{const s=i==null?void 0:i.displayer;s&&(s.bindToolsClass(),n?s.setActive(!0):s.setActive(!1))})}getToolsKey(n){const e=n.currentApplianceName;switch(this.hasSwitchToSelectorEffect=!1,e){case ie.text:return n.textCompleteToSelector&&(this.hasSwitchToSelectorEffect=!0),S.Text;case ie.pencil:return n.useLaserPen?S.LaserPen:S.Pencil;case ie.eraser:return S.Eraser;case ie.pencilEraser:return this.pluginOptions.extras.pencilEraser.useBitMap===!1?S.PencilEraser:S.BitMapEraser;case ie.selector:return S.Selector;case ie.arrow:return n.arrowCompleteToSelector&&(this.hasSwitchToSelectorEffect=!0),S.Arrow;case ie.straight:return n.straightCompleteToSelector&&(this.hasSwitchToSelectorEffect=!0),S.Straight;case ie.ellipse:return n.ellipseCompleteToSelector&&(this.hasSwitchToSelectorEffect=!0),S.Ellipse;case ie.rectangle:return n.rectangleCompleteToSelector&&(this.hasSwitchToSelectorEffect=!0),S.Rectangle;case ie.shape:if(n.shapeCompleteToSelector&&(this.hasSwitchToSelectorEffect=!0),n.shapeType===Ue.Pentagram||n.shapeType===Ue.Star)return S.Star;if(n.shapeType===Ue.Polygon||n.shapeType===Ue.Triangle||n.shapeType===Ue.Rhombus)return S.Polygon;if(n.shapeType===Ue.SpeechBalloon)return S.SpeechBalloon;break}return S.Clicker}getToolsOpt(n,e){if(n===S.Clicker)return{toolsType:n,toolsOpt:{}};const t={strokeColor:bt(e.strokeColor[0],e.strokeColor[1],e.strokeColor[2],e.strokeOpacity||1),thickness:e.strokeWidth,isOpacity:(e==null?void 0:e.strokeOpacity)&&e.strokeOpacity<1||(e==null?void 0:e.fillOpacity)&&e.fillOpacity<1||(e==null?void 0:e.textOpacity)&&e.textOpacity<1||(e==null?void 0:e.textBgOpacity)&&e.textBgOpacity<1||!1};switch(n){case S.Text:t.fontFamily=window.getComputedStyle(document.documentElement).getPropertyValue("font-family"),t.fontSize=(e==null?void 0:e.textSizeOverride)||(e==null?void 0:e.textSize)||Number(window.getComputedStyle(document.body).fontSize),t.textAlign=(e==null?void 0:e.textAlign)||"left",t.verticalAlign=(e==null?void 0:e.verticalAlign)||"middle",t.fontColor=(e==null?void 0:e.textColor)&&bt(e.textColor[0],e.textColor[1],e.textColor[2],e.textOpacity||1)||t.strokeColor||"rgba(0,0,0,1)",t.fontBgColor=Array.isArray(e==null?void 0:e.textBgColor)&&bt(e.textBgColor[0],e.textBgColor[1],e.textBgColor[2],e.textBgOpacity||1)||"transparent",t.bold=(e==null?void 0:e.bold)&&"bold"||void 0,t.italic=(e==null?void 0:e.italic)&&"italic"||void 0,t.underline=(e==null?void 0:e.underline)||void 0,t.lineThrough=(e==null?void 0:e.lineThrough)||void 0,t.text="",t.strokeColor=void 0;break;case S.Pencil:{const r=(e==null?void 0:e.strokeType)||ce.Normal;t.strokeType=r,t.autoShape=!!(e!=null&&e.autoShape),t.previewLocalOnly=!!(e!=null&&e.autoShape),t.lineCap=this.getLineCap(r),t.lineDash=this.getLineDash(r);break}case S.PencilEraser:case S.BitMapEraser:case S.Eraser:t.thickness=Math.min(4,Math.max(1,Math.floor(e.pencilEraserSize||1)))-1;break;case S.LaserPen:{t.duration=(e==null?void 0:e.duration)||1,e!=null&&e.strokeType&&(e==null?void 0:e.strokeType)===ce.Stroke?t.strokeType=ce.Normal:t.strokeType=(e==null?void 0:e.strokeType)||ce.Normal;const r=t.strokeType;t.lineCap=this.getLineCap(r),t.lineDash=this.getLineDash(r);break}case S.Arrow:case S.Straight:{e!=null&&e.strokeType&&(e==null?void 0:e.strokeType)===ce.Stroke?t.strokeType=ce.Normal:t.strokeType=(e==null?void 0:e.strokeType)||ce.Normal;const r=t.strokeType;t.strokeType=r,t.lineCap=this.getLineCap(r),t.lineDash=this.getLineDash(r);break}case S.Ellipse:case S.Rectangle:case S.Star:case S.Polygon:case S.SpeechBalloon:{e!=null&&e.strokeType&&(e==null?void 0:e.strokeType)===ce.Stroke?t.strokeType=ce.Normal:t.strokeType=(e==null?void 0:e.strokeType)||ce.Normal;const r=t.strokeType;t.lineCap=this.getLineCap(r),t.lineDash=this.getLineDash(r),n===S.Star&&(e.shapeType===Ue.Pentagram?(t.vertices=10,t.innerVerticeStep=2,t.innerRatio=.4):e!=null&&e.vertices&&(e!=null&&e.innerVerticeStep)&&(e!=null&&e.innerRatio)&&(t.vertices=e.vertices,t.innerVerticeStep=e.innerVerticeStep,t.innerRatio=e.innerRatio)),n===S.Polygon&&(e.shapeType===Ue.Triangle?t.vertices=3:e.shapeType===Ue.Rhombus?t.vertices=4:e.vertices&&(t.vertices=e.vertices)),t.fillColor=(e==null?void 0:e.fillColor)&&bt(e.fillColor[0],e.fillColor[1],e.fillColor[2],e==null?void 0:e.fillOpacity)||"transparent",n===S.SpeechBalloon&&(t.placement=e.placement||"bottomLeft");break}}return{toolsType:n,toolsOpt:t}}getLineCap(n){switch(n){case ce.Normal:return this.pluginOptions.extras.normalStroke.lineCap||ye.normalStroke.lineCap;case ce.Dotted:return this.pluginOptions.extras.dottedStroke.lineCap||ye.dottedStroke.lineCap;case ce.LongDotted:return this.pluginOptions.extras.longDottedStroke.lineCap||ye.longDottedStroke.lineCap;default:return}}getLineDash(n){switch(n){case ce.Normal:return;case ce.Dotted:{const{segment:e,gap:t}=this.pluginOptions.extras.dottedStroke||ye.dottedStroke;return[e,t]}case ce.LongDotted:{const{segment:e,gap:t}=this.pluginOptions.extras.longDottedStroke||ye.longDottedStroke;return[e,t]}default:return}}effectViewContainer(n){var e,t,r,i,s;if(this.disableDeviceInputs===!0)this.room.disableDeviceInputs=!0,(e=this.worker)==null||e.unWritable(),(t=this.cursor)==null||t.unabled();else switch(n!==S.Text&&this.viewContainerManager.focuedViewId&&this.viewContainerManager.unActiveTextEditor(this.viewContainerManager.focuedViewId),n){case S.Text:case S.Pencil:case S.LaserPen:case S.Arrow:case S.Straight:case S.Rectangle:case S.Ellipse:case S.Star:case S.Polygon:case S.SpeechBalloon:case S.Triangle:case S.Rhombus:case S.Eraser:case S.PencilEraser:case S.BitMapEraser:case S.Selector:this.room.disableDeviceInputs=!0,(r=this.worker)==null||r.abled(),n===S.Text&&this.viewContainerManager.focuedViewId&&this.viewContainerManager.activeTextEditor(this.viewContainerManager.focuedViewId);break;default:this.room.disableDeviceInputs=!1,(i=this.worker)==null||i.unWritable(),(s=this.cursor)==null||s.unabled();break}setTimeout(()=>{this.viewContainerManager.getAllViews().forEach(c=>{c!=null&&c.displayer&&c.displayer.bindToolsClass()})},0)}async getBoundingRect(n){var t,r,i,s,a;const e=await((t=this.worker)==null?void 0:t.getBoundingRect(n));if(e){const c=((i=(r=this.viewContainerManager.mainView)==null?void 0:r.viewData)==null?void 0:i.convertToPointInWorld({x:e.x,y:e.y}))||{x:e.x,y:e.y},l=((a=(s=this.viewContainerManager.mainView)==null?void 0:s.viewData)==null?void 0:a.camera.scale)||1;return{width:Math.floor(e.w/l)+1,height:Math.floor(e.h/l)+1,originX:c.x,originY:c.y}}}async screenshotToCanvas(n,e,t,r,i,s,a){const c=await this.worker.getSnapshot(e,t,r,i);c&&c.forEach(l=>{if(l)try{console.log("[screenshotToCanvas] Drawing ImageBitmap:",l.width,l.height),n.drawImage(l,s||0,a||0)}catch(u){console.error("[screenshotToCanvas] Failed to draw ImageBitmap:",u)}l instanceof ImageBitmap?l.close():l instanceof HTMLImageElement&&l.remove()})}async scenePreview(n,e){var s,a,c,l;const t=(s=this.collector)==null?void 0:s.getViewIdBySecenPath(n);if(!t)return;const r=this.viewContainerManager.getView(t);if(!r||!((a=r.cameraOpt)!=null&&a.width)||!((c=r.cameraOpt)!=null&&c.height))return;const i=await((l=this.worker)==null?void 0:l.getSnapshot(n));if(i&&this.worker){const u=document.createElement("canvas"),h=u.getContext("2d"),{width:d,height:f}=r.cameraOpt;u.width=d,u.height=f,h&&(i.forEach(p=>{p&&(h.drawImage(p,0,0),p instanceof ImageBitmap?p.close():p instanceof HTMLImageElement&&p.remove())}),e.crossOrigin="anonymous",e.src=u.toDataURL(),e.onload=()=>{u.remove()},e.onerror=()=>{u.remove(),e.remove()})}}switchToText(){var n;(n=this.room)==null||n.setMemberState({currentApplianceName:ie.text})}switchToSelector(){var n;(n=this.room)==null||n.setMemberState({currentApplianceName:ie.selector})}async runEffectWork(n){if(this.hasSwitchToSelectorEffect){const e=await new Promise(t=>{this.switchToSelector(),this.effectResolve=t});this.effectResolve=void 0,e&&n&&n()}}setSnapshootData(){var n;this.room&&(this.snapshootStateMap=new Map,this.snapshootStateMap.set("memberState",(n=this.room)==null?void 0:n.state.memberState))}getSnapshootData(n){var e;return(e=this.snapshootStateMap)==null?void 0:e.get(n)}clearSnapshootData(){var n;(n=this.snapshootStateMap)==null||n.clear(),this.snapshootStateMap=void 0}useBitMapEraser(n){this.pluginOptions.extras.pencilEraser.useBitMap=n}consoleWorkerInfo(){var n;(n=this.worker)==null||n.consoleWorkerInfo()}filterRenderByUid(n,e,t=!0){var i;this.viewContainerManager.getView(n)&&((i=this.renderControl)==null||i.publishRender({viewId:n,option:e,isSync:t}))}cancelFilterRender(n,e=!0){var t;(t=this.renderControl)==null||t.publishRender({viewId:n,isSync:e})}async createMiniMap(n,e){var r,i,s;if(this.isUseSimple)throw new Error("simple mode not support createMiniMap");const t=await((r=this.miniMapManager)==null?void 0:r.getMiniMapCamera(n));if(t&&await((i=this.miniMapManager)==null?void 0:i.createMiniMap(n,e,t))){const c=(s=this.miniMapManager)==null?void 0:s.getMiniMapCanvas(n);if(c){const l=c.getContext("2d");if(l){const u=this.viewContainerManager.getView(n);u!=null&&u.focusScenePath&&this.screenshotToCanvas(l,u.focusScenePath,t.width,t.height,t)}}}}async destroyMiniMap(n){var e;(e=this.miniMapManager)==null||e.destroyMiniMap(n)}insertIconify(n,e){var r;if(this.viewContainerManager.getView(n)&&this.room){const i=this.room.state.memberState,s=bt(i.strokeColor[0],i.strokeColor[1],i.strokeColor[2],i.strokeOpacity||1);(r=this.worker)==null||r.insertIconify(n,{...e,strokeColor:s})}}insertBackgroundSVG(n,e){var t;if(!this.isUseBackgroundThread)throw new Error("useBackgroundThread of pluginOptions should be true");(t=this.worker)==null||t.insertBackgroundSVG(n,e)}async insertBackgroundMarkMap(n,e){var t;if(!this.isUseBackgroundThread)throw new Error("useBackgroundThread of pluginOptions should be true");return await((t=this.worker)==null?void 0:t.insertBackgroundMarkMap(n,e))}updateBackgroundMarkMap(n,e,t){var i;const r=this.viewContainerManager.getView(n);if(r&&this.collector&&this.collector.hasTargetDataByViewId(n,e)){const{data:s,scenePath:a}=this.collector.getTargetDataByViewId(n,e);if(!a)throw new Error("updateBackgroundMarkMap scenePath is not exist");const c=r.focusScenePath;if(c&&c!==a)throw new Error("updateBackgroundMarkMap scenePath is not the focus scene path");if(s&&a)(i=this.worker)==null||i.updateBackgroundMarkMap(n,e,t);else throw new Error("updateBackgroundMarkMap data or scenePath is not exist")}}usePlugin(n){var e;return(e=this.pluginManager)==null?void 0:e.use(n)}async stopDraw(n){var t;const e=this.viewContainerManager.getView(n);e&&await((t=e.displayer)==null?void 0:t.stopEventHandler())}async setViewLocalScenePathChange(n,e){this.viewContainerManager.getView(n)&&await this.onSceneChange(e,n)}};I(We,"InternalMsgEmitter",new Fn),I(We,"PublicMsgEmitter",new Fn);let fe=We;var Jn=(o=>(o.Undo="undo",o.Redo="redo",o))(Jn||{});const he=class he{createProxy(n,e,t){const r=new Proxy(n,{get(i,s,a){if(typeof s=="string"&&/^\d+$/.test(s))return Reflect.get(i,s,a);const c=he.interceptors.hasOwnProperty(s)?he.interceptors:i,l=Reflect.get(c,s,a);return typeof l=="function"&&c===he.interceptors?l.bind(r):l},set(i,s,a,c){const l=he.proxyCallbacks.get(c),u=(l==null?void 0:l.arrayType)||"undo";if(s==="length"){const h=i.length,d=[];if(a<h)for(let p=a;p<h;p++)d.push(i[p]);const f=Reflect.set(i,s,a,c);if(l!=null&&l.callback)for(let p=0;p<d.length;p++)l.callback({operation:"delete",index:a+p,oldValue:d[p],arrayType:u});return f}return typeof s=="string"&&/^\d+$/.test(s),Reflect.set(i,s,a,c)},deleteProperty(i,s){const a=he.proxyCallbacks.get(r),c=(a==null?void 0:a.arrayType)||"undo";if(typeof s=="string"&&/^\d+$/.test(s)){const l=parseInt(s,10),u=i[l],h=Reflect.deleteProperty(i,s);return a!=null&&a.callback&&u!==void 0&&a.callback({operation:"delete",index:l,oldValue:u,arrayType:c}),h}return Reflect.deleteProperty(i,s)}});return he.proxyToRaw.set(r,n),he.proxyCallbacks.set(r,{callback:e,arrayType:t}),r}};I(he,"proxyToRaw",new WeakMap),I(he,"proxyCallbacks",new WeakMap),I(he,"interceptors",{entries(...n){return he.proxyToRaw.get(this).entries(...n)},forEach(...n){return he.proxyToRaw.get(this).forEach(...n)},map(...n){return he.proxyToRaw.get(this).map(...n)},filter(...n){return he.proxyToRaw.get(this).filter(...n)},find(...n){return he.proxyToRaw.get(this).find(...n)},findIndex(...n){return he.proxyToRaw.get(this).findIndex(...n)},includes(...n){return he.proxyToRaw.get(this).includes(...n)},indexOf(...n){return he.proxyToRaw.get(this).indexOf(...n)},slice(...n){return he.proxyToRaw.get(this).slice(...n)},concat(...n){return he.proxyToRaw.get(this).concat(...n)},push(...n){const e=he.proxyToRaw.get(this),t=this,r=he.proxyCallbacks.get(t),i=(r==null?void 0:r.arrayType)||"undo",s=e.length,a=e.push(...n);if(r!=null&&r.callback)for(let c=s;c<e.length;c++)r.callback({operation:"add",index:c,newValue:e[c],arrayType:i});return a},customPush(...n){return he.proxyToRaw.get(this).push(...n)},pop(){const n=he.proxyToRaw.get(this),e=this,t=he.proxyCallbacks.get(e),r=(t==null?void 0:t.arrayType)||"undo",i=n.length,s=n[i-1],a=n.pop();return t!=null&&t.callback&&i>0&&t.callback({operation:"delete",index:i-1,oldValue:s,arrayType:r}),a},shift(){const n=he.proxyToRaw.get(this),e=this,t=he.proxyCallbacks.get(e),r=(t==null?void 0:t.arrayType)||"undo",i=n[0],s=n.shift();return t!=null&&t.callback&&n.length>0&&t.callback({operation:"delete",index:0,oldValue:i,arrayType:r}),s},unshift(...n){const e=he.proxyToRaw.get(this),t=this,r=he.proxyCallbacks.get(t),i=(r==null?void 0:r.arrayType)||"undo",s=e.unshift(...n);if(r!=null&&r.callback)for(let a=0;a<n.length;a++)r.callback({operation:"add",index:a,newValue:e[a],arrayType:i});return s},splice(n,e,...t){const r=he.proxyToRaw.get(this),i=this,s=he.proxyCallbacks.get(i),a=(s==null?void 0:s.arrayType)||"undo",c=e??r.length-n,l=r.slice(n,n+c),u=r.splice(n,c,...t);if(s!=null&&s.callback){for(let h=0;h<l.length;h++)s.callback({operation:"delete",index:n+h,oldValue:l[h],arrayType:a});for(let h=0;h<t.length;h++)s.callback({operation:"add",index:n+h,newValue:r[n+h],arrayType:a})}return u},customSplice(n,e,...t){const r=he.proxyToRaw.get(this),i=e??r.length-n;return r.splice(n,i,...t)},get length(){return he.proxyToRaw.get(this).length},set length(n){const e=he.proxyToRaw.get(this),t=this,r=he.proxyCallbacks.get(t),i=(r==null?void 0:r.arrayType)||"undo",s=e.length,a=[];if(n<s)for(let c=n;c<s;c++)a.push(e[c]);if(e.length=n,r!=null&&r.callback)for(let c=0;c<a.length;c++)r.callback({operation:"delete",index:n+c,oldValue:a[c],arrayType:i})}});let Xn=he;const Xe=class Xe{constructor(n){I(this,"emitter",new Fn);I(this,"undoStack");I(this,"redoStack");I(this,"worker");I(this,"control");I(this,"room");I(this,"viewId");I(this,"enableGlobal");I(this,"isTicking");I(this,"_undoTickerId");I(this,"scenePath");I(this,"tickStartStorerCache");I(this,"excludeIds",new Set);I(this,"pendingState",new Map);I(this,"tickStartCaches",new Map);I(this,"tickStartExcludeIds",new Map);I(this,"timingFix");I(this,"ackTimeout");I(this,"gracePeriodTimeout");I(this,"doingFallbackTimeout");I(this,"isGlobalStackTransaction",!1);I(this,"pendingGlobalServiceData");I(this,"pendingArrayChanges",[]);I(this,"onChangeScene",j.debounce(()=>{const n=this.control.viewContainerManager.getCurScenePath(this.viewId);if(n){const e=this.undoStack.filter(r=>r.scenePath===n).length,t=this.redoStack.filter(r=>r.scenePath===n).length;this.emitUndoStepsUpdate(e),this.emitRedoStepsUpdate(t)}},Xe.waitTime));const{control:e,internalMsgEmitter:t,viewId:r,enableGlobal:i}=n;this.control=e,this.emitter=t;const s=this.control.pluginOptions.extras.undoRedo;Xe.MaxStackLength=s.maxStackLength||ye.undoRedo.maxStackLength,this.timingFix=s.timingFix??ye.undoRedo.timingFix,this.ackTimeout=s.ackTimeout||ye.undoRedo.ackTimeout,this.gracePeriodTimeout=s.gracePeriodTimeout||ye.undoRedo.gracePeriodTimeout,this.doingFallbackTimeout=s.doingFallbackTimeout||ye.undoRedo.doingFallbackTimeout;const a=new Xn,c=[],l=[];this.undoStack=a.createProxy(c,u=>{this.control.renderControl.isWritable&&this.handleArrayChange(u,be.syncUndoStack)},Jn.Undo),this.redoStack=a.createProxy(l,u=>{this.control.renderControl.isWritable&&this.handleArrayChange(u,be.syncRedoStack)},Jn.Redo),this.room=e.room,this.worker=e.worker,this.isTicking=!1,this.viewId=r,this.enableGlobal=i}reportStackLength(n,e=this.undoStack.length,t=this.redoStack.length){var r,i,s;(s=(i=(r=this.room)==null?void 0:r.logger)==null?void 0:i.info)==null||s.call(i,`[Appliance]: [undo-stack] ${n} viewId=${this.viewId} undoLength=${e} redoLength=${t}`)}emitUndoStepsUpdate(n){this.emitter.emitAsync("onCanUndoStepsUpdate",n,this.viewId)}emitRedoStepsUpdate(n){this.emitter.emitAsync("onCanRedoStepsUpdate",n,this.viewId)}beginGlobalStackTransaction(){this.enableGlobal&&(this.isGlobalStackTransaction=!0)}flushPendingArrayChanges(){if(!this.enableGlobal||!this.pendingArrayChanges.length)return;const n=this.pendingArrayChanges.splice(0);for(const e of n)this.handleArrayChange(e.params,e.operation)}endGlobalStackTransaction(){if(!this.enableGlobal)return;const n=this.pendingGlobalServiceData;this.isGlobalStackTransaction=!1,this.pendingGlobalServiceData=void 0,this.flushPendingArrayChanges(),n&&this.pullServiceData(n)}ackRender(n,e,t){if(!this.timingFix){this.undoTickerEnd(n,e);return}const r=this.pendingState.get(n);!r||r.scenePath!==e||(r.gotRender=!0,this.mergeMeta(r,t),r.finalizeRequested&&(this.armAckTimeout(n,r),this.tryEnd(n)))}ackStorage(n,e,t,r){if(!this.timingFix)return;const i=this.pendingState.get(n);!i||i.scenePath!==e||(t&&(i.scopeMode==="dynamic"||i.finalizeRequested)&&i.ackedStorageKeys.add(t),xm(i.scopeKeys,t)&&i.finalizeRequested&&(i.scopeKeys.size?i.gotStorage=[...i.scopeKeys].every(a=>i.ackedStorageKeys.has(a)):i.gotStorage=!0),this.mergeMeta(i,r),!i.finalizeRequested)||(this.armAckTimeout(n,i),this.tryEnd(n))}collectExpectedWorkIds(n,e,t){const r=this.pendingState.get(n);if(!r||r.scenePath!==e||!t.length)return;On(this.collector,this.viewId,e,t).forEach(s=>r.collectedScopeKeys.add(s)),r.scopeMode==="dynamic"&&r.finalizeRequested&&(r.scopeKeys.clear(),r.collectedScopeKeys.forEach(s=>r.scopeKeys.add(s)),r.expectedStorage&&r.scopeKeys.size?r.gotStorage=[...r.scopeKeys].every(s=>r.ackedStorageKeys.has(s)):r.expectedStorage&&!r.scopeKeys.size&&(r.gotStorage=!1),r.ackTimer&&clearTimeout(r.ackTimer),r.ackTimer=void 0,this.armAckTimeout(n,r),this.tryEnd(n))}reopenStorageAck(n,e,t){const r=this.pendingState.get(n);if(!r||r.scenePath!==e||!t.length)return;const i=On(this.collector,this.viewId,e,t);i.size&&(i.forEach(s=>r.ackedStorageKeys.delete(s)),r.finalizeRequested&&(r.expectedStorage&&r.scopeKeys.size?r.gotStorage=[...r.scopeKeys].every(s=>r.ackedStorageKeys.has(s)):r.expectedStorage&&!r.scopeKeys.size&&(r.gotStorage=r.scopeMode==="static"),r.ackTimer&&clearTimeout(r.ackTimer),r.ackTimer=void 0,this.armAckTimeout(n,r)))}finalizeRequested(n,e,t){const r=this.pendingState.get(n);if(!r||r.scenePath!==e)return;const i=On(this.collector,this.viewId,e,t);r.scopeMode==="dynamic"?(i.forEach(s=>r.collectedScopeKeys.add(s)),r.scopeKeys.clear(),r.collectedScopeKeys.forEach(s=>r.scopeKeys.add(s))):i.forEach(s=>r.scopeKeys.add(s)),r.finalizeRequested=!0,r.expectedStorage&&r.scopeKeys.size?r.gotStorage=[...r.scopeKeys].every(s=>r.ackedStorageKeys.has(s)):r.expectedStorage&&!r.scopeKeys.size&&r.scopeMode==="static"?r.gotStorage=!0:r.expectedStorage&&!r.scopeKeys.size&&r.scopeMode==="dynamic"&&(r.gotStorage=!1),this.armAckTimeout(n,r),this.tryEnd(n)}mergeMeta(n,e){Cm(n,e)}armAckTimeout(n,e){e.finalizeRequested&&km(e)&&(e.ackTimer=setTimeout(()=>{this.forceFlushPending(n)},this.ackTimeout))}tryEnd(n){const e=this.pendingState.get(n);if(!e||!Nm(e))return;const t=e.meta;this.undoTickerEndSync(n,e.viewId,e.scenePath,!0),t.copyAck&&t.emitEventType&&t.requestId&&this.emitter.emit("undoAckApplied",{viewId:e.viewId,scenePath:e.scenePath,requestId:t.requestId,emitEventType:t.emitEventType}),t.isWritable&&this.worker.abled()}forceFlushPending(n){const e=this.pendingState.get(n);e&&(e.gotRender=e.expectedRender,e.gotStorage=e.expectedStorage,this.tryEnd(n))}hasAnyAck(n){return n.gotRender||n.gotStorage||n.ackedStorageKeys.size>0||!!n.ackTimer}clearPendingState(n){const e=this.pendingState.get(n);e&&(e.ackTimer&&clearTimeout(e.ackTimer),e.graceTimer&&clearTimeout(e.graceTimer),e.fallbackTimer&&clearTimeout(e.fallbackTimer),this.pendingState.delete(n)),this.tickStartCaches.delete(n),this.tickStartExcludeIds.delete(n)}cancelUndoTicker(n,e,t){const r=this.pendingState.has(n),i=this.undoTickerId===n&&this.viewId===e&&this.scenePath===t;!r&&!i||(i&&(this.isTicking=!1,this.scenePath=void 0,this.tickStartStorerCache=void 0,this._undoTickerId=void 0,this.excludeIds.clear()),this.clearPendingState(n))}getStartCache(n){return this.tickStartCaches.get(n)||this.tickStartStorerCache}getExcludeIds(n){return this.tickStartExcludeIds.get(n)||this.excludeIds}resetLegacyTicker(){this.isTicking=!1,this.scenePath=void 0,this.tickStartStorerCache=void 0,this._undoTickerId=void 0,this.excludeIds.clear()}handleArrayChange(n,e){if(!this.collector||!this.enableGlobal){this.collector;return}if(this.isGlobalStackTransaction){this.pendingArrayChanges.push({operation:e,params:{...n}});return}const{operation:t,oldValue:r,newValue:i}=n;let s,a;t==="delete"&&r?(s=r,a=r.id):t==="add"&&i&&(s=i,a=i.id),s&&a&&this.collector.dispatchUndoTicker({operation:e,syncType:t,viewId:this.viewId,undoTickerId:a,data:s})}get collector(){return this.control.collector}get undoTickerId(){return this._undoTickerId}get tmpTickStartStorerCache(){return this.tickStartStorerCache}get uid(){var n;return((n=this.control.collector)==null?void 0:n.uid)||""}addExcludeIds(n){const e=this.undoTickerId!==void 0?this.pendingState.get(this.undoTickerId):void 0;if(!(this.timingFix&&(e!=null&&e.scopeKeys.size))){if(this.timingFix&&this.undoTickerId!==void 0){const t=this.tickStartExcludeIds.get(this.undoTickerId);if(t)for(const r of n)t.add(r);return}if(this.isTicking)for(const t of n)this.excludeIds.add(t)}}undoTickerStart(n,e,t){var r,i,s;if(!this.timingFix){this.legacyUndoTickerStart(n,e);return}if(!t)throw new Error("[appliance-plugin] addUndoTicker expectedAcks is required");if(this.collector&&(this.undoTickerId!==n||this.scenePath!==e)){if(this.undoTickerId&&this.viewId&&this.scenePath){const d=this.undoTickerId,f=this.pendingState.get(d);f&&!this.hasAnyAck(f)?this.clearPendingState(d):f&&!f.graceTimer?f.graceTimer=setTimeout(()=>{this.forceFlushPending(d)},this.gracePeriodTimeout):f||this.undoTickerEndSync(d,this.viewId,this.scenePath)}this.isTicking=!0;const a=this.collector.transformKey(q);this.excludeIds.add(a),this._undoTickerId=n,this.scenePath=e;const c=((r=this.collector)==null?void 0:r.storage[this.viewId])&&((i=this.collector)==null?void 0:i.storage[this.viewId][this.scenePath])||{},l=new Map(Object.entries(j.cloneDeep(c))),u=new Set([a]);this.tickStartStorerCache=l,this.tickStartCaches.set(n,l),this.tickStartExcludeIds.set(n,u);const h=setTimeout(()=>{this.forceFlushPending(n)},this.doingFallbackTimeout);this.pendingState.set(n,vm({viewId:this.viewId,scenePath:e,expectedAcks:t,fallbackTimer:h})),(s=t.workIds)!=null&&s.length&&this.finalizeRequested(n,e,t.workIds.map(String))}}legacyUndoTickerStart(n,e){var t,r;if(this.collector&&(this.undoTickerId!==n||this.scenePath!==e)){this.undoTickerId&&this.viewId&&this.scenePath&&this.undoTickerEndSync(this.undoTickerId,this.viewId,this.scenePath),this.isTicking=!0;const i=this.collector.transformKey(q);this.excludeIds.add(i),this._undoTickerId=n,this.scenePath=e;const s=((t=this.collector)==null?void 0:t.storage[this.viewId])&&((r=this.collector)==null?void 0:r.storage[this.viewId][this.scenePath])||{};this.tickStartStorerCache=new Map(Object.entries(j.cloneDeep(s)))}}undoTickerEnd(n,e,t){if(this.timingFix){this.forceFlushPending(n);return}this.undoTickerId&&n===this.undoTickerId&&e===this.scenePath?this.undoTickerEndSync(n,this.viewId,e,!0,t):this.resetLegacyTicker()}undoTickerEndSync(n,e,t,r=!0,i){var c,l;if(i&&i.length)for(const u of i)this.excludeIds.delete(u);const s=n===this.undoTickerId&&e===this.viewId&&t===this.scenePath,a=this.pendingState.has(n)&&e===this.viewId&&!!this.getStartCache(n);if((s||a)&&this.getStartCache(n)){const u=((c=this.collector)==null?void 0:c.storage[e])&&((l=this.collector)==null?void 0:l.storage[e][t])||{},h=this.pendingState.get(n),d=this.diffFun(this.getStartCache(n),new Map(Object.entries(u)),!0,this.getExcludeIds(n),h==null?void 0:h.scopeKeys);d.size&&(this.undoStack.push({id:`${n}-${this.uid}`,data:j.cloneDeep(d),scenePath:t}),this.undoStack.length>Xe.MaxStackLength&&this.undoStack.shift(),r&&this.emitUndoStepsUpdate(this.undoStack.length),this.redoStack.length&&(this.redoStack.length=0,r&&this.emitRedoStepsUpdate(this.redoStack.length))),s&&(this.isTicking=!1,this.scenePath=void 0,this.tickStartStorerCache=void 0,this._undoTickerId=void 0,this.excludeIds.clear()),this.clearPendingState(n),this.reportStackLength("undo-ticker-end")}}transformToUndoStackItem(n){const e=[];for(const[t,r]of Object.entries(n)){if(!(r!=null&&r.data))continue;const i=new Set;for(const[s,a]of Object.entries(r.data))i.add({key:s,dataType:a.dataType,data:a.data});e.push({id:t,scenePath:r.scenePath,data:i})}return e}pullServiceData(n){if(this.enableGlobal&&this.isGlobalStackTransaction){this.pendingGlobalServiceData=n;return}if(n){const{undoStack:e,redoStack:t}=n;if(e){const r=this.transformToUndoStackItem(e);for(let i=this.undoStack.length-1;i>=0;i--){const s=this.undoStack[i];r.findIndex(c=>c.id===s.id)===-1&&this.undoStack.customSplice(i,1)}for(const i of r){const s=this.undoStack.findIndex(a=>a.id===i.id);s!==-1?this.undoStack[s]=i:this.undoStack.customPush(i)}this.undoStack.sort((i,s)=>{const a=parseInt(i.id.split("-")[0]),c=parseInt(s.id.split("-")[0]);return a-c}),this.emitUndoStepsUpdate(this.undoStack.length)}if(t){const r=this.transformToUndoStackItem(t);for(let i=this.redoStack.length-1;i>=0;i--){const s=this.redoStack[i];r.findIndex(c=>c.id===s.id)===-1&&this.redoStack.customSplice(i,1)}for(const i of r){const s=this.redoStack.findIndex(a=>a.id===i.id);s!==-1?this.redoStack[s]=i:this.redoStack.customPush(i)}this.redoStack.sort((i,s)=>{const a=parseInt(i.id.split("-")[0]);return parseInt(s.id.split("-")[0])-a}),this.emitRedoStepsUpdate(this.redoStack.length)}}else this.clear()}undo(n){var t,r;let e;this.beginGlobalStackTransaction();try{if(this.undoTickerId&&this.tickStartStorerCache&&this.scenePath){const a=this.undoTickerId;this.timingFix&&this.forceFlushPending(a)}if(this.undoTickerId&&this.tickStartStorerCache&&this.scenePath){const a=this.undoTickerId,c=this.scenePath,l=this.getStartCache(a),u=this.pendingState.get(a);if(!l)return this.resetLegacyTicker(),this.undo(n);const h=((t=this.collector)==null?void 0:t.storage[this.viewId])&&((r=this.collector)==null?void 0:r.storage[this.viewId][c])||{},d=this.diffFun(l,new Map(Object.entries(h)),!1,this.getExcludeIds(a),u==null?void 0:u.scopeKeys),f=this.diffFun(l,new Map(Object.entries(h)),!0,this.getExcludeIds(a),u==null?void 0:u.scopeKeys);d.size===f.size?(this.undoStack.push({id:`${a}-${this.uid}`,data:j.cloneDeep(d),scenePath:c}),this.undoStack.length>Xe.MaxStackLength&&this.undoStack.shift()):d.size&&!f.size&&(e={id:`${a}-${this.uid}`,data:j.cloneDeep(d),scenePath:c}),this.isTicking=!1,this.scenePath=void 0,this.tickStartStorerCache=void 0,this._undoTickerId=void 0,this.excludeIds.clear(),this.clearPendingState(a)}if(e)this.refreshPlugin(e);else{let a=this.undoStack.length-1;for(;a>=0;){const c=this.undoStack[a];if(c.scenePath===n){const l=c.id;c&&(this.redoStack.push(c),c.data&&this.refreshPlugin(c));const u=this.undoStack.findIndex(h=>h.id===l);u!==-1&&this.undoStack.splice(u,1);break}a--}}const i=this.undoStack.filter(a=>a.scenePath===n).length,s=this.redoStack.filter(a=>a.scenePath===n).length;return this.emitUndoStepsUpdate(i),this.emitRedoStepsUpdate(s),this.reportStackLength("undo-final",i,s),i}finally{this.endGlobalStackTransaction()}}redo(n){this.beginGlobalStackTransaction();try{let e=this.redoStack.length-1;for(;e>=0;){const i=this.redoStack[e];if(i.scenePath===n){const s=i.id;i&&(this.undoStack.push(i),i.data&&this.refreshPlugin(i,!0));const a=this.redoStack.findIndex(c=>c.id===s);a!==-1&&this.redoStack.splice(a,1);break}e--}const t=this.undoStack.filter(i=>i.scenePath===n).length,r=this.redoStack.filter(i=>i.scenePath===n).length;return this.emitUndoStepsUpdate(t),this.emitRedoStepsUpdate(r),this.reportStackLength("redo-final",t,r),r}finally{this.endGlobalStackTransaction()}}clear(){this.clearUndo(),this.clearRedo()}clearUndo(){this.undoStack.length=0,this.emitUndoStepsUpdate(this.undoStack.length)}clearRedo(){this.redoStack.length=0,this.emitRedoStepsUpdate(this.redoStack.length)}canUndo(){return!!this.undoStack.length}canRedo(){return!!this.redoStack.length}onFocusView(){const n=this.control.viewContainerManager.getCurScenePath(this.viewId);if(n){const e=this.undoStack.filter(r=>r.scenePath===n).length,t=this.redoStack.filter(r=>r.scenePath===n).length;this.emitUndoStepsUpdate(e),this.emitRedoStepsUpdate(t)}}especialDiff(n,e,t,r){if(e===Ye.Update)switch(t==null?void 0:t.toolsType){case S.Text:{if(r!=null&&r.opt&&(t!=null&&t.opt)){const s=j.omit(r.opt,["uid","workState"]),a=j.omit(t.opt,["uid","workState"]);if(n&&j.isEqual(s,a))return!0;r.opt.workState!==E.Done&&(r.opt.workState=E.Done),t.opt.workState!==E.Done&&(t.opt.workState=E.Done)}break}}else if(e===Ye.Draw||e===Ye.Delete)switch(t==null?void 0:t.toolsType){case S.Text:{if(t!=null&&t.opt){const s=t.opt.text;if(n&&!s)return!0;t.opt.workState!==E.Done&&(t.opt.workState=E.Done)}break}}return!1}normalizeUndoSnapshotValue(n,e){var i,s,a;if(!e)return e;const t=j.cloneDeep(e);if(((s=(i=this.collector)==null?void 0:i.getLocalId)==null?void 0:s.call(i,n))===q||t.toolsType===S.Selector)return;if(t.toolsType===S.Text)return((a=t.opt)==null?void 0:a.workState)!==E.Done&&(t.opt.workState=E.Done),t;const r=new Set([S.Pencil,S.Arrow,S.Straight,S.Rectangle,S.Ellipse,S.Polygon,S.Star,S.SpeechBalloon]);return t.type===F.DrawWork&&r.has(t.toolsType)&&!t.ops&&Array.isArray(t.op)&&t.op.length&&(t.type=F.FullWork,t.ops=St(t.op)),t}diffFun(n,e,t=!0,r=this.excludeIds,i){const s=new Set,a=n.keys(),c=e.keys();for(const l of a){if(!Mi(l,r,i))continue;const u=this.normalizeUndoSnapshotValue(l,n.get(l)),h=this.normalizeUndoSnapshotValue(l,e.get(l));if(!(!u&&!h)){if(u&&h){if(j.isEqual(h,u)||this.especialDiff(t,Ye.Update,h,u))continue;s.add({dataType:Ye.Update,key:l,data:[u,h]});continue}this.especialDiff(t,Ye.Delete,u)||u&&s.add({dataType:Ye.Delete,key:l,data:u})}}for(const l of c){if(!Mi(l,r,i))continue;const u=this.normalizeUndoSnapshotValue(l,e.get(l));if(u&&!n.has(l)){if(this.especialDiff(t,Ye.Draw,u))continue;s.add({dataType:Ye.Draw,key:l,data:u})}}return s}isDrawEffectiveScene(n,e){const{key:t}=n;return!e.includes(t)}isDeleteEffectiveScene(n,e){const{key:t}=n;return!!e.includes(t)}isOldEffectiveScene(n,e){const{key:t}=n;return!!e.includes(t)}isNewEffectiveScene(n,e){const{key:t}=n;return!!e.includes(t)}refreshPlugin(n,e=!1){var l,u,h,d,f,p,w,N,y,M,v,m,T,C,k,z,A;let t;const{scenePath:r}=n,i=n.data;if(!i||!this.collector)return;const a={...this.collector.getStorageData(this.viewId,r)||{}};let c=!1;for(const x of i.values()){const{dataType:D,data:b,key:R}=x,O=this.collector.getStorageData(this.viewId,r),U=O&&Object.keys(O)||[];switch(D){case Ye.Draw:if(t=e?this.isDrawEffectiveScene(x,U):this.isDeleteEffectiveScene(x,U),t)if(e&&!Array.isArray(b)){if((l=b.updateNodeOpt)!=null&&l.useAnimation&&(b.updateNodeOpt.useAnimation=!1),((u=this.collector)==null?void 0:u.getLocalId(R))===q&&((h=this.collector)!=null&&h.isOwn(x.key))){const $=b.selectIds;if($){const Y=U.filter(Q=>{var W,X;return((W=this.collector)==null?void 0:W.getLocalId(Q))===q&&!((X=this.collector)!=null&&X.isOwn(Q))}).map(Q=>{var W;return(W=this.collector)==null?void 0:W.storage[this.viewId][r][Q]});let Z=!1;for(const Q of Y)for(let W=0;W<$.length;W++)(d=Q==null?void 0:Q.selectIds)!=null&&d.includes($[W])&&(delete $[W],Z=!0);Z&&(b.selectIds=$.filter(Q=>!!Q))}}a[x.key]=b,c=!0}else!e&&!Array.isArray(x.data)&&(delete a[x.key],c=!0);break;case Ye.Delete:if(t=e?this.isDeleteEffectiveScene(x,U):this.isDrawEffectiveScene(x,U),t){if(e&&!Array.isArray(b))delete a[R],c=!0;else if(!e&&!Array.isArray(b)){if((f=b.updateNodeOpt)!=null&&f.useAnimation&&(b.updateNodeOpt.useAnimation=!1),((p=this.collector)==null?void 0:p.getLocalId(x.key))===q&&((w=this.collector)!=null&&w.isOwn(x.key))){const $=b.selectIds;if($){const Y=U.filter(Q=>{var W,X;return((W=this.collector)==null?void 0:W.getLocalId(Q))===q&&!((X=this.collector)!=null&&X.isOwn(Q))}).map(Q=>{var W;return(W=this.collector)==null?void 0:W.storage[this.viewId][r][Q]});let Z=!1;for(const Q of Y)for(let W=0;W<$.length;W++)(N=Q==null?void 0:Q.selectIds)!=null&&N.includes($[W])&&(delete $[W],Z=!0);Z&&(b.selectIds=$.filter(Q=>!!Q))}}a[x.key]=b,c=!0}}break;case Ye.Update:if(t=e?this.isNewEffectiveScene(x,U):this.isOldEffectiveScene(x,U),t){if(e&&Array.isArray(b)&&b.length===2){const $=b[1];if((y=$.updateNodeOpt)!=null&&y.useAnimation&&($.updateNodeOpt.useAnimation=!1),((M=this.collector)==null?void 0:M.getLocalId(x.key))===q&&((v=this.collector)!=null&&v.isOwn(x.key))){const Y=$.selectIds;if(Y){const Z=U.filter(W=>{var X,pe;return((X=this.collector)==null?void 0:X.getLocalId(W))===q&&!((pe=this.collector)!=null&&pe.isOwn(W))}).map(W=>{var X;return(X=this.collector)==null?void 0:X.storage[this.viewId][r][W]});let Q=!1;for(const W of Z)for(let X=0;X<Y.length;X++)W!=null&&W.selectIds&&((m=W.selectIds)!=null&&m.includes(Y[X]))&&(delete Y[X],Q=!0);Q&&($.selectIds=Y.filter(W=>!!W))}}a[R]=$,c=!0}else if(!e&&Array.isArray(b)&&b.length===2){const $=b[0];if((T=$.updateNodeOpt)!=null&&T.useAnimation&&($.updateNodeOpt.useAnimation=!1),((C=this.collector)==null?void 0:C.getLocalId(x.key))===q&&((k=this.collector)!=null&&k.isOwn(x.key))){const Y=$.selectIds;if(Y){const Z=U.filter(W=>{var X,pe;return((X=this.collector)==null?void 0:X.getLocalId(W))===q&&!((pe=this.collector)!=null&&pe.isOwn(W))}).map(W=>{var X;return(X=this.collector)==null?void 0:X.storage[this.viewId][r][W]});let Q=!1;for(const W of Z)for(let X=0;X<Y.length;X++)W!=null&&W.selectIds&&W.selectIds.includes(Y[X])&&(delete Y[X],Q=!0);Q&&($.selectIds=Y.filter(W=>!!W))}}a[x.key]=$,c=!0}}break}}if(c){const x=this.collector.plugin,D=(z=x==null?void 0:x.getAttributesValue)==null?void 0:z.call(x,[_e.namespace]),b=(A=x==null?void 0:x.getAttributesValue)==null?void 0:A.call(x,[_e.namespace,this.viewId]);D?b?x==null||x.updateAttributes([_e.namespace,this.viewId,r],a):x==null||x.updateAttributes([_e.namespace,this.viewId],{[r]:a}):x==null||x.updateAttributes([_e.namespace],{[this.viewId]:{[r]:a}})}}};I(Xe,"sdkCallBack"),I(Xe,"MaxStackLength",ye.undoRedo.maxStackLength),I(Xe,"waitTime",100);let _n=Xe;class Lt{constructor(n){I(this,"internalMsgEmitter");I(this,"control");I(this,"mainView");I(this,"appViews",new Map);I(this,"undoTickerStart",(n,e,t)=>{const r=this.getView(e);r&&r.displayer&&r.focusScenePath&&r.displayer.commiter.undoTickerStart(n,r.focusScenePath,t)});I(this,"addExcludeIds",(n,e)=>{const t=this.getView(e);t&&t.displayer&&t.focusScenePath&&t.displayer.commiter.addExcludeIds(n)});I(this,"onAckRenderUndoTicker",(n,e,t,r)=>{const i=this.getView(e);if(!(i!=null&&i.displayer)||!i.focusScenePath)return;const s=t||i.focusScenePath;i.displayer.commiter.ackRender(n,s,r)});I(this,"onAckStorageUndoTicker",(n,e,t,r,i)=>{const s=this.getView(e);if(!(s!=null&&s.displayer)||!s.focusScenePath)return;const a=t||s.focusScenePath;s.displayer.commiter.ackStorage(n,a,r,i)});I(this,"onCollectExpectedWorkIds",(n,e,t,r)=>{const i=this.getView(e);if(!(i!=null&&i.displayer)||!i.focusScenePath)return;const s=r||i.focusScenePath;i.displayer.commiter.collectExpectedWorkIds(n,s,t)});I(this,"onFinalizeRequested",(n,e,t,r)=>{const i=this.getView(e);if(!(i!=null&&i.displayer)||!i.focusScenePath)return;const s=r||i.focusScenePath;i.displayer.commiter.finalizeRequested(n,s,t)});I(this,"onReopenStorageAck",(n,e,t,r)=>{const i=this.getView(e);if(!(i!=null&&i.displayer)||!i.focusScenePath)return;const s=r||i.focusScenePath;i.displayer.commiter.reopenStorageAck(n,s,t)});I(this,"onCancelUndoTicker",(n,e,t)=>{const r=this.getView(e);if(!(r!=null&&r.displayer)||!r.focusScenePath)return;const i=t||r.focusScenePath;r.displayer.commiter.cancelUndoTicker(n,e,i)});const{control:e,internalMsgEmitter:t}=n;this.control=e,this.internalMsgEmitter=t,this.internalMsgEmitter.on("addUndoTicker",this.undoTickerStart),this.internalMsgEmitter.on("excludeIds",this.addExcludeIds),this.internalMsgEmitter.on("ackRenderUndoTicker",this.onAckRenderUndoTicker),this.internalMsgEmitter.on("ackStorageUndoTicker",this.onAckStorageUndoTicker),this.internalMsgEmitter.on("collectExpectedWorkIds",this.onCollectExpectedWorkIds),this.internalMsgEmitter.on("reopenStorageAck",this.onReopenStorageAck),this.internalMsgEmitter.on("finalizeRequested",this.onFinalizeRequested),this.internalMsgEmitter.on("cancelUndoTicker",this.onCancelUndoTicker)}get worker(){return this.control.worker}getUndoTickerId(n){const e=this.getView(n);if(e&&e.displayer&&e.focusScenePath)return e.displayer.commiter.undoTickerId}undo(){const n=this.focuedView;let e=0;if(n){const t=n.focusScenePath;e=n.displayer.commiter.undo(t)||0}return e}redo(){const n=this.focuedView;let e=0;if(n){const t=n.focusScenePath;e=n.displayer.commiter.redo(t)||0}return e}validator(n,e,t){var s;const r=j.clone(n[e]),i=j.clone(t);e==="focusScenePath"&&t&&!j.isEqual(r,i)&&(this.control.internalSceneChange(n.id,i),(s=this.focuedView)==null||s.displayer.commiter.onChangeScene()),e==="cameraOpt"&&!j.isEqual(r,i)&&this.control.internalCameraChange(n.id,i)}destroyAppView(n,e=!1){const t=this.appViews.get(n);t&&(this.control.textEditorManager.clear(n,e),t.displayer.destroy(),this.appViews.delete(n))}createMianView(n){this.mainView=new Proxy(n,{set:(e,t,r)=>(this.worker.isActive&&this.validator(e,t,r),e[t]=r,!0)})}createAppView(n){const e=n.id,t=new Proxy(n,{set:(r,i,s)=>(this.worker.isActive&&this.validator(r,i,s),r[i]=s,!0)});this.appViews.set(e,t)}isAppView(n){return n!==re&&this.appViews.has(n)}getView(n){var e;return n===re?this.mainView:(e=this.appViews)==null?void 0:e.get(n)}resolveView(n){const e=n||this.focuedViewId||re,t=this.getView(e);return!n&&!t&&e!==re?{viewId:re,view:this.getView(re)}:{viewId:e,view:t}}getViewElement(n){var e;return((e=n.viewData)==null?void 0:e.divElement)||n.container||n.displayer.eventTragetElement}getFloatbarContainer(n){const{view:e}=this.resolveView(n);return(e==null?void 0:e.displayer.customFloatbarContainerRef.current)||void 0}getViewOffsetToContainer(n,e){if(!n)return;const{viewId:t,view:r}=this.resolveView(e);if(!r)return;const i=this.getViewElement(r);if(!i)return;const s=i.getBoundingClientRect(),a=n.getBoundingClientRect();return{x:s.left-a.left,y:s.top-a.top,viewId:t}}getCurScenePath(n){const e=this.getView(n);if(e)return e.focusScenePath}getAllViews(){return[this.mainView,...this.appViews.values()]}setViewScenePath(n,e){var t;if(n===re&&this.mainView)this.mainView.focusScenePath=e;else{const r=n&&((t=this.appViews)==null?void 0:t.get(n))||void 0;r&&(r.focusScenePath=e)}}setViewData(n,e){var t;if(n===re&&this.mainView)this.mainView.viewData=e;else{const r=n&&((t=this.appViews)==null?void 0:t.get(n))||void 0;r&&(r.viewData=e)}}setFocuedViewId(n){var e;this.focuedViewId=n,n===re?this.focuedView=this.mainView:this.focuedView=n&&((e=this.appViews)==null?void 0:e.get(n))||void 0,this.worker.currentToolsData&&this.worker.currentToolsData.toolsType===S.Text&&this.activeTextEditor(n),this.control.cursor.onFocusViewChange(),this.focuedView&&this.focuedView.displayer.commiter.onFocusView()}setViewFocusScenePath(n,e){var r;let t;n===re?t=this.mainView:t=(r=this.appViews)==null?void 0:r.get(n),t&&(t.focusScenePath=e)}destroy(){var n;this.internalMsgEmitter.off("addUndoTicker",this.undoTickerStart),this.internalMsgEmitter.off("excludeIds",this.addExcludeIds),this.internalMsgEmitter.off("ackRenderUndoTicker",this.onAckRenderUndoTicker),this.internalMsgEmitter.off("ackStorageUndoTicker",this.onAckStorageUndoTicker),this.internalMsgEmitter.off("collectExpectedWorkIds",this.onCollectExpectedWorkIds),this.internalMsgEmitter.off("reopenStorageAck",this.onReopenStorageAck),this.internalMsgEmitter.off("finalizeRequested",this.onFinalizeRequested),this.internalMsgEmitter.off("cancelUndoTicker",this.onCancelUndoTicker),(n=this.mainView)==null||n.displayer.destroy(),this.control.destroyMiniMap(re),this.appViews.forEach(e=>{this.destroyAppView(e.id,!0),this.worker.destroyViewWorker(e.id),this.control.destroyMiniMap(e.id)})}setFocuedViewCameraOpt(n){if(this.focuedView){const e=this.focuedView.cameraOpt;j.isEqual(e,n)||(this.focuedView.cameraOpt=n)}}transformToOriginPoint(n,e){const t=this.getView(e);if(t!=null&&t.viewData){const r=t.viewData.convertToPointOnScreen(n[0],n[1]);return[r.x,r.y]}return n}transformToScenePoint(n,e){const t=this.getView(e);if(t!=null&&t.viewData){const r=t.viewData.convertToPointInWorld({x:n[0],y:n[1]});return[r.x,r.y]}return n}render(n){var e,t,r,i,s,a,c,l,u,h,d,f,p,w,N,y,M;for(const v of n){const{rect:m,imageBitmap:T,isClear:C,isUnClose:k,drawCanvas:z,clearCanvas:A,viewId:x}=v,D=(e=this.getView(x))==null?void 0:e.displayer;if(D&&m){const{dpr:b,canvasBgRef:R,canvasFloatRef:O,canvasServiceFloatRef:U,canvasTopRef:$}=D,Y=Math.floor(m.w*b),Z=Math.floor(m.h*b),Q=m.x*b,W=m.y*b;if(C){switch(A){case Qe.TopFloat:(r=(t=$==null?void 0:$.current)==null?void 0:t.getContext("2d"))==null||r.clearRect(Q,W,Y,Z);break;case Qe.Float:(s=(i=O.current)==null?void 0:i.getContext("2d"))==null||s.clearRect(Q,W,Y,Z);break;case Qe.ServiceFloat:(c=(a=U.current)==null?void 0:a.getContext("2d"))==null||c.clearRect(Q,W,Y,Z);break;case Qe.Bg:(u=(l=R.current)==null?void 0:l.getContext("2d"))==null||u.clearRect(Q,W,Y,Z);break}continue}if(z&&T)switch(z){case Qe.TopFloat:(d=(h=$==null?void 0:$.current)==null?void 0:h.getContext("2d"))==null||d.drawImage(T,0,0,Y,Z,Q,W,Y,Z);break;case Qe.Float:{(p=(f=O.current)==null?void 0:f.getContext("2d"))==null||p.drawImage(T,0,0,Y,Z,Q,W,Y,Z);break}case Qe.ServiceFloat:{(N=(w=U.current)==null?void 0:w.getContext("2d"))==null||N.drawImage(T,0,0,Y,Z,Q,W,Y,Z);break}case Qe.Bg:{(M=(y=R.current)==null?void 0:y.getContext("2d"))==null||M.drawImage(T,0,0,Y,Z,Q,W,Y,Z);break}}if(k)continue;T==null||T.close()}}}showFloatBar(n,e,t){const r=this.getView(n),i=r==null?void 0:r.displayer.vDom;i&&i.showFloatBar(e,t)}activeTextEditor(n){const e=this.getView(n),t=e==null?void 0:e.displayer.vDom;t&&t.activeTextEditor()}unActiveTextEditor(n){const e=this.getView(n),t=e==null?void 0:e.displayer.vDom;t&&t.unActiveTextEditor()}showFloatBarBtn(n,e){const t=this.getView(n),r=t==null?void 0:t.displayer.vDom;r&&r.showFloatBarBtn(e)}updateTextEditorInfo(n,e,t){const r=this.getView(n),i=r==null?void 0:r.displayer.vDom;if(i){i.updateTextEditorInfo(e,t);return}t==null||t()}renderTextEditorInfo(n,e,t){const r=this.getView(n),i=r==null?void 0:r.displayer.vDom;if(i){i.renderTextEditorInfo(e,t);return}t==null||t()}renderTextEditorInfoAsync(n,e){return new Promise(t=>{this.renderTextEditorInfo(n,e,t)})}updateTextEditorInfoAsync(n,e){return new Promise(t=>{this.updateTextEditorInfo(n,e,t)})}setActiveMiniMap(n,e){const t=this.getView(n),r=t==null?void 0:t.displayer.vDom;r&&r.setActiveMiniMap(e&&n||void 0)}}I(Lt,"defaultCameraOpt",{centerX:0,centerY:0,scale:1}),I(Lt,"defaultScreenCanvasOpt",{autoRender:!1,contextType:"2d"}),I(Lt,"defaultLayerOpt",{offscreen:!0,handleEvent:!1,depth:!1});class vo{constructor(n,e,t){I(this,"control");I(this,"internalMsgEmitter");I(this,"commiter");I(this,"cachePoint");I(this,"cacheCursorPoint");I(this,"active",!0);I(this,"toolsKey");I(this,"activePointers",new Set);I(this,"currentDrawingPointerId");I(this,"cursorMouseMove");I(this,"cursorMouseMoveDebounced");I(this,"cursorMouseMoveThrottled");I(this,"cursorMouseMoveFun");I(this,"_transferControlToOffscreenCanvas");I(this,"cursorMouseLeave",()=>{this.control.pluginOptions.extras.cursor.enable?this.cursorMouseMoveThrottled.cancel():this.cursorMouseMoveDebounced.cancel(),this.cacheCursorPoint=[void 0,void 0],this.worker.sendCursorEvent(this.cacheCursorPoint,this.viewId)});I(this,"keydown",n=>{n.stopPropagation(),n.stopImmediatePropagation(),this.control.hotkeyManager.colloctHotkey(n)});I(this,"pointerdown",n=>{var e;if(this.active){if(n.pointerType==="touch"&&(this.activePointers.add(n.pointerId),this.activePointers.size>1)){this.worker.unWritable(),this.viewId&&this.worker.removeDrawingWork(this.viewId),document.removeEventListener("pointermove",this.pointermove,!1),document.removeEventListener("pointerup",this.pointerup,!1),document.removeEventListener("pointercancel",this.pointerup,!1),this.currentDrawingPointerId=void 0,this.cachePoint=void 0,this.activePointers.clear();return}if(n.button===0&&this.viewId){this.toolsKey=(e=this.worker.getCurrentToolsData())==null?void 0:e.toolsType,!this.worker.isAbled()&&this.toolsKey&&this.control.effectViewContainer(this.toolsKey),this.worker.checkDrawingWork(this.viewId),this.reflashContainerOffset();const t=this.getPoint(n);this.cachePoint=t,t&&(this.currentDrawingPointerId=n.pointerId,this.worker.originalEventLintener(E.Start,t,this.viewId),document.addEventListener("pointermove",this.pointermove,!1),document.addEventListener("pointerup",this.pointerup,!1),document.addEventListener("pointercancel",this.pointerup,!1))}}});I(this,"pointermove",n=>{if(this.active){if(n.pointerType==="touch"){if(this.activePointers.size>1){this.worker.unWritable(),this.worker.removeDrawingWork(this.viewId);return}if(this.currentDrawingPointerId!==void 0&&n.pointerId!==this.currentDrawingPointerId)return;if(!this.worker.isAbled()){this.worker.unWritable(),this.worker.removeDrawingWork(this.viewId);return}}if(this.viewId){const e=this.getPoint(n);if(this.cachePoint=e,this.checkConsumeCount())return;e&&this.worker.originalEventLintener(E.Doing,e,this.viewId)}}});I(this,"pointerup",n=>{if(this.active&&(n.pointerType==="touch"&&this.activePointers.delete(n.pointerId),!(this.currentDrawingPointerId!==void 0&&n.pointerId!==this.currentDrawingPointerId))){if(this.currentDrawingPointerId===void 0){document.removeEventListener("pointermove",this.pointermove,!1),document.removeEventListener("pointerup",this.pointerup,!1),document.removeEventListener("pointercancel",this.pointerup,!1);return}if(n.pointerType==="touch"&&(this.activePointers.size>0||!this.worker.isAbled())){this.worker.unWritable(),this.worker.removeDrawingWork(this.viewId),document.removeEventListener("pointermove",this.pointermove,!1),document.removeEventListener("pointerup",this.pointerup,!1),document.removeEventListener("pointercancel",this.pointerup,!1),this.cachePoint=void 0,this.currentDrawingPointerId=void 0;return}if(n.button===0&&this.viewId){const e=this.getPoint(n)||this.cachePoint;e?(this.worker.originalEventLintener(E.Done,e,this.viewId).finally(()=>{document.removeEventListener("pointermove",this.pointermove,!1),document.removeEventListener("pointerup",this.pointerup,!1),document.removeEventListener("pointercancel",this.pointerup,!1)}),this.cachePoint=void 0,this.currentDrawingPointerId=void 0):(document.removeEventListener("pointermove",this.pointermove,!1),document.removeEventListener("pointerup",this.pointerup,!1),document.removeEventListener("pointercancel",this.pointerup,!1),this.currentDrawingPointerId=void 0)}n.pointerType==="touch"&&this.activePointers.size===0&&this.activePointers.clear()}});this.control=n,this.internalMsgEmitter=e;const r={control:this.control,internalMsgEmitter:this.internalMsgEmitter,viewId:t,enableGlobal:!!this.control.pluginOptions.extras.undoRedo.enableGlobal};this.commiter=new _n(r),this.cursorMouseMoveFun=i=>{const s=this.getPoint(i);this.cacheCursorPoint&&j.isEqual(s,this.cacheCursorPoint)||(this.cacheCursorPoint=s,s&&this.worker.sendCursorEvent(s,this.viewId))},this.cursorMouseMoveDebounced=j.debounce(this.cursorMouseMoveFun,this.moveDelayTime,{trailing:!0}),this.cursorMouseMoveThrottled=j.throttle(this.cursorMouseMoveFun,this.moveDelayTime,{leading:!0}),this.cursorMouseMove=i=>{this.control.pluginOptions.extras.cursor.enable?this.cursorMouseMoveThrottled(i):this.cursorMouseMoveDebounced(i)},this.setActive(n.renderControl.isWritable)}get moveDelayTime(){var n,e;return((e=(n=this.control.pluginOptions.extras)==null?void 0:n.cursor)==null?void 0:e.moveDelayTime)??ye.cursor.moveDelayTime}setTransferControlToOffscreenCanvas(n){this._transferControlToOffscreenCanvas={bgCanvas:n.bgCanvas.transferControlToOffscreen(),serviceCanvas:n.serviceCanvas.transferControlToOffscreen(),localCanvas:n.localCanvas.transferControlToOffscreen()}}get transferControlToOffscreenCanvas(){return this._transferControlToOffscreenCanvas}get worker(){return this.control.worker}bindToolsClass(){var r,i;const n=(i=(r=this.worker)==null?void 0:r.currentToolsData)==null?void 0:i.toolsType,e=this.control.renderControl.isWritable,t=this.worker.isAbled();switch(n){case S.Text:case S.Pencil:case S.LaserPen:case S.Arrow:case S.Straight:case S.Rectangle:case S.Ellipse:case S.Star:case S.Polygon:case S.SpeechBalloon:case S.Eraser:case S.PencilEraser:case S.BitMapEraser:case S.Selector:this.eventTragetElement&&(this.eventTragetElement.className=e&&t?`netless-whiteboard ${n===S.Selector?"cursor-selector":n===S.Text?"cursor-text":n===S.Eraser||n===S.PencilEraser||n===S.BitMapEraser?"cursor-eraser":n===S.Pencil||n===S.LaserPen?"cursor-pencil":"cursor-arrow"}`:"netless-whiteboard");break}}mountView(){this.setCanvassStyle(),this.control.viewContainerManager.mountView(this.viewId)}updateSize(){this.setCanvassStyle(),this.reflashContainerOffset()}reflashContainerOffset(){this.eventTragetElement&&(this.containerOffset=this.getContainerOffset(this.eventTragetElement,{x:0,y:0}))}get parentElement(){var n;return(n=this.eventTragetElement)==null?void 0:n.parentElement}destroy(){this.eventTragetElement&&this.removeDisplayerEvent(this.eventTragetElement),this.vDom=void 0,this.control.cursor.clearViewCursor(this.viewId),this.internalMsgEmitter.removeAllListeners([te.Cursor,this.viewId])}getPoint(n){const e=To(n);if(e&&j.isNumber(e.x)&&j.isNumber(e.y))return[e.x-this.containerOffset.x,e.y-this.containerOffset.y]}getActive(){return this.active}setActive(n){this.active=n,this.control.isUseBackgroundThread&&this.backgroundContainerRef&&this.backgroundContainerRef.current&&this.backgroundContainerRef.current.classList.toggle("appliance-plugin-background-isWritable",n)}focusElement(){var n;(n=this.eventTragetElement)==null||n.focus()}async stopEventHandler(){this.cachePoint&&(await this.worker.originalEventLintener(E.Done,this.cachePoint,this.viewId).finally(()=>{document.removeEventListener("pointermove",this.pointermove,!1),document.removeEventListener("pointerup",this.pointerup,!1),document.removeEventListener("pointercancel",this.pointerup,!1)}),this.cachePoint=void 0,this.activePointers.clear(),this.currentDrawingPointerId=void 0)}getTranslate(n){const t=(n.style.WebkitTransform||getComputedStyle(n,"").getPropertyValue("-webkit-transform")||n.style.transform||getComputedStyle(n,"").getPropertyValue("transform")).match(/-?[0-9]+\.?[0-9]*/g),r=t&&parseInt(t[0])||0,i=t&&parseInt(t[1])||0;return[r,i]}getContainerOffset(n,e){var i;const t=this.getTranslate(n);let r={x:e.x+n.offsetLeft-n.scrollLeft+t[0],y:e.y+n.offsetTop-n.scrollTop+t[1]};return(i=n.offsetParent)!=null&&i.nodeName&&n.offsetParent.nodeName!=="BODY"&&(r=this.getContainerOffset(n.offsetParent,r)),r}bindDisplayerEvent(n){n.addEventListener("pointerdown",this.pointerdown,!1),n.addEventListener("mousemove",this.cursorMouseMove,!1),n.addEventListener("mouseleave",this.cursorMouseLeave,!1),n.addEventListener("keydown",this.keydown,!0)}removeDisplayerEvent(n){n.removeEventListener("pointerdown",this.pointerdown,!1),document.removeEventListener("pointermove",this.pointermove,!1),document.removeEventListener("pointerup",this.pointerup,!1),document.removeEventListener("pointerleave",this.pointerup,!1),n.removeEventListener("mousemove",this.cursorMouseMove,!1),n.removeEventListener("mouseleave",this.cursorMouseLeave,!1),n.removeEventListener("keydown",this.keydown,!0)}get isBezier(){return this.control.pluginOptions.extras.bezier.enable}get maxDrawCount(){return this.control.pluginOptions.extras.bezier.maxDrawCount||ye.bezier.maxDrawCount}checkConsumeCount(){const n=this.worker.getConsumeCount();return this.cachePoint&&this.toolsKey&&this.toolsKey===S.Pencil&&n>this.maxDrawCount?(this.stopEventHandler().finally(()=>{this.worker.publicMsgEmitter.emit("forceStop",ir.longPencil,this.viewId)}),!0):!1}}class bm extends vo{constructor(e,t,r){super(t,r,e);I(this,"_viewId");this._viewId=e}get viewId(){return this._viewId}setViewId(e){this._viewId=e}}class Co extends vo{constructor(n,e){super(n,e,re)}get viewId(){return re}updateSize(){this.setCanvassStyle()}destroy(){super.destroy(),this.control.cursor.destroy()}}const Dm="index-module__Container__nLsM3",Am="index-module__BackgroundBox__zfthZ",Em="index-module__BackgroundSvgBox__Fv1ay",jm="index-module__BackgroundSnapshotContent__NFLAl",zm="index-module__BackgroundSnapshotBox__NEM-C",Lm="index-module__CanvasBox__j2Xe-",Pm="index-module__FloatCanvas__d1YR7",Rm="index-module__TopFloatCanvas__7IaCw",Om="index-module__CanvasBoxSub__hcMeK",Um="index-module__SnapshotBox__--eeE",Ym="index-module__FloatBar__cm-EL",Bm="index-module__RotateBtn__HSSkf",Fm="index-module__ResizeBtn__yjvda",Wm="index-module__CursorBox__2UHvI",Vm="index-module__TextEditorContainer__Qm8KC",$m="index-module__ResizeTowBox__HOllX",Gm="index-module__FloatBarBtn__FJrOG",ke={Container:Dm,BackgroundBox:Am,BackgroundSvgBox:Em,BackgroundSnapshotContent:jm,BackgroundSnapshotBox:zm,CanvasBox:Lm,FloatCanvas:Pm,TopFloatCanvas:Rm,CanvasBoxSub:Om,SnapshotBox:Um,FloatBar:Ym,RotateBtn:Bm,ResizeBtn:Fm,CursorBox:Wm,TextEditorContainer:Vm,ResizeTowBox:$m,FloatBarBtn:Gm},Qm={delete:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyIDZ2NmEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2aDBtMS0yYTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMiAyaDBNMyA0aDEwIiBzdHJva2U9IiM0NDRFNjAiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==",duplicate:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgc3Ryb2tlPSIjNDQ0RTYwIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPjxwYXRoIGQ9Ik0xMSAySDZhMSAxIDAgMCAwLTEgMXY4YTEgMSAwIDAgMCAxIDFoNmExIDEgMCAwIDAgMS0xVjRoMGwtMi0yeiIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIi8+PHBhdGggZD0iTTExIDJ2MWExIDEgMCAwIDAgMSAxaDFsLTItMnoiLz48cGF0aCBkPSJNOSAxNEg0YTEgMSAwIDAgMS0xLTFWNWgwIiBzdHJva2UtbGluZWNhcD0icm91bmQiLz48L2c+PC9zdmc+","layer-pressed":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTE2IDEwLTYgNCA2IDQgNi00em0tNiA4IDYgNCA2LTQiIHN0cm9rZT0iIzMzODFGRiIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+",layer:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTE2IDEwLTYgNCA2IDQgNi00em0tNiA4IDYgNCA2LTQiIHN0cm9rZT0iIzQ0NEU2MCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+",rotate:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjUiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgc3Ryb2tlPSIjNDQ0RTYwIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCI+PHBhdGggZD0iTTEzIDZhNiA2IDAgMSAxLTMuNzA5IDEuMjgzIi8+PHBhdGggZD0ibTEzIDYgMS40MTQgMi40NUwxMyA2bDIuNDUtMS40MTQiLz48L2c+PC9zdmc+","rotation-button":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0iI0ZGRiIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBvcGFjaXR5PSIuMDEiIGQ9Ik0wIDI0VjBoMjR2MjR6Ii8+PHBhdGggZD0iTTUuNzI0IDUuNzI0QTguODQ3IDguODQ3IDAgMCAxIDEyIDMuMTI1YzIuMjcxIDAgNC41NDMuODY2IDYuMjc2IDIuNmE4Ljg0NiA4Ljg0NiAwIDAgMSAyLjU5OCA2LjE0IDguODQ5IDguODQ5IDAgMCAxLTIuNTU5IDYuMzdsLTEuNS0uOTgzQTcuMTA1IDcuMTA1IDAgMCAwIDE5LjEyNSAxMmE3LjEwMyA3LjEwMyAwIDAgMC0yLjA4Ny01LjAzOEE3LjEwMyA3LjEwMyAwIDAgMCAxMiA0Ljg3NWE3LjEwMyA3LjEwMyAwIDAgMC01LjAzOCAyLjA4NyA3LjEwMSA3LjEwMSAwIDAgMC0yLjA4NiA0LjkyIDcuMTAzIDcuMTAzIDAgMCAwIDEuNzY2IDQuODE1bDEuOTQ1LTEuNTg0IDIuMzk0IDcuMTgyLTcuMjIyLTIuNDA4IDEuNzkxLTEuNzlBOC44NDYgOC44NDYgMCAwIDEgMy4xMjUgMTJjMC0yLjI3MS44NjYtNC41NDMgMi42LTYuMjc2eiIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9Ii41IiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L2c+PC9zdmc+",rotation:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48cGF0aCBmaWxsPSIjRkZGIiBvcGFjaXR5PSIuMDEiIGQ9Ik0wIDI0VjBoMjR2MjR6Ii8+PHBhdGggZD0iTTUuNzI0IDUuNzI0QTguODQ3IDguODQ3IDAgMCAxIDEyIDMuMTI1YzIuMjcxIDAgNC41NDMuODY2IDYuMjc2IDIuNmE4Ljg0NiA4Ljg0NiAwIDAgMSAyLjU5OCA2LjE0IDguODQ5IDguODQ5IDAgMCAxLTIuNTU5IDYuMzdsLTEuNS0uOTgzQTcuMTA1IDcuMTA1IDAgMCAwIDE5LjEyNSAxMmE3LjEwMyA3LjEwMyAwIDAgMC0yLjA4Ny01LjAzOEE3LjEwMyA3LjEwMyAwIDAgMCAxMiA0Ljg3NWE3LjEwMyA3LjEwMyAwIDAgMC01LjAzOCAyLjA4NyA3LjEwMSA3LjEwMSAwIDAgMC0yLjA4NiA0LjkyIDcuMTAzIDcuMTAzIDAgMCAwIDEuNzY2IDQuODE1bDEuOTQ1LTEuNTg0IDIuMzk0IDcuMTgyLTcuMjIyLTIuNDA4IDEuNzkxLTEuNzlBOC44NDYgOC44NDYgMCAwIDEgMy4xMjUgMTJjMC0yLjI3MS44NjYtNC41NDMgMi42LTYuMjc2eiIgc3Ryb2tlPSIjRkZGIiBzdHJva2Utd2lkdGg9Ii41IiBmaWxsPSIjMDAwIiBmaWxsLXJ1bGU9Im5vbnplcm8iLz48L2c+PC9zdmc+","font-colors-active":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTQgMTEgNC05IDQgOU02IDdoNCIgc3Ryb2tlPSIjMzM4MUZGIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4=","font-colors":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0ibTQgMTEgNC05IDQgOU02IDdoNCIgc3Ryb2tlPSIjNDQ0RTYwIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4=","to-bottom":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyIDEwdjhtMCAwLTItMm0yIDIgMi0ybS00IDZoMTJtLTYtNGg2bS02LTRoNm0tNi00aDYiIHN0cm9rZT0iIzQ0NEU2MCIgZmlsbD0ibm9uZSIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PC9zdmc+","to-top":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyIDIydi04bTAgMC0yIDJtMi0yIDIgMm0tNC02aDEybS02IDRoNm0tNiA0aDZtLTYgNGg2IiBzdHJva2U9IiM0NDRFNjAiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==","bold-active":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuNSAySDhhMi41IDIuNSAwIDAgMSAwIDVINS41aDBtLTEgMGg0YTMgMyAwIDAgMSAwIDZoLTQgMG0wIDFWMiIgc3Ryb2tlPSIjMzM4MUZGIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4=",bold:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQuNSAySDhhMi41IDIuNSAwIDAgMSAwIDVINS41aDBtLTEgMGg0YTMgMyAwIDAgMSAwIDZoLTQgMG0wIDFWMiIgc3Ryb2tlPSIjNDQ0RTYwIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4=","underline-active":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyIDJ2NWE0IDQgMCAxIDEtOCAwVjJoME0zIDE0aDEwIiBzdHJva2U9IiMzMzgxRkYiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==",underline:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTEyIDJ2NWE0IDQgMCAxIDEtOCAwVjJoME0zIDE0aDEwIiBzdHJva2U9IiM0NDRFNjAiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==","line-through-active":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQgOGg4bS0xLTNhMyAzIDAgMCAwLTMtM2gtLjkzOEEyLjY0IDIuNjQgMCAwIDAgNC41IDRhMi41NyAyLjU3IDAgMCAwIDEuMzQ0IDIuOTIybDQuMzEyIDIuMTU2QTIuNTcgMi41NyAwIDAgMSAxMS41IDEyYTIuNjQgMi42NCAwIDAgMS0yLjU2MiAySDdhMyAzIDAgMCAxLTMtM2gwIiBzdHJva2U9IiMzMzgxRkYiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==","line-through":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTQgOGg4bS0xLTNhMyAzIDAgMCAwLTMtM2gtLjkzOEEyLjY0IDIuNjQgMCAwIDAgNC41IDRhMi41NyAyLjU3IDAgMCAwIDEuMzQ0IDIuOTIybDQuMzEyIDIuMTU2QTIuNTcgMi41NyAwIDAgMSAxMS41IDEyYTIuNjQgMi42NCAwIDAgMS0yLjU2MiAySDdhMyAzIDAgMCAxLTMtM2gwIiBzdHJva2U9IiM0NDRFNjAiIGZpbGw9Im5vbmUiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIvPjwvc3ZnPg==","italic-active":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcgMTQgOSAyTTUgMTRoNE03IDJoNCIgc3Ryb2tlPSIjMzM4MUZGIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4=",italic:"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZD0iTTcgMTQgOSAyTTUgMTRoNE03IDJoNCIgc3Ryb2tlPSIjNDQ0RTYwIiBmaWxsPSJub25lIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L3N2Zz4=","unlock-new":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGZpbGw9IiMzMzgxRkYiIGN4PSIxNiIgY3k9IjE3IiByPSIxIi8+PHJlY3Qgc3Ryb2tlPSIjMzM4MUZGIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHg9IjExIiB5PSIxNCIgd2lkdGg9IjEwIiBoZWlnaHQ9IjgiIHJ4PSIyIi8+PHBhdGggZD0iTTEzIDE0di0xYTMgMyAwIDAgMSA2IDB2MWgwbS0zIDN2MyIgc3Ryb2tlPSIjMzM4MUZGIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L2c+PC9zdmc+","lock-new":"data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PGcgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj48Y2lyY2xlIGZpbGw9IiM0NDRFNjAiIGN4PSIxNiIgY3k9IjE3IiByPSIxIi8+PHJlY3Qgc3Ryb2tlPSIjNDQ0RTYwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIHg9IjExIiB5PSIxNCIgd2lkdGg9IjEwIiBoZWlnaHQ9IjgiIHJ4PSIyIi8+PHBhdGggZD0iTTEzIDE0di0zYTMgMyAwIDAgMSA2IDB2MWgwbS0zIDV2MyIgc3Ryb2tlPSIjNDQ0RTYwIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz48L2c+PC9zdmc+",shapes:"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTY4Mi42NjY2NjcgMTAyNEM2ODIuNjY2NjY3IDEwMjQgNjgyLjY2NjY2NyAxMDI0IDY4Mi42NjY2NjcgMTAyNEwxNzAuNjY2NjY3IDEwMjRjLTE3LjA2NjY2NyAwLTI5Ljg2NjY2Ny04LjUzMzMzMy0zOC40LTIxLjMzMzMzMy04LjUzMzMzMy0xMi44LTguNTMzMzMzLTI5Ljg2NjY2NyAwLTQyLjY2NjY2N2wyNTYtMzg0YzE3LjA2NjY2Ny0yNS42IDU1LjQ2NjY2Ny0yNS42IDcyLjUzMzMzMyAwbDI1MS43MzMzMzMgMzc5LjczMzMzM2M4LjUzMzMzMyA4LjUzMzMzMyAxMi44IDE3LjA2NjY2NyAxMi44IDI5Ljg2NjY2N0M3MjUuMzMzMzMzIDEwMDYuOTMzMzMzIDcwOC4yNjY2NjcgMTAyNCA2ODIuNjY2NjY3IDEwMjR6TTI1MS43MzMzMzMgOTM4LjY2NjY2N2wzNTQuMTMzMzMzIDBMNDI2LjY2NjY2NyA2NzQuMTMzMzMzIDI1MS43MzMzMzMgOTM4LjY2NjY2N3oiIGZpbGw9IiM0NDRFNjAiPjwvcGF0aD48cGF0aCBkPSJNOTgxLjMzMzMzMyA3MjUuMzMzMzMzbC0zNDEuMzMzMzMzIDBjLTI1LjYgMC00Mi42NjY2NjctMTcuMDY2NjY3LTQyLjY2NjY2Ny00Mi42NjY2NjdMNTk3LjMzMzMzMyAzNDEuMzMzMzMzYzAtMjUuNiAxNy4wNjY2NjctNDIuNjY2NjY3IDQyLjY2NjY2Ny00Mi42NjY2NjdsMzQxLjMzMzMzMyAwYzI1LjYgMCA0Mi42NjY2NjcgMTcuMDY2NjY3IDQyLjY2NjY2NyA0Mi42NjY2NjdsMCAzNDEuMzMzMzMzQzEwMjQgNzA4LjI2NjY2NyAxMDA2LjkzMzMzMyA3MjUuMzMzMzMzIDk4MS4zMzMzMzMgNzI1LjMzMzMzM3pNNjgyLjY2NjY2NyA2NDBsMjU2IDBMOTM4LjY2NjY2NyAzODRsLTI1NiAwTDY4Mi42NjY2NjcgNjQweiIgZmlsbD0iIzQ0NEU2MCI+PC9wYXRoPjxwYXRoIGQ9Ik0yNzcuMzMzMzMzIDU1NC42NjY2NjdDMTIzLjczMzMzMyA1NTQuNjY2NjY3IDAgNDMwLjkzMzMzMyAwIDI3Ny4zMzMzMzNTMTIzLjczMzMzMyAwIDI3Ny4zMzMzMzMgMCA1NTQuNjY2NjY3IDEyMy43MzMzMzMgNTU0LjY2NjY2NyAyNzcuMzMzMzMzIDQzMC45MzMzMzMgNTU0LjY2NjY2NyAyNzcuMzMzMzMzIDU1NC42NjY2Njd6TTI3Ny4zMzMzMzMgODUuMzMzMzMzQzE3MC42NjY2NjcgODUuMzMzMzMzIDg1LjMzMzMzMyAxNzAuNjY2NjY3IDg1LjMzMzMzMyAyNzcuMzMzMzMzUzE3MC42NjY2NjcgNDY5LjMzMzMzMyAyNzcuMzMzMzMzIDQ2OS4zMzMzMzMgNDY5LjMzMzMzMyAzODQgNDY5LjMzMzMzMyAyNzcuMzMzMzMzIDM4NCA4NS4zMzMzMzMgMjc3LjMzMzMzMyA4NS4zMzMzMzN6IiBmaWxsPSIjNDQ0RTYwIj48L3BhdGg+PC9zdmc+","shapes-active":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTY4Mi42NjY2NjcgMTAyNEM2ODIuNjY2NjY3IDEwMjQgNjgyLjY2NjY2NyAxMDI0IDY4Mi42NjY2NjcgMTAyNEwxNzAuNjY2NjY3IDEwMjRjLTE3LjA2NjY2NyAwLTI5Ljg2NjY2Ny04LjUzMzMzMy0zOC40LTIxLjMzMzMzMy04LjUzMzMzMy0xMi44LTguNTMzMzMzLTI5Ljg2NjY2NyAwLTQyLjY2NjY2N2wyNTYtMzg0YzE3LjA2NjY2Ny0yNS42IDU1LjQ2NjY2Ny0yNS42IDcyLjUzMzMzMyAwbDI1MS43MzMzMzMgMzc5LjczMzMzM2M4LjUzMzMzMyA4LjUzMzMzMyAxMi44IDE3LjA2NjY2NyAxMi44IDI5Ljg2NjY2N0M3MjUuMzMzMzMzIDEwMDYuOTMzMzMzIDcwOC4yNjY2NjcgMTAyNCA2ODIuNjY2NjY3IDEwMjR6TTI1MS43MzMzMzMgOTM4LjY2NjY2N2wzNTQuMTMzMzMzIDBMNDI2LjY2NjY2NyA2NzQuMTMzMzMzIDI1MS43MzMzMzMgOTM4LjY2NjY2N3oiIGZpbGw9IiMzMzgxRkYiPjwvcGF0aD48cGF0aCBkPSJNOTgxLjMzMzMzMyA3MjUuMzMzMzMzbC0zNDEuMzMzMzMzIDBjLTI1LjYgMC00Mi42NjY2NjctMTcuMDY2NjY3LTQyLjY2NjY2Ny00Mi42NjY2NjdMNTk3LjMzMzMzMyAzNDEuMzMzMzMzYzAtMjUuNiAxNy4wNjY2NjctNDIuNjY2NjY3IDQyLjY2NjY2Ny00Mi42NjY2NjdsMzQxLjMzMzMzMyAwYzI1LjYgMCA0Mi42NjY2NjcgMTcuMDY2NjY3IDQyLjY2NjY2NyA0Mi42NjY2NjdsMCAzNDEuMzMzMzMzQzEwMjQgNzA4LjI2NjY2NyAxMDA2LjkzMzMzMyA3MjUuMzMzMzMzIDk4MS4zMzMzMzMgNzI1LjMzMzMzM3pNNjgyLjY2NjY2NyA2NDBsMjU2IDBMOTM4LjY2NjY2NyAzODRsLTI1NiAwTDY4Mi42NjY2NjcgNjQweiIgZmlsbD0iIzMzODFGRiI+PC9wYXRoPjxwYXRoIGQ9Ik0yNzcuMzMzMzMzIDU1NC42NjY2NjdDMTIzLjczMzMzMyA1NTQuNjY2NjY3IDAgNDMwLjkzMzMzMyAwIDI3Ny4zMzMzMzNTMTIzLjczMzMzMyAwIDI3Ny4zMzMzMzMgMCA1NTQuNjY2NjY3IDEyMy43MzMzMzMgNTU0LjY2NjY2NyAyNzcuMzMzMzMzIDQzMC45MzMzMzMgNTU0LjY2NjY2NyAyNzcuMzMzMzMzIDU1NC42NjY2Njd6TTI3Ny4zMzMzMzMgODUuMzMzMzMzQzE3MC42NjY2NjcgODUuMzMzMzMzIDg1LjMzMzMzMyAxNzAuNjY2NjY3IDg1LjMzMzMzMyAyNzcuMzMzMzMzUzE3MC42NjY2NjcgNDY5LjMzMzMzMyAyNzcuMzMzMzMzIDQ2OS4zMzMzMzMgNDY5LjMzMzMzMyAzODQgNDY5LjMzMzMzMyAyNzcuMzMzMzMzIDM4NCA4NS4zMzMzMzMgMjc3LjMzMzMzMyA4NS4zMzMzMzN6IiBmaWxsPSIjMzM4MUZGIj48L3BhdGg+PC9zdmc+","font-style-active":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTM2MC4yMzQ2NjcgMjEzLjMzMzMzM0w1NTQuNjY2NjY3IDc3Ni4yNzczMzNoLTc2LjU0NGwtNTQuNjEzMzM0LTE3Mi4wMzJIMjE0LjE4NjY2N2wtNTUuNDY2NjY3IDE3Mi4wMzJIODUuMzMzMzMzTDI3OS43NjUzMzMgMjEzLjMzMzMzM2g4MC40NjkzMzR6IG00MTAuMDI2NjY2IDE3My44MjRjOTAuMTEyIDAgMTI4LjM0MTMzMyA2MC43NTczMzMgMTI4LjM0MTMzNCAxNTIuMjM0NjY3djIyOC4wMTA2NjdoLTUxLjJsLTUuNDYxMzM0LTQ0LjM3MzMzNGgtMi4wNDhjLTM1LjQ5ODY2NyAyOS4zNTQ2NjctNzcuMTQxMzMzIDUzLjI0OC0xMjIuODggNTMuMjQ4LTYyLjEyMjY2NyAwLTEwOC41NDQtMzguMjI5MzMzLTEwOC41NDQtMTA1LjEzMDY2NiAwLTgwLjU1NDY2NyA3MC4zMTQ2NjctMTIwLjgzMiAyMjguMDEwNjY3LTEzOC41ODEzMzQgMC00Ny43ODY2NjctMTUuNzAxMzMzLTkzLjUyNTMzMy03Ni40NTg2NjctOTMuNTI1MzMzLTQzLjAwOCAwLTgxLjkyIDE5Ljc5NzMzMy0xMTEuMjc0NjY2IDM5LjU5NDY2N2wtMjQuNTc2LTQzLjAwOGMzNC4xMzMzMzMtMjEuODQ1MzMzIDg2LjY5ODY2Ny00OC40NjkzMzMgMTQ2LjA5MDY2Ni00OC40NjkzMzR6IG02Ni4yMTg2NjcgMTg2LjM2OGMtMTI0LjkyOCAxNS4wMTg2NjctMTY3LjI1MzMzMyA0NS43Mzg2NjctMTY3LjI1MzMzMyA5My41MjUzMzQgMCA0Mi4zMjUzMzMgMjguNjcyIDU5LjM5MiA2NS41MzYgNTkuMzkyIDM2LjE4MTMzMyAwIDY1LjUzNi0xNy4wNjY2NjcgMTAxLjcxNzMzMy00OS4xNTJ6TTMyMC4zODQgMjcwLjkzMzMzM2gtMy4xMTQ2NjdjLTE3Ljk2MjY2NyA2Ni4wNDgtMzYuNjkzMzMzIDEyNi43Mi01Ny4wMDI2NjYgMTkwLjQ2NGwtMjguMTYgODYuMDE2aDE3My4zOTczMzNsLTI3LjMwNjY2Ny04Ni4wMTZBNDkxMy40OTMzMzMgNDkxMy40OTMzMzMgMCAwIDEgMzIwLjM4NCAyNzAuOTMzMzMzeiIgZmlsbD0iIzMzODFGRiI+PC9wYXRoPjwvc3ZnPg==","font-style":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTM2MC4yMzQ2NjcgMjEzLjMzMzMzM0w1NTQuNjY2NjY3IDc3Ni4yNzczMzNoLTc2LjU0NGwtNTQuNjEzMzM0LTE3Mi4wMzJIMjE0LjE4NjY2N2wtNTUuNDY2NjY3IDE3Mi4wMzJIODUuMzMzMzMzTDI3OS43NjUzMzMgMjEzLjMzMzMzM2g4MC40NjkzMzR6IG00MTAuMDI2NjY2IDE3My44MjRjOTAuMTEyIDAgMTI4LjM0MTMzMyA2MC43NTczMzMgMTI4LjM0MTMzNCAxNTIuMjM0NjY3djIyOC4wMTA2NjdoLTUxLjJsLTUuNDYxMzM0LTQ0LjM3MzMzNGgtMi4wNDhjLTM1LjQ5ODY2NyAyOS4zNTQ2NjctNzcuMTQxMzMzIDUzLjI0OC0xMjIuODggNTMuMjQ4LTYyLjEyMjY2NyAwLTEwOC41NDQtMzguMjI5MzMzLTEwOC41NDQtMTA1LjEzMDY2NiAwLTgwLjU1NDY2NyA3MC4zMTQ2NjctMTIwLjgzMiAyMjguMDEwNjY3LTEzOC41ODEzMzQgMC00Ny43ODY2NjctMTUuNzAxMzMzLTkzLjUyNTMzMy03Ni40NTg2NjctOTMuNTI1MzMzLTQzLjAwOCAwLTgxLjkyIDE5Ljc5NzMzMy0xMTEuMjc0NjY2IDM5LjU5NDY2N2wtMjQuNTc2LTQzLjAwOGMzNC4xMzMzMzMtMjEuODQ1MzMzIDg2LjY5ODY2Ny00OC40NjkzMzMgMTQ2LjA5MDY2Ni00OC40NjkzMzR6IG02Ni4yMTg2NjcgMTg2LjM2OGMtMTI0LjkyOCAxNS4wMTg2NjctMTY3LjI1MzMzMyA0NS43Mzg2NjctMTY3LjI1MzMzMyA5My41MjUzMzQgMCA0Mi4zMjUzMzMgMjguNjcyIDU5LjM5MiA2NS41MzYgNTkuMzkyIDM2LjE4MTMzMyAwIDY1LjUzNi0xNy4wNjY2NjcgMTAxLjcxNzMzMy00OS4xNTJ6TTMyMC4zODQgMjcwLjkzMzMzM2gtMy4xMTQ2NjdjLTE3Ljk2MjY2NyA2Ni4wNDgtMzYuNjkzMzMzIDEyNi43Mi01Ny4wMDI2NjYgMTkwLjQ2NGwtMjguMTYgODYuMDE2aDE3My4zOTczMzNsLTI3LjMwNjY2Ny04Ni4wMTZBNDkxMy40OTMzMzMgNDkxMy40OTMzMzMgMCAwIDEgMzIwLjM4NCAyNzAuOTMzMzMzeiIgZmlsbD0iIzQ0NEU2MCI+PC9wYXRoPjwvc3ZnPg==",polygon:"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTkzMy4xMiA0OTAuNjY2NjY3bC0xOTItMzMyLjM3MzMzNGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwLTM3LjEyLTIxLjMzMzMzM2gtMzg0YTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDAtMzcuMTIgMjEuMzMzMzMzbC0xOTIgMzMyLjM3MzMzNGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDAgNDIuNjY2NjY2bDE5MiAzMzIuMzczMzM0YTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDAgMzcuMTIgMjEuMzMzMzMzaDM4NGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDM3LjEyLTIxLjMzMzMzM2wxOTItMzMyLjM3MzMzNGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDAtNDIuNjY2NjY2eiBtLTI1NiAzMTEuMDRIMzQ0Ljc0NjY2N0wxNzcuMDY2NjY3IDUxMmwxNjcuNjgtMjg5LjcwNjY2N2gzMzQuNTA2NjY2TDg0Ni45MzMzMzMgNTEyeiIgZmlsbD0iIzQ0NEU2MCI+PC9wYXRoPjwvc3ZnPg==","polygon-active":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTkzMy4xMiA0OTAuNjY2NjY3bC0xOTItMzMyLjM3MzMzNGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwLTM3LjEyLTIxLjMzMzMzM2gtMzg0YTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDAtMzcuMTIgMjEuMzMzMzMzbC0xOTIgMzMyLjM3MzMzNGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDAgNDIuNjY2NjY2bDE5MiAzMzIuMzczMzM0YTQyLjY2NjY2NyA0Mi42NjY2NjcgMCAwIDAgMzcuMTIgMjEuMzMzMzMzaDM4NGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDM3LjEyLTIxLjMzMzMzM2wxOTItMzMyLjM3MzMzNGE0Mi42NjY2NjcgNDIuNjY2NjY3IDAgMCAwIDAtNDIuNjY2NjY2eiBtLTI1NiAzMTEuMDRIMzQ0Ljc0NjY2N0wxNzcuMDY2NjY3IDUxMmwxNjcuNjgtMjg5LjcwNjY2N2gzMzQuNTA2NjY2TDg0Ni45MzMzMzMgNTEyeiIgZmlsbD0iIzMzODFGRiI+PC9wYXRoPjwvc3ZnPg==","polygon-vertex":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTA3NyAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTU0My40NzQ1MjYgNDIuMzA3MzY4YTExOS4zNzY4NDIgMTE5LjM3Njg0MiAwIDAgMSAxMTAuODA3NTc5IDE2My44NGwxOTAuNTcxNzkgMTM4LjYxNzI2NGExMTkuMzc2ODQyIDExOS4zNzY4NDIgMCAxIDEgODMuMzc1MTU4IDIxOC43MDQ4NDJsLTc0LjMyMDg0MiAyMjguODM3MDUyYTExOS4zMjI5NDcgMTE5LjMyMjk0NyAwIDAgMS02MS4yNzgzMTYgMjIxLjg4NDYzMmMtNDYuNzgwNjMyIDAtODcuMzA5NDc0LTI2Ljk0NzM2OC0xMDYuODczMjYzLTY2LjEyODg0MmgtMjg5LjQxNDczN2ExMTkuMzc2ODQyIDExOS4zNzY4NDIgMCAxIDEtMTc5LjczODk0OC0xNDcuODMzMjYzbC03Mi4yNzI4NDItMjIyLjY5MzA1My0zLjM5NTM2OCAwLjEwNzc4OUExMTkuMzc2ODQyIDExOS4zNzY4NDIgMCAwIDEgMjEuODI3MzY4IDQ2Ni43Mjg0MjFMMjEuNTU3ODk1IDQ1OC4yMTMwNTNhMTE5LjM3Njg0MiAxMTkuMzc2ODQyIDAgMCAxIDE4My44MzQ5NDctMTAwLjUxMzY4NWwyMjMuNTAxNDc0LTE2Mi4zODQ4NDJhMTE5LjQzMDczNyAxMTkuNDMwNzM3IDAgMCAxIDExNC41ODAyMS0xNTMuMDYxMDUyek0yODkuNDE0NzM3IDg0MC4wNTcyNjNhNTQuNzAzMTU4IDU0LjcwMzE1OCAwIDEgMCAwIDEwOS40MDYzMTYgNTQuNzAzMTU4IDU0LjcwMzE1OCAwIDAgMCAwLTEwOS40MDYzMTZ6IG01MDMuMTYxMjYzIDBhNTQuNzAzMTU4IDU0LjcwMzE1OCAwIDEgMCAwIDEwOS40MDYzMTYgNTQuNzAzMTU4IDU0LjcwMzE1OCAwIDAgMCAwLTEwOS40MDYzMTZ6TTQ2Mi42ODYzMTYgMjQ5LjU4NjUyNkwyNDguMTMxMzY4IDQwNS41NTc4OTVhMTE5LjMyMjk0NyAxMTkuMzIyOTQ3IDAgMCAxLTQyLjg0NjMxNSAxNTMuMjIyNzM3bDcwLjcwOTg5NCAyMTcuMzU3NDczYTExOS40MzA3MzcgMTE5LjQzMDczNyAwIDAgMSAxMzIuNDE5MzY5IDEwOC4yMjA2MzJINjczLjY4NDIxMWExMTkuNDMwNzM3IDExOS40MzA3MzcgMCAwIDEgMTE5LjE2MTI2My0xMDguOTc1MTU4bDcxLjE0MTA1Mi0yMTguOTc0MzE2YTExOS40MzA3MzcgMTE5LjQzMDczNyAwIDAgMS02Mi4wODY3MzctMTY0LjIxNzI2M2wtMTg2LjM2OC0xMzUuMjc1Nzg5Yy0xOS45OTQ5NDcgMTUuMDkwNTI2LTQ1LjAwMjEwNSAyNC4xNDQ4NDItNzIuMDU3MjYzIDI0LjE0NDg0MmExMTguOTQ1Njg0IDExOC45NDU2ODQgMCAwIDEtODAuNzg4MjEtMzEuNDc0NTI3eiBtLTMyMS43NTE1NzkgMTUzLjkyMzM2OWE1NC43MDMxNTggNTQuNzAzMTU4IDAgMSAwIDAgMTA5LjQwNjMxNiA1NC43MDMxNTggNTQuNzAzMTU4IDAgMCAwIDAtMTA5LjQwNjMxNnogbTc2Ny43MzA1MjYtMTIuNTU3NDc0YTU0LjcwMzE1OCA1NC43MDMxNTggMCAxIDAgMCAxMDkuNDA2MzE2IDU0LjcwMzE1OCA1NC43MDMxNTggMCAwIDAgMC0xMDkuNDA2MzE2eiBtLTM2NS4xOTA3MzctMjg0LjAyNTI2M2E1NC43MDMxNTggNTQuNzAzMTU4IDAgMSAwIDAgMTA5LjQ2MDIxIDU0LjcwMzE1OCA1NC43MDMxNTggMCAwIDAgMC0xMDkuNDA2MzE1eiIgZmlsbD0iIzQ0NEU2MCI+PC9wYXRoPjwvc3ZnPg==",star:"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTkwOC4xIDM1My4xbC0yNTMuOS0zNi45TDU0MC43IDg2LjFjLTMuMS02LjMtOC4yLTExLjQtMTQuNS0xNC41LTE1LjgtNy44LTM1LTEuMy00Mi45IDE0LjVMMzY5LjggMzE2LjJsLTI1My45IDM2LjljLTcgMS0xMy40IDQuMy0xOC4zIDkuMy0xMi4zIDEyLjctMTIuMSAzMi45IDAuNiA0NS4zbDE4My43IDE3OS4xLTQzLjQgMjUyLjljLTEuMiA2LjktMC4xIDE0LjEgMy4yIDIwLjMgOC4yIDE1LjYgMjcuNiAyMS43IDQzLjIgMTMuNEw1MTIgNzU0bDIyNy4xIDExOS40YzYuMiAzLjMgMTMuNCA0LjQgMjAuMyAzLjIgMTcuNC0zIDI5LjEtMTkuNSAyNi4xLTM2LjlsLTQzLjQtMjUyLjkgMTgzLjctMTc5LjFjNS00LjkgOC4zLTExLjMgOS4zLTE4LjMgMi43LTE3LjUtOS41LTMzLjctMjctMzYuM3pNNjY0LjggNTYxLjZsMzYuMSAyMTAuM0w1MTIgNjcyLjcgMzIzLjEgNzcybDM2LjEtMjEwLjMtMTUyLjgtMTQ5TDQxNy42IDM4MiA1MTIgMTkwLjcgNjA2LjQgMzgybDIxMS4yIDMwLjctMTUyLjggMTQ4Ljl6IiBmaWxsPSIjNDQ0RTYwIj48L3BhdGg+PC9zdmc+","star-active":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTkwOC4xIDM1My4xbC0yNTMuOS0zNi45TDU0MC43IDg2LjFjLTMuMS02LjMtOC4yLTExLjQtMTQuNS0xNC41LTE1LjgtNy44LTM1LTEuMy00Mi45IDE0LjVMMzY5LjggMzE2LjJsLTI1My45IDM2LjljLTcgMS0xMy40IDQuMy0xOC4zIDkuMy0xMi4zIDEyLjctMTIuMSAzMi45IDAuNiA0NS4zbDE4My43IDE3OS4xLTQzLjQgMjUyLjljLTEuMiA2LjktMC4xIDE0LjEgMy4yIDIwLjMgOC4yIDE1LjYgMjcuNiAyMS43IDQzLjIgMTMuNEw1MTIgNzU0bDIyNy4xIDExOS40YzYuMiAzLjMgMTMuNCA0LjQgMjAuMyAzLjIgMTcuNC0zIDI5LjEtMTkuNSAyNi4xLTM2LjlsLTQzLjQtMjUyLjkgMTgzLjctMTc5LjFjNS00LjkgOC4zLTExLjMgOS4zLTE4LjMgMi43LTE3LjUtOS41LTMzLjctMjctMzYuM3pNNjY0LjggNTYxLjZsMzYuMSAyMTAuM0w1MTIgNjcyLjcgMzIzLjEgNzcybDM2LjEtMjEwLjMtMTUyLjgtMTQ5TDQxNy42IDM4MiA1MTIgMTkwLjcgNjA2LjQgMzgybDIxMS4yIDMwLjctMTUyLjggMTQ4Ljl6IiBmaWxsPSIjMzM4MUZGIj48L3BhdGg+PC9zdmc+","star-innerVertex":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTg1LjMzMzMzMyAwYTg1LjMzMzMzMyA4NS4zMzMzMzMgMCAwIDEgODEuNDA4IDU5LjczMzMzM2g0OC4yMTMzMzR2ODUuMzMzMzM0TDE3MC42NjY2NjcgMTQ0Ljk4MTMzM1Y4NTMuMzMzMzMzaDY5My4zMzMzMzNsLTI2LjQ1MzMzMy02My40ODggNzguNzYyNjY2LTMyLjc2OCAzMi44NTMzMzQgNzguNzYyNjY3LTQyLjI0IDE3LjQ5MzMzM0g5MzguNjY2NjY3YTg1LjMzMzMzMyA4NS4zMzMzMzMgMCAwIDEgODQuNzM2IDc1LjM0OTMzNEwxMDI0IDkzOC42NjY2NjdhODUuMzMzMzMzIDg1LjMzMzMzMyAwIDAgMS0xNzAuNjY2NjY3IDBIMTcwLjY2NjY2N2E4NS4zMzMzMzMgODUuMzMzMzMzIDAgMSAxLTg1LjMzMzMzNC04NS4zMzMzMzRWMTcwLjY2NjY2N2E4NS4zMzMzMzMgODUuMzMzMzMzIDAgMSAxIDAtMTcwLjY2NjY2N3ogbTc2NS4zNTQ2NjcgNTk5LjQ2NjY2N2wzMi44NTMzMzMgNzguNzYyNjY2LTc4Ljg0OCAzMi44NTMzMzQtMzIuNzY4LTc4Ljc2MjY2NyA3OC43NjI2NjctMzIuODUzMzMzeiBtLTY1LjcwNjY2Ny0xNTcuNTI1MzM0bDMyLjg1MzMzNCA3OC43NjI2NjctNzguNzYyNjY3IDMyLjg1MzMzMy0zMi43NjgtNzguNzYyNjY2IDc4Ljc2MjY2Ny0zMi44NTMzMzR6TTcxOS4zNiAyODQuNDE2bDMyLjg1MzMzMyA3OC43NjI2NjctNzguNzYyNjY2IDMyLjg1MzMzMy0zMi44NTMzMzQtNzguNzYyNjY3IDc4Ljc2MjY2Ny0zMi44NTMzMzN6IG0tNjUuNjIxMzMzLTE1Ny41MjUzMzNsMzIuODUzMzMzIDc4Ljc2MjY2Ni03OC43NjI2NjcgMzIuODUzMzM0LTMyLjg1MzMzMy03OC43NjI2NjcgNzguNzYyNjY3LTMyLjg1MzMzM3pNMzg1LjcwNjY2NyA1OS43MzMzMzN2ODUuMzMzMzM0aC04NS4zMzMzMzR2LTg1LjMzMzMzNGg4NS4zMzMzMzR6IG0xNzAuNjY2NjY2IDB2ODUuMzMzMzM0aC04NS4zMzMzMzN2LTg1LjMzMzMzNGg4NS4zMzMzMzN6IiBmaWxsPSIjNDQ0RTYwIiA+PC9wYXRoPjwvc3ZnPg==","star-innerRatio":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTU2OS4zNDQgNDQ5LjUzNmwxNDYuOTQ0IDI4LjY3MiAxLjAyNC00LjYwOHY0LjYwOGgxLjAyNGM5LjcyOCAwIDE2Ljg5Ni03LjY4IDIwLjQ4LTE0Ljg0OGwxLjAyNC0yLjA0OHYtMi41NmMwLTUuNjMyIDAtMTEuMjY0LTUuMTItMTYuMzg0LTMuMDcyLTMuMDcyLTcuMTY4LTcuMTY4LTEyLjgtNy42OGwtMTI0LjkyOC0yNC4wNjRMNTQxLjY5NiAyODYuNzJjLTIuMDQ4LTQuNjA4LTYuNjU2LTguMTkyLTExLjc3Ni05LjcyOC01LjEyLTEuNTM2LTEwLjc1Mi0xLjUzNi0xNS4zNiAxLjAyNGwtMS41MzYgMC41MTItMS4wMjQgMS4wMjRjLTguMTkyIDguMTkyLTEwLjc1MiAxOS40NTYtNi42NTYgMjcuMTM2bDY0IDE0Mi44NDh6IiBmaWxsPSIjMzM4MUZGIj48L3BhdGg+PHBhdGggZD0iTTkzMS4zMjggNDAzLjQ1NmMtMTAuMjQtMzUuMzI4LTM4LjQtNjEuNDQtNzEuNjgtNjYuNTZsLTE4NC44MzItMzUuODQtODIuNDMyLTE4Mi43ODRjLTEyLjgtMzMuMjgtNDYuMDgtNTYuMzItODAuMzg0LTU2LjMyLTMzLjc5MiAwLTY0LjUxMiAyMC40OC03OS44NzIgNTMuNzZMMzQ5LjE4NCAyOTkuMDA4bC0xODQuMzIgMzUuMzI4Yy0zMy43OTIgNS4xMi02MS45NTIgMzEuMjMyLTcyLjE5MiA2Ni41Ni05LjcyOCAzNC4zMDQtMS4wMjQgNzIuMTkyIDIzLjA0IDk4LjgxNmwxMzEuNTg0IDEzMy42MzItMzUuODQgMTk2LjYwOGMtNS42MzIgMzQuODE2IDguNzA0IDcxLjY4IDM1Ljg0IDk0LjIwOCAxMy44MjQgMTEuMjY0IDM0LjMwNCAxOC40MzIgNTIuMjI0IDE4LjQzMiAxNi44OTYgMCAyOS42OTYtMy4wNzIgNDEuNDcyLTEwLjI0bDE2OC45Ni05MS4xMzYgMTY2LjkxMiA5MS4xMzYgMS4wMjQgMC41MTJjMTYuODk2IDYuNjU2IDI5LjY5NiA5LjcyOCA0MC40NDggOS43MjggMTQuMzM2IDAgMjcuNjQ4LTQuMDk2IDQwLjQ0OC03LjY4IDQuNjA4LTEuNTM2IDkuNzI4LTMuMDcyIDE0Ljg0OC00LjA5NmwyLjU2LTAuNTEyIDIuMDQ4LTEuNTM2YzI1LjA4OC0yMy4wNCAzNy44ODgtNTguODggMzIuNzY4LTkzLjY5NmwtMzMuMjgtMTk2LjYwOCAxMzEuNTg0LTEzNi4xOTJjMjQuMDY0LTI3LjY0OCAzMi4yNTYtNjIuOTc2IDIyLjAxNi05OC44MTZ6TTI3Ni45OTIgODM2LjA5Nmw0MS45ODQtMjMxLjkzNi0xNTcuMTg0LTE1OS4yMzJjLTUuNjMyLTUuNjMyLTguMTkyLTE3LjQwOC02LjY1Ni0yOS4xODQgMy41ODQtMTAuMjQgMTAuMjQtMTYuMzg0IDE5LjQ1Ni0xNy45MmwyMTguMTEyLTQxLjk4NCA5Ni4yNTYtMjE1LjU1MmMzLjA3Mi03LjE2OCAxMi44LTE0LjMzNiAyMC40OC0xNC4zMzZzMTcuNDA4IDcuMTY4IDIwLjQ4IDE0Ljg0OGw5OC4zMDQgMjE1LjA0IDIxOC4xMTIgNDEuOTg0YzcuMTY4IDEuNTM2IDE1LjM2IDcuMTY4IDE2Ljg5NiAxNi4zODR2My4wNzJjMi4wNDggMTEuNzc2LTAuNTEyIDIyLjUyOC02LjY1NiAzMC43Mkw2OTkuOTA0IDYwOS4yOGwzOS45MzYgMjMxLjQyNGMxLjUzNiAxMC43NTItMi4wNDggMjAuNDgtMTAuMjQgMjcuMTM2bC0xLjAyNCAwLjUxMmMtMi41NiAyLjU2LTYuNjU2IDQuMDk2LTExLjI2NCA0LjA5Ni0yLjA0OCAwLTcuMTY4LTEuNTM2LTExLjI2NC0zLjU4NGwtMTk3LjEyLTEwOC4wMzItMTk5LjE2OCAxMDIuOTEyYy00LjA5NiAyLjA0OC05LjIxNiAzLjU4NC0xMS43NzYgMy41ODQtNC42MDggMC04LjcwNC0xLjUzNi0xMS4yNjQtNC4wOTZsLTEuMDI0LTAuNTEyYy02LjY1Ni02LjE0NC0xMC43NTItMTYuMzg0LTguNzA0LTI2LjYyNHoiIGZpbGw9IiM0NDRFNjAiPjwvcGF0aD48L3N2Zz4=",speechBallon:"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTgzMiA4MzJINDQ4bC0xMjggMTkyLTEyOC0xOTJjLTEwNi4wNDggMC0xOTItODYuMDE2LTE5Mi0xOTJWMTkyYTE5MiAxOTIgMCAwIDEgMTkyLTE5Mmg2NDBjMTA1Ljk4NCAwIDE5MiA4NS45NTIgMTkyIDE5MnY0NDhjMCAxMDUuOTg0LTg2LjAxNiAxOTItMTkyIDE5MnogbTY0LTY0MGE2NCA2NCAwIDAgMC02NC02NEgxOTJDMTU2LjY3MiAxMjggMTI4IDE1Ni42NzIgMTI4IDE5MnY0NDhhNjQgNjQgMCAwIDAgNjQgNjRoNDIuNjg4TDMyMCA4MzJsODUuMzEyLTEyOEg4MzJjMzUuMzkyIDAgNjQtMjguNjA4IDY0LTY0VjE5MnoiIGZpbGw9IiM0NDRFNjAiPjwvcGF0aD48L3N2Zz4=","speechBallon-active":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTgzMiA4MzJINDQ4bC0xMjggMTkyLTEyOC0xOTJjLTEwNi4wNDggMC0xOTItODYuMDE2LTE5Mi0xOTJWMTkyYTE5MiAxOTIgMCAwIDEgMTkyLTE5Mmg2NDBjMTA1Ljk4NCAwIDE5MiA4NS45NTIgMTkyIDE5MnY0NDhjMCAxMDUuOTg0LTg2LjAxNiAxOTItMTkyIDE5MnogbTY0LTY0MGE2NCA2NCAwIDAgMC02NC02NEgxOTJDMTU2LjY3MiAxMjggMTI4IDE1Ni42NzIgMTI4IDE5MnY0NDhhNjQgNjQgMCAwIDAgNjQgNjRoNDIuNjg4TDMyMCA4MzJsODUuMzEyLTEyOEg4MzJjMzUuMzkyIDAgNjQtMjguNjA4IDY0LTY0VjE5MnoiIGZpbGw9IiMzMzgxRkYiPjwvcGF0aD48L3N2Zz4=","speechBallon-placement":"data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMTAyNCAxMDI0IiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxNiIgaGVpZ2h0PSIxNiI+PHBhdGggZD0iTTU3NiAyMTMuMzMzMzMzbDIyLjYxMzMzMyAyMi42MTMzMzRhMzIgMzIgMCAwIDAgMC00NS4yMjY2NjdMNTc2IDIxMy4zMzMzMzN6IG0tNjIuNzItMTA3Ljk0NjY2NmEzMiAzMiAwIDEgMC00NS4yMjY2NjcgNDUuMjI2NjY2bDQ1LjIyNjY2Ny00NS4yMjY2NjZ6IG0tNDUuMjI2NjY3IDE3MC42NjY2NjZhMzIgMzIgMCAwIDAgNDUuMjI2NjY3IDQ1LjIyNjY2N2wtNDUuMjI2NjY3LTQ1LjIyNjY2N3pNNDQ4IDgxMC42NjY2NjdsLTIyLjYxMzMzMy0yMi42MTMzMzRhMzIgMzIgMCAwIDAgMCA0NS4yMjY2NjdsMjIuNjEzMzMzLTIyLjYxMzMzM3ogbTEwNy45NDY2NjctNjIuNzJhMzIgMzIgMCAxIDAtNDUuMjI2NjY3LTQ1LjIyNjY2N2w0NS4yMjY2NjcgNDUuMjI2NjY3eiBtLTQ1LjIyNjY2NyAxNzAuNjY2NjY2YTMyIDMyIDAgMSAwIDQ1LjIyNjY2Ny00NS4yMjY2NjZsLTQ1LjIyNjY2NyA0NS4yMjY2NjZ6TTgxMC42NjY2NjcgNTc2bC0yMi42MTMzMzQgMjIuNjEzMzMzYTMyIDMyIDAgMCAwIDQ1LjIyNjY2NyAwTDgxMC42NjY2NjcgNTc2eiBtMTA3Ljk0NjY2Ni02Mi43MmEzMiAzMiAwIDEgMC00NS4yMjY2NjYtNDUuMjI2NjY3bDQ1LjIyNjY2NiA0NS4yMjY2Njd6IG0tMTcwLjY2NjY2Ni00NS4yMjY2NjdhMzIgMzIgMCAxIDAtNDUuMjI2NjY3IDQ1LjIyNjY2N2w0NS4yMjY2NjctNDUuMjI2NjY3ek0yMTMuMzMzMzMzIDQ0OGwyMi42MTMzMzQtMjIuNjEzMzMzYTMyIDMyIDAgMCAwLTQ1LjIyNjY2NyAwbDIyLjYxMzMzMyAyMi42MTMzMzN6IG02Mi43MiAxMDcuOTQ2NjY3YTMyIDMyIDAgMCAwIDQ1LjIyNjY2Ny00NS4yMjY2NjdsLTQ1LjIyNjY2NyA0NS4yMjY2Njd6IG0tMTcwLjY2NjY2Ni00NS4yMjY2NjdhMzIgMzIgMCAxIDAgNDUuMjI2NjY2IDQ1LjIyNjY2N2wtNDUuMjI2NjY2LTQ1LjIyNjY2N3pNMzA5LjMzMzMzMyAyMTMuMzMzMzMzQTc0LjY2NjY2NyA3NC42NjY2NjcgMCAwIDEgMjM0LjY2NjY2NyAyODh2NjRBMTM4LjY2NjY2NyAxMzguNjY2NjY3IDAgMCAwIDM3My4zMzMzMzMgMjEzLjMzMzMzM2gtNjR6TTIzNC42NjY2NjcgMjg4QTc0LjY2NjY2NyA3NC42NjY2NjcgMCAwIDEgMTYwIDIxMy4zMzMzMzNoLTY0QTEzOC42NjY2NjcgMTM4LjY2NjY2NyAwIDAgMCAyMzQuNjY2NjY3IDM1MnYtNjR6TTE2MCAyMTMuMzMzMzMzYzAtNDEuMjE2IDMzLjQ1MDY2Ny03NC42NjY2NjcgNzQuNjY2NjY3LTc0LjY2NjY2NnYtNjRBMTM4LjY2NjY2NyAxMzguNjY2NjY3IDAgMCAwIDk2IDIxMy4zMzMzMzNoNjR6TTIzNC42NjY2NjcgMTM4LjY2NjY2N2M0MS4yMTYgMCA3NC42NjY2NjcgMzMuNDUwNjY3IDc0LjY2NjY2NiA3NC42NjY2NjZoNjRBMTM4LjY2NjY2NyAxMzguNjY2NjY3IDAgMCAwIDIzNC42NjY2NjcgNzQuNjY2NjY3djY0ek0zNDEuMzMzMzMzIDI0NS4zMzMzMzNoMjM0LjY2NjY2N3YtNjRIMzQxLjMzMzMzM3Y2NHogbTI1Ny4yOC01NC42MTMzMzNsLTg1LjMzMzMzMy04NS4zMzMzMzMtNDUuMjI2NjY3IDQ1LjIyNjY2NiA4NS4zMzMzMzQgODUuMzMzMzM0IDQ1LjIyNjY2Ni00NS4yMjY2Njd6IG0tNDUuMjI2NjY2IDBsLTg1LjMzMzMzNCA4NS4zMzMzMzMgNDUuMjI2NjY3IDQ1LjIyNjY2NyA4NS4zMzMzMzMtODUuMzMzMzMzLTQ1LjIyNjY2Ni00NS4yMjY2Njd6TTY1MC42NjY2NjcgODEwLjY2NjY2N2ExMzguNjY2NjY3IDEzOC42NjY2NjcgMCAwIDAgMTM4LjY2NjY2NiAxMzguNjY2NjY2di02NEE3NC42NjY2NjcgNzQuNjY2NjY3IDAgMCAxIDcxNC42NjY2NjcgODEwLjY2NjY2N2gtNjR6IG0xMzguNjY2NjY2IDEzOC42NjY2NjZBMTM4LjY2NjY2NyAxMzguNjY2NjY3IDAgMCAwIDkyOCA4MTAuNjY2NjY3aC02NGE3NC42NjY2NjcgNzQuNjY2NjY3IDAgMCAxLTc0LjY2NjY2NyA3NC42NjY2NjZ2NjR6TTkyOCA4MTAuNjY2NjY3YTEzOC42NjY2NjcgMTM4LjY2NjY2NyAwIDAgMC0xMzguNjY2NjY3LTEzOC42NjY2Njd2NjRjNDEuMjE2IDAgNzQuNjY2NjY3IDMzLjQ1MDY2NyA3NC42NjY2NjcgNzQuNjY2NjY3aDY0eiBtLTEzOC42NjY2NjctMTM4LjY2NjY2N0ExMzguNjY2NjY3IDEzOC42NjY2NjcgMCAwIDAgNjUwLjY2NjY2NyA4MTAuNjY2NjY3aDY0YzAtNDEuMjE2IDMzLjQ1MDY2Ny03NC42NjY2NjcgNzQuNjY2NjY2LTc0LjY2NjY2N3YtNjR6IG0tMTA2LjY2NjY2NiAxMDYuNjY2NjY3aC0yMzQuNjY2NjY3djY0SDY4Mi42NjY2Njd2LTY0eiBtLTIxMi4wNTMzMzQgNTQuNjEzMzMzbDg1LjMzMzMzNC04NS4zMzMzMzMtNDUuMjI2NjY3LTQ1LjIyNjY2Ny04NS4zMzMzMzMgODUuMzMzMzMzIDQ1LjIyNjY2NiA0NS4yMjY2Njd6IG0tNDUuMjI2NjY2IDBsODUuMzMzMzMzIDg1LjMzMzMzMyA0NS4yMjY2NjctNDUuMjI2NjY2LTg1LjMzMzMzNC04NS4zMzMzMzQtNDUuMjI2NjY2IDQ1LjIyNjY2N3pNNjcyIDIzNC42NjY2NjdBMTM4LjY2NjY2NyAxMzguNjY2NjY3IDAgMCAwIDgxMC42NjY2NjcgMzczLjMzMzMzM3YtNjRhNzQuNjY2NjY3IDc0LjY2NjY2NyAwIDAgMS03NC42NjY2NjctNzQuNjY2NjY2aC02NHpNODEwLjY2NjY2NyAzNzMuMzMzMzMzYTEzOC42NjY2NjcgMTM4LjY2NjY2NyAwIDAgMCAxMzguNjY2NjY2LTEzOC42NjY2NjZoLTY0QTc0LjY2NjY2NyA3NC42NjY2NjcgMCAwIDEgODEwLjY2NjY2NyAzMDkuMzMzMzMzdjY0eiBtMTM4LjY2NjY2Ni0xMzguNjY2NjY2QTEzOC42NjY2NjcgMTM4LjY2NjY2NyAwIDAgMCA4MTAuNjY2NjY3IDk2djY0YzQxLjIxNiAwIDc0LjY2NjY2NyAzMy40NTA2NjcgNzQuNjY2NjY2IDc0LjY2NjY2N2g2NHpNODEwLjY2NjY2NyA5NmExMzguNjY2NjY3IDEzOC42NjY2NjcgMCAwIDAtMTM4LjY2NjY2NyAxMzguNjY2NjY3aDY0YzAtNDEuMjE2IDMzLjQ1MDY2Ny03NC42NjY2NjcgNzQuNjY2NjY3LTc0LjY2NjY2N3YtNjR6TTc3OC42NjY2NjcgMzQxLjMzMzMzM3YyMzQuNjY2NjY3aDY0VjM0MS4zMzMzMzNoLTY0eiBtNTQuNjEzMzMzIDI1Ny4yOGw4NS4zMzMzMzMtODUuMzMzMzMzLTQ1LjIyNjY2Ni00NS4yMjY2NjctODUuMzMzMzM0IDg1LjMzMzMzNCA0NS4yMjY2NjcgNDUuMjI2NjY2eiBtMC00NS4yMjY2NjZsLTg1LjMzMzMzMy04NS4zMzMzMzQtNDUuMjI2NjY3IDQ1LjIyNjY2NyA4NS4zMzMzMzMgODUuMzMzMzMzIDQ1LjIyNjY2Ny00NS4yMjY2NjZ6TTEzOC42NjY2NjcgNzg5LjMzMzMzM2MwLTQxLjIxNiAzMy40NTA2NjctNzQuNjY2NjY3IDc0LjY2NjY2Ni03NC42NjY2NjZ2LTY0YTEzOC42NjY2NjcgMTM4LjY2NjY2NyAwIDAgMC0xMzguNjY2NjY2IDEzOC42NjY2NjZoNjR6TTIxMy4zMzMzMzMgNzE0LjY2NjY2N2M0MS4yMTYgMCA3NC42NjY2NjcgMzMuNDUwNjY3IDc0LjY2NjY2NyA3NC42NjY2NjZoNjRBMTM4LjY2NjY2NyAxMzguNjY2NjY3IDAgMCAwIDIxMy4zMzMzMzMgNjUwLjY2NjY2N3Y2NHogbTc0LjY2NjY2NyA3NC42NjY2NjZBNzQuNjY2NjY3IDc0LjY2NjY2NyAwIDAgMSAyMTMuMzMzMzMzIDg2NHY2NGExMzguNjY2NjY3IDEzOC42NjY2NjcgMCAwIDAgMTM4LjY2NjY2Ny0xMzguNjY2NjY3aC02NHpNMjEzLjMzMzMzMyA4NjRhNzQuNjY2NjY3IDc0LjY2NjY2NyAwIDAgMS03NC42NjY2NjYtNzQuNjY2NjY3aC02NEExMzguNjY2NjY3IDEzOC42NjY2NjcgMCAwIDAgMjEzLjMzMzMzMyA5Mjh2LTY0ek0yNDUuMzMzMzMzIDY4Mi42NjY2Njd2LTIzNC42NjY2NjdoLTY0VjY4Mi42NjY2NjdoNjR6IG0tNTQuNjEzMzMzLTIxMi4wNTMzMzRsODUuMzMzMzMzIDg1LjMzMzMzNCA0NS4yMjY2NjctNDUuMjI2NjY3LTg1LjMzMzMzMy04NS4zMzMzMzMtNDUuMjI2NjY3IDQ1LjIyNjY2NnogbTAtNDUuMjI2NjY2bC04NS4zMzMzMzMgODUuMzMzMzMzIDQ1LjIyNjY2NiA0NS4yMjY2NjcgODUuMzMzMzM0LTg1LjMzMzMzNC00NS4yMjY2NjctNDUuMjI2NjY2eiIgIGZpbGw9IiM0NDRFNjAiPjwvcGF0aD48L3N2Zz4="};function ze(o){return Qm[o]}const Zm=o=>{const{workIds:n,mananger:e}=o;return g.createElement("div",{className:"button normal-button",style:{touchAction:"none"},onPointerUp:t=>{t.cancelable&&t.preventDefault(),t.stopPropagation(),t.nativeEvent.stopImmediatePropagation(),ee.emitMethod(te.MainEngine,B.DeleteNode,{workIds:n||[q],viewId:e.viewId})}},g.createElement("img",{alt:"icon",src:ze("delete")}))},Hm=o=>{const{workIds:n,viewId:e}=o;return g.createElement("div",{className:"button normal-button",onPointerUp:t=>{t.stopPropagation(),ee.emitMethod(te.MainEngine,B.CopyNode,{workIds:n||[q],viewId:e})}},g.createElement("img",{alt:"icon",src:ze("duplicate")}))},yi=o=>{const{icon:n,onPointerUpHandler:e}=o;return g.createElement("div",{className:"button normal-button",onPointerUp:e},g.createElement("img",{src:ze(n)}))},qm=o=>{const{open:n,setOpen:e,floatBarRef:t}=o,{floatBarData:r,mananger:i}=g.useContext(ve),[s,a]=g.useState([]),c=g.useMemo(()=>{if(t!=null&&t.current&&j.isNumber(r==null?void 0:r.y)&&(i!=null&&i.height)){if(t.current.offsetTop&&t.current.offsetTop+r.y>180){const h={};return h.top="inherit",h.bottom=50,h}else if(!t.current.offsetTop&&(i==null?void 0:i.height)-t.current.offsetTop-r.y<120){const h={};return h.top="inherit",h.bottom=50,h}}},[t==null?void 0:t.current,r,i]),l=g.useMemo(()=>n?g.createElement("div",{className:"image-layer-menu",style:c},g.createElement(yi,{icon:"to-top",onPointerUpHandler:h=>{h.stopPropagation(),ee.emitMethod(te.MainEngine,B.ZIndexNode,{workIds:[q],layer:st.Top,viewId:i==null?void 0:i.viewId})}}),g.createElement(yi,{icon:"to-bottom",onPointerUpHandler:h=>{h.stopPropagation(),ee.emitMethod(te.MainEngine,B.ZIndexNode,{workIds:[q],layer:st.Bottom,viewId:i==null?void 0:i.viewId})}})):null,[n,c]),u=h=>{h.stopPropagation(),h.nativeEvent.stopImmediatePropagation(),e(!n)};return g.useEffect(()=>{j.isEqual(r==null?void 0:r.selectIds,s)||r!=null&&r.selectIds&&!j.isEqual(r==null?void 0:r.selectIds,s)&&(a(r==null?void 0:r.selectIds),e(!1))},[n,r,s,e]),g.createElement("div",{className:`button normal-button ${n&&"active"}`,onPointerUp:u},l,g.createElement("img",{alt:"icon",src:ze(n?"layer-pressed":"layer")}))},nn=o=>{o.stopPropagation(),o.nativeEvent.stopImmediatePropagation()},Km=()=>g.createElement("svg",{style:{marginLeft:"2px"},viewBox:"0 0 1025 1024",width:"14",height:"14"},g.createElement("path",{d:"M1016.5248 493.8752c-9.984-9.984-26.2144-9.984-36.1984 0l-183.6032 183.6032c-29.952 29.952-78.6944 29.952-108.5952 0l-239.2064-239.2064c-14.4384-14.4384-22.3744-33.6896-22.3744-54.3232s7.936-39.8848 22.3744-54.3232l183.6032-183.6032c9.984-9.984 9.984-26.2144 0-36.1984s-26.2144-9.984-36.1984 0l-183.6032 183.6032c-24.1152 24.1152-37.376 56.2176-37.376 90.5216 0 14.592 2.4576 28.8256 7.0656 42.1888l-374.8864 374.8864c-4.8128 4.8128-7.4752 11.3152-7.4752 18.1248l0 76.8c0 14.1312 11.4688 25.6 25.6 25.6l486.4 0c6.8096 0 13.312-2.7136 18.1248-7.4752l170.0864-170.0864c13.3632 4.6592 27.5968 7.0656 42.1888 7.0656 34.2528 0 66.4064-13.2608 90.5216-37.376l183.6032-183.6032c9.984-9.984 9.984-26.2144 0-36.1984zM501.4016 870.4l-450.2016 0 0-40.6016 358.5024-358.5024c1.024 1.0752 1.9968 2.1504 3.0208 3.1744l239.2064 239.2064c1.024 1.024 2.0992 2.048 3.1744 3.0208l-153.7024 153.7024z",fill:"#000000"})),No=o=>{const{activeColor:n,onPointerUpHandler:e}=o;return g.createElement("div",{className:`font-color-button ${n==="transparent"?"active":""}`,onPointerUp:e},g.createElement("div",{className:"circle none"}))},bn=o=>{const{color:n,activeColor:e,onPointerUpHandler:t}=o;return g.createElement("div",{className:`font-color-button ${n===e?"active":""}`,onPointerUp:t},g.createElement("div",{className:"circle",style:{backgroundColor:Ee(n,1)}}))},Dn=o=>{const{opacity:n,activeColor:e,setCurOpacity:t}=o,[r,i]=g.useState({x:108,y:0}),s=g.useRef(0);if(g.useEffect(()=>{i({x:n*100+8,y:0})},[]),!e)return null;const a=(h,d)=>{const f=Math.min(Math.max(h-8,0),100)/100;(n!==f||d===E.Done)&&t(f,e,d)},c=(h,d)=>{d.x!==(r==null?void 0:r.x)&&i({x:d.x,y:0}),!s.current&&(s.current=setTimeout(()=>{s.current=0,a(d.x,E.Doing)},100))},l=()=>{t(n,e,E.Start)},u=(h,d)=>{d.x!==(r==null?void 0:r.x)&&i({x:d.x,y:0}),s.current&&(clearTimeout(s.current),s.current=0),a(d.x,E.Done)};return g.createElement("div",{className:"font-color-opacity",style:{marginLeft:"10px"},onPointerUp:h=>{s.current&&(clearTimeout(s.current),s.current=0);const d=h.nativeEvent.offsetX,f=Math.min(Math.max(d-12,0),100)/100;i({x:f*100+8,y:0}),t(f,e,E.Done)}},g.createElement("div",{className:"range-color",style:{background:`linear-gradient(to right, ${Ee(e,0)}, ${Ee(e,1)})`}}),g.createElement("div",{className:"range-opacity"},g.createElement(Rt,{bounds:"parent",axis:"x",position:r,onDrag:c,onStart:l,onStop:u},g.createElement("div",{className:"circle",style:{backgroundColor:Ee(e,n)},onPointerUp:nn}))))},Jm=o=>{const{min:n,max:e,activeNumber:t,setActiveNumber:r,color:i}=o,[s,a]=g.useState({x:108,y:0}),c=g.useRef(0);if(g.useEffect(()=>{const f=Math.ceil((t-n)/(e-n)*100)+8;a({x:f,y:0})},[]),!t)return null;const l=(f,p)=>{const w=Math.ceil(Math.max(f-8,0)/100*(e-n)+n);(t!==w||p===E.Done)&&r(w,p)},u=(f,p)=>{p.x!==(s==null?void 0:s.x)&&a({x:p.x,y:0}),!c.current&&(c.current=setTimeout(()=>{c.current=0,l(p.x,E.Doing)},100))},h=()=>{r(t,E.Start)},d=(f,p)=>{p.x!==(s==null?void 0:s.x)&&a({x:p.x,y:0}),c.current&&(clearTimeout(c.current),c.current=0),l(p.x,E.Done)};return g.createElement("div",{className:"font-color-opacity",style:{marginLeft:"10px"},onPointerUp:f=>{c.current&&(clearTimeout(c.current),c.current=0);const p=f.nativeEvent.offsetX,w=Math.ceil(Math.max(p-12,0)/100*(e-n)+n),N=Math.ceil((w-n)/(e-n)*100)+8;a({x:N,y:0}),r(w,E.Done)}},g.createElement("div",{className:"range-color",style:{backgroundColor:i}}),g.createElement("div",{className:"range-opacity"},g.createElement(Rt,{bounds:"parent",axis:"x",position:s,onDrag:u,onStart:h,onStop:d},g.createElement("div",{className:"circle",style:{backgroundColor:i},onPointerUp:nn},g.createElement("div",{className:"range-opacity-data-icon"},t)))))},Xm=o=>{const{useStroke:n,color:e,activeStrokeType:t,setStrokeType:r}=o;return g.createElement("div",{className:"stroke-type-box"},!!n&&g.createElement("div",{className:`stroke-type-box-item Stroke ${t===ce.Stroke&&"active"}`,style:{backgroundColor:e},onPointerUp:()=>{r(ce.Stroke)}}),g.createElement("div",{className:`stroke-type-box-item Normal ${t===ce.Normal&&"active"}`,style:{borderColor:e},onPointerUp:()=>{r(ce.Normal)}}),g.createElement("div",{className:`stroke-type-box-item Dotted ${t===ce.Dotted&&"active"}`,style:{borderColor:e},onPointerUp:()=>{r(ce.Dotted)}}),g.createElement("div",{className:`stroke-type-box-item LongDotted ${t===ce.LongDotted&&"active"}`,style:{borderColor:e},onPointerUp:()=>{r(ce.LongDotted)}}))},_m=o=>{const{open:n,setOpen:e,floatBarRef:t}=o,{floatBarData:r,floatBarColors:i,mananger:s,setFloatBarData:a}=g.useContext(ve),[c,l]=g.useState(),[u,h]=g.useState(1);g.useEffect(()=>{if(r!=null&&r.strokeColor){const[M,v]=Nn(r.strokeColor);l(M),h(v)}},[r]);const d=g.useMemo(()=>{if(t!=null&&t.current&&r&&j.isNumber(r==null?void 0:r.y)&&(s!=null&&s.height)){if(t.current.offsetTop&&t.current.offsetTop+r.y>180){const M={};return M.top="inherit",M.bottom=50,M}else if(!t.current.offsetTop&&(s==null?void 0:s.height)-t.current.offsetTop-r.y<120){const M={};return M.top="inherit",M.bottom=50,M}}},[r,t,s==null?void 0:s.height]),f=g.useMemo(()=>g.createElement(Dn,{key:"strokeColors",opacity:u,activeColor:c,setCurOpacity:(M,v,m)=>{h(M);const T=Ee(v,M);r!=null&&r.strokeColor&&a({strokeColor:T}),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:[q],strokeColor:T,workState:m,viewId:s==null?void 0:s.viewId})}}),[u,c,r==null?void 0:r.strokeColor,s==null?void 0:s.viewId,a]),p=g.useMemo(()=>c&&r&&r.thickness?g.createElement(Jm,{key:"strokeThickness",min:Math.min(r.thickness,(s==null?void 0:s.control.pluginOptions.extras.strokeWidth.min)||ye.strokeWidth.min),max:Math.max(r.thickness,(s==null?void 0:s.control.pluginOptions.extras.strokeWidth.max)||ye.strokeWidth.max),activeNumber:r.thickness,setActiveNumber:(M,v)=>{r!=null&&r.thickness&&a({thickness:M}),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:[q],thickness:M,workState:v,viewId:s==null?void 0:s.viewId})},color:c}):null,[c,r,s==null?void 0:s.control.pluginOptions.extras.strokeWidth.max,s==null?void 0:s.control.pluginOptions.extras.strokeWidth.min,s==null?void 0:s.viewId,a]),w=g.useMemo(()=>c&&r&&(r!=null&&r.strokeType)?g.createElement(Xm,{key:"strokeType",useStroke:r==null?void 0:r.useStroke,activeStrokeType:r.strokeType,setStrokeType:M=>{r.strokeType&&a({strokeType:M}),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:[q],strokeType:M,workState:E.Done,viewId:s==null?void 0:s.viewId})},color:c}):null,[c,r,s==null?void 0:s.viewId,a]),N=g.useMemo(()=>n?g.createElement("div",{className:"font-colors-menu",style:d,onPointerUp:M=>{M.stopPropagation(),M.nativeEvent.stopImmediatePropagation()}},w,p,g.createElement("div",{className:"font-colors-line"}),i.concat().map((M,v)=>{const m=tn(...M);return g.createElement(bn,{key:v,color:m,activeColor:c,onPointerUpHandler:T=>{T.stopPropagation(),l(m);const C=Ee(m,u);r!=null&&r.strokeColor&&(r.strokeColor=C,a({strokeColor:C})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:[q],workState:E.Done,strokeColor:C,viewId:s==null?void 0:s.viewId})}})}),f):null,[n,d,w,p,i,f,c,u,r,s==null?void 0:s.viewId,a]),y=g.useMemo(()=>c?g.createElement("div",{className:"color-bar-ring",style:{backgroundColor:Ee(c,u)}},g.createElement("div",{className:"circle"})):null,[c,u]);return g.createElement("div",{className:`button normal-button font-colors-icon ${n&&"active"}`,onPointerUp:M=>{M.stopPropagation(),M.nativeEvent.stopImmediatePropagation(),e(!n)}},y,N)},eI=o=>{const{open:n,setOpen:e,floatBarRef:t}=o,{floatBarData:r,floatBarColors:i,mananger:s,setFloatBarData:a}=g.useContext(ve),[c,l]=g.useState(),[u,h]=g.useState(1);g.useEffect(()=>{if(r!=null&&r.fillColor){const[N,y]=(r==null?void 0:r.fillColor)==="transparent"&&["transparent",1]||Nn(r.fillColor);l(N),h(y)}},[r]);const d=g.useMemo(()=>{if(t!=null&&t.current&&j.isNumber(r==null?void 0:r.y)&&(s!=null&&s.height)){if(t.current.offsetTop&&t.current.offsetTop+r.y>200){const N={};return N.top="inherit",N.bottom=50,N}else if(!t.current.offsetTop&&(s==null?void 0:s.height)-t.current.offsetTop-r.y<140){const N={};return N.top="inherit",N.bottom=50,N}}},[t,r,s==null?void 0:s.height]),f=g.useMemo(()=>c&&c!=="transparent"?g.createElement(Dn,{key:"fillColors",opacity:u||0,activeColor:c,setCurOpacity:(N,y,M)=>{h(N);const v=Ee(y,N);r!=null&&r.fillColor&&(r.fillColor=v,a({fillColor:v})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:[q],fillColor:c&&Ee(y,N),workState:M,viewId:s==null?void 0:s.viewId})}}):null,[c,u,r,s==null?void 0:s.viewId,a]),p=g.useMemo(()=>n?g.createElement("div",{className:"font-colors-menu",style:d,onPointerUp:N=>{N.stopPropagation(),N.nativeEvent.stopImmediatePropagation()}},g.createElement(No,{activeColor:c,onPointerUpHandler:N=>{N.stopPropagation(),l("transparent");const y="transparent";r!=null&&r.fillColor&&(r.fillColor=y,a({fillColor:y})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:[q],workState:E.Done,fillColor:y,viewId:s==null?void 0:s.viewId})}}),i.map((N,y)=>{const M=tn(...N);return g.createElement(bn,{key:y,color:M,activeColor:c,onPointerUpHandler:v=>{v.cancelable&&v.preventDefault(),v.stopPropagation(),l(M);const m=Ee(M,u);r!=null&&r.fillColor&&(r.fillColor=m,a({fillColor:m})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:[q],workState:E.Done,fillColor:m,viewId:s==null?void 0:s.viewId})}})}),f):null,[n,d,c,i,f,r,s==null?void 0:s.viewId,a,u]),w=g.useMemo(()=>{const N=c&&c!=="transparent"&&Ee(c,u)||"transparent";return g.createElement("div",{className:"color-bar-fill"},g.createElement("div",{className:"circle",style:{backgroundColor:N}}))},[c,u]);return g.createElement("div",{className:`button normal-button font-colors-icon ${n&&"active"}`,onPointerUp:N=>{N.stopPropagation(),N.nativeEvent.stopImmediatePropagation(),e(!n)}},w,p)},tI=o=>{const{open:n,setOpen:e,textOpt:t,workIds:r,floatBarRef:i}=o,{floatBarColors:s,mananger:a,setFloatBarData:c,floatBarData:l}=g.useContext(ve),[u,h]=g.useState(),[d,f]=g.useState(1);g.useEffect(()=>{if(t!=null&&t.fontColor){const[M,v]=(t==null?void 0:t.fontColor)==="transparent"&&["transparent",0]||Nn(t.fontColor);h(M),f(v)}},[t==null?void 0:t.fontColor]);const p=g.useMemo(()=>{if(i!=null&&i.current&&l&&j.isNumber(l==null?void 0:l.y)&&(a!=null&&a.height)){if(i.current.offsetTop&&i.current.offsetTop+l.y>180){const M={};return M.top="inherit",M.bottom=50,M}else if(!i.current.offsetTop&&(a==null?void 0:a.height)-i.current.offsetTop-l.y<120){const M={};return M.top="inherit",M.bottom=50,M}}},[i,l,a==null?void 0:a.height]),w=g.useMemo(()=>u&&u!=="transparent"?g.createElement(Dn,{key:"fontColors",opacity:d,activeColor:u,setCurOpacity:(M,v,m)=>{f(M);const T=Ee(v,M);l!=null&&l.textOpt&&(l.textOpt.fontColor=T,c({textOpt:l.textOpt})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:r||[q],fontColor:u&&T,workState:m,viewId:a==null?void 0:a.viewId})}}):null,[c,u,d,a==null?void 0:a.control.room,a==null?void 0:a.viewId,l==null?void 0:l.textOpt,r]),N=g.useMemo(()=>n?g.createElement("div",{className:"font-colors-menu",style:p,onPointerUp:M=>{M.stopPropagation(),M.nativeEvent.stopImmediatePropagation()}},s.map((M,v)=>{const m=tn(...M);return g.createElement(bn,{key:v,color:m,activeColor:u,onPointerUpHandler:T=>{T.stopPropagation(),h(m);const C=Ee(m,d);l!=null&&l.textOpt&&(l.textOpt.fontColor=C,c({textOpt:l.textOpt})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:r||[q],workState:E.Done,fontColor:C,viewId:a==null?void 0:a.viewId})}})}),w):null,[c,n,s,w,u,d,l==null?void 0:l.textOpt,r,a==null?void 0:a.viewId,p]),y=g.useMemo(()=>{const M=u&&u!=="transparent"&&Ee(u,d)||"transparent";return g.createElement("div",{className:"color-bar"},g.createElement("div",{className:"color-bar-color",style:{backgroundColor:M}}))},[u,d]);return g.createElement("div",{className:`button normal-button font-colors-icon ${n&&"active"}`,onPointerUp:M=>{M.stopPropagation(),M.nativeEvent.stopImmediatePropagation(),e(!n)}},g.createElement("img",{alt:"icon",src:ze("font-colors")}),y,N)},nI=o=>{const{open:n,setOpen:e,textOpt:t,workIds:r,floatBarRef:i}=o,{floatBarColors:s,mananger:a,setFloatBarData:c,floatBarData:l}=g.useContext(ve),[u,h]=g.useState(),[d,f]=g.useState(1);g.useEffect(()=>{if(t!=null&&t.fontBgColor){const[M,v]=(t==null?void 0:t.fontBgColor)==="transparent"&&["transparent",1]||Nn(t.fontBgColor);h(M),f(v)}},[t==null?void 0:t.fontBgColor]);const p=g.useMemo(()=>{if(i!=null&&i.current&&l&&j.isNumber(l==null?void 0:l.y)&&(a!=null&&a.height)){if(i.current.offsetTop&&i.current.offsetTop+l.y>180){const M={};return M.top="inherit",M.bottom=50,M}else if(!i.current.offsetTop&&(a==null?void 0:a.height)-i.current.offsetTop-l.y<120){const M={};return M.top="inherit",M.bottom=50,M}}},[i,l,a==null?void 0:a.height]),w=g.useMemo(()=>u&&u!=="transparent"?g.createElement(Dn,{key:"fontBgColor",opacity:d||0,activeColor:u,setCurOpacity:(M,v,m)=>{f(M);const T=Ee(v,M);l!=null&&l.textOpt&&(l.textOpt.fontBgColor=T,c({textOpt:l.textOpt})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:r||[q],fontBgColor:u&&Ee(v,M),workState:m,viewId:a==null?void 0:a.viewId})}}):null,[u,d,l==null?void 0:l.textOpt,r,a==null?void 0:a.viewId,c]),N=g.useMemo(()=>n?g.createElement("div",{className:"font-colors-menu",style:p,onPointerUp:M=>{M.stopPropagation(),M.nativeEvent.stopImmediatePropagation()}},g.createElement(No,{activeColor:u,onPointerUpHandler:M=>{M.stopPropagation();const v="transparent";h(v),l!=null&&l.textOpt&&(l.textOpt.fontBgColor=v,c({textOpt:l.textOpt})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:r||[q],workState:E.Done,fontBgColor:v,viewId:a==null?void 0:a.viewId})}}),s.map((M,v)=>{const m=tn(...M);return g.createElement(bn,{key:v,color:m,activeColor:u,onPointerUpHandler:T=>{T.stopPropagation(),h(m);const C=Ee(m,d);l!=null&&l.textOpt&&(l.textOpt.fontBgColor=C,c({textOpt:l.textOpt})),ee.emitMethod(te.MainEngine,B.SetColorNode,{workIds:r||[q],workState:E.Done,fontBgColor:Ee(m,d),viewId:a==null?void 0:a.viewId})}})}),w):null,[c,n,s,w,d,u,l==null?void 0:l.textOpt,r,a==null?void 0:a.viewId,p]),y=g.useMemo(()=>{const M=u&&u!=="transparent"&&Ee(u,d)||"transparent";return g.createElement("div",{className:"color-bar",style:{marginTop:0}},g.createElement("div",{className:"color-bar-color",style:{backgroundColor:M}}))},[u,d]);return g.createElement("div",{className:`button normal-button font-colors-icon ${n&&"active"}`,onPointerUp:M=>{M.stopPropagation(),M.nativeEvent.stopImmediatePropagation(),e(!n)}},g.createElement(Km,null),y,N)},rI=o=>{const{bold:n,setBold:e,workIds:t,viewId:r}=o,i=s=>{const a=n==="bold"?"normal":"bold";s==null||s.stopPropagation(),e(a),ee.emitMethod(te.MainEngine,B.SetFontStyle,{workIds:t,viewId:r,bold:a})};return g.createElement("div",{className:"font-style-button",onPointerUp:i},g.createElement("img",{alt:"icon",src:ze(n==="bold"?"bold-active":"bold")}))},iI=o=>{const{underline:n,setUnderline:e,workIds:t,viewId:r}=o,i=s=>{const a=!n;s==null||s.stopPropagation(),e(a),ee.emitMethod(te.MainEngine,B.SetFontStyle,{workIds:t,viewId:r,underline:a})};return g.createElement("div",{className:"font-style-button",onPointerUp:i},g.createElement("img",{alt:"icon",src:ze(n?"underline-active":"underline")}))},oI=o=>{const{lineThrough:n,setLineThrough:e,workIds:t,viewId:r}=o,i=s=>{const a=!n;s==null||s.stopPropagation(),e(a),ee.emitMethod(te.MainEngine,B.SetFontStyle,{workIds:t,viewId:r,lineThrough:a})};return g.createElement("div",{className:"font-style-button",onPointerUp:i},g.createElement("img",{alt:"icon",src:ze(n?"line-through-active":"line-through")}))},sI=o=>{const{italic:n,setItalic:e,workIds:t,viewId:r}=o,i=s=>{const a=n==="italic"?"normal":"italic";s==null||s.stopPropagation(),e(a),ee.emitMethod(te.MainEngine,B.SetFontStyle,{workIds:t,viewId:r,italic:a})};return g.createElement("div",{className:"font-style-button",onPointerUp:i},g.createElement("img",{alt:"icon",src:ze(n==="italic"?"italic-active":"italic")}))},aI=o=>{const{open:n,setOpen:e,textOpt:t,workIds:r,style:i,floatBarRef:s}=o,{mananger:a,floatBarData:c}=g.useContext(ve),[l,u]=g.useState("normal"),[h,d]=g.useState("normal"),[f,p]=g.useState(!1),[w,N]=g.useState(!1);g.useEffect(()=>{t!=null&&t.bold&&u(t.bold),j.isBoolean(t==null?void 0:t.underline)&&p(t.underline||!1),j.isBoolean(t==null?void 0:t.lineThrough)&&N(t.lineThrough||!1),t!=null&&t.italic&&d(t.italic)},[t]);const y=g.useMemo(()=>{if(i&&(s!=null&&s.current)&&j.isNumber(c==null?void 0:c.y)&&(a!=null&&a.height)){if(s.current.offsetTop&&s.current.offsetTop+c.y>180){const v={};return v.top="inherit",v.bottom=50,v}else if(!s.current.offsetTop&&(a==null?void 0:a.height)-s.current.offsetTop-c.y<120){const v={};return v.top="inherit",v.bottom=50,v}}},[i,s==null?void 0:s.current,c,a]),M=g.useMemo(()=>n?g.createElement("div",{className:"font-style-menu",style:y,onPointerUp:v=>{v.stopPropagation(),v.nativeEvent.stopImmediatePropagation()}},g.createElement(rI,{workIds:r||[q],bold:l,setBold:u,viewId:a==null?void 0:a.viewId}),g.createElement(iI,{workIds:r||[q],underline:f,setUnderline:p,viewId:a==null?void 0:a.viewId}),g.createElement(oI,{workIds:r||[q],lineThrough:w,setLineThrough:N,viewId:a==null?void 0:a.viewId}),g.createElement(sI,{workIds:r||[q],italic:h,setItalic:d,viewId:a==null?void 0:a.viewId})):null,[n,r,l,a==null?void 0:a.viewId,f,w,h,y]);return g.createElement("div",{className:`button normal-button ${n&&"active"}`,onPointerUp:v=>{v.stopPropagation(),v.nativeEvent.stopImmediatePropagation(),e(!n)}},g.createElement("img",{alt:"icon",src:ze(n?"font-style-active":"font-style")}),M)},Je=Object.freeze([12,14,18,24,36,48,64,80,144,288]),xt=["top","topLeft","topRight","bottom","bottomLeft","bottomRight","left","leftTop","leftBottom","right","rightTop","rightBottom"],cI=new Map([["selector","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABkAAAAZCAYAAADE6YVjAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAKeSURBVHgB3VTLi1JhFD86zlQ4ysxSXAy1GWYZzMxmYAhHagRB/QN8FLqPFq4FIQhXkS6kTQ4t2ilIKEWgSS0SmVpIm0BdaBJSaOP78XU+PXey6+saburAD+73uL/feX0H4H81GQdj7D7ilrCGFRonk3c6nXvhcJiFQiGWy+Xy/X7/WbPZ1K1KkBOsl0qlO36/n+3t7Q1hs9kYF+WC3W73MTpxc1lBmej7KuJaoVDInZ6eqsWXDw4OwGKxwPHx8Se1Wn1Wr9cjW1tbOTxi9D9bJCJHXEFslsvlR263+246nYZZptPpQK/Xg8lkSvZ6vbNGo5EgQRCLiSPhIqpoNHobo3keCARgkalUKjg5ORlGuL+/n8T6PVAqlefjYmKRdYQSsZ3P5z8aDAYVLGFarRbi8fhbhUKhx2VPEJGP3eEbfTrs4MUwr4EU49FYrVbweDy1SqXyipy95FaI7g8QXS6SyWReHx4e2ubVBc+HtTk6OjqvVqtvvF7vi0gkUiSByyyJ21BGwpswJ2Vmsxlw/0Kj0bxMJBJJl8vFPWkhGogLQoeyMhEJo2jGUzYRjcPh+Op0Oq2pVOoHkXE0SahF/w+E+3KYNEaX2pSyiSiKxeJTFPiGyyriO6FKEUgSESLp4ht4bzQaf4pFYrHYO/ysEXGNyJtjKRqM/zNNhFuf0B7vst3dXdjZ2Yn4fL4vRFwn8jaMGqYPU179LBEGf3bZcNNutwPOtScwKnCLPJ9KLMWEh7mNuIFdVsNXzbBNP+D6Ou1vwAqm8hqMWlmbzWYf4mz6HAwGzbjWwGgqrEklmucJT+UGCfG3wiPjueeNwGvB0zkAid7OMmF8CyOck/I6NJcR4KZYcM6J2vCbUGhvyQIA0gonzCEZkQud9Fcd9W/bL57cJu3lkjuNAAAAAElFTkSuQmCC"],["pencil","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAJ2SURBVHgB7ZXPqxJRFMfvjI4F+cqkTcrjge9B+B+0LJQ27lq4ijZprly6DaF1COKPjYRrVy0CF/aof6Baa6ChOPkLFcdMm1+dM93RafzxZuptgnfgC3ecO+dzz497JOTKNsZMp9OAoihvZFku4xp/I5dsbL/fP221Wl/D4bCKwnWn0znDd+SSDE/N6ZBgMKjJBNuKzC4dHTgQ5PF4bququn7R7XZJPB4/kSTpHcBOiQlmJ6cMpCvAcdz5ZDJhF4tF1u12v4jFYkc8z683+f1+Uq1W38K+x/AogVQ7ETF4SnB+Ho1GTxKJxDFC2u32q1KpJPh8vvVGjHK5XM4xahv+tYgRcranJrNarfay2WwKoVBIRTUajW42m70P390EOYmFrOEGdhfECEMIwur1Og+p5VOp1CP47piCOB3EXBBJAIuLRcZi7zKsSaVSEbxe70N4FEEL0AyE6VuBZEJD2wmyAkHDmoxGIwGW36ljBP2gUEXf5/wXCDZBsVjky+XyUwpCyBL0k0ai7gNp3WUVUigUvgHoWSaTaRoi2YJojk1r52q1eh2JRJ5YgUB3Pc/n83WyXRPV/A1rWrtgSAZsQL6Q3ynTI1F2QdCMqXNQEGsDMqMgrMt6ChwCaXcGYdBFjA3InELkQxBCtkcEI4riHyPFCMnlcnEKMbYzQhRi0TCKa6A76XT6wWAweD8ejz8Oh8PPcEc+9Xq9D8lkMgLv74Hugo5ALmJzlumG4+IG6BZ1dJ06wtPqN14gmza2FYljD1SljrCTsAaYpjnZFP7CmpADEel/ai4qffLiqSUKFSlEP8xfgYwwlmzyr1KYHoUtgBU4Y9D/Y78AxCeE/aWoyrkAAAAASUVORK5CYII="],["eraser","data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABoAAAAaCAYAAACpSkzOAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAANKSURBVHgB1VTdS5NhFD/7iuXa8KNw7SK/IjBYo13soqvEITENtj9AwZiCOCTvQrNWF9rFFPGLrC1iF10Oiy68mBSUF2KB4YabhKKyTfFCc+3Lzb2ds72LsfbxCkZ04Mf7Puc5z/k95+M5AP+R8OAvCW9nZ6cyHo8/SSaTc4RQKKQ+S0JyxFtbW6va39//ZjKZmMbGRkar1TJOp5MhYtwXwBkQkgMROnyXIcmGw+FgYrHY00JkQm4cqYPCaDQ6ZrFY7i4sLPxhMDg4SJ8hTOOWRCJ5jf8npyUiEgE6eGy1Wk12u72gIZHJZDLr4eHhVnl5+YdsslL5pH1+JBIx22y2h9PT01BKpFIpLC4ufhKJRFpcxhEM6fmlSMLh8P35+XlOJCTBYBC2t7dr8fdctv+iRHjI4HK5LAMDA8BVFAoFyOVyH/6KIKsxCtVIgC188+Dg4CV2GJxGpqamYHR09AHklEWQY5d6K/gg67HD3huNRrlKpYLNzU3gIsPDw8Dn84fa29s/4zIK6Rol8xIhSUMikXB2dXXV4AHo6en5KhaLFcvLy0VJent7QaPRzKrV6le4DCEi2UTCnGgE1dXVj3Q6XY1er08drKiosK2urnbjnrFQQxBJU1PTC3y4kyxJGHEMWe2dTUSNIcLZVXl0dAStra3BiYmJOTqgVCqfu91uull3LhlFjbZv6urqiCTIElHaEsC2dq4QqXRlZeUePsrUDFtfX/eZzebbqL+GuIFks1js32OHRtHu7u5H3FMiahFViPNQYuZRO8oQVzY2NibJocFgYAKBgLuzs/M66hsQKuzELx0dHak9rKe3paXlFurrERdZEiGUGARkcAFxmSJAJ/aRkRGGnOKwdPn9/rG9vT0HXaC5uZnxer3+vr4+HdpeRVxClBWLJFuZqhF7gAjL0PGz8fFxvcfjSY0WevVUv5mZmQDWyog1/I52PyBdlxgUqUu+qMSQznVtW1ubBlP3dmlpicnA5/N5+vv770C6bhS9lEu6eHnWFP45NioJS5xxRLdNsrenKH5CusNOWH1BEeTRMTnI6MgZpYYeYhhOmS5eEX0mMhELPktGoBd/zCWSUkTAOs4QZqZ8JsokS8Kp8KWICtlwdv5P5BchBHaEIRURoQAAAABJRU5ErkJggg=="],["text","data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDdweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDcgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT50ZXh0LWN1cnNvcjwvdGl0bGU+CiAgICA8ZGVzYz5DcmVhdGVkIHdpdGggU2tldGNoLjwvZGVzYz4KICAgIDxkZWZzPgogICAgICAgIDxwYXRoIGQ9Ik0xNiwyNi41IEMxNS43MjM4NTc2LDI2LjUgMTUuNSwyNi4yNzYxNDI0IDE1LjUsMjYgQzE1LjUsMjUuNzU0NTQwMSAxNS42NzY4NzUyLDI1LjU1MDM5MTYgMTUuOTEwMTI0NCwyNS41MDgwNTU3IEwxNiwyNS41IEwxOS41LDI1LjUgTDE5LjUsMTQuNSBMMTYsMTQuNSBDMTUuNzIzODU3NiwxNC41IDE1LjUsMTQuMjc2MTQyNCAxNS41LDE0IEMxNS41LDEzLjc1NDU0MDEgMTUuNjc2ODc1MiwxMy41NTAzOTE2IDE1LjkxMDEyNDQsMTMuNTA4MDU1NyBMMTYsMTMuNSBMMjQsMTMuNSBDMjQuMjc2MTQyNCwxMy41IDI0LjUsMTMuNzIzODU3NiAyNC41LDE0IEMyNC41LDE0LjI0NTQ1OTkgMjQuMzIzMTI0OCwxNC40NDk2MDg0IDI0LjA4OTg3NTYsMTQuNDkxOTQ0MyBMMjQsMTQuNSBMMjAuNSwxNC41IEwyMC41LDI1LjUgTDI0LDI1LjUgQzI0LjI3NjE0MjQsMjUuNSAyNC41LDI1LjcyMzg1NzYgMjQuNSwyNiBDMjQuNSwyNi4yNDU0NTk5IDI0LjMyMzEyNDgsMjYuNDQ5NjA4NCAyNC4wODk4NzU2LDI2LjQ5MTk0NDMgTDI0LDI2LjUgTDE2LDI2LjUgWiIgaWQ9InBhdGgtMSI+PC9wYXRoPgogICAgICAgIDxmaWx0ZXIgeD0iLTI4NC4wJSIgeT0iLTgxLjUlIiB3aWR0aD0iNjY4LjElIiBoZWlnaHQ9IjI5My45JSIgZmlsdGVyVW5pdHM9Im9iamVjdEJvdW5kaW5nQm94IiBpZD0iZmlsdGVyLTIiPgogICAgICAgICAgICA8ZmVNb3JwaG9sb2d5IHJhZGl1cz0iMSIgb3BlcmF0b3I9ImRpbGF0ZSIgaW49IlNvdXJjZUFscGhhIiByZXN1bHQ9InNoYWRvd1NwcmVhZE91dGVyMSI+PC9mZU1vcnBob2xvZ3k+CiAgICAgICAgICAgIDxmZU9mZnNldCBkeD0iMCIgZHk9IjIiIGluPSJzaGFkb3dTcHJlYWRPdXRlcjEiIHJlc3VsdD0ic2hhZG93T2Zmc2V0T3V0ZXIxIj48L2ZlT2Zmc2V0PgogICAgICAgICAgICA8ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIzIiBpbj0ic2hhZG93T2Zmc2V0T3V0ZXIxIiByZXN1bHQ9InNoYWRvd0JsdXJPdXRlcjEiPjwvZmVHYXVzc2lhbkJsdXI+CiAgICAgICAgICAgIDxmZUNvbXBvc2l0ZSBpbj0ic2hhZG93Qmx1ck91dGVyMSIgaW4yPSJTb3VyY2VBbHBoYSIgb3BlcmF0b3I9Im91dCIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29tcG9zaXRlPgogICAgICAgICAgICA8ZmVDb2xvck1hdHJpeCB2YWx1ZXM9IjAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgIDAgMCAwIDAgMCAgMCAwIDAgMC4xNiAwIiB0eXBlPSJtYXRyaXgiIGluPSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlQ29sb3JNYXRyaXg+CiAgICAgICAgPC9maWx0ZXI+CiAgICA8L2RlZnM+CiAgICA8ZyBpZD0i6aG16Z2iLTQiIHN0cm9rZT0ibm9uZSIgc3Ryb2tlLXdpZHRoPSIxIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgICAgIDxnIGlkPSJXaGl0ZWJvYXJkLUd1aWRlbGluZXMiIHRyYW5zZm9ybT0idHJhbnNsYXRlKC0zODguMDAwMDAwLCAtNjcyLjAwMDAwMCkiPgogICAgICAgICAgICA8ZyBpZD0idGV4dC1jdXJzb3IiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDM5Mi4wMDAwMDAsIDY3Mi4wMDAwMDApIj4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaLlpIfku70tNDAiIGZpbGw9IiNGRkZGRkYiIG9wYWNpdHk9IjAuMDEiIHg9IjAiIHk9IjAiIHdpZHRoPSI0MCIgaGVpZ2h0PSI0MCIgcng9IjIiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxnIGlkPSLlvaLnirbnu5PlkIgiIGZpbGwtcnVsZT0ibm9uemVybyI+CiAgICAgICAgICAgICAgICAgICAgPHVzZSBmaWxsPSJibGFjayIgZmlsbC1vcGFjaXR5PSIxIiBmaWx0ZXI9InVybCgjZmlsdGVyLTIpIiB4bGluazpocmVmPSIjcGF0aC0xIj48L3VzZT4KICAgICAgICAgICAgICAgICAgICA8cGF0aCBzdHJva2U9IiNGRkZGRkYiIHN0cm9rZS13aWR0aD0iMSIgZD0iTTE5LDI1IEwxOSwxNSBMMTYsMTUgQzE1LjQ0NzcxNTMsMTUgMTUsMTQuNTUyMjg0NyAxNSwxNCBDMTUsMTMuNTE0NTg5NyAxNS4zNDc5OTkzLDEzLjEwMTkxNSAxNS44NjU0ODc3LDEzLjAxMDA1MjEgTDE2LDEzIEwyNCwxMyBDMjQuNTUyMjg0NywxMyAyNSwxMy40NDc3MTUzIDI1LDE0IEMyNSwxNC40ODU0MTAzIDI0LjY1MjAwMDcsMTQuODk4MDg1IDI0LjEzNDUxMjMsMTQuOTg5OTQ3OSBMMjQsMTUgTDIxLDE1IEwyMSwyNSBMMjQsMjUgQzI0LjU1MjI4NDcsMjUgMjUsMjUuNDQ3NzE1MyAyNSwyNiBDMjUsMjYuNDg1NDEwMyAyNC42NTIwMDA3LDI2Ljg5ODA4NSAyNC4xMzQ1MTIzLDI2Ljk4OTk0NzkgTDI0LDI3IEwxNiwyNyBDMTUuNDQ3NzE1MywyNyAxNSwyNi41NTIyODQ3IDE1LDI2IEMxNSwyNS41MTQ1ODk3IDE1LjM0Nzk5OTMsMjUuMTAxOTE1IDE1Ljg2NTQ4NzcsMjUuMDEwMDUyMSBMMTYsMjUgTDE5LDI1IFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICA8L2c+CiAgICAgICAgPC9nPgogICAgPC9nPgo8L3N2Zz4="],["shape","data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iNDBweCIgaGVpZ2h0PSI0MHB4IiB2aWV3Qm94PSIwIDAgNDAgNDAiIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayI+CiAgICA8IS0tIEdlbmVyYXRvcjogU2tldGNoIDYwLjEgKDg4MTMzKSAtIGh0dHBzOi8vc2tldGNoLmNvbSAtLT4KICAgIDx0aXRsZT5zaGFwZS1jdXJzb3I8L3RpdGxlPgogICAgPGRlc2M+Q3JlYXRlZCB3aXRoIFNrZXRjaC48L2Rlc2M+CiAgICA8ZGVmcz4KICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0icGF0aC0xIj48L3BhdGg+CiAgICAgICAgPGZpbHRlciB4PSItNjQuNiUiIHk9Ii01OS41JSIgd2lkdGg9IjIyOS4zJSIgaGVpZ2h0PSIyNDYuMSUiIGZpbHRlclVuaXRzPSJvYmplY3RCb3VuZGluZ0JveCIgaWQ9ImZpbHRlci0yIj4KICAgICAgICAgICAgPGZlTW9ycGhvbG9neSByYWRpdXM9IjEiIG9wZXJhdG9yPSJkaWxhdGUiIGluPSJTb3VyY2VBbHBoYSIgcmVzdWx0PSJzaGFkb3dTcHJlYWRPdXRlcjEiPjwvZmVNb3JwaG9sb2d5PgogICAgICAgICAgICA8ZmVPZmZzZXQgZHg9IjAiIGR5PSIyIiBpbj0ic2hhZG93U3ByZWFkT3V0ZXIxIiByZXN1bHQ9InNoYWRvd09mZnNldE91dGVyMSI+PC9mZU9mZnNldD4KICAgICAgICAgICAgPGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMyIgaW49InNoYWRvd09mZnNldE91dGVyMSIgcmVzdWx0PSJzaGFkb3dCbHVyT3V0ZXIxIj48L2ZlR2F1c3NpYW5CbHVyPgogICAgICAgICAgICA8ZmVDb21wb3NpdGUgaW49InNoYWRvd0JsdXJPdXRlcjEiIGluMj0iU291cmNlQWxwaGEiIG9wZXJhdG9yPSJvdXQiIHJlc3VsdD0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbXBvc2l0ZT4KICAgICAgICAgICAgPGZlQ29sb3JNYXRyaXggdmFsdWVzPSIwIDAgMCAwIDAgICAwIDAgMCAwIDAgICAwIDAgMCAwIDAgIDAgMCAwIDAuMTYgMCIgdHlwZT0ibWF0cml4IiBpbj0ic2hhZG93Qmx1ck91dGVyMSI+PC9mZUNvbG9yTWF0cml4PgogICAgICAgIDwvZmlsdGVyPgogICAgPC9kZWZzPgogICAgPGcgaWQ9Iumhtemdoi00IiBzdHJva2U9Im5vbmUiIHN0cm9rZS13aWR0aD0iMSIgZmlsbD0ibm9uZSIgZmlsbC1ydWxlPSJldmVub2RkIj4KICAgICAgICA8ZyBpZD0iV2hpdGVib2FyZC1HdWlkZWxpbmVzIiB0cmFuc2Zvcm09InRyYW5zbGF0ZSgtMzQ0LjAwMDAwMCwgLTc1MS4wMDAwMDApIj4KICAgICAgICAgICAgPGcgaWQ9InNoYXBlLWN1cnNvciIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMzQ0LjAwMDAwMCwgNzUxLjAwMDAwMCkiPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9ouWkh+S7vS00NCIgZmlsbD0iI0ZGRkZGRiIgb3BhY2l0eT0iMC4wMSIgeD0iMCIgeT0iMCIgd2lkdGg9IjQwIiBoZWlnaHQ9IjQwIiByeD0iMiI+PC9yZWN0PgogICAgICAgICAgICAgICAgPGcgaWQ9IuW9oueKtue7k+WQiCIgZmlsbC1ydWxlPSJub256ZXJvIj4KICAgICAgICAgICAgICAgICAgICA8dXNlIGZpbGw9ImJsYWNrIiBmaWxsLW9wYWNpdHk9IjEiIGZpbHRlcj0idXJsKCNmaWx0ZXItMikiIHhsaW5rOmhyZWY9IiNwYXRoLTEiPjwvdXNlPgogICAgICAgICAgICAgICAgICAgIDxwYXRoIHN0cm9rZT0iI0ZGRkZGRiIgc3Ryb2tlLXdpZHRoPSIxIiBkPSJNMjAsMjEgQzIwLjQ4NTQxMDMsMjEgMjAuODk4MDg1LDIxLjM0Nzk5OTMgMjAuOTg5OTQ3OSwyMS44NjU0ODc3IEwyMSwyMiBMMjEsMjcgQzIxLDI3LjU1MjI4NDcgMjAuNTUyMjg0NywyOCAyMCwyOCBDMTkuNTE0NTg5NywyOCAxOS4xMDE5MTUsMjcuNjUyMDAwNyAxOS4wMTAwNTIxLDI3LjEzNDUxMjMgTDE5LDI3IEwxOSwyMiBDMTksMjEuNDQ3NzE1MyAxOS40NDc3MTUzLDIxIDIwLDIxIFogTTI3LDE5IEMyNy41NTIyODQ3LDE5IDI4LDE5LjQ0NzcxNTMgMjgsMjAgQzI4LDIwLjQ4NTQxMDMgMjcuNjUyMDAwNywyMC44OTgwODUgMjcuMTM0NTEyMywyMC45ODk5NDc5IEwyNywyMSBMMjIsMjEgQzIxLjQ0NzcxNTMsMjEgMjEsMjAuNTUyMjg0NyAyMSwyMCBDMjEsMTkuNTE0NTg5NyAyMS4zNDc5OTkzLDE5LjEwMTkxNSAyMS44NjU0ODc3LDE5LjAxMDA1MjEgTDIyLDE5IEwyNywxOSBaIE0xOCwxOSBDMTguNTUyMjg0NywxOSAxOSwxOS40NDc3MTUzIDE5LDIwIEMxOSwyMC40ODU0MTAzIDE4LjY1MjAwMDcsMjAuODk4MDg1IDE4LjEzNDUxMjMsMjAuOTg5OTQ3OSBMMTgsMjEgTDEzLDIxIEMxMi40NDc3MTUzLDIxIDEyLDIwLjU1MjI4NDcgMTIsMjAgQzEyLDE5LjUxNDU4OTcgMTIuMzQ3OTk5MywxOS4xMDE5MTUgMTIuODY1NDg3NywxOS4wMTAwNTIxIEwxMywxOSBMMTgsMTkgWiBNMjAsMTIgQzIwLjQ4NTQxMDMsMTIgMjAuODk4MDg1LDEyLjM0Nzk5OTMgMjAuOTg5OTQ3OSwxMi44NjU0ODc3IEwyMSwxMyBMMjEsMTggQzIxLDE4LjU1MjI4NDcgMjAuNTUyMjg0NywxOSAyMCwxOSBDMTkuNTE0NTg5NywxOSAxOS4xMDE5MTUsMTguNjUyMDAwNyAxOS4wMTAwNTIxLDE4LjEzNDUxMjMgTDE5LDE4IEwxOSwxMyBDMTksMTIuNDQ3NzE1MyAxOS40NDc3MTUzLDEyIDIwLDEyIFoiIGZpbGw9IiMyMTIzMjQiIGZpbGwtcnVsZT0iZXZlbm9kZCI+PC9wYXRoPgogICAgICAgICAgICAgICAgPC9nPgogICAgICAgICAgICAgICAgPHJlY3QgaWQ9IuefqeW9oiIgZmlsbD0iI0ZGRkZGRiIgeD0iMTguNSIgeT0iMTciIHdpZHRoPSIzIiBoZWlnaHQ9IjYiPjwvcmVjdD4KICAgICAgICAgICAgICAgIDxyZWN0IGlkPSLnn6nlvaIiIGZpbGw9IiNGRkZGRkYiIHg9IjE3IiB5PSIxOC41IiB3aWR0aD0iNiIgaGVpZ2h0PSIzIj48L3JlY3Q+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAsMjEuNSBDMjAuMjQ1NDU5OSwyMS41IDIwLjQ0OTYwODQsMjEuNjc2ODc1MiAyMC40OTE5NDQzLDIxLjkxMDEyNDQgTDIwLjUsMjIgTDIwLjUsMjcgQzIwLjUsMjcuMjc2MTQyNCAyMC4yNzYxNDI0LDI3LjUgMjAsMjcuNSBDMTkuNzU0NTQwMSwyNy41IDE5LjU1MDM5MTYsMjcuMzIzMTI0OCAxOS41MDgwNTU3LDI3LjA4OTg3NTYgTDE5LjUsMjcgTDE5LjUsMjIgQzE5LjUsMjEuNzIzODU3NiAxOS43MjM4NTc2LDIxLjUgMjAsMjEuNSBaIE0yNywxOS41IEMyNy4yNzYxNDI0LDE5LjUgMjcuNSwxOS43MjM4NTc2IDI3LjUsMjAgQzI3LjUsMjAuMjQ1NDU5OSAyNy4zMjMxMjQ4LDIwLjQ0OTYwODQgMjcuMDg5ODc1NiwyMC40OTE5NDQzIEwyNywyMC41IEwyMiwyMC41IEMyMS43MjM4NTc2LDIwLjUgMjEuNSwyMC4yNzYxNDI0IDIxLjUsMjAgQzIxLjUsMTkuNzU0NTQwMSAyMS42NzY4NzUyLDE5LjU1MDM5MTYgMjEuOTEwMTI0NCwxOS41MDgwNTU3IEwyMiwxOS41IEwyNywxOS41IFogTTE4LDE5LjUgQzE4LjI3NjE0MjQsMTkuNSAxOC41LDE5LjcyMzg1NzYgMTguNSwyMCBDMTguNSwyMC4yNDU0NTk5IDE4LjMyMzEyNDgsMjAuNDQ5NjA4NCAxOC4wODk4NzU2LDIwLjQ5MTk0NDMgTDE4LDIwLjUgTDEzLDIwLjUgQzEyLjcyMzg1NzYsMjAuNSAxMi41LDIwLjI3NjE0MjQgMTIuNSwyMCBDMTIuNSwxOS43NTQ1NDAxIDEyLjY3Njg3NTIsMTkuNTUwMzkxNiAxMi45MTAxMjQ0LDE5LjUwODA1NTcgTDEzLDE5LjUgTDE4LDE5LjUgWiBNMjAsMTIuNSBDMjAuMjQ1NDU5OSwxMi41IDIwLjQ0OTYwODQsMTIuNjc2ODc1MiAyMC40OTE5NDQzLDEyLjkxMDEyNDQgTDIwLjUsMTMgTDIwLjUsMTggQzIwLjUsMTguMjc2MTQyNCAyMC4yNzYxNDI0LDE4LjUgMjAsMTguNSBDMTkuNzU0NTQwMSwxOC41IDE5LjU1MDM5MTYsMTguMzIzMTI0OCAxOS41MDgwNTU3LDE4LjA4OTg3NTYgTDE5LjUsMTggTDE5LjUsMTMgQzE5LjUsMTIuNzIzODU3NiAxOS43MjM4NTc2LDEyLjUgMjAsMTIuNSBaIiBpZD0i5b2i54q257uT5ZCIIiBmaWxsPSIjMjEyMzI0IiBmaWxsLXJ1bGU9Im5vbnplcm8iPjwvcGF0aD4KICAgICAgICAgICAgPC9nPgogICAgICAgIDwvZz4KICAgIDwvZz4KPC9zdmc+"]]),lI=o=>{const{style:n,onClickHandler:e}=o;return g.createElement("div",{className:"font-size-menu",style:n,onPointerUp:t=>{t.stopPropagation(),t.nativeEvent.stopImmediatePropagation()}},Je.map(t=>g.createElement("div",{className:"font-size-btn",key:t,onPointerUp:()=>{e(t)}},t)))},uI=o=>{const n=g.useRef(null),{open:e,setOpen:t,textOpt:r,workIds:i,floatBarRef:s}=o,{mananger:a,floatBarData:c}=g.useContext(ve),[l,u]=g.useState(0),h=Je.length-1;g.useEffect(()=>{r!=null&&r.fontSize&&(u(r.fontSize),n.current&&(n.current.value=r.fontSize.toString()))},[r==null?void 0:r.fontSize]);const d=g.useMemo(()=>{if(s!=null&&s.current&&j.isNumber(c==null?void 0:c.y)&&(a!=null&&a.height)){if(s.current.offsetTop&&s.current.offsetTop+c.y>180){const y={};return y.top="inherit",y.bottom=35,y}else if(!s.current.offsetTop&&(a==null?void 0:a.height)-s.current.offsetTop-c.y<120){const y={};return y.top="inherit",y.bottom=35,y}}},[s==null?void 0:s.current,c,a]);function f(y){u(y),y&&y>=Je[0]&&y<=Je[h]&&ee.emitMethod(te.MainEngine,B.SetFontStyle,{workIds:i||[q],fontSize:y,viewId:a==null?void 0:a.viewId})}const p=y=>{var M;(M=n.current)==null||M.blur(),t(!1),N(y)},w=g.useMemo(()=>e?g.createElement(lI,{onClickHandler:p,style:d}):null,[e,p,d]),N=y=>{y>Je[h]&&(y=Je[h]),y<Je[0]&&(y=Je[0]),f(y)};return g.createElement("div",{className:"button normal-button font-size-barBtn",style:{width:50},onPointerUp:y=>{y.stopPropagation(),y.nativeEvent.stopImmediatePropagation()}},g.createElement("input",{className:"font-size-input",ref:n,onTouchEnd:()=>{n.current&&n.current.focus()},onClick:()=>{t(!e),n.current&&n.current.focus()},onKeyDown:y=>{if(y.stopPropagation(),y.nativeEvent.stopImmediatePropagation(),y.key==="Backspace"){const M=window.getSelection(),v=M==null?void 0:M.getRangeAt(0);if(v!=null&&v.collapsed)return y.cancelable&&y.preventDefault(),document.execCommand("delete",!1),!1}return!1},onKeyUp:y=>{var M;if(y.stopPropagation(),y.nativeEvent.stopImmediatePropagation(),n.current){const v=n.current.value,m=parseInt(v);isNaN(m)?n.current.value="0":n.current.value=m.toString(),m&&y.key==="Enter"&&(N(m),(M=n.current)==null||M.blur(),t(!1))}}}),g.createElement("div",{className:"font-size-btns"},g.createElement("div",{className:"font-size-add",onPointerUp:()=>{N(l+Je[0])}}),g.createElement("div",{className:"font-size-cut",onPointerUp:()=>{N(l-Je[0])}})),w)},hI=o=>{const{workIds:n,mananger:e,islocked:t}=o;return g.createElement("div",{className:"button normal-button",onPointerUp:r=>{r.stopPropagation(),ee.emitMethod(te.MainEngine,B.SetLock,{workIds:n||[q],isLocked:!t,viewId:e==null?void 0:e.viewId})}},g.createElement("img",{alt:"icon",src:ze(t?"unlock-new":"lock-new")}))},er=o=>{const{icon:n,min:e,max:t,step:r,value:i,onInputHandler:s}=o,[a,c]=g.useState(0),l=g.useRef(null),u=h=>{h>t&&(h=t),h<e&&(h=e),c(h),s(h),l.current&&(l.current.value=h.toString())};return g.useEffect(()=>{i&&(c(i),l.current&&(l.current.value=i.toString()))},[i]),g.createElement("div",{className:"button input-button"},g.createElement("img",{src:ze(n)}),g.createElement("input",{className:"input-number",type:"text",ref:l,onPointerUp:()=>{l.current&&l.current.focus()},onKeyDown:h=>{if(h.stopPropagation(),h.nativeEvent.stopImmediatePropagation(),h.key==="Backspace"){const d=window.getSelection(),f=d==null?void 0:d.getRangeAt(0);if(f!=null&&f.collapsed)return h.cancelable&&h.preventDefault(),document.execCommand("delete",!1),!1}},onKeyUp:h=>{if(h.stopPropagation(),h.nativeEvent.stopImmediatePropagation(),l.current){const d=l.current.value,f=parseInt(d);isNaN(f)?l.current.value="0":l.current.value=f.toString()}},onChange:h=>{const d=h.target.value,f=parseInt(d);f&&f&&f>=e&&f<=t&&u(f)}}),g.createElement("div",{className:"input-number-btns"},g.createElement("div",{className:"input-number-add",onPointerUp:()=>{u(a+r)}}),g.createElement("div",{className:"input-number-cut",onPointerUp:()=>{u(a-r)}})))},dI=o=>{const{icon:n,min:e,max:t,step:r,value:i,onInputHandler:s}=o;return g.createElement("div",{className:"button input-button"},g.createElement("img",{src:ze(n)}),g.createElement(gI,{min:e,max:t,step:r,value:i,onInputHandler:s}))},gI=o=>{const{value:n,min:e,max:t,onInputHandler:r}=o,[i,s]=g.useState({x:0,y:0});g.useEffect(()=>{s({x:n*100,y:0})},[]);const a=(u,h)=>{let d=Math.floor(Math.max(h.x,e*100));d=Math.floor(Math.min(d,t*100)),h.x!==(i==null?void 0:i.x)&&s({x:d,y:0});const f=d/100;n!==f&&r(f)},c=()=>{},l=(u,h)=>{let d=Math.floor(Math.max(h.x,e*100));d=Math.floor(Math.min(d,t*100)),h.x!==(i==null?void 0:i.x)&&s({x:d,y:0});const f=d/100;n!==f&&r(f)};return g.createElement("div",{className:"range-number-container",onPointerUp:u=>{const h=u.nativeEvent.offsetX-6;let d=Math.floor(Math.max(h,e*100));d=Math.floor(Math.min(d,t*100)),s({x:d,y:0});const f=d/100;n!==f&&r(f)}},g.createElement("div",{className:"range-number-color"}),g.createElement("div",{className:"range-number"},g.createElement(Rt,{bounds:"parent",axis:"x",position:i,onDrag:a,onStart:c,onStop:l},g.createElement("div",{className:"circle",onPointerUp:nn}))))},fI=o=>{const{icon:n,value:e,onChangeHandler:t,style:r}=o,[i,s]=g.useState(0),[a,c]=g.useState(),l=g.useRef(null),u=g.useCallback(f=>{f>=xt.length&&(f=0),f<0&&(f=xt.length-1),s(f),t(xt[f]),c(!1),l.current&&(l.current.value=xt[f])},[t]),h=g.useMemo(()=>{if(r&&r.bottom){const f={};return f.top="inherit",f.bottom=50,f}},[r]);g.useEffect(()=>{e&&(s(xt.indexOf(e)),l.current&&(l.current.value=e))},[e]);const d=g.useMemo(()=>a?g.createElement(pI,{options:xt,onClickHandler:u,style:h}):null,[a,u,h]);return g.createElement("div",{className:"button input-button"},g.createElement("img",{src:ze(n)}),g.createElement("input",{readOnly:!0,className:"input-number",type:"text",ref:l,onPointerUp:()=>{l.current&&(l.current.focus(),c(!a))}}),g.createElement("div",{className:"input-number-btns"},g.createElement("div",{className:"input-number-add",onPointerUp:()=>{u(i+1)}}),g.createElement("div",{className:"input-number-cut",onPointerUp:()=>{u(i-1)}})),d)},pI=o=>{const{options:n,style:e,onClickHandler:t}=o;return g.createElement("div",{className:"select-option-menu",style:e},n.map((r,i)=>g.createElement("div",{className:"select-option-btn",key:r,onPointerUp:()=>{t(i)}},r)))},MI=o=>{const{innerRatio:n,innerVerticeStep:e,vertices:t,mananger:r,setShapeOpt:i}=o,s=l=>{i({vertices:l}),ee.emitMethod(te.MainEngine,B.SetShapeOpt,{workIds:[q],toolsType:S.Star,viewId:r.viewId,vertices:l})},a=l=>{i({innerVerticeStep:l}),ee.emitMethod(te.MainEngine,B.SetShapeOpt,{workIds:[q],toolsType:S.Star,viewId:r.viewId,innerVerticeStep:l})},c=l=>{i({innerRatio:l}),ee.emitMethod(te.MainEngine,B.SetShapeOpt,{workIds:[q],toolsType:S.Star,viewId:r.viewId,innerRatio:l})};return g.createElement(g.Fragment,null,g.createElement(er,{value:t,icon:"polygon-vertex",min:3,max:100,step:1,onInputHandler:s}),g.createElement(er,{value:e,icon:"star-innerVertex",min:1,max:100,step:1,onInputHandler:a}),g.createElement(dI,{value:n,icon:"star-innerRatio",min:.1,max:1,step:.1,onInputHandler:c}))},yI=o=>{const{mananger:n,vertices:e,setShapeOpt:t}=o,r=i=>{t({vertices:i}),ee.emitMethod(te.MainEngine,B.SetShapeOpt,{workIds:[q],toolsType:S.Polygon,viewId:n.viewId,vertices:i})};return g.createElement(er,{value:e,icon:"polygon-vertex",min:3,max:100,step:1,onInputHandler:r})},mI=o=>{const{mananger:n,placement:e,setShapeOpt:t}=o,r=i=>{t({placement:i}),ee.emitMethod(te.MainEngine,B.SetShapeOpt,{workIds:[q],toolsType:S.SpeechBalloon,viewId:n.viewId,placement:i})};return g.createElement(fI,{value:e,icon:"speechBallon-placement",onChangeHandler:r})},Un=o=>{const{icon:n,isActive:e,onPointerUpHandler:t}=o;return g.createElement("div",{className:`button tab-button ${e?"active":""}`,onPointerUp:t},g.createElement("img",{src:ze(n)}))},II=o=>{const{toolsTypes:n,style:e,mananger:t,shapeOpt:r,setShapeOpt:i}=o,[s,a]=g.useState();g.useEffect(()=>{n.includes(S.Polygon)?a(S.Polygon):n.includes(S.Star)?a(S.Star):a(S.SpeechBalloon)},[n]);const c=d=>{a(d)},l=g.useMemo(()=>s===S.Polygon&&t&&r.vertices?g.createElement(yI,{vertices:r.vertices,mananger:t,setShapeOpt:i}):null,[t,s,r,i]),u=g.useMemo(()=>s===S.Star&&t&&r.vertices&&r.innerVerticeStep&&r.innerRatio?g.createElement(MI,{mananger:t,vertices:r.vertices,innerVerticeStep:r.innerVerticeStep,innerRatio:r.innerRatio,setShapeOpt:i}):null,[t,s,r,i]),h=g.useMemo(()=>s===S.SpeechBalloon&&t&&r.placement?g.createElement(mI,{mananger:t,placement:r.placement,setShapeOpt:i}):null,[s,t,r.placement,i]);return g.createElement("div",{className:"shapeOpt-sub-menu",style:e,onPointerUp:nn},g.createElement("div",{className:"shapeOpt-sub-menu-tabs"},n.includes(S.Polygon)&&g.createElement(Un,{isActive:s===S.Polygon,icon:s===S.Polygon?"polygon-active":"polygon",onPointerUpHandler:c.bind(void 0,S.Polygon)})||null,n.includes(S.Star)&&g.createElement(Un,{isActive:s===S.Star,icon:s===S.Star?"star-active":"star",onPointerUpHandler:c.bind(void 0,S.Star)})||null,n.includes(S.SpeechBalloon)&&g.createElement(Un,{isActive:s===S.SpeechBalloon,icon:s===S.SpeechBalloon?"speechBallon-active":"speechBallon",onPointerUpHandler:c.bind(void 0,S.SpeechBalloon)})||null),g.createElement("div",{className:"shapeOpt-sub-menu-content"},l,u,h))},wI=o=>{const{open:n,setOpen:e,floatBarRef:t,toolsTypes:r,shapeOpt:i}=o,{floatBarData:s,mananger:a,setFloatBarData:c}=g.useContext(ve),l=g.useRef(null),u=g.useMemo(()=>{if(t!=null&&t.current&&j.isNumber(s==null?void 0:s.x)&&j.isNumber(s==null?void 0:s.y)&&(a!=null&&a.height)){if(t.current.offsetTop&&t.current.offsetTop+s.y>200){const p={};return p.top="inherit",p.bottom=50,p}else if(!t.current.offsetTop&&(a==null?void 0:a.height)-t.current.offsetTop-(s==null?void 0:s.y)<140){const p={};return p.top="inherit",p.bottom=50,p}}},[t,s==null?void 0:s.x,s==null?void 0:s.y,a==null?void 0:a.height]),h=g.useCallback(p=>{c({shapeOpt:{...i,...p}})},[c,i]),d=g.useMemo(()=>n&&r&&a&&i?g.createElement(II,{shapeOpt:i,style:u,toolsTypes:r,mananger:a,setShapeOpt:h}):null,[n,u,r,a,i,h]),f=()=>{e(!n)};return g.createElement("div",{ref:l,className:`button normal-button ${n&&"active"}`,onPointerUp:f},d,g.createElement("img",{alt:"icon",src:ze(n?"shapes-active":"shapes")}))},ko=g.memo(o=>{const{textOpt:n,workIds:e,noLayer:t,position:r,noDelete:i,noCopy:s}=o,{floatBarData:a,mananger:c}=g.useContext(ve),[l,u]=g.useState(0),[h,d]=g.useState(),f=g.useRef(null);g.useEffect(()=>{var x,D,b,R;const k={},z=(a==null?void 0:a.w)||((x=n==null?void 0:n.boxSize)==null?void 0:x[0])||0,A=(a==null?void 0:a.h)||((D=n==null?void 0:n.boxSize)==null?void 0:D[1])||0;if(r&&z&&A&&(c!=null&&c.width)&&(c!=null&&c.height)){if(r.y<60?r.y+A<c.height-60?k.bottom=-120:r.y+A<c.height?k.bottom=-58:r.y>0?k.top=62:k.top=-r.y+62:k.top=0,r.x<0)k.left=-r.x+3;else if(r.x+(((b=f.current)==null?void 0:b.offsetWidth)||z)>c.width){const O=c.width-(((R=f.current)==null?void 0:R.offsetWidth)||z)-r.x;k.left=O}d(k);return}d(void 0)},[f,r,a==null?void 0:a.w,a==null?void 0:a.h,c==null?void 0:c.width,c==null?void 0:c.height,n==null?void 0:n.boxSize]);const p=g.useMemo(()=>a!=null&&a.fillColor?g.createElement(eI,{floatBarRef:f,open:l===3,setOpen:k=>{u(k===!0?3:0)}}):null,[a==null?void 0:a.fillColor,l,f]),w=g.useMemo(()=>a!=null&&a.strokeColor?g.createElement(_m,{floatBarRef:f,open:l===2,setOpen:k=>{u(k===!0?2:0)}}):null,[a==null?void 0:a.strokeColor,l,f]),N=g.useMemo(()=>n!=null&&n.fontColor&&(c!=null&&c.viewId)?g.createElement(tI,{floatBarRef:f,open:l===4,setOpen:k=>{u(k===!0?4:0)},textOpt:n,workIds:e}):null,[n,l,e,c,f]),y=g.useMemo(()=>n!=null&&n.fontBgColor&&(c!=null&&c.viewId)?g.createElement(nI,{floatBarRef:f,open:l===5,setOpen:k=>{u(k===!0?5:0)},textOpt:n,workIds:e}):null,[n,l,e,c,f]),M=g.useMemo(()=>n&&(c!=null&&c.viewId)?g.createElement(aI,{floatBarRef:f,open:l===6,setOpen:k=>{u(k===!0?6:0)},textOpt:n,workIds:e,style:h}):null,[n,l,e,c,h,f]),v=g.useMemo(()=>n&&(c!=null&&c.viewId)?g.createElement(uI,{open:l===7,setOpen:k=>{u(k===!0?7:0)},textOpt:n,workIds:e,floatBarRef:f}):null,[n,l,e,c,f]),m=g.useMemo(()=>t?null:g.createElement(qm,{open:l===1,setOpen:k=>{u(k===!0?1:0)},floatBarRef:f}),[t,l,f]),T=g.useMemo(()=>a!=null&&a.canLock&&c?g.createElement(hI,{workIds:e,mananger:c,islocked:a.isLocked}):null,[a,c,e]),C=g.useMemo(()=>c&&(c!=null&&c.viewId)&&h&&(a!=null&&a.shapeOpt)&&(a!=null&&a.toolsTypes)?g.createElement(wI,{open:l===8,setOpen:k=>{u(k===!0?8:0)},floatBarRef:f,workIds:e,toolsTypes:a.toolsTypes,shapeOpt:a.shapeOpt}):null,[a,c,l,h,e,f]);return g.createElement("div",{className:"appliance-plugin-floatbtns",style:h,ref:f},c&&!i&&g.createElement(Zm,{workIds:e,mananger:c}),m,T,!!(c!=null&&c.viewId)&&!s&&g.createElement(Hm,{workIds:e,viewId:c.viewId}),C,M,v,N,y,w,p)}),TI=o=>{const{data:n,workId:e,updateOptInfo:t}=o,{opt:r,scale:i,translate:s,x:a,y:c}=n,l=g.useRef(null),{floatBarData:u}=g.useContext(ve),h=g.useMemo(()=>{const{fontSize:p,fontFamily:w,underline:N,fontColor:y,lineThrough:M,textAlign:v,strokeColor:m,lineHeight:T,bold:C,italic:k}=r,z=T||p*1.2,A={fontSize:`${p}px`,lineHeight:`${z}px`,color:"transparent",caretColor:y,borderColor:m,minHeight:`${z}px`,pointerEvents:"none",paddingRight:`${k==="italic"?Math.round(p*.3):5}px`};return w&&(A.fontFamily=`${w}`),(M||N)&&(A.textDecoration=`${M&&"line-through"||""}${N&&" underline"||""}`),v&&(A.textAlign=`${v}`),C&&(A.fontWeight=`${C}`),k&&(A.fontStyle=`${k}`),A},[r]),d=g.useMemo(()=>{const p=[];if(r.text){const w=Cn(r.text);for(let N=0;N<w.length;N++){const y=w[N];y===""?p.push(g.createElement("div",{key:N})):p.push(g.createElement("div",{key:N},y))}}return p.length?p:g.createElement("div",null)},[r.text]),f=g.useMemo(()=>{if(!u)return{};const p=`scale(${i||1}) ${s&&"translate("+s[0]+"px,"+s[1]+"px)"||""}`;return{left:`${a-u.x}px`,top:`${c-u.y}px`,zIndex:1,transform:p,transformOrigin:"left top",opacity:0,pointerEvents:"auto"}},[i,s,a,c,u]);return g.useEffect(()=>{if(!l.current)return;const p=l.current.offsetWidth,w=l.current.offsetHeight;if(!p||!w)return;const N=r.boxSize;if((N==null?void 0:N[0])!==p||N[1]!==w||!N){t({activeTextId:e,update:{boxSize:[p,w],workState:E.Done}});return}},[r.fontSize,r.italic,r.bold,r.boxSize,e,t]),g.createElement("div",{className:"editor-box readonly","data-text-work-id":e,style:f},g.createElement("div",{className:"editor",ref:l,style:h},d))},SI=o=>{const{mananger:n}=g.useContext(ve),e=g.useMemo(()=>{var r;const t=i=>{var u,h;if(!n)return;const{activeTextId:s,update:a,syncData:c}=i,l=s&&j.cloneDeep(((u=n.control.textEditorManager)==null?void 0:u.get(s))||((h=o.editors)==null?void 0:h.get(s)));l&&l.opt&&(l.opt={...l.opt,...a},c&&(l.canSync=Object.keys(c).includes("canSync")&&c.canSync||l.canSync,l.canWorker=Object.keys(c).includes("canWorker")&&c.canWorker||l.canWorker),n.control.textEditorManager.updateForViewEdited(s,l))};if((r=o.editors)!=null&&r.size){const i=[];return o.editors.forEach((s,a)=>{if(o.selectIds&&o.selectIds.includes(a)){const c=g.createElement(TI,{key:a,workId:a,data:s,updateOptInfo:t});i.push(c)}}),i}return null},[o.editors,o.selectIds,n]);return g.createElement(g.Fragment,null,e)},vI=o=>{const{position:n,textOpt:e,workIds:t,noLayer:r,noCopy:i,noDelete:s,style:a}=o,c=g.useRef(null);return g.createElement("div",{className:ke.FloatBarBtn,ref:c,style:a},g.createElement(ko,{position:n,textOpt:e,workIds:t,noLayer:r,noCopy:i,noDelete:s}))},CI=o=>{const{data:n,workId:e,showFloatBtns:t,handleKeyUp:r,handleFocus:i,runAnimation:s,updateSize:a,rightBoundBreak:c}=o,{activeTextEditor:l,activeTextId:u,mananger:h}=g.useContext(ve),{opt:d,scale:f,translate:p,x:w,y:N}=n,{fontSize:y,fontFamily:M,underline:v,fontColor:m,lineThrough:T,textAlign:C,lineHeight:k,bold:z,italic:A}=d,x=g.useRef(null),D=g.useMemo(()=>{const K=y,_=k||K*1.2,ne={fontSize:`${K}px`,lineHeight:`${_}px`,caretColor:m,color:"transparent",minHeight:`${_}px`,paddingRight:`${A==="italic"?Math.round(K*.3):5}px`,borderWidth:0};return M&&(ne.fontFamily=`${M}`),(T||v)&&(ne.textDecoration=`${T&&"line-through"||""} ${v&&" underline"||""}`),C&&(ne.textAlign=`${C}`),z&&(ne.fontWeight=`${z}`),A&&(ne.fontStyle=`${A}`),ne},[z,m,M,y,A,k,T,f,C,v]),b=g.useRef(!1),R=g.useRef(6),O=g.useRef(),U=g.useRef(),$=g.useRef(!1),Y=g.useRef(!1),Z=g.useRef({fontSize:D.fontSize,lineHeight:D.lineHeight,fontStyle:D.fontStyle,fontWeight:D.fontWeight,fontFamily:D.fontFamily}),Q=g.useMemo(()=>typeof window>"u"?!1:navigator.maxTouchPoints>0||"ontouchstart"in window,[]),W=g.useMemo(()=>u===e?"hover":d.workState===E.Doing||d.workState===E.Start?"editing":l?"active":"none",[u,e,d.workState,l]);function X(K){if(!x.current)return;const ne=K&&lm(K.nativeEvent)?To(K.nativeEvent):void 0,ue=()=>{O.current&&(cancelAnimationFrame(O.current),O.current=void 0),U.current&&(window.clearTimeout(U.current),U.current=void 0)},Ce=Me=>{const Ne=x.current,me=window==null?void 0:window.getSelection();if(!(!Ne||!me||!$.current)){if(document.activeElement!==Ne)try{Ne.focus({preventScroll:!0})}catch{Ne.focus()}if(Me){const{x:De,y:Ie}=Me;if(document.caretPositionFromPoint){const G=document.caretPositionFromPoint(De,Ie);if(G){const se=Ne.contains(G.offsetNode);if(se){const Te=document.createRange();Te.setStart(G.offsetNode,G.offset),Te.collapse(!0),me.removeAllRanges(),me.addRange(Te),Y.current=!0}if(se)return}}else if(document.caretRangeFromPoint){const G=document.caretRangeFromPoint(De,Ie);if(G){const se=Ne.contains(G.startContainer);if(se&&(me.removeAllRanges(),me.addRange(G),Y.current=!0),se)return}}if(ny(me,Ne,Me)){Y.current=!0;return}}iy({hasPoint:!!Me,previousByPoint:Y.current,hasSelectionInEditor:li(me,Ne),rangeCount:me.rangeCount,isCollapsed:me.isCollapsed})||(_M(me,Ne),Y.current=!1)}};ue(),Ce(ne),Q&&(O.current=requestAnimationFrame(()=>{Ce(),U.current=window.setTimeout(()=>{Ce(),U.current=void 0},32),O.current=void 0}))}const pe=g.useMemo(()=>{const K=`scale(${f||1}) ${p&&"translate("+p[0]+"px,"+p[1]+"px)"||""}`;return{left:`${w-Zn*(f||1)}px`,top:`${N-Zn*(f||1)}px`,zIndex:2,transform:K,transformOrigin:"left top",borderColor:W==="editing"||W==="hover"?m:"transparent"}},[f,p,w,N,m,W]),ae=g.useMemo(()=>{let K="";const _="<div></div>";if(d.text){const ne=Cn(d.text);for(let ue=0;ue<ne.length;ue++){const Ce=ne[ue];if(Ce==="")K=K+_;else{const Me=Ce.replace(/[<>&]/g,Ne=>({"<":"&lt;",">":"&gt;","&":"&amp;"})[Ne]);K=K+`<div>${Me}</div>`}}}else K=_;return K},[d.fontBgColor,d.text]),de=g.useMemo(()=>{var K,_;if(W==="hover"){if(f&&t&&j.isNumber(w)&&j.isNumber(N)&&d.boxSize&&j.isNumber((K=d.boxSize)==null?void 0:K[0])&&j.isNumber((_=d.boxSize)==null?void 0:_[1])){const ne={x:w,y:N},ue={left:w,top:N,width:d.boxSize[0]*f,height:d.boxSize[1]*f};return g.createElement(vI,{position:ne,style:ue,textOpt:d,workIds:[e],noLayer:!0,noCopy:!0,noDelete:!0})}return null}return null},[d,t,e,w,N,f,W]);g.useEffect(()=>{$.current=u===e,u!==e&&(O.current&&(cancelAnimationFrame(O.current),O.current=void 0),U.current&&(window.clearTimeout(U.current),U.current=void 0),Y.current=!1)},[u,e]),g.useEffect(()=>{if(u===e&&x.current){const K=window==null?void 0:window.getSelection(),_=li(K,x.current);(document.activeElement!==x.current||!_)&&X(),i(x.current)}},[u,i,e,Q]),g.useEffect(()=>{const K=x.current;if(!K)return;const _=po(K),ne=d.text||"";_!==ne&&(u===e&&b.current||(K.innerHTML=ae))},[u,ae,d.boxSize,d.text,d.workState,e]),g.useEffect(()=>()=>{O.current&&cancelAnimationFrame(O.current),U.current&&window.clearTimeout(U.current)},[]),g.useEffect(()=>{if(x.current){const K=parseInt(getComputedStyle(x.current).paddingRight,10)+parseInt(getComputedStyle(x.current).borderWidth,10);R.current=Number(K)}},[]),g.useEffect(()=>{if(x.current){const K={fontSize:D.fontSize,lineHeight:D.lineHeight,fontStyle:D.fontStyle,fontWeight:D.fontWeight,fontFamily:D.fontFamily};if(!j.isEqual(Z.current,K)){Z.current=K;const _=[x.current.offsetWidth,x.current.offsetHeight];a(e,_)}}},[D,e,a,W,l,u]);const le=g.useCallback(K=>{const _=h==null?void 0:h.parentElement,ne=x.current;if(!_||!ne||!c)return!1;const{lastLine:ue}=ui(ne);if(!ue||ue instanceof Text)return!1;const Ce=ue==null?void 0:ue.getBoundingClientRect(),Me=_==null?void 0:_.getBoundingClientRect();if(!Ce||!Me)return!1;if(Ce.right+K>Me.right){const{textContent:Ne,textNodes:me}=ry(ue);if(!me.length)return!1;const De=Ne.length,Ie=Zt(me,0);if(!Ie)return!1;let G=0,se=0,Te=De;for(;se<Te;){const je=Math.floor((se+Te)/2),Fe=Zt(me,je);if(!Fe)break;const rt=document.createRange();rt.setStart(Ie.node,Ie.offset),rt.setEnd(Fe.node,Fe.offset);const kr=rt.getBoundingClientRect(),xr=Me.right-kr.right;if(xr<K){if(je>0){const ft=Zt(me,je-1);if(!ft)break;const pt=document.createRange();pt.setStart(Ie.node,Ie.offset),pt.setEnd(ft.node,ft.offset);const Gt=pt.getBoundingClientRect();if(Me.right-Gt.right>=K){G=je-1;break}}Te=je}else{const ft=je+1;if(ft<De){const pt=Zt(me,ft);if(!pt)break;const Gt=document.createRange();Gt.setStart(Ie.node,Ie.offset),Gt.setEnd(pt.node,pt.offset);const br=Gt.getBoundingClientRect();if(Me.right-br.right<=K&&xr>K){G=je;break}}se=ft}}if(!G){const je=Zt(me,se);if(!je)return!1;const Fe=document.createRange();Fe.setStart(Ie.node,Ie.offset),Fe.setEnd(je.node,je.offset);const rt=Fe.getBoundingClientRect();Me.right-rt.right>K?G=se:se>0&&(G=se-1)}if(G>0){const je=Ne.slice(0,G),Fe=Ne.slice(G);ue.textContent=je;const rt=document.createElement("div");return Fe&&(rt.textContent=Fe),x.current.appendChild(rt),le(K),!0}}return!1},[h==null?void 0:h.parentElement,d.fontBgColor,c,e]);function tt(K){if(K.stopPropagation(),K.nativeEvent.stopImmediatePropagation(),K.key==="Backspace"){const _=window.getSelection(),ne=_==null?void 0:_.getRangeAt(0);if(ne!=null&&ne.collapsed)return K.cancelable&&K.preventDefault(),document.execCommand("delete",!1),!1}return!1}function ut(K,_){const ne=window==null?void 0:window.getSelection();if(ne!=null&&ne.rangeCount&&K&&ne&&ne.anchorNode){const ue=ne.anchorOffset,Ce=ne.anchorNode.textContent||"",Me=Ce.slice(0,ue)||"",Ne=Ce.slice(ue)||"",me=Me.concat(K)||"";ht(me,Ne,_)}}function ht(K,_,ne){const ue=window==null?void 0:window.getSelection();if(!(ue!=null&&ue.rangeCount)||!ue.anchorNode)return;const Ce=K.split(/\n/);let Me=ue.anchorNode.parentNode;Me===ne&&(Me=ue.anchorNode);const Ne=[...ne.childNodes],me=[];let De,Ie=ue.anchorOffset;for(;Ne.length;){const G=Ne.pop();if(G){if(G===Me){let se=Ce[0];Ce.length===1&&(Ie=Ce[0].length,se=Ce[0].concat(_)),Me.nodeName==="#text"?(Me.textContent=se,De=Me):Me.nodeName==="DIV"&&(Me.innerText=se,De=Me.childNodes[0]);break}me.push(G),ne.removeChild(G)}}if(Ce.length>1)for(let G=1;G<Ce.length;G++){let se=Ce[G];const Te=document.createElement("div");G===Ce.length-1&&(Ie=se.length,se=se.concat(_)),Te.innerText=se,ne.appendChild(Te),G===Ce.length-1&&(De=Te.childNodes[0])}if(me.length){me.reverse();for(const G of me)ne.appendChild(G)}if(De&&De.nodeName==="#text"){ue.deleteFromDocument();const G=document.createRange(),se=Math.min(Ie,(De==null?void 0:De.length)||0);G.setStart(De,se),G.collapse(!0),ue.removeAllRanges(),ue.addRange(G)}}function dt(K){if(K.cancelable&&K.preventDefault(),K.stopPropagation(),K.nativeEvent.stopImmediatePropagation(),x.current){const _=(K.clipboardData||window.clipboardData).getData("text"),ne=window==null?void 0:window.getSelection();if(!(ne!=null&&ne.rangeCount))return;if(_&&ne&&ne.anchorNode){const ue=Bn(_,{whiteList:{},stripIgnoreTag:!0,stripIgnoreTagBody:["script"]});ut(ue,x.current),le((f||1)*R.current),r(x.current)}s()}return!1}function gt(K){ui(K)}const xe=g.useCallback(()=>{const K=x.current;s(()=>{if(K){if(gt(K),!b.current&&le((f||1)*R.current)){const _=window.getSelection();if(!(_!=null&&_.rangeCount))return!1;const ne=document.createRange(),ue=x.current.lastChild;ne.selectNodeContents(ue),ne.collapse(!1),_.removeAllRanges(),_.addRange(ne)}r(K)}})},[s,r,le,f]);function Le(){b.current=!0,s()}function nt(){b.current=!1,xe()}function Vt(){xe(),s()}const $t=g.useCallback(()=>{if(W==="active"&&x.current&&x.current.parentElement){const K=x.current.parentElement;K.style.borderColor=m}},[W,m]),rn=g.useCallback(()=>{if(W==="active"&&x.current&&x.current.parentElement){const K=x.current.parentElement;K.style.borderColor="transparent"}},[W]);return g.createElement(g.Fragment,null,de,g.createElement("div",{className:`editor-box ${W}`,style:pe,onPointerUp:()=>{var K;if(W==="editing"){s(()=>{var _;(_=document.activeElement)==null||_.blur(),h==null||h.control.textEditorManager.checkEmptyTextBlur()});return}if(W==="active"&&h){if((K=h.control.collector)!=null&&K.hasIncludeSelector(e)){s(()=>{var _;(_=document.activeElement)==null||_.blur(),h==null||h.control.textEditorManager.checkEmptyTextBlur()});return}if(h&&u!==e){h.control.textEditorManager.checkEmptyTextBlur(),h.control.textEditorManager.active(e,h.worker.now);return}}},onMouseOver:$t,onMouseLeave:rn},g.createElement("div",{id:e,suppressContentEditableWarning:!0,contentEditable:!0,className:"editor",ref:x,style:D,onKeyDown:tt,onPaste:dt,onTouchEnd:X,onInput:xe,onCompositionStart:Le,onCompositionUpdate:Vt,onCompositionEnd:nt,dangerouslySetInnerHTML:{__html:ae}})))},NI=o=>{const n=g.useRef(null),{mananger:e}=g.useContext(ve),t=g.useRef(),r=g.useCallback(s=>{var h,d;const{activeTextId:a,update:c,syncData:l}=s;if(!e)return;const u=a&&j.cloneDeep(((h=e.control.textEditorManager)==null?void 0:h.get(a))||((d=o.editors)==null?void 0:d.get(a)));u&&u.opt&&(u.opt={...u.opt,...c},l&&(u.canSync=Object.keys(l).includes("canSync")&&l.canSync||u.canSync,u.canWorker=Object.keys(l).includes("canWorker")&&l.canWorker||u.canWorker),e.control.textEditorManager.updateForViewEdited(a,u))},[e,o.editors]),i=g.useMemo(()=>{var u;const s=h=>{if(!e)return;const d=h.id,f=e.control.textEditorManager.get(d),p=E.Doing,w=[h.offsetWidth,h.offsetHeight];(!f||f&&(!j.isEqual(f.opt.boxSize,w)||!j.isEqual(f.opt.workState,p)))&&r({activeTextId:d,update:{boxSize:w,workState:p},syncData:{canSync:!0,canWorker:!0}})},a=h=>{var M,v;if(!e)return;const d=fo(h),f=h.id,p=e.control.textEditorManager.get(f),w=po(h),N=E.Doing,y=[h.offsetWidth,h.offsetHeight];if(!p||p&&(p.opt.text!==w||!j.isEqual(p.opt.boxSize,y)||!j.isEqual(p.opt.workState,N))){const m=f&&j.cloneDeep(((M=e.control.textEditorManager)==null?void 0:M.get(f))||((v=o.editors)==null?void 0:v.get(f)));m&&m.opt&&(m.opt={...m.opt,text:w,boxSize:y,workState:N},m.canSync=!0,m.canWorker=!0,e.control.textEditorManager.updateForViewEdited(f,m)),e.control.textEditorManager.publicMsgEmitter.emit("textChange",f,h,d,m)}},c=(h,d)=>{if(!e)return;const f=h,p=e.control.textEditorManager.get(f);if(p&&!(!d[0]||!d[1])&&!j.isEqual(p.opt.boxSize,d)){const w=j.cloneDeep(p);w.opt={...w.opt,boxSize:d},w.canSync=!1,w.canWorker=!1,e.control.textEditorManager.updateForViewEdited(f,w)}},l=h=>{t.current&&cancelAnimationFrame(t.current),t.current=requestAnimationFrame(()=>{n!=null&&n.current&&(n==null||n.current.scrollTo({left:0,behavior:"instant"}),h&&h(),t.current=void 0)})};if((u=o.editors)!=null&&u.size){const h=[];return o.editors.forEach((d,f)=>{h.push(g.createElement(CI,{key:f,workId:f,data:d,showFloatBtns:o.showFloatBtns||!1,handleFocus:s,handleKeyUp:a,updateSize:c,runAnimation:l,rightBoundBreak:o.rightBoundBreak||!1}))}),h}return null},[o.editors,o.showFloatBtns,o.rightBoundBreak,e,r]);return g.createElement("div",{className:`${o.className}`,ref:n},i)},Ve=(o,n,e)=>({...o,...e==null?void 0:e[n]}),kI=()=>{const{floatBarData:o,overwriteSelectorStyles:n}=g.useContext(ve),e={borderColor:o==null?void 0:o.selectorColor,...n.highlightBox},t={backgroundColor:o==null?void 0:o.selectorColor,...n.highlightBoxPoint};return g.createElement("div",{className:"appliance-plugin-highlight-box",style:e},g.createElement("div",{className:"point LT nwse-resize",style:Ve(t,"LT",n.highlightBoxPoints)}),g.createElement("div",{className:"point LC ew-resize",style:Ve(t,"LC",n.highlightBoxPoints)}),g.createElement("div",{className:"point LB nesw-resize",style:Ve(t,"LB",n.highlightBoxPoints)}),g.createElement("div",{className:"point TC ns-resize",style:Ve(t,"TC",n.highlightBoxPoints)}),g.createElement("div",{className:"point RT nesw-resize",style:Ve(t,"RT",n.highlightBoxPoints)}),g.createElement("div",{className:"point RC ew-resize",style:Ve(t,"RC",n.highlightBoxPoints)}),g.createElement("div",{className:"point RB nwse-resize",style:Ve(t,"RB",n.highlightBoxPoints)}),g.createElement("div",{className:"point BC ns-resize",style:Ve(t,"BC",n.highlightBoxPoints)}))},xI=()=>{const{floatBarData:o,mananger:n,overwriteSelectorStyles:e}=g.useContext(ve),[t,r]=g.useState(),[i,s]=g.useState();g.useEffect(()=>{const l=[];if(n&&j.isNumber(o==null?void 0:o.x)&&j.isNumber(o==null?void 0:o.y)&&(o!=null&&o.points)){const u=n.viewId;if(n.control.viewContainerManager.getView(u))for(const d of o.points){const f=n.control.viewContainerManager.transformToOriginPoint(d,u);l.push(f)}l[0]&&r({x:l[0][0]-((o==null?void 0:o.x)||0),y:l[0][1]-((o==null?void 0:o.y)||0)}),l[1]&&s({x:l[1][0]-((o==null?void 0:o.x)||0),y:l[1][1]-((o==null?void 0:o.y)||0)})}},[n,o==null?void 0:o.points,o==null?void 0:o.x,o==null?void 0:o.y]);const a=g.useMemo(()=>t?g.createElement("div",{className:"point point-dot",style:{borderColor:o==null?void 0:o.selectorColor,...e.highlightBoxPoint,...e.highlightBoxPointDot,left:t.x,top:t.y}}):null,[o==null?void 0:o.selectorColor,t]),c=g.useMemo(()=>i?g.createElement("div",{className:"point point-dot",style:{borderColor:o==null?void 0:o.selectorColor,...e.highlightBoxPoint,...e.highlightBoxPointDot,left:i.x,top:i.y}}):null,[i,o==null?void 0:o.selectorColor]);return g.createElement("div",{className:"appliance-plugin-highlight-box",style:{borderColor:o==null?void 0:o.selectorColor,...e.highlightBox}},a,c)},bI=()=>{const{floatBarData:o,overwriteSelectorStyles:n}=g.useContext(ve),e={borderColor:o==null?void 0:o.selectorColor,...n.highlightBox},t={backgroundColor:o==null?void 0:o.selectorColor,...n.highlightBoxPoint};return g.createElement("div",{className:"appliance-plugin-highlight-box",style:e},g.createElement("div",{className:"point LT nwse-resize",style:Ve(t,"LT",n.highlightBoxPoints)}),g.createElement("div",{className:"point LB nesw-resize",style:Ve(t,"LB",n.highlightBoxPoints)}),g.createElement("div",{className:"point RT nesw-resize",style:Ve(t,"RT",n.highlightBoxPoints)}),g.createElement("div",{className:"point RB nwse-resize",style:Ve(t,"RB",n.highlightBoxPoints)}))},DI=()=>{const{floatBarData:o,overwriteSelectorStyles:n}=g.useContext(ve);return g.createElement("div",{className:"appliance-plugin-highlight-box",style:{borderColor:o==null?void 0:o.selectorColor,...n.highlightBox}},g.createElement("img",{className:"lock",alt:"lock",src:"https://sdk.netless.link/resource/icons/lock.svg",style:n.highlightBoxLock}))},AI=o=>{const{className:n}=o,{floatBarData:e,angle:t,setAngle:r,setOperationType:i,mananger:s}=g.useContext(ve),[a,c]=g.useState(E.Pending),[l,u]=g.useState(),[h,d]=g.useState(!1),[f,p]=g.useState(new ge),[w,N]=g.useState(new ge),[y,M]=g.useState(!1),v=g.useRef(0),m=g.useRef(null),T=(D,b)=>{r(D),i(b===E.Done?B.None:B.RotateNode),c(b),b===E.Done?(d(!1),s==null||s.focusElement()):d(!0),ee.emitMethod(te.MainEngine,B.RotateNode,{workIds:[q],angle:b===E.Start?0:D,workState:b,viewId:s==null?void 0:s.viewId})},C=D=>{if(!D){M(!0),d(!1),i(B.None),c(E.Pending);return}M(!1)},k=(D,b)=>{v.current&&(clearTimeout(v.current),v.current=0),c(E.Done),d(!1);const R=Math.round(ge.GetAngleByPoints(f,w,new ge(b.x,b.y)))||0;T(R,E.Done)};g.useEffect(()=>(ee.activeListener(C),()=>{ee.unmountActiveListener(C)}),[]),g.useEffect(()=>{if(window.__selectorE2E__)return window.__selectorRotateE2E__={start:(D=f.x,b=f.y)=>{if(s!=null&&s.control.worker.isBusy){M(!0),c(E.Pending);return}const R=Math.round(ge.GetAngleByPoints(f,w,new ge(D,b)))||0;T(R,E.Start)},doing:(D,b)=>{if(s!=null&&s.control.worker.isBusy){M(!0);return}const R=Math.round(ge.GetAngleByPoints(f,w,new ge(D,b)))||0;u({x:D,y:b}),T(R,E.Doing)},done:(D,b)=>{const R=Math.round(ge.GetAngleByPoints(f,w,new ge(D,b)))||0;u({x:D,y:b}),T(R,E.Done)}},()=>{window.__selectorRotateE2E__&&delete window.__selectorRotateE2E__}},[w,s,f]),g.useEffect(()=>{if(e&&(a===E.Pending||a===E.Done)){const D={x:(e==null?void 0:e.x)-20,y:(e==null?void 0:e.y)+(e==null?void 0:e.h)},b={x:(e==null?void 0:e.x)+(e==null?void 0:e.w)/2,y:(e==null?void 0:e.y)+(e==null?void 0:e.h)/2};N(new ge(b.x,b.y)),p(new ge(D.x,D.y)),u({x:D.x,y:D.y})}},[e,a]);const z=(D,b)=>{if(s!=null&&s.control.worker.isBusy){M(!0),c(E.Pending);return}v.current&&(clearTimeout(v.current),v.current=0),c(E.Start),d(!0);const R=Math.round(ge.GetAngleByPoints(f,w,new ge(b.x,b.y)))||0;T(R,E.Start)},A=(D,b)=>{if(s!=null&&s.control.worker.isBusy){M(!0),k(D,b);return}k(D,b)},x=(D,b)=>{if(s!=null&&s.control.worker.isBusy){M(!0),k(D,b);return}v.current||(u({x:b.x,y:b.y}),d(!0),v.current=setTimeout(()=>{v.current=0;const R=Math.round(ge.GetAngleByPoints(f,w,new ge(b.x,b.y)))||0;T(R,E.Doing)},60))};return g.createElement(Rt,{disabled:y,position:l,onStart:z,onDrag:x,onStop:A},g.createElement("div",{className:`${n}`,style:e?{left:0,top:0,touchAction:"none"}:void 0},!h&&g.createElement("div",{className:"appliance-plugin-rotate-btn",style:{backgroundColor:e==null?void 0:e.selectorColor}},g.createElement("img",{alt:"icon",src:ze("rotation-button")})),g.createElement("div",{ref:m,className:`appliance-plugin-rotate-mouse-pointer ${h?"active":""}`},g.createElement("img",{alt:"icon",src:ze("rotation")}),g.createElement("div",{className:"angle-icon"},t,"°"))))};function EI(o){const n=o==null?void 0:o.viewId;if(!n)return;const e=o.control.viewContainerManager.getView(n),t=e==null?void 0:e.focusScenePath,r=o.control.viewContainerManager.getUndoTickerId(n);!r||!t||(o.control.internalMsgEmitter.emit("cancelUndoTicker",r,n,t),o.control.worker.abled())}function jI(o,n){const e=o.control.worker.now;return o.control.textEditorManager.active(n,e),e}const zI="data-text-work-id";function LI(o){var n,e;if(o instanceof HTMLElement)return((e=(n=o.closest(`[${zI}]`))==null?void 0:n.dataset)==null?void 0:e.textWorkId)||void 0}const PI=g.memo(o=>{const{editors:n,canSelectorSwitch:e}=o,{floatBarData:t,setOperationType:r,mananger:i,isNoPointerEvents:s}=g.useContext(ve),[a,c]=g.useState(),[l,u]=g.useState(!1),h=g.useRef(0),d=g.useRef(),f=g.useRef(E.Pending),p=g.useMemo(()=>!!((t==null?void 0:t.scaleType)===Pe.none&&(t!=null&&t.canLock)),[t]),w=g.useMemo(()=>t&&t.w&&t.h?{position:"absolute",left:0,top:0,width:t.w,height:t.h,zIndex:2,pointerEvents:p||s?"none":"auto",touchAction:"none"}:{display:"none",pointerEvents:"none"},[t,p,s]),N=T=>{if(!T||t!=null&&t.isLocked){u(!0),f.current=E.Pending,r(B.None);return}u(!1)},y=(T,C)=>{h.current&&(clearTimeout(h.current),h.current=0);const k={x:C.x,y:C.y};r(B.None),f.current=E.Done,c(k),ee.emitMethod(te.MainEngine,B.TranslateNode,{workIds:[q],position:k,workState:E.Done,viewId:i==null?void 0:i.viewId})};g.useEffect(()=>(ee.activeListener(N),()=>{ee.unmountActiveListener(N)}),[]),g.useEffect(()=>{if(t&&(t!=null&&t.isLocked)||i!=null&&i.control.worker.isBusy){u(!0);return}u(!1)},[t,i==null?void 0:i.control.worker.isBusy]),g.useEffect(()=>{(f.current===E.Pending||f.current===E.Done)&&j.isNumber(t==null?void 0:t.x)&&j.isNumber(t==null?void 0:t.y)&&c({x:t==null?void 0:t.x,y:t==null?void 0:t.y})},[t==null?void 0:t.x,t==null?void 0:t.y]);const M=T=>{const C=T&&"target"in T?T.target:null,k=e?LI(C):void 0;if(i!=null&&i.control.worker.isBusy){u(!0);return}h.current&&(clearTimeout(h.current),h.current=0),d.current=k,j.isNumber(t==null?void 0:t.x)&&j.isNumber(t==null?void 0:t.y)&&(r(B.TranslateNode),f.current=E.Start,ee.emitMethod(te.MainEngine,B.TranslateNode,{workIds:[q],position:{x:t==null?void 0:t.x,y:t==null?void 0:t.y},workState:E.Start,viewId:i==null?void 0:i.viewId}))},v=(T,C)=>{var x,D;i!=null&&i.control.worker.isBusy&&u(!0);const k=f.current,z=d.current;if(!!z&&k===E.Start&&i&&e){EI(i),jI(i,z),d.current=void 0,f.current=E.Pending,r(B.None);const b=(x=i.control.viewContainerManager.getView(i.viewId))==null?void 0:x.focusScenePath;b&&i.control.worker.blurSelector(i.viewId,b);return}if(y(T,C),d.current&&(d.current=void 0),k===E.Start&&(n!=null&&n.size)&&z){const b=(D=i==null?void 0:i.control.viewContainerManager.getView(i.viewId))==null?void 0:D.focusScenePath;b&&(i==null||i.control.worker.blurSelector(i.viewId,b))}i==null||i.focusElement()},m=(T,C)=>{if(i!=null&&i.control.worker.isBusy){u(!0),y(T,C);return}if(h.current)return;const k={x:C.x,y:C.y};c(k),h.current=setTimeout(()=>{h.current=0,(k.x!==(a==null?void 0:a.x)||k.y!==(a==null?void 0:a.y))&&(d.current&&(d.current=void 0),f.current=E.Doing,ee.emitMethod(te.MainEngine,B.TranslateNode,{workIds:[q],position:k,workState:E.Doing,viewId:i==null?void 0:i.viewId}))},60)};return g.createElement(Rt,{disabled:l,position:a,onStart:M,onDrag:m,onStop:v},g.createElement("div",{style:w},g.createElement(RI,{editors:n,selectIds:(t==null?void 0:t.selectIds)||[]})))},(o,n)=>!!j.isEqual(o,n)),RI=g.memo(o=>{const{editors:n,selectIds:e}=o;return n?g.createElement(SI,{editors:n,selectIds:e||[]}):null},(o,n)=>!(!j.isEqual(o.editors,n.editors)||!j.isEqual(o.selectIds,n.selectIds))),OI=o=>{const{className:n}=o,[e,t]=g.useState({x:0,y:0,h:0,w:0}),[r,i]=g.useState(),[s,a]=g.useState(),[c,l]=g.useState(),{floatBarData:u,mananger:h,isNoPointerEvents:d,setOperationType:f}=g.useContext(ve),[p,w]=g.useState(),[N,y]=g.useState(!1),M=g.useRef(0);g.useEffect(()=>{if(u&&h){const D={x:u.x,y:u.y,w:u.w,h:u.h};t(D)}return ee.activeListener(m),()=>{ee.unmountActiveListener(m)}},[]),g.useEffect(()=>{if(h!=null&&h.control.worker.isBusy){y(!0);return}y(!1)},[h==null?void 0:h.control.worker.isBusy]);const v=()=>{if(M.current&&(clearTimeout(M.current),M.current=0),p){const{scale:D,translate:b}=p;f(B.None),ee.emitMethod(te.MainEngine,B.ScaleNode,{workIds:[q],scale:D,dir:c,translate:b,originPoint:r,scenePoint:s,workState:E.Done,viewId:h==null?void 0:h.viewId})}h==null||h.focusElement()},m=D=>{if(!D){y(!0);return}y(!1)},T=D=>[[D.x,D.y],[D.x+D.w,D.y],[D.x+D.w,D.y+D.h],[D.x,D.y+D.h]],C=(D,b)=>{switch(b){case"top":case"topLeft":case"left":return D[2];case"topRight":return D[3];case"right":case"bottomRight":case"bottom":return D[0];case"bottomLeft":return D[1]}},k=(D,b,R,O)=>{let U=!1,$=!1;const Y={x:e.x,y:e.y,w:e.w,h:e.h},Z=[1,1],Q=[0,0];switch(D){case"top":{const ae=b.height+e.h;ae<0?($=!0,Y.y=e.y+e.h,Y.h=Math.abs(ae)):(Y.y=e.y-b.height,Y.h=e.h+b.height);break}case"topLeft":{const ae=b.width+e.w;ae<0?(U=!0,Y.x=e.x+e.w,Y.w=Math.abs(ae)):(Y.x=e.x-b.width,Y.w=e.w+b.width);const de=b.height+e.h;de<0?($=!0,Y.y=e.y+e.h,Y.h=Math.abs(de)):(Y.y=e.y-b.height,Y.h=e.h+b.height);break}case"topRight":{const ae=b.width+e.w;ae<0?(U=!0,Y.x=e.x+ae,Y.w=Math.abs(ae)):Y.w=e.w+b.width;const de=b.height+e.h;de<0?($=!0,Y.y=e.y+e.h,Y.h=Math.abs(de)):(Y.y=e.y-b.height,Y.h=e.h+b.height);break}case"bottom":{const ae=b.height+e.h;ae<0?($=!0,Y.y=e.y+ae,Y.h=Math.abs(ae)):Y.h=e.h+b.height;break}case"bottomLeft":{const ae=b.width+e.w;ae<0?(U=!0,Y.x=e.x+e.w,Y.w=Math.abs(ae)):(Y.x=e.x-b.width,Y.w=e.w+b.width);const de=b.height+e.h;de<0?($=!0,Y.y=e.y+de,Y.h=Math.abs(de)):Y.h=e.h+b.height;break}case"left":{const ae=b.width+e.w;ae<0?(U=!0,Y.x=e.x+e.w,Y.w=Math.abs(ae)):(Y.x=e.x-b.width,Y.w=e.w+b.width);break}case"bottomRight":{const ae=b.width+e.w;ae<0?(U=!0,Y.x=e.x+ae,Y.w=Math.abs(ae)):Y.w=e.w+b.width;const de=b.height+e.h;de<0?($=!0,Y.y=e.y+de,Y.h=Math.abs(de)):Y.h=e.h+b.height;break}case"right":{const ae=b.width+e.w;ae<0?(U=!0,Y.x=e.x+ae,Y.w=Math.abs(ae)):Y.w=e.w+b.width;break}}Z[0]=Y.w/e.w,Z[1]=Y.h/e.h;const X=T(Y).map(ae=>R.control.viewContainerManager.transformToScenePoint(ae,R.viewId)),pe=C(X,D);return $&&(Q[1]=pe[1]-O[1]),U&&(Q[0]=pe[0]-O[0]),{scale:Z,translate:Q}},z=(D,b)=>{if(M.current&&(clearTimeout(M.current),M.current=0),h!=null&&h.control.worker.isBusy){y(!0);return}if(u!=null&&u.w&&(u!=null&&u.h)&&h){const R={x:u.x,y:u.y,w:u.w,h:u.h},O=T(R),U=O.map(Z=>h.control.viewContainerManager.transformToScenePoint(Z,h.viewId)),$=C(O,b),Y=C(U,b);t(R),i($),a(Y),l(b),f(B.ScaleNode),ee.emitMethod(te.MainEngine,B.ScaleNode,{workIds:[q],originPoint:$,scenePoint:Y,workState:E.Start,viewId:h.viewId})}},A=(D,b,R,O)=>{if(!(!h||!r||!s)){if(h!=null&&h.control.worker.isBusy){y(!0),v();return}M.current||(M.current=setTimeout(()=>{M.current=0;const{scale:U,translate:$}=k(b,O,h,s);(!j.isEqual(U,p==null?void 0:p.scale)||!j.isEqual($,p==null?void 0:p.translate))&&(w({scale:U,translate:$}),f(B.ScaleNode),ee.emitMethod(te.MainEngine,B.ScaleNode,{workIds:[q],scale:U,dir:b,translate:$,originPoint:r,scenePoint:s,workState:E.Doing,viewId:h.viewId}))},60))}},x=()=>{h!=null&&h.control.worker.isBusy&&y(!0),v()};return g.createElement(Do.Resizable,{className:`${n}`,boundsByDirection:!0,minWidth:-(((u==null?void 0:u.x)||0)+((u==null?void 0:u.w)||0)),minHeight:-(((u==null?void 0:u.y)||0)+((u==null?void 0:u.h)||0)),size:{width:(u==null?void 0:u.w)||0,height:(u==null?void 0:u.h)||0},style:{position:"absolute",left:u==null?void 0:u.x,top:u==null?void 0:u.y,pointerEvents:d?"none":"auto"},enable:N?!1:{top:(u==null?void 0:u.scaleType)===Pe.all&&!0||!1,right:(u==null?void 0:u.scaleType)===Pe.all&&!0||!1,bottom:(u==null?void 0:u.scaleType)===Pe.all&&!0||!1,left:(u==null?void 0:u.scaleType)===Pe.all&&!0||!1,topRight:!0,bottomRight:!0,bottomLeft:!0,topLeft:!0},lockAspectRatio:(u==null?void 0:u.scaleType)===Pe.proportional,onResizeStart:z,onResize:A,onResizeStop:x})},mi=o=>{const{id:n,pos:e,pointMap:t,type:r}=o,{setOperationType:i,mananger:s,floatBarData:a}=g.useContext(ve),[c,l]=g.useState({x:0,y:0}),[u,h]=g.useState(E.Pending),[d,f]=g.useState(!1),p=g.useRef(0),w=g.useMemo(()=>a?{left:0,top:0}:{},[a]),N=T=>{if(!T||a!=null&&a.isLocked){f(!0),h(E.Pending),i(B.None);return}f(!1)};g.useEffect(()=>(ee.activeListener(N),()=>{ee.unmountActiveListener(N)}),[]),g.useEffect(()=>{j.isNumber(e.x)&&j.isNumber(e.y)&&(u===E.Pending||u===E.Done)&&l({x:e.x,y:e.y})},[e,u]),g.useEffect(()=>{if(a&&(a!=null&&a.isLocked)||s!=null&&s.control.worker.isBusy){f(!0);return}f(!1)},[a,s==null?void 0:s.control.worker.isBusy]);const y=(T,C)=>{p.current&&(clearTimeout(p.current),p.current=0),i(B.None),h(E.Done);const k={x:C.x,y:C.y};if(l(k),s!=null&&s.control.viewContainerManager){const z=s.control.viewContainerManager.transformToScenePoint([k.x,k.y],s.viewId),A=t.get(n);A&&r==="start"?A[0]=z:A&&r==="end"&&(A[1]=z),ee.emitMethod(te.MainEngine,B.SetPoint,{workId:q,pointMap:t,workState:E.Done,viewId:s==null?void 0:s.viewId})}s==null||s.focusElement()},M=()=>{if(p.current&&(clearTimeout(p.current),p.current=0),s!=null&&s.control.worker.isBusy){f(!0);return}j.isNumber(e.x)&&j.isNumber(e.y)&&(i(B.SetPoint),h(E.Start),ee.emitMethod(te.MainEngine,B.SetPoint,{workId:q,pointMap:t,workState:E.Start,viewId:s==null?void 0:s.viewId}))},v=(T,C)=>{if(s!=null&&s.control.worker.isBusy){f(!0),y(T,C);return}if(p.current)return;const k={x:C.x,y:C.y};l(k),p.current=setTimeout(()=>{if(p.current=0,s!=null&&s.control.viewContainerManager){const z=s.control.viewContainerManager.transformToScenePoint([k.x,k.y],s.viewId),A=t.get(n);A&&r==="start"?A[0]=z:A&&r==="end"&&(A[1]=z),h(E.Doing),ee.emitMethod(te.MainEngine,B.SetPoint,{workId:q,pointMap:t,workState:E.Doing,viewId:s==null?void 0:s.viewId})}},60)},m=(T,C)=>{s!=null&&s.control.worker.isBusy&&f(!0),y(T,C)};return g.createElement(Rt,{disabled:d,position:c,onStart:M,onDrag:v,onStop:m},g.createElement("div",{className:"appliance-plugin-point-draggable-btn",style:w}))},UI=o=>{const{className:n}=o,{floatBarData:e,mananger:t}=g.useContext(ve),[r,i]=g.useState(),[s,a]=g.useState(),[c,l]=g.useState(new Map);g.useEffect(()=>{const d=[];if(t&&(e!=null&&e.points)){const f=t.viewId;if(t.control.viewContainerManager.getView(f))for(const w of e.points){const N=t.control.viewContainerManager.transformToOriginPoint(w,f);d.push(N)}e!=null&&e.selectIds&&e.selectIds.length===1&&(c.set(e.selectIds[0],e.points),l(c))}d[0]&&i({x:d[0][0],y:d[0][1]}),d[1]&&a({x:d[1][0],y:d[1][1]})},[t,e==null?void 0:e.points,e==null?void 0:e.selectIds,c]);const u=g.useMemo(()=>r&&(e!=null&&e.selectIds)?g.createElement(mi,{pos:r,type:"start",id:e.selectIds[0],pointMap:c}):null,[r,e==null?void 0:e.selectIds,c]),h=g.useMemo(()=>s&&(e!=null&&e.selectIds)?g.createElement(mi,{pos:s,type:"end",id:e.selectIds[0],pointMap:c}):null,[s,e==null?void 0:e.selectIds,c]);return g.createElement("div",{className:`${n}`},u,h)},YI=g.forwardRef((o,n)=>{const{floatBarData:e,operationType:t}=g.useContext(ve),r=g.useMemo(()=>(e==null?void 0:e.scaleType)!==Pe.all||t===B.RotateNode?null:g.createElement(kI,null),[e,t]),i=g.useMemo(()=>(e==null?void 0:e.scaleType)!==Pe.both||t===B.RotateNode?null:g.createElement(xI,null),[e,t]),s=g.useMemo(()=>(e==null?void 0:e.scaleType)!==Pe.proportional||t===B.RotateNode?null:g.createElement(bI,null),[e,t]),a=g.useMemo(()=>(e==null?void 0:e.scaleType)===Pe.none&&(e!=null&&e.canLock)?g.createElement(DI,null):null,[e]);return g.createElement("div",{ref:n,style:e?{transform:`translate(${e.x}px,${e.y}px)`,width:e.w,height:e.h,pointerEvents:"none"}:void 0},a,r,i,s,o.children)}),BI=g.memo(o=>{const{isHide:n,operationType:e,floatBarData:t}=o;return n&&e===B.None&&j.isNumber(t==null?void 0:t.x)&&j.isNumber(t==null?void 0:t.y)&&j.isNumber(t==null?void 0:t.w)&&j.isNumber(t==null?void 0:t.h)?g.createElement("div",{className:ke.FloatBarBtn,style:{left:t==null?void 0:t.x,top:t==null?void 0:t.y,width:t.w,height:t.h}},g.createElement(ko,{position:{x:t.x,y:t.y},textOpt:t==null?void 0:t.textOpt,noLayer:t==null?void 0:t.isLocked})):null},(o,n)=>!!j.isEqual(o,n)),FI=g.forwardRef((o,n)=>{const{floatBarData:e,operationType:t,mananger:r}=g.useContext(ve),{editors:i,isHide:s,canSelectorSwitch:a}=o,c=g.useRef(null);g.useEffect(()=>{const d=c.current;if(!d)return;const f=p=>{p.stopPropagation(),p.stopImmediatePropagation(),r==null||r.control.worker.blurCursor(r.viewId)};return d.addEventListener("pointerdown",f,!1),()=>{d.removeEventListener("pointerdown",f,!1)}},[r]);const l=g.useMemo(()=>{var d;return e!=null&&e.canRotate&&((d=e==null?void 0:e.selectIds)==null?void 0:d.length)===1&&(t===B.None||t===B.RotateNode)?g.createElement(AI,{className:ke.RotateBtn}):null},[e,t]),u=g.useMemo(()=>((e==null?void 0:e.scaleType)===Pe.all||(e==null?void 0:e.scaleType)===Pe.proportional)&&(t===B.None||t===B.ScaleNode)&&j.isNumber(e==null?void 0:e.x)&&j.isNumber(e==null?void 0:e.y)?g.createElement(OI,{className:ke.ResizeBtn}):null,[e==null?void 0:e.scaleType,t,e==null?void 0:e.x,e==null?void 0:e.y]),h=g.useMemo(()=>(e==null?void 0:e.scaleType)===Pe.both&&(t===B.None||t===B.SetPoint)?g.createElement(UI,{className:ke.ResizeTowBox}):null,[e==null?void 0:e.scaleType,t]);return g.createElement("div",{ref:c,className:ke.FloatBar,onPointerOver:d=>(nn(d),r==null||r.control.worker.blurCursor(r.viewId),!1)},g.createElement(YI,{ref:n}),g.createElement(PI,{editors:i,canSelectorSwitch:a}),l,u,h,g.createElement(BI,{isHide:s,operationType:t,floatBarData:e}))}),WI=g.memo(FI,(o,n)=>!!j.isEqual(o,n));class VI extends g.Component{constructor(e){super(e);I(this,"renderAvatar",e=>{var r;const t=`rgb(${e.memberState.strokeColor[0]}, ${e.memberState.strokeColor[1]}, ${e.memberState.strokeColor[2]})`;if(this.detectAvatar(e)){const i=this.getCursorName(e);return g.createElement("img",{className:"cursor-selector-avatar",style:{width:i?19:28,height:i?19:28,position:i?"initial":"absolute",borderColor:i?"white":t,marginRight:i?4:0},src:(r=e.payload)==null?void 0:r.avatar,alt:"avatar"})}else return null});I(this,"getOpacity",e=>{const t=this.getCursorName(e),r=this.detectAvatar(e);return t===void 0&&r===void 0?0:1});I(this,"getCursorName",e=>{if(e.payload)return e.payload.nickName||e.payload.cursorName||e.payload.uid});I(this,"getThemeClass",e=>e.payload&&e.payload.theme?"cursor-inner-mellow":"cursor-inner");I(this,"getCursorBackgroundColor",e=>{const t=this.getCursorName(e);return e.payload&&e.payload.cursorBackgroundColor?e.payload.cursorBackgroundColor:t?`rgb(${e.memberState.strokeColor[0]}, ${e.memberState.strokeColor[1]}, ${e.memberState.strokeColor[2]})`:void 0});I(this,"getCursorTextColor",e=>e.payload&&e.payload.cursorTextColor?e.payload.cursorTextColor:"#FFFFFF");I(this,"getCursorTagBackgroundColor",e=>e.payload&&e.payload.cursorTagBackgroundColor?e.payload.cursorTagBackgroundColor:this.getCursorBackgroundColor(e));I(this,"detectAvatar",e=>!!(e.payload&&e.payload.avatar));I(this,"renderTag",e=>{if(e.payload&&e.payload.cursorTagName)return g.createElement("span",{className:"cursor-tag-name",style:{backgroundColor:this.getCursorTagBackgroundColor(e)}},e.payload.cursorTagName)});I(this,"renderCursor",e=>{const t=cI.get(e);return t&&this.props.isEnableCursor?g.createElement("img",{className:`cursor-${e}-image`,src:t,alt:`${e}Cursor`}):null})}render(){const{roomMember:e}=this.props,t=this.getCursorName(e);switch(e.memberState.currentApplianceName){case ie.pencil:return g.createElement("div",{className:"cursor-box"},g.createElement("div",{className:"cursor-mid cursor-pencil-offset",style:{transform:"translate(-50%, -100%)",marginLeft:"5px",marginTop:"4px"}},g.createElement("div",{className:"cursor-name"},g.createElement("div",{style:{opacity:this.getOpacity(e),backgroundColor:this.getCursorBackgroundColor(e),color:this.getCursorTextColor(e)},className:this.getThemeClass(e)},this.renderAvatar(e),g.createElement("span",{className:"cursor-name-text"},t),this.renderTag(e))),g.createElement("div",null,this.renderCursor("pencil"))));case ie.selector:return g.createElement("div",{className:"cursor-box"},g.createElement("div",{className:"cursor-mid cursor-selector-offset",style:{transform:"translate(-50%, -100%)",marginLeft:"3px",marginTop:"17px"}},g.createElement("div",{className:"cursor-name"},g.createElement("div",{style:{opacity:this.getOpacity(e),backgroundColor:this.getCursorBackgroundColor(e),color:this.getCursorTextColor(e)},className:this.getThemeClass(e)},this.renderAvatar(e),g.createElement("span",{className:"cursor-name-text"},t),this.renderTag(e))),g.createElement("div",null,this.renderCursor("selector"))));case ie.eraser:case ie.pencilEraser:return g.createElement("div",{className:"cursor-box"},g.createElement("div",{className:"cursor-mid cursor-eraser-offset",style:{transform:"translate(-50%, -100%)",marginLeft:"2px",marginTop:"8px"}},g.createElement("div",{className:"cursor-name"},g.createElement("div",{style:{opacity:this.getOpacity(e),backgroundColor:this.getCursorBackgroundColor(e),color:this.getCursorTextColor(e)},className:this.getThemeClass(e)},this.renderAvatar(e),g.createElement("span",{className:"cursor-name-text"},t),this.renderTag(e))),g.createElement("div",null,this.renderCursor("eraser"))));case ie.text:return g.createElement("div",{className:"cursor-box"},g.createElement("div",{className:"cursor-mid cursor-text-offset",style:{transform:"translate(-50%, -100%)",marginLeft:"0px"}},g.createElement("div",{className:"cursor-name"},g.createElement("div",{style:{opacity:this.getOpacity(e),backgroundColor:this.getCursorBackgroundColor(e),color:this.getCursorTextColor(e)},className:this.getThemeClass(e)},this.renderAvatar(e),g.createElement("span",{className:"cursor-name-text"},t),this.renderTag(e))),g.createElement("div",null,this.renderCursor("text"))));case ie.rectangle:case ie.arrow:case ie.straight:case ie.shape:case ie.ellipse:return g.createElement("div",{className:"cursor-box"},g.createElement("div",{className:"cursor-mid cursor-shape-offset",style:{transform:"translate(-50%, -100%)",marginLeft:"-3px",marginTop:"19px"}},g.createElement("div",{className:"cursor-name"},g.createElement("div",{style:{opacity:this.getOpacity(e),backgroundColor:this.getCursorBackgroundColor(e),color:this.getCursorTextColor(e)},className:this.getThemeClass(e)},this.renderAvatar(e),g.createElement("span",{className:"cursor-name-text"},t),this.renderTag(e))),g.createElement("div",null,this.renderCursor("shape"))));default:return null}}}const $I=o=>{var s;const{className:n,info:e,isEnableCursor:t}=o,{roomMember:r,...i}=e||{};return g.createElement("div",{"data-cursor-uid":(s=r==null?void 0:r.payload)==null?void 0:s.uid,className:`${n}`,style:i?{transform:`translate(${i.x}px, ${i.y}px)`}:{display:"none"}},r&&g.createElement(VI,{roomMember:r,isEnableCursor:t}))},GI=o=>{const{className:n,manager:e}=o,[t,r]=g.useState();g.useEffect(()=>(e.internalMsgEmitter.on([te.Cursor,e.viewId],i),()=>{e.internalMsgEmitter.off([te.Cursor,e.viewId],i)}),[e]);function i(a){r(a)}return g.useMemo(()=>{if(t!=null&&t.length){const a=t.map(c=>{var l;return c.roomMember?g.createElement($I,{key:(l=c.roomMember)==null?void 0:l.memberId,className:n,info:c,isEnableCursor:e.control.cursor.isEnableCursor}):null});return g.createElement(g.Fragment,null,a)}return null},[t])},QI=o=>{const{viewId:n,miniMapCanvas:e,highlightColor:t,miniMapManager:r,contianer:i}=o,[s,a]=g.useState();g.useEffect(()=>(c(),r.listener.addListener([n,"viewCameraUpate"],c),r.listener.emitAsync([n,"miniMapCreate"],!0),()=>{r.listener.removeListener([n,"viewCameraUpate"],c)}),[]);const c=()=>{const h=r.maps.get(n);h&&l(h.miniMapCamera,h.viewCamera)},l=(h,d)=>{const{width:f,height:p}=i.getBoundingClientRect(),w=Math.min(f/h.width,p/h.height),N=d.width/d.scale,y=d.height/d.scale,M=[d.centerX,d.centerY],v=[h.centerX,h.centerY],m=[M[0]-v[0],M[1]-v[1]],T=Math.min(h.scale*w,h.scale*w),C=[m[0]*T,m[1]*T,N,y,T];a(C)},u=h=>{var d;if(r.control.renderControl.isWritable){const f=h.nativeEvent.target||h.nativeEvent.srcElement;if(f&&h.nativeEvent&&s){const{width:p,height:w}=f.getBoundingClientRect(),[N,y]=[p/2,w/2],[M,v]=[(h.nativeEvent.offsetX-N)/s[4],(h.nativeEvent.offsetY-y)/s[4]],m=r.maps.get(n);if(m!=null&&m.viewCamera){const[T,C]=[m.miniMapCamera.centerX+M,m.miniMapCamera.centerY+v];(d=r.control.room)==null||d.moveCamera({centerX:T,centerY:C,animationMode:"immediately"})}}}};return g.createElement("div",{style:{position:"relative",width:"100%",height:"100%",overflow:"hidden",display:"flex",flexDirection:"column",justifyContent:"center",alignItems:"center",pointerEvents:"auto"},onClick:u},g.createElement("canvas",{style:{pointerEvents:"none"},ref:e}),s&&g.createElement("div",{className:"minimap-highlightBox",style:{position:"absolute",top:"50%",left:"50%",width:s[2]*s[4],height:s[3]*s[4],boxSizing:"content-box",border:`2px solid ${t}`,transform:`translate(calc(-50% + ${s[0]}px), calc(-50% + ${s[1]}px))`,pointerEvents:"none"}}))},ZI=o=>{const{miniMapManager:n,active:e,className:t}=o,r=g.useMemo(()=>{const i=n.maps;if(e){const s=i.get(e);if(s){const{miniMapCamera:a,viewCamera:c,...l}=s;if(l.contianer&&a&&c){const u=n.highlightColor;return fn.createPortal(g.createElement(QI,{viewId:e,...l,highlightColor:u,miniMapManager:n}),l.contianer)}}}return null},[e,n]);return g.createElement("div",{className:t},r)},ve=g.createContext({viewId:"",mananger:void 0,floatBarColors:[],overwriteSelectorStyles:{},floatBarData:void 0,dpr:1,angle:0,operationType:B.None,scale:[1,1],isNoPointerEvents:!1,activeTextEditor:!1,activeTextId:void 0,setAngle:()=>{},setOperationType:()=>{},setFloatBarData:()=>{}});class Nr extends g.Component{constructor(e){var r,i;super(e);I(this,"showTextFloatBar");I(this,"canSelectorSwitch");I(this,"rightBoundBreak");I(this,"setAngle",e=>{this.setState({angle:e})});I(this,"setOperationType",e=>{this.setState({operationType:e})});this.state={floatBarData:void 0,showFloatBar:!1,showFloatBarBtn:!0,dpr:1,angle:0,operationType:B.None,scale:[1,1],editors:this.editors,activeTextId:(r=this.props.mananger.control.textEditorManager)==null?void 0:r.activeId,activeMiniMapViewId:(i=this.props.mananger.control.miniMapManager)==null?void 0:i.activeViewId};const t=this.props.mananger.control.pluginOptions.extras.textEditor;this.showTextFloatBar=j.isBoolean(t.showFloatBar)?t.showFloatBar:ye.textEditor.showFloatBar,this.canSelectorSwitch=j.isBoolean(t==null?void 0:t.canSelectorSwitch)?t.canSelectorSwitch:ye.textEditor.canSelectorSwitch,this.rightBoundBreak=j.isBoolean(t==null?void 0:t.rightBoundBreak)?t.rightBoundBreak:ye.textEditor.rightBoundBreak}get editors(){return en(this.props.mananger.control.textEditorManager.filterEditor(this.props.mananger.viewId))}componentDidMount(){this.props.mananger.vDom=this,this.props.mananger.mountView(),this.setState({dpr:this.props.mananger.dpr})}componentWillUnmount(){}setActiveMiniMap(e){this.setState({activeMiniMapViewId:e})}showFloatBarBtn(e){this.setState({showFloatBarBtn:e})}showFloatBar(e,t){const r=e&&t&&{...this.state.floatBarData,...t}||void 0;this.setState({showFloatBar:e,floatBarData:r,angle:0})}activeTextEditor(){this.setState({activeTextEditor:!0})}unActiveTextEditor(){this.setState({activeTextEditor:!1})}updateTextEditorInfo(e,t){this.renderTextEditorInfo(e,t)}renderTextEditorInfo(e,t){this.setState({activeTextId:e,editors:this.editors},t)}setFloatBarData(e){this.state.floatBarData&&this.setState({floatBarData:{...this.state.floatBarData,...e}})}render(){var t,r,i,s,a,c;const e=!!((r=(t=this.props.mananger.control)==null?void 0:t.room)!=null&&r.floatBarOptions);return g.createElement("div",{className:ke.Container},!this.props.mananger.control.hasOffscreenCanvas&&g.createElement("div",{className:ke.CanvasBox,ref:this.props.refs.canvasContainerRef})||g.createElement("div",{className:ke.CanvasBox},g.createElement("canvas",{id:"bgCanvas",ref:this.props.refs.canvasBgRef,style:{width:"100%",height:"100%"}}),g.createElement("canvas",{id:"serviceCanvas",className:ke.FloatCanvas,ref:this.props.refs.canvasServiceFloatRef,style:{width:"100%",height:"100%"}}),g.createElement("canvas",{id:"localCanvas",className:ke.FloatCanvas,ref:this.props.refs.canvasFloatRef,style:{width:"100%",height:"100%"}}),!this.props.mananger.control.isUseSimple&&g.createElement("div",{id:"subLocalCanvas",className:ke.CanvasBoxSub,ref:this.props.refs.subLocalCanvasContainerRef}),!this.props.mananger.control.isUseSimple&&g.createElement("canvas",{id:"topCanvas",className:ke.TopFloatCanvas,ref:this.props.refs.canvasTopRef,style:{width:"100%",height:"100%"}})),!this.props.mananger.control.hasOffscreenCanvas&&this.props.refs.snapshotContainerRef&&g.createElement("div",{className:ke.SnapshotBox,ref:this.props.refs.snapshotContainerRef})||null,this.props.mananger.control.isUseBackgroundThread&&!!this.props.refs.backgroundContainerRef&&g.createElement("div",{className:ke.BackgroundBox},g.createElement("div",{className:ke.BackgroundSvgBox,ref:this.props.refs.backgroundContainerRef}),!!this.props.refs.backgroundSnapshotContainerRef&&g.createElement("div",{className:ke.BackgroundSnapshotBox},g.createElement("div",{className:ke.BackgroundSnapshotContent,ref:this.props.refs.backgroundSnapshotContainerRef})))||null,g.createElement(ve.Provider,{value:{viewId:this.props.viewId,mananger:this.props.mananger,floatBarColors:e&&((a=(s=(i=this.props.mananger.control)==null?void 0:i.room)==null?void 0:s.floatBarOptions)==null?void 0:a.colors)||[],overwriteSelectorStyles:this.props.mananger.control.pluginOptions.extras.overwriteSelectorStyles||{},isNoPointerEvents:!this.state.showFloatBarBtn,floatBarData:this.state.floatBarData,dpr:this.state.dpr,angle:this.state.angle,operationType:this.state.operationType,scale:this.state.scale,activeTextEditor:this.state.activeTextEditor,activeTextId:this.state.activeTextId,setAngle:this.setAngle.bind(this),setOperationType:this.setOperationType.bind(this),setFloatBarData:this.setFloatBarData.bind(this)}},this.state.showFloatBar&&g.createElement(WI,{ref:this.props.refs.floatBarRef,editors:this.state.editors,isHide:e&&this.state.showFloatBarBtn,canSelectorSwitch:this.canSelectorSwitch})||null,((c=this.state.editors)==null?void 0:c.size)&&g.createElement(NI,{className:ke.TextEditorContainer,showFloatBtns:this.showTextFloatBar&&e&&this.state.showFloatBarBtn||!1,editors:this.state.editors,rightBoundBreak:this.rightBoundBreak})||null),g.createElement("div",{className:"appliance-plugin-custom-floatbar-container","data-view-id":this.props.viewId,ref:this.props.refs.customFloatbarContainerRef}),g.createElement(GI,{className:ke.CursorBox,manager:this.props.mananger}),!this.props.mananger.control.isUseSimple&&g.createElement(ZI,{className:ke.MiniMapBox,active:this.state.activeMiniMapViewId,miniMapManager:this.props.mananger.control.miniMapManager}))}}class HI extends Co{constructor(e,t){super(e,t);I(this,"width",1e3);I(this,"height",1e3);I(this,"dpr",Pt());I(this,"vDom");I(this,"eventTragetElement");I(this,"snapshotContainerRef");I(this,"backgroundSnapshotContainerRef");I(this,"canvasContainerRef",g.createRef());I(this,"subLocalCanvasContainerRef");I(this,"canvasTopRef");I(this,"canvasServiceFloatRef",g.createRef());I(this,"canvasFloatRef",g.createRef());I(this,"canvasBgRef",g.createRef());I(this,"backgroundContainerRef");I(this,"floatBarRef",g.createRef());I(this,"customFloatbarContainerRef",g.createRef());I(this,"containerOffset",{x:0,y:0});this.control.hasOffscreenCanvas||(this.snapshotContainerRef=g.createRef()),this.control.isUseSimple||(this.canvasTopRef=g.createRef(),this.subLocalCanvasContainerRef=g.createRef()),this.control.isUseBackgroundThread&&(this.backgroundContainerRef=g.createRef(),this.backgroundSnapshotContainerRef=g.createRef())}setCanvassStyle(){var e,t;if(this.eventTragetElement){const r=this.eventTragetElement.offsetWidth||this.width,i=this.eventTragetElement.offsetHeight||this.height,s=Pt();s!==this.dpr&&(this.dpr=s,this.control.worker.updateDpr(this.viewId,this.dpr)),r&&i&&this.canvasContainerRef.current&&(r!==this.width||i!==this.height)&&(this.width=r,this.height=i,this.canvasContainerRef.current.style.width=`${r}px`,this.canvasContainerRef.current.style.height=`${i}px`),r&&i&&this.snapshotContainerRef&&this.snapshotContainerRef.current&&(r!==this.width||i!==this.height)&&(this.width=r,this.height=i),r&&i&&this.canvasBgRef.current&&(r!==this.width||i!==this.height)&&(this.width=r,this.height=i,this.control.isUseOffscreenTransfer||(this.canvasBgRef.current.width=r*this.dpr,this.canvasBgRef.current.height=i*this.dpr,this.canvasFloatRef.current&&(this.canvasFloatRef.current.width=r*this.dpr,this.canvasFloatRef.current.height=i*this.dpr),this.canvasServiceFloatRef.current&&(this.canvasServiceFloatRef.current.width=r*this.dpr,this.canvasServiceFloatRef.current.height=i*this.dpr),(e=this.canvasTopRef)!=null&&e.current&&(this.canvasTopRef.current.width=r*this.dpr,this.canvasTopRef.current.height=i*this.dpr))),r&&i&&this.backgroundContainerRef&&((t=this.backgroundContainerRef)!=null&&t.current)&&(r!==this.width||i!==this.height)&&(this.backgroundContainerRef.current.style.width=`${r}px`,this.backgroundContainerRef.current.style.height=`${i}px`,this.backgroundContainerRef.current.classList.toggle("appliance-plugin-background-isWritable",this.control.renderControl.isWritable))}}destroy(){if(super.destroy(),this.eventTragetElement){const e=this.eventTragetElement.parentElement;if(e){const t=e.querySelectorAll(".appliance-plugin-main-view-displayer");for(const r of t)r.remove()}}}createMainViewDisplayer(e){const t=document.createElement("div");return t.className="appliance-plugin-main-view-displayer",e.appendChild(t),this.eventTragetElement=e.children[0],this.containerOffset=this.getContainerOffset(this.eventTragetElement,this.containerOffset),this.bindToolsClass(),fn.render(g.createElement(Nr,{viewId:this.viewId,mananger:this,refs:{canvasServiceFloatRef:this.canvasServiceFloatRef,canvasFloatRef:this.canvasFloatRef,canvasBgRef:this.canvasBgRef,floatBarRef:this.floatBarRef,customFloatbarContainerRef:this.customFloatbarContainerRef,canvasTopRef:this.canvasTopRef,canvasContainerRef:this.canvasContainerRef,snapshotContainerRef:this.snapshotContainerRef,subLocalCanvasContainerRef:this.subLocalCanvasContainerRef,backgroundContainerRef:this.backgroundContainerRef,backgroundSnapshotContainerRef:this.backgroundSnapshotContainerRef}}),t),this.control.room&&this.bindDisplayerEvent(this.eventTragetElement),this}}class qI extends bm{constructor(e,t,r){super(e,t,r);I(this,"dpr",Pt());I(this,"width",1e3);I(this,"height",1e3);I(this,"vDom");I(this,"eventTragetElement");I(this,"canvasContainerRef",g.createRef());I(this,"subLocalCanvasContainerRef");I(this,"canvasTopRef");I(this,"canvasServiceFloatRef",g.createRef());I(this,"canvasFloatRef",g.createRef());I(this,"canvasBgRef",g.createRef());I(this,"backgroundContainerRef");I(this,"floatBarRef",g.createRef());I(this,"customFloatbarContainerRef",g.createRef());I(this,"containerOffset",{x:0,y:0});this.control.isUseSimple||(this.canvasTopRef=g.createRef(),this.subLocalCanvasContainerRef=g.createRef()),this.control.isUseBackgroundThread&&(this.backgroundContainerRef=g.createRef())}setCanvassStyle(){var e,t;if(this.eventTragetElement){const r=Pt();if(r!==this.dpr&&(this.dpr=r,this.control.worker.updateDpr(this.viewId,this.dpr)),this.canvasContainerRef.current){const i=this.eventTragetElement.offsetWidth||this.width,s=this.eventTragetElement.offsetHeight||this.height;i&&s&&(i!==this.width||s!==this.height)&&(this.width=i,this.height=s,this.canvasContainerRef.current.style.width=`${i}px`,this.canvasContainerRef.current.style.height=`${s}px`)}if(this.canvasBgRef.current){const i=this.eventTragetElement.offsetWidth||this.width,s=this.eventTragetElement.offsetHeight||this.height;i&&s&&(i!==this.width||s!==this.height)&&(this.width=i,this.height=s,this.control.isUseOffscreenTransfer||(this.canvasBgRef.current.width=i*this.dpr,this.canvasBgRef.current.height=s*this.dpr,this.canvasFloatRef.current&&(this.canvasFloatRef.current.width=i*this.dpr,this.canvasFloatRef.current.height=s*this.dpr),this.canvasServiceFloatRef.current&&(this.canvasServiceFloatRef.current.width=i*this.dpr,this.canvasServiceFloatRef.current.height=s*this.dpr),(e=this.canvasTopRef)!=null&&e.current&&(this.canvasTopRef.current.width=i*this.dpr,this.canvasTopRef.current.height=s*this.dpr)))}if(this.backgroundContainerRef&&((t=this.backgroundContainerRef)!=null&&t.current)){const i=this.eventTragetElement.offsetWidth||this.width,s=this.eventTragetElement.offsetHeight||this.height;i&&s&&(i!==this.width||s!==this.height)&&(this.backgroundContainerRef.current.style.width=`${i}px`,this.backgroundContainerRef.current.style.height=`${s}px`,this.backgroundContainerRef.current.classList.toggle("appliance-plugin-background-isWritable",this.control.renderControl.isWritable))}}}createAppViewDisplayer(e,t){const r=document.createElement("div");return r.className="appliance-plugin-app-view-displayer",t.appendChild(r),this.eventTragetElement=t.children[0],this.containerOffset=this.getContainerOffset(this.eventTragetElement,this.containerOffset),this.bindToolsClass(),fn.render(g.createElement(Nr,{viewId:e,mananger:this,refs:{canvasServiceFloatRef:this.canvasServiceFloatRef,canvasFloatRef:this.canvasFloatRef,canvasBgRef:this.canvasBgRef,floatBarRef:this.floatBarRef,customFloatbarContainerRef:this.customFloatbarContainerRef,canvasTopRef:this.canvasTopRef,canvasContainerRef:this.canvasContainerRef,subLocalCanvasContainerRef:this.subLocalCanvasContainerRef,backgroundContainerRef:this.backgroundContainerRef}}),r),this.control.room&&this.bindDisplayerEvent(this.eventTragetElement),this}}class ot extends Lt{constructor(e){super(e);I(this,"focuedViewId");I(this,"focuedView");I(this,"control");I(this,"tmpFocusedViewId");I(this,"checkScaleTimer");I(this,"mainViewHotkeyListener",e=>{this.onActiveHotkeyChange(e)});I(this,"appViewListeners",new Map);I(this,"onMainViewRelease",async e=>{this.control.textEditorManager.clear(re,!0),this.mainViewDestroy(e),await new Promise(r=>{setTimeout(()=>{r(!0)},0)}),this.onMainViewMounted(e);const t=this.control.getSnapshootData("memberState");this.control.room&&this.control.onMemberChange(t),this.control.clearSnapshootData()});I(this,"mainViewDestroy",e=>{var t;if(this.mainView&&this.mainView.displayer){this.removeMainViewListeners(this.mainView.viewData),this.mainView.displayer.destroy();const r=e.divElement;if(r){const i=r.getElementsByClassName("appliance-plugin-main-view-displayer");for(const s of i)s.remove()}if(this.mainView.container&&r!==this.mainView.container){const i=this.mainView.container.getElementsByClassName("appliance-plugin-main-view-displayer");for(const s of i)s.remove()}(t=this.control.worker)==null||t.destroyViewWorker(this.mainView.id,!0),this.mainView=void 0}});I(this,"onMainViewMounted",e=>{const t=e.divElement;if(!t||!e.focusScenePath||!(e.focusScenePath||e.scenePath))return;const i=new HI(this.control,fe.InternalMsgEmitter),s=e.size.width||i.width,a=e.size.height||i.height;i.dpr;const c={cameraOpt:{...ot.defaultCameraOpt,width:s,height:a}},{scale:l,...u}=e.camera;c.cameraOpt={...c.cameraOpt,...u,scale:l===1/0?1:l},this.createMianView({id:re,container:t,displayer:i,focusScenePath:e.focusScenePath,cameraOpt:c.cameraOpt,viewData:e}),this.setFocuedViewId(re),i.createMainViewDisplayer(t),e.callbacks.on("onSizeUpdated",this.onMainViewSizeUpdated),e.callbacks.on("onCameraUpdated",this.onMainViewCameraUpdated),e.callbacks.on("onActiveHotkey",this.mainViewHotkeyListener)});I(this,"onMainViewSizeUpdated",async()=>{await new Promise(e=>{setTimeout(()=>{e(!0)},0)}),this.mainView&&this.mainView.viewData&&this.updateMainViewCamera()});I(this,"onMainViewCameraUpdated",async()=>{await new Promise(e=>{setTimeout(()=>{e(!0)},0)}),this.updateMainViewCamera()});I(this,"updateMainViewCamera",()=>{if(this.mainView&&this.mainView.viewData){const e=this.mainView.viewData.camera;if(!j.isNumber(e.scale)||e.scale===1/0)return;const t=this.mainView.cameraOpt;if(t){const r=t.width,i=t.height,{width:s,height:a}=this.mainView.viewData.size;(s!==r||a!==i)&&this.mainView.displayer.updateSize();const c=e.scale===1/0?1:e.scale,l=e.centerX||0,u=e.centerY||0,h={...t,scale:c,centerX:l,centerY:u,width:s,height:a};j.isEqual(t,h)||(this.mainView.cameraOpt=h),this.checkScaleTimer&&e.scale==1/0&&(clearTimeout(this.checkScaleTimer),this.checkScaleTimer=void 0),!this.checkScaleTimer&&e.scale===1/0&&this.mainView.viewData&&this.mainView.viewData.camera.scale===1/0&&(this.checkScaleTimer=setTimeout(()=>{var d,f;(f=(d=this.mainView)==null?void 0:d.viewData)==null||f.moveCamera({scale:c,centerX:l,centerY:u,animationMode:"immediately"}),this.checkScaleTimer=void 0},500))}}});I(this,"onAppViewMounted",async e=>{var d;const{appId:t,view:r}=e,i=r.divElement;if(!i||!r.focusScenePath)return;const s=this.appViews.get(t);if(s&&s.displayer){let f=i.getElementsByClassName("appliance-plugin-app-view-displayer");for(const p of f)p.remove();if(s.container&&s.container!==i){f=s.container.getElementsByClassName("appliance-plugin-app-view-displayer");for(const p of f)p.remove()}this.destroyAppView(e.appId,!0),(d=this.control.worker)==null||d.destroyViewWorker(t,!0),await new Promise(p=>{setTimeout(()=>{p(!0)},0)})}const a=new qI(t,this.control,fe.InternalMsgEmitter),c=r.size.width||a.width,l=r.size.height||a.height;a.dpr;const u={cameraOpt:{...ot.defaultCameraOpt,...r.camera,width:c,height:l}};this.createAppView({id:t,container:i,displayer:a,cameraOpt:u.cameraOpt,focusScenePath:r.focusScenePath,viewData:r}),a.createAppViewDisplayer(t,i);const h=this.getAppViewListeners(t);if(r.callbacks.on("onSizeUpdated",h.onSizeUpdated),r.callbacks.on("onCameraUpdated",h.onCameraUpdated),r.callbacks.on("onActiveHotkey",h.onActiveHotkey),this.tmpFocusedViewId===t){const f=this.control.worker.getLocalWorkViewId();f&&f!==t?this.setFocuedViewId(f):this.setFocuedViewId(t),this.tmpFocusedViewId=void 0}setTimeout(()=>{this.onAppViewCameraUpdated(t)},0)});I(this,"onAppViewSizeUpdated",async e=>{await new Promise(r=>{setTimeout(()=>{r(!0)},0)});const t=this.appViews.get(e);t&&t.viewData&&this.updateAppCamera(e)});I(this,"onAppViewCameraUpdated",async e=>{await new Promise(t=>{setTimeout(()=>{t(!0)},0)}),this.updateAppCamera(e)});I(this,"updateAppCamera",e=>{const t=this.appViews.get(e);if(t&&t.viewData){const r=t.viewData.camera,i=t.cameraOpt;if(i){const{width:s,height:a}=t.viewData.size,c=i.width,l=i.height;(s!==c||a!==l)&&t.displayer.updateSize();const u=r.scale===1/0?1:r.scale,h=r.centerX||0,d=r.centerY||0,f={...i,scale:u,centerX:h,centerY:d,width:s,height:a};j.isEqual(f,i)||(t.cameraOpt=f)}}});this.control=e.control}getAppViewListeners(e){let t=this.appViewListeners.get(e);return t||(t={onSizeUpdated:()=>{this.onAppViewSizeUpdated(e)},onCameraUpdated:()=>{this.onAppViewCameraUpdated(e)},onActiveHotkey:r=>{this.onActiveHotkeyChange(r)}},this.appViewListeners.set(e,t)),t}removeMainViewListeners(e){e&&(e.callbacks.off("onSizeUpdated",this.onMainViewSizeUpdated),e.callbacks.off("onCameraUpdated",this.onMainViewCameraUpdated),e.callbacks.off("onActiveHotkey",this.mainViewHotkeyListener))}removeAppViewListeners(e,t){const r=this.appViewListeners.get(e);t&&r&&(t.callbacks.off("onSizeUpdated",r.onSizeUpdated),t.callbacks.off("onCameraUpdated",r.onCameraUpdated),t.callbacks.off("onActiveHotkey",r.onActiveHotkey)),this.appViewListeners.delete(e)}destroyAppView(e,t=!1){const r=this.appViews.get(e);this.removeAppViewListeners(e,r==null?void 0:r.viewData),super.destroyAppView(e,t)}destroy(){var e;this.removeMainViewListeners((e=this.mainView)==null?void 0:e.viewData);for(const[t,r]of this.appViews.entries())this.removeAppViewListeners(t,r.viewData);super.destroy(),this.appViewListeners.clear()}getViewInitData(e){var r;const t=this.getView(e);if(t){const{width:i,height:s,dpr:a}=t.displayer;(r=this.control.pluginOptions.extras.canvasOpt)!=null&&r.contextType&&(ot.defaultScreenCanvasOpt.contextType=this.control.pluginOptions.extras.canvasOpt.contextType);const c={dpr:a,originalPoint:[i/2,s/2],offscreenCanvasOpt:{...ot.defaultScreenCanvasOpt,width:i,height:s},layerOpt:{...ot.defaultLayerOpt,width:i,height:s},cameraOpt:{...ot.defaultCameraOpt,width:i,height:s}};if(t.viewData){const{scale:l,...u}=t.viewData.camera;c.cameraOpt={...c.cameraOpt,...u,scale:l===1/0?1:l}}return c}}async mountView(e){var r,i,s;const t=this.getView(e);if(t){const a=()=>{this.control.emitInitLoadingChange({loading:!0,phase:"scene",status:"success"}),this.control.emitInitLoadingChange({loading:!1,phase:"ready",status:"success"})};this.control.emitInitLoadingChange({loading:!0,phase:"scene",status:"start"}),e===((r=this.mainView)==null?void 0:r.id)&&(this.control.cursor.activeCollector(),await this.control.activeWorker()),this.control.isUseOffscreenTransfer&&t.displayer.canvasBgRef.current&&t.displayer.canvasServiceFloatRef.current&&t.displayer.canvasFloatRef.current&&t.displayer.setTransferControlToOffscreenCanvas({bgCanvas:t.displayer.canvasBgRef.current,serviceCanvas:t.displayer.canvasServiceFloatRef.current,localCanvas:t.displayer.canvasFloatRef.current});const c=this.getViewInitData(e);if(c&&((i=this.control.worker)==null||i.createViewWorker(e,c,t.displayer)),t.focusScenePath&&this.control.collector){if(this.control.collector.authStorage){const{renderAuth:l,pageAuth:u}=this.control.collector.authStorage;if(l){const h=l[e];if(h){const{render:d,hide:f,clear:p}=h;this.control.renderControl.syncRenderUids(e,d,f,p),a();return}}if(u){const h=u[e];if(h){this.control.renderControl.syncPageAuth(e,h,!0),a();return}}}this.control.worker.pullServiceData(e,t.focusScenePath,{isAsync:!0,useAnimation:!1}),this.control.pluginOptions.extras.undoRedo.enableGlobal&&t.displayer.commiter&&((s=this.control.collector)!=null&&s.globalUndoRedoStackStorage[t.id])&&t.displayer.commiter.pullServiceData(this.control.collector.globalUndoRedoStackStorage[t.id])}a()}}listenerWindowManager(e){e.emitter.on("focusedChange",t=>{const r=t||re;if(this.focuedViewId!==r)if(this.getView(r)){const s=this.control.worker.getLocalWorkViewId();s&&s!==r?this.setFocuedViewId(s):this.setFocuedViewId(r)}else this.tmpFocusedViewId=r}),e.emitter.on("mainViewScenePathChange",t=>{this.control.onSceneChange(t,re)}),e.emitter.on("onMainViewMounted",this.onMainViewMounted),e.emitter.on("onAppViewMounted",this.onAppViewMounted),e.emitter.on("onMainViewRebind",this.onMainViewRelease),e.emitter.on("onBoxClose",t=>{this.appViews.get(t.appId)&&(this.destroyAppView(t.appId),this.control.worker.destroyViewWorker(t.appId))}),e.emitter.on("onAppScenePathChange",t=>{const{appId:r,view:i}=t;this.control.onSceneChange(i.focusScenePath,r)}),e.emitter.on("appsChange",t=>{for(const r of this.appViews.keys())t.includes(r)||(this.destroyAppView(r),this.control.worker.destroyViewWorker(r,!0))})}onActiveHotkeyChange(e){this.control.hotkeyManager.onActiveHotkey(e)}}class it extends fe{constructor(e){super(e);I(this,"windowManager");I(this,"viewContainerManager");const t={control:this,internalMsgEmitter:fe.InternalMsgEmitter,publicMsgEmitter:fe.PublicMsgEmitter};this.viewContainerManager=new ot(t)}init(){}activePlugin(){this.collector&&(this.collector.addAuthStateListener((e,t)=>{e&&Object.keys(e).forEach(r=>{var s;const i=(s=e[r])==null?void 0:s.newValue;this.renderControl.syncRenderUids(r,i==null?void 0:i.render,i==null?void 0:i.hide,i==null?void 0:i.clear)}),t&&Object.keys(t).forEach(r=>{var s;const i=(s=t[r])==null?void 0:s.newValue;this.renderControl.syncPageAuth(r,i)})}),this.collector.addStorageStateListener(e=>{var a,c;if((a=this.collector)!=null&&a.storage&&Object.keys(this.collector.storage).length===0){(c=this.worker)==null||c.clearViewScenePath(re,!0);return}const{diffView:t,diffScenePath:r,diffData:i}=e,s=new Map;if(t){let l;Object.keys(t).forEach(u=>{var d;const h=t[u];if(h&&!h.newValue)(d=this.worker)==null||d.clearViewScenePath(u,!0),h.oldValue&&(l=h.oldValue);else if(h&&h.newValue){for(const f of Object.keys(h.newValue))this.worker.pullServiceData(u,f,{isAsync:!1,useAnimation:!1});l=h.newValue}if(l)for(const f of Object.values(l)){const p=new Set;for(const w of Object.keys(f))w&&p.add(w);s.set(u,p)}})}if(r){let l;Object.keys(r).forEach(u=>{var d;const h=r[u];if(h&&h.viewId&&!h.newValue?((d=this.worker)==null||d.clearViewScenePath(h.viewId,!0),h.oldValue&&(l=h.oldValue)):h&&h.viewId&&h.newValue&&(this.worker.pullServiceData(h.viewId,u,{isAsync:!1,useAnimation:!1}),l=h.newValue),h!=null&&h.viewId&&l){const f=new Set;for(const p of Object.keys(l))p&&f.add(p),s.set(h.viewId,f)}})}i&&Object.keys(i).forEach(l=>{var h,d;const u=i[l];if(u){const{viewId:f}=u,p=s.get(f)||new Set;p.add(l),s.set(f,p),(h=this.worker)==null||h.onServiceDerive(l,u),(d=this.miniMapManager)==null||d.updateMiniMapCamera(f)}});for(const[l,u]of s.entries())fe.InternalMsgEmitter.emit("excludeIds",[...u],l)}),this.pluginOptions.extras.undoRedo.enableGlobal&&this.collector.addGlobalUndoRedoStackListener(e=>{Object.keys(e).forEach(t=>{var s;const r=e[t],i=(s=this.viewContainerManager.getView(t))==null?void 0:s.displayer.commiter;i&&i.pullServiceData(r==null?void 0:r.newValue)})}),this.worker.isActive&&this.viewContainerManager.getAllViews().forEach(e=>{e&&e.focusScenePath&&this.worker.pullServiceData(e.id,e.focusScenePath,{isAsync:!0,useAnimation:!1})}),this.room&&this.roomMember.onUidChangeHook(e=>{var t,r;(t=this.collector)!=null&&t.serviceStorage&&this.viewContainerManager.getAllViews().forEach(i=>{var s,a,c,l;if(i&&i.focusScenePath&&((s=this.collector)!=null&&s.serviceStorage[i.id])&&this.collector.serviceStorage[i.id][i.focusScenePath]){const u=Object.keys(this.collector.serviceStorage[i.id][i.focusScenePath]);for(const h of u){const d=(a=this.collector)==null?void 0:a.getUidFromKey(h);if(d&&!e.online.includes(d))if((c=this.collector)!=null&&c.isSelector(h))this.renderControl.isWritable&&((l=this.collector)==null||l.updateValue(h,void 0,{viewId:i.id,scenePath:i.focusScenePath,isSync:!0})),this.worker.blurSelector(i.id,i.focusScenePath,h);else{const f=this.textEditorManager.editors.get(h);f&&f.opt&&(f.opt.workState===E.Doing||f.opt.workState===E.Start)&&(f.opt.text&&f.opt.text.replace(/\s*,/g,"")?this.textEditorManager.unActive(h):this.textEditorManager.delete(h))}}}}),(r=this.cursor)==null||r.updateRoomMembers(e)}))}async activeWorker(){await this.worker.init()}setWindowManager(e){var t,r,i,s,a;this.windowManager=e,(r=(t=this.windowManager)==null?void 0:t.mainView)!=null&&r.divElement&&this.viewContainerManager.onMainViewMounted(this.windowManager.mainView),(a=(s=(i=this.windowManager.appManager)==null?void 0:i.viewManager)==null?void 0:s.views)!=null&&a.size&&this.windowManager.appManager.viewManager.views.forEach((c,l)=>{this.viewContainerManager.onAppViewMounted({appId:l,view:c})}),this.viewContainerManager.listenerWindowManager(this.windowManager)}}const L=class L extends ki{constructor(){super(...arguments);I(this,"onPhaseChanged",e=>{var t;e===xi.Reconnecting&&((t=L.currentManager)==null||t.setSnapshootData())});I(this,"updateRoomWritable",()=>{var e;(e=L.currentManager)==null||e.onWritableChange(this.displayer.isWritable)});I(this,"roomStateChangeListener",async e=>{var t,r;e!=null&&e.roomMembers&&((t=L.currentManager)==null||t.onRoomMembersChange(e.roomMembers)),!(H(this.displayer)&&!this.displayer.isWritable)&&e.memberState&&((r=L.currentManager)==null||r.onMemberChange(e.memberState))})}static async getInstance(e,t){var y,M,v;(m=>{var T;try{(T=t.onInitLoadingChange)==null||T.call(t,m)}catch(C){L.logger.error(`[ApplianceMultiPlugin] onInitLoadingChange error: ${(C==null?void 0:C.message)||C}`)}})({loading:!0,phase:"plugin",status:"start"}),t.options&&(((y=t.options.extras)==null?void 0:y.useWorker)==="mainThread"&&(t.options.cdn.fullWorkerUrl="",t.options.cdn.subWorkerUrl=""),(t.options.extras&&t.options.extras.useWorker!=="mainThread"||!t.options.extras)&&!t.options.cdn.fullWorkerUrl&&!t.options.cdn.subWorkerUrl&&L.logger.error("[Appliance]: [ApplianceMultiPlugin] you must adaptor options cdn fullWorkerUrl and subWorkerUrl"));const i=e.displayer,s=i.callbacks.on,a=i.callbacks.off,c=i.callbacks.once,l=e.cleanCurrentScene,u=e.mainView.setMemberState;let h;H(i)&&(h=i.setWritable),t!=null&&t.logger&&(L.logger=new Cr(t.logger));let d=i.getInvisiblePlugin(L.kind);d||(d=await L.createApplianceMultiPlugin(i,L.kind)),i&&d&&L.createCurrentManager(e,{cdn:t.options.cdn,extras:{...ye,...t.options.extras}},d,t.onInitLoadingChange),(M=L.currentManager)==null||M.emitInitLoadingChange({loading:!0,phase:"plugin",status:"success"});const f={displayer:i,windowManager:e,currentManager:L.currentManager,maxScreenshotWidth:10*1024,maxScreenshotHeight:10*1024,getBoundingRectAsync:async function(m){var k;L.logger.info("[ApplianceMultiPlugin] getBoundingRectAsync");const T=(e.mainView||i).getBoundingRect(m),C=await((k=L.currentManager)==null?void 0:k.getBoundingRect(m));return!T.width||!T.height?C:wr(T,C)},screenshotToCanvasAsync:async function(m,T,C,k,z,A){var U;L.logger.info("[ApplianceMultiPlugin] screenshotToCanvasAsync");let x=C,D=k,b=z.scale;x>this.maxScreenshotWidth&&(b=this.maxScreenshotWidth/x*b,x=this.maxScreenshotWidth),D>this.maxScreenshotHeight&&(b=Math.min(this.maxScreenshotHeight/D*b,b),D=this.maxScreenshotHeight),z.scale=b;const R=document.createElement("canvas"),O=R.getContext("2d");R.width=x*(A||1),R.height=D*(A||1),O&&((e.mainView||i).screenshotToCanvas(O,T,x,D,z,A),m.drawImage(R,Math.floor((C-x)/2),Math.floor((k-D)/2),x*(A||1),D*(A||1),0,0,x,D),R.remove()),L.currentManager&&await((U=L.currentManager)==null?void 0:U.screenshotToCanvas(m,T,x,D,z,Math.floor((C-x)/2),Math.floor((k-D)/2)))},scenePreviewAsync:async function(m,T,C,k,z){L.logger.info("[ApplianceMultiPlugin] scenePreviewAsync"),(e.mainView||i).scenePreview(m,T,C,k,z);const A=document.createElement("img");A.className="appliance-plugin-fill-scene-snapshot-img",T.append(A),getComputedStyle(T).position||(T.style.position="relative"),L.currentManager&&await L.currentManager.scenePreview(m,A)},fillSceneSnapshotAsync:async function(m,T,C,k,z){L.logger.info("[ApplianceMultiPlugin] fillSceneSnapshotAsync"),T.innerHTML="",(e.mainView||i).fillSceneSnapshot(m,T,C,k,z);const A=C||e.mainView.size.width,x=k||e.mainView.size.height;let D=await this.getBoundingRectAsync(m);D||(D={originX:0,originY:0,width:A,height:x});let b=Math.max(D==null?void 0:D.width,A),R=Math.max(D==null?void 0:D.height,x),O=1;const U=b>A&&Math.min(A/b,O)||O,$=R>x&&Math.min(x/R,O)||O;U<=$?(b=U<1&&A||b,R=Math.floor(R*U)+1,O=U):U>$&&(R=$<1&&x||R,b=Math.floor(b*$)+1,O=$);const Y={scale:O,centerX:D.originX+D.width/2,centerY:D.originY+D.height/2},Z=document.createElement("canvas"),Q=Z.getContext("2d");Z.width=b,Z.height=R,Q&&await this.screenshotToCanvasAsync(Q,m,b,R,Y,devicePixelRatio);const W=document.createElement("img");W.className="appliance-plugin-fill-scene-snapshot-img",W.src=Z.toDataURL(),W.onload=()=>{Z.remove()},W.onerror=()=>{Z.remove(),W.remove()},T.append(W),getComputedStyle(T).position||(T.style.position="relative")},_callbacksOn:function(m,T){L.logger.info(`[ApplianceMultiPlugin] callbacks ${m}`),(m==="onCanUndoStepsUpdate"||m==="onCanRedoStepsUpdate")&&H(i)&&i.isWritable?it.InternalMsgEmitter.on(m,T):s.call(i.callbacks,m,T)},_callbacksOnce:function(m,T){L.logger.info(`[ApplianceMultiPlugin] callbacks ${m}`),(m==="onCanUndoStepsUpdate"||m==="onCanRedoStepsUpdate")&&H(i)&&i.isWritable?it.InternalMsgEmitter.on(m,T):c.call(i.callbacks,m,T)},_callbacksOff:function(m,T){L.logger.info(`[ApplianceMultiPlugin] callbacks ${m}`),(m==="onCanUndoStepsUpdate"||m==="onCanRedoStepsUpdate")&&H(i)&&i.isWritable?it.InternalMsgEmitter.off(m,T):a.call(i.callbacks,m,T)},canRedoSteps(){if(L.logger.info("[ApplianceMultiPlugin] canRedoSteps"),L.currentManager&&H(i)&&!i.disableSerialization){const m=L.currentManager.viewContainerManager.focuedView,T=m==null?void 0:m.focusScenePath;if(m&&T)return m.displayer.commiter.redoStack.filter(C=>C.scenePath===T).length}return 0},canUndoSteps(){if(L.logger.info("[ApplianceMultiPlugin] canUndoSteps"),L.currentManager&&H(i)&&!i.disableSerialization){const m=L.currentManager.viewContainerManager.focuedView,T=m==null?void 0:m.focusScenePath;if(m&&T)return m.displayer.commiter.undoStack.filter(z=>z.scenePath===T).length}return 0},undo:function(){return L.logger.info("[ApplianceMultiPlugin] undo"),L.currentManager&&H(i)&&!i.disableSerialization&&i.isWritable?L.currentManager.viewContainerManager.undo():0},redo:function(){return L.logger.info("[ApplianceMultiPlugin] redo"),L.currentManager&&H(i)&&!i.disableSerialization&&i.isWritable?L.currentManager.viewContainerManager.redo():0},cleanCurrentScene:function(){L.logger.info("[ApplianceMultiPlugin] cleanCurrentScene"),L.currentManager&&H(i)&&i.isWritable&&(L.currentManager.logger.info("[Appliance]: cleanCurrentScene"),L.currentManager.cleanCurrentScene(),l.call(e))},insertImage:function(m){if(L.logger.info("[ApplianceMultiPlugin] insertImage"),L.currentManager&&H(i)&&i.isWritable){const T=L.currentManager.viewContainerManager.focuedViewId||re;L.currentManager.worker.insertImage(T,m)}},lockImage:function(m,T){if(L.logger.info("[ApplianceMultiPlugin] lockImage"),L.currentManager&&H(i)&&i.isWritable){const C=L.currentManager.viewContainerManager.focuedViewId||re;L.currentManager.worker.lockImage(C,m,T)}},completeImageUpload:function(m,T){if(L.logger.info("[ApplianceMultiPlugin] completeImageUpload"),L.currentManager&&H(i)&&i.isWritable){const C=L.currentManager.viewContainerManager.focuedViewId||re;L.currentManager.worker.completeImageUpload(C,m,T)}},getImagesInformation:function(m){return L.logger.info("[ApplianceMultiPlugin] completeImageUpload"),L.currentManager&&H(i)&&i.isWritable?L.currentManager.worker.getImagesInformation(m):[]},insertText:function(m,T,C){if(L.logger.info("[ApplianceMultiPlugin] insertText"),L.currentManager&&H(i)&&i.isWritable){const k=L.currentManager.viewContainerManager.focuedViewId||re;return L.currentManager.textEditorManager.insertText(k,m,T,C)}},updateText:function(m,T){L.logger.info("[ApplianceMultiPlugin] updateText"),L.currentManager&&H(i)&&i.isWritable&&L.currentManager.textEditorManager.updateText(m,T)},callbacks:()=>(L.logger.info("[ApplianceMultiPlugin] callbacks bind"),{...i.callbacks,on:f._callbacksOn.bind(f),once:f._callbacksOnce.bind(f),off:f._callbacksOff.bind(f)}),destroy(){L.currentManager&&(L.currentManager.logger.info("[Appliance]: [ApplianceMultiPlugin] destroy"),L.currentManager.destroy(),L.currentManager=void 0)},setMemberState(m){if(L.currentManager){L.currentManager.logger.info(`[Appliance]: setMemberState ${JSON.stringify(m)}`);const T=Object.keys(m);if(H(i)&&i.isWritable){if(T.includes("currentApplianceName"))if(m.currentApplianceName&&m.currentApplianceName===ie.laserPen){if(L.currentManager.isUseSimple)throw L.currentManager.logger.error("[Appliance]: [ApplianceMultiPlugin] laserPen must be not support in simple mode"),new Error("[Appliance]: [ApplianceMultiPlugin] laserPen must be not support in simple mode");m.currentApplianceName=ie.pencil,m.useLaserPen=!0}else m.currentApplianceName&&m.currentApplianceName===ie.pencil&&(m.useLaserPen=!1);u.call(e.mainView,m);return}}throw L.logger.error("[Appliance]: [ApplianceMultiPlugin] setMemberState must be called in writable room"),new Error("[Appliance]: [ApplianceMultiPlugin] setMemberState must be called in writable room")},createMiniMap:async function(m,T){if(L.logger.info("[ApplianceMultiPlugin] createMiniMap"),L.currentManager&&H(i)&&i.isWritable)return L.currentManager.logger.info("[Appliance]: [ApplianceMultiPlugin] createMiniMap"),L.currentManager.createMiniMap(m,T)},destroyMiniMap:async function(m){if(L.logger.info("[ApplianceMultiPlugin] destroyeMiniMap"),L.currentManager&&H(i)&&i.isWritable)return L.currentManager.logger.info("[Appliance]: [ApplianceMultiPlugin] destroyeMiniMap"),L.currentManager.destroyMiniMap(m)},filterRenderByUid(m,T,C){if(L.logger.info("[ApplianceMultiPlugin] filterRenderByUid"),L.currentManager&&H(i)&&i.isWritable)return L.currentManager.filterRenderByUid(m,T,C)},cancelFilterRender(m,T){if(L.logger.info("[ApplianceMultiPlugin] filterRenderByUid"),L.currentManager&&H(i)&&i.isWritable)return L.currentManager.cancelFilterRender(m,T)},addListener:(m,T)=>{L.logger.info(`[ApplianceMultiPlugin] addListener ${m}`),it.PublicMsgEmitter.on(m,T)},removeListener:(m,T)=>{L.logger.info(`[ApplianceMultiPlugin] removeListener ${m}`),it.PublicMsgEmitter.off(m,T)},usePlugin:m=>{var T;L.logger.info("[ApplianceMultiPlugin] usePlugin",m.kind),(T=L.currentManager)==null||T.usePlugin(m)},getDisableDeviceInputs(){if(L.currentManager&&H(i))return L.currentManager.disableDeviceInputs},setDisableDeviceInputs(m){L.logger.info(`[ApplianceMultiPlugin] setDisableDeviceInputs ${m}`),L.currentManager&&H(i)&&(L.currentManager.disableDeviceInputs=m)},getDisableCameraTransform(){if(L.currentManager&&H(i))return L.currentManager.disableCameraTransform},setDisableCameraTransform(m){L.logger.info(`[ApplianceMultiPlugin] setDisableCameraTransform ${m}`),L.currentManager&&H(i)&&(L.currentManager.disableCameraTransform=m)},getDisableEraseImage(){if(L.currentManager&&H(i))return L.currentManager.disableEraseImage},setDisableEraseImage(m){L.logger.info(`[ApplianceMultiPlugin] setDisableEraseImage ${m}`),L.currentManager&&H(i)&&(L.currentManager.disableEraseImage=m)},setWritable:async function(m){var T;L.logger.info(`[ApplianceMultiPlugin] setWritable ${m}`),H(i)&&h&&(await((T=L.currentManager)==null?void 0:T.setWritable(m)),await h.call(i,m))},requestIdleCallback:(m,T)=>{const C=(T==null?void 0:T.timeout)||0,k=performance.now();let z;const A=new MessageChannel;let x;const D=b=>{try{m({didTimeout:b,timeRemaining:()=>{const O=performance.now()-k;return Math.max(0,C-O)}})}catch(R){L.logger.error("[ApplianceMultiPlugin] requestIdleCallback error:",R)}finally{A.port1.close(),A.port2.close(),z!==void 0&&cancelAnimationFrame(z),x!==void 0&&clearTimeout(x)}};return A.port1.onmessage=()=>{z=requestAnimationFrame(()=>{C>0&&performance.now()-k>=C?D(!0):D(!1)})},A.port2.postMessage(null),C>0&&(x=setTimeout(()=>{D(!0)},C)),x||z||0},cancelIdleCallback:m=>{try{clearTimeout(m),cancelAnimationFrame(m)}catch(T){L.logger.error("[ApplianceMultiPlugin] cancelIdleCallback error:",T)}},injectMethodToObject:(m,T)=>{if(L.logger.info(`[ApplianceMultiPlugin] injectMethodToObject ${T}`),typeof m[T]=="function"||typeof m[T]>"u"){(T==="requestIdleCallback"||T==="cancelIdleCallback")&&L.currentManager&&L.currentManager.registerPolyfillMethod(T),m[T]=f[T];return}T==="callbacks"&&(m.callbacks.on=f._callbacksOn.bind(f),m.callbacks.off=f._callbacksOff.bind(f),m.callbacks.once=f._callbacksOnce.bind(f))},blurText:()=>{L.logger.info("[ApplianceMultiPlugin] blurText"),L.currentManager&&H(i)&&i.isWritable&&L.currentManager.textEditorManager.checkEmptyTextBlur()},hasElements:(m,T)=>{var C;if(L.logger.info(`[ApplianceMultiPlugin] hasElements ${m}`),L.currentManager&&H(i)&&i.isWritable){let k=m;if(!k){const z=L.currentManager.viewContainerManager.focuedView;k=z==null?void 0:z.focusScenePath}if(k){const z=(C=L.currentManager.collector)==null?void 0:C.getScenePathData(k);if(z){const A=Object.values(z);return A.length>0?T?A.some(x=>T(x.toolsType)):!0:!1}return!1}return!1}},getElements:(m,T)=>{var C;if(L.logger.info(`[ApplianceMultiPlugin] getElements ${m}`),L.currentManager&&H(i)&&i.isWritable){let k=m;if(!k){const z=L.currentManager.viewContainerManager.focuedView;k=z==null?void 0:z.focusScenePath}if(k){const z=(C=L.currentManager.collector)==null?void 0:C.getScenePathData(k),A=z&&Object.values(z)||[];return z&&A.length>0&&T?A.filter(x=>T(x.toolsType)):A}return[]}},stopDraw:m=>{if(L.logger.info(`[ApplianceMultiPlugin] stopDraw ${m}`),L.currentManager&&H(i))return L.currentManager.stopDraw(m)},loadFontFaces:()=>{var m;return L.logger.info("[ApplianceMultiPlugin] loadFontFaces"),((m=L.currentManager)==null?void 0:m.loadFontFaces())||Promise.resolve({status:"error"})},refreshViewRender:m=>{var T;return L.logger.info(`[ApplianceMultiPlugin] refreshViewRender ${m}`),((T=L.currentManager)==null?void 0:T.refreshViewRender(m))||Promise.resolve({status:"error"})},refreshRender:()=>{var m;return L.logger.info("[ApplianceMultiPlugin] refreshRender"),((m=L.currentManager)==null?void 0:m.refreshRender())||Promise.resolve({status:"error"})},refreshViewTextRender:m=>{var T;return L.logger.info(`[ApplianceMultiPlugin] refreshViewTextRender ${m}`),((T=L.currentManager)==null?void 0:T.refreshViewTextRender(m))||Promise.resolve({status:"error"})},refreshTextRender:()=>{var m;return L.logger.info("[ApplianceMultiPlugin] refreshTextRender"),((m=L.currentManager)==null?void 0:m.refreshTextRender())||Promise.resolve({status:"error"})},setViewLocalScenePathChange:async(m,T)=>{L.logger.info(`[ApplianceMultiPlugin] setViewLocalScenePathChange ${m} ${T}`),L.currentManager&&await L.currentManager.setViewLocalScenePathChange(T,m)},insertMarkmap:async(m,T)=>{if(L.logger.info(`[ApplianceMultiPlugin] insertMarkmap: ${m}, info: ${JSON.stringify(T)}`),L.currentManager&&L.currentManager.isUseBackgroundThread)return L.currentManager.worker.insertBackgroundMarkMap(m,T)},updateMarkmap:async(m,T,C)=>{if(L.logger.info(`[ApplianceMultiPlugin] updateMarkmap: ${m}, markmapId: ${T}, info: ${JSON.stringify(C)}`),L.currentManager&&L.currentManager.isUseBackgroundThread)return L.currentManager.worker.updateBackgroundMarkMap(m,T,C)},insertBackgroundImage:async(m,T)=>{if(L.logger.info(`[ApplianceMultiPlugin] insertBackgroundImage: ${m}, info: ${JSON.stringify(T)}`),L.currentManager&&L.currentManager.isUseBackgroundThread)return L.currentManager.worker.insertBackgroundSVG(m,T)},getSelectedElements:m=>{var T,C;return(C=(T=L.currentManager)==null?void 0:T.selectorApi)==null?void 0:C.getSelectedElements(m)},isElementPropertySupported:(m,T)=>{var C,k;return((k=(C=L.currentManager)==null?void 0:C.selectorApi)==null?void 0:k.isElementPropertySupported(m,T))||!1},blurSelector:m=>{var T;if(L.currentManager&&H(i)&&i.isWritable){const C=(T=L.currentManager)==null?void 0:T.selectorApi;return C?C.blurSelector(m):Promise.resolve({ok:!1,requestId:`clear-${Date.now().toString(36)}`,viewId:m||re,reason:"no-selection"})}return Promise.resolve({ok:!1,requestId:`clear-${Date.now().toString(36)}`,viewId:m||re,reason:"no-selection"})},updateSelectedElements:(m,T)=>{var C;if(L.currentManager&&H(i)&&i.isWritable){const k=(C=L.currentManager)==null?void 0:C.selectorApi;return k?k.updateSelectedElements(m,T):Promise.resolve({requestId:`update-${Date.now().toString(36)}`,viewId:m,ok:!1,reason:"no-selection"})}return Promise.resolve({requestId:`update-${Date.now().toString(36)}`,viewId:m,ok:!1,reason:"no-writable permission"})},updateElement:(m,T,C,k,z=!0)=>{var A;if(L.currentManager&&H(i)&&i.isWritable){const x=(A=L.currentManager)==null?void 0:A.selectorApi;return x?x.updateElement(m,T,C,k,z):Promise.resolve(!1)}return Promise.resolve(!1)},copySelectedElements:m=>{var T;if(L.currentManager&&H(i)&&i.isWritable){const C=(T=L.currentManager)==null?void 0:T.selectorApi;return C?C.copySelectedElements(m):Promise.resolve({ok:!1,requestId:`copy-${Date.now().toString(36)}`,viewId:m||re,reason:"no-selection"})}return Promise.resolve({ok:!1,requestId:`copy-${Date.now().toString(36)}`,viewId:m||re,reason:"no-selection"})},deleteSelectedElements:m=>{var T;if(L.currentManager&&H(i)&&i.isWritable){const C=(T=L.currentManager)==null?void 0:T.selectorApi;return C?C.deleteSelectedElements(m):Promise.resolve({ok:!1,requestId:`delete-${Date.now().toString(36)}`,viewId:m||re,reason:"no-selection"})}return Promise.resolve({ok:!1,requestId:`delete-${Date.now().toString(36)}`,viewId:m||re,reason:"no-selection"})},getFloatbarContainer:m=>{var T;return(T=L.currentManager)==null?void 0:T.viewContainerManager.getFloatbarContainer(m)},getViewOffsetToContainer:(m,T)=>{var C;return(C=L.currentManager)==null?void 0:C.viewContainerManager.getViewOffsetToContainer(m,T)}};f.injectMethodToObject(e,"undo"),f.injectMethodToObject(e,"redo"),f.injectMethodToObject(e,"cleanCurrentScene"),f.injectMethodToObject(e,"blurSelector"),f.injectMethodToObject(e,"updateElement"),f.injectMethodToObject(e,"insertImage"),f.injectMethodToObject(e,"completeImageUpload"),f.injectMethodToObject(e,"lockImage"),f.injectMethodToObject(e,"insertText"),f.injectMethodToObject(e,"updateText"),f.injectMethodToObject(i,"getImagesInformation"),f.injectMethodToObject(i,"callbacks"),f.injectMethodToObject(i,"screenshotToCanvasAsync"),f.injectMethodToObject(i,"getBoundingRectAsync"),f.injectMethodToObject(i,"scenePreviewAsync"),f.injectMethodToObject(i,"fillSceneSnapshotAsync"),f.injectMethodToObject(i,"blurSelector"),f.injectMethodToObject(i,"updateElement"),f.injectMethodToObject(e.mainView,"setMemberState"),H(i)&&f.injectMethodToObject(i,"setWritable"),Object.defineProperty(e,"canUndoSteps",{get(){return f.canUndoSteps()}}),Object.defineProperty(e,"canRedoSteps",{get(){return f.canRedoSteps()}});const p=(m,T,C=3)=>{const k=e.focused||re;C>0&&k!==m?setTimeout(()=>{p(m,T,C-1)},100):e.emitter.emit("canUndoStepsChange",T)};it.InternalMsgEmitter.on("onCanUndoStepsUpdate",(m,T)=>{p(T,m)});const w=(m,T,C=3)=>{const k=e.focused||re;C>0&&k!==m?setTimeout(()=>{w(m,T,C-1)},100):e.emitter.emit("canRedoStepsChange",T)};it.InternalMsgEmitter.on("onCanRedoStepsUpdate",(m,T)=>{w(T,m)});const N={...f,callbacks:f.callbacks()};return Object.defineProperty(N,"disableDeviceInputs",{set(m){f.setDisableDeviceInputs(m)},get(){return f.getDisableDeviceInputs()}}),Object.defineProperty(N,"disableCameraTransform",{set(m){f.setDisableCameraTransform(m)},get(){return f.getDisableCameraTransform()}}),Object.defineProperty(N,"disableEraseImage",{set(m){f.setDisableEraseImage(m)},get(){return f.getDisableEraseImage()}}),d&&L.currentManager&&(L.currentManager.bindPlugin(d),d.init(i)),e._appliancePlugin=N,(v=L.currentManager)==null||v.startInitFontFaceLoadAndRender(),e._appliancePlugin}static onCreate(e){e&&L.currentManager&&(L.currentManager.bindPlugin(e),e.init(e.displayer))}static async createApplianceMultiPlugin(e,t){try{await e.createInvisiblePlugin(L,{})}catch(i){if(!e.isWritable){await e.setWritable(!0);const s=await this.createApplianceMultiPlugin(e,t);return await e.setWritable(!1),s}throw i}let r=e.getInvisiblePlugin(t);return r||(r=await L.createApplianceMultiPlugin(e,t)),r}get isReplay(){return or(this.displayer)}get callbackName(){return this.isReplay?"onPlayerStateChanged":"onRoomStateChanged"}init(e){var r,i;const t=e.state;(r=L.currentManager)==null||r.onRoomMembersChange(t.roomMembers),H(e)&&((i=L.currentManager)==null||i.onMemberChange(t.memberState)),this.displayer.callbacks.on(this.callbackName,this.roomStateChangeListener),this.displayer.callbacks.on("onEnableWriteNowChanged",this.updateRoomWritable),this.displayer.callbacks.on("onPhaseChanged",this.onPhaseChanged)}destroy(){var e;L.logger.info("[ApplianceMultiPlugin] passive destroy"),(e=L.currentManager)==null||e.destroy(),L.currentManager=void 0}};I(L,"kind","appliance-multi-plugin"),I(L,"currentManager"),I(L,"logger",{info:console.log,warn:console.warn,error:console.error}),I(L,"createCurrentManager",(e,t,r,i)=>{L.currentManager&&L.currentManager.destroy();const s={plugin:r,displayer:e.displayer,options:t,onInitLoadingChange:i},a=new it(s);if(a.setWindowManager(e),L.currentManager=a,e.room){const c=a.hasOffscreenCanvas;e.room.logger.info(`[Appliance]: [ApplianceMultiPlugin] use ${c?"worker":"mainThread"}`)}});let tr=L;var KI=Ke,JI=function(){return KI.Date.now()},XI=JI,_I=/\s/;function ew(o){for(var n=o.length;n--&&_I.test(o.charAt(n)););return n}var tw=ew,nw=tw,rw=/^\s+/;function iw(o){return o&&o.slice(0,nw(o)+1).replace(rw,"")}var ow=iw,sw=Ot,aw=ct,cw="[object Symbol]";function lw(o){return typeof o=="symbol"||aw(o)&&sw(o)==cw}var uw=lw,hw=ow,Ii=lt,dw=uw,wi=NaN,gw=/^[-+]0x[0-9a-f]+$/i,fw=/^0b[01]+$/i,pw=/^0o[0-7]+$/i,Mw=parseInt;function yw(o){if(typeof o=="number")return o;if(dw(o))return wi;if(Ii(o)){var n=typeof o.valueOf=="function"?o.valueOf():o;o=Ii(n)?n+"":n}if(typeof o!="string")return o===0?o:+o;o=hw(o);var e=fw.test(o);return e||pw.test(o)?Mw(o.slice(2),e?2:8):gw.test(o)?wi:+o}var mw=yw,Iw=lt,Yn=XI,Ti=mw,ww="Expected a function",Tw=Math.max,Sw=Math.min;function vw(o,n,e){var t,r,i,s,a,c,l=0,u=!1,h=!1,d=!0;if(typeof o!="function")throw new TypeError(ww);n=Ti(n)||0,Iw(e)&&(u=!!e.leading,h="maxWait"in e,i=h?Tw(Ti(e.maxWait)||0,n):i,d="trailing"in e?!!e.trailing:d);function f(C){var k=t,z=r;return t=r=void 0,l=C,s=o.apply(z,k),s}function p(C){return l=C,a=setTimeout(y,n),u?f(C):s}function w(C){var k=C-c,z=C-l,A=n-k;return h?Sw(A,i-z):A}function N(C){var k=C-c,z=C-l;return c===void 0||k>=n||k<0||h&&z>=i}function y(){var C=Yn();if(N(C))return M(C);a=setTimeout(y,w(C))}function M(C){return a=void 0,d&&t?f(C):(t=r=void 0,s)}function v(){a!==void 0&&clearTimeout(a),l=0,t=c=r=a=void 0}function m(){return a===void 0?s:M(Yn())}function T(){var C=Yn(),k=N(C);if(t=arguments,r=this,c=C,k){if(a===void 0)return p(c);if(h)return clearTimeout(a),a=setTimeout(y,n),f(c)}return a===void 0&&(a=setTimeout(y,n)),s}return T.cancel=v,T.flush=m,T}var Cw=vw,Nw=Cw,kw=lt,xw="Expected a function";function bw(o,n,e){var t=!0,r=!0;if(typeof o!="function")throw new TypeError(xw);return kw(e)&&(t="leading"in e?!!e.leading:t,r="trailing"in e?!!e.trailing:r),Nw(o,n,{leading:t,maxWait:n,trailing:r})}var Dw=bw;const Aw=Mn(Dw);class Ew extends Co{constructor(e,t){super(e,t);I(this,"width",1e3);I(this,"height",1e3);I(this,"dpr",Pt());I(this,"vDom");I(this,"eventTragetElement");I(this,"snapshotContainerRef");I(this,"backgroundContainerRef");I(this,"backgroundSnapshotContainerRef");I(this,"canvasContainerRef",g.createRef());I(this,"subLocalCanvasContainerRef");I(this,"canvasTopRef");I(this,"canvasServiceFloatRef",g.createRef());I(this,"canvasFloatRef",g.createRef());I(this,"canvasBgRef",g.createRef());I(this,"floatBarRef",g.createRef());I(this,"customFloatbarContainerRef",g.createRef());I(this,"containerOffset",{x:0,y:0});this.control.hasOffscreenCanvas||(this.snapshotContainerRef=g.createRef()),this.control.isUseSimple||(this.canvasTopRef=g.createRef(),this.subLocalCanvasContainerRef=g.createRef()),this.control.isUseBackgroundThread&&(this.backgroundContainerRef=g.createRef(),this.backgroundSnapshotContainerRef=g.createRef())}setCanvassStyle(){var e;if(this.eventTragetElement){const t=this.eventTragetElement.offsetWidth,r=this.eventTragetElement.offsetHeight,i=Pt();i!==this.dpr&&(this.dpr=i,this.control.worker.updateDpr(this.viewId,this.dpr)),t&&r&&this.canvasContainerRef.current&&(t!==this.width||r!==this.height)&&(this.width=t,this.height=r),t&&r&&this.backgroundContainerRef&&this.backgroundContainerRef.current&&(t!==this.width||r!==this.height)&&(this.width=t,this.height=r,this.backgroundContainerRef.current.style.width=`${t}px`,this.backgroundContainerRef.current.style.height=`${r}px`,this.backgroundContainerRef.current.classList.toggle("appliance-plugin-background-isWritable",this.control.renderControl.isWritable)),t&&r&&this.canvasBgRef.current&&(t!==this.width||r!==this.height)&&(this.width=t,this.height=r,this.control.isUseOffscreenTransfer||(this.canvasBgRef.current.width=t*this.dpr,this.canvasBgRef.current.height=r*this.dpr,this.canvasFloatRef.current&&(this.canvasFloatRef.current.width=t*this.dpr,this.canvasFloatRef.current.height=r*this.dpr),this.canvasServiceFloatRef.current&&(this.canvasServiceFloatRef.current.width=t*this.dpr,this.canvasServiceFloatRef.current.height=r*this.dpr),(e=this.canvasTopRef)!=null&&e.current&&(this.canvasTopRef.current.width=t*this.dpr,this.canvasTopRef.current.height=r*this.dpr)))}}createMainViewDisplayer(e){return this.vDom||(this.containerOffset=this.getContainerOffset(e,this.containerOffset),this.eventTragetElement=e.parentElement.children[0],e.innerHTML="",fn.render(g.createElement(Nr,{viewId:this.viewId,mananger:this,refs:{canvasServiceFloatRef:this.canvasServiceFloatRef,canvasFloatRef:this.canvasFloatRef,canvasBgRef:this.canvasBgRef,floatBarRef:this.floatBarRef,customFloatbarContainerRef:this.customFloatbarContainerRef,canvasTopRef:this.canvasTopRef,canvasContainerRef:this.canvasContainerRef,snapshotContainerRef:this.snapshotContainerRef,subLocalCanvasContainerRef:this.subLocalCanvasContainerRef,backgroundContainerRef:this.backgroundContainerRef,backgroundSnapshotContainerRef:this.backgroundSnapshotContainerRef}}),e),this.control.room&&this.bindDisplayerEvent(this.eventTragetElement)),this}}class wt extends Lt{constructor(e){super(e);I(this,"focuedViewId");I(this,"control");I(this,"focuedView");this.control=e.control}bindMainView(){if(!this.control.divMainView)return;const e=new Ew(this.control,fe.InternalMsgEmitter),{width:t,height:r,dpr:i}=e,s={cameraOpt:{...wt.defaultCameraOpt,width:t,height:r}},a=this.control.room&&this.control.room.mainView||this.control.play&&this.control.play.mainView;if(a){const{scale:c,...l}=a.camera;s.cameraOpt={...s.cameraOpt,...l,scale:c===1/0?1:c},this.createMianView({id:re,displayer:e,focusScenePath:a.focusScenePath||a.scenePath,cameraOpt:s.cameraOpt,viewData:a}),this.setFocuedViewId(re),e.createMainViewDisplayer(this.control.divMainView)}}getViewInitData(e){var r;const t=this.getView(e);if(t){const{width:i,height:s,dpr:a}=t.displayer;(r=this.control.pluginOptions.extras.canvasOpt)!=null&&r.contextType&&(wt.defaultScreenCanvasOpt.contextType=this.control.pluginOptions.extras.canvasOpt.contextType);const c={dpr:a,originalPoint:[i/2,s/2],offscreenCanvasOpt:{...wt.defaultScreenCanvasOpt,width:i,height:s},layerOpt:{...wt.defaultLayerOpt,width:i,height:s},cameraOpt:{...wt.defaultCameraOpt,width:i,height:s}};if(t.viewData){const{scale:l,...u}=t.viewData.camera;c.cameraOpt={...c.cameraOpt,...u,scale:l===1/0?1:l}}return c}}async mountView(e){var r;const t=this.getView(e);if(t){this.control.emitInitLoadingChange({loading:!0,phase:"scene",status:"start"}),this.control.worker.isActive||(this.control.cursor.activeCollector(),this.control.isUseOffscreenTransfer&&t.displayer.canvasBgRef.current&&t.displayer.canvasServiceFloatRef.current&&t.displayer.canvasFloatRef.current&&t.displayer.setTransferControlToOffscreenCanvas({bgCanvas:t.displayer.canvasBgRef.current,serviceCanvas:t.displayer.canvasServiceFloatRef.current,localCanvas:t.displayer.canvasFloatRef.current}),await this.control.activeWorker());const i=this.getViewInitData(e);i&&((r=this.control.worker)==null||r.createViewWorker(e,i,t.displayer)),t.focusScenePath&&this.control.collector&&this.control.worker.pullServiceData(e,t.focusScenePath,{isAsync:!0,useAnimation:!1}),this.control.emitInitLoadingChange({loading:!0,phase:"scene",status:"success"}),this.control.emitInitLoadingChange({loading:!1,phase:"ready",status:"success"})}}}class $e extends fe{constructor(e){super(e);I(this,"viewContainerManager");I(this,"divMainView");I(this,"onCameraChange",Aw(e=>{var r;const t=this.viewContainerManager.mainView;t&&t.cameraOpt&&(t.cameraOpt.width!==e.width||t.cameraOpt.height!==e.height)&&((r=this.viewContainerManager.mainView)==null||r.displayer.updateSize()),this.viewContainerManager.setFocuedViewCameraOpt(e)},pn,{leading:!1}));const t={control:this,internalMsgEmitter:$e.InternalMsgEmitter,publicMsgEmitter:$e.PublicMsgEmitter};this.viewContainerManager=new wt(t)}init(){$e.InternalMsgEmitter.on(te.BindMainView,e=>{this.divMainView=e,this.plugin&&!this.viewContainerManager.mainView&&this.viewContainerManager.bindMainView()})}activePlugin(){this.plugin&&this.divMainView&&!this.viewContainerManager.mainView&&this.viewContainerManager.bindMainView(),this.collector&&(this.collector.addStorageStateListener(e=>{var a,c;if((a=this.collector)!=null&&a.storage&&Object.keys(this.collector.storage).length===0){(c=this.worker)==null||c.clearViewScenePath(re,!0);return}const{diffView:t,diffScenePath:r,diffData:i}=e,s=new Map;if(t){let l;Object.keys(t).forEach(u=>{var d;const h=t[u];if(h&&!h.newValue)(d=this.worker)==null||d.clearViewScenePath(u,!0),h.oldValue&&(l=h.oldValue);else if(h&&h.newValue){for(const f of Object.keys(h.newValue))this.worker.pullServiceData(u,f,{isAsync:!1,useAnimation:!0});l=h.newValue}if(l)for(const f of Object.values(l)){const p=new Set;for(const w of Object.keys(f))w&&p.add(w);s.set(u,p)}})}if(r){let l;Object.keys(r).forEach(u=>{var d;const h=r[u];if(h&&h.viewId&&!h.newValue?((d=this.worker)==null||d.clearViewScenePath(h.viewId,!0),h.oldValue&&(l=h.oldValue)):h&&h.viewId&&h.newValue&&(this.worker.pullServiceData(h.viewId,u,{isAsync:!1,useAnimation:!0}),l=h.newValue),h!=null&&h.viewId&&l){const f=new Set;for(const p of Object.keys(l))p&&f.add(p),s.set(h.viewId,f)}})}i&&Object.keys(i).forEach(l=>{var h,d;const u=i[l];if(u){const{viewId:f}=u,p=s.get(f)||new Set;p.add(l),s.set(f,p),(h=this.worker)==null||h.onServiceDerive(l,u),(d=this.miniMapManager)==null||d.updateMiniMapCamera(f)}});for(const[l,u]of s.entries())fe.InternalMsgEmitter.emit("excludeIds",[...u],l)}),this.room&&(this.roomMember.onUidChangeHook(e=>{var t;(t=this.collector)!=null&&t.serviceStorage&&this.viewContainerManager.getAllViews().forEach(r=>{var i,s,a,c,l,u;if(r&&r.focusScenePath&&((i=this.collector)!=null&&i.serviceStorage[r.id])&&((s=this.collector)!=null&&s.serviceStorage[r.id][r.focusScenePath])){const h=Object.keys((a=this.collector)==null?void 0:a.serviceStorage[r.id][r.focusScenePath]);for(const d of h){const f=(c=this.collector)==null?void 0:c.getUidFromKey(d);if(f&&!e.online.includes(f))if((l=this.collector)!=null&&l.isSelector(d))this.renderControl.isWritable&&((u=this.collector)==null||u.updateValue(d,void 0,{viewId:r.id,scenePath:r.focusScenePath,isSync:!0})),this.worker.blurSelector(r.id,r.focusScenePath,d);else{const p=this.textEditorManager.editors.get(d);p&&p.opt&&(p.opt.workState===E.Doing||p.opt.workState===E.Start)&&(p.opt.text&&p.opt.text.replace(/\s*,/g,"")?this.textEditorManager.unActive(d):this.textEditorManager.delete(d))}}}})}),this.worker.isActive&&this.viewContainerManager.getAllViews().forEach(e=>{e&&e.focusScenePath&&this.worker.pullServiceData(e.id,e.focusScenePath,{isAsync:!0,useAnimation:!1})})))}async activeWorker(){await this.worker.init()}}const P=class P extends ki{constructor(){super(...arguments);I(this,"onPhaseChanged",e=>{var t;e===xi.Reconnecting&&((t=P.currentManager)==null||t.setSnapshootData())});I(this,"updateRoomWritable",()=>{var e;(e=P.currentManager)==null||e.onWritableChange(this.displayer.isWritable)});I(this,"roomStateChangeListener",async e=>{var t,r;P.currentManager instanceof $e&&(e.cameraState&&P.currentManager.onCameraChange(e.cameraState),e.sceneState&&P.currentManager.onSceneChange(e.sceneState.scenePath,re)),e!=null&&e.roomMembers&&((t=P.currentManager)==null||t.onRoomMembersChange(e.roomMembers)),!(H(this.displayer)&&!this.displayer.isWritable)&&e.memberState&&((r=P.currentManager)==null||r.onMemberChange(e.memberState))})}static async getInstance(e,t){var p,w,N;(y=>{var M;try{(M=t.onInitLoadingChange)==null||M.call(t,y)}catch(v){P.logger.error(`[ApplianceSinglePlugin] onInitLoadingChange error: ${(v==null?void 0:v.message)||v}`)}})({loading:!0,phase:"plugin",status:"start"}),t.options&&(((p=t.options.extras)==null?void 0:p.useWorker)==="mainThread"&&(t.options.cdn.fullWorkerUrl="",t.options.cdn.subWorkerUrl=""),(t.options.extras&&t.options.extras.useWorker!=="mainThread"||!t.options.extras)&&!t.options.cdn.fullWorkerUrl&&!t.options.cdn.subWorkerUrl&&P.logger.error("[ApplianceSinglePlugin] you must adaptor options cdn fullWorkerUrl and subWorkerUrl"));const i=e.callbacks.on,s=e.callbacks.off,a=e.callbacks.once,c=e.cleanCurrentScene.bind(e),l=e.setMemberState.bind(e);let u;H(e)&&(u=e.setWritable),t!=null&&t.logger&&(P.logger=new Cr(t.logger));let h=e.getInvisiblePlugin(P.kind);h||(h=await P.createAppliancePlugin(e,P.kind)),e&&h&&P.createCurrentManager(e,{cdn:t.options.cdn,extras:{...ye,...t.options.extras}},h,t.onInitLoadingChange),h&&P.currentManager&&(P.currentManager.bindPlugin(h),h.init(e)),t!=null&&t.cursorAdapter&&(P.cursorAdapter=t.cursorAdapter),P.effectInstance(),(w=P.currentManager)==null||w.emitInitLoadingChange({loading:!0,phase:"plugin",status:"success"});const d={displayer:e,currentManager:P.currentManager,maxScreenshotWidth:10*1024,maxScreenshotHeight:10*1024,_injectTargetObject:void 0,getBoundingRectAsync:async function(y){var m;P.logger.info("[ApplianceSinglePlugin] getBoundingRectAsync");const M=e.getBoundingRect(y),v=await((m=P.currentManager)==null?void 0:m.getBoundingRect(y));return!M.width||!M.height?v:wr(M,v)},screenshotToCanvasAsync:async function(y,M,v,m,T,C){var b;P.logger.info("[ApplianceSinglePlugin] screenshotToCanvasAsync");let k=v,z=m,A=T.scale;k>this.maxScreenshotWidth&&(A=this.maxScreenshotWidth/k*A,k=this.maxScreenshotWidth),z>this.maxScreenshotHeight&&(A=Math.min(this.maxScreenshotHeight/z*A,A),z=this.maxScreenshotHeight),T.scale=A;const x=document.createElement("canvas"),D=x.getContext("2d");x.width=k*(C||1),x.height=z*(C||1),D&&(e.screenshotToCanvas(D,M,k,z,T,C),y.drawImage(x,Math.floor((v-k)/2),Math.floor((m-z)/2),k*(C||1),z*(C||1),0,0,k,z),x.remove()),P.currentManager&&await((b=P.currentManager)==null?void 0:b.screenshotToCanvas(y,M,k,z,T,Math.floor((v-k)/2),Math.floor((m-z)/2)))},scenePreviewAsync:async function(y,M,v,m,T){P.logger.info("[ApplianceSinglePlugin] scenePreviewAsync"),e.scenePreview(y,M,v,m,T);const C=document.createElement("img");C.className="appliance-plugin-fill-scene-snapshot-img",M.append(C),getComputedStyle(M).position||(M.style.position="relative"),P.currentManager&&await P.currentManager.scenePreview(y,C)},fillSceneSnapshotAsync:async function(y,M,v,m,T){var Z,Q;P.logger.info("[ApplianceSinglePlugin] fillSceneSnapshotAsync"),M.innerHTML="",e.fillSceneSnapshot(y,M,v,m,T);const C=v||((Z=e.state.cameraState)==null?void 0:Z.width)||0,k=m||((Q=e.state.cameraState)==null?void 0:Q.height)||0;let z=await this.getBoundingRectAsync(y);z||(z={originX:0,originY:0,width:C,height:k});let A=Math.max(z==null?void 0:z.width,C),x=Math.max(z==null?void 0:z.height,k),D=1;const b=A>C&&Math.min(C/A,D)||D,R=x>k&&Math.min(k/x,D)||D;b<=R?(A=b<1&&C||A,x=Math.floor(x*b)+1,D=b):b>R&&(x=R<1&&k||x,A=Math.floor(A*R)+1,D=R);const O={scale:D,centerX:z.originX+z.width/2,centerY:z.originY+z.height/2},U=document.createElement("canvas"),$=U.getContext("2d");U.width=A,U.height=x,$&&await this.screenshotToCanvasAsync($,y,A,x,O,devicePixelRatio);const Y=document.createElement("img");Y.className="appliance-plugin-fill-scene-snapshot-img",Y.src=U.toDataURL(),Y.onload=()=>{U.remove()},Y.onerror=()=>{U.remove(),Y.remove()},M.append(Y),getComputedStyle(M).position||(M.style.position="relative")},_callbacksOn:function(y,M){P.logger.info(`[ApplianceSinglePlugin] callbacks ${y}`),(y==="onCanUndoStepsUpdate"||y==="onCanRedoStepsUpdate")&&H(e)&&e.isWritable?$e.InternalMsgEmitter.on(y,M):i.call(e.callbacks,y,M)},_callbacksOnce:function(y,M){P.logger.info(`[ApplianceSinglePlugin] callbacks ${y}`),(y==="onCanUndoStepsUpdate"||y==="onCanRedoStepsUpdate")&&H(e)&&e.isWritable?$e.InternalMsgEmitter.on(y,M):a.call(e.callbacks,y,M)},_callbacksOff:function(y,M){P.logger.info(`[ApplianceSinglePlugin] callbacks ${y}`),(y==="onCanUndoStepsUpdate"||y==="onCanRedoStepsUpdate")&&H(e)&&e.isWritable?$e.InternalMsgEmitter.off(y,M):s.call(e.callbacks,y,M)},canRedoSteps(){if(P.logger.info("[ApplianceSinglePlugin] canRedoSteps"),P.currentManager&&H(e)&&!e.disableSerialization){const y=P.currentManager.viewContainerManager.focuedView,M=y==null?void 0:y.focusScenePath;if(y&&M)return y.displayer.commiter.redoStack.filter(v=>v.scenePath===M).length}return 0},canUndoSteps(){if(P.logger.info("[ApplianceSinglePlugin] canUndoSteps"),P.currentManager&&H(e)&&!e.disableSerialization){const y=P.currentManager.viewContainerManager.focuedView,M=y==null?void 0:y.focusScenePath;if(y&&M)return y.displayer.commiter.undoStack.filter(v=>v.scenePath===M).length}return 0},undo:function(){return P.logger.info("[ApplianceSinglePlugin] undo"),P.currentManager&&H(e)&&!e.disableSerialization?P.currentManager.viewContainerManager.undo():0},redo:function(){return P.logger.info("[ApplianceSinglePlugin] redo"),P.currentManager&&H(e)&&!e.disableSerialization?P.currentManager.viewContainerManager.redo():0},cleanCurrentScene:function(y){P.logger.info("[ApplianceSinglePlugin] cleanCurrentScene"),P.currentManager&&H(e)&&e.isWritable&&(P.currentManager.cleanCurrentScene(),c.call(e,y))},insertImage:function(y){P.logger.info("[ApplianceSinglePlugin] insertImage"),P.currentManager&&H(e)&&e.isWritable&&P.currentManager.worker.insertImage(re,y)},lockImage:function(y,M){P.logger.info("[ApplianceSinglePlugin] lockImage"),P.currentManager&&H(e)&&e.isWritable&&P.currentManager.worker.lockImage(re,y,M)},completeImageUpload:function(y,M){P.logger.info("[ApplianceSinglePlugin] completeImageUpload"),P.currentManager&&H(e)&&e.isWritable&&P.currentManager.worker.completeImageUpload(re,y,M)},getImagesInformation:function(y){return P.logger.info("[ApplianceSinglePlugin] completeImageUpload"),P.currentManager&&H(e)&&e.isWritable?P.currentManager.worker.getImagesInformation(y):[]},insertText:function(y,M,v){if(P.logger.info("[ApplianceSinglePlugin] insertText"),P.currentManager&&H(e)&&e.isWritable)return P.currentManager.textEditorManager.insertText(re,y,M,v)},updateText:function(y,M){P.logger.info("[ApplianceMultiPlugin] updateText"),P.currentManager&&H(e)&&e.isWritable&&P.currentManager.textEditorManager.updateText(y,M)},callbacks:()=>({...e.callbacks,on:d._callbacksOn.bind(d),once:d._callbacksOnce.bind(d),off:d._callbacksOff.bind(d)}),destroy(){P.currentManager&&(P.logger.info("[ApplianceSinglePlugin] destroy"),P.currentManager.destroy(),P.currentManager=void 0,P.cursorAdapter=void 0)},setMemberState(y){var v;P.logger.info(`[ApplianceSinglePlugin] setMemberState ${JSON.stringify(y)}`);const M=Object.keys(y);if(H(e)&&e.isWritable){if(M.includes("currentApplianceName"))if(y.currentApplianceName&&y.currentApplianceName===ie.laserPen){if((v=P.currentManager)!=null&&v.isUseSimple)throw new Error("[ApplianceMultiPlugin] laserPen must be not support in simple mode");y.currentApplianceName=ie.pencil,y.useLaserPen=!0}else y.currentApplianceName&&y.currentApplianceName===ie.pencil&&(y.useLaserPen=!1);l(y);return}throw new Error("setMemberState must be called in writable room")},createMiniMap:async function(y,M){if(P.logger.info("[ApplianceSinglePlugin] createMiniMap"),P.currentManager&&H(e)&&e.isWritable)return P.currentManager.createMiniMap(y,M)},destroyMiniMap:async function(y){if(P.logger.info("[ApplianceMultiPlugin] destroyeMiniMap"),P.currentManager&&H(e)&&e.isWritable)return P.currentManager.destroyMiniMap(y)},filterRenderByUid(y,M,v){if(P.logger.info("[ApplianceSinglePlugin] filterRenderByUid"),P.currentManager&&H(e)&&e.isWritable)return P.currentManager.filterRenderByUid(y,M,v)},cancelFilterRender(y,M){if(P.logger.info("[ApplianceSinglePlugin] filterRenderByUid"),P.currentManager&&H(e)&&e.isWritable)return P.currentManager.cancelFilterRender(y,M)},addListener:(y,M)=>{P.logger.info(`[ApplianceSinglePlugin] addListener ${y}`),$e.PublicMsgEmitter.on(y,M)},removeListener:(y,M)=>{P.logger.info(`[ApplianceSinglePlugin] removeListener ${y}`),$e.PublicMsgEmitter.off(y,M)},usePlugin:y=>{var M;P.logger.info("[ApplianceSinglePlugin] usePlugin",y.kind),(M=P.currentManager)==null||M.usePlugin(y)},getDisableDeviceInputs(){if(P.currentManager&&H(e))return P.currentManager.disableDeviceInputs},setDisableDeviceInputs(y){P.logger.info(`[ApplianceSinglePlugin] setDisableDeviceInputs ${y}`),P.currentManager&&H(e)&&(P.currentManager.disableDeviceInputs=y)},getDisableCameraTransform(){if(P.currentManager&&H(e))return P.currentManager.disableCameraTransform},setDisableCameraTransform(y){P.logger.info(`[ApplianceSinglePlugin] setDisableCameraTransform ${y}`),P.currentManager&&H(e)&&(P.currentManager.disableCameraTransform=y)},getDisableEraseImage(){if(P.currentManager&&H(e))return P.currentManager.disableEraseImage},setDisableEraseImage(y){P.logger.info(`[ApplianceSinglePlugin] setDisableEraseImage ${y}`),P.currentManager&&H(e)&&(P.currentManager.disableEraseImage=y)},setWritable:async function(y){var M;P.logger.info(`[ApplianceSinglePlugin] setWritable ${y}`),H(e)&&u&&(await((M=P.currentManager)==null?void 0:M.setWritable(y)),await u.call(e,y))},requestIdleCallback:(y,M)=>{const v=(M==null?void 0:M.timeout)||0,m=performance.now();let T;const C=new MessageChannel;let k;const z=A=>{try{y({didTimeout:A,timeRemaining:()=>{const D=performance.now()-m;return Math.max(0,v-D)}})}catch(x){P.logger.error("[ApplianceSinglePlugin] requestIdleCallback error:",x)}finally{C.port1.close(),C.port2.close(),T!==void 0&&cancelAnimationFrame(T),k!==void 0&&clearTimeout(k)}};return C.port1.onmessage=()=>{T=requestAnimationFrame(()=>{v>0&&performance.now()-m>=v?z(!0):z(!1)})},C.port2.postMessage(null),v>0&&(k=setTimeout(()=>{z(!0)},v)),k||T||0},cancelIdleCallback:y=>{try{clearTimeout(y),cancelAnimationFrame(y)}catch(M){P.logger.error("[ApplianceSinglePlugin] cancelIdleCallback error:",M)}},injectMethodToObject:(y,M)=>{if(P.logger.info(`[ApplianceSinglePlugin] injectMethodToObject ${M}`),typeof y[M]=="function"||typeof y[M]>"u"){y[M]=d[M];return}M==="callbacks"&&(y.callbacks.on=d._callbacksOn.bind(d),y.callbacks.off=d._callbacksOff.bind(d),y.callbacks.once=d._callbacksOnce.bind(d))},blurText:()=>{P.logger.info("[ApplianceSinglePlugin] blurText"),P.currentManager&&H(e)&&e.isWritable&&P.currentManager.textEditorManager.checkEmptyTextBlur()},hasElements:(y,M)=>{var v;if(P.logger.info(`[ApplianceSinglePlugin] hasElements ${y}`),P.currentManager&&H(e)&&e.isWritable){let m=y;if(!m){const T=P.currentManager.viewContainerManager.focuedView;m=T==null?void 0:T.focusScenePath}if(m){const T=(v=P.currentManager.collector)==null?void 0:v.getScenePathData(m);if(T){const C=Object.values(T);return C.length>0?M?C.some(k=>M(k.toolsType)):!0:!1}return!1}return!1}},getElements:(y,M)=>{var v;if(P.logger.info(`[ApplianceSinglePlugin] getElements ${y}`),P.currentManager&&H(e)&&e.isWritable){let m=y;if(!m){const T=P.currentManager.viewContainerManager.focuedView;m=T==null?void 0:T.focusScenePath}if(m){const T=(v=P.currentManager.collector)==null?void 0:v.getScenePathData(m),C=T&&Object.values(T)||[];return T&&C.length>0&&M?C.filter(k=>M(k.toolsType)):C}return[]}},stopDraw:y=>{if(P.logger.info(`[ApplianceSinglePlugin] stopDraw ${y}`),P.currentManager&&H(e))return P.currentManager.stopDraw(y)},loadFontFaces:()=>{var y;return P.logger.info("[ApplianceSinglePlugin] loadFontFaces"),((y=P.currentManager)==null?void 0:y.loadFontFaces())||Promise.resolve({status:"error"})},refreshViewRender:y=>{var M;return P.logger.info(`[ApplianceSinglePlugin] refreshViewRender ${y}`),((M=P.currentManager)==null?void 0:M.refreshViewRender(y))||Promise.resolve({status:"error"})},refreshRender:()=>{var y;return P.logger.info("[ApplianceSinglePlugin] refreshRender"),((y=P.currentManager)==null?void 0:y.refreshRender())||Promise.resolve({status:"error"})},refreshViewTextRender:y=>{var M;return P.logger.info(`[ApplianceSinglePlugin] refreshViewTextRender ${y}`),((M=P.currentManager)==null?void 0:M.refreshViewTextRender(y))||Promise.resolve({status:"error"})},refreshTextRender:()=>{var y;return P.logger.info("[ApplianceSinglePlugin] refreshTextRender"),((y=P.currentManager)==null?void 0:y.refreshTextRender())||Promise.resolve({status:"error"})},setViewLocalScenePathChange:async(y,M)=>{P.logger.info(`[ApplianceSinglePlugin] setViewLocalScenePathChange ${y} ${M}`),P.currentManager&&await P.currentManager.setViewLocalScenePathChange(y,M)},insertMarkmap:async(y,M)=>{if(P.logger.info(`[ApplianceSinglePlugin] insertMarkmap: ${y}, info: ${JSON.stringify(M)}`),P.currentManager&&P.currentManager.isUseBackgroundThread)return P.currentManager.worker.insertBackgroundMarkMap(y,M)},updateMarkmap:async(y,M,v)=>{if(P.logger.info(`[ApplianceSinglePlugin] updateMarkmap: ${y}, markmapId: ${M}, info: ${JSON.stringify(v)}`),P.currentManager&&P.currentManager.isUseBackgroundThread)return P.currentManager.worker.updateBackgroundMarkMap(y,M,v)},insertBackgroundImage:async(y,M)=>{if(P.logger.info(`[ApplianceSinglePlugin] insertBackgroundImage: ${y}, info: ${JSON.stringify(M)}`),P.currentManager&&P.currentManager.isUseBackgroundThread)return P.currentManager.worker.insertBackgroundSVG(y,M)},getSelectedElements:y=>{var M,v;return(v=(M=P.currentManager)==null?void 0:M.selectorApi)==null?void 0:v.getSelectedElements(y)},isElementPropertySupported:(y,M)=>{var v,m;return((m=(v=P.currentManager)==null?void 0:v.selectorApi)==null?void 0:m.isElementPropertySupported(y,M))||!1},blurSelector:y=>{var M;if(P.currentManager&&H(e)&&e.isWritable){const v=(M=P.currentManager)==null?void 0:M.selectorApi;return v?v.blurSelector(y):Promise.resolve({ok:!1,requestId:`clear-${Date.now().toString(36)}`,viewId:y||re,reason:"no-selection"})}return Promise.resolve({ok:!1,requestId:`clear-${Date.now().toString(36)}`,viewId:y||re,reason:"no-selection"})},updateSelectedElements:y=>{var M;if(P.currentManager&&H(e)&&e.isWritable){const v=(M=P.currentManager)==null?void 0:M.selectorApi;return v?v.updateSelectedElements(re,y):Promise.resolve({requestId:`update-${Date.now().toString(36)}`,viewId:re,ok:!1,reason:"no-selection"})}return Promise.resolve({requestId:`update-${Date.now().toString(36)}`,viewId:re,ok:!1,reason:"no-writable permission"})},updateElement:(y,M,v,m,T=!0)=>{var C;if(P.currentManager&&H(e)&&e.isWritable){const k=(C=P.currentManager)==null?void 0:C.selectorApi;return k?k.updateElement(y,M,v,m,T):Promise.resolve(!1)}return Promise.resolve(!1)},copySelectedElements:y=>{var M;if(P.currentManager&&H(e)&&e.isWritable){const v=(M=P.currentManager)==null?void 0:M.selectorApi;return v?v.copySelectedElements(y):Promise.resolve({ok:!1,requestId:`copy-${Date.now().toString(36)}`,viewId:y||re,reason:"no-selection"})}return Promise.resolve({ok:!1,requestId:`copy-${Date.now().toString(36)}`,viewId:y||re,reason:"no-selection"})},deleteSelectedElements:y=>{var M;if(P.currentManager&&H(e)&&e.isWritable){const v=(M=P.currentManager)==null?void 0:M.selectorApi;return v?v.deleteSelectedElements(y):Promise.resolve({ok:!1,requestId:`delete-${Date.now().toString(36)}`,viewId:y||re,reason:"no-selection"})}return Promise.resolve({ok:!1,requestId:`delete-${Date.now().toString(36)}`,viewId:y||re,reason:"no-selection"})},getFloatbarContainer:y=>{var M;return(M=P.currentManager)==null?void 0:M.viewContainerManager.getFloatbarContainer(y)},getViewOffsetToContainer:(y,M)=>{var v;return(v=P.currentManager)==null?void 0:v.viewContainerManager.getViewOffsetToContainer(y,M)}};d.injectMethodToObject(e,"undo"),d.injectMethodToObject(e,"redo"),d.injectMethodToObject(e,"cleanCurrentScene"),d.injectMethodToObject(e,"blurSelector"),d.injectMethodToObject(e,"updateElement"),d.injectMethodToObject(e,"insertImage"),d.injectMethodToObject(e,"completeImageUpload"),d.injectMethodToObject(e,"lockImage"),d.injectMethodToObject(e,"getImagesInformation"),d.injectMethodToObject(e,"insertText"),d.injectMethodToObject(e,"updateText"),d.injectMethodToObject(e,"callbacks"),d.injectMethodToObject(e,"screenshotToCanvasAsync"),d.injectMethodToObject(e,"getBoundingRectAsync"),d.injectMethodToObject(e,"scenePreviewAsync"),d.injectMethodToObject(e,"fillSceneSnapshotAsync"),d.injectMethodToObject(e,"setMemberState"),H(e)&&d.injectMethodToObject(e,"setWritable"),Object.defineProperty(e,"canUndoSteps",{get(){return d.canUndoSteps()}}),Object.defineProperty(e,"canRedoSteps",{get(){return d.canRedoSteps()}});const f={...d,callbacks:d.callbacks()};return Object.defineProperty(f,"disableDeviceInputs",{set(y){d.setDisableDeviceInputs(y)},get(){return d.getDisableDeviceInputs()}}),Object.defineProperty(f,"disableEraseImage",{set(y){d.setDisableEraseImage(y)},get(){return d.getDisableEraseImage()}}),Object.defineProperty(f,"disableCameraTransform",{set(y){d.setDisableCameraTransform(y)},get(){return d.getDisableCameraTransform()}}),e._appliancePlugin=f,(N=P.currentManager)==null||N.startInitFontFaceLoadAndRender(),e._appliancePlugin}static onCreate(e){e&&P.currentManager&&(P.currentManager.bindPlugin(e),e.init(e.displayer))}static async createAppliancePlugin(e,t){try{await e.createInvisiblePlugin(P,{})}catch(i){if(!e.isWritable){await e.setWritable(!0);const s=await this.createAppliancePlugin(e,t);return await e.setWritable(!1),s}throw i}let r=e.getInvisiblePlugin(t);return r||(r=await P.createAppliancePlugin(e,t)),r}static effectInstance(){if(P.cursorAdapter){const e=P.cursorAdapter.onAddedCursor;P.cursorAdapter.onAddedCursor=function(t){t.onCursorMemberChanged=r=>{try{r.appliance===ie.pencil||r.appliance===ie.shape||r.appliance===ie.text||r.appliance===ie.arrow||r.appliance===ie.straight||r.appliance===ie.rectangle||r.appliance===ie.ellipse||r.appliance===ie.eraser||r.appliance===ie.selector?t!=null&&t.divElement&&(t.divElement.style.display="none"):t!=null&&t.divElement&&(t.divElement.style.display="block")}catch(i){throw i}},e.call(P.cursorAdapter,t)}}}get isReplay(){return or(this.displayer)}get callbackName(){return this.isReplay?"onPlayerStateChanged":"onRoomStateChanged"}init(e){var r,i;const t=e.state;(r=P.currentManager)==null||r.onRoomMembersChange(t.roomMembers),H(e)&&t!=null&&t.memberState&&((i=P.currentManager)==null||i.onMemberChange(t.memberState)),this.displayer.callbacks.on(this.callbackName,this.roomStateChangeListener),this.displayer.callbacks.on("onEnableWriteNowChanged",this.updateRoomWritable),this.displayer.callbacks.on("onPhaseChanged",this.onPhaseChanged)}destroy(){var e;P.logger.info("[ApplianceSinglePlugin] passive destroy"),(e=P.currentManager)==null||e.destroy(),P.currentManager=void 0,P.cursorAdapter=void 0}};I(P,"kind","appliance-single-plugin"),I(P,"cursorAdapter"),I(P,"currentManager"),I(P,"logger",{info:console.log,warn:console.warn,error:console.error}),I(P,"createCurrentManager",(e,t,r,i)=>{P.currentManager&&P.currentManager.destroy();const s={plugin:r,displayer:e,options:t,onInitLoadingChange:i},a=new $e(s);if(a.init(),P.logger.info("[ApplianceSinglePlugin] refresh ApplianceSingleManager object"),P.currentManager=a,H(e)){const c=a.hasOffscreenCanvas,l=a.isUseOffscreenTransfer,u=a.pluginOptions,h=a.isUseSimple;e.logger.info(`[Appliance]: [ApplianceSinglePlugin] use ${c?"worker":"mainThread"}, isUseSimple: ${h} ${l?"offscreenTransfer":""}, options: ${JSON.stringify(u)}`)}});let nr=P;const At=class At extends g.Component{constructor(){super(...arguments);I(this,"mainViewRef",null)}componentDidMount(){At.emiter||(At.emiter=$e.InternalMsgEmitter),At.emiter.emit(te.BindMainView,this.mainViewRef)}render(){return g.createElement(g.Fragment,null,this.props.children,g.createElement("div",{className:"appliance-plugin-main-view-displayer",ref:e=>this.mainViewRef=e}))}};I(At,"emiter");let rr=At;const jw=Object.freeze(Object.defineProperty({__proto__:null,ActiveContainerType:Ci,ApplianceMultiPlugin:tr,ApplianceNames:ie,ApplianceSigleWrapper:rr,ApplianceSinglePlugin:nr,Cursor_Hover_Id:Ni,ECanvasShowType:Qe,EDataType:J,EForceStopReason:ir,EImageType:jt,EMatrixrRelationType:Et,EOperationType:be,EPostMessageType:F,ERenderFilterType:Ze,ESVGType:zt,EScaleType:Pe,EStrokeType:ce,EToolsKey:S,ElayerType:st,EmitEventType:B,EventMessageType:Jt,EventWorkState:E,EvevtWorkState:E,InternalMsgEmitterType:te,Main_View_Id:re,ShapeType:Ue,Task_Time_Interval:pn},Symbol.toStringTag,{value:"Module"}));exports.Cursor_Hover_Id=Ni;exports.DefaultAppliancePluginExtrasOptions=ye;exports.ECanvasShowType=Qe;exports.EDataType=J;exports.EImageType=jt;exports.EMatrixrRelationType=Et;exports.EPostMessageType=F;exports.ESVGType=zt;exports.EScaleType=Pe;exports.EStrokeType=ce;exports.EToolsKey=S;exports.EmitEventType=B;exports.EventWorkState=E;exports.Main_View_Id=re;exports.Point2d=ge;exports.Storage_Selector_key=q;exports.Storage_Splitter=Be;exports.Storage_ViewId_ALL=ro;exports.Task_Time_Interval=pn;exports.TextBoxPadding=Zn;exports.Vec2d=V;exports.ViewContainerManager=Lt;exports._Stack=zi;exports._baseGetTag=Ot;exports._equalArrays=io;exports._equalByTag=Bf;exports._getAllKeys=Hi;exports._getTag=vn;exports.average=OM;exports.checkOp=jM;exports.cloneDeep=en;exports.colorRGBA2Array=Kt;exports.computRect=wM;exports.decimalPlaces=LM;exports.gcd=PM;exports.getDefaultExportFromCjs=Mn;exports.getMarkmapRuntimeOrThrow=wo;exports.getRectFromPoints=Tr;exports.getRectMatrixrRelation=UM;exports.getRectRotated=NM;exports.getRectScaleWPoint=kM;exports.getRectTranslated=vM;exports.getSafetyRect=SM;exports.getWHRatio=EM;exports.index=jw;exports.isArray_1=_t;exports.isBufferExports=cr;exports.isDecimal=zM;exports.isIntersect=TM;exports.isIntersectForPoint=lo;exports.isObjectLike_1=ct;exports.isSet=_d;exports.isTypedArray_1=Bi;exports.precise=RM;exports.requestAsyncCallBack=He;exports.rgbToRgba=bt;exports.rotateLitePoints=bM;exports.rotatePoints=xM;exports.scaleLitePoints=AM;exports.scalePoints=DM;exports.strlen=YM;exports.transformToNormalData=Cn;exports.transformToSerializableData=St;