@netless/forge-slide 0.1.1-alpha.0 → 0.1.1-alpha.10

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/index.esm.js CHANGED
@@ -30,9 +30,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  mod
31
31
  ));
32
32
 
33
- // ../../node_modules/.pnpm/@netless+slide@1.4.15/node_modules/@netless/slide/lib/Slide.js
33
+ // ../../node_modules/.pnpm/@netless+slide@1.4.21/node_modules/@netless/slide/lib/Slide.js
34
34
  var require_Slide = __commonJS({
35
- "../../node_modules/.pnpm/@netless+slide@1.4.15/node_modules/@netless/slide/lib/Slide.js"(exports, module) {
35
+ "../../node_modules/.pnpm/@netless+slide@1.4.21/node_modules/@netless/slide/lib/Slide.js"(exports, module) {
36
36
  module.exports = function(t) {
37
37
  var e = {};
38
38
  function i(n) {
@@ -5703,7 +5703,7 @@ var require_Slide = __commonJS({
5703
5703
  }
5704
5704
  return void 0 === d && (d = setTimeout(b2, e2)), c;
5705
5705
  }
5706
- return e2 = o(e2) || 0, n(i2) && (m = !!i2.leading, u = (g = "maxWait" in i2) ? s(o(i2.maxWait) || 0, e2) : u, v = "trailing" in i2 ? !!i2.trailing : v), E.cancel = function() {
5706
+ return e2 = o(e2) || 0, n(i2) && (m = !!i2.leading, u = (g = "maxWait" in i2) ? s(o(i2.maxWait) || 0, e2) : u, v = "trailing" in i2 ? !!i2.trailing : v), console.log("max wait", u), E.cancel = function() {
5707
5707
  void 0 !== d && clearTimeout(d), f = 0, l2 = p = h = d = void 0;
5708
5708
  }, E.flush = function() {
5709
5709
  return void 0 === d ? c : T(r());
@@ -29372,6 +29372,7 @@ void main(void){
29372
29372
  const r3 = e2[t3], o3 = e2[t3 + 1], [s3, a3] = o3.split(",").map((t4) => Number(t4) / 100);
29373
29373
  i2.push(r3), n2.push({ x: s3, y: a3 });
29374
29374
  }
29375
+ if (n2.length < 4) return false;
29375
29376
  if (this.isSquare(i2, n2)) return true;
29376
29377
  for (let t3 = 0; t3 < 3; t3++) {
29377
29378
  const e3 = n2[t3], i3 = n2[t3 + 1];
@@ -29786,7 +29787,9 @@ void main(void){
29786
29787
  }
29787
29788
  this.delayHide();
29788
29789
  }
29789
- }, this.targetId = t2.targetId, this.ctx = t2.ctx, this.height = t2.height, this.width = t2.width, this.target = t2.target, this.media = t2.media, this.info = t2.info, this.shapeId = t2.shapeId, this.canvasElement = t2.canvasElement, "video" === this.media.type && (this.isVideo = true), this.getMedianContainer(), this.createMediaController(), this.info.cut && (this.start = null !== (e2 = this.info.cut.start) && void 0 !== e2 ? e2 : 0, this.end = null !== (i2 = this.info.cut.end) && void 0 !== i2 ? i2 : 0), this.info.bookmarkList && (this.bookmarkList = this.info.bookmarkList.sort((t3, e3) => t3.time - e3.time));
29790
+ }, this.targetId = t2.targetId, this.ctx = t2.ctx, this.height = t2.height, this.width = t2.width, this.target = t2.target, this.media = t2.media, this.info = t2.info, this.shapeId = t2.shapeId, this.canvasElement = t2.canvasElement, "video" === this.media.type && (this.isVideo = true), this.getMedianContainer(), this.createMediaController(), this.info.cut && (this.start = null !== (e2 = this.info.cut.start) && void 0 !== e2 ? e2 : 0, this.end = null !== (i2 = this.info.cut.end) && void 0 !== i2 ? i2 : 0), this.info.bookmarkList && (this.bookmarkList = this.info.bookmarkList.sort((t3, e3) => t3.time - e3.time)), this.ctx.globalEventHub.on("togglePlayStatus", (t3) => {
29791
+ t3 === this.targetId && (this.media.isPlaying ? this.pauseMediaFromCtrl(false) : this.playMediaFromCtrl(false));
29792
+ });
29790
29793
  }
29791
29794
  getMedianContainer() {
29792
29795
  var t2;
@@ -30307,9 +30310,10 @@ void main(void){
30307
30310
  const a3 = null === (t2 = this.backgroundGraphics) || void 0 === t2 ? void 0 : t2.getPictureMask();
30308
30311
  if ((null === (e2 = this.backgroundGraphics) || void 0 === e2 ? void 0 : e2.isNeedMask(s2.width, s2.height)) && a3 && (s2.mask = a3, this.effectContainer.addChild(a3)), s2.width = this.designWidth, s2.height = this.designHeight, s2 instanceof im && this.ctx.slideScopeEventHub.on("slide-render", this.onSlideRenderPlayGif), this.effectContainer.addChild(s2), this.media) {
30309
30312
  let t3 = this.media.src;
30310
- if ("audio" === this.media.type && /mp4$/.test(t3) && (t3 = t3.replace(/mp4$/, "mp3")), this.ctx.urlInterrupter) {
30311
- const e3 = Date.now();
30312
- t3 = yield this.ctx.urlInterrupter(t3), this.ctx.logger.info("redirect media url by interrupter. time: " + (Date.now() - e3), this.ctx.taskId);
30313
+ const [e3, i3] = t3.split("dynamicConvert");
30314
+ if (i3 && (t3 = `${this.ctx.prefix}${i3}`), "audio" === this.media.type && /mp4$/.test(t3) && (t3 = t3.replace(/mp4$/, "mp3")), this.ctx.urlInterrupter) {
30315
+ const e4 = Date.now();
30316
+ t3 = yield this.ctx.urlInterrupter(t3), this.ctx.logger.info("redirect media url by interrupter. time: " + (Date.now() - e4), this.ctx.taskId);
30313
30317
  }
30314
30318
  this.ctx.loaderDelegate && (t3 = this.ctx.loaderDelegate.redirectMedia(t3), this.ctx.logger.info(`redirect media url to ${t3} by delegate.`, this.ctx.taskId)), this.media.src = t3;
30315
30319
  }
@@ -30759,12 +30763,18 @@ void main(void){
30759
30763
  if ("num" === e2 && this.timingTarget) {
30760
30764
  const e3 = new I_(t4, this.timingTarget);
30761
30765
  this.keyFrames.push([t4.time, e3]);
30766
+ } else if ("str" === e2 && this.timingTarget) {
30767
+ const e3 = new R_(t4, this.timingTarget);
30768
+ this.keyFrames.push([t4.time, e3]);
30762
30769
  }
30763
30770
  }
30764
30771
  const t3 = { time: 1, val: { type: "string", value: this.json.to }, fmla: "" };
30765
30772
  if ("num" === e2 && this.timingTarget) {
30766
30773
  const e3 = new I_(t3, this.timingTarget);
30767
30774
  this.keyFrames.push([t3.time, e3]);
30775
+ } else if ("str" === e2 && this.timingTarget) {
30776
+ const e3 = new R_(t3, this.timingTarget);
30777
+ this.keyFrames.push([t3.time, e3]);
30768
30778
  }
30769
30779
  } else if (this.json.by) {
30770
30780
  const i2 = { time: 0, val: { type: "string", value: this.json.cBhvr.attrList[0] }, fmla: "" };
@@ -31129,7 +31139,8 @@ void main(void){
31129
31139
  const { json: e2, isIterate: i2, isSub: n2, eventHub: r2, ctx: o2, parent: s2, iterateType: a3, iterateIndex: l3, iterateId: h2, isInInteractiveSeq: u2, fromSeqId: c2 } = t2;
31130
31140
  this.json = e2, this.id = e2.cMediaNode.ctn.id, this.commonTimeNode = new Ey({ json: e2.cMediaNode.ctn, isSub: n2, eventHubs: { global: r2, runtime: this.runtimeNodeEventHub }, ctx: o2, parent: s2, isIterate: i2, iterateType: a3, iterateIndex: l3, iterateId: h2, isInInteractiveSeq: u2, fromSeqId: c2 });
31131
31141
  let d2 = e2.cMediaNode.tgtEl;
31132
- o2.loaderDelegate && (d2 = o2.loaderDelegate.redirectMedia(d2), o2.logger.info(`redirect media url from ${e2.cMediaNode.tgtEl} to ${d2} by delegate.`, o2.taskId)), this.audio = new c_(d2, o2.runningAudio, void 0, { enableWebAudio: o2.enableWebAudio }), o2.activeMedia.add(this.audio), this.commonTimeNode.on("timelineStart", () => {
31142
+ const [p2, f2] = d2.split("dynamicConvert");
31143
+ f2 && (d2 = `${o2.prefix}${f2}`), o2.loaderDelegate && (d2 = o2.loaderDelegate.redirectMedia(d2), o2.logger.info(`redirect media url from ${e2.cMediaNode.tgtEl} to ${d2} by delegate.`, o2.taskId)), this.audio = new c_(d2, o2.runningAudio, void 0, { enableWebAudio: o2.enableWebAudio }), o2.activeMedia.add(this.audio), this.commonTimeNode.on("timelineStart", () => {
31133
31144
  this.audio.volume(o2.volumeAdjuster.volume), this.audio.play();
31134
31145
  }), this.commonTimeNode.on("seekToStart", this.stopAudio), this.commonTimeNode.on("seekToEnd", this.stopAudio), this.commonTimeNode.on("timeNodeDestroy", this.destroy), this.ctx = o2, this.ctx.volumeAdjuster.on("update", this.onVolumeUpdate);
31135
31146
  }
@@ -31992,7 +32003,7 @@ void main(void){
31992
32003
  createCtx(t2) {
31993
32004
  const { task: e2 } = this.stageStates[t2];
31994
32005
  e2.addMTask(() => Dy(this, void 0, void 0, function* () {
31995
- const e3 = new Gm(this.loader), i2 = new Za.a(), n2 = { taskId: this.taskId, mode: this.mode, renderer: this.renderer, graphicsTexture: new Km(this.maxResolution), stageWidth: 0, stageHeight: 0, ticker: this.ticker, timingTargets: new $m(i2), eventHub: i2, view: this.view, medias: /* @__PURE__ */ Object.create(null), lastViewedIndex: 0, conflictTimeNodeManager: new Qm(), clock: this.clock, spriteTexture: e3, slideIndex: t2, objectPoolGroup: this.objPoolGroup, hasBackgroundFillShape: false, slideScopeEventHub: new Za.a(), logger: this.logger, sdfManager: this.sdfManager, loaderDelegate: this.loaderDelegate, runningAudio: this.runningAudio, activeMedia: this.activeMedia, isPlayerPaused: this.isPlayerPaused, timingEventHub: new Za.a(), maxResolution: this.maxResolution, animatedIds: /* @__PURE__ */ new Set(), volumeAdjuster: this.volumeAdjuster, forceCanvas: this.forceCanvas, globalEventHub: this.globalEventHub, latestChangeFullscreenTargetId: "", isRendering: false, urlInterrupter: this.urlInterrupter, enableWebAudio: this.enableWebAudio };
32006
+ const e3 = new Gm(this.loader), i2 = new Za.a(), n2 = { taskId: this.taskId, prefix: this.url, mode: this.mode, renderer: this.renderer, graphicsTexture: new Km(this.maxResolution), stageWidth: 0, stageHeight: 0, ticker: this.ticker, timingTargets: new $m(i2), eventHub: i2, view: this.view, medias: /* @__PURE__ */ Object.create(null), lastViewedIndex: 0, conflictTimeNodeManager: new Qm(), clock: this.clock, spriteTexture: e3, slideIndex: t2, objectPoolGroup: this.objPoolGroup, hasBackgroundFillShape: false, slideScopeEventHub: new Za.a(), logger: this.logger, sdfManager: this.sdfManager, loaderDelegate: this.loaderDelegate, runningAudio: this.runningAudio, activeMedia: this.activeMedia, isPlayerPaused: this.isPlayerPaused, timingEventHub: new Za.a(), maxResolution: this.maxResolution, animatedIds: /* @__PURE__ */ new Set(), volumeAdjuster: this.volumeAdjuster, forceCanvas: this.forceCanvas, globalEventHub: this.globalEventHub, latestChangeFullscreenTargetId: "", isRendering: false, urlInterrupter: this.urlInterrupter, enableWebAudio: this.enableWebAudio };
31996
32007
  this.stageCtxs[t2] = n2;
31997
32008
  }), "@StagePool[createCtx]");
31998
32009
  }
@@ -32288,11 +32299,15 @@ void main(void){
32288
32299
  this.app.view.addEventListener("mouseover", e4, false);
32289
32300
  const r3 = { handleEvent: () => {
32290
32301
  this.fullscreenOnMousemove({ index: i3, targetId: n3 });
32302
+ } }, o3 = { handleEvent: () => {
32303
+ var t5;
32304
+ null === (t5 = this.currentStage) || void 0 === t5 || t5.ctx.globalEventHub.emit("togglePlayStatus", n3);
32291
32305
  } };
32292
- this.app.view.addEventListener("mousemove", r3, false), this.cacheFunctionMap.set("mouseover", e4), this.cacheFunctionMap.set("mousemove", r3), this.cacheFunctionMap.set("mouseout", t4);
32306
+ this.app.view.addEventListener("mousemove", r3, false), this.app.view.addEventListener("click", o3, false), this.cacheFunctionMap.set("click", o3), this.cacheFunctionMap.set("mouseover", e4), this.cacheFunctionMap.set("mousemove", r3), this.cacheFunctionMap.set("mouseout", t4);
32293
32307
  } else {
32294
32308
  const t4 = { handleEvent: () => {
32295
- this.fullscreenOnMousemove({ index: i3, targetId: n3 });
32309
+ var t5;
32310
+ this.fullscreenOnMousemove({ index: i3, targetId: n3 }), null === (t5 = this.currentStage) || void 0 === t5 || t5.ctx.globalEventHub.emit("togglePlayStatus", n3);
32296
32311
  } };
32297
32312
  this.app.view.addEventListener("touchstart", t4, false), this.cacheFunctionMap.set("touchstart", t4);
32298
32313
  }
@@ -32602,7 +32617,7 @@ void main(void){
32602
32617
  });
32603
32618
  }
32604
32619
  clearFullscreenEventListenersWithAppView() {
32605
- ["mousemove", "mouseout", "mouseover", "touchstart", "pointerdown"].forEach((t2) => {
32620
+ ["mousemove", "click", "mouseout", "mouseover", "touchstart", "pointerdown"].forEach((t2) => {
32606
32621
  this.cacheFunctionMap.has(t2) && (this.app.view.removeEventListener(t2, this.cacheFunctionMap.get(t2), false), this.cacheFunctionMap.delete(t2));
32607
32622
  });
32608
32623
  }
@@ -34224,23 +34239,44 @@ void main(void){
34224
34239
  };
34225
34240
  }
34226
34241
  };
34227
- function sT(t2, e2, i2, n2) {
34242
+ function sT(t2, e2, i2, n2, r2) {
34228
34243
  return rT(this, void 0, void 0, function() {
34229
- var r2, o2, s2, a3;
34230
- return oT(this, function(l3) {
34231
- switch (l3.label) {
34244
+ var o2, s2, a3, l3, h2, u2;
34245
+ return oT(this, function(c2) {
34246
+ switch (c2.label) {
34232
34247
  case 0:
34233
- return r2 = document.createElement("div"), (o2 = new yT({ anchor: r2, renderOptions: { minFPS: 1, maxFPS: 1, resolution: 1, maxResolutionLevel: i2, forceCanvas: true }, mode: "local", interactive: false, useLocalCache: true })).setResource(t2, e2), [4, o2.getSlideCountAsync()];
34248
+ return o2 = document.createElement("div"), (s2 = new yT({ anchor: o2, renderOptions: { minFPS: 1, maxFPS: 1, resolution: 1, maxResolutionLevel: i2, forceCanvas: true }, mode: "local", interactive: false, useLocalCache: true })).setResource(t2, e2), [4, s2.getSlideCountAsync()];
34234
34249
  case 1:
34235
- s2 = l3.sent(), a3 = 1, l3.label = 2;
34250
+ a3 = c2.sent(), c2.label = 2;
34236
34251
  case 2:
34237
- return a3 <= s2 ? [4, o2.player.stagePool.preload(a3, true)] : [3, 5];
34252
+ if (c2.trys.push([2, 12, 13, 14]), !(r2 && r2.length > 0)) return [3, 7];
34253
+ l3 = r2.filter(function(t3, e3) {
34254
+ return r2.indexOf(t3) === e3;
34255
+ }), u2 = 0, c2.label = 3;
34238
34256
  case 3:
34239
- l3.sent(), n2(Math.round(a3 / s2 * 100) / 100), l3.label = 4;
34257
+ return u2 < l3.length ? (h2 = l3[u2]) > 0 && h2 <= a3 ? [4, s2.player.stagePool.preload(h2, true)] : [3, 5] : [3, 6];
34240
34258
  case 4:
34241
- return a3++, [3, 2];
34259
+ c2.sent(), n2(Math.round((u2 + 1) / l3.length * 100) / 100), c2.label = 5;
34242
34260
  case 5:
34243
- return o2.destroy(), [2];
34261
+ return u2++, [3, 3];
34262
+ case 6:
34263
+ return [3, 11];
34264
+ case 7:
34265
+ u2 = 1, c2.label = 8;
34266
+ case 8:
34267
+ return u2 <= a3 ? [4, s2.player.stagePool.preload(u2, true)] : [3, 11];
34268
+ case 9:
34269
+ c2.sent(), n2(Math.round(u2 / a3 * 100) / 100), c2.label = 10;
34270
+ case 10:
34271
+ return u2++, [3, 8];
34272
+ case 11:
34273
+ return [3, 14];
34274
+ case 12:
34275
+ throw c2.sent();
34276
+ case 13:
34277
+ return s2.destroy(), [7];
34278
+ case 14:
34279
+ return [2];
34244
34280
  }
34245
34281
  });
34246
34282
  });
@@ -34376,7 +34412,7 @@ void main(void){
34376
34412
  }
34377
34413
  var mT = { syncDispatch: "syncDispatch", syncReceive: "syncReceive", syncEventLag: "syncEventLag", renderStart: "renderStart", renderEnd: "renderEnd", renderError: "renderError", slideChange: "slideChange", mainSeqStepStart: "mainSeqStepStart", mainSeqStepEnd: "mainSeqStepEnd", animateStart: "animateStart", animateEnd: "animateEnd", stateChange: "stateChange", slideStepEnd: "slideEnd", slideStepStart: "slideStart" }, gT = { taskId: "", url: "", currentSlideIndex: -1, mainSeqStep: -1, mainSeqState: null, mediaState: /* @__PURE__ */ Object.create(null), interactiveSeqState: /* @__PURE__ */ Object.create(null) }, vT = "";
34378
34414
  try {
34379
- vT = "1.4.14";
34415
+ vT = "1.4.20";
34380
34416
  } catch (t2) {
34381
34417
  vT = "dev";
34382
34418
  }
@@ -34395,7 +34431,7 @@ void main(void){
34395
34431
  return n3.frameResizeHandler();
34396
34432
  }), n3.timestamp = function() {
34397
34433
  return Date.now();
34398
- }, n3.mode = "local", n3.enableGlobalClick = false, n3.lastEmitedState = null, n3.playerController = null, n3.isInitResized = false, n3.cacheImage = document.createElement("img"), n3.isTouchStart = false, n3.touchStartId = void 0, n3.taskId = "", n3.volumeAdjuster = new Hy(), n3.designWidth = 0, n3.designHeight = 0, n3._slideCount = 0, n3._dispatchIncrId = 0, n3._receiveIncrId = 0, n3.resizeView = Ky()(n3._resizeView.bind(n3), 50), n3.handleViewClick = Ky()(n3._handleViewClick.bind(n3), 300), n3.resourceList = [], n3._updateVolumeByStaticAdjuster = function(t3) {
34434
+ }, n3.mode = "local", n3.enableGlobalClick = false, n3.lastEmitedState = null, n3.playerController = null, n3.isInitResized = false, n3.cacheImage = document.createElement("img"), n3.isTouchStart = false, n3.touchStartId = void 0, n3.taskId = "", n3.volumeAdjuster = new Hy(), n3.designWidth = 0, n3.designHeight = 0, n3._slideCount = 0, n3._dispatchIncrId = 0, n3._receiveIncrId = 0, n3.resizeView = Ky()(n3._resizeView.bind(n3), 50), n3.handleViewClick = Ky()(n3._handleViewClick.bind(n3), 300, { leading: true }), n3.resourceList = [], n3._updateVolumeByStaticAdjuster = function(t3) {
34399
34435
  n3.volumeAdjuster.volume = t3;
34400
34436
  }, n3.recoverHandler = function(t3) {
34401
34437
  if ("@slide/_recover_" === t3.data.type && t3.data.slideId === n3.randomId) {
@@ -34577,7 +34613,7 @@ void main(void){
34577
34613
  return o2.setInteractive(this.interactive), o2.updateConfig(t3.renderOptions || {}), o2.on(Vy.renderStart, function(t4) {
34578
34614
  r2.isLoading = true, r2.emit(mT.renderStart, t4), window.postMessage({ type: "@slide/_render_start_", taskId: r2.taskId, index: t4 }, "*");
34579
34615
  }), o2.on(Vy.renderEnd, function(t4) {
34580
- r2.isLoading = false, r2.player && (r2.designHeight = r2.player.designHeight, r2.designWidth = r2.player.designWidth, r2.cacheImage.style.width = r2.player.designWidth + "px", r2.cacheImage.style.height = r2.player.designHeight + "px", r2._slideCount = r2.player.slideCount), r2.emit(mT.renderEnd, t4), window.postMessage({ type: "@slide/_render_end_", taskId: r2.taskId, index: t4 }, "*");
34616
+ r2.isLoading = false, r2.player && (r2.designHeight = r2.player.designHeight, r2.designWidth = r2.player.designWidth, r2.cacheImage.style.width = r2.player.designWidth + "px", r2.cacheImage.style.height = r2.player.designHeight + "px", r2.cacheImage.style.maxWidth = r2.player.designWidth + "px", r2.cacheImage.style.minWidth = r2.player.designHeight + "px", r2._slideCount = r2.player.slideCount), r2.emit(mT.renderEnd, t4), window.postMessage({ type: "@slide/_render_end_", taskId: r2.taskId, index: t4 }, "*");
34581
34617
  }), o2.on(Vy.slideChange, function(t4) {
34582
34618
  r2.__slideState.currentSlideIndex = t4, r2.emitStateChange(), r2.emit(mT.slideChange, t4);
34583
34619
  }), o2.on(Vy.mainSeqStateChange, function(t4) {
@@ -35105,22 +35141,27 @@ void main(void){
35105
35141
  }(Za.a);
35106
35142
  null == _T || _T.clear().catch(function() {
35107
35143
  }), window.addEventListener("__slide_log__", yT.handleLogDownload), window.addEventListener("message", function(t2) {
35144
+ var e2;
35108
35145
  if ("@slide/_request_log_" === t2.data.type) yT.handleLogReport(t2.data.sessionId).catch(function() {
35109
35146
  });
35110
35147
  else if ("@slide/_request_frozen_" === t2.data.type) yT.handleFrozenAllSlide();
35111
35148
  else if ("@slide/_request_release_" === t2.data.type) yT.handleReleaseAllSlide();
35112
35149
  else if ("@slide/_update_volume_" === t2.data.type) {
35113
- var e2 = 0.5;
35150
+ var i2 = 0.5;
35114
35151
  try {
35115
- e2 = parseFloat(t2.data.volume.toString());
35152
+ i2 = parseFloat(t2.data.volume.toString());
35116
35153
  } catch (t3) {
35117
35154
  }
35118
- yT.volumeAdjuster.volume = e2;
35119
- } else "@slide/_get_volume_" === t2.data.type ? window.postMessage({ type: "@slide/_report_volume_", volume: yT.volumeAdjuster.volume, customMessage: "@slide/_report_volume_" }, "*") : "@slide/_preload_slide_" === t2.data.type && yT.preloadResource(t2.data.taskId, t2.data.prefix, t2.data.maxResolutionLevel, function(e3) {
35120
- window.postMessage({ type: "@slide/_preload_slide_progress_", taskId: t2.data.taskId, progress: e3 }, "*");
35121
- }).catch(function(e3) {
35122
- window.postMessage({ type: "@slide/_preload_slide_error_", taskId: t2.data.taskId, error: e3 }, "*");
35123
- });
35155
+ yT.volumeAdjuster.volume = i2;
35156
+ } else if ("@slide/_get_volume_" === t2.data.type) window.postMessage({ type: "@slide/_report_volume_", volume: yT.volumeAdjuster.volume, customMessage: "@slide/_report_volume_" }, "*");
35157
+ else if ("@slide/_preload_slide_" === t2.data.type) {
35158
+ var n2 = null !== (e2 = t2.data.sessionId) && void 0 !== e2 ? e2 : Math.random().toString(32).substr(2);
35159
+ yT.preloadResource(t2.data.taskId, t2.data.prefix, t2.data.maxResolutionLevel, function(e3) {
35160
+ window.postMessage({ type: "@slide/_preload_slide_progress_", sessionId: n2, taskId: t2.data.taskId, progress: e3 }, "*");
35161
+ }, t2.data.pages).catch(function(e3) {
35162
+ window.postMessage({ type: "@slide/_preload_slide_error_", sessionId: n2, taskId: t2.data.taskId, error: e3 }, "*");
35163
+ });
35164
+ }
35124
35165
  }), window.setInterval(function() {
35125
35166
  yT.flushLog().catch(function() {
35126
35167
  });
@@ -35133,7 +35174,7 @@ void main(void){
35133
35174
  import { AbstractApplication, log as log3 } from "@netless/forge-room";
35134
35175
  import * as Y15 from "yjs";
35135
35176
  import * as Y12 from "yjs";
35136
- import EventEmitter2 from "eventemitter3";
35177
+ import EventEmitter from "eventemitter3";
35137
35178
  import { v4 as uuidv4 } from "uuid";
35138
35179
  import * as Y2 from "yjs";
35139
35180
  import * as Y from "yjs";
@@ -35145,23 +35186,23 @@ import * as Y7 from "yjs";
35145
35186
  import * as Y8 from "yjs";
35146
35187
  import * as Y9 from "yjs";
35147
35188
  import * as Y10 from "yjs";
35148
- import EventEmitter from "eventemitter3";
35189
+ import { AbstractApplicationPermissions } from "@netless/forge-room";
35149
35190
  import * as Y11 from "yjs";
35150
- import EventEmitter3 from "eventemitter3";
35191
+ import EventEmitter2 from "eventemitter3";
35151
35192
  import * as Y13 from "yjs";
35152
- import EventEmitter4 from "eventemitter3";
35193
+ import EventEmitter3 from "eventemitter3";
35194
+ import EventEmitter5 from "eventemitter3";
35195
+ import { EventEmitter as EventEmitter4 } from "eventemitter3";
35196
+ import EventEmitter7 from "eventemitter3";
35153
35197
  import EventEmitter6 from "eventemitter3";
35154
- import { EventEmitter as EventEmitter5 } from "eventemitter3";
35155
35198
  import EventEmitter8 from "eventemitter3";
35156
- import EventEmitter7 from "eventemitter3";
35157
- import EventEmitter9 from "eventemitter3";
35158
35199
  import * as Y14 from "yjs";
35200
+ import EventEmitter9 from "eventemitter3";
35159
35201
  import EventEmitter10 from "eventemitter3";
35160
- import EventEmitter11 from "eventemitter3";
35161
35202
  import { log } from "@netless/forge-room";
35162
- import EventEmitter12 from "eventemitter3";
35203
+ import EventEmitter11 from "eventemitter3";
35163
35204
  import { log as log2 } from "@netless/forge-room";
35164
- import EventEmitter13 from "eventemitter3";
35205
+ import EventEmitter12 from "eventemitter3";
35165
35206
  var __create2 = Object.create;
35166
35207
  var __defProp2 = Object.defineProperty;
35167
35208
  var __getOwnPropDesc2 = Object.getOwnPropertyDescriptor;
@@ -58936,7 +58977,7 @@ var require_lodash = __commonJS2({
58936
58977
  var defer = baseRest(function(func, args) {
58937
58978
  return baseDelay(func, 1, args);
58938
58979
  });
58939
- var delay22 = baseRest(function(func, wait, args) {
58980
+ var delay2 = baseRest(function(func, wait, args) {
58940
58981
  return baseDelay(func, toNumber(wait) || 0, args);
58941
58982
  });
58942
58983
  function flip(func) {
@@ -60050,7 +60091,7 @@ var require_lodash = __commonJS2({
60050
60091
  lodash.defaults = defaults;
60051
60092
  lodash.defaultsDeep = defaultsDeep;
60052
60093
  lodash.defer = defer;
60053
- lodash.delay = delay22;
60094
+ lodash.delay = delay2;
60054
60095
  lodash.difference = difference;
60055
60096
  lodash.differenceBy = differenceBy;
60056
60097
  lodash.differenceWith = differenceWith;
@@ -60843,6 +60884,10 @@ var ElementModel = class _ElementModel {
60843
60884
  const ext = this.styleKeys();
60844
60885
  return Array.from(new Set(["dashArray", "strokeColor", "fillColor", "strokeWidth"].filter((v) => ext.exclude.indexOf(v) < 0).concat(ext.include)));
60845
60886
  }
60887
+ dispose() {
60888
+ this.subDispose();
60889
+ this.root.unobserveDeep(this.handlePropChange);
60890
+ }
60846
60891
  };
60847
60892
  _defineProperty(ElementModel, "KEYS", {
60848
60893
  index: "index",
@@ -60912,12 +60957,15 @@ var CurveModel = class extends ElementModel {
60912
60957
  constructor(root, scope) {
60913
60958
  super(root, scope);
60914
60959
  _defineProperty3(this, "item", null);
60960
+ _defineProperty3(this, "debugPath", void 0);
60961
+ _defineProperty3(this, "debug", false);
60915
60962
  if (!this.root.has("type")) {
60916
60963
  this.root.set("type", "curve");
60917
60964
  }
60918
60965
  if (!this.root.has("points")) {
60919
60966
  this.root.set("points", new Y2.Array());
60920
60967
  }
60968
+ this.debugPath = new scope.Path();
60921
60969
  }
60922
60970
  average(a2, b2) {
60923
60971
  return (a2 + b2) / 2;
@@ -60926,23 +60974,23 @@ var CurveModel = class extends ElementModel {
60926
60974
  const groupPoints = (0, import_lodash.chunk)(points, 2);
60927
60975
  return ae(groupPoints, {
60928
60976
  size: this.strokeWidth,
60929
- smoothing: 0,
60930
- thinning: 0.5,
60977
+ smoothing: 0.5,
60978
+ thinning: -0.5,
60931
60979
  streamline: 0.5,
60932
60980
  simulatePressure: true,
60933
60981
  start: {
60934
- taper: 10,
60982
+ taper: this.strokeWidth * 10,
60935
60983
  cap: true
60936
60984
  },
60937
60985
  end: {
60938
- taper: 10,
60986
+ taper: this.strokeWidth * 20,
60939
60987
  cap: true
60940
60988
  }
60941
60989
  });
60942
60990
  }
60943
60991
  matrixedPoints() {
60944
- const groupPoints = (0, import_lodash.chunk)(this.points, 2);
60945
- return groupPoints.map((_ref) => {
60992
+ const currentPoints = (0, import_lodash.chunk)(this.points, 2);
60993
+ return currentPoints.map((_ref) => {
60946
60994
  let [x, y] = _ref;
60947
60995
  return new this.scope.Point(x, y);
60948
60996
  }).map((p) => p.transform(new this.scope.Matrix(this.pointsMatrix))).reduce((result, next) => {
@@ -60976,27 +61024,41 @@ var CurveModel = class extends ElementModel {
60976
61024
  }
60977
61025
  return path;
60978
61026
  }
60979
- getNextSegments() {
60980
- const points = this.parsePoints(this.matrixedPoints());
60981
- const path = this.createPath(points);
60982
- return path.segments;
61027
+ updateDebugPath() {
61028
+ this.debugPath = new this.scope.Path();
61029
+ const points = (0, import_lodash.chunk)(this.points, 2);
61030
+ for (let i = 0, len = points.length; i < len; i++) {
61031
+ const point = new this.scope.Point(points[i][0], points[i][1]);
61032
+ if (i === 0) {
61033
+ this.debugPath.moveTo(point);
61034
+ } else {
61035
+ this.debugPath.lineTo(point);
61036
+ }
61037
+ this.debugPath.strokeWidth = 1;
61038
+ this.debugPath.strokeColor = new this.scope.Color(1, 0, 0, 1);
61039
+ }
60983
61040
  }
60984
61041
  onVectorUpdate() {
60985
61042
  if (!this.item) {
60986
61043
  return;
60987
61044
  }
61045
+ if (this.debug) {
61046
+ this.debugPath.remove();
61047
+ this.updateDebugPath();
61048
+ }
61049
+ const points = this.parsePoints(this.matrixedPoints());
61050
+ const path = this.createPath(points);
60988
61051
  this.item.removeSegments();
60989
- this.item.addSegments(this.getNextSegments());
60990
- this.item.simplify(2.5);
61052
+ this.item.addSegments(path.segments);
61053
+ if (this.debug) {
61054
+ this.item.addChild(this.debugPath);
61055
+ }
60991
61056
  }
60992
61057
  createPaperItem() {
60993
61058
  this.item = new this.scope.Path();
60994
- this.item.strokeCap = "round";
60995
- this.item.strokeJoin = "round";
60996
- this.item.strokeScaling = false;
60997
61059
  this.item.strokeColor = new this.scope.Color(this.strokeColor);
60998
61060
  this.item.fillColor = new this.scope.Color(this.strokeColor);
60999
- this.item.addSegments(this.getNextSegments());
61061
+ this.onVectorUpdate();
61000
61062
  }
61001
61063
  editorConfig() {
61002
61064
  return new EditorConfig();
@@ -61006,8 +61068,8 @@ var CurveModel = class extends ElementModel {
61006
61068
  }
61007
61069
  styleKeys() {
61008
61070
  return {
61009
- include: ["strokeColor"],
61010
- exclude: ["fillColor", "dashArray"]
61071
+ include: ["strokeColor", "strokeWidth"],
61072
+ exclude: ["dashArray", "fillColor"]
61011
61073
  };
61012
61074
  }
61013
61075
  onStyleKeyUpdate(key) {
@@ -61017,8 +61079,12 @@ var CurveModel = class extends ElementModel {
61017
61079
  if (key === "strokeColor") {
61018
61080
  this.item.strokeColor = new this.scope.Color(this.strokeColor);
61019
61081
  this.item.fillColor = new this.scope.Color(this.strokeColor);
61082
+ } else if (key === "strokeWidth") {
61083
+ this.onVectorUpdate();
61020
61084
  }
61021
61085
  }
61086
+ subDispose() {
61087
+ }
61022
61088
  };
61023
61089
  function _defineProperty4(e, r, t) {
61024
61090
  return (r = _toPropertyKey4(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
@@ -61050,14 +61116,12 @@ var SelectorModel = class extends ElementModel {
61050
61116
  this.root.set("points", initPoints);
61051
61117
  }
61052
61118
  }
61119
+ subDispose() {
61120
+ }
61053
61121
  createPaperRect() {
61054
61122
  const scope = this.scope;
61055
61123
  const bounds = new scope.Rectangle(new scope.Point(this.points[0], this.points[1]), new scope.Size(this.points[2], this.points[3]));
61056
- return new scope.Path.Rectangle(
61057
- bounds,
61058
- new scope.Point(this.points[4], this.points[4])
61059
- // 圆角
61060
- );
61124
+ return new scope.Path.Rectangle(bounds, new scope.Point(this.points[4], this.points[4]));
61061
61125
  }
61062
61126
  onVectorUpdate() {
61063
61127
  if (!this.item) {
@@ -61083,7 +61147,7 @@ var SelectorModel = class extends ElementModel {
61083
61147
  exclude: []
61084
61148
  };
61085
61149
  }
61086
- onStyleKeyUpdate(key) {
61150
+ onStyleKeyUpdate(_key) {
61087
61151
  }
61088
61152
  };
61089
61153
  var import_lodash2 = __toESM2(require_lodash(), 1);
@@ -61130,7 +61194,7 @@ var AnimationFrame = class {
61130
61194
  _defineProperty5(this, "lastTime", 0);
61131
61195
  _defineProperty5(this, "fps", 45);
61132
61196
  _defineProperty5(this, "handleCallbacks", () => {
61133
- let functions = this.callbacks;
61197
+ const functions = this.callbacks;
61134
61198
  this.callbacks = [];
61135
61199
  for (let i = 0, l2 = functions.length; i < l2; i++) {
61136
61200
  functions[i]();
@@ -61181,6 +61245,8 @@ var SegmentsModel = class extends ElementModel {
61181
61245
  this.root.set("points", new Y4.Array());
61182
61246
  }
61183
61247
  }
61248
+ subDispose() {
61249
+ }
61184
61250
  onVectorUpdate() {
61185
61251
  if (!this.item) {
61186
61252
  return;
@@ -61215,7 +61281,7 @@ var SegmentsModel = class extends ElementModel {
61215
61281
  exclude: []
61216
61282
  };
61217
61283
  }
61218
- onStyleKeyUpdate(key) {
61284
+ onStyleKeyUpdate(_key) {
61219
61285
  }
61220
61286
  };
61221
61287
  var import_lodash4 = __toESM2(require_lodash(), 1);
@@ -61302,6 +61368,9 @@ var LineTool = class extends WhiteboardTool {
61302
61368
  this.tool.minDistance = 1;
61303
61369
  }
61304
61370
  onMouseDown(event) {
61371
+ if (this.elementModel) {
61372
+ this.elementModel.dispose();
61373
+ }
61305
61374
  this.elementModel = this.modelGetter().createLinePath(true);
61306
61375
  this.from = event.point.clone();
61307
61376
  this.to = event.point.clone();
@@ -61375,6 +61444,8 @@ var LineModel = class extends ElementModel {
61375
61444
  this.root.set("tailArrow", "normal");
61376
61445
  }
61377
61446
  }
61447
+ subDispose() {
61448
+ }
61378
61449
  onVectorUpdate() {
61379
61450
  if (!this.item) {
61380
61451
  return;
@@ -61411,7 +61482,7 @@ var LineModel = class extends ElementModel {
61411
61482
  this.item.addChildren(this.renderLine());
61412
61483
  }
61413
61484
  createArrow(path) {
61414
- let [headPath, tailPath] = [new this.scope.Path(), new this.scope.Path()];
61485
+ const [headPath, tailPath] = [new this.scope.Path(), new this.scope.Path()];
61415
61486
  if (!path) {
61416
61487
  return [headPath, tailPath];
61417
61488
  }
@@ -61465,7 +61536,7 @@ var LineModel = class extends ElementModel {
61465
61536
  exclude: ["fillColor"]
61466
61537
  };
61467
61538
  }
61468
- onStyleKeyUpdate(key) {
61539
+ onStyleKeyUpdate(_key) {
61469
61540
  this.onVectorUpdate();
61470
61541
  }
61471
61542
  };
@@ -61585,6 +61656,9 @@ var PointTextModel = class extends ElementModel {
61585
61656
  }, 60);
61586
61657
  }
61587
61658
  }
61659
+ subDispose() {
61660
+ this.root.unobserve(this.handleTextPropChange);
61661
+ }
61588
61662
  getInternalMeasurement() {
61589
61663
  if (!this.item) {
61590
61664
  return null;
@@ -61687,6 +61761,8 @@ var TriangleModel = class extends ElementModel {
61687
61761
  this.root.set("points", new Y7.Array());
61688
61762
  }
61689
61763
  }
61764
+ subDispose() {
61765
+ }
61690
61766
  createPaperItem() {
61691
61767
  this.item = new this.scope.Path();
61692
61768
  this.item.strokeCap = "butt";
@@ -61743,7 +61819,7 @@ var TriangleModel = class extends ElementModel {
61743
61819
  exclude: []
61744
61820
  };
61745
61821
  }
61746
- onStyleKeyUpdate(key) {
61822
+ onStyleKeyUpdate(_key) {
61747
61823
  }
61748
61824
  };
61749
61825
  function _defineProperty12(e, r, t) {
@@ -61779,6 +61855,8 @@ var RectangleModel = class extends ElementModel {
61779
61855
  this.root.set("radius", 0);
61780
61856
  }
61781
61857
  }
61858
+ subDispose() {
61859
+ }
61782
61860
  createSegments() {
61783
61861
  const [a2, b2, c, d] = this.points;
61784
61862
  const matrix = new this.scope.Matrix(this.pointsMatrix);
@@ -61910,7 +61988,7 @@ var RectangleModel = class extends ElementModel {
61910
61988
  exclude: []
61911
61989
  };
61912
61990
  }
61913
- onStyleKeyUpdate(key) {
61991
+ onStyleKeyUpdate(_key) {
61914
61992
  }
61915
61993
  };
61916
61994
  var elementsUndoOrigin = "elementsUndoOrigin";
@@ -62046,9 +62124,11 @@ var EraserModel = class extends ElementModel {
62046
62124
  exclude: []
62047
62125
  };
62048
62126
  }
62049
- onStyleKeyUpdate(key) {
62127
+ onStyleKeyUpdate(_key) {
62050
62128
  return;
62051
62129
  }
62130
+ subDispose() {
62131
+ }
62052
62132
  };
62053
62133
  var import_lodash6 = __toESM2(require_lodash(), 1);
62054
62134
  function _defineProperty14(e, r, t) {
@@ -62202,27 +62282,12 @@ var LaserPointerModel = class extends ElementModel {
62202
62282
  exclude: []
62203
62283
  };
62204
62284
  }
62205
- onStyleKeyUpdate(key) {
62285
+ onStyleKeyUpdate(_key) {
62206
62286
  return;
62207
62287
  }
62208
- };
62209
- function _defineProperty15(e, r, t) {
62210
- return (r = _toPropertyKey15(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62211
- }
62212
- function _toPropertyKey15(t) {
62213
- var i = _toPrimitive15(t, "string");
62214
- return "symbol" == typeof i ? i : i + "";
62215
- }
62216
- function _toPrimitive15(t, r) {
62217
- if ("object" != typeof t || !t) return t;
62218
- var e = t[Symbol.toPrimitive];
62219
- if (void 0 !== e) {
62220
- var i = e.call(t, r || "default");
62221
- if ("object" != typeof i) return i;
62222
- throw new TypeError("@@toPrimitive must return a primitive value.");
62288
+ subDispose() {
62223
62289
  }
62224
- return ("string" === r ? String : Number)(t);
62225
- }
62290
+ };
62226
62291
  var WhiteboardPermissionFlag = function(WhiteboardPermissionFlag2) {
62227
62292
  WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["none"] = 0] = "none";
62228
62293
  WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["draw"] = 1] = "draw";
@@ -62235,117 +62300,25 @@ var WhiteboardPermissionFlag = function(WhiteboardPermissionFlag2) {
62235
62300
  WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["all"] = WhiteboardPermissionFlag2.draw | WhiteboardPermissionFlag2.editSelf | WhiteboardPermissionFlag2.editOthers | WhiteboardPermissionFlag2.deleteSelf | WhiteboardPermissionFlag2.deleteOthers | WhiteboardPermissionFlag2.mainView | WhiteboardPermissionFlag2.setOthersView] = "all";
62236
62301
  return WhiteboardPermissionFlag2;
62237
62302
  }({});
62238
- var WhiteboardPermissions = class extends EventEmitter {
62239
- constructor(userManager, requestUserMap) {
62240
- super();
62241
- _defineProperty15(this, "requestUserMap", void 0);
62242
- _defineProperty15(this, "userManager", void 0);
62243
- _defineProperty15(this, "observers", /* @__PURE__ */ new Map());
62244
- _defineProperty15(this, "handleUserLeave", (user) => {
62245
- const cb = this.observers.get(user.id);
62246
- if (cb) {
62247
- this.requestUserMap(user.id).unobserve(cb);
62248
- }
62249
- });
62250
- _defineProperty15(this, "handleUserJoin", (user) => {
62251
- this.addObserve(user.id);
62252
- });
62253
- this.userManager = userManager;
62254
- this.requestUserMap = requestUserMap;
62255
- this.createModel(this.userManager.selfId);
62256
- this.userManager.userIdList().forEach((userId) => {
62257
- this.addObserve(userId);
62258
- });
62259
- this.userManager.on("join", this.handleUserJoin);
62260
- this.userManager.on("leave", this.handleUserLeave);
62261
- }
62262
- addObserve(userId) {
62263
- if (this.observers.has(userId)) {
62264
- return;
62265
- }
62266
- const observer = (evt) => {
62267
- this.handleUserPermissionChange(userId, evt);
62268
- };
62269
- this.observers.set(userId, observer);
62270
- this.requestUserMap(userId).observe(observer);
62271
- }
62272
- createModel(userId) {
62273
- const userMap = this.requestUserMap(userId);
62274
- if (!userMap.has("permission")) {
62275
- userMap.set("permission", 0);
62276
- }
62277
- }
62278
- handleUserPermissionChange(userId, evt) {
62279
- for (const [key, value] of evt.changes.keys.entries()) {
62280
- if (key === "permission") {
62281
- if (value.action === "add" || value.action === "update") {
62282
- const newValue = this.requestUserMap(userId).get("permission");
62283
- this.emit("change", userId, this.resolveFlags(newValue), newValue);
62284
- }
62285
- }
62286
- }
62287
- }
62303
+ var WhiteboardPermissions = class extends AbstractApplicationPermissions {
62288
62304
  /**
62289
- * 解析权限列表组合
62290
- * @param {number} value - 权限数字值
62291
- * @return {WhiteboardPermissionFlag[]} - 权限列表
62292
- */
62305
+ * 解析权限列表组合
62306
+ * @param {number} value - 权限数字值
62307
+ * @return {WhiteboardPermissionFlag[]} - 权限列表
62308
+ */
62293
62309
  resolveFlags(value) {
62294
62310
  return [WhiteboardPermissionFlag.draw, WhiteboardPermissionFlag.editSelf, WhiteboardPermissionFlag.editOthers, WhiteboardPermissionFlag.deleteSelf, WhiteboardPermissionFlag.deleteOthers, WhiteboardPermissionFlag.mainView, WhiteboardPermissionFlag.setOthersView].filter((v) => (v & value) !== 0);
62295
62311
  }
62296
- /**
62297
- * 获取权限列表组合对应的数值
62298
- * @param { string } userId 不传表示获取自己
62299
- */
62300
- getPermissionValue(userId) {
62301
- return this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
62302
- }
62303
- /**
62304
- * 获取权限列表
62305
- * @param {string=} userId 可选, 不传表示获取自己
62306
- */
62307
- getPermissionFlags(userId) {
62308
- const value = this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
62309
- return this.resolveFlags(value);
62310
- }
62311
- /**
62312
- * 返回对应 userId 是否有相应权限
62313
- * @param {string=} userId 可选, 不传表示返回自己是否有相应权限
62314
- * @param {WhiteboardPermissionFlag} flag
62315
- */
62316
- hasPermission(flag, userId) {
62317
- return ((this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0) & flag) !== 0;
62318
- }
62319
- /**
62320
- * 添加权限
62321
- * @param {WhiteboardPermissionFlag} flag 权限标记
62322
- * @param {string=} userId 可选, 为 userId 添加权限, 不传表示为自己添加权限
62323
- */
62324
- addPermission(flag, userId) {
62325
- const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
62326
- const oldValue = userMap.get("permission") ?? 0;
62327
- this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue | flag);
62328
- }
62329
- /**
62330
- * 移除权限
62331
- * @param {WhiteboardPermissionFlag} flag 权限标记
62332
- * @param {string=} userId 可选, 为 userId 移除权限, 不传表示为自己移除权限
62333
- */
62334
- removePermission(flag, userId) {
62335
- const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
62336
- const oldValue = userMap.get("permission") ?? 0;
62337
- this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue & ~flag);
62338
- }
62339
62312
  };
62340
62313
  var import_lodash7 = __toESM2(require_lodash(), 1);
62341
- function _defineProperty16(e, r, t) {
62342
- return (r = _toPropertyKey16(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62314
+ function _defineProperty15(e, r, t) {
62315
+ return (r = _toPropertyKey15(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62343
62316
  }
62344
- function _toPropertyKey16(t) {
62345
- var i = _toPrimitive16(t, "string");
62317
+ function _toPropertyKey15(t) {
62318
+ var i = _toPrimitive15(t, "string");
62346
62319
  return "symbol" == typeof i ? i : i + "";
62347
62320
  }
62348
- function _toPrimitive16(t, r) {
62321
+ function _toPrimitive15(t, r) {
62349
62322
  if ("object" != typeof t || !t) return t;
62350
62323
  var e = t[Symbol.toPrimitive];
62351
62324
  if (void 0 !== e) {
@@ -62358,7 +62331,7 @@ function _toPrimitive16(t, r) {
62358
62331
  var StraightLineModel = class extends ElementModel {
62359
62332
  constructor(root, scope) {
62360
62333
  super(root, scope);
62361
- _defineProperty16(this, "item", null);
62334
+ _defineProperty15(this, "item", null);
62362
62335
  if (!this.root.has("type")) {
62363
62336
  this.root.set("type", "line");
62364
62337
  }
@@ -62366,6 +62339,8 @@ var StraightLineModel = class extends ElementModel {
62366
62339
  this.root.set("points", new Y11.Array());
62367
62340
  }
62368
62341
  }
62342
+ subDispose() {
62343
+ }
62369
62344
  onVectorUpdate() {
62370
62345
  if (!this.item) {
62371
62346
  return;
@@ -62439,7 +62414,7 @@ var StraightLineModel = class extends ElementModel {
62439
62414
  exclude: ["fillColor"]
62440
62415
  };
62441
62416
  }
62442
- onStyleKeyUpdate(key) {
62417
+ onStyleKeyUpdate(_key) {
62443
62418
  if (!this.item) {
62444
62419
  return;
62445
62420
  }
@@ -62448,14 +62423,14 @@ var StraightLineModel = class extends ElementModel {
62448
62423
  this.item.addSegments(path.segments);
62449
62424
  }
62450
62425
  };
62451
- function _defineProperty17(e, r, t) {
62452
- return (r = _toPropertyKey17(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62426
+ function _defineProperty16(e, r, t) {
62427
+ return (r = _toPropertyKey16(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62453
62428
  }
62454
- function _toPropertyKey17(t) {
62455
- var i = _toPrimitive17(t, "string");
62429
+ function _toPropertyKey16(t) {
62430
+ var i = _toPrimitive16(t, "string");
62456
62431
  return "symbol" == typeof i ? i : i + "";
62457
62432
  }
62458
- function _toPrimitive17(t, r) {
62433
+ function _toPrimitive16(t, r) {
62459
62434
  if ("object" != typeof t || !t) return t;
62460
62435
  var e = t[Symbol.toPrimitive];
62461
62436
  if (void 0 !== e) {
@@ -62465,22 +62440,22 @@ function _toPrimitive17(t, r) {
62465
62440
  }
62466
62441
  return ("string" === r ? String : Number)(t);
62467
62442
  }
62468
- var RenderableModel = class extends EventEmitter2 {
62443
+ var RenderableModel = class extends EventEmitter {
62469
62444
  get uuid() {
62470
62445
  return uuidv4();
62471
62446
  }
62472
62447
  constructor(layerId, shadowEmitter, elements, scope, toolbarModel, userManager, hasPermission) {
62473
62448
  super();
62474
- _defineProperty17(this, "scope", void 0);
62475
- _defineProperty17(this, "toolbarModel", void 0);
62476
- _defineProperty17(this, "userManager", void 0);
62477
- _defineProperty17(this, "elementModels", void 0);
62478
- _defineProperty17(this, "elements", void 0);
62479
- _defineProperty17(this, "layerId", void 0);
62480
- _defineProperty17(this, "maxIndex", -1);
62481
- _defineProperty17(this, "hasPermission", void 0);
62482
- _defineProperty17(this, "shadowEmitter", void 0);
62483
- _defineProperty17(this, "onElementsChange", (event) => {
62449
+ _defineProperty16(this, "scope", void 0);
62450
+ _defineProperty16(this, "toolbarModel", void 0);
62451
+ _defineProperty16(this, "userManager", void 0);
62452
+ _defineProperty16(this, "elementModels", void 0);
62453
+ _defineProperty16(this, "elements", void 0);
62454
+ _defineProperty16(this, "layerId", void 0);
62455
+ _defineProperty16(this, "maxIndex", -1);
62456
+ _defineProperty16(this, "hasPermission", void 0);
62457
+ _defineProperty16(this, "shadowEmitter", void 0);
62458
+ _defineProperty16(this, "onElementsChange", (event) => {
62484
62459
  for (const [key, value] of event.changes.keys.entries()) {
62485
62460
  if (value.action === "add") {
62486
62461
  const root = this.elements.get(key);
@@ -62659,7 +62634,7 @@ var RenderableModel = class extends EventEmitter2 {
62659
62634
  return segmentsModel;
62660
62635
  }
62661
62636
  createSelector() {
62662
- let shadow = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
62637
+ let _shadow = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
62663
62638
  if (!this.hasPermission(WhiteboardPermissionFlag.editSelf) && !this.hasPermission(WhiteboardPermissionFlag.deleteOthers)) {
62664
62639
  return null;
62665
62640
  }
@@ -62716,7 +62691,11 @@ var RenderableModel = class extends EventEmitter2 {
62716
62691
  });
62717
62692
  }
62718
62693
  dispose() {
62694
+ this.elements.unobserve(this.onElementsChange);
62719
62695
  this.elements.clear();
62696
+ Array.from(this.elementModels.values()).forEach((model) => {
62697
+ model.dispose();
62698
+ });
62720
62699
  }
62721
62700
  };
62722
62701
  var import_lodash8 = __toESM2(require_lodash(), 1);
@@ -62755,10 +62734,10 @@ var AnglePrecision = Deg2Rad(2);
62755
62734
  var Phi = 0.5 * (-1 + Math.sqrt(5));
62756
62735
  function DollarRecognizer() {
62757
62736
  this.Unistrokes = new Array(3);
62758
- this.Unistrokes[0] = new Unistroke("triangle", new Array(new Point(137, 139), new Point(135, 141), new Point(133, 144), new Point(132, 146), new Point(130, 149), new Point(128, 151), new Point(126, 155), new Point(123, 160), new Point(120, 166), new Point(116, 171), new Point(112, 177), new Point(107, 183), new Point(102, 188), new Point(100, 191), new Point(95, 195), new Point(90, 199), new Point(86, 203), new Point(82, 206), new Point(80, 209), new Point(75, 213), new Point(73, 213), new Point(70, 216), new Point(67, 219), new Point(64, 221), new Point(61, 223), new Point(60, 225), new Point(62, 226), new Point(65, 225), new Point(67, 226), new Point(74, 226), new Point(77, 227), new Point(85, 229), new Point(91, 230), new Point(99, 231), new Point(108, 232), new Point(116, 233), new Point(125, 233), new Point(134, 234), new Point(145, 233), new Point(153, 232), new Point(160, 233), new Point(170, 234), new Point(177, 235), new Point(179, 236), new Point(186, 237), new Point(193, 238), new Point(198, 239), new Point(200, 237), new Point(202, 239), new Point(204, 238), new Point(206, 234), new Point(205, 230), new Point(202, 222), new Point(197, 216), new Point(192, 207), new Point(186, 198), new Point(179, 189), new Point(174, 183), new Point(170, 178), new Point(164, 171), new Point(161, 168), new Point(154, 160), new Point(148, 155), new Point(143, 150), new Point(138, 148), new Point(136, 148)));
62759
- this.Unistrokes[1] = new Unistroke("rectangle", new Array(new Point(78, 149), new Point(78, 153), new Point(78, 157), new Point(78, 160), new Point(79, 162), new Point(79, 164), new Point(79, 167), new Point(79, 169), new Point(79, 173), new Point(79, 178), new Point(79, 183), new Point(80, 189), new Point(80, 193), new Point(80, 198), new Point(80, 202), new Point(81, 208), new Point(81, 210), new Point(81, 216), new Point(82, 222), new Point(82, 224), new Point(82, 227), new Point(83, 229), new Point(83, 231), new Point(85, 230), new Point(88, 232), new Point(90, 233), new Point(92, 232), new Point(94, 233), new Point(99, 232), new Point(102, 233), new Point(106, 233), new Point(109, 234), new Point(117, 235), new Point(123, 236), new Point(126, 236), new Point(135, 237), new Point(142, 238), new Point(145, 238), new Point(152, 238), new Point(154, 239), new Point(165, 238), new Point(174, 237), new Point(179, 236), new Point(186, 235), new Point(191, 235), new Point(195, 233), new Point(197, 233), new Point(200, 233), new Point(201, 235), new Point(201, 233), new Point(199, 231), new Point(198, 226), new Point(198, 220), new Point(196, 207), new Point(195, 195), new Point(195, 181), new Point(195, 173), new Point(195, 163), new Point(194, 155), new Point(192, 145), new Point(192, 143), new Point(192, 138), new Point(191, 135), new Point(191, 133), new Point(191, 130), new Point(190, 128), new Point(188, 129), new Point(186, 129), new Point(181, 132), new Point(173, 131), new Point(162, 131), new Point(151, 132), new Point(149, 132), new Point(138, 132), new Point(136, 132), new Point(122, 131), new Point(120, 131), new Point(109, 130), new Point(107, 130), new Point(90, 132), new Point(81, 133), new Point(76, 133)));
62760
- this.Unistrokes[2] = new Unistroke("circle", new Array(new Point(127, 141), new Point(124, 140), new Point(120, 139), new Point(118, 139), new Point(116, 139), new Point(111, 140), new Point(109, 141), new Point(104, 144), new Point(100, 147), new Point(96, 152), new Point(93, 157), new Point(90, 163), new Point(87, 169), new Point(85, 175), new Point(83, 181), new Point(82, 190), new Point(82, 195), new Point(83, 200), new Point(84, 205), new Point(88, 213), new Point(91, 216), new Point(96, 219), new Point(103, 222), new Point(108, 224), new Point(111, 224), new Point(120, 224), new Point(133, 223), new Point(142, 222), new Point(152, 218), new Point(160, 214), new Point(167, 210), new Point(173, 204), new Point(178, 198), new Point(179, 196), new Point(182, 188), new Point(182, 177), new Point(178, 167), new Point(170, 150), new Point(163, 138), new Point(152, 130), new Point(143, 129), new Point(140, 131), new Point(129, 136), new Point(126, 139)));
62761
- this.Unistrokes[3] = new Unistroke("arrow", new Array(new Point(68, 222), new Point(70, 220), new Point(73, 218), new Point(75, 217), new Point(77, 215), new Point(80, 213), new Point(82, 212), new Point(84, 210), new Point(87, 209), new Point(89, 208), new Point(92, 206), new Point(95, 204), new Point(101, 201), new Point(106, 198), new Point(112, 194), new Point(118, 191), new Point(124, 187), new Point(127, 186), new Point(132, 183), new Point(138, 181), new Point(141, 180), new Point(146, 178), new Point(154, 173), new Point(159, 171), new Point(161, 170), new Point(166, 167), new Point(168, 167), new Point(171, 166), new Point(174, 164), new Point(177, 162), new Point(180, 160), new Point(182, 158), new Point(183, 156), new Point(181, 154), new Point(178, 153), new Point(171, 153), new Point(164, 153), new Point(160, 153), new Point(150, 154), new Point(147, 155), new Point(141, 157), new Point(137, 158), new Point(135, 158), new Point(137, 158), new Point(140, 157), new Point(143, 156), new Point(151, 154), new Point(160, 152), new Point(170, 149), new Point(179, 147), new Point(185, 145), new Point(192, 144), new Point(196, 144), new Point(198, 144), new Point(200, 144), new Point(201, 147), new Point(199, 149), new Point(194, 157), new Point(191, 160), new Point(186, 167), new Point(180, 176), new Point(177, 179), new Point(171, 187), new Point(169, 189), new Point(165, 194), new Point(164, 196)));
62737
+ this.Unistrokes[0] = new Unistroke("triangle", [new Point(137, 139), new Point(135, 141), new Point(133, 144), new Point(132, 146), new Point(130, 149), new Point(128, 151), new Point(126, 155), new Point(123, 160), new Point(120, 166), new Point(116, 171), new Point(112, 177), new Point(107, 183), new Point(102, 188), new Point(100, 191), new Point(95, 195), new Point(90, 199), new Point(86, 203), new Point(82, 206), new Point(80, 209), new Point(75, 213), new Point(73, 213), new Point(70, 216), new Point(67, 219), new Point(64, 221), new Point(61, 223), new Point(60, 225), new Point(62, 226), new Point(65, 225), new Point(67, 226), new Point(74, 226), new Point(77, 227), new Point(85, 229), new Point(91, 230), new Point(99, 231), new Point(108, 232), new Point(116, 233), new Point(125, 233), new Point(134, 234), new Point(145, 233), new Point(153, 232), new Point(160, 233), new Point(170, 234), new Point(177, 235), new Point(179, 236), new Point(186, 237), new Point(193, 238), new Point(198, 239), new Point(200, 237), new Point(202, 239), new Point(204, 238), new Point(206, 234), new Point(205, 230), new Point(202, 222), new Point(197, 216), new Point(192, 207), new Point(186, 198), new Point(179, 189), new Point(174, 183), new Point(170, 178), new Point(164, 171), new Point(161, 168), new Point(154, 160), new Point(148, 155), new Point(143, 150), new Point(138, 148), new Point(136, 148)]);
62738
+ this.Unistrokes[1] = new Unistroke("rectangle", [new Point(78, 149), new Point(78, 153), new Point(78, 157), new Point(78, 160), new Point(79, 162), new Point(79, 164), new Point(79, 167), new Point(79, 169), new Point(79, 173), new Point(79, 178), new Point(79, 183), new Point(80, 189), new Point(80, 193), new Point(80, 198), new Point(80, 202), new Point(81, 208), new Point(81, 210), new Point(81, 216), new Point(82, 222), new Point(82, 224), new Point(82, 227), new Point(83, 229), new Point(83, 231), new Point(85, 230), new Point(88, 232), new Point(90, 233), new Point(92, 232), new Point(94, 233), new Point(99, 232), new Point(102, 233), new Point(106, 233), new Point(109, 234), new Point(117, 235), new Point(123, 236), new Point(126, 236), new Point(135, 237), new Point(142, 238), new Point(145, 238), new Point(152, 238), new Point(154, 239), new Point(165, 238), new Point(174, 237), new Point(179, 236), new Point(186, 235), new Point(191, 235), new Point(195, 233), new Point(197, 233), new Point(200, 233), new Point(201, 235), new Point(201, 233), new Point(199, 231), new Point(198, 226), new Point(198, 220), new Point(196, 207), new Point(195, 195), new Point(195, 181), new Point(195, 173), new Point(195, 163), new Point(194, 155), new Point(192, 145), new Point(192, 143), new Point(192, 138), new Point(191, 135), new Point(191, 133), new Point(191, 130), new Point(190, 128), new Point(188, 129), new Point(186, 129), new Point(181, 132), new Point(173, 131), new Point(162, 131), new Point(151, 132), new Point(149, 132), new Point(138, 132), new Point(136, 132), new Point(122, 131), new Point(120, 131), new Point(109, 130), new Point(107, 130), new Point(90, 132), new Point(81, 133), new Point(76, 133)]);
62739
+ this.Unistrokes[2] = new Unistroke("circle", [new Point(127, 141), new Point(124, 140), new Point(120, 139), new Point(118, 139), new Point(116, 139), new Point(111, 140), new Point(109, 141), new Point(104, 144), new Point(100, 147), new Point(96, 152), new Point(93, 157), new Point(90, 163), new Point(87, 169), new Point(85, 175), new Point(83, 181), new Point(82, 190), new Point(82, 195), new Point(83, 200), new Point(84, 205), new Point(88, 213), new Point(91, 216), new Point(96, 219), new Point(103, 222), new Point(108, 224), new Point(111, 224), new Point(120, 224), new Point(133, 223), new Point(142, 222), new Point(152, 218), new Point(160, 214), new Point(167, 210), new Point(173, 204), new Point(178, 198), new Point(179, 196), new Point(182, 188), new Point(182, 177), new Point(178, 167), new Point(170, 150), new Point(163, 138), new Point(152, 130), new Point(143, 129), new Point(140, 131), new Point(129, 136), new Point(126, 139)]);
62740
+ this.Unistrokes[3] = new Unistroke("arrow", [new Point(68, 222), new Point(70, 220), new Point(73, 218), new Point(75, 217), new Point(77, 215), new Point(80, 213), new Point(82, 212), new Point(84, 210), new Point(87, 209), new Point(89, 208), new Point(92, 206), new Point(95, 204), new Point(101, 201), new Point(106, 198), new Point(112, 194), new Point(118, 191), new Point(124, 187), new Point(127, 186), new Point(132, 183), new Point(138, 181), new Point(141, 180), new Point(146, 178), new Point(154, 173), new Point(159, 171), new Point(161, 170), new Point(166, 167), new Point(168, 167), new Point(171, 166), new Point(174, 164), new Point(177, 162), new Point(180, 160), new Point(182, 158), new Point(183, 156), new Point(181, 154), new Point(178, 153), new Point(171, 153), new Point(164, 153), new Point(160, 153), new Point(150, 154), new Point(147, 155), new Point(141, 157), new Point(137, 158), new Point(135, 158), new Point(137, 158), new Point(140, 157), new Point(143, 156), new Point(151, 154), new Point(160, 152), new Point(170, 149), new Point(179, 147), new Point(185, 145), new Point(192, 144), new Point(196, 144), new Point(198, 144), new Point(200, 144), new Point(201, 147), new Point(199, 149), new Point(194, 157), new Point(191, 160), new Point(186, 167), new Point(180, 176), new Point(177, 179), new Point(171, 187), new Point(169, 189), new Point(165, 194), new Point(164, 196)]);
62762
62741
  this.Recognize = function(points, useProtractor) {
62763
62742
  var t0 = Date.now();
62764
62743
  var candidate = new Unistroke("", points);
@@ -62819,7 +62798,7 @@ function RotateBy(points, radians) {
62819
62798
  var c = Centroid(points);
62820
62799
  var cos = Math.cos(radians);
62821
62800
  var sin = Math.sin(radians);
62822
- var newpoints = new Array();
62801
+ var newpoints = [];
62823
62802
  for (var i = 0; i < points.length; i++) {
62824
62803
  var qx = (points[i].X - c.X) * cos - (points[i].Y - c.Y) * sin + c.X;
62825
62804
  var qy = (points[i].X - c.X) * sin + (points[i].Y - c.Y) * cos + c.Y;
@@ -62829,7 +62808,7 @@ function RotateBy(points, radians) {
62829
62808
  }
62830
62809
  function ScaleTo(points, size) {
62831
62810
  var B2 = BoundingBox(points);
62832
- var newpoints = new Array();
62811
+ var newpoints = [];
62833
62812
  for (var i = 0; i < points.length; i++) {
62834
62813
  var qx = points[i].X * (size / B2.Width);
62835
62814
  var qy = points[i].Y * (size / B2.Height);
@@ -62839,7 +62818,7 @@ function ScaleTo(points, size) {
62839
62818
  }
62840
62819
  function TranslateTo(points, pt) {
62841
62820
  var c = Centroid(points);
62842
- var newpoints = new Array();
62821
+ var newpoints = [];
62843
62822
  for (var i = 0; i < points.length; i++) {
62844
62823
  var qx = points[i].X + pt.X - c.X;
62845
62824
  var qy = points[i].Y + pt.Y - c.Y;
@@ -62849,14 +62828,14 @@ function TranslateTo(points, pt) {
62849
62828
  }
62850
62829
  function Vectorize(points) {
62851
62830
  var sum = 0;
62852
- var vector = new Array();
62853
- for (var i = 0; i < points.length; i++) {
62831
+ var vector = [];
62832
+ for (let i = 0; i < points.length; i++) {
62854
62833
  vector[vector.length] = points[i].X;
62855
62834
  vector[vector.length] = points[i].Y;
62856
62835
  sum += points[i].X * points[i].X + points[i].Y * points[i].Y;
62857
62836
  }
62858
62837
  var magnitude = Math.sqrt(sum);
62859
- for (var i = 0; i < vector.length; i++)
62838
+ for (let i = 0; i < vector.length; i++)
62860
62839
  vector[i] /= magnitude;
62861
62840
  return vector;
62862
62841
  }
@@ -62936,14 +62915,14 @@ function Distance(p1, p2) {
62936
62915
  function Deg2Rad(d) {
62937
62916
  return d * Math.PI / 180;
62938
62917
  }
62939
- function _defineProperty18(e, r, t) {
62940
- return (r = _toPropertyKey18(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62918
+ function _defineProperty17(e, r, t) {
62919
+ return (r = _toPropertyKey17(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62941
62920
  }
62942
- function _toPropertyKey18(t) {
62943
- var i = _toPrimitive18(t, "string");
62921
+ function _toPropertyKey17(t) {
62922
+ var i = _toPrimitive17(t, "string");
62944
62923
  return "symbol" == typeof i ? i : i + "";
62945
62924
  }
62946
- function _toPrimitive18(t, r) {
62925
+ function _toPrimitive17(t, r) {
62947
62926
  if ("object" != typeof t || !t) return t;
62948
62927
  var e = t[Symbol.toPrimitive];
62949
62928
  if (void 0 !== e) {
@@ -62955,7 +62934,7 @@ function _toPrimitive18(t, r) {
62955
62934
  }
62956
62935
  var Recognizer = class {
62957
62936
  constructor() {
62958
- _defineProperty18(this, "dollar", new DollarRecognizer());
62937
+ _defineProperty17(this, "dollar", new DollarRecognizer());
62959
62938
  }
62960
62939
  recognize(points) {
62961
62940
  let minX = Number.MAX_VALUE;
@@ -62981,14 +62960,14 @@ var Recognizer = class {
62981
62960
  return null;
62982
62961
  }
62983
62962
  };
62984
- function _defineProperty19(e, r, t) {
62985
- return (r = _toPropertyKey19(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62963
+ function _defineProperty18(e, r, t) {
62964
+ return (r = _toPropertyKey18(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
62986
62965
  }
62987
- function _toPropertyKey19(t) {
62988
- var i = _toPrimitive19(t, "string");
62966
+ function _toPropertyKey18(t) {
62967
+ var i = _toPrimitive18(t, "string");
62989
62968
  return "symbol" == typeof i ? i : i + "";
62990
62969
  }
62991
- function _toPrimitive19(t, r) {
62970
+ function _toPrimitive18(t, r) {
62992
62971
  if ("object" != typeof t || !t) return t;
62993
62972
  var e = t[Symbol.toPrimitive];
62994
62973
  if (void 0 !== e) {
@@ -63001,22 +62980,40 @@ function _toPrimitive19(t, r) {
63001
62980
  var CurveTool = class extends WhiteboardTool {
63002
62981
  constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
63003
62982
  super(enableToolEvent, modelGetter, shadowEmitter, scope);
63004
- _defineProperty19(this, "elementModel", null);
63005
- _defineProperty19(this, "recognizer", new Recognizer());
63006
- _defineProperty19(this, "pointCount", 0);
62983
+ _defineProperty18(this, "elementModel", null);
62984
+ _defineProperty18(this, "recognizer", new Recognizer());
62985
+ _defineProperty18(this, "pointCount", 0);
63007
62986
  this.tool.minDistance = 1;
63008
62987
  }
63009
- onMouseDown(event) {
62988
+ onMouseDown(_event) {
63010
62989
  this.pointCount = 0;
62990
+ if (this.elementModel) {
62991
+ this.elementModel.dispose();
62992
+ }
63011
62993
  this.elementModel = this.modelGetter().createCurve(true);
63012
62994
  }
63013
62995
  onMouseDrag(event) {
63014
62996
  if (this.pointCount > 1024) {
63015
62997
  return;
63016
62998
  }
62999
+ const MIN_DISTANCE = 4;
63017
63000
  if (this.elementModel) {
63018
- this.pointCount += 1;
63019
- this.elementModel.appendPoints([Math.round(event.point.x), Math.round(event.point.y)]);
63001
+ const len = this.elementModel.points.length;
63002
+ let last = {
63003
+ x: 0,
63004
+ y: 0
63005
+ };
63006
+ if (len >= 2) {
63007
+ last = {
63008
+ x: this.elementModel.points[len - 2],
63009
+ y: this.elementModel.points[len - 1]
63010
+ };
63011
+ }
63012
+ const dist = Math.max(Math.abs(last.x - event.point.x), Math.abs(last.y - event.point.y));
63013
+ if (dist >= MIN_DISTANCE) {
63014
+ this.pointCount += 1;
63015
+ this.elementModel.appendPoints([Math.round(event.point.x), Math.round(event.point.y)]);
63016
+ }
63020
63017
  }
63021
63018
  }
63022
63019
  onMouseUp(event) {
@@ -63050,14 +63047,14 @@ var CurveTool = class extends WhiteboardTool {
63050
63047
  }
63051
63048
  }
63052
63049
  };
63053
- function _defineProperty20(e, r, t) {
63054
- return (r = _toPropertyKey20(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63050
+ function _defineProperty19(e, r, t) {
63051
+ return (r = _toPropertyKey19(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63055
63052
  }
63056
- function _toPropertyKey20(t) {
63057
- var i = _toPrimitive20(t, "string");
63053
+ function _toPropertyKey19(t) {
63054
+ var i = _toPrimitive19(t, "string");
63058
63055
  return "symbol" == typeof i ? i : i + "";
63059
63056
  }
63060
- function _toPrimitive20(t, r) {
63057
+ function _toPrimitive19(t, r) {
63061
63058
  if ("object" != typeof t || !t) return t;
63062
63059
  var e = t[Symbol.toPrimitive];
63063
63060
  if (void 0 !== e) {
@@ -63070,12 +63067,15 @@ function _toPrimitive20(t, r) {
63070
63067
  var RectangleTool = class extends WhiteboardTool {
63071
63068
  constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
63072
63069
  super(enableToolEvent, modelGetter, shadowEmitter, scope);
63073
- _defineProperty20(this, "elementModel", null);
63074
- _defineProperty20(this, "from", null);
63075
- _defineProperty20(this, "to", null);
63070
+ _defineProperty19(this, "elementModel", null);
63071
+ _defineProperty19(this, "from", null);
63072
+ _defineProperty19(this, "to", null);
63076
63073
  this.tool.minDistance = 1;
63077
63074
  }
63078
63075
  onMouseDown(event) {
63076
+ if (this.elementModel) {
63077
+ this.elementModel.dispose();
63078
+ }
63079
63079
  this.elementModel = this.modelGetter().createRectangle(true);
63080
63080
  this.from = event.point.clone();
63081
63081
  this.to = event.point.clone();
@@ -63095,14 +63095,14 @@ var RectangleTool = class extends WhiteboardTool {
63095
63095
  }
63096
63096
  }
63097
63097
  };
63098
- function _defineProperty21(e, r, t) {
63099
- return (r = _toPropertyKey21(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63098
+ function _defineProperty20(e, r, t) {
63099
+ return (r = _toPropertyKey20(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63100
63100
  }
63101
- function _toPropertyKey21(t) {
63102
- var i = _toPrimitive21(t, "string");
63101
+ function _toPropertyKey20(t) {
63102
+ var i = _toPrimitive20(t, "string");
63103
63103
  return "symbol" == typeof i ? i : i + "";
63104
63104
  }
63105
- function _toPrimitive21(t, r) {
63105
+ function _toPrimitive20(t, r) {
63106
63106
  if ("object" != typeof t || !t) return t;
63107
63107
  var e = t[Symbol.toPrimitive];
63108
63108
  if (void 0 !== e) {
@@ -63121,7 +63121,7 @@ var TOOLBAR_KEYS = {
63121
63121
  strokeWidth: "strokeWidth",
63122
63122
  dashArray: "dashArray"
63123
63123
  };
63124
- var ToolbarModel = class extends EventEmitter3 {
63124
+ var ToolbarModel = class extends EventEmitter2 {
63125
63125
  get currentTool() {
63126
63126
  return this.root.get(TOOLBAR_KEYS.tool);
63127
63127
  }
@@ -63166,8 +63166,8 @@ var ToolbarModel = class extends EventEmitter3 {
63166
63166
  }
63167
63167
  constructor(root, defaultStyle) {
63168
63168
  super();
63169
- _defineProperty21(this, "root", void 0);
63170
- _defineProperty21(this, "handleRootUpdate", (evt) => {
63169
+ _defineProperty20(this, "root", void 0);
63170
+ _defineProperty20(this, "handleRootUpdate", (evt) => {
63171
63171
  for (const [key, value] of evt.changes.keys.entries()) {
63172
63172
  if (Object.keys(TOOLBAR_KEYS).indexOf(key) >= 0 && (value.action === "add" || value.action === "update")) {
63173
63173
  this.emit("update", {
@@ -63190,15 +63190,19 @@ var ToolbarModel = class extends EventEmitter3 {
63190
63190
  }
63191
63191
  });
63192
63192
  }
63193
+ dispose() {
63194
+ this.root.unobserve(this.handleRootUpdate);
63195
+ this.removeAllListeners();
63196
+ }
63193
63197
  };
63194
- function _defineProperty22(e, r, t) {
63195
- return (r = _toPropertyKey22(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63198
+ function _defineProperty21(e, r, t) {
63199
+ return (r = _toPropertyKey21(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63196
63200
  }
63197
- function _toPropertyKey22(t) {
63198
- var i = _toPrimitive22(t, "string");
63201
+ function _toPropertyKey21(t) {
63202
+ var i = _toPrimitive21(t, "string");
63199
63203
  return "symbol" == typeof i ? i : i + "";
63200
63204
  }
63201
- function _toPrimitive22(t, r) {
63205
+ function _toPrimitive21(t, r) {
63202
63206
  if ("object" != typeof t || !t) return t;
63203
63207
  var e = t[Symbol.toPrimitive];
63204
63208
  if (void 0 !== e) {
@@ -63211,16 +63215,19 @@ function _toPrimitive22(t, r) {
63211
63215
  var SelectorTool = class extends WhiteboardTool {
63212
63216
  constructor(enableToolEvent, renderableModel, shadowEmitter, scope, selectElementsModel) {
63213
63217
  super(enableToolEvent, renderableModel, shadowEmitter, scope);
63214
- _defineProperty22(this, "elementModel", null);
63215
- _defineProperty22(this, "from", null);
63216
- _defineProperty22(this, "to", null);
63217
- _defineProperty22(this, "selectElementsModel", void 0);
63218
- _defineProperty22(this, "selectElements", /* @__PURE__ */ new Map());
63218
+ _defineProperty21(this, "elementModel", null);
63219
+ _defineProperty21(this, "from", null);
63220
+ _defineProperty21(this, "to", null);
63221
+ _defineProperty21(this, "selectElementsModel", void 0);
63222
+ _defineProperty21(this, "selectElements", /* @__PURE__ */ new Map());
63219
63223
  this.selectElementsModel = selectElementsModel;
63220
63224
  }
63221
63225
  onMouseDown(event) {
63222
63226
  this.from = null;
63223
63227
  this.to = null;
63228
+ if (this.elementModel) {
63229
+ this.elementModel.dispose();
63230
+ }
63224
63231
  this.elementModel = this.modelGetter().createSelector();
63225
63232
  this.from = event.point.clone();
63226
63233
  this.to = event.point.clone();
@@ -63276,14 +63283,14 @@ var WhiteboardKeys = {
63276
63283
  viewMatrix: "viewMatrix",
63277
63284
  cameraMode: "cameraMode"
63278
63285
  };
63279
- function _defineProperty23(e, r, t) {
63280
- return (r = _toPropertyKey23(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63286
+ function _defineProperty22(e, r, t) {
63287
+ return (r = _toPropertyKey22(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63281
63288
  }
63282
- function _toPropertyKey23(t) {
63283
- var i = _toPrimitive23(t, "string");
63289
+ function _toPropertyKey22(t) {
63290
+ var i = _toPrimitive22(t, "string");
63284
63291
  return "symbol" == typeof i ? i : i + "";
63285
63292
  }
63286
- function _toPrimitive23(t, r) {
63293
+ function _toPrimitive22(t, r) {
63287
63294
  if ("object" != typeof t || !t) return t;
63288
63295
  var e = t[Symbol.toPrimitive];
63289
63296
  if (void 0 !== e) {
@@ -63293,7 +63300,7 @@ function _toPrimitive23(t, r) {
63293
63300
  }
63294
63301
  return ("string" === r ? String : Number)(t);
63295
63302
  }
63296
- var SelectElementsModel = class extends EventEmitter4 {
63303
+ var SelectElementsModel = class extends EventEmitter3 {
63297
63304
  get hasEditSelfPermission() {
63298
63305
  return this.hasPermission(WhiteboardPermissionFlag.editSelf);
63299
63306
  }
@@ -63302,24 +63309,28 @@ var SelectElementsModel = class extends EventEmitter4 {
63302
63309
  }
63303
63310
  constructor(userManager, requestUserMap, hasPermission) {
63304
63311
  super();
63305
- _defineProperty23(this, "requestUserMap", void 0);
63306
- _defineProperty23(this, "userManager", void 0);
63307
- _defineProperty23(this, "hasPermission", void 0);
63308
- _defineProperty23(this, "observers", /* @__PURE__ */ new Map());
63309
- _defineProperty23(this, "handleUserLeave", (user) => {
63312
+ _defineProperty22(this, "requestUserMap", void 0);
63313
+ _defineProperty22(this, "userManager", void 0);
63314
+ _defineProperty22(this, "hasPermission", void 0);
63315
+ _defineProperty22(this, "observers", /* @__PURE__ */ new Map());
63316
+ _defineProperty22(this, "handleUserLeave", (user) => {
63310
63317
  const cb = this.observers.get(user.id);
63311
63318
  if (cb) {
63312
63319
  this.requestUserMap(user.id).unobserveDeep(cb);
63320
+ this.observers.delete(user.id);
63313
63321
  }
63314
63322
  });
63315
- _defineProperty23(this, "handleUserJoin", (user) => {
63323
+ _defineProperty22(this, "handleUserJoin", (user) => {
63316
63324
  const observer = (evts) => {
63317
63325
  this.handleUserSelectElementsChange(user.id, evts);
63318
63326
  };
63327
+ if (this.observers.has(user.id)) {
63328
+ this.requestUserMap(user.id).unobserveDeep(this.observers.get(user.id));
63329
+ }
63319
63330
  this.requestUserMap(user.id).observeDeep(observer);
63320
63331
  this.observers.set(user.id, observer);
63321
63332
  });
63322
- _defineProperty23(this, "handleUserSelectElementsChange", (userId, evts) => {
63333
+ _defineProperty22(this, "handleUserSelectElementsChange", (userId, evts) => {
63323
63334
  for (const evt of evts) {
63324
63335
  if (evt.target.get("inner-map-id") === WhiteboardKeys.selectElements) {
63325
63336
  const elementIds = Array.from(evt.target.keys()).filter((v) => v !== "inner-map-id");
@@ -63335,6 +63346,9 @@ var SelectElementsModel = class extends EventEmitter4 {
63335
63346
  const observer = (evts) => {
63336
63347
  this.handleUserSelectElementsChange(userId, evts);
63337
63348
  };
63349
+ if (this.observers.has(userId)) {
63350
+ this.requestUserMap(userId).unobserveDeep(this.observers.get(userId));
63351
+ }
63338
63352
  this.requestUserMap(userId).observeDeep(observer);
63339
63353
  this.observers.set(userId, observer);
63340
63354
  });
@@ -63389,25 +63403,22 @@ var SelectElementsModel = class extends EventEmitter4 {
63389
63403
  });
63390
63404
  }
63391
63405
  dispose() {
63392
- this.userManager.userIdList().forEach((userId) => {
63393
- const cb = this.observers.get(userId);
63394
- if (cb) {
63395
- this.requestUserMap(userId).unobserveDeep(cb);
63396
- }
63397
- });
63406
+ for (const [key, value] of this.observers.entries()) {
63407
+ this.requestUserMap(key).unobserveDeep(value);
63408
+ }
63398
63409
  this.observers.clear();
63399
63410
  this.userManager.off("leave", this.handleUserLeave);
63400
63411
  this.userManager.off("join", this.handleUserJoin);
63401
63412
  }
63402
63413
  };
63403
- function _defineProperty24(e, r, t) {
63404
- return (r = _toPropertyKey24(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63414
+ function _defineProperty23(e, r, t) {
63415
+ return (r = _toPropertyKey23(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63405
63416
  }
63406
- function _toPropertyKey24(t) {
63407
- var i = _toPrimitive24(t, "string");
63417
+ function _toPropertyKey23(t) {
63418
+ var i = _toPrimitive23(t, "string");
63408
63419
  return "symbol" == typeof i ? i : i + "";
63409
63420
  }
63410
- function _toPrimitive24(t, r) {
63421
+ function _toPrimitive23(t, r) {
63411
63422
  if ("object" != typeof t || !t) return t;
63412
63423
  var e = t[Symbol.toPrimitive];
63413
63424
  if (void 0 !== e) {
@@ -63417,31 +63428,31 @@ function _toPrimitive24(t, r) {
63417
63428
  }
63418
63429
  return ("string" === r ? String : Number)(t);
63419
63430
  }
63420
- var TextEditor = class extends EventEmitter5 {
63431
+ var TextEditor = class extends EventEmitter4 {
63421
63432
  constructor(camera) {
63422
63433
  super();
63423
- _defineProperty24(this, "rootView", void 0);
63424
- _defineProperty24(this, "content", void 0);
63425
- _defineProperty24(this, "camera", void 0);
63426
- _defineProperty24(this, "originX", 0);
63427
- _defineProperty24(this, "originY", 0);
63428
- _defineProperty24(this, "rotation", 0);
63429
- _defineProperty24(this, "scale", 1);
63430
- _defineProperty24(this, "handleContentInput", () => {
63434
+ _defineProperty23(this, "rootView", void 0);
63435
+ _defineProperty23(this, "content", void 0);
63436
+ _defineProperty23(this, "camera", void 0);
63437
+ _defineProperty23(this, "originX", 0);
63438
+ _defineProperty23(this, "originY", 0);
63439
+ _defineProperty23(this, "rotation", 0);
63440
+ _defineProperty23(this, "scale", 1);
63441
+ _defineProperty23(this, "handleContentInput", () => {
63431
63442
  this.emit("change", this.content.textContent ?? "");
63432
63443
  this.translateCaretIntoView();
63433
63444
  });
63434
- _defineProperty24(this, "handleContentKeydown", (evt) => {
63445
+ _defineProperty23(this, "handleContentKeydown", (evt) => {
63435
63446
  if (/^Arrow/.test(evt.key)) {
63436
63447
  setTimeout(() => {
63437
63448
  this.translateCaretIntoView();
63438
63449
  }, 50);
63439
63450
  }
63440
63451
  });
63441
- _defineProperty24(this, "handleContentBlur", () => {
63452
+ _defineProperty23(this, "handleContentBlur", () => {
63442
63453
  this.emit("done", this.content.textContent ?? "");
63443
63454
  });
63444
- _defineProperty24(this, "handleRootClick", (evt) => {
63455
+ _defineProperty23(this, "handleRootClick", (evt) => {
63445
63456
  if (evt.target === this.rootView) {
63446
63457
  evt.stopPropagation();
63447
63458
  evt.preventDefault();
@@ -63450,12 +63461,12 @@ var TextEditor = class extends EventEmitter5 {
63450
63461
  });
63451
63462
  this.camera = camera;
63452
63463
  this.rootView = document.createElement("div");
63453
- this.rootView.style.cssText = `position:absolute;width:100%;height:100%;top:0;left:0;overflow:hidden;`;
63464
+ this.rootView.style.cssText = "position:absolute;width:100%;height:100%;top:0;left:0;overflow:hidden;";
63454
63465
  this.content = document.createElement("div");
63455
63466
  this.content.setAttribute("spellcheck", "false");
63456
63467
  this.content.textContent = "";
63457
63468
  this.content.setAttribute("contenteditable", "plaintext-only");
63458
- this.content.style.cssText = `white-space: nowrap;border:1px solid red;text-wrap:nowrap;caret-color:red;line-height:1.2em;position:absolute;z-index:2;color:transparent;outline:none;`;
63469
+ this.content.style.cssText = "white-space: nowrap;border:1px solid red;text-wrap:nowrap;caret-color:red;line-height:1.2em;position:absolute;z-index:2;color:transparent;outline:none;";
63459
63470
  this.content.style.transformOrigin = "0 0";
63460
63471
  this.rootView.appendChild(this.content);
63461
63472
  this.content.addEventListener("input", this.handleContentInput);
@@ -63531,14 +63542,14 @@ var TextEditor = class extends EventEmitter5 {
63531
63542
  this.rootView.removeEventListener("pointerdown", this.handleRootClick);
63532
63543
  }
63533
63544
  };
63534
- function _defineProperty25(e, r, t) {
63535
- return (r = _toPropertyKey25(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63545
+ function _defineProperty24(e, r, t) {
63546
+ return (r = _toPropertyKey24(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
63536
63547
  }
63537
- function _toPropertyKey25(t) {
63538
- var i = _toPrimitive25(t, "string");
63548
+ function _toPropertyKey24(t) {
63549
+ var i = _toPrimitive24(t, "string");
63539
63550
  return "symbol" == typeof i ? i : i + "";
63540
63551
  }
63541
- function _toPrimitive25(t, r) {
63552
+ function _toPrimitive24(t, r) {
63542
63553
  if ("object" != typeof t || !t) return t;
63543
63554
  var e = t[Symbol.toPrimitive];
63544
63555
  if (void 0 !== e) {
@@ -63558,7 +63569,7 @@ var ANCHOR_STYLE = {
63558
63569
  b: "cursor:s-resize;bottom:-3px;left:50%;translate:-50%;",
63559
63570
  br: "cursor:se-resize;bottom:-3px;right:-3px"
63560
63571
  };
63561
- var Bounds = class extends EventEmitter6 {
63572
+ var Bounds = class extends EventEmitter5 {
63562
63573
  get width() {
63563
63574
  return this.maxX - this.minX;
63564
63575
  }
@@ -63573,12 +63584,12 @@ var Bounds = class extends EventEmitter6 {
63573
63584
  }
63574
63585
  constructor(binding, scope) {
63575
63586
  super();
63576
- _defineProperty25(this, "minX", 0);
63577
- _defineProperty25(this, "minY", 0);
63578
- _defineProperty25(this, "maxX", 0);
63579
- _defineProperty25(this, "maxY", 0);
63580
- _defineProperty25(this, "binding", void 0);
63581
- _defineProperty25(this, "scope", void 0);
63587
+ _defineProperty24(this, "minX", 0);
63588
+ _defineProperty24(this, "minY", 0);
63589
+ _defineProperty24(this, "maxX", 0);
63590
+ _defineProperty24(this, "maxY", 0);
63591
+ _defineProperty24(this, "binding", void 0);
63592
+ _defineProperty24(this, "scope", void 0);
63582
63593
  this.binding = binding;
63583
63594
  this.scope = scope;
63584
63595
  }
@@ -63697,35 +63708,35 @@ var Bounds = class extends EventEmitter6 {
63697
63708
  this.maxY = maxY;
63698
63709
  }
63699
63710
  };
63700
- var Editor = class extends EventEmitter6 {
63711
+ var Editor = class extends EventEmitter5 {
63701
63712
  constructor(scope, shadowScope, shadowEmitter, canvasElement, camera, initConfig) {
63702
63713
  super();
63703
- _defineProperty25(this, "rootView", void 0);
63704
- _defineProperty25(this, "frame", void 0);
63705
- _defineProperty25(this, "rotator", void 0);
63706
- _defineProperty25(this, "scope", void 0);
63707
- _defineProperty25(this, "shadowScope", void 0);
63708
- _defineProperty25(this, "shadowContainer", void 0);
63709
- _defineProperty25(this, "ctrlUserMap", void 0);
63710
- _defineProperty25(this, "viewerId", void 0);
63711
- _defineProperty25(this, "ctrlId", void 0);
63712
- _defineProperty25(this, "ctrlNickName", void 0);
63713
- _defineProperty25(this, "editMode", null);
63714
- _defineProperty25(this, "editCtrlName", null);
63715
- _defineProperty25(this, "editAnchor", null);
63716
- _defineProperty25(this, "lastEditPoint", null);
63717
- _defineProperty25(this, "bounds", void 0);
63718
- _defineProperty25(this, "targets", []);
63719
- _defineProperty25(this, "editorConfig", null);
63720
- _defineProperty25(this, "aspectRatio", -1);
63721
- _defineProperty25(this, "uniformScale", false);
63722
- _defineProperty25(this, "camera", void 0);
63723
- _defineProperty25(this, "canvasElement", void 0);
63724
- _defineProperty25(this, "resizeObserver", void 0);
63725
- _defineProperty25(this, "anchors", []);
63726
- _defineProperty25(this, "title", null);
63727
- _defineProperty25(this, "shadowEmitter", void 0);
63728
- _defineProperty25(this, "handleMatrix", (matrix) => {
63714
+ _defineProperty24(this, "rootView", void 0);
63715
+ _defineProperty24(this, "frame", void 0);
63716
+ _defineProperty24(this, "rotator", void 0);
63717
+ _defineProperty24(this, "scope", void 0);
63718
+ _defineProperty24(this, "shadowScope", void 0);
63719
+ _defineProperty24(this, "shadowContainer", void 0);
63720
+ _defineProperty24(this, "ctrlUserMap", void 0);
63721
+ _defineProperty24(this, "viewerId", void 0);
63722
+ _defineProperty24(this, "ctrlId", void 0);
63723
+ _defineProperty24(this, "ctrlNickName", void 0);
63724
+ _defineProperty24(this, "editMode", null);
63725
+ _defineProperty24(this, "editCtrlName", null);
63726
+ _defineProperty24(this, "editAnchor", null);
63727
+ _defineProperty24(this, "lastEditPoint", null);
63728
+ _defineProperty24(this, "bounds", void 0);
63729
+ _defineProperty24(this, "targets", []);
63730
+ _defineProperty24(this, "editorConfig", null);
63731
+ _defineProperty24(this, "aspectRatio", -1);
63732
+ _defineProperty24(this, "uniformScale", false);
63733
+ _defineProperty24(this, "camera", void 0);
63734
+ _defineProperty24(this, "canvasElement", void 0);
63735
+ _defineProperty24(this, "resizeObserver", void 0);
63736
+ _defineProperty24(this, "anchors", []);
63737
+ _defineProperty24(this, "title", null);
63738
+ _defineProperty24(this, "shadowEmitter", void 0);
63739
+ _defineProperty24(this, "handleMatrix", (matrix) => {
63729
63740
  if (this.shadowContainer) {
63730
63741
  const next = matrix.appended(this.shadowContainer.data.shadowMatrix ?? new this.shadowScope.Matrix());
63731
63742
  this.shadowContainer.data.shadowMatrix = next;
@@ -63735,7 +63746,7 @@ var Editor = class extends EventEmitter6 {
63735
63746
  this.targets.forEach((target) => target.appendPointsMatrix(matrix));
63736
63747
  }
63737
63748
  });
63738
- _defineProperty25(this, "handlePointerDown", (evt) => {
63749
+ _defineProperty24(this, "handlePointerDown", (evt) => {
63739
63750
  if (!evt.target) {
63740
63751
  return;
63741
63752
  }
@@ -63791,14 +63802,14 @@ var Editor = class extends EventEmitter6 {
63791
63802
  };
63792
63803
  }
63793
63804
  });
63794
- _defineProperty25(this, "handlePointerMove", (evt) => {
63805
+ _defineProperty24(this, "handlePointerMove", (evt) => {
63795
63806
  evt.preventDefault();
63796
63807
  if (!evt.target) {
63797
63808
  return;
63798
63809
  }
63799
63810
  if (this.editMode === "matrix" && this.editAnchor && this.lastEditPoint) {
63800
63811
  const offsetX = evt.pageX - this.lastEditPoint.x;
63801
- let offsetY = evt.pageY - this.lastEditPoint.y;
63812
+ const offsetY = evt.pageY - this.lastEditPoint.y;
63802
63813
  this.bounds.offsetBy(this.editAnchor, offsetX, offsetY, this.uniformScale ? this.aspectRatio : -1);
63803
63814
  this.lastEditPoint = {
63804
63815
  x: evt.pageX,
@@ -63823,7 +63834,7 @@ var Editor = class extends EventEmitter6 {
63823
63834
  }
63824
63835
  if (this.editMode === "translate" && this.lastEditPoint) {
63825
63836
  const offsetX = evt.pageX - this.lastEditPoint.x;
63826
- let offsetY = evt.pageY - this.lastEditPoint.y;
63837
+ const offsetY = evt.pageY - this.lastEditPoint.y;
63827
63838
  this.bounds.translate(offsetX, offsetY);
63828
63839
  this.updateBoundsByShadow();
63829
63840
  this.lastEditPoint = {
@@ -63842,7 +63853,7 @@ var Editor = class extends EventEmitter6 {
63842
63853
  }
63843
63854
  }
63844
63855
  });
63845
- _defineProperty25(this, "handlePointerUp", (evt) => {
63856
+ _defineProperty24(this, "handlePointerUp", (evt) => {
63846
63857
  evt.preventDefault();
63847
63858
  this.resetShadow();
63848
63859
  this.shadowEmitter.setActive(false);
@@ -63859,7 +63870,7 @@ var Editor = class extends EventEmitter6 {
63859
63870
  this.lastEditPoint = null;
63860
63871
  this.uniformScale = false;
63861
63872
  });
63862
- _defineProperty25(this, "handleFrameDBClick", (evt) => {
63873
+ _defineProperty24(this, "handleFrameDBClick", (evt) => {
63863
63874
  if (evt.target === this.frame && this.targets.length === 1) {
63864
63875
  if (this.targets[0].type === "point-text") {
63865
63876
  this.frame.style.display = "none";
@@ -63867,7 +63878,7 @@ var Editor = class extends EventEmitter6 {
63867
63878
  }
63868
63879
  }
63869
63880
  });
63870
- _defineProperty25(this, "updateBounds", () => {
63881
+ _defineProperty24(this, "updateBounds", () => {
63871
63882
  let minX = Number.MAX_VALUE;
63872
63883
  let maxX = -Number.MAX_VALUE;
63873
63884
  let minY = Number.MAX_VALUE;
@@ -63900,7 +63911,7 @@ var Editor = class extends EventEmitter6 {
63900
63911
  this.ctrlId = initConfig.ctrlId;
63901
63912
  this.ctrlNickName = initConfig.ctrlNickName;
63902
63913
  this.rootView = document.createElement("div");
63903
- this.rootView.style.cssText = `position:absolute;display:none;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%);`;
63914
+ this.rootView.style.cssText = "position:absolute;display:none;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%);";
63904
63915
  this.frame = document.createElement("div");
63905
63916
  this.frame.style.position = "absolute";
63906
63917
  this.frame.style.padding = "8px";
@@ -63921,7 +63932,7 @@ var Editor = class extends EventEmitter6 {
63921
63932
  } else {
63922
63933
  this.title = document.createElement("div");
63923
63934
  this.title.textContent = `${this.ctrlNickName}`;
63924
- this.title.style.cssText = `color:#fff;font-size:12px;padding: 0.2em 0.4em;border-radius: 0.4em;position: absolute;top: 0%;left: 0;margin: -0.4em;transform: translate(-100%, -100%);`;
63935
+ this.title.style.cssText = "color:#fff;font-size:12px;padding: 0.2em 0.4em;border-radius: 0.4em;position: absolute;top: 0%;left: 0;margin: -0.4em;transform: translate(-100%, -100%);";
63925
63936
  this.frame.appendChild(this.title);
63926
63937
  this.rootView.style.pointerEvents = "none";
63927
63938
  }
@@ -64117,14 +64128,14 @@ var Editor = class extends EventEmitter6 {
64117
64128
  this.resizeObserver.disconnect();
64118
64129
  }
64119
64130
  };
64120
- function _defineProperty26(e, r, t) {
64121
- return (r = _toPropertyKey26(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64131
+ function _defineProperty25(e, r, t) {
64132
+ return (r = _toPropertyKey25(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64122
64133
  }
64123
- function _toPropertyKey26(t) {
64124
- var i = _toPrimitive26(t, "string");
64134
+ function _toPropertyKey25(t) {
64135
+ var i = _toPrimitive25(t, "string");
64125
64136
  return "symbol" == typeof i ? i : i + "";
64126
64137
  }
64127
- function _toPrimitive26(t, r) {
64138
+ function _toPrimitive25(t, r) {
64128
64139
  if ("object" != typeof t || !t) return t;
64129
64140
  var e = t[Symbol.toPrimitive];
64130
64141
  if (void 0 !== e) {
@@ -64137,13 +64148,13 @@ function _toPrimitive26(t, r) {
64137
64148
  var TextTool = class extends WhiteboardTool {
64138
64149
  constructor(enableToolEvent, model, shadowEmitter, scope, rootView, canvasElement, toolbarModel, camera) {
64139
64150
  super(enableToolEvent, model, shadowEmitter, scope);
64140
- _defineProperty26(this, "from", null);
64141
- _defineProperty26(this, "to", null);
64142
- _defineProperty26(this, "rootView", void 0);
64143
- _defineProperty26(this, "canvasElement", void 0);
64144
- _defineProperty26(this, "elementModel", null);
64145
- _defineProperty26(this, "toolbarModel", void 0);
64146
- _defineProperty26(this, "camera", void 0);
64151
+ _defineProperty25(this, "from", null);
64152
+ _defineProperty25(this, "to", null);
64153
+ _defineProperty25(this, "rootView", void 0);
64154
+ _defineProperty25(this, "canvasElement", void 0);
64155
+ _defineProperty25(this, "elementModel", null);
64156
+ _defineProperty25(this, "toolbarModel", void 0);
64157
+ _defineProperty25(this, "camera", void 0);
64147
64158
  this.rootView = rootView;
64148
64159
  this.canvasElement = canvasElement;
64149
64160
  this.toolbarModel = toolbarModel;
@@ -64152,7 +64163,7 @@ var TextTool = class extends WhiteboardTool {
64152
64163
  onMouseDown(event) {
64153
64164
  this.from = event.point.clone();
64154
64165
  }
64155
- onMouseDrag(event) {
64166
+ onMouseDrag(_event) {
64156
64167
  }
64157
64168
  onMouseUp(event) {
64158
64169
  this.to = event.point.clone();
@@ -64164,6 +64175,9 @@ var TextTool = class extends WhiteboardTool {
64164
64175
  }
64165
64176
  }
64166
64177
  createPointEditor(x, y) {
64178
+ if (this.elementModel) {
64179
+ this.elementModel.dispose();
64180
+ }
64167
64181
  this.elementModel = this.modelGetter().createPointText(x, y, true);
64168
64182
  if (this.elementModel === null) {
64169
64183
  return;
@@ -64202,14 +64216,14 @@ var TextTool = class extends WhiteboardTool {
64202
64216
  }, 30);
64203
64217
  }
64204
64218
  };
64205
- function _defineProperty27(e, r, t) {
64206
- return (r = _toPropertyKey27(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64219
+ function _defineProperty26(e, r, t) {
64220
+ return (r = _toPropertyKey26(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64207
64221
  }
64208
- function _toPropertyKey27(t) {
64209
- var i = _toPrimitive27(t, "string");
64222
+ function _toPropertyKey26(t) {
64223
+ var i = _toPrimitive26(t, "string");
64210
64224
  return "symbol" == typeof i ? i : i + "";
64211
64225
  }
64212
- function _toPrimitive27(t, r) {
64226
+ function _toPrimitive26(t, r) {
64213
64227
  if ("object" != typeof t || !t) return t;
64214
64228
  var e = t[Symbol.toPrimitive];
64215
64229
  if (void 0 !== e) {
@@ -64219,14 +64233,14 @@ function _toPrimitive27(t, r) {
64219
64233
  }
64220
64234
  return ("string" === r ? String : Number)(t);
64221
64235
  }
64222
- var Gesture = class extends EventEmitter7 {
64236
+ var Gesture = class extends EventEmitter6 {
64223
64237
  constructor(element, scope) {
64224
64238
  super();
64225
- _defineProperty27(this, "element", void 0);
64226
- _defineProperty27(this, "scope", void 0);
64227
- _defineProperty27(this, "lastVector", null);
64228
- _defineProperty27(this, "lastPoint", null);
64229
- _defineProperty27(this, "onTouchStart", (evt) => {
64239
+ _defineProperty26(this, "element", void 0);
64240
+ _defineProperty26(this, "scope", void 0);
64241
+ _defineProperty26(this, "lastVector", null);
64242
+ _defineProperty26(this, "lastPoint", null);
64243
+ _defineProperty26(this, "onTouchStart", (evt) => {
64230
64244
  if (evt.touches.length > 1) {
64231
64245
  evt.preventDefault();
64232
64246
  evt.stopPropagation();
@@ -64239,7 +64253,7 @@ var Gesture = class extends EventEmitter7 {
64239
64253
  this.lastVector = p2.subtract(p1);
64240
64254
  this.lastPoint = p1;
64241
64255
  });
64242
- _defineProperty27(this, "onTouchMove", (evt) => {
64256
+ _defineProperty26(this, "onTouchMove", (evt) => {
64243
64257
  if (this.lastVector && this.lastPoint && evt.touches.length === 2) {
64244
64258
  evt.preventDefault();
64245
64259
  evt.stopPropagation();
@@ -64270,7 +64284,7 @@ var Gesture = class extends EventEmitter7 {
64270
64284
  this.lastPoint = null;
64271
64285
  }
64272
64286
  });
64273
- _defineProperty27(this, "onTouchEnd", () => {
64287
+ _defineProperty26(this, "onTouchEnd", () => {
64274
64288
  this.lastVector = null;
64275
64289
  this.lastPoint = null;
64276
64290
  });
@@ -64281,14 +64295,14 @@ var Gesture = class extends EventEmitter7 {
64281
64295
  this.element.addEventListener("touchend", this.onTouchEnd);
64282
64296
  }
64283
64297
  };
64284
- function _defineProperty28(e, r, t) {
64285
- return (r = _toPropertyKey28(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64298
+ function _defineProperty27(e, r, t) {
64299
+ return (r = _toPropertyKey27(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64286
64300
  }
64287
- function _toPropertyKey28(t) {
64288
- var i = _toPrimitive28(t, "string");
64301
+ function _toPropertyKey27(t) {
64302
+ var i = _toPrimitive27(t, "string");
64289
64303
  return "symbol" == typeof i ? i : i + "";
64290
64304
  }
64291
- function _toPrimitive28(t, r) {
64305
+ function _toPrimitive27(t, r) {
64292
64306
  if ("object" != typeof t || !t) return t;
64293
64307
  var e = t[Symbol.toPrimitive];
64294
64308
  if (void 0 !== e) {
@@ -64298,7 +64312,7 @@ function _toPrimitive28(t, r) {
64298
64312
  }
64299
64313
  return ("string" === r ? String : Number)(t);
64300
64314
  }
64301
- var Camera = class extends EventEmitter8 {
64315
+ var Camera = class extends EventEmitter7 {
64302
64316
  get inherentMatrix() {
64303
64317
  const inherentMatrix = new this.scope.Matrix();
64304
64318
  inherentMatrix.scale(this.inherentScale, [0, 0]);
@@ -64310,31 +64324,31 @@ var Camera = class extends EventEmitter8 {
64310
64324
  }
64311
64325
  constructor(initSize, maxScale, dom, userManager, scope, whiteboardAttrsMap, hasPermission, requestUserMap, _paperSize, _domSize) {
64312
64326
  super();
64313
- _defineProperty28(this, "scope", void 0);
64314
- _defineProperty28(this, "dom", void 0);
64315
- _defineProperty28(this, "lastTriggerTime", 0);
64316
- _defineProperty28(this, "lastDelta", {
64327
+ _defineProperty27(this, "scope", void 0);
64328
+ _defineProperty27(this, "dom", void 0);
64329
+ _defineProperty27(this, "lastTriggerTime", 0);
64330
+ _defineProperty27(this, "lastDelta", {
64317
64331
  x: 0,
64318
64332
  y: 0
64319
64333
  });
64320
- _defineProperty28(this, "requestUserMap", void 0);
64321
- _defineProperty28(this, "userManager", void 0);
64322
- _defineProperty28(this, "observers", /* @__PURE__ */ new Map());
64323
- _defineProperty28(this, "whiteboardAttrsMap", void 0);
64324
- _defineProperty28(this, "paperSize", void 0);
64325
- _defineProperty28(this, "domSize", void 0);
64326
- _defineProperty28(this, "hasPermission", void 0);
64327
- _defineProperty28(this, "gesture", void 0);
64328
- _defineProperty28(this, "inherentScale", 1);
64329
- _defineProperty28(this, "maxScale", void 0);
64330
- _defineProperty28(this, "initSize", void 0);
64331
- _defineProperty28(this, "bound", void 0);
64332
- _defineProperty28(this, "boundTiemoutId", void 0);
64333
- _defineProperty28(this, "enableByMouse", true);
64334
- _defineProperty28(this, "enableByTouch", true);
64335
- _defineProperty28(this, "boundaryColor", "#F44336");
64336
- _defineProperty28(this, "enableBoundaryHighlight", true);
64337
- _defineProperty28(this, "handleMainCameraChange", (evt) => {
64334
+ _defineProperty27(this, "requestUserMap", void 0);
64335
+ _defineProperty27(this, "userManager", void 0);
64336
+ _defineProperty27(this, "observers", /* @__PURE__ */ new Map());
64337
+ _defineProperty27(this, "whiteboardAttrsMap", void 0);
64338
+ _defineProperty27(this, "paperSize", void 0);
64339
+ _defineProperty27(this, "domSize", void 0);
64340
+ _defineProperty27(this, "hasPermission", void 0);
64341
+ _defineProperty27(this, "gesture", void 0);
64342
+ _defineProperty27(this, "inherentScale", 1);
64343
+ _defineProperty27(this, "maxScale", void 0);
64344
+ _defineProperty27(this, "initSize", void 0);
64345
+ _defineProperty27(this, "bound", void 0);
64346
+ _defineProperty27(this, "boundTiemoutId", void 0);
64347
+ _defineProperty27(this, "enableByMouse", true);
64348
+ _defineProperty27(this, "enableByTouch", true);
64349
+ _defineProperty27(this, "boundaryColor", "#F44336");
64350
+ _defineProperty27(this, "enableBoundaryHighlight", true);
64351
+ _defineProperty27(this, "handleMainCameraChange", (evt) => {
64338
64352
  const userMap = this.requestUserMap(this.userManager.selfId);
64339
64353
  const cameraMode = userMap.get(WhiteboardKeys.cameraMode);
64340
64354
  if (cameraMode !== "main") {
@@ -64351,20 +64365,23 @@ var Camera = class extends EventEmitter8 {
64351
64365
  }
64352
64366
  }
64353
64367
  });
64354
- _defineProperty28(this, "handleUserLeave", (user) => {
64368
+ _defineProperty27(this, "handleUserLeave", (user) => {
64355
64369
  const cb = this.observers.get(user.id);
64356
64370
  if (cb) {
64357
64371
  this.requestUserMap(user.id).unobserve(cb);
64358
64372
  }
64359
64373
  });
64360
- _defineProperty28(this, "handleUserJoin", (user) => {
64374
+ _defineProperty27(this, "handleUserJoin", (user) => {
64361
64375
  const observer = (evt) => {
64362
64376
  this.handleViewMatrixUpdate(user.id, evt);
64363
64377
  };
64378
+ if (this.observers.has(user.id)) {
64379
+ this.requestUserMap(user.id).unobserve(observer);
64380
+ }
64364
64381
  this.requestUserMap(user.id).observe(observer);
64365
64382
  this.observers.set(user.id, observer);
64366
64383
  });
64367
- _defineProperty28(this, "handleViewMatrixUpdate", (userId, evt) => {
64384
+ _defineProperty27(this, "handleViewMatrixUpdate", (userId, evt) => {
64368
64385
  const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
64369
64386
  for (const [key, value] of evt.changes.keys.entries()) {
64370
64387
  if (value.action === "update") {
@@ -64391,7 +64408,7 @@ var Camera = class extends EventEmitter8 {
64391
64408
  }
64392
64409
  }
64393
64410
  });
64394
- _defineProperty28(this, "handleWheel", (evt) => {
64411
+ _defineProperty27(this, "handleWheel", (evt) => {
64395
64412
  if (!this.enableByMouse) {
64396
64413
  return;
64397
64414
  }
@@ -64440,7 +64457,7 @@ var Camera = class extends EventEmitter8 {
64440
64457
  });
64441
64458
  this.maxScale = maxScale;
64442
64459
  this.bound = window.document.createElement("div");
64443
- this.bound.style.cssText = `transition: box-shadow 100ms;pointer-events:none;z-index:99;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);`;
64460
+ this.bound.style.cssText = "transition: box-shadow 100ms;pointer-events:none;z-index:99;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);";
64444
64461
  this.initSize = initSize;
64445
64462
  this.hasPermission = hasPermission;
64446
64463
  this.paperSize = _paperSize;
@@ -64465,6 +64482,9 @@ var Camera = class extends EventEmitter8 {
64465
64482
  const observer = (evt) => {
64466
64483
  this.handleViewMatrixUpdate(userId, evt);
64467
64484
  };
64485
+ if (this.observers.has(userId)) {
64486
+ this.requestUserMap(userId).unobserve(observer);
64487
+ }
64468
64488
  this.requestUserMap(userId).observe(observer);
64469
64489
  this.observers.set(userId, observer);
64470
64490
  });
@@ -64501,7 +64521,7 @@ var Camera = class extends EventEmitter8 {
64501
64521
  this.bound.style.boxShadow = `inset 0px 0px 6px 2px ${this.boundaryColor}`;
64502
64522
  window.clearTimeout(this.boundTiemoutId);
64503
64523
  this.boundTiemoutId = window.setTimeout(() => {
64504
- this.bound.style.boxShadow = `none`;
64524
+ this.bound.style.boxShadow = "none";
64505
64525
  }, 100);
64506
64526
  }
64507
64527
  }
@@ -64511,6 +64531,9 @@ var Camera = class extends EventEmitter8 {
64511
64531
  updateInherentScale(scale) {
64512
64532
  this.inherentScale = scale;
64513
64533
  }
64534
+ getInherentScale() {
64535
+ return this.inherentScale;
64536
+ }
64514
64537
  getActiveMatrix() {
64515
64538
  const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
64516
64539
  let matrixValue;
@@ -64653,15 +64676,28 @@ var Camera = class extends EventEmitter8 {
64653
64676
  y: 0
64654
64677
  };
64655
64678
  }
64679
+ dispose() {
64680
+ Array.from(this.observers.keys()).forEach((userId) => {
64681
+ const cb = this.observers.get(userId);
64682
+ if (cb) {
64683
+ this.requestUserMap(userId).unobserve(cb);
64684
+ }
64685
+ });
64686
+ this.whiteboardAttrsMap.unobserve(this.handleMainCameraChange);
64687
+ this.userManager.off("join", this.handleUserJoin);
64688
+ this.userManager.off("leave", this.handleUserLeave);
64689
+ this.gesture.removeAllListeners();
64690
+ this.removeAllListeners();
64691
+ }
64656
64692
  };
64657
- function _defineProperty29(e, r, t) {
64658
- return (r = _toPropertyKey29(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64693
+ function _defineProperty28(e, r, t) {
64694
+ return (r = _toPropertyKey28(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64659
64695
  }
64660
- function _toPropertyKey29(t) {
64661
- var i = _toPrimitive29(t, "string");
64696
+ function _toPropertyKey28(t) {
64697
+ var i = _toPrimitive28(t, "string");
64662
64698
  return "symbol" == typeof i ? i : i + "";
64663
64699
  }
64664
- function _toPrimitive29(t, r) {
64700
+ function _toPrimitive28(t, r) {
64665
64701
  if ("object" != typeof t || !t) return t;
64666
64702
  var e = t[Symbol.toPrimitive];
64667
64703
  if (void 0 !== e) {
@@ -64674,12 +64710,15 @@ function _toPrimitive29(t, r) {
64674
64710
  var EllipseTool = class extends WhiteboardTool {
64675
64711
  constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
64676
64712
  super(enableToolEvent, modelGetter, shadowEmitter, scope);
64677
- _defineProperty29(this, "elementModel", null);
64678
- _defineProperty29(this, "from", null);
64679
- _defineProperty29(this, "to", null);
64713
+ _defineProperty28(this, "elementModel", null);
64714
+ _defineProperty28(this, "from", null);
64715
+ _defineProperty28(this, "to", null);
64680
64716
  this.tool.minDistance = 1;
64681
64717
  }
64682
64718
  onMouseDown(event) {
64719
+ if (this.elementModel) {
64720
+ this.elementModel.dispose();
64721
+ }
64683
64722
  this.elementModel = this.modelGetter().createSegmentedPath("ellipse", true);
64684
64723
  this.from = event.point.clone();
64685
64724
  this.to = event.point.clone();
@@ -64703,14 +64742,14 @@ var EllipseTool = class extends WhiteboardTool {
64703
64742
  }
64704
64743
  }
64705
64744
  };
64706
- function _defineProperty30(e, r, t) {
64707
- return (r = _toPropertyKey30(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64745
+ function _defineProperty29(e, r, t) {
64746
+ return (r = _toPropertyKey29(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64708
64747
  }
64709
- function _toPropertyKey30(t) {
64710
- var i = _toPrimitive30(t, "string");
64748
+ function _toPropertyKey29(t) {
64749
+ var i = _toPrimitive29(t, "string");
64711
64750
  return "symbol" == typeof i ? i : i + "";
64712
64751
  }
64713
- function _toPrimitive30(t, r) {
64752
+ function _toPrimitive29(t, r) {
64714
64753
  if ("object" != typeof t || !t) return t;
64715
64754
  var e = t[Symbol.toPrimitive];
64716
64755
  if (void 0 !== e) {
@@ -64723,12 +64762,15 @@ function _toPrimitive30(t, r) {
64723
64762
  var TriangleTool = class extends WhiteboardTool {
64724
64763
  constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
64725
64764
  super(enableToolEvent, modelGetter, shadowEmitter, scope);
64726
- _defineProperty30(this, "elementModel", null);
64727
- _defineProperty30(this, "from", null);
64728
- _defineProperty30(this, "to", null);
64765
+ _defineProperty29(this, "elementModel", null);
64766
+ _defineProperty29(this, "from", null);
64767
+ _defineProperty29(this, "to", null);
64729
64768
  this.tool.minDistance = 1;
64730
64769
  }
64731
64770
  onMouseDown(event) {
64771
+ if (this.elementModel) {
64772
+ this.elementModel.dispose();
64773
+ }
64732
64774
  this.elementModel = this.modelGetter().createTriangle(true);
64733
64775
  this.from = event.point.clone();
64734
64776
  this.to = event.point.clone();
@@ -64748,14 +64790,14 @@ var TriangleTool = class extends WhiteboardTool {
64748
64790
  }
64749
64791
  }
64750
64792
  };
64751
- function _defineProperty31(e, r, t) {
64752
- return (r = _toPropertyKey31(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64793
+ function _defineProperty30(e, r, t) {
64794
+ return (r = _toPropertyKey30(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64753
64795
  }
64754
- function _toPropertyKey31(t) {
64755
- var i = _toPrimitive31(t, "string");
64796
+ function _toPropertyKey30(t) {
64797
+ var i = _toPrimitive30(t, "string");
64756
64798
  return "symbol" == typeof i ? i : i + "";
64757
64799
  }
64758
- function _toPrimitive31(t, r) {
64800
+ function _toPrimitive30(t, r) {
64759
64801
  if ("object" != typeof t || !t) return t;
64760
64802
  var e = t[Symbol.toPrimitive];
64761
64803
  if (void 0 !== e) {
@@ -64765,63 +64807,63 @@ function _toPrimitive31(t, r) {
64765
64807
  }
64766
64808
  return ("string" === r ? String : Number)(t);
64767
64809
  }
64768
- var Whiteboard = class extends EventEmitter9 {
64810
+ var Whiteboard = class extends EventEmitter8 {
64769
64811
  // public insertImage!: (src: string) => void;
64770
64812
  constructor(view) {
64771
64813
  super();
64772
- _defineProperty31(this, "view", void 0);
64773
- _defineProperty31(this, "selfUserId", void 0);
64774
- _defineProperty31(this, "permissions", void 0);
64775
- _defineProperty31(this, "tool", void 0);
64776
- _defineProperty31(this, "fontSize", void 0);
64777
- _defineProperty31(this, "dashArray", void 0);
64778
- _defineProperty31(this, "fontFamily", void 0);
64779
- _defineProperty31(this, "strokeColor", void 0);
64780
- _defineProperty31(this, "fillColor", void 0);
64781
- _defineProperty31(this, "strokeWidth", void 0);
64782
- _defineProperty31(this, "enableCameraByMouse", void 0);
64783
- _defineProperty31(this, "enableCameraByTouch", void 0);
64784
- _defineProperty31(this, "cameraBoundaryColor", void 0);
64785
- _defineProperty31(this, "enableCameraBoundaryHighlight", void 0);
64786
- _defineProperty31(this, "getElementAttribute", void 0);
64787
- _defineProperty31(this, "setElementAttribute", void 0);
64788
- _defineProperty31(this, "getCurrentTool", void 0);
64789
- _defineProperty31(this, "setCurrentTool", void 0);
64790
- _defineProperty31(this, "setCanvasBackgroundColor", void 0);
64791
- _defineProperty31(this, "setThemeColor", void 0);
64792
- _defineProperty31(this, "gotoPage", void 0);
64793
- _defineProperty31(this, "addPage", void 0);
64794
- _defineProperty31(this, "deletePage", void 0);
64795
- _defineProperty31(this, "pageList", void 0);
64796
- _defineProperty31(this, "currentPageId", void 0);
64797
- _defineProperty31(this, "clonePage", void 0);
64798
- _defineProperty31(this, "clearPage", void 0);
64799
- _defineProperty31(this, "translateCamera", void 0);
64800
- _defineProperty31(this, "scaleCamera", void 0);
64801
- _defineProperty31(this, "resetCamera", void 0);
64802
- _defineProperty31(this, "setFreeModelUserPage", void 0);
64803
- _defineProperty31(this, "indexedNavigation", void 0);
64804
- _defineProperty31(this, "setViewModeToFree", void 0);
64805
- _defineProperty31(this, "setViewModeToFlow", void 0);
64806
- _defineProperty31(this, "setViewModeToMain", void 0);
64807
- _defineProperty31(this, "getViewModel", void 0);
64808
- _defineProperty31(this, "undo", void 0);
64809
- _defineProperty31(this, "redo", void 0);
64810
- _defineProperty31(this, "rasterizeViewport", void 0);
64811
- _defineProperty31(this, "rasterizeElementsBounds", void 0);
64812
- _defineProperty31(this, "rasterizeMaxBounds", void 0);
64813
- _defineProperty31(this, "setInputType", void 0);
64814
+ _defineProperty30(this, "view", void 0);
64815
+ _defineProperty30(this, "selfUserId", void 0);
64816
+ _defineProperty30(this, "permissions", void 0);
64817
+ _defineProperty30(this, "tool", void 0);
64818
+ _defineProperty30(this, "fontSize", void 0);
64819
+ _defineProperty30(this, "dashArray", void 0);
64820
+ _defineProperty30(this, "fontFamily", void 0);
64821
+ _defineProperty30(this, "strokeColor", void 0);
64822
+ _defineProperty30(this, "fillColor", void 0);
64823
+ _defineProperty30(this, "strokeWidth", void 0);
64824
+ _defineProperty30(this, "enableCameraByMouse", void 0);
64825
+ _defineProperty30(this, "enableCameraByTouch", void 0);
64826
+ _defineProperty30(this, "cameraBoundaryColor", void 0);
64827
+ _defineProperty30(this, "enableCameraBoundaryHighlight", void 0);
64828
+ _defineProperty30(this, "getElementAttribute", void 0);
64829
+ _defineProperty30(this, "setElementAttribute", void 0);
64830
+ _defineProperty30(this, "getCurrentTool", void 0);
64831
+ _defineProperty30(this, "setCurrentTool", void 0);
64832
+ _defineProperty30(this, "setCanvasBackgroundColor", void 0);
64833
+ _defineProperty30(this, "setThemeColor", void 0);
64834
+ _defineProperty30(this, "gotoPage", void 0);
64835
+ _defineProperty30(this, "addPage", void 0);
64836
+ _defineProperty30(this, "deletePage", void 0);
64837
+ _defineProperty30(this, "pageList", void 0);
64838
+ _defineProperty30(this, "currentPageId", void 0);
64839
+ _defineProperty30(this, "clonePage", void 0);
64840
+ _defineProperty30(this, "clearPage", void 0);
64841
+ _defineProperty30(this, "translateCamera", void 0);
64842
+ _defineProperty30(this, "scaleCamera", void 0);
64843
+ _defineProperty30(this, "resetCamera", void 0);
64844
+ _defineProperty30(this, "setFreeModelUserPage", void 0);
64845
+ _defineProperty30(this, "indexedNavigation", void 0);
64846
+ _defineProperty30(this, "setViewModeToFree", void 0);
64847
+ _defineProperty30(this, "setViewModeToFlow", void 0);
64848
+ _defineProperty30(this, "setViewModeToMain", void 0);
64849
+ _defineProperty30(this, "getViewModel", void 0);
64850
+ _defineProperty30(this, "undo", void 0);
64851
+ _defineProperty30(this, "redo", void 0);
64852
+ _defineProperty30(this, "rasterizeViewport", void 0);
64853
+ _defineProperty30(this, "rasterizeElementsBounds", void 0);
64854
+ _defineProperty30(this, "rasterizeMaxBounds", void 0);
64855
+ _defineProperty30(this, "setInputType", void 0);
64814
64856
  this.view = view;
64815
64857
  }
64816
64858
  };
64817
- function _defineProperty32(e, r, t) {
64818
- return (r = _toPropertyKey32(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64859
+ function _defineProperty31(e, r, t) {
64860
+ return (r = _toPropertyKey31(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64819
64861
  }
64820
- function _toPropertyKey32(t) {
64821
- var i = _toPrimitive32(t, "string");
64862
+ function _toPropertyKey31(t) {
64863
+ var i = _toPrimitive31(t, "string");
64822
64864
  return "symbol" == typeof i ? i : i + "";
64823
64865
  }
64824
- function _toPrimitive32(t, r) {
64866
+ function _toPrimitive31(t, r) {
64825
64867
  if ("object" != typeof t || !t) return t;
64826
64868
  var e = t[Symbol.toPrimitive];
64827
64869
  if (void 0 !== e) {
@@ -64834,14 +64876,17 @@ function _toPrimitive32(t, r) {
64834
64876
  var EraserTool = class extends WhiteboardTool {
64835
64877
  constructor(enableToolEvent, renderableModel, shadowEmitter, scope, trashedElementsModel) {
64836
64878
  super(enableToolEvent, renderableModel, shadowEmitter, scope);
64837
- _defineProperty32(this, "elementModel", null);
64838
- _defineProperty32(this, "trashedElementsModel", void 0);
64839
- _defineProperty32(this, "pointCount", 0);
64879
+ _defineProperty31(this, "elementModel", null);
64880
+ _defineProperty31(this, "trashedElementsModel", void 0);
64881
+ _defineProperty31(this, "pointCount", 0);
64840
64882
  this.trashedElementsModel = trashedElementsModel;
64841
64883
  this.tool.minDistance = 1;
64842
64884
  }
64843
- onMouseDown(event) {
64885
+ onMouseDown(_event) {
64844
64886
  this.pointCount = 0;
64887
+ if (this.elementModel) {
64888
+ this.elementModel.dispose();
64889
+ }
64845
64890
  this.elementModel = this.modelGetter().createEraser();
64846
64891
  }
64847
64892
  onMouseDrag(event) {
@@ -64863,21 +64908,21 @@ var EraserTool = class extends WhiteboardTool {
64863
64908
  }
64864
64909
  });
64865
64910
  }
64866
- onMouseUp(event) {
64911
+ onMouseUp(_event) {
64867
64912
  if (this.elementModel) {
64868
64913
  this.modelGetter().removeElementItem(this.elementModel.uuid);
64869
64914
  }
64870
64915
  this.trashedElementsModel.removeAllTrashedElementsForSelf();
64871
64916
  }
64872
64917
  };
64873
- function _defineProperty33(e, r, t) {
64874
- return (r = _toPropertyKey33(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64918
+ function _defineProperty32(e, r, t) {
64919
+ return (r = _toPropertyKey32(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64875
64920
  }
64876
- function _toPropertyKey33(t) {
64877
- var i = _toPrimitive33(t, "string");
64921
+ function _toPropertyKey32(t) {
64922
+ var i = _toPrimitive32(t, "string");
64878
64923
  return "symbol" == typeof i ? i : i + "";
64879
64924
  }
64880
- function _toPrimitive33(t, r) {
64925
+ function _toPrimitive32(t, r) {
64881
64926
  if ("object" != typeof t || !t) return t;
64882
64927
  var e = t[Symbol.toPrimitive];
64883
64928
  if (void 0 !== e) {
@@ -64887,7 +64932,7 @@ function _toPrimitive33(t, r) {
64887
64932
  }
64888
64933
  return ("string" === r ? String : Number)(t);
64889
64934
  }
64890
- var TrashedElementsModel = class extends EventEmitter10 {
64935
+ var TrashedElementsModel = class extends EventEmitter9 {
64891
64936
  get hasDeleteSelfPermission() {
64892
64937
  return this.hasPermission(WhiteboardPermissionFlag.deleteSelf);
64893
64938
  }
@@ -64896,20 +64941,23 @@ var TrashedElementsModel = class extends EventEmitter10 {
64896
64941
  }
64897
64942
  constructor(userManager, requestUserMap, hasPermission) {
64898
64943
  super();
64899
- _defineProperty33(this, "requestUserMap", void 0);
64900
- _defineProperty33(this, "userManager", void 0);
64901
- _defineProperty33(this, "hasPermission", void 0);
64902
- _defineProperty33(this, "observers", /* @__PURE__ */ new Map());
64903
- _defineProperty33(this, "handleUserLeave", (user) => {
64944
+ _defineProperty32(this, "requestUserMap", void 0);
64945
+ _defineProperty32(this, "userManager", void 0);
64946
+ _defineProperty32(this, "hasPermission", void 0);
64947
+ _defineProperty32(this, "observers", /* @__PURE__ */ new Map());
64948
+ _defineProperty32(this, "handleUserLeave", (user) => {
64904
64949
  const cb = this.observers.get(user.id);
64905
64950
  if (cb) {
64906
64951
  this.requestUserMap(user.id).unobserveDeep(cb);
64907
64952
  }
64908
64953
  });
64909
- _defineProperty33(this, "handleUserJoin", (user) => {
64954
+ _defineProperty32(this, "handleUserJoin", (user) => {
64910
64955
  const observer = (evts) => {
64911
64956
  this.handleUserTrashElementsChange(user.id, evts);
64912
64957
  };
64958
+ if (this.observers.has(user.id)) {
64959
+ this.requestUserMap(user.id).unobserveDeep(this.observers.get(user.id));
64960
+ }
64913
64961
  this.requestUserMap(user.id).observeDeep(observer);
64914
64962
  this.observers.set(user.id, observer);
64915
64963
  });
@@ -64921,6 +64969,9 @@ var TrashedElementsModel = class extends EventEmitter10 {
64921
64969
  const observer = (evts) => {
64922
64970
  this.handleUserTrashElementsChange(userId, evts);
64923
64971
  };
64972
+ if (this.observers.has(userId)) {
64973
+ this.requestUserMap(userId).unobserveDeep(this.observers.get(userId));
64974
+ }
64924
64975
  this.requestUserMap(userId).observeDeep(observer);
64925
64976
  this.observers.set(userId, observer);
64926
64977
  });
@@ -64975,25 +65026,22 @@ var TrashedElementsModel = class extends EventEmitter10 {
64975
65026
  });
64976
65027
  }
64977
65028
  dispose() {
64978
- this.userManager.userIdList().forEach((userId) => {
64979
- const cb = this.observers.get(userId);
64980
- if (cb) {
64981
- this.requestUserMap(userId).unobserveDeep(cb);
64982
- }
64983
- });
65029
+ for (const [key, value] of this.observers.entries()) {
65030
+ this.requestUserMap(key).unobserveDeep(value);
65031
+ }
64984
65032
  this.observers.clear();
64985
65033
  this.userManager.off("leave", this.handleUserLeave);
64986
65034
  this.userManager.off("join", this.handleUserJoin);
64987
65035
  }
64988
65036
  };
64989
- function _defineProperty34(e, r, t) {
64990
- return (r = _toPropertyKey34(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65037
+ function _defineProperty33(e, r, t) {
65038
+ return (r = _toPropertyKey33(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
64991
65039
  }
64992
- function _toPropertyKey34(t) {
64993
- var i = _toPrimitive34(t, "string");
65040
+ function _toPropertyKey33(t) {
65041
+ var i = _toPrimitive33(t, "string");
64994
65042
  return "symbol" == typeof i ? i : i + "";
64995
65043
  }
64996
- function _toPrimitive34(t, r) {
65044
+ function _toPrimitive33(t, r) {
64997
65045
  if ("object" != typeof t || !t) return t;
64998
65046
  var e = t[Symbol.toPrimitive];
64999
65047
  if (void 0 !== e) {
@@ -65006,12 +65054,15 @@ function _toPrimitive34(t, r) {
65006
65054
  var LaserPointerTool = class extends WhiteboardTool {
65007
65055
  constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
65008
65056
  super(enableToolEvent, modelGetter, shadowEmitter, scope);
65009
- _defineProperty34(this, "elementModel", null);
65010
- _defineProperty34(this, "pointCount", 0);
65057
+ _defineProperty33(this, "elementModel", null);
65058
+ _defineProperty33(this, "pointCount", 0);
65011
65059
  this.tool.minDistance = 5;
65012
65060
  }
65013
- onMouseDown(event) {
65061
+ onMouseDown(_event) {
65014
65062
  this.pointCount = 0;
65063
+ if (this.elementModel) {
65064
+ this.elementModel.dispose();
65065
+ }
65015
65066
  this.elementModel = this.modelGetter().createLaserPointer();
65016
65067
  }
65017
65068
  onMouseDrag(event) {
@@ -65023,20 +65074,20 @@ var LaserPointerTool = class extends WhiteboardTool {
65023
65074
  this.elementModel.appendPoints([event.point.x, event.point.y]);
65024
65075
  }
65025
65076
  }
65026
- onMouseUp(event) {
65077
+ onMouseUp(_event) {
65027
65078
  if (this.elementModel) {
65028
65079
  this.elementModel.beginRemoveAnimate();
65029
65080
  }
65030
65081
  }
65031
65082
  };
65032
- function _defineProperty35(e, r, t) {
65033
- return (r = _toPropertyKey35(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65083
+ function _defineProperty34(e, r, t) {
65084
+ return (r = _toPropertyKey34(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65034
65085
  }
65035
- function _toPropertyKey35(t) {
65036
- var i = _toPrimitive35(t, "string");
65086
+ function _toPropertyKey34(t) {
65087
+ var i = _toPrimitive34(t, "string");
65037
65088
  return "symbol" == typeof i ? i : i + "";
65038
65089
  }
65039
- function _toPrimitive35(t, r) {
65090
+ function _toPrimitive34(t, r) {
65040
65091
  if ("object" != typeof t || !t) return t;
65041
65092
  var e = t[Symbol.toPrimitive];
65042
65093
  if (void 0 !== e) {
@@ -65046,25 +65097,25 @@ function _toPrimitive35(t, r) {
65046
65097
  }
65047
65098
  return ("string" === r ? String : Number)(t);
65048
65099
  }
65049
- var PageModel = class extends EventEmitter11 {
65100
+ var PageModel = class extends EventEmitter10 {
65050
65101
  constructor(whiteboardAttrsMap, userManager, requestUserMap, pageMap, hasPermission) {
65051
65102
  super();
65052
- _defineProperty35(this, "whiteboardAttrsMap", void 0);
65053
- _defineProperty35(this, "pageMap", void 0);
65054
- _defineProperty35(this, "requestUserMap", void 0);
65055
- _defineProperty35(this, "userManager", void 0);
65056
- _defineProperty35(this, "observers", /* @__PURE__ */ new Map());
65057
- _defineProperty35(this, "hasPermission", void 0);
65058
- _defineProperty35(this, "handleUserLeave", (user) => {
65103
+ _defineProperty34(this, "whiteboardAttrsMap", void 0);
65104
+ _defineProperty34(this, "pageMap", void 0);
65105
+ _defineProperty34(this, "requestUserMap", void 0);
65106
+ _defineProperty34(this, "userManager", void 0);
65107
+ _defineProperty34(this, "observers", /* @__PURE__ */ new Map());
65108
+ _defineProperty34(this, "hasPermission", void 0);
65109
+ _defineProperty34(this, "handleUserLeave", (user) => {
65059
65110
  const cb = this.observers.get(user.id);
65060
65111
  if (cb) {
65061
65112
  this.requestUserMap(user.id).unobserve(cb);
65062
65113
  }
65063
65114
  });
65064
- _defineProperty35(this, "handleUserJoin", (user) => {
65115
+ _defineProperty34(this, "handleUserJoin", (user) => {
65065
65116
  this.createCurrentPageObserver(user.id);
65066
65117
  });
65067
- _defineProperty35(this, "handleMainPageChange", (evt) => {
65118
+ _defineProperty34(this, "handleMainPageChange", (evt) => {
65068
65119
  for (const [key, value] of evt.changes.keys.entries()) {
65069
65120
  if (key === WhiteboardKeys.currentPage) {
65070
65121
  const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
@@ -65082,7 +65133,7 @@ var PageModel = class extends EventEmitter11 {
65082
65133
  }
65083
65134
  }
65084
65135
  });
65085
- _defineProperty35(this, "handleUserCurrentPageChange", (userId, evt) => {
65136
+ _defineProperty34(this, "handleUserCurrentPageChange", (userId, evt) => {
65086
65137
  for (const [key, value] of evt.changes.keys.entries()) {
65087
65138
  if (key === WhiteboardKeys.currentPage) {
65088
65139
  const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
@@ -65099,7 +65150,7 @@ var PageModel = class extends EventEmitter11 {
65099
65150
  }
65100
65151
  }
65101
65152
  });
65102
- _defineProperty35(this, "handlePageMapChange", () => {
65153
+ _defineProperty34(this, "handlePageMapChange", () => {
65103
65154
  this.emit("pagesChange", Array.from(this.pageMap.keys()));
65104
65155
  });
65105
65156
  this.hasPermission = hasPermission;
@@ -65141,11 +65192,11 @@ var PageModel = class extends EventEmitter11 {
65141
65192
  }
65142
65193
  const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
65143
65194
  if (cameraMode !== "main") {
65144
- console.warn(`cannot modify pages in non-main view mode.`);
65195
+ console.warn("cannot modify pages in non-main view mode.");
65145
65196
  return false;
65146
65197
  }
65147
65198
  if (!this.hasPermission(WhiteboardPermissionFlag.mainView)) {
65148
- console.warn(`cannot modify pages without WhiteboardPermissionFlag.mainView.`);
65199
+ console.warn("cannot modify pages without WhiteboardPermissionFlag.mainView.");
65149
65200
  return false;
65150
65201
  }
65151
65202
  return true;
@@ -65197,23 +65248,32 @@ var PageModel = class extends EventEmitter11 {
65197
65248
  }
65198
65249
  }
65199
65250
  }
65251
+ dispose() {
65252
+ for (const entry of this.observers.entries()) {
65253
+ const [userId, observer] = entry;
65254
+ this.requestUserMap(userId).unobserve(observer);
65255
+ }
65256
+ this.userManager.off("join", this.handleUserJoin);
65257
+ this.userManager.off("leave", this.handleUserLeave);
65258
+ this.whiteboardAttrsMap.unobserve(this.handleMainPageChange);
65259
+ this.pageMap.unobserve(this.handlePageMapChange);
65260
+ }
65200
65261
  };
65201
65262
  var delay = (value) => new Promise((resolve) => setTimeout(resolve, value));
65202
65263
  async function waitUntil(fn, timeout) {
65203
- let start = Date.now();
65264
+ const start = Date.now();
65204
65265
  while (!fn() && Date.now() - start < timeout) {
65205
65266
  await delay(50);
65206
- start = Date.now();
65207
65267
  }
65208
65268
  }
65209
- function _defineProperty36(e, r, t) {
65210
- return (r = _toPropertyKey36(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65269
+ function _defineProperty35(e, r, t) {
65270
+ return (r = _toPropertyKey35(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65211
65271
  }
65212
- function _toPropertyKey36(t) {
65213
- var i = _toPrimitive36(t, "string");
65272
+ function _toPropertyKey35(t) {
65273
+ var i = _toPrimitive35(t, "string");
65214
65274
  return "symbol" == typeof i ? i : i + "";
65215
65275
  }
65216
- function _toPrimitive36(t, r) {
65276
+ function _toPrimitive35(t, r) {
65217
65277
  if ("object" != typeof t || !t) return t;
65218
65278
  var e = t[Symbol.toPrimitive];
65219
65279
  if (void 0 !== e) {
@@ -65223,19 +65283,19 @@ function _toPrimitive36(t, r) {
65223
65283
  }
65224
65284
  return ("string" === r ? String : Number)(t);
65225
65285
  }
65226
- var IndexedNavigation = class extends EventEmitter12 {
65286
+ var IndexedNavigation = class extends EventEmitter11 {
65227
65287
  get idList() {
65228
65288
  return this.pageModel.pageList().filter((id) => /^_i_/.test(id));
65229
65289
  }
65230
65290
  get head() {
65231
- let headId = Object.keys(this.list).find((key) => {
65291
+ const headId = Object.keys(this.list).find((key) => {
65232
65292
  return this.list[key] && this.list[key].prev === "";
65233
65293
  });
65234
65294
  if (!headId) {
65235
- log2(`indexed navigation confusion`, {
65295
+ log2("indexed navigation confusion", {
65236
65296
  list: JSON.stringify(this.list)
65237
65297
  }, "error");
65238
- throw new Error(`indexed navigation confusion`);
65298
+ throw new Error("indexed navigation confusion");
65239
65299
  }
65240
65300
  return headId;
65241
65301
  }
@@ -65250,13 +65310,13 @@ var IndexedNavigation = class extends EventEmitter12 {
65250
65310
  }
65251
65311
  constructor(pageModel, userMap, indexedPageMap, hasPermission) {
65252
65312
  super();
65253
- _defineProperty36(this, "idPool", /* @__PURE__ */ new Set());
65254
- _defineProperty36(this, "pageModel", void 0);
65255
- _defineProperty36(this, "userMap", void 0);
65256
- _defineProperty36(this, "indexedPageMap", void 0);
65257
- _defineProperty36(this, "list", {});
65258
- _defineProperty36(this, "hasPermission", void 0);
65259
- _defineProperty36(this, "handleIndexedPageMapUpdate", (evt) => {
65313
+ _defineProperty35(this, "idPool", /* @__PURE__ */ new Set());
65314
+ _defineProperty35(this, "pageModel", void 0);
65315
+ _defineProperty35(this, "userMap", void 0);
65316
+ _defineProperty35(this, "indexedPageMap", void 0);
65317
+ _defineProperty35(this, "list", {});
65318
+ _defineProperty35(this, "hasPermission", void 0);
65319
+ _defineProperty35(this, "handleIndexedPageMapUpdate", (_evt) => {
65260
65320
  this.list = this.indexedPageMap.get("list");
65261
65321
  const needRemoveList = this.pageModel.pageList().filter((v) => /^_i_/.test(v) && Object.keys(this.list).indexOf(v) < 0);
65262
65322
  const needAddList = Object.keys(this.list).filter((v) => this.pageModel.pageList().indexOf(v) < 0);
@@ -65311,8 +65371,8 @@ var IndexedNavigation = class extends EventEmitter12 {
65311
65371
  initIndexed() {
65312
65372
  return new Promise((resolve) => {
65313
65373
  setTimeout(() => {
65374
+ this.pageModel.addPage("_i_");
65314
65375
  if (this.pageModel.pageList().length === 0) {
65315
- this.pageModel.addPage("_i_");
65316
65376
  resolve(true);
65317
65377
  } else {
65318
65378
  resolve(false);
@@ -65321,15 +65381,15 @@ var IndexedNavigation = class extends EventEmitter12 {
65321
65381
  });
65322
65382
  }
65323
65383
  /**
65324
- * 获取总页数
65325
- * @returns {number}
65326
- */
65384
+ * 获取总页数
65385
+ * @returns {number}
65386
+ */
65327
65387
  get pageCount() {
65328
65388
  return this.idList.length;
65329
65389
  }
65330
65390
  /**
65331
- * 获取当前页索引
65332
- */
65391
+ * 获取当前页索引
65392
+ */
65333
65393
  get currentPageIndex() {
65334
65394
  const userPageId = this.userMap.get(WhiteboardKeys.currentPage);
65335
65395
  return this.getPageIndex(userPageId);
@@ -65349,9 +65409,9 @@ var IndexedNavigation = class extends EventEmitter12 {
65349
65409
  return i;
65350
65410
  }
65351
65411
  /**
65352
- * 获取指定索引对应的 pageId
65353
- * @param {number} index
65354
- */
65412
+ * 获取指定索引对应的 pageId
65413
+ * @param {number} index
65414
+ */
65355
65415
  getPageId(index) {
65356
65416
  const firstKey = this.head;
65357
65417
  if (firstKey) {
@@ -65373,20 +65433,20 @@ var IndexedNavigation = class extends EventEmitter12 {
65373
65433
  modifyDetect() {
65374
65434
  const cameraMode = this.userMap.get(WhiteboardKeys.cameraMode);
65375
65435
  if (cameraMode !== "main") {
65376
- console.warn(`cannot modify pages in non-main view mode.`);
65436
+ console.warn("cannot modify pages in non-main view mode.");
65377
65437
  return false;
65378
65438
  }
65379
65439
  if (!this.hasPermission(WhiteboardPermissionFlag.mainView)) {
65380
- console.warn(`cannot modify pages without WhiteboardPermissionFlag.mainView.`);
65440
+ console.warn("cannot modify pages without WhiteboardPermissionFlag.mainView.");
65381
65441
  return false;
65382
65442
  }
65383
65443
  return true;
65384
65444
  }
65385
65445
  /**
65386
- * 在尾部插入新页面
65387
- * @param {boolean=} goto 是否跳转到新页面, 默认 true
65388
- * @return 总页数
65389
- */
65446
+ * 在尾部插入新页面
65447
+ * @param {boolean=} goto 是否跳转到新页面, 默认 true
65448
+ * @return 总页数
65449
+ */
65390
65450
  pushPage() {
65391
65451
  let goto = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
65392
65452
  this.indexedPageMap.doc.transact(() => {
@@ -65415,11 +65475,11 @@ var IndexedNavigation = class extends EventEmitter12 {
65415
65475
  return this.pageCount;
65416
65476
  }
65417
65477
  /**
65418
- * 在 after 之后插入新页面
65419
- * @param {number} after 在此页之后插入
65420
- * @param {boolean=} goto 是否跳转到新页面, 默认 true
65421
- * @return 总页数
65422
- */
65478
+ * 在 after 之后插入新页面
65479
+ * @param {number} after 在此页之后插入
65480
+ * @param {boolean=} goto 是否跳转到新页面, 默认 true
65481
+ * @return 总页数
65482
+ */
65423
65483
  insertPage(after) {
65424
65484
  let goto = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
65425
65485
  const afterPageId = this.getPageId(after);
@@ -65428,7 +65488,7 @@ var IndexedNavigation = class extends EventEmitter12 {
65428
65488
  }
65429
65489
  const cameraMode = this.userMap.get(WhiteboardKeys.cameraMode);
65430
65490
  if (cameraMode !== "main") {
65431
- console.warn(`cannot modify pages in non-main view mode.`);
65491
+ console.warn("cannot modify pages in non-main view mode.");
65432
65492
  return this.pageCount;
65433
65493
  }
65434
65494
  const prev = this.list[afterPageId];
@@ -65471,8 +65531,8 @@ var IndexedNavigation = class extends EventEmitter12 {
65471
65531
  return this.pageCount;
65472
65532
  }
65473
65533
  /**
65474
- * 跳转至上一页, 并返回跳转后的页面索引.
65475
- */
65534
+ * 跳转至上一页, 并返回跳转后的页面索引.
65535
+ */
65476
65536
  prevPage() {
65477
65537
  const currentPageId = this.userMap.get(WhiteboardKeys.currentPage);
65478
65538
  const data = this.list[currentPageId];
@@ -65484,8 +65544,8 @@ var IndexedNavigation = class extends EventEmitter12 {
65484
65544
  return nextIndex;
65485
65545
  }
65486
65546
  /**
65487
- * 跳转至下一页, 并返回跳转后的页面索引.
65488
- */
65547
+ * 跳转至下一页, 并返回跳转后的页面索引.
65548
+ */
65489
65549
  nextPage() {
65490
65550
  const currentPageId = this.userMap.get(WhiteboardKeys.currentPage);
65491
65551
  const data = this.list[currentPageId];
@@ -65497,16 +65557,16 @@ var IndexedNavigation = class extends EventEmitter12 {
65497
65557
  return nextIndex;
65498
65558
  }
65499
65559
  /**
65500
- * 删除指定页面
65501
- * @param {number} index
65502
- */
65560
+ * 删除指定页面
65561
+ * @param {number} index
65562
+ */
65503
65563
  removePage(index) {
65504
65564
  if (this.pageCount <= 1) {
65505
65565
  return this.pageCount;
65506
65566
  }
65507
65567
  const cameraMode = this.userMap.get(WhiteboardKeys.cameraMode);
65508
65568
  if (cameraMode !== "main") {
65509
- console.warn(`cannot modify pages in non-main view mode.`);
65569
+ console.warn("cannot modify pages in non-main view mode.");
65510
65570
  return this.pageCount;
65511
65571
  }
65512
65572
  const targetId = this.getPageId(index);
@@ -65546,15 +65606,20 @@ var IndexedNavigation = class extends EventEmitter12 {
65546
65606
  this.pageModel.gotoPage(targetId);
65547
65607
  }
65548
65608
  }
65609
+ dispose() {
65610
+ this.indexedPageMap.unobserve(this.handleIndexedPageMapUpdate);
65611
+ this.pageModel.off("switchPage");
65612
+ this.pageModel.off("pagesChange");
65613
+ }
65549
65614
  };
65550
- function _defineProperty37(e, r, t) {
65551
- return (r = _toPropertyKey37(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65615
+ function _defineProperty36(e, r, t) {
65616
+ return (r = _toPropertyKey36(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65552
65617
  }
65553
- function _toPropertyKey37(t) {
65554
- var i = _toPrimitive37(t, "string");
65618
+ function _toPropertyKey36(t) {
65619
+ var i = _toPrimitive36(t, "string");
65555
65620
  return "symbol" == typeof i ? i : i + "";
65556
65621
  }
65557
- function _toPrimitive37(t, r) {
65622
+ function _toPrimitive36(t, r) {
65558
65623
  if ("object" != typeof t || !t) return t;
65559
65624
  var e = t[Symbol.toPrimitive];
65560
65625
  if (void 0 !== e) {
@@ -65564,10 +65629,10 @@ function _toPrimitive37(t, r) {
65564
65629
  }
65565
65630
  return ("string" === r ? String : Number)(t);
65566
65631
  }
65567
- var ShadowEmitter = class extends EventEmitter13 {
65632
+ var ShadowEmitter = class extends EventEmitter12 {
65568
65633
  constructor(userMap) {
65569
65634
  super();
65570
- _defineProperty37(this, "userMap", void 0);
65635
+ _defineProperty36(this, "userMap", void 0);
65571
65636
  this.userMap = userMap;
65572
65637
  }
65573
65638
  getActive() {
@@ -65577,14 +65642,14 @@ var ShadowEmitter = class extends EventEmitter13 {
65577
65642
  return this.userMap.set("shadowActive", value);
65578
65643
  }
65579
65644
  };
65580
- function _defineProperty38(e, r, t) {
65581
- return (r = _toPropertyKey38(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65645
+ function _defineProperty37(e, r, t) {
65646
+ return (r = _toPropertyKey37(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65582
65647
  }
65583
- function _toPropertyKey38(t) {
65584
- var i = _toPrimitive38(t, "string");
65648
+ function _toPropertyKey37(t) {
65649
+ var i = _toPrimitive37(t, "string");
65585
65650
  return "symbol" == typeof i ? i : i + "";
65586
65651
  }
65587
- function _toPrimitive38(t, r) {
65652
+ function _toPrimitive37(t, r) {
65588
65653
  if ("object" != typeof t || !t) return t;
65589
65654
  var e = t[Symbol.toPrimitive];
65590
65655
  if (void 0 !== e) {
@@ -65597,12 +65662,15 @@ function _toPrimitive38(t, r) {
65597
65662
  var StraightLineTool = class extends WhiteboardTool {
65598
65663
  constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
65599
65664
  super(enableToolEvent, modelGetter, shadowEmitter, scope);
65600
- _defineProperty38(this, "elementModel", null);
65601
- _defineProperty38(this, "from", null);
65602
- _defineProperty38(this, "to", null);
65665
+ _defineProperty37(this, "elementModel", null);
65666
+ _defineProperty37(this, "from", null);
65667
+ _defineProperty37(this, "to", null);
65603
65668
  this.tool.minDistance = 1;
65604
65669
  }
65605
65670
  onMouseDown(event) {
65671
+ if (this.elementModel) {
65672
+ this.elementModel.dispose();
65673
+ }
65606
65674
  this.elementModel = this.modelGetter().createStraightLine(true);
65607
65675
  this.from = event.point.clone();
65608
65676
  this.to = event.point.clone();
@@ -65622,14 +65690,14 @@ var StraightLineTool = class extends WhiteboardTool {
65622
65690
  }
65623
65691
  }
65624
65692
  };
65625
- function _defineProperty39(e, r, t) {
65626
- return (r = _toPropertyKey39(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65693
+ function _defineProperty38(e, r, t) {
65694
+ return (r = _toPropertyKey38(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65627
65695
  }
65628
- function _toPropertyKey39(t) {
65629
- var i = _toPrimitive39(t, "string");
65696
+ function _toPropertyKey38(t) {
65697
+ var i = _toPrimitive38(t, "string");
65630
65698
  return "symbol" == typeof i ? i : i + "";
65631
65699
  }
65632
- function _toPrimitive39(t, r) {
65700
+ function _toPrimitive38(t, r) {
65633
65701
  if ("object" != typeof t || !t) return t;
65634
65702
  var e = t[Symbol.toPrimitive];
65635
65703
  if (void 0 !== e) {
@@ -65642,8 +65710,8 @@ function _toPrimitive39(t, r) {
65642
65710
  var GrabTool = class extends WhiteboardTool {
65643
65711
  constructor(enableToolEvent, modelGetter, shadowEmitter, scope, camera) {
65644
65712
  super(enableToolEvent, modelGetter, shadowEmitter, scope);
65645
- _defineProperty39(this, "camera", void 0);
65646
- _defineProperty39(this, "downPoint", null);
65713
+ _defineProperty38(this, "camera", void 0);
65714
+ _defineProperty38(this, "downPoint", null);
65647
65715
  this.camera = camera;
65648
65716
  }
65649
65717
  onMouseDown(event) {
@@ -65666,13 +65734,58 @@ var PointerTool = class extends WhiteboardTool {
65666
65734
  constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
65667
65735
  super(enableToolEvent, modelGetter, shadowEmitter, scope);
65668
65736
  }
65669
- onMouseDown(event) {
65737
+ onMouseDown(_event) {
65670
65738
  }
65671
- onMouseDrag(event) {
65739
+ onMouseDrag(_event) {
65672
65740
  }
65673
65741
  onMouseUp() {
65674
65742
  }
65675
65743
  };
65744
+ function _defineProperty39(e, r, t) {
65745
+ return (r = _toPropertyKey39(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65746
+ }
65747
+ function _toPropertyKey39(t) {
65748
+ var i = _toPrimitive39(t, "string");
65749
+ return "symbol" == typeof i ? i : i + "";
65750
+ }
65751
+ function _toPrimitive39(t, r) {
65752
+ if ("object" != typeof t || !t) return t;
65753
+ var e = t[Symbol.toPrimitive];
65754
+ if (void 0 !== e) {
65755
+ var i = e.call(t, r || "default");
65756
+ if ("object" != typeof i) return i;
65757
+ throw new TypeError("@@toPrimitive must return a primitive value.");
65758
+ }
65759
+ return ("string" === r ? String : Number)(t);
65760
+ }
65761
+ var SequenceExecutor = class {
65762
+ constructor() {
65763
+ _defineProperty39(this, "tasks", []);
65764
+ _defineProperty39(this, "isRunning", false);
65765
+ }
65766
+ addTask(task) {
65767
+ this.tasks.push(task);
65768
+ if (!this.isRunning) {
65769
+ this.execute();
65770
+ }
65771
+ }
65772
+ async execute() {
65773
+ if (this.isRunning) {
65774
+ return;
65775
+ }
65776
+ this.isRunning = true;
65777
+ while (this.tasks.length > 0) {
65778
+ const task = this.tasks.shift();
65779
+ if (task) {
65780
+ try {
65781
+ await task();
65782
+ } catch (e) {
65783
+ }
65784
+ }
65785
+ }
65786
+ this.isRunning = false;
65787
+ }
65788
+ };
65676
65789
  function _defineProperty40(e, r, t) {
65677
65790
  return (r = _toPropertyKey40(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
65678
65791
  }
@@ -65730,16 +65843,18 @@ var WhiteboardApplication = class extends AbstractApplication {
65730
65843
  _defineProperty40(this, "hasPenInput", null);
65731
65844
  _defineProperty40(this, "disableViewModelUpdate", false);
65732
65845
  _defineProperty40(this, "internalResizeObserver", true);
65846
+ _defineProperty40(this, "sequenceExecutor", new SequenceExecutor());
65733
65847
  _defineProperty40(this, "linkTarget", null);
65734
65848
  _defineProperty40(this, "enableToolEvent", () => {
65735
65849
  return !(this.inputType === "pen" && !this.isPenEvent);
65736
65850
  });
65737
65851
  _defineProperty40(this, "handlePageSwitch", (pageId) => {
65738
- for (const editor of this.editors.values()) {
65739
- editor.hidden();
65740
- }
65741
- this.selectElementsModel.clearSelectElementForSelf();
65742
- waitUntil(() => this.layers.has(pageId), 3e3).then(() => {
65852
+ this.sequenceExecutor.addTask(async () => {
65853
+ for (const editor of this.editors.values()) {
65854
+ editor.hidden();
65855
+ }
65856
+ this.selectElementsModel.clearSelectElementForSelf();
65857
+ await waitUntil(() => this.layers.has(pageId), 1e3);
65743
65858
  if (this.layers.has(pageId)) {
65744
65859
  for (const entry of this.layers.entries()) {
65745
65860
  entry[1].off("elementInsert", this.handleElementInsert);
@@ -65751,6 +65866,7 @@ var WhiteboardApplication = class extends AbstractApplication {
65751
65866
  renderableModel.on("elementRemove", this.handleElementRemove);
65752
65867
  renderableModel.on("elementClear", this.handleElementClear);
65753
65868
  renderableModel.flushRenderables();
65869
+ this.paperScope.project.activeLayer.data.pageId = pageId;
65754
65870
  const others = this.userManager.userIdList().filter((v) => v !== this.userId);
65755
65871
  for (const other of others) {
65756
65872
  if (this.userMap(other).get(WhiteboardKeys.currentPage) === pageId) {
@@ -65760,9 +65876,11 @@ var WhiteboardApplication = class extends AbstractApplication {
65760
65876
  }
65761
65877
  }
65762
65878
  }
65879
+ } else {
65880
+ console.warn(`[@netless/forge-whiteboard] page ${pageId} not found`);
65881
+ log3(`[@netless/forge-whiteboard] page ${pageId} not found`, {}, "warning");
65763
65882
  }
65764
- });
65765
- waitUntil(() => this.undoManagers.has(pageId), 3e3).then(() => {
65883
+ await waitUntil(() => this.undoManagers.has(pageId), 1e3);
65766
65884
  if (this.undoManagers.has(pageId)) {
65767
65885
  for (const entry of this.undoManagers.entries()) {
65768
65886
  entry[1].off("stack-item-added", this.handleStackItemAdded);
@@ -65770,10 +65888,13 @@ var WhiteboardApplication = class extends AbstractApplication {
65770
65888
  }
65771
65889
  this.undoManagers.get(pageId).on("stack-item-added", this.handleStackItemAdded);
65772
65890
  this.undoManagers.get(pageId).on("stack-item-popped", this.handleStackItemPopped);
65891
+ } else {
65892
+ console.warn(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`);
65893
+ log3(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`, {}, "warning");
65773
65894
  }
65895
+ this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
65896
+ this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
65774
65897
  });
65775
- this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
65776
- this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
65777
65898
  });
65778
65899
  _defineProperty40(this, "hasPermission", (flag) => {
65779
65900
  return this.permissions.hasPermission(flag, this.userId);
@@ -65803,7 +65924,7 @@ var WhiteboardApplication = class extends AbstractApplication {
65803
65924
  this.undoManagers.set(id, undoManager);
65804
65925
  }
65805
65926
  }
65806
- for (let entry of this.layers.entries()) {
65927
+ for (const entry of this.layers.entries()) {
65807
65928
  if (ids.indexOf(entry[0]) < 0) {
65808
65929
  const renderableModel = this.layers.get(entry[0]);
65809
65930
  this.layers.delete(entry[0]);
@@ -65820,7 +65941,7 @@ var WhiteboardApplication = class extends AbstractApplication {
65820
65941
  }
65821
65942
  });
65822
65943
  _defineProperty40(this, "getCurrentRenderableModel", () => {
65823
- let layerId = this.userMap(this.userId).get(WhiteboardKeys.currentPage);
65944
+ const layerId = this.userMap(this.userId).get(WhiteboardKeys.currentPage);
65824
65945
  if (!this.layers.has(layerId)) {
65825
65946
  this.emitter.emit("error", 300002, `target page: ${layerId} not found`);
65826
65947
  }
@@ -65901,7 +66022,7 @@ var WhiteboardApplication = class extends AbstractApplication {
65901
66022
  }).filter((v) => !!v);
65902
66023
  editor.setTargets(elementModels);
65903
66024
  if (elementModels.length === 1) {
65904
- let model = elementModels[0];
66025
+ const model = elementModels[0];
65905
66026
  if (model.item) {
65906
66027
  const topLeft = this.paperScope.project.view.projectToView(model.item.bounds.topLeft);
65907
66028
  const bottomRight = this.paperScope.project.view.projectToView(model.item.bounds.bottomRight);
@@ -65947,6 +66068,7 @@ var WhiteboardApplication = class extends AbstractApplication {
65947
66068
  });
65948
66069
  requestAnimationFrameHook(this.paperScope);
65949
66070
  requestAnimationFrameHook(this.shadowScope);
66071
+ const that = this;
65950
66072
  this.rootElement.setAttribute("data-forge-app", "whiteboard");
65951
66073
  document.body.addEventListener("pointerdown", (evt) => {
65952
66074
  this.isPenEvent = evt.pointerType === "pen";
@@ -66118,7 +66240,6 @@ var WhiteboardApplication = class extends AbstractApplication {
66118
66240
  errorMessage
66119
66241
  });
66120
66242
  });
66121
- const that = this;
66122
66243
  Object.defineProperty(this.emitter, "tool", {
66123
66244
  get() {
66124
66245
  return that.toolbarModel.currentTool;
@@ -66215,6 +66336,7 @@ var WhiteboardApplication = class extends AbstractApplication {
66215
66336
  this.permissions = new WhiteboardPermissions(this.userManager, (userId) => {
66216
66337
  return this.userMap(userId);
66217
66338
  });
66339
+ this.permissions.setPermission(WhiteboardPermissionFlag.all);
66218
66340
  this.emitter["permissions"] = this.permissions;
66219
66341
  this.emitter["selfUserId"] = this.userId;
66220
66342
  this.option = option;
@@ -66466,7 +66588,7 @@ var WhiteboardApplication = class extends AbstractApplication {
66466
66588
  if (renderableModel.elementModels.has(key)) {
66467
66589
  elementModel = renderableModel.elementModels.get(key) ?? null;
66468
66590
  } else {
66469
- let elementMap = renderableModel.elements.get(key);
66591
+ const elementMap = renderableModel.elements.get(key);
66470
66592
  if (elementMap) {
66471
66593
  elementModel = renderableModel.convertToModel(elementMap);
66472
66594
  }
@@ -66553,6 +66675,9 @@ var WhiteboardApplication = class extends AbstractApplication {
66553
66675
  const size = this.paperScope.view.viewSize;
66554
66676
  return [size.width, size.height];
66555
66677
  }
66678
+ getInherentScale() {
66679
+ return this.camera.getInherentScale();
66680
+ }
66556
66681
  updateInternalResizeObserverStatus(value) {
66557
66682
  this.internalResizeObserver = value;
66558
66683
  }
@@ -66572,72 +66697,91 @@ var WhiteboardApplication = class extends AbstractApplication {
66572
66697
  this.shadowScope.project.clear();
66573
66698
  this.snapshotScope.project.clear();
66574
66699
  this.resizeObserver.disconnect();
66700
+ this.unlink();
66701
+ for (const entry of this.undoManagers.entries()) {
66702
+ entry[1].off("stack-item-added", this.handleStackItemAdded);
66703
+ entry[1].off("stack-item-popped", this.handleStackItemPopped);
66704
+ }
66705
+ for (const entry of this.layers.entries()) {
66706
+ entry[1].dispose();
66707
+ entry[1].removeAllListeners();
66708
+ }
66709
+ this.camera.dispose();
66710
+ this.pageModel.dispose();
66711
+ this.pageModel.removeAllListeners();
66712
+ for (const entry of this.editors.entries()) {
66713
+ entry[1].dispose();
66714
+ }
66715
+ this.toolbarModel.dispose();
66716
+ this.emitter.indexedNavigation.dispose();
66717
+ this.permissions.dispose();
66575
66718
  }
66576
66719
  };
66577
66720
  _defineProperty40(WhiteboardApplication, "applicationName", WHITEBOARD_APP_NAME);
66578
66721
 
66579
66722
  // src/SlideApplication.ts
66580
66723
  var import_slide = __toESM(require_Slide());
66581
- import { AbstractApplication as AbstractApplication2 } from "@netless/forge-room";
66724
+ import { AbstractApplication as AbstractApplication2, kvStore } from "@netless/forge-room";
66582
66725
 
66583
66726
  // src/Slide.ts
66584
- import EventEmitter14 from "eventemitter3";
66585
- var SlideForge = class extends EventEmitter14 {
66727
+ import EventEmitter13 from "eventemitter3";
66728
+ var SlideForge = class extends EventEmitter13 {
66586
66729
  view;
66587
66730
  permissions;
66588
66731
  footView;
66732
+ sideBarView;
66589
66733
  /**
66590
- * 当前页面索引, 从 0 开始
66591
- */
66734
+ * 当前页面索引, 从 0 开始
66735
+ */
66592
66736
  pageIndex;
66593
66737
  /**
66594
- * 总页数
66595
- */
66738
+ * 总页数
66739
+ */
66596
66740
  pageCount;
66597
66741
  /**
66598
- * 切换到参数指定页面, index 从 0 开始
66599
- * @param {number} index 页面索引
66600
- */
66742
+ * 切换到参数指定页面, index 从 0 开始
66743
+ * @param {number} index 页面索引
66744
+ */
66601
66745
  goto;
66602
66746
  /**
66603
- * 下一步, 如果已经是本页的最后一步, 则切换到下一页
66604
- */
66747
+ * 下一步, 如果已经是本页的最后一步, 则切换到下一页
66748
+ */
66605
66749
  nextStep;
66606
66750
  /**
66607
- * 上一步, 如果已经是本页的第一步, 则切换到上一页
66608
- */
66751
+ * 上一步, 如果已经是本页的第一步, 则切换到上一页
66752
+ */
66609
66753
  prevStep;
66610
66754
  /**
66611
- * 下一页, 如果是最后一页, 则不执行任何操作
66612
- */
66755
+ * 下一页, 如果是最后一页, 则不执行任何操作
66756
+ */
66613
66757
  nextPage;
66614
66758
  /**
66615
- * 上一页, 如果是第一页, 则不执行任何操作
66616
- */
66759
+ * 上一页, 如果是第一页, 则不执行任何操作
66760
+ */
66617
66761
  prevPage;
66618
66762
  /**
66619
- * 切换侧栏显示状态
66620
- */
66763
+ * 切换侧栏显示状态
66764
+ */
66621
66765
  sideBarToggle;
66622
66766
  /**
66623
- * 获取预览图图片内容, base64 编码
66624
- * @param {number} index 页面索引
66625
- */
66767
+ * 获取预览图图片内容, base64 编码
66768
+ * @param {number} index 页面索引
66769
+ */
66626
66770
  imgContent;
66627
66771
  /**
66628
- * 获取预览图图片链接
66629
- * @param {number} index 页面索引
66630
- */
66772
+ * 获取预览图图片链接
66773
+ * @param {number} index 页面索引
66774
+ */
66631
66775
  imgUrl;
66632
66776
  /**
66633
- * 获取预览图图片尺寸
66634
- * @param {number} index 页面索引
66635
- */
66777
+ * 获取预览图图片尺寸
66778
+ * @param {number} index 页面索引
66779
+ */
66636
66780
  imgSize;
66637
66781
  };
66638
66782
 
66639
66783
  // src/ForgeSlidePermession.ts
66640
- import EventEmitter15 from "eventemitter3";
66784
+ import { AbstractApplicationPermissions as AbstractApplicationPermissions2 } from "@netless/forge-room";
66641
66785
  var ForgeSlidePermissionFlag = /* @__PURE__ */ ((ForgeSlidePermissionFlag2) => {
66642
66786
  ForgeSlidePermissionFlag2[ForgeSlidePermissionFlag2["none"] = 0] = "none";
66643
66787
  ForgeSlidePermissionFlag2[ForgeSlidePermissionFlag2["changeStep"] = 1] = "changeStep";
@@ -66646,58 +66790,12 @@ var ForgeSlidePermissionFlag = /* @__PURE__ */ ((ForgeSlidePermissionFlag2) => {
66646
66790
  ForgeSlidePermissionFlag2[ForgeSlidePermissionFlag2["all"] = 7] = "all";
66647
66791
  return ForgeSlidePermissionFlag2;
66648
66792
  })(ForgeSlidePermissionFlag || {});
66649
- var ForgeSlidePermissions = class extends EventEmitter15 {
66650
- requestUserMap;
66651
- userManager;
66652
- observers = /* @__PURE__ */ new Map();
66653
- constructor(userManager, requestUserMap) {
66654
- super();
66655
- this.userManager = userManager;
66656
- this.requestUserMap = requestUserMap;
66657
- this.createModel(this.userManager.selfId);
66658
- this.userManager.userIdList().forEach((userId) => {
66659
- this.addObserve(userId);
66660
- });
66661
- this.userManager.on("join", this.handleUserJoin);
66662
- this.userManager.on("leave", this.handleUserLeave);
66663
- }
66664
- handleUserLeave = (user) => {
66665
- const cb = this.observers.get(user.id);
66666
- if (cb) {
66667
- this.requestUserMap(user.id).unobserve(cb);
66668
- }
66669
- };
66670
- handleUserJoin = (user) => {
66671
- this.addObserve(user.id);
66672
- };
66673
- addObserve(userId) {
66674
- const observer = (evt) => {
66675
- this.handleUserPermissionChange(userId, evt);
66676
- };
66677
- this.observers.set(userId, observer);
66678
- this.requestUserMap(userId).observe(observer);
66679
- }
66680
- createModel(userId) {
66681
- const userMap = this.requestUserMap(userId);
66682
- if (!userMap.has("permission")) {
66683
- userMap.set("permission", 0);
66684
- }
66685
- }
66686
- handleUserPermissionChange(userId, evt) {
66687
- for (const [key, value] of evt.changes.keys.entries()) {
66688
- if (key === "permission") {
66689
- if (value.action === "add" || value.action === "update") {
66690
- const newValue = this.requestUserMap(userId).get("permission");
66691
- this.emit("change", userId, this.resolveFlags(newValue), newValue);
66692
- }
66693
- }
66694
- }
66695
- }
66793
+ var ForgeSlidePermissions = class extends AbstractApplicationPermissions2 {
66696
66794
  /**
66697
- * 解析权限列表组合
66698
- * @param {number} value - 权限数字值
66699
- * @return {WhiteboardPermissionFlag[]} - 权限列表
66700
- */
66795
+ * 解析权限列表组合
66796
+ * @param {number} value - 权限数字值
66797
+ * @return {WhiteboardPermissionFlag[]} - 权限列表
66798
+ */
66701
66799
  resolveFlags(value) {
66702
66800
  return [
66703
66801
  2 /* changePage */,
@@ -66705,53 +66803,10 @@ var ForgeSlidePermissions = class extends EventEmitter15 {
66705
66803
  4 /* clickAnim */
66706
66804
  ].filter((v) => (v & value) !== 0);
66707
66805
  }
66708
- /**
66709
- * 获取权限列表组合对应的数值
66710
- * @param { string } userId 不传表示获取自己
66711
- */
66712
- getPermissionValue(userId) {
66713
- return this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
66714
- }
66715
- /**
66716
- * 获取权限列表
66717
- * @param {string=} userId 可选, 不传表示获取自己
66718
- */
66719
- getPermissionFlags(userId) {
66720
- const value = this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
66721
- return this.resolveFlags(value);
66722
- }
66723
- /**
66724
- * 返回对应 userId 是否有相应权限
66725
- * @param {string=} userId 可选, 不传表示返回自己是否有相应权限
66726
- * @param {WhiteboardPermissionFlag} flag
66727
- */
66728
- hasPermission(flag, userId) {
66729
- return ((this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0) & flag) !== 0;
66730
- }
66731
- /**
66732
- * 添加权限
66733
- * @param {WhiteboardPermissionFlag} flag 权限标记
66734
- * @param {string=} userId 可选, 为 userId 添加权限, 不传表示为自己添加权限
66735
- */
66736
- addPermission(flag, userId) {
66737
- const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
66738
- const oldValue = userMap.get("permission") ?? 0;
66739
- this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue | flag);
66740
- }
66741
- /**
66742
- * 移除权限
66743
- * @param {WhiteboardPermissionFlag} flag 权限标记
66744
- * @param {string=} userId 可选, 为 userId 移除权限, 不传表示为自己移除权限
66745
- */
66746
- removePermission(flag, userId) {
66747
- const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
66748
- const oldValue = userMap.get("permission") ?? 0;
66749
- this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue & ~flag);
66750
- }
66751
66806
  };
66752
66807
 
66753
- // src/FoorerView.ts
66754
- import EventEmitter16 from "eventemitter3";
66808
+ // src/FooterView.ts
66809
+ import EventEmitter14 from "eventemitter3";
66755
66810
 
66756
66811
  // src/icons.ts
66757
66812
  var prevPage = (color) => `<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none">
@@ -66780,18 +66835,20 @@ var Icons = {
66780
66835
  sideBar
66781
66836
  };
66782
66837
 
66783
- // src/FoorerView.ts
66838
+ // src/FooterView.ts
66784
66839
  var EM_COLOR = "#8C8C8C";
66785
- var FooterView = class extends EventEmitter16 {
66840
+ var FooterView = class extends EventEmitter14 {
66786
66841
  root;
66787
66842
  prevStep;
66788
66843
  nextStep;
66789
66844
  prevPage;
66790
66845
  nextPage;
66791
66846
  sideBarToggle;
66847
+ eventMap = /* @__PURE__ */ new Map();
66792
66848
  constructor() {
66793
66849
  super();
66794
66850
  this.root = document.createElement("div");
66851
+ this.root.classList.add("forge-slide-footer");
66795
66852
  this.root.style.height = "24px";
66796
66853
  this.root.style.zIndex = "6";
66797
66854
  this.root.style.display = "flex";
@@ -66851,28 +66908,47 @@ var FooterView = class extends EventEmitter16 {
66851
66908
  icon.style.borderRadius = "2px";
66852
66909
  icon.style.margin = "6px";
66853
66910
  icon.innerHTML = svgContent;
66854
- icon.addEventListener("click", () => {
66911
+ const onClickHandle = () => {
66855
66912
  action();
66856
- });
66857
- icon.addEventListener("mouseover", () => {
66913
+ };
66914
+ const onMouseOverHandle = () => {
66858
66915
  icon.style.backgroundColor = "#f0f0f0";
66859
- });
66860
- icon.addEventListener("mouseout", () => {
66916
+ };
66917
+ const onMouseOutHandle = () => {
66861
66918
  icon.style.backgroundColor = "transparent";
66862
- });
66919
+ };
66920
+ icon.addEventListener("click", onClickHandle);
66921
+ icon.addEventListener("mouseover", onMouseOverHandle);
66922
+ icon.addEventListener("mouseout", onMouseOutHandle);
66923
+ this.eventMap.set(icon, [onClickHandle, onMouseOutHandle, onMouseOverHandle]);
66863
66924
  return icon;
66864
66925
  }
66926
+ clearHTMLEventListeners() {
66927
+ this.eventMap.forEach((value, key) => {
66928
+ if (key) {
66929
+ const [clickEvent, mouseOutEvent, mouseOverEvent] = value;
66930
+ key.removeEventListener("click", clickEvent);
66931
+ key.removeEventListener("mouseover", mouseOverEvent);
66932
+ key.removeEventListener("mouseout", mouseOutEvent);
66933
+ }
66934
+ });
66935
+ }
66936
+ dispose() {
66937
+ this.removeAllListeners();
66938
+ this.clearHTMLEventListeners();
66939
+ }
66865
66940
  };
66866
66941
 
66867
66942
  // src/SiderBarView.ts
66868
- import EventEmitter17 from "eventemitter3";
66869
- var SideBarView = class extends EventEmitter17 {
66943
+ import EventEmitter15 from "eventemitter3";
66944
+ var SideBarView = class extends EventEmitter15 {
66870
66945
  root = document.createElement("div");
66871
- itemList = [];
66946
+ isShow = false;
66947
+ eventsMap = /* @__PURE__ */ new Map();
66872
66948
  constructor() {
66873
66949
  super();
66874
66950
  this.root.style.backgroundColor = "#eee";
66875
- this.root.className = "slide-sidebar";
66951
+ this.root.className = "forge-slide-sidebar";
66876
66952
  this.root.style.width = "240px";
66877
66953
  this.root.style.height = "100%";
66878
66954
  this.root.style.position = "absolute";
@@ -66881,38 +66957,38 @@ var SideBarView = class extends EventEmitter17 {
66881
66957
  this.root.style.zIndex = "5";
66882
66958
  this.root.style.transition = "left 0.3s ease-in-out";
66883
66959
  this.root.style.overflow = "auto";
66884
- this.root.style.border = "1px solid #ccc";
66885
- this.root.style.boxShadow = "0 0 10px rgba(0, 0, 0, 0.1)";
66886
66960
  this.root.style.display = "flex";
66887
66961
  this.root.style.flexDirection = "column";
66888
66962
  this.root.style.justifyContent = "flex-start";
66889
66963
  this.root.style.alignItems = "center";
66890
66964
  }
66891
- onMouseOver = (itemContainer) => {
66892
- itemContainer.style.borderColor = "#ccc";
66893
- };
66894
- onMouseOut = (itemContainer) => {
66895
- itemContainer.style.borderColor = "transparent";
66896
- };
66897
- onClickHandle = (index) => {
66898
- this.emit("pageChange", index);
66899
- };
66965
+ get isShowSideBar() {
66966
+ return this.isShow;
66967
+ }
66900
66968
  initialize(slideCount, option) {
66901
66969
  for (let i = 1; i <= slideCount; i++) {
66902
66970
  const itemContainer = document.createElement("div");
66903
- this.itemList.push(itemContainer);
66904
66971
  itemContainer.style.width = "60%";
66905
66972
  itemContainer.style.display = "flex";
66906
66973
  itemContainer.style.justifyContent = "center";
66907
66974
  itemContainer.style.alignItems = "flex-start";
66908
- itemContainer.style.border = "7px solid transparent";
66909
66975
  itemContainer.style.position = "relative";
66910
66976
  itemContainer.style.borderRadius = "4px";
66911
66977
  itemContainer.style.transition = "border-color .3s";
66912
66978
  itemContainer.style.marginBottom = "10px";
66913
- itemContainer.addEventListener("mouseover", () => this.onMouseOver(itemContainer));
66914
- itemContainer.addEventListener("mouseout", () => this.onMouseOut(itemContainer));
66915
- itemContainer.addEventListener("click", () => this.onClickHandle(i));
66979
+ const onMouseOverHandle = () => {
66980
+ itemContainer.style.borderColor = "#ccc";
66981
+ };
66982
+ const onMouseOutHandle = () => {
66983
+ itemContainer.style.borderColor = "transparent";
66984
+ };
66985
+ const onClickHandle = () => {
66986
+ this.emit("pageChange", i);
66987
+ };
66988
+ itemContainer.addEventListener("click", onClickHandle);
66989
+ itemContainer.addEventListener("mouseover", onMouseOverHandle);
66990
+ itemContainer.addEventListener("mouseout", onMouseOutHandle);
66991
+ this.eventsMap.set(itemContainer, [onClickHandle, onMouseOverHandle, onMouseOutHandle]);
66916
66992
  const pageIndex = document.createElement("span");
66917
66993
  pageIndex.textContent = `${i}`;
66918
66994
  pageIndex.style.position = "absolute";
@@ -66930,10 +67006,31 @@ var SideBarView = class extends EventEmitter17 {
66930
67006
  this.root.appendChild(itemContainer);
66931
67007
  }
66932
67008
  }
67009
+ hidden() {
67010
+ if (!this.root) {
67011
+ return;
67012
+ }
67013
+ this.root.style.left = "-240px";
67014
+ this.root.style.border = "none";
67015
+ this.root.style.boxShadow = "none";
67016
+ this.isShow = false;
67017
+ }
67018
+ show() {
67019
+ if (!this.root) {
67020
+ return;
67021
+ }
67022
+ this.root.style.left = "0";
67023
+ this.root.style.border = "1px solid #ccc";
67024
+ this.root.style.boxShadow = "0 0 10px rgba(0, 0, 0, 0.1)";
67025
+ this.isShow = true;
67026
+ }
66933
67027
  dispose() {
66934
- this.itemList.forEach((item) => {
66935
- item.removeEventListener("mouseover", () => this.onMouseOver(item));
66936
- item.removeEventListener("mouseout", () => this.onMouseOut(item));
67028
+ this.removeAllListeners();
67029
+ this.eventsMap.forEach((handlers, element) => {
67030
+ const [clickEvent, mouseOverEvent, mouseOutEvent] = handlers;
67031
+ element.removeEventListener("click", clickEvent);
67032
+ element.removeEventListener("mouseover", mouseOverEvent);
67033
+ element.removeEventListener("mouseout", mouseOutEvent);
66937
67034
  });
66938
67035
  }
66939
67036
  };
@@ -66972,12 +67069,8 @@ function arrayEqual(arr1, arr2) {
66972
67069
  }
66973
67070
  return true;
66974
67071
  }
66975
- async function delay2(time) {
66976
- return new Promise((resolve) => setTimeout(resolve, time));
66977
- }
66978
67072
 
66979
67073
  // src/SlideApplication.ts
66980
- import { kvStore } from "@netless/forge-room";
66981
67074
  var Slide_APP_NAME = "forge_slide";
66982
67075
  var SlideApplication = class extends AbstractApplication2 {
66983
67076
  static applicationName = Slide_APP_NAME;
@@ -66996,6 +67089,10 @@ var SlideApplication = class extends AbstractApplication2 {
66996
67089
  currentSlideIndex = 0;
66997
67090
  taskId = "";
66998
67091
  prefix = "";
67092
+ slideCount = 0;
67093
+ lastDispatchUuid = "";
67094
+ syncMessageQueue = [];
67095
+ isSyncing = false;
66999
67096
  constructor() {
67000
67097
  super();
67001
67098
  window.emitter = this.emitter;
@@ -67011,7 +67108,7 @@ var SlideApplication = class extends AbstractApplication2 {
67011
67108
  this.footer = new FooterView();
67012
67109
  this.sideBar = new SideBarView();
67013
67110
  this.sideBar.on("pageChange", (index) => {
67014
- if (index > 0 && index <= this.slide.slideCount) {
67111
+ if (index > 0 && index <= this.slideCount) {
67015
67112
  this.slide.renderSlide(index);
67016
67113
  }
67017
67114
  });
@@ -67053,7 +67150,7 @@ var SlideApplication = class extends AbstractApplication2 {
67053
67150
  if (!this.permissions.hasPermission(2 /* changePage */)) {
67054
67151
  return;
67055
67152
  }
67056
- if (this.currentSlideIndex < this.slide.slideCount) {
67153
+ if (this.currentSlideIndex < this.slideCount) {
67057
67154
  this.slide.renderSlide(this.currentSlideIndex + 1);
67058
67155
  }
67059
67156
  });
@@ -67061,16 +67158,13 @@ var SlideApplication = class extends AbstractApplication2 {
67061
67158
  if (!this.permissions.hasPermission(2 /* changePage */)) {
67062
67159
  return;
67063
67160
  }
67064
- if (this.sideBar.root.style.left === "0px") {
67065
- this.sideBar.root.style.left = "-240px";
67161
+ if (this.sideBar.isShowSideBar) {
67162
+ this.sideBar.hidden();
67066
67163
  } else {
67067
- this.sideBar.root.style.left = "0px";
67164
+ this.sideBar.show();
67068
67165
  }
67069
67166
  });
67070
67167
  this.rootView.appendChild(this.contentContainer);
67071
- this.permissions.on("change", (userId, flags, value) => {
67072
- this.emitter.emit("permissionChange", userId, flags, value);
67073
- });
67074
67168
  this.emitter.on("renderStart", (pageIndex) => {
67075
67169
  this.footer.prevPageState(pageIndex !== 0);
67076
67170
  });
@@ -67090,6 +67184,11 @@ var SlideApplication = class extends AbstractApplication2 {
67090
67184
  return that.footer.root;
67091
67185
  }
67092
67186
  });
67187
+ Object.defineProperty(this.emitter, "sidebarView", {
67188
+ get() {
67189
+ return that.sideBar.root;
67190
+ }
67191
+ });
67093
67192
  Object.defineProperty(this.emitter, "pageIndex", {
67094
67193
  get() {
67095
67194
  return that.currentSlideIndex;
@@ -67097,7 +67196,7 @@ var SlideApplication = class extends AbstractApplication2 {
67097
67196
  });
67098
67197
  Object.defineProperty(this.emitter, "pageCount", {
67099
67198
  get() {
67100
- return that.slide.slideCount;
67199
+ return that.slideCount;
67101
67200
  }
67102
67201
  });
67103
67202
  Object.defineProperty(this.emitter, "goto", {
@@ -67163,6 +67262,13 @@ var SlideApplication = class extends AbstractApplication2 {
67163
67262
  return this.getImageSize(pageIndex);
67164
67263
  }
67165
67264
  });
67265
+ this.applySlideState();
67266
+ }
67267
+ getPreviewImageUrl(pageIndex) {
67268
+ if (pageIndex < 1 || pageIndex > this.slideCount) {
67269
+ throw new Error("pageIndex out of range");
67270
+ }
67271
+ return `${this.prefix}/${this.taskId}/preview/${pageIndex}.png`;
67166
67272
  }
67167
67273
  async getPreviewImage(imageUrl) {
67168
67274
  const image = fetch(imageUrl);
@@ -67187,10 +67293,10 @@ var SlideApplication = class extends AbstractApplication2 {
67187
67293
  });
67188
67294
  }
67189
67295
  async getImageUrl(pageIndex) {
67190
- return `${this.prefix}/${this.taskId}/preview/${pageIndex + 1}.png`;
67296
+ return this.getPreviewImageUrl(pageIndex);
67191
67297
  }
67192
67298
  async getImageSize(pageIndex) {
67193
- const imageUrl = `${this.prefix}/${this.taskId}/preview/${pageIndex + 1}.png`;
67299
+ const imageUrl = this.getPreviewImageUrl(pageIndex);
67194
67300
  let preview = null;
67195
67301
  try {
67196
67302
  const result = await kvStore.getItem(imageUrl);
@@ -67206,7 +67312,7 @@ var SlideApplication = class extends AbstractApplication2 {
67206
67312
  return { width: preview.width, height: preview.height };
67207
67313
  }
67208
67314
  async getImageContent(pageIndex) {
67209
- const imageUrl = `${this.prefix}/${this.taskId}/preview/${pageIndex + 1}.png`;
67315
+ const imageUrl = this.getPreviewImageUrl(pageIndex);
67210
67316
  let preview = null;
67211
67317
  try {
67212
67318
  const result = await kvStore.getItem(imageUrl);
@@ -67221,39 +67327,88 @@ var SlideApplication = class extends AbstractApplication2 {
67221
67327
  await kvStore.setItem(imageUrl, JSON.stringify(preview));
67222
67328
  return preview.src;
67223
67329
  }
67224
- applySlideState = async (slideState, lastDispatch) => {
67225
- if (this.slide.slideState.currentSlideIndex < 0) {
67226
- this.slide.emit(import_slide.SLIDE_EVENTS.syncReceive, lastDispatch);
67330
+ nextTick = () => {
67331
+ this.isSyncing = false;
67332
+ requestAnimationFrame(() => {
67333
+ this.applySlideState().catch((error) => {
67334
+ console.error("Error in applySlideState:", error);
67335
+ });
67336
+ });
67337
+ };
67338
+ applySlideState = async () => {
67339
+ if (this.isSyncing) {
67227
67340
  return;
67228
67341
  }
67229
- if (this.slide.slideState.currentSlideIndex > 0 && deepEqual(this.slide.slideState, slideState)) {
67230
- this.slide.emit(import_slide.SLIDE_EVENTS.syncReceive, lastDispatch);
67342
+ const lastSyncMessage = this.syncMessageQueue.pop();
67343
+ if (!lastSyncMessage) {
67344
+ return this.nextTick();
67345
+ }
67346
+ this.syncMessageQueue = [];
67347
+ this.isSyncing = true;
67348
+ const { state, dispatch } = lastSyncMessage;
67349
+ if (this.slide.slideState.currentSlideIndex < 0) {
67350
+ await this.slide.receiveSyncHandler(dispatch);
67351
+ return this.nextTick();
67352
+ } else if (!deepEqual(this.slide.slideState, state)) {
67353
+ await this.slide.setSlideState(state);
67354
+ await this.slide.receiveSyncHandler(dispatch);
67231
67355
  } else {
67232
- await this.slide.setSlideState(slideState);
67233
- await delay2(200);
67234
- this.slide.emit(import_slide.SLIDE_EVENTS.syncReceive, lastDispatch);
67356
+ this.slide.emit(import_slide.SLIDE_EVENTS.syncReceive, dispatch);
67235
67357
  }
67358
+ return this.nextTick();
67236
67359
  };
67237
67360
  onSlideEventHandler = async (event) => {
67238
67361
  for (const [key, value] of event.changes.keys.entries()) {
67239
67362
  if (key === "syncSlide") {
67240
67363
  if (value.action === "add" || value.action === "update") {
67241
67364
  const { slideState: slideStateFromServer, dispatch: dispatchFromServer } = this.getMap(this.name).get("syncSlide");
67242
- this.applySlideState(slideStateFromServer, dispatchFromServer);
67365
+ if (this.lastDispatchUuid === dispatchFromServer.uuid) {
67366
+ return;
67367
+ }
67368
+ this.lastDispatchUuid = dispatchFromServer.uuid;
67369
+ this.syncMessageQueue.push({
67370
+ state: slideStateFromServer,
67371
+ dispatch: dispatchFromServer
67372
+ });
67373
+ this.applySlideState();
67243
67374
  }
67244
67375
  }
67245
67376
  }
67246
67377
  };
67378
+ keyBoardEvents = (event) => {
67379
+ if (event.key === "ArrowLeft") {
67380
+ this.footer.emit("prevStep");
67381
+ } else if (event.key === "ArrowRight") {
67382
+ this.footer.emit("nextStep");
67383
+ } else if (event.key === "ArrowUp") {
67384
+ this.footer.emit("prevPage");
67385
+ } else if (event.key === "ArrowDown") {
67386
+ this.footer.emit("nextPage");
67387
+ }
67388
+ };
67389
+ bindKeyBoardEvent() {
67390
+ document.addEventListener("keydown", this.keyBoardEvents);
67391
+ }
67392
+ unbindKeyBoardEvent() {
67393
+ document.removeEventListener("keydown", this.keyBoardEvents);
67394
+ }
67395
+ async onFocusInstance() {
67396
+ this.bindKeyBoardEvent();
67397
+ }
67398
+ onRefocusInstance() {
67399
+ this.unbindKeyBoardEvent();
67400
+ }
67247
67401
  async initialize(option) {
67248
67402
  this.prefix = option.prefix;
67249
67403
  this.taskId = option.taskId;
67250
67404
  const whiteboardApp = new WhiteboardApplication();
67251
67405
  whiteboardApp.roomDoc = this.roomDoc;
67252
- whiteboardApp.appId = `${option.taskId}_wb`;
67406
+ whiteboardApp.appId = `${option.taskId}_${this.appId}_wb`;
67253
67407
  whiteboardApp.userId = this.userId;
67254
67408
  whiteboardApp.userManager = this.userManager;
67255
67409
  whiteboardApp.applicationManager = this.applicationManager;
67256
67410
  const json = await fetch(`${option.prefix}/${option.taskId}/jsonOutput/slide-1.json`).then((res) => res.json());
67411
+ this.slideCount = json.slideCount;
67257
67412
  await whiteboardApp.initialize({
67258
67413
  width: json.width,
67259
67414
  height: json.height
@@ -67268,11 +67423,13 @@ var SlideApplication = class extends AbstractApplication2 {
67268
67423
  this.whiteboard.view.style.top = "0";
67269
67424
  this.whiteboard.view.style.left = "0";
67270
67425
  this.whiteboard.view.style.zIndex = "4";
67426
+ this.whiteboard.view.classList.add("slide-whiteboard");
67271
67427
  this.whiteboard.permissions.addPermission(WhiteboardPermissionFlag.all);
67272
67428
  this.whiteboard.setCanvasBackgroundColor("#f0f0f000");
67273
67429
  this.whiteboardContainer.style.position = "relative";
67274
67430
  this.whiteboardContainer.style.flex = "0 0 auto";
67275
67431
  this.whiteboardContainer.style.height = "calc(100% - 24px)";
67432
+ this.whiteboardContainer.classList.add("forge-slide-whiteboard-container");
67276
67433
  this.whiteboardContainer.appendChild(this.whiteboard.view);
67277
67434
  this.whiteboardContainer.appendChild(this.slideContainer);
67278
67435
  this.contentContainer.appendChild(this.whiteboardContainer);
@@ -67296,30 +67453,39 @@ var SlideApplication = class extends AbstractApplication2 {
67296
67453
  });
67297
67454
  this.slide.setResource(option.taskId, option.prefix);
67298
67455
  this.sideBar.initialize(json.slideCount, option);
67299
- this.slide.on("syncDispatch", (event) => {
67456
+ this.slide.on(import_slide.SLIDE_EVENTS.syncDispatch, (event) => {
67300
67457
  this.getMap(this.name).set("syncSlide", {
67301
67458
  slideState: this.slide.slideState,
67302
67459
  dispatch: event
67303
67460
  });
67304
67461
  });
67305
- this.slide.on("mainSeqStepStart", (animateIndex) => {
67462
+ this.slide.on(import_slide.SLIDE_EVENTS.mainSeqStepStart, (animateIndex) => {
67306
67463
  this.emitter.emit("mainSeqStepStart", animateIndex);
67307
67464
  });
67308
- this.slide.on("mainSeqStepEnd", (animateIndex) => {
67465
+ this.slide.on(import_slide.SLIDE_EVENTS.mainSeqStepEnd, (animateIndex) => {
67309
67466
  this.emitter.emit("mainSeqStepEnd", animateIndex);
67310
67467
  });
67311
- this.slide.on("renderStart", (slideIndex) => {
67468
+ this.slide.on(import_slide.SLIDE_EVENTS.animateStart, () => {
67469
+ this.sideBar.hidden();
67470
+ });
67471
+ this.slide.on(import_slide.SLIDE_EVENTS.renderError, ({ error, index }) => {
67472
+ if (error.errorType === "CANVAS_CRASH") {
67473
+ this.slide.renderSlide(index);
67474
+ }
67475
+ });
67476
+ this.slide.on(import_slide.SLIDE_EVENTS.renderStart, (slideIndex) => {
67312
67477
  this.whiteboardApp.emitter.view.style.opacity = "0";
67313
67478
  this.whiteboardApp.emitter.addPage(`${slideIndex}`);
67314
67479
  this.whiteboardApp.emitter.gotoPage(`${slideIndex}`);
67480
+ this.sideBar.hidden();
67315
67481
  this.emitter.emit("renderStart", slideIndex);
67316
67482
  });
67317
- this.slide.on("renderEnd", (slideIndex) => {
67483
+ this.slide.on(import_slide.SLIDE_EVENTS.renderEnd, (slideIndex) => {
67318
67484
  this.currentSlideIndex = slideIndex;
67319
67485
  this.whiteboardApp.emitter.view.style.opacity = "1";
67320
67486
  this.emitter.emit("renderEnd", slideIndex);
67321
67487
  });
67322
- this.slide.on("stateChange", (state) => {
67488
+ this.slide.on(import_slide.SLIDE_EVENTS.stateChange, (state) => {
67323
67489
  this.getMap(this.name).set("slideState", state);
67324
67490
  });
67325
67491
  this.getMap(this.name).observe(this.onSlideEventHandler);
@@ -67328,7 +67494,7 @@ var SlideApplication = class extends AbstractApplication2 {
67328
67494
  window.forgeSlide = this;
67329
67495
  const syncSlide = this.getMap(this.name).get("slideState");
67330
67496
  if (syncSlide && syncSlide.taskId === option.taskId) {
67331
- await this.slide.setSlideState(syncSlide);
67497
+ this.slide.setSlideState(syncSlide);
67332
67498
  } else {
67333
67499
  this.slide.renderSlide(1);
67334
67500
  }
@@ -67336,6 +67502,7 @@ var SlideApplication = class extends AbstractApplication2 {
67336
67502
  return this.userMap(userId);
67337
67503
  });
67338
67504
  this.permissions.on("change", (userId, flags, value) => {
67505
+ this.emitter.emit("permissionChange", userId, flags, value);
67339
67506
  if (this.userId === userId) {
67340
67507
  if (flags.includes(4 /* clickAnim */)) {
67341
67508
  this.slideContainer.style.pointerEvents = "auto";
@@ -67344,8 +67511,31 @@ var SlideApplication = class extends AbstractApplication2 {
67344
67511
  }
67345
67512
  }
67346
67513
  });
67347
- this.permissions.addPermission(7 /* all */);
67514
+ this.permissions.setPermission(7 /* all */);
67348
67515
  this.whiteboardApp.disableViewModel();
67516
+ if (this.window) {
67517
+ let prevStatus = "normal";
67518
+ this.window.on("statusChange", (status) => {
67519
+ if (prevStatus === "minimized") {
67520
+ this.onFocusInstance();
67521
+ prevStatus = status;
67522
+ return;
67523
+ }
67524
+ prevStatus = status;
67525
+ if (status === "normal") {
67526
+ this.onFocusInstance();
67527
+ } else if (status === "minimized") {
67528
+ this.onRefocusInstance();
67529
+ }
67530
+ });
67531
+ this.window.on("focusedChange", (status) => {
67532
+ if (status) {
67533
+ this.onFocusInstance();
67534
+ } else {
67535
+ this.onRefocusInstance();
67536
+ }
67537
+ });
67538
+ }
67349
67539
  window.__forge_slide = this;
67350
67540
  window.slidePermissions = this.permissions;
67351
67541
  return Promise.resolve(void 0);
@@ -67359,7 +67549,8 @@ var SlideApplication = class extends AbstractApplication2 {
67359
67549
  this.slide.destroy();
67360
67550
  this.sideBar.dispose();
67361
67551
  this.getMap(this.name).unobserve(this.onSlideEventHandler);
67362
- return Promise.resolve(void 0);
67552
+ this.permissions.dispose();
67553
+ this.footer.dispose();
67363
67554
  }
67364
67555
  };
67365
67556
  export {