@netless/appliance-plugin 1.1.41 → 1.1.42-beta.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/appliance-plugin.js +1 -1
- package/dist/appliance-plugin.mjs +17 -16
- package/dist/{bridge-BNKS_R2l.mjs → bridge-B-QptMEy.mjs} +1 -1
- package/dist/{bridge-BxkfdTkq.js → bridge-hRl_DY0c.js} +1 -1
- package/dist/bridge.js +1 -1
- package/dist/bridge.mjs +1 -1
- package/dist/component/textEditor/types.d.ts +2 -0
- package/dist/fullWorker.js +85 -85
- package/dist/{index-WMF2MmW5.mjs → index-1g93HWeU.mjs} +6282 -6246
- package/dist/{index-BoGQFZPO.js → index-B0MSTcdT.js} +1 -1
- package/dist/index-BpRy_vjc.js +570 -0
- package/dist/{index-BpI4eSla.js → index-BtNb2M5H.js} +1 -1
- package/dist/{index-Bellzj9L.mjs → index-BwbqPE3q.mjs} +1 -1
- package/dist/{index-z4Oul31S.mjs → index-C3e6mT0j.mjs} +1 -1
- package/dist/{index-BwKNcV3h.mjs → index-CCO-qEim.mjs} +1 -1
- package/dist/{index-C4uTXXaR.js → index-CgEdhx54.js} +1 -1
- package/dist/index-CgJv1Exy.js +570 -0
- package/dist/{index-COQOIflN.mjs → index-DJS3KHjE.mjs} +6174 -6128
- package/dist/{index-Doaj3rDL.mjs → index-DUVQmCiI.mjs} +1 -1
- package/dist/{index-SwxjyKCD.js → index-vIt18mo2.js} +1 -1
- package/dist/plugin/applianceMultiPlugin.d.ts +1 -1
- package/dist/plugin/applianceSinglePlugin.d.ts +1 -1
- package/dist/plugin/baseApplianceManager.d.ts +3 -3
- package/dist/plugin/renderingCompatibility.d.ts +2 -1
- package/dist/plugin/types.d.ts +12 -4
- package/dist/subWorker.js +61 -61
- package/package.json +2 -1
- package/dist/index-DjDB-MYx.js +0 -570
- package/dist/index-DrGUJkFH.js +0 -570
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
var pe = Object.defineProperty;
|
|
2
2
|
var de = (C, t, e) => t in C ? pe(C, t, { enumerable: !0, configurable: !0, writable: !0, value: e }) : C[t] = e;
|
|
3
3
|
var m = (C, t, e) => de(C, typeof t != "symbol" ? t + "" : t, e);
|
|
4
|
-
import { D as K, e as W, c as y, r as q, b as g, g as X, t as V, a as h, f as ie, M as ue, h as D, i as Y, j as fe, C as H, k as P, l as me, m as ye, n as ke, o as Se, p as J, q as _, E as N, s as j, u as $, v as we, w as ae, x as ne, T as ee, y as te, z as ve, A as ce, G as le, B as se, F as Te, H as z, V as oe, S as Ie } from "./index-
|
|
4
|
+
import { D as K, e as W, c as y, r as q, b as g, g as X, t as V, a as h, f as ie, M as ue, h as D, i as Y, j as fe, C as H, k as P, l as me, m as ye, n as ke, o as Se, p as J, q as _, E as N, s as j, u as $, v as we, w as ae, x as ne, T as ee, y as te, z as ve, A as ce, G as le, B as se, F as Te, H as z, V as oe, S as Ie } from "./index-1g93HWeU.mjs";
|
|
5
5
|
import { cloneDeep as Z, xor as ge, isNumber as G, isEqual as re } from "lodash";
|
|
6
6
|
import "clipper-lib";
|
|
7
7
|
import "lineclip";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var P=Object.defineProperty;var b=(n,e,t)=>e in n?P(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var c=(n,e,t)=>b(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./index-DjDB-MYx.js"),f=require("lodash");require("clipper-lib");require("lz-string");require("lineclip");require("xss");require("rbush");require("react-dom");require("react");class N{constructor(){c(this,"threadEngine")}registerBackgroundThread(e){return this.threadEngine=e,this}}class L extends N{constructor(){super(...arguments);c(this,"emitEventType",h.EmitEventType.CopyNode)}async consume(t){const{msgType:s,dataType:r,emitEventType:a}=t;if(s===h.EPostMessageType.FullWork&&r===h.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 C{constructor(e){c(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case h.EmitEventType.CopyNode:return new L}}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 W(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 o=a.src;a.src="",a.src=o}return a.complete&&a.crossOrigin?Promise.resolve():new Promise(o=>{a.onload=()=>{o(void 0)},a.onerror=()=>{o(void 0)}})});return n.querySelectorAll("svg").forEach(a=>{a.querySelectorAll("image").forEach(i=>{i.href&&!i.href.baseVal.startsWith("data:")&&(i.getAttribute("crossorigin")||i.setAttribute("crossorigin","anonymous"),t.push(new Promise(l=>{const d=new Image;d.crossOrigin="anonymous",d.onload=()=>{l(void 0)},d.onerror=()=>{l(void 0)},d.src=i.href.baseVal})))})}),await Promise.all(t)}async function B(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(o=>{const i=o.getAttribute("d")||"";return i!=="M0,0C0,0,0,0,0,0"&&i.length>10}),r))break;await new Promise(o=>setTimeout(o,50))}}async function F(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(B(r))}await Promise.all(t)}async function I(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 o=!0;for(const i of Array.from(a)){const l=parseFloat(i.getAttribute("width")||"0"),d=parseFloat(i.getAttribute("height")||"0");if(i.querySelector(".mermaid-container")&&(l<50||d<50)){o=!1;break}}if(o){r=!0;break}}else r=!0;await new Promise(o=>setTimeout(o,50))}}}async function A(n,e={}){const{width:t=n.offsetWidth,height:s=n.offsetHeight}=e,r=n.offsetWidth||t,a=n.offsetHeight||s;try{const{loadSvgToImageLib:o,getSvgToImageLib:i}=await Promise.resolve().then(()=>require("./svgToImageLoader-B3gIDAQo.js"));let l=i();if(!l)try{l=await o()}catch(w){return console.error("[loadSvgToImageLib] error: ",w),null}const d=n.style.width,u=n.style.height,k=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 w=await l.toPng(n,{width:r,height:a,quality:1});return n.style.width=d,n.style.height=u,n.style.display=k,new Promise(p=>{const m=new Image;m.crossOrigin="anonymous",m.onload=()=>{p(m)},m.onerror=()=>{p(null)},m.src=w})}catch(w){return n.style.width=d,n.style.height=u,n.style.display=k,console.error("[divToImageElement] error: ",w),null}}catch(o){return console.error("[divToImageElement] error: ",o),null}}class x{constructor(e){c(this,"toolsType",h.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:o,trackBackgroundImageLoad:i=!0}=e;this.workId=s,this.vNodes=t,this.workOptions=r,this.manager=a,this.scenePath=o,this.trackBackgroundImageLoad=i,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===h.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,o=t*this.manager.camera.scale,i=s*this.manager.camera.scale,l=r*this.manager.camera.scale,d=a*this.manager.camera.scale;return o===l&&i===d}isSamePosition(e){const{centerX:t,centerY:s}=e,{centerX:r,centerY:a}=this.workOptions,o=this.manager.getPagePoint(r,a),i=this.manager.getPagePoint(t,s);return f.isEqual(i,o)}isSameZIndex(e){const{zIndex:t}=e,{zIndex:s}=this.workOptions;return t===s}isSameState(e){const{state:t}=e,{state:s}=this.workOptions;return f.isEqual(t,s)}isSameData(e){const{data:t}=e,{data:s}=this.workOptions;return f.isEqual(t,s)}updateElementPosition(e){if(this.isDestroyed||!this.element||!this.fullLayer)return;const{centerX:t,centerY:s,width:r,height:a,zIndex:o}=this.workOptions,i=this.manager.getPagePoint(t,s),l=r*this.manager.camera.scale,d=a*this.manager.camera.scale;(!e||e&&!this.isSameSize(e))&&(this.element.setAttribute("width",`${l}`),this.element.setAttribute("height",`${d}`),this.element.style.width=`${l}px`,this.element.style.height=`${d}px`),(!e||e&&!this.isSamePosition(e))&&(this.element.style.left=`${i.x}px`,this.element.style.top=`${i.y}px`),(!e||e&&!this.isSameZIndex(e))&&(this.element.style.zIndex=(o||0).toString())}async updateSvg(e){const{type:t,state:s}=this.workOptions;if(t===h.ESVGType.markmap){const r=h.getMarkmapRuntimeOrThrow(),{data:a}=this.workOptions;if(this.markmapInstance||(this.markmapInstance=r.createMarkmap(this.element,this.manager.markmapOptions),this.markmapInstance.handleClick=async(l,d)=>{var w,p,m;(w=this.markmapInstance)==null||w.toggleNode(d);const u=this.serializeData((p=this.markmapInstance)==null?void 0:p.state.data);this.setWorkOptions({...this.workOptions,state:u},!1),r.checkNodeHasMermaid(d)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),this.scenePath&&this.collector&&((m=this.collector)==null||m.dispatch({type:h.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 o=r.transform(this.workId,a);let{root:i}=o;a&&r.hasMermaidCodeBlock(a)&&(i=r.injectMermaidHtml(i,a,this.workId));try{s&&Array.isArray(s)&&this.transformState(s,i),await this.markmapInstance.setData(i),!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,o=this.reloadSourceUrl??r;if(this.element.crossOrigin=f.isString(a)?a:"anonymous",!this.trackBackgroundImageLoad){this.element.src=o,await new Promise((i,l)=>{this.element.onload=()=>i(),this.element.onerror=()=>l()});return}await this.manager.master.control.backgroundImageLoadCoordinator.load({viewId:this.manager.viewId,scenePath:this.scenePath,resourceId:this.workId,src:o,image:this.element,isActive:()=>!this.isDestroyed&&this.manager.master.control.viewContainerManager.getCurScenePath(this.manager.viewId)===this.scenePath,onReloadUrl:i=>{this.reloadSourceUrl=i}})}}async fit(e=!0){var t;if(!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance){const s=h.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 I(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(!f.isEqual(this.workOptions,e)){const s=f.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 M(n){const{toolsType:e,...t}=n;switch(e){case h.EToolsKey.BackgroundSVG:return new x(t);default:return}}class O{constructor(e){c(this,"viewId");c(this,"fullLayer");c(this,"curNodeMap");this.viewId=e,this.curNodeMap=new h.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 q{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,"updateCamera",f.throttle(async e=>{const{cameraOpt:t}=e;t&&!f.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 C([h.EmitEventType.CopyNode]).registerForBackgroundThread(this),this.vNodes=new O(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:o,height:i}=this.camera;return{x:(e-r)*s+o/2,y:(t-a)*s+i/2}}async setCameraOpt(e){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){const{workShape:s}=t;s&&await s.updateCamera()}}clearAll(){this.vNodes.clear()}canUseFullLayer(e){return e===h.EToolsKey.BackgroundSVG}async consumeFull(e){const{toolsType:t,opt:s,workId:r,scenePath:a}=e;if(r!=null&&r.toString()&&t&&this.canUseFullLayer(t))switch(t){case h.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 o=t.toString();let i;const l=this.vNodes.get(o);return!l||!l.workShape?(i=this.createWorkShapeNode({toolsOpt:s,toolsType:h.EToolsKey.BackgroundSVG,workId:o,scenePath:a}),i&&await i.init()):(i=l.workShape,await i.setWorkOptions(s)),i}}createWorkShapeNode(e){return M({...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(!await this.methodBuilder.consumeForBackgroundThread(e)){const{msgType:t,toolsType:s}=e;switch(t){case h.EPostMessageType.Destroy:{this.destroy();break}case h.EPostMessageType.Clear:{this.clearAll();break}case h.EPostMessageType.UpdateCamera:{this.updateCamera(e);break}case h.EPostMessageType.UpdateTools:{this.toggleFullLayer(s===h.EToolsKey.Clicker);break}case h.EPostMessageType.BackgroundSVGUpdate:case h.EPostMessageType.UpdateNode:case h.EPostMessageType.FullWork:{s&&this.canUseFullLayer(s)&&await this.consumeFull(e);break}case h.EPostMessageType.BackgroundSVGDelete:{this.removeWork(e);break}}}}toggleFullLayer(e){this.fullLayer.classList.toggle("appliance-plugin-background-svg-active",e)}destroy(){this.vNodes.clear()}}class V{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);this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.vNodes=new O(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}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){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){const{workShape:s}=t;s&&await s.updateCamera()}}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:o,height:i}=this.camera;return{x:(e-r)*s+o/2,y:(t-a)*s+i/2}}async getSnapshot(e){const{scenePath:t,scenes:s,cameraOpt:r}=e;if(t&&s&&r){await this.setCameraOpt(r);for(const[a,o]of Object.entries(s))if(o!=null&&o.type&&(o==null?void 0:o.toolsType)===h.EToolsKey.BackgroundSVG)switch(o==null?void 0:o.type){case h.EPostMessageType.UpdateNode:case h.EPostMessageType.FullWork:{const{opt:i}=o,l={...o,opt:i,workId:a,msgType:h.EPostMessageType.FullWork,dataType:h.EDataType.Service,viewId:this.viewId,scenePath:t};await this.runFullWork(l);break}}try{if(t){await I(this.fullLayer),await W(this.fullLayer),await F(this.fullLayer);const a=await A(this.fullLayer);a&&this.opt.post({sp:[{type:h.EPostMessageType.Snapshot,scenePath:t,imageElement:a,viewId:this.viewId,index:1}]})}}catch(a){const o=a&&a instanceof Error?a.message:a==null?void 0:a.toString();this.opt.post({sp:[{type:h.EPostMessageType.ReportError,reportString:`[SnapshotThreadImpl] getSnapshotRender error: ${o}`}]})}}}createWorkShapeNode(e){return M({...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 o=t.toString();let i;const l=this.vNodes.get(o);return!l||!l.workShape?(i=this.createWorkShapeNode({toolsOpt:s,toolsType:h.EToolsKey.BackgroundSVG,workId:o,scenePath:a}),i&&await i.init()):(i=l.workShape,await i.setWorkOptions(s)),i}}async runFullWork(e){const{toolsType:t,opt:s,workId:r,scenePath:a}=e;await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a})}destroy(){this.fullLayer.innerHTML="",this.fullLayer.style.width="",this.fullLayer.style.height=""}}class U{constructor(e){c(this,"backgroundThreadMap",new Map);c(this,"snapshotThread");c(this,"master");c(this,"post",e=>{const{sp:t}=e;t&&this.master.collectorSyncData(t)});this.master=e,this.backgroundThreadMap=new Map}createBackgroundThread(e,t){return new q(e,t)}createSnapshotThread(e,t){return new V(e,t)}async consume(e){var t,s,r,a,o,i;for(const l of e.values()){const{msgType:d,viewId:u,layerOpt:k,offscreenCanvasOpt:w,cameraOpt:p,tasksqueue:m}=l;if(d===h.EPostMessageType.Console){console.log(this);continue}if(d===h.EPostMessageType.Init){const g=(t=this.master.control.viewContainerManager.getView(u))==null?void 0:t.displayer,v=(s=g==null?void 0:g.backgroundContainerRef)==null?void 0:s.current;if(g&&v&&k&&w){const y=this.backgroundThreadMap.get(u);y==null||y.destroy();const T=this.createBackgroundThread(u,{displayer:g,container:v,layerOpt:k,master:this.master,canvasOpt:w,post:this.post});this.backgroundThreadMap.set(u,T),T&&p&&await T.setCameraOpt(p)}continue}if(d===h.EPostMessageType.Snapshot){const g=(r=this.master.control.viewContainerManager.getView(u))==null?void 0:r.displayer,y=(o=((a=this.master.control.viewContainerManager.mainView)==null?void 0:a.displayer).backgroundSnapshotContainerRef)==null?void 0:o.current;if(g&&y&&p){(i=this.snapshotThread)==null||i.destroy(),y.style.width=`${p.width}px`,y.style.height=`${p.height}px`;const T={...h.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:p.width,height:p.height},E={...h.ViewContainerManager.defaultScreenCanvasOpt,width:p.width,height:p.height};this.snapshotThread=this.createSnapshotThread(u,{displayer:g,container:y,layerOpt:T,master:this.master,canvasOpt:E,post:this.post}),await this.snapshotThread.getSnapshot(l),this.snapshotThread.destroy(),this.snapshotThread=void 0;continue}}if(d===h.EPostMessageType.TasksQueue&&(m!=null&&m.size)){for(const[g,v]of this.backgroundThreadMap.entries()){const y=m.get(g);y&&await v.on(y)}continue}if(u===h.Storage_ViewId_ALL){for(const g of this.backgroundThreadMap.values())await g.on(l);d===h.EPostMessageType.Destroy&&this.backgroundThreadMap.clear();continue}const S=this.backgroundThreadMap.get(u);S&&(await S.on(l),d===h.EPostMessageType.Destroy&&this.backgroundThreadMap.delete(u))}}async consumeTargetOne(e,t){const s=this.backgroundThreadMap.get(e);s&&await s.on(t)}destroy(){var e;(e=this.snapshotThread)==null||e.destroy(),this.snapshotThread=void 0;for(const t of this.backgroundThreadMap.values())t.destroy();this.backgroundThreadMap.clear()}}exports.BackgroundThreadManagerImpl=U;
|
|
1
|
+
"use strict";var P=Object.defineProperty;var b=(n,e,t)=>e in n?P(n,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):n[e]=t;var c=(n,e,t)=>b(n,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const h=require("./index-CgJv1Exy.js"),f=require("lodash");require("clipper-lib");require("lz-string");require("lineclip");require("xss");require("rbush");require("react-dom");require("react");class N{constructor(){c(this,"threadEngine")}registerBackgroundThread(e){return this.threadEngine=e,this}}class L extends N{constructor(){super(...arguments);c(this,"emitEventType",h.EmitEventType.CopyNode)}async consume(t){const{msgType:s,dataType:r,emitEventType:a}=t;if(s===h.EPostMessageType.FullWork&&r===h.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 C{constructor(e){c(this,"builders",new Map);this.builders=new Map(e.map(t=>[t,this.build(t)]))}build(e){switch(e){case h.EmitEventType.CopyNode:return new L}}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 W(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 o=a.src;a.src="",a.src=o}return a.complete&&a.crossOrigin?Promise.resolve():new Promise(o=>{a.onload=()=>{o(void 0)},a.onerror=()=>{o(void 0)}})});return n.querySelectorAll("svg").forEach(a=>{a.querySelectorAll("image").forEach(i=>{i.href&&!i.href.baseVal.startsWith("data:")&&(i.getAttribute("crossorigin")||i.setAttribute("crossorigin","anonymous"),t.push(new Promise(l=>{const d=new Image;d.crossOrigin="anonymous",d.onload=()=>{l(void 0)},d.onerror=()=>{l(void 0)},d.src=i.href.baseVal})))})}),await Promise.all(t)}async function B(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(o=>{const i=o.getAttribute("d")||"";return i!=="M0,0C0,0,0,0,0,0"&&i.length>10}),r))break;await new Promise(o=>setTimeout(o,50))}}async function F(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(B(r))}await Promise.all(t)}async function I(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 o=!0;for(const i of Array.from(a)){const l=parseFloat(i.getAttribute("width")||"0"),d=parseFloat(i.getAttribute("height")||"0");if(i.querySelector(".mermaid-container")&&(l<50||d<50)){o=!1;break}}if(o){r=!0;break}}else r=!0;await new Promise(o=>setTimeout(o,50))}}}async function A(n,e={}){const{width:t=n.offsetWidth,height:s=n.offsetHeight}=e,r=n.offsetWidth||t,a=n.offsetHeight||s;try{const{loadSvgToImageLib:o,getSvgToImageLib:i}=await Promise.resolve().then(()=>require("./svgToImageLoader-B3gIDAQo.js"));let l=i();if(!l)try{l=await o()}catch(w){return console.error("[loadSvgToImageLib] error: ",w),null}const d=n.style.width,u=n.style.height,k=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 w=await l.toPng(n,{width:r,height:a,quality:1});return n.style.width=d,n.style.height=u,n.style.display=k,new Promise(p=>{const m=new Image;m.crossOrigin="anonymous",m.onload=()=>{p(m)},m.onerror=()=>{p(null)},m.src=w})}catch(w){return n.style.width=d,n.style.height=u,n.style.display=k,console.error("[divToImageElement] error: ",w),null}}catch(o){return console.error("[divToImageElement] error: ",o),null}}class x{constructor(e){c(this,"toolsType",h.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:o,trackBackgroundImageLoad:i=!0}=e;this.workId=s,this.vNodes=t,this.workOptions=r,this.manager=a,this.scenePath=o,this.trackBackgroundImageLoad=i,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===h.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,o=t*this.manager.camera.scale,i=s*this.manager.camera.scale,l=r*this.manager.camera.scale,d=a*this.manager.camera.scale;return o===l&&i===d}isSamePosition(e){const{centerX:t,centerY:s}=e,{centerX:r,centerY:a}=this.workOptions,o=this.manager.getPagePoint(r,a),i=this.manager.getPagePoint(t,s);return f.isEqual(i,o)}isSameZIndex(e){const{zIndex:t}=e,{zIndex:s}=this.workOptions;return t===s}isSameState(e){const{state:t}=e,{state:s}=this.workOptions;return f.isEqual(t,s)}isSameData(e){const{data:t}=e,{data:s}=this.workOptions;return f.isEqual(t,s)}updateElementPosition(e){if(this.isDestroyed||!this.element||!this.fullLayer)return;const{centerX:t,centerY:s,width:r,height:a,zIndex:o}=this.workOptions,i=this.manager.getPagePoint(t,s),l=r*this.manager.camera.scale,d=a*this.manager.camera.scale;(!e||e&&!this.isSameSize(e))&&(this.element.setAttribute("width",`${l}`),this.element.setAttribute("height",`${d}`),this.element.style.width=`${l}px`,this.element.style.height=`${d}px`),(!e||e&&!this.isSamePosition(e))&&(this.element.style.left=`${i.x}px`,this.element.style.top=`${i.y}px`),(!e||e&&!this.isSameZIndex(e))&&(this.element.style.zIndex=(o||0).toString())}async updateSvg(e){const{type:t,state:s}=this.workOptions;if(t===h.ESVGType.markmap){const r=h.getMarkmapRuntimeOrThrow(),{data:a}=this.workOptions;if(this.markmapInstance||(this.markmapInstance=r.createMarkmap(this.element,this.manager.markmapOptions),this.markmapInstance.handleClick=async(l,d)=>{var w,p,m;(w=this.markmapInstance)==null||w.toggleNode(d);const u=this.serializeData((p=this.markmapInstance)==null?void 0:p.state.data);this.setWorkOptions({...this.workOptions,state:u},!1),r.checkNodeHasMermaid(d)&&await r.renderMermaidAfterDOMUpdate(this.element,this.workId),this.scenePath&&this.collector&&((m=this.collector)==null||m.dispatch({type:h.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 o=r.transform(this.workId,a);let{root:i}=o;a&&r.hasMermaidCodeBlock(a)&&(i=r.injectMermaidHtml(i,a,this.workId));try{s&&Array.isArray(s)&&this.transformState(s,i),await this.markmapInstance.setData(i),!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,o=this.reloadSourceUrl??r;if(this.element.crossOrigin=f.isString(a)?a:"anonymous",!this.trackBackgroundImageLoad){this.element.src=o,await new Promise((i,l)=>{this.element.onload=()=>i(),this.element.onerror=()=>l()});return}await this.manager.master.control.backgroundImageLoadCoordinator.load({viewId:this.manager.viewId,scenePath:this.scenePath,resourceId:this.workId,src:o,image:this.element,isActive:()=>!this.isDestroyed&&this.manager.master.control.viewContainerManager.getCurScenePath(this.manager.viewId)===this.scenePath,onReloadUrl:i=>{this.reloadSourceUrl=i}})}}async fit(e=!0){var t;if(!this.isDestroyed&&this.element&&this.fullLayer&&this.markmapInstance){const s=h.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 I(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(!f.isEqual(this.workOptions,e)){const s=f.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 M(n){const{toolsType:e,...t}=n;switch(e){case h.EToolsKey.BackgroundSVG:return new x(t);default:return}}class O{constructor(e){c(this,"viewId");c(this,"fullLayer");c(this,"curNodeMap");this.viewId=e,this.curNodeMap=new h.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 q{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,"updateCamera",f.throttle(async e=>{const{cameraOpt:t}=e;t&&!f.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 C([h.EmitEventType.CopyNode]).registerForBackgroundThread(this),this.vNodes=new O(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:o,height:i}=this.camera;return{x:(e-r)*s+o/2,y:(t-a)*s+i/2}}async setCameraOpt(e){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){const{workShape:s}=t;s&&await s.updateCamera()}}clearAll(){this.vNodes.clear()}canUseFullLayer(e){return e===h.EToolsKey.BackgroundSVG}async consumeFull(e){const{toolsType:t,opt:s,workId:r,scenePath:a}=e;if(r!=null&&r.toString()&&t&&this.canUseFullLayer(t))switch(t){case h.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 o=t.toString();let i;const l=this.vNodes.get(o);return!l||!l.workShape?(i=this.createWorkShapeNode({toolsOpt:s,toolsType:h.EToolsKey.BackgroundSVG,workId:o,scenePath:a}),i&&await i.init()):(i=l.workShape,await i.setWorkOptions(s)),i}}createWorkShapeNode(e){return M({...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(!await this.methodBuilder.consumeForBackgroundThread(e)){const{msgType:t,toolsType:s}=e;switch(t){case h.EPostMessageType.Destroy:{this.destroy();break}case h.EPostMessageType.Clear:{this.clearAll();break}case h.EPostMessageType.UpdateCamera:{this.updateCamera(e);break}case h.EPostMessageType.UpdateTools:{this.toggleFullLayer(s===h.EToolsKey.Clicker);break}case h.EPostMessageType.BackgroundSVGUpdate:case h.EPostMessageType.UpdateNode:case h.EPostMessageType.FullWork:{s&&this.canUseFullLayer(s)&&await this.consumeFull(e);break}case h.EPostMessageType.BackgroundSVGDelete:{this.removeWork(e);break}}}}toggleFullLayer(e){this.fullLayer.classList.toggle("appliance-plugin-background-svg-active",e)}destroy(){this.vNodes.clear()}}class V{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);this.viewId=e,this.opt=t,this.master=t.master,this.fullLayer=t.container,this.vNodes=new O(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}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){this.cameraOpt=e;for(const t of this.vNodes.curNodeMap.values()){const{workShape:s}=t;s&&await s.updateCamera()}}getPagePoint(e,t){const{scale:s,centerX:r,centerY:a,width:o,height:i}=this.camera;return{x:(e-r)*s+o/2,y:(t-a)*s+i/2}}async getSnapshot(e){const{scenePath:t,scenes:s,cameraOpt:r}=e;if(t&&s&&r){await this.setCameraOpt(r);for(const[a,o]of Object.entries(s))if(o!=null&&o.type&&(o==null?void 0:o.toolsType)===h.EToolsKey.BackgroundSVG)switch(o==null?void 0:o.type){case h.EPostMessageType.UpdateNode:case h.EPostMessageType.FullWork:{const{opt:i}=o,l={...o,opt:i,workId:a,msgType:h.EPostMessageType.FullWork,dataType:h.EDataType.Service,viewId:this.viewId,scenePath:t};await this.runFullWork(l);break}}try{if(t){await I(this.fullLayer),await W(this.fullLayer),await F(this.fullLayer);const a=await A(this.fullLayer);a&&this.opt.post({sp:[{type:h.EPostMessageType.Snapshot,scenePath:t,imageElement:a,viewId:this.viewId,index:1}]})}}catch(a){const o=a&&a instanceof Error?a.message:a==null?void 0:a.toString();this.opt.post({sp:[{type:h.EPostMessageType.ReportError,reportString:`[SnapshotThreadImpl] getSnapshotRender error: ${o}`}]})}}}createWorkShapeNode(e){return M({...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 o=t.toString();let i;const l=this.vNodes.get(o);return!l||!l.workShape?(i=this.createWorkShapeNode({toolsOpt:s,toolsType:h.EToolsKey.BackgroundSVG,workId:o,scenePath:a}),i&&await i.init()):(i=l.workShape,await i.setWorkOptions(s)),i}}async runFullWork(e){const{toolsType:t,opt:s,workId:r,scenePath:a}=e;await this.setFullWork({toolsType:t,opt:s,workId:r,scenePath:a})}destroy(){this.fullLayer.innerHTML="",this.fullLayer.style.width="",this.fullLayer.style.height=""}}class U{constructor(e){c(this,"backgroundThreadMap",new Map);c(this,"snapshotThread");c(this,"master");c(this,"post",e=>{const{sp:t}=e;t&&this.master.collectorSyncData(t)});this.master=e,this.backgroundThreadMap=new Map}createBackgroundThread(e,t){return new q(e,t)}createSnapshotThread(e,t){return new V(e,t)}async consume(e){var t,s,r,a,o,i;for(const l of e.values()){const{msgType:d,viewId:u,layerOpt:k,offscreenCanvasOpt:w,cameraOpt:p,tasksqueue:m}=l;if(d===h.EPostMessageType.Console){console.log(this);continue}if(d===h.EPostMessageType.Init){const g=(t=this.master.control.viewContainerManager.getView(u))==null?void 0:t.displayer,v=(s=g==null?void 0:g.backgroundContainerRef)==null?void 0:s.current;if(g&&v&&k&&w){const y=this.backgroundThreadMap.get(u);y==null||y.destroy();const T=this.createBackgroundThread(u,{displayer:g,container:v,layerOpt:k,master:this.master,canvasOpt:w,post:this.post});this.backgroundThreadMap.set(u,T),T&&p&&await T.setCameraOpt(p)}continue}if(d===h.EPostMessageType.Snapshot){const g=(r=this.master.control.viewContainerManager.getView(u))==null?void 0:r.displayer,y=(o=((a=this.master.control.viewContainerManager.mainView)==null?void 0:a.displayer).backgroundSnapshotContainerRef)==null?void 0:o.current;if(g&&y&&p){(i=this.snapshotThread)==null||i.destroy(),y.style.width=`${p.width}px`,y.style.height=`${p.height}px`;const T={...h.ViewContainerManager.defaultLayerOpt,offscreen:!1,width:p.width,height:p.height},E={...h.ViewContainerManager.defaultScreenCanvasOpt,width:p.width,height:p.height};this.snapshotThread=this.createSnapshotThread(u,{displayer:g,container:y,layerOpt:T,master:this.master,canvasOpt:E,post:this.post}),await this.snapshotThread.getSnapshot(l),this.snapshotThread.destroy(),this.snapshotThread=void 0;continue}}if(d===h.EPostMessageType.TasksQueue&&(m!=null&&m.size)){for(const[g,v]of this.backgroundThreadMap.entries()){const y=m.get(g);y&&await v.on(y)}continue}if(u===h.Storage_ViewId_ALL){for(const g of this.backgroundThreadMap.values())await g.on(l);d===h.EPostMessageType.Destroy&&this.backgroundThreadMap.clear();continue}const S=this.backgroundThreadMap.get(u);S&&(await S.on(l),d===h.EPostMessageType.Destroy&&this.backgroundThreadMap.delete(u))}}async consumeTargetOne(e,t){const s=this.backgroundThreadMap.get(e);s&&await s.on(t)}destroy(){var e;(e=this.snapshotThread)==null||e.destroy(),this.snapshotThread=void 0;for(const t of this.backgroundThreadMap.values())t.destroy();this.backgroundThreadMap.clear()}}exports.BackgroundThreadManagerImpl=U;
|
|
@@ -12,7 +12,7 @@ export declare class ApplianceMultiPlugin extends InvisiblePlugin<AppliancePlugi
|
|
|
12
12
|
static getInstance(remake: WindowManager, adaptor: ApplianceAdaptor): Promise<AppliancePluginInstance>;
|
|
13
13
|
static onCreate(plugin: InvisiblePlugin<AppliancePluginAttributes, any>): void;
|
|
14
14
|
static createApplianceMultiPlugin(d: Room, kind: string): Promise<ApplianceMultiPlugin>;
|
|
15
|
-
static createCurrentManager: (remake: WindowManager, options: RequiredAppliancePluginOptions, plugin: ApplianceMultiPlugin,
|
|
15
|
+
static createCurrentManager: (remake: WindowManager, options: RequiredAppliancePluginOptions, plugin: ApplianceMultiPlugin, callbacks?: ApplianceAdaptor["callbacks"]) => void;
|
|
16
16
|
private get isReplay();
|
|
17
17
|
private get callbackName();
|
|
18
18
|
init(displayer: Displayer): void;
|
|
@@ -12,7 +12,7 @@ export declare class ApplianceSinglePlugin extends InvisiblePlugin<AppliancePlug
|
|
|
12
12
|
static getInstance(remake: Player | Room, adaptor: ApplianceAdaptor): Promise<AppliancePluginInstance>;
|
|
13
13
|
static onCreate(plugin: InvisiblePlugin<AppliancePluginAttributes, any>): void;
|
|
14
14
|
static createAppliancePlugin(d: Room, kind: string): Promise<ApplianceSinglePlugin>;
|
|
15
|
-
static createCurrentManager: (displayer: Displayer, options: RequiredAppliancePluginOptions, plugin?: ApplianceSinglePlugin,
|
|
15
|
+
static createCurrentManager: (displayer: Displayer, options: RequiredAppliancePluginOptions, plugin?: ApplianceSinglePlugin, callbacks?: ApplianceAdaptor["callbacks"]) => void;
|
|
16
16
|
/**
|
|
17
17
|
* 房间实例化时,将当前实例对displayer外部API的添加内部处理逻辑;
|
|
18
18
|
* @param displayer
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import EventEmitter2 from "eventemitter2";
|
|
2
|
-
import { EStrokeType, MemberState, AppliancePluginLike, ApplianceInitLoadingChangeInfo, ApplianceFontFaceLoadState, ApplianceFontFaceRenderState, ApplianceRefreshRenderState } from "./types";
|
|
2
|
+
import { EStrokeType, MemberState, AppliancePluginLike, ApplianceInitLoadingChangeInfo, ApplianceFontFaceLoadState, ApplianceFontFaceRenderState, ApplianceRefreshRenderState, CallbacksFun } from "./types";
|
|
3
3
|
import { Collector, ViewId } from "../collector";
|
|
4
4
|
import { RoomMemberManager } from "../members";
|
|
5
5
|
import { TextEditorManager } from "../component/textEditor";
|
|
@@ -23,7 +23,7 @@ export interface BaseApplianceManagerProps {
|
|
|
23
23
|
displayer: Displayer<DisplayerCallbacks>;
|
|
24
24
|
plugin?: AppliancePluginLike;
|
|
25
25
|
options: RequiredAppliancePluginOptions;
|
|
26
|
-
|
|
26
|
+
callbacks?: CallbacksFun;
|
|
27
27
|
}
|
|
28
28
|
/** 插件管理器 */
|
|
29
29
|
export declare abstract class BaseApplianceManager {
|
|
@@ -67,7 +67,7 @@ export declare abstract class BaseApplianceManager {
|
|
|
67
67
|
readonly renderControl: RenderCotrolImple;
|
|
68
68
|
readonly miniMapManager?: MiniMapManagerImpl;
|
|
69
69
|
readonly pluginManager?: PluginManager;
|
|
70
|
-
readonly
|
|
70
|
+
readonly callbacks?: CallbacksFun;
|
|
71
71
|
/** WB-429: selector 公开 API / 事件实现入口 */
|
|
72
72
|
selectorApi?: SelectorApiManager;
|
|
73
73
|
/** WB-429: selector API 事件派发用,指向 BaseApplianceManager.PublicMsgEmitter */
|
|
@@ -32,12 +32,13 @@ export type RenderingCompatibilityDecision = {
|
|
|
32
32
|
effectiveImageBitmapFeatureLevel?: WorkerImageBitmapFeatureBlacklistLevel;
|
|
33
33
|
issues: string[];
|
|
34
34
|
};
|
|
35
|
-
type BlacklistKind = "renderMode" | "canvasContext" | "maskTextureFormat" | "maskTextureUpload" | "imageBitmapFeature";
|
|
35
|
+
type BlacklistKind = "renderMode" | "canvasContext" | "maskTextureFormat" | "maskTextureUpload" | "imageBitmapFeature" | "fontFaceFallback";
|
|
36
36
|
export declare function normalizeVersion(value: string): string | undefined;
|
|
37
37
|
export declare function compareVersions(left: string, right: string): number;
|
|
38
38
|
export declare function detectRenderingRuntime(userAgent?: string): RenderingRuntime | undefined;
|
|
39
39
|
export declare function resolveVersionBlacklistLevel(currentVersion: string, rules: VersionWorkerBlacklist | undefined, kind: BlacklistKind, issues?: string[]): number | undefined;
|
|
40
40
|
export declare function mergeWorkerBlacklists(builtin: WorkerBlacklistByRuntime | undefined, injected: WorkerBlacklistByRuntime | undefined, kind: BlacklistKind): WorkerBlacklistByRuntime;
|
|
41
|
+
export declare function isFontFaceFallbackBlacklisted(blacklist: WorkerBlacklistByRuntime | undefined, userAgent?: string): boolean;
|
|
41
42
|
export declare function detectRenderCapabilities(workerUrl?: boolean): RenderCapabilities;
|
|
42
43
|
export declare function resolveRenderingCompatibility(input: {
|
|
43
44
|
useWorker: "auto" | "mainThread";
|
package/dist/plugin/types.d.ts
CHANGED
|
@@ -159,11 +159,16 @@ export type ApplianceFontFaceRenderState = {
|
|
|
159
159
|
export type ApplianceRefreshRenderState = {
|
|
160
160
|
status: "success" | "error";
|
|
161
161
|
};
|
|
162
|
+
/** Runtime callbacks. These are deliberately outside options/extras so options remain JSON-serializable. */
|
|
163
|
+
export type CallbacksFun = {
|
|
164
|
+
onInitLoadingChange?: (info: ApplianceInitLoadingChangeInfo) => void;
|
|
165
|
+
onBackgroundImageLoadEvent?: (event: BackgroundImageLoadEvent) => void;
|
|
166
|
+
};
|
|
162
167
|
export type ApplianceAdaptor = {
|
|
163
168
|
options: AppliancePluginOptions;
|
|
164
169
|
logger?: Logger;
|
|
165
170
|
cursorAdapter?: CursorAdapter;
|
|
166
|
-
|
|
171
|
+
callbacks?: CallbacksFun;
|
|
167
172
|
};
|
|
168
173
|
export type canBindMethodType = keyof Omit<AppliancePluginInstance, "displayer" | "windowManager" | "disableDeviceInputs" | "disableEraseImage" | "disableCameraTransform" | "injectMethodToObject" | "callbacksOn" | "callbacksOnce" | "callbacksOff" | "_injectTargetObject" | "createMiniMap" | "destroyMiniMap" | "filterRenderByUid" | "cancelFilterRender" | "addListener" | "removeListener" | "usePlugin" | "stopDraw" | "setViewLocalScenePathChange" | "getElements" | "hasElements" | "hasBackgroundImage" | "blurText" | "insertMarkmap" | "updateMarkmap" | "insertBackgroundImage" | "getSelectedElements" | "updateSelectedElements" | "copySelectedElements" | "deleteSelectedElements" | "getFloatbarContainer" | "getViewOffsetToContainer">;
|
|
169
174
|
export interface AppliancePluginInstance {
|
|
@@ -421,6 +426,9 @@ export declare enum WorkerMaskTextureUploadBlacklistLevel {
|
|
|
421
426
|
export declare enum WorkerImageBitmapFeatureBlacklistLevel {
|
|
422
427
|
DirtyRect = 1
|
|
423
428
|
}
|
|
429
|
+
export declare enum FontFaceFallbackBlacklistLevel {
|
|
430
|
+
RefreshTextRender = 1
|
|
431
|
+
}
|
|
424
432
|
export type VersionWorkerBlacklist = Record<string, number>;
|
|
425
433
|
export type WorkerBlacklistByRuntime = {
|
|
426
434
|
androidWebView?: VersionWorkerBlacklist;
|
|
@@ -451,6 +459,8 @@ export type ExtrasOptions = {
|
|
|
451
459
|
workerMaskTextureUploadBlacklist?: WorkerBlacklistByRuntime;
|
|
452
460
|
/** API 可用但 ImageBitmap crop 行为异常的运行时版本 */
|
|
453
461
|
workerImageBitmapFeatureBlacklist?: WorkerBlacklistByRuntime;
|
|
462
|
+
/** 按运行时版本启用字体加载失败后的文本补绘兜底 */
|
|
463
|
+
fontFaceFallbackBlacklist?: WorkerBlacklistByRuntime;
|
|
454
464
|
/** 是否使用背景Svg功能, 默认值为 ``false`` */
|
|
455
465
|
useBackgroundThread?: boolean;
|
|
456
466
|
/** 同步数据配置项 */
|
|
@@ -485,8 +495,6 @@ export type ExtrasOptions = {
|
|
|
485
495
|
overwriteSelectorStyles?: SelectorStyleOverrides;
|
|
486
496
|
/** 可见背景图片的超时与重试策略。 */
|
|
487
497
|
backgroundImageLoadOptions?: BackgroundImageLoadOptions;
|
|
488
|
-
/** Bridge 等集成层使用的背景图片加载事件入口。 */
|
|
489
|
-
onBackgroundImageLoadEvent?: (event: BackgroundImageLoadEvent) => void;
|
|
490
498
|
};
|
|
491
499
|
export type SelectorStyleOverrides = {
|
|
492
500
|
/** `.appliance-plugin-highlight-box` 外框样式 */
|
|
@@ -565,6 +573,7 @@ export type RequiredExtrasOptions = {
|
|
|
565
573
|
workerMaskTextureFormatBlacklist: WorkerBlacklistByRuntime;
|
|
566
574
|
workerMaskTextureUploadBlacklist: WorkerBlacklistByRuntime;
|
|
567
575
|
workerImageBitmapFeatureBlacklist: WorkerBlacklistByRuntime;
|
|
576
|
+
fontFaceFallbackBlacklist: WorkerBlacklistByRuntime;
|
|
568
577
|
useBackgroundThread: Required<boolean>;
|
|
569
578
|
syncOpt: Required<SyncOpt>;
|
|
570
579
|
syncLogger: Required<SyncLoggerOpt>;
|
|
@@ -582,7 +591,6 @@ export type RequiredExtrasOptions = {
|
|
|
582
591
|
markmap: Required<MarkmapOpt>;
|
|
583
592
|
overwriteSelectorStyles: SelectorStyleOverrides;
|
|
584
593
|
backgroundImageLoadOptions: Required<BackgroundImageLoadOptions>;
|
|
585
|
-
onBackgroundImageLoadEvent?: (event: BackgroundImageLoadEvent) => void;
|
|
586
594
|
};
|
|
587
595
|
export type RequiredAppliancePluginOptions = {
|
|
588
596
|
cdn: CdnOpt;
|