@netless/forge-whiteboard 1.1.3 → 1.1.4

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.
@@ -25639,7 +25639,7 @@ __export(src_exports, {
25639
25639
  module.exports = __toCommonJS(src_exports);
25640
25640
 
25641
25641
  // src/WhiteboardApplication.ts
25642
- var import_forge_room13 = require("@netless/forge-room");
25642
+ var import_forge_room14 = require("@netless/forge-room");
25643
25643
  var Y15 = __toESM(require("yjs"), 1);
25644
25644
  var import_paper = __toESM(require_paper_full(), 1);
25645
25645
 
@@ -25647,7 +25647,7 @@ var import_paper = __toESM(require_paper_full(), 1);
25647
25647
  var Y12 = __toESM(require("yjs"), 1);
25648
25648
  var import_eventemitter3 = __toESM(require("eventemitter3"), 1);
25649
25649
  var import_uuid = require("uuid");
25650
- var import_forge_room5 = require("@netless/forge-room");
25650
+ var import_forge_room6 = require("@netless/forge-room");
25651
25651
 
25652
25652
  // src/model/renderable/CurveModel.ts
25653
25653
  var Y2 = __toESM(require("yjs"), 1);
@@ -25973,7 +25973,20 @@ var ElementModel = class _ElementModel {
25973
25973
  } else {
25974
25974
  this.root.set(_ElementModel.KEYS.pointsMatrix, [1, 0, 0, 1, 0, 0]);
25975
25975
  }
25976
+ }
25977
+ bindObserver() {
25978
+ const beforeL = this.root._eH?.l?.length ?? -1;
25979
+ const beforeDL = this.root._dEH?.l?.length ?? -1;
25980
+ (0, import_forge_room.removeDeepObserver)(this.root, this.handlePropChange);
25981
+ this.subBindObserver();
25982
+ const afterRemoveL = this.root._eH?.l?.length ?? -1;
25983
+ const afterRemoveDL = this.root._dEH?.l?.length ?? -1;
25976
25984
  this.root.observeDeep(this.handlePropChange);
25985
+ const afterAddL = this.root._eH?.l?.length ?? -1;
25986
+ const afterAddDL = this.root._dEH?.l?.length ?? -1;
25987
+ console.log(`[][][] bindObserver uuid=${this.uuid} doc=${!!this.root.doc} _eH: ${beforeL}->${afterRemoveL}->${afterAddL} _dEH: ${beforeDL}->${afterRemoveDL}->${afterAddDL}`);
25988
+ }
25989
+ subBindObserver() {
25977
25990
  }
25978
25991
  handlePointsChangeDirect() {
25979
25992
  this.onVectorUpdate();
@@ -26114,6 +26127,9 @@ var ElementModel = class _ElementModel {
26114
26127
  }
26115
26128
  dispose() {
26116
26129
  this.subDispose();
26130
+ }
26131
+ disposeObserver() {
26132
+ console.log(`[][][] disposeObserver uuid=${this.uuid}`);
26117
26133
  (0, import_forge_room.removeDeepObserver)(this.root, this.handlePropChange);
26118
26134
  }
26119
26135
  };
@@ -27048,6 +27064,10 @@ var PointTextModel = class extends ElementModel {
27048
27064
  subDispose() {
27049
27065
  (0, import_forge_room3.removeObserver)(this.root, this.handleTextPropChange);
27050
27066
  }
27067
+ subBindObserver() {
27068
+ (0, import_forge_room3.removeObserver)(this.root, this.handleTextPropChange);
27069
+ this.root.observe(this.handleTextPropChange);
27070
+ }
27051
27071
  liveCursorPoint() {
27052
27072
  const points = this.points;
27053
27073
  if (points.length < 1) {
@@ -27590,6 +27610,7 @@ var EraserModel = class extends ElementModel {
27590
27610
  // src/model/renderable/LaserPointerModel.ts
27591
27611
  var Y10 = __toESM(require("yjs"), 1);
27592
27612
  var import_lodash5 = __toESM(require_lodash(), 1);
27613
+ var import_forge_room4 = require("@netless/forge-room");
27593
27614
  function _defineProperty14(e, r, t) {
27594
27615
  return (r = _toPropertyKey14(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
27595
27616
  }
@@ -27618,17 +27639,8 @@ var LaserPointerModel = class extends ElementModel {
27618
27639
  _defineProperty14(this, "clearLocalPointsWhenYPointsChange", false);
27619
27640
  _defineProperty14(this, "shouldUseLocalPoints", false);
27620
27641
  _defineProperty14(this, "localPointsPick", 4);
27621
- this.clientId = clientId;
27622
- if (this.root.doc && !this.root.has("type")) {
27623
- this.root.set("type", "laser");
27624
- }
27625
- if (this.root.doc && !this.root.has("points")) {
27626
- this.root.set("points", new Y10.Array());
27627
- }
27628
- if (this.root.doc && !this.root.has("removed")) {
27629
- this.root.set("removed", false);
27630
- }
27631
- this.root.observe((event) => {
27642
+ _defineProperty14(this, "removeElement", void 0);
27643
+ _defineProperty14(this, "handleLaserPropChange", (event) => {
27632
27644
  if (!this.item) {
27633
27645
  return;
27634
27646
  }
@@ -27646,13 +27658,31 @@ var LaserPointerModel = class extends ElementModel {
27646
27658
  this.onVectorUpdate();
27647
27659
  if (evt.count >= 30) {
27648
27660
  if (this.ownerId === this.clientId) {
27649
- removeElement(this.uuid);
27661
+ this.removeElement(this.uuid);
27650
27662
  }
27651
27663
  }
27652
27664
  };
27653
27665
  }
27654
27666
  }
27655
27667
  });
27668
+ this.clientId = clientId;
27669
+ this.removeElement = removeElement;
27670
+ if (this.root.doc && !this.root.has("type")) {
27671
+ this.root.set("type", "laser");
27672
+ }
27673
+ if (this.root.doc && !this.root.has("points")) {
27674
+ this.root.set("points", new Y10.Array());
27675
+ }
27676
+ if (this.root.doc && !this.root.has("removed")) {
27677
+ this.root.set("removed", false);
27678
+ }
27679
+ }
27680
+ subBindObserver() {
27681
+ (0, import_forge_room4.removeObserver)(this.root, this.handleLaserPropChange);
27682
+ this.root.observe(this.handleLaserPropChange);
27683
+ }
27684
+ subDispose() {
27685
+ (0, import_forge_room4.removeObserver)(this.root, this.handleLaserPropChange);
27656
27686
  }
27657
27687
  beginRemoveAnimate() {
27658
27688
  this.root.set("removed", true);
@@ -27748,8 +27778,6 @@ var LaserPointerModel = class extends ElementModel {
27748
27778
  onStyleKeyUpdate(_key) {
27749
27779
  return;
27750
27780
  }
27751
- subDispose() {
27752
- }
27753
27781
  liveCursorPoint() {
27754
27782
  const yArray = this.root.get(ElementModel.KEYS.points);
27755
27783
  if (yArray.length < 2) {
@@ -27762,7 +27790,7 @@ var LaserPointerModel = class extends ElementModel {
27762
27790
  };
27763
27791
 
27764
27792
  // src/WhitePermissions.ts
27765
- var import_forge_room4 = require("@netless/forge-room");
27793
+ var import_forge_room5 = require("@netless/forge-room");
27766
27794
  var WhiteboardPermissionFlag = function(WhiteboardPermissionFlag2) {
27767
27795
  WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["none"] = 0] = "none";
27768
27796
  WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["draw"] = 1] = "draw";
@@ -27775,7 +27803,7 @@ var WhiteboardPermissionFlag = function(WhiteboardPermissionFlag2) {
27775
27803
  WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["all"] = WhiteboardPermissionFlag2.draw | WhiteboardPermissionFlag2.editSelf | WhiteboardPermissionFlag2.editOthers | WhiteboardPermissionFlag2.deleteSelf | WhiteboardPermissionFlag2.deleteOthers | WhiteboardPermissionFlag2.mainView | WhiteboardPermissionFlag2.setOthersView] = "all";
27776
27804
  return WhiteboardPermissionFlag2;
27777
27805
  }({});
27778
- var WhiteboardPermissions = class extends import_forge_room4.AbstractApplicationPermissions {
27806
+ var WhiteboardPermissions = class extends import_forge_room5.AbstractApplicationPermissions {
27779
27807
  /**
27780
27808
  * 解析权限列表组合
27781
27809
  * @param {number} value - 权限数字值
@@ -28110,6 +28138,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28110
28138
  const existingModel = this.elementModels.get(uuid);
28111
28139
  if (existingModel) {
28112
28140
  existingModel.shadowEmitter = this.shadowEmitter;
28141
+ existingModel.bindObserver();
28113
28142
  return existingModel;
28114
28143
  }
28115
28144
  }
@@ -28140,6 +28169,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28140
28169
  }
28141
28170
  if (model) {
28142
28171
  model.shadowEmitter = this.shadowEmitter;
28172
+ model.bindObserver();
28143
28173
  this.elementModels.set(model.uuid, model);
28144
28174
  }
28145
28175
  return model;
@@ -28153,7 +28183,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28153
28183
  confirmPermission() {
28154
28184
  const hasPermission = this.hasPermission(WhiteboardPermissionFlag.draw);
28155
28185
  if (!hasPermission) {
28156
- (0, import_forge_room5.log)("[@netless/forge-whiteboard] no permission to draw", {}, "warn");
28186
+ (0, import_forge_room6.log)("[@netless/forge-whiteboard] no permission to draw", {}, "warn");
28157
28187
  }
28158
28188
  return hasPermission;
28159
28189
  }
@@ -28171,6 +28201,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28171
28201
  this.elements.set(uuid, yMap);
28172
28202
  }, elementsUndoOrigin);
28173
28203
  const model = new ImageModel(yMap, this.scope, this.imageSets, this.liveCursor, this.isPerformanceMode);
28204
+ model.bindObserver();
28174
28205
  model.root.set("src", src);
28175
28206
  const initMatrix = new this.scope.Matrix();
28176
28207
  const center = this.scope.project.view.center;
@@ -28203,6 +28234,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28203
28234
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28204
28235
  this.elements.set(uuid, yMap);
28205
28236
  }, elementsUndoOrigin);
28237
+ curveModel.bindObserver();
28206
28238
  this.initElement(curveModel);
28207
28239
  return curveModel;
28208
28240
  }
@@ -28229,6 +28261,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28229
28261
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28230
28262
  this.elements.set(uuid, yMap);
28231
28263
  }, elementsUndoOrigin);
28264
+ model.bindObserver();
28232
28265
  this.initElement(model);
28233
28266
  return model;
28234
28267
  }
@@ -28252,6 +28285,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28252
28285
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28253
28286
  this.elements.set(uuid, yMap);
28254
28287
  }, elementsUndoOrigin);
28288
+ model.bindObserver();
28255
28289
  return model;
28256
28290
  }
28257
28291
  createTriangle(shadow) {
@@ -28276,6 +28310,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28276
28310
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28277
28311
  this.elements.set(uuid, yMap);
28278
28312
  }, elementsUndoOrigin);
28313
+ triangleModel.bindObserver();
28279
28314
  this.initElement(triangleModel);
28280
28315
  triangleModel.dashArray = this.toolbarModel.dashArray;
28281
28316
  return triangleModel;
@@ -28305,6 +28340,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28305
28340
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28306
28341
  this.elements.set(uuid, yMap);
28307
28342
  }, elementsUndoOrigin);
28343
+ rect.bindObserver();
28308
28344
  this.initElement(rect);
28309
28345
  rect.dashArray = this.toolbarModel.dashArray;
28310
28346
  return rect;
@@ -28331,6 +28367,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28331
28367
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28332
28368
  this.elements.set(uuid, yMap);
28333
28369
  }, elementsUndoOrigin);
28370
+ segmentsModel.bindObserver();
28334
28371
  this.initElement(segmentsModel);
28335
28372
  segmentsModel.dashArray = this.toolbarModel.dashArray;
28336
28373
  return segmentsModel;
@@ -28355,6 +28392,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28355
28392
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28356
28393
  this.elements.set(uuid, yMap);
28357
28394
  }, elementsUndoOrigin);
28395
+ selectorModel.bindObserver();
28358
28396
  selectorModel.shadow = "layer";
28359
28397
  return selectorModel;
28360
28398
  }
@@ -28380,6 +28418,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28380
28418
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28381
28419
  this.elements.set(uuid, yMap);
28382
28420
  }, elementsUndoOrigin);
28421
+ straightLineModel.bindObserver();
28383
28422
  this.initElement(straightLineModel);
28384
28423
  straightLineModel.dashArray = this.toolbarModel.dashArray;
28385
28424
  return straightLineModel;
@@ -28408,6 +28447,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28408
28447
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28409
28448
  this.elements.set(uuid, yMap);
28410
28449
  }, elementsUndoOrigin);
28450
+ lineModel.bindObserver();
28411
28451
  this.initElement(lineModel);
28412
28452
  lineModel.dashArray = this.toolbarModel.dashArray;
28413
28453
  return lineModel;
@@ -28434,6 +28474,7 @@ var RenderableModel = class extends import_eventemitter3.default {
28434
28474
  yMap.set(ElementModel.KEYS.ownerId, this.userManager.selfId);
28435
28475
  this.elements.set(uuid, yMap);
28436
28476
  }, elementsUndoOrigin);
28477
+ pointTextModel.bindObserver();
28437
28478
  pointTextModel.setPoints([x, y]);
28438
28479
  pointTextModel.fontSize = this.toolbarModel.fontSize;
28439
28480
  pointTextModel.fontFamily = this.toolbarModel.fontFamily;
@@ -28456,12 +28497,13 @@ var RenderableModel = class extends import_eventemitter3.default {
28456
28497
  });
28457
28498
  }
28458
28499
  dispose(clearElements) {
28459
- (0, import_forge_room5.removeObserver)(this.elements, this.onElementsChange);
28500
+ (0, import_forge_room6.removeObserver)(this.elements, this.onElementsChange);
28460
28501
  if (clearElements) {
28461
28502
  this.elements.clear();
28462
28503
  }
28463
28504
  Array.from(this.elementModels.values()).forEach((model) => {
28464
28505
  model.dispose();
28506
+ model.disposeObserver();
28465
28507
  });
28466
28508
  }
28467
28509
  };
@@ -28922,7 +28964,7 @@ var RectangleTool = class extends WhiteboardTool {
28922
28964
 
28923
28965
  // src/model/ToolbarModel.ts
28924
28966
  var import_eventemitter32 = __toESM(require("eventemitter3"), 1);
28925
- var import_forge_room6 = require("@netless/forge-room");
28967
+ var import_forge_room7 = require("@netless/forge-room");
28926
28968
  function _defineProperty21(e, r, t) {
28927
28969
  return (r = _toPropertyKey21(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
28928
28970
  }
@@ -29019,7 +29061,7 @@ var ToolbarModel = class extends import_eventemitter32.default {
29019
29061
  });
29020
29062
  }
29021
29063
  dispose() {
29022
- (0, import_forge_room6.removeObserver)(this.root, this.handleRootUpdate);
29064
+ (0, import_forge_room7.removeObserver)(this.root, this.handleRootUpdate);
29023
29065
  this.removeAllListeners();
29024
29066
  }
29025
29067
  };
@@ -29118,7 +29160,7 @@ var SelectorTool = class extends WhiteboardTool {
29118
29160
  // src/model/SelectElementsModel.ts
29119
29161
  var Y13 = __toESM(require("yjs"), 1);
29120
29162
  var import_eventemitter33 = __toESM(require("eventemitter3"), 1);
29121
- var import_forge_room7 = require("@netless/forge-room");
29163
+ var import_forge_room8 = require("@netless/forge-room");
29122
29164
 
29123
29165
  // src/WhiteboardKeys.ts
29124
29166
  var WhiteboardKeys = {
@@ -29168,7 +29210,7 @@ var SelectElementsModel = class extends import_eventemitter33.default {
29168
29210
  }
29169
29211
  const cb = this.observers.get(user.id);
29170
29212
  if (cb) {
29171
- (0, import_forge_room7.removeDeepObserver)(this.requestUserMap(user.id), cb);
29213
+ (0, import_forge_room8.removeDeepObserver)(this.requestUserMap(user.id), cb);
29172
29214
  this.observers.delete(user.id);
29173
29215
  }
29174
29216
  });
@@ -29177,7 +29219,7 @@ var SelectElementsModel = class extends import_eventemitter33.default {
29177
29219
  this.handleUserSelectElementsChange(user.id, evts);
29178
29220
  };
29179
29221
  if (this.observers.has(user.id)) {
29180
- (0, import_forge_room7.removeDeepObserver)(this.requestUserMap(user.id), this.observers.get(user.id));
29222
+ (0, import_forge_room8.removeDeepObserver)(this.requestUserMap(user.id), this.observers.get(user.id));
29181
29223
  this.observers.delete(user.id);
29182
29224
  }
29183
29225
  this.requestUserMap(user.id).observeDeep(observer);
@@ -29200,7 +29242,7 @@ var SelectElementsModel = class extends import_eventemitter33.default {
29200
29242
  this.handleUserSelectElementsChange(userId, evts);
29201
29243
  };
29202
29244
  if (this.observers.has(userId)) {
29203
- (0, import_forge_room7.removeDeepObserver)(this.requestUserMap(userId), this.observers.get(userId));
29245
+ (0, import_forge_room8.removeDeepObserver)(this.requestUserMap(userId), this.observers.get(userId));
29204
29246
  }
29205
29247
  this.requestUserMap(userId).observeDeep(observer);
29206
29248
  this.observers.set(userId, observer);
@@ -29264,7 +29306,7 @@ var SelectElementsModel = class extends import_eventemitter33.default {
29264
29306
  }
29265
29307
  dispose() {
29266
29308
  for (const [key, value] of this.observers.entries()) {
29267
- (0, import_forge_room7.removeDeepObserver)(this.requestUserMap(key), value);
29309
+ (0, import_forge_room8.removeDeepObserver)(this.requestUserMap(key), value);
29268
29310
  }
29269
29311
  this.observers.clear();
29270
29312
  this.userManager.off("leave", this.handleUserLeave);
@@ -29953,6 +29995,7 @@ var Editor = class extends import_eventemitter35.default {
29953
29995
  this.shadowContainer.remove();
29954
29996
  this.shadowScope.project.activeLayer.addChild(this.shadowContainer);
29955
29997
  this.targets.forEach((model) => {
29998
+ console.log("[][][] translateShadow model", model.root._dEH);
29956
29999
  model.shadow = this.shadowContainer.data.uuid;
29957
30000
  });
29958
30001
  }
@@ -30179,7 +30222,7 @@ var Gesture = class extends import_eventemitter36.default {
30179
30222
  };
30180
30223
 
30181
30224
  // src/Camera.ts
30182
- var import_forge_room8 = require("@netless/forge-room");
30225
+ var import_forge_room9 = require("@netless/forge-room");
30183
30226
  function _defineProperty28(e, r, t) {
30184
30227
  return (r = _toPropertyKey28(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
30185
30228
  }
@@ -30256,14 +30299,14 @@ var Camera = class extends import_eventemitter37.default {
30256
30299
  }
30257
30300
  const cb = this.observers.get(user.id);
30258
30301
  if (cb) {
30259
- (0, import_forge_room8.removeObserver)(this.requestUserMap(user.id), cb);
30302
+ (0, import_forge_room9.removeObserver)(this.requestUserMap(user.id), cb);
30260
30303
  }
30261
30304
  });
30262
30305
  _defineProperty28(this, "handleUserJoin", (user) => {
30263
30306
  if (this.observers.has(user.id)) {
30264
30307
  const cb = this.observers.get(user.id);
30265
30308
  if (cb) {
30266
- (0, import_forge_room8.removeObserver)(this.requestUserMap(user.id), cb);
30309
+ (0, import_forge_room9.removeObserver)(this.requestUserMap(user.id), cb);
30267
30310
  this.observers.delete(user.id);
30268
30311
  }
30269
30312
  }
@@ -30375,7 +30418,7 @@ var Camera = class extends import_eventemitter37.default {
30375
30418
  this.handleViewMatrixUpdate(userId, evt);
30376
30419
  };
30377
30420
  if (this.observers.has(userId)) {
30378
- (0, import_forge_room8.removeObserver)(this.requestUserMap(userId), observer);
30421
+ (0, import_forge_room9.removeObserver)(this.requestUserMap(userId), observer);
30379
30422
  }
30380
30423
  this.requestUserMap(userId).observe(observer);
30381
30424
  this.observers.set(userId, observer);
@@ -30572,10 +30615,10 @@ var Camera = class extends import_eventemitter37.default {
30572
30615
  Array.from(this.observers.keys()).forEach((userId) => {
30573
30616
  const cb = this.observers.get(userId);
30574
30617
  if (cb) {
30575
- (0, import_forge_room8.removeObserver)(this.requestUserMap(userId), cb);
30618
+ (0, import_forge_room9.removeObserver)(this.requestUserMap(userId), cb);
30576
30619
  }
30577
30620
  });
30578
- (0, import_forge_room8.removeObserver)(this.whiteboardAttrsMap, this.handleMainCameraChange);
30621
+ (0, import_forge_room9.removeObserver)(this.whiteboardAttrsMap, this.handleMainCameraChange);
30579
30622
  this.userManager.off("join", this.handleUserJoin);
30580
30623
  this.userManager.off("leave", this.handleUserLeave);
30581
30624
  this.gesture.removeAllListeners();
@@ -30868,7 +30911,7 @@ var EraserTool = class extends WhiteboardTool {
30868
30911
  // src/model/TrashedElementsModel.ts
30869
30912
  var Y14 = __toESM(require("yjs"), 1);
30870
30913
  var import_eventemitter39 = __toESM(require("eventemitter3"), 1);
30871
- var import_forge_room9 = require("@netless/forge-room");
30914
+ var import_forge_room10 = require("@netless/forge-room");
30872
30915
  function _defineProperty33(e, r, t) {
30873
30916
  return (r = _toPropertyKey33(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
30874
30917
  }
@@ -30905,14 +30948,14 @@ var TrashedElementsModel = class extends import_eventemitter39.default {
30905
30948
  }
30906
30949
  const cb = this.observers.get(user.id);
30907
30950
  if (cb) {
30908
- (0, import_forge_room9.removeDeepObserver)(this.requestUserMap(user.id), cb);
30951
+ (0, import_forge_room10.removeDeepObserver)(this.requestUserMap(user.id), cb);
30909
30952
  }
30910
30953
  });
30911
30954
  _defineProperty33(this, "handleUserJoin", (user) => {
30912
30955
  if (this.observers.has(user.id)) {
30913
30956
  const cb = this.observers.get(user.id);
30914
30957
  if (cb) {
30915
- (0, import_forge_room9.removeDeepObserver)(this.requestUserMap(user.id), cb);
30958
+ (0, import_forge_room10.removeDeepObserver)(this.requestUserMap(user.id), cb);
30916
30959
  this.observers.delete(user.id);
30917
30960
  }
30918
30961
  }
@@ -30920,7 +30963,7 @@ var TrashedElementsModel = class extends import_eventemitter39.default {
30920
30963
  this.handleUserTrashElementsChange(user.id, evts);
30921
30964
  };
30922
30965
  if (this.observers.has(user.id)) {
30923
- (0, import_forge_room9.removeDeepObserver)(this.requestUserMap(user.id), this.observers.get(user.id));
30966
+ (0, import_forge_room10.removeDeepObserver)(this.requestUserMap(user.id), this.observers.get(user.id));
30924
30967
  }
30925
30968
  this.requestUserMap(user.id).observeDeep(observer);
30926
30969
  this.observers.set(user.id, observer);
@@ -30934,7 +30977,7 @@ var TrashedElementsModel = class extends import_eventemitter39.default {
30934
30977
  this.handleUserTrashElementsChange(userId, evts);
30935
30978
  };
30936
30979
  if (this.observers.has(userId)) {
30937
- (0, import_forge_room9.removeDeepObserver)(this.requestUserMap(userId), userId);
30980
+ (0, import_forge_room10.removeDeepObserver)(this.requestUserMap(userId), userId);
30938
30981
  }
30939
30982
  this.requestUserMap(userId).observeDeep(observer);
30940
30983
  this.observers.set(userId, observer);
@@ -30996,7 +31039,7 @@ var TrashedElementsModel = class extends import_eventemitter39.default {
30996
31039
  }
30997
31040
  dispose() {
30998
31041
  for (const [key, value] of this.observers.entries()) {
30999
- (0, import_forge_room9.removeDeepObserver)(this.requestUserMap(key), value);
31042
+ (0, import_forge_room10.removeDeepObserver)(this.requestUserMap(key), value);
31000
31043
  }
31001
31044
  this.observers.clear();
31002
31045
  this.userManager.off("leave", this.handleUserLeave);
@@ -31075,7 +31118,7 @@ var LaserPointerTool = class extends WhiteboardTool {
31075
31118
 
31076
31119
  // src/model/PageModel.ts
31077
31120
  var import_eventemitter310 = __toESM(require("eventemitter3"), 1);
31078
- var import_forge_room10 = require("@netless/forge-room");
31121
+ var import_forge_room11 = require("@netless/forge-room");
31079
31122
  function _defineProperty35(e, r, t) {
31080
31123
  return (r = _toPropertyKey35(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
31081
31124
  }
@@ -31108,7 +31151,7 @@ var PageModel = class extends import_eventemitter310.default {
31108
31151
  }
31109
31152
  const cb = this.observers.get(user.id);
31110
31153
  if (cb) {
31111
- (0, import_forge_room10.removeObserver)(this.requestUserMap(user.id), cb);
31154
+ (0, import_forge_room11.removeObserver)(this.requestUserMap(user.id), cb);
31112
31155
  }
31113
31156
  });
31114
31157
  _defineProperty35(this, "handleUserJoin", (user) => {
@@ -31122,7 +31165,7 @@ var PageModel = class extends import_eventemitter310.default {
31122
31165
  if (cameraMode === "main") {
31123
31166
  const targetPage = this.whiteboardAttrsMap.get(WhiteboardKeys.currentPage);
31124
31167
  if (!this.pageMap.has(targetPage) && targetPage !== "_i_") {
31125
- (0, import_forge_room10.log)(`main page {${targetPage}} not found.`, {}, "error");
31168
+ (0, import_forge_room11.log)(`main page {${targetPage}} not found.`, {}, "error");
31126
31169
  return;
31127
31170
  }
31128
31171
  this.requestUserMap(this.userManager.selfId).set(WhiteboardKeys.currentPage, targetPage);
@@ -31169,7 +31212,7 @@ var PageModel = class extends import_eventemitter310.default {
31169
31212
  if (this.observers.has(userId)) {
31170
31213
  const cb = this.observers.get(userId);
31171
31214
  if (cb) {
31172
- (0, import_forge_room10.removeObserver)(this.requestUserMap(userId), cb);
31215
+ (0, import_forge_room11.removeObserver)(this.requestUserMap(userId), cb);
31173
31216
  this.observers.delete(userId);
31174
31217
  }
31175
31218
  }
@@ -31258,12 +31301,12 @@ var PageModel = class extends import_eventemitter310.default {
31258
31301
  dispose() {
31259
31302
  for (const entry of this.observers.entries()) {
31260
31303
  const [userId, observer] = entry;
31261
- (0, import_forge_room10.removeObserver)(this.requestUserMap(userId), observer);
31304
+ (0, import_forge_room11.removeObserver)(this.requestUserMap(userId), observer);
31262
31305
  }
31263
31306
  this.userManager.off("join", this.handleUserJoin);
31264
31307
  this.userManager.off("leave", this.handleUserLeave);
31265
- (0, import_forge_room10.removeObserver)(this.whiteboardAttrsMap, this.handleMainPageChange);
31266
- (0, import_forge_room10.removeObserver)(this.pageMap, this.handlePageMapChange);
31308
+ (0, import_forge_room11.removeObserver)(this.whiteboardAttrsMap, this.handleMainPageChange);
31309
+ (0, import_forge_room11.removeObserver)(this.pageMap, this.handlePageMapChange);
31267
31310
  }
31268
31311
  };
31269
31312
 
@@ -31278,8 +31321,8 @@ async function waitUntil(fn, timeout) {
31278
31321
 
31279
31322
  // src/IndexedNavigation.ts
31280
31323
  var import_eventemitter311 = __toESM(require("eventemitter3"), 1);
31281
- var import_forge_room11 = require("@netless/forge-room");
31282
31324
  var import_forge_room12 = require("@netless/forge-room");
31325
+ var import_forge_room13 = require("@netless/forge-room");
31283
31326
  function _defineProperty36(e, r, t) {
31284
31327
  return (r = _toPropertyKey36(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
31285
31328
  }
@@ -31306,7 +31349,7 @@ var IndexedNavigation = class extends import_eventemitter311.default {
31306
31349
  return this.list[key] && this.list[key].prev === "";
31307
31350
  });
31308
31351
  if (!headId) {
31309
- (0, import_forge_room11.log)("indexed navigation confusion", {
31352
+ (0, import_forge_room12.log)("indexed navigation confusion", {
31310
31353
  list: JSON.stringify(this.list)
31311
31354
  }, "error");
31312
31355
  throw new Error("indexed navigation confusion");
@@ -31622,7 +31665,7 @@ var IndexedNavigation = class extends import_eventemitter311.default {
31622
31665
  }
31623
31666
  }
31624
31667
  dispose() {
31625
- (0, import_forge_room12.removeObserver)(this.indexedPageMap, this.handleIndexedPageMapUpdate);
31668
+ (0, import_forge_room13.removeObserver)(this.indexedPageMap, this.handleIndexedPageMapUpdate);
31626
31669
  this.pageModel.off("switchPage");
31627
31670
  this.pageModel.off("pagesChange");
31628
31671
  }
@@ -31843,7 +31886,7 @@ var SequenceExecutor = class {
31843
31886
  };
31844
31887
 
31845
31888
  // src/WhiteboardApplication.ts
31846
- var import_forge_room14 = require("@netless/forge-room");
31889
+ var import_forge_room15 = require("@netless/forge-room");
31847
31890
 
31848
31891
  // src/LiveCursor.ts
31849
31892
  function _defineProperty42(e, r, t) {
@@ -31898,9 +31941,19 @@ var LiveCursor = class {
31898
31941
  cursor.style.fontSize = "12px";
31899
31942
  cursor.style.padding = "2px 4px";
31900
31943
  cursor.style.borderRadius = "4px";
31901
- cursor.textContent = this.userManager.getUser(userId)?.nickName ?? userId;
31944
+ this.updateCursorLabel(userId, cursor);
31902
31945
  return cursor;
31903
31946
  }
31947
+ updateCursorLabel(userId, cursor) {
31948
+ const target = cursor ?? this.cursors.get(userId);
31949
+ if (!target) {
31950
+ return;
31951
+ }
31952
+ if (target.textContent && target.textContent !== userId) {
31953
+ return;
31954
+ }
31955
+ target.textContent = this.userManager.getUser(userId)?.nickName ?? userId;
31956
+ }
31904
31957
  isOnSamePage(userId) {
31905
31958
  const otherPage = this.requestUserMap(userId).get(WhiteboardKeys.currentPage);
31906
31959
  const selfPage = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.currentPage);
@@ -31936,6 +31989,7 @@ var LiveCursor = class {
31936
31989
  }
31937
31990
  const cursor = this.cursors.get(userId);
31938
31991
  if (cursor) {
31992
+ this.updateCursorLabel(userId, cursor);
31939
31993
  const viewPoint = this.paperScope.project.view.projectToView(point);
31940
31994
  cursor.style.left = viewPoint.x + "px";
31941
31995
  cursor.style.top = viewPoint.y + "px";
@@ -32000,7 +32054,7 @@ var AsyncMap = class {
32000
32054
  if (!window.__forge_gl_wb_status__) {
32001
32055
  window.__forge_gl_wb_status__ = new AsyncMap();
32002
32056
  }
32003
- var WhiteboardApplication = class _WhiteboardApplication extends import_forge_room13.AbstractApplication {
32057
+ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_room14.AbstractApplication {
32004
32058
  get undoManager() {
32005
32059
  const page = this.pageModel.getCurrentPage(this.userId);
32006
32060
  if (page) {
@@ -32147,7 +32201,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32147
32201
  }
32148
32202
  } else {
32149
32203
  console.warn(`[@netless/forge-whiteboard] page ${pageId} not found`);
32150
- (0, import_forge_room13.log)(`[@netless/forge-whiteboard] page ${pageId} not found`, {}, "warn");
32204
+ (0, import_forge_room14.log)(`[@netless/forge-whiteboard] page ${pageId} not found`, {}, "warn");
32151
32205
  }
32152
32206
  await waitUntil(() => this.undoManagers.has(pageId), 1e3);
32153
32207
  if (this.undoManagers.has(pageId)) {
@@ -32159,7 +32213,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32159
32213
  this.undoManagers.get(pageId).on("stack-item-popped", this.handleStackItemPopped);
32160
32214
  } else {
32161
32215
  console.warn(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`);
32162
- (0, import_forge_room13.log)(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`, {}, "warn");
32216
+ (0, import_forge_room14.log)(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`, {}, "warn");
32163
32217
  }
32164
32218
  this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
32165
32219
  this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
@@ -32463,7 +32517,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32463
32517
  this.emitter.setViewModeToFree = (userId) => {
32464
32518
  if (that.disableViewModelUpdate) {
32465
32519
  console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
32466
- (0, import_forge_room13.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warn");
32520
+ (0, import_forge_room14.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warn");
32467
32521
  return;
32468
32522
  }
32469
32523
  const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
@@ -32474,7 +32528,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32474
32528
  this.emitter.setViewModeToFlow = (flowId, userId) => {
32475
32529
  if (that.disableViewModelUpdate) {
32476
32530
  console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
32477
- (0, import_forge_room13.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warn");
32531
+ (0, import_forge_room14.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warn");
32478
32532
  return;
32479
32533
  }
32480
32534
  const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
@@ -32495,7 +32549,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32495
32549
  this.emitter.setViewModeToMain = (userId) => {
32496
32550
  if (that.disableViewModelUpdate) {
32497
32551
  console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
32498
- (0, import_forge_room13.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warn");
32552
+ (0, import_forge_room14.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warn");
32499
32553
  return;
32500
32554
  }
32501
32555
  const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
@@ -32509,7 +32563,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32509
32563
  };
32510
32564
  this.emitter.insertImage = (src, pageId) => {
32511
32565
  if (!/https/.test(src)) {
32512
- (0, import_forge_room13.log)("[@netless/forge-whiteboard] invalid image url, src needs to be in the HTTPS protocol.", {
32566
+ (0, import_forge_room14.log)("[@netless/forge-whiteboard] invalid image url, src needs to be in the HTTPS protocol.", {
32513
32567
  src
32514
32568
  }, "warn");
32515
32569
  return;
@@ -32519,14 +32573,14 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32519
32573
  targetPageId = this.pageModel.getCurrentPage(this.userManager.selfId);
32520
32574
  }
32521
32575
  if (!targetPageId) {
32522
- (0, import_forge_room13.log)("[@netless/forge-whiteboard] page not found", {}, "warn");
32576
+ (0, import_forge_room14.log)("[@netless/forge-whiteboard] page not found", {}, "warn");
32523
32577
  return;
32524
32578
  }
32525
32579
  this.layers.get(targetPageId)?.createImage(src);
32526
32580
  };
32527
32581
  this.emitter.removeElement = (pageId, elementId) => {
32528
32582
  if (!this.layers.has(pageId)) {
32529
- (0, import_forge_room13.log)("[@netless/forge-whiteboard] page not found", {}, "warn");
32583
+ (0, import_forge_room14.log)("[@netless/forge-whiteboard] page not found", {}, "warn");
32530
32584
  return;
32531
32585
  }
32532
32586
  this.layers.get(pageId)?.removeElementItem(elementId);
@@ -32626,15 +32680,15 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32626
32680
  this.liveCursor.showLiveCursor = value;
32627
32681
  };
32628
32682
  this.emitter.updateViewport = (width, height) => {
32629
- (0, import_forge_room13.log)(`call updateViewport with width: ${width}, height: ${height}`);
32683
+ (0, import_forge_room14.log)(`call updateViewport with width: ${width}, height: ${height}`);
32630
32684
  this.updateOptionSize(width, height);
32631
32685
  };
32632
32686
  this.emitter.__setMainCanvasVisible = (visible) => {
32633
- (0, import_forge_room13.log)(`call __setMainCanvasVisible with visible: ${visible}`);
32687
+ (0, import_forge_room14.log)(`call __setMainCanvasVisible with visible: ${visible}`);
32634
32688
  this.canvasElement.style.opacity = visible ? "1" : "0";
32635
32689
  };
32636
32690
  this.emitter.on("error", (errorCode, errorMessage) => {
32637
- (0, import_forge_room13.log)("WhiteboardApplicationError", {
32691
+ (0, import_forge_room14.log)("WhiteboardApplicationError", {
32638
32692
  errorCode,
32639
32693
  errorMessage
32640
32694
  });
@@ -32644,7 +32698,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32644
32698
  return that.delayTranslateOut;
32645
32699
  },
32646
32700
  set(value) {
32647
- (0, import_forge_room13.log)(`call __delayTranslateOut with value: ${value}`);
32701
+ (0, import_forge_room14.log)(`call __delayTranslateOut with value: ${value}`);
32648
32702
  that.delayTranslateOut = value;
32649
32703
  }
32650
32704
  });
@@ -32747,7 +32801,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32747
32801
  }
32748
32802
  async initialize(option) {
32749
32803
  _WhiteboardApplication.instanceCount.set(this.appId, (_WhiteboardApplication.instanceCount.get(this.appId) ?? 0) + 1);
32750
- (0, import_forge_room13.log)(`whiteboard ${this.appId} initialize. instance count: ${_WhiteboardApplication.instanceCount.get(this.appId) ?? 0}`, {}, "info");
32804
+ (0, import_forge_room14.log)(`whiteboard ${this.appId} initialize. instance count: ${_WhiteboardApplication.instanceCount.get(this.appId) ?? 0}`, {}, "info");
32751
32805
  this.appDoc.transact(() => {
32752
32806
  this.permissions = new WhiteboardPermissions(this.writableManager, this.userManager, (userId) => {
32753
32807
  return this.userMap(userId);
@@ -32858,7 +32912,7 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
32858
32912
  this.paperScope.tool = this.tools[this.toolbarModel.currentTool].tool;
32859
32913
  } else {
32860
32914
  this.paperScope.tool = this.tools["curve"].tool;
32861
- (0, import_forge_room13.log)(`${this.toolbarModel.currentTool} not supported, backup to curve`);
32915
+ (0, import_forge_room14.log)(`${this.toolbarModel.currentTool} not supported, backup to curve`);
32862
32916
  }
32863
32917
  this.selectElementsModel.on("elementsChange", this.handleElementsSelect);
32864
32918
  this.trashedElementsModel.on("elementsChange", this.handleElementsTrash);
@@ -33145,8 +33199,8 @@ var WhiteboardApplication = class _WhiteboardApplication extends import_forge_ro
33145
33199
  this.toolbarModel.dispose();
33146
33200
  this.emitter.indexedNavigation.dispose();
33147
33201
  this.permissions.dispose();
33148
- (0, import_forge_room14.removeObserver)(this.userMap(this.userId), this.handleSyncedWhiteboardStatusChange);
33149
- (0, import_forge_room13.log)(`whiteboard ${this.appId} disposed. instance count: ${_WhiteboardApplication.instanceCount.get(this.appId) ?? 0}`, {}, "info");
33202
+ (0, import_forge_room15.removeObserver)(this.userMap(this.userId), this.handleSyncedWhiteboardStatusChange);
33203
+ (0, import_forge_room14.log)(`whiteboard ${this.appId} disposed. instance count: ${_WhiteboardApplication.instanceCount.get(this.appId) ?? 0}`, {}, "info");
33150
33204
  }
33151
33205
  };
33152
33206
  _defineProperty43(WhiteboardApplication, "instanceCount", /* @__PURE__ */ new Map());