@netless/appliance-plugin 1.1.43-beta.5 → 1.1.43
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/appliance-plugin.js +1 -1
- package/dist/appliance-plugin.mjs +1 -1
- package/dist/{bridge-lN5XJgmt.mjs → bridge-D30E9dr6.mjs} +1 -1
- package/dist/{bridge-BU5rR3K9.js → bridge-GmRa7-tp.js} +1 -1
- package/dist/bridge.js +1 -1
- package/dist/bridge.mjs +1 -1
- package/dist/core/serviceRenderScheduler.d.ts +5 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/worker/base.d.ts +11 -0
- package/dist/fullWorker.js +113 -105
- package/dist/{index-Do5kJ_zq.js → index-B44Av4kp.js} +1 -1
- package/dist/{index-BtLlVwbN.mjs → index-C-pO2InQ.mjs} +23 -6
- package/dist/{index-ERLPRSvt.js → index-CKtpWZ9L.js} +1 -1
- package/dist/{index-1psceXIi.mjs → index-CQuJ6lL1.mjs} +1 -1
- package/dist/{index-CjzGgT9M.mjs → index-CatWUcZt.mjs} +1 -1
- package/dist/{index-CGGk-ErK.mjs → index-CrJWLjuD.mjs} +9048 -9031
- package/dist/{index-AuMV5vJ_.js → index-Ct5ShjRI.js} +1 -1
- package/dist/{index-qlVmoCd1.js → index-DGdruTPt.js} +1 -1
- package/dist/index-DLzvL8jo.js +570 -0
- package/dist/{index-8Q-KG_bu.mjs → index-DYDy0dd5.mjs} +1 -1
- package/dist/index-LmgcnMI8.js +570 -0
- package/dist/{index-DSZYEn11.mjs → index-rDe1jjPM.mjs} +1 -1
- package/dist/subWorker.js +13 -5
- package/package.json +56 -56
- package/dist/index-C8jhD21B.js +0 -570
- package/dist/index-D48waKFn.js +0 -570
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var F=Object.defineProperty;var x=(b,e,t)=>e in b?F(b,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):b[e]=t;var u=(b,e,t)=>x(b,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./index-C8jhD21B.js"),D=require("lodash");require("clipper-lib");require("lineclip");require("rbush");require("xss");require("white-web-sdk");require("react-dom");require("react");class U{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"serviceWorkShapes",new Map);u(this,"localWorkShapes",new Map);u(this,"tmpOpt");u(this,"animationId");u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);this.vNodes=e.vNodes,this.thread=e.thread}createLocalWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r){const a=t.toString();!this.getToolsOpt()&&o&&this.setToolsOpt({toolsType:o,toolsOpt:r}),this.setWorkOptions(a,r)}}getLocalWorkShape(e){return this.localWorkShapes.get(e)}createLocalWorkShape(e,t){if(e&&this.tmpOpt){const r={toolsType:this.tmpOpt.toolsType,toolsOpt:t||this.tmpOpt.toolsOpt},o=this.createWorkShapeNode({...r,workId:e});return o&&this.localWorkShapes.set(e,{node:o,toolsType:o.toolsType,workState:s.EventWorkState.Start}),o}}canUseTopLayer(e){return e===s.EToolsKey.LaserPen}destroy(){this.clearAll()}clearAll(){this.thread.topLayer.children.length&&(this.thread.topLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.serviceWorkShapes.clear(),this.localWorkShapes.clear()}consumeDraw(e){const{workId:t,dataType:r}=e;if(r===s.EDataType.Service)this.activeServiceWorkShape(e);else{const o=t==null?void 0:t.toString(),a=o&&this.localWorkShapes.get(o);if(!a)return;const i=a.node.consume({data:e,isFullWork:!1,isSubWorker:!0});i.rect&&(a.result=i,a.workState=s.EventWorkState.Doing,o&&this.localWorkShapes.set(o,a))}this.runAnimation()}setToolsOpt(e){var t;this.tmpOpt=e,(t=e.toolsOpt)!=null&&t.syncUnitTime&&(this.syncUnitTime=e.toolsOpt.syncUnitTime)}getToolsOpt(){return this.tmpOpt}createWorkShapeNode(e){const{toolsType:t}=e;if(t===s.EToolsKey.LaserPen)return s.getShapeInstance({...e,vNodes:this.vNodes,fullLayer:this.thread.topLayer,drawLayer:this.thread.topLayer})}setNodeKey(e,t,r,o){return t.toolsType=r,t.node=this.createWorkShapeNode({workId:e,toolsType:r,toolsOpt:o}),t}activeServiceWorkShape(e){var p,y;const{workId:t,opt:r,toolsType:o,type:a,updateNodeOpt:i,ops:n,op:c}=e;if(!t)return;const l=t.toString(),d=(p=this.vNodes.get(l))==null?void 0:p.rect;if(!((y=this.serviceWorkShapes)!=null&&y.has(l))){let f={toolsType:o,animationWorkData:c||[],animationIndex:0,type:a,updateNodeOpt:i,ops:n,oldRect:d};o&&r&&(f=this.setNodeKey(l,f,o,r)),this.serviceWorkShapes.set(l,f)}const h=this.serviceWorkShapes.get(l);a&&(h.type=a),n&&(h.animationWorkData=s.transformToNormalData(n),h.ops=n),i&&(h.updateNodeOpt=i),c&&(h.animationWorkData=c),h.node&&h.node.getWorkId()!==l&&h.node.setWorkId(l),d&&(h.oldRect=d),o&&r&&(h.toolsType!==o&&o&&r&&this.setNodeKey(l,h,o,r),h.node&&h.node.setWorkOptions(r))}computNextAnimationIndex(e,t){var a;const r=((a=e.node)==null?void 0:a.syncUnitTime)||this.syncUnitTime,o=Math.floor((e.animationWorkData||[]).slice(e.animationIndex).length*32/t/r)*t;return Math.min((e.animationIndex||0)+(o||t),(e.animationWorkData||[]).length)}animationDraw(){var o,a,i,n;this.animationId=void 0;let e=!1;const t=new Map,r=[];for(const[c,l]of this.serviceWorkShapes.entries())switch(l.toolsType){case s.EToolsKey.LaserPen:{const h=this.computNextAnimationIndex(l,8),p=Math.max(0,l.animationIndex||0),y=(l.animationWorkData||[]).slice(p,h);if((l.animationIndex||0)<h&&((o=l.node)==null||o.consumeService({op:y,isFullWork:!1}),l.animationIndex=h,y.length&&t.set(c,{workState:p===0?s.EventWorkState.Start:h===((a=l.animationWorkData)==null?void 0:a.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:y.slice(-2)})),l.isDel){(i=l.node)==null||i.clearTmpPoints(),this.serviceWorkShapes.delete(c);break}l.ops&&l.animationIndex===((n=l.animationWorkData)==null?void 0:n.length)&&!l.isDel&&(this.thread.topLayer.getElementsByName(c.toString())[0]||(l.isDel=!0,this.serviceWorkShapes.set(c,l))),e=!0;break}}for(const[c,l]of this.localWorkShapes.entries()){const{result:d,toolsType:h,isDel:p,workState:y}=l;switch(h){case s.EToolsKey.LaserPen:{if(p){l.node.clearTmpPoints(),this.localWorkShapes.delete(c),r.push({removeIds:[c.toString()],type:s.EPostMessageType.RemoveNode});break}d&&((d.op||d.ops)&&r.push(d),l.result=void 0),!this.thread.topLayer.getElementsByName(c.toString())[0]&&y===s.EventWorkState.Done&&(l.isDel=!0,this.localWorkShapes.set(c,l)),e=!0;break}}}e&&this.runAnimation(),t.size&&t.forEach((c,l)=>{r.push({type:s.EPostMessageType.Cursor,uid:l.split(s.Storage_Splitter)[0],op:c.op,workState:c.workState,viewId:this.thread.viewId})}),r.length&&this.thread.post({sp:r})}runAnimation(){this.animationId||(this.animationId=requestAnimationFrame(this.animationDraw.bind(this)))}setWorkOptions(e,t){var o;let r=(o=this.localWorkShapes.get(e))==null?void 0:o.node;if(!r&&this.tmpOpt){const{toolsType:a}=this.tmpOpt;this.tmpOpt.toolsOpt=t,r=this.createWorkShapeNode({workId:e,toolsType:a,toolsOpt:t}),r&&this.localWorkShapes.set(e,{node:r,toolsType:a,workState:s.EventWorkState.Start}),this.setToolsOpt(this.tmpOpt)}t!=null&&t.syncUnitTime||(t.syncUnitTime=this.syncUnitTime),r&&r.setWorkOptions(t)}consumeDrawAll(e){const{workId:t,dataType:r}=e;if(r===s.EDataType.Service)this.activeServiceWorkShape(e);else{const o=t==null?void 0:t.toString(),a=o&&this.localWorkShapes.get(o);if(!a)return;const i=a.node.consumeAll({data:e});a.result=i,a.workState=s.EventWorkState.Done,o&&this.localWorkShapes.set(o,a)}this.runAnimation()}}class G{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"workShapes",new Map);u(this,"effectSelectNodeData",new Set);u(this,"batchEraserRemoveNodes",new Set);u(this,"batchEraserWorks",new Set);u(this,"tmpOpt");u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);u(this,"fullWorkerDrawCount",0);u(this,"drawWorkActiveId");u(this,"consumeCount",0);u(this,"combineDrawActiveId");u(this,"eraserBatchScheduler",new s.MaxDelayBatchScheduler);u(this,"disposeVNodeRevisionObserver");u(this,"bitmapEraserRenderQueue",Promise.resolve());u(this,"bitmapEraserRevalidationQueued",!1);this.vNodes=e.vNodes,this.thread=e.thread,this.disposeVNodeRevisionObserver=this.vNodes.observeRevision(()=>{this.scheduleActiveBitmapEraserRevalidation()})}scheduleActiveBitmapEraserRevalidation(){const e=this.combineDrawActiveId;if(!e)return;const t=this.getWorkShape(e);(t==null?void 0:t.toolsType)!==s.EToolsKey.BitMapEraser||!t.shouldRevalidateVNodeRevision()||this.bitmapEraserRevalidationQueued||(this.bitmapEraserRevalidationQueued=!0,this.enqueueBitmapEraserRender(e).catch(r=>{this.thread.master.Logger.error(`[Appliance]: Bitmap Eraser revision revalidation failed; viewId=${this.thread.viewId}; workId=${e}; error=${r instanceof Error?r.message:String(r)}`)}).finally(()=>{this.bitmapEraserRevalidationQueued=!1}))}async loadImageBitMap(e){return await this.thread.loadImageBitMap(e)}createLocalWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r){const a=t.toString();!this.getToolsOpt()&&o&&this.setToolsOpt({toolsType:o,toolsOpt:r}),this.setWorkOptions(a,r)}}async updateSelector(e){var y;const t=this.workShapes.get(s.Storage_Selector_key);if(!((y=t==null?void 0:t.selectIds)!=null&&y.length))return;const{callback:r,...o}=e,{updateSelectorOpt:a,willSerializeData:i,smoothSync:n}=o,c=await(t==null?void 0:t.updateSelector({updateSelectorOpt:a,selectIds:D.cloneDeep(t.selectIds),vNodes:this.vNodes,willSerializeData:i,worker:this})),l=new Map;let d;c!=null&&c.selectIds&&(d=D.xor(t.selectIds,c.selectIds),c.selectIds.forEach(f=>{const S=this.vNodes.get(f);if(S){const{toolsType:k,op:E,opt:w}=S;l.set(f,{opt:w,toolsType:k,ops:(E==null?void 0:E.length)&&s.transformToSerializableData(E)||void 0})}}),t.selectIds=c.selectIds);const h=[],p=r&&r({res:c,workShapeNode:t,param:o,postData:{sp:h},newServiceStore:l,smoothSync:n})||{sp:h};d&&p.sp.push({type:s.EPostMessageType.RemoveNode,removeIds:d,viewId:this.thread.viewId}),p.sp.length&&this.thread.post(p)}destroy(){var e;(e=this.disposeVNodeRevisionObserver)==null||e.call(this),this.disposeVNodeRevisionObserver=void 0,this.eraserBatchScheduler.cancel(),this.clearAll()}clearAll(){if(this.eraserBatchScheduler.cancel(),this.thread.localLayer.children.length&&(this.thread.topLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.remove()}),s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent)),this.workShapes.get(s.Storage_Selector_key)){const t=[];t.push({type:s.EPostMessageType.Select,dataType:s.EDataType.Local,selectIds:[],willSyncService:!1}),this.thread.post({sp:t})}this.workShapes.forEach(t=>t.clearTmpPoints()),this.workShapes.clear(),this.effectSelectNodeData.clear(),this.batchEraserWorks.clear(),this.batchEraserRemoveNodes.clear()}async checkTextActive(e){const{op:t,viewId:r,dataType:o}=e;if(t!=null&&t.length){let a;for(const i of this.vNodes.curNodeMap.values()){const{rect:n,name:c,toolsType:l,opt:d}=i,h=t[0]*this.thread.fullLayer.worldScaling[0]+this.thread.fullLayer.worldPosition[0],p=t[1]*this.thread.fullLayer.worldScaling[1]+this.thread.fullLayer.worldPosition[1];if(l===s.EToolsKey.Text&&s.isIntersectForPoint([h,p],n)&&d.workState===s.EventWorkState.Done){a=c;break}}a&&(await this.blurSelector({viewId:r,msgType:s.EPostMessageType.Select,dataType:o,isSync:!0}),this.thread.post({sp:[{type:s.EPostMessageType.GetTextActive,toolsType:s.EToolsKey.Text,workId:a}]}))}}cursorHover(e){const{opt:t,toolsType:r,point:o}=e,a=this.setFullWork({workId:s.Cursor_Hover_Id,toolsType:r,opt:t});a&&o&&a.cursorHover(o)}cursorBlur(){var t;const e=this.getWorkShape(s.Cursor_Hover_Id);e&&((t=e.selectIds)!=null&&t.length)&&(e.cursorBlur(),this.clearWorkShapeNodeCache(s.Cursor_Hover_Id)),this.thread.fullLayer.parent.children.forEach(r=>{r.name==="Cursor_Hover_Id"&&r.remove()})}async updateFullSelectWork(e){var o,a,i,n,c;const t=this.workShapes.get(s.Storage_Selector_key),{selectIds:r}=e;if(!(r!=null&&r.length)){await this.blurSelector(e);return}if(!t){this.setFullWork({workId:s.Storage_Selector_key,toolsType:s.EToolsKey.Selector,opt:e.opt||(((o=this.tmpOpt)==null?void 0:o.toolsType)===s.EToolsKey.Selector?this.tmpOpt.toolsOpt:{})})&&await this.updateFullSelectWork(e);return}if(t&&(r!=null&&r.length)){const{selectRect:l}=t.updateSelectIds(r),d=[{selectorColor:((a=e.opt)==null?void 0:a.strokeColor)||t.selectorColor,strokeColor:((i=e.opt)==null?void 0:i.strokeColor)||t.strokeColor,fillColor:((n=e.opt)==null?void 0:n.fillColor)||t.fillColor,textOpt:((c=e.opt)==null?void 0:c.textOpt)||t.textOpt,canTextEdit:t.canTextEdit,canRotate:t.canRotate,scaleType:t.scaleType,type:s.EPostMessageType.Select,viewId:this.thread.viewId,dataType:s.EDataType.Local,selectIds:r,selectRect:l,points:t.getChildrenPoints(),willSyncService:(e==null?void 0:e.willSyncService)||!1,opt:(e==null?void 0:e.willSyncService)&&t.getWorkOptions()||void 0,canLock:t.canLock,isLocked:t.isLocked,toolsTypes:t.toolsTypes,shapeOpt:t.shapeOpt,thickness:t.thickness,useStroke:t.useStroke,strokeType:t.strokeType}];this.thread.post({sp:d})}}async removeSelector(e){const{willSyncService:t,needUndoTicker:r}=e,o=[],a=[],i=this.workShapes.get(s.Storage_Selector_key);if(!i)return;const n=i.selectIds&&[...i.selectIds]||[];for(const c of n){const l=this.vNodes.get(c);if(l)switch(l.toolsType){case s.EToolsKey.Text:{o.push({type:s.EPostMessageType.TextUpdate,toolsType:s.EToolsKey.Text,workId:c,dataType:s.EDataType.Local});break}case s.EToolsKey.BackgroundSVG:o.push({type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:c,dataType:s.EDataType.Local,viewId:this.thread.viewId});break}this.removeNode(c),a.push(c)}a.length&&o.push({type:s.EPostMessageType.RemoveNode,removeIds:a,needUndoTicker:r,emitEventType:e.emitEventType,requestId:e.requestId}),o.push({type:s.EPostMessageType.Select,selectIds:[],willSyncService:t}),await this.blurSelector(),r&&o.push({type:s.EPostMessageType.None,needUndoTicker:r}),o.length&&this.thread.post({sp:o})}removeWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();r&&this.removeNode(r)}removeNode(e){var o;const t=this.vNodes.get(e);t&&(t.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:e,dataType:s.EDataType.Local,viewId:this.thread.viewId}]}),(o=this.thread.fullLayer)==null||o.getElementsByName(e).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.fullLayer.parent)}),this.vNodes.delete(e)),this.workShapes.has(e)&&(this.thread.localLayer.getElementsByName(e).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.localLayer.parent)}),this.clearWorkShapeNodeCache(e))}setFullWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r&&o){const a=t.toString();let i;return t&&this.workShapes.has(a)?(i=this.workShapes.get(a),(i==null?void 0:i.toolsType)!==o?(i==null||i.clearTmpPoints(),this.workShapes.delete(a),i=void 0):i==null||i.setWorkOptions(r)):i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a}),i||(i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a})),i?(this.workShapes.set(a,i),i):void 0}}async consumeFull(e){var i,n;const t=(i=e.workId)==null?void 0:i.toString(),r=(n=e.updateNodeOpt)==null?void 0:n.eraserGeometryDelta;if(t){const c=this.vNodes.get(t),l=e.ops&&s.transformToNormalData(e.ops)||e.op||[];if(r){if(!c||!e.centerPos||!s.acceptIncomingEraserGeometryDelta(this.vNodes,t,r,c,{op:l,centerPos:e.centerPos})){s.cancelDoingForGeometryMismatch(this.vNodes,t);return}}else c&&e.centerPos&&s.hasDoingGeometryTransform(this.vNodes,t)&&s.geometryDigest(c.op,c.centerPos)!==s.geometryDigest(l,e.centerPos)&&s.cancelDoingForGeometryMismatch(this.vNodes,t)}const o=this.setFullWork(e),a=e.ops&&s.transformToNormalData(e.ops);if(o){t&&e.clearPreviewLocalWork&&this.thread.localLayer.getElementsByName(t).forEach(l=>{l.remove(),s.removeTexture(l,this.thread.localLayer.parent)}),o.toolsType===s.EToolsKey.BackgroundSVG?o.consumeService({isFullWork:!0,replaceId:t}):o.toolsType===s.EToolsKey.Image?await o.consumeServiceAsync({isFullWork:!0,replaceId:t,worker:this}):o.toolsType===s.EToolsKey.Text?await o.consumeServiceAsync({isFullWork:!0,replaceId:t,boxRect:this.thread.getSceneRect()}):o.consumeService({op:a,isFullWork:!0,replaceId:t}),e!=null&&e.updateNodeOpt&&o.updataOptService(e.updateNodeOpt);const c=[];e.workId&&this.workShapes.delete(e.workId.toString()),e.willSyncService&&c.push({opt:e.opt,toolsType:e.toolsType,type:s.EPostMessageType.FullWork,workId:e.workId,ops:e.ops,updateNodeOpt:e.updateNodeOpt,viewId:this.thread.viewId,needUndoTicker:e.needUndoTicker,requestId:e.requestId,emitEventType:e.emitEventType,scenePath:e.scenePath}),e.isLockSentEventCursor&&c.push({type:s.EPostMessageType.None,isLockSentEventCursor:!0,scenePath:e.scenePath}),e.needUndoTicker&&c.push({type:s.EPostMessageType.None,needUndoTicker:e.needUndoTicker,emitEventType:e.emitEventType,requestId:e.requestId,scenePath:e.scenePath}),c.length&&this.thread.post({sp:c})}}async colloctEffectSelectWork(e){const t=this.workShapes.get(s.Storage_Selector_key),{workId:r,msgType:o}=e;if(t&&r&&t.selectIds&&t.selectIds.includes(r.toString())){o===s.EPostMessageType.RemoveNode?t.selectIds=t.selectIds.filter(a=>a!==r.toString()):this.effectSelectNodeData.add(e),await this.runEffectSelectWork(!0);return}return e}async runEffectSelectWork(e){var t;for await(const r of this.effectSelectNodeData.values()){const o=this.setFullWork(r);if(o){const a=(t=r.workId)==null?void 0:t.toString();if(o.toolsType===s.EToolsKey.BackgroundSVG)o.consumeService({isFullWork:!0,replaceId:a});else if(o.toolsType===s.EToolsKey.Image)await o.consumeServiceAsync({isFullWork:!0,replaceId:a,worker:this});else if(o.toolsType===s.EToolsKey.Text)await o.consumeServiceAsync({isFullWork:!0,replaceId:a,boxRect:this.thread.getSceneRect()});else{const i=r.ops&&s.transformToNormalData(r.ops);o.consumeService({op:i,isFullWork:!0,replaceId:a}),r!=null&&r.updateNodeOpt&&o.updataOptService(r.updateNodeOpt)}r.workId&&this.workShapes.delete(r.workId.toString())}this.effectSelectNodeData.delete(r)}this.reRenderSelector(e)}hasSelector(){return this.workShapes.has(s.Storage_Selector_key)}getSelector(){return this.workShapes.get(s.Storage_Selector_key)}reRenderSelector(e=!1){var o;const t=this.workShapes.get(s.Storage_Selector_key);if(!t)return;if(t&&!((o=t.selectIds)!=null&&o.length))return this.blurSelector();const r=t.reRenderSelector();r&&this.thread.post({sp:[{type:s.EPostMessageType.Select,selectIds:t.selectIds,selectRect:r,willSyncService:e,viewId:this.thread.viewId,points:t.getChildrenPoints(),textOpt:t.textOpt,selectorColor:t.selectorColor,strokeColor:t.strokeColor,fillColor:t.fillColor,canTextEdit:t.canTextEdit,canRotate:t.canRotate,scaleType:t.scaleType,opt:t.getWorkOptions()||void 0,canLock:t.canLock,isLocked:t.isLocked,toolsTypes:t.toolsTypes,shapeOpt:t.shapeOpt,thickness:t.thickness,useStroke:t.useStroke,strokeType:t.strokeType}]})}async blurSelector(e){var o;const t=this.workShapes.get(s.Storage_Selector_key),r=t==null?void 0:t.blurSelector();if(this.clearWorkShapeNodeCache(s.Storage_Selector_key),((o=this.thread.fullLayer)==null?void 0:o.parent).children.forEach(a=>{a.name===s.Storage_Selector_key&&a.remove()}),r){const a=[];a.push({...r,isSync:e==null?void 0:e.isSync,scenePath:e==null?void 0:e.scenePath}),this.thread.post({sp:a})}}clearWorkShapeNodeCache(e){var t;(t=this.getWorkShape(e))==null||t.clearTmpPoints(),this.workShapes.delete(e)}abortBitmapEraser(e){const t=this.workShapes.get(e);(t==null?void 0:t.toolsType)===s.EToolsKey.BitMapEraser&&(t.clearTmpPoints(),this.workShapes.delete(e),this.combineDrawActiveId===e&&(this.combineDrawActiveId=void 0),this.drawWorkActiveId===e&&(this.drawWorkActiveId=void 0),this.bitmapEraserRenderQueue=Promise.resolve())}publishBitmapEraserBeforeImages(e,t){t.size&&this.thread.post({sp:[{type:s.EPostMessageType.None,viewId:this.thread.viewId,eraseTxnId:e,eraseTxnBeforeImages:new Map(t)}]})}async drawBitMapEraserFull(e,t,r,o){const{willUpdateNodes:a,willDeleteNodes:i,eraseTxnRecoveryRequired:n,eraseTxnBeforeImages:c}=t,l=e.getWorkId(),d=[...a?Array.from(a.keys()).map(p=>String(p)):[],...i?Array.from(i):[]],h=[];if(o&&h.push({type:s.EPostMessageType.None,needUndoTicker:o,undoScopeIds:d,undoScopePhase:"finalize",eraseTxnId:l,eraseTxnRecoveryRequired:n,eraseTxnBeforeImages:c}),h.push({type:s.EPostMessageType.RemoveNode,removeIds:[l],eraseTxnId:l,viewId:this.thread.viewId,needUndoTicker:o,eraseTxnRecoveryRequired:n,eraseTxnBeforeImages:c}),r&&h.push({type:s.EPostMessageType.None,isLockSentEventCursor:r}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[p,y]of a)h.push({type:s.EPostMessageType.UpdateNode,dataType:s.EDataType.Local,opt:y.opt,workId:p,updateNodeOpt:{useAnimation:!1},eraseTxnId:l,needUndoTicker:o});i!=null&&i.size&&h.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],eraseTxnId:l,viewId:this.thread.viewId,needUndoTicker:o})}h.push({type:s.EPostMessageType.None,viewId:this.thread.viewId,eraseTxnId:l,eraseTxnPhase:t.eraseTxnCommitStatus==="failed"||n?"failed":"applied",eraseTxnRecoveryRequired:n,eraseTxnBeforeImages:c}),h.length&&this.thread.post({sp:h})}drawPencilEraserFull(e,t,r,o){const{willNewNodes:a,willDeleteNodes:i}=t,n=e.getWorkId(),c=[...a?Array.from(a.keys()).map(d=>String(d)):[],...i?Array.from(i):[]],l=[];if(o&&c.length&&l.push({type:s.EPostMessageType.None,needUndoTicker:o,undoScopeIds:c}),l.push({type:s.EPostMessageType.RemoveNode,removeIds:[n],viewId:this.thread.viewId,needUndoTicker:o}),r&&l.push({type:s.EPostMessageType.None,isLockSentEventCursor:r}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[d,h]of a)l.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:h.toolsType,ops:s.transformToSerializableData(h.op),opt:h.opt,workId:d,updateNodeOpt:{useAnimation:!1},needUndoTicker:o});i!=null&&i.size&&l.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],viewId:this.thread.viewId,needUndoTicker:o})}l.length&&this.thread.post({sp:l})}drawEraser(e,t,r,o){const a=[],i=e.removeIds||[];o&&i.length&&a.push({type:s.EPostMessageType.None,collectUndoTicker:o,undoScopeIds:i,undoScopePhase:"collect"}),e.removeIds&&a.push({...e,needUndoTicker:r,collectUndoTicker:o}),t&&a.push({type:s.EPostMessageType.None,isLockSentEventCursor:t}),r&&a.push({type:s.EPostMessageType.None,needUndoTicker:r,undoScopePhase:"finalize"}),this.thread.post({sp:a,consumeCount:this.consumeCount})}getWorkShape(e){return this.workShapes.get(e)}getWorkShapes(){return this.workShapes}async consumeDraw(e,t){const{op:r,workId:o,scenePath:a,postCount:i,smoothSync:n}=e;if(r!=null&&r.length&&o){const c=o.toString(),l=this.workShapes.get(c);if(!l)return;const d=l.toolsType;if(d===s.EToolsKey.LaserPen)return;if(this.combineDrawActiveId&&this.combineDrawActiveId!==c){const h=this.combineDrawActiveId;this.eraserBatchScheduler.cancel(),this.combineDrawActiveId=void 0,await this.consumeDrawAll({workId:h,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},t)}switch(this.drawWorkActiveId&&this.drawWorkActiveId!==c&&(await this.consumeDrawAll({workId:this.drawWorkActiveId,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},t),this.drawWorkActiveId=void 0),!this.drawWorkActiveId&&c!==s.Storage_Selector_key&&(this.drawWorkActiveId=c),D.isNumber(i)&&(this.consumeCount=i),d){case s.EToolsKey.Selector:{const h=l.consume({data:e,isFullWork:!0,isMainThread:!0});this.fullWorkerDrawCount++;const p=[];h.type===s.EPostMessageType.Select&&(h.selectIds&&t.runReverseSelectWork(h.selectIds),p.push({...h,scenePath:a})),await this.thread.fullLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:p});break}case s.EToolsKey.PencilEraser:{l.consume({data:e,isFullWork:!1,isMainThread:!0}),this.fullWorkerDrawCount++,await this.thread.localLayer.parent.prepareRender,this.thread.post({sp:void 0,consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount}),this.combineDrawActiveId=c,this.eraserBatchScheduler.schedule(()=>{this.drawPencilEraserCombine(c,e.needUndoTicker,e.collectUndoTicker)},s.getEraserBatchDelay(this.thread.master.maxCombineEraserTime));break}case s.EToolsKey.BitMapEraser:{l.consume({data:e,isFullWork:!1,isMainThread:!0}),this.fullWorkerDrawCount++,this.combineDrawActiveId=c,await this.enqueueBitmapEraserRender(c,e.needUndoTicker,e.collectUndoTicker,{consumeCount:this.consumeCount,consumeWorkId:c});break}case s.EToolsKey.Eraser:{const h=l.consume({data:e,isFullWork:!0});await this.thread.fullLayer.parent.prepareRender,this.drawEraser(h,void 0,e.needUndoTicker,e.collectUndoTicker)}break;case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Ellipse:case s.EToolsKey.Rectangle:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:case s.EToolsKey.Pencil:{const h=l.consume({data:e,isFullWork:!1,isMainThread:!0,smoothSync:n});h&&(this.fullWorkerDrawCount++,await this.thread.localLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:h.op&&[{...h,scenePath:a}]||void 0}))}break}}}enqueueBitmapEraserRender(e,t,r,o){const a=this.bitmapEraserRenderQueue.then(async()=>{this.combineDrawActiveId!==e||!this.getWorkShape(e)||await this.postEraserBatch(e,t,r,o)});return this.bitmapEraserRenderQueue=a.catch(()=>{}),a}async drawPencilEraserCombine(e,t,r){await this.postEraserBatch(e,t,r)}async postEraserBatch(e,t,r,o){var i,n,c,l,d,h;const a=(i=this.workShapes.get(e))==null?void 0:i.combineConsume({workerEngine:this});if(a||o){const p=a==null?void 0:a.willDeleteNodes,y=a==null?void 0:a.willNewNodes,f=[...p?Array.from(p):[]],S={render:[],sp:[],...o};if(a!=null&&a.rect){const k=s.getSafetyRect(a.rect);(n=S.render)==null||n.push({rect:k,isClear:!0,clearCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId,eraseTxnId:e},{rect:k,drawCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId,eraseTxnId:e})}if(r&&f.length&&((c=this.getWorkShape(e))==null?void 0:c.toolsType)===s.EToolsKey.BitMapEraser&&((l=S.sp)==null||l.push({type:s.EPostMessageType.None,collectUndoTicker:r,undoScopeIds:f,undoScopePhase:"collect"})),p!=null&&p.size&&((d=S.sp)==null||d.push({type:s.EPostMessageType.RemoveNode,removeIds:[...p],viewId:this.thread.viewId,needUndoTicker:t,collectUndoTicker:r})),y!=null&&y.size)for(const[k,E]of y)(h=S.sp)==null||h.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:E.toolsType,ops:s.transformToSerializableData(E.op),opt:E.opt,workId:k,updateNodeOpt:{useAnimation:!1},needUndoTicker:t,collectUndoTicker:r});a!=null&&a.rect&&await this.thread.fullLayer.parent.prepareRender,this.thread.post(S)}}async consumeDrawAll(e,t){var n,c,l;this.eraserBatchScheduler.cancel();const{workId:r,scenePath:o,isLockSentEventCursor:a}=e,i=e.needUndoTicker;if(r){this.combineDrawActiveId===r.toString()&&(this.combineDrawActiveId=void 0);const d=r.toString();this.drawWorkActiveId===d&&(this.drawWorkActiveId=void 0);const h=this.workShapes.get(d);if(!h)return;const p=h.toolsType;if(p===s.EToolsKey.LaserPen)return;p===s.EToolsKey.BitMapEraser&&await this.bitmapEraserRenderQueue;const y=this.workShapes.get(s.Cursor_Hover_Id),f=(n=y==null?void 0:y.selectIds)==null?void 0:n[0],S=await h.consumeAll({data:e,workerEngine:this});switch(p){case s.EToolsKey.Selector:{S.selectIds&&f&&((c=S.selectIds)!=null&&c.includes(f))&&y.cursorBlur();const k=[];a&&k.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:o}),S.type===s.EPostMessageType.Select&&(S.selectIds&&t.runReverseSelectWork(S.selectIds),k.push({...S,scenePath:o})),k.length&&this.thread.post({sp:k}),(l=h.selectIds)!=null&&l.length?h.clearTmpPoints():this.clearWorkShapeNodeCache(d)}break;case s.EToolsKey.PencilEraser:await this.drawPencilEraserFull(h,S,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(d);break;case s.EToolsKey.BitMapEraser:await this.drawBitMapEraserFull(h,S,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(d);break;case s.EToolsKey.Eraser:await this.drawEraser({...S,scenePath:o},a,i,e.collectUndoTicker),h.clearTmpPoints();break;case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Ellipse:case s.EToolsKey.Rectangle:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:case s.EToolsKey.Pencil:{const k=[];if(a&&k.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:o}),S){const w=p===s.EToolsKey.Pencil&&S.type===s.EPostMessageType.RemoveNode;w?s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent):k.push({...S,scenePath:o,needUndoTicker:e.needUndoTicker,undoScopeIds:S.undoScopeIds||(S.workId!==void 0?[S.workId.toString()]:void 0),undoScopePhase:S.undoScopePhase||"finalize"}),this.fullWorkerDrawCount=0,e.needUndoTicker&&k.push({type:s.EPostMessageType.None,needUndoTicker:e.needUndoTicker,scenePath:o,undoScopeIds:w?[]:void 0,undoScopePhase:w?"finalize":void 0}),(w?this.thread.localLayer:this.thread.fullLayer).parent.prepareRender.then(()=>{this.thread.post({fullWorkerDrawCount:this.fullWorkerDrawCount,sp:k})})}this.clearWorkShapeNodeCache(d);break}}}}getToolsOpt(){return this.tmpOpt}setToolsOpt(e){var t,r;if((t=this.tmpOpt)!=null&&t.toolsType&&this.tmpOpt.toolsType!==e.toolsType){this.eraserBatchScheduler.cancel();for(const[o,a]of this.workShapes)o!==s.Storage_Selector_key&&(a.clearTmpPoints(),this.workShapes.delete(o))}this.tmpOpt=e,(r=e.toolsOpt)!=null&&r.syncUnitTime&&(this.syncUnitTime=e.toolsOpt.syncUnitTime)}setWorkOptions(e,t){let r=this.workShapes.get(e);if(!r&&this.tmpOpt){const{toolsType:o}=this.tmpOpt;this.tmpOpt.toolsOpt=t,r=this.createWorkShapeNode({workId:e,toolsType:o,toolsOpt:t}),r&&this.workShapes.set(e,r),this.setToolsOpt(this.tmpOpt)}t.syncUnitTime||(t.syncUnitTime=this.syncUnitTime),r==null||r.setWorkOptions(t)}createWorkShapeNode(e){return s.getShapeInstance({...e,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.localLayer},this.thread.serviceWork)}}class q{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"workShapes",new Map);u(this,"selectorWorkShapes",new Map);u(this,"willRunEffectSelectorIds",new Set);u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);u(this,"animationScheduler");u(this,"effectScheduler");this.vNodes=e.vNodes,this.thread=e.thread,this.animationScheduler=new s.ServiceRenderScheduler({run:async()=>{try{await this.animationDraw()}catch(t){throw s.toRendererBusinessError(t,{business:"service-render",stage:"animation-draw"})}},schedule:t=>requestAnimationFrame(t),cancel:t=>cancelAnimationFrame(t),onError:t=>this.thread.reportRendererBusinessError(t,{business:"service-render",stage:"animation-draw"})}),this.effectScheduler=new s.ServiceRenderScheduler({run:async()=>{try{await this.effectRunSelector()}catch(t){throw s.toRendererBusinessError(t,{business:"service-render",stage:"selector-effect"})}},schedule:t=>setTimeout(t,0),cancel:t=>clearTimeout(t),onError:t=>this.thread.reportRendererBusinessError(t,{business:"service-render",stage:"selector-effect"})})}async loadImageBitMap(e){return await this.thread.loadImageBitMap(e)}destroy(){this.animationScheduler.destroy(),this.effectScheduler.destroy(),this.clearAll()}clearAll(){this.thread.serviceLayer.children.length&&(this.thread.serviceLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.workShapes.clear(),this.selectorWorkShapes.clear(),this.willRunEffectSelectorIds.clear()}runEffect(){this.effectScheduler.request()}effectRunSelector(){this.willRunEffectSelectorIds.forEach(e=>{var r,o;const t=this.selectorWorkShapes.get(e);t&&t.selectIds&&((r=t.node)==null||r.selectServiceNode(e,t,!0)),(o=t==null?void 0:t.selectIds)!=null&&o.length||this.selectorWorkShapes.delete(e)}),this.willRunEffectSelectorIds.clear()}runSelectWork(e){this.activeSelectorShape(e);const{workId:t}=e,r=t==null?void 0:t.toString();r&&this.willRunEffectSelectorIds.add(r),this.runEffect()}removeWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();if(r){if(this.workShapes.get(r)){this.workShapes.delete(r),this.removeNode(r,e);return}this.removeNode(r,e)}}consumeFull(e){if(this.activeWorkShape(e),e.refreshTextRender){this.runAnimation(!0);return}this.runAnimation()}runReverseSelectWork(e){e.forEach(t=>{this.selectorWorkShapes.forEach((r,o)=>{var a;if((a=r.selectIds)!=null&&a.length){const i=r.selectIds.indexOf(t);i>-1&&(r.selectIds.splice(i,1),this.willRunEffectSelectorIds.add(o))}})}),this.willRunEffectSelectorIds.size&&this.runEffect()}consumeDraw(e){this.activeWorkShape(e),this.runAnimation()}computNextAnimationIndex(e,t){const r=Math.floor((e.animationWorkData||[]).slice(e.animationIndex).length*32/t/this.syncUnitTime)*t;return Math.min((e.animationIndex||0)+(r||t),(e.animationWorkData||[]).length)}async animationDraw(){var o,a,i,n,c,l,d,h,p,y,f,S,k,E,w,m,v,g,M,W,C;let e=!1;const t=new Map,r=[];for(const[I,T]of this.workShapes.entries())switch(T.toolsType){case s.EToolsKey.BackgroundSVG:{(o=T.node)==null||o.consumeService({isFullWork:!0,replaceId:I}),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Image:{await((a=T.node)==null?void 0:a.consumeServiceAsync({isFullWork:!0,worker:this})),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Text:{T.node&&(await((i=T.node)==null?void 0:i.consumeServiceAsync({isFullWork:!0,replaceId:I,boxRect:this.thread.getSceneRect()})),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),T.refreshTextRender&&T.requestId&&r.push({type:s.EPostMessageType.RefreshTextRender,requestId:T.requestId,workId:I,viewId:this.thread.viewId}),(n=T.node)==null||n.clearTmpPoints(),this.workShapes.delete(I));break}case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Rectangle:case s.EToolsKey.Ellipse:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:{const R=!!T.ops;if((c=T.animationWorkData)!=null&&c.length){const P=T.oldRect;(l=T.node)==null||l.consumeService({op:T.animationWorkData,isFullWork:R}),R&&(this.selectorWorkShapes.forEach((N,L)=>{var O;(O=N.selectIds)!=null&&O.includes(I)&&(this.willRunEffectSelectorIds.add(L),this.runEffect())}),(d=T.node)==null||d.clearTmpPoints(),this.workShapes.delete(I)),T.isEnableCursor?t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:P?T.ops?s.EventWorkState.Done:s.EventWorkState.Doing:s.EventWorkState.Start,op:T.animationWorkData.slice(-3,-1)}):R&&!T.useAnimation&&((h=T.updateNodeOpt)!=null&&h.useAnimation)&&t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:s.EventWorkState.Done,op:T.animationWorkData.slice(-3,-1),uid:(p=T.updateNodeOpt)==null?void 0:p.uid}),T.animationWorkData.length=0}break}case s.EToolsKey.Pencil:{if(T.useAnimation){if(T.useAnimation){if(T.isDel){(m=T.node)==null||m.clearTmpPoints(),this.workShapes.delete(I);break}const R=3,P=this.computNextAnimationIndex(T,R),N=T.isDiff?0:Math.max(0,(T.animationIndex||0)-R),L=(T.animationWorkData||[]).slice(N,P),O=(g=(v=T.node)==null?void 0:v.getWorkId())==null?void 0:g.toString();if((T.animationIndex||0)<P||T.isDiff){if((M=T.node)==null||M.consumeService({op:L,isFullWork:!1}),T.animationIndex=P,T.isDiff&&(T.isDiff=!1),L.length&&T.isEnableCursor){const A=L.slice(-3,-1);t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:N===0?s.EventWorkState.Start:P===((W=T.animationWorkData)==null?void 0:W.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:A})}}else T.ops&&((C=T.node)==null||C.consumeService({op:T.animationWorkData||[],isFullWork:!0,replaceId:O}),T.isDel=!0,T.isEnableCursor&&t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:s.EventWorkState.Done,op:L.slice(-3,-1)}));e=!0;break}}else{const R=!!T.ops;if((y=T.node)==null||y.consumeService({op:T.animationWorkData||[],isFullWork:R,replaceId:I}),(f=T.node)==null||f.updataOptService(T.updateNodeOpt),R){if(!T.isEnableCursor&&((S=T.updateNodeOpt)!=null&&S.useAnimation)&&((k=T.animationWorkData)!=null&&k.length)){const P=T.animationWorkData.slice(-3,-1);t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:s.EventWorkState.Done,op:P,uid:(E=T.updateNodeOpt)==null?void 0:E.uid})}this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),(w=T.node)==null||w.clearTmpPoints(),this.workShapes.delete(I)}}break}}e&&this.runAnimation(),t.size&&t.forEach((I,T)=>{r.push({type:s.EPostMessageType.Cursor,uid:I.uid||T.split(s.Storage_Splitter)[0],op:I.op,workState:I.workState,cursorTool:I.cursorTool,viewId:this.thread.viewId})}),r.length&&this.thread.post({sp:r})}runAnimation(e=!1){this.animationScheduler.request(e)}async flush(){await this.animationScheduler.flush(),await this.effectScheduler.flush()}hasDiffData(e,t,r){const o=e.length;if(t.length<o)return!0;switch(r){case s.EToolsKey.Pencil:{for(let a=0;a<o;a+=3)if(t[a]!==e[a]||t[a+1]!==e[a+1])return!0;break}case s.EToolsKey.LaserPen:{for(let a=0;a<o;a+=2)if(t[a]!==e[a]||t[a+1]!==e[a+1])return!0;break}}return!1}activeWorkShape(e){var E,w,m,v;const{workId:t,opt:r,toolsType:o,type:a,updateNodeOpt:i,ops:n,op:c,useAnimation:l,imageBitmap:d,isEnableCursor:h,requestId:p,refreshTextRender:y}=e;if(!t)return;const f=t.toString(),S=(E=this.vNodes.get(f))==null?void 0:E.rect;if(!((w=this.workShapes)!=null&&w.has(f))){let g={toolsType:o,animationWorkData:c||[],animationIndex:0,type:a,updateNodeOpt:i,ops:n,useAnimation:typeof l<"u"?l:typeof(i==null?void 0:i.useAnimation)<"u"?i==null?void 0:i.useAnimation:!0,oldRect:S,isDiff:!1,imageBitmap:d,isEnableCursor:h};o&&r&&(g=this.setNodeKey(f,g,o,r)),(m=this.workShapes)==null||m.set(f,g)}const k=(v=this.workShapes)==null?void 0:v.get(f);k.isEnableCursor=h,k.requestId=p,k.refreshTextRender=!!y,a&&(k.type=a),n&&(k.animationWorkData=s.transformToNormalData(n),k.ops=n),i&&(k.updateNodeOpt=i),c&&(k.isDiff=this.hasDiffData(k.animationWorkData||[],c,k.toolsType),k.toolsType,s.EToolsKey.Pencil,k.animationWorkData=c),k.node&&k.node.getWorkId()!==f&&k.node.setWorkId(f),S&&(k.oldRect=S),o&&r&&(r.syncUnitTime&&(this.syncUnitTime=r.syncUnitTime),k.toolsType!==o&&o&&r&&this.setNodeKey(f,k,o,r),k.node&&k.node.setWorkOptions(r)),d&&(k.imageBitmap=d)}removeNode(e,t){e.indexOf(s.Storage_Selector_key)>-1&&this.removeSelectWork(t),this.thread.fullLayer.getElementsByName(e).forEach(o=>{o.remove(),s.removeTexture(o,this.thread.fullLayer.parent)}),this.thread.serviceLayer.getElementsByName(e).forEach(o=>{o.remove(),s.removeTexture(o,this.thread.serviceLayer.parent)});const r=this.vNodes.get(e);r&&r.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:e,dataType:s.EDataType.Service,viewId:this.thread.viewId}]}),this.vNodes.delete(e)}removeSelectWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();r&&(this.activeSelectorShape(e),this.willRunEffectSelectorIds.add(r)),this.runEffect()}activeSelectorShape(e){var l,d,h;const{workId:t,opt:r,toolsType:o,type:a,selectIds:i}=e;if(!t)return;const n=t.toString();if(!((l=this.selectorWorkShapes)!=null&&l.has(n))){let p={toolsType:o,selectIds:i,type:a,opt:r};o&&r&&(p=this.setNodeKey(n,p,o,r)),(d=this.selectorWorkShapes)==null||d.set(n,p)}const c=(h=this.selectorWorkShapes)==null?void 0:h.get(n);a&&(c.type=a),c.node&&c.node.getWorkId()!==n&&c.node.setWorkId(n),c.selectIds=i||[]}setNodeKey(e,t,r,o){return t.toolsType=r,t.node=s.getShapeInstance({toolsType:r,toolsOpt:o,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.serviceLayer,workId:e},this),t}}class B{constructor(){u(this,"localWork");u(this,"serviceWork");u(this,"threadEngine")}registerMainThread(e){return this.threadEngine=e,this.localWork=e.localWork,this.serviceWork=e.serviceWork,this}}class K extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.CopyNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.FullWork&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var o;const{workId:r}=t;r&&await((o=this.localWork)==null?void 0:o.consumeFull(t))}}class _ extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetColorNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var h;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,needUndoTicker:l,requestId:d}=t;r===s.Storage_Selector_key&&o&&await((h=this.localWork)==null?void 0:h.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:d,textUpdateForWoker:c,callback:this.updateSelectorCallback,needUndoTicker:l}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,textUpdateForWoker:c,needUndoTicker:l,requestId:d,emitEventType:h}=r,p=o.sp||[];if(i)for(const[y,f]of a.entries())c&&f.toolsType===s.EToolsKey.Text?p.push({...f,workId:y,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:h,requestId:d,needUndoTicker:l}):p.push({...f,workId:y,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:h,requestId:d,needUndoTicker:l});return l&&p.push({type:s.EPostMessageType.None,needUndoTicker:l}),{sp:p}}}class z extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.ZIndexNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,needUndoTicker:c,requestId:l,emitEventType:d}=r,h=o.sp||[];if(i&&h)for(const[p,y]of a.entries())y.toolsType===s.EToolsKey.BackgroundSVG&&h.push({...y,workId:p,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,updateNodeOpt:{useAnimation:!1},needUndoTicker:c,emitEventType:d,requestId:l}),h.push({...y,workId:p,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:d,requestId:l,needUndoTicker:c});return c&&h.push({type:s.EPostMessageType.None,needUndoTicker:c}),{sp:h}}}class V extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.TranslateNode);u(this,"updateSelectorCallback",t=>{var E;const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n,smoothSync:c}=t,{willSyncService:l,isSync:d,updateSelectorOpt:h,textUpdateForWoker:p,needUndoTicker:y}=r,f=h.workState,S=o.sp||[];if(f===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}],render:[]};const k=n==null?void 0:n.selectRect;if(l){const w=f===s.EventWorkState.Done?y:void 0;S.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:k,willSyncService:f===s.EventWorkState.Done?!0:c,isSync:!0,points:f===s.EventWorkState.Done&&i.getChildrenPoints()||void 0,textOpt:i.textOpt,needUndoTicker:w,emitEventType:this.emitEventType});const m={workState:f,useAnimation:h.useAnimation||!1};h.uid&&(m.uid=h.uid);for(const[v,g]of a.entries())g.toolsType===s.EToolsKey.BackgroundSVG&&S.push({...g,workId:v,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:f===s.EventWorkState.Done?!0:c,updateNodeOpt:m,needUndoTicker:w,emitEventType:this.emitEventType}),p&&g.toolsType===s.EToolsKey.Text?S.push({...g,workId:v,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:f===s.EventWorkState.Done?!0:c,updateNodeOpt:m,needUndoTicker:w,emitEventType:this.emitEventType}):(c||f===s.EventWorkState.Done)&&S.push({...g,workId:v,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...m,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((E=this.localWork)==null?void 0:E.vNodes,v)},isSync:d,needUndoTicker:w,emitEventType:this.emitEventType})}return y&&S.push({type:s.EPostMessageType.None,needUndoTicker:y}),S.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}),{sp:S}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var p,y;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,emitEventType:l,smoothSync:d,needUndoTicker:h}=t;r===s.Storage_Selector_key&&o&&(o.workState===s.EventWorkState.Done&&(o!=null&&o.translate)&&(o.translate[0]||o.translate[1])||o.workState!==s.EventWorkState.Done?await((p=this.localWork)==null?void 0:p.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,isSync:!0,textUpdateForWoker:c,emitEventType:l,callback:this.updateSelectorCallback,smoothSync:d,needUndoTicker:h})):o.workState===s.EventWorkState.Done&&((y=this.localWork)==null||y.vNodes.deleteLastTarget()))}}class $ extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.ScaleNode);u(this,"updateSelectorCallback",t=>{var k;const{param:r,postData:o,workShapeNode:a,res:i,newServiceStore:n,smoothSync:c}=t,{updateSelectorOpt:l,willSyncService:d,needUndoTicker:h}=r,p=l.workState,y=o.sp||[],f=i==null?void 0:i.selectRect,S=p===s.EventWorkState.Done?h:void 0;if(p===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:p}],render:[]};if(d){y.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:f,willSyncService:p===s.EventWorkState.Done?!0:c,isSync:!0,points:p===s.EventWorkState.Done&&a.getChildrenPoints()||void 0,textOpt:a.textOpt});const E={useAnimation:l.useAnimation||!1};l.uid&&(E.uid=l.uid);for(const[w,m]of n.entries())m.toolsType===s.EToolsKey.BackgroundSVG&&y.push({...m,workId:w,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:p===s.EventWorkState.Done?!0:c,updateNodeOpt:E,needUndoTicker:S,emitEventType:this.emitEventType}),m.toolsType===s.EToolsKey.Text?y.push({...m,workId:w,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:p===s.EventWorkState.Done?!0:c,updateNodeOpt:E,needUndoTicker:S,emitEventType:this.emitEventType}):(c||p===s.EventWorkState.Done)&&y.push({...m,workId:w,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...E,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((k=this.localWork)==null?void 0:k.vNodes,w)},isSync:!0,needUndoTicker:S,emitEventType:this.emitEventType})}return h&&y.push({type:s.EPostMessageType.None,needUndoTicker:h}),y.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:p}),{sp:y}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var l;const{workId:r,updateNodeOpt:o,willSyncService:a,willSerializeData:i,smoothSync:n,needUndoTicker:c}=t;r===s.Storage_Selector_key&&o&&await((l=this.localWork)==null?void 0:l.updateSelector({updateSelectorOpt:o,willSyncService:a,willSerializeData:i,isSync:!0,callback:this.updateSelectorCallback.bind(this),smoothSync:n,needUndoTicker:c}))}}class H extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.RotateNode);u(this,"updateSelectorCallback",t=>{var w;const{param:r,postData:o,workShapeNode:a,res:i,newServiceStore:n,smoothSync:c}=t,{updateSelectorOpt:l,willSyncService:d,willSerializeData:h,isSync:p,needUndoTicker:y}=r,f=l.workState,S=o.sp||[],k=i==null?void 0:i.selectRect,E=f===s.EventWorkState.Done?y:void 0;if(d){h&&f===s.EventWorkState.Done&&S.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:k,willSyncService:f===s.EventWorkState.Done?!0:c,isSync:p,points:a.getChildrenPoints()});const m={useAnimation:l.useAnimation||!1};if(l.uid&&(m.uid=l.uid),c||f===s.EventWorkState.Done)for(const[v,g]of n.entries())S.push({...g,workId:v,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...m,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((w=this.localWork)==null?void 0:w.vNodes,v)},isSync:p,needUndoTicker:E,emitEventType:this.emitEventType})}return y&&S.push({type:s.EPostMessageType.None,needUndoTicker:y}),S.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}),{sp:S}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var h;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:c,smoothSync:l,needUndoTicker:d}=t;r===s.Storage_Selector_key&&o&&await((h=this.localWork)==null?void 0:h.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:c,isSync:!0,callback:this.updateSelectorCallback,smoothSync:l,needUndoTicker:d}))}}class Q extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetFontStyle)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,textUpdateForWoker:c,callback:this.updateSelectorCallback}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,updateSelectorOpt:d,textUpdateForWoker:h,requestId:p,emitEventType:y}=r,f=o.sp||[],S=n==null?void 0:n.selectRect;if(c&&f){d.fontSize&&f.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:S,willSyncService:c,isSync:l,points:i.getChildrenPoints()});for(const[k,E]of a.entries())h&&E.toolsType===s.EToolsKey.Text?f.push({...E,workId:k,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:y,requestId:p}):f.push({...E,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:y,requestId:p})}return{sp:f}}}class X extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetPoint);u(this,"updateSelectorCallback",t=>{const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,needUndoTicker:d}=r,h=o.sp||[],p=n==null?void 0:n.selectRect;if(c&&h){for(const[y,f]of a.entries())h.push({...f,workId:y,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,needUndoTicker:d,emitEventType:this.emitEventType});h.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:p,willSyncService:c,isSync:l,points:i.getChildrenPoints()})}return d&&h.push({type:s.EPostMessageType.None,needUndoTicker:d}),h.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:r.updateSelectorOpt.workState}),{sp:h}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,needUndoTicker:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,emitEventType:this.emitEventType,willSerializeData:n,isSync:!0,textUpdateForWoker:c,callback:this.updateSelectorCallback,needUndoTicker:l}))}}class Y extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetLock)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,updateSelectorOpt:d,needUndoTicker:h,requestId:p,emitEventType:y}=r,f=o.sp||[],S=n==null?void 0:n.selectRect;if(c&&f){for(const[k,E]of a.entries())f.push({...E,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:y,requestId:p});f.push({isLocked:d.isLocked,selectorColor:i.selectorColor,scaleType:i.scaleType,canRotate:i.canRotate,type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:S,willSyncService:c,isSync:l})}return h&&f.push({type:s.EPostMessageType.None,needUndoTicker:h}),{sp:f}}}class Z extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetShapeOpt)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,needUndoTicker:c,requestId:l,emitEventType:d}=r,h=o.sp||[];if(i&&h)for(const[p,y]of a.entries())h.push({...y,workId:p,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:d,requestId:l});return c&&h.push({type:s.EPostMessageType.None,needUndoTicker:c}),{sp:h}}}class j{constructor(e){u(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case s.EmitEventType.TranslateNode:return new V;case s.EmitEventType.ZIndexNode:return new z;case s.EmitEventType.CopyNode:return new K;case s.EmitEventType.SetColorNode:return new _;case s.EmitEventType.ScaleNode:return new $;case s.EmitEventType.RotateNode:return new H;case s.EmitEventType.SetFontStyle:return new Q;case s.EmitEventType.SetPoint:return new X;case s.EmitEventType.SetLock:return new Y;case s.EmitEventType.SetShapeOpt:return new Z}}registerForMainThread(e){return this.builders.forEach(t=>{t&&t.registerMainThread(e)}),this}async consumeForMainThread(e){for(const t of this.builders.values())if(await(t==null?void 0:t.consume(e)))return!0;return!1}}function J({subThreads:b,layers:e,scene:t,removeLayerTexture:r}){let o;for(const a of b)try{a.destroy()}catch(i){o||(o=i)}for(const a of e){const i=a.parent;if(i)try{r(a,i)}catch(n){o||(o=n)}try{a.remove()}catch(n){o||(o=n)}}try{t.remove()}catch(a){o||(o=a)}if(o)throw o}const ee=4;class te{constructor(e={}){u(this,"pendingFrames",new Map);u(this,"failedCanvases",new Set);u(this,"tailFrameCount");u(this,"requestFrame");u(this,"cancelFrame");u(this,"onReadbackError");u(this,"frameHandle");u(this,"destroyed",!1);this.tailFrameCount=Math.max(1,Math.floor(e.tailFrameCount??ee)),this.requestFrame=e.requestFrame??(t=>requestAnimationFrame(t)),this.cancelFrame=e.cancelFrame??(t=>cancelAnimationFrame(t)),this.onReadbackError=e.onReadbackError}markRendered(e){this.destroyed||(this.pendingFrames.set(e,this.tailFrameCount),this.schedule())}destroy(){this.destroyed||(this.destroyed=!0,this.frameHandle!==void 0&&(this.cancelFrame(this.frameHandle),this.frameHandle=void 0),this.pendingFrames.clear(),this.failedCanvases.clear())}schedule(){this.destroyed||this.frameHandle!==void 0||this.pendingFrames.size===0||(this.frameHandle=this.requestFrame(()=>this.flushFrame()))}flushFrame(){var e,t;if(this.frameHandle=void 0,!this.destroyed){for(const[r,o]of this.pendingFrames){if(!r.isConnected||r.width<=0||r.height<=0){this.pendingFrames.delete(r);continue}try{(e=r.getContext("2d"))==null||e.getImageData(0,0,1,1)}catch(a){this.failedCanvases.has(r)||(this.failedCanvases.add(r),(t=this.onReadbackError)==null||t.call(this,a))}o<=1?this.pendingFrames.delete(r):this.pendingFrames.set(r,o-1)}this.schedule()}}}class se{constructor(e,t){u(this,"viewId");u(this,"fullLayer");u(this,"topLayer");u(this,"localLayer");u(this,"serviceLayer");u(this,"snapshotFullLayer");u(this,"vNodes");u(this,"master");u(this,"opt");u(this,"cameraOpt");u(this,"scene");u(this,"localWork");u(this,"serviceWork");u(this,"topWork");u(this,"taskUpdateCameraId");u(this,"taskUpdateCameraResolve");u(this,"debounceUpdateCameraId");u(this,"activeCameraSettledRender");u(this,"activeCameraTaskContext");u(this,"debounceUpdateCache",new Set);u(this,"mainThreadPostId");u(this,"destroyed",!1);u(this,"readbackScheduler");u(this,"restoreLayerRenderCallbacks",[]);u(this,"viewOwner");u(this,"viewGeneration");u(this,"combinePostMsg",new Set);u(this,"methodBuilder");u(this,"cacheImages",new Map);u(this,"imageResolveMap",new Map);this.viewId=e,this.opt=t,this.viewOwner=t.viewOwner,this.viewGeneration=t.viewGeneration,this.scene=this.createScene({...t.canvasOpt,container:t.container}),this.master=t.master;const r=s.DefaultAppliancePluginExtrasOptions.bufferSize.full,o=s.DefaultAppliancePluginExtrasOptions.bufferSize.sub;this.fullLayer=this.createLayer("fullLayer",this.scene,{...t.layerOpt,bufferSize:this.viewId===s.Main_View_Id?r:o*2}),this.topLayer=this.createLayer("topLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),this.localLayer=this.createLayer("localLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),this.serviceLayer=this.createLayer("serviceLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),t.mainThreadRenderMode==="readback"&&this.enableCanvas2DReadback([this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent]),this.vNodes=new s.VNodeManager(e,this.scene);const a={thread:this,vNodes:this.vNodes};this.localWork=new G(a),this.serviceWork=new q(a),this.topWork=new U(a),this.vNodes.init(this.fullLayer),this.methodBuilder=new j([s.EmitEventType.CopyNode,s.EmitEventType.SetColorNode,s.EmitEventType.DeleteNode,s.EmitEventType.RotateNode,s.EmitEventType.ScaleNode,s.EmitEventType.TranslateNode,s.EmitEventType.ZIndexNode,s.EmitEventType.SetFontStyle,s.EmitEventType.SetPoint,s.EmitEventType.SetLock,s.EmitEventType.SetShapeOpt]).registerForMainThread(this)}getCachedImages(e){var t;return(t=this.cacheImages.get(e))==null?void 0:t.imageSource}getCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())if(t===e&&r.imageSource)return r.imageSource}deleteCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())r.workId===e&&(this.closeImageSource(r.imageSource),this.cacheImages.delete(t))}clearCacheImages(){this.cacheImages.forEach(e=>this.closeImageSource(e.imageSource)),this.cacheImages.clear()}closeImageSource(e){if(!(!("close"in e)||typeof e.close!="function"))try{e.close()}catch{}}clearImageResolveMap(e){this.imageResolveMap.forEach(({timer:t,resolve:r,reject:o},a)=>{t&&clearTimeout(t),e!==void 0?o==null||o(e):r==null||r(a)}),this.imageResolveMap.clear()}post(e){this.destroyed||(this.combinePostMsg.add(e),this.runBatchPostData())}reportRendererBusinessError(e,t){const r=s.toRendererBusinessError(e,t);r.reported||(r.reported=!0,this.post({sp:[{type:s.EPostMessageType.ReportError,viewId:this.viewId,viewGeneration:this.viewGeneration,reportErrorCode:"RENDERER_RUNTIME_ERROR",reportStage:r.stage,reportError:r.message,reportString:s.formatRendererBusinessError(r,t,{viewId:this.viewId,renderer:"mainThread"})}]}))}updateDpr(e){this.scene.displayRatio=e}async on(e){var t,r,o,a,i;if(this.destroyed){try{(t=e.imageBitmap)==null||t.close()}catch{}return}if(!await this.methodBuilder.consumeForMainThread(e)){const{msgType:n,toolsType:c,opt:l,dataType:d,workId:h,workState:p,imageSrc:y,imageBitmap:f,imageElement:S,workIds:k,isLockSentEventCursor:E,requestId:w}=e,m=h==null?void 0:h.toString();switch(n){case s.EPostMessageType.UpdateDpr:D.isNumber(e.dpr)&&this.updateDpr(e.dpr);break;case s.EPostMessageType.AuthClear:{const{clearUids:v,localUid:g}=e;this.vNodes.setCanClearUids(v),this.vNodes.setLocalUid(g);break}case s.EPostMessageType.Destroy:this.destroy();break;case s.EPostMessageType.CancelBitmapEraser:{const v=m;v&&this.localWork.abortBitmapEraser(v);break}case s.EPostMessageType.Clear:this.clearAll();break;case s.EPostMessageType.ServiceSyncCommit:{if(this.destroyed)break;const v=[(r=this.fullLayer)==null?void 0:r.parent,(o=this.topLayer)==null?void 0:o.parent,(a=this.localLayer)==null?void 0:a.parent,(i=this.serviceLayer)==null?void 0:i.parent].filter(Boolean);try{await s.waitForRendererBusiness((async()=>{await s.flushServiceRenderBarrier(this.serviceWork,v)})(),{business:"service-sync-commit",stage:"flush-and-prepare-render",timeoutMs:5e3})}catch(g){throw s.toRendererBusinessError(g,{business:"service-sync-commit",stage:"flush-and-prepare-render"})}if(this.destroyed)break;this.post({sp:[{type:s.EPostMessageType.ServiceSyncCommit,viewId:this.viewId,viewGeneration:this.viewGeneration,scenePath:e.scenePath,serviceSyncId:e.serviceSyncId,serviceRevision:e.serviceRevision}]});break}case s.EPostMessageType.UpdateCamera:try{await s.runCameraUpdateWithTimeout(e.cameraTaskId,async v=>{this.activeCameraTaskContext=v;try{await this.updateCamera(e,v)}finally{this.activeCameraTaskContext===v&&(this.activeCameraTaskContext=void 0)}})}catch(v){throw this.cameraOpt=void 0,this.cancelCameraSettledRender(),v}break;case s.EPostMessageType.UpdateTools:if(c&&l){const v={toolsType:c,toolsOpt:l};this.topWork.canUseTopLayer(c)?this.topWork.setToolsOpt(v):this.localWork.setToolsOpt(v)}break;case s.EPostMessageType.CreateWork:if(m&&l&&c){if(this.topWork.canUseTopLayer(c)){this.topWork.getToolsOpt()||this.topWork.setToolsOpt({toolsType:c,toolsOpt:l}),this.topWork.setWorkOptions(m,l);break}this.localWork.getToolsOpt()||this.localWork.setToolsOpt({toolsType:c,toolsOpt:l}),this.localWork.setWorkOptions(m,l)}break;case s.EPostMessageType.DrawWork:p===s.EventWorkState.Done&&d===s.EDataType.Local?(await this.consumeDrawAll(d,e),c===s.EToolsKey.LaserPen&&E&&this.post({sp:[{type:s.EPostMessageType.None,isLockSentEventCursor:E}]})):await this.consumeDraw(d,e);break;case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:if(c&&this.topWork.canUseTopLayer(c)){await this.consumeDrawAll(d,e);break}await this.consumeFull(d,e);break;case s.EPostMessageType.RemoveNode:await this.removeNode(e);return;case s.EPostMessageType.Select:d===s.EDataType.Local||h===s.Storage_Selector_key?await this.localWork.updateFullSelectWork(e):d===s.EDataType.Service&&this.serviceWork.runSelectWork(e);break;case s.EPostMessageType.CursorBlur:this.localWork.cursorBlur();return;case s.EPostMessageType.CursorHover:this.localWork.cursorHover(e);break;case s.EPostMessageType.GetTextActive:d===s.EDataType.Local&&this.localWork.checkTextActive(e);break;case s.EPostMessageType.GetImageBitMap:if(y&&(f||S)&&h){const v=this.imageResolveMap.get(y);if(!v||v.requestId!==w){this.closeImageSource(f||S);break}const g=h.toString();this.deleteCachedImagesByWorkId(g),this.cacheImages.set(y,{imageSource:f||S,workId:g});const{resolve:M,timer:W}=v;W&&clearTimeout(W),M&&M(y)}break;case s.EPostMessageType.GetVNodeInfo:if(h&&k){const v=k.map(g=>this.vNodes.get(g));this.post({sp:[{type:s.EPostMessageType.GetVNodeInfo,dataType:s.EDataType.Local,workId:h,vInfo:v}]})}break}}}getIconSize(e,t,r){const o=e*r,a=t*r;return o<=50||a<=50?[50,50]:o<=100||a<=100?[100,100]:o<=200||a<=200?[200,200]:o<=400||a<=400?[400,400]:o<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(e){const{toolsType:t,opt:r,workId:o,requestId:a}=e;if(t===s.EToolsKey.Image&&r&&o){const i=o.toString(),{src:n,type:c,width:l,height:d,strokeColor:h}=r;if(!n||!c||!l||!d)return;let p=n;if(c===s.EImageType.Iconify){const[m,v]=this.getIconSize(l,d,this.opt.displayer.dpr);p=s.getIconImageSrc(n,m,v,h)}if(this.cacheImages.has(p)){const m=this.getCachedImages(p);if(m)return m}const f=this.imageResolveMap.get(p);if(f)return await f.promise,this.getCachedImages(p);let S,k;const E=new Promise((m,v)=>{S=m,k=v}),w={resolve:S,reject:k,timer:void 0,requestId:a,promise:E};return w.timer=setTimeout(()=>{this.imageResolveMap.get(p)===w&&S(p)},5e3),this.imageResolveMap.set(p,w),this.opt.post({sp:[{imageSrc:p,workId:i,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!1,requestId:a,type:s.EPostMessageType.GetImageBitMap}]}),await E,this.imageResolveMap.get(p)===w&&this.imageResolveMap.delete(p),this.getCachedImages(p)}}async removeNode(e){const{dataType:t,workId:r,removeIds:o}=e,a=o||[];if(r&&a.push(r.toString()),a.length)for(const i of a){if(i===s.Storage_Selector_key){await this.localWork.removeSelector(e);continue}t===s.EDataType.Local?this.localWork.removeWork(e):t===s.EDataType.Service&&this.serviceWork.removeWork(e),await this.localWork.colloctEffectSelectWork(e)}}async consumeFull(e,t){const r=await this.localWork.colloctEffectSelectWork(t);r&&e===s.EDataType.Local&&await this.localWork.consumeFull(r),r&&e===s.EDataType.Service&&this.serviceWork.consumeFull(r)}setCameraOpt(e){this.cameraOpt=e;const{scale:t,centerX:r,centerY:o,width:a,height:i}=e;(a!==this.scene.width||i!==this.scene.height)&&this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[t,t]),this.fullLayer.setAttribute("translate",[-r,-o]),this.topLayer.setAttribute("scale",[t,t]),this.topLayer.setAttribute("translate",[-r,-o]),this.localLayer.setAttribute("scale",[t,t]),this.localLayer.setAttribute("translate",[-r,-o]),this.serviceLayer.setAttribute("scale",[t,t]),this.serviceLayer.setAttribute("translate",[-r,-o])}runBatchPostData(){this.destroyed||this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}combinePostData(){var a;this.mainThreadPostId=void 0;const e=[];let t,r,o;for(const i of this.combinePostMsg.values()){if((a=i.sp)!=null&&a.length)for(const n of i.sp){const c={...n,viewId:n.viewId||this.viewId,viewGeneration:n.viewGeneration??this.viewGeneration};let l=!1;for(const d of e)if(D.isEqual(c,d)){l=!0;break}l||e.push(c)}D.isNumber(i.fullWorkerDrawCount)&&(t=i.fullWorkerDrawCount),D.isNumber(i.consumeCount)&&(r=i.consumeCount,o=i.consumeWorkId)}return this.combinePostMsg.clear(),{sp:e,fullWorkerDrawCount:t,consumeCount:r,consumeWorkId:o,viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner}}combinePost(){var r,o;if(this.destroyed){this.mainThreadPostId=void 0,this.combinePostMsg.clear();return}const e=this.combinePostData(),t=(r=e.sp)==null?void 0:r.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker||a.collectUndoTicker||a.eraseTxnPhase);t!=null&&t.length?e.sp=t.map(a=>({...a,viewId:a.viewId||this.viewId,viewGeneration:a.viewGeneration??this.viewGeneration})):delete e.sp,e.consumeCount===void 0&&(delete e.consumeCount,delete e.consumeWorkId),e.fullWorkerDrawCount===void 0&&delete e.fullWorkerDrawCount,!this.destroyed&&(e!=null&&e.consumeCount||e!=null&&e.fullWorkerDrawCount||(o=e.sp)!=null&&o.length)&&this.opt.post(e)}clearAll(){this.cancelCameraSettledRender(),this.debounceUpdateCache.clear(),this.fullLayer.children.length&&(this.fullLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.fullLayer,this.fullLayer.parent)),this.clearCacheImages(),this.clearImageResolveMap(),this.localWork.clearAll(),this.topWork.clearAll(),this.serviceWork.clearAll(),this.vNodes.clear(),this.post({sp:[{type:s.EPostMessageType.Clear}]})}async consumeDrawAll(e,t){const{toolsType:r,workId:o}=t;if(o){const a=o.toString();if(r&&this.topWork.canUseTopLayer(r)){e===s.EDataType.Local&&(this.topWork.getLocalWorkShape(o.toString())||this.topWork.createLocalWork(t)),await this.topWork.consumeDrawAll(t);return}e===s.EDataType.Local&&(this.localWork.getWorkShape(a)||this.localWork.createLocalWork(t),await this.localWork.consumeDrawAll(t,this.serviceWork))}}async consumeDraw(e,t){const{opt:r,workId:o,toolsType:a}=t;if(o&&a&&r){const i=o.toString();if(this.topWork.canUseTopLayer(a)){e===s.EDataType.Local&&(this.topWork.getLocalWorkShape(i)||this.topWork.createLocalWork(t)),this.topWork.consumeDraw(t);return}e===s.EDataType.Local?(this.localWork.getWorkShape(i)||this.localWork.createLocalWork(t),await this.localWork.consumeDraw(t,this.serviceWork)):e===s.EDataType.Service&&this.serviceWork.consumeDraw(t);return}}async updateCamera(e,t){var d,h;const{cameraOpt:r,scenePath:o,cameraTaskId:a}=e;let i=!1;const n=this.cameraOpt,c=!!(r&&D.isEqual(n,r));let l=!1;if(r&&c){const p=!!this.activeCameraSettledRender;if(this.retargetCameraSettledRender(a))return;if(!p){D.isNumber(a)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:a});return}l=!0}if(r&&(!c||l)){this.cancelCameraSettledRender();const p=!n||n.scale!==r.scale||n.centerX!==r.centerX||n.centerY!==r.centerY||n.width!==r.width||n.height!==r.height;if(this.taskUpdateCameraId&&(clearTimeout(this.taskUpdateCameraId),this.taskUpdateCameraId=void 0,(d=this.taskUpdateCameraResolve)==null||d.call(this,!1),this.taskUpdateCameraResolve=void 0),o){let m;do{m=[];for(const[g,M]of this.localWork.getWorkShapes().entries())switch(M.toolsType){case s.EToolsKey.Text:case s.EToolsKey.BitMapEraser:case s.EToolsKey.PencilEraser:case s.EToolsKey.Eraser:case s.EToolsKey.Selector:case s.EToolsKey.LaserPen:break;default:g!==s.Cursor_Hover_Id&&g!==s.Storage_Selector_key&&m.push(`${g}:${M.toolsType}`);break}if(t&&(t.stage="blocking-works",t.blockingWorks=m),!m.length)break;if(!await new Promise(g=>{this.taskUpdateCameraResolve=g,this.taskUpdateCameraId=setTimeout(()=>{this.taskUpdateCameraId=void 0,this.taskUpdateCameraResolve=void 0,g(!0)},s.Task_Time_Interval)})||t!=null&&t.aborted)return}while(m.length);t&&(t.stage="update-camera",t.blockingWorks=void 0)}if(t!=null&&t.aborted)return;const y=new Map;for(const[m,v]of this.vNodes.getNodesByType(s.EToolsKey.Text).entries()){const g=v.rect;y.set(m,D.cloneDeep(g))}for(const[m,v]of this.vNodes.gethasEraserNodes().entries())y.set(m,D.cloneDeep(v.rect));const f=new Set(y.keys());let S=!1;if(this.localWork.hasSelector()){const m=(h=this.localWork.getSelector())==null?void 0:h.selectIds;if(m){S=!0;for(const v of m)f.add(v)}}let k=!1;if(this.serviceWork.selectorWorkShapes.size)for(const m of this.serviceWork.selectorWorkShapes.values()){const v=m.selectIds;if(v){k=!0;for(const g of v)f.add(g)}}if(this.setCameraOpt(r),this.vNodes.curNodeMap.size){this.vNodes.clearTarget(),this.vNodes.updateHighLevelNodesRect(f);for(const[g,M]of y.entries()){const W=this.vNodes.get(g);if(W){const C=M,I=W.rect,T=this.getSceneRect(),R=s.getRectMatrixrRelation(C,T),P=s.getRectMatrixrRelation(I,T);let N=l;(R!==P||C.w!==I.w||C.h!==I.h||P===s.EMatrixrRelationType.intersect)&&(N=!0);const{toolsType:L,opt:O}=W,A=O.eraserlines&&O.eraserlines.length>0||!!O.eraserFaces;(N||p&&A)&&(L===s.EToolsKey.Text||A)&&this.debounceUpdateCache.add(g)}}if(S&&this.localWork.reRenderSelector(),k)for(const[g,M]of this.serviceWork.selectorWorkShapes.entries())this.serviceWork.runSelectWork({workId:g,selectIds:M.selectIds,msgType:s.EPostMessageType.Select,dataType:s.EDataType.Service,viewId:this.viewId});i=!0;const m={cancelled:!1,cameraTaskId:a,context:t};this.activeCameraSettledRender=m;const v=()=>!this.destroyed&&!m.cancelled&&this.activeCameraSettledRender===m&&!(t!=null&&t.aborted);this.debounceUpdateCameraId=setTimeout(async()=>{var g;this.debounceUpdateCameraId=void 0;try{if(!v())return;const M=[];for(const I of this.debounceUpdateCache.values()){const T=(g=this.fullLayer)==null?void 0:g.getElementsByName(I)[0],R=this.vNodes.get(I);if(R){const{toolsType:P,opt:N}=R;if(T||P!==s.EToolsKey.Text){const L=this.localWork.setFullWork({toolsType:P,opt:N,workId:I});if(L){if(P===s.EToolsKey.Text)M.push(L.consumeServiceAsync({isFullWork:!0,replaceId:I,boxRect:this.getSceneRect(),isActive:v}));else if(N.eraserlines&&N.eraserlines.length>0||N.eraserFaces){const O=L.consumeService({op:R.op,isFullWork:!0,replaceId:I,workState:s.EventWorkState.Done});this.localWork.clearWorkShapeNodeCache(I),M.push(Promise.resolve(O))}}}}this.debounceUpdateCache.delete(I)}if(await Promise.all(M),!v())return;this.vNodes.updateLowLevelNodesRect(),this.vNodes.clearHighLevelIds();const W=[this.fullLayer.parent.prepareRender,this.topLayer.parent.prepareRender,this.localLayer.parent.prepareRender,this.serviceLayer.parent.prepareRender];if(m.renderLayers=[this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent],await Promise.all(W),m.renderLayers=void 0,!v())return;const C=m.cameraTaskId;D.isNumber(C)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:C})}catch(M){if(!v())return;const W={code:"RENDERER_BUSINESS_ERROR",business:"updateCamera",message:M instanceof Error?M.message:String(M),stage:"camera-settled-render",workerType:"mainThread"},C=m.cameraTaskId;if(D.isNumber(C))try{this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraTaskId:C,cameraTaskStatus:"failed",cameraTaskError:W})}catch(I){console.error(`[cameraSettledRender] failed ACK post failed viewId=${this.viewId} taskId=${C}`,I)}}finally{m.renderLayers=void 0,this.activeCameraSettledRender===m&&(this.activeCameraSettledRender=void 0)}},s.Task_Time_Interval)}const E=[this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent],w=Promise.all(E.map(m=>m.prepareRender));if(t&&!await s.waitForCameraUpdateTask(t,w,"prepare-render")){E.filter(v=>v.cancelPendingRender()).forEach(v=>v.render()),w.catch(()=>{});return}if(t||await w,t!=null&&t.aborted)return;!i&&D.isNumber(a)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:a})}}getSceneRect(){const{width:e,height:t}=this.scene;return{x:0,y:0,w:Math.floor(e),h:Math.floor(t)}}createScene(e){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...e,autoRender:!0,id:this.viewId,contextType:"2d"})}createLayer(e,t,r){const{width:o,height:a}=r,i=`canvas-${e}`,n=t.layer(i,{...r,offscreen:!1}),c=new s.Group({anchor:[.5,.5],pos:[o*.5,a*.5],size:[o,a],name:"viewport",id:e});return n.append(c),c}enableCanvas2DReadback(e){this.readbackScheduler=new te({onReadbackError:t=>this.opt.master.Logger.warn(`[Appliance]: [main-thread-readback] stage=failed viewId=${this.viewId} error=${t instanceof Error?t.message:String(t)}`)});for(const t of e){const r=t.render,o=(...a)=>{var c;const i=r.apply(t,a),n=t.canvas;return n instanceof HTMLCanvasElement&&((c=this.readbackScheduler)==null||c.markRendered(n)),i};t.render=o,this.restoreLayerRenderCallbacks.push(()=>{t.render===o&&(t.render=r)})}}disableCanvas2DReadback(){var e;(e=this.readbackScheduler)==null||e.destroy(),this.readbackScheduler=void 0;for(const t of this.restoreLayerRenderCallbacks.splice(0))t()}updateScene(e){this.scene.attr({...e});const{width:t,height:r}=e;this.scene.width=t,this.scene.height=r,this.updateLayer({width:t,height:r})}updateLayer(e){const{width:t,height:r}=e;this.fullLayer.parent.setAttribute("width",t),this.fullLayer.parent.setAttribute("height",r),this.fullLayer.setAttribute("size",[t,r]),this.fullLayer.setAttribute("pos",[t*.5,r*.5]),this.topLayer.parent.setAttribute("width",t),this.topLayer.parent.setAttribute("height",r),this.topLayer.setAttribute("size",[t,r]),this.topLayer.setAttribute("pos",[t*.5,r*.5]),this.localLayer.parent.setAttribute("width",t),this.localLayer.parent.setAttribute("height",r),this.localLayer.setAttribute("size",[t,r]),this.localLayer.setAttribute("pos",[t*.5,r*.5]),this.serviceLayer.parent.setAttribute("width",t),this.serviceLayer.parent.setAttribute("height",r),this.serviceLayer.setAttribute("size",[t,r]),this.serviceLayer.setAttribute("pos",[t*.5,r*.5])}cancelCameraSettledRender(){var t;this.debounceUpdateCameraId!==void 0&&(clearTimeout(this.debounceUpdateCameraId),this.debounceUpdateCameraId=void 0);const e=this.activeCameraSettledRender;e&&(e.cancelled=!0,(t=e.renderLayers)==null||t.forEach(r=>r.cancelPendingRender()),this.activeCameraSettledRender=void 0)}retargetCameraSettledRender(e){var r;if(!D.isNumber(e))return!1;const t=this.activeCameraSettledRender;return!t||t.cancelled||(r=t.context)!=null&&r.aborted?!1:(t.cameraTaskId=e,!0)}cancelCameraBlockingWait(){this.taskUpdateCameraId!==void 0&&(clearTimeout(this.taskUpdateCameraId),this.taskUpdateCameraId=void 0);const e=this.taskUpdateCameraResolve;this.taskUpdateCameraResolve=void 0,e==null||e(!1)}destroy(){var e,t;this.destroyed||(this.destroyed=!0,this.disableCanvas2DReadback(),(t=(e=this.activeCameraTaskContext)==null?void 0:e.abort)==null||t.call(e),this.activeCameraTaskContext=void 0,this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.combinePostMsg.clear(),this.cancelCameraBlockingWait(),this.cancelCameraSettledRender(),this.debounceUpdateCache.clear(),this.clearCacheImages(),this.clearImageResolveMap(new Error(`main-thread view destroyed: ${this.viewId}`)),this.vNodes.clear(),J({subThreads:[this.localWork,this.serviceWork,this.topWork],layers:[this.fullLayer,this.topLayer,this.localLayer,this.serviceLayer],scene:this.scene,removeLayerTexture:(r,o)=>s.removeTexture(r,o)}))}}class re{constructor(e,t){u(this,"viewId");u(this,"fullLayer");u(this,"master");u(this,"opt");u(this,"viewOwner");u(this,"viewGeneration");u(this,"scene");u(this,"mainThreadPostId");u(this,"combinePostMsg",new Set);u(this,"destroyed",!1);u(this,"workShapes",new Map);u(this,"cacheImages",new Map);u(this,"imageResolveMap",new Map);u(this,"activeRequest");this.viewId=e,this.opt=t,this.viewOwner=t.viewOwner,this.viewGeneration=t.viewGeneration,this.scene=this.createScene({...t.canvasOpt,container:t.container}),this.master=t.master,this.fullLayer=this.createLayer("fullLayer",this.scene,{...t.layerOpt,bufferSize:this.viewId===s.Main_View_Id?6e3:3e3,contextType:"2d"})}getCachedImages(e){var t;return(t=this.cacheImages.get(e))==null?void 0:t.imageSource}getCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())if(t===e&&r.imageSource)return r.imageSource}deleteCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())r.workId===e&&(this.closeImageSource(r.imageSource),this.cacheImages.delete(t))}clearCacheImages(){this.cacheImages.forEach(e=>this.closeImageSource(e.imageSource)),this.cacheImages.clear()}closeImageSource(e){if(e&&!(!("close"in e)||typeof e.close!="function"))try{e.close()}catch{}}releaseMessageImageBitmap(e){this.closeImageSource(e==null?void 0:e.imageBitmap)}releaseBatchImageBitmaps(e){var t,r;(t=e==null?void 0:e.render)==null||t.forEach(o=>this.closeImageSource(o.imageBitmap)),(r=e==null?void 0:e.sp)==null||r.forEach(o=>this.releaseMessageImageBitmap(o))}clearImageResolveMap(){this.imageResolveMap.forEach(({timer:e,resolve:t},r)=>{e&&clearTimeout(e),t==null||t(r)}),this.imageResolveMap.clear()}post(e){if(this.destroyed){this.releaseBatchImageBitmaps(e);return}this.combinePostMsg.add(e),this.runBatchPostData()}reportRequestFailure(e,t,r,o,a){const i=o instanceof Error?o.message:String(o);try{this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner,sp:[{type:s.EPostMessageType.ReportError,viewId:this.viewId,scenePath:r,requestId:t,reportBusiness:e,reportStage:a,reportError:i,reportString:`[SnapshotThreadImpl] ${e} failed; stage=${a}; requestId=${t||"unknown"}; error=${i}`}]})}catch(n){console.error(`[SnapshotThreadImpl] ${e} failure report failed`,n)}}async on(e){if(this.destroyed){this.closeImageSource(e.imageBitmap);return}const{msgType:t,imageSrc:r,imageBitmap:o,imageElement:a,workId:i,requestId:n}=e;switch(t){case s.EPostMessageType.Snapshot:{this.activeRequest={business:"snapshot",scenePath:e.scenePath,requestId:e.requestId};try{await this.getSnapshot(e),this.flushPendingPost()}catch(c){this.destroyed||this.reportRequestFailure("snapshot",e.requestId,e.scenePath,c,"render")}finally{this.activeRequest=void 0,this.destroy()}return}case s.EPostMessageType.BoundingBox:{this.activeRequest={business:"bounding-box",scenePath:e.scenePath,requestId:e.requestId};try{await this.getBoundingRect(e),this.flushPendingPost()}catch(c){this.destroyed||this.reportRequestFailure("bounding-box",e.requestId,e.scenePath,c,"compute")}finally{this.activeRequest=void 0,this.destroy()}return}case s.EPostMessageType.GetImageBitMap:{if(r&&(o||a)&&i){const c=i.toString(),l=this.imageResolveMap.get(r);if(!l||l.requestId!==n){this.closeImageSource(o||a);break}if(this.deleteCachedImagesByWorkId(c),this.cacheImages.set(r,{imageSource:o||a,workId:c}),l){const{resolve:d,timer:h}=l;h&&clearTimeout(h),d&&d(r)}}break}}}getIconSize(e,t,r){const o=e*r,a=t*r;return o<=50||a<=50?[50,50]:o<=100||a<=100?[100,100]:o<=200||a<=200?[200,200]:o<=400||a<=400?[400,400]:o<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(e){const{toolsType:t,opt:r,workId:o,requestId:a}=e;if(t===s.EToolsKey.Image&&r&&o){const i=o.toString(),{src:n,type:c,width:l,height:d,strokeColor:h}=r;if(!n||!c||!l||!d)return;let p=n;if(c===s.EImageType.Iconify){const[w,m]=this.getIconSize(l,d,this.opt.displayer.dpr);p=s.getIconImageSrc(n,w,m,h)}if(this.cacheImages.has(p)){const w=this.getCachedImages(p);if(w)return w}const f=this.imageResolveMap.get(p);if(f)return await f.promise,this.getCachedImages(p);let S;const k=new Promise(w=>{S=w}),E={resolve:S,timer:void 0,requestId:a,promise:k};return E.timer=setTimeout(()=>{this.imageResolveMap.get(p)===E&&S(p)},5e3),this.imageResolveMap.set(p,E),this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner,sp:[{imageSrc:p,workId:i,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!0,type:s.EPostMessageType.GetImageBitMap,requestId:a}]}),await k,this.imageResolveMap.get(p)===E&&this.imageResolveMap.delete(p),this.getCachedImages(p)}}createWorkShapeNode(e){return s.getShapeInstance({...e,fullLayer:this.fullLayer,drawLayer:void 0})}setFullWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r&&o){const a=t.toString();let i;return t&&this.workShapes.has(a)?(i=this.workShapes.get(a),i==null||i.setWorkOptions(r)):i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a}),i?(this.workShapes.set(a,i),i):void 0}}async runFullWork(e){var o;const t=this.setFullWork(e),r=e.ops&&s.transformToNormalData(e.ops);if(t){let a,i;const n=(o=t.getWorkId())==null?void 0:o.toString();return t.toolsType===s.EToolsKey.BackgroundSVG?a=t.consumeService({isFullWork:!0,replaceId:n}):t.toolsType===s.EToolsKey.Image?a=await t.consumeServiceAsync({isFullWork:!0,worker:this,requestId:e.requestId}):t.toolsType===s.EToolsKey.Text?a=await t.consumeServiceAsync({isFullWork:!0,replaceId:n,isDrawLabel:!0}):(a=t.consumeService({op:r,isFullWork:!0,replaceId:n}),i=(e==null?void 0:e.updateNodeOpt)&&t.updataOptService(e.updateNodeOpt)),s.computRect(a,i)}}async getSnapshot(e){const{scenePath:t,scenes:r,cameraOpt:o,w:a,h:i,requestId:n}=e;if(!(t&&r&&o))throw new Error("snapshot input is incomplete");this.setCameraOpt(o);for(const[l,d]of Object.entries(r))if(d!=null&&d.type)switch(d==null?void 0:d.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const{opt:h}=d,p={...d,opt:h,workId:l,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId,requestId:n};await this.runFullWork(p);break}}let c;a&&i&&(c={resizeWidth:a,resizeHeight:i}),await this.getSnapshotRender({scenePath:t,options:c,requestId:n})}getSceneRect(){const{width:e,height:t}=this.scene;return{x:0,y:0,w:Math.floor(e),h:Math.floor(t)}}getRectImageBitmap(e,t){const r=Math.floor(e.x*this.opt.displayer.dpr),o=Math.floor(e.y*this.opt.displayer.dpr),a=e.w>0&&Math.floor(e.w*this.opt.displayer.dpr||1)||1,i=e.h>0&&Math.floor(e.h*this.opt.displayer.dpr||1)||1;return createImageBitmap(this.fullLayer.parent.canvas,r,o,a,i,t)}async getSnapshotRender(e){var i;const{scenePath:t,options:r,requestId:o}=e;((i=this.fullLayer)==null?void 0:i.parent).render();const a=await this.getRectImageBitmap(this.getSceneRect(),r);if(a){if(this.destroyed){this.closeImageSource(a);return}this.post({sp:[{type:s.EPostMessageType.Snapshot,scenePath:t,imageBitmap:a,viewId:this.viewId,index:0,requestId:o}]}),this.fullLayer&&!this.destroyed&&s.removeAllChildren(this.fullLayer,this.fullLayer.parent)}}async getBoundingRect(e){const{scenePath:t,scenes:r,cameraOpt:o,requestId:a}=e;if(!(t&&r&&o))throw new Error("bounding-box input is incomplete");this.setCameraOpt(o);let i;for(const[n,c]of Object.entries(r))if(c!=null&&c.type)switch(c==null?void 0:c.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const l=await this.runFullWork({...c,workId:n,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId,requestId:a});i=s.computRect(i,l);break}}this.post({sp:[{type:s.EPostMessageType.BoundingBox,scenePath:t,rect:i||{x:0,y:0,w:0,h:0},viewId:this.viewId,requestId:a}]})}setCameraOpt(e){const{scale:t,centerX:r,centerY:o,width:a,height:i}=e;this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[t,t]),this.fullLayer.setAttribute("translate",[-r,-o])}runBatchPostData(){this.destroyed||this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}flushPendingPost(){!this.combinePostMsg.size||this.destroyed||(this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.combinePost())}combinePostData(){var t;this.mainThreadPostId=void 0;const e=[];for(const r of this.combinePostMsg.values())if((t=r.sp)!=null&&t.length)for(const o of r.sp){let a=!1;for(const i of e)if(s.isEqual(o,i)){a=!0;break}a?this.releaseMessageImageBitmap(o):e.push(o)}return this.combinePostMsg.clear(),{sp:e}}combinePost(){var r,o;if(this.destroyed){this.mainThreadPostId=void 0,this.releaseBatchImageBitmaps({sp:[...this.combinePostMsg].flatMap(a=>a.sp||[])}),this.combinePostMsg.clear();return}const e=this.combinePostData(),t=(r=e.sp)==null?void 0:r.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker);if(e.sp&&t){const a=new Set(t);e.sp.filter(i=>!a.has(i)).forEach(i=>this.releaseMessageImageBitmap(i))}if(t!=null&&t.length?e.sp=t.map(a=>a.viewId?a:{...a,viewId:this.viewId}):delete e.sp,!this.destroyed&&((o=e.sp)!=null&&o.length))try{this.opt.post({...e,viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner})}catch(a){throw this.releaseBatchImageBitmaps(e),a}else this.releaseBatchImageBitmaps(e)}createScene(e){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...e,autoRender:!1,contextType:"2d"})}createLayer(e,t,r){const{width:o,height:a}=r,i=`canvas-${e}`,n=t.layer(i,r),c=new s.Group({anchor:[.5,.5],pos:[o*.5,a*.5],size:[o,a],name:"viewport",id:e});return n.append(c),c}updateScene(e){this.scene.attr({...e});const{width:t,height:r}=e;this.scene.width=t,this.scene.height=r,this.updateLayer({width:t,height:r})}updateLayer(e){const{width:t,height:r}=e;this.fullLayer.parent.setAttribute("width",t),this.fullLayer.parent.setAttribute("height",r),this.fullLayer.setAttribute("size",[t,r]),this.fullLayer.setAttribute("pos",[t*.5,r*.5])}destroy(e){if(this.destroyed)return;e&&this.activeRequest&&this.reportRequestFailure(this.activeRequest.business,this.activeRequest.requestId,this.activeRequest.scenePath,new Error(`snapshot request ${e}`),e),this.activeRequest=void 0,this.destroyed=!0,this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.releaseBatchImageBitmaps({sp:[...this.combinePostMsg].flatMap(o=>o.sp||[])}),this.combinePostMsg.clear();const t=[];this.workShapes.forEach(o=>{try{o.clearTmpPoints()}catch(a){t.push(a)}}),this.workShapes.clear();try{this.clearCacheImages()}catch(o){t.push(o)}try{this.clearImageResolveMap()}catch(o){t.push(o)}const r=this.fullLayer.parent;try{this.fullLayer.remove()}catch(o){t.push(o)}try{r&&s.removeTexture(this.fullLayer,r)}catch(o){t.push(o)}try{this.scene.remove()}catch(o){t.push(o)}if(t.length)throw t[0]}}class oe{constructor(e){u(this,"mainThreadMap",new Map);u(this,"cameraRenderQueueByView",new Map);u(this,"viewGenerationById",new Map);u(this,"viewOwnerById",new Map);u(this,"ownerSequence",0);u(this,"snapshotThreadsByRequest",new Map);u(this,"destroyed",!1);u(this,"master");u(this,"post",e=>{if(this.destroyed){this.releaseBatchResources(e);return}if(e.viewId){const y=this.viewOwnerById.get(e.viewId),f=this.viewGenerationById.get(e.viewId);if(e.viewOwner!==void 0&&(!y||y!==e.viewOwner)||e.viewGeneration!==void 0&&f!==void 0&&f!==e.viewGeneration){this.releaseBatchResources(e);return}}const{fullWorkerDrawCount:t,sp:r,workerTasksqueueCount:o,cameraTaskId:a,cameraTaskStatus:i,cameraTaskError:n,cameraSettledTaskId:c,viewId:l,viewGeneration:d,consumeCount:h,consumeWorkId:p}=e;if(l&&s.isNumber(a)){const y=s.normalizeCameraTaskError(i,n,"mainThread");y?this.master.failCameraTask(l,a,y,d):this.master.ackCameraTask(l,a,d)}l&&s.isNumber(c)&&this.master.ackCameraSettledTask(l,c,d),this.master.isBusy&&s.isNumber(o)&&this.master.setWorkerTasksqueueCount(o),s.isNumber(t)&&this.master.setMaxDrawCount(t),s.isNumber(h)&&this.master.setConsumeCount(h,p),r&&this.master.collectorSyncData(e.viewOwner===void 0?r:r.map(y=>y.type===s.EPostMessageType.GetImageBitMap&&y.viewOwner===void 0?{...y,viewOwner:e.viewOwner}:y))});this.master=e}enqueueViewTask(e,t){const o=(this.cameraRenderQueueByView.get(e)||Promise.resolve()).catch(()=>{}).then(()=>this.destroyed?void 0:t());return this.cameraRenderQueueByView.set(e,o),o}isStaleViewMessage(e){if(!e.viewId||e.viewId===s.Storage_ViewId_ALL||e.viewGeneration===void 0)return!1;const t=this.viewGenerationById.get(e.viewId);return t!==void 0&&e.viewGeneration<t}discardView(e){for(const[r,o]of[...this.snapshotThreadsByRequest.entries()])o.thread.viewId===e&&this.disposeSnapshotThread(r,o.thread,"view-destroyed");const t=this.mainThreadMap.get(e);try{t==null||t.destroy()}catch(r){this.master.Logger.error(`[Appliance]: MainThread View discard failed; viewId=${e}; error=${r instanceof Error?r.message:String(r)}`)}this.mainThreadMap.delete(e),this.cameraRenderQueueByView.delete(e),this.viewOwnerById.delete(e),this.viewGenerationById.set(e,(this.viewGenerationById.get(e)||0)+1)}destroy(){if(this.destroyed)return;this.destroyed=!0;const e=[];for(const[t,r]of[...this.snapshotThreadsByRequest.entries()])try{this.disposeSnapshotThread(t,r.thread)}catch(o){e.push(`snapshot-thread: ${o instanceof Error?o.message:String(o)}`)}this.snapshotThreadsByRequest.clear();for(const t of this.mainThreadMap.values())try{t.destroy()}catch(r){e.push(`view=${t.viewId}: ${r instanceof Error?r.message:String(r)}`)}this.mainThreadMap.clear(),this.cameraRenderQueueByView.clear(),this.viewOwnerById.clear(),e.length&&this.master.Logger.error(`[Appliance]: MainThread destroy completed with cleanup errors: ${e.join("; ")}`)}createMainThread(e,t){return new se(e,t)}createSnapshotThread(e,t){return new re(e,t)}getSnapshotRequestKey(e){return e.requestId||`${e.viewId}\0${e.scenePath||""}\0${e.msgType}`}disposeSnapshotThread(e,t,r){const o=this.snapshotThreadsByRequest.get(e);if(!(!o||o.thread!==t)){this.snapshotThreadsByRequest.delete(e);try{t.destroy(r)}finally{o.surface.remove()}}}releaseMessageBitmap(e){var t;try{(t=e.imageBitmap)==null||t.close()}catch{}}releaseBatchResources(e){var t,r;(t=e.render)==null||t.forEach(o=>this.releaseImageBitmap(o.imageBitmap)),(r=e.sp)==null||r.forEach(o=>this.releaseImageBitmap(o.imageBitmap))}releaseImageBitmap(e){var t;try{(t=e==null?void 0:e.close)==null||t.call(e)}catch{}}async consume(e){var t,r,o;if(this.destroyed){e.forEach(a=>this.releaseMessageBitmap(a));return}for(const a of e.values()){if(this.destroyed){this.releaseMessageBitmap(a);return}const{msgType:i,viewId:n,tasksqueue:c,mainTasksqueueCount:l,cameraTaskId:d,layerOpt:h,offscreenCanvasOpt:p,cameraOpt:y,isSubWorker:f}=a;if(this.isStaleViewMessage(a)){this.releaseMessageBitmap(a);continue}if(i===s.EPostMessageType.Console){console.log(this);continue}if(i===s.EPostMessageType.Init){const w=a.viewGeneration??(this.viewGenerationById.get(n)||0)+1;await this.enqueueViewTask(n,async()=>{var I,T,R;const m=this.viewGenerationById.get(n);if(m!==void 0&&w<m)return;this.viewGenerationById.set(n,w);const v=a.viewOwner||`${n}:${w}:${++this.ownerSequence}`,g=(I=this.master.control.viewContainerManager.getView(n))==null?void 0:I.displayer,M=g==null?void 0:g.canvasContainerRef.current;if(!g||!M||!h||!p){this.viewOwnerById.delete(n);return}this.viewOwnerById.set(n,v);const W=this.mainThreadMap.get(n);W==null||W.destroy();const C=this.createMainThread(n,{displayer:g,container:M,layerOpt:h,master:this.master,canvasOpt:p,viewOwner:v,viewGeneration:w,mainThreadRenderMode:((R=(T=this.master.control)==null?void 0:T.renderingCompatibilityDecision)==null?void 0:R.mainThreadRenderMode)??"normal",post:P=>this.post({...P,viewId:P.viewId||n,viewGeneration:P.viewGeneration??w,viewOwner:v})});this.mainThreadMap.set(n,C),C&&y&&C.setCameraOpt(y),this.post({sp:[{type:s.EPostMessageType.Init,viewId:n,viewGeneration:w}]})});continue}if(i===s.EPostMessageType.Snapshot||i===s.EPostMessageType.BoundingBox){const w=(t=this.master.control.viewContainerManager.getView(n))==null?void 0:t.displayer,m=(r=this.master.control.viewContainerManager.mainView)==null?void 0:r.displayer,v=(o=m==null?void 0:m.snapshotContainerRef)==null?void 0:o.current;if(w&&v&&y){const g=this.getSnapshotRequestKey(a),M=this.snapshotThreadsByRequest.get(g);M&&this.disposeSnapshotThread(g,M.thread,"replaced");const W=document.createElement("div");W.style.width=`${y.width}px`,W.style.height=`${y.height}px`,v.append(W);const C={...s.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:y.width,height:y.height},I={...s.ViewContainerManager.defaultScreenCanvasOpt,width:y.width,height:y.height},T=this.createSnapshotThread(n,{displayer:w,container:W,layerOpt:C,master:this.master,canvasOpt:I,post:this.post,viewOwner:this.viewOwnerById.get(n),viewGeneration:this.viewGenerationById.get(n)});this.snapshotThreadsByRequest.set(g,{thread:T,surface:W}),T.on(a).then(()=>{this.disposeSnapshotThread(g,T)}).catch(R=>{this.master.Logger.error(`[Appliance]: snapshot render failed; viewId=${n}; error=${R instanceof Error?R.message:String(R)}`),this.disposeSnapshotThread(g,T)});continue}this.post({viewId:n,viewGeneration:this.viewGenerationById.get(n),viewOwner:this.viewOwnerById.get(n),sp:[{type:s.EPostMessageType.ReportError,viewId:n,scenePath:a.scenePath,requestId:a.requestId,reportBusiness:i===s.EPostMessageType.Snapshot?"snapshot":"bounding-box",reportStage:"surface-unavailable",reportError:"snapshot surface is unavailable",reportString:`[MainThreadManager] ${i===s.EPostMessageType.Snapshot?"snapshot":"bounding-box"} surface is unavailable; viewId=${n}; requestId=${a.requestId||"unknown"}`}]});continue}if(i===s.EPostMessageType.GetImageBitMap&&f){const w=a.requestId?this.snapshotThreadsByRequest.get(a.requestId):[...this.snapshotThreadsByRequest.values()].find(({thread:m})=>m.viewId===n);w?w.thread.on(a):this.releaseMessageBitmap(a);continue}if(i===s.EPostMessageType.GetImageBitMap){const w=this.mainThreadMap.get(n),m=this.viewGenerationById.get(n),v=this.viewOwnerById.get(n);if(!w||a.viewGeneration!==void 0&&a.viewGeneration!==m||a.viewOwner!==void 0&&a.viewOwner!==v||this.mainThreadMap.get(n)!==w){this.releaseMessageBitmap(a);continue}await w.on(a);continue}if(i===s.EPostMessageType.TasksQueue&&(c!=null&&c.size)){const w=c.get(n),m=this.mainThreadMap.get(n),v=this.viewGenerationById.get(n),g=this.viewOwnerById.get(n);let M;if(w&&m)try{await this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==v||this.viewOwnerById.get(n)!==g||this.mainThreadMap.get(n)!==m||await m.on(w)})}catch(W){if(w.msgType!==s.EPostMessageType.UpdateCamera)throw W;const C=s.isCameraUpdateTimeoutError(W);M={code:C?"RENDERER_BUSINESS_TIMEOUT":"RENDERER_BUSINESS_ERROR",business:"updateCamera",message:W instanceof Error?W.message:String(W),elapsedMs:C?W.elapsedMs:void 0,stage:C?W.stage:"update-camera",blockingWorks:C?W.blockingWorks:void 0,workerType:"mainThread"}}if(M&&s.isNumber(d)){this.post({viewId:n,viewGeneration:v,viewOwner:g,cameraTaskId:d,cameraTaskStatus:M.code==="RENDERER_BUSINESS_TIMEOUT"?"timeout":"failed",cameraTaskError:M});continue}l&&s.isNumber(d)&&this.post({workerTasksqueueCount:l,cameraTaskId:d,viewId:n,viewGeneration:v,viewOwner:g});continue}if(n===s.Storage_ViewId_ALL){const w=[...this.mainThreadMap.entries()];for(const[m,v]of w){const g=this.enqueueViewTask(m,async()=>{this.mainThreadMap.get(m)===v&&(i===s.EPostMessageType.Destroy?(v.destroy(),this.mainThreadMap.delete(m),this.viewOwnerById.delete(m),this.viewGenerationById.set(m,(this.viewGenerationById.get(m)||0)+1)):await v.on(a))});await g,this.cameraRenderQueueByView.get(m)===g&&this.cameraRenderQueueByView.delete(m)}continue}const S=this.mainThreadMap.get(n);if(i===s.EPostMessageType.Destroy&&!S){await this.enqueueViewTask(n,async()=>{this.viewGenerationById.set(n,a.viewGeneration??(this.viewGenerationById.get(n)||0)+1),this.viewOwnerById.delete(n)});continue}if(!S)continue;const k=this.viewGenerationById.get(n),E=this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==k||this.mainThreadMap.get(n)!==S||await S.on(a)});i===s.EPostMessageType.Destroy&&(await E,this.mainThreadMap.get(n)===S&&this.mainThreadMap.delete(n),this.viewOwnerById.delete(n),this.cameraRenderQueueByView.get(n)===E&&this.cameraRenderQueueByView.delete(n),this.viewGenerationById.set(n,a.viewGeneration??(k||0)+1))}}}exports.MainThreadManagerImpl=oe;
|
|
1
|
+
"use strict";var F=Object.defineProperty;var x=(b,e,t)=>e in b?F(b,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):b[e]=t;var u=(b,e,t)=>x(b,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./index-LmgcnMI8.js"),D=require("lodash");require("clipper-lib");require("lineclip");require("rbush");require("xss");require("white-web-sdk");require("react-dom");require("react");class U{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"serviceWorkShapes",new Map);u(this,"localWorkShapes",new Map);u(this,"tmpOpt");u(this,"animationId");u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);this.vNodes=e.vNodes,this.thread=e.thread}createLocalWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r){const a=t.toString();!this.getToolsOpt()&&o&&this.setToolsOpt({toolsType:o,toolsOpt:r}),this.setWorkOptions(a,r)}}getLocalWorkShape(e){return this.localWorkShapes.get(e)}createLocalWorkShape(e,t){if(e&&this.tmpOpt){const r={toolsType:this.tmpOpt.toolsType,toolsOpt:t||this.tmpOpt.toolsOpt},o=this.createWorkShapeNode({...r,workId:e});return o&&this.localWorkShapes.set(e,{node:o,toolsType:o.toolsType,workState:s.EventWorkState.Start}),o}}canUseTopLayer(e){return e===s.EToolsKey.LaserPen}destroy(){this.clearAll()}clearAll(){this.thread.topLayer.children.length&&(this.thread.topLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.serviceWorkShapes.clear(),this.localWorkShapes.clear()}consumeDraw(e){const{workId:t,dataType:r}=e;if(r===s.EDataType.Service)this.activeServiceWorkShape(e);else{const o=t==null?void 0:t.toString(),a=o&&this.localWorkShapes.get(o);if(!a)return;const i=a.node.consume({data:e,isFullWork:!1,isSubWorker:!0});i.rect&&(a.result=i,a.workState=s.EventWorkState.Doing,o&&this.localWorkShapes.set(o,a))}this.runAnimation()}setToolsOpt(e){var t;this.tmpOpt=e,(t=e.toolsOpt)!=null&&t.syncUnitTime&&(this.syncUnitTime=e.toolsOpt.syncUnitTime)}getToolsOpt(){return this.tmpOpt}createWorkShapeNode(e){const{toolsType:t}=e;if(t===s.EToolsKey.LaserPen)return s.getShapeInstance({...e,vNodes:this.vNodes,fullLayer:this.thread.topLayer,drawLayer:this.thread.topLayer})}setNodeKey(e,t,r,o){return t.toolsType=r,t.node=this.createWorkShapeNode({workId:e,toolsType:r,toolsOpt:o}),t}activeServiceWorkShape(e){var p,y;const{workId:t,opt:r,toolsType:o,type:a,updateNodeOpt:i,ops:n,op:c}=e;if(!t)return;const l=t.toString(),d=(p=this.vNodes.get(l))==null?void 0:p.rect;if(!((y=this.serviceWorkShapes)!=null&&y.has(l))){let f={toolsType:o,animationWorkData:c||[],animationIndex:0,type:a,updateNodeOpt:i,ops:n,oldRect:d};o&&r&&(f=this.setNodeKey(l,f,o,r)),this.serviceWorkShapes.set(l,f)}const h=this.serviceWorkShapes.get(l);a&&(h.type=a),n&&(h.animationWorkData=s.transformToNormalData(n),h.ops=n),i&&(h.updateNodeOpt=i),c&&(h.animationWorkData=c),h.node&&h.node.getWorkId()!==l&&h.node.setWorkId(l),d&&(h.oldRect=d),o&&r&&(h.toolsType!==o&&o&&r&&this.setNodeKey(l,h,o,r),h.node&&h.node.setWorkOptions(r))}computNextAnimationIndex(e,t){var a;const r=((a=e.node)==null?void 0:a.syncUnitTime)||this.syncUnitTime,o=Math.floor((e.animationWorkData||[]).slice(e.animationIndex).length*32/t/r)*t;return Math.min((e.animationIndex||0)+(o||t),(e.animationWorkData||[]).length)}animationDraw(){var o,a,i,n;this.animationId=void 0;let e=!1;const t=new Map,r=[];for(const[c,l]of this.serviceWorkShapes.entries())switch(l.toolsType){case s.EToolsKey.LaserPen:{const h=this.computNextAnimationIndex(l,8),p=Math.max(0,l.animationIndex||0),y=(l.animationWorkData||[]).slice(p,h);if((l.animationIndex||0)<h&&((o=l.node)==null||o.consumeService({op:y,isFullWork:!1}),l.animationIndex=h,y.length&&t.set(c,{workState:p===0?s.EventWorkState.Start:h===((a=l.animationWorkData)==null?void 0:a.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:y.slice(-2)})),l.isDel){(i=l.node)==null||i.clearTmpPoints(),this.serviceWorkShapes.delete(c);break}l.ops&&l.animationIndex===((n=l.animationWorkData)==null?void 0:n.length)&&!l.isDel&&(this.thread.topLayer.getElementsByName(c.toString())[0]||(l.isDel=!0,this.serviceWorkShapes.set(c,l))),e=!0;break}}for(const[c,l]of this.localWorkShapes.entries()){const{result:d,toolsType:h,isDel:p,workState:y}=l;switch(h){case s.EToolsKey.LaserPen:{if(p){l.node.clearTmpPoints(),this.localWorkShapes.delete(c),r.push({removeIds:[c.toString()],type:s.EPostMessageType.RemoveNode});break}d&&((d.op||d.ops)&&r.push(d),l.result=void 0),!this.thread.topLayer.getElementsByName(c.toString())[0]&&y===s.EventWorkState.Done&&(l.isDel=!0,this.localWorkShapes.set(c,l)),e=!0;break}}}e&&this.runAnimation(),t.size&&t.forEach((c,l)=>{r.push({type:s.EPostMessageType.Cursor,uid:l.split(s.Storage_Splitter)[0],op:c.op,workState:c.workState,viewId:this.thread.viewId})}),r.length&&this.thread.post({sp:r})}runAnimation(){this.animationId||(this.animationId=requestAnimationFrame(this.animationDraw.bind(this)))}setWorkOptions(e,t){var o;let r=(o=this.localWorkShapes.get(e))==null?void 0:o.node;if(!r&&this.tmpOpt){const{toolsType:a}=this.tmpOpt;this.tmpOpt.toolsOpt=t,r=this.createWorkShapeNode({workId:e,toolsType:a,toolsOpt:t}),r&&this.localWorkShapes.set(e,{node:r,toolsType:a,workState:s.EventWorkState.Start}),this.setToolsOpt(this.tmpOpt)}t!=null&&t.syncUnitTime||(t.syncUnitTime=this.syncUnitTime),r&&r.setWorkOptions(t)}consumeDrawAll(e){const{workId:t,dataType:r}=e;if(r===s.EDataType.Service)this.activeServiceWorkShape(e);else{const o=t==null?void 0:t.toString(),a=o&&this.localWorkShapes.get(o);if(!a)return;const i=a.node.consumeAll({data:e});a.result=i,a.workState=s.EventWorkState.Done,o&&this.localWorkShapes.set(o,a)}this.runAnimation()}}class G{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"workShapes",new Map);u(this,"effectSelectNodeData",new Set);u(this,"batchEraserRemoveNodes",new Set);u(this,"batchEraserWorks",new Set);u(this,"tmpOpt");u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);u(this,"fullWorkerDrawCount",0);u(this,"drawWorkActiveId");u(this,"consumeCount",0);u(this,"combineDrawActiveId");u(this,"eraserBatchScheduler",new s.MaxDelayBatchScheduler);u(this,"disposeVNodeRevisionObserver");u(this,"bitmapEraserRenderQueue",Promise.resolve());u(this,"bitmapEraserRevalidationQueued",!1);this.vNodes=e.vNodes,this.thread=e.thread,this.disposeVNodeRevisionObserver=this.vNodes.observeRevision(()=>{this.scheduleActiveBitmapEraserRevalidation()})}scheduleActiveBitmapEraserRevalidation(){const e=this.combineDrawActiveId;if(!e)return;const t=this.getWorkShape(e);(t==null?void 0:t.toolsType)!==s.EToolsKey.BitMapEraser||!t.shouldRevalidateVNodeRevision()||this.bitmapEraserRevalidationQueued||(this.bitmapEraserRevalidationQueued=!0,this.enqueueBitmapEraserRender(e).catch(r=>{this.thread.master.Logger.error(`[Appliance]: Bitmap Eraser revision revalidation failed; viewId=${this.thread.viewId}; workId=${e}; error=${r instanceof Error?r.message:String(r)}`)}).finally(()=>{this.bitmapEraserRevalidationQueued=!1}))}async loadImageBitMap(e){return await this.thread.loadImageBitMap(e)}createLocalWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r){const a=t.toString();!this.getToolsOpt()&&o&&this.setToolsOpt({toolsType:o,toolsOpt:r}),this.setWorkOptions(a,r)}}async updateSelector(e){var y;const t=this.workShapes.get(s.Storage_Selector_key);if(!((y=t==null?void 0:t.selectIds)!=null&&y.length))return;const{callback:r,...o}=e,{updateSelectorOpt:a,willSerializeData:i,smoothSync:n}=o,c=await(t==null?void 0:t.updateSelector({updateSelectorOpt:a,selectIds:D.cloneDeep(t.selectIds),vNodes:this.vNodes,willSerializeData:i,worker:this})),l=new Map;let d;c!=null&&c.selectIds&&(d=D.xor(t.selectIds,c.selectIds),c.selectIds.forEach(f=>{const S=this.vNodes.get(f);if(S){const{toolsType:k,op:E,opt:w}=S;l.set(f,{opt:w,toolsType:k,ops:(E==null?void 0:E.length)&&s.transformToSerializableData(E)||void 0})}}),t.selectIds=c.selectIds);const h=[],p=r&&r({res:c,workShapeNode:t,param:o,postData:{sp:h},newServiceStore:l,smoothSync:n})||{sp:h};d&&p.sp.push({type:s.EPostMessageType.RemoveNode,removeIds:d,viewId:this.thread.viewId}),p.sp.length&&this.thread.post(p)}destroy(){var e;(e=this.disposeVNodeRevisionObserver)==null||e.call(this),this.disposeVNodeRevisionObserver=void 0,this.eraserBatchScheduler.cancel(),this.clearAll()}clearAll(){if(this.eraserBatchScheduler.cancel(),this.thread.localLayer.children.length&&(this.thread.topLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.remove()}),s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent)),this.workShapes.get(s.Storage_Selector_key)){const t=[];t.push({type:s.EPostMessageType.Select,dataType:s.EDataType.Local,selectIds:[],willSyncService:!1}),this.thread.post({sp:t})}this.workShapes.forEach(t=>t.clearTmpPoints()),this.workShapes.clear(),this.effectSelectNodeData.clear(),this.batchEraserWorks.clear(),this.batchEraserRemoveNodes.clear()}async checkTextActive(e){const{op:t,viewId:r,dataType:o}=e;if(t!=null&&t.length){let a;for(const i of this.vNodes.curNodeMap.values()){const{rect:n,name:c,toolsType:l,opt:d}=i,h=t[0]*this.thread.fullLayer.worldScaling[0]+this.thread.fullLayer.worldPosition[0],p=t[1]*this.thread.fullLayer.worldScaling[1]+this.thread.fullLayer.worldPosition[1];if(l===s.EToolsKey.Text&&s.isIntersectForPoint([h,p],n)&&d.workState===s.EventWorkState.Done){a=c;break}}a&&(await this.blurSelector({viewId:r,msgType:s.EPostMessageType.Select,dataType:o,isSync:!0}),this.thread.post({sp:[{type:s.EPostMessageType.GetTextActive,toolsType:s.EToolsKey.Text,workId:a}]}))}}cursorHover(e){const{opt:t,toolsType:r,point:o}=e,a=this.setFullWork({workId:s.Cursor_Hover_Id,toolsType:r,opt:t});a&&o&&a.cursorHover(o)}cursorBlur(){var t;const e=this.getWorkShape(s.Cursor_Hover_Id);e&&((t=e.selectIds)!=null&&t.length)&&(e.cursorBlur(),this.clearWorkShapeNodeCache(s.Cursor_Hover_Id)),this.thread.fullLayer.parent.children.forEach(r=>{r.name==="Cursor_Hover_Id"&&r.remove()})}async updateFullSelectWork(e){var o,a,i,n,c;const t=this.workShapes.get(s.Storage_Selector_key),{selectIds:r}=e;if(!(r!=null&&r.length)){await this.blurSelector(e);return}if(!t){this.setFullWork({workId:s.Storage_Selector_key,toolsType:s.EToolsKey.Selector,opt:e.opt||(((o=this.tmpOpt)==null?void 0:o.toolsType)===s.EToolsKey.Selector?this.tmpOpt.toolsOpt:{})})&&await this.updateFullSelectWork(e);return}if(t&&(r!=null&&r.length)){const{selectRect:l}=t.updateSelectIds(r),d=[{selectorColor:((a=e.opt)==null?void 0:a.strokeColor)||t.selectorColor,strokeColor:((i=e.opt)==null?void 0:i.strokeColor)||t.strokeColor,fillColor:((n=e.opt)==null?void 0:n.fillColor)||t.fillColor,textOpt:((c=e.opt)==null?void 0:c.textOpt)||t.textOpt,canTextEdit:t.canTextEdit,canRotate:t.canRotate,scaleType:t.scaleType,type:s.EPostMessageType.Select,viewId:this.thread.viewId,dataType:s.EDataType.Local,selectIds:r,selectRect:l,points:t.getChildrenPoints(),willSyncService:(e==null?void 0:e.willSyncService)||!1,opt:(e==null?void 0:e.willSyncService)&&t.getWorkOptions()||void 0,canLock:t.canLock,isLocked:t.isLocked,toolsTypes:t.toolsTypes,shapeOpt:t.shapeOpt,thickness:t.thickness,useStroke:t.useStroke,strokeType:t.strokeType}];this.thread.post({sp:d})}}async removeSelector(e){const{willSyncService:t,needUndoTicker:r}=e,o=[],a=[],i=this.workShapes.get(s.Storage_Selector_key);if(!i)return;const n=i.selectIds&&[...i.selectIds]||[];for(const c of n){const l=this.vNodes.get(c);if(l)switch(l.toolsType){case s.EToolsKey.Text:{o.push({type:s.EPostMessageType.TextUpdate,toolsType:s.EToolsKey.Text,workId:c,dataType:s.EDataType.Local});break}case s.EToolsKey.BackgroundSVG:o.push({type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:c,dataType:s.EDataType.Local,viewId:this.thread.viewId});break}this.removeNode(c),a.push(c)}a.length&&o.push({type:s.EPostMessageType.RemoveNode,removeIds:a,needUndoTicker:r,emitEventType:e.emitEventType,requestId:e.requestId}),o.push({type:s.EPostMessageType.Select,selectIds:[],willSyncService:t}),await this.blurSelector(),r&&o.push({type:s.EPostMessageType.None,needUndoTicker:r}),o.length&&this.thread.post({sp:o})}removeWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();r&&this.removeNode(r)}removeNode(e){var o;const t=this.vNodes.get(e);t&&(t.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:e,dataType:s.EDataType.Local,viewId:this.thread.viewId}]}),(o=this.thread.fullLayer)==null||o.getElementsByName(e).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.fullLayer.parent)}),this.vNodes.delete(e)),this.workShapes.has(e)&&(this.thread.localLayer.getElementsByName(e).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.localLayer.parent)}),this.clearWorkShapeNodeCache(e))}setFullWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r&&o){const a=t.toString();let i;return t&&this.workShapes.has(a)?(i=this.workShapes.get(a),(i==null?void 0:i.toolsType)!==o?(i==null||i.clearTmpPoints(),this.workShapes.delete(a),i=void 0):i==null||i.setWorkOptions(r)):i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a}),i||(i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a})),i?(this.workShapes.set(a,i),i):void 0}}async consumeFull(e){var i,n;const t=(i=e.workId)==null?void 0:i.toString(),r=(n=e.updateNodeOpt)==null?void 0:n.eraserGeometryDelta;if(t){const c=this.vNodes.get(t),l=e.ops&&s.transformToNormalData(e.ops)||e.op||[];if(r){if(!c||!e.centerPos||!s.acceptIncomingEraserGeometryDelta(this.vNodes,t,r,c,{op:l,centerPos:e.centerPos})){s.cancelDoingForGeometryMismatch(this.vNodes,t);return}}else c&&e.centerPos&&s.hasDoingGeometryTransform(this.vNodes,t)&&s.geometryDigest(c.op,c.centerPos)!==s.geometryDigest(l,e.centerPos)&&s.cancelDoingForGeometryMismatch(this.vNodes,t)}const o=this.setFullWork(e),a=e.ops&&s.transformToNormalData(e.ops);if(o){t&&e.clearPreviewLocalWork&&this.thread.localLayer.getElementsByName(t).forEach(l=>{l.remove(),s.removeTexture(l,this.thread.localLayer.parent)}),o.toolsType===s.EToolsKey.BackgroundSVG?o.consumeService({isFullWork:!0,replaceId:t}):o.toolsType===s.EToolsKey.Image?await o.consumeServiceAsync({isFullWork:!0,replaceId:t,worker:this}):o.toolsType===s.EToolsKey.Text?await o.consumeServiceAsync({isFullWork:!0,replaceId:t,boxRect:this.thread.getSceneRect()}):o.consumeService({op:a,isFullWork:!0,replaceId:t}),e!=null&&e.updateNodeOpt&&o.updataOptService(e.updateNodeOpt);const c=[];e.workId&&this.workShapes.delete(e.workId.toString()),e.willSyncService&&c.push({opt:e.opt,toolsType:e.toolsType,type:s.EPostMessageType.FullWork,workId:e.workId,ops:e.ops,updateNodeOpt:e.updateNodeOpt,viewId:this.thread.viewId,needUndoTicker:e.needUndoTicker,requestId:e.requestId,emitEventType:e.emitEventType,scenePath:e.scenePath}),e.isLockSentEventCursor&&c.push({type:s.EPostMessageType.None,isLockSentEventCursor:!0,scenePath:e.scenePath}),e.needUndoTicker&&c.push({type:s.EPostMessageType.None,needUndoTicker:e.needUndoTicker,emitEventType:e.emitEventType,requestId:e.requestId,scenePath:e.scenePath}),c.length&&this.thread.post({sp:c})}}async colloctEffectSelectWork(e){const t=this.workShapes.get(s.Storage_Selector_key),{workId:r,msgType:o}=e;if(t&&r&&t.selectIds&&t.selectIds.includes(r.toString())){o===s.EPostMessageType.RemoveNode?t.selectIds=t.selectIds.filter(a=>a!==r.toString()):this.effectSelectNodeData.add(e),await this.runEffectSelectWork(!0);return}return e}async runEffectSelectWork(e){var t;for await(const r of this.effectSelectNodeData.values()){const o=this.setFullWork(r);if(o){const a=(t=r.workId)==null?void 0:t.toString();if(o.toolsType===s.EToolsKey.BackgroundSVG)o.consumeService({isFullWork:!0,replaceId:a});else if(o.toolsType===s.EToolsKey.Image)await o.consumeServiceAsync({isFullWork:!0,replaceId:a,worker:this});else if(o.toolsType===s.EToolsKey.Text)await o.consumeServiceAsync({isFullWork:!0,replaceId:a,boxRect:this.thread.getSceneRect()});else{const i=r.ops&&s.transformToNormalData(r.ops);o.consumeService({op:i,isFullWork:!0,replaceId:a}),r!=null&&r.updateNodeOpt&&o.updataOptService(r.updateNodeOpt)}r.workId&&this.workShapes.delete(r.workId.toString())}this.effectSelectNodeData.delete(r)}this.reRenderSelector(e)}hasSelector(){return this.workShapes.has(s.Storage_Selector_key)}getSelector(){return this.workShapes.get(s.Storage_Selector_key)}reRenderSelector(e=!1){var o;const t=this.workShapes.get(s.Storage_Selector_key);if(!t)return;if(t&&!((o=t.selectIds)!=null&&o.length))return this.blurSelector();const r=t.reRenderSelector();r&&this.thread.post({sp:[{type:s.EPostMessageType.Select,selectIds:t.selectIds,selectRect:r,willSyncService:e,viewId:this.thread.viewId,points:t.getChildrenPoints(),textOpt:t.textOpt,selectorColor:t.selectorColor,strokeColor:t.strokeColor,fillColor:t.fillColor,canTextEdit:t.canTextEdit,canRotate:t.canRotate,scaleType:t.scaleType,opt:t.getWorkOptions()||void 0,canLock:t.canLock,isLocked:t.isLocked,toolsTypes:t.toolsTypes,shapeOpt:t.shapeOpt,thickness:t.thickness,useStroke:t.useStroke,strokeType:t.strokeType}]})}async blurSelector(e){var o;const t=this.workShapes.get(s.Storage_Selector_key),r=t==null?void 0:t.blurSelector();if(this.clearWorkShapeNodeCache(s.Storage_Selector_key),((o=this.thread.fullLayer)==null?void 0:o.parent).children.forEach(a=>{a.name===s.Storage_Selector_key&&a.remove()}),r){const a=[];a.push({...r,isSync:e==null?void 0:e.isSync,scenePath:e==null?void 0:e.scenePath}),this.thread.post({sp:a})}}clearWorkShapeNodeCache(e){var t;(t=this.getWorkShape(e))==null||t.clearTmpPoints(),this.workShapes.delete(e)}abortBitmapEraser(e){const t=this.workShapes.get(e);(t==null?void 0:t.toolsType)===s.EToolsKey.BitMapEraser&&(t.clearTmpPoints(),this.workShapes.delete(e),this.combineDrawActiveId===e&&(this.combineDrawActiveId=void 0),this.drawWorkActiveId===e&&(this.drawWorkActiveId=void 0),this.bitmapEraserRenderQueue=Promise.resolve())}publishBitmapEraserBeforeImages(e,t){t.size&&this.thread.post({sp:[{type:s.EPostMessageType.None,viewId:this.thread.viewId,eraseTxnId:e,eraseTxnBeforeImages:new Map(t)}]})}async drawBitMapEraserFull(e,t,r,o){const{willUpdateNodes:a,willDeleteNodes:i,eraseTxnRecoveryRequired:n,eraseTxnBeforeImages:c}=t,l=e.getWorkId(),d=[...a?Array.from(a.keys()).map(p=>String(p)):[],...i?Array.from(i):[]],h=[];if(o&&h.push({type:s.EPostMessageType.None,needUndoTicker:o,undoScopeIds:d,undoScopePhase:"finalize",eraseTxnId:l,eraseTxnRecoveryRequired:n,eraseTxnBeforeImages:c}),h.push({type:s.EPostMessageType.RemoveNode,removeIds:[l],eraseTxnId:l,viewId:this.thread.viewId,needUndoTicker:o,eraseTxnRecoveryRequired:n,eraseTxnBeforeImages:c}),r&&h.push({type:s.EPostMessageType.None,isLockSentEventCursor:r}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[p,y]of a)h.push({type:s.EPostMessageType.UpdateNode,dataType:s.EDataType.Local,opt:y.opt,workId:p,updateNodeOpt:{useAnimation:!1},eraseTxnId:l,needUndoTicker:o});i!=null&&i.size&&h.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],eraseTxnId:l,viewId:this.thread.viewId,needUndoTicker:o})}h.push({type:s.EPostMessageType.None,viewId:this.thread.viewId,eraseTxnId:l,eraseTxnPhase:t.eraseTxnCommitStatus==="failed"||n?"failed":"applied",eraseTxnRecoveryRequired:n,eraseTxnBeforeImages:c}),h.length&&this.thread.post({sp:h})}drawPencilEraserFull(e,t,r,o){const{willNewNodes:a,willDeleteNodes:i}=t,n=e.getWorkId(),c=[...a?Array.from(a.keys()).map(d=>String(d)):[],...i?Array.from(i):[]],l=[];if(o&&c.length&&l.push({type:s.EPostMessageType.None,needUndoTicker:o,undoScopeIds:c}),l.push({type:s.EPostMessageType.RemoveNode,removeIds:[n],viewId:this.thread.viewId,needUndoTicker:o}),r&&l.push({type:s.EPostMessageType.None,isLockSentEventCursor:r}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[d,h]of a)l.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:h.toolsType,ops:s.transformToSerializableData(h.op),opt:h.opt,workId:d,updateNodeOpt:{useAnimation:!1},needUndoTicker:o});i!=null&&i.size&&l.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],viewId:this.thread.viewId,needUndoTicker:o})}l.length&&this.thread.post({sp:l})}drawEraser(e,t,r,o){const a=[],i=e.removeIds||[];o&&i.length&&a.push({type:s.EPostMessageType.None,collectUndoTicker:o,undoScopeIds:i,undoScopePhase:"collect"}),e.removeIds&&a.push({...e,needUndoTicker:r,collectUndoTicker:o}),t&&a.push({type:s.EPostMessageType.None,isLockSentEventCursor:t}),r&&a.push({type:s.EPostMessageType.None,needUndoTicker:r,undoScopePhase:"finalize"}),this.thread.post({sp:a,consumeCount:this.consumeCount})}getWorkShape(e){return this.workShapes.get(e)}getWorkShapes(){return this.workShapes}async consumeDraw(e,t){const{op:r,workId:o,scenePath:a,postCount:i,smoothSync:n}=e;if(r!=null&&r.length&&o){const c=o.toString(),l=this.workShapes.get(c);if(!l)return;const d=l.toolsType;if(d===s.EToolsKey.LaserPen)return;if(this.combineDrawActiveId&&this.combineDrawActiveId!==c){const h=this.combineDrawActiveId;this.eraserBatchScheduler.cancel(),this.combineDrawActiveId=void 0,await this.consumeDrawAll({workId:h,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},t)}switch(this.drawWorkActiveId&&this.drawWorkActiveId!==c&&(await this.consumeDrawAll({workId:this.drawWorkActiveId,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},t),this.drawWorkActiveId=void 0),!this.drawWorkActiveId&&c!==s.Storage_Selector_key&&(this.drawWorkActiveId=c),D.isNumber(i)&&(this.consumeCount=i),d){case s.EToolsKey.Selector:{const h=l.consume({data:e,isFullWork:!0,isMainThread:!0});this.fullWorkerDrawCount++;const p=[];h.type===s.EPostMessageType.Select&&(h.selectIds&&t.runReverseSelectWork(h.selectIds),p.push({...h,scenePath:a})),await this.thread.fullLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:p});break}case s.EToolsKey.PencilEraser:{l.consume({data:e,isFullWork:!1,isMainThread:!0}),this.fullWorkerDrawCount++,await this.thread.localLayer.parent.prepareRender,this.thread.post({sp:void 0,consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount}),this.combineDrawActiveId=c,this.eraserBatchScheduler.schedule(()=>{this.drawPencilEraserCombine(c,e.needUndoTicker,e.collectUndoTicker)},s.getEraserBatchDelay(this.thread.master.maxCombineEraserTime));break}case s.EToolsKey.BitMapEraser:{l.consume({data:e,isFullWork:!1,isMainThread:!0}),this.fullWorkerDrawCount++,this.combineDrawActiveId=c,await this.enqueueBitmapEraserRender(c,e.needUndoTicker,e.collectUndoTicker,{consumeCount:this.consumeCount,consumeWorkId:c});break}case s.EToolsKey.Eraser:{const h=l.consume({data:e,isFullWork:!0});await this.thread.fullLayer.parent.prepareRender,this.drawEraser(h,void 0,e.needUndoTicker,e.collectUndoTicker)}break;case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Ellipse:case s.EToolsKey.Rectangle:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:case s.EToolsKey.Pencil:{const h=l.consume({data:e,isFullWork:!1,isMainThread:!0,smoothSync:n});h&&(this.fullWorkerDrawCount++,await this.thread.localLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:h.op&&[{...h,scenePath:a}]||void 0}))}break}}}enqueueBitmapEraserRender(e,t,r,o){const a=this.bitmapEraserRenderQueue.then(async()=>{this.combineDrawActiveId!==e||!this.getWorkShape(e)||await this.postEraserBatch(e,t,r,o)});return this.bitmapEraserRenderQueue=a.catch(()=>{}),a}async drawPencilEraserCombine(e,t,r){await this.postEraserBatch(e,t,r)}async postEraserBatch(e,t,r,o){var i,n,c,l,d,h;const a=(i=this.workShapes.get(e))==null?void 0:i.combineConsume({workerEngine:this});if(a||o){const p=a==null?void 0:a.willDeleteNodes,y=a==null?void 0:a.willNewNodes,f=[...p?Array.from(p):[]],S={render:[],sp:[],...o};if(a!=null&&a.rect){const k=s.getSafetyRect(a.rect);(n=S.render)==null||n.push({rect:k,isClear:!0,clearCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId,eraseTxnId:e},{rect:k,drawCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId,eraseTxnId:e})}if(r&&f.length&&((c=this.getWorkShape(e))==null?void 0:c.toolsType)===s.EToolsKey.BitMapEraser&&((l=S.sp)==null||l.push({type:s.EPostMessageType.None,collectUndoTicker:r,undoScopeIds:f,undoScopePhase:"collect"})),p!=null&&p.size&&((d=S.sp)==null||d.push({type:s.EPostMessageType.RemoveNode,removeIds:[...p],viewId:this.thread.viewId,needUndoTicker:t,collectUndoTicker:r})),y!=null&&y.size)for(const[k,E]of y)(h=S.sp)==null||h.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:E.toolsType,ops:s.transformToSerializableData(E.op),opt:E.opt,workId:k,updateNodeOpt:{useAnimation:!1},needUndoTicker:t,collectUndoTicker:r});a!=null&&a.rect&&await this.thread.fullLayer.parent.prepareRender,this.thread.post(S)}}async consumeDrawAll(e,t){var n,c,l;this.eraserBatchScheduler.cancel();const{workId:r,scenePath:o,isLockSentEventCursor:a}=e,i=e.needUndoTicker;if(r){this.combineDrawActiveId===r.toString()&&(this.combineDrawActiveId=void 0);const d=r.toString();this.drawWorkActiveId===d&&(this.drawWorkActiveId=void 0);const h=this.workShapes.get(d);if(!h)return;const p=h.toolsType;if(p===s.EToolsKey.LaserPen)return;p===s.EToolsKey.BitMapEraser&&await this.bitmapEraserRenderQueue;const y=this.workShapes.get(s.Cursor_Hover_Id),f=(n=y==null?void 0:y.selectIds)==null?void 0:n[0],S=await h.consumeAll({data:e,workerEngine:this});switch(p){case s.EToolsKey.Selector:{S.selectIds&&f&&((c=S.selectIds)!=null&&c.includes(f))&&y.cursorBlur();const k=[];a&&k.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:o}),S.type===s.EPostMessageType.Select&&(S.selectIds&&t.runReverseSelectWork(S.selectIds),k.push({...S,scenePath:o})),k.length&&this.thread.post({sp:k}),(l=h.selectIds)!=null&&l.length?h.clearTmpPoints():this.clearWorkShapeNodeCache(d)}break;case s.EToolsKey.PencilEraser:await this.drawPencilEraserFull(h,S,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(d);break;case s.EToolsKey.BitMapEraser:await this.drawBitMapEraserFull(h,S,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(d);break;case s.EToolsKey.Eraser:await this.drawEraser({...S,scenePath:o},a,i,e.collectUndoTicker),h.clearTmpPoints();break;case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Ellipse:case s.EToolsKey.Rectangle:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:case s.EToolsKey.Pencil:{const k=[];if(a&&k.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:o}),S){const w=p===s.EToolsKey.Pencil&&S.type===s.EPostMessageType.RemoveNode;w?s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent):k.push({...S,scenePath:o,needUndoTicker:e.needUndoTicker,undoScopeIds:S.undoScopeIds||(S.workId!==void 0?[S.workId.toString()]:void 0),undoScopePhase:S.undoScopePhase||"finalize"}),this.fullWorkerDrawCount=0,e.needUndoTicker&&k.push({type:s.EPostMessageType.None,needUndoTicker:e.needUndoTicker,scenePath:o,undoScopeIds:w?[]:void 0,undoScopePhase:w?"finalize":void 0}),(w?this.thread.localLayer:this.thread.fullLayer).parent.prepareRender.then(()=>{this.thread.post({fullWorkerDrawCount:this.fullWorkerDrawCount,sp:k})})}this.clearWorkShapeNodeCache(d);break}}}}getToolsOpt(){return this.tmpOpt}setToolsOpt(e){var t,r;if((t=this.tmpOpt)!=null&&t.toolsType&&this.tmpOpt.toolsType!==e.toolsType){this.eraserBatchScheduler.cancel();for(const[o,a]of this.workShapes)o!==s.Storage_Selector_key&&(a.clearTmpPoints(),this.workShapes.delete(o))}this.tmpOpt=e,(r=e.toolsOpt)!=null&&r.syncUnitTime&&(this.syncUnitTime=e.toolsOpt.syncUnitTime)}setWorkOptions(e,t){let r=this.workShapes.get(e);if(!r&&this.tmpOpt){const{toolsType:o}=this.tmpOpt;this.tmpOpt.toolsOpt=t,r=this.createWorkShapeNode({workId:e,toolsType:o,toolsOpt:t}),r&&this.workShapes.set(e,r),this.setToolsOpt(this.tmpOpt)}t.syncUnitTime||(t.syncUnitTime=this.syncUnitTime),r==null||r.setWorkOptions(t)}createWorkShapeNode(e){return s.getShapeInstance({...e,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.localLayer},this.thread.serviceWork)}}class q{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"workShapes",new Map);u(this,"selectorWorkShapes",new Map);u(this,"willRunEffectSelectorIds",new Set);u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);u(this,"animationScheduler");u(this,"effectScheduler");this.vNodes=e.vNodes,this.thread=e.thread,this.animationScheduler=new s.ServiceRenderScheduler({run:async()=>{try{await this.animationDraw()}catch(t){throw s.toRendererBusinessError(t,{business:"service-render",stage:"animation-draw"})}},schedule:t=>requestAnimationFrame(t),cancel:t=>cancelAnimationFrame(t),onError:t=>this.thread.reportRendererBusinessError(t,{business:"service-render",stage:"animation-draw"})}),this.effectScheduler=new s.ServiceRenderScheduler({run:async()=>{try{await this.effectRunSelector()}catch(t){throw s.toRendererBusinessError(t,{business:"service-render",stage:"selector-effect"})}},schedule:t=>setTimeout(t,0),cancel:t=>clearTimeout(t),onError:t=>this.thread.reportRendererBusinessError(t,{business:"service-render",stage:"selector-effect"})})}async loadImageBitMap(e){return await this.thread.loadImageBitMap(e)}destroy(){this.animationScheduler.destroy(),this.effectScheduler.destroy(),this.clearAll()}clearAll(){this.thread.serviceLayer.children.length&&(this.thread.serviceLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.workShapes.clear(),this.selectorWorkShapes.clear(),this.willRunEffectSelectorIds.clear()}runEffect(){this.effectScheduler.request()}effectRunSelector(){this.willRunEffectSelectorIds.forEach(e=>{var r,o;const t=this.selectorWorkShapes.get(e);t&&t.selectIds&&((r=t.node)==null||r.selectServiceNode(e,t,!0)),(o=t==null?void 0:t.selectIds)!=null&&o.length||this.selectorWorkShapes.delete(e)}),this.willRunEffectSelectorIds.clear()}runSelectWork(e){this.activeSelectorShape(e);const{workId:t}=e,r=t==null?void 0:t.toString();r&&this.willRunEffectSelectorIds.add(r),this.runEffect()}removeWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();if(r){if(this.workShapes.get(r)){this.workShapes.delete(r),this.removeNode(r,e);return}this.removeNode(r,e)}}consumeFull(e){if(this.activeWorkShape(e),e.refreshTextRender){this.runAnimation(!0);return}this.runAnimation()}runReverseSelectWork(e){e.forEach(t=>{this.selectorWorkShapes.forEach((r,o)=>{var a;if((a=r.selectIds)!=null&&a.length){const i=r.selectIds.indexOf(t);i>-1&&(r.selectIds.splice(i,1),this.willRunEffectSelectorIds.add(o))}})}),this.willRunEffectSelectorIds.size&&this.runEffect()}consumeDraw(e){this.activeWorkShape(e),this.runAnimation()}computNextAnimationIndex(e,t){const r=Math.floor((e.animationWorkData||[]).slice(e.animationIndex).length*32/t/this.syncUnitTime)*t;return Math.min((e.animationIndex||0)+(r||t),(e.animationWorkData||[]).length)}async animationDraw(){var o,a,i,n,c,l,d,h,p,y,f,S,k,E,w,m,v,g,M,W,C;let e=!1;const t=new Map,r=[];for(const[I,T]of this.workShapes.entries())switch(T.toolsType){case s.EToolsKey.BackgroundSVG:{(o=T.node)==null||o.consumeService({isFullWork:!0,replaceId:I}),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Image:{await((a=T.node)==null?void 0:a.consumeServiceAsync({isFullWork:!0,worker:this})),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Text:{T.node&&(await((i=T.node)==null?void 0:i.consumeServiceAsync({isFullWork:!0,replaceId:I,boxRect:this.thread.getSceneRect()})),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),T.refreshTextRender&&T.requestId&&r.push({type:s.EPostMessageType.RefreshTextRender,requestId:T.requestId,workId:I,viewId:this.thread.viewId}),(n=T.node)==null||n.clearTmpPoints(),this.workShapes.delete(I));break}case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Rectangle:case s.EToolsKey.Ellipse:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:{const R=!!T.ops;if((c=T.animationWorkData)!=null&&c.length){const P=T.oldRect;(l=T.node)==null||l.consumeService({op:T.animationWorkData,isFullWork:R}),R&&(this.selectorWorkShapes.forEach((N,L)=>{var O;(O=N.selectIds)!=null&&O.includes(I)&&(this.willRunEffectSelectorIds.add(L),this.runEffect())}),(d=T.node)==null||d.clearTmpPoints(),this.workShapes.delete(I)),T.isEnableCursor?t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:P?T.ops?s.EventWorkState.Done:s.EventWorkState.Doing:s.EventWorkState.Start,op:T.animationWorkData.slice(-3,-1)}):R&&!T.useAnimation&&((h=T.updateNodeOpt)!=null&&h.useAnimation)&&t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:s.EventWorkState.Done,op:T.animationWorkData.slice(-3,-1),uid:(p=T.updateNodeOpt)==null?void 0:p.uid}),T.animationWorkData.length=0}break}case s.EToolsKey.Pencil:{if(T.useAnimation){if(T.useAnimation){if(T.isDel){(m=T.node)==null||m.clearTmpPoints(),this.workShapes.delete(I);break}const R=3,P=this.computNextAnimationIndex(T,R),N=T.isDiff?0:Math.max(0,(T.animationIndex||0)-R),L=(T.animationWorkData||[]).slice(N,P),O=(g=(v=T.node)==null?void 0:v.getWorkId())==null?void 0:g.toString();if((T.animationIndex||0)<P||T.isDiff){if((M=T.node)==null||M.consumeService({op:L,isFullWork:!1}),T.animationIndex=P,T.isDiff&&(T.isDiff=!1),L.length&&T.isEnableCursor){const A=L.slice(-3,-1);t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:N===0?s.EventWorkState.Start:P===((W=T.animationWorkData)==null?void 0:W.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:A})}}else T.ops&&((C=T.node)==null||C.consumeService({op:T.animationWorkData||[],isFullWork:!0,replaceId:O}),T.isDel=!0,T.isEnableCursor&&t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:s.EventWorkState.Done,op:L.slice(-3,-1)}));e=!0;break}}else{const R=!!T.ops;if((y=T.node)==null||y.consumeService({op:T.animationWorkData||[],isFullWork:R,replaceId:I}),(f=T.node)==null||f.updataOptService(T.updateNodeOpt),R){if(!T.isEnableCursor&&((S=T.updateNodeOpt)!=null&&S.useAnimation)&&((k=T.animationWorkData)!=null&&k.length)){const P=T.animationWorkData.slice(-3,-1);t.set(I,{cursorTool:s.resolveCursorToolName(T.toolsType),workState:s.EventWorkState.Done,op:P,uid:(E=T.updateNodeOpt)==null?void 0:E.uid})}this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),(w=T.node)==null||w.clearTmpPoints(),this.workShapes.delete(I)}}break}}e&&this.runAnimation(),t.size&&t.forEach((I,T)=>{r.push({type:s.EPostMessageType.Cursor,uid:I.uid||T.split(s.Storage_Splitter)[0],op:I.op,workState:I.workState,cursorTool:I.cursorTool,viewId:this.thread.viewId})}),r.length&&this.thread.post({sp:r})}runAnimation(e=!1){this.animationScheduler.request(e)}async flush(){await this.animationScheduler.flush(),await this.effectScheduler.flush()}hasDiffData(e,t,r){const o=e.length;if(t.length<o)return!0;switch(r){case s.EToolsKey.Pencil:{for(let a=0;a<o;a+=3)if(t[a]!==e[a]||t[a+1]!==e[a+1])return!0;break}case s.EToolsKey.LaserPen:{for(let a=0;a<o;a+=2)if(t[a]!==e[a]||t[a+1]!==e[a+1])return!0;break}}return!1}activeWorkShape(e){var E,w,m,v;const{workId:t,opt:r,toolsType:o,type:a,updateNodeOpt:i,ops:n,op:c,useAnimation:l,imageBitmap:d,isEnableCursor:h,requestId:p,refreshTextRender:y}=e;if(!t)return;const f=t.toString(),S=(E=this.vNodes.get(f))==null?void 0:E.rect;if(!((w=this.workShapes)!=null&&w.has(f))){let g={toolsType:o,animationWorkData:c||[],animationIndex:0,type:a,updateNodeOpt:i,ops:n,useAnimation:typeof l<"u"?l:typeof(i==null?void 0:i.useAnimation)<"u"?i==null?void 0:i.useAnimation:!0,oldRect:S,isDiff:!1,imageBitmap:d,isEnableCursor:h};o&&r&&(g=this.setNodeKey(f,g,o,r)),(m=this.workShapes)==null||m.set(f,g)}const k=(v=this.workShapes)==null?void 0:v.get(f);k.isEnableCursor=h,k.requestId=p,k.refreshTextRender=!!y,a&&(k.type=a),n&&(k.animationWorkData=s.transformToNormalData(n),k.ops=n),i&&(k.updateNodeOpt=i),c&&(k.isDiff=this.hasDiffData(k.animationWorkData||[],c,k.toolsType),k.toolsType,s.EToolsKey.Pencil,k.animationWorkData=c),k.node&&k.node.getWorkId()!==f&&k.node.setWorkId(f),S&&(k.oldRect=S),o&&r&&(r.syncUnitTime&&(this.syncUnitTime=r.syncUnitTime),k.toolsType!==o&&o&&r&&this.setNodeKey(f,k,o,r),k.node&&k.node.setWorkOptions(r)),d&&(k.imageBitmap=d)}removeNode(e,t){e.indexOf(s.Storage_Selector_key)>-1&&this.removeSelectWork(t),this.thread.fullLayer.getElementsByName(e).forEach(o=>{o.remove(),s.removeTexture(o,this.thread.fullLayer.parent)}),this.thread.serviceLayer.getElementsByName(e).forEach(o=>{o.remove(),s.removeTexture(o,this.thread.serviceLayer.parent)});const r=this.vNodes.get(e);r&&r.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:e,dataType:s.EDataType.Service,viewId:this.thread.viewId}]}),this.vNodes.delete(e)}removeSelectWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();r&&(this.activeSelectorShape(e),this.willRunEffectSelectorIds.add(r)),this.runEffect()}activeSelectorShape(e){var l,d,h;const{workId:t,opt:r,toolsType:o,type:a,selectIds:i}=e;if(!t)return;const n=t.toString();if(!((l=this.selectorWorkShapes)!=null&&l.has(n))){let p={toolsType:o,selectIds:i,type:a,opt:r};o&&r&&(p=this.setNodeKey(n,p,o,r)),(d=this.selectorWorkShapes)==null||d.set(n,p)}const c=(h=this.selectorWorkShapes)==null?void 0:h.get(n);a&&(c.type=a),c.node&&c.node.getWorkId()!==n&&c.node.setWorkId(n),c.selectIds=i||[]}setNodeKey(e,t,r,o){return t.toolsType=r,t.node=s.getShapeInstance({toolsType:r,toolsOpt:o,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.serviceLayer,workId:e},this),t}}class B{constructor(){u(this,"localWork");u(this,"serviceWork");u(this,"threadEngine")}registerMainThread(e){return this.threadEngine=e,this.localWork=e.localWork,this.serviceWork=e.serviceWork,this}}class K extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.CopyNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.FullWork&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var o;const{workId:r}=t;r&&await((o=this.localWork)==null?void 0:o.consumeFull(t))}}class _ extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetColorNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var h;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,needUndoTicker:l,requestId:d}=t;r===s.Storage_Selector_key&&o&&await((h=this.localWork)==null?void 0:h.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:d,textUpdateForWoker:c,callback:this.updateSelectorCallback,needUndoTicker:l}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,textUpdateForWoker:c,needUndoTicker:l,requestId:d,emitEventType:h}=r,p=o.sp||[];if(i)for(const[y,f]of a.entries())c&&f.toolsType===s.EToolsKey.Text?p.push({...f,workId:y,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:h,requestId:d,needUndoTicker:l}):p.push({...f,workId:y,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:h,requestId:d,needUndoTicker:l});return l&&p.push({type:s.EPostMessageType.None,needUndoTicker:l}),{sp:p}}}class z extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.ZIndexNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,needUndoTicker:c,requestId:l,emitEventType:d}=r,h=o.sp||[];if(i&&h)for(const[p,y]of a.entries())y.toolsType===s.EToolsKey.BackgroundSVG&&h.push({...y,workId:p,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,updateNodeOpt:{useAnimation:!1},needUndoTicker:c,emitEventType:d,requestId:l}),h.push({...y,workId:p,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:d,requestId:l,needUndoTicker:c});return c&&h.push({type:s.EPostMessageType.None,needUndoTicker:c}),{sp:h}}}class V extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.TranslateNode);u(this,"updateSelectorCallback",t=>{var E;const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n,smoothSync:c}=t,{willSyncService:l,isSync:d,updateSelectorOpt:h,textUpdateForWoker:p,needUndoTicker:y}=r,f=h.workState,S=o.sp||[];if(f===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}],render:[]};const k=n==null?void 0:n.selectRect;if(l){const w=f===s.EventWorkState.Done?y:void 0;S.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:k,willSyncService:f===s.EventWorkState.Done?!0:c,isSync:!0,points:f===s.EventWorkState.Done&&i.getChildrenPoints()||void 0,textOpt:i.textOpt,needUndoTicker:w,emitEventType:this.emitEventType});const m={workState:f,useAnimation:h.useAnimation||!1};h.uid&&(m.uid=h.uid);for(const[v,g]of a.entries())g.toolsType===s.EToolsKey.BackgroundSVG&&S.push({...g,workId:v,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:f===s.EventWorkState.Done?!0:c,updateNodeOpt:m,needUndoTicker:w,emitEventType:this.emitEventType}),p&&g.toolsType===s.EToolsKey.Text?S.push({...g,workId:v,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:f===s.EventWorkState.Done?!0:c,updateNodeOpt:m,needUndoTicker:w,emitEventType:this.emitEventType}):(c||f===s.EventWorkState.Done)&&S.push({...g,workId:v,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...m,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((E=this.localWork)==null?void 0:E.vNodes,v)},isSync:d,needUndoTicker:w,emitEventType:this.emitEventType})}return y&&S.push({type:s.EPostMessageType.None,needUndoTicker:y}),S.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}),{sp:S}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var p,y;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,emitEventType:l,smoothSync:d,needUndoTicker:h}=t;r===s.Storage_Selector_key&&o&&(o.workState===s.EventWorkState.Done&&(o!=null&&o.translate)&&(o.translate[0]||o.translate[1])||o.workState!==s.EventWorkState.Done?await((p=this.localWork)==null?void 0:p.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,isSync:!0,textUpdateForWoker:c,emitEventType:l,callback:this.updateSelectorCallback,smoothSync:d,needUndoTicker:h})):o.workState===s.EventWorkState.Done&&((y=this.localWork)==null||y.vNodes.deleteLastTarget()))}}class $ extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.ScaleNode);u(this,"updateSelectorCallback",t=>{var k;const{param:r,postData:o,workShapeNode:a,res:i,newServiceStore:n,smoothSync:c}=t,{updateSelectorOpt:l,willSyncService:d,needUndoTicker:h}=r,p=l.workState,y=o.sp||[],f=i==null?void 0:i.selectRect,S=p===s.EventWorkState.Done?h:void 0;if(p===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:p}],render:[]};if(d){y.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:f,willSyncService:p===s.EventWorkState.Done?!0:c,isSync:!0,points:p===s.EventWorkState.Done&&a.getChildrenPoints()||void 0,textOpt:a.textOpt});const E={useAnimation:l.useAnimation||!1};l.uid&&(E.uid=l.uid);for(const[w,m]of n.entries())m.toolsType===s.EToolsKey.BackgroundSVG&&y.push({...m,workId:w,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:p===s.EventWorkState.Done?!0:c,updateNodeOpt:E,needUndoTicker:S,emitEventType:this.emitEventType}),m.toolsType===s.EToolsKey.Text?y.push({...m,workId:w,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:p===s.EventWorkState.Done?!0:c,updateNodeOpt:E,needUndoTicker:S,emitEventType:this.emitEventType}):(c||p===s.EventWorkState.Done)&&y.push({...m,workId:w,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...E,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((k=this.localWork)==null?void 0:k.vNodes,w)},isSync:!0,needUndoTicker:S,emitEventType:this.emitEventType})}return h&&y.push({type:s.EPostMessageType.None,needUndoTicker:h}),y.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:p}),{sp:y}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var l;const{workId:r,updateNodeOpt:o,willSyncService:a,willSerializeData:i,smoothSync:n,needUndoTicker:c}=t;r===s.Storage_Selector_key&&o&&await((l=this.localWork)==null?void 0:l.updateSelector({updateSelectorOpt:o,willSyncService:a,willSerializeData:i,isSync:!0,callback:this.updateSelectorCallback.bind(this),smoothSync:n,needUndoTicker:c}))}}class H extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.RotateNode);u(this,"updateSelectorCallback",t=>{var w;const{param:r,postData:o,workShapeNode:a,res:i,newServiceStore:n,smoothSync:c}=t,{updateSelectorOpt:l,willSyncService:d,willSerializeData:h,isSync:p,needUndoTicker:y}=r,f=l.workState,S=o.sp||[],k=i==null?void 0:i.selectRect,E=f===s.EventWorkState.Done?y:void 0;if(d){h&&f===s.EventWorkState.Done&&S.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:k,willSyncService:f===s.EventWorkState.Done?!0:c,isSync:p,points:a.getChildrenPoints()});const m={useAnimation:l.useAnimation||!1};if(l.uid&&(m.uid=l.uid),c||f===s.EventWorkState.Done)for(const[v,g]of n.entries())S.push({...g,workId:v,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...m,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((w=this.localWork)==null?void 0:w.vNodes,v)},isSync:p,needUndoTicker:E,emitEventType:this.emitEventType})}return y&&S.push({type:s.EPostMessageType.None,needUndoTicker:y}),S.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}),{sp:S}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var h;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:c,smoothSync:l,needUndoTicker:d}=t;r===s.Storage_Selector_key&&o&&await((h=this.localWork)==null?void 0:h.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:c,isSync:!0,callback:this.updateSelectorCallback,smoothSync:l,needUndoTicker:d}))}}class Q extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetFontStyle)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,textUpdateForWoker:c,callback:this.updateSelectorCallback}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,updateSelectorOpt:d,textUpdateForWoker:h,requestId:p,emitEventType:y}=r,f=o.sp||[],S=n==null?void 0:n.selectRect;if(c&&f){d.fontSize&&f.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:S,willSyncService:c,isSync:l,points:i.getChildrenPoints()});for(const[k,E]of a.entries())h&&E.toolsType===s.EToolsKey.Text?f.push({...E,workId:k,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:y,requestId:p}):f.push({...E,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:y,requestId:p})}return{sp:f}}}class X extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetPoint);u(this,"updateSelectorCallback",t=>{const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,needUndoTicker:d}=r,h=o.sp||[],p=n==null?void 0:n.selectRect;if(c&&h){for(const[y,f]of a.entries())h.push({...f,workId:y,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,needUndoTicker:d,emitEventType:this.emitEventType});h.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:p,willSyncService:c,isSync:l,points:i.getChildrenPoints()})}return d&&h.push({type:s.EPostMessageType.None,needUndoTicker:d}),h.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:r.updateSelectorOpt.workState}),{sp:h}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,needUndoTicker:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,emitEventType:this.emitEventType,willSerializeData:n,isSync:!0,textUpdateForWoker:c,callback:this.updateSelectorCallback,needUndoTicker:l}))}}class Y extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetLock)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,updateSelectorOpt:d,needUndoTicker:h,requestId:p,emitEventType:y}=r,f=o.sp||[],S=n==null?void 0:n.selectRect;if(c&&f){for(const[k,E]of a.entries())f.push({...E,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:y,requestId:p});f.push({isLocked:d.isLocked,selectorColor:i.selectorColor,scaleType:i.scaleType,canRotate:i.canRotate,type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:S,willSyncService:c,isSync:l})}return h&&f.push({type:s.EPostMessageType.None,needUndoTicker:h}),{sp:f}}}class Z extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetShapeOpt)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,needUndoTicker:c,requestId:l,emitEventType:d}=r,h=o.sp||[];if(i&&h)for(const[p,y]of a.entries())h.push({...y,workId:p,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:d,requestId:l});return c&&h.push({type:s.EPostMessageType.None,needUndoTicker:c}),{sp:h}}}class j{constructor(e){u(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case s.EmitEventType.TranslateNode:return new V;case s.EmitEventType.ZIndexNode:return new z;case s.EmitEventType.CopyNode:return new K;case s.EmitEventType.SetColorNode:return new _;case s.EmitEventType.ScaleNode:return new $;case s.EmitEventType.RotateNode:return new H;case s.EmitEventType.SetFontStyle:return new Q;case s.EmitEventType.SetPoint:return new X;case s.EmitEventType.SetLock:return new Y;case s.EmitEventType.SetShapeOpt:return new Z}}registerForMainThread(e){return this.builders.forEach(t=>{t&&t.registerMainThread(e)}),this}async consumeForMainThread(e){for(const t of this.builders.values())if(await(t==null?void 0:t.consume(e)))return!0;return!1}}function J({subThreads:b,layers:e,scene:t,removeLayerTexture:r}){let o;for(const a of b)try{a.destroy()}catch(i){o||(o=i)}for(const a of e){const i=a.parent;if(i)try{r(a,i)}catch(n){o||(o=n)}try{a.remove()}catch(n){o||(o=n)}}try{t.remove()}catch(a){o||(o=a)}if(o)throw o}const ee=4;class te{constructor(e={}){u(this,"pendingFrames",new Map);u(this,"failedCanvases",new Set);u(this,"tailFrameCount");u(this,"requestFrame");u(this,"cancelFrame");u(this,"onReadbackError");u(this,"frameHandle");u(this,"destroyed",!1);this.tailFrameCount=Math.max(1,Math.floor(e.tailFrameCount??ee)),this.requestFrame=e.requestFrame??(t=>requestAnimationFrame(t)),this.cancelFrame=e.cancelFrame??(t=>cancelAnimationFrame(t)),this.onReadbackError=e.onReadbackError}markRendered(e){this.destroyed||(this.pendingFrames.set(e,this.tailFrameCount),this.schedule())}destroy(){this.destroyed||(this.destroyed=!0,this.frameHandle!==void 0&&(this.cancelFrame(this.frameHandle),this.frameHandle=void 0),this.pendingFrames.clear(),this.failedCanvases.clear())}schedule(){this.destroyed||this.frameHandle!==void 0||this.pendingFrames.size===0||(this.frameHandle=this.requestFrame(()=>this.flushFrame()))}flushFrame(){var e,t;if(this.frameHandle=void 0,!this.destroyed){for(const[r,o]of this.pendingFrames){if(!r.isConnected||r.width<=0||r.height<=0){this.pendingFrames.delete(r);continue}try{(e=r.getContext("2d"))==null||e.getImageData(0,0,1,1)}catch(a){this.failedCanvases.has(r)||(this.failedCanvases.add(r),(t=this.onReadbackError)==null||t.call(this,a))}o<=1?this.pendingFrames.delete(r):this.pendingFrames.set(r,o-1)}this.schedule()}}}class se{constructor(e,t){u(this,"viewId");u(this,"fullLayer");u(this,"topLayer");u(this,"localLayer");u(this,"serviceLayer");u(this,"snapshotFullLayer");u(this,"vNodes");u(this,"master");u(this,"opt");u(this,"cameraOpt");u(this,"scene");u(this,"localWork");u(this,"serviceWork");u(this,"topWork");u(this,"taskUpdateCameraId");u(this,"taskUpdateCameraResolve");u(this,"debounceUpdateCameraId");u(this,"activeCameraSettledRender");u(this,"activeCameraTaskContext");u(this,"debounceUpdateCache",new Set);u(this,"mainThreadPostId");u(this,"destroyed",!1);u(this,"readbackScheduler");u(this,"restoreLayerRenderCallbacks",[]);u(this,"viewOwner");u(this,"viewGeneration");u(this,"combinePostMsg",new Set);u(this,"methodBuilder");u(this,"cacheImages",new Map);u(this,"imageResolveMap",new Map);this.viewId=e,this.opt=t,this.viewOwner=t.viewOwner,this.viewGeneration=t.viewGeneration,this.scene=this.createScene({...t.canvasOpt,container:t.container}),this.master=t.master;const r=s.DefaultAppliancePluginExtrasOptions.bufferSize.full,o=s.DefaultAppliancePluginExtrasOptions.bufferSize.sub;this.fullLayer=this.createLayer("fullLayer",this.scene,{...t.layerOpt,bufferSize:this.viewId===s.Main_View_Id?r:o*2}),this.topLayer=this.createLayer("topLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),this.localLayer=this.createLayer("localLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),this.serviceLayer=this.createLayer("serviceLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),t.mainThreadRenderMode==="readback"&&this.enableCanvas2DReadback([this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent]),this.vNodes=new s.VNodeManager(e,this.scene);const a={thread:this,vNodes:this.vNodes};this.localWork=new G(a),this.serviceWork=new q(a),this.topWork=new U(a),this.vNodes.init(this.fullLayer),this.methodBuilder=new j([s.EmitEventType.CopyNode,s.EmitEventType.SetColorNode,s.EmitEventType.DeleteNode,s.EmitEventType.RotateNode,s.EmitEventType.ScaleNode,s.EmitEventType.TranslateNode,s.EmitEventType.ZIndexNode,s.EmitEventType.SetFontStyle,s.EmitEventType.SetPoint,s.EmitEventType.SetLock,s.EmitEventType.SetShapeOpt]).registerForMainThread(this)}getCachedImages(e){var t;return(t=this.cacheImages.get(e))==null?void 0:t.imageSource}getCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())if(t===e&&r.imageSource)return r.imageSource}deleteCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())r.workId===e&&(this.closeImageSource(r.imageSource),this.cacheImages.delete(t))}clearCacheImages(){this.cacheImages.forEach(e=>this.closeImageSource(e.imageSource)),this.cacheImages.clear()}closeImageSource(e){if(!(!("close"in e)||typeof e.close!="function"))try{e.close()}catch{}}clearImageResolveMap(e){this.imageResolveMap.forEach(({timer:t,resolve:r,reject:o},a)=>{t&&clearTimeout(t),e!==void 0?o==null||o(e):r==null||r(a)}),this.imageResolveMap.clear()}post(e){this.destroyed||(this.combinePostMsg.add(e),this.runBatchPostData())}reportRendererBusinessError(e,t){const r=s.toRendererBusinessError(e,t);r.reported||(r.reported=!0,this.post({sp:[{type:s.EPostMessageType.ReportError,viewId:this.viewId,viewGeneration:this.viewGeneration,reportErrorCode:"RENDERER_RUNTIME_ERROR",reportStage:r.stage,reportError:r.message,reportString:s.formatRendererBusinessError(r,t,{viewId:this.viewId,renderer:"mainThread"})}]}))}updateDpr(e){this.scene.displayRatio=e}async on(e){var t,r,o,a,i;if(this.destroyed){try{(t=e.imageBitmap)==null||t.close()}catch{}return}if(!await this.methodBuilder.consumeForMainThread(e)){const{msgType:n,toolsType:c,opt:l,dataType:d,workId:h,workState:p,imageSrc:y,imageBitmap:f,imageElement:S,workIds:k,isLockSentEventCursor:E,requestId:w}=e,m=h==null?void 0:h.toString();switch(n){case s.EPostMessageType.UpdateDpr:D.isNumber(e.dpr)&&this.updateDpr(e.dpr);break;case s.EPostMessageType.AuthClear:{const{clearUids:v,localUid:g}=e;this.vNodes.setCanClearUids(v),this.vNodes.setLocalUid(g);break}case s.EPostMessageType.Destroy:this.destroy();break;case s.EPostMessageType.CancelBitmapEraser:{const v=m;v&&this.localWork.abortBitmapEraser(v);break}case s.EPostMessageType.Clear:this.clearAll();break;case s.EPostMessageType.ServiceSyncCommit:{if(this.destroyed)break;const v=[(r=this.fullLayer)==null?void 0:r.parent,(o=this.topLayer)==null?void 0:o.parent,(a=this.localLayer)==null?void 0:a.parent,(i=this.serviceLayer)==null?void 0:i.parent].filter(Boolean);try{await s.waitForRendererBusiness((async()=>{await s.flushServiceRenderBarrier(this.serviceWork,v)})(),{business:"service-sync-commit",stage:"flush-and-prepare-render",timeoutMs:5e3})}catch(g){throw s.toRendererBusinessError(g,{business:"service-sync-commit",stage:"flush-and-prepare-render"})}if(this.destroyed)break;this.post({sp:[{type:s.EPostMessageType.ServiceSyncCommit,viewId:this.viewId,viewGeneration:this.viewGeneration,scenePath:e.scenePath,serviceSyncId:e.serviceSyncId,serviceRevision:e.serviceRevision}]});break}case s.EPostMessageType.UpdateCamera:try{await s.runCameraUpdateWithTimeout(e.cameraTaskId,async v=>{this.activeCameraTaskContext=v;try{await this.updateCamera(e,v)}finally{this.activeCameraTaskContext===v&&(this.activeCameraTaskContext=void 0)}})}catch(v){throw this.cameraOpt=void 0,this.cancelCameraSettledRender(),v}break;case s.EPostMessageType.UpdateTools:if(c&&l){const v={toolsType:c,toolsOpt:l};this.topWork.canUseTopLayer(c)?this.topWork.setToolsOpt(v):this.localWork.setToolsOpt(v)}break;case s.EPostMessageType.CreateWork:if(m&&l&&c){if(this.topWork.canUseTopLayer(c)){this.topWork.getToolsOpt()||this.topWork.setToolsOpt({toolsType:c,toolsOpt:l}),this.topWork.setWorkOptions(m,l);break}this.localWork.getToolsOpt()||this.localWork.setToolsOpt({toolsType:c,toolsOpt:l}),this.localWork.setWorkOptions(m,l)}break;case s.EPostMessageType.DrawWork:p===s.EventWorkState.Done&&d===s.EDataType.Local?(await this.consumeDrawAll(d,e),c===s.EToolsKey.LaserPen&&E&&this.post({sp:[{type:s.EPostMessageType.None,isLockSentEventCursor:E}]})):await this.consumeDraw(d,e);break;case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:if(c&&this.topWork.canUseTopLayer(c)){await this.consumeDrawAll(d,e);break}await this.consumeFull(d,e);break;case s.EPostMessageType.RemoveNode:await this.removeNode(e);return;case s.EPostMessageType.Select:d===s.EDataType.Local||h===s.Storage_Selector_key?await this.localWork.updateFullSelectWork(e):d===s.EDataType.Service&&this.serviceWork.runSelectWork(e);break;case s.EPostMessageType.CursorBlur:this.localWork.cursorBlur();return;case s.EPostMessageType.CursorHover:this.localWork.cursorHover(e);break;case s.EPostMessageType.GetTextActive:d===s.EDataType.Local&&this.localWork.checkTextActive(e);break;case s.EPostMessageType.GetImageBitMap:if(y&&(f||S)&&h){const v=this.imageResolveMap.get(y);if(!v||v.requestId!==w){this.closeImageSource(f||S);break}const g=h.toString();this.deleteCachedImagesByWorkId(g),this.cacheImages.set(y,{imageSource:f||S,workId:g});const{resolve:M,timer:W}=v;W&&clearTimeout(W),M&&M(y)}break;case s.EPostMessageType.GetVNodeInfo:if(h&&k){const v=k.map(g=>this.vNodes.get(g));this.post({sp:[{type:s.EPostMessageType.GetVNodeInfo,dataType:s.EDataType.Local,workId:h,vInfo:v}]})}break}}}getIconSize(e,t,r){const o=e*r,a=t*r;return o<=50||a<=50?[50,50]:o<=100||a<=100?[100,100]:o<=200||a<=200?[200,200]:o<=400||a<=400?[400,400]:o<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(e){const{toolsType:t,opt:r,workId:o,requestId:a}=e;if(t===s.EToolsKey.Image&&r&&o){const i=o.toString(),{src:n,type:c,width:l,height:d,strokeColor:h}=r;if(!n||!c||!l||!d)return;let p=n;if(c===s.EImageType.Iconify){const[m,v]=this.getIconSize(l,d,this.opt.displayer.dpr);p=s.getIconImageSrc(n,m,v,h)}if(this.cacheImages.has(p)){const m=this.getCachedImages(p);if(m)return m}const f=this.imageResolveMap.get(p);if(f)return await f.promise,this.getCachedImages(p);let S,k;const E=new Promise((m,v)=>{S=m,k=v}),w={resolve:S,reject:k,timer:void 0,requestId:a,promise:E};return w.timer=setTimeout(()=>{this.imageResolveMap.get(p)===w&&S(p)},5e3),this.imageResolveMap.set(p,w),this.opt.post({sp:[{imageSrc:p,workId:i,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!1,requestId:a,type:s.EPostMessageType.GetImageBitMap}]}),await E,this.imageResolveMap.get(p)===w&&this.imageResolveMap.delete(p),this.getCachedImages(p)}}async removeNode(e){const{dataType:t,workId:r,removeIds:o}=e,a=o||[];if(r&&a.push(r.toString()),a.length)for(const i of a){if(i===s.Storage_Selector_key){await this.localWork.removeSelector(e);continue}t===s.EDataType.Local?this.localWork.removeWork(e):t===s.EDataType.Service&&this.serviceWork.removeWork(e),await this.localWork.colloctEffectSelectWork(e)}}async consumeFull(e,t){const r=await this.localWork.colloctEffectSelectWork(t);r&&e===s.EDataType.Local&&await this.localWork.consumeFull(r),r&&e===s.EDataType.Service&&this.serviceWork.consumeFull(r)}setCameraOpt(e){this.cameraOpt=e;const{scale:t,centerX:r,centerY:o,width:a,height:i}=e;(a!==this.scene.width||i!==this.scene.height)&&this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[t,t]),this.fullLayer.setAttribute("translate",[-r,-o]),this.topLayer.setAttribute("scale",[t,t]),this.topLayer.setAttribute("translate",[-r,-o]),this.localLayer.setAttribute("scale",[t,t]),this.localLayer.setAttribute("translate",[-r,-o]),this.serviceLayer.setAttribute("scale",[t,t]),this.serviceLayer.setAttribute("translate",[-r,-o])}runBatchPostData(){this.destroyed||this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}combinePostData(){var a;this.mainThreadPostId=void 0;const e=[];let t,r,o;for(const i of this.combinePostMsg.values()){if((a=i.sp)!=null&&a.length)for(const n of i.sp){const c={...n,viewId:n.viewId||this.viewId,viewGeneration:n.viewGeneration??this.viewGeneration};let l=!1;for(const d of e)if(D.isEqual(c,d)){l=!0;break}l||e.push(c)}D.isNumber(i.fullWorkerDrawCount)&&(t=i.fullWorkerDrawCount),D.isNumber(i.consumeCount)&&(r=i.consumeCount,o=i.consumeWorkId)}return this.combinePostMsg.clear(),{sp:e,fullWorkerDrawCount:t,consumeCount:r,consumeWorkId:o,viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner}}combinePost(){var r,o;if(this.destroyed){this.mainThreadPostId=void 0,this.combinePostMsg.clear();return}const e=this.combinePostData(),t=(r=e.sp)==null?void 0:r.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker||a.collectUndoTicker||a.eraseTxnPhase);t!=null&&t.length?e.sp=t.map(a=>({...a,viewId:a.viewId||this.viewId,viewGeneration:a.viewGeneration??this.viewGeneration})):delete e.sp,e.consumeCount===void 0&&(delete e.consumeCount,delete e.consumeWorkId),e.fullWorkerDrawCount===void 0&&delete e.fullWorkerDrawCount,!this.destroyed&&(e!=null&&e.consumeCount||e!=null&&e.fullWorkerDrawCount||(o=e.sp)!=null&&o.length)&&this.opt.post(e)}clearAll(){this.cancelCameraSettledRender(),this.debounceUpdateCache.clear(),this.fullLayer.children.length&&(this.fullLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.fullLayer,this.fullLayer.parent)),this.clearCacheImages(),this.clearImageResolveMap(),this.localWork.clearAll(),this.topWork.clearAll(),this.serviceWork.clearAll(),this.vNodes.clear(),this.post({sp:[{type:s.EPostMessageType.Clear}]})}async consumeDrawAll(e,t){const{toolsType:r,workId:o}=t;if(o){const a=o.toString();if(r&&this.topWork.canUseTopLayer(r)){e===s.EDataType.Local&&(this.topWork.getLocalWorkShape(o.toString())||this.topWork.createLocalWork(t)),await this.topWork.consumeDrawAll(t);return}e===s.EDataType.Local&&(this.localWork.getWorkShape(a)||this.localWork.createLocalWork(t),await this.localWork.consumeDrawAll(t,this.serviceWork))}}async consumeDraw(e,t){const{opt:r,workId:o,toolsType:a}=t;if(o&&a&&r){const i=o.toString();if(this.topWork.canUseTopLayer(a)){e===s.EDataType.Local&&(this.topWork.getLocalWorkShape(i)||this.topWork.createLocalWork(t)),this.topWork.consumeDraw(t);return}e===s.EDataType.Local?(this.localWork.getWorkShape(i)||this.localWork.createLocalWork(t),await this.localWork.consumeDraw(t,this.serviceWork)):e===s.EDataType.Service&&this.serviceWork.consumeDraw(t);return}}async updateCamera(e,t){var d,h;const{cameraOpt:r,scenePath:o,cameraTaskId:a}=e;let i=!1;const n=this.cameraOpt,c=!!(r&&D.isEqual(n,r));let l=!1;if(r&&c){const p=!!this.activeCameraSettledRender;if(this.retargetCameraSettledRender(a))return;if(!p){D.isNumber(a)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:a});return}l=!0}if(r&&(!c||l)){this.cancelCameraSettledRender();const p=!n||n.scale!==r.scale||n.centerX!==r.centerX||n.centerY!==r.centerY||n.width!==r.width||n.height!==r.height;if(this.taskUpdateCameraId&&(clearTimeout(this.taskUpdateCameraId),this.taskUpdateCameraId=void 0,(d=this.taskUpdateCameraResolve)==null||d.call(this,!1),this.taskUpdateCameraResolve=void 0),o){let m;do{m=[];for(const[g,M]of this.localWork.getWorkShapes().entries())switch(M.toolsType){case s.EToolsKey.Text:case s.EToolsKey.BitMapEraser:case s.EToolsKey.PencilEraser:case s.EToolsKey.Eraser:case s.EToolsKey.Selector:case s.EToolsKey.LaserPen:break;default:g!==s.Cursor_Hover_Id&&g!==s.Storage_Selector_key&&m.push(`${g}:${M.toolsType}`);break}if(t&&(t.stage="blocking-works",t.blockingWorks=m),!m.length)break;if(!await new Promise(g=>{this.taskUpdateCameraResolve=g,this.taskUpdateCameraId=setTimeout(()=>{this.taskUpdateCameraId=void 0,this.taskUpdateCameraResolve=void 0,g(!0)},s.Task_Time_Interval)})||t!=null&&t.aborted)return}while(m.length);t&&(t.stage="update-camera",t.blockingWorks=void 0)}if(t!=null&&t.aborted)return;const y=new Map;for(const[m,v]of this.vNodes.getNodesByType(s.EToolsKey.Text).entries()){const g=v.rect;y.set(m,D.cloneDeep(g))}for(const[m,v]of this.vNodes.gethasEraserNodes().entries())y.set(m,D.cloneDeep(v.rect));const f=new Set(y.keys());let S=!1;if(this.localWork.hasSelector()){const m=(h=this.localWork.getSelector())==null?void 0:h.selectIds;if(m){S=!0;for(const v of m)f.add(v)}}let k=!1;if(this.serviceWork.selectorWorkShapes.size)for(const m of this.serviceWork.selectorWorkShapes.values()){const v=m.selectIds;if(v){k=!0;for(const g of v)f.add(g)}}if(this.setCameraOpt(r),this.vNodes.curNodeMap.size){this.vNodes.clearTarget(),this.vNodes.updateHighLevelNodesRect(f);for(const[g,M]of y.entries()){const W=this.vNodes.get(g);if(W){const C=M,I=W.rect,T=this.getSceneRect(),R=s.getRectMatrixrRelation(C,T),P=s.getRectMatrixrRelation(I,T);let N=l;(R!==P||C.w!==I.w||C.h!==I.h||P===s.EMatrixrRelationType.intersect)&&(N=!0);const{toolsType:L,opt:O}=W,A=O.eraserlines&&O.eraserlines.length>0||!!O.eraserFaces;(N||p&&A)&&(L===s.EToolsKey.Text||A)&&this.debounceUpdateCache.add(g)}}if(S&&this.localWork.reRenderSelector(),k)for(const[g,M]of this.serviceWork.selectorWorkShapes.entries())this.serviceWork.runSelectWork({workId:g,selectIds:M.selectIds,msgType:s.EPostMessageType.Select,dataType:s.EDataType.Service,viewId:this.viewId});i=!0;const m={cancelled:!1,cameraTaskId:a,context:t};this.activeCameraSettledRender=m;const v=()=>!this.destroyed&&!m.cancelled&&this.activeCameraSettledRender===m&&!(t!=null&&t.aborted);this.debounceUpdateCameraId=setTimeout(async()=>{var g;this.debounceUpdateCameraId=void 0;try{if(!v())return;const M=[];for(const I of this.debounceUpdateCache.values()){const T=(g=this.fullLayer)==null?void 0:g.getElementsByName(I)[0],R=this.vNodes.get(I);if(R){const{toolsType:P,opt:N}=R;if(T||P!==s.EToolsKey.Text){const L=this.localWork.setFullWork({toolsType:P,opt:N,workId:I});if(L){if(P===s.EToolsKey.Text)M.push(L.consumeServiceAsync({isFullWork:!0,replaceId:I,boxRect:this.getSceneRect(),isActive:v}));else if(N.eraserlines&&N.eraserlines.length>0||N.eraserFaces){const O=L.consumeService({op:R.op,isFullWork:!0,replaceId:I,workState:s.EventWorkState.Done});this.localWork.clearWorkShapeNodeCache(I),M.push(Promise.resolve(O))}}}}this.debounceUpdateCache.delete(I)}if(await Promise.all(M),!v())return;this.vNodes.updateLowLevelNodesRect(),this.vNodes.clearHighLevelIds();const W=[this.fullLayer.parent.prepareRender,this.topLayer.parent.prepareRender,this.localLayer.parent.prepareRender,this.serviceLayer.parent.prepareRender];if(m.renderLayers=[this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent],await Promise.all(W),m.renderLayers=void 0,!v())return;const C=m.cameraTaskId;D.isNumber(C)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:C})}catch(M){if(!v())return;const W={code:"RENDERER_BUSINESS_ERROR",business:"updateCamera",message:M instanceof Error?M.message:String(M),stage:"camera-settled-render",workerType:"mainThread"},C=m.cameraTaskId;if(D.isNumber(C))try{this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraTaskId:C,cameraTaskStatus:"failed",cameraTaskError:W})}catch(I){console.error(`[cameraSettledRender] failed ACK post failed viewId=${this.viewId} taskId=${C}`,I)}}finally{m.renderLayers=void 0,this.activeCameraSettledRender===m&&(this.activeCameraSettledRender=void 0)}},s.Task_Time_Interval)}const E=[this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent],w=Promise.all(E.map(m=>m.prepareRender));if(t&&!await s.waitForCameraUpdateTask(t,w,"prepare-render")){E.filter(v=>v.cancelPendingRender()).forEach(v=>v.render()),w.catch(()=>{});return}if(t||await w,t!=null&&t.aborted)return;!i&&D.isNumber(a)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:a})}}getSceneRect(){const{width:e,height:t}=this.scene;return{x:0,y:0,w:Math.floor(e),h:Math.floor(t)}}createScene(e){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...e,autoRender:!0,id:this.viewId,contextType:"2d"})}createLayer(e,t,r){const{width:o,height:a}=r,i=`canvas-${e}`,n=t.layer(i,{...r,offscreen:!1}),c=new s.Group({anchor:[.5,.5],pos:[o*.5,a*.5],size:[o,a],name:"viewport",id:e});return n.append(c),c}enableCanvas2DReadback(e){this.readbackScheduler=new te({onReadbackError:t=>this.opt.master.Logger.warn(`[Appliance]: [main-thread-readback] stage=failed viewId=${this.viewId} error=${t instanceof Error?t.message:String(t)}`)});for(const t of e){const r=t.render,o=(...a)=>{var c;const i=r.apply(t,a),n=t.canvas;return n instanceof HTMLCanvasElement&&((c=this.readbackScheduler)==null||c.markRendered(n)),i};t.render=o,this.restoreLayerRenderCallbacks.push(()=>{t.render===o&&(t.render=r)})}}disableCanvas2DReadback(){var e;(e=this.readbackScheduler)==null||e.destroy(),this.readbackScheduler=void 0;for(const t of this.restoreLayerRenderCallbacks.splice(0))t()}updateScene(e){this.scene.attr({...e});const{width:t,height:r}=e;this.scene.width=t,this.scene.height=r,this.updateLayer({width:t,height:r})}updateLayer(e){const{width:t,height:r}=e;this.fullLayer.parent.setAttribute("width",t),this.fullLayer.parent.setAttribute("height",r),this.fullLayer.setAttribute("size",[t,r]),this.fullLayer.setAttribute("pos",[t*.5,r*.5]),this.topLayer.parent.setAttribute("width",t),this.topLayer.parent.setAttribute("height",r),this.topLayer.setAttribute("size",[t,r]),this.topLayer.setAttribute("pos",[t*.5,r*.5]),this.localLayer.parent.setAttribute("width",t),this.localLayer.parent.setAttribute("height",r),this.localLayer.setAttribute("size",[t,r]),this.localLayer.setAttribute("pos",[t*.5,r*.5]),this.serviceLayer.parent.setAttribute("width",t),this.serviceLayer.parent.setAttribute("height",r),this.serviceLayer.setAttribute("size",[t,r]),this.serviceLayer.setAttribute("pos",[t*.5,r*.5])}cancelCameraSettledRender(){var t;this.debounceUpdateCameraId!==void 0&&(clearTimeout(this.debounceUpdateCameraId),this.debounceUpdateCameraId=void 0);const e=this.activeCameraSettledRender;e&&(e.cancelled=!0,(t=e.renderLayers)==null||t.forEach(r=>r.cancelPendingRender()),this.activeCameraSettledRender=void 0)}retargetCameraSettledRender(e){var r;if(!D.isNumber(e))return!1;const t=this.activeCameraSettledRender;return!t||t.cancelled||(r=t.context)!=null&&r.aborted?!1:(t.cameraTaskId=e,!0)}cancelCameraBlockingWait(){this.taskUpdateCameraId!==void 0&&(clearTimeout(this.taskUpdateCameraId),this.taskUpdateCameraId=void 0);const e=this.taskUpdateCameraResolve;this.taskUpdateCameraResolve=void 0,e==null||e(!1)}destroy(){var e,t;this.destroyed||(this.destroyed=!0,this.disableCanvas2DReadback(),(t=(e=this.activeCameraTaskContext)==null?void 0:e.abort)==null||t.call(e),this.activeCameraTaskContext=void 0,this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.combinePostMsg.clear(),this.cancelCameraBlockingWait(),this.cancelCameraSettledRender(),this.debounceUpdateCache.clear(),this.clearCacheImages(),this.clearImageResolveMap(new Error(`main-thread view destroyed: ${this.viewId}`)),this.vNodes.clear(),J({subThreads:[this.localWork,this.serviceWork,this.topWork],layers:[this.fullLayer,this.topLayer,this.localLayer,this.serviceLayer],scene:this.scene,removeLayerTexture:(r,o)=>s.removeTexture(r,o)}))}}class re{constructor(e,t){u(this,"viewId");u(this,"fullLayer");u(this,"master");u(this,"opt");u(this,"viewOwner");u(this,"viewGeneration");u(this,"scene");u(this,"mainThreadPostId");u(this,"combinePostMsg",new Set);u(this,"destroyed",!1);u(this,"workShapes",new Map);u(this,"cacheImages",new Map);u(this,"imageResolveMap",new Map);u(this,"activeRequest");this.viewId=e,this.opt=t,this.viewOwner=t.viewOwner,this.viewGeneration=t.viewGeneration,this.scene=this.createScene({...t.canvasOpt,container:t.container}),this.master=t.master,this.fullLayer=this.createLayer("fullLayer",this.scene,{...t.layerOpt,bufferSize:this.viewId===s.Main_View_Id?6e3:3e3,contextType:"2d"})}getCachedImages(e){var t;return(t=this.cacheImages.get(e))==null?void 0:t.imageSource}getCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())if(t===e&&r.imageSource)return r.imageSource}deleteCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())r.workId===e&&(this.closeImageSource(r.imageSource),this.cacheImages.delete(t))}clearCacheImages(){this.cacheImages.forEach(e=>this.closeImageSource(e.imageSource)),this.cacheImages.clear()}closeImageSource(e){if(e&&!(!("close"in e)||typeof e.close!="function"))try{e.close()}catch{}}releaseMessageImageBitmap(e){this.closeImageSource(e==null?void 0:e.imageBitmap)}releaseBatchImageBitmaps(e){var t,r;(t=e==null?void 0:e.render)==null||t.forEach(o=>this.closeImageSource(o.imageBitmap)),(r=e==null?void 0:e.sp)==null||r.forEach(o=>this.releaseMessageImageBitmap(o))}clearImageResolveMap(){this.imageResolveMap.forEach(({timer:e,resolve:t},r)=>{e&&clearTimeout(e),t==null||t(r)}),this.imageResolveMap.clear()}post(e){if(this.destroyed){this.releaseBatchImageBitmaps(e);return}this.combinePostMsg.add(e),this.runBatchPostData()}reportRequestFailure(e,t,r,o,a){const i=o instanceof Error?o.message:String(o);try{this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner,sp:[{type:s.EPostMessageType.ReportError,viewId:this.viewId,scenePath:r,requestId:t,reportBusiness:e,reportStage:a,reportError:i,reportString:`[SnapshotThreadImpl] ${e} failed; stage=${a}; requestId=${t||"unknown"}; error=${i}`}]})}catch(n){console.error(`[SnapshotThreadImpl] ${e} failure report failed`,n)}}async on(e){if(this.destroyed){this.closeImageSource(e.imageBitmap);return}const{msgType:t,imageSrc:r,imageBitmap:o,imageElement:a,workId:i,requestId:n}=e;switch(t){case s.EPostMessageType.Snapshot:{this.activeRequest={business:"snapshot",scenePath:e.scenePath,requestId:e.requestId};try{await this.getSnapshot(e),this.flushPendingPost()}catch(c){this.destroyed||this.reportRequestFailure("snapshot",e.requestId,e.scenePath,c,"render")}finally{this.activeRequest=void 0,this.destroy()}return}case s.EPostMessageType.BoundingBox:{this.activeRequest={business:"bounding-box",scenePath:e.scenePath,requestId:e.requestId};try{await this.getBoundingRect(e),this.flushPendingPost()}catch(c){this.destroyed||this.reportRequestFailure("bounding-box",e.requestId,e.scenePath,c,"compute")}finally{this.activeRequest=void 0,this.destroy()}return}case s.EPostMessageType.GetImageBitMap:{if(r&&(o||a)&&i){const c=i.toString(),l=this.imageResolveMap.get(r);if(!l||l.requestId!==n){this.closeImageSource(o||a);break}if(this.deleteCachedImagesByWorkId(c),this.cacheImages.set(r,{imageSource:o||a,workId:c}),l){const{resolve:d,timer:h}=l;h&&clearTimeout(h),d&&d(r)}}break}}}getIconSize(e,t,r){const o=e*r,a=t*r;return o<=50||a<=50?[50,50]:o<=100||a<=100?[100,100]:o<=200||a<=200?[200,200]:o<=400||a<=400?[400,400]:o<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(e){const{toolsType:t,opt:r,workId:o,requestId:a}=e;if(t===s.EToolsKey.Image&&r&&o){const i=o.toString(),{src:n,type:c,width:l,height:d,strokeColor:h}=r;if(!n||!c||!l||!d)return;let p=n;if(c===s.EImageType.Iconify){const[w,m]=this.getIconSize(l,d,this.opt.displayer.dpr);p=s.getIconImageSrc(n,w,m,h)}if(this.cacheImages.has(p)){const w=this.getCachedImages(p);if(w)return w}const f=this.imageResolveMap.get(p);if(f)return await f.promise,this.getCachedImages(p);let S;const k=new Promise(w=>{S=w}),E={resolve:S,timer:void 0,requestId:a,promise:k};return E.timer=setTimeout(()=>{this.imageResolveMap.get(p)===E&&S(p)},5e3),this.imageResolveMap.set(p,E),this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner,sp:[{imageSrc:p,workId:i,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!0,type:s.EPostMessageType.GetImageBitMap,requestId:a}]}),await k,this.imageResolveMap.get(p)===E&&this.imageResolveMap.delete(p),this.getCachedImages(p)}}createWorkShapeNode(e){return s.getShapeInstance({...e,fullLayer:this.fullLayer,drawLayer:void 0})}setFullWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r&&o){const a=t.toString();let i;return t&&this.workShapes.has(a)?(i=this.workShapes.get(a),i==null||i.setWorkOptions(r)):i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a}),i?(this.workShapes.set(a,i),i):void 0}}async runFullWork(e){var o;const t=this.setFullWork(e),r=e.ops&&s.transformToNormalData(e.ops);if(t){let a,i;const n=(o=t.getWorkId())==null?void 0:o.toString();return t.toolsType===s.EToolsKey.BackgroundSVG?a=t.consumeService({isFullWork:!0,replaceId:n}):t.toolsType===s.EToolsKey.Image?a=await t.consumeServiceAsync({isFullWork:!0,worker:this,requestId:e.requestId}):t.toolsType===s.EToolsKey.Text?a=await t.consumeServiceAsync({isFullWork:!0,replaceId:n,isDrawLabel:!0}):(a=t.consumeService({op:r,isFullWork:!0,replaceId:n}),i=(e==null?void 0:e.updateNodeOpt)&&t.updataOptService(e.updateNodeOpt)),s.computRect(a,i)}}async getSnapshot(e){const{scenePath:t,scenes:r,cameraOpt:o,w:a,h:i,requestId:n}=e;if(!(t&&r&&o))throw new Error("snapshot input is incomplete");this.setCameraOpt(o);for(const[l,d]of Object.entries(r))if(d!=null&&d.type)switch(d==null?void 0:d.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const{opt:h}=d,p={...d,opt:h,workId:l,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId,requestId:n};await this.runFullWork(p);break}}let c;a&&i&&(c={resizeWidth:a,resizeHeight:i}),await this.getSnapshotRender({scenePath:t,options:c,requestId:n})}getSceneRect(){const{width:e,height:t}=this.scene;return{x:0,y:0,w:Math.floor(e),h:Math.floor(t)}}getRectImageBitmap(e,t){const r=Math.floor(e.x*this.opt.displayer.dpr),o=Math.floor(e.y*this.opt.displayer.dpr),a=e.w>0&&Math.floor(e.w*this.opt.displayer.dpr||1)||1,i=e.h>0&&Math.floor(e.h*this.opt.displayer.dpr||1)||1;return createImageBitmap(this.fullLayer.parent.canvas,r,o,a,i,t)}async getSnapshotRender(e){var i;const{scenePath:t,options:r,requestId:o}=e;((i=this.fullLayer)==null?void 0:i.parent).render();const a=await this.getRectImageBitmap(this.getSceneRect(),r);if(a){if(this.destroyed){this.closeImageSource(a);return}this.post({sp:[{type:s.EPostMessageType.Snapshot,scenePath:t,imageBitmap:a,viewId:this.viewId,index:0,requestId:o}]}),this.fullLayer&&!this.destroyed&&s.removeAllChildren(this.fullLayer,this.fullLayer.parent)}}async getBoundingRect(e){const{scenePath:t,scenes:r,cameraOpt:o,requestId:a}=e;if(!(t&&r&&o))throw new Error("bounding-box input is incomplete");this.setCameraOpt(o);let i;for(const[n,c]of Object.entries(r))if(c!=null&&c.type)switch(c==null?void 0:c.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const l=await this.runFullWork({...c,workId:n,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId,requestId:a});i=s.computRect(i,l);break}}this.post({sp:[{type:s.EPostMessageType.BoundingBox,scenePath:t,rect:i||{x:0,y:0,w:0,h:0},viewId:this.viewId,requestId:a}]})}setCameraOpt(e){const{scale:t,centerX:r,centerY:o,width:a,height:i}=e;this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[t,t]),this.fullLayer.setAttribute("translate",[-r,-o])}runBatchPostData(){this.destroyed||this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}flushPendingPost(){!this.combinePostMsg.size||this.destroyed||(this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.combinePost())}combinePostData(){var t;this.mainThreadPostId=void 0;const e=[];for(const r of this.combinePostMsg.values())if((t=r.sp)!=null&&t.length)for(const o of r.sp){let a=!1;for(const i of e)if(s.isEqual(o,i)){a=!0;break}a?this.releaseMessageImageBitmap(o):e.push(o)}return this.combinePostMsg.clear(),{sp:e}}combinePost(){var r,o;if(this.destroyed){this.mainThreadPostId=void 0,this.releaseBatchImageBitmaps({sp:[...this.combinePostMsg].flatMap(a=>a.sp||[])}),this.combinePostMsg.clear();return}const e=this.combinePostData(),t=(r=e.sp)==null?void 0:r.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker);if(e.sp&&t){const a=new Set(t);e.sp.filter(i=>!a.has(i)).forEach(i=>this.releaseMessageImageBitmap(i))}if(t!=null&&t.length?e.sp=t.map(a=>a.viewId?a:{...a,viewId:this.viewId}):delete e.sp,!this.destroyed&&((o=e.sp)!=null&&o.length))try{this.opt.post({...e,viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner})}catch(a){throw this.releaseBatchImageBitmaps(e),a}else this.releaseBatchImageBitmaps(e)}createScene(e){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...e,autoRender:!1,contextType:"2d"})}createLayer(e,t,r){const{width:o,height:a}=r,i=`canvas-${e}`,n=t.layer(i,r),c=new s.Group({anchor:[.5,.5],pos:[o*.5,a*.5],size:[o,a],name:"viewport",id:e});return n.append(c),c}updateScene(e){this.scene.attr({...e});const{width:t,height:r}=e;this.scene.width=t,this.scene.height=r,this.updateLayer({width:t,height:r})}updateLayer(e){const{width:t,height:r}=e;this.fullLayer.parent.setAttribute("width",t),this.fullLayer.parent.setAttribute("height",r),this.fullLayer.setAttribute("size",[t,r]),this.fullLayer.setAttribute("pos",[t*.5,r*.5])}destroy(e){if(this.destroyed)return;e&&this.activeRequest&&this.reportRequestFailure(this.activeRequest.business,this.activeRequest.requestId,this.activeRequest.scenePath,new Error(`snapshot request ${e}`),e),this.activeRequest=void 0,this.destroyed=!0,this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.releaseBatchImageBitmaps({sp:[...this.combinePostMsg].flatMap(o=>o.sp||[])}),this.combinePostMsg.clear();const t=[];this.workShapes.forEach(o=>{try{o.clearTmpPoints()}catch(a){t.push(a)}}),this.workShapes.clear();try{this.clearCacheImages()}catch(o){t.push(o)}try{this.clearImageResolveMap()}catch(o){t.push(o)}const r=this.fullLayer.parent;try{this.fullLayer.remove()}catch(o){t.push(o)}try{r&&s.removeTexture(this.fullLayer,r)}catch(o){t.push(o)}try{this.scene.remove()}catch(o){t.push(o)}if(t.length)throw t[0]}}class oe{constructor(e){u(this,"mainThreadMap",new Map);u(this,"cameraRenderQueueByView",new Map);u(this,"viewGenerationById",new Map);u(this,"viewOwnerById",new Map);u(this,"ownerSequence",0);u(this,"snapshotThreadsByRequest",new Map);u(this,"destroyed",!1);u(this,"master");u(this,"post",e=>{if(this.destroyed){this.releaseBatchResources(e);return}if(e.viewId){const y=this.viewOwnerById.get(e.viewId),f=this.viewGenerationById.get(e.viewId);if(e.viewOwner!==void 0&&(!y||y!==e.viewOwner)||e.viewGeneration!==void 0&&f!==void 0&&f!==e.viewGeneration){this.releaseBatchResources(e);return}}const{fullWorkerDrawCount:t,sp:r,workerTasksqueueCount:o,cameraTaskId:a,cameraTaskStatus:i,cameraTaskError:n,cameraSettledTaskId:c,viewId:l,viewGeneration:d,consumeCount:h,consumeWorkId:p}=e;if(l&&s.isNumber(a)){const y=s.normalizeCameraTaskError(i,n,"mainThread");y?this.master.failCameraTask(l,a,y,d):this.master.ackCameraTask(l,a,d)}l&&s.isNumber(c)&&this.master.ackCameraSettledTask(l,c,d),this.master.isBusy&&s.isNumber(o)&&this.master.setWorkerTasksqueueCount(o),s.isNumber(t)&&this.master.setMaxDrawCount(t),s.isNumber(h)&&this.master.setConsumeCount(h,p),r&&this.master.collectorSyncData(e.viewOwner===void 0?r:r.map(y=>y.type===s.EPostMessageType.GetImageBitMap&&y.viewOwner===void 0?{...y,viewOwner:e.viewOwner}:y))});this.master=e}enqueueViewTask(e,t){const o=(this.cameraRenderQueueByView.get(e)||Promise.resolve()).catch(()=>{}).then(()=>this.destroyed?void 0:t());return this.cameraRenderQueueByView.set(e,o),o}isStaleViewMessage(e){if(!e.viewId||e.viewId===s.Storage_ViewId_ALL||e.viewGeneration===void 0)return!1;const t=this.viewGenerationById.get(e.viewId);return t!==void 0&&e.viewGeneration<t}discardView(e){for(const[r,o]of[...this.snapshotThreadsByRequest.entries()])o.thread.viewId===e&&this.disposeSnapshotThread(r,o.thread,"view-destroyed");const t=this.mainThreadMap.get(e);try{t==null||t.destroy()}catch(r){this.master.Logger.error(`[Appliance]: MainThread View discard failed; viewId=${e}; error=${r instanceof Error?r.message:String(r)}`)}this.mainThreadMap.delete(e),this.cameraRenderQueueByView.delete(e),this.viewOwnerById.delete(e),this.viewGenerationById.set(e,(this.viewGenerationById.get(e)||0)+1)}destroy(){if(this.destroyed)return;this.destroyed=!0;const e=[];for(const[t,r]of[...this.snapshotThreadsByRequest.entries()])try{this.disposeSnapshotThread(t,r.thread)}catch(o){e.push(`snapshot-thread: ${o instanceof Error?o.message:String(o)}`)}this.snapshotThreadsByRequest.clear();for(const t of this.mainThreadMap.values())try{t.destroy()}catch(r){e.push(`view=${t.viewId}: ${r instanceof Error?r.message:String(r)}`)}this.mainThreadMap.clear(),this.cameraRenderQueueByView.clear(),this.viewOwnerById.clear(),e.length&&this.master.Logger.error(`[Appliance]: MainThread destroy completed with cleanup errors: ${e.join("; ")}`)}createMainThread(e,t){return new se(e,t)}createSnapshotThread(e,t){return new re(e,t)}getSnapshotRequestKey(e){return e.requestId||`${e.viewId}\0${e.scenePath||""}\0${e.msgType}`}disposeSnapshotThread(e,t,r){const o=this.snapshotThreadsByRequest.get(e);if(!(!o||o.thread!==t)){this.snapshotThreadsByRequest.delete(e);try{t.destroy(r)}finally{o.surface.remove()}}}releaseMessageBitmap(e){var t;try{(t=e.imageBitmap)==null||t.close()}catch{}}releaseBatchResources(e){var t,r;(t=e.render)==null||t.forEach(o=>this.releaseImageBitmap(o.imageBitmap)),(r=e.sp)==null||r.forEach(o=>this.releaseImageBitmap(o.imageBitmap))}releaseImageBitmap(e){var t;try{(t=e==null?void 0:e.close)==null||t.call(e)}catch{}}async consume(e){var t,r,o;if(this.destroyed){e.forEach(a=>this.releaseMessageBitmap(a));return}for(const a of e.values()){if(this.destroyed){this.releaseMessageBitmap(a);return}const{msgType:i,viewId:n,tasksqueue:c,mainTasksqueueCount:l,cameraTaskId:d,layerOpt:h,offscreenCanvasOpt:p,cameraOpt:y,isSubWorker:f}=a;if(this.isStaleViewMessage(a)){this.releaseMessageBitmap(a);continue}if(i===s.EPostMessageType.Console){console.log(this);continue}if(i===s.EPostMessageType.Init){const w=a.viewGeneration??(this.viewGenerationById.get(n)||0)+1;await this.enqueueViewTask(n,async()=>{var I,T,R;const m=this.viewGenerationById.get(n);if(m!==void 0&&w<m)return;this.viewGenerationById.set(n,w);const v=a.viewOwner||`${n}:${w}:${++this.ownerSequence}`,g=(I=this.master.control.viewContainerManager.getView(n))==null?void 0:I.displayer,M=g==null?void 0:g.canvasContainerRef.current;if(!g||!M||!h||!p){this.viewOwnerById.delete(n);return}this.viewOwnerById.set(n,v);const W=this.mainThreadMap.get(n);W==null||W.destroy();const C=this.createMainThread(n,{displayer:g,container:M,layerOpt:h,master:this.master,canvasOpt:p,viewOwner:v,viewGeneration:w,mainThreadRenderMode:((R=(T=this.master.control)==null?void 0:T.renderingCompatibilityDecision)==null?void 0:R.mainThreadRenderMode)??"normal",post:P=>this.post({...P,viewId:P.viewId||n,viewGeneration:P.viewGeneration??w,viewOwner:v})});this.mainThreadMap.set(n,C),C&&y&&C.setCameraOpt(y),this.post({sp:[{type:s.EPostMessageType.Init,viewId:n,viewGeneration:w}]})});continue}if(i===s.EPostMessageType.Snapshot||i===s.EPostMessageType.BoundingBox){const w=(t=this.master.control.viewContainerManager.getView(n))==null?void 0:t.displayer,m=(r=this.master.control.viewContainerManager.mainView)==null?void 0:r.displayer,v=(o=m==null?void 0:m.snapshotContainerRef)==null?void 0:o.current;if(w&&v&&y){const g=this.getSnapshotRequestKey(a),M=this.snapshotThreadsByRequest.get(g);M&&this.disposeSnapshotThread(g,M.thread,"replaced");const W=document.createElement("div");W.style.width=`${y.width}px`,W.style.height=`${y.height}px`,v.append(W);const C={...s.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:y.width,height:y.height},I={...s.ViewContainerManager.defaultScreenCanvasOpt,width:y.width,height:y.height},T=this.createSnapshotThread(n,{displayer:w,container:W,layerOpt:C,master:this.master,canvasOpt:I,post:this.post,viewOwner:this.viewOwnerById.get(n),viewGeneration:this.viewGenerationById.get(n)});this.snapshotThreadsByRequest.set(g,{thread:T,surface:W}),T.on(a).then(()=>{this.disposeSnapshotThread(g,T)}).catch(R=>{this.master.Logger.error(`[Appliance]: snapshot render failed; viewId=${n}; error=${R instanceof Error?R.message:String(R)}`),this.disposeSnapshotThread(g,T)});continue}this.post({viewId:n,viewGeneration:this.viewGenerationById.get(n),viewOwner:this.viewOwnerById.get(n),sp:[{type:s.EPostMessageType.ReportError,viewId:n,scenePath:a.scenePath,requestId:a.requestId,reportBusiness:i===s.EPostMessageType.Snapshot?"snapshot":"bounding-box",reportStage:"surface-unavailable",reportError:"snapshot surface is unavailable",reportString:`[MainThreadManager] ${i===s.EPostMessageType.Snapshot?"snapshot":"bounding-box"} surface is unavailable; viewId=${n}; requestId=${a.requestId||"unknown"}`}]});continue}if(i===s.EPostMessageType.GetImageBitMap&&f){const w=a.requestId?this.snapshotThreadsByRequest.get(a.requestId):[...this.snapshotThreadsByRequest.values()].find(({thread:m})=>m.viewId===n);w?w.thread.on(a):this.releaseMessageBitmap(a);continue}if(i===s.EPostMessageType.GetImageBitMap){const w=this.mainThreadMap.get(n),m=this.viewGenerationById.get(n),v=this.viewOwnerById.get(n);if(!w||a.viewGeneration!==void 0&&a.viewGeneration!==m||a.viewOwner!==void 0&&a.viewOwner!==v||this.mainThreadMap.get(n)!==w){this.releaseMessageBitmap(a);continue}await w.on(a);continue}if(i===s.EPostMessageType.TasksQueue&&(c!=null&&c.size)){const w=c.get(n),m=this.mainThreadMap.get(n),v=this.viewGenerationById.get(n),g=this.viewOwnerById.get(n);let M;if(w&&m)try{await this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==v||this.viewOwnerById.get(n)!==g||this.mainThreadMap.get(n)!==m||await m.on(w)})}catch(W){if(w.msgType!==s.EPostMessageType.UpdateCamera)throw W;const C=s.isCameraUpdateTimeoutError(W);M={code:C?"RENDERER_BUSINESS_TIMEOUT":"RENDERER_BUSINESS_ERROR",business:"updateCamera",message:W instanceof Error?W.message:String(W),elapsedMs:C?W.elapsedMs:void 0,stage:C?W.stage:"update-camera",blockingWorks:C?W.blockingWorks:void 0,workerType:"mainThread"}}if(M&&s.isNumber(d)){this.post({viewId:n,viewGeneration:v,viewOwner:g,cameraTaskId:d,cameraTaskStatus:M.code==="RENDERER_BUSINESS_TIMEOUT"?"timeout":"failed",cameraTaskError:M});continue}l&&s.isNumber(d)&&this.post({workerTasksqueueCount:l,cameraTaskId:d,viewId:n,viewGeneration:v,viewOwner:g});continue}if(n===s.Storage_ViewId_ALL){const w=[...this.mainThreadMap.entries()];for(const[m,v]of w){const g=this.enqueueViewTask(m,async()=>{this.mainThreadMap.get(m)===v&&(i===s.EPostMessageType.Destroy?(v.destroy(),this.mainThreadMap.delete(m),this.viewOwnerById.delete(m),this.viewGenerationById.set(m,(this.viewGenerationById.get(m)||0)+1)):await v.on(a))});await g,this.cameraRenderQueueByView.get(m)===g&&this.cameraRenderQueueByView.delete(m)}continue}const S=this.mainThreadMap.get(n);if(i===s.EPostMessageType.Destroy&&!S){await this.enqueueViewTask(n,async()=>{this.viewGenerationById.set(n,a.viewGeneration??(this.viewGenerationById.get(n)||0)+1),this.viewOwnerById.delete(n)});continue}if(!S)continue;const k=this.viewGenerationById.get(n),E=this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==k||this.mainThreadMap.get(n)!==S||await S.on(a)});i===s.EPostMessageType.Destroy&&(await E,this.mainThreadMap.get(n)===S&&this.mainThreadMap.delete(n),this.viewOwnerById.delete(n),this.cameraRenderQueueByView.get(n)===E&&this.cameraRenderQueueByView.delete(n),this.viewGenerationById.set(n,a.viewGeneration??(k||0)+1))}}}exports.MainThreadManagerImpl=oe;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var ye = Object.defineProperty;
|
|
2
2
|
var we = (M, e, t) => e in M ? ye(M, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : M[e] = t;
|
|
3
3
|
var u = (M, e, t) => we(M, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
-
import { D as K, e as b, c as m, r as $, b as R, g as Z, t as V, a as h, f as de, M as ve, h as D, i as j, j as ke, C as H, k as z, l as Se, m as te, n as Ie, o as se, p as ge, q as Te, s as re, u as ie, v as Y, w as _, E as N, x as ee, y as Q, z as We, A as Re, B as Ee, F as be, G as Le, H as pe, I as ue, T as oe, J as ae, K as Ce, L as Ne, N as fe, P as me, Q as ne, R as Be, S as ce, U as q, W as Oe, V as he, X as De } from "./index-
|
|
4
|
+
import { D as K, e as b, c as m, r as $, b as R, g as Z, t as V, a as h, f as de, M as ve, h as D, i as j, j as ke, C as H, k as z, l as Se, m as te, n as Ie, o as se, p as ge, q as Te, s as re, u as ie, v as Y, w as _, E as N, x as ee, y as Q, z as We, A as Re, B as Ee, F as be, G as Le, H as pe, I as ue, T as oe, J as ae, K as Ce, L as Ne, N as fe, P as me, Q as ne, R as Be, S as ce, U as q, W as Oe, V as he, X as De } from "./index-C-pO2InQ.mjs";
|
|
5
5
|
import { cloneDeep as J, xor as Me, isNumber as G, isEqual as le } from "lodash";
|
|
6
6
|
import "clipper-lib";
|
|
7
7
|
import "lineclip";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var A = Object.defineProperty;
|
|
2
2
|
var x = (n, e, t) => e in n ? A(n, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : n[e] = t;
|
|
3
3
|
var c = (n, e, t) => x(n, typeof e != "symbol" ? e + "" : e, t);
|
|
4
|
-
import { E as b, a as l, b as C, c as v, d as L, g as B, O as $, V as P, S as V } from "./index-
|
|
4
|
+
import { E as b, a as l, b as C, c as v, d as L, g as B, O as $, V as P, S as V } from "./index-CrJWLjuD.mjs";
|
|
5
5
|
import { isEqual as T, isString as U, clone as D, throttle as H } from "lodash";
|
|
6
6
|
import "clipper-lib";
|
|
7
7
|
import "lz-string";
|