@netless/forge-whiteboard 0.1.15 → 0.1.16
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/changelog.md +6 -1
- package/dist/Camera.d.ts.map +1 -1
- package/dist/IndexedNavigation.d.ts +1 -0
- package/dist/IndexedNavigation.d.ts.map +1 -1
- package/dist/WhitePermissions.d.ts +3 -43
- package/dist/WhitePermissions.d.ts.map +1 -1
- package/dist/Whiteboard.d.ts +14 -2
- package/dist/Whiteboard.d.ts.map +1 -1
- package/dist/WhiteboardApplication.d.ts +1 -0
- package/dist/WhiteboardApplication.d.ts.map +1 -1
- package/dist/model/PageModel.d.ts.map +1 -1
- package/dist/model/RenderableModel.d.ts +4 -2
- package/dist/model/RenderableModel.d.ts.map +1 -1
- package/dist/model/SelectElementsModel.d.ts +1 -1
- package/dist/model/SelectElementsModel.d.ts.map +1 -1
- package/dist/model/ToolbarModel.d.ts.map +1 -1
- package/dist/model/TrashedElementsModel.d.ts +1 -1
- package/dist/model/TrashedElementsModel.d.ts.map +1 -1
- package/dist/model/renderable/CurveModel.d.ts +3 -1
- package/dist/model/renderable/CurveModel.d.ts.map +1 -1
- package/dist/model/renderable/CurveModel_old.d.ts +28 -0
- package/dist/model/renderable/CurveModel_old.d.ts.map +1 -0
- package/dist/model/renderable/ElementModel.d.ts.map +1 -1
- package/dist/model/renderable/ImageModel.d.ts +20 -0
- package/dist/model/renderable/ImageModel.d.ts.map +1 -0
- package/dist/model/renderable/PointTextModel.d.ts.map +1 -1
- package/dist/tool/CurveTool.d.ts.map +1 -1
- package/dist/utils/FPS.d.ts +15 -0
- package/dist/utils/FPS.d.ts.map +1 -0
- package/dist/whiteboard.esm.js +270 -218
- package/dist/whiteboard.esm.js.map +4 -4
- package/dist/whiteboard.js +271 -219
- package/dist/whiteboard.js.map +4 -4
- package/package.json +2 -2
package/dist/whiteboard.js
CHANGED
|
@@ -25371,14 +25371,15 @@ __export(src_exports, {
|
|
|
25371
25371
|
module.exports = __toCommonJS(src_exports);
|
|
25372
25372
|
|
|
25373
25373
|
// src/WhiteboardApplication.ts
|
|
25374
|
-
var
|
|
25374
|
+
var import_forge_room12 = require("@netless/forge-room");
|
|
25375
25375
|
var Y15 = __toESM(require("yjs"), 1);
|
|
25376
25376
|
var import_paper = __toESM(require_paper_full(), 1);
|
|
25377
25377
|
|
|
25378
25378
|
// src/model/RenderableModel.ts
|
|
25379
25379
|
var Y12 = __toESM(require("yjs"), 1);
|
|
25380
|
-
var
|
|
25380
|
+
var import_eventemitter3 = __toESM(require("eventemitter3"), 1);
|
|
25381
25381
|
var import_uuid = require("uuid");
|
|
25382
|
+
var import_forge_room4 = require("@netless/forge-room");
|
|
25382
25383
|
|
|
25383
25384
|
// src/model/renderable/CurveModel.ts
|
|
25384
25385
|
var Y2 = __toESM(require("yjs"), 1);
|
|
@@ -25536,6 +25537,7 @@ var import_lodash = __toESM(require_lodash(), 1);
|
|
|
25536
25537
|
|
|
25537
25538
|
// src/model/renderable/ElementModel.ts
|
|
25538
25539
|
var Y = __toESM(require("yjs"), 1);
|
|
25540
|
+
var import_forge_room = require("@netless/forge-room");
|
|
25539
25541
|
function _defineProperty(e, r, t) {
|
|
25540
25542
|
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
25541
25543
|
}
|
|
@@ -25720,7 +25722,7 @@ var ElementModel = class _ElementModel {
|
|
|
25720
25722
|
}
|
|
25721
25723
|
dispose() {
|
|
25722
25724
|
this.subDispose();
|
|
25723
|
-
this.root
|
|
25725
|
+
(0, import_forge_room.removeDeepObserver)(this.root, this.handlePropChange);
|
|
25724
25726
|
}
|
|
25725
25727
|
};
|
|
25726
25728
|
_defineProperty(ElementModel, "KEYS", {
|
|
@@ -25795,12 +25797,15 @@ var CurveModel = class extends ElementModel {
|
|
|
25795
25797
|
constructor(root, scope) {
|
|
25796
25798
|
super(root, scope);
|
|
25797
25799
|
_defineProperty3(this, "item", null);
|
|
25800
|
+
_defineProperty3(this, "debugPath", void 0);
|
|
25801
|
+
_defineProperty3(this, "debug", false);
|
|
25798
25802
|
if (!this.root.has("type")) {
|
|
25799
25803
|
this.root.set("type", "curve");
|
|
25800
25804
|
}
|
|
25801
25805
|
if (!this.root.has("points")) {
|
|
25802
25806
|
this.root.set("points", new Y2.Array());
|
|
25803
25807
|
}
|
|
25808
|
+
this.debugPath = new scope.Path();
|
|
25804
25809
|
}
|
|
25805
25810
|
average(a2, b2) {
|
|
25806
25811
|
return (a2 + b2) / 2;
|
|
@@ -25809,23 +25814,23 @@ var CurveModel = class extends ElementModel {
|
|
|
25809
25814
|
const groupPoints = (0, import_lodash.chunk)(points, 2);
|
|
25810
25815
|
return ae(groupPoints, {
|
|
25811
25816
|
size: this.strokeWidth,
|
|
25812
|
-
smoothing: 0,
|
|
25813
|
-
thinning: 0.5,
|
|
25817
|
+
smoothing: 0.5,
|
|
25818
|
+
thinning: -0.5,
|
|
25814
25819
|
streamline: 0.5,
|
|
25815
25820
|
simulatePressure: true,
|
|
25816
25821
|
start: {
|
|
25817
|
-
taper: 10,
|
|
25822
|
+
taper: this.strokeWidth * 10,
|
|
25818
25823
|
cap: true
|
|
25819
25824
|
},
|
|
25820
25825
|
end: {
|
|
25821
|
-
taper:
|
|
25826
|
+
taper: this.strokeWidth * 20,
|
|
25822
25827
|
cap: true
|
|
25823
25828
|
}
|
|
25824
25829
|
});
|
|
25825
25830
|
}
|
|
25826
25831
|
matrixedPoints() {
|
|
25827
|
-
const
|
|
25828
|
-
return
|
|
25832
|
+
const currentPoints = (0, import_lodash.chunk)(this.points, 2);
|
|
25833
|
+
return currentPoints.map((_ref) => {
|
|
25829
25834
|
let [x, y] = _ref;
|
|
25830
25835
|
return new this.scope.Point(x, y);
|
|
25831
25836
|
}).map((p) => p.transform(new this.scope.Matrix(this.pointsMatrix))).reduce((result, next) => {
|
|
@@ -25859,27 +25864,41 @@ var CurveModel = class extends ElementModel {
|
|
|
25859
25864
|
}
|
|
25860
25865
|
return path;
|
|
25861
25866
|
}
|
|
25862
|
-
|
|
25863
|
-
|
|
25864
|
-
const
|
|
25865
|
-
|
|
25867
|
+
updateDebugPath() {
|
|
25868
|
+
this.debugPath = new this.scope.Path();
|
|
25869
|
+
const points = (0, import_lodash.chunk)(this.points, 2);
|
|
25870
|
+
for (let i = 0, len = points.length; i < len; i++) {
|
|
25871
|
+
const point = new this.scope.Point(points[i][0], points[i][1]);
|
|
25872
|
+
if (i === 0) {
|
|
25873
|
+
this.debugPath.moveTo(point);
|
|
25874
|
+
} else {
|
|
25875
|
+
this.debugPath.lineTo(point);
|
|
25876
|
+
}
|
|
25877
|
+
this.debugPath.strokeWidth = 1;
|
|
25878
|
+
this.debugPath.strokeColor = new this.scope.Color(1, 0, 0, 1);
|
|
25879
|
+
}
|
|
25866
25880
|
}
|
|
25867
25881
|
onVectorUpdate() {
|
|
25868
25882
|
if (!this.item) {
|
|
25869
25883
|
return;
|
|
25870
25884
|
}
|
|
25885
|
+
if (this.debug) {
|
|
25886
|
+
this.debugPath.remove();
|
|
25887
|
+
this.updateDebugPath();
|
|
25888
|
+
}
|
|
25889
|
+
const points = this.parsePoints(this.matrixedPoints());
|
|
25890
|
+
const path = this.createPath(points);
|
|
25871
25891
|
this.item.removeSegments();
|
|
25872
|
-
this.item.addSegments(
|
|
25873
|
-
this.
|
|
25892
|
+
this.item.addSegments(path.segments);
|
|
25893
|
+
if (this.debug) {
|
|
25894
|
+
this.item.addChild(this.debugPath);
|
|
25895
|
+
}
|
|
25874
25896
|
}
|
|
25875
25897
|
createPaperItem() {
|
|
25876
25898
|
this.item = new this.scope.Path();
|
|
25877
|
-
this.item.strokeCap = "round";
|
|
25878
|
-
this.item.strokeJoin = "round";
|
|
25879
|
-
this.item.strokeScaling = false;
|
|
25880
25899
|
this.item.strokeColor = new this.scope.Color(this.strokeColor);
|
|
25881
25900
|
this.item.fillColor = new this.scope.Color(this.strokeColor);
|
|
25882
|
-
this.
|
|
25901
|
+
this.onVectorUpdate();
|
|
25883
25902
|
}
|
|
25884
25903
|
editorConfig() {
|
|
25885
25904
|
return new EditorConfig();
|
|
@@ -25889,8 +25908,8 @@ var CurveModel = class extends ElementModel {
|
|
|
25889
25908
|
}
|
|
25890
25909
|
styleKeys() {
|
|
25891
25910
|
return {
|
|
25892
|
-
include: ["strokeColor"],
|
|
25893
|
-
exclude: ["
|
|
25911
|
+
include: ["strokeColor", "strokeWidth"],
|
|
25912
|
+
exclude: ["dashArray", "fillColor"]
|
|
25894
25913
|
};
|
|
25895
25914
|
}
|
|
25896
25915
|
onStyleKeyUpdate(key) {
|
|
@@ -25900,6 +25919,8 @@ var CurveModel = class extends ElementModel {
|
|
|
25900
25919
|
if (key === "strokeColor") {
|
|
25901
25920
|
this.item.strokeColor = new this.scope.Color(this.strokeColor);
|
|
25902
25921
|
this.item.fillColor = new this.scope.Color(this.strokeColor);
|
|
25922
|
+
} else if (key === "strokeWidth") {
|
|
25923
|
+
this.onVectorUpdate();
|
|
25903
25924
|
}
|
|
25904
25925
|
}
|
|
25905
25926
|
subDispose() {
|
|
@@ -26429,6 +26450,7 @@ var LineControlPoint = class {
|
|
|
26429
26450
|
|
|
26430
26451
|
// src/model/renderable/PointTextModel.ts
|
|
26431
26452
|
var Y6 = __toESM(require("yjs"), 1);
|
|
26453
|
+
var import_forge_room2 = require("@netless/forge-room");
|
|
26432
26454
|
function _defineProperty10(e, r, t) {
|
|
26433
26455
|
return (r = _toPropertyKey10(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
26434
26456
|
}
|
|
@@ -26498,7 +26520,7 @@ var PointTextModel = class extends ElementModel {
|
|
|
26498
26520
|
}
|
|
26499
26521
|
}
|
|
26500
26522
|
subDispose() {
|
|
26501
|
-
this.root
|
|
26523
|
+
(0, import_forge_room2.removeObserver)(this.root, this.handleTextPropChange);
|
|
26502
26524
|
}
|
|
26503
26525
|
getInternalMeasurement() {
|
|
26504
26526
|
if (!this.item) {
|
|
@@ -27145,24 +27167,7 @@ var LaserPointerModel = class extends ElementModel {
|
|
|
27145
27167
|
};
|
|
27146
27168
|
|
|
27147
27169
|
// src/WhitePermissions.ts
|
|
27148
|
-
var
|
|
27149
|
-
function _defineProperty15(e, r, t) {
|
|
27150
|
-
return (r = _toPropertyKey15(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
27151
|
-
}
|
|
27152
|
-
function _toPropertyKey15(t) {
|
|
27153
|
-
var i = _toPrimitive15(t, "string");
|
|
27154
|
-
return "symbol" == typeof i ? i : i + "";
|
|
27155
|
-
}
|
|
27156
|
-
function _toPrimitive15(t, r) {
|
|
27157
|
-
if ("object" != typeof t || !t) return t;
|
|
27158
|
-
var e = t[Symbol.toPrimitive];
|
|
27159
|
-
if (void 0 !== e) {
|
|
27160
|
-
var i = e.call(t, r || "default");
|
|
27161
|
-
if ("object" != typeof i) return i;
|
|
27162
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
27163
|
-
}
|
|
27164
|
-
return ("string" === r ? String : Number)(t);
|
|
27165
|
-
}
|
|
27170
|
+
var import_forge_room3 = require("@netless/forge-room");
|
|
27166
27171
|
var WhiteboardPermissionFlag = function(WhiteboardPermissionFlag2) {
|
|
27167
27172
|
WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["none"] = 0] = "none";
|
|
27168
27173
|
WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["draw"] = 1] = "draw";
|
|
@@ -27175,59 +27180,7 @@ var WhiteboardPermissionFlag = function(WhiteboardPermissionFlag2) {
|
|
|
27175
27180
|
WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["all"] = WhiteboardPermissionFlag2.draw | WhiteboardPermissionFlag2.editSelf | WhiteboardPermissionFlag2.editOthers | WhiteboardPermissionFlag2.deleteSelf | WhiteboardPermissionFlag2.deleteOthers | WhiteboardPermissionFlag2.mainView | WhiteboardPermissionFlag2.setOthersView] = "all";
|
|
27176
27181
|
return WhiteboardPermissionFlag2;
|
|
27177
27182
|
}({});
|
|
27178
|
-
var WhiteboardPermissions = class extends
|
|
27179
|
-
constructor(userManager, requestUserMap) {
|
|
27180
|
-
super();
|
|
27181
|
-
_defineProperty15(this, "requestUserMap", void 0);
|
|
27182
|
-
_defineProperty15(this, "userManager", void 0);
|
|
27183
|
-
_defineProperty15(this, "observers", /* @__PURE__ */ new Map());
|
|
27184
|
-
_defineProperty15(this, "handleUserLeave", (user) => {
|
|
27185
|
-
const cb = this.observers.get(user.id);
|
|
27186
|
-
if (cb) {
|
|
27187
|
-
this.requestUserMap(user.id).unobserve(cb);
|
|
27188
|
-
}
|
|
27189
|
-
});
|
|
27190
|
-
_defineProperty15(this, "handleUserJoin", (user) => {
|
|
27191
|
-
this.addObserve(user.id);
|
|
27192
|
-
});
|
|
27193
|
-
this.userManager = userManager;
|
|
27194
|
-
this.requestUserMap = requestUserMap;
|
|
27195
|
-
this.createModel(this.userManager.selfId);
|
|
27196
|
-
this.userManager.userIdList().forEach((userId) => {
|
|
27197
|
-
this.addObserve(userId);
|
|
27198
|
-
});
|
|
27199
|
-
this.userManager.on("join", this.handleUserJoin);
|
|
27200
|
-
this.userManager.on("leave", this.handleUserLeave);
|
|
27201
|
-
}
|
|
27202
|
-
addObserve(userId) {
|
|
27203
|
-
if (this.observers.has(userId)) {
|
|
27204
|
-
return;
|
|
27205
|
-
}
|
|
27206
|
-
const observer = (evt) => {
|
|
27207
|
-
this.handleUserPermissionChange(userId, evt);
|
|
27208
|
-
};
|
|
27209
|
-
if (this.observers.has(userId)) {
|
|
27210
|
-
this.requestUserMap(userId).unobserve(this.observers.get(userId));
|
|
27211
|
-
}
|
|
27212
|
-
this.observers.set(userId, observer);
|
|
27213
|
-
this.requestUserMap(userId).observe(observer);
|
|
27214
|
-
}
|
|
27215
|
-
createModel(userId) {
|
|
27216
|
-
const userMap = this.requestUserMap(userId);
|
|
27217
|
-
if (!userMap.has("permission")) {
|
|
27218
|
-
userMap.set("permission", 0);
|
|
27219
|
-
}
|
|
27220
|
-
}
|
|
27221
|
-
handleUserPermissionChange(userId, evt) {
|
|
27222
|
-
for (const [key, value] of evt.changes.keys.entries()) {
|
|
27223
|
-
if (key === "permission") {
|
|
27224
|
-
if (value.action === "add" || value.action === "update") {
|
|
27225
|
-
const newValue = this.requestUserMap(userId).get("permission");
|
|
27226
|
-
this.emit("change", userId, this.resolveFlags(newValue), newValue);
|
|
27227
|
-
}
|
|
27228
|
-
}
|
|
27229
|
-
}
|
|
27230
|
-
}
|
|
27183
|
+
var WhiteboardPermissions = class extends import_forge_room3.AbstractApplicationPermissions {
|
|
27231
27184
|
/**
|
|
27232
27185
|
* 解析权限列表组合
|
|
27233
27186
|
* @param {number} value - 权限数字值
|
|
@@ -27236,70 +27189,19 @@ var WhiteboardPermissions = class extends import_eventemitter3.default {
|
|
|
27236
27189
|
resolveFlags(value) {
|
|
27237
27190
|
return [WhiteboardPermissionFlag.draw, WhiteboardPermissionFlag.editSelf, WhiteboardPermissionFlag.editOthers, WhiteboardPermissionFlag.deleteSelf, WhiteboardPermissionFlag.deleteOthers, WhiteboardPermissionFlag.mainView, WhiteboardPermissionFlag.setOthersView].filter((v) => (v & value) !== 0);
|
|
27238
27191
|
}
|
|
27239
|
-
/**
|
|
27240
|
-
* 获取权限列表组合对应的数值
|
|
27241
|
-
* @param { string } userId 不传表示获取自己
|
|
27242
|
-
*/
|
|
27243
|
-
getPermissionValue(userId) {
|
|
27244
|
-
return this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
|
|
27245
|
-
}
|
|
27246
|
-
/**
|
|
27247
|
-
* 获取权限列表
|
|
27248
|
-
* @param {string=} userId 可选, 不传表示获取自己
|
|
27249
|
-
*/
|
|
27250
|
-
getPermissionFlags(userId) {
|
|
27251
|
-
const value = this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
|
|
27252
|
-
return this.resolveFlags(value);
|
|
27253
|
-
}
|
|
27254
|
-
/**
|
|
27255
|
-
* 返回对应 userId 是否有相应权限
|
|
27256
|
-
* @param {string=} userId 可选, 不传表示返回自己是否有相应权限
|
|
27257
|
-
* @param {WhiteboardPermissionFlag} flag
|
|
27258
|
-
*/
|
|
27259
|
-
hasPermission(flag, userId) {
|
|
27260
|
-
return ((this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0) & flag) !== 0;
|
|
27261
|
-
}
|
|
27262
|
-
/**
|
|
27263
|
-
* 添加权限
|
|
27264
|
-
* @param {WhiteboardPermissionFlag} flag 权限标记
|
|
27265
|
-
* @param {string=} userId 可选, 为 userId 添加权限, 不传表示为自己添加权限
|
|
27266
|
-
*/
|
|
27267
|
-
addPermission(flag, userId) {
|
|
27268
|
-
const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
|
|
27269
|
-
const oldValue = userMap.get("permission") ?? 0;
|
|
27270
|
-
this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue | flag);
|
|
27271
|
-
}
|
|
27272
|
-
/**
|
|
27273
|
-
* 移除权限
|
|
27274
|
-
* @param {WhiteboardPermissionFlag} flag 权限标记
|
|
27275
|
-
* @param {string=} userId 可选, 为 userId 移除权限, 不传表示为自己移除权限
|
|
27276
|
-
*/
|
|
27277
|
-
removePermission(flag, userId) {
|
|
27278
|
-
const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
|
|
27279
|
-
const oldValue = userMap.get("permission") ?? 0;
|
|
27280
|
-
this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue & ~flag);
|
|
27281
|
-
}
|
|
27282
|
-
dispose() {
|
|
27283
|
-
this.userManager.off("join", this.handleUserJoin);
|
|
27284
|
-
this.userManager.off("leave", this.handleUserLeave);
|
|
27285
|
-
this.observers.forEach((cb, userId) => {
|
|
27286
|
-
this.requestUserMap(userId).unobserve(cb);
|
|
27287
|
-
});
|
|
27288
|
-
this.observers.clear();
|
|
27289
|
-
}
|
|
27290
27192
|
};
|
|
27291
27193
|
|
|
27292
27194
|
// src/model/renderable/StraightLineModel.ts
|
|
27293
27195
|
var Y11 = __toESM(require("yjs"), 1);
|
|
27294
27196
|
var import_lodash7 = __toESM(require_lodash(), 1);
|
|
27295
|
-
function
|
|
27296
|
-
return (r =
|
|
27197
|
+
function _defineProperty15(e, r, t) {
|
|
27198
|
+
return (r = _toPropertyKey15(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
27297
27199
|
}
|
|
27298
|
-
function
|
|
27299
|
-
var i =
|
|
27200
|
+
function _toPropertyKey15(t) {
|
|
27201
|
+
var i = _toPrimitive15(t, "string");
|
|
27300
27202
|
return "symbol" == typeof i ? i : i + "";
|
|
27301
27203
|
}
|
|
27302
|
-
function
|
|
27204
|
+
function _toPrimitive15(t, r) {
|
|
27303
27205
|
if ("object" != typeof t || !t) return t;
|
|
27304
27206
|
var e = t[Symbol.toPrimitive];
|
|
27305
27207
|
if (void 0 !== e) {
|
|
@@ -27312,7 +27214,7 @@ function _toPrimitive16(t, r) {
|
|
|
27312
27214
|
var StraightLineModel = class extends ElementModel {
|
|
27313
27215
|
constructor(root, scope) {
|
|
27314
27216
|
super(root, scope);
|
|
27315
|
-
|
|
27217
|
+
_defineProperty15(this, "item", null);
|
|
27316
27218
|
if (!this.root.has("type")) {
|
|
27317
27219
|
this.root.set("type", "line");
|
|
27318
27220
|
}
|
|
@@ -27405,6 +27307,83 @@ var StraightLineModel = class extends ElementModel {
|
|
|
27405
27307
|
}
|
|
27406
27308
|
};
|
|
27407
27309
|
|
|
27310
|
+
// src/model/renderable/ImageModel.ts
|
|
27311
|
+
function _defineProperty16(e, r, t) {
|
|
27312
|
+
return (r = _toPropertyKey16(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
27313
|
+
}
|
|
27314
|
+
function _toPropertyKey16(t) {
|
|
27315
|
+
var i = _toPrimitive16(t, "string");
|
|
27316
|
+
return "symbol" == typeof i ? i : i + "";
|
|
27317
|
+
}
|
|
27318
|
+
function _toPrimitive16(t, r) {
|
|
27319
|
+
if ("object" != typeof t || !t) return t;
|
|
27320
|
+
var e = t[Symbol.toPrimitive];
|
|
27321
|
+
if (void 0 !== e) {
|
|
27322
|
+
var i = e.call(t, r || "default");
|
|
27323
|
+
if ("object" != typeof i) return i;
|
|
27324
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
27325
|
+
}
|
|
27326
|
+
return ("string" === r ? String : Number)(t);
|
|
27327
|
+
}
|
|
27328
|
+
var ImageModel = class extends ElementModel {
|
|
27329
|
+
get src() {
|
|
27330
|
+
return this.root.get("src");
|
|
27331
|
+
}
|
|
27332
|
+
constructor(root, scope, imageSets) {
|
|
27333
|
+
super(root, scope);
|
|
27334
|
+
_defineProperty16(this, "item", null);
|
|
27335
|
+
_defineProperty16(this, "imageSets", void 0);
|
|
27336
|
+
this.imageSets = imageSets;
|
|
27337
|
+
if (!this.root.has("type")) {
|
|
27338
|
+
this.root.set("type", "image");
|
|
27339
|
+
}
|
|
27340
|
+
this.root.set(ElementModel.KEYS.shadow, "");
|
|
27341
|
+
}
|
|
27342
|
+
subDispose() {
|
|
27343
|
+
const img = this.imageSets.querySelector(`[id='${this.uuid}']`);
|
|
27344
|
+
if (img) {
|
|
27345
|
+
img.remove();
|
|
27346
|
+
}
|
|
27347
|
+
}
|
|
27348
|
+
createPaperItem() {
|
|
27349
|
+
if (this.item) {
|
|
27350
|
+
return;
|
|
27351
|
+
}
|
|
27352
|
+
if (!this.imageSets.querySelector(`[id='${this.uuid}']`)) {
|
|
27353
|
+
const img = document.createElement("img");
|
|
27354
|
+
img.src = this.src;
|
|
27355
|
+
img.id = this.uuid;
|
|
27356
|
+
this.imageSets.appendChild(img);
|
|
27357
|
+
}
|
|
27358
|
+
this.item = new this.scope.Raster(this.uuid);
|
|
27359
|
+
const matrix = new this.scope.Matrix(this.pointsMatrix);
|
|
27360
|
+
this.item.matrix = matrix;
|
|
27361
|
+
}
|
|
27362
|
+
onVectorUpdate() {
|
|
27363
|
+
const matrix = new this.scope.Matrix(this.pointsMatrix);
|
|
27364
|
+
if (this.item) {
|
|
27365
|
+
this.item.matrix = matrix;
|
|
27366
|
+
}
|
|
27367
|
+
}
|
|
27368
|
+
vectorKeys() {
|
|
27369
|
+
return [];
|
|
27370
|
+
}
|
|
27371
|
+
styleKeys() {
|
|
27372
|
+
return {
|
|
27373
|
+
include: [],
|
|
27374
|
+
exclude: ["dashArray", "strokeColor", "fillColor", "strokeWidth"]
|
|
27375
|
+
};
|
|
27376
|
+
}
|
|
27377
|
+
onStyleKeyUpdate(_key) {
|
|
27378
|
+
}
|
|
27379
|
+
editorConfig() {
|
|
27380
|
+
const cfg = new EditorConfig();
|
|
27381
|
+
cfg.resizeModel = () => "four-corner";
|
|
27382
|
+
cfg.uniformScale = () => true;
|
|
27383
|
+
return cfg;
|
|
27384
|
+
}
|
|
27385
|
+
};
|
|
27386
|
+
|
|
27408
27387
|
// src/model/RenderableModel.ts
|
|
27409
27388
|
function _defineProperty17(e, r, t) {
|
|
27410
27389
|
return (r = _toPropertyKey17(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
@@ -27423,11 +27402,11 @@ function _toPrimitive17(t, r) {
|
|
|
27423
27402
|
}
|
|
27424
27403
|
return ("string" === r ? String : Number)(t);
|
|
27425
27404
|
}
|
|
27426
|
-
var RenderableModel = class extends
|
|
27405
|
+
var RenderableModel = class extends import_eventemitter3.default {
|
|
27427
27406
|
get uuid() {
|
|
27428
|
-
return (0, import_uuid.v4)();
|
|
27407
|
+
return (0, import_uuid.v4)().replace(/-/g, "");
|
|
27429
27408
|
}
|
|
27430
|
-
constructor(layerId, shadowEmitter, elements, scope, toolbarModel, userManager, hasPermission) {
|
|
27409
|
+
constructor(layerId, shadowEmitter, elements, scope, toolbarModel, userManager, imageSets, hasPermission) {
|
|
27431
27410
|
super();
|
|
27432
27411
|
_defineProperty17(this, "scope", void 0);
|
|
27433
27412
|
_defineProperty17(this, "toolbarModel", void 0);
|
|
@@ -27438,6 +27417,7 @@ var RenderableModel = class extends import_eventemitter32.default {
|
|
|
27438
27417
|
_defineProperty17(this, "maxIndex", -1);
|
|
27439
27418
|
_defineProperty17(this, "hasPermission", void 0);
|
|
27440
27419
|
_defineProperty17(this, "shadowEmitter", void 0);
|
|
27420
|
+
_defineProperty17(this, "imageSets", void 0);
|
|
27441
27421
|
_defineProperty17(this, "onElementsChange", (event) => {
|
|
27442
27422
|
for (const [key, value] of event.changes.keys.entries()) {
|
|
27443
27423
|
if (value.action === "add") {
|
|
@@ -27453,6 +27433,7 @@ var RenderableModel = class extends import_eventemitter32.default {
|
|
|
27453
27433
|
}
|
|
27454
27434
|
}
|
|
27455
27435
|
});
|
|
27436
|
+
this.imageSets = imageSets;
|
|
27456
27437
|
this.hasPermission = hasPermission;
|
|
27457
27438
|
this.shadowEmitter = shadowEmitter;
|
|
27458
27439
|
this.layerId = layerId;
|
|
@@ -27512,6 +27493,8 @@ var RenderableModel = class extends import_eventemitter32.default {
|
|
|
27512
27493
|
model = new LaserPointerModel(this.userManager.selfId, yMap, this.scope, (uuid) => {
|
|
27513
27494
|
this.removeElementItem(uuid);
|
|
27514
27495
|
});
|
|
27496
|
+
} else if (type === "image") {
|
|
27497
|
+
model = new ImageModel(yMap, this.scope, this.imageSets);
|
|
27515
27498
|
}
|
|
27516
27499
|
if (model) {
|
|
27517
27500
|
model.shadowEmitter = this.shadowEmitter;
|
|
@@ -27544,10 +27527,26 @@ var RenderableModel = class extends import_eventemitter32.default {
|
|
|
27544
27527
|
confirmPermission() {
|
|
27545
27528
|
const hasPermission = this.hasPermission(WhiteboardPermissionFlag.draw);
|
|
27546
27529
|
if (!hasPermission) {
|
|
27547
|
-
|
|
27530
|
+
(0, import_forge_room4.log)("[@netless/forge-whiteboard] no permission to draw", {}, "warning");
|
|
27548
27531
|
}
|
|
27549
27532
|
return hasPermission;
|
|
27550
27533
|
}
|
|
27534
|
+
createImage(src) {
|
|
27535
|
+
if (!this.confirmPermission()) {
|
|
27536
|
+
return;
|
|
27537
|
+
}
|
|
27538
|
+
const model = new ImageModel(new Y12.Map(), this.scope, this.imageSets);
|
|
27539
|
+
model.root.set("src", src);
|
|
27540
|
+
const initMatrix = new this.scope.Matrix();
|
|
27541
|
+
const center = this.scope.project.view.center;
|
|
27542
|
+
initMatrix.translate({
|
|
27543
|
+
x: center.x,
|
|
27544
|
+
y: center.y
|
|
27545
|
+
});
|
|
27546
|
+
model.appendPointsMatrix(initMatrix);
|
|
27547
|
+
model.ownerId = this.userManager.selfId;
|
|
27548
|
+
this.addElementToDoc(model.root);
|
|
27549
|
+
}
|
|
27551
27550
|
createCurve() {
|
|
27552
27551
|
let shadow = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
|
|
27553
27552
|
if (!this.confirmPermission()) {
|
|
@@ -27674,7 +27673,7 @@ var RenderableModel = class extends import_eventemitter32.default {
|
|
|
27674
27673
|
});
|
|
27675
27674
|
}
|
|
27676
27675
|
dispose() {
|
|
27677
|
-
this.elements
|
|
27676
|
+
(0, import_forge_room4.removeObserver)(this.elements, this.onElementsChange);
|
|
27678
27677
|
this.elements.clear();
|
|
27679
27678
|
Array.from(this.elementModels.values()).forEach((model) => {
|
|
27680
27679
|
model.dispose();
|
|
@@ -27987,9 +27986,24 @@ var CurveTool = class extends WhiteboardTool {
|
|
|
27987
27986
|
if (this.pointCount > 1024) {
|
|
27988
27987
|
return;
|
|
27989
27988
|
}
|
|
27989
|
+
const MIN_DISTANCE = 4;
|
|
27990
27990
|
if (this.elementModel) {
|
|
27991
|
-
this.
|
|
27992
|
-
|
|
27991
|
+
const len = this.elementModel.points.length;
|
|
27992
|
+
let last = {
|
|
27993
|
+
x: 0,
|
|
27994
|
+
y: 0
|
|
27995
|
+
};
|
|
27996
|
+
if (len >= 2) {
|
|
27997
|
+
last = {
|
|
27998
|
+
x: this.elementModel.points[len - 2],
|
|
27999
|
+
y: this.elementModel.points[len - 1]
|
|
28000
|
+
};
|
|
28001
|
+
}
|
|
28002
|
+
const dist = Math.max(Math.abs(last.x - event.point.x), Math.abs(last.y - event.point.y));
|
|
28003
|
+
if (dist >= MIN_DISTANCE) {
|
|
28004
|
+
this.pointCount += 1;
|
|
28005
|
+
this.elementModel.appendPoints([Math.round(event.point.x), Math.round(event.point.y)]);
|
|
28006
|
+
}
|
|
27993
28007
|
}
|
|
27994
28008
|
}
|
|
27995
28009
|
onMouseUp(event) {
|
|
@@ -28075,7 +28089,8 @@ var RectangleTool = class extends WhiteboardTool {
|
|
|
28075
28089
|
};
|
|
28076
28090
|
|
|
28077
28091
|
// src/model/ToolbarModel.ts
|
|
28078
|
-
var
|
|
28092
|
+
var import_eventemitter32 = __toESM(require("eventemitter3"), 1);
|
|
28093
|
+
var import_forge_room5 = require("@netless/forge-room");
|
|
28079
28094
|
function _defineProperty21(e, r, t) {
|
|
28080
28095
|
return (r = _toPropertyKey21(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
28081
28096
|
}
|
|
@@ -28102,7 +28117,7 @@ var TOOLBAR_KEYS = {
|
|
|
28102
28117
|
strokeWidth: "strokeWidth",
|
|
28103
28118
|
dashArray: "dashArray"
|
|
28104
28119
|
};
|
|
28105
|
-
var ToolbarModel = class extends
|
|
28120
|
+
var ToolbarModel = class extends import_eventemitter32.default {
|
|
28106
28121
|
get currentTool() {
|
|
28107
28122
|
return this.root.get(TOOLBAR_KEYS.tool);
|
|
28108
28123
|
}
|
|
@@ -28172,7 +28187,7 @@ var ToolbarModel = class extends import_eventemitter33.default {
|
|
|
28172
28187
|
});
|
|
28173
28188
|
}
|
|
28174
28189
|
dispose() {
|
|
28175
|
-
this.root
|
|
28190
|
+
(0, import_forge_room5.removeObserver)(this.root, this.handleRootUpdate);
|
|
28176
28191
|
this.removeAllListeners();
|
|
28177
28192
|
}
|
|
28178
28193
|
};
|
|
@@ -28260,7 +28275,8 @@ var SelectorTool = class extends WhiteboardTool {
|
|
|
28260
28275
|
|
|
28261
28276
|
// src/model/SelectElementsModel.ts
|
|
28262
28277
|
var Y13 = __toESM(require("yjs"), 1);
|
|
28263
|
-
var
|
|
28278
|
+
var import_eventemitter33 = __toESM(require("eventemitter3"), 1);
|
|
28279
|
+
var import_forge_room6 = require("@netless/forge-room");
|
|
28264
28280
|
|
|
28265
28281
|
// src/WhiteboardKeys.ts
|
|
28266
28282
|
var WhiteboardKeys = {
|
|
@@ -28291,7 +28307,7 @@ function _toPrimitive23(t, r) {
|
|
|
28291
28307
|
}
|
|
28292
28308
|
return ("string" === r ? String : Number)(t);
|
|
28293
28309
|
}
|
|
28294
|
-
var SelectElementsModel = class extends
|
|
28310
|
+
var SelectElementsModel = class extends import_eventemitter33.default {
|
|
28295
28311
|
get hasEditSelfPermission() {
|
|
28296
28312
|
return this.hasPermission(WhiteboardPermissionFlag.editSelf);
|
|
28297
28313
|
}
|
|
@@ -28307,7 +28323,7 @@ var SelectElementsModel = class extends import_eventemitter34.default {
|
|
|
28307
28323
|
_defineProperty23(this, "handleUserLeave", (user) => {
|
|
28308
28324
|
const cb = this.observers.get(user.id);
|
|
28309
28325
|
if (cb) {
|
|
28310
|
-
this.requestUserMap(user.id)
|
|
28326
|
+
(0, import_forge_room6.removeDeepObserver)(this.requestUserMap(user.id), cb);
|
|
28311
28327
|
this.observers.delete(user.id);
|
|
28312
28328
|
}
|
|
28313
28329
|
});
|
|
@@ -28316,7 +28332,7 @@ var SelectElementsModel = class extends import_eventemitter34.default {
|
|
|
28316
28332
|
this.handleUserSelectElementsChange(user.id, evts);
|
|
28317
28333
|
};
|
|
28318
28334
|
if (this.observers.has(user.id)) {
|
|
28319
|
-
this.requestUserMap(user.id)
|
|
28335
|
+
(0, import_forge_room6.removeDeepObserver)(this.requestUserMap(user.id), this.observers.get(user.id));
|
|
28320
28336
|
}
|
|
28321
28337
|
this.requestUserMap(user.id).observeDeep(observer);
|
|
28322
28338
|
this.observers.set(user.id, observer);
|
|
@@ -28338,7 +28354,7 @@ var SelectElementsModel = class extends import_eventemitter34.default {
|
|
|
28338
28354
|
this.handleUserSelectElementsChange(userId, evts);
|
|
28339
28355
|
};
|
|
28340
28356
|
if (this.observers.has(userId)) {
|
|
28341
|
-
this.requestUserMap(userId)
|
|
28357
|
+
(0, import_forge_room6.removeDeepObserver)(this.requestUserMap(userId), this.observers.get(userId));
|
|
28342
28358
|
}
|
|
28343
28359
|
this.requestUserMap(userId).observeDeep(observer);
|
|
28344
28360
|
this.observers.set(userId, observer);
|
|
@@ -28395,7 +28411,7 @@ var SelectElementsModel = class extends import_eventemitter34.default {
|
|
|
28395
28411
|
}
|
|
28396
28412
|
dispose() {
|
|
28397
28413
|
for (const [key, value] of this.observers.entries()) {
|
|
28398
|
-
this.requestUserMap(key)
|
|
28414
|
+
(0, import_forge_room6.removeDeepObserver)(this.requestUserMap(key), value);
|
|
28399
28415
|
}
|
|
28400
28416
|
this.observers.clear();
|
|
28401
28417
|
this.userManager.off("leave", this.handleUserLeave);
|
|
@@ -28404,10 +28420,10 @@ var SelectElementsModel = class extends import_eventemitter34.default {
|
|
|
28404
28420
|
};
|
|
28405
28421
|
|
|
28406
28422
|
// src/edit/Editor.ts
|
|
28407
|
-
var
|
|
28423
|
+
var import_eventemitter35 = __toESM(require("eventemitter3"), 1);
|
|
28408
28424
|
|
|
28409
28425
|
// src/edit/TextEditor.ts
|
|
28410
|
-
var
|
|
28426
|
+
var import_eventemitter34 = require("eventemitter3");
|
|
28411
28427
|
function _defineProperty24(e, r, t) {
|
|
28412
28428
|
return (r = _toPropertyKey24(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
28413
28429
|
}
|
|
@@ -28425,7 +28441,7 @@ function _toPrimitive24(t, r) {
|
|
|
28425
28441
|
}
|
|
28426
28442
|
return ("string" === r ? String : Number)(t);
|
|
28427
28443
|
}
|
|
28428
|
-
var TextEditor = class extends
|
|
28444
|
+
var TextEditor = class extends import_eventemitter34.EventEmitter {
|
|
28429
28445
|
constructor(camera) {
|
|
28430
28446
|
super();
|
|
28431
28447
|
_defineProperty24(this, "rootView", void 0);
|
|
@@ -28568,7 +28584,7 @@ var ANCHOR_STYLE = {
|
|
|
28568
28584
|
b: "cursor:s-resize;bottom:-3px;left:50%;translate:-50%;",
|
|
28569
28585
|
br: "cursor:se-resize;bottom:-3px;right:-3px"
|
|
28570
28586
|
};
|
|
28571
|
-
var Bounds = class extends
|
|
28587
|
+
var Bounds = class extends import_eventemitter35.default {
|
|
28572
28588
|
get width() {
|
|
28573
28589
|
return this.maxX - this.minX;
|
|
28574
28590
|
}
|
|
@@ -28707,7 +28723,7 @@ var Bounds = class extends import_eventemitter36.default {
|
|
|
28707
28723
|
this.maxY = maxY;
|
|
28708
28724
|
}
|
|
28709
28725
|
};
|
|
28710
|
-
var Editor = class extends
|
|
28726
|
+
var Editor = class extends import_eventemitter35.default {
|
|
28711
28727
|
constructor(scope, shadowScope, shadowEmitter, canvasElement, camera, initConfig) {
|
|
28712
28728
|
super();
|
|
28713
28729
|
_defineProperty25(this, "rootView", void 0);
|
|
@@ -28910,7 +28926,7 @@ var Editor = class extends import_eventemitter36.default {
|
|
|
28910
28926
|
this.ctrlId = initConfig.ctrlId;
|
|
28911
28927
|
this.ctrlNickName = initConfig.ctrlNickName;
|
|
28912
28928
|
this.rootView = document.createElement("div");
|
|
28913
|
-
this.rootView.style.cssText = "position:absolute;display:none;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%);";
|
|
28929
|
+
this.rootView.style.cssText = "overflow:hidden;position:absolute;display:none;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%);";
|
|
28914
28930
|
this.frame = document.createElement("div");
|
|
28915
28931
|
this.frame.style.position = "absolute";
|
|
28916
28932
|
this.frame.style.padding = "8px";
|
|
@@ -29219,10 +29235,10 @@ var TextTool = class extends WhiteboardTool {
|
|
|
29219
29235
|
};
|
|
29220
29236
|
|
|
29221
29237
|
// src/Camera.ts
|
|
29222
|
-
var
|
|
29238
|
+
var import_eventemitter37 = __toESM(require("eventemitter3"), 1);
|
|
29223
29239
|
|
|
29224
29240
|
// src/Gesture.ts
|
|
29225
|
-
var
|
|
29241
|
+
var import_eventemitter36 = __toESM(require("eventemitter3"), 1);
|
|
29226
29242
|
function _defineProperty27(e, r, t) {
|
|
29227
29243
|
return (r = _toPropertyKey27(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
29228
29244
|
}
|
|
@@ -29240,7 +29256,7 @@ function _toPrimitive27(t, r) {
|
|
|
29240
29256
|
}
|
|
29241
29257
|
return ("string" === r ? String : Number)(t);
|
|
29242
29258
|
}
|
|
29243
|
-
var Gesture = class extends
|
|
29259
|
+
var Gesture = class extends import_eventemitter36.default {
|
|
29244
29260
|
constructor(element, scope) {
|
|
29245
29261
|
super();
|
|
29246
29262
|
_defineProperty27(this, "element", void 0);
|
|
@@ -29304,6 +29320,7 @@ var Gesture = class extends import_eventemitter37.default {
|
|
|
29304
29320
|
};
|
|
29305
29321
|
|
|
29306
29322
|
// src/Camera.ts
|
|
29323
|
+
var import_forge_room7 = require("@netless/forge-room");
|
|
29307
29324
|
function _defineProperty28(e, r, t) {
|
|
29308
29325
|
return (r = _toPropertyKey28(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
29309
29326
|
}
|
|
@@ -29321,7 +29338,7 @@ function _toPrimitive28(t, r) {
|
|
|
29321
29338
|
}
|
|
29322
29339
|
return ("string" === r ? String : Number)(t);
|
|
29323
29340
|
}
|
|
29324
|
-
var Camera = class extends
|
|
29341
|
+
var Camera = class extends import_eventemitter37.default {
|
|
29325
29342
|
get inherentMatrix() {
|
|
29326
29343
|
const inherentMatrix = new this.scope.Matrix();
|
|
29327
29344
|
inherentMatrix.scale(this.inherentScale, [0, 0]);
|
|
@@ -29377,7 +29394,7 @@ var Camera = class extends import_eventemitter38.default {
|
|
|
29377
29394
|
_defineProperty28(this, "handleUserLeave", (user) => {
|
|
29378
29395
|
const cb = this.observers.get(user.id);
|
|
29379
29396
|
if (cb) {
|
|
29380
|
-
this.requestUserMap(user.id)
|
|
29397
|
+
(0, import_forge_room7.removeObserver)(this.requestUserMap(user.id), cb);
|
|
29381
29398
|
}
|
|
29382
29399
|
});
|
|
29383
29400
|
_defineProperty28(this, "handleUserJoin", (user) => {
|
|
@@ -29385,7 +29402,7 @@ var Camera = class extends import_eventemitter38.default {
|
|
|
29385
29402
|
this.handleViewMatrixUpdate(user.id, evt);
|
|
29386
29403
|
};
|
|
29387
29404
|
if (this.observers.has(user.id)) {
|
|
29388
|
-
this.requestUserMap(user.id)
|
|
29405
|
+
(0, import_forge_room7.removeObserver)(this.requestUserMap(user.id), observer);
|
|
29389
29406
|
}
|
|
29390
29407
|
this.requestUserMap(user.id).observe(observer);
|
|
29391
29408
|
this.observers.set(user.id, observer);
|
|
@@ -29492,7 +29509,7 @@ var Camera = class extends import_eventemitter38.default {
|
|
|
29492
29509
|
this.handleViewMatrixUpdate(userId, evt);
|
|
29493
29510
|
};
|
|
29494
29511
|
if (this.observers.has(userId)) {
|
|
29495
|
-
this.requestUserMap(userId)
|
|
29512
|
+
(0, import_forge_room7.removeObserver)(this.requestUserMap(userId), observer);
|
|
29496
29513
|
}
|
|
29497
29514
|
this.requestUserMap(userId).observe(observer);
|
|
29498
29515
|
this.observers.set(userId, observer);
|
|
@@ -29689,10 +29706,10 @@ var Camera = class extends import_eventemitter38.default {
|
|
|
29689
29706
|
Array.from(this.observers.keys()).forEach((userId) => {
|
|
29690
29707
|
const cb = this.observers.get(userId);
|
|
29691
29708
|
if (cb) {
|
|
29692
|
-
this.requestUserMap(userId)
|
|
29709
|
+
(0, import_forge_room7.removeObserver)(this.requestUserMap(userId), cb);
|
|
29693
29710
|
}
|
|
29694
29711
|
});
|
|
29695
|
-
this.whiteboardAttrsMap
|
|
29712
|
+
(0, import_forge_room7.removeObserver)(this.whiteboardAttrsMap, this.handleMainCameraChange);
|
|
29696
29713
|
this.userManager.off("join", this.handleUserJoin);
|
|
29697
29714
|
this.userManager.off("leave", this.handleUserLeave);
|
|
29698
29715
|
this.gesture.removeAllListeners();
|
|
@@ -29805,7 +29822,7 @@ var TriangleTool = class extends WhiteboardTool {
|
|
|
29805
29822
|
};
|
|
29806
29823
|
|
|
29807
29824
|
// src/Whiteboard.ts
|
|
29808
|
-
var
|
|
29825
|
+
var import_eventemitter38 = __toESM(require("eventemitter3"), 1);
|
|
29809
29826
|
function _defineProperty31(e, r, t) {
|
|
29810
29827
|
return (r = _toPropertyKey31(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
29811
29828
|
}
|
|
@@ -29823,8 +29840,7 @@ function _toPrimitive31(t, r) {
|
|
|
29823
29840
|
}
|
|
29824
29841
|
return ("string" === r ? String : Number)(t);
|
|
29825
29842
|
}
|
|
29826
|
-
var Whiteboard = class extends
|
|
29827
|
-
// public insertImage!: (src: string) => void;
|
|
29843
|
+
var Whiteboard = class extends import_eventemitter38.default {
|
|
29828
29844
|
constructor(view) {
|
|
29829
29845
|
super();
|
|
29830
29846
|
_defineProperty31(this, "view", void 0);
|
|
@@ -29843,6 +29859,7 @@ var Whiteboard = class extends import_eventemitter39.default {
|
|
|
29843
29859
|
_defineProperty31(this, "enableCameraBoundaryHighlight", void 0);
|
|
29844
29860
|
_defineProperty31(this, "getElementAttribute", void 0);
|
|
29845
29861
|
_defineProperty31(this, "setElementAttribute", void 0);
|
|
29862
|
+
_defineProperty31(this, "removeElement", void 0);
|
|
29846
29863
|
_defineProperty31(this, "getCurrentTool", void 0);
|
|
29847
29864
|
_defineProperty31(this, "setCurrentTool", void 0);
|
|
29848
29865
|
_defineProperty31(this, "setCanvasBackgroundColor", void 0);
|
|
@@ -29869,6 +29886,7 @@ var Whiteboard = class extends import_eventemitter39.default {
|
|
|
29869
29886
|
_defineProperty31(this, "rasterizeElementsBounds", void 0);
|
|
29870
29887
|
_defineProperty31(this, "rasterizeMaxBounds", void 0);
|
|
29871
29888
|
_defineProperty31(this, "setInputType", void 0);
|
|
29889
|
+
_defineProperty31(this, "insertImage", void 0);
|
|
29872
29890
|
this.view = view;
|
|
29873
29891
|
}
|
|
29874
29892
|
};
|
|
@@ -29936,7 +29954,8 @@ var EraserTool = class extends WhiteboardTool {
|
|
|
29936
29954
|
|
|
29937
29955
|
// src/model/TrashedElementsModel.ts
|
|
29938
29956
|
var Y14 = __toESM(require("yjs"), 1);
|
|
29939
|
-
var
|
|
29957
|
+
var import_eventemitter39 = __toESM(require("eventemitter3"), 1);
|
|
29958
|
+
var import_forge_room8 = require("@netless/forge-room");
|
|
29940
29959
|
function _defineProperty33(e, r, t) {
|
|
29941
29960
|
return (r = _toPropertyKey33(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
29942
29961
|
}
|
|
@@ -29954,7 +29973,7 @@ function _toPrimitive33(t, r) {
|
|
|
29954
29973
|
}
|
|
29955
29974
|
return ("string" === r ? String : Number)(t);
|
|
29956
29975
|
}
|
|
29957
|
-
var TrashedElementsModel = class extends
|
|
29976
|
+
var TrashedElementsModel = class extends import_eventemitter39.default {
|
|
29958
29977
|
get hasDeleteSelfPermission() {
|
|
29959
29978
|
return this.hasPermission(WhiteboardPermissionFlag.deleteSelf);
|
|
29960
29979
|
}
|
|
@@ -29970,7 +29989,7 @@ var TrashedElementsModel = class extends import_eventemitter310.default {
|
|
|
29970
29989
|
_defineProperty33(this, "handleUserLeave", (user) => {
|
|
29971
29990
|
const cb = this.observers.get(user.id);
|
|
29972
29991
|
if (cb) {
|
|
29973
|
-
this.requestUserMap(user.id)
|
|
29992
|
+
(0, import_forge_room8.removeDeepObserver)(this.requestUserMap(user.id), cb);
|
|
29974
29993
|
}
|
|
29975
29994
|
});
|
|
29976
29995
|
_defineProperty33(this, "handleUserJoin", (user) => {
|
|
@@ -29978,7 +29997,7 @@ var TrashedElementsModel = class extends import_eventemitter310.default {
|
|
|
29978
29997
|
this.handleUserTrashElementsChange(user.id, evts);
|
|
29979
29998
|
};
|
|
29980
29999
|
if (this.observers.has(user.id)) {
|
|
29981
|
-
this.requestUserMap(user.id)
|
|
30000
|
+
(0, import_forge_room8.removeDeepObserver)(this.requestUserMap(user.id), this.observers.get(user.id));
|
|
29982
30001
|
}
|
|
29983
30002
|
this.requestUserMap(user.id).observeDeep(observer);
|
|
29984
30003
|
this.observers.set(user.id, observer);
|
|
@@ -29992,7 +30011,7 @@ var TrashedElementsModel = class extends import_eventemitter310.default {
|
|
|
29992
30011
|
this.handleUserTrashElementsChange(userId, evts);
|
|
29993
30012
|
};
|
|
29994
30013
|
if (this.observers.has(userId)) {
|
|
29995
|
-
|
|
30014
|
+
(0, import_forge_room8.removeDeepObserver)(this.requestUserMap(userId), userId);
|
|
29996
30015
|
}
|
|
29997
30016
|
this.requestUserMap(userId).observeDeep(observer);
|
|
29998
30017
|
this.observers.set(userId, observer);
|
|
@@ -30049,7 +30068,7 @@ var TrashedElementsModel = class extends import_eventemitter310.default {
|
|
|
30049
30068
|
}
|
|
30050
30069
|
dispose() {
|
|
30051
30070
|
for (const [key, value] of this.observers.entries()) {
|
|
30052
|
-
this.requestUserMap(key)
|
|
30071
|
+
(0, import_forge_room8.removeDeepObserver)(this.requestUserMap(key), value);
|
|
30053
30072
|
}
|
|
30054
30073
|
this.observers.clear();
|
|
30055
30074
|
this.userManager.off("leave", this.handleUserLeave);
|
|
@@ -30106,8 +30125,8 @@ var LaserPointerTool = class extends WhiteboardTool {
|
|
|
30106
30125
|
};
|
|
30107
30126
|
|
|
30108
30127
|
// src/model/PageModel.ts
|
|
30109
|
-
var
|
|
30110
|
-
var
|
|
30128
|
+
var import_eventemitter310 = __toESM(require("eventemitter3"), 1);
|
|
30129
|
+
var import_forge_room9 = require("@netless/forge-room");
|
|
30111
30130
|
function _defineProperty35(e, r, t) {
|
|
30112
30131
|
return (r = _toPropertyKey35(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30113
30132
|
}
|
|
@@ -30125,7 +30144,7 @@ function _toPrimitive35(t, r) {
|
|
|
30125
30144
|
}
|
|
30126
30145
|
return ("string" === r ? String : Number)(t);
|
|
30127
30146
|
}
|
|
30128
|
-
var PageModel = class extends
|
|
30147
|
+
var PageModel = class extends import_eventemitter310.default {
|
|
30129
30148
|
constructor(whiteboardAttrsMap, userManager, requestUserMap, pageMap, hasPermission) {
|
|
30130
30149
|
super();
|
|
30131
30150
|
_defineProperty35(this, "whiteboardAttrsMap", void 0);
|
|
@@ -30137,7 +30156,7 @@ var PageModel = class extends import_eventemitter311.default {
|
|
|
30137
30156
|
_defineProperty35(this, "handleUserLeave", (user) => {
|
|
30138
30157
|
const cb = this.observers.get(user.id);
|
|
30139
30158
|
if (cb) {
|
|
30140
|
-
this.requestUserMap(user.id)
|
|
30159
|
+
(0, import_forge_room9.removeObserver)(this.requestUserMap(user.id), cb);
|
|
30141
30160
|
}
|
|
30142
30161
|
});
|
|
30143
30162
|
_defineProperty35(this, "handleUserJoin", (user) => {
|
|
@@ -30151,7 +30170,7 @@ var PageModel = class extends import_eventemitter311.default {
|
|
|
30151
30170
|
if (cameraMode === "main") {
|
|
30152
30171
|
const targetPage = this.whiteboardAttrsMap.get(WhiteboardKeys.currentPage);
|
|
30153
30172
|
if (!this.pageMap.has(targetPage) && targetPage !== "_i_") {
|
|
30154
|
-
(0,
|
|
30173
|
+
(0, import_forge_room9.log)(`main page {${targetPage}} not found.`, {}, "error");
|
|
30155
30174
|
return;
|
|
30156
30175
|
}
|
|
30157
30176
|
this.requestUserMap(this.userManager.selfId).set(WhiteboardKeys.currentPage, targetPage);
|
|
@@ -30279,12 +30298,12 @@ var PageModel = class extends import_eventemitter311.default {
|
|
|
30279
30298
|
dispose() {
|
|
30280
30299
|
for (const entry of this.observers.entries()) {
|
|
30281
30300
|
const [userId, observer] = entry;
|
|
30282
|
-
this.requestUserMap(userId)
|
|
30301
|
+
(0, import_forge_room9.removeObserver)(this.requestUserMap(userId), observer);
|
|
30283
30302
|
}
|
|
30284
30303
|
this.userManager.off("join", this.handleUserJoin);
|
|
30285
30304
|
this.userManager.off("leave", this.handleUserLeave);
|
|
30286
|
-
this.whiteboardAttrsMap
|
|
30287
|
-
this.pageMap
|
|
30305
|
+
(0, import_forge_room9.removeObserver)(this.whiteboardAttrsMap, this.handleMainPageChange);
|
|
30306
|
+
(0, import_forge_room9.removeObserver)(this.pageMap, this.handlePageMapChange);
|
|
30288
30307
|
}
|
|
30289
30308
|
};
|
|
30290
30309
|
|
|
@@ -30298,8 +30317,9 @@ async function waitUntil(fn, timeout) {
|
|
|
30298
30317
|
}
|
|
30299
30318
|
|
|
30300
30319
|
// src/IndexedNavigation.ts
|
|
30301
|
-
var
|
|
30302
|
-
var
|
|
30320
|
+
var import_eventemitter311 = __toESM(require("eventemitter3"), 1);
|
|
30321
|
+
var import_forge_room10 = require("@netless/forge-room");
|
|
30322
|
+
var import_forge_room11 = require("@netless/forge-room");
|
|
30303
30323
|
function _defineProperty36(e, r, t) {
|
|
30304
30324
|
return (r = _toPropertyKey36(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30305
30325
|
}
|
|
@@ -30317,7 +30337,7 @@ function _toPrimitive36(t, r) {
|
|
|
30317
30337
|
}
|
|
30318
30338
|
return ("string" === r ? String : Number)(t);
|
|
30319
30339
|
}
|
|
30320
|
-
var IndexedNavigation = class extends
|
|
30340
|
+
var IndexedNavigation = class extends import_eventemitter311.default {
|
|
30321
30341
|
get idList() {
|
|
30322
30342
|
return this.pageModel.pageList().filter((id) => /^_i_/.test(id));
|
|
30323
30343
|
}
|
|
@@ -30326,7 +30346,7 @@ var IndexedNavigation = class extends import_eventemitter312.default {
|
|
|
30326
30346
|
return this.list[key] && this.list[key].prev === "";
|
|
30327
30347
|
});
|
|
30328
30348
|
if (!headId) {
|
|
30329
|
-
(0,
|
|
30349
|
+
(0, import_forge_room10.log)("indexed navigation confusion", {
|
|
30330
30350
|
list: JSON.stringify(this.list)
|
|
30331
30351
|
}, "error");
|
|
30332
30352
|
throw new Error("indexed navigation confusion");
|
|
@@ -30428,6 +30448,9 @@ var IndexedNavigation = class extends import_eventemitter312.default {
|
|
|
30428
30448
|
const userPageId = this.userMap.get(WhiteboardKeys.currentPage);
|
|
30429
30449
|
return this.getPageIndex(userPageId);
|
|
30430
30450
|
}
|
|
30451
|
+
get currentPageId() {
|
|
30452
|
+
return this.userMap.get(WhiteboardKeys.currentPage);
|
|
30453
|
+
}
|
|
30431
30454
|
getPageIndex(pageId) {
|
|
30432
30455
|
let i = 0;
|
|
30433
30456
|
let currentId = this.head;
|
|
@@ -30598,9 +30621,7 @@ var IndexedNavigation = class extends import_eventemitter312.default {
|
|
|
30598
30621
|
if (this.pageCount <= 1) {
|
|
30599
30622
|
return this.pageCount;
|
|
30600
30623
|
}
|
|
30601
|
-
|
|
30602
|
-
if (cameraMode !== "main") {
|
|
30603
|
-
console.warn("cannot modify pages in non-main view mode.");
|
|
30624
|
+
if (!this.modifyDetect()) {
|
|
30604
30625
|
return this.pageCount;
|
|
30605
30626
|
}
|
|
30606
30627
|
const targetId = this.getPageId(index);
|
|
@@ -30641,14 +30662,14 @@ var IndexedNavigation = class extends import_eventemitter312.default {
|
|
|
30641
30662
|
}
|
|
30642
30663
|
}
|
|
30643
30664
|
dispose() {
|
|
30644
|
-
this.indexedPageMap
|
|
30665
|
+
(0, import_forge_room11.removeObserver)(this.indexedPageMap, this.handleIndexedPageMapUpdate);
|
|
30645
30666
|
this.pageModel.off("switchPage");
|
|
30646
30667
|
this.pageModel.off("pagesChange");
|
|
30647
30668
|
}
|
|
30648
30669
|
};
|
|
30649
30670
|
|
|
30650
30671
|
// src/utils/ShadowEmitter.ts
|
|
30651
|
-
var
|
|
30672
|
+
var import_eventemitter312 = __toESM(require("eventemitter3"), 1);
|
|
30652
30673
|
function _defineProperty37(e, r, t) {
|
|
30653
30674
|
return (r = _toPropertyKey37(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30654
30675
|
}
|
|
@@ -30666,7 +30687,7 @@ function _toPrimitive37(t, r) {
|
|
|
30666
30687
|
}
|
|
30667
30688
|
return ("string" === r ? String : Number)(t);
|
|
30668
30689
|
}
|
|
30669
|
-
var ShadowEmitter = class extends
|
|
30690
|
+
var ShadowEmitter = class extends import_eventemitter312.default {
|
|
30670
30691
|
constructor(userMap) {
|
|
30671
30692
|
super();
|
|
30672
30693
|
_defineProperty37(this, "userMap", void 0);
|
|
@@ -30833,6 +30854,7 @@ var SequenceExecutor = class {
|
|
|
30833
30854
|
};
|
|
30834
30855
|
|
|
30835
30856
|
// src/WhiteboardApplication.ts
|
|
30857
|
+
var import_forge_room13 = require("@netless/forge-room");
|
|
30836
30858
|
function _defineProperty41(e, r, t) {
|
|
30837
30859
|
return (r = _toPropertyKey41(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30838
30860
|
}
|
|
@@ -30851,7 +30873,7 @@ function _toPrimitive41(t, r) {
|
|
|
30851
30873
|
return ("string" === r ? String : Number)(t);
|
|
30852
30874
|
}
|
|
30853
30875
|
var WHITEBOARD_APP_NAME = "whiteboard";
|
|
30854
|
-
var WhiteboardApplication = class extends
|
|
30876
|
+
var WhiteboardApplication = class extends import_forge_room12.AbstractApplication {
|
|
30855
30877
|
get undoManager() {
|
|
30856
30878
|
const page = this.pageModel.getCurrentPage(this.userId);
|
|
30857
30879
|
if (page) {
|
|
@@ -30871,6 +30893,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
30871
30893
|
_defineProperty41(this, "pageModel", void 0);
|
|
30872
30894
|
_defineProperty41(this, "layers", /* @__PURE__ */ new Map());
|
|
30873
30895
|
_defineProperty41(this, "undoManagers", /* @__PURE__ */ new Map());
|
|
30896
|
+
_defineProperty41(this, "imageSets", document.createElement("div"));
|
|
30874
30897
|
_defineProperty41(this, "rootElement", document.createElement("div"));
|
|
30875
30898
|
_defineProperty41(this, "paperScope", new import_paper.default.PaperScope());
|
|
30876
30899
|
_defineProperty41(this, "canvasElement", document.createElement("canvas"));
|
|
@@ -30925,7 +30948,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
30925
30948
|
}
|
|
30926
30949
|
} else {
|
|
30927
30950
|
console.warn(`[@netless/forge-whiteboard] page ${pageId} not found`);
|
|
30928
|
-
(0,
|
|
30951
|
+
(0, import_forge_room12.log)(`[@netless/forge-whiteboard] page ${pageId} not found`, {}, "warning");
|
|
30929
30952
|
}
|
|
30930
30953
|
await waitUntil(() => this.undoManagers.has(pageId), 1e3);
|
|
30931
30954
|
if (this.undoManagers.has(pageId)) {
|
|
@@ -30937,7 +30960,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
30937
30960
|
this.undoManagers.get(pageId).on("stack-item-popped", this.handleStackItemPopped);
|
|
30938
30961
|
} else {
|
|
30939
30962
|
console.warn(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`);
|
|
30940
|
-
(0,
|
|
30963
|
+
(0, import_forge_room12.log)(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`, {}, "warning");
|
|
30941
30964
|
}
|
|
30942
30965
|
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30943
30966
|
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
@@ -30960,7 +30983,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
30960
30983
|
const id = ids[i];
|
|
30961
30984
|
if (!this.layers.has(id)) {
|
|
30962
30985
|
const elementsMap = this.getMap(`layer/${id}/elements`);
|
|
30963
|
-
const renderableModel = new RenderableModel(id, this.shadowEmitter, elementsMap, this.paperScope, this.toolbarModel, this.userManager, this.hasPermission);
|
|
30986
|
+
const renderableModel = new RenderableModel(id, this.shadowEmitter, elementsMap, this.paperScope, this.toolbarModel, this.userManager, this.imageSets, this.hasPermission);
|
|
30964
30987
|
this.layers.set(id, renderableModel);
|
|
30965
30988
|
}
|
|
30966
30989
|
if (!this.undoManagers.has(id)) {
|
|
@@ -31113,10 +31136,14 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31113
31136
|
this.camera.triggerZoom();
|
|
31114
31137
|
}
|
|
31115
31138
|
});
|
|
31139
|
+
window.__wb = this;
|
|
31116
31140
|
requestAnimationFrameHook(this.paperScope);
|
|
31117
31141
|
requestAnimationFrameHook(this.shadowScope);
|
|
31118
31142
|
const that = this;
|
|
31119
31143
|
this.rootElement.setAttribute("data-forge-app", "whiteboard");
|
|
31144
|
+
this.imageSets.style.display = "none";
|
|
31145
|
+
this.imageSets.setAttribute("data-image-sets", "");
|
|
31146
|
+
this.rootElement.appendChild(this.imageSets);
|
|
31120
31147
|
document.body.addEventListener("pointerdown", (evt) => {
|
|
31121
31148
|
this.isPenEvent = evt.pointerType === "pen";
|
|
31122
31149
|
if (evt.pointerType === "pen" && this.hasPenInput === null) {
|
|
@@ -31178,7 +31205,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31178
31205
|
this.emitter.setViewModeToFree = (userId) => {
|
|
31179
31206
|
if (that.disableViewModelUpdate) {
|
|
31180
31207
|
console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
|
|
31181
|
-
(0,
|
|
31208
|
+
(0, import_forge_room12.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warning");
|
|
31182
31209
|
return;
|
|
31183
31210
|
}
|
|
31184
31211
|
const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
|
|
@@ -31189,7 +31216,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31189
31216
|
this.emitter.setViewModeToFlow = (flowId, userId) => {
|
|
31190
31217
|
if (that.disableViewModelUpdate) {
|
|
31191
31218
|
console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
|
|
31192
|
-
(0,
|
|
31219
|
+
(0, import_forge_room12.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warning");
|
|
31193
31220
|
return;
|
|
31194
31221
|
}
|
|
31195
31222
|
const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
|
|
@@ -31204,7 +31231,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31204
31231
|
this.emitter.setViewModeToMain = (userId) => {
|
|
31205
31232
|
if (that.disableViewModelUpdate) {
|
|
31206
31233
|
console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
|
|
31207
|
-
(0,
|
|
31234
|
+
(0, import_forge_room12.log)("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warning");
|
|
31208
31235
|
return;
|
|
31209
31236
|
}
|
|
31210
31237
|
const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
|
|
@@ -31216,6 +31243,30 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31216
31243
|
this.camera.resetViewMatrixToMain();
|
|
31217
31244
|
}
|
|
31218
31245
|
};
|
|
31246
|
+
this.emitter.insertImage = (src, pageId) => {
|
|
31247
|
+
if (!/https/.test(src)) {
|
|
31248
|
+
(0, import_forge_room12.log)("[@netless/forge-whiteboard] invalid image url, src needs to be in the HTTPS protocol.", {
|
|
31249
|
+
src
|
|
31250
|
+
}, "warning");
|
|
31251
|
+
return;
|
|
31252
|
+
}
|
|
31253
|
+
let targetPageId = pageId;
|
|
31254
|
+
if (!targetPageId) {
|
|
31255
|
+
targetPageId = this.pageModel.getCurrentPage(this.userManager.selfId);
|
|
31256
|
+
}
|
|
31257
|
+
if (!targetPageId) {
|
|
31258
|
+
(0, import_forge_room12.log)("[@netless/forge-whiteboard] page not found", {}, "warning");
|
|
31259
|
+
return;
|
|
31260
|
+
}
|
|
31261
|
+
this.layers.get(targetPageId)?.createImage(src);
|
|
31262
|
+
};
|
|
31263
|
+
this.emitter.removeElement = (pageId, elementId) => {
|
|
31264
|
+
if (!this.layers.has(pageId)) {
|
|
31265
|
+
(0, import_forge_room12.log)("[@netless/forge-whiteboard] page not found", {}, "warning");
|
|
31266
|
+
return;
|
|
31267
|
+
}
|
|
31268
|
+
this.layers.get(pageId)?.removeElementItem(elementId);
|
|
31269
|
+
};
|
|
31219
31270
|
this.emitter.getViewModel = (userId) => {
|
|
31220
31271
|
const targetId = userId ? userId : this.userId;
|
|
31221
31272
|
return this.userMap(targetId).get(WhiteboardKeys.cameraMode);
|
|
@@ -31231,7 +31282,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31231
31282
|
const source = this.getMap(`layer/${sourceId}/elements`);
|
|
31232
31283
|
const target = this.getMap(`layer/${targetId}/elements`);
|
|
31233
31284
|
if (!this.layers.has(targetId)) {
|
|
31234
|
-
this.layers.set(targetId, new RenderableModel(targetId, this.shadowEmitter, target, this.paperScope, this.toolbarModel, this.userManager, this.hasPermission));
|
|
31285
|
+
this.layers.set(targetId, new RenderableModel(targetId, this.shadowEmitter, target, this.paperScope, this.toolbarModel, this.userManager, this.imageSets, this.hasPermission));
|
|
31235
31286
|
}
|
|
31236
31287
|
if (!this.undoManagers.has(targetId)) {
|
|
31237
31288
|
const undoManager = new Y15.UndoManager(target, {
|
|
@@ -31282,7 +31333,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31282
31333
|
this.camera.reset();
|
|
31283
31334
|
};
|
|
31284
31335
|
this.emitter.on("error", (errorCode, errorMessage) => {
|
|
31285
|
-
(0,
|
|
31336
|
+
(0, import_forge_room12.log)("WhiteboardApplicationError", {
|
|
31286
31337
|
errorCode,
|
|
31287
31338
|
errorMessage
|
|
31288
31339
|
});
|
|
@@ -31383,6 +31434,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31383
31434
|
this.permissions = new WhiteboardPermissions(this.userManager, (userId) => {
|
|
31384
31435
|
return this.userMap(userId);
|
|
31385
31436
|
});
|
|
31437
|
+
this.permissions.setPermission(WhiteboardPermissionFlag.all);
|
|
31386
31438
|
this.emitter["permissions"] = this.permissions;
|
|
31387
31439
|
this.emitter["selfUserId"] = this.userId;
|
|
31388
31440
|
this.option = option;
|
|
@@ -31465,7 +31517,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31465
31517
|
this.paperScope.tool = this.tools[this.toolbarModel.currentTool].tool;
|
|
31466
31518
|
} else {
|
|
31467
31519
|
this.paperScope.tool = this.tools["curve"].tool;
|
|
31468
|
-
(0,
|
|
31520
|
+
(0, import_forge_room12.log)(`${this.toolbarModel.currentTool} not supported, backup to curve`);
|
|
31469
31521
|
}
|
|
31470
31522
|
this.selectElementsModel.on("elementsChange", this.handleElementsSelect);
|
|
31471
31523
|
this.trashedElementsModel.on("elementsChange", this.handleElementsTrash);
|
|
@@ -31710,7 +31762,7 @@ var WhiteboardApplication = class extends import_forge_room3.AbstractApplication
|
|
|
31710
31762
|
}
|
|
31711
31763
|
unlink() {
|
|
31712
31764
|
if (this.linkTarget) {
|
|
31713
|
-
this.linkTarget
|
|
31765
|
+
(0, import_forge_room13.removeObserver)(this.linkTarget, this.handleLinkedMapChange);
|
|
31714
31766
|
}
|
|
31715
31767
|
}
|
|
31716
31768
|
setViewSize(width, height) {
|