@netless/appliance-plugin 1.1.42 → 1.1.43-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.
Files changed (112) hide show
  1. package/READMA.zh-CN.md +23 -1
  2. package/README.md +24 -1
  3. package/dist/appliance-plugin.js +1 -1
  4. package/dist/appliance-plugin.mjs +33 -30
  5. package/dist/{bridge-C8yT2GqS.js → bridge-D68E09T9.js} +1 -1
  6. package/dist/{bridge-DLGOhX8U.mjs → bridge-DcVN05tP.mjs} +1 -1
  7. package/dist/bridge.js +1 -1
  8. package/dist/bridge.mjs +1 -1
  9. package/dist/collector/collector.d.ts +50 -2
  10. package/dist/collector/types.d.ts +6 -0
  11. package/dist/component/svg/manager.d.ts +1 -0
  12. package/dist/component/svg/snapshot.d.ts +4 -1
  13. package/dist/component/textEditor/manager.d.ts +3 -0
  14. package/dist/core/backGroundThread/index.d.ts +6 -1
  15. package/dist/core/cameraTask.d.ts +45 -0
  16. package/dist/core/const.d.ts +4 -0
  17. package/dist/core/enum.d.ts +5 -1
  18. package/dist/core/error.d.ts +1 -0
  19. package/dist/core/fontFace.d.ts +5 -3
  20. package/dist/core/mainEngine.d.ts +230 -31
  21. package/dist/core/mainThread/base.d.ts +23 -2
  22. package/dist/core/mainThread/canvas2DReadback.d.ts +27 -0
  23. package/dist/core/mainThread/index.d.ts +12 -1
  24. package/dist/core/mainThread/snapshotThread.d.ts +11 -2
  25. package/dist/core/mainThread/subLocalThread.d.ts +12 -6
  26. package/dist/core/mainThread/subServiceThread.d.ts +5 -3
  27. package/dist/core/msgEvent/base.d.ts +4 -1
  28. package/dist/core/msgEvent/baseForWorker.d.ts +1 -1
  29. package/dist/core/msgEvent/copyNode/forWorker.d.ts +1 -1
  30. package/dist/core/msgEvent/forWorker.d.ts +1 -1
  31. package/dist/core/msgEvent/index.d.ts +5 -3
  32. package/dist/core/msgEvent/rotateNode/forMain.d.ts +1 -0
  33. package/dist/core/msgEvent/rotateNode/forWorker.d.ts +1 -1
  34. package/dist/core/msgEvent/scaleNode/forMain.d.ts +1 -0
  35. package/dist/core/msgEvent/scaleNode/forWorker.d.ts +1 -1
  36. package/dist/core/msgEvent/setColor/forMain.d.ts +1 -0
  37. package/dist/core/msgEvent/setColor/forWorker.d.ts +1 -1
  38. package/dist/core/msgEvent/setFont/forWorker.d.ts +1 -1
  39. package/dist/core/msgEvent/setLock/forWorker.d.ts +1 -1
  40. package/dist/core/msgEvent/setPoint/forWorker.d.ts +1 -1
  41. package/dist/core/msgEvent/setShape/forWorker.d.ts +1 -1
  42. package/dist/core/msgEvent/setZIndex/forWorker.d.ts +1 -1
  43. package/dist/core/msgEvent/translateNode/forMain.d.ts +1 -0
  44. package/dist/core/msgEvent/translateNode/forWorker.d.ts +1 -1
  45. package/dist/core/renderRuntimeFallback.d.ts +2 -0
  46. package/dist/core/rendererBusinessTask.d.ts +30 -0
  47. package/dist/core/serviceRenderScheduler.d.ts +33 -0
  48. package/dist/core/tools/base.d.ts +1 -1
  49. package/dist/core/tools/bitmapEraserFastPath.d.ts +8 -0
  50. package/dist/core/tools/eraserFaces.d.ts +24 -9
  51. package/dist/core/tools/image.d.ts +1 -0
  52. package/dist/core/tools/pencilEraserBitMap.d.ts +62 -14
  53. package/dist/core/tools/text.d.ts +2 -1
  54. package/dist/core/types.d.ts +64 -1
  55. package/dist/core/utils/indexDB.d.ts +3 -3
  56. package/dist/core/vNodeManager.d.ts +7 -0
  57. package/dist/core/worker/base.d.ts +52 -7
  58. package/dist/core/worker/fullWorkerLocal.d.ts +8 -2
  59. package/dist/core/worker/fullWorkerService.d.ts +7 -3
  60. package/dist/core/worker/renderCapabilityProbe.d.ts +54 -0
  61. package/dist/core/worker/simpleWorker.d.ts +2 -2
  62. package/dist/core/worker/snapshotWork.d.ts +1 -0
  63. package/dist/core/worker/workerManager.d.ts +17 -4
  64. package/dist/displayer/floatBar/selectorGesture.d.ts +2 -0
  65. package/dist/fullWorker.js +138 -139
  66. package/dist/index-BNHPCii1.mjs +4089 -0
  67. package/dist/index-B_vZ9d3x.mjs +55912 -0
  68. package/dist/index-C2AHqjj8.js +570 -0
  69. package/dist/index-CV8YaU3F.mjs +931 -0
  70. package/dist/index-CWDWQZBs.mjs +4088 -0
  71. package/dist/index-DChI1--R.js +1 -0
  72. package/dist/index-DFo0Gmfx.js +570 -0
  73. package/dist/index-DiLPVPwQ.js +1 -0
  74. package/dist/index-GBYM7kT5.js +1 -0
  75. package/dist/index-GZUDLXJC.js +1 -0
  76. package/dist/{index-D8p2ph99.mjs → index-K_0NX6pD.mjs} +401 -263
  77. package/dist/index-NG5kKK1W.mjs +55920 -0
  78. package/dist/plugin/applianceMultiPlugin.d.ts +18 -3
  79. package/dist/plugin/applianceSinglePlugin.d.ts +18 -4
  80. package/dist/plugin/baseApplianceManager.d.ts +138 -12
  81. package/dist/plugin/baseViewContainerManager.d.ts +40 -3
  82. package/dist/plugin/bitmapEraserOptions.d.ts +9 -0
  83. package/dist/plugin/const.d.ts +4 -0
  84. package/dist/plugin/displayerView.d.ts +7 -7
  85. package/dist/plugin/initLogAggregator.d.ts +45 -0
  86. package/dist/plugin/multi/applianceMultiManager.d.ts +1 -0
  87. package/dist/plugin/multi/containerManager.d.ts +19 -1
  88. package/dist/plugin/pluginInstanceOwner.d.ts +1 -0
  89. package/dist/plugin/renderImageBitmapRetirement.d.ts +100 -0
  90. package/dist/plugin/renderRuntimeCache.d.ts +18 -0
  91. package/dist/plugin/renderSurface.d.ts +15 -0
  92. package/dist/plugin/renderingCompatibility.d.ts +21 -5
  93. package/dist/plugin/roomLifecycle.d.ts +12 -0
  94. package/dist/plugin/selectorApi.d.ts +8 -0
  95. package/dist/plugin/single/applianceSingleManager.d.ts +4 -0
  96. package/dist/plugin/types.d.ts +11 -14
  97. package/dist/plugin/utils.d.ts +8 -0
  98. package/dist/subWorker.js +136 -137
  99. package/dist/undo/index.d.ts +12 -3
  100. package/dist/undo/timing.d.ts +9 -4
  101. package/package.json +23 -8
  102. package/dist/index--wqREfHK.js +0 -570
  103. package/dist/index-B-tFucpi.mjs +0 -48995
  104. package/dist/index-BOx854fU.mjs +0 -3266
  105. package/dist/index-BpiBM5wZ.js +0 -1
  106. package/dist/index-ByjVgxJm.js +0 -1
  107. package/dist/index-CSVCH-SQ.mjs +0 -789
  108. package/dist/index-CfIWmlMn.js +0 -570
  109. package/dist/index-D6gXcNbF.js +0 -1
  110. package/dist/index-HAZlgByL.mjs +0 -48987
  111. package/dist/index-OZXjSPr1.js +0 -1
  112. package/dist/index-z7deO9Md.mjs +0 -3267
@@ -0,0 +1 @@
1
+ "use strict";var B=Object.defineProperty;var L=(n,e,t)=>e in n?B(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var d=(n,e,t)=>L(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("./index-C2AHqjj8.js"),v=require("lodash");require("clipper-lib");require("lz-string");require("lineclip");require("xss");require("rbush");require("react-dom");require("react");class C{constructor(){d(this,"threadEngine")}registerBackgroundThread(e){return this.threadEngine=e,this}}class W extends C{constructor(){super(...arguments);d(this,"emitEventType",c.EmitEventType.CopyNode)}async consume(t){const{msgType:s,dataType:r,emitEventType:a}=t;if(s===c.EPostMessageType.FullWork&&r===c.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var r;const{workId:s}=t;s&&await((r=this.threadEngine)==null?void 0:r.consumeFull(t))}}class F{constructor(e){d(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case c.EmitEventType.CopyNode:return new W}}registerForBackgroundThread(e){return this.builders.forEach(t=>{t&&t.registerBackgroundThread(e)}),this}async consumeForBackgroundThread(e){for(const t of this.builders.values())if(await(t==null?void 0:t.consume(e)))return!0;return!1}}async function R(n){const e=n.querySelectorAll("img"),t=Array.from(e).map(a=>{if(!a.crossOrigin&&a.src&&!a.src.startsWith("data:")&&(a.crossOrigin="anonymous",a.complete)){const i=a.src;a.src="",a.src=i}return a.complete&&a.crossOrigin?Promise.resolve():new Promise(i=>{a.onload=()=>{i(void 0)},a.onerror=()=>{i(void 0)}})});return n.querySelectorAll("svg").forEach(a=>{a.querySelectorAll("image").forEach(o=>{o.href&&!o.href.baseVal.startsWith("data:")&&(o.getAttribute("crossorigin")||o.setAttribute("crossorigin","anonymous"),t.push(new Promise(l=>{const h=new Image;h.crossOrigin="anonymous",h.onload=()=>{l(void 0)},h.onerror=()=>{l(void 0)},h.src=o.href.baseVal})))})}),await Promise.all(t)}async function A(n){const s=Date.now();let r=!1;for(;Date.now()-s<5e3;){const a=n.querySelectorAll("path");if(a.length>0&&(r=Array.from(a).some(i=>{const o=i.getAttribute("d")||"";return o!=="M0,0C0,0,0,0,0,0"&&o.length>10}),r))break;await new Promise(i=>setTimeout(i,50))}}async function x(n){const e=n.querySelectorAll("svg");if(!e.length)return;const t=[];for(let s=0;s<e.length;s++){const r=e[s];t.push(A(r))}await Promise.all(t)}async function O(n){if(n.querySelectorAll("svg[data-type='mermaid']").length>0){const s=Date.now();let r=!1;for(;Date.now()-s<5e3&&!r;){const a=n.querySelectorAll("foreignObject");if(a.length>0){let i=!0;for(const o of Array.from(a)){const l=parseFloat(o.getAttribute("width")||"0"),h=parseFloat(o.getAttribute("height")||"0");if(o.querySelector(".mermaid-container")&&(l<50||h<50)){i=!1;break}}if(i){r=!0;break}}else r=!0;await new Promise(i=>setTimeout(i,50))}}}async function $(n,e={}){const{width:t=n.offsetWidth,height:s=n.offsetHeight}=e,r=n.offsetWidth||t,a=n.offsetHeight||s;try{const{loadSvgToImageLib:i,getSvgToImageLib:o}=await Promise.resolve().then(()=>require("./svgToImageLoader-B3gIDAQo.js"));let l=o();if(!l)try{l=await i()}catch(u){return console.error("[loadSvgToImageLib] error: ",u),null}const h=n.style.width,y=n.style.height,w=n.style.display;n.style.width||(n.style.width=`${r}px`),n.style.height||(n.style.height=`${a}px`),(!n.style.display||n.style.display==="none")&&(n.style.display="block");try{await new Promise(p=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{p()})})});const u=await l.toPng(n,{width:r,height:a,quality:1});return n.style.width=h,n.style.height=y,n.style.display=w,new Promise(p=>{const g=new Image;g.crossOrigin="anonymous",g.onload=()=>{p(g)},g.onerror=()=>{p(null)},g.src=u})}catch(u){return n.style.width=h,n.style.height=y,n.style.display=w,console.error("[divToImageElement] error: ",u),null}}catch(i){return console.error("[divToImageElement] error: ",i),null}}class V{constructor(e){d(this,"toolsType",c.EToolsKey.BackgroundSVG);d(this,"vNodes");d(this,"workOptions");d(this,"workId");d(this,"markmapInstance",null);d(this,"isDestroyed",!1);d(this,"element");d(this,"manager");d(this,"scenePath");d(this,"trackBackgroundImageLoad");d(this,"reloadSourceUrl");const{vNodes:t,workId:s,toolsOpt:r,manager:a,scenePath:i,trackBackgroundImageLoad:o=!0}=e;this.workId=s,this.vNodes=t,this.workOptions=r,this.manager=a,this.scenePath=i,this.trackBackgroundImageLoad=o,this.element=this.createElement(),this.manager.fullLayer.appendChild(this.element),this.vNodes.setInfo(this.workId,{workShape:this})}get fullLayer(){return this.manager.fullLayer}get collector(){return this.manager.master.control.collector}async init(){await this.render()}createElement(){const{type:e}=this.workOptions;let t;return e===c.ESVGType.markmap?(t=document.createElementNS("http://www.w3.org/2000/svg","svg"),t.classList.add("svg")):(t=document.createElement("img"),t.classList.add("img")),t.id=this.workId,t.setAttribute("data-id",this.workId),t}async render(e){this.isDestroyed||!this.element||!this.element.parentNode||(this.updateElementPosition(e),await this.updateSvg(e))}isSameSize(e){const{width:t,height:s}=e,{width:r,height:a}=this.workOptions,i=t*this.manager.camera.scale,o=s*this.manager.camera.scale,l=r*this.manager.camera.scale,h=a*this.manager.camera.scale;return i===l&&o===h}isSamePosition(e){const{centerX:t,centerY:s}=e,{centerX:r,centerY:a}=this.workOptions,i=this.manager.getPagePoint(r,a),o=this.manager.getPagePoint(t,s);return v.isEqual(o,i)}isSameZIndex(e){const{zIndex:t}=e,{zIndex:s}=this.workOptions;return t===s}isSameState(e){const{state:t}=e,{state:s}=this.workOptions;return v.isEqual(t,s)}isSameData(e){const{data:t}=e,{data:s}=this.workOptions;return v.isEqual(t,s)}updateElementPosition(e){if(this.isDestroyed||!this.element||!this.fullLayer)return;const{centerX:t,centerY:s,width:r,height:a,zIndex:i}=this.workOptions,o=this.manager.getPagePoint(t,s),l=r*this.manager.camera.scale,h=a*this.manager.camera.scale;(!e||e&&!this.isSameSize(e))&&(this.element.setAttribute("width",`${l}`),this.element.setAttribute("height",`${h}`),this.element.style.width=`${l}px`,this.element.style.height=`${h}px`),(!e||e&&!this.isSamePosition(e))&&(this.element.style.left=`${o.x}px`,this.element.style.top=`${o.y}px`),(!e||e&&!this.isSameZIndex(e))&&(this.element.style.zIndex=(i||0).toString())}async updateSvg(e){const{type:t,state:s}=this.workOptions;if(t===c.ESVGType.markmap){const r=c.getMarkmapRuntimeOrThrow(),{data:a}=this.workOptions;if(this.markmapInstance||(this.markmapInstance=r.createMarkmap(this.element,this.manager.markmapOptions),this.markmapInstance.handleClick=async(l,h)=>{var u,p,g;(u=this.markmapInstance)==null||u.toggleNode(h);const y=this.serializeData((p=this.markmapInstance)==null?void 0:p.state.data);this.setWorkOptions({...this.workOptions,state:y},!1),r.checkNodeHasMermaid(h)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),this.scenePath&&this.collector&&((g=this.collector)==null||g.dispatch({type:c.EPostMessageType.UpdateNode,workId:this.workId,opt:this.workOptions,isSync:!0,viewId:this.manager.viewId,scenePath:this.scenePath}))}),e&&this.isSameState(e)&&this.isSameSize(e)&&this.isSameData(e))return;const i=r.transform(this.workId,a);let{root:o}=i;a&&r.hasMermaidCodeBlock(a)&&(o=r.injectMermaidHtml(o,a,this.workId));try{s&&Array.isArray(s)&&this.transformState(s,o),await this.markmapInstance.setData(o),!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance&&(window.markmapInstance=this.markmapInstance,a&&r.hasMermaidCodeBlock(a)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),await this.fit(!e||e&&!this.isSameData(e)))}catch(l){console.error("[updateSvg] error: ",l)}}else{const{src:r,crossOrigin:a}=this.workOptions,i=this.reloadSourceUrl??r;if(this.element.crossOrigin=v.isString(a)?a:"anonymous",!this.trackBackgroundImageLoad){this.element.src=i,await new Promise((o,l)=>{this.element.onload=()=>o(),this.element.onerror=()=>l()});return}await this.manager.master.control.backgroundImageLoadCoordinator.load({viewId:this.manager.viewId,scenePath:this.scenePath,resourceId:this.workId,src:i,image:this.element,isActive:()=>!this.isDestroyed&&this.manager.master.control.viewContainerManager.getCurScenePath(this.manager.viewId)===this.scenePath,onReloadUrl:o=>{this.reloadSourceUrl=o}})}}async fit(e=!0){var t;if(!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance){const s=c.getMarkmapRuntimeOrThrow();e&&this.element&&await s.waitForImagesInForeignObjects(this.element),await((t=this.markmapInstance)==null?void 0:t.fit()),this.element&&s.isSafari()&&s.hasMermaidSvg(this.element)&&(await O(this.element),await s.transformMermaidSvgToMarkmapSvg(this.element))}}serializeData(e){var r;const t=[e],s=[];for(;t.length>0;){const a=t.pop();a&&(a!=null&&a.children&&t.push(...a.children),s.push(((r=a==null?void 0:a.payload)==null?void 0:r.fold)||0))}return s}transformState(e,t){const s=[t];for(;s.length>0;){const r=s.pop();r&&(r!=null&&r.children&&s.push(...r.children),r.payload?r.payload.fold=e.shift():e.shift())}}async updateCamera(){this.updateElementPosition(),await this.fit(!1)}async setWorkOptions(e,t=!0){if(!v.isEqual(this.workOptions,e)){const s=v.clone(this.workOptions),r="src"in this.workOptions?this.workOptions.src:void 0,a="src"in e?e.src:void 0;r!==a&&(this.reloadSourceUrl=void 0),this.workOptions=e,t&&await this.render(s)}}destroy(){this.isDestroyed=!0,this.reloadSourceUrl=void 0,this.trackBackgroundImageLoad&&this.manager.master.control.backgroundImageLoadCoordinator.cancelResource(this.manager.viewId,this.scenePath,this.workId),this.element.remove()}getRectFromLayer(){const e=this.element.getBoundingClientRect();return{x:e.x,y:e.y,w:e.width,h:e.height}}}function P(n){const{toolsType:e,...t}=n;switch(e){case c.EToolsKey.BackgroundSVG:return new V(t);default:return}}class b{constructor(e){d(this,"viewId");d(this,"fullLayer");d(this,"curNodeMap");this.viewId=e,this.curNodeMap=new c.ObserverMap}init(e){this.fullLayer=e}get(e){return this.curNodeMap.get(e)}setInfo(e,t){const s=this.curNodeMap.get(e)||{name:e,workShape:t.workShape};t.workShape&&(s.workShape=t.workShape),this.curNodeMap.set(e,s)}getNodeRectFormShape(e){const t=this.curNodeMap.get(e);if(t&&t.workShape)return t.workShape.getRectFromLayer()}delete(e){const t=this.curNodeMap.get(e);t&&t.workShape.destroy(),this.curNodeMap.delete(e)}clear(){for(const e of this.curNodeMap.values())e.workShape.destroy();this.curNodeMap.clear()}}class U{constructor(e,t){d(this,"opt");d(this,"viewId");d(this,"fullLayer");d(this,"vNodes");d(this,"master");d(this,"cameraOpt");d(this,"methodBuilder");d(this,"destroyed",!1);d(this,"updateCamera",v.throttle(async e=>{if(this.destroyed)return;const{cameraOpt:t}=e;t&&!v.isEqual(this.cameraOpt,t)&&await this.setCameraOpt(t)},100));this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.methodBuilder=new F([c.EmitEventType.CopyNode]).registerForBackgroundThread(this),this.vNodes=new b(e),this.vNodes.init(this.fullLayer)}get camera(){return this.cameraOpt||{scale:1,centerX:0,centerY:0,width:0,height:0}}get view(){var e;return(e=this.master.control.viewContainerManager.getView(this.viewId))==null?void 0:e.viewData}get markmapOptions(){return this.master.control.pluginOptions.extras.markmap.options}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:i,height:o}=this.camera;return{x:(e-r)*s+i/2,y:(t-a)*s+o/2}}async setCameraOpt(e){if(!this.destroyed){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){if(this.destroyed)return;const{workShape:s}=t;s&&await s.updateCamera()}}}clearAll(){this.vNodes.clear()}canUseFullLayer(e){return e===c.EToolsKey.BackgroundSVG}async consumeFull(e){if(this.destroyed)return;const{toolsType:t,opt:s,workId:r,scenePath:a}=e;if(r!=null&&r.toString()&&t&&this.canUseFullLayer(t))switch(t){case c.EToolsKey.BackgroundSVG:await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a});break}}async setFullWork(e){const{workId:t,opt:s,toolsType:r,scenePath:a}=e;if(t&&s&&r&&a){const i=t.toString();let o;const l=this.vNodes.get(i);return!l||!l.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:c.EToolsKey.BackgroundSVG,workId:i,scenePath:a}),o&&await o.init()):(o=l.workShape,await o.setWorkOptions(s)),o}}createWorkShapeNode(e){return P({...e,vNodes:this.vNodes,manager:this})}removeWork(e){const{workId:t}=e,s=t==null?void 0:t.toString();s&&this.removeNode(s)}removeNode(e){this.vNodes.delete(e)}async on(e){if(!this.destroyed&&!await this.methodBuilder.consumeForBackgroundThread(e)){if(this.destroyed)return;const{msgType:t,toolsType:s}=e;switch(t){case c.EPostMessageType.Destroy:{this.destroy();break}case c.EPostMessageType.Clear:{this.clearAll();break}case c.EPostMessageType.UpdateCamera:{this.updateCamera(e);break}case c.EPostMessageType.UpdateTools:{this.toggleFullLayer(s===c.EToolsKey.Clicker);break}case c.EPostMessageType.BackgroundSVGUpdate:case c.EPostMessageType.UpdateNode:case c.EPostMessageType.FullWork:{s&&this.canUseFullLayer(s)&&await this.consumeFull(e);break}case c.EPostMessageType.BackgroundSVGDelete:{this.removeWork(e);break}}}}toggleFullLayer(e){this.destroyed||this.fullLayer.classList.toggle("appliance-plugin-background-svg-active",e)}destroy(){this.destroyed||(this.destroyed=!0,this.updateCamera.cancel(),this.vNodes.clear())}}class D{constructor(e,t){d(this,"viewId");d(this,"fullLayer");d(this,"master");d(this,"vNodes");d(this,"cameraOpt");d(this,"opt");d(this,"workShapes",new Map);d(this,"destroyed",!1);d(this,"activeRequest");this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.vNodes=new b(e),this.vNodes.init(this.fullLayer)}get camera(){return this.cameraOpt||{scale:1,centerX:0,centerY:0,width:0,height:0}}get view(){var e;return(e=this.master.control.viewContainerManager.getView(this.viewId))==null?void 0:e.viewData}get markmapOptions(){return this.master.control.pluginOptions.extras.markmap.options}reportRequestFailure(e,t,s,r,a){const i=r instanceof Error?r.message:String(r);try{this.opt.post({sp:[{type:c.EPostMessageType.ReportError,viewId:this.viewId,scenePath:s,requestId:t,reportBusiness:e,reportStage:a,reportError:i,reportString:`[BackgroundSnapshotThread] ${e} failed; stage=${a}; requestId=${t||"unknown"}; error=${i}`}]})}catch(o){console.error(`[BackgroundSnapshotThread] ${e} failure report failed`,o)}}createOffscreenCanvas(e){const{width:t,height:s}=e.canvasOpt,r=new OffscreenCanvas(e.canvasOpt.width,e.canvasOpt.height);r.width=t,r.height=s}async setCameraOpt(e){if(!this.destroyed){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){if(this.destroyed)return;const{workShape:s}=t;s&&await s.updateCamera()}}}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:i,height:o}=this.camera;return{x:(e-r)*s+i/2,y:(t-a)*s+o/2}}async getSnapshot(e){var i;if(this.destroyed)return;const{scenePath:t,scenes:s,cameraOpt:r,requestId:a}=e;this.activeRequest={business:"snapshot",scenePath:t,requestId:a};try{if(!(t&&s&&r))throw new Error("snapshot input is incomplete");await this.setCameraOpt(r);for(const[l,h]of Object.entries(s)){if(this.destroyed)return;if(h!=null&&h.type&&(h==null?void 0:h.toolsType)===c.EToolsKey.BackgroundSVG)switch(h==null?void 0:h.type){case c.EPostMessageType.UpdateNode:case c.EPostMessageType.FullWork:{const{opt:y}=h,w={...h,opt:y,workId:l,msgType:c.EPostMessageType.FullWork,dataType:c.EDataType.Service,viewId:this.viewId,scenePath:t,requestId:a};await this.runFullWork(w);break}default:break}}if(await O(this.fullLayer),this.destroyed||(await R(this.fullLayer),this.destroyed)||(await x(this.fullLayer),this.destroyed))return;const o=await $(this.fullLayer);if(!this.destroyed&&o)this.opt.post({sp:[{type:c.EPostMessageType.Snapshot,scenePath:t,imageElement:o,viewId:this.viewId,index:1,requestId:a}]});else if(!this.destroyed)throw new Error("snapshot image element is empty")}catch(o){this.destroyed||this.reportRequestFailure("snapshot",a,t,o,"render")}finally{((i=this.activeRequest)==null?void 0:i.requestId)===a&&(this.activeRequest=void 0)}}createWorkShapeNode(e){return P({...e,vNodes:this.vNodes,manager:this,trackBackgroundImageLoad:!1})}async setFullWork(e){const{workId:t,opt:s,toolsType:r,scenePath:a}=e;if(t&&s&&r&&a){const i=t.toString();let o;const l=this.vNodes.get(i);return!l||!l.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:c.EToolsKey.BackgroundSVG,workId:i,scenePath:a}),o&&await o.init()):(o=l.workShape,await o.setWorkOptions(s)),o}}async runFullWork(e){if(this.destroyed)return;const{toolsType:t,opt:s,workId:r,scenePath:a}=e;await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a})}destroy(e){this.destroyed||(e&&this.activeRequest&&this.reportRequestFailure("snapshot",this.activeRequest.requestId,this.activeRequest.scenePath,new Error(`snapshot request ${e}`),e),this.activeRequest=void 0,this.destroyed=!0,this.fullLayer.innerHTML="",this.fullLayer.style.width="",this.fullLayer.style.height="")}}class H{constructor(e){d(this,"backgroundThreadMap",new Map);d(this,"snapshotThreadsByRequest",new Map);d(this,"destroyed",!1);d(this,"master");d(this,"post",e=>{if(this.destroyed)return;const{sp:t}=e;t&&this.master.collectorSyncData(t)});this.master=e,this.backgroundThreadMap=new Map}createBackgroundThread(e,t){return new U(e,t)}createSnapshotThread(e,t){return new D(e,t)}getSnapshotRequestKey(e){return e.requestId||`${e.viewId}\0${e.scenePath||""}\0${e.msgType}`}disposeSnapshotThread(e,t,s){const r=this.snapshotThreadsByRequest.get(e);if(!(!r||r.thread!==t)){this.snapshotThreadsByRequest.delete(e);try{t.destroy(s)}finally{r.surface.remove()}}}async consume(e){var t,s,r,a,i;if(!this.destroyed)for(const o of e.values()){if(this.destroyed)return;const{msgType:l,viewId:h,layerOpt:y,offscreenCanvasOpt:w,cameraOpt:u,tasksqueue:p}=o;if(l===c.EPostMessageType.Console){console.log(this);continue}if(l===c.EPostMessageType.Init){const m=(t=this.master.control.viewContainerManager.getView(h))==null?void 0:t.displayer,T=(s=m==null?void 0:m.backgroundContainerRef)==null?void 0:s.current;if(m&&T&&y&&w){const f=this.backgroundThreadMap.get(h);f==null||f.destroy();const k=this.createBackgroundThread(h,{displayer:m,container:T,layerOpt:y,master:this.master,canvasOpt:w,post:this.post});this.backgroundThreadMap.set(h,k),k&&u&&await k.setCameraOpt(u)}continue}if(l===c.EPostMessageType.Snapshot){const m=(r=this.master.control.viewContainerManager.getView(h))==null?void 0:r.displayer,f=(i=((a=this.master.control.viewContainerManager.mainView)==null?void 0:a.displayer).backgroundSnapshotContainerRef)==null?void 0:i.current;if(m&&f&&u){const k=this.getSnapshotRequestKey(o),E=this.snapshotThreadsByRequest.get(k);E&&this.disposeSnapshotThread(k,E.thread,"replaced");const S=document.createElement("div");S.style.width=`${u.width}px`,S.style.height=`${u.height}px`,f.append(S);const q={...c.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:u.width,height:u.height},N={...c.ViewContainerManager.defaultScreenCanvasOpt,width:u.width,height:u.height},I=this.createSnapshotThread(h,{displayer:m,container:S,layerOpt:q,master:this.master,canvasOpt:N,post:this.post});this.snapshotThreadsByRequest.set(k,{thread:I,surface:S}),I.getSnapshot(o).catch(M=>{this.master.Logger.error(`[Appliance]: background snapshot render failed; viewId=${h}; error=${M instanceof Error?M.message:String(M)}`)}).finally(()=>{this.disposeSnapshotThread(k,I)});continue}this.post({sp:[{type:c.EPostMessageType.ReportError,viewId:h,scenePath:o.scenePath,requestId:o.requestId,reportBusiness:"snapshot",reportStage:"surface-unavailable",reportError:"background snapshot surface is unavailable",reportString:`[BackgroundThreadManager] snapshot surface is unavailable; viewId=${h}; requestId=${o.requestId||"unknown"}`}]})}if(l===c.EPostMessageType.TasksQueue&&(p!=null&&p.size)){for(const[m,T]of this.backgroundThreadMap.entries()){const f=p.get(m);f&&await T.on(f)}continue}if(h===c.Storage_ViewId_ALL){for(const m of this.backgroundThreadMap.values())await m.on(o);l===c.EPostMessageType.Destroy&&this.backgroundThreadMap.clear();continue}const g=this.backgroundThreadMap.get(h);g&&(await g.on(o),l===c.EPostMessageType.Destroy&&this.backgroundThreadMap.get(h)===g&&this.backgroundThreadMap.delete(h))}}async consumeTargetOne(e,t){if(this.destroyed)return;const s=this.backgroundThreadMap.get(e);s&&await s.on(t)}discardView(e){for(const[s,r]of[...this.snapshotThreadsByRequest.entries()])r.thread.viewId===e&&this.disposeSnapshotThread(s,r.thread,"view-destroyed");const t=this.backgroundThreadMap.get(e);try{t==null||t.destroy()}catch(s){this.master.Logger.error(`[Appliance]: BackgroundThread View discard failed; viewId=${e}; error=${s instanceof Error?s.message:String(s)}`)}this.backgroundThreadMap.delete(e)}destroy(){if(this.destroyed)return;const e=[];for(const[t,s]of[...this.snapshotThreadsByRequest.entries()])try{this.disposeSnapshotThread(t,s.thread,"manager-destroyed")}catch(r){e.push(`snapshot-thread: ${r instanceof Error?r.message:String(r)}`)}this.snapshotThreadsByRequest.clear(),this.destroyed=!0;for(const t of this.backgroundThreadMap.values())try{t.destroy()}catch(s){e.push(`background-thread: ${s instanceof Error?s.message:String(s)}`)}this.backgroundThreadMap.clear(),e.length&&this.master.Logger.error(`[Appliance]: BackgroundThread destroy completed with cleanup errors: ${e.join("; ")}`)}}exports.BackgroundThreadManagerImpl=H;
@@ -0,0 +1 @@
1
+ "use strict";var F=Object.defineProperty;var U=(b,e,t)=>e in b?F(b,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):b[e]=t;var u=(b,e,t)=>U(b,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("./index-DFo0Gmfx.js"),D=require("lodash");require("clipper-lib");require("lineclip");require("rbush");require("xss");require("white-web-sdk");require("react-dom");require("react");class x{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"serviceWorkShapes",new Map);u(this,"localWorkShapes",new Map);u(this,"tmpOpt");u(this,"animationId");u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);this.vNodes=e.vNodes,this.thread=e.thread}createLocalWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r){const a=t.toString();!this.getToolsOpt()&&o&&this.setToolsOpt({toolsType:o,toolsOpt:r}),this.setWorkOptions(a,r)}}getLocalWorkShape(e){return this.localWorkShapes.get(e)}createLocalWorkShape(e,t){if(e&&this.tmpOpt){const r={toolsType:this.tmpOpt.toolsType,toolsOpt:t||this.tmpOpt.toolsOpt},o=this.createWorkShapeNode({...r,workId:e});return o&&this.localWorkShapes.set(e,{node:o,toolsType:o.toolsType,workState:s.EventWorkState.Start}),o}}canUseTopLayer(e){return e===s.EToolsKey.LaserPen}destroy(){this.clearAll()}clearAll(){this.thread.topLayer.children.length&&(this.thread.topLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.serviceWorkShapes.clear(),this.localWorkShapes.clear()}consumeDraw(e){const{workId:t,dataType:r}=e;if(r===s.EDataType.Service)this.activeServiceWorkShape(e);else{const o=t==null?void 0:t.toString(),a=o&&this.localWorkShapes.get(o);if(!a)return;const i=a.node.consume({data:e,isFullWork:!1,isSubWorker:!0});i.rect&&(a.result=i,a.workState=s.EventWorkState.Doing,o&&this.localWorkShapes.set(o,a))}this.runAnimation()}setToolsOpt(e){var t;this.tmpOpt=e,(t=e.toolsOpt)!=null&&t.syncUnitTime&&(this.syncUnitTime=e.toolsOpt.syncUnitTime)}getToolsOpt(){return this.tmpOpt}createWorkShapeNode(e){const{toolsType:t}=e;if(t===s.EToolsKey.LaserPen)return s.getShapeInstance({...e,vNodes:this.vNodes,fullLayer:this.thread.topLayer,drawLayer:this.thread.topLayer})}setNodeKey(e,t,r,o){return t.toolsType=r,t.node=this.createWorkShapeNode({workId:e,toolsType:r,toolsOpt:o}),t}activeServiceWorkShape(e){var p,y;const{workId:t,opt:r,toolsType:o,type:a,updateNodeOpt:i,ops:n,op:c}=e;if(!t)return;const l=t.toString(),d=(p=this.vNodes.get(l))==null?void 0:p.rect;if(!((y=this.serviceWorkShapes)!=null&&y.has(l))){let f={toolsType:o,animationWorkData:c||[],animationIndex:0,type:a,updateNodeOpt:i,ops:n,oldRect:d};o&&r&&(f=this.setNodeKey(l,f,o,r)),this.serviceWorkShapes.set(l,f)}const h=this.serviceWorkShapes.get(l);a&&(h.type=a),n&&(h.animationWorkData=s.transformToNormalData(n),h.ops=n),i&&(h.updateNodeOpt=i),c&&(h.animationWorkData=c),h.node&&h.node.getWorkId()!==l&&h.node.setWorkId(l),d&&(h.oldRect=d),o&&r&&(h.toolsType!==o&&o&&r&&this.setNodeKey(l,h,o,r),h.node&&h.node.setWorkOptions(r))}computNextAnimationIndex(e,t){var a;const r=((a=e.node)==null?void 0:a.syncUnitTime)||this.syncUnitTime,o=Math.floor((e.animationWorkData||[]).slice(e.animationIndex).length*32/t/r)*t;return Math.min((e.animationIndex||0)+(o||t),(e.animationWorkData||[]).length)}animationDraw(){var o,a,i,n;this.animationId=void 0;let e=!1;const t=new Map,r=[];for(const[c,l]of this.serviceWorkShapes.entries())switch(l.toolsType){case s.EToolsKey.LaserPen:{const h=this.computNextAnimationIndex(l,8),p=Math.max(0,l.animationIndex||0),y=(l.animationWorkData||[]).slice(p,h);if((l.animationIndex||0)<h&&((o=l.node)==null||o.consumeService({op:y,isFullWork:!1}),l.animationIndex=h,y.length&&t.set(c,{workState:p===0?s.EventWorkState.Start:h===((a=l.animationWorkData)==null?void 0:a.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:y.slice(-2)})),l.isDel){(i=l.node)==null||i.clearTmpPoints(),this.serviceWorkShapes.delete(c);break}l.ops&&l.animationIndex===((n=l.animationWorkData)==null?void 0:n.length)&&!l.isDel&&(this.thread.topLayer.getElementsByName(c.toString())[0]||(l.isDel=!0,this.serviceWorkShapes.set(c,l))),e=!0;break}}for(const[c,l]of this.localWorkShapes.entries()){const{result:d,toolsType:h,isDel:p,workState:y}=l;switch(h){case s.EToolsKey.LaserPen:{if(p){l.node.clearTmpPoints(),this.localWorkShapes.delete(c),r.push({removeIds:[c.toString()],type:s.EPostMessageType.RemoveNode});break}d&&((d.op||d.ops)&&r.push(d),l.result=void 0),!this.thread.topLayer.getElementsByName(c.toString())[0]&&y===s.EventWorkState.Done&&(l.isDel=!0,this.localWorkShapes.set(c,l)),e=!0;break}}}e&&this.runAnimation(),t.size&&t.forEach((c,l)=>{r.push({type:s.EPostMessageType.Cursor,uid:l.split(s.Storage_Splitter)[0],op:c.op,workState:c.workState,viewId:this.thread.viewId})}),r.length&&this.thread.post({sp:r})}runAnimation(){this.animationId||(this.animationId=requestAnimationFrame(this.animationDraw.bind(this)))}setWorkOptions(e,t){var o;let r=(o=this.localWorkShapes.get(e))==null?void 0:o.node;if(!r&&this.tmpOpt){const{toolsType:a}=this.tmpOpt;this.tmpOpt.toolsOpt=t,r=this.createWorkShapeNode({workId:e,toolsType:a,toolsOpt:t}),r&&this.localWorkShapes.set(e,{node:r,toolsType:a,workState:s.EventWorkState.Start}),this.setToolsOpt(this.tmpOpt)}t!=null&&t.syncUnitTime||(t.syncUnitTime=this.syncUnitTime),r&&r.setWorkOptions(t)}consumeDrawAll(e){const{workId:t,dataType:r}=e;if(r===s.EDataType.Service)this.activeServiceWorkShape(e);else{const o=t==null?void 0:t.toString(),a=o&&this.localWorkShapes.get(o);if(!a)return;const i=a.node.consumeAll({data:e});a.result=i,a.workState=s.EventWorkState.Done,o&&this.localWorkShapes.set(o,a)}this.runAnimation()}}class G{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"workShapes",new Map);u(this,"effectSelectNodeData",new Set);u(this,"batchEraserRemoveNodes",new Set);u(this,"batchEraserWorks",new Set);u(this,"tmpOpt");u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);u(this,"fullWorkerDrawCount",0);u(this,"drawWorkActiveId");u(this,"consumeCount",0);u(this,"combineDrawActiveId");u(this,"eraserBatchScheduler",new s.MaxDelayBatchScheduler);u(this,"disposeVNodeRevisionObserver");u(this,"bitmapEraserRenderQueue",Promise.resolve());u(this,"bitmapEraserRevalidationQueued",!1);this.vNodes=e.vNodes,this.thread=e.thread,this.disposeVNodeRevisionObserver=this.vNodes.observeRevision(()=>{this.scheduleActiveBitmapEraserRevalidation()})}scheduleActiveBitmapEraserRevalidation(){const e=this.combineDrawActiveId;if(!e)return;const t=this.getWorkShape(e);(t==null?void 0:t.toolsType)!==s.EToolsKey.BitMapEraser||!t.shouldRevalidateVNodeRevision()||this.bitmapEraserRevalidationQueued||(this.bitmapEraserRevalidationQueued=!0,this.enqueueBitmapEraserRender(e).catch(r=>{this.thread.master.Logger.error(`[Appliance]: Bitmap Eraser revision revalidation failed; viewId=${this.thread.viewId}; workId=${e}; error=${r instanceof Error?r.message:String(r)}`)}).finally(()=>{this.bitmapEraserRevalidationQueued=!1}))}async loadImageBitMap(e){return await this.thread.loadImageBitMap(e)}createLocalWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r){const a=t.toString();!this.getToolsOpt()&&o&&this.setToolsOpt({toolsType:o,toolsOpt:r}),this.setWorkOptions(a,r)}}async updateSelector(e){var y;const t=this.workShapes.get(s.Storage_Selector_key);if(!((y=t==null?void 0:t.selectIds)!=null&&y.length))return;const{callback:r,...o}=e,{updateSelectorOpt:a,willSerializeData:i,smoothSync:n}=o,c=await(t==null?void 0:t.updateSelector({updateSelectorOpt:a,selectIds:D.cloneDeep(t.selectIds),vNodes:this.vNodes,willSerializeData:i,worker:this})),l=new Map;let d;c!=null&&c.selectIds&&(d=D.xor(t.selectIds,c.selectIds),c.selectIds.forEach(f=>{const S=this.vNodes.get(f);if(S){const{toolsType:k,op:E,opt:w}=S;l.set(f,{opt:w,toolsType:k,ops:(E==null?void 0:E.length)&&s.transformToSerializableData(E)||void 0})}}),t.selectIds=c.selectIds);const h=[],p=r&&r({res:c,workShapeNode:t,param:o,postData:{sp:h},newServiceStore:l,smoothSync:n})||{sp:h};d&&p.sp.push({type:s.EPostMessageType.RemoveNode,removeIds:d,viewId:this.thread.viewId}),p.sp.length&&this.thread.post(p)}destroy(){var e;(e=this.disposeVNodeRevisionObserver)==null||e.call(this),this.disposeVNodeRevisionObserver=void 0,this.eraserBatchScheduler.cancel(),this.clearAll()}clearAll(){if(this.eraserBatchScheduler.cancel(),this.thread.localLayer.children.length&&(this.thread.topLayer.parent.children.forEach(t=>{t.name!=="viewport"&&t.remove()}),s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent)),this.workShapes.get(s.Storage_Selector_key)){const t=[];t.push({type:s.EPostMessageType.Select,dataType:s.EDataType.Local,selectIds:[],willSyncService:!1}),this.thread.post({sp:t})}this.workShapes.forEach(t=>t.clearTmpPoints()),this.workShapes.clear(),this.effectSelectNodeData.clear(),this.batchEraserWorks.clear(),this.batchEraserRemoveNodes.clear()}async checkTextActive(e){const{op:t,viewId:r,dataType:o}=e;if(t!=null&&t.length){let a;for(const i of this.vNodes.curNodeMap.values()){const{rect:n,name:c,toolsType:l,opt:d}=i,h=t[0]*this.thread.fullLayer.worldScaling[0]+this.thread.fullLayer.worldPosition[0],p=t[1]*this.thread.fullLayer.worldScaling[1]+this.thread.fullLayer.worldPosition[1];if(l===s.EToolsKey.Text&&s.isIntersectForPoint([h,p],n)&&d.workState===s.EventWorkState.Done){a=c;break}}a&&(await this.blurSelector({viewId:r,msgType:s.EPostMessageType.Select,dataType:o,isSync:!0}),this.thread.post({sp:[{type:s.EPostMessageType.GetTextActive,toolsType:s.EToolsKey.Text,workId:a}]}))}}cursorHover(e){const{opt:t,toolsType:r,point:o}=e,a=this.setFullWork({workId:s.Cursor_Hover_Id,toolsType:r,opt:t});a&&o&&a.cursorHover(o)}cursorBlur(){var t;const e=this.getWorkShape(s.Cursor_Hover_Id);e&&((t=e.selectIds)!=null&&t.length)&&(e.cursorBlur(),this.clearWorkShapeNodeCache(s.Cursor_Hover_Id)),this.thread.fullLayer.parent.children.forEach(r=>{r.name==="Cursor_Hover_Id"&&r.remove()})}async updateFullSelectWork(e){var o,a,i,n,c;const t=this.workShapes.get(s.Storage_Selector_key),{selectIds:r}=e;if(!(r!=null&&r.length)){await this.blurSelector(e);return}if(!t){this.setFullWork({workId:s.Storage_Selector_key,toolsType:s.EToolsKey.Selector,opt:e.opt||(((o=this.tmpOpt)==null?void 0:o.toolsType)===s.EToolsKey.Selector?this.tmpOpt.toolsOpt:{})})&&await this.updateFullSelectWork(e);return}if(t&&(r!=null&&r.length)){const{selectRect:l}=t.updateSelectIds(r),d=[{selectorColor:((a=e.opt)==null?void 0:a.strokeColor)||t.selectorColor,strokeColor:((i=e.opt)==null?void 0:i.strokeColor)||t.strokeColor,fillColor:((n=e.opt)==null?void 0:n.fillColor)||t.fillColor,textOpt:((c=e.opt)==null?void 0:c.textOpt)||t.textOpt,canTextEdit:t.canTextEdit,canRotate:t.canRotate,scaleType:t.scaleType,type:s.EPostMessageType.Select,viewId:this.thread.viewId,dataType:s.EDataType.Local,selectIds:r,selectRect:l,points:t.getChildrenPoints(),willSyncService:(e==null?void 0:e.willSyncService)||!1,opt:(e==null?void 0:e.willSyncService)&&t.getWorkOptions()||void 0,canLock:t.canLock,isLocked:t.isLocked,toolsTypes:t.toolsTypes,shapeOpt:t.shapeOpt,thickness:t.thickness,useStroke:t.useStroke,strokeType:t.strokeType}];this.thread.post({sp:d})}}async removeSelector(e){const{willSyncService:t,needUndoTicker:r}=e,o=[],a=[],i=this.workShapes.get(s.Storage_Selector_key);if(!i)return;const n=i.selectIds&&[...i.selectIds]||[];for(const c of n){const l=this.vNodes.get(c);if(l)switch(l.toolsType){case s.EToolsKey.Text:{o.push({type:s.EPostMessageType.TextUpdate,toolsType:s.EToolsKey.Text,workId:c,dataType:s.EDataType.Local});break}case s.EToolsKey.BackgroundSVG:o.push({type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:c,dataType:s.EDataType.Local,viewId:this.thread.viewId});break}this.removeNode(c),a.push(c)}a.length&&o.push({type:s.EPostMessageType.RemoveNode,removeIds:a,needUndoTicker:r,emitEventType:e.emitEventType,requestId:e.requestId}),o.push({type:s.EPostMessageType.Select,selectIds:[],willSyncService:t}),await this.blurSelector(),r&&o.push({type:s.EPostMessageType.None,needUndoTicker:r}),o.length&&this.thread.post({sp:o})}removeWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();r&&this.removeNode(r)}removeNode(e){var o;const t=this.vNodes.get(e);t&&(t.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:e,dataType:s.EDataType.Local,viewId:this.thread.viewId}]}),(o=this.thread.fullLayer)==null||o.getElementsByName(e).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.fullLayer.parent)}),this.vNodes.delete(e)),this.workShapes.has(e)&&(this.thread.localLayer.getElementsByName(e).forEach(a=>{a.remove(),s.removeTexture(a,this.thread.localLayer.parent)}),this.clearWorkShapeNodeCache(e))}setFullWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r&&o){const a=t.toString();let i;return t&&this.workShapes.has(a)?(i=this.workShapes.get(a),(i==null?void 0:i.toolsType)!==o?(i==null||i.clearTmpPoints(),this.workShapes.delete(a),i=void 0):i==null||i.setWorkOptions(r)):i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a}),i||(i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a})),i?(this.workShapes.set(a,i),i):void 0}}async consumeFull(e){var i,n;const t=(i=e.workId)==null?void 0:i.toString(),r=(n=e.updateNodeOpt)==null?void 0:n.eraserGeometryDelta;if(t){const c=this.vNodes.get(t),l=e.ops&&s.transformToNormalData(e.ops)||e.op||[];if(r){if(!c||!e.centerPos||!s.acceptIncomingEraserGeometryDelta(this.vNodes,t,r,c,{op:l,centerPos:e.centerPos})){s.cancelDoingForGeometryMismatch(this.vNodes,t);return}}else c&&e.centerPos&&s.hasDoingGeometryTransform(this.vNodes,t)&&s.geometryDigest(c.op,c.centerPos)!==s.geometryDigest(l,e.centerPos)&&s.cancelDoingForGeometryMismatch(this.vNodes,t)}const o=this.setFullWork(e),a=e.ops&&s.transformToNormalData(e.ops);if(o){t&&e.clearPreviewLocalWork&&this.thread.localLayer.getElementsByName(t).forEach(l=>{l.remove(),s.removeTexture(l,this.thread.localLayer.parent)}),o.toolsType===s.EToolsKey.BackgroundSVG?o.consumeService({isFullWork:!0,replaceId:t}):o.toolsType===s.EToolsKey.Image?await o.consumeServiceAsync({isFullWork:!0,replaceId:t,worker:this}):o.toolsType===s.EToolsKey.Text?await o.consumeServiceAsync({isFullWork:!0,replaceId:t,boxRect:this.thread.getSceneRect()}):o.consumeService({op:a,isFullWork:!0,replaceId:t}),e!=null&&e.updateNodeOpt&&o.updataOptService(e.updateNodeOpt);const c=[];e.workId&&this.workShapes.delete(e.workId.toString()),e.willSyncService&&c.push({opt:e.opt,toolsType:e.toolsType,type:s.EPostMessageType.FullWork,workId:e.workId,ops:e.ops,updateNodeOpt:e.updateNodeOpt,viewId:this.thread.viewId,needUndoTicker:e.needUndoTicker,requestId:e.requestId,emitEventType:e.emitEventType,scenePath:e.scenePath}),e.isLockSentEventCursor&&c.push({type:s.EPostMessageType.None,isLockSentEventCursor:!0,scenePath:e.scenePath}),e.needUndoTicker&&c.push({type:s.EPostMessageType.None,needUndoTicker:e.needUndoTicker,emitEventType:e.emitEventType,requestId:e.requestId,scenePath:e.scenePath}),c.length&&this.thread.post({sp:c})}}async colloctEffectSelectWork(e){const t=this.workShapes.get(s.Storage_Selector_key),{workId:r,msgType:o}=e;if(t&&r&&t.selectIds&&t.selectIds.includes(r.toString())){o===s.EPostMessageType.RemoveNode?t.selectIds=t.selectIds.filter(a=>a!==r.toString()):this.effectSelectNodeData.add(e),await this.runEffectSelectWork(!0);return}return e}async runEffectSelectWork(e){var t;for await(const r of this.effectSelectNodeData.values()){const o=this.setFullWork(r);if(o){const a=(t=r.workId)==null?void 0:t.toString();if(o.toolsType===s.EToolsKey.BackgroundSVG)o.consumeService({isFullWork:!0,replaceId:a});else if(o.toolsType===s.EToolsKey.Image)await o.consumeServiceAsync({isFullWork:!0,replaceId:a,worker:this});else if(o.toolsType===s.EToolsKey.Text)await o.consumeServiceAsync({isFullWork:!0,replaceId:a,boxRect:this.thread.getSceneRect()});else{const i=r.ops&&s.transformToNormalData(r.ops);o.consumeService({op:i,isFullWork:!0,replaceId:a}),r!=null&&r.updateNodeOpt&&o.updataOptService(r.updateNodeOpt)}r.workId&&this.workShapes.delete(r.workId.toString())}this.effectSelectNodeData.delete(r)}this.reRenderSelector(e)}hasSelector(){return this.workShapes.has(s.Storage_Selector_key)}getSelector(){return this.workShapes.get(s.Storage_Selector_key)}reRenderSelector(e=!1){var o;const t=this.workShapes.get(s.Storage_Selector_key);if(!t)return;if(t&&!((o=t.selectIds)!=null&&o.length))return this.blurSelector();const r=t.reRenderSelector();r&&this.thread.post({sp:[{type:s.EPostMessageType.Select,selectIds:t.selectIds,selectRect:r,willSyncService:e,viewId:this.thread.viewId,points:t.getChildrenPoints(),textOpt:t.textOpt,selectorColor:t.selectorColor,strokeColor:t.strokeColor,fillColor:t.fillColor,canTextEdit:t.canTextEdit,canRotate:t.canRotate,scaleType:t.scaleType,opt:t.getWorkOptions()||void 0,canLock:t.canLock,isLocked:t.isLocked,toolsTypes:t.toolsTypes,shapeOpt:t.shapeOpt,thickness:t.thickness,useStroke:t.useStroke,strokeType:t.strokeType}]})}async blurSelector(e){var o;const t=this.workShapes.get(s.Storage_Selector_key),r=t==null?void 0:t.blurSelector();if(this.clearWorkShapeNodeCache(s.Storage_Selector_key),((o=this.thread.fullLayer)==null?void 0:o.parent).children.forEach(a=>{a.name===s.Storage_Selector_key&&a.remove()}),r){const a=[];a.push({...r,isSync:e==null?void 0:e.isSync,scenePath:e==null?void 0:e.scenePath}),this.thread.post({sp:a})}}clearWorkShapeNodeCache(e){var t;(t=this.getWorkShape(e))==null||t.clearTmpPoints(),this.workShapes.delete(e)}async drawBitMapEraserFull(e,t,r,o){const{willUpdateNodes:a,willDeleteNodes:i,eraseTxnRecoveryRequired:n}=t,c=e.getWorkId(),l=[...a?Array.from(a.keys()).map(h=>String(h)):[],...i?Array.from(i):[]],d=[];if(o&&d.push({type:s.EPostMessageType.None,needUndoTicker:o,undoScopeIds:l,undoScopePhase:"finalize",eraseTxnId:c,eraseTxnRecoveryRequired:n}),d.push({type:s.EPostMessageType.RemoveNode,removeIds:[c],eraseTxnId:c,viewId:this.thread.viewId,needUndoTicker:o,eraseTxnRecoveryRequired:n}),r&&d.push({type:s.EPostMessageType.None,isLockSentEventCursor:r}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[h,p]of a)d.push({type:s.EPostMessageType.UpdateNode,dataType:s.EDataType.Local,opt:p.opt,workId:h,updateNodeOpt:{useAnimation:!1},eraseTxnId:c,needUndoTicker:o});i!=null&&i.size&&d.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],eraseTxnId:c,viewId:this.thread.viewId,needUndoTicker:o})}d.push({type:s.EPostMessageType.None,viewId:this.thread.viewId,eraseTxnId:c,eraseTxnPhase:t.eraseTxnCommitStatus==="failed"||n?"failed":"applied",eraseTxnRecoveryRequired:n}),d.length&&this.thread.post({sp:d})}drawPencilEraserFull(e,t,r,o){const{willNewNodes:a,willDeleteNodes:i}=t,n=e.getWorkId(),c=[...a?Array.from(a.keys()).map(d=>String(d)):[],...i?Array.from(i):[]],l=[];if(o&&c.length&&l.push({type:s.EPostMessageType.None,needUndoTicker:o,undoScopeIds:c}),l.push({type:s.EPostMessageType.RemoveNode,removeIds:[n],viewId:this.thread.viewId,needUndoTicker:o}),r&&l.push({type:s.EPostMessageType.None,isLockSentEventCursor:r}),a!=null&&a.size||i!=null&&i.size){if(a!=null&&a.size)for(const[d,h]of a)l.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:h.toolsType,ops:s.transformToSerializableData(h.op),opt:h.opt,workId:d,updateNodeOpt:{useAnimation:!1},needUndoTicker:o});i!=null&&i.size&&l.push({type:s.EPostMessageType.RemoveNode,removeIds:[...i],viewId:this.thread.viewId,needUndoTicker:o})}l.length&&this.thread.post({sp:l})}drawEraser(e,t,r,o){const a=[],i=e.removeIds||[];o&&i.length&&a.push({type:s.EPostMessageType.None,collectUndoTicker:o,undoScopeIds:i,undoScopePhase:"collect"}),e.removeIds&&a.push({...e,needUndoTicker:r,collectUndoTicker:o}),t&&a.push({type:s.EPostMessageType.None,isLockSentEventCursor:t}),r&&a.push({type:s.EPostMessageType.None,needUndoTicker:r,undoScopePhase:"finalize"}),this.thread.post({sp:a,consumeCount:this.consumeCount})}getWorkShape(e){return this.workShapes.get(e)}getWorkShapes(){return this.workShapes}async consumeDraw(e,t){const{op:r,workId:o,scenePath:a,postCount:i,smoothSync:n}=e;if(r!=null&&r.length&&o){const c=o.toString(),l=this.workShapes.get(c);if(!l)return;const d=l.toolsType;if(d===s.EToolsKey.LaserPen)return;if(this.combineDrawActiveId&&this.combineDrawActiveId!==c){const h=this.combineDrawActiveId;this.eraserBatchScheduler.cancel(),this.combineDrawActiveId=void 0,await this.consumeDrawAll({workId:h,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},t)}switch(this.drawWorkActiveId&&this.drawWorkActiveId!==c&&(await this.consumeDrawAll({workId:this.drawWorkActiveId,scenePath:a,viewId:this.thread.viewId,msgType:s.EPostMessageType.DrawWork,dataType:s.EDataType.Local},t),this.drawWorkActiveId=void 0),!this.drawWorkActiveId&&c!==s.Storage_Selector_key&&(this.drawWorkActiveId=c),D.isNumber(i)&&(this.consumeCount=i),d){case s.EToolsKey.Selector:{const h=l.consume({data:e,isFullWork:!0,isMainThread:!0});this.fullWorkerDrawCount++;const p=[];h.type===s.EPostMessageType.Select&&(h.selectIds&&t.runReverseSelectWork(h.selectIds),p.push({...h,scenePath:a})),await this.thread.fullLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:p});break}case s.EToolsKey.PencilEraser:{l.consume({data:e,isFullWork:!1,isMainThread:!0}),this.fullWorkerDrawCount++,await this.thread.localLayer.parent.prepareRender,this.thread.post({sp:void 0,consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount}),this.combineDrawActiveId=c,this.eraserBatchScheduler.schedule(()=>{this.drawPencilEraserCombine(c,e.needUndoTicker,e.collectUndoTicker)},s.getEraserBatchDelay(this.thread.master.maxCombineEraserTime));break}case s.EToolsKey.BitMapEraser:{l.consume({data:e,isFullWork:!1,isMainThread:!0}),this.fullWorkerDrawCount++,this.combineDrawActiveId=c,await this.enqueueBitmapEraserRender(c,e.needUndoTicker,e.collectUndoTicker,{consumeCount:this.consumeCount,consumeWorkId:c});break}case s.EToolsKey.Eraser:{const h=l.consume({data:e,isFullWork:!0});await this.thread.fullLayer.parent.prepareRender,this.drawEraser(h,void 0,e.needUndoTicker,e.collectUndoTicker)}break;case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Ellipse:case s.EToolsKey.Rectangle:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:case s.EToolsKey.Pencil:{const h=l.consume({data:e,isFullWork:!1,isMainThread:!0,smoothSync:n});h&&(this.fullWorkerDrawCount++,await this.thread.localLayer.parent.prepareRender,this.thread.post({consumeCount:this.consumeCount,fullWorkerDrawCount:this.fullWorkerDrawCount,sp:h.op&&[{...h,scenePath:a}]||void 0}))}break}}}enqueueBitmapEraserRender(e,t,r,o){const a=this.bitmapEraserRenderQueue.then(async()=>{this.combineDrawActiveId!==e||!this.getWorkShape(e)||await this.postEraserBatch(e,t,r,o)});return this.bitmapEraserRenderQueue=a.catch(()=>{}),a}async drawPencilEraserCombine(e,t,r){await this.postEraserBatch(e,t,r)}async postEraserBatch(e,t,r,o){var i,n,c,l,d,h;const a=(i=this.workShapes.get(e))==null?void 0:i.combineConsume({workerEngine:this});if(a||o){const p=a==null?void 0:a.willDeleteNodes,y=a==null?void 0:a.willNewNodes,f=[...p?Array.from(p):[]],S={render:[],sp:[],...o};if(a!=null&&a.rect){const k=s.getSafetyRect(a.rect);(n=S.render)==null||n.push({rect:k,isClear:!0,clearCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId,eraseTxnId:e},{rect:k,drawCanvas:s.ECanvasShowType.Bg,viewId:this.thread.viewId,eraseTxnId:e})}if(r&&f.length&&((c=this.getWorkShape(e))==null?void 0:c.toolsType)===s.EToolsKey.BitMapEraser&&((l=S.sp)==null||l.push({type:s.EPostMessageType.None,collectUndoTicker:r,undoScopeIds:f,undoScopePhase:"collect"})),p!=null&&p.size&&((d=S.sp)==null||d.push({type:s.EPostMessageType.RemoveNode,removeIds:[...p],viewId:this.thread.viewId,needUndoTicker:t,collectUndoTicker:r})),y!=null&&y.size)for(const[k,E]of y)(h=S.sp)==null||h.push({type:s.EPostMessageType.FullWork,dataType:s.EDataType.Local,toolsType:E.toolsType,ops:s.transformToSerializableData(E.op),opt:E.opt,workId:k,updateNodeOpt:{useAnimation:!1},needUndoTicker:t,collectUndoTicker:r});a!=null&&a.rect&&await this.thread.fullLayer.parent.prepareRender,this.thread.post(S)}}async consumeDrawAll(e,t){var n,c,l;this.eraserBatchScheduler.cancel();const{workId:r,scenePath:o,isLockSentEventCursor:a}=e,i=e.needUndoTicker;if(r){this.combineDrawActiveId===r.toString()&&(this.combineDrawActiveId=void 0);const d=r.toString();this.drawWorkActiveId===d&&(this.drawWorkActiveId=void 0);const h=this.workShapes.get(d);if(!h)return;const p=h.toolsType;if(p===s.EToolsKey.LaserPen)return;p===s.EToolsKey.BitMapEraser&&await this.bitmapEraserRenderQueue;const y=this.workShapes.get(s.Cursor_Hover_Id),f=(n=y==null?void 0:y.selectIds)==null?void 0:n[0],S=await h.consumeAll({data:e,workerEngine:this});switch(p){case s.EToolsKey.Selector:{S.selectIds&&f&&((c=S.selectIds)!=null&&c.includes(f))&&y.cursorBlur();const k=[];a&&k.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:o}),S.type===s.EPostMessageType.Select&&(S.selectIds&&t.runReverseSelectWork(S.selectIds),k.push({...S,scenePath:o})),k.length&&this.thread.post({sp:k}),(l=h.selectIds)!=null&&l.length?h.clearTmpPoints():this.clearWorkShapeNodeCache(d)}break;case s.EToolsKey.PencilEraser:await this.drawPencilEraserFull(h,S,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(d);break;case s.EToolsKey.BitMapEraser:await this.drawBitMapEraserFull(h,S,a,i),this.fullWorkerDrawCount=0,this.clearWorkShapeNodeCache(d);break;case s.EToolsKey.Eraser:await this.drawEraser({...S,scenePath:o},a,i,e.collectUndoTicker),h.clearTmpPoints();break;case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Ellipse:case s.EToolsKey.Rectangle:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:case s.EToolsKey.Pencil:{const k=[];if(a&&k.push({type:s.EPostMessageType.None,isLockSentEventCursor:a,scenePath:o}),S){const w=p===s.EToolsKey.Pencil&&S.type===s.EPostMessageType.RemoveNode;w?s.removeAllChildren(this.thread.localLayer,this.thread.localLayer.parent):k.push({...S,scenePath:o,needUndoTicker:e.needUndoTicker,undoScopeIds:S.undoScopeIds||(S.workId!==void 0?[S.workId.toString()]:void 0),undoScopePhase:S.undoScopePhase||"finalize"}),this.fullWorkerDrawCount=0,e.needUndoTicker&&k.push({type:s.EPostMessageType.None,needUndoTicker:e.needUndoTicker,scenePath:o,undoScopeIds:w?[]:void 0,undoScopePhase:w?"finalize":void 0}),(w?this.thread.localLayer:this.thread.fullLayer).parent.prepareRender.then(()=>{this.thread.post({fullWorkerDrawCount:this.fullWorkerDrawCount,sp:k})})}this.clearWorkShapeNodeCache(d);break}}}}getToolsOpt(){return this.tmpOpt}setToolsOpt(e){var t,r;if((t=this.tmpOpt)!=null&&t.toolsType&&this.tmpOpt.toolsType!==e.toolsType){this.eraserBatchScheduler.cancel();for(const[o,a]of this.workShapes)o!==s.Storage_Selector_key&&(a.clearTmpPoints(),this.workShapes.delete(o))}this.tmpOpt=e,(r=e.toolsOpt)!=null&&r.syncUnitTime&&(this.syncUnitTime=e.toolsOpt.syncUnitTime)}setWorkOptions(e,t){let r=this.workShapes.get(e);if(!r&&this.tmpOpt){const{toolsType:o}=this.tmpOpt;this.tmpOpt.toolsOpt=t,r=this.createWorkShapeNode({workId:e,toolsType:o,toolsOpt:t}),r&&this.workShapes.set(e,r),this.setToolsOpt(this.tmpOpt)}t.syncUnitTime||(t.syncUnitTime=this.syncUnitTime),r==null||r.setWorkOptions(t)}createWorkShapeNode(e){return s.getShapeInstance({...e,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.localLayer},this.thread.serviceWork)}}class q{constructor(e){u(this,"vNodes");u(this,"thread");u(this,"workShapes",new Map);u(this,"selectorWorkShapes",new Map);u(this,"willRunEffectSelectorIds",new Set);u(this,"syncUnitTime",s.DefaultAppliancePluginExtrasOptions.syncOpt.interval);u(this,"animationScheduler");u(this,"effectScheduler");this.vNodes=e.vNodes,this.thread=e.thread,this.animationScheduler=new s.ServiceRenderScheduler({run:async()=>{try{await this.animationDraw()}catch(t){throw s.toRendererBusinessError(t,{business:"service-render",stage:"animation-draw"})}},schedule:t=>requestAnimationFrame(t),cancel:t=>cancelAnimationFrame(t),onError:t=>this.thread.reportRendererBusinessError(t,{business:"service-render",stage:"animation-draw"})}),this.effectScheduler=new s.ServiceRenderScheduler({run:async()=>{try{await this.effectRunSelector()}catch(t){throw s.toRendererBusinessError(t,{business:"service-render",stage:"selector-effect"})}},schedule:t=>setTimeout(t,0),cancel:t=>clearTimeout(t),onError:t=>this.thread.reportRendererBusinessError(t,{business:"service-render",stage:"selector-effect"})})}async loadImageBitMap(e){return await this.thread.loadImageBitMap(e)}destroy(){this.animationScheduler.destroy(),this.effectScheduler.destroy(),this.clearAll()}clearAll(){this.thread.serviceLayer.children.length&&(this.thread.serviceLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.thread.serviceLayer,this.thread.serviceLayer.parent)),this.workShapes.clear(),this.selectorWorkShapes.clear(),this.willRunEffectSelectorIds.clear()}runEffect(){this.effectScheduler.request()}effectRunSelector(){this.willRunEffectSelectorIds.forEach(e=>{var r,o;const t=this.selectorWorkShapes.get(e);t&&t.selectIds&&((r=t.node)==null||r.selectServiceNode(e,t,!0)),(o=t==null?void 0:t.selectIds)!=null&&o.length||this.selectorWorkShapes.delete(e)}),this.willRunEffectSelectorIds.clear()}runSelectWork(e){this.activeSelectorShape(e);const{workId:t}=e,r=t==null?void 0:t.toString();r&&this.willRunEffectSelectorIds.add(r),this.runEffect()}removeWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();if(r){if(this.workShapes.get(r)){this.workShapes.delete(r),this.removeNode(r,e);return}this.removeNode(r,e)}}consumeFull(e){if(this.activeWorkShape(e),e.refreshTextRender){this.runAnimation(!0);return}this.runAnimation()}runReverseSelectWork(e){e.forEach(t=>{this.selectorWorkShapes.forEach((r,o)=>{var a;if((a=r.selectIds)!=null&&a.length){const i=r.selectIds.indexOf(t);i>-1&&(r.selectIds.splice(i,1),this.willRunEffectSelectorIds.add(o))}})}),this.willRunEffectSelectorIds.size&&this.runEffect()}consumeDraw(e){this.activeWorkShape(e),this.runAnimation()}computNextAnimationIndex(e,t){const r=Math.floor((e.animationWorkData||[]).slice(e.animationIndex).length*32/t/this.syncUnitTime)*t;return Math.min((e.animationIndex||0)+(r||t),(e.animationWorkData||[]).length)}async animationDraw(){var o,a,i,n,c,l,d,h,p,y,f,S,k,E,w,m,T,g,M,W,C;let e=!1;const t=new Map,r=[];for(const[I,v]of this.workShapes.entries())switch(v.toolsType){case s.EToolsKey.BackgroundSVG:{(o=v.node)==null||o.consumeService({isFullWork:!0,replaceId:I}),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Image:{await((a=v.node)==null?void 0:a.consumeServiceAsync({isFullWork:!0,worker:this})),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),this.workShapes.delete(I);break}case s.EToolsKey.Text:{v.node&&(await((i=v.node)==null?void 0:i.consumeServiceAsync({isFullWork:!0,replaceId:I,boxRect:this.thread.getSceneRect()})),this.selectorWorkShapes.forEach((R,P)=>{var N;(N=R.selectIds)!=null&&N.includes(I)&&(this.willRunEffectSelectorIds.add(P),this.runEffect())}),v.refreshTextRender&&v.requestId&&r.push({type:s.EPostMessageType.RefreshTextRender,requestId:v.requestId,workId:I,viewId:this.thread.viewId}),(n=v.node)==null||n.clearTmpPoints(),this.workShapes.delete(I));break}case s.EToolsKey.Arrow:case s.EToolsKey.Straight:case s.EToolsKey.Rectangle:case s.EToolsKey.Ellipse:case s.EToolsKey.Star:case s.EToolsKey.Polygon:case s.EToolsKey.SpeechBalloon:{const R=!!v.ops;if((c=v.animationWorkData)!=null&&c.length){const P=v.oldRect;(l=v.node)==null||l.consumeService({op:v.animationWorkData,isFullWork:R}),R&&(this.selectorWorkShapes.forEach((N,L)=>{var O;(O=N.selectIds)!=null&&O.includes(I)&&(this.willRunEffectSelectorIds.add(L),this.runEffect())}),(d=v.node)==null||d.clearTmpPoints(),this.workShapes.delete(I)),v.isEnableCursor?t.set(I,{cursorTool:s.resolveCursorToolName(v.toolsType),workState:P?v.ops?s.EventWorkState.Done:s.EventWorkState.Doing:s.EventWorkState.Start,op:v.animationWorkData.slice(-3,-1)}):R&&!v.useAnimation&&((h=v.updateNodeOpt)!=null&&h.useAnimation)&&t.set(I,{cursorTool:s.resolveCursorToolName(v.toolsType),workState:s.EventWorkState.Done,op:v.animationWorkData.slice(-3,-1),uid:(p=v.updateNodeOpt)==null?void 0:p.uid}),v.animationWorkData.length=0}break}case s.EToolsKey.Pencil:{if(v.useAnimation){if(v.useAnimation){if(v.isDel){(m=v.node)==null||m.clearTmpPoints(),this.workShapes.delete(I);break}const R=3,P=this.computNextAnimationIndex(v,R),N=v.isDiff?0:Math.max(0,(v.animationIndex||0)-R),L=(v.animationWorkData||[]).slice(N,P),O=(g=(T=v.node)==null?void 0:T.getWorkId())==null?void 0:g.toString();if((v.animationIndex||0)<P||v.isDiff){if((M=v.node)==null||M.consumeService({op:L,isFullWork:!1}),v.animationIndex=P,v.isDiff&&(v.isDiff=!1),L.length&&v.isEnableCursor){const A=L.slice(-3,-1);t.set(I,{cursorTool:s.resolveCursorToolName(v.toolsType),workState:N===0?s.EventWorkState.Start:P===((W=v.animationWorkData)==null?void 0:W.length)?s.EventWorkState.Done:s.EventWorkState.Doing,op:A})}}else v.ops&&((C=v.node)==null||C.consumeService({op:v.animationWorkData||[],isFullWork:!0,replaceId:O}),v.isDel=!0,v.isEnableCursor&&t.set(I,{cursorTool:s.resolveCursorToolName(v.toolsType),workState:s.EventWorkState.Done,op:L.slice(-3,-1)}));e=!0;break}}else{const R=!!v.ops;if((y=v.node)==null||y.consumeService({op:v.animationWorkData||[],isFullWork:R,replaceId:I}),(f=v.node)==null||f.updataOptService(v.updateNodeOpt),R){if(!v.isEnableCursor&&((S=v.updateNodeOpt)!=null&&S.useAnimation)&&((k=v.animationWorkData)!=null&&k.length)){const P=v.animationWorkData.slice(-3,-1);t.set(I,{cursorTool:s.resolveCursorToolName(v.toolsType),workState:s.EventWorkState.Done,op:P,uid:(E=v.updateNodeOpt)==null?void 0:E.uid})}this.selectorWorkShapes.forEach((P,N)=>{var L;(L=P.selectIds)!=null&&L.includes(I)&&(this.willRunEffectSelectorIds.add(N),this.runEffect())}),(w=v.node)==null||w.clearTmpPoints(),this.workShapes.delete(I)}}break}}e&&this.runAnimation(),t.size&&t.forEach((I,v)=>{r.push({type:s.EPostMessageType.Cursor,uid:I.uid||v.split(s.Storage_Splitter)[0],op:I.op,workState:I.workState,cursorTool:I.cursorTool,viewId:this.thread.viewId})}),r.length&&this.thread.post({sp:r})}runAnimation(e=!1){this.animationScheduler.request(e)}async flush(){await this.animationScheduler.flush(),await this.effectScheduler.flush()}hasDiffData(e,t,r){const o=e.length;if(t.length<o)return!0;switch(r){case s.EToolsKey.Pencil:{for(let a=0;a<o;a+=3)if(t[a]!==e[a]||t[a+1]!==e[a+1])return!0;break}case s.EToolsKey.LaserPen:{for(let a=0;a<o;a+=2)if(t[a]!==e[a]||t[a+1]!==e[a+1])return!0;break}}return!1}activeWorkShape(e){var E,w,m,T;const{workId:t,opt:r,toolsType:o,type:a,updateNodeOpt:i,ops:n,op:c,useAnimation:l,imageBitmap:d,isEnableCursor:h,requestId:p,refreshTextRender:y}=e;if(!t)return;const f=t.toString(),S=(E=this.vNodes.get(f))==null?void 0:E.rect;if(!((w=this.workShapes)!=null&&w.has(f))){let g={toolsType:o,animationWorkData:c||[],animationIndex:0,type:a,updateNodeOpt:i,ops:n,useAnimation:typeof l<"u"?l:typeof(i==null?void 0:i.useAnimation)<"u"?i==null?void 0:i.useAnimation:!0,oldRect:S,isDiff:!1,imageBitmap:d,isEnableCursor:h};o&&r&&(g=this.setNodeKey(f,g,o,r)),(m=this.workShapes)==null||m.set(f,g)}const k=(T=this.workShapes)==null?void 0:T.get(f);k.isEnableCursor=h,k.requestId=p,k.refreshTextRender=!!y,a&&(k.type=a),n&&(k.animationWorkData=s.transformToNormalData(n),k.ops=n),i&&(k.updateNodeOpt=i),c&&(k.isDiff=this.hasDiffData(k.animationWorkData||[],c,k.toolsType),k.toolsType,s.EToolsKey.Pencil,k.animationWorkData=c),k.node&&k.node.getWorkId()!==f&&k.node.setWorkId(f),S&&(k.oldRect=S),o&&r&&(r.syncUnitTime&&(this.syncUnitTime=r.syncUnitTime),k.toolsType!==o&&o&&r&&this.setNodeKey(f,k,o,r),k.node&&k.node.setWorkOptions(r)),d&&(k.imageBitmap=d)}removeNode(e,t){e.indexOf(s.Storage_Selector_key)>-1&&this.removeSelectWork(t),this.thread.fullLayer.getElementsByName(e).forEach(o=>{o.remove(),s.removeTexture(o,this.thread.fullLayer.parent)}),this.thread.serviceLayer.getElementsByName(e).forEach(o=>{o.remove(),s.removeTexture(o,this.thread.serviceLayer.parent)});const r=this.vNodes.get(e);r&&r.toolsType===s.EToolsKey.BackgroundSVG&&this.thread.post({sp:[{type:s.EPostMessageType.BackgroundSVGDelete,toolsType:s.EToolsKey.BackgroundSVG,workId:e,dataType:s.EDataType.Service,viewId:this.thread.viewId}]}),this.vNodes.delete(e)}removeSelectWork(e){const{workId:t}=e,r=t==null?void 0:t.toString();r&&(this.activeSelectorShape(e),this.willRunEffectSelectorIds.add(r)),this.runEffect()}activeSelectorShape(e){var l,d,h;const{workId:t,opt:r,toolsType:o,type:a,selectIds:i}=e;if(!t)return;const n=t.toString();if(!((l=this.selectorWorkShapes)!=null&&l.has(n))){let p={toolsType:o,selectIds:i,type:a,opt:r};o&&r&&(p=this.setNodeKey(n,p,o,r)),(d=this.selectorWorkShapes)==null||d.set(n,p)}const c=(h=this.selectorWorkShapes)==null?void 0:h.get(n);a&&(c.type=a),c.node&&c.node.getWorkId()!==n&&c.node.setWorkId(n),c.selectIds=i||[]}setNodeKey(e,t,r,o){return t.toolsType=r,t.node=s.getShapeInstance({toolsType:r,toolsOpt:o,vNodes:this.vNodes,fullLayer:this.thread.fullLayer,drawLayer:this.thread.serviceLayer,workId:e},this),t}}class B{constructor(){u(this,"localWork");u(this,"serviceWork");u(this,"threadEngine")}registerMainThread(e){return this.threadEngine=e,this.localWork=e.localWork,this.serviceWork=e.serviceWork,this}}class K extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.CopyNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.FullWork&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var o;const{workId:r}=t;r&&await((o=this.localWork)==null?void 0:o.consumeFull(t))}}class _ extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetColorNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var h;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,needUndoTicker:l,requestId:d}=t;r===s.Storage_Selector_key&&o&&await((h=this.localWork)==null?void 0:h.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:d,textUpdateForWoker:c,callback:this.updateSelectorCallback,needUndoTicker:l}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,textUpdateForWoker:c,needUndoTicker:l,requestId:d,emitEventType:h}=r,p=o.sp||[];if(i)for(const[y,f]of a.entries())c&&f.toolsType===s.EToolsKey.Text?p.push({...f,workId:y,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:h,requestId:d,needUndoTicker:l}):p.push({...f,workId:y,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:h,requestId:d,needUndoTicker:l});return l&&p.push({type:s.EPostMessageType.None,needUndoTicker:l}),{sp:p}}}class z extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.ZIndexNode)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,needUndoTicker:c,requestId:l,emitEventType:d}=r,h=o.sp||[];if(i&&h)for(const[p,y]of a.entries())y.toolsType===s.EToolsKey.BackgroundSVG&&h.push({...y,workId:p,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,updateNodeOpt:{useAnimation:!1},needUndoTicker:c,emitEventType:d,requestId:l}),h.push({...y,workId:p,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:d,requestId:l,needUndoTicker:c});return c&&h.push({type:s.EPostMessageType.None,needUndoTicker:c}),{sp:h}}}class V extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.TranslateNode);u(this,"updateSelectorCallback",t=>{var E;const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n,smoothSync:c}=t,{willSyncService:l,isSync:d,updateSelectorOpt:h,textUpdateForWoker:p,needUndoTicker:y}=r,f=h.workState,S=o.sp||[];if(f===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}],render:[]};const k=n==null?void 0:n.selectRect;if(l){const w=f===s.EventWorkState.Done?y:void 0;S.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:k,willSyncService:f===s.EventWorkState.Done?!0:c,isSync:!0,points:f===s.EventWorkState.Done&&i.getChildrenPoints()||void 0,textOpt:i.textOpt,needUndoTicker:w,emitEventType:this.emitEventType});const m={workState:f,useAnimation:h.useAnimation||!1};h.uid&&(m.uid=h.uid);for(const[T,g]of a.entries())g.toolsType===s.EToolsKey.BackgroundSVG&&S.push({...g,workId:T,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:f===s.EventWorkState.Done?!0:c,updateNodeOpt:m,needUndoTicker:w,emitEventType:this.emitEventType}),p&&g.toolsType===s.EToolsKey.Text?S.push({...g,workId:T,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:f===s.EventWorkState.Done?!0:c,updateNodeOpt:m,needUndoTicker:w,emitEventType:this.emitEventType}):(c||f===s.EventWorkState.Done)&&S.push({...g,workId:T,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...m,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((E=this.localWork)==null?void 0:E.vNodes,T)},isSync:d,needUndoTicker:w,emitEventType:this.emitEventType})}return y&&S.push({type:s.EPostMessageType.None,needUndoTicker:y}),S.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}),{sp:S}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var p,y;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,emitEventType:l,smoothSync:d,needUndoTicker:h}=t;r===s.Storage_Selector_key&&o&&(o.workState===s.EventWorkState.Done&&(o!=null&&o.translate)&&(o.translate[0]||o.translate[1])||o.workState!==s.EventWorkState.Done?await((p=this.localWork)==null?void 0:p.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,isSync:!0,textUpdateForWoker:c,emitEventType:l,callback:this.updateSelectorCallback,smoothSync:d,needUndoTicker:h})):o.workState===s.EventWorkState.Done&&((y=this.localWork)==null||y.vNodes.deleteLastTarget()))}}class $ extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.ScaleNode);u(this,"updateSelectorCallback",t=>{var k;const{param:r,postData:o,workShapeNode:a,res:i,newServiceStore:n,smoothSync:c}=t,{updateSelectorOpt:l,willSyncService:d,needUndoTicker:h}=r,p=l.workState,y=o.sp||[],f=i==null?void 0:i.selectRect,S=p===s.EventWorkState.Done?h:void 0;if(p===s.EventWorkState.Start)return{sp:[{type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:p}],render:[]};if(d){y.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:f,willSyncService:p===s.EventWorkState.Done?!0:c,isSync:!0,points:p===s.EventWorkState.Done&&a.getChildrenPoints()||void 0,textOpt:a.textOpt});const E={useAnimation:l.useAnimation||!1};l.uid&&(E.uid=l.uid);for(const[w,m]of n.entries())m.toolsType===s.EToolsKey.BackgroundSVG&&y.push({...m,workId:w,type:s.EPostMessageType.BackgroundSVGUpdate,dataType:s.EDataType.Local,willSyncService:p===s.EventWorkState.Done?!0:c,updateNodeOpt:E,needUndoTicker:S,emitEventType:this.emitEventType}),m.toolsType===s.EToolsKey.Text?y.push({...m,workId:w,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:p===s.EventWorkState.Done?!0:c,updateNodeOpt:E,needUndoTicker:S,emitEventType:this.emitEventType}):(c||p===s.EventWorkState.Done)&&y.push({...m,workId:w,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...E,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((k=this.localWork)==null?void 0:k.vNodes,w)},isSync:!0,needUndoTicker:S,emitEventType:this.emitEventType})}return h&&y.push({type:s.EPostMessageType.None,needUndoTicker:h}),y.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:p}),{sp:y}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var l;const{workId:r,updateNodeOpt:o,willSyncService:a,willSerializeData:i,smoothSync:n,needUndoTicker:c}=t;r===s.Storage_Selector_key&&o&&await((l=this.localWork)==null?void 0:l.updateSelector({updateSelectorOpt:o,willSyncService:a,willSerializeData:i,isSync:!0,callback:this.updateSelectorCallback.bind(this),smoothSync:n,needUndoTicker:c}))}}class H extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.RotateNode);u(this,"updateSelectorCallback",t=>{var w;const{param:r,postData:o,workShapeNode:a,res:i,newServiceStore:n,smoothSync:c}=t,{updateSelectorOpt:l,willSyncService:d,willSerializeData:h,isSync:p,needUndoTicker:y}=r,f=l.workState,S=o.sp||[],k=i==null?void 0:i.selectRect,E=f===s.EventWorkState.Done?y:void 0;if(d){h&&f===s.EventWorkState.Done&&S.push({type:s.EPostMessageType.Select,selectIds:a.selectIds,selectRect:k,willSyncService:f===s.EventWorkState.Done?!0:c,isSync:p,points:a.getChildrenPoints()});const m={useAnimation:l.useAnimation||!1};if(l.uid&&(m.uid=l.uid),c||f===s.EventWorkState.Done)for(const[T,g]of n.entries())S.push({...g,workId:T,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{...m,eraserGeometryDelta:s.getOutgoingEraserGeometryDelta((w=this.localWork)==null?void 0:w.vNodes,T)},isSync:p,needUndoTicker:E,emitEventType:this.emitEventType})}return y&&S.push({type:s.EPostMessageType.None,needUndoTicker:y}),S.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:f}),{sp:S}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var h;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:c,smoothSync:l,needUndoTicker:d}=t;r===s.Storage_Selector_key&&o&&await((h=this.localWork)==null?void 0:h.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:c,isSync:!0,callback:this.updateSelectorCallback,smoothSync:l,needUndoTicker:d}))}}class Q extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetFontStyle)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,textUpdateForWoker:c,callback:this.updateSelectorCallback}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,updateSelectorOpt:d,textUpdateForWoker:h,requestId:p,emitEventType:y}=r,f=o.sp||[],S=n==null?void 0:n.selectRect;if(c&&f){d.fontSize&&f.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:S,willSyncService:c,isSync:l,points:i.getChildrenPoints()});for(const[k,E]of a.entries())h&&E.toolsType===s.EToolsKey.Text?f.push({...E,workId:k,type:s.EPostMessageType.TextUpdate,dataType:s.EDataType.Local,willSyncService:!0,emitEventType:y,requestId:p}):f.push({...E,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:y,requestId:p})}return{sp:f}}}class X extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetPoint);u(this,"updateSelectorCallback",t=>{const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,needUndoTicker:d}=r,h=o.sp||[],p=n==null?void 0:n.selectRect;if(c&&h){for(const[y,f]of a.entries())h.push({...f,workId:y,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,needUndoTicker:d,emitEventType:this.emitEventType});h.push({type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:p,willSyncService:c,isSync:l,points:i.getChildrenPoints()})}return d&&h.push({type:s.EPostMessageType.None,needUndoTicker:d}),h.push({type:s.EPostMessageType.SelectorTransform,emitEventType:this.emitEventType,workState:r.updateSelectorOpt.workState}),{sp:h}})}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,textUpdateForWoker:c,needUndoTicker:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,emitEventType:this.emitEventType,willSerializeData:n,isSync:!0,textUpdateForWoker:c,callback:this.updateSelectorCallback,needUndoTicker:l}))}}class Y extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetLock)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a,workShapeNode:i,res:n}=t,{willSyncService:c,isSync:l,updateSelectorOpt:d,needUndoTicker:h,requestId:p,emitEventType:y}=r,f=o.sp||[],S=n==null?void 0:n.selectRect;if(c&&f){for(const[k,E]of a.entries())f.push({...E,workId:k,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:l,emitEventType:y,requestId:p});f.push({isLocked:d.isLocked,selectorColor:i.selectorColor,scaleType:i.scaleType,canRotate:i.canRotate,type:s.EPostMessageType.Select,selectIds:i.selectIds,selectRect:S,willSyncService:c,isSync:l})}return h&&f.push({type:s.EPostMessageType.None,needUndoTicker:h}),{sp:f}}}class Z extends B{constructor(){super(...arguments);u(this,"emitEventType",s.EmitEventType.SetShapeOpt)}async consume(t){const{msgType:r,dataType:o,emitEventType:a}=t;if(r===s.EPostMessageType.UpdateNode&&o===s.EDataType.Local&&a===this.emitEventType)return await this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var d;const{workId:r,updateNodeOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,needUndoTicker:c,requestId:l}=t;r===s.Storage_Selector_key&&o&&await((d=this.localWork)==null?void 0:d.updateSelector({updateSelectorOpt:o,willRefreshSelector:a,willSyncService:i,willSerializeData:n,emitEventType:this.emitEventType,requestId:l,callback:this.updateSelectorCallback,needUndoTicker:c}))}updateSelectorCallback(t){const{param:r,postData:o,newServiceStore:a}=t,{willSyncService:i,isSync:n,needUndoTicker:c,requestId:l,emitEventType:d}=r,h=o.sp||[];if(i&&h)for(const[p,y]of a.entries())h.push({...y,workId:p,type:s.EPostMessageType.UpdateNode,updateNodeOpt:{useAnimation:!1},isSync:n,emitEventType:d,requestId:l});return c&&h.push({type:s.EPostMessageType.None,needUndoTicker:c}),{sp:h}}}class j{constructor(e){u(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case s.EmitEventType.TranslateNode:return new V;case s.EmitEventType.ZIndexNode:return new z;case s.EmitEventType.CopyNode:return new K;case s.EmitEventType.SetColorNode:return new _;case s.EmitEventType.ScaleNode:return new $;case s.EmitEventType.RotateNode:return new H;case s.EmitEventType.SetFontStyle:return new Q;case s.EmitEventType.SetPoint:return new X;case s.EmitEventType.SetLock:return new Y;case s.EmitEventType.SetShapeOpt:return new Z}}registerForMainThread(e){return this.builders.forEach(t=>{t&&t.registerMainThread(e)}),this}async consumeForMainThread(e){for(const t of this.builders.values())if(await(t==null?void 0:t.consume(e)))return!0;return!1}}function J({subThreads:b,layers:e,scene:t,removeLayerTexture:r}){let o;for(const a of b)try{a.destroy()}catch(i){o||(o=i)}for(const a of e){const i=a.parent;if(i)try{r(a,i)}catch(n){o||(o=n)}try{a.remove()}catch(n){o||(o=n)}}try{t.remove()}catch(a){o||(o=a)}if(o)throw o}const ee=4;class te{constructor(e={}){u(this,"pendingFrames",new Map);u(this,"failedCanvases",new Set);u(this,"tailFrameCount");u(this,"requestFrame");u(this,"cancelFrame");u(this,"onReadbackError");u(this,"frameHandle");u(this,"destroyed",!1);this.tailFrameCount=Math.max(1,Math.floor(e.tailFrameCount??ee)),this.requestFrame=e.requestFrame??(t=>requestAnimationFrame(t)),this.cancelFrame=e.cancelFrame??(t=>cancelAnimationFrame(t)),this.onReadbackError=e.onReadbackError}markRendered(e){this.destroyed||(this.pendingFrames.set(e,this.tailFrameCount),this.schedule())}destroy(){this.destroyed||(this.destroyed=!0,this.frameHandle!==void 0&&(this.cancelFrame(this.frameHandle),this.frameHandle=void 0),this.pendingFrames.clear(),this.failedCanvases.clear())}schedule(){this.destroyed||this.frameHandle!==void 0||this.pendingFrames.size===0||(this.frameHandle=this.requestFrame(()=>this.flushFrame()))}flushFrame(){var e,t;if(this.frameHandle=void 0,!this.destroyed){for(const[r,o]of this.pendingFrames){if(!r.isConnected||r.width<=0||r.height<=0){this.pendingFrames.delete(r);continue}try{(e=r.getContext("2d"))==null||e.getImageData(0,0,1,1)}catch(a){this.failedCanvases.has(r)||(this.failedCanvases.add(r),(t=this.onReadbackError)==null||t.call(this,a))}o<=1?this.pendingFrames.delete(r):this.pendingFrames.set(r,o-1)}this.schedule()}}}class se{constructor(e,t){u(this,"viewId");u(this,"fullLayer");u(this,"topLayer");u(this,"localLayer");u(this,"serviceLayer");u(this,"snapshotFullLayer");u(this,"vNodes");u(this,"master");u(this,"opt");u(this,"cameraOpt");u(this,"scene");u(this,"localWork");u(this,"serviceWork");u(this,"topWork");u(this,"taskUpdateCameraId");u(this,"taskUpdateCameraResolve");u(this,"debounceUpdateCameraId");u(this,"activeCameraSettledRender");u(this,"activeCameraTaskContext");u(this,"debounceUpdateCache",new Set);u(this,"mainThreadPostId");u(this,"destroyed",!1);u(this,"readbackScheduler");u(this,"restoreLayerRenderCallbacks",[]);u(this,"viewOwner");u(this,"viewGeneration");u(this,"combinePostMsg",new Set);u(this,"methodBuilder");u(this,"cacheImages",new Map);u(this,"imageResolveMap",new Map);this.viewId=e,this.opt=t,this.viewOwner=t.viewOwner,this.viewGeneration=t.viewGeneration,this.scene=this.createScene({...t.canvasOpt,container:t.container}),this.master=t.master;const r=s.DefaultAppliancePluginExtrasOptions.bufferSize.full,o=s.DefaultAppliancePluginExtrasOptions.bufferSize.sub;this.fullLayer=this.createLayer("fullLayer",this.scene,{...t.layerOpt,bufferSize:this.viewId===s.Main_View_Id?r:o*2}),this.topLayer=this.createLayer("topLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),this.localLayer=this.createLayer("localLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),this.serviceLayer=this.createLayer("serviceLayer",this.scene,{...t.layerOpt,bufferSize:(this.viewId===s.Main_View_Id,o),contextType:"2d"}),t.mainThreadRenderMode==="readback"&&this.enableCanvas2DReadback([this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent]),this.vNodes=new s.VNodeManager(e,this.scene);const a={thread:this,vNodes:this.vNodes};this.localWork=new G(a),this.serviceWork=new q(a),this.topWork=new x(a),this.vNodes.init(this.fullLayer),this.methodBuilder=new j([s.EmitEventType.CopyNode,s.EmitEventType.SetColorNode,s.EmitEventType.DeleteNode,s.EmitEventType.RotateNode,s.EmitEventType.ScaleNode,s.EmitEventType.TranslateNode,s.EmitEventType.ZIndexNode,s.EmitEventType.SetFontStyle,s.EmitEventType.SetPoint,s.EmitEventType.SetLock,s.EmitEventType.SetShapeOpt]).registerForMainThread(this)}getCachedImages(e){var t;return(t=this.cacheImages.get(e))==null?void 0:t.imageSource}getCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())if(t===e&&r.imageSource)return r.imageSource}deleteCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())r.workId===e&&(this.closeImageSource(r.imageSource),this.cacheImages.delete(t))}clearCacheImages(){this.cacheImages.forEach(e=>this.closeImageSource(e.imageSource)),this.cacheImages.clear()}closeImageSource(e){if(!(!("close"in e)||typeof e.close!="function"))try{e.close()}catch{}}clearImageResolveMap(e){this.imageResolveMap.forEach(({timer:t,resolve:r,reject:o},a)=>{t&&clearTimeout(t),e!==void 0?o==null||o(e):r==null||r(a)}),this.imageResolveMap.clear()}post(e){this.destroyed||(this.combinePostMsg.add(e),this.runBatchPostData())}reportRendererBusinessError(e,t){const r=s.toRendererBusinessError(e,t);r.reported||(r.reported=!0,this.post({sp:[{type:s.EPostMessageType.ReportError,viewId:this.viewId,viewGeneration:this.viewGeneration,reportErrorCode:"RENDERER_RUNTIME_ERROR",reportStage:r.stage,reportError:r.message,reportString:s.formatRendererBusinessError(r,t,{viewId:this.viewId,renderer:"mainThread"})}]}))}updateDpr(e){this.scene.displayRatio=e}async on(e){var t,r,o,a,i;if(this.destroyed){try{(t=e.imageBitmap)==null||t.close()}catch{}return}if(!await this.methodBuilder.consumeForMainThread(e)){const{msgType:n,toolsType:c,opt:l,dataType:d,workId:h,workState:p,imageSrc:y,imageBitmap:f,imageElement:S,workIds:k,isLockSentEventCursor:E,requestId:w}=e,m=h==null?void 0:h.toString();switch(n){case s.EPostMessageType.UpdateDpr:D.isNumber(e.dpr)&&this.updateDpr(e.dpr);break;case s.EPostMessageType.AuthClear:{const{clearUids:T,localUid:g}=e;this.vNodes.setCanClearUids(T),this.vNodes.setLocalUid(g);break}case s.EPostMessageType.Destroy:this.destroy();break;case s.EPostMessageType.Clear:this.clearAll();break;case s.EPostMessageType.ServiceSyncCommit:{if(this.destroyed)break;const T=[(r=this.fullLayer)==null?void 0:r.parent,(o=this.topLayer)==null?void 0:o.parent,(a=this.localLayer)==null?void 0:a.parent,(i=this.serviceLayer)==null?void 0:i.parent].filter(Boolean);try{await s.waitForRendererBusiness((async()=>{await s.flushServiceRenderBarrier(this.serviceWork,T)})(),{business:"service-sync-commit",stage:"flush-and-prepare-render",timeoutMs:5e3})}catch(g){throw s.toRendererBusinessError(g,{business:"service-sync-commit",stage:"flush-and-prepare-render"})}if(this.destroyed)break;this.post({sp:[{type:s.EPostMessageType.ServiceSyncCommit,viewId:this.viewId,viewGeneration:this.viewGeneration,scenePath:e.scenePath,serviceSyncId:e.serviceSyncId,serviceRevision:e.serviceRevision}]});break}case s.EPostMessageType.UpdateCamera:try{await s.runCameraUpdateWithTimeout(e.cameraTaskId,async T=>{this.activeCameraTaskContext=T;try{await this.updateCamera(e,T)}finally{this.activeCameraTaskContext===T&&(this.activeCameraTaskContext=void 0)}})}catch(T){throw this.cameraOpt=void 0,this.cancelCameraSettledRender(),T}break;case s.EPostMessageType.UpdateTools:if(c&&l){const T={toolsType:c,toolsOpt:l};this.topWork.canUseTopLayer(c)?this.topWork.setToolsOpt(T):this.localWork.setToolsOpt(T)}break;case s.EPostMessageType.CreateWork:if(m&&l&&c){if(this.topWork.canUseTopLayer(c)){this.topWork.getToolsOpt()||this.topWork.setToolsOpt({toolsType:c,toolsOpt:l}),this.topWork.setWorkOptions(m,l);break}this.localWork.getToolsOpt()||this.localWork.setToolsOpt({toolsType:c,toolsOpt:l}),this.localWork.setWorkOptions(m,l)}break;case s.EPostMessageType.DrawWork:p===s.EventWorkState.Done&&d===s.EDataType.Local?(await this.consumeDrawAll(d,e),c===s.EToolsKey.LaserPen&&E&&this.post({sp:[{type:s.EPostMessageType.None,isLockSentEventCursor:E}]})):await this.consumeDraw(d,e);break;case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:if(c&&this.topWork.canUseTopLayer(c)){await this.consumeDrawAll(d,e);break}await this.consumeFull(d,e);break;case s.EPostMessageType.RemoveNode:await this.removeNode(e);return;case s.EPostMessageType.Select:d===s.EDataType.Local||h===s.Storage_Selector_key?await this.localWork.updateFullSelectWork(e):d===s.EDataType.Service&&this.serviceWork.runSelectWork(e);break;case s.EPostMessageType.CursorBlur:this.localWork.cursorBlur();return;case s.EPostMessageType.CursorHover:this.localWork.cursorHover(e);break;case s.EPostMessageType.GetTextActive:d===s.EDataType.Local&&this.localWork.checkTextActive(e);break;case s.EPostMessageType.GetImageBitMap:if(y&&(f||S)&&h){const T=this.imageResolveMap.get(y);if(!T||T.requestId!==w){this.closeImageSource(f||S);break}const g=h.toString();this.deleteCachedImagesByWorkId(g),this.cacheImages.set(y,{imageSource:f||S,workId:g});const{resolve:M,timer:W}=T;W&&clearTimeout(W),M&&M(y)}break;case s.EPostMessageType.GetVNodeInfo:if(h&&k){const T=k.map(g=>this.vNodes.get(g));this.post({sp:[{type:s.EPostMessageType.GetVNodeInfo,dataType:s.EDataType.Local,workId:h,vInfo:T}]})}break}}}getIconSize(e,t,r){const o=e*r,a=t*r;return o<=50||a<=50?[50,50]:o<=100||a<=100?[100,100]:o<=200||a<=200?[200,200]:o<=400||a<=400?[400,400]:o<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(e){const{toolsType:t,opt:r,workId:o,requestId:a}=e;if(t===s.EToolsKey.Image&&r&&o){const i=o.toString(),{src:n,type:c,width:l,height:d,strokeColor:h}=r;if(!n||!c||!l||!d)return;let p=n;if(c===s.EImageType.Iconify){const[m,T]=this.getIconSize(l,d,this.opt.displayer.dpr);p=s.getIconImageSrc(n,m,T,h)}if(this.cacheImages.has(p)){const m=this.getCachedImages(p);if(m)return m}const f=this.imageResolveMap.get(p);if(f)return await f.promise,this.getCachedImages(p);let S,k;const E=new Promise((m,T)=>{S=m,k=T}),w={resolve:S,reject:k,timer:void 0,requestId:a,promise:E};return w.timer=setTimeout(()=>{this.imageResolveMap.get(p)===w&&S(p)},5e3),this.imageResolveMap.set(p,w),this.opt.post({sp:[{imageSrc:p,workId:i,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!1,requestId:a,type:s.EPostMessageType.GetImageBitMap}]}),await E,this.imageResolveMap.get(p)===w&&this.imageResolveMap.delete(p),this.getCachedImages(p)}}async removeNode(e){const{dataType:t,workId:r,removeIds:o}=e,a=o||[];if(r&&a.push(r.toString()),a.length)for(const i of a){if(i===s.Storage_Selector_key){await this.localWork.removeSelector(e);continue}t===s.EDataType.Local?this.localWork.removeWork(e):t===s.EDataType.Service&&this.serviceWork.removeWork(e),await this.localWork.colloctEffectSelectWork(e)}}async consumeFull(e,t){const r=await this.localWork.colloctEffectSelectWork(t);r&&e===s.EDataType.Local&&await this.localWork.consumeFull(r),r&&e===s.EDataType.Service&&this.serviceWork.consumeFull(r)}setCameraOpt(e){this.cameraOpt=e;const{scale:t,centerX:r,centerY:o,width:a,height:i}=e;(a!==this.scene.width||i!==this.scene.height)&&this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[t,t]),this.fullLayer.setAttribute("translate",[-r,-o]),this.topLayer.setAttribute("scale",[t,t]),this.topLayer.setAttribute("translate",[-r,-o]),this.localLayer.setAttribute("scale",[t,t]),this.localLayer.setAttribute("translate",[-r,-o]),this.serviceLayer.setAttribute("scale",[t,t]),this.serviceLayer.setAttribute("translate",[-r,-o])}runBatchPostData(){this.destroyed||this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}combinePostData(){var a;this.mainThreadPostId=void 0;const e=[];let t,r,o;for(const i of this.combinePostMsg.values()){if((a=i.sp)!=null&&a.length)for(const n of i.sp){const c={...n,viewId:n.viewId||this.viewId,viewGeneration:n.viewGeneration??this.viewGeneration};let l=!1;for(const d of e)if(D.isEqual(c,d)){l=!0;break}l||e.push(c)}D.isNumber(i.fullWorkerDrawCount)&&(t=i.fullWorkerDrawCount),D.isNumber(i.consumeCount)&&(r=i.consumeCount,o=i.consumeWorkId)}return this.combinePostMsg.clear(),{sp:e,fullWorkerDrawCount:t,consumeCount:r,consumeWorkId:o,viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner}}combinePost(){var r,o;if(this.destroyed){this.mainThreadPostId=void 0,this.combinePostMsg.clear();return}const e=this.combinePostData(),t=(r=e.sp)==null?void 0:r.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker||a.collectUndoTicker||a.eraseTxnPhase);t!=null&&t.length?e.sp=t.map(a=>({...a,viewId:a.viewId||this.viewId,viewGeneration:a.viewGeneration??this.viewGeneration})):delete e.sp,e.consumeCount===void 0&&(delete e.consumeCount,delete e.consumeWorkId),e.fullWorkerDrawCount===void 0&&delete e.fullWorkerDrawCount,!this.destroyed&&(e!=null&&e.consumeCount||e!=null&&e.fullWorkerDrawCount||(o=e.sp)!=null&&o.length)&&this.opt.post(e)}clearAll(){this.cancelCameraSettledRender(),this.debounceUpdateCache.clear(),this.fullLayer.children.length&&(this.fullLayer.parent.children.forEach(e=>{e.name!=="viewport"&&e.remove()}),s.removeAllChildren(this.fullLayer,this.fullLayer.parent)),this.clearCacheImages(),this.clearImageResolveMap(),this.localWork.clearAll(),this.topWork.clearAll(),this.serviceWork.clearAll(),this.vNodes.clear(),this.post({sp:[{type:s.EPostMessageType.Clear}]})}async consumeDrawAll(e,t){const{toolsType:r,workId:o}=t;if(o){const a=o.toString();if(r&&this.topWork.canUseTopLayer(r)){e===s.EDataType.Local&&(this.topWork.getLocalWorkShape(o.toString())||this.topWork.createLocalWork(t)),await this.topWork.consumeDrawAll(t);return}e===s.EDataType.Local&&(this.localWork.getWorkShape(a)||this.localWork.createLocalWork(t),await this.localWork.consumeDrawAll(t,this.serviceWork))}}async consumeDraw(e,t){const{opt:r,workId:o,toolsType:a}=t;if(o&&a&&r){const i=o.toString();if(this.topWork.canUseTopLayer(a)){e===s.EDataType.Local&&(this.topWork.getLocalWorkShape(i)||this.topWork.createLocalWork(t)),this.topWork.consumeDraw(t);return}e===s.EDataType.Local?(this.localWork.getWorkShape(i)||this.localWork.createLocalWork(t),await this.localWork.consumeDraw(t,this.serviceWork)):e===s.EDataType.Service&&this.serviceWork.consumeDraw(t);return}}async updateCamera(e,t){var d,h;const{cameraOpt:r,scenePath:o,cameraTaskId:a}=e;let i=!1;const n=this.cameraOpt,c=!!(r&&D.isEqual(n,r));let l=!1;if(r&&c){const p=!!this.activeCameraSettledRender;if(this.retargetCameraSettledRender(a))return;if(!p){D.isNumber(a)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:a});return}l=!0}if(r&&(!c||l)){this.cancelCameraSettledRender();const p=!n||n.scale!==r.scale||n.centerX!==r.centerX||n.centerY!==r.centerY||n.width!==r.width||n.height!==r.height;if(this.taskUpdateCameraId&&(clearTimeout(this.taskUpdateCameraId),this.taskUpdateCameraId=void 0,(d=this.taskUpdateCameraResolve)==null||d.call(this,!1),this.taskUpdateCameraResolve=void 0),o){let m;do{m=[];for(const[g,M]of this.localWork.getWorkShapes().entries())switch(M.toolsType){case s.EToolsKey.Text:case s.EToolsKey.BitMapEraser:case s.EToolsKey.PencilEraser:case s.EToolsKey.Eraser:case s.EToolsKey.Selector:case s.EToolsKey.LaserPen:break;default:g!==s.Cursor_Hover_Id&&g!==s.Storage_Selector_key&&m.push(`${g}:${M.toolsType}`);break}if(t&&(t.stage="blocking-works",t.blockingWorks=m),!m.length)break;if(!await new Promise(g=>{this.taskUpdateCameraResolve=g,this.taskUpdateCameraId=setTimeout(()=>{this.taskUpdateCameraId=void 0,this.taskUpdateCameraResolve=void 0,g(!0)},s.Task_Time_Interval)})||t!=null&&t.aborted)return}while(m.length);t&&(t.stage="update-camera",t.blockingWorks=void 0)}if(t!=null&&t.aborted)return;const y=new Map;for(const[m,T]of this.vNodes.getNodesByType(s.EToolsKey.Text).entries()){const g=T.rect;y.set(m,D.cloneDeep(g))}for(const[m,T]of this.vNodes.gethasEraserNodes().entries())y.set(m,D.cloneDeep(T.rect));const f=new Set(y.keys());let S=!1;if(this.localWork.hasSelector()){const m=(h=this.localWork.getSelector())==null?void 0:h.selectIds;if(m){S=!0;for(const T of m)f.add(T)}}let k=!1;if(this.serviceWork.selectorWorkShapes.size)for(const m of this.serviceWork.selectorWorkShapes.values()){const T=m.selectIds;if(T){k=!0;for(const g of T)f.add(g)}}if(this.setCameraOpt(r),this.vNodes.curNodeMap.size){this.vNodes.clearTarget(),this.vNodes.updateHighLevelNodesRect(f);for(const[g,M]of y.entries()){const W=this.vNodes.get(g);if(W){const C=M,I=W.rect,v=this.getSceneRect(),R=s.getRectMatrixrRelation(C,v),P=s.getRectMatrixrRelation(I,v);let N=l;(R!==P||C.w!==I.w||C.h!==I.h||P===s.EMatrixrRelationType.intersect)&&(N=!0);const{toolsType:L,opt:O}=W,A=O.eraserlines&&O.eraserlines.length>0||!!O.eraserFaces;(N||p&&A)&&(L===s.EToolsKey.Text||A)&&this.debounceUpdateCache.add(g)}}if(S&&this.localWork.reRenderSelector(),k)for(const[g,M]of this.serviceWork.selectorWorkShapes.entries())this.serviceWork.runSelectWork({workId:g,selectIds:M.selectIds,msgType:s.EPostMessageType.Select,dataType:s.EDataType.Service,viewId:this.viewId});i=!0;const m={cancelled:!1,cameraTaskId:a,context:t};this.activeCameraSettledRender=m;const T=()=>!this.destroyed&&!m.cancelled&&this.activeCameraSettledRender===m&&!(t!=null&&t.aborted);this.debounceUpdateCameraId=setTimeout(async()=>{var g;this.debounceUpdateCameraId=void 0;try{if(!T())return;const M=[];for(const I of this.debounceUpdateCache.values()){const v=(g=this.fullLayer)==null?void 0:g.getElementsByName(I)[0],R=this.vNodes.get(I);if(R){const{toolsType:P,opt:N}=R;if(v||P!==s.EToolsKey.Text){const L=this.localWork.setFullWork({toolsType:P,opt:N,workId:I});if(L){if(P===s.EToolsKey.Text)M.push(L.consumeServiceAsync({isFullWork:!0,replaceId:I,boxRect:this.getSceneRect(),isActive:T}));else if(N.eraserlines&&N.eraserlines.length>0||N.eraserFaces){const O=L.consumeService({op:R.op,isFullWork:!0,replaceId:I,workState:s.EventWorkState.Done});this.localWork.clearWorkShapeNodeCache(I),M.push(Promise.resolve(O))}}}}this.debounceUpdateCache.delete(I)}if(await Promise.all(M),!T())return;this.vNodes.updateLowLevelNodesRect(),this.vNodes.clearHighLevelIds();const W=[this.fullLayer.parent.prepareRender,this.topLayer.parent.prepareRender,this.localLayer.parent.prepareRender,this.serviceLayer.parent.prepareRender];if(m.renderLayers=[this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent],await Promise.all(W),m.renderLayers=void 0,!T())return;const C=m.cameraTaskId;D.isNumber(C)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:C})}catch(M){if(!T())return;const W={code:"RENDERER_BUSINESS_ERROR",business:"updateCamera",message:M instanceof Error?M.message:String(M),stage:"camera-settled-render",workerType:"mainThread"},C=m.cameraTaskId;if(D.isNumber(C))try{this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraTaskId:C,cameraTaskStatus:"failed",cameraTaskError:W})}catch(I){console.error(`[cameraSettledRender] failed ACK post failed viewId=${this.viewId} taskId=${C}`,I)}}finally{m.renderLayers=void 0,this.activeCameraSettledRender===m&&(this.activeCameraSettledRender=void 0)}},s.Task_Time_Interval)}const E=[this.fullLayer.parent,this.topLayer.parent,this.localLayer.parent,this.serviceLayer.parent],w=Promise.all(E.map(m=>m.prepareRender));if(t&&!await s.waitForCameraUpdateTask(t,w,"prepare-render")){E.filter(T=>T.cancelPendingRender()).forEach(T=>T.render()),w.catch(()=>{});return}if(t||await w,t!=null&&t.aborted)return;!i&&D.isNumber(a)&&this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,cameraSettledTaskId:a})}}getSceneRect(){const{width:e,height:t}=this.scene;return{x:0,y:0,w:Math.floor(e),h:Math.floor(t)}}createScene(e){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...e,autoRender:!0,id:this.viewId,contextType:"2d"})}createLayer(e,t,r){const{width:o,height:a}=r,i=`canvas-${e}`,n=t.layer(i,{...r,offscreen:!1}),c=new s.Group({anchor:[.5,.5],pos:[o*.5,a*.5],size:[o,a],name:"viewport",id:e});return n.append(c),c}enableCanvas2DReadback(e){this.readbackScheduler=new te({onReadbackError:t=>this.opt.master.Logger.warn(`[Appliance]: [main-thread-readback] stage=failed viewId=${this.viewId} error=${t instanceof Error?t.message:String(t)}`)});for(const t of e){const r=t.render,o=(...a)=>{var c;const i=r.apply(t,a),n=t.canvas;return n instanceof HTMLCanvasElement&&((c=this.readbackScheduler)==null||c.markRendered(n)),i};t.render=o,this.restoreLayerRenderCallbacks.push(()=>{t.render===o&&(t.render=r)})}}disableCanvas2DReadback(){var e;(e=this.readbackScheduler)==null||e.destroy(),this.readbackScheduler=void 0;for(const t of this.restoreLayerRenderCallbacks.splice(0))t()}updateScene(e){this.scene.attr({...e});const{width:t,height:r}=e;this.scene.width=t,this.scene.height=r,this.updateLayer({width:t,height:r})}updateLayer(e){const{width:t,height:r}=e;this.fullLayer.parent.setAttribute("width",t),this.fullLayer.parent.setAttribute("height",r),this.fullLayer.setAttribute("size",[t,r]),this.fullLayer.setAttribute("pos",[t*.5,r*.5]),this.topLayer.parent.setAttribute("width",t),this.topLayer.parent.setAttribute("height",r),this.topLayer.setAttribute("size",[t,r]),this.topLayer.setAttribute("pos",[t*.5,r*.5]),this.localLayer.parent.setAttribute("width",t),this.localLayer.parent.setAttribute("height",r),this.localLayer.setAttribute("size",[t,r]),this.localLayer.setAttribute("pos",[t*.5,r*.5]),this.serviceLayer.parent.setAttribute("width",t),this.serviceLayer.parent.setAttribute("height",r),this.serviceLayer.setAttribute("size",[t,r]),this.serviceLayer.setAttribute("pos",[t*.5,r*.5])}cancelCameraSettledRender(){var t;this.debounceUpdateCameraId!==void 0&&(clearTimeout(this.debounceUpdateCameraId),this.debounceUpdateCameraId=void 0);const e=this.activeCameraSettledRender;e&&(e.cancelled=!0,(t=e.renderLayers)==null||t.forEach(r=>r.cancelPendingRender()),this.activeCameraSettledRender=void 0)}retargetCameraSettledRender(e){var r;if(!D.isNumber(e))return!1;const t=this.activeCameraSettledRender;return!t||t.cancelled||(r=t.context)!=null&&r.aborted?!1:(t.cameraTaskId=e,!0)}cancelCameraBlockingWait(){this.taskUpdateCameraId!==void 0&&(clearTimeout(this.taskUpdateCameraId),this.taskUpdateCameraId=void 0);const e=this.taskUpdateCameraResolve;this.taskUpdateCameraResolve=void 0,e==null||e(!1)}destroy(){var e,t;this.destroyed||(this.destroyed=!0,this.disableCanvas2DReadback(),(t=(e=this.activeCameraTaskContext)==null?void 0:e.abort)==null||t.call(e),this.activeCameraTaskContext=void 0,this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.combinePostMsg.clear(),this.cancelCameraBlockingWait(),this.cancelCameraSettledRender(),this.debounceUpdateCache.clear(),this.clearCacheImages(),this.clearImageResolveMap(new Error(`main-thread view destroyed: ${this.viewId}`)),this.vNodes.clear(),J({subThreads:[this.localWork,this.serviceWork,this.topWork],layers:[this.fullLayer,this.topLayer,this.localLayer,this.serviceLayer],scene:this.scene,removeLayerTexture:(r,o)=>s.removeTexture(r,o)}))}}class re{constructor(e,t){u(this,"viewId");u(this,"fullLayer");u(this,"master");u(this,"opt");u(this,"viewOwner");u(this,"viewGeneration");u(this,"scene");u(this,"mainThreadPostId");u(this,"combinePostMsg",new Set);u(this,"destroyed",!1);u(this,"workShapes",new Map);u(this,"cacheImages",new Map);u(this,"imageResolveMap",new Map);u(this,"activeRequest");this.viewId=e,this.opt=t,this.viewOwner=t.viewOwner,this.viewGeneration=t.viewGeneration,this.scene=this.createScene({...t.canvasOpt,container:t.container}),this.master=t.master,this.fullLayer=this.createLayer("fullLayer",this.scene,{...t.layerOpt,bufferSize:this.viewId===s.Main_View_Id?6e3:3e3,contextType:"2d"})}getCachedImages(e){var t;return(t=this.cacheImages.get(e))==null?void 0:t.imageSource}getCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())if(t===e&&r.imageSource)return r.imageSource}deleteCachedImagesByWorkId(e){for(const[t,r]of this.cacheImages.entries())r.workId===e&&(this.closeImageSource(r.imageSource),this.cacheImages.delete(t))}clearCacheImages(){this.cacheImages.forEach(e=>this.closeImageSource(e.imageSource)),this.cacheImages.clear()}closeImageSource(e){if(e&&!(!("close"in e)||typeof e.close!="function"))try{e.close()}catch{}}releaseMessageImageBitmap(e){this.closeImageSource(e==null?void 0:e.imageBitmap)}releaseBatchImageBitmaps(e){var t,r;(t=e==null?void 0:e.render)==null||t.forEach(o=>this.closeImageSource(o.imageBitmap)),(r=e==null?void 0:e.sp)==null||r.forEach(o=>this.releaseMessageImageBitmap(o))}clearImageResolveMap(){this.imageResolveMap.forEach(({timer:e,resolve:t},r)=>{e&&clearTimeout(e),t==null||t(r)}),this.imageResolveMap.clear()}post(e){if(this.destroyed){this.releaseBatchImageBitmaps(e);return}this.combinePostMsg.add(e),this.runBatchPostData()}reportRequestFailure(e,t,r,o,a){const i=o instanceof Error?o.message:String(o);try{this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner,sp:[{type:s.EPostMessageType.ReportError,viewId:this.viewId,scenePath:r,requestId:t,reportBusiness:e,reportStage:a,reportError:i,reportString:`[SnapshotThreadImpl] ${e} failed; stage=${a}; requestId=${t||"unknown"}; error=${i}`}]})}catch(n){console.error(`[SnapshotThreadImpl] ${e} failure report failed`,n)}}async on(e){if(this.destroyed){this.closeImageSource(e.imageBitmap);return}const{msgType:t,imageSrc:r,imageBitmap:o,imageElement:a,workId:i,requestId:n}=e;switch(t){case s.EPostMessageType.Snapshot:{this.activeRequest={business:"snapshot",scenePath:e.scenePath,requestId:e.requestId};try{await this.getSnapshot(e),this.flushPendingPost()}catch(c){this.destroyed||this.reportRequestFailure("snapshot",e.requestId,e.scenePath,c,"render")}finally{this.activeRequest=void 0,this.destroy()}return}case s.EPostMessageType.BoundingBox:{this.activeRequest={business:"bounding-box",scenePath:e.scenePath,requestId:e.requestId};try{await this.getBoundingRect(e),this.flushPendingPost()}catch(c){this.destroyed||this.reportRequestFailure("bounding-box",e.requestId,e.scenePath,c,"compute")}finally{this.activeRequest=void 0,this.destroy()}return}case s.EPostMessageType.GetImageBitMap:{if(r&&(o||a)&&i){const c=i.toString(),l=this.imageResolveMap.get(r);if(!l||l.requestId!==n){this.closeImageSource(o||a);break}if(this.deleteCachedImagesByWorkId(c),this.cacheImages.set(r,{imageSource:o||a,workId:c}),l){const{resolve:d,timer:h}=l;h&&clearTimeout(h),d&&d(r)}}break}}}getIconSize(e,t,r){const o=e*r,a=t*r;return o<=50||a<=50?[50,50]:o<=100||a<=100?[100,100]:o<=200||a<=200?[200,200]:o<=400||a<=400?[400,400]:o<=800||a<=800?[800,800]:[1600,1600]}async loadImageBitMap(e){const{toolsType:t,opt:r,workId:o,requestId:a}=e;if(t===s.EToolsKey.Image&&r&&o){const i=o.toString(),{src:n,type:c,width:l,height:d,strokeColor:h}=r;if(!n||!c||!l||!d)return;let p=n;if(c===s.EImageType.Iconify){const[w,m]=this.getIconSize(l,d,this.opt.displayer.dpr);p=s.getIconImageSrc(n,w,m,h)}if(this.cacheImages.has(p)){const w=this.getCachedImages(p);if(w)return w}const f=this.imageResolveMap.get(p);if(f)return await f.promise,this.getCachedImages(p);let S;const k=new Promise(w=>{S=w}),E={resolve:S,timer:void 0,requestId:a,promise:k};return E.timer=setTimeout(()=>{this.imageResolveMap.get(p)===E&&S(p)},5e3),this.imageResolveMap.set(p,E),this.opt.post({viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner,sp:[{imageSrc:p,workId:i,viewId:this.viewId,isgl:!!this.fullLayer.parent.gl,isSubWorker:!0,type:s.EPostMessageType.GetImageBitMap,requestId:a}]}),await k,this.imageResolveMap.get(p)===E&&this.imageResolveMap.delete(p),this.getCachedImages(p)}}createWorkShapeNode(e){return s.getShapeInstance({...e,fullLayer:this.fullLayer,drawLayer:void 0})}setFullWork(e){const{workId:t,opt:r,toolsType:o}=e;if(t&&r&&o){const a=t.toString();let i;return t&&this.workShapes.has(a)?(i=this.workShapes.get(a),i==null||i.setWorkOptions(r)):i=this.createWorkShapeNode({toolsOpt:r,toolsType:o,workId:a}),i?(this.workShapes.set(a,i),i):void 0}}async runFullWork(e){var o;const t=this.setFullWork(e),r=e.ops&&s.transformToNormalData(e.ops);if(t){let a,i;const n=(o=t.getWorkId())==null?void 0:o.toString();return t.toolsType===s.EToolsKey.BackgroundSVG?a=t.consumeService({isFullWork:!0,replaceId:n}):t.toolsType===s.EToolsKey.Image?a=await t.consumeServiceAsync({isFullWork:!0,worker:this,requestId:e.requestId}):t.toolsType===s.EToolsKey.Text?a=await t.consumeServiceAsync({isFullWork:!0,replaceId:n,isDrawLabel:!0}):(a=t.consumeService({op:r,isFullWork:!0,replaceId:n}),i=(e==null?void 0:e.updateNodeOpt)&&t.updataOptService(e.updateNodeOpt)),s.computRect(a,i)}}async getSnapshot(e){const{scenePath:t,scenes:r,cameraOpt:o,w:a,h:i,requestId:n}=e;if(!(t&&r&&o))throw new Error("snapshot input is incomplete");this.setCameraOpt(o);for(const[l,d]of Object.entries(r))if(d!=null&&d.type)switch(d==null?void 0:d.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const{opt:h}=d,p={...d,opt:h,workId:l,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId,requestId:n};await this.runFullWork(p);break}}let c;a&&i&&(c={resizeWidth:a,resizeHeight:i}),await this.getSnapshotRender({scenePath:t,options:c,requestId:n})}getSceneRect(){const{width:e,height:t}=this.scene;return{x:0,y:0,w:Math.floor(e),h:Math.floor(t)}}getRectImageBitmap(e,t){const r=Math.floor(e.x*this.opt.displayer.dpr),o=Math.floor(e.y*this.opt.displayer.dpr),a=e.w>0&&Math.floor(e.w*this.opt.displayer.dpr||1)||1,i=e.h>0&&Math.floor(e.h*this.opt.displayer.dpr||1)||1;return createImageBitmap(this.fullLayer.parent.canvas,r,o,a,i,t)}async getSnapshotRender(e){var i;const{scenePath:t,options:r,requestId:o}=e;((i=this.fullLayer)==null?void 0:i.parent).render();const a=await this.getRectImageBitmap(this.getSceneRect(),r);if(a){if(this.destroyed){this.closeImageSource(a);return}this.post({sp:[{type:s.EPostMessageType.Snapshot,scenePath:t,imageBitmap:a,viewId:this.viewId,index:0,requestId:o}]}),this.fullLayer&&!this.destroyed&&s.removeAllChildren(this.fullLayer,this.fullLayer.parent)}}async getBoundingRect(e){const{scenePath:t,scenes:r,cameraOpt:o,requestId:a}=e;if(!(t&&r&&o))throw new Error("bounding-box input is incomplete");this.setCameraOpt(o);let i;for(const[n,c]of Object.entries(r))if(c!=null&&c.type)switch(c==null?void 0:c.type){case s.EPostMessageType.UpdateNode:case s.EPostMessageType.FullWork:{const l=await this.runFullWork({...c,workId:n,msgType:s.EPostMessageType.FullWork,dataType:s.EDataType.Service,viewId:this.viewId,requestId:a});i=s.computRect(i,l);break}}this.post({sp:[{type:s.EPostMessageType.BoundingBox,scenePath:t,rect:i||{x:0,y:0,w:0,h:0},viewId:this.viewId,requestId:a}]})}setCameraOpt(e){const{scale:t,centerX:r,centerY:o,width:a,height:i}=e;this.updateScene({width:a,height:i}),this.fullLayer.setAttribute("scale",[t,t]),this.fullLayer.setAttribute("translate",[-r,-o])}runBatchPostData(){this.destroyed||this.mainThreadPostId||(this.mainThreadPostId=requestAnimationFrame(this.combinePost.bind(this)))}flushPendingPost(){!this.combinePostMsg.size||this.destroyed||(this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.combinePost())}combinePostData(){var t;this.mainThreadPostId=void 0;const e=[];for(const r of this.combinePostMsg.values())if((t=r.sp)!=null&&t.length)for(const o of r.sp){let a=!1;for(const i of e)if(s.isEqual(o,i)){a=!0;break}a?this.releaseMessageImageBitmap(o):e.push(o)}return this.combinePostMsg.clear(),{sp:e}}combinePost(){var r,o;if(this.destroyed){this.mainThreadPostId=void 0,this.releaseBatchImageBitmaps({sp:[...this.combinePostMsg].flatMap(a=>a.sp||[])}),this.combinePostMsg.clear();return}const e=this.combinePostData(),t=(r=e.sp)==null?void 0:r.filter(a=>a.type!==s.EPostMessageType.None||a.isLockSentEventCursor||a.needUndoTicker);if(e.sp&&t){const a=new Set(t);e.sp.filter(i=>!a.has(i)).forEach(i=>this.releaseMessageImageBitmap(i))}if(t!=null&&t.length?e.sp=t.map(a=>a.viewId?a:{...a,viewId:this.viewId}):delete e.sp,!this.destroyed&&((o=e.sp)!=null&&o.length))try{this.opt.post({...e,viewId:this.viewId,viewGeneration:this.viewGeneration,viewOwner:this.viewOwner})}catch(a){throw this.releaseBatchImageBitmaps(e),a}else this.releaseBatchImageBitmaps(e)}createScene(e){return new s.Scene({displayRatio:this.opt.displayer.dpr,depth:!1,desynchronized:!0,...e,autoRender:!1,contextType:"2d"})}createLayer(e,t,r){const{width:o,height:a}=r,i=`canvas-${e}`,n=t.layer(i,r),c=new s.Group({anchor:[.5,.5],pos:[o*.5,a*.5],size:[o,a],name:"viewport",id:e});return n.append(c),c}updateScene(e){this.scene.attr({...e});const{width:t,height:r}=e;this.scene.width=t,this.scene.height=r,this.updateLayer({width:t,height:r})}updateLayer(e){const{width:t,height:r}=e;this.fullLayer.parent.setAttribute("width",t),this.fullLayer.parent.setAttribute("height",r),this.fullLayer.setAttribute("size",[t,r]),this.fullLayer.setAttribute("pos",[t*.5,r*.5])}destroy(e){if(this.destroyed)return;e&&this.activeRequest&&this.reportRequestFailure(this.activeRequest.business,this.activeRequest.requestId,this.activeRequest.scenePath,new Error(`snapshot request ${e}`),e),this.activeRequest=void 0,this.destroyed=!0,this.mainThreadPostId!==void 0&&(cancelAnimationFrame(this.mainThreadPostId),this.mainThreadPostId=void 0),this.releaseBatchImageBitmaps({sp:[...this.combinePostMsg].flatMap(o=>o.sp||[])}),this.combinePostMsg.clear();const t=[];this.workShapes.forEach(o=>{try{o.clearTmpPoints()}catch(a){t.push(a)}}),this.workShapes.clear();try{this.clearCacheImages()}catch(o){t.push(o)}try{this.clearImageResolveMap()}catch(o){t.push(o)}const r=this.fullLayer.parent;try{this.fullLayer.remove()}catch(o){t.push(o)}try{r&&s.removeTexture(this.fullLayer,r)}catch(o){t.push(o)}try{this.scene.remove()}catch(o){t.push(o)}if(t.length)throw t[0]}}class oe{constructor(e){u(this,"mainThreadMap",new Map);u(this,"cameraRenderQueueByView",new Map);u(this,"viewGenerationById",new Map);u(this,"viewOwnerById",new Map);u(this,"ownerSequence",0);u(this,"snapshotThreadsByRequest",new Map);u(this,"destroyed",!1);u(this,"master");u(this,"post",e=>{if(this.destroyed){this.releaseBatchResources(e);return}if(e.viewId){const y=this.viewOwnerById.get(e.viewId),f=this.viewGenerationById.get(e.viewId);if(e.viewOwner!==void 0&&(!y||y!==e.viewOwner)||e.viewGeneration!==void 0&&f!==void 0&&f!==e.viewGeneration){this.releaseBatchResources(e);return}}const{fullWorkerDrawCount:t,sp:r,workerTasksqueueCount:o,cameraTaskId:a,cameraTaskStatus:i,cameraTaskError:n,cameraSettledTaskId:c,viewId:l,viewGeneration:d,consumeCount:h,consumeWorkId:p}=e;if(l&&s.isNumber(a)){const y=s.normalizeCameraTaskError(i,n,"mainThread");y?this.master.failCameraTask(l,a,y,d):this.master.ackCameraTask(l,a,d)}l&&s.isNumber(c)&&this.master.ackCameraSettledTask(l,c,d),this.master.isBusy&&s.isNumber(o)&&this.master.setWorkerTasksqueueCount(o),s.isNumber(t)&&this.master.setMaxDrawCount(t),s.isNumber(h)&&this.master.setConsumeCount(h,p),r&&this.master.collectorSyncData(e.viewOwner===void 0?r:r.map(y=>y.type===s.EPostMessageType.GetImageBitMap&&y.viewOwner===void 0?{...y,viewOwner:e.viewOwner}:y))});this.master=e}enqueueViewTask(e,t){const o=(this.cameraRenderQueueByView.get(e)||Promise.resolve()).catch(()=>{}).then(()=>this.destroyed?void 0:t());return this.cameraRenderQueueByView.set(e,o),o}isStaleViewMessage(e){if(!e.viewId||e.viewId===s.Storage_ViewId_ALL||e.viewGeneration===void 0)return!1;const t=this.viewGenerationById.get(e.viewId);return t!==void 0&&e.viewGeneration<t}discardView(e){for(const[r,o]of[...this.snapshotThreadsByRequest.entries()])o.thread.viewId===e&&this.disposeSnapshotThread(r,o.thread,"view-destroyed");const t=this.mainThreadMap.get(e);try{t==null||t.destroy()}catch(r){this.master.Logger.error(`[Appliance]: MainThread View discard failed; viewId=${e}; error=${r instanceof Error?r.message:String(r)}`)}this.mainThreadMap.delete(e),this.cameraRenderQueueByView.delete(e),this.viewOwnerById.delete(e),this.viewGenerationById.set(e,(this.viewGenerationById.get(e)||0)+1)}destroy(){if(this.destroyed)return;this.destroyed=!0;const e=[];for(const[t,r]of[...this.snapshotThreadsByRequest.entries()])try{this.disposeSnapshotThread(t,r.thread)}catch(o){e.push(`snapshot-thread: ${o instanceof Error?o.message:String(o)}`)}this.snapshotThreadsByRequest.clear();for(const t of this.mainThreadMap.values())try{t.destroy()}catch(r){e.push(`view=${t.viewId}: ${r instanceof Error?r.message:String(r)}`)}this.mainThreadMap.clear(),this.cameraRenderQueueByView.clear(),this.viewOwnerById.clear(),e.length&&this.master.Logger.error(`[Appliance]: MainThread destroy completed with cleanup errors: ${e.join("; ")}`)}createMainThread(e,t){return new se(e,t)}createSnapshotThread(e,t){return new re(e,t)}getSnapshotRequestKey(e){return e.requestId||`${e.viewId}\0${e.scenePath||""}\0${e.msgType}`}disposeSnapshotThread(e,t,r){const o=this.snapshotThreadsByRequest.get(e);if(!(!o||o.thread!==t)){this.snapshotThreadsByRequest.delete(e);try{t.destroy(r)}finally{o.surface.remove()}}}releaseMessageBitmap(e){var t;try{(t=e.imageBitmap)==null||t.close()}catch{}}releaseBatchResources(e){var t,r;(t=e.render)==null||t.forEach(o=>this.releaseImageBitmap(o.imageBitmap)),(r=e.sp)==null||r.forEach(o=>this.releaseImageBitmap(o.imageBitmap))}releaseImageBitmap(e){var t;try{(t=e==null?void 0:e.close)==null||t.call(e)}catch{}}async consume(e){var t,r,o;if(this.destroyed){e.forEach(a=>this.releaseMessageBitmap(a));return}for(const a of e.values()){if(this.destroyed){this.releaseMessageBitmap(a);return}const{msgType:i,viewId:n,tasksqueue:c,mainTasksqueueCount:l,cameraTaskId:d,layerOpt:h,offscreenCanvasOpt:p,cameraOpt:y,isSubWorker:f}=a;if(this.isStaleViewMessage(a)){this.releaseMessageBitmap(a);continue}if(i===s.EPostMessageType.Console){console.log(this);continue}if(i===s.EPostMessageType.Init){const w=a.viewGeneration??(this.viewGenerationById.get(n)||0)+1;await this.enqueueViewTask(n,async()=>{var I,v,R;const m=this.viewGenerationById.get(n);if(m!==void 0&&w<m)return;this.viewGenerationById.set(n,w);const T=a.viewOwner||`${n}:${w}:${++this.ownerSequence}`,g=(I=this.master.control.viewContainerManager.getView(n))==null?void 0:I.displayer,M=g==null?void 0:g.canvasContainerRef.current;if(!g||!M||!h||!p){this.viewOwnerById.delete(n);return}this.viewOwnerById.set(n,T);const W=this.mainThreadMap.get(n);W==null||W.destroy();const C=this.createMainThread(n,{displayer:g,container:M,layerOpt:h,master:this.master,canvasOpt:p,viewOwner:T,viewGeneration:w,mainThreadRenderMode:((R=(v=this.master.control)==null?void 0:v.renderingCompatibilityDecision)==null?void 0:R.mainThreadRenderMode)??"normal",post:P=>this.post({...P,viewId:P.viewId||n,viewGeneration:P.viewGeneration??w,viewOwner:T})});this.mainThreadMap.set(n,C),C&&y&&C.setCameraOpt(y),this.post({sp:[{type:s.EPostMessageType.Init,viewId:n,viewGeneration:w}]})});continue}if(i===s.EPostMessageType.Snapshot||i===s.EPostMessageType.BoundingBox){const w=(t=this.master.control.viewContainerManager.getView(n))==null?void 0:t.displayer,m=(r=this.master.control.viewContainerManager.mainView)==null?void 0:r.displayer,T=(o=m==null?void 0:m.snapshotContainerRef)==null?void 0:o.current;if(w&&T&&y){const g=this.getSnapshotRequestKey(a),M=this.snapshotThreadsByRequest.get(g);M&&this.disposeSnapshotThread(g,M.thread,"replaced");const W=document.createElement("div");W.style.width=`${y.width}px`,W.style.height=`${y.height}px`,T.append(W);const C={...s.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:y.width,height:y.height},I={...s.ViewContainerManager.defaultScreenCanvasOpt,width:y.width,height:y.height},v=this.createSnapshotThread(n,{displayer:w,container:W,layerOpt:C,master:this.master,canvasOpt:I,post:this.post,viewOwner:this.viewOwnerById.get(n),viewGeneration:this.viewGenerationById.get(n)});this.snapshotThreadsByRequest.set(g,{thread:v,surface:W}),v.on(a).then(()=>{this.disposeSnapshotThread(g,v)}).catch(R=>{this.master.Logger.error(`[Appliance]: snapshot render failed; viewId=${n}; error=${R instanceof Error?R.message:String(R)}`),this.disposeSnapshotThread(g,v)});continue}this.post({viewId:n,viewGeneration:this.viewGenerationById.get(n),viewOwner:this.viewOwnerById.get(n),sp:[{type:s.EPostMessageType.ReportError,viewId:n,scenePath:a.scenePath,requestId:a.requestId,reportBusiness:i===s.EPostMessageType.Snapshot?"snapshot":"bounding-box",reportStage:"surface-unavailable",reportError:"snapshot surface is unavailable",reportString:`[MainThreadManager] ${i===s.EPostMessageType.Snapshot?"snapshot":"bounding-box"} surface is unavailable; viewId=${n}; requestId=${a.requestId||"unknown"}`}]});continue}if(i===s.EPostMessageType.GetImageBitMap&&f){const w=a.requestId?this.snapshotThreadsByRequest.get(a.requestId):[...this.snapshotThreadsByRequest.values()].find(({thread:m})=>m.viewId===n);w?w.thread.on(a):this.releaseMessageBitmap(a);continue}if(i===s.EPostMessageType.GetImageBitMap){const w=this.mainThreadMap.get(n),m=this.viewGenerationById.get(n),T=this.viewOwnerById.get(n);if(!w||a.viewGeneration!==void 0&&a.viewGeneration!==m||a.viewOwner!==void 0&&a.viewOwner!==T||this.mainThreadMap.get(n)!==w){this.releaseMessageBitmap(a);continue}await w.on(a);continue}if(i===s.EPostMessageType.TasksQueue&&(c!=null&&c.size)){const w=c.get(n),m=this.mainThreadMap.get(n),T=this.viewGenerationById.get(n),g=this.viewOwnerById.get(n);let M;if(w&&m)try{await this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==T||this.viewOwnerById.get(n)!==g||this.mainThreadMap.get(n)!==m||await m.on(w)})}catch(W){if(w.msgType!==s.EPostMessageType.UpdateCamera)throw W;const C=s.isCameraUpdateTimeoutError(W);M={code:C?"RENDERER_BUSINESS_TIMEOUT":"RENDERER_BUSINESS_ERROR",business:"updateCamera",message:W instanceof Error?W.message:String(W),elapsedMs:C?W.elapsedMs:void 0,stage:C?W.stage:"update-camera",blockingWorks:C?W.blockingWorks:void 0,workerType:"mainThread"}}if(M&&s.isNumber(d)){this.post({viewId:n,viewGeneration:T,viewOwner:g,cameraTaskId:d,cameraTaskStatus:M.code==="RENDERER_BUSINESS_TIMEOUT"?"timeout":"failed",cameraTaskError:M});continue}l&&s.isNumber(d)&&this.post({workerTasksqueueCount:l,cameraTaskId:d,viewId:n,viewGeneration:T,viewOwner:g});continue}if(n===s.Storage_ViewId_ALL){const w=[...this.mainThreadMap.entries()];for(const[m,T]of w){const g=this.enqueueViewTask(m,async()=>{this.mainThreadMap.get(m)===T&&(i===s.EPostMessageType.Destroy?(T.destroy(),this.mainThreadMap.delete(m),this.viewOwnerById.delete(m),this.viewGenerationById.set(m,(this.viewGenerationById.get(m)||0)+1)):await T.on(a))});await g,this.cameraRenderQueueByView.get(m)===g&&this.cameraRenderQueueByView.delete(m)}continue}const S=this.mainThreadMap.get(n);if(i===s.EPostMessageType.Destroy&&!S){await this.enqueueViewTask(n,async()=>{this.viewGenerationById.set(n,a.viewGeneration??(this.viewGenerationById.get(n)||0)+1),this.viewOwnerById.delete(n)});continue}if(!S)continue;const k=this.viewGenerationById.get(n),E=this.enqueueViewTask(n,async()=>{this.viewGenerationById.get(n)!==k||this.mainThreadMap.get(n)!==S||await S.on(a)});i===s.EPostMessageType.Destroy&&(await E,this.mainThreadMap.get(n)===S&&this.mainThreadMap.delete(n),this.viewOwnerById.delete(n),this.cameraRenderQueueByView.get(n)===E&&this.cameraRenderQueueByView.delete(n),this.viewGenerationById.set(n,a.viewGeneration??(k||0)+1))}}}exports.MainThreadManagerImpl=oe;
@@ -0,0 +1 @@
1
+ "use strict";var L=Object.defineProperty;var C=(n,e,t)=>e in n?L(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var c=(n,e,t)=>C(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("./index-DFo0Gmfx.js"),v=require("lodash");require("white-web-sdk");require("clipper-lib");require("lz-string");require("lineclip");require("xss");require("rbush");require("react-dom");require("react");const O=require("./markmap-runtime-CsBCTpRs.js");class W{constructor(){c(this,"threadEngine")}registerBackgroundThread(e){return this.threadEngine=e,this}}class F extends W{constructor(){super(...arguments);c(this,"emitEventType",d.EmitEventType.CopyNode)}async consume(t){const{msgType:s,dataType:r,emitEventType:a}=t;if(s===d.EPostMessageType.FullWork&&r===d.EDataType.Local&&a===this.emitEventType)return this.consumeForLocalWorker(t),!0}async consumeForLocalWorker(t){var r;const{workId:s}=t;s&&await((r=this.threadEngine)==null?void 0:r.consumeFull(t))}}class R{constructor(e){c(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case d.EmitEventType.CopyNode:return new F}}registerForBackgroundThread(e){return this.builders.forEach(t=>{t&&t.registerBackgroundThread(e)}),this}async consumeForBackgroundThread(e){for(const t of this.builders.values())if(await(t==null?void 0:t.consume(e)))return!0;return!1}}async function A(n){const e=n.querySelectorAll("img"),t=Array.from(e).map(a=>{if(!a.crossOrigin&&a.src&&!a.src.startsWith("data:")&&(a.crossOrigin="anonymous",a.complete)){const i=a.src;a.src="",a.src=i}return a.complete&&a.crossOrigin?Promise.resolve():new Promise(i=>{a.onload=()=>{i(void 0)},a.onerror=()=>{i(void 0)}})});return n.querySelectorAll("svg").forEach(a=>{a.querySelectorAll("image").forEach(o=>{o.href&&!o.href.baseVal.startsWith("data:")&&(o.getAttribute("crossorigin")||o.setAttribute("crossorigin","anonymous"),t.push(new Promise(l=>{const h=new Image;h.crossOrigin="anonymous",h.onload=()=>{l(void 0)},h.onerror=()=>{l(void 0)},h.src=o.href.baseVal})))})}),await Promise.all(t)}async function $(n){const s=Date.now();let r=!1;for(;Date.now()-s<5e3;){const a=n.querySelectorAll("path");if(a.length>0&&(r=Array.from(a).some(i=>{const o=i.getAttribute("d")||"";return o!=="M0,0C0,0,0,0,0,0"&&o.length>10}),r))break;await new Promise(i=>setTimeout(i,50))}}async function x(n){const e=n.querySelectorAll("svg");if(!e.length)return;const t=[];for(let s=0;s<e.length;s++){const r=e[s];t.push($(r))}await Promise.all(t)}async function P(n){if(n.querySelectorAll("svg[data-type='mermaid']").length>0){const s=Date.now();let r=!1;for(;Date.now()-s<5e3&&!r;){const a=n.querySelectorAll("foreignObject");if(a.length>0){let i=!0;for(const o of Array.from(a)){const l=parseFloat(o.getAttribute("width")||"0"),h=parseFloat(o.getAttribute("height")||"0");if(o.querySelector(".mermaid-container")&&(l<50||h<50)){i=!1;break}}if(i){r=!0;break}}else r=!0;await new Promise(i=>setTimeout(i,50))}}}async function V(n,e={}){const{width:t=n.offsetWidth,height:s=n.offsetHeight}=e,r=n.offsetWidth||t,a=n.offsetHeight||s;try{const{loadSvgToImageLib:i,getSvgToImageLib:o}=await Promise.resolve().then(()=>require("./svgToImageLoader-B3gIDAQo.js"));let l=o();if(!l)try{l=await i()}catch(u){return console.error("[loadSvgToImageLib] error: ",u),null}const h=n.style.width,y=n.style.height,w=n.style.display;n.style.width||(n.style.width=`${r}px`),n.style.height||(n.style.height=`${a}px`),(!n.style.display||n.style.display==="none")&&(n.style.display="block");try{await new Promise(p=>{requestAnimationFrame(()=>{requestAnimationFrame(()=>{p()})})});const u=await l.toPng(n,{width:r,height:a,quality:1});return n.style.width=h,n.style.height=y,n.style.display=w,new Promise(p=>{const g=new Image;g.crossOrigin="anonymous",g.onload=()=>{p(g)},g.onerror=()=>{p(null)},g.src=u})}catch(u){return n.style.width=h,n.style.height=y,n.style.display=w,console.error("[divToImageElement] error: ",u),null}}catch(i){return console.error("[divToImageElement] error: ",i),null}}class U{constructor(e){c(this,"toolsType",d.EToolsKey.BackgroundSVG);c(this,"vNodes");c(this,"workOptions");c(this,"workId");c(this,"markmapInstance",null);c(this,"isDestroyed",!1);c(this,"element");c(this,"manager");c(this,"scenePath");c(this,"trackBackgroundImageLoad");c(this,"reloadSourceUrl");const{vNodes:t,workId:s,toolsOpt:r,manager:a,scenePath:i,trackBackgroundImageLoad:o=!0}=e;this.workId=s,this.vNodes=t,this.workOptions=r,this.manager=a,this.scenePath=i,this.trackBackgroundImageLoad=o,this.element=this.createElement(),this.manager.fullLayer.appendChild(this.element),this.vNodes.setInfo(this.workId,{workShape:this})}get fullLayer(){return this.manager.fullLayer}get collector(){return this.manager.master.control.collector}async init(){await this.render()}createElement(){const{type:e}=this.workOptions;let t;return e===d.ESVGType.markmap?(t=document.createElementNS("http://www.w3.org/2000/svg","svg"),t.classList.add("svg")):(t=document.createElement("img"),t.classList.add("img")),t.id=this.workId,t.setAttribute("data-id",this.workId),t}async render(e){this.isDestroyed||!this.element||!this.element.parentNode||(this.updateElementPosition(e),await this.updateSvg(e))}isSameSize(e){const{width:t,height:s}=e,{width:r,height:a}=this.workOptions,i=t*this.manager.camera.scale,o=s*this.manager.camera.scale,l=r*this.manager.camera.scale,h=a*this.manager.camera.scale;return i===l&&o===h}isSamePosition(e){const{centerX:t,centerY:s}=e,{centerX:r,centerY:a}=this.workOptions,i=this.manager.getPagePoint(r,a),o=this.manager.getPagePoint(t,s);return v.isEqual(o,i)}isSameZIndex(e){const{zIndex:t}=e,{zIndex:s}=this.workOptions;return t===s}isSameState(e){const{state:t}=e,{state:s}=this.workOptions;return v.isEqual(t,s)}isSameData(e){const{data:t}=e,{data:s}=this.workOptions;return v.isEqual(t,s)}updateElementPosition(e){if(this.isDestroyed||!this.element||!this.fullLayer)return;const{centerX:t,centerY:s,width:r,height:a,zIndex:i}=this.workOptions,o=this.manager.getPagePoint(t,s),l=r*this.manager.camera.scale,h=a*this.manager.camera.scale;(!e||e&&!this.isSameSize(e))&&(this.element.setAttribute("width",`${l}`),this.element.setAttribute("height",`${h}`),this.element.style.width=`${l}px`,this.element.style.height=`${h}px`),(!e||e&&!this.isSamePosition(e))&&(this.element.style.left=`${o.x}px`,this.element.style.top=`${o.y}px`),(!e||e&&!this.isSameZIndex(e))&&(this.element.style.zIndex=(i||0).toString())}async updateSvg(e){const{type:t,state:s}=this.workOptions;if(t===d.ESVGType.markmap){const r=O.getMarkmapRuntimeOrThrow(),{data:a}=this.workOptions;if(this.markmapInstance||(this.markmapInstance=r.createMarkmap(this.element,this.manager.markmapOptions),this.markmapInstance.handleClick=async(l,h)=>{var u,p,g;(u=this.markmapInstance)==null||u.toggleNode(h);const y=this.serializeData((p=this.markmapInstance)==null?void 0:p.state.data);this.setWorkOptions({...this.workOptions,state:y},!1),r.checkNodeHasMermaid(h)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),this.scenePath&&this.collector&&((g=this.collector)==null||g.dispatch({type:d.EPostMessageType.UpdateNode,workId:this.workId,opt:this.workOptions,isSync:!0,viewId:this.manager.viewId,scenePath:this.scenePath}))}),e&&this.isSameState(e)&&this.isSameSize(e)&&this.isSameData(e))return;const i=r.transform(this.workId,a);let{root:o}=i;a&&r.hasMermaidCodeBlock(a)&&(o=r.injectMermaidHtml(o,a,this.workId));try{s&&Array.isArray(s)&&this.transformState(s,o),await this.markmapInstance.setData(o),!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance&&(window.markmapInstance=this.markmapInstance,a&&r.hasMermaidCodeBlock(a)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),await this.fit(!e||e&&!this.isSameData(e)))}catch(l){console.error("[updateSvg] error: ",l)}}else{const{src:r,crossOrigin:a}=this.workOptions,i=this.reloadSourceUrl??r;if(this.element.crossOrigin=v.isString(a)?a:"anonymous",!this.trackBackgroundImageLoad){this.element.src=i,await new Promise((o,l)=>{this.element.onload=()=>o(),this.element.onerror=()=>l()});return}await this.manager.master.control.backgroundImageLoadCoordinator.load({viewId:this.manager.viewId,scenePath:this.scenePath,resourceId:this.workId,src:i,image:this.element,isActive:()=>!this.isDestroyed&&this.manager.master.control.viewContainerManager.getCurScenePath(this.manager.viewId)===this.scenePath,onReloadUrl:o=>{this.reloadSourceUrl=o}})}}async fit(e=!0){var t;if(!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance){const s=O.getMarkmapRuntimeOrThrow();e&&this.element&&await s.waitForImagesInForeignObjects(this.element),await((t=this.markmapInstance)==null?void 0:t.fit()),this.element&&s.isSafari()&&s.hasMermaidSvg(this.element)&&(await P(this.element),await s.transformMermaidSvgToMarkmapSvg(this.element))}}serializeData(e){var r;const t=[e],s=[];for(;t.length>0;){const a=t.pop();a&&(a!=null&&a.children&&t.push(...a.children),s.push(((r=a==null?void 0:a.payload)==null?void 0:r.fold)||0))}return s}transformState(e,t){const s=[t];for(;s.length>0;){const r=s.pop();r&&(r!=null&&r.children&&s.push(...r.children),r.payload?r.payload.fold=e.shift():e.shift())}}async updateCamera(){this.updateElementPosition(),await this.fit(!1)}async setWorkOptions(e,t=!0){if(!v.isEqual(this.workOptions,e)){const s=v.clone(this.workOptions),r="src"in this.workOptions?this.workOptions.src:void 0,a="src"in e?e.src:void 0;r!==a&&(this.reloadSourceUrl=void 0),this.workOptions=e,t&&await this.render(s)}}destroy(){this.isDestroyed=!0,this.reloadSourceUrl=void 0,this.trackBackgroundImageLoad&&this.manager.master.control.backgroundImageLoadCoordinator.cancelResource(this.manager.viewId,this.scenePath,this.workId),this.element.remove()}getRectFromLayer(){const e=this.element.getBoundingClientRect();return{x:e.x,y:e.y,w:e.width,h:e.height}}}function b(n){const{toolsType:e,...t}=n;switch(e){case d.EToolsKey.BackgroundSVG:return new U(t);default:return}}class q{constructor(e){c(this,"viewId");c(this,"fullLayer");c(this,"curNodeMap");this.viewId=e,this.curNodeMap=new d.ObserverMap}init(e){this.fullLayer=e}get(e){return this.curNodeMap.get(e)}setInfo(e,t){const s=this.curNodeMap.get(e)||{name:e,workShape:t.workShape};t.workShape&&(s.workShape=t.workShape),this.curNodeMap.set(e,s)}getNodeRectFormShape(e){const t=this.curNodeMap.get(e);if(t&&t.workShape)return t.workShape.getRectFromLayer()}delete(e){const t=this.curNodeMap.get(e);t&&t.workShape.destroy(),this.curNodeMap.delete(e)}clear(){for(const e of this.curNodeMap.values())e.workShape.destroy();this.curNodeMap.clear()}}class D{constructor(e,t){c(this,"opt");c(this,"viewId");c(this,"fullLayer");c(this,"vNodes");c(this,"master");c(this,"cameraOpt");c(this,"methodBuilder");c(this,"destroyed",!1);c(this,"updateCamera",v.throttle(async e=>{if(this.destroyed)return;const{cameraOpt:t}=e;t&&!v.isEqual(this.cameraOpt,t)&&await this.setCameraOpt(t)},100));this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.methodBuilder=new R([d.EmitEventType.CopyNode]).registerForBackgroundThread(this),this.vNodes=new q(e),this.vNodes.init(this.fullLayer)}get camera(){return this.cameraOpt||{scale:1,centerX:0,centerY:0,width:0,height:0}}get view(){var e;return(e=this.master.control.viewContainerManager.getView(this.viewId))==null?void 0:e.viewData}get markmapOptions(){return this.master.control.pluginOptions.extras.markmap.options}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:i,height:o}=this.camera;return{x:(e-r)*s+i/2,y:(t-a)*s+o/2}}async setCameraOpt(e){if(!this.destroyed){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){if(this.destroyed)return;const{workShape:s}=t;s&&await s.updateCamera()}}}clearAll(){this.vNodes.clear()}canUseFullLayer(e){return e===d.EToolsKey.BackgroundSVG}async consumeFull(e){if(this.destroyed)return;const{toolsType:t,opt:s,workId:r,scenePath:a}=e;if(r!=null&&r.toString()&&t&&this.canUseFullLayer(t))switch(t){case d.EToolsKey.BackgroundSVG:await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a});break}}async setFullWork(e){const{workId:t,opt:s,toolsType:r,scenePath:a}=e;if(t&&s&&r&&a){const i=t.toString();let o;const l=this.vNodes.get(i);return!l||!l.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:d.EToolsKey.BackgroundSVG,workId:i,scenePath:a}),o&&await o.init()):(o=l.workShape,await o.setWorkOptions(s)),o}}createWorkShapeNode(e){return b({...e,vNodes:this.vNodes,manager:this})}removeWork(e){const{workId:t}=e,s=t==null?void 0:t.toString();s&&this.removeNode(s)}removeNode(e){this.vNodes.delete(e)}async on(e){if(!this.destroyed&&!await this.methodBuilder.consumeForBackgroundThread(e)){if(this.destroyed)return;const{msgType:t,toolsType:s}=e;switch(t){case d.EPostMessageType.Destroy:{this.destroy();break}case d.EPostMessageType.Clear:{this.clearAll();break}case d.EPostMessageType.UpdateCamera:{this.updateCamera(e);break}case d.EPostMessageType.UpdateTools:{this.toggleFullLayer(s===d.EToolsKey.Clicker);break}case d.EPostMessageType.BackgroundSVGUpdate:case d.EPostMessageType.UpdateNode:case d.EPostMessageType.FullWork:{s&&this.canUseFullLayer(s)&&await this.consumeFull(e);break}case d.EPostMessageType.BackgroundSVGDelete:{this.removeWork(e);break}}}}toggleFullLayer(e){this.destroyed||this.fullLayer.classList.toggle("appliance-plugin-background-svg-active",e)}destroy(){this.destroyed||(this.destroyed=!0,this.updateCamera.cancel(),this.vNodes.clear())}}class H{constructor(e,t){c(this,"viewId");c(this,"fullLayer");c(this,"master");c(this,"vNodes");c(this,"cameraOpt");c(this,"opt");c(this,"workShapes",new Map);c(this,"destroyed",!1);c(this,"activeRequest");this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.vNodes=new q(e),this.vNodes.init(this.fullLayer)}get camera(){return this.cameraOpt||{scale:1,centerX:0,centerY:0,width:0,height:0}}get view(){var e;return(e=this.master.control.viewContainerManager.getView(this.viewId))==null?void 0:e.viewData}get markmapOptions(){return this.master.control.pluginOptions.extras.markmap.options}reportRequestFailure(e,t,s,r,a){const i=r instanceof Error?r.message:String(r);try{this.opt.post({sp:[{type:d.EPostMessageType.ReportError,viewId:this.viewId,scenePath:s,requestId:t,reportBusiness:e,reportStage:a,reportError:i,reportString:`[BackgroundSnapshotThread] ${e} failed; stage=${a}; requestId=${t||"unknown"}; error=${i}`}]})}catch(o){console.error(`[BackgroundSnapshotThread] ${e} failure report failed`,o)}}createOffscreenCanvas(e){const{width:t,height:s}=e.canvasOpt,r=new OffscreenCanvas(e.canvasOpt.width,e.canvasOpt.height);r.width=t,r.height=s}async setCameraOpt(e){if(!this.destroyed){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){if(this.destroyed)return;const{workShape:s}=t;s&&await s.updateCamera()}}}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:i,height:o}=this.camera;return{x:(e-r)*s+i/2,y:(t-a)*s+o/2}}async getSnapshot(e){var i;if(this.destroyed)return;const{scenePath:t,scenes:s,cameraOpt:r,requestId:a}=e;this.activeRequest={business:"snapshot",scenePath:t,requestId:a};try{if(!(t&&s&&r))throw new Error("snapshot input is incomplete");await this.setCameraOpt(r);for(const[l,h]of Object.entries(s)){if(this.destroyed)return;if(h!=null&&h.type&&(h==null?void 0:h.toolsType)===d.EToolsKey.BackgroundSVG)switch(h==null?void 0:h.type){case d.EPostMessageType.UpdateNode:case d.EPostMessageType.FullWork:{const{opt:y}=h,w={...h,opt:y,workId:l,msgType:d.EPostMessageType.FullWork,dataType:d.EDataType.Service,viewId:this.viewId,scenePath:t,requestId:a};await this.runFullWork(w);break}default:break}}if(await P(this.fullLayer),this.destroyed||(await A(this.fullLayer),this.destroyed)||(await x(this.fullLayer),this.destroyed))return;const o=await V(this.fullLayer);if(!this.destroyed&&o)this.opt.post({sp:[{type:d.EPostMessageType.Snapshot,scenePath:t,imageElement:o,viewId:this.viewId,index:1,requestId:a}]});else if(!this.destroyed)throw new Error("snapshot image element is empty")}catch(o){this.destroyed||this.reportRequestFailure("snapshot",a,t,o,"render")}finally{((i=this.activeRequest)==null?void 0:i.requestId)===a&&(this.activeRequest=void 0)}}createWorkShapeNode(e){return b({...e,vNodes:this.vNodes,manager:this,trackBackgroundImageLoad:!1})}async setFullWork(e){const{workId:t,opt:s,toolsType:r,scenePath:a}=e;if(t&&s&&r&&a){const i=t.toString();let o;const l=this.vNodes.get(i);return!l||!l.workShape?(o=this.createWorkShapeNode({toolsOpt:s,toolsType:d.EToolsKey.BackgroundSVG,workId:i,scenePath:a}),o&&await o.init()):(o=l.workShape,await o.setWorkOptions(s)),o}}async runFullWork(e){if(this.destroyed)return;const{toolsType:t,opt:s,workId:r,scenePath:a}=e;await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a})}destroy(e){this.destroyed||(e&&this.activeRequest&&this.reportRequestFailure("snapshot",this.activeRequest.requestId,this.activeRequest.scenePath,new Error(`snapshot request ${e}`),e),this.activeRequest=void 0,this.destroyed=!0,this.fullLayer.innerHTML="",this.fullLayer.style.width="",this.fullLayer.style.height="")}}class K{constructor(e){c(this,"backgroundThreadMap",new Map);c(this,"snapshotThreadsByRequest",new Map);c(this,"destroyed",!1);c(this,"master");c(this,"post",e=>{if(this.destroyed)return;const{sp:t}=e;t&&this.master.collectorSyncData(t)});this.master=e,this.backgroundThreadMap=new Map}createBackgroundThread(e,t){return new D(e,t)}createSnapshotThread(e,t){return new H(e,t)}getSnapshotRequestKey(e){return e.requestId||`${e.viewId}\0${e.scenePath||""}\0${e.msgType}`}disposeSnapshotThread(e,t,s){const r=this.snapshotThreadsByRequest.get(e);if(!(!r||r.thread!==t)){this.snapshotThreadsByRequest.delete(e);try{t.destroy(s)}finally{r.surface.remove()}}}async consume(e){var t,s,r,a,i;if(!this.destroyed)for(const o of e.values()){if(this.destroyed)return;const{msgType:l,viewId:h,layerOpt:y,offscreenCanvasOpt:w,cameraOpt:u,tasksqueue:p}=o;if(l===d.EPostMessageType.Console){console.log(this);continue}if(l===d.EPostMessageType.Init){const m=(t=this.master.control.viewContainerManager.getView(h))==null?void 0:t.displayer,T=(s=m==null?void 0:m.backgroundContainerRef)==null?void 0:s.current;if(m&&T&&y&&w){const f=this.backgroundThreadMap.get(h);f==null||f.destroy();const k=this.createBackgroundThread(h,{displayer:m,container:T,layerOpt:y,master:this.master,canvasOpt:w,post:this.post});this.backgroundThreadMap.set(h,k),k&&u&&await k.setCameraOpt(u)}continue}if(l===d.EPostMessageType.Snapshot){const m=(r=this.master.control.viewContainerManager.getView(h))==null?void 0:r.displayer,f=(i=((a=this.master.control.viewContainerManager.mainView)==null?void 0:a.displayer).backgroundSnapshotContainerRef)==null?void 0:i.current;if(m&&f&&u){const k=this.getSnapshotRequestKey(o),E=this.snapshotThreadsByRequest.get(k);E&&this.disposeSnapshotThread(k,E.thread,"replaced");const S=document.createElement("div");S.style.width=`${u.width}px`,S.style.height=`${u.height}px`,f.append(S);const N={...d.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:u.width,height:u.height},B={...d.ViewContainerManager.defaultScreenCanvasOpt,width:u.width,height:u.height},I=this.createSnapshotThread(h,{displayer:m,container:S,layerOpt:N,master:this.master,canvasOpt:B,post:this.post});this.snapshotThreadsByRequest.set(k,{thread:I,surface:S}),I.getSnapshot(o).catch(M=>{this.master.Logger.error(`[Appliance]: background snapshot render failed; viewId=${h}; error=${M instanceof Error?M.message:String(M)}`)}).finally(()=>{this.disposeSnapshotThread(k,I)});continue}this.post({sp:[{type:d.EPostMessageType.ReportError,viewId:h,scenePath:o.scenePath,requestId:o.requestId,reportBusiness:"snapshot",reportStage:"surface-unavailable",reportError:"background snapshot surface is unavailable",reportString:`[BackgroundThreadManager] snapshot surface is unavailable; viewId=${h}; requestId=${o.requestId||"unknown"}`}]})}if(l===d.EPostMessageType.TasksQueue&&(p!=null&&p.size)){for(const[m,T]of this.backgroundThreadMap.entries()){const f=p.get(m);f&&await T.on(f)}continue}if(h===d.Storage_ViewId_ALL){for(const m of this.backgroundThreadMap.values())await m.on(o);l===d.EPostMessageType.Destroy&&this.backgroundThreadMap.clear();continue}const g=this.backgroundThreadMap.get(h);g&&(await g.on(o),l===d.EPostMessageType.Destroy&&this.backgroundThreadMap.get(h)===g&&this.backgroundThreadMap.delete(h))}}async consumeTargetOne(e,t){if(this.destroyed)return;const s=this.backgroundThreadMap.get(e);s&&await s.on(t)}discardView(e){for(const[s,r]of[...this.snapshotThreadsByRequest.entries()])r.thread.viewId===e&&this.disposeSnapshotThread(s,r.thread,"view-destroyed");const t=this.backgroundThreadMap.get(e);try{t==null||t.destroy()}catch(s){this.master.Logger.error(`[Appliance]: BackgroundThread View discard failed; viewId=${e}; error=${s instanceof Error?s.message:String(s)}`)}this.backgroundThreadMap.delete(e)}destroy(){if(this.destroyed)return;const e=[];for(const[t,s]of[...this.snapshotThreadsByRequest.entries()])try{this.disposeSnapshotThread(t,s.thread,"manager-destroyed")}catch(r){e.push(`snapshot-thread: ${r instanceof Error?r.message:String(r)}`)}this.snapshotThreadsByRequest.clear(),this.destroyed=!0;for(const t of this.backgroundThreadMap.values())try{t.destroy()}catch(s){e.push(`background-thread: ${s instanceof Error?s.message:String(s)}`)}this.backgroundThreadMap.clear(),e.length&&this.master.Logger.error(`[Appliance]: BackgroundThread destroy completed with cleanup errors: ${e.join("; ")}`)}}exports.BackgroundThreadManagerImpl=K;