@netless/appliance-plugin 1.1.40 → 1.1.42-beta.0
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/README.md +31 -0
- package/dist/appliance-plugin.js +1 -1
- package/dist/appliance-plugin.mjs +17 -16
- package/dist/{bridge-b23MKtwT.mjs → bridge-B-QptMEy.mjs} +1 -1
- package/dist/{bridge-DLEmhE7Y.js → bridge-hRl_DY0c.js} +1 -1
- package/dist/bridge.js +1 -1
- package/dist/bridge.mjs +1 -1
- package/dist/component/backgroundImageLoadCoordinator.d.ts +61 -0
- package/dist/component/svg/base.d.ts +2 -0
- package/dist/component/svg/svgElemt.d.ts +3 -1
- package/dist/component/svg/types.d.ts +2 -0
- package/dist/component/textEditor/types.d.ts +2 -0
- package/dist/core/currentSceneGuard.d.ts +6 -0
- package/dist/core/initReadyBarrier.d.ts +8 -0
- package/dist/core/mainEngine.d.ts +4 -2
- package/dist/core/mainThread/base.d.ts +3 -3
- package/dist/core/mainThread/snapshotThread.d.ts +3 -3
- package/dist/core/mainThread/subLocalThread.d.ts +1 -1
- package/dist/core/mainThread/subServiceThread.d.ts +1 -1
- package/dist/fullWorker.js +85 -85
- package/dist/{index-rhSRO8Tb.mjs → index-1g93HWeU.mjs} +9106 -8749
- package/dist/{index-CDDMgpaL.js → index-B0MSTcdT.js} +1 -1
- package/dist/index-BpRy_vjc.js +570 -0
- package/dist/index-BtNb2M5H.js +1 -0
- package/dist/{index-WifS74pI.mjs → index-BwbqPE3q.mjs} +234 -210
- package/dist/{index-pyv2KvXa.mjs → index-C3e6mT0j.mjs} +221 -201
- package/dist/{index-BSR23bx5.mjs → index-CCO-qEim.mjs} +1 -1
- package/dist/{index-CDbcv4B7.js → index-CgEdhx54.js} +1 -1
- package/dist/index-CgJv1Exy.js +570 -0
- package/dist/{index-GpA_9BZu.mjs → index-DJS3KHjE.mjs} +12695 -12377
- package/dist/{index-C3XOupI-.mjs → index-DUVQmCiI.mjs} +1 -1
- package/dist/index-vIt18mo2.js +1 -0
- package/dist/plugin/applianceMultiPlugin.d.ts +1 -1
- package/dist/plugin/applianceSinglePlugin.d.ts +1 -1
- package/dist/plugin/backgroundImageQuery.d.ts +4 -0
- package/dist/plugin/baseApplianceManager.d.ts +7 -3
- package/dist/plugin/renderingCompatibility.d.ts +2 -1
- package/dist/plugin/types.d.ts +35 -2
- package/dist/subWorker.js +61 -61
- package/package.json +9 -4
- package/dist/index-DKaa5HSe.js +0 -1
- package/dist/index-DoIyQYzA.js +0 -570
- package/dist/index-DwW4gzgA.js +0 -1
- package/dist/index-RKd-OVPO.js +0 -570
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var B=Object.defineProperty;var F=(W,t,e)=>t in W?B(W,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):W[t]=e;var f=(W,t,e)=>F(W,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./index-DoIyQYzA.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(t){f(this,"vNodes");f(this,"thread");f(this,"serviceWorkShapes",new Map);f(this,"localWorkShapes",new Map);f(this,"tmpOpt");f(this,"animationId");f(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);this.vNodes=t.vNodes,this.thread=t.thread}createLocalWork(t){const{workId:e,opt:o,toolsType:r}=t;if(e&&o){const a=e.toString();!this.getToolsOpt()&&r&&this.setToolsOpt({toolsType:r,toolsOpt:o}),this.setWorkOptions(a,o)}}getLocalWorkShape(t){return this.localWorkShapes.get(t)}createLocalWorkShape(t,e){if(t&&this.tmpOpt){const o={toolsType:this.tmpOpt.toolsType,toolsOpt:e||this.tmpOpt.toolsOpt},r=this.createWorkShapeNode({...o,workId:t});return r&&this.localWorkShapes.set(t,{node:r,toolsType:r.toolsType,workState:s.EventWorkState.Start}),r}}canUseTopLayer(t){return t===s.EToolsKey.LaserPen}destroy(){this.clearAll()}clearAll(){this.thread.topLayer.children.length&&(this.thread.topLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.serviceWorkShapes.clear(),this.localWorkShapes.clear()}consumeDraw(t){const{workId:e,dataType:o}=t;if(o===s.EDataType.Service)this.activeServiceWorkShape(t);else{const r=e==null?void 0:e.toString(),a=r&&this.localWorkShapes.get(r);if(!a)return;const i=a.node.consume({data:t,isFullWork:!1,isSubWorker:!0});i.rect&&(a.result=i,a.workState=s.EventWorkState.Doing,r&&this.localWorkShapes.set(r,a))}this.runAnimation()}setToolsOpt(t){var e;this.tmpOpt=t,(e=t.toolsOpt)!=null&&e.syncUnitTime&&(this.syncUnitTime=t.toolsOpt.syncUnitTime)}getToolsOpt(){return this.tmpOpt}createWorkShapeNode(t){const{toolsType:e}=t;if(e===s.EToolsKey.LaserPen)return s.getShapeInstance({...t,vNodes:this.vNodes,fullLayer:this.thread.topLayer,drawLayer:this.thread.topLayer})}setNodeKey(t,e,o,r){return e.toolsType=o,e.node=this.createWorkShapeNode({workId:t,toolsType:o,toolsOpt:r}),e}activeServiceWorkShape(t){var m,k;const{workId:e,opt:o,toolsType:r,type:a,updateNodeOpt:i,ops:l,op:n}=t;if(!e)return;const c=e.toString(),d=(m=this.vNodes.get(c))==null?void 0:m.rect;if(!((k=this.serviceWorkShapes)!=null&&k.has(c))){let h={toolsType:r,animationWorkData:n||[],animationIndex:0,type:a,updateNodeOpt:i,ops:l,oldRect:d};r&&o&&(h=this.setNodeKey(c,h,r,o)),this.serviceWorkShapes.set(c,h)}const p=this.serviceWorkShapes.get(c);a&&(p.type=a),l&&(p.animationWorkData=s.transformToNormalData(l),p.ops=l),i&&(p.updateNodeOpt=i),n&&(p.animationWorkData=n),p.node&&p.node.getWorkId()!==c&&p.node.setWorkId(c),d&&(p.oldRect=d),r&&o&&(p.toolsType!==r&&r&&o&&this.setNodeKey(c,p,r,o),p.node&&p.node.setWorkOptions(o))}computNextAnimationIndex(t,e){var a;const o=((a=t.node)==null?void 0:a.syncUnitTime)||this.syncUnitTime,r=Math.floor((t.animationWorkData||[]).slice(t.animationIndex).length*32/e/o)*e;return Math.min((t.animationIndex||0)+(r||e),(t.animationWorkData||[]).length)}animationDraw(){var r,a,i,l;this.animationId=void 0;let t=!1;const e=new Map,o=[];for(const[n,c]of this.serviceWorkShapes.entries())switch(c.toolsType){case s.EToolsKey.LaserPen:{const p=this.computNextAnimationIndex(c,8),m=Math.max(0,c.animationIndex||0),k=(c.animationWorkData||[]).slice(m,p);if((c.animationIndex||0)<p&&((r=c.node)==null||r.consumeService({op:k,isFullWork:!1}),c.animationIndex=p,k.length&&e.set(n,{workState:m===0?s.EventWorkState.Start:p===((a=c.animationWorkData)==null?void 0:a.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:k.slice(-2)})),c.isDel){(i=c.node)==null||i.clearTmpPoints(),this.serviceWorkShapes.delete(n);break}c.ops&&c.animationIndex===((l=c.animationWorkData)==null?void 0:l.length)&&!c.isDel&&(this.thread.topLayer.getElementsByName(n.toString())[0]||(c.isDel=!0,this.serviceWorkShapes.set(n,c))),t=!0;break}}for(const[n,c]of this.localWorkShapes.entries()){const{result:d,toolsType:p,isDel:m,workState:k}=c;switch(p){case s.EToolsKey.LaserPen:{if(m){c.node.clearTmpPoints(),this.localWorkShapes.delete(n),o.push({removeIds:[n.toString()],type:s.EPostMessageType.RemoveNode});break}d&&((d.op||d.ops)&&o.push(d),c.result=void 0),!this.thread.topLayer.getElementsByName(n.toString())[0]&&k===s.EventWorkState.Done&&(c.isDel=!0,this.localWorkShapes.set(n,c)),t=!0;break}}}t&&this.runAnimation(),e.size&&e.forEach((n,c)=>{o.push({type:s.EPostMessageType.Cursor,uid:c.split(s.Storage_Splitter)[0],op:n.op,workState:n.workState,viewId:this.thread.viewId})}),o.length&&this.thread.post({sp:o})}runAnimation(){this.animationId||(this.animationId=requestAnimationFrame(this.animationDraw.bind(this)))}setWorkOptions(t,e){var r;let o=(r=this.localWorkShapes.get(t))==null?void 0:r.node;if(!o&&this.tmpOpt){const{toolsType:a}=this.tmpOpt;this.tmpOpt.toolsOpt=e,o=this.createWorkShapeNode({workId:t,toolsType:a,toolsOpt:e}),o&&this.localWorkShapes.set(t,{node:o,toolsType:a,workState:s.EventWorkState.Start}),this.setToolsOpt(this.tmpOpt)}e!=null&&e.syncUnitTime||(e.syncUnitTime=this.syncUnitTime),o&&o.setWorkOptions(e)}consumeDrawAll(t){const{workId:e,dataType:o}=t;if(o===s.EDataType.Service)this.activeServiceWorkShape(t);else{const r=e==null?void 0:e.toString(),a=r&&this.localWorkShapes.get(r);if(!a)return;const i=a.node.consumeAll({data:t});a.result=i,a.workState=s.EventWorkState.Done,r&&this.localWorkShapes.set(r,a)}this.runAnimation()}}class K{constructor(t){f(this,"vNodes");f(this,"thread");f(this,"workShapes",new Map);f(this,"effectSelectNodeData",new Set);f(this,"batchEraserRemoveNodes",new Set);f(this,"batchEraserWorks",new Set);f(this,"tmpOpt");f(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);f(this,"fullWorkerDrawCount",0);f(this,"drawWorkActiveId");f(this,"consumeCount",0);f(this,"combineDrawActiveId");f(this,"eraserBatchScheduler",new s.MaxDelayBatchScheduler);this.vNodes=t.vNodes,this.thread=t.thread}async loadImageBitMap(t){return await this.thread.loadImageBitMap(t)}createLocalWork(t){const{workId:e,opt:o,toolsType:r}=t;if(e&&o){const a=e.toString();!this.getToolsOpt()&&r&&this.setToolsOpt({toolsType:r,toolsOpt:o}),this.setWorkOptions(a,o)}}async updateSelector(t){var k;const e=this.workShapes.get(s.Storage_Selector_key);if(!((k=e==null?void 0:e.selectIds)!=null&&k.length))return;const{callback:o,...r}=t,{updateSelectorOpt:a,willSerializeData:i,smoothSync:l}=r,n=await(e==null?void 0:e.updateSelector({updateSelectorOpt:a,selectIds:D.cloneDeep(e.selectIds),vNodes:this.vNodes,willSerializeData:i,worker:this})),c=new Map;let d;n!=null&&n.selectIds&&(d=D.xor(e.selectIds,n.selectIds),n.selectIds.forEach(h=>{const y=this.vNodes.get(h);if(y){const{toolsType:u,op:T,opt:g}=y;c.set(h,{opt:g,toolsType:u,ops:(T==null?void 0:T.length)&&s.transformToSerializableData(T)||void 0})}}),e.selectIds=n.selectIds);const p=[],m=o&&o({res:n,workShapeNode:e,param:r,postData:{sp:p},newServiceStore:c,smoothSync:l})||{sp:p};d&&m.sp.push({type:s.EPostMessageType.RemoveNode,removeIds:d,viewId:this.thread.viewId}),m.sp.length&&this.thread.post(m)}destroy(){this.eraserBatchScheduler.cancel(),this.clearAll()}clearAll(){if(this.eraserBatchScheduler.cancel(),this.thread.localLayer.children.length&&(this.thread.topLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent)),this.workShapes.get(s.Storage_Selector_key)){const e=[];e.push({type:s.EPostMessageType.Select,dataType:s.EDataType.Local,selectIds:[],willSyncService:!1}),this.thread.post({sp:e})}this.workShapes.clear(),this.effectSelectNodeData.clear(),this.batchEraserWorks.clear(),this.batchEraserRemoveNodes.clear()}async checkTextActive(t){const{op:e,viewId:o,dataType:r}=t;if(e!=null&&e.length){let a;for(const i of this.vNodes.curNodeMap.values()){const{rect:l,name:n,toolsType:c,opt:d}=i,p=e[0]*this.thread.fullLayer.worldScaling[0]+this.thread.fullLayer.worldPosition[0],m=e[1]*this.thread.fullLayer.worldScaling[1]+this.thread.fullLayer.worldPosition[1];if(c===s.EToolsKey.Text&&s.isIntersectForPoint([p,m],l)&&d.workState===s.EventWorkState.Done){a=n;break}}a&&(await this.blurSelector({viewId:o,msgType:s.EPostMessageType.Select,dataType:r,isSync:!0}),this.thread.post({sp:[{type:s.EPostMessageType.GetTextActive,toolsType:s.EToolsKey.Text,workId:a}]}))}}cursorHover(t){const{opt:e,toolsType:o,point:r}=t,a=this.setFullWork({workId:s.Cursor_Hover_Id,toolsType:o,opt:e});a&&r&&a.cursorHover(r)}cursorBlur(){var e;const t=this.getWorkShape(s.Cursor_Hover_Id);t&&((e=t.selectIds)!=null&&e.length)&&(t.cursorBlur(),this.clearWorkShapeNodeCache(s.Cursor_Hover_Id)),this.thread.fullLayer.parent.children.forEach(o=>{o.name==="Cursor_Hover_Id"&&o.remove()})}updateFullSelectWork(t){var r,a,i,l,n;const e=this.workShapes.get(s.Storage_Selector_key),{selectIds:o}=t;if(!(o!=null&&o.length)){this.blurSelector(t);return}if(!e){const c=this.setFullWork(t);!c&&t.workId&&this.tmpOpt&&((r=this.tmpOpt)==null?void 0:r.toolsType)===s.EToolsKey.Selector&&this.setWorkOptions(t.workId.toString(),t.opt||this.tmpOpt.toolsOpt),c&&this.updateFullSelectWork(t);return}if(e&&(o!=null&&o.length)){const{selectRect:c}=e.updateSelectIds(o),d=[{selectorColor:((a=t.opt)==null?void 0:a.strokeColor)||e.selectorColor,strokeColor:((i=t.opt)==null?void 0:i.strokeColor)||e.strokeColor,fillColor:((l=t.opt)==null?void 0:l.fillColor)||e.fillColor,textOpt:((n=t.opt)==null?void 0:n.textOpt)||e.textOpt,canTextEdit:e.canTextEdit,canRotate:e.canRotate,scaleType:e.scaleType,type:s.EPostMessageType.Select,viewId:this.thread.viewId,dataType:s.EDataType.Local,selectIds:o,selectRect:c,points:e.getChildrenPoints(),willSyncService:(t==null?void 0:t.willSyncService)||!1,opt:(t==null?void 0:t.willSyncService)&&e.getWorkOptions()||void 0,canLock:e.canLock,isLocked:e.isLocked,toolsTypes:e.toolsTypes,shapeOpt:e.shapeOpt,thickness:e.thickness,useStroke:e.useStroke,strokeType:e.strokeType}];this.thread.post({sp:d})}}async removeSelector(t){const{willSyncService:e,needUndoTicker:o}=t,r=[],a=[],i=this.workShapes.get(s.Storage_Selector_key);if(!i)return;const l=i.selectIds&&[...i.selectIds]||[];for(const n of l){const c=this.vNodes.get(n);if(c)switch(c.toolsType){case s.EToolsKey.Text:{r.push({type:s.EPostMessageType.TextUpdate,toolsType:s.EToolsKey.Text,workId:n,dataType:s.EDataType.Local});break}case s.EToolsKey.BackgroundSVG:r.push({type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:n,dataType:s.EDataType.Local,viewId:this.thread.viewId});break}this.removeNode(n),a.push(n)}a.length&&r.push({type:s.EPostMessageType.RemoveNode,removeIds:a,needUndoTicker:o,emitEventType:t.emitEventType,requestId:t.requestId}),r.push({type:s.EPostMessageType.Select,selectIds:[],willSyncService:e}),await this.blurSelector(),o&&r.push({type:s.EPostMessageType.None,needUndoTicker:o}),r.length&&this.thread.post({sp:r})}removeWork(t){const{workId:e}=t,o=e==null?void 0:e.toString();o&&this.removeNode(o)}removeNode(t){var r;const e=this.vNodes.get(t);e&&(e.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:t,dataType:s.EDataType.Local,viewId:this.thread.viewId}]}),(r=this.thread.fullLayer)==null||r.getElementsByName(t).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.fullLayer.parent)}),this.vNodes.delete(t)),this.workShapes.has(t)&&(this.thread.localLayer.getElementsByName(t).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.localLayer.parent)}),this.clearWorkShapeNodeCache(t))}setFullWork(t){const{workId:e,opt:o,toolsType:r}=t;if(e&&o&&r){const a=e.toString();let i;return e&&this.workShapes.has(a)?(i=this.workShapes.get(a),(i==null?void 0:i.toolsType)!==r?(i==null||i.clearTmpPoints(),this.workShapes.delete(a),i=void 0):i==null||i.setWorkOptions(o)):i=this.createWorkShapeNode({toolsOpt:o,toolsType:r,workId:a}),i||(i=this.createWorkShapeNode({toolsOpt:o,toolsType:r,workId:a})),i?(this.workShapes.set(a,i),i):void 0}}async consumeFull(t){var i,l;const e=(i=t.workId)==null?void 0:i.toString(),o=(l=t.updateNodeOpt)==null?void 0:l.eraserGeometryDelta;if(e&&o){const n=this.vNodes.get(e),c=t.ops&&s.transformToNormalData(t.ops)||t.op||[];if(!n||!t.centerPos||!s.acceptIncomingEraserGeometryDelta(this.vNodes,e,o,n,{op:c,centerPos:t.centerPos})){s.cancelDoingForGeometryMismatch(this.vNodes,e);return}}const r=this.setFullWork(t),a=t.ops&&s.transformToNormalData(t.ops);if(r){e&&t.clearPreviewLocalWork&&this.thread.localLayer.getElementsByName(e).forEach(c=>{c.remove(),s.removeTexture(c,this.thread.localLayer.parent)}),r.toolsType===s.EToolsKey.BackgroundSVG?r.consumeService({isFullWork:!0,replaceId:e}):r.toolsType===s.EToolsKey.Image?await r.consumeServiceAsync({isFullWork:!0,replaceId:e,worker:this}):r.toolsType===s.EToolsKey.Text?await r.consumeServiceAsync({isFullWork:!0,replaceId:e,boxRect:this.thread.getSceneRect()}):r.consumeService({op:a,isFullWork:!0,replaceId:e}),t!=null&&t.updateNodeOpt&&r.updataOptService(t.updateNodeOpt);const n=[];t.workId&&this.workShapes.delete(t.workId.toString()),t.willSyncService&&n.push({opt:t.opt,toolsType:t.toolsType,type:s.EPostMessageType.FullWork,workId:t.workId,ops:t.ops,updateNodeOpt:t.updateNodeOpt,viewId:this.thread.viewId,needUndoTicker:t.needUndoTicker,requestId:t.requestId,emitEventType:t.emitEventType,scenePath:t.scenePath}),t.isLockSentEventCursor&&n.push({type:s.EPostMessageType.None,isLockSentEventCursor:!0,scenePath:t.scenePath}),t.needUndoTicker&&n.push({type:s.EPostMessageType.None,needUndoTicker:t.needUndoTicker,emitEventType:t.emitEventType,requestId:t.requestId,scenePath:t.scenePath}),n.length&&this.thread.post({sp:n})}}async colloctEffectSelectWork(t){const e=this.workShapes.get(s.Storage_Selector_key),{workId:o,msgType:r}=t;if(e&&o&&e.selectIds&&e.selectIds.includes(o.toString())){r===s.EPostMessageType.RemoveNode?e.selectIds=e.selectIds.filter(a=>a!==o.toString()):this.effectSelectNodeData.add(t),await this.runEffectSelectWork(!0);return}return t}async runEffectSelectWork(t){var e;for await(const o of this.effectSelectNodeData.values()){const r=this.setFullWork(o);if(r){const a=(e=o.workId)==null?void 0:e.toString();if(r.toolsType===s.EToolsKey.BackgroundSVG)r.consumeService({isFullWork:!0,replaceId:a});else if(r.toolsType===s.EToolsKey.Image)await r.consumeServiceAsync({isFullWork:!0,replaceId:a,worker:this});else if(r.toolsType===s.EToolsKey.Text)await r.consumeServiceAsync({isFullWork:!0,replaceId:a,boxRect:this.thread.getSceneRect()});else{const i=o.ops&&s.transformToNormalData(o.ops);r.consumeService({op:i,isFullWork:!0,replaceId:a}),o!=null&&o.updateNodeOpt&&r.updataOptService(o.updateNodeOpt)}o.workId&&this.workShapes.delete(o.workId.toString())}this.effectSelectNodeData.delete(o)}this.reRenderSelector(t)}hasSelector(){return this.workShapes.has(s.Storage_Selector_key)}getSelector(){return this.workShapes.get(s.Storage_Selector_key)}reRenderSelector(t=!1){var r;const e=this.workShapes.get(s.Storage_Selector_key);if(!e)return;if(e&&!((r=e.selectIds)!=null&&r.length))return this.blurSelector();const o=e.reRenderSelector();o&&this.thread.post({sp:[{type:s.EPostMessageType.Select,selectIds:e.selectIds,selectRect:o,willSyncService:t,viewId:this.thread.viewId,points:e.getChildrenPoints(),textOpt:e.textOpt,selectorColor:e.selectorColor,strokeColor:e.strokeColor,fillColor:e.fillColor,canTextEdit:e.canTextEdit,canRotate:e.canRotate,scaleType:e.scaleType,opt:e.getWorkOptions()||void 0,canLock:e.canLock,isLocked:e.isLocked,toolsTypes:e.toolsTypes,shapeOpt:e.shapeOpt,thickness:e.thickness,useStroke:e.useStroke,strokeType:e.strokeType}]})}async blurSelector(t){var r;const e=this.workShapes.get(s.Storage_Selector_key),o=e==null?void 0:e.blurSelector();if(this.clearWorkShapeNodeCache(s.Storage_Selector_key),((r=this.thread.fullLayer)==null?void 0:r.parent).children.forEach(a=>{a.name===s.Storage_Selector_key&&a.remove()}),o){const a=[];a.push({...o,isSync:t==null?void 0:t.isSync,scenePath:t==null?void 0:t.scenePath}),this.thread.post({sp:a})}}clearWorkShapeNodeCache(t){var e;(e=this.getWorkShape(t))==null||e.clearTmpPoints(),this.workShapes.delete(t)}async drawBitMapEraserFull(t,e,o,r){const{willUpdateNodes:a,willDeleteNodes:i}=e,l=t.getWorkId(),n=[...a?Array.from(a.keys()).map(d=>String(d)):[],...i?Array.from(i):[]],c=[];if(r&&c.push({type:s.EPostMessageType.None,needUndoTicker:r,undoScopeIds:n,undoScopePhase:"finalize"}),c.push({type:s.EPostMessageType.RemoveNode,removeIds:[l],eraseTxnId:l,viewId:this.thread.viewId,needUndoTicker:r}),o&&c.push({type:s.EPostMessageType.None,isLockSentEventCursor:o}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[d,p]of a)c.push({type:s.EPostMessageType.UpdateNode,dataType:s.EDataType.Local,opt:p.opt,workId:d,updateNodeOpt:{useAnimation:!1},eraseTxnId:l,needUndoTicker:r});i!=null&&i.size&&c.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],eraseTxnId:l,viewId:this.thread.viewId,needUndoTicker:r})}c.length&&this.thread.post({sp:c})}drawPencilEraserFull(t,e,o,r){const{willNewNodes:a,willDeleteNodes:i}=e,l=t.getWorkId(),n=[...a?Array.from(a.keys()).map(d=>String(d)):[],...i?Array.from(i):[]],c=[];if(r&&n.length&&c.push({type:s.EPostMessageType.None,needUndoTicker:r,undoScopeIds:n}),c.push({type:s.EPostMessageType.RemoveNode,removeIds:[l],viewId:this.thread.viewId,needUndoTicker:r}),o&&c.push({type:s.EPostMessageType.None,isLockSentEventCursor:o}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[d,p]of a)c.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:p.toolsType,ops:s.transformToSerializableData(p.op),opt:p.opt,workId:d,updateNodeOpt:{useAnimation:!1},needUndoTicker:r});i!=null&&i.size&&c.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],viewId:this.thread.viewId,needUndoTicker:r})}c.length&&this.thread.post({sp:c})}drawEraser(t,e,o,r){const a=[],i=t.removeIds||[];r&&i.length&&a.push({type:s.EPostMessageType.None,collectUndoTicker:r,undoScopeIds:i,undoScopePhase:"collect"}),t.removeIds&&a.push({...t,needUndoTicker:o,collectUndoTicker:r}),e&&a.push({type:s.EPostMessageType.None,isLockSentEventCursor:e}),o&&a.push({type:s.EPostMessageType.None,needUndoTicker:o,undoScopePhase:"finalize"}),this.thread.post({sp:a,consumeCount:this.consumeCount})}getWorkShape(t){return this.workShapes.get(t)}getWorkShapes(){return this.workShapes}async consumeDraw(t,e){const{op:o,workId:r,scenePath:a,postCount:i,smoothSync:l}=t;if(o!=null&&o.length&&r){const n=r.toString(),c=this.workShapes.get(n);if(!c)return;const d=c.toolsType;if(d===s.EToolsKey.LaserPen)return;if(this.combineDrawActiveId&&this.combineDrawActiveId!==n){const p=this.combineDrawActiveId;this.eraserBatchScheduler.cancel(),this.combineDrawActiveId=void 0,this.consumeDrawAll({workId:p,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},e)}switch(this.drawWorkActiveId&&this.drawWorkActiveId!==n&&(this.consumeDrawAll({workId:this.drawWorkActiveId,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},e),this.drawWorkActiveId=void 0),!this.drawWorkActiveId&&n!==s.Storage_Selector_key&&(this.drawWorkActiveId=n),D.isNumber(i)&&(this.consumeCount=i),d){case s.EToolsKey.Selector:{const p=c.consume({data:t,isFullWork:!0,isMainThread:!0});this.fullWorkerDrawCount++;const m=[];p.type===s.EPostMessageType.Select&&(p.selectIds&&e.runReverseSelectWork(p.selectIds),m.push({...p,scenePath:a})),await this.thread.fullLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:m});break}case s.EToolsKey.PencilEraser:case s.EToolsKey.BitMapEraser:{c.consume({data:t,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=n,this.eraserBatchScheduler.schedule(()=>{this.drawEraserCombine(n,t.needUndoTicker,t.collectUndoTicker)},s.getEraserBatchDelay(this.thread.master.maxCombineEraserTime));break}case s.EToolsKey.Eraser:{const p=c.consume({data:t,isFullWork:!0});await this.thread.fullLayer.parent.prepareRender,this.drawEraser(p,void 0,t.needUndoTicker,t.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 p=c.consume({data:t,isFullWork:!1,isMainThread:!0,smoothSync:l});p&&(this.fullWorkerDrawCount++,await this.thread.localLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:p.op&&[{...p,scenePath:a}]||void 0}))}break}}}drawEraserCombine(t,e,o){var a,i,l,n,c,d;const r=(a=this.workShapes.get(t))==null?void 0:a.combineConsume({workerEngine:this});if(r){const{willDeleteNodes:p,willNewNodes:m}=r,k=[...p?Array.from(p):[]],h={render:[],sp:[]};if(r!=null&&r.rect){const y=s.getSafetyRect(r.rect);(i=h.render)==null||i.push({rect:y,isClear:!0,clearCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId},{rect:y,drawCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId})}if(o&&k.length&&((l=this.getWorkShape(t))==null?void 0:l.toolsType)===s.EToolsKey.BitMapEraser&&((n=h.sp)==null||n.push({type:s.EPostMessageType.None,collectUndoTicker:o,undoScopeIds:k,undoScopePhase:"collect"})),p!=null&&p.size&&((c=h.sp)==null||c.push({type:s.EPostMessageType.RemoveNode,removeIds:[...p],viewId:this.thread.viewId,needUndoTicker:e,collectUndoTicker:o})),m!=null&&m.size)for(const[y,u]of m)(d=h.sp)==null||d.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:u.toolsType,ops:s.transformToSerializableData(u.op),opt:u.opt,workId:y,updateNodeOpt:{useAnimation:!1},needUndoTicker:e,collectUndoTicker:o});this.thread.post(h)}}consumeDrawAll(t,e){var l,n,c,d,p,m;this.eraserBatchScheduler.cancel();const{workId:o,scenePath:r,isLockSentEventCursor:a}=t,i=t.needUndoTicker;if(o){this.combineDrawActiveId===o.toString()&&(this.combineDrawActiveId=void 0);const k=o.toString();this.drawWorkActiveId===k&&(this.drawWorkActiveId=void 0);const h=this.workShapes.get(k);if(!h)return;const y=h.toolsType;if(y===s.EToolsKey.LaserPen)return;const u=this.workShapes.get(s.Cursor_Hover_Id),T=(l=u==null?void 0:u.selectIds)==null?void 0:l[0],g=h.consumeAll({data:t,workerEngine:this});switch(y){case s.EToolsKey.Selector:{g.selectIds&&T&&((n=g.selectIds)!=null&&n.includes(T))&&u.cursorBlur();const w=[];a&&w.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:r}),g.type===s.EPostMessageType.Select&&(g.selectIds&&e.runReverseSelectWork(g.selectIds),w.push({...g,scenePath:r})),w.length&&this.thread.post({sp:w}),(c=h.selectIds)!=null&&c.length?h.clearTmpPoints():this.clearWorkShapeNodeCache(k)}break;case s.EToolsKey.PencilEraser:this.drawPencilEraserFull(h,g,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(k);break;case s.EToolsKey.BitMapEraser:this.drawBitMapEraserFull(h,g,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(k);break;case s.EToolsKey.Eraser:this.drawEraser({...g,scenePath:r},a,i,t.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 w=[];if(a&&w.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:r}),g){const v=y===s.EToolsKey.Pencil,E=v&&g.type===s.EPostMessageType.RemoveNode,M=((d=g.workId)==null?void 0:d.toString())||((m=(p=g.removeIds)==null?void 0:p[0])==null?void 0:m.toString());E?s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent):w.push({...g,scenePath:r,needUndoTicker:t.needUndoTicker,undoScopeIds:v&&M?[M]:g.undoScopeIds,undoScopePhase:v?"finalize":g.undoScopePhase}),this.fullWorkerDrawCount=0,t.needUndoTicker&&w.push({type:s.EPostMessageType.None,needUndoTicker:t.needUndoTicker,scenePath:r,undoScopeIds:E?[]:void 0,undoScopePhase:E?"finalize":void 0}),(E?this.thread.localLayer:this.thread.fullLayer).parent.prepareRender.then(()=>{this.thread.post({fullWorkerDrawCount:this.fullWorkerDrawCount,sp:w})})}this.clearWorkShapeNodeCache(k);break}}}}getToolsOpt(){return this.tmpOpt}setToolsOpt(t){var e;this.tmpOpt=t,(e=t.toolsOpt)!=null&&e.syncUnitTime&&(this.syncUnitTime=t.toolsOpt.syncUnitTime)}setWorkOptions(t,e){let o=this.workShapes.get(t);if(!o&&this.tmpOpt){const{toolsType:r}=this.tmpOpt;this.tmpOpt.toolsOpt=e,o=this.createWorkShapeNode({workId:t,toolsType:r,toolsOpt:e}),o&&this.workShapes.set(t,o),this.setToolsOpt(this.tmpOpt)}e.syncUnitTime||(e.syncUnitTime=this.syncUnitTime),o==null||o.setWorkOptions(e)}createWorkShapeNode(t){return s.getShapeInstance({...t,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.localLayer},this.thread.serviceWork)}}class _{constructor(t){f(this,"vNodes");f(this,"thread");f(this,"workShapes",new Map);f(this,"selectorWorkShapes",new Map);f(this,"willRunEffectSelectorIds",new Set);f(this,"runEffectId");f(this,"animationId");f(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);this.vNodes=t.vNodes,this.thread=t.thread}async loadImageBitMap(t){return await this.thread.loadImageBitMap(t)}destroy(){this.clearAll()}clearAll(){this.thread.serviceLayer.children.length&&(this.thread.serviceLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.workShapes.clear(),this.selectorWorkShapes.clear(),this.willRunEffectSelectorIds.clear()}runEffect(){this.runEffectId||(this.runEffectId=setTimeout(this.effectRunSelector.bind(this),0))}effectRunSelector(){this.runEffectId=void 0,this.willRunEffectSelectorIds.forEach(t=>{var o,r;const e=this.selectorWorkShapes.get(t);e&&e.selectIds&&((o=e.node)==null||o.selectServiceNode(t,e,!0)),(r=e==null?void 0:e.selectIds)!=null&&r.length||this.selectorWorkShapes.delete(t)}),this.willRunEffectSelectorIds.clear()}runSelectWork(t){this.activeSelectorShape(t);const{workId:e}=t,o=e==null?void 0:e.toString();o&&this.willRunEffectSelectorIds.add(o),this.runEffect()}removeWork(t){const{workId:e}=t,o=e==null?void 0:e.toString();if(o){if(this.workShapes.get(o)){this.workShapes.delete(o),this.removeNode(o,t);return}this.removeNode(o,t)}}consumeFull(t){if(this.activeWorkShape(t),t.refreshTextRender){this.animationId&&(cancelAnimationFrame(this.animationId),this.animationId=void 0),this.animationDraw();return}this.runAnimation()}runReverseSelectWork(t){t.forEach(e=>{this.selectorWorkShapes.forEach((o,r)=>{var a;if((a=o.selectIds)!=null&&a.length){const i=o.selectIds.indexOf(e);i>-1&&(o.selectIds.splice(i,1),this.willRunEffectSelectorIds.add(r))}})}),this.willRunEffectSelectorIds.size&&this.runEffect()}consumeDraw(t){this.activeWorkShape(t),this.runAnimation()}computNextAnimationIndex(t,e){const o=Math.floor((t.animationWorkData||[]).slice(t.animationIndex).length*32/e/this.syncUnitTime)*e;return Math.min((t.animationIndex||0)+(o||e),(t.animationWorkData||[]).length)}async animationDraw(){var r,a,i,l,n,c,d,p,m,k,h,y,u,T,g,w,v,E,M,C,R;this.animationId=void 0;let t=!1;const e=new Map,o=[];for(const[I,S]of this.workShapes.entries())switch(S.toolsType){case s.EToolsKey.BackgroundSVG:{(r=S.node)==null||r.consumeService({isFullWork:!0,replaceId:I}),this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Image:{await((a=S.node)==null?void 0:a.consumeServiceAsync({isFullWork:!0,worker:this})),this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Text:{S.node&&(await((i=S.node)==null?void 0:i.consumeServiceAsync({isFullWork:!0,replaceId:I,boxRect:this.thread.getSceneRect()})),this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),S.refreshTextRender&&S.requestId&&o.push({type:s.EPostMessageType.RefreshTextRender,requestId:S.requestId,workId:I,viewId:this.thread.viewId}),(l=S.node)==null||l.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 P=!!S.ops;if((n=S.animationWorkData)!=null&&n.length){const N=S.oldRect;(c=S.node)==null||c.consumeService({op:S.animationWorkData,isFullWork:P}),P&&(this.selectorWorkShapes.forEach((L,O)=>{var A;(A=L.selectIds)!=null&&A.includes(I)&&(this.willRunEffectSelectorIds.add(O),this.runEffect())}),(d=S.node)==null||d.clearTmpPoints(),this.workShapes.delete(I)),S.isEnableCursor?e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:N?S.ops?s.EventWorkState.Done:s.EventWorkState.Doing:s.EventWorkState.Start,op:S.animationWorkData.slice(-3,-1)}):P&&!S.useAnimation&&((p=S.updateNodeOpt)!=null&&p.useAnimation)&&e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:s.EventWorkState.Done,op:S.animationWorkData.slice(-3,-1),uid:(m=S.updateNodeOpt)==null?void 0:m.uid}),S.animationWorkData.length=0}break}case s.EToolsKey.Pencil:{if(S.useAnimation){if(S.useAnimation){if(S.isDel){(w=S.node)==null||w.clearTmpPoints(),this.workShapes.delete(I);break}const P=3,N=this.computNextAnimationIndex(S,P),L=S.isDiff?0:Math.max(0,(S.animationIndex||0)-P),O=(S.animationWorkData||[]).slice(L,N),A=(E=(v=S.node)==null?void 0:v.getWorkId())==null?void 0:E.toString();if((S.animationIndex||0)<N||S.isDiff){if((M=S.node)==null||M.consumeService({op:O,isFullWork:!1}),S.animationIndex=N,S.isDiff&&(S.isDiff=!1),O.length&&S.isEnableCursor){const x=O.slice(-3,-1);e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:L===0?s.EventWorkState.Start:N===((C=S.animationWorkData)==null?void 0:C.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:x})}}else S.ops&&((R=S.node)==null||R.consumeService({op:S.animationWorkData||[],isFullWork:!0,replaceId:A}),S.isDel=!0,S.isEnableCursor&&e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:s.EventWorkState.Done,op:O.slice(-3,-1)}));t=!0;break}}else{const P=!!S.ops;if((k=S.node)==null||k.consumeService({op:S.animationWorkData||[],isFullWork:P,replaceId:I}),(h=S.node)==null||h.updataOptService(S.updateNodeOpt),P){if(!S.isEnableCursor&&((y=S.updateNodeOpt)!=null&&y.useAnimation)&&((u=S.animationWorkData)!=null&&u.length)){const N=S.animationWorkData.slice(-3,-1);e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:s.EventWorkState.Done,op:N,uid:(T=S.updateNodeOpt)==null?void 0:T.uid})}this.selectorWorkShapes.forEach((N,L)=>{var O;(O=N.selectIds)!=null&&O.includes(I)&&(this.willRunEffectSelectorIds.add(L),this.runEffect())}),(g=S.node)==null||g.clearTmpPoints(),this.workShapes.delete(I)}}break}}t&&this.runAnimation(),e.size&&e.forEach((I,S)=>{o.push({type:s.EPostMessageType.Cursor,uid:I.uid||S.split(s.Storage_Splitter)[0],op:I.op,workState:I.workState,cursorTool:I.cursorTool,viewId:this.thread.viewId})}),o.length&&this.thread.post({sp:o})}runAnimation(){this.animationId||(this.animationId=requestAnimationFrame(this.animationDraw.bind(this)))}hasDiffData(t,e,o){const r=t.length;if(e.length<r)return!0;switch(o){case s.EToolsKey.Pencil:{for(let a=0;a<r;a+=3)if(e[a]!==t[a]||e[a+1]!==t[a+1])return!0;break}case s.EToolsKey.LaserPen:{for(let a=0;a<r;a+=2)if(e[a]!==t[a]||e[a+1]!==t[a+1])return!0;break}}return!1}activeWorkShape(t){var T,g,w,v;const{workId:e,opt:o,toolsType:r,type:a,updateNodeOpt:i,ops:l,op:n,useAnimation:c,imageBitmap:d,isEnableCursor:p,requestId:m,refreshTextRender:k}=t;if(!e)return;const h=e.toString(),y=(T=this.vNodes.get(h))==null?void 0:T.rect;if(!((g=this.workShapes)!=null&&g.has(h))){let E={toolsType:r,animationWorkData:n||[],animationIndex:0,type:a,updateNodeOpt:i,ops:l,useAnimation:typeof c<"u"?c:typeof(i==null?void 0:i.useAnimation)<"u"?i==null?void 0:i.useAnimation:!0,oldRect:y,isDiff:!1,imageBitmap:d,isEnableCursor:p};r&&o&&(E=this.setNodeKey(h,E,r,o)),(w=this.workShapes)==null||w.set(h,E)}const u=(v=this.workShapes)==null?void 0:v.get(h);u.isEnableCursor=p,u.requestId=m,u.refreshTextRender=!!k,a&&(u.type=a),l&&(u.animationWorkData=s.transformToNormalData(l),u.ops=l),i&&(u.updateNodeOpt=i),n&&(u.isDiff=this.hasDiffData(u.animationWorkData||[],n,u.toolsType),u.toolsType,s.EToolsKey.Pencil,u.animationWorkData=n),u.node&&u.node.getWorkId()!==h&&u.node.setWorkId(h),y&&(u.oldRect=y),r&&o&&(o.syncUnitTime&&(this.syncUnitTime=o.syncUnitTime),u.toolsType!==r&&r&&o&&this.setNodeKey(h,u,r,o),u.node&&u.node.setWorkOptions(o)),d&&(u.imageBitmap=d)}removeNode(t,e){t.indexOf(s.Storage_Selector_key)>-1&&this.removeSelectWork(e),this.thread.fullLayer.getElementsByName(t).forEach(r=>{r.remove(),s.removeTexture(r,this.thread.fullLayer.parent)}),this.thread.serviceLayer.getElementsByName(t).forEach(r=>{r.remove(),s.removeTexture(r,this.thread.serviceLayer.parent)});const o=this.vNodes.get(t);o&&o.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:t,dataType:s.EDataType.Service,viewId:this.thread.viewId}]}),this.vNodes.delete(t)}removeSelectWork(t){const{workId:e}=t,o=e==null?void 0:e.toString();o&&(this.activeSelectorShape(t),this.willRunEffectSelectorIds.add(o)),this.runEffect()}activeSelectorShape(t){var c,d,p;const{workId:e,opt:o,toolsType:r,type:a,selectIds:i}=t;if(!e)return;const l=e.toString();if(!((c=this.selectorWorkShapes)!=null&&c.has(l))){let m={toolsType:r,selectIds:i,type:a,opt:o};r&&o&&(m=this.setNodeKey(l,m,r,o)),(d=this.selectorWorkShapes)==null||d.set(l,m)}const n=(p=this.selectorWorkShapes)==null?void 0:p.get(l);a&&(n.type=a),n.node&&n.node.getWorkId()!==l&&n.node.setWorkId(l),n.selectIds=i||[]}setNodeKey(t,e,o,r){return e.toolsType=o,e.node=s.getShapeInstance({toolsType:o,toolsOpt:r,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.serviceLayer,workId:t},this),e}}class b{constructor(){f(this,"localWork");f(this,"serviceWork");f(this,"threadEngine")}registerMainThread(t){return this.threadEngine=t,this.localWork=t.localWork,this.serviceWork=t.serviceWork,this}}class z extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.CopyNode)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.FullWork&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var r;const{workId:o}=e;o&&await((r=this.localWork)==null?void 0:r.consumeFull(e))}}class G extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetColorNode)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var p;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,textUpdateForWoker:n,needUndoTicker:c,requestId:d}=e;o===s.Storage_Selector_key&&r&&await((p=this.localWork)==null?void 0:p.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:d,textUpdateForWoker:n,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a}=e,{willSyncService:i,isSync:l,textUpdateForWoker:n,needUndoTicker:c,requestId:d,emitEventType:p}=o,m=r.sp||[];if(i)for(const[k,h]of a.entries())n&&h.toolsType===s.EToolsKey.Text?m.push({...h,workId:k,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:p,requestId:d,needUndoTicker:c}):m.push({...h,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:p,requestId:d,needUndoTicker:c});return c&&m.push({type:s.EPostMessageType.None,needUndoTicker:c}),{sp:m}}}class q extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.ZIndexNode)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,needUndoTicker:n,requestId:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:c,callback:this.updateSelectorCallback,needUndoTicker:n}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a}=e,{willSyncService:i,isSync:l,needUndoTicker:n,requestId:c,emitEventType:d}=o,p=r.sp||[];if(i&&p)for(const[m,k]of a.entries())k.toolsType===s.EToolsKey.BackgroundSVG&&p.push({...k,workId:m,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,updateNodeOpt:{useAnimation:!1},needUndoTicker:n,emitEventType:d,requestId:c}),p.push({...k,workId:m,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:d,requestId:c,needUndoTicker:n});return n&&p.push({type:s.EPostMessageType.None,needUndoTicker:n}),{sp:p}}}class V extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.TranslateNode);f(this,"updateSelectorCallback",e=>{const{param:o,postData:r,newServiceStore:a,workShapeNode:i,res:l,smoothSync:n}=e,{willSyncService:c,isSync:d,updateSelectorOpt:p,textUpdateForWoker:m,needUndoTicker:k}=o,h=p.workState,y=r.sp||[];if(h===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:h}],render:[]};const u=l==null?void 0:l.selectRect;if(c){const T=h===s.EventWorkState.Done?k:void 0;y.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:u,willSyncService:h===s.EventWorkState.Done?!0:n,isSync:!0,points:h===s.EventWorkState.Done&&i.getChildrenPoints()||void 0,textOpt:i.textOpt,needUndoTicker:T,emitEventType:this.emitEventType});const g={workState:h,useAnimation:p.useAnimation||!1};p.uid&&(g.uid=p.uid);for(const[w,v]of a.entries())v.toolsType===s.EToolsKey.BackgroundSVG&&y.push({...v,workId:w,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:h===s.EventWorkState.Done?!0:n,updateNodeOpt:g,needUndoTicker:T,emitEventType:this.emitEventType}),m&&v.toolsType===s.EToolsKey.Text?y.push({...v,workId:w,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:h===s.EventWorkState.Done?!0:n,updateNodeOpt:g,needUndoTicker:T,emitEventType:this.emitEventType}):(n||h===s.EventWorkState.Done)&&y.push({...v,workId:w,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...g,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta(v.opt)},isSync:d,needUndoTicker:T,emitEventType:this.emitEventType})}return k&&y.push({type:s.EPostMessageType.None,needUndoTicker:k}),y.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:h}),{sp:y}})}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var m,k;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,textUpdateForWoker:n,emitEventType:c,smoothSync:d,needUndoTicker:p}=e;o===s.Storage_Selector_key&&r&&(r.workState===s.EventWorkState.Done&&(r!=null&&r.translate)&&(r.translate[0]||r.translate[1])||r.workState!==s.EventWorkState.Done?await((m=this.localWork)==null?void 0:m.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,isSync:!0,textUpdateForWoker:n,emitEventType:c,callback:this.updateSelectorCallback,smoothSync:d,needUndoTicker:p})):r.workState===s.EventWorkState.Done&&((k=this.localWork)==null||k.vNodes.deleteLastTarget()))}}class H extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.ScaleNode);f(this,"updateSelectorCallback",e=>{const{param:o,postData:r,workShapeNode:a,res:i,newServiceStore:l,smoothSync:n}=e,{updateSelectorOpt:c,willSyncService:d,needUndoTicker:p}=o,m=c.workState,k=r.sp||[],h=i==null?void 0:i.selectRect,y=m===s.EventWorkState.Done?p:void 0;if(m===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:m}],render:[]};if(d){k.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:h,willSyncService:m===s.EventWorkState.Done?!0:n,isSync:!0,points:m===s.EventWorkState.Done&&a.getChildrenPoints()||void 0,textOpt:a.textOpt});const u={useAnimation:c.useAnimation||!1};c.uid&&(u.uid=c.uid);for(const[T,g]of l.entries())g.toolsType===s.EToolsKey.BackgroundSVG&&k.push({...g,workId:T,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:m===s.EventWorkState.Done?!0:n,updateNodeOpt:u,needUndoTicker:y,emitEventType:this.emitEventType}),g.toolsType===s.EToolsKey.Text?k.push({...g,workId:T,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:m===s.EventWorkState.Done?!0:n,updateNodeOpt:u,needUndoTicker:y,emitEventType:this.emitEventType}):(n||m===s.EventWorkState.Done)&&k.push({...g,workId:T,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...u,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta(g.opt)},isSync:!0,needUndoTicker:y,emitEventType:this.emitEventType})}return p&&k.push({type:s.EPostMessageType.None,needUndoTicker:p}),k.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:m}),{sp:k}})}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var c;const{workId:o,updateNodeOpt:r,willSyncService:a,willSerializeData:i,smoothSync:l,needUndoTicker:n}=e;o===s.Storage_Selector_key&&r&&await((c=this.localWork)==null?void 0:c.updateSelector({updateSelectorOpt:r,willSyncService:a,willSerializeData:i,isSync:!0,callback:this.updateSelectorCallback.bind(this),smoothSync:l,needUndoTicker:n}))}}class Q extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.RotateNode);f(this,"updateSelectorCallback",e=>{const{param:o,postData:r,workShapeNode:a,res:i,newServiceStore:l,smoothSync:n}=e,{updateSelectorOpt:c,willSyncService:d,willSerializeData:p,isSync:m,needUndoTicker:k}=o,h=c.workState,y=r.sp||[],u=i==null?void 0:i.selectRect,T=h===s.EventWorkState.Done?k:void 0;if(d){p&&h===s.EventWorkState.Done&&y.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:u,willSyncService:h===s.EventWorkState.Done?!0:n,isSync:m,points:a.getChildrenPoints()});const g={useAnimation:c.useAnimation||!1};if(c.uid&&(g.uid=c.uid),n||h===s.EventWorkState.Done)for(const[w,v]of l.entries())y.push({...v,workId:w,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...g,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta(v.opt)},isSync:m,needUndoTicker:T,emitEventType:this.emitEventType})}return k&&y.push({type:s.EPostMessageType.None,needUndoTicker:k}),y.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:h}),{sp:y}})}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var p;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:n,smoothSync:c,needUndoTicker:d}=e;o===s.Storage_Selector_key&&r&&await((p=this.localWork)==null?void 0:p.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:n,isSync:!0,callback:this.updateSelectorCallback,smoothSync:c,needUndoTicker:d}))}}class $ extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetFontStyle)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,textUpdateForWoker:n,requestId:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:c,textUpdateForWoker:n,callback:this.updateSelectorCallback}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a,workShapeNode:i,res:l}=e,{willSyncService:n,isSync:c,updateSelectorOpt:d,textUpdateForWoker:p,requestId:m,emitEventType:k}=o,h=r.sp||[],y=l==null?void 0:l.selectRect;if(n&&h){d.fontSize&&h.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:y,willSyncService:n,isSync:c,points:i.getChildrenPoints()});for(const[u,T]of a.entries())p&&T.toolsType===s.EToolsKey.Text?h.push({...T,workId:u,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:k,requestId:m}):h.push({...T,workId:u,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:c,emitEventType:k,requestId:m})}return{sp:h}}}class X extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetPoint);f(this,"updateSelectorCallback",e=>{const{param:o,postData:r,newServiceStore:a,workShapeNode:i,res:l}=e,{willSyncService:n,isSync:c,needUndoTicker:d}=o,p=r.sp||[],m=l==null?void 0:l.selectRect;if(n&&p){for(const[k,h]of a.entries())p.push({...h,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:c,needUndoTicker:d,emitEventType:this.emitEventType});p.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:m,willSyncService:n,isSync:c,points:i.getChildrenPoints()})}return d&&p.push({type:s.EPostMessageType.None,needUndoTicker:d}),p.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:o.updateSelectorOpt.workState}),{sp:p}})}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,textUpdateForWoker:n,needUndoTicker:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,emitEventType:this.emitEventType,willSerializeData:l,isSync:!0,textUpdateForWoker:n,callback:this.updateSelectorCallback,needUndoTicker:c}))}}class Y extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetLock)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,needUndoTicker:n,requestId:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:c,callback:this.updateSelectorCallback,needUndoTicker:n}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a,workShapeNode:i,res:l}=e,{willSyncService:n,isSync:c,updateSelectorOpt:d,needUndoTicker:p,requestId:m,emitEventType:k}=o,h=r.sp||[],y=l==null?void 0:l.selectRect;if(n&&h){for(const[u,T]of a.entries())h.push({...T,workId:u,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:c,emitEventType:k,requestId:m});h.push({isLocked:d.isLocked,selectorColor:i.selectorColor,scaleType:i.scaleType,canRotate:i.canRotate,type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:y,willSyncService:n,isSync:c})}return p&&h.push({type:s.EPostMessageType.None,needUndoTicker:p}),{sp:h}}}class Z extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetShapeOpt)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,needUndoTicker:n,requestId:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:c,callback:this.updateSelectorCallback,needUndoTicker:n}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a}=e,{willSyncService:i,isSync:l,needUndoTicker:n,requestId:c,emitEventType:d}=o,p=r.sp||[];if(i&&p)for(const[m,k]of a.entries())p.push({...k,workId:m,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:d,requestId:c});return n&&p.push({type:s.EPostMessageType.None,needUndoTicker:n}),{sp:p}}}class j{constructor(t){f(this,"builders",new Map);this.builders=new Map(t.map(e=>[e,this.build(e)]))}build(t){switch(t){case s.EmitEventType.TranslateNode:return new V;case s.EmitEventType.ZIndexNode:return new q;case s.EmitEventType.CopyNode:return new z;case s.EmitEventType.SetColorNode:return new G;case s.EmitEventType.ScaleNode:return new H;case s.EmitEventType.RotateNode:return new Q;case s.EmitEventType.SetFontStyle:return new $;case s.EmitEventType.SetPoint:return new X;case s.EmitEventType.SetLock:return new Y;case s.EmitEventType.SetShapeOpt:return new Z}}registerForMainThread(t){return this.builders.forEach(e=>{e&&e.registerMainThread(t)}),this}async consumeForMainThread(t){for(const e of this.builders.values())if(await(e==null?void 0:e.consume(t)))return!0;return!1}}function J({subThreads:W,layers:t,scene:e,removeLayerTexture:o}){for(const r of W)r.destroy();for(const r of t){const a=r.parent;a&&o(r,a),r.remove()}e.remove()}class ee{constructor(t,e){f(this,"viewId");f(this,"fullLayer");f(this,"topLayer");f(this,"localLayer");f(this,"serviceLayer");f(this,"snapshotFullLayer");f(this,"vNodes");f(this,"master");f(this,"opt");f(this,"cameraOpt");f(this,"scene");f(this,"localWork");f(this,"serviceWork");f(this,"topWork");f(this,"taskUpdateCameraId");f(this,"taskUpdateCameraResolve");f(this,"debounceUpdateCameraId");f(this,"debounceUpdateCache",new Set);f(this,"mainThreadPostId");f(this,"destroyed",!1);f(this,"combinePostMsg",new Set);f(this,"methodBuilder");f(this,"cacheImages",new Map);f(this,"imageResolveMap",new Map);this.viewId=t,this.opt=e,this.scene=this.createScene({...e.canvasOpt,container:e.container}),this.master=e.master;const o=s.DefaultAppliancePluginExtrasOptions.bufferSize.full,r=s.DefaultAppliancePluginExtrasOptions.bufferSize.sub;this.fullLayer=this.createLayer("fullLayer",this.scene,{...e.layerOpt,bufferSize:this.viewId===s.Main_View_Id?o:r*2}),this.topLayer=this.createLayer("topLayer",this.scene,{...e.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,r),contextType:"2d"}),this.localLayer=this.createLayer("localLayer",this.scene,{...e.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,r),contextType:"2d"}),this.serviceLayer=this.createLayer("serviceLayer",this.scene,{...e.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,r),contextType:"2d"}),this.vNodes=new s.VNodeManager(t,this.scene);const a={thread:this,vNodes:this.vNodes};this.localWork=new K(a),this.serviceWork=new _(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(t){var e;return(e=this.cacheImages.get(t))==null?void 0:e.imageSource}getCachedImagesByWorkId(t){for(const[e,o]of this.cacheImages.entries())if(e===t&&o.imageSource)return o.imageSource}deleteCachedImagesByWorkId(t){for(const[e,o]of this.cacheImages.entries())o.workId===t&&("close"in o.imageSource&&o.imageSource.close(),this.cacheImages.delete(e))}clearCacheImages(){this.cacheImages.forEach(t=>{"close"in t.imageSource&&t.imageSource.close()}),this.cacheImages.clear()}clearImageResolveMap(){this.imageResolveMap.forEach(({timer:t})=>{t&&clearTimeout(t)}),this.imageResolveMap.clear()}post(t){this.combinePostMsg.add(t),this.runBatchPostData()}updateDpr(t){this.scene.displayRatio=t}async on(t){if(!await this.methodBuilder.consumeForMainThread(t)){const{msgType:e,toolsType:o,opt:r,dataType:a,workId:i,workState:l,imageSrc:n,imageBitmap:c,imageElement:d,workIds:p,isLockSentEventCursor:m}=t,k=i==null?void 0:i.toString();switch(e){case s.EPostMessageType.UpdateDpr:D.isNumber(t.dpr)&&this.updateDpr(t.dpr);break;case s.EPostMessageType.AuthClear:{const{clearUids:h,localUid:y}=t;this.vNodes.setCanClearUids(h),this.vNodes.setLocalUid(y);break}case s.EPostMessageType.Destroy:this.destroy();break;case s.EPostMessageType.Clear:this.clearAll();break;case s.EPostMessageType.UpdateCamera:await this.updateCamera(t);break;case s.EPostMessageType.UpdateTools:if(o&&r){const h={toolsType:o,toolsOpt:r};this.topWork.canUseTopLayer(o)?this.topWork.setToolsOpt(h):this.localWork.setToolsOpt(h)}break;case s.EPostMessageType.CreateWork:if(k&&r&&o){if(this.topWork.canUseTopLayer(o)){this.topWork.getToolsOpt()||this.topWork.setToolsOpt({toolsType:o,toolsOpt:r}),this.topWork.setWorkOptions(k,r);break}this.localWork.getToolsOpt()||this.localWork.setToolsOpt({toolsType:o,toolsOpt:r}),this.localWork.setWorkOptions(k,r)}break;case s.EPostMessageType.DrawWork:l===s.EventWorkState.Done&&a===s.EDataType.Local?(this.consumeDrawAll(a,t),o===s.EToolsKey.LaserPen&&m&&this.post({sp:[{type:s.EPostMessageType.None,isLockSentEventCursor:m}]})):await this.consumeDraw(a,t);break;case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:if(o&&this.topWork.canUseTopLayer(o)){this.consumeDrawAll(a,t);break}this.consumeFull(a,t);break;case s.EPostMessageType.RemoveNode:await this.removeNode(t);return;case s.EPostMessageType.Select:a===s.EDataType.Service&&(i===s.Storage_Selector_key?this.localWork.updateFullSelectWork(t):this.serviceWork.runSelectWork(t));break;case s.EPostMessageType.CursorBlur:this.localWork.cursorBlur();return;case s.EPostMessageType.CursorHover:this.localWork.cursorHover(t);break;case s.EPostMessageType.GetTextActive:a===s.EDataType.Local&&this.localWork.checkTextActive(t);break;case s.EPostMessageType.GetImageBitMap:if(n&&(c||d)&&i){const h=i.toString();this.deleteCachedImagesByWorkId(h),this.cacheImages.set(n,{imageSource:c||d,workId:h});const y=this.imageResolveMap.get(n);if(y){const{resolve:u,timer:T}=y;T&&clearTimeout(T),u&&u(n)}}break;case s.EPostMessageType.GetVNodeInfo:if(i&&p){const h=p.map(y=>this.vNodes.get(y));this.post({sp:[{type:s.EPostMessageType.GetVNodeInfo,dataType:s.EDataType.Local,workId:i,vInfo:h}]})}break}}}getIconSize(t,e,o){const r=t*o,a=e*o;return r<=50||a<=50?[50,50]:r<=100||a<=100?[100,100]:r<=200||a<=200?[200,200]:r<=400||a<=400?[400,400]:r<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(t){const{toolsType:e,opt:o,workId:r}=t;if(e===s.EToolsKey.Image&&o&&r){const a=r.toString(),{src:i,type:l,width:n,height:c,strokeColor:d}=o;if(!i||!l||!n||!c)return;let p=i;if(l===s.EImageType.Iconify){const[y,u]=this.getIconSize(n,c,this.opt.displayer.dpr);p=s.getIconImageSrc(i,y,u,d)}if(this.cacheImages.has(p)){const y=this.getCachedImages(p);if(y)return y}if(this.imageResolveMap.has(p)){const y=this.getCachedImagesByWorkId(a);if(y)return y}const h=await new Promise(y=>{const u=this.imageResolveMap.get(p)||{resolve:void 0,timer:void 0};u.timer&&clearTimeout(u.timer),u.resolve=y,u.timer=setTimeout(()=>{const T=this.imageResolveMap.get(p);T!=null&&T.resolve&&T.resolve(p)},5e3),this.imageResolveMap.set(p,u),this.opt.post({sp:[{imageSrc:p,workId:a,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!1,type:s.EPostMessageType.GetImageBitMap}]})});return this.imageResolveMap.delete(h),this.getCachedImages(p)}}async removeNode(t){const{dataType:e,workId:o,removeIds:r}=t,a=r||[];if(o&&a.push(o.toString()),a.length)for(const i of a){if(i===s.Storage_Selector_key){await this.localWork.removeSelector(t);continue}e===s.EDataType.Local?this.localWork.removeWork(t):e===s.EDataType.Service&&this.serviceWork.removeWork(t),await this.localWork.colloctEffectSelectWork(t)}}async consumeFull(t,e){const o=await this.localWork.colloctEffectSelectWork(e);o&&t===s.EDataType.Local&&await this.localWork.consumeFull(o),o&&t===s.EDataType.Service&&this.serviceWork.consumeFull(o)}setCameraOpt(t){this.cameraOpt=t;const{scale:e,centerX:o,centerY:r,width:a,height:i}=t;(a!==this.scene.width||i!==this.scene.height)&&this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[e,e]),this.fullLayer.setAttribute("translate",[-o,-r]),this.topLayer.setAttribute("scale",[e,e]),this.topLayer.setAttribute("translate",[-o,-r]),this.localLayer.setAttribute("scale",[e,e]),this.localLayer.setAttribute("translate",[-o,-r]),this.serviceLayer.setAttribute("scale",[e,e]),this.serviceLayer.setAttribute("translate",[-o,-r])}runBatchPostData(){this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}combinePostData(){var r;this.mainThreadPostId=void 0;const t=[];let e,o;for(const a of this.combinePostMsg.values()){if((r=a.sp)!=null&&r.length)for(const i of a.sp){let l=!1;for(const n of t)if(D.isEqual(i,n)){l=!0;break}l||t.push(i)}D.isNumber(a.fullWorkerDrawCount)&&(e=a.fullWorkerDrawCount),D.isNumber(a.consumeCount)&&(o=a.consumeCount)}return this.combinePostMsg.clear(),{sp:t,fullWorkerDrawCount:e,consumeCount:o}}combinePost(){var o,r;const t=this.combinePostData(),e=(o=t.sp)==null?void 0:o.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker||a.collectUndoTicker);e!=null&&e.length?t.sp=e.map(a=>a.viewId?a:{...a,viewId:this.viewId}):delete t.sp,t.consumeCount===void 0&&delete t.consumeCount,t.fullWorkerDrawCount===void 0&&delete t.fullWorkerDrawCount,(t!=null&&t.consumeCount||t!=null&&t.fullWorkerDrawCount||(r=t.sp)!=null&&r.length)&&this.opt.post(t)}clearAll(){this.fullLayer.children.length&&(this.fullLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.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}]})}consumeDrawAll(t,e){const{toolsType:o,workId:r}=e;if(r){const a=r.toString();if(o&&this.topWork.canUseTopLayer(o)){t===s.EDataType.Local&&(this.topWork.getLocalWorkShape(r.toString())||this.topWork.createLocalWork(e)),this.topWork.consumeDrawAll(e);return}t===s.EDataType.Local&&(this.localWork.getWorkShape(a)||this.localWork.createLocalWork(e),this.localWork.consumeDrawAll(e,this.serviceWork))}}async consumeDraw(t,e){const{opt:o,workId:r,toolsType:a}=e;if(r&&a&&o){const i=r.toString();if(this.topWork.canUseTopLayer(a)){t===s.EDataType.Local&&(this.topWork.getLocalWorkShape(i)||this.topWork.createLocalWork(e)),this.topWork.consumeDraw(e);return}t===s.EDataType.Local?(this.localWork.getWorkShape(i)||this.localWork.createLocalWork(e),await this.localWork.consumeDraw(e,this.serviceWork)):t===s.EDataType.Service&&this.serviceWork.consumeDraw(e);return}}async updateCamera(t){var l,n;const{cameraOpt:e,scenePath:o,cameraTaskId:r}=t;let a=!1;const i=this.cameraOpt;if(e&&!D.isEqual(i,e)){const c=!i||i.scale!==e.scale||i.centerX!==e.centerX||i.centerY!==e.centerY||i.width!==e.width||i.height!==e.height;if(this.taskUpdateCameraId&&(clearTimeout(this.taskUpdateCameraId),this.taskUpdateCameraId=void 0,(l=this.taskUpdateCameraResolve)==null||l.call(this,!1),this.taskUpdateCameraResolve=void 0),o){const h=[];for(const[y,u]of this.localWork.getWorkShapes().entries())switch(u.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:y!==s.Cursor_Hover_Id&&y!==s.Storage_Selector_key&&h.push(`${y}:${u.toolsType}`);break}if(h.length){await new Promise(u=>{this.taskUpdateCameraResolve=u,this.taskUpdateCameraId=setTimeout(()=>{this.taskUpdateCameraId=void 0,this.taskUpdateCameraResolve=void 0,u(!0)},s.Task_Time_Interval)})&&await this.updateCamera(t);return}}const d=new Map;for(const[h,y]of this.vNodes.getNodesByType(s.EToolsKey.Text).entries()){const u=y.rect;d.set(h,D.cloneDeep(u))}for(const[h,y]of this.vNodes.gethasEraserNodes().entries())d.set(h,D.cloneDeep(y.rect));const p=new Set(d.keys());let m=!1;if(this.localWork.hasSelector()){const h=(n=this.localWork.getSelector())==null?void 0:n.selectIds;if(h){m=!0;for(const y of h)p.add(y)}}let k=!1;if(this.serviceWork.selectorWorkShapes.size)for(const h of this.serviceWork.selectorWorkShapes.values()){const y=h.selectIds;if(y){k=!0;for(const u of y)p.add(u)}}if(this.setCameraOpt(e),this.vNodes.curNodeMap.size){this.vNodes.clearTarget(),this.vNodes.updateHighLevelNodesRect(p),this.debounceUpdateCameraId&&clearTimeout(this.debounceUpdateCameraId);for(const[h,y]of d.entries()){const u=this.vNodes.get(h);if(u){const T=y,g=u.rect,w=this.getSceneRect(),v=s.getRectMatrixrRelation(T,w),E=s.getRectMatrixrRelation(g,w);let M=!1;(v!==E||T.w!==g.w||T.h!==g.h||E===s.EMatrixrRelationType.intersect)&&(M=!0);const{toolsType:C,opt:R}=u,I=R.eraserlines&&R.eraserlines.length>0||!!R.eraserFaces;(M||c&&I)&&(C===s.EToolsKey.Text||I)&&this.debounceUpdateCache.add(h)}}if(m&&this.localWork.reRenderSelector(),k)for(const[h,y]of this.serviceWork.selectorWorkShapes.entries())this.serviceWork.runSelectWork({workId:h,selectIds:y.selectIds,msgType:s.EPostMessageType.Select,dataType:s.EDataType.Service,viewId:this.viewId});a=!0,this.debounceUpdateCameraId=setTimeout(async()=>{var y;this.debounceUpdateCameraId=void 0;const h=[];for(const u of this.debounceUpdateCache.values()){const T=(y=this.fullLayer)==null?void 0:y.getElementsByName(u)[0],g=this.vNodes.get(u);if(g){const{toolsType:w,opt:v}=g;if(T||w!==s.EToolsKey.Text){const E=this.localWork.setFullWork({toolsType:w,opt:v,workId:u});if(E){if(w===s.EToolsKey.Text)h.push(E.consumeServiceAsync({isFullWork:!0,replaceId:u,boxRect:this.getSceneRect()}));else if(v.eraserlines&&v.eraserlines.length>0||v.eraserFaces){const M=E.consumeService({op:g.op,isFullWork:!0,replaceId:u,workState:s.EventWorkState.Done});this.localWork.clearWorkShapeNodeCache(u),h.push(Promise.resolve(M))}}}}this.debounceUpdateCache.delete(u)}this.vNodes.updateLowLevelNodesRect(),this.vNodes.clearHighLevelIds(),await Promise.all(h),await Promise.all([this.fullLayer.parent.prepareRender,this.topLayer.parent.prepareRender,this.localLayer.parent.prepareRender,this.serviceLayer.parent.prepareRender]),D.isNumber(r)&&this.opt.post({viewId:this.viewId,cameraSettledTaskId:r})},s.Task_Time_Interval)}await Promise.all([this.fullLayer.parent.prepareRender,this.topLayer.parent.prepareRender,this.localLayer.parent.prepareRender,this.serviceLayer.parent.prepareRender]),!a&&D.isNumber(r)&&this.opt.post({viewId:this.viewId,cameraSettledTaskId:r})}}getSceneRect(){const{width:t,height:e}=this.scene;return{x:0,y:0,w:Math.floor(t),h:Math.floor(e)}}createScene(t){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...t,autoRender:!0,id:this.viewId,contextType:"2d"})}createLayer(t,e,o){const{width:r,height:a}=o,i=`canvas-${t}`,l=e.layer(i,{...o,offscreen:!1}),n=new s.Group({anchor:[.5,.5],pos:[r*.5,a*.5],size:[r,a],name:"viewport",id:t});return l.append(n),n}updateScene(t){this.scene.attr({...t});const{width:e,height:o}=t;this.scene.width=e,this.scene.height=o,this.updateLayer({width:e,height:o})}updateLayer(t){const{width:e,height:o}=t;this.fullLayer.parent.setAttribute("width",e),this.fullLayer.parent.setAttribute("height",o),this.fullLayer.setAttribute("size",[e,o]),this.fullLayer.setAttribute("pos",[e*.5,o*.5]),this.topLayer.parent.setAttribute("width",e),this.topLayer.parent.setAttribute("height",o),this.topLayer.setAttribute("size",[e,o]),this.topLayer.setAttribute("pos",[e*.5,o*.5]),this.localLayer.parent.setAttribute("width",e),this.localLayer.parent.setAttribute("height",o),this.localLayer.setAttribute("size",[e,o]),this.localLayer.setAttribute("pos",[e*.5,o*.5]),this.serviceLayer.parent.setAttribute("width",e),this.serviceLayer.parent.setAttribute("height",o),this.serviceLayer.setAttribute("size",[e,o]),this.serviceLayer.setAttribute("pos",[e*.5,o*.5])}destroy(){this.destroyed||(this.destroyed=!0,this.clearCacheImages(),this.clearImageResolveMap(),this.vNodes.clear(),J({subThreads:[this.localWork,this.serviceWork,this.topWork],layers:[this.fullLayer,this.topLayer,this.localLayer,this.serviceLayer],scene:this.scene,removeLayerTexture:(t,e)=>s.removeTexture(t,e)}))}}class te{constructor(t,e){f(this,"viewId");f(this,"fullLayer");f(this,"master");f(this,"opt");f(this,"scene");f(this,"mainThreadPostId");f(this,"combinePostMsg",new Set);f(this,"workShapes",new Map);f(this,"cacheImages",new Map);f(this,"imageResolveMap",new Map);this.viewId=t,this.opt=e,this.scene=this.createScene({...e.canvasOpt,container:e.container}),this.master=e.master,this.fullLayer=this.createLayer("fullLayer",this.scene,{...e.layerOpt,bufferSize:this.viewId===s.Main_View_Id?6e3:3e3,contextType:"2d"})}getCachedImages(t){var e;return(e=this.cacheImages.get(t))==null?void 0:e.imageSource}getCachedImagesByWorkId(t){for(const[e,o]of this.cacheImages.entries())if(e===t&&o.imageSource)return o.imageSource}deleteCachedImagesByWorkId(t){for(const[e,o]of this.cacheImages.entries())o.workId===t&&("close"in o.imageSource&&o.imageSource.close(),this.cacheImages.delete(e))}clearCacheImages(){this.cacheImages.forEach(t=>{"close"in t.imageSource&&t.imageSource.close()}),this.cacheImages.clear()}clearImageResolveMap(){this.imageResolveMap.forEach(({timer:t})=>{t&&clearTimeout(t)}),this.imageResolveMap.clear()}post(t){this.combinePostMsg.add(t),this.runBatchPostData()}async on(t){const{msgType:e,imageSrc:o,imageBitmap:r,imageElement:a,workId:i}=t;switch(e){case s.EPostMessageType.Snapshot:{await this.getSnapshot(t),this.destroy();return}case s.EPostMessageType.BoundingBox:{await this.getBoundingRect(t),this.destroy();return}case s.EPostMessageType.GetImageBitMap:{if(o&&(r||a)&&i){const l=i.toString();this.deleteCachedImagesByWorkId(l),this.cacheImages.set(o,{imageSource:r||a,workId:l});const n=this.imageResolveMap.get(o);if(n){const{resolve:c,timer:d}=n;d&&clearTimeout(d),c&&c(o)}}break}}}getIconSize(t,e,o){const r=t*o,a=e*o;return r<=50||a<=50?[50,50]:r<=100||a<=100?[100,100]:r<=200||a<=200?[200,200]:r<=400||a<=400?[400,400]:r<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(t){const{toolsType:e,opt:o,workId:r}=t;if(e===s.EToolsKey.Image&&o&&r){const a=r.toString(),{src:i,type:l,width:n,height:c,strokeColor:d}=o;if(!i||!l||!n||!c)return;let p=i;if(l===s.EImageType.Iconify){const[y,u]=this.getIconSize(n,c,this.opt.displayer.dpr);p=s.getIconImageSrc(i,y,u,d)}if(this.cacheImages.has(p)){const y=this.getCachedImages(p);if(y)return y}if(this.imageResolveMap.has(p)){const y=this.getCachedImagesByWorkId(a);if(y)return y}const h=await new Promise(y=>{const u=this.imageResolveMap.get(p)||{resolve:void 0,timer:void 0};u.timer&&clearTimeout(u.timer),u.resolve=y,u.timer=setTimeout(()=>{const T=this.imageResolveMap.get(p);T!=null&&T.resolve&&T.resolve(p)},5e3),this.imageResolveMap.set(p,u),this.opt.post({sp:[{imageSrc:p,workId:a,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!0,type:s.EPostMessageType.GetImageBitMap}]})});return this.imageResolveMap.delete(h),this.getCachedImages(p)}}createWorkShapeNode(t){return s.getShapeInstance({...t,fullLayer:this.fullLayer,drawLayer:void 0})}setFullWork(t){const{workId:e,opt:o,toolsType:r}=t;if(e&&o&&r){const a=e.toString();let i;return e&&this.workShapes.has(a)?(i=this.workShapes.get(a),i==null||i.setWorkOptions(o)):i=this.createWorkShapeNode({toolsOpt:o,toolsType:r,workId:a}),i?(this.workShapes.set(a,i),i):void 0}}async runFullWork(t){var r;const e=this.setFullWork(t),o=t.ops&&s.transformToNormalData(t.ops);if(e){let a,i;const l=(r=e.getWorkId())==null?void 0:r.toString();return e.toolsType===s.EToolsKey.BackgroundSVG?a=e.consumeService({isFullWork:!0,replaceId:l}):e.toolsType===s.EToolsKey.Image?a=await e.consumeServiceAsync({isFullWork:!0,worker:this}):e.toolsType===s.EToolsKey.Text?a=await e.consumeServiceAsync({isFullWork:!0,replaceId:l,isDrawLabel:!0}):(a=e.consumeService({op:o,isFullWork:!0,replaceId:l}),i=(t==null?void 0:t.updateNodeOpt)&&e.updataOptService(t.updateNodeOpt)),s.computRect(a,i)}}async getSnapshot(t){const{scenePath:e,scenes:o,cameraOpt:r,w:a,h:i}=t;if(e&&o&&r){this.setCameraOpt(r);for(const[n,c]of Object.entries(o))if(c!=null&&c.type)switch(c==null?void 0:c.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const{opt:d}=c,p={...c,opt:d,workId:n,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId};await this.runFullWork(p);break}}let l;a&&i&&(l={resizeWidth:a,resizeHeight:i});try{await this.getSnapshotRender({scenePath:e,options:l})}catch(n){const c=n&&n instanceof Error?n.message:n==null?void 0:n.toString();console.error("[SnapshotThreadImpl] getSnapshotRender error",c),this.post({sp:[{type:s.EPostMessageType.ReportError,reportString:`[SnapshotThreadImpl] getSnapshotRender error: ${c}`}]})}}}getSceneRect(){const{width:t,height:e}=this.scene;return{x:0,y:0,w:Math.floor(t),h:Math.floor(e)}}getRectImageBitmap(t,e){const o=Math.floor(t.x*this.opt.displayer.dpr),r=Math.floor(t.y*this.opt.displayer.dpr),a=t.w>0&&Math.floor(t.w*this.opt.displayer.dpr||1)||1,i=t.h>0&&Math.floor(t.h*this.opt.displayer.dpr||1)||1;return createImageBitmap(this.fullLayer.parent.canvas,o,r,a,i,e)}async getSnapshotRender(t){var a;const{scenePath:e,options:o}=t;((a=this.fullLayer)==null?void 0:a.parent).render();const r=await this.getRectImageBitmap(this.getSceneRect(),o);r&&(this.post({sp:[{type:s.EPostMessageType.Snapshot,scenePath:e,imageBitmap:r,viewId:this.viewId,index:0}]}),this.fullLayer&&s.removeAllChildren(this.fullLayer,this.fullLayer.parent))}async getBoundingRect(t){const{scenePath:e,scenes:o,cameraOpt:r}=t;if(e&&o&&r){this.setCameraOpt(r);let a;for(const[i,l]of Object.entries(o))if(l!=null&&l.type)switch(l==null?void 0:l.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const n=await this.runFullWork({...l,workId:i,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId});a=s.computRect(a,n);break}}a&&this.post({sp:[{type:s.EPostMessageType.BoundingBox,scenePath:e,rect:a}]})}}setCameraOpt(t){const{scale:e,centerX:o,centerY:r,width:a,height:i}=t;this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[e,e]),this.fullLayer.setAttribute("translate",[-o,-r])}runBatchPostData(){this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}combinePostData(){var e;this.mainThreadPostId=void 0;const t=[];for(const o of this.combinePostMsg.values())if((e=o.sp)!=null&&e.length)for(const r of o.sp){let a=!1;for(const i of t)if(s.isEqual(r,i)){a=!0;break}a||t.push(r)}return this.combinePostMsg.clear(),{sp:t}}combinePost(){var o,r;const t=this.combinePostData(),e=(o=t.sp)==null?void 0:o.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker);e!=null&&e.length?t.sp=e.map(a=>a.viewId?a:{...a,viewId:this.viewId}):delete t.sp,(r=t.sp)!=null&&r.length&&this.opt.post(t)}createScene(t){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...t,autoRender:!1,contextType:"2d"})}createLayer(t,e,o){const{width:r,height:a}=o,i=`canvas-${t}`,l=e.layer(i,o),n=new s.Group({anchor:[.5,.5],pos:[r*.5,a*.5],size:[r,a],name:"viewport",id:t});return l.append(n),n}updateScene(t){this.scene.attr({...t});const{width:e,height:o}=t;this.scene.width=e,this.scene.height=o,this.updateLayer({width:e,height:o})}updateLayer(t){const{width:e,height:o}=t;this.fullLayer.parent.setAttribute("width",e),this.fullLayer.parent.setAttribute("height",o),this.fullLayer.setAttribute("size",[e,o]),this.fullLayer.setAttribute("pos",[e*.5,o*.5])}destroy(){this.clearCacheImages(),this.clearImageResolveMap(),this.fullLayer.remove(),s.removeTexture(this.fullLayer,this.fullLayer.parent),this.scene.remove()}}class se{constructor(t){f(this,"mainThreadMap",new Map);f(this,"cameraRenderQueueByView",new Map);f(this,"viewGenerationById",new Map);f(this,"snapshotThread");f(this,"master");f(this,"post",t=>{const{fullWorkerDrawCount:e,sp:o,workerTasksqueueCount:r,cameraTaskId:a,cameraSettledTaskId:i,viewId:l,consumeCount:n}=t;l&&s.isNumber(a)&&this.master.ackCameraTask(l,a),l&&s.isNumber(i)&&this.master.ackCameraSettledTask(l,i),this.master.isBusy&&s.isNumber(r)&&this.master.setWorkerTasksqueueCount(r),s.isNumber(e)&&this.master.setMaxDrawCount(e),s.isNumber(n)&&this.master.setConsumeCount(n),o&&this.master.collectorSyncData(o)});this.master=t}enqueueViewTask(t,e){const r=(this.cameraRenderQueueByView.get(t)||Promise.resolve()).catch(()=>{}).then(e);return this.cameraRenderQueueByView.set(t,r),r}destroy(){var t;(t=this.snapshotThread)==null||t.destroy(),this.snapshotThread=void 0;for(const e of this.mainThreadMap.values())e.destroy();this.mainThreadMap.clear()}createMainThread(t,e){return new ee(t,e)}createSnapshotThread(t,e){return new te(t,e)}async consume(t){var e,o,r,a;for(const i of t.values()){const{msgType:l,viewId:n,tasksqueue:c,mainTasksqueueCount:d,cameraTaskId:p,layerOpt:m,offscreenCanvasOpt:k,cameraOpt:h,isSubWorker:y}=i;if(l===s.EPostMessageType.Console){console.log(this);continue}if(l===s.EPostMessageType.Init){const w=i.viewGeneration??(this.viewGenerationById.get(n)||0)+1;await this.enqueueViewTask(n,async()=>{var R;this.viewGenerationById.set(n,w);const v=(R=this.master.control.viewContainerManager.getView(n))==null?void 0:R.displayer,E=v==null?void 0:v.canvasContainerRef.current;if(!v||!E||!m||!k)return;const M=this.mainThreadMap.get(n);M==null||M.destroy();const C=this.createMainThread(n,{displayer:v,container:E,layerOpt:m,master:this.master,canvasOpt:k,post:this.post});this.mainThreadMap.set(n,C),C&&h&&C.setCameraOpt(h),this.post({sp:[{type:s.EPostMessageType.Init,viewId:n,viewGeneration:w}]})});continue}if((l===s.EPostMessageType.Snapshot||l===s.EPostMessageType.BoundingBox)&&n===((e=this.master.control.viewContainerManager.mainView)==null?void 0:e.id)){const w=(o=this.master.control.viewContainerManager.getView(n))==null?void 0:o.displayer,v=(r=w.snapshotContainerRef)==null?void 0:r.current;if(w&&v&&h){(a=this.snapshotThread)==null||a.destroy(),v.style.width=`${h.width}px`,v.style.height=`${h.height}px`;const E={...s.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:h.width,height:h.height},M={...s.ViewContainerManager.defaultScreenCanvasOpt,width:h.width,height:h.height};this.snapshotThread=this.createSnapshotThread(n,{displayer:w,container:v,layerOpt:E,master:this.master,canvasOpt:M,post:this.post}),this.snapshotThread.on(i).then(()=>{this.snapshotThread=void 0,v.innerHTML="",v.style.width="",v.style.height=""});continue}}if(l===s.EPostMessageType.GetImageBitMap&&y&&this.snapshotThread){this.snapshotThread.on(i);continue}if(l===s.EPostMessageType.TasksQueue&&(c!=null&&c.size)){const w=c.get(n),v=this.mainThreadMap.get(n),E=this.viewGenerationById.get(n);w&&v&&await this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==E||this.mainThreadMap.get(n)!==v||await v.on(w)}),d&&s.isNumber(p)&&this.post({workerTasksqueueCount:d,cameraTaskId:p,viewId:n});continue}if(n===s.Storage_ViewId_ALL){const w=[...this.mainThreadMap.entries()];for(const[v,E]of w){const M=this.enqueueViewTask(v,async()=>{this.mainThreadMap.get(v)===E&&(l===s.EPostMessageType.Destroy?(E.destroy(),this.mainThreadMap.delete(v),this.viewGenerationById.set(v,(this.viewGenerationById.get(v)||0)+1)):await E.on(i))});await M,this.cameraRenderQueueByView.get(v)===M&&this.cameraRenderQueueByView.delete(v)}continue}const u=this.mainThreadMap.get(n);if(l===s.EPostMessageType.Destroy&&!u){await this.enqueueViewTask(n,async()=>{this.viewGenerationById.set(n,i.viewGeneration??(this.viewGenerationById.get(n)||0)+1)});continue}if(!u)continue;const T=this.viewGenerationById.get(n),g=this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==T||this.mainThreadMap.get(n)!==u||await u.on(i)});l===s.EPostMessageType.Destroy&&(await g,this.mainThreadMap.get(n)===u&&this.mainThreadMap.delete(n),this.cameraRenderQueueByView.get(n)===g&&this.cameraRenderQueueByView.delete(n),this.viewGenerationById.set(n,i.viewGeneration??(T||0)+1))}}}exports.MainThreadManagerImpl=se;
|
|
1
|
+
"use strict";var B=Object.defineProperty;var F=(W,t,e)=>t in W?B(W,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):W[t]=e;var f=(W,t,e)=>F(W,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./index-BpRy_vjc.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(t){f(this,"vNodes");f(this,"thread");f(this,"serviceWorkShapes",new Map);f(this,"localWorkShapes",new Map);f(this,"tmpOpt");f(this,"animationId");f(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);this.vNodes=t.vNodes,this.thread=t.thread}createLocalWork(t){const{workId:e,opt:o,toolsType:r}=t;if(e&&o){const a=e.toString();!this.getToolsOpt()&&r&&this.setToolsOpt({toolsType:r,toolsOpt:o}),this.setWorkOptions(a,o)}}getLocalWorkShape(t){return this.localWorkShapes.get(t)}createLocalWorkShape(t,e){if(t&&this.tmpOpt){const o={toolsType:this.tmpOpt.toolsType,toolsOpt:e||this.tmpOpt.toolsOpt},r=this.createWorkShapeNode({...o,workId:t});return r&&this.localWorkShapes.set(t,{node:r,toolsType:r.toolsType,workState:s.EventWorkState.Start}),r}}canUseTopLayer(t){return t===s.EToolsKey.LaserPen}destroy(){this.clearAll()}clearAll(){this.thread.topLayer.children.length&&(this.thread.topLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.serviceWorkShapes.clear(),this.localWorkShapes.clear()}consumeDraw(t){const{workId:e,dataType:o}=t;if(o===s.EDataType.Service)this.activeServiceWorkShape(t);else{const r=e==null?void 0:e.toString(),a=r&&this.localWorkShapes.get(r);if(!a)return;const i=a.node.consume({data:t,isFullWork:!1,isSubWorker:!0});i.rect&&(a.result=i,a.workState=s.EventWorkState.Doing,r&&this.localWorkShapes.set(r,a))}this.runAnimation()}setToolsOpt(t){var e;this.tmpOpt=t,(e=t.toolsOpt)!=null&&e.syncUnitTime&&(this.syncUnitTime=t.toolsOpt.syncUnitTime)}getToolsOpt(){return this.tmpOpt}createWorkShapeNode(t){const{toolsType:e}=t;if(e===s.EToolsKey.LaserPen)return s.getShapeInstance({...t,vNodes:this.vNodes,fullLayer:this.thread.topLayer,drawLayer:this.thread.topLayer})}setNodeKey(t,e,o,r){return e.toolsType=o,e.node=this.createWorkShapeNode({workId:t,toolsType:o,toolsOpt:r}),e}activeServiceWorkShape(t){var m,k;const{workId:e,opt:o,toolsType:r,type:a,updateNodeOpt:i,ops:l,op:n}=t;if(!e)return;const c=e.toString(),d=(m=this.vNodes.get(c))==null?void 0:m.rect;if(!((k=this.serviceWorkShapes)!=null&&k.has(c))){let h={toolsType:r,animationWorkData:n||[],animationIndex:0,type:a,updateNodeOpt:i,ops:l,oldRect:d};r&&o&&(h=this.setNodeKey(c,h,r,o)),this.serviceWorkShapes.set(c,h)}const p=this.serviceWorkShapes.get(c);a&&(p.type=a),l&&(p.animationWorkData=s.transformToNormalData(l),p.ops=l),i&&(p.updateNodeOpt=i),n&&(p.animationWorkData=n),p.node&&p.node.getWorkId()!==c&&p.node.setWorkId(c),d&&(p.oldRect=d),r&&o&&(p.toolsType!==r&&r&&o&&this.setNodeKey(c,p,r,o),p.node&&p.node.setWorkOptions(o))}computNextAnimationIndex(t,e){var a;const o=((a=t.node)==null?void 0:a.syncUnitTime)||this.syncUnitTime,r=Math.floor((t.animationWorkData||[]).slice(t.animationIndex).length*32/e/o)*e;return Math.min((t.animationIndex||0)+(r||e),(t.animationWorkData||[]).length)}animationDraw(){var r,a,i,l;this.animationId=void 0;let t=!1;const e=new Map,o=[];for(const[n,c]of this.serviceWorkShapes.entries())switch(c.toolsType){case s.EToolsKey.LaserPen:{const p=this.computNextAnimationIndex(c,8),m=Math.max(0,c.animationIndex||0),k=(c.animationWorkData||[]).slice(m,p);if((c.animationIndex||0)<p&&((r=c.node)==null||r.consumeService({op:k,isFullWork:!1}),c.animationIndex=p,k.length&&e.set(n,{workState:m===0?s.EventWorkState.Start:p===((a=c.animationWorkData)==null?void 0:a.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:k.slice(-2)})),c.isDel){(i=c.node)==null||i.clearTmpPoints(),this.serviceWorkShapes.delete(n);break}c.ops&&c.animationIndex===((l=c.animationWorkData)==null?void 0:l.length)&&!c.isDel&&(this.thread.topLayer.getElementsByName(n.toString())[0]||(c.isDel=!0,this.serviceWorkShapes.set(n,c))),t=!0;break}}for(const[n,c]of this.localWorkShapes.entries()){const{result:d,toolsType:p,isDel:m,workState:k}=c;switch(p){case s.EToolsKey.LaserPen:{if(m){c.node.clearTmpPoints(),this.localWorkShapes.delete(n),o.push({removeIds:[n.toString()],type:s.EPostMessageType.RemoveNode});break}d&&((d.op||d.ops)&&o.push(d),c.result=void 0),!this.thread.topLayer.getElementsByName(n.toString())[0]&&k===s.EventWorkState.Done&&(c.isDel=!0,this.localWorkShapes.set(n,c)),t=!0;break}}}t&&this.runAnimation(),e.size&&e.forEach((n,c)=>{o.push({type:s.EPostMessageType.Cursor,uid:c.split(s.Storage_Splitter)[0],op:n.op,workState:n.workState,viewId:this.thread.viewId})}),o.length&&this.thread.post({sp:o})}runAnimation(){this.animationId||(this.animationId=requestAnimationFrame(this.animationDraw.bind(this)))}setWorkOptions(t,e){var r;let o=(r=this.localWorkShapes.get(t))==null?void 0:r.node;if(!o&&this.tmpOpt){const{toolsType:a}=this.tmpOpt;this.tmpOpt.toolsOpt=e,o=this.createWorkShapeNode({workId:t,toolsType:a,toolsOpt:e}),o&&this.localWorkShapes.set(t,{node:o,toolsType:a,workState:s.EventWorkState.Start}),this.setToolsOpt(this.tmpOpt)}e!=null&&e.syncUnitTime||(e.syncUnitTime=this.syncUnitTime),o&&o.setWorkOptions(e)}consumeDrawAll(t){const{workId:e,dataType:o}=t;if(o===s.EDataType.Service)this.activeServiceWorkShape(t);else{const r=e==null?void 0:e.toString(),a=r&&this.localWorkShapes.get(r);if(!a)return;const i=a.node.consumeAll({data:t});a.result=i,a.workState=s.EventWorkState.Done,r&&this.localWorkShapes.set(r,a)}this.runAnimation()}}class K{constructor(t){f(this,"vNodes");f(this,"thread");f(this,"workShapes",new Map);f(this,"effectSelectNodeData",new Set);f(this,"batchEraserRemoveNodes",new Set);f(this,"batchEraserWorks",new Set);f(this,"tmpOpt");f(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);f(this,"fullWorkerDrawCount",0);f(this,"drawWorkActiveId");f(this,"consumeCount",0);f(this,"combineDrawActiveId");f(this,"eraserBatchScheduler",new s.MaxDelayBatchScheduler);this.vNodes=t.vNodes,this.thread=t.thread}async loadImageBitMap(t){return await this.thread.loadImageBitMap(t)}createLocalWork(t){const{workId:e,opt:o,toolsType:r}=t;if(e&&o){const a=e.toString();!this.getToolsOpt()&&r&&this.setToolsOpt({toolsType:r,toolsOpt:o}),this.setWorkOptions(a,o)}}async updateSelector(t){var k;const e=this.workShapes.get(s.Storage_Selector_key);if(!((k=e==null?void 0:e.selectIds)!=null&&k.length))return;const{callback:o,...r}=t,{updateSelectorOpt:a,willSerializeData:i,smoothSync:l}=r,n=await(e==null?void 0:e.updateSelector({updateSelectorOpt:a,selectIds:D.cloneDeep(e.selectIds),vNodes:this.vNodes,willSerializeData:i,worker:this})),c=new Map;let d;n!=null&&n.selectIds&&(d=D.xor(e.selectIds,n.selectIds),n.selectIds.forEach(h=>{const y=this.vNodes.get(h);if(y){const{toolsType:u,op:T,opt:g}=y;c.set(h,{opt:g,toolsType:u,ops:(T==null?void 0:T.length)&&s.transformToSerializableData(T)||void 0})}}),e.selectIds=n.selectIds);const p=[],m=o&&o({res:n,workShapeNode:e,param:r,postData:{sp:p},newServiceStore:c,smoothSync:l})||{sp:p};d&&m.sp.push({type:s.EPostMessageType.RemoveNode,removeIds:d,viewId:this.thread.viewId}),m.sp.length&&this.thread.post(m)}destroy(){this.eraserBatchScheduler.cancel(),this.clearAll()}clearAll(){if(this.eraserBatchScheduler.cancel(),this.thread.localLayer.children.length&&(this.thread.topLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent)),this.workShapes.get(s.Storage_Selector_key)){const e=[];e.push({type:s.EPostMessageType.Select,dataType:s.EDataType.Local,selectIds:[],willSyncService:!1}),this.thread.post({sp:e})}this.workShapes.clear(),this.effectSelectNodeData.clear(),this.batchEraserWorks.clear(),this.batchEraserRemoveNodes.clear()}async checkTextActive(t){const{op:e,viewId:o,dataType:r}=t;if(e!=null&&e.length){let a;for(const i of this.vNodes.curNodeMap.values()){const{rect:l,name:n,toolsType:c,opt:d}=i,p=e[0]*this.thread.fullLayer.worldScaling[0]+this.thread.fullLayer.worldPosition[0],m=e[1]*this.thread.fullLayer.worldScaling[1]+this.thread.fullLayer.worldPosition[1];if(c===s.EToolsKey.Text&&s.isIntersectForPoint([p,m],l)&&d.workState===s.EventWorkState.Done){a=n;break}}a&&(await this.blurSelector({viewId:o,msgType:s.EPostMessageType.Select,dataType:r,isSync:!0}),this.thread.post({sp:[{type:s.EPostMessageType.GetTextActive,toolsType:s.EToolsKey.Text,workId:a}]}))}}cursorHover(t){const{opt:e,toolsType:o,point:r}=t,a=this.setFullWork({workId:s.Cursor_Hover_Id,toolsType:o,opt:e});a&&r&&a.cursorHover(r)}cursorBlur(){var e;const t=this.getWorkShape(s.Cursor_Hover_Id);t&&((e=t.selectIds)!=null&&e.length)&&(t.cursorBlur(),this.clearWorkShapeNodeCache(s.Cursor_Hover_Id)),this.thread.fullLayer.parent.children.forEach(o=>{o.name==="Cursor_Hover_Id"&&o.remove()})}updateFullSelectWork(t){var r,a,i,l,n;const e=this.workShapes.get(s.Storage_Selector_key),{selectIds:o}=t;if(!(o!=null&&o.length)){this.blurSelector(t);return}if(!e){const c=this.setFullWork(t);!c&&t.workId&&this.tmpOpt&&((r=this.tmpOpt)==null?void 0:r.toolsType)===s.EToolsKey.Selector&&this.setWorkOptions(t.workId.toString(),t.opt||this.tmpOpt.toolsOpt),c&&this.updateFullSelectWork(t);return}if(e&&(o!=null&&o.length)){const{selectRect:c}=e.updateSelectIds(o),d=[{selectorColor:((a=t.opt)==null?void 0:a.strokeColor)||e.selectorColor,strokeColor:((i=t.opt)==null?void 0:i.strokeColor)||e.strokeColor,fillColor:((l=t.opt)==null?void 0:l.fillColor)||e.fillColor,textOpt:((n=t.opt)==null?void 0:n.textOpt)||e.textOpt,canTextEdit:e.canTextEdit,canRotate:e.canRotate,scaleType:e.scaleType,type:s.EPostMessageType.Select,viewId:this.thread.viewId,dataType:s.EDataType.Local,selectIds:o,selectRect:c,points:e.getChildrenPoints(),willSyncService:(t==null?void 0:t.willSyncService)||!1,opt:(t==null?void 0:t.willSyncService)&&e.getWorkOptions()||void 0,canLock:e.canLock,isLocked:e.isLocked,toolsTypes:e.toolsTypes,shapeOpt:e.shapeOpt,thickness:e.thickness,useStroke:e.useStroke,strokeType:e.strokeType}];this.thread.post({sp:d})}}async removeSelector(t){const{willSyncService:e,needUndoTicker:o}=t,r=[],a=[],i=this.workShapes.get(s.Storage_Selector_key);if(!i)return;const l=i.selectIds&&[...i.selectIds]||[];for(const n of l){const c=this.vNodes.get(n);if(c)switch(c.toolsType){case s.EToolsKey.Text:{r.push({type:s.EPostMessageType.TextUpdate,toolsType:s.EToolsKey.Text,workId:n,dataType:s.EDataType.Local});break}case s.EToolsKey.BackgroundSVG:r.push({type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:n,dataType:s.EDataType.Local,viewId:this.thread.viewId});break}this.removeNode(n),a.push(n)}a.length&&r.push({type:s.EPostMessageType.RemoveNode,removeIds:a,needUndoTicker:o,emitEventType:t.emitEventType,requestId:t.requestId}),r.push({type:s.EPostMessageType.Select,selectIds:[],willSyncService:e}),await this.blurSelector(),o&&r.push({type:s.EPostMessageType.None,needUndoTicker:o}),r.length&&this.thread.post({sp:r})}removeWork(t){const{workId:e}=t,o=e==null?void 0:e.toString();o&&this.removeNode(o)}removeNode(t){var r;const e=this.vNodes.get(t);e&&(e.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:t,dataType:s.EDataType.Local,viewId:this.thread.viewId}]}),(r=this.thread.fullLayer)==null||r.getElementsByName(t).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.fullLayer.parent)}),this.vNodes.delete(t)),this.workShapes.has(t)&&(this.thread.localLayer.getElementsByName(t).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.localLayer.parent)}),this.clearWorkShapeNodeCache(t))}setFullWork(t){const{workId:e,opt:o,toolsType:r}=t;if(e&&o&&r){const a=e.toString();let i;return e&&this.workShapes.has(a)?(i=this.workShapes.get(a),(i==null?void 0:i.toolsType)!==r?(i==null||i.clearTmpPoints(),this.workShapes.delete(a),i=void 0):i==null||i.setWorkOptions(o)):i=this.createWorkShapeNode({toolsOpt:o,toolsType:r,workId:a}),i||(i=this.createWorkShapeNode({toolsOpt:o,toolsType:r,workId:a})),i?(this.workShapes.set(a,i),i):void 0}}async consumeFull(t){var i,l;const e=(i=t.workId)==null?void 0:i.toString(),o=(l=t.updateNodeOpt)==null?void 0:l.eraserGeometryDelta;if(e&&o){const n=this.vNodes.get(e),c=t.ops&&s.transformToNormalData(t.ops)||t.op||[];if(!n||!t.centerPos||!s.acceptIncomingEraserGeometryDelta(this.vNodes,e,o,n,{op:c,centerPos:t.centerPos})){s.cancelDoingForGeometryMismatch(this.vNodes,e);return}}const r=this.setFullWork(t),a=t.ops&&s.transformToNormalData(t.ops);if(r){e&&t.clearPreviewLocalWork&&this.thread.localLayer.getElementsByName(e).forEach(c=>{c.remove(),s.removeTexture(c,this.thread.localLayer.parent)}),r.toolsType===s.EToolsKey.BackgroundSVG?r.consumeService({isFullWork:!0,replaceId:e}):r.toolsType===s.EToolsKey.Image?await r.consumeServiceAsync({isFullWork:!0,replaceId:e,worker:this}):r.toolsType===s.EToolsKey.Text?await r.consumeServiceAsync({isFullWork:!0,replaceId:e,boxRect:this.thread.getSceneRect()}):r.consumeService({op:a,isFullWork:!0,replaceId:e}),t!=null&&t.updateNodeOpt&&r.updataOptService(t.updateNodeOpt);const n=[];t.workId&&this.workShapes.delete(t.workId.toString()),t.willSyncService&&n.push({opt:t.opt,toolsType:t.toolsType,type:s.EPostMessageType.FullWork,workId:t.workId,ops:t.ops,updateNodeOpt:t.updateNodeOpt,viewId:this.thread.viewId,needUndoTicker:t.needUndoTicker,requestId:t.requestId,emitEventType:t.emitEventType,scenePath:t.scenePath}),t.isLockSentEventCursor&&n.push({type:s.EPostMessageType.None,isLockSentEventCursor:!0,scenePath:t.scenePath}),t.needUndoTicker&&n.push({type:s.EPostMessageType.None,needUndoTicker:t.needUndoTicker,emitEventType:t.emitEventType,requestId:t.requestId,scenePath:t.scenePath}),n.length&&this.thread.post({sp:n})}}async colloctEffectSelectWork(t){const e=this.workShapes.get(s.Storage_Selector_key),{workId:o,msgType:r}=t;if(e&&o&&e.selectIds&&e.selectIds.includes(o.toString())){r===s.EPostMessageType.RemoveNode?e.selectIds=e.selectIds.filter(a=>a!==o.toString()):this.effectSelectNodeData.add(t),await this.runEffectSelectWork(!0);return}return t}async runEffectSelectWork(t){var e;for await(const o of this.effectSelectNodeData.values()){const r=this.setFullWork(o);if(r){const a=(e=o.workId)==null?void 0:e.toString();if(r.toolsType===s.EToolsKey.BackgroundSVG)r.consumeService({isFullWork:!0,replaceId:a});else if(r.toolsType===s.EToolsKey.Image)await r.consumeServiceAsync({isFullWork:!0,replaceId:a,worker:this});else if(r.toolsType===s.EToolsKey.Text)await r.consumeServiceAsync({isFullWork:!0,replaceId:a,boxRect:this.thread.getSceneRect()});else{const i=o.ops&&s.transformToNormalData(o.ops);r.consumeService({op:i,isFullWork:!0,replaceId:a}),o!=null&&o.updateNodeOpt&&r.updataOptService(o.updateNodeOpt)}o.workId&&this.workShapes.delete(o.workId.toString())}this.effectSelectNodeData.delete(o)}this.reRenderSelector(t)}hasSelector(){return this.workShapes.has(s.Storage_Selector_key)}getSelector(){return this.workShapes.get(s.Storage_Selector_key)}reRenderSelector(t=!1){var r;const e=this.workShapes.get(s.Storage_Selector_key);if(!e)return;if(e&&!((r=e.selectIds)!=null&&r.length))return this.blurSelector();const o=e.reRenderSelector();o&&this.thread.post({sp:[{type:s.EPostMessageType.Select,selectIds:e.selectIds,selectRect:o,willSyncService:t,viewId:this.thread.viewId,points:e.getChildrenPoints(),textOpt:e.textOpt,selectorColor:e.selectorColor,strokeColor:e.strokeColor,fillColor:e.fillColor,canTextEdit:e.canTextEdit,canRotate:e.canRotate,scaleType:e.scaleType,opt:e.getWorkOptions()||void 0,canLock:e.canLock,isLocked:e.isLocked,toolsTypes:e.toolsTypes,shapeOpt:e.shapeOpt,thickness:e.thickness,useStroke:e.useStroke,strokeType:e.strokeType}]})}async blurSelector(t){var r;const e=this.workShapes.get(s.Storage_Selector_key),o=e==null?void 0:e.blurSelector();if(this.clearWorkShapeNodeCache(s.Storage_Selector_key),((r=this.thread.fullLayer)==null?void 0:r.parent).children.forEach(a=>{a.name===s.Storage_Selector_key&&a.remove()}),o){const a=[];a.push({...o,isSync:t==null?void 0:t.isSync,scenePath:t==null?void 0:t.scenePath}),this.thread.post({sp:a})}}clearWorkShapeNodeCache(t){var e;(e=this.getWorkShape(t))==null||e.clearTmpPoints(),this.workShapes.delete(t)}async drawBitMapEraserFull(t,e,o,r){const{willUpdateNodes:a,willDeleteNodes:i}=e,l=t.getWorkId(),n=[...a?Array.from(a.keys()).map(d=>String(d)):[],...i?Array.from(i):[]],c=[];if(r&&c.push({type:s.EPostMessageType.None,needUndoTicker:r,undoScopeIds:n,undoScopePhase:"finalize"}),c.push({type:s.EPostMessageType.RemoveNode,removeIds:[l],eraseTxnId:l,viewId:this.thread.viewId,needUndoTicker:r}),o&&c.push({type:s.EPostMessageType.None,isLockSentEventCursor:o}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[d,p]of a)c.push({type:s.EPostMessageType.UpdateNode,dataType:s.EDataType.Local,opt:p.opt,workId:d,updateNodeOpt:{useAnimation:!1},eraseTxnId:l,needUndoTicker:r});i!=null&&i.size&&c.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],eraseTxnId:l,viewId:this.thread.viewId,needUndoTicker:r})}c.length&&this.thread.post({sp:c})}drawPencilEraserFull(t,e,o,r){const{willNewNodes:a,willDeleteNodes:i}=e,l=t.getWorkId(),n=[...a?Array.from(a.keys()).map(d=>String(d)):[],...i?Array.from(i):[]],c=[];if(r&&n.length&&c.push({type:s.EPostMessageType.None,needUndoTicker:r,undoScopeIds:n}),c.push({type:s.EPostMessageType.RemoveNode,removeIds:[l],viewId:this.thread.viewId,needUndoTicker:r}),o&&c.push({type:s.EPostMessageType.None,isLockSentEventCursor:o}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[d,p]of a)c.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:p.toolsType,ops:s.transformToSerializableData(p.op),opt:p.opt,workId:d,updateNodeOpt:{useAnimation:!1},needUndoTicker:r});i!=null&&i.size&&c.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],viewId:this.thread.viewId,needUndoTicker:r})}c.length&&this.thread.post({sp:c})}drawEraser(t,e,o,r){const a=[],i=t.removeIds||[];r&&i.length&&a.push({type:s.EPostMessageType.None,collectUndoTicker:r,undoScopeIds:i,undoScopePhase:"collect"}),t.removeIds&&a.push({...t,needUndoTicker:o,collectUndoTicker:r}),e&&a.push({type:s.EPostMessageType.None,isLockSentEventCursor:e}),o&&a.push({type:s.EPostMessageType.None,needUndoTicker:o,undoScopePhase:"finalize"}),this.thread.post({sp:a,consumeCount:this.consumeCount})}getWorkShape(t){return this.workShapes.get(t)}getWorkShapes(){return this.workShapes}async consumeDraw(t,e){const{op:o,workId:r,scenePath:a,postCount:i,smoothSync:l}=t;if(o!=null&&o.length&&r){const n=r.toString(),c=this.workShapes.get(n);if(!c)return;const d=c.toolsType;if(d===s.EToolsKey.LaserPen)return;if(this.combineDrawActiveId&&this.combineDrawActiveId!==n){const p=this.combineDrawActiveId;this.eraserBatchScheduler.cancel(),this.combineDrawActiveId=void 0,this.consumeDrawAll({workId:p,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},e)}switch(this.drawWorkActiveId&&this.drawWorkActiveId!==n&&(this.consumeDrawAll({workId:this.drawWorkActiveId,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},e),this.drawWorkActiveId=void 0),!this.drawWorkActiveId&&n!==s.Storage_Selector_key&&(this.drawWorkActiveId=n),D.isNumber(i)&&(this.consumeCount=i),d){case s.EToolsKey.Selector:{const p=c.consume({data:t,isFullWork:!0,isMainThread:!0});this.fullWorkerDrawCount++;const m=[];p.type===s.EPostMessageType.Select&&(p.selectIds&&e.runReverseSelectWork(p.selectIds),m.push({...p,scenePath:a})),await this.thread.fullLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:m});break}case s.EToolsKey.PencilEraser:case s.EToolsKey.BitMapEraser:{c.consume({data:t,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=n,this.eraserBatchScheduler.schedule(()=>{this.drawEraserCombine(n,t.needUndoTicker,t.collectUndoTicker)},s.getEraserBatchDelay(this.thread.master.maxCombineEraserTime));break}case s.EToolsKey.Eraser:{const p=c.consume({data:t,isFullWork:!0});await this.thread.fullLayer.parent.prepareRender,this.drawEraser(p,void 0,t.needUndoTicker,t.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 p=c.consume({data:t,isFullWork:!1,isMainThread:!0,smoothSync:l});p&&(this.fullWorkerDrawCount++,await this.thread.localLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:p.op&&[{...p,scenePath:a}]||void 0}))}break}}}drawEraserCombine(t,e,o){var a,i,l,n,c,d;const r=(a=this.workShapes.get(t))==null?void 0:a.combineConsume({workerEngine:this});if(r){const{willDeleteNodes:p,willNewNodes:m}=r,k=[...p?Array.from(p):[]],h={render:[],sp:[]};if(r!=null&&r.rect){const y=s.getSafetyRect(r.rect);(i=h.render)==null||i.push({rect:y,isClear:!0,clearCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId},{rect:y,drawCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId})}if(o&&k.length&&((l=this.getWorkShape(t))==null?void 0:l.toolsType)===s.EToolsKey.BitMapEraser&&((n=h.sp)==null||n.push({type:s.EPostMessageType.None,collectUndoTicker:o,undoScopeIds:k,undoScopePhase:"collect"})),p!=null&&p.size&&((c=h.sp)==null||c.push({type:s.EPostMessageType.RemoveNode,removeIds:[...p],viewId:this.thread.viewId,needUndoTicker:e,collectUndoTicker:o})),m!=null&&m.size)for(const[y,u]of m)(d=h.sp)==null||d.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:u.toolsType,ops:s.transformToSerializableData(u.op),opt:u.opt,workId:y,updateNodeOpt:{useAnimation:!1},needUndoTicker:e,collectUndoTicker:o});this.thread.post(h)}}consumeDrawAll(t,e){var l,n,c,d,p,m;this.eraserBatchScheduler.cancel();const{workId:o,scenePath:r,isLockSentEventCursor:a}=t,i=t.needUndoTicker;if(o){this.combineDrawActiveId===o.toString()&&(this.combineDrawActiveId=void 0);const k=o.toString();this.drawWorkActiveId===k&&(this.drawWorkActiveId=void 0);const h=this.workShapes.get(k);if(!h)return;const y=h.toolsType;if(y===s.EToolsKey.LaserPen)return;const u=this.workShapes.get(s.Cursor_Hover_Id),T=(l=u==null?void 0:u.selectIds)==null?void 0:l[0],g=h.consumeAll({data:t,workerEngine:this});switch(y){case s.EToolsKey.Selector:{g.selectIds&&T&&((n=g.selectIds)!=null&&n.includes(T))&&u.cursorBlur();const w=[];a&&w.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:r}),g.type===s.EPostMessageType.Select&&(g.selectIds&&e.runReverseSelectWork(g.selectIds),w.push({...g,scenePath:r})),w.length&&this.thread.post({sp:w}),(c=h.selectIds)!=null&&c.length?h.clearTmpPoints():this.clearWorkShapeNodeCache(k)}break;case s.EToolsKey.PencilEraser:this.drawPencilEraserFull(h,g,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(k);break;case s.EToolsKey.BitMapEraser:this.drawBitMapEraserFull(h,g,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(k);break;case s.EToolsKey.Eraser:this.drawEraser({...g,scenePath:r},a,i,t.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 w=[];if(a&&w.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:r}),g){const v=y===s.EToolsKey.Pencil,E=v&&g.type===s.EPostMessageType.RemoveNode,M=((d=g.workId)==null?void 0:d.toString())||((m=(p=g.removeIds)==null?void 0:p[0])==null?void 0:m.toString());E?s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent):w.push({...g,scenePath:r,needUndoTicker:t.needUndoTicker,undoScopeIds:v&&M?[M]:g.undoScopeIds,undoScopePhase:v?"finalize":g.undoScopePhase}),this.fullWorkerDrawCount=0,t.needUndoTicker&&w.push({type:s.EPostMessageType.None,needUndoTicker:t.needUndoTicker,scenePath:r,undoScopeIds:E?[]:void 0,undoScopePhase:E?"finalize":void 0}),(E?this.thread.localLayer:this.thread.fullLayer).parent.prepareRender.then(()=>{this.thread.post({fullWorkerDrawCount:this.fullWorkerDrawCount,sp:w})})}this.clearWorkShapeNodeCache(k);break}}}}getToolsOpt(){return this.tmpOpt}setToolsOpt(t){var e;this.tmpOpt=t,(e=t.toolsOpt)!=null&&e.syncUnitTime&&(this.syncUnitTime=t.toolsOpt.syncUnitTime)}setWorkOptions(t,e){let o=this.workShapes.get(t);if(!o&&this.tmpOpt){const{toolsType:r}=this.tmpOpt;this.tmpOpt.toolsOpt=e,o=this.createWorkShapeNode({workId:t,toolsType:r,toolsOpt:e}),o&&this.workShapes.set(t,o),this.setToolsOpt(this.tmpOpt)}e.syncUnitTime||(e.syncUnitTime=this.syncUnitTime),o==null||o.setWorkOptions(e)}createWorkShapeNode(t){return s.getShapeInstance({...t,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.localLayer},this.thread.serviceWork)}}class _{constructor(t){f(this,"vNodes");f(this,"thread");f(this,"workShapes",new Map);f(this,"selectorWorkShapes",new Map);f(this,"willRunEffectSelectorIds",new Set);f(this,"runEffectId");f(this,"animationId");f(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);this.vNodes=t.vNodes,this.thread=t.thread}async loadImageBitMap(t){return await this.thread.loadImageBitMap(t)}destroy(){this.clearAll()}clearAll(){this.thread.serviceLayer.children.length&&(this.thread.serviceLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.workShapes.clear(),this.selectorWorkShapes.clear(),this.willRunEffectSelectorIds.clear()}runEffect(){this.runEffectId||(this.runEffectId=setTimeout(this.effectRunSelector.bind(this),0))}effectRunSelector(){this.runEffectId=void 0,this.willRunEffectSelectorIds.forEach(t=>{var o,r;const e=this.selectorWorkShapes.get(t);e&&e.selectIds&&((o=e.node)==null||o.selectServiceNode(t,e,!0)),(r=e==null?void 0:e.selectIds)!=null&&r.length||this.selectorWorkShapes.delete(t)}),this.willRunEffectSelectorIds.clear()}runSelectWork(t){this.activeSelectorShape(t);const{workId:e}=t,o=e==null?void 0:e.toString();o&&this.willRunEffectSelectorIds.add(o),this.runEffect()}removeWork(t){const{workId:e}=t,o=e==null?void 0:e.toString();if(o){if(this.workShapes.get(o)){this.workShapes.delete(o),this.removeNode(o,t);return}this.removeNode(o,t)}}consumeFull(t){if(this.activeWorkShape(t),t.refreshTextRender){this.animationId&&(cancelAnimationFrame(this.animationId),this.animationId=void 0),this.animationDraw();return}this.runAnimation()}runReverseSelectWork(t){t.forEach(e=>{this.selectorWorkShapes.forEach((o,r)=>{var a;if((a=o.selectIds)!=null&&a.length){const i=o.selectIds.indexOf(e);i>-1&&(o.selectIds.splice(i,1),this.willRunEffectSelectorIds.add(r))}})}),this.willRunEffectSelectorIds.size&&this.runEffect()}consumeDraw(t){this.activeWorkShape(t),this.runAnimation()}computNextAnimationIndex(t,e){const o=Math.floor((t.animationWorkData||[]).slice(t.animationIndex).length*32/e/this.syncUnitTime)*e;return Math.min((t.animationIndex||0)+(o||e),(t.animationWorkData||[]).length)}async animationDraw(){var r,a,i,l,n,c,d,p,m,k,h,y,u,T,g,w,v,E,M,C,R;this.animationId=void 0;let t=!1;const e=new Map,o=[];for(const[I,S]of this.workShapes.entries())switch(S.toolsType){case s.EToolsKey.BackgroundSVG:{(r=S.node)==null||r.consumeService({isFullWork:!0,replaceId:I}),this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Image:{await((a=S.node)==null?void 0:a.consumeServiceAsync({isFullWork:!0,worker:this})),this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Text:{S.node&&(await((i=S.node)==null?void 0:i.consumeServiceAsync({isFullWork:!0,replaceId:I,boxRect:this.thread.getSceneRect()})),this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),S.refreshTextRender&&S.requestId&&o.push({type:s.EPostMessageType.RefreshTextRender,requestId:S.requestId,workId:I,viewId:this.thread.viewId}),(l=S.node)==null||l.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 P=!!S.ops;if((n=S.animationWorkData)!=null&&n.length){const N=S.oldRect;(c=S.node)==null||c.consumeService({op:S.animationWorkData,isFullWork:P}),P&&(this.selectorWorkShapes.forEach((L,O)=>{var A;(A=L.selectIds)!=null&&A.includes(I)&&(this.willRunEffectSelectorIds.add(O),this.runEffect())}),(d=S.node)==null||d.clearTmpPoints(),this.workShapes.delete(I)),S.isEnableCursor?e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:N?S.ops?s.EventWorkState.Done:s.EventWorkState.Doing:s.EventWorkState.Start,op:S.animationWorkData.slice(-3,-1)}):P&&!S.useAnimation&&((p=S.updateNodeOpt)!=null&&p.useAnimation)&&e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:s.EventWorkState.Done,op:S.animationWorkData.slice(-3,-1),uid:(m=S.updateNodeOpt)==null?void 0:m.uid}),S.animationWorkData.length=0}break}case s.EToolsKey.Pencil:{if(S.useAnimation){if(S.useAnimation){if(S.isDel){(w=S.node)==null||w.clearTmpPoints(),this.workShapes.delete(I);break}const P=3,N=this.computNextAnimationIndex(S,P),L=S.isDiff?0:Math.max(0,(S.animationIndex||0)-P),O=(S.animationWorkData||[]).slice(L,N),A=(E=(v=S.node)==null?void 0:v.getWorkId())==null?void 0:E.toString();if((S.animationIndex||0)<N||S.isDiff){if((M=S.node)==null||M.consumeService({op:O,isFullWork:!1}),S.animationIndex=N,S.isDiff&&(S.isDiff=!1),O.length&&S.isEnableCursor){const x=O.slice(-3,-1);e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:L===0?s.EventWorkState.Start:N===((C=S.animationWorkData)==null?void 0:C.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:x})}}else S.ops&&((R=S.node)==null||R.consumeService({op:S.animationWorkData||[],isFullWork:!0,replaceId:A}),S.isDel=!0,S.isEnableCursor&&e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:s.EventWorkState.Done,op:O.slice(-3,-1)}));t=!0;break}}else{const P=!!S.ops;if((k=S.node)==null||k.consumeService({op:S.animationWorkData||[],isFullWork:P,replaceId:I}),(h=S.node)==null||h.updataOptService(S.updateNodeOpt),P){if(!S.isEnableCursor&&((y=S.updateNodeOpt)!=null&&y.useAnimation)&&((u=S.animationWorkData)!=null&&u.length)){const N=S.animationWorkData.slice(-3,-1);e.set(I,{cursorTool:s.resolveCursorToolName(S.toolsType),workState:s.EventWorkState.Done,op:N,uid:(T=S.updateNodeOpt)==null?void 0:T.uid})}this.selectorWorkShapes.forEach((N,L)=>{var O;(O=N.selectIds)!=null&&O.includes(I)&&(this.willRunEffectSelectorIds.add(L),this.runEffect())}),(g=S.node)==null||g.clearTmpPoints(),this.workShapes.delete(I)}}break}}t&&this.runAnimation(),e.size&&e.forEach((I,S)=>{o.push({type:s.EPostMessageType.Cursor,uid:I.uid||S.split(s.Storage_Splitter)[0],op:I.op,workState:I.workState,cursorTool:I.cursorTool,viewId:this.thread.viewId})}),o.length&&this.thread.post({sp:o})}runAnimation(){this.animationId||(this.animationId=requestAnimationFrame(this.animationDraw.bind(this)))}hasDiffData(t,e,o){const r=t.length;if(e.length<r)return!0;switch(o){case s.EToolsKey.Pencil:{for(let a=0;a<r;a+=3)if(e[a]!==t[a]||e[a+1]!==t[a+1])return!0;break}case s.EToolsKey.LaserPen:{for(let a=0;a<r;a+=2)if(e[a]!==t[a]||e[a+1]!==t[a+1])return!0;break}}return!1}activeWorkShape(t){var T,g,w,v;const{workId:e,opt:o,toolsType:r,type:a,updateNodeOpt:i,ops:l,op:n,useAnimation:c,imageBitmap:d,isEnableCursor:p,requestId:m,refreshTextRender:k}=t;if(!e)return;const h=e.toString(),y=(T=this.vNodes.get(h))==null?void 0:T.rect;if(!((g=this.workShapes)!=null&&g.has(h))){let E={toolsType:r,animationWorkData:n||[],animationIndex:0,type:a,updateNodeOpt:i,ops:l,useAnimation:typeof c<"u"?c:typeof(i==null?void 0:i.useAnimation)<"u"?i==null?void 0:i.useAnimation:!0,oldRect:y,isDiff:!1,imageBitmap:d,isEnableCursor:p};r&&o&&(E=this.setNodeKey(h,E,r,o)),(w=this.workShapes)==null||w.set(h,E)}const u=(v=this.workShapes)==null?void 0:v.get(h);u.isEnableCursor=p,u.requestId=m,u.refreshTextRender=!!k,a&&(u.type=a),l&&(u.animationWorkData=s.transformToNormalData(l),u.ops=l),i&&(u.updateNodeOpt=i),n&&(u.isDiff=this.hasDiffData(u.animationWorkData||[],n,u.toolsType),u.toolsType,s.EToolsKey.Pencil,u.animationWorkData=n),u.node&&u.node.getWorkId()!==h&&u.node.setWorkId(h),y&&(u.oldRect=y),r&&o&&(o.syncUnitTime&&(this.syncUnitTime=o.syncUnitTime),u.toolsType!==r&&r&&o&&this.setNodeKey(h,u,r,o),u.node&&u.node.setWorkOptions(o)),d&&(u.imageBitmap=d)}removeNode(t,e){t.indexOf(s.Storage_Selector_key)>-1&&this.removeSelectWork(e),this.thread.fullLayer.getElementsByName(t).forEach(r=>{r.remove(),s.removeTexture(r,this.thread.fullLayer.parent)}),this.thread.serviceLayer.getElementsByName(t).forEach(r=>{r.remove(),s.removeTexture(r,this.thread.serviceLayer.parent)});const o=this.vNodes.get(t);o&&o.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:t,dataType:s.EDataType.Service,viewId:this.thread.viewId}]}),this.vNodes.delete(t)}removeSelectWork(t){const{workId:e}=t,o=e==null?void 0:e.toString();o&&(this.activeSelectorShape(t),this.willRunEffectSelectorIds.add(o)),this.runEffect()}activeSelectorShape(t){var c,d,p;const{workId:e,opt:o,toolsType:r,type:a,selectIds:i}=t;if(!e)return;const l=e.toString();if(!((c=this.selectorWorkShapes)!=null&&c.has(l))){let m={toolsType:r,selectIds:i,type:a,opt:o};r&&o&&(m=this.setNodeKey(l,m,r,o)),(d=this.selectorWorkShapes)==null||d.set(l,m)}const n=(p=this.selectorWorkShapes)==null?void 0:p.get(l);a&&(n.type=a),n.node&&n.node.getWorkId()!==l&&n.node.setWorkId(l),n.selectIds=i||[]}setNodeKey(t,e,o,r){return e.toolsType=o,e.node=s.getShapeInstance({toolsType:o,toolsOpt:r,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.serviceLayer,workId:t},this),e}}class b{constructor(){f(this,"localWork");f(this,"serviceWork");f(this,"threadEngine")}registerMainThread(t){return this.threadEngine=t,this.localWork=t.localWork,this.serviceWork=t.serviceWork,this}}class z extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.CopyNode)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.FullWork&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var r;const{workId:o}=e;o&&await((r=this.localWork)==null?void 0:r.consumeFull(e))}}class G extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetColorNode)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var p;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,textUpdateForWoker:n,needUndoTicker:c,requestId:d}=e;o===s.Storage_Selector_key&&r&&await((p=this.localWork)==null?void 0:p.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:d,textUpdateForWoker:n,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a}=e,{willSyncService:i,isSync:l,textUpdateForWoker:n,needUndoTicker:c,requestId:d,emitEventType:p}=o,m=r.sp||[];if(i)for(const[k,h]of a.entries())n&&h.toolsType===s.EToolsKey.Text?m.push({...h,workId:k,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:p,requestId:d,needUndoTicker:c}):m.push({...h,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:p,requestId:d,needUndoTicker:c});return c&&m.push({type:s.EPostMessageType.None,needUndoTicker:c}),{sp:m}}}class q extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.ZIndexNode)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,needUndoTicker:n,requestId:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:c,callback:this.updateSelectorCallback,needUndoTicker:n}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a}=e,{willSyncService:i,isSync:l,needUndoTicker:n,requestId:c,emitEventType:d}=o,p=r.sp||[];if(i&&p)for(const[m,k]of a.entries())k.toolsType===s.EToolsKey.BackgroundSVG&&p.push({...k,workId:m,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,updateNodeOpt:{useAnimation:!1},needUndoTicker:n,emitEventType:d,requestId:c}),p.push({...k,workId:m,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:d,requestId:c,needUndoTicker:n});return n&&p.push({type:s.EPostMessageType.None,needUndoTicker:n}),{sp:p}}}class V extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.TranslateNode);f(this,"updateSelectorCallback",e=>{const{param:o,postData:r,newServiceStore:a,workShapeNode:i,res:l,smoothSync:n}=e,{willSyncService:c,isSync:d,updateSelectorOpt:p,textUpdateForWoker:m,needUndoTicker:k}=o,h=p.workState,y=r.sp||[];if(h===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:h}],render:[]};const u=l==null?void 0:l.selectRect;if(c){const T=h===s.EventWorkState.Done?k:void 0;y.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:u,willSyncService:h===s.EventWorkState.Done?!0:n,isSync:!0,points:h===s.EventWorkState.Done&&i.getChildrenPoints()||void 0,textOpt:i.textOpt,needUndoTicker:T,emitEventType:this.emitEventType});const g={workState:h,useAnimation:p.useAnimation||!1};p.uid&&(g.uid=p.uid);for(const[w,v]of a.entries())v.toolsType===s.EToolsKey.BackgroundSVG&&y.push({...v,workId:w,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:h===s.EventWorkState.Done?!0:n,updateNodeOpt:g,needUndoTicker:T,emitEventType:this.emitEventType}),m&&v.toolsType===s.EToolsKey.Text?y.push({...v,workId:w,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:h===s.EventWorkState.Done?!0:n,updateNodeOpt:g,needUndoTicker:T,emitEventType:this.emitEventType}):(n||h===s.EventWorkState.Done)&&y.push({...v,workId:w,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...g,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta(v.opt)},isSync:d,needUndoTicker:T,emitEventType:this.emitEventType})}return k&&y.push({type:s.EPostMessageType.None,needUndoTicker:k}),y.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:h}),{sp:y}})}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var m,k;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,textUpdateForWoker:n,emitEventType:c,smoothSync:d,needUndoTicker:p}=e;o===s.Storage_Selector_key&&r&&(r.workState===s.EventWorkState.Done&&(r!=null&&r.translate)&&(r.translate[0]||r.translate[1])||r.workState!==s.EventWorkState.Done?await((m=this.localWork)==null?void 0:m.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,isSync:!0,textUpdateForWoker:n,emitEventType:c,callback:this.updateSelectorCallback,smoothSync:d,needUndoTicker:p})):r.workState===s.EventWorkState.Done&&((k=this.localWork)==null||k.vNodes.deleteLastTarget()))}}class H extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.ScaleNode);f(this,"updateSelectorCallback",e=>{const{param:o,postData:r,workShapeNode:a,res:i,newServiceStore:l,smoothSync:n}=e,{updateSelectorOpt:c,willSyncService:d,needUndoTicker:p}=o,m=c.workState,k=r.sp||[],h=i==null?void 0:i.selectRect,y=m===s.EventWorkState.Done?p:void 0;if(m===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:m}],render:[]};if(d){k.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:h,willSyncService:m===s.EventWorkState.Done?!0:n,isSync:!0,points:m===s.EventWorkState.Done&&a.getChildrenPoints()||void 0,textOpt:a.textOpt});const u={useAnimation:c.useAnimation||!1};c.uid&&(u.uid=c.uid);for(const[T,g]of l.entries())g.toolsType===s.EToolsKey.BackgroundSVG&&k.push({...g,workId:T,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:m===s.EventWorkState.Done?!0:n,updateNodeOpt:u,needUndoTicker:y,emitEventType:this.emitEventType}),g.toolsType===s.EToolsKey.Text?k.push({...g,workId:T,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:m===s.EventWorkState.Done?!0:n,updateNodeOpt:u,needUndoTicker:y,emitEventType:this.emitEventType}):(n||m===s.EventWorkState.Done)&&k.push({...g,workId:T,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...u,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta(g.opt)},isSync:!0,needUndoTicker:y,emitEventType:this.emitEventType})}return p&&k.push({type:s.EPostMessageType.None,needUndoTicker:p}),k.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:m}),{sp:k}})}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var c;const{workId:o,updateNodeOpt:r,willSyncService:a,willSerializeData:i,smoothSync:l,needUndoTicker:n}=e;o===s.Storage_Selector_key&&r&&await((c=this.localWork)==null?void 0:c.updateSelector({updateSelectorOpt:r,willSyncService:a,willSerializeData:i,isSync:!0,callback:this.updateSelectorCallback.bind(this),smoothSync:l,needUndoTicker:n}))}}class Q extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.RotateNode);f(this,"updateSelectorCallback",e=>{const{param:o,postData:r,workShapeNode:a,res:i,newServiceStore:l,smoothSync:n}=e,{updateSelectorOpt:c,willSyncService:d,willSerializeData:p,isSync:m,needUndoTicker:k}=o,h=c.workState,y=r.sp||[],u=i==null?void 0:i.selectRect,T=h===s.EventWorkState.Done?k:void 0;if(d){p&&h===s.EventWorkState.Done&&y.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:u,willSyncService:h===s.EventWorkState.Done?!0:n,isSync:m,points:a.getChildrenPoints()});const g={useAnimation:c.useAnimation||!1};if(c.uid&&(g.uid=c.uid),n||h===s.EventWorkState.Done)for(const[w,v]of l.entries())y.push({...v,workId:w,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...g,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta(v.opt)},isSync:m,needUndoTicker:T,emitEventType:this.emitEventType})}return k&&y.push({type:s.EPostMessageType.None,needUndoTicker:k}),y.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:h}),{sp:y}})}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var p;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:n,smoothSync:c,needUndoTicker:d}=e;o===s.Storage_Selector_key&&r&&await((p=this.localWork)==null?void 0:p.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:n,isSync:!0,callback:this.updateSelectorCallback,smoothSync:c,needUndoTicker:d}))}}class $ extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetFontStyle)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,textUpdateForWoker:n,requestId:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:c,textUpdateForWoker:n,callback:this.updateSelectorCallback}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a,workShapeNode:i,res:l}=e,{willSyncService:n,isSync:c,updateSelectorOpt:d,textUpdateForWoker:p,requestId:m,emitEventType:k}=o,h=r.sp||[],y=l==null?void 0:l.selectRect;if(n&&h){d.fontSize&&h.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:y,willSyncService:n,isSync:c,points:i.getChildrenPoints()});for(const[u,T]of a.entries())p&&T.toolsType===s.EToolsKey.Text?h.push({...T,workId:u,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:k,requestId:m}):h.push({...T,workId:u,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:c,emitEventType:k,requestId:m})}return{sp:h}}}class X extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetPoint);f(this,"updateSelectorCallback",e=>{const{param:o,postData:r,newServiceStore:a,workShapeNode:i,res:l}=e,{willSyncService:n,isSync:c,needUndoTicker:d}=o,p=r.sp||[],m=l==null?void 0:l.selectRect;if(n&&p){for(const[k,h]of a.entries())p.push({...h,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:c,needUndoTicker:d,emitEventType:this.emitEventType});p.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:m,willSyncService:n,isSync:c,points:i.getChildrenPoints()})}return d&&p.push({type:s.EPostMessageType.None,needUndoTicker:d}),p.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:o.updateSelectorOpt.workState}),{sp:p}})}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,textUpdateForWoker:n,needUndoTicker:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,emitEventType:this.emitEventType,willSerializeData:l,isSync:!0,textUpdateForWoker:n,callback:this.updateSelectorCallback,needUndoTicker:c}))}}class Y extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetLock)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,needUndoTicker:n,requestId:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:c,callback:this.updateSelectorCallback,needUndoTicker:n}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a,workShapeNode:i,res:l}=e,{willSyncService:n,isSync:c,updateSelectorOpt:d,needUndoTicker:p,requestId:m,emitEventType:k}=o,h=r.sp||[],y=l==null?void 0:l.selectRect;if(n&&h){for(const[u,T]of a.entries())h.push({...T,workId:u,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:c,emitEventType:k,requestId:m});h.push({isLocked:d.isLocked,selectorColor:i.selectorColor,scaleType:i.scaleType,canRotate:i.canRotate,type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:y,willSyncService:n,isSync:c})}return p&&h.push({type:s.EPostMessageType.None,needUndoTicker:p}),{sp:h}}}class Z extends b{constructor(){super(...arguments);f(this,"emitEventType",s.EmitEventType.SetShapeOpt)}async consume(e){const{msgType:o,dataType:r,emitEventType:a}=e;if(o===s.EPostMessageType.UpdateNode&&r===s.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(e),!0}async consumeForLocalWorker(e){var d;const{workId:o,updateNodeOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,needUndoTicker:n,requestId:c}=e;o===s.Storage_Selector_key&&r&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:r,willRefreshSelector:a,willSyncService:i,willSerializeData:l,emitEventType:this.emitEventType,requestId:c,callback:this.updateSelectorCallback,needUndoTicker:n}))}updateSelectorCallback(e){const{param:o,postData:r,newServiceStore:a}=e,{willSyncService:i,isSync:l,needUndoTicker:n,requestId:c,emitEventType:d}=o,p=r.sp||[];if(i&&p)for(const[m,k]of a.entries())p.push({...k,workId:m,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:d,requestId:c});return n&&p.push({type:s.EPostMessageType.None,needUndoTicker:n}),{sp:p}}}class j{constructor(t){f(this,"builders",new Map);this.builders=new Map(t.map(e=>[e,this.build(e)]))}build(t){switch(t){case s.EmitEventType.TranslateNode:return new V;case s.EmitEventType.ZIndexNode:return new q;case s.EmitEventType.CopyNode:return new z;case s.EmitEventType.SetColorNode:return new G;case s.EmitEventType.ScaleNode:return new H;case s.EmitEventType.RotateNode:return new Q;case s.EmitEventType.SetFontStyle:return new $;case s.EmitEventType.SetPoint:return new X;case s.EmitEventType.SetLock:return new Y;case s.EmitEventType.SetShapeOpt:return new Z}}registerForMainThread(t){return this.builders.forEach(e=>{e&&e.registerMainThread(t)}),this}async consumeForMainThread(t){for(const e of this.builders.values())if(await(e==null?void 0:e.consume(t)))return!0;return!1}}function J({subThreads:W,layers:t,scene:e,removeLayerTexture:o}){for(const r of W)r.destroy();for(const r of t){const a=r.parent;a&&o(r,a),r.remove()}e.remove()}class ee{constructor(t,e){f(this,"viewId");f(this,"fullLayer");f(this,"topLayer");f(this,"localLayer");f(this,"serviceLayer");f(this,"snapshotFullLayer");f(this,"vNodes");f(this,"master");f(this,"opt");f(this,"cameraOpt");f(this,"scene");f(this,"localWork");f(this,"serviceWork");f(this,"topWork");f(this,"taskUpdateCameraId");f(this,"taskUpdateCameraResolve");f(this,"debounceUpdateCameraId");f(this,"debounceUpdateCache",new Set);f(this,"mainThreadPostId");f(this,"destroyed",!1);f(this,"combinePostMsg",new Set);f(this,"methodBuilder");f(this,"cacheImages",new Map);f(this,"imageResolveMap",new Map);this.viewId=t,this.opt=e,this.scene=this.createScene({...e.canvasOpt,container:e.container}),this.master=e.master;const o=s.DefaultAppliancePluginExtrasOptions.bufferSize.full,r=s.DefaultAppliancePluginExtrasOptions.bufferSize.sub;this.fullLayer=this.createLayer("fullLayer",this.scene,{...e.layerOpt,bufferSize:this.viewId===s.Main_View_Id?o:r*2}),this.topLayer=this.createLayer("topLayer",this.scene,{...e.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,r),contextType:"2d"}),this.localLayer=this.createLayer("localLayer",this.scene,{...e.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,r),contextType:"2d"}),this.serviceLayer=this.createLayer("serviceLayer",this.scene,{...e.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,r),contextType:"2d"}),this.vNodes=new s.VNodeManager(t,this.scene);const a={thread:this,vNodes:this.vNodes};this.localWork=new K(a),this.serviceWork=new _(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(t){var e;return(e=this.cacheImages.get(t))==null?void 0:e.imageSource}getCachedImagesByWorkId(t){for(const[e,o]of this.cacheImages.entries())if(e===t&&o.imageSource)return o.imageSource}deleteCachedImagesByWorkId(t){for(const[e,o]of this.cacheImages.entries())o.workId===t&&("close"in o.imageSource&&o.imageSource.close(),this.cacheImages.delete(e))}clearCacheImages(){this.cacheImages.forEach(t=>{"close"in t.imageSource&&t.imageSource.close()}),this.cacheImages.clear()}clearImageResolveMap(){this.imageResolveMap.forEach(({timer:t})=>{t&&clearTimeout(t)}),this.imageResolveMap.clear()}post(t){this.combinePostMsg.add(t),this.runBatchPostData()}updateDpr(t){this.scene.displayRatio=t}async on(t){if(!await this.methodBuilder.consumeForMainThread(t)){const{msgType:e,toolsType:o,opt:r,dataType:a,workId:i,workState:l,imageSrc:n,imageBitmap:c,imageElement:d,workIds:p,isLockSentEventCursor:m}=t,k=i==null?void 0:i.toString();switch(e){case s.EPostMessageType.UpdateDpr:D.isNumber(t.dpr)&&this.updateDpr(t.dpr);break;case s.EPostMessageType.AuthClear:{const{clearUids:h,localUid:y}=t;this.vNodes.setCanClearUids(h),this.vNodes.setLocalUid(y);break}case s.EPostMessageType.Destroy:this.destroy();break;case s.EPostMessageType.Clear:this.clearAll();break;case s.EPostMessageType.UpdateCamera:await this.updateCamera(t);break;case s.EPostMessageType.UpdateTools:if(o&&r){const h={toolsType:o,toolsOpt:r};this.topWork.canUseTopLayer(o)?this.topWork.setToolsOpt(h):this.localWork.setToolsOpt(h)}break;case s.EPostMessageType.CreateWork:if(k&&r&&o){if(this.topWork.canUseTopLayer(o)){this.topWork.getToolsOpt()||this.topWork.setToolsOpt({toolsType:o,toolsOpt:r}),this.topWork.setWorkOptions(k,r);break}this.localWork.getToolsOpt()||this.localWork.setToolsOpt({toolsType:o,toolsOpt:r}),this.localWork.setWorkOptions(k,r)}break;case s.EPostMessageType.DrawWork:l===s.EventWorkState.Done&&a===s.EDataType.Local?(this.consumeDrawAll(a,t),o===s.EToolsKey.LaserPen&&m&&this.post({sp:[{type:s.EPostMessageType.None,isLockSentEventCursor:m}]})):await this.consumeDraw(a,t);break;case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:if(o&&this.topWork.canUseTopLayer(o)){this.consumeDrawAll(a,t);break}this.consumeFull(a,t);break;case s.EPostMessageType.RemoveNode:await this.removeNode(t);return;case s.EPostMessageType.Select:a===s.EDataType.Service&&(i===s.Storage_Selector_key?this.localWork.updateFullSelectWork(t):this.serviceWork.runSelectWork(t));break;case s.EPostMessageType.CursorBlur:this.localWork.cursorBlur();return;case s.EPostMessageType.CursorHover:this.localWork.cursorHover(t);break;case s.EPostMessageType.GetTextActive:a===s.EDataType.Local&&this.localWork.checkTextActive(t);break;case s.EPostMessageType.GetImageBitMap:if(n&&(c||d)&&i){const h=i.toString();this.deleteCachedImagesByWorkId(h),this.cacheImages.set(n,{imageSource:c||d,workId:h});const y=this.imageResolveMap.get(n);if(y){const{resolve:u,timer:T}=y;T&&clearTimeout(T),u&&u(n)}}break;case s.EPostMessageType.GetVNodeInfo:if(i&&p){const h=p.map(y=>this.vNodes.get(y));this.post({sp:[{type:s.EPostMessageType.GetVNodeInfo,dataType:s.EDataType.Local,workId:i,vInfo:h}]})}break}}}getIconSize(t,e,o){const r=t*o,a=e*o;return r<=50||a<=50?[50,50]:r<=100||a<=100?[100,100]:r<=200||a<=200?[200,200]:r<=400||a<=400?[400,400]:r<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(t){const{toolsType:e,opt:o,workId:r}=t;if(e===s.EToolsKey.Image&&o&&r){const a=r.toString(),{src:i,type:l,width:n,height:c,strokeColor:d}=o;if(!i||!l||!n||!c)return;let p=i;if(l===s.EImageType.Iconify){const[y,u]=this.getIconSize(n,c,this.opt.displayer.dpr);p=s.getIconImageSrc(i,y,u,d)}if(this.cacheImages.has(p)){const y=this.getCachedImages(p);if(y)return y}if(this.imageResolveMap.has(p)){const y=this.getCachedImagesByWorkId(a);if(y)return y}const h=await new Promise(y=>{const u=this.imageResolveMap.get(p)||{resolve:void 0,timer:void 0};u.timer&&clearTimeout(u.timer),u.resolve=y,u.timer=setTimeout(()=>{const T=this.imageResolveMap.get(p);T!=null&&T.resolve&&T.resolve(p)},5e3),this.imageResolveMap.set(p,u),this.opt.post({sp:[{imageSrc:p,workId:a,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!1,type:s.EPostMessageType.GetImageBitMap}]})});return this.imageResolveMap.delete(h),this.getCachedImages(p)}}async removeNode(t){const{dataType:e,workId:o,removeIds:r}=t,a=r||[];if(o&&a.push(o.toString()),a.length)for(const i of a){if(i===s.Storage_Selector_key){await this.localWork.removeSelector(t);continue}e===s.EDataType.Local?this.localWork.removeWork(t):e===s.EDataType.Service&&this.serviceWork.removeWork(t),await this.localWork.colloctEffectSelectWork(t)}}async consumeFull(t,e){const o=await this.localWork.colloctEffectSelectWork(e);o&&t===s.EDataType.Local&&await this.localWork.consumeFull(o),o&&t===s.EDataType.Service&&this.serviceWork.consumeFull(o)}setCameraOpt(t){this.cameraOpt=t;const{scale:e,centerX:o,centerY:r,width:a,height:i}=t;(a!==this.scene.width||i!==this.scene.height)&&this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[e,e]),this.fullLayer.setAttribute("translate",[-o,-r]),this.topLayer.setAttribute("scale",[e,e]),this.topLayer.setAttribute("translate",[-o,-r]),this.localLayer.setAttribute("scale",[e,e]),this.localLayer.setAttribute("translate",[-o,-r]),this.serviceLayer.setAttribute("scale",[e,e]),this.serviceLayer.setAttribute("translate",[-o,-r])}runBatchPostData(){this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}combinePostData(){var r;this.mainThreadPostId=void 0;const t=[];let e,o;for(const a of this.combinePostMsg.values()){if((r=a.sp)!=null&&r.length)for(const i of a.sp){let l=!1;for(const n of t)if(D.isEqual(i,n)){l=!0;break}l||t.push(i)}D.isNumber(a.fullWorkerDrawCount)&&(e=a.fullWorkerDrawCount),D.isNumber(a.consumeCount)&&(o=a.consumeCount)}return this.combinePostMsg.clear(),{sp:t,fullWorkerDrawCount:e,consumeCount:o}}combinePost(){var o,r;const t=this.combinePostData(),e=(o=t.sp)==null?void 0:o.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker||a.collectUndoTicker);e!=null&&e.length?t.sp=e.map(a=>a.viewId?a:{...a,viewId:this.viewId}):delete t.sp,t.consumeCount===void 0&&delete t.consumeCount,t.fullWorkerDrawCount===void 0&&delete t.fullWorkerDrawCount,(t!=null&&t.consumeCount||t!=null&&t.fullWorkerDrawCount||(r=t.sp)!=null&&r.length)&&this.opt.post(t)}clearAll(){this.fullLayer.children.length&&(this.fullLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.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}]})}consumeDrawAll(t,e){const{toolsType:o,workId:r}=e;if(r){const a=r.toString();if(o&&this.topWork.canUseTopLayer(o)){t===s.EDataType.Local&&(this.topWork.getLocalWorkShape(r.toString())||this.topWork.createLocalWork(e)),this.topWork.consumeDrawAll(e);return}t===s.EDataType.Local&&(this.localWork.getWorkShape(a)||this.localWork.createLocalWork(e),this.localWork.consumeDrawAll(e,this.serviceWork))}}async consumeDraw(t,e){const{opt:o,workId:r,toolsType:a}=e;if(r&&a&&o){const i=r.toString();if(this.topWork.canUseTopLayer(a)){t===s.EDataType.Local&&(this.topWork.getLocalWorkShape(i)||this.topWork.createLocalWork(e)),this.topWork.consumeDraw(e);return}t===s.EDataType.Local?(this.localWork.getWorkShape(i)||this.localWork.createLocalWork(e),await this.localWork.consumeDraw(e,this.serviceWork)):t===s.EDataType.Service&&this.serviceWork.consumeDraw(e);return}}async updateCamera(t){var l,n;const{cameraOpt:e,scenePath:o,cameraTaskId:r}=t;let a=!1;const i=this.cameraOpt;if(e&&!D.isEqual(i,e)){const c=!i||i.scale!==e.scale||i.centerX!==e.centerX||i.centerY!==e.centerY||i.width!==e.width||i.height!==e.height;if(this.taskUpdateCameraId&&(clearTimeout(this.taskUpdateCameraId),this.taskUpdateCameraId=void 0,(l=this.taskUpdateCameraResolve)==null||l.call(this,!1),this.taskUpdateCameraResolve=void 0),o){const h=[];for(const[y,u]of this.localWork.getWorkShapes().entries())switch(u.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:y!==s.Cursor_Hover_Id&&y!==s.Storage_Selector_key&&h.push(`${y}:${u.toolsType}`);break}if(h.length){await new Promise(u=>{this.taskUpdateCameraResolve=u,this.taskUpdateCameraId=setTimeout(()=>{this.taskUpdateCameraId=void 0,this.taskUpdateCameraResolve=void 0,u(!0)},s.Task_Time_Interval)})&&await this.updateCamera(t);return}}const d=new Map;for(const[h,y]of this.vNodes.getNodesByType(s.EToolsKey.Text).entries()){const u=y.rect;d.set(h,D.cloneDeep(u))}for(const[h,y]of this.vNodes.gethasEraserNodes().entries())d.set(h,D.cloneDeep(y.rect));const p=new Set(d.keys());let m=!1;if(this.localWork.hasSelector()){const h=(n=this.localWork.getSelector())==null?void 0:n.selectIds;if(h){m=!0;for(const y of h)p.add(y)}}let k=!1;if(this.serviceWork.selectorWorkShapes.size)for(const h of this.serviceWork.selectorWorkShapes.values()){const y=h.selectIds;if(y){k=!0;for(const u of y)p.add(u)}}if(this.setCameraOpt(e),this.vNodes.curNodeMap.size){this.vNodes.clearTarget(),this.vNodes.updateHighLevelNodesRect(p),this.debounceUpdateCameraId&&clearTimeout(this.debounceUpdateCameraId);for(const[h,y]of d.entries()){const u=this.vNodes.get(h);if(u){const T=y,g=u.rect,w=this.getSceneRect(),v=s.getRectMatrixrRelation(T,w),E=s.getRectMatrixrRelation(g,w);let M=!1;(v!==E||T.w!==g.w||T.h!==g.h||E===s.EMatrixrRelationType.intersect)&&(M=!0);const{toolsType:C,opt:R}=u,I=R.eraserlines&&R.eraserlines.length>0||!!R.eraserFaces;(M||c&&I)&&(C===s.EToolsKey.Text||I)&&this.debounceUpdateCache.add(h)}}if(m&&this.localWork.reRenderSelector(),k)for(const[h,y]of this.serviceWork.selectorWorkShapes.entries())this.serviceWork.runSelectWork({workId:h,selectIds:y.selectIds,msgType:s.EPostMessageType.Select,dataType:s.EDataType.Service,viewId:this.viewId});a=!0,this.debounceUpdateCameraId=setTimeout(async()=>{var y;this.debounceUpdateCameraId=void 0;const h=[];for(const u of this.debounceUpdateCache.values()){const T=(y=this.fullLayer)==null?void 0:y.getElementsByName(u)[0],g=this.vNodes.get(u);if(g){const{toolsType:w,opt:v}=g;if(T||w!==s.EToolsKey.Text){const E=this.localWork.setFullWork({toolsType:w,opt:v,workId:u});if(E){if(w===s.EToolsKey.Text)h.push(E.consumeServiceAsync({isFullWork:!0,replaceId:u,boxRect:this.getSceneRect()}));else if(v.eraserlines&&v.eraserlines.length>0||v.eraserFaces){const M=E.consumeService({op:g.op,isFullWork:!0,replaceId:u,workState:s.EventWorkState.Done});this.localWork.clearWorkShapeNodeCache(u),h.push(Promise.resolve(M))}}}}this.debounceUpdateCache.delete(u)}this.vNodes.updateLowLevelNodesRect(),this.vNodes.clearHighLevelIds(),await Promise.all(h),await Promise.all([this.fullLayer.parent.prepareRender,this.topLayer.parent.prepareRender,this.localLayer.parent.prepareRender,this.serviceLayer.parent.prepareRender]),D.isNumber(r)&&this.opt.post({viewId:this.viewId,cameraSettledTaskId:r})},s.Task_Time_Interval)}await Promise.all([this.fullLayer.parent.prepareRender,this.topLayer.parent.prepareRender,this.localLayer.parent.prepareRender,this.serviceLayer.parent.prepareRender]),!a&&D.isNumber(r)&&this.opt.post({viewId:this.viewId,cameraSettledTaskId:r})}}getSceneRect(){const{width:t,height:e}=this.scene;return{x:0,y:0,w:Math.floor(t),h:Math.floor(e)}}createScene(t){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...t,autoRender:!0,id:this.viewId,contextType:"2d"})}createLayer(t,e,o){const{width:r,height:a}=o,i=`canvas-${t}`,l=e.layer(i,{...o,offscreen:!1}),n=new s.Group({anchor:[.5,.5],pos:[r*.5,a*.5],size:[r,a],name:"viewport",id:t});return l.append(n),n}updateScene(t){this.scene.attr({...t});const{width:e,height:o}=t;this.scene.width=e,this.scene.height=o,this.updateLayer({width:e,height:o})}updateLayer(t){const{width:e,height:o}=t;this.fullLayer.parent.setAttribute("width",e),this.fullLayer.parent.setAttribute("height",o),this.fullLayer.setAttribute("size",[e,o]),this.fullLayer.setAttribute("pos",[e*.5,o*.5]),this.topLayer.parent.setAttribute("width",e),this.topLayer.parent.setAttribute("height",o),this.topLayer.setAttribute("size",[e,o]),this.topLayer.setAttribute("pos",[e*.5,o*.5]),this.localLayer.parent.setAttribute("width",e),this.localLayer.parent.setAttribute("height",o),this.localLayer.setAttribute("size",[e,o]),this.localLayer.setAttribute("pos",[e*.5,o*.5]),this.serviceLayer.parent.setAttribute("width",e),this.serviceLayer.parent.setAttribute("height",o),this.serviceLayer.setAttribute("size",[e,o]),this.serviceLayer.setAttribute("pos",[e*.5,o*.5])}destroy(){this.destroyed||(this.destroyed=!0,this.clearCacheImages(),this.clearImageResolveMap(),this.vNodes.clear(),J({subThreads:[this.localWork,this.serviceWork,this.topWork],layers:[this.fullLayer,this.topLayer,this.localLayer,this.serviceLayer],scene:this.scene,removeLayerTexture:(t,e)=>s.removeTexture(t,e)}))}}class te{constructor(t,e){f(this,"viewId");f(this,"fullLayer");f(this,"master");f(this,"opt");f(this,"scene");f(this,"mainThreadPostId");f(this,"combinePostMsg",new Set);f(this,"workShapes",new Map);f(this,"cacheImages",new Map);f(this,"imageResolveMap",new Map);this.viewId=t,this.opt=e,this.scene=this.createScene({...e.canvasOpt,container:e.container}),this.master=e.master,this.fullLayer=this.createLayer("fullLayer",this.scene,{...e.layerOpt,bufferSize:this.viewId===s.Main_View_Id?6e3:3e3,contextType:"2d"})}getCachedImages(t){var e;return(e=this.cacheImages.get(t))==null?void 0:e.imageSource}getCachedImagesByWorkId(t){for(const[e,o]of this.cacheImages.entries())if(e===t&&o.imageSource)return o.imageSource}deleteCachedImagesByWorkId(t){for(const[e,o]of this.cacheImages.entries())o.workId===t&&("close"in o.imageSource&&o.imageSource.close(),this.cacheImages.delete(e))}clearCacheImages(){this.cacheImages.forEach(t=>{"close"in t.imageSource&&t.imageSource.close()}),this.cacheImages.clear()}clearImageResolveMap(){this.imageResolveMap.forEach(({timer:t})=>{t&&clearTimeout(t)}),this.imageResolveMap.clear()}post(t){this.combinePostMsg.add(t),this.runBatchPostData()}async on(t){const{msgType:e,imageSrc:o,imageBitmap:r,imageElement:a,workId:i}=t;switch(e){case s.EPostMessageType.Snapshot:{await this.getSnapshot(t),this.destroy();return}case s.EPostMessageType.BoundingBox:{await this.getBoundingRect(t),this.destroy();return}case s.EPostMessageType.GetImageBitMap:{if(o&&(r||a)&&i){const l=i.toString();this.deleteCachedImagesByWorkId(l),this.cacheImages.set(o,{imageSource:r||a,workId:l});const n=this.imageResolveMap.get(o);if(n){const{resolve:c,timer:d}=n;d&&clearTimeout(d),c&&c(o)}}break}}}getIconSize(t,e,o){const r=t*o,a=e*o;return r<=50||a<=50?[50,50]:r<=100||a<=100?[100,100]:r<=200||a<=200?[200,200]:r<=400||a<=400?[400,400]:r<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(t){const{toolsType:e,opt:o,workId:r}=t;if(e===s.EToolsKey.Image&&o&&r){const a=r.toString(),{src:i,type:l,width:n,height:c,strokeColor:d}=o;if(!i||!l||!n||!c)return;let p=i;if(l===s.EImageType.Iconify){const[y,u]=this.getIconSize(n,c,this.opt.displayer.dpr);p=s.getIconImageSrc(i,y,u,d)}if(this.cacheImages.has(p)){const y=this.getCachedImages(p);if(y)return y}if(this.imageResolveMap.has(p)){const y=this.getCachedImagesByWorkId(a);if(y)return y}const h=await new Promise(y=>{const u=this.imageResolveMap.get(p)||{resolve:void 0,timer:void 0};u.timer&&clearTimeout(u.timer),u.resolve=y,u.timer=setTimeout(()=>{const T=this.imageResolveMap.get(p);T!=null&&T.resolve&&T.resolve(p)},5e3),this.imageResolveMap.set(p,u),this.opt.post({sp:[{imageSrc:p,workId:a,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!0,type:s.EPostMessageType.GetImageBitMap}]})});return this.imageResolveMap.delete(h),this.getCachedImages(p)}}createWorkShapeNode(t){return s.getShapeInstance({...t,fullLayer:this.fullLayer,drawLayer:void 0})}setFullWork(t){const{workId:e,opt:o,toolsType:r}=t;if(e&&o&&r){const a=e.toString();let i;return e&&this.workShapes.has(a)?(i=this.workShapes.get(a),i==null||i.setWorkOptions(o)):i=this.createWorkShapeNode({toolsOpt:o,toolsType:r,workId:a}),i?(this.workShapes.set(a,i),i):void 0}}async runFullWork(t){var r;const e=this.setFullWork(t),o=t.ops&&s.transformToNormalData(t.ops);if(e){let a,i;const l=(r=e.getWorkId())==null?void 0:r.toString();return e.toolsType===s.EToolsKey.BackgroundSVG?a=e.consumeService({isFullWork:!0,replaceId:l}):e.toolsType===s.EToolsKey.Image?a=await e.consumeServiceAsync({isFullWork:!0,worker:this}):e.toolsType===s.EToolsKey.Text?a=await e.consumeServiceAsync({isFullWork:!0,replaceId:l,isDrawLabel:!0}):(a=e.consumeService({op:o,isFullWork:!0,replaceId:l}),i=(t==null?void 0:t.updateNodeOpt)&&e.updataOptService(t.updateNodeOpt)),s.computRect(a,i)}}async getSnapshot(t){const{scenePath:e,scenes:o,cameraOpt:r,w:a,h:i}=t;if(e&&o&&r){this.setCameraOpt(r);for(const[n,c]of Object.entries(o))if(c!=null&&c.type)switch(c==null?void 0:c.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const{opt:d}=c,p={...c,opt:d,workId:n,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId};await this.runFullWork(p);break}}let l;a&&i&&(l={resizeWidth:a,resizeHeight:i});try{await this.getSnapshotRender({scenePath:e,options:l})}catch(n){const c=n&&n instanceof Error?n.message:n==null?void 0:n.toString();console.error("[SnapshotThreadImpl] getSnapshotRender error",c),this.post({sp:[{type:s.EPostMessageType.ReportError,reportString:`[SnapshotThreadImpl] getSnapshotRender error: ${c}`}]})}}}getSceneRect(){const{width:t,height:e}=this.scene;return{x:0,y:0,w:Math.floor(t),h:Math.floor(e)}}getRectImageBitmap(t,e){const o=Math.floor(t.x*this.opt.displayer.dpr),r=Math.floor(t.y*this.opt.displayer.dpr),a=t.w>0&&Math.floor(t.w*this.opt.displayer.dpr||1)||1,i=t.h>0&&Math.floor(t.h*this.opt.displayer.dpr||1)||1;return createImageBitmap(this.fullLayer.parent.canvas,o,r,a,i,e)}async getSnapshotRender(t){var a;const{scenePath:e,options:o}=t;((a=this.fullLayer)==null?void 0:a.parent).render();const r=await this.getRectImageBitmap(this.getSceneRect(),o);r&&(this.post({sp:[{type:s.EPostMessageType.Snapshot,scenePath:e,imageBitmap:r,viewId:this.viewId,index:0}]}),this.fullLayer&&s.removeAllChildren(this.fullLayer,this.fullLayer.parent))}async getBoundingRect(t){const{scenePath:e,scenes:o,cameraOpt:r}=t;if(e&&o&&r){this.setCameraOpt(r);let a;for(const[i,l]of Object.entries(o))if(l!=null&&l.type)switch(l==null?void 0:l.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const n=await this.runFullWork({...l,workId:i,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId});a=s.computRect(a,n);break}}a&&this.post({sp:[{type:s.EPostMessageType.BoundingBox,scenePath:e,rect:a}]})}}setCameraOpt(t){const{scale:e,centerX:o,centerY:r,width:a,height:i}=t;this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[e,e]),this.fullLayer.setAttribute("translate",[-o,-r])}runBatchPostData(){this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}combinePostData(){var e;this.mainThreadPostId=void 0;const t=[];for(const o of this.combinePostMsg.values())if((e=o.sp)!=null&&e.length)for(const r of o.sp){let a=!1;for(const i of t)if(s.isEqual(r,i)){a=!0;break}a||t.push(r)}return this.combinePostMsg.clear(),{sp:t}}combinePost(){var o,r;const t=this.combinePostData(),e=(o=t.sp)==null?void 0:o.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker);e!=null&&e.length?t.sp=e.map(a=>a.viewId?a:{...a,viewId:this.viewId}):delete t.sp,(r=t.sp)!=null&&r.length&&this.opt.post(t)}createScene(t){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...t,autoRender:!1,contextType:"2d"})}createLayer(t,e,o){const{width:r,height:a}=o,i=`canvas-${t}`,l=e.layer(i,o),n=new s.Group({anchor:[.5,.5],pos:[r*.5,a*.5],size:[r,a],name:"viewport",id:t});return l.append(n),n}updateScene(t){this.scene.attr({...t});const{width:e,height:o}=t;this.scene.width=e,this.scene.height=o,this.updateLayer({width:e,height:o})}updateLayer(t){const{width:e,height:o}=t;this.fullLayer.parent.setAttribute("width",e),this.fullLayer.parent.setAttribute("height",o),this.fullLayer.setAttribute("size",[e,o]),this.fullLayer.setAttribute("pos",[e*.5,o*.5])}destroy(){this.clearCacheImages(),this.clearImageResolveMap(),this.fullLayer.remove(),s.removeTexture(this.fullLayer,this.fullLayer.parent),this.scene.remove()}}class se{constructor(t){f(this,"mainThreadMap",new Map);f(this,"cameraRenderQueueByView",new Map);f(this,"viewGenerationById",new Map);f(this,"snapshotThread");f(this,"master");f(this,"post",t=>{const{fullWorkerDrawCount:e,sp:o,workerTasksqueueCount:r,cameraTaskId:a,cameraSettledTaskId:i,viewId:l,consumeCount:n}=t;l&&s.isNumber(a)&&this.master.ackCameraTask(l,a),l&&s.isNumber(i)&&this.master.ackCameraSettledTask(l,i),this.master.isBusy&&s.isNumber(r)&&this.master.setWorkerTasksqueueCount(r),s.isNumber(e)&&this.master.setMaxDrawCount(e),s.isNumber(n)&&this.master.setConsumeCount(n),o&&this.master.collectorSyncData(o)});this.master=t}enqueueViewTask(t,e){const r=(this.cameraRenderQueueByView.get(t)||Promise.resolve()).catch(()=>{}).then(e);return this.cameraRenderQueueByView.set(t,r),r}destroy(){var t;(t=this.snapshotThread)==null||t.destroy(),this.snapshotThread=void 0;for(const e of this.mainThreadMap.values())e.destroy();this.mainThreadMap.clear()}createMainThread(t,e){return new ee(t,e)}createSnapshotThread(t,e){return new te(t,e)}async consume(t){var e,o,r,a;for(const i of t.values()){const{msgType:l,viewId:n,tasksqueue:c,mainTasksqueueCount:d,cameraTaskId:p,layerOpt:m,offscreenCanvasOpt:k,cameraOpt:h,isSubWorker:y}=i;if(l===s.EPostMessageType.Console){console.log(this);continue}if(l===s.EPostMessageType.Init){const w=i.viewGeneration??(this.viewGenerationById.get(n)||0)+1;await this.enqueueViewTask(n,async()=>{var R;this.viewGenerationById.set(n,w);const v=(R=this.master.control.viewContainerManager.getView(n))==null?void 0:R.displayer,E=v==null?void 0:v.canvasContainerRef.current;if(!v||!E||!m||!k)return;const M=this.mainThreadMap.get(n);M==null||M.destroy();const C=this.createMainThread(n,{displayer:v,container:E,layerOpt:m,master:this.master,canvasOpt:k,post:this.post});this.mainThreadMap.set(n,C),C&&h&&C.setCameraOpt(h),this.post({sp:[{type:s.EPostMessageType.Init,viewId:n,viewGeneration:w}]})});continue}if((l===s.EPostMessageType.Snapshot||l===s.EPostMessageType.BoundingBox)&&n===((e=this.master.control.viewContainerManager.mainView)==null?void 0:e.id)){const w=(o=this.master.control.viewContainerManager.getView(n))==null?void 0:o.displayer,v=(r=w.snapshotContainerRef)==null?void 0:r.current;if(w&&v&&h){(a=this.snapshotThread)==null||a.destroy(),v.style.width=`${h.width}px`,v.style.height=`${h.height}px`;const E={...s.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:h.width,height:h.height},M={...s.ViewContainerManager.defaultScreenCanvasOpt,width:h.width,height:h.height};this.snapshotThread=this.createSnapshotThread(n,{displayer:w,container:v,layerOpt:E,master:this.master,canvasOpt:M,post:this.post}),this.snapshotThread.on(i).then(()=>{this.snapshotThread=void 0,v.innerHTML="",v.style.width="",v.style.height=""});continue}}if(l===s.EPostMessageType.GetImageBitMap&&y&&this.snapshotThread){this.snapshotThread.on(i);continue}if(l===s.EPostMessageType.TasksQueue&&(c!=null&&c.size)){const w=c.get(n),v=this.mainThreadMap.get(n),E=this.viewGenerationById.get(n);w&&v&&await this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==E||this.mainThreadMap.get(n)!==v||await v.on(w)}),d&&s.isNumber(p)&&this.post({workerTasksqueueCount:d,cameraTaskId:p,viewId:n});continue}if(n===s.Storage_ViewId_ALL){const w=[...this.mainThreadMap.entries()];for(const[v,E]of w){const M=this.enqueueViewTask(v,async()=>{this.mainThreadMap.get(v)===E&&(l===s.EPostMessageType.Destroy?(E.destroy(),this.mainThreadMap.delete(v),this.viewGenerationById.set(v,(this.viewGenerationById.get(v)||0)+1)):await E.on(i))});await M,this.cameraRenderQueueByView.get(v)===M&&this.cameraRenderQueueByView.delete(v)}continue}const u=this.mainThreadMap.get(n);if(l===s.EPostMessageType.Destroy&&!u){await this.enqueueViewTask(n,async()=>{this.viewGenerationById.set(n,i.viewGeneration??(this.viewGenerationById.get(n)||0)+1)});continue}if(!u)continue;const T=this.viewGenerationById.get(n),g=this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==T||this.mainThreadMap.get(n)!==u||await u.on(i)});l===s.EPostMessageType.Destroy&&(await g,this.mainThreadMap.get(n)===u&&this.mainThreadMap.delete(n),this.cameraRenderQueueByView.get(n)===g&&this.cameraRenderQueueByView.delete(n),this.viewGenerationById.set(n,i.viewGeneration??(T||0)+1))}}}exports.MainThreadManagerImpl=se;
|