@netless/forge-whiteboard 0.1.14 → 0.1.15
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 +7 -5
- package/dist/Camera.d.ts.map +1 -1
- package/dist/Gesture.d.ts +1 -1
- package/dist/Gesture.d.ts.map +1 -1
- package/dist/IndexedNavigation.d.ts +30 -29
- package/dist/IndexedNavigation.d.ts.map +1 -1
- package/dist/SequenceExecutor.d.ts +7 -0
- package/dist/SequenceExecutor.d.ts.map +1 -0
- package/dist/WhitePermissions.d.ts +26 -25
- package/dist/WhitePermissions.d.ts.map +1 -1
- package/dist/Whiteboard.d.ts +106 -106
- package/dist/Whiteboard.d.ts.map +1 -1
- package/dist/WhiteboardApplication.d.ts +6 -4
- package/dist/WhiteboardApplication.d.ts.map +1 -1
- package/dist/edit/Editor.d.ts +5 -5
- package/dist/edit/Editor.d.ts.map +1 -1
- package/dist/edit/EditorConfig.d.ts +1 -1
- package/dist/edit/EditorConfig.d.ts.map +1 -1
- package/dist/edit/TextEditor.d.ts +2 -2
- package/dist/edit/TextEditor.d.ts.map +1 -1
- package/dist/index.d.ts +6 -6
- package/dist/model/PageModel.d.ts +5 -4
- package/dist/model/PageModel.d.ts.map +1 -1
- package/dist/model/RenderableModel.d.ts +19 -19
- package/dist/model/RenderableModel.d.ts.map +1 -1
- package/dist/model/SelectElementsModel.d.ts +4 -4
- package/dist/model/SelectElementsModel.d.ts.map +1 -1
- package/dist/model/ToolbarModel.d.ts +4 -3
- package/dist/model/ToolbarModel.d.ts.map +1 -1
- package/dist/model/TrashedElementsModel.d.ts +4 -4
- package/dist/model/TrashedElementsModel.d.ts.map +1 -1
- package/dist/model/renderable/CurveModel.d.ts +4 -3
- package/dist/model/renderable/CurveModel.d.ts.map +1 -1
- package/dist/model/renderable/ElementModel.d.ts +5 -3
- package/dist/model/renderable/ElementModel.d.ts.map +1 -1
- package/dist/model/renderable/EraserModel.d.ts +5 -4
- package/dist/model/renderable/EraserModel.d.ts.map +1 -1
- package/dist/model/renderable/LaserPointerModel.d.ts +5 -4
- package/dist/model/renderable/LaserPointerModel.d.ts.map +1 -1
- package/dist/model/renderable/LineModel.d.ts +9 -8
- package/dist/model/renderable/LineModel.d.ts.map +1 -1
- package/dist/model/renderable/PointTextModel.d.ts +4 -3
- package/dist/model/renderable/PointTextModel.d.ts.map +1 -1
- package/dist/model/renderable/RectangleModel.d.ts +5 -4
- package/dist/model/renderable/RectangleModel.d.ts.map +1 -1
- package/dist/model/renderable/SegmentsModel.d.ts +6 -5
- package/dist/model/renderable/SegmentsModel.d.ts.map +1 -1
- package/dist/model/renderable/SelectorModel.d.ts +5 -4
- package/dist/model/renderable/SelectorModel.d.ts.map +1 -1
- package/dist/model/renderable/StraightLineModel.d.ts +5 -4
- package/dist/model/renderable/StraightLineModel.d.ts.map +1 -1
- package/dist/model/renderable/TriangleModel.d.ts +5 -4
- package/dist/model/renderable/TriangleModel.d.ts.map +1 -1
- package/dist/tool/CurveTool.d.ts +4 -4
- package/dist/tool/CurveTool.d.ts.map +1 -1
- package/dist/tool/EllipseTool.d.ts +4 -4
- package/dist/tool/EllipseTool.d.ts.map +1 -1
- package/dist/tool/EraserTool.d.ts +6 -6
- package/dist/tool/EraserTool.d.ts.map +1 -1
- package/dist/tool/GrabTool.d.ts +4 -4
- package/dist/tool/GrabTool.d.ts.map +1 -1
- package/dist/tool/LaserPointerTool.d.ts +5 -5
- package/dist/tool/LaserPointerTool.d.ts.map +1 -1
- package/dist/tool/LineTool.d.ts +4 -4
- package/dist/tool/LineTool.d.ts.map +1 -1
- package/dist/tool/PointerTool.d.ts +10 -0
- package/dist/tool/PointerTool.d.ts.map +1 -0
- package/dist/tool/RectangleTool.d.ts +4 -4
- package/dist/tool/RectangleTool.d.ts.map +1 -1
- package/dist/tool/SelectorTool.d.ts +5 -5
- package/dist/tool/SelectorTool.d.ts.map +1 -1
- package/dist/tool/StraightLineTool.d.ts +4 -4
- package/dist/tool/StraightLineTool.d.ts.map +1 -1
- package/dist/tool/TextTool.d.ts +6 -6
- package/dist/tool/TextTool.d.ts.map +1 -1
- package/dist/tool/TriangleTool.d.ts +4 -4
- package/dist/tool/TriangleTool.d.ts.map +1 -1
- package/dist/tool/WhiteboardTool.d.ts +2 -2
- package/dist/tool/WhiteboardTool.d.ts.map +1 -1
- package/dist/utils/Recognizer.d.ts +1 -1
- package/dist/utils/Recognizer.d.ts.map +1 -1
- package/dist/utils/ShadowEmitter.d.ts +2 -2
- package/dist/utils/ShadowEmitter.d.ts.map +1 -1
- package/dist/utils/async.d.ts.map +1 -1
- package/dist/whiteboard.esm.js +381 -171
- package/dist/whiteboard.esm.js.map +4 -4
- package/dist/whiteboard.js +381 -171
- package/dist/whiteboard.js.map +4 -4
- package/package.json +4 -3
package/dist/whiteboard.esm.js
CHANGED
|
@@ -25708,6 +25708,10 @@ var ElementModel = class _ElementModel {
|
|
|
25708
25708
|
const ext = this.styleKeys();
|
|
25709
25709
|
return Array.from(new Set(["dashArray", "strokeColor", "fillColor", "strokeWidth"].filter((v) => ext.exclude.indexOf(v) < 0).concat(ext.include)));
|
|
25710
25710
|
}
|
|
25711
|
+
dispose() {
|
|
25712
|
+
this.subDispose();
|
|
25713
|
+
this.root.unobserveDeep(this.handlePropChange);
|
|
25714
|
+
}
|
|
25711
25715
|
};
|
|
25712
25716
|
_defineProperty(ElementModel, "KEYS", {
|
|
25713
25717
|
index: "index",
|
|
@@ -25888,6 +25892,8 @@ var CurveModel = class extends ElementModel {
|
|
|
25888
25892
|
this.item.fillColor = new this.scope.Color(this.strokeColor);
|
|
25889
25893
|
}
|
|
25890
25894
|
}
|
|
25895
|
+
subDispose() {
|
|
25896
|
+
}
|
|
25891
25897
|
};
|
|
25892
25898
|
|
|
25893
25899
|
// src/model/renderable/SelectorModel.ts
|
|
@@ -25922,14 +25928,12 @@ var SelectorModel = class extends ElementModel {
|
|
|
25922
25928
|
this.root.set("points", initPoints);
|
|
25923
25929
|
}
|
|
25924
25930
|
}
|
|
25931
|
+
subDispose() {
|
|
25932
|
+
}
|
|
25925
25933
|
createPaperRect() {
|
|
25926
25934
|
const scope = this.scope;
|
|
25927
25935
|
const bounds = new scope.Rectangle(new scope.Point(this.points[0], this.points[1]), new scope.Size(this.points[2], this.points[3]));
|
|
25928
|
-
return new scope.Path.Rectangle(
|
|
25929
|
-
bounds,
|
|
25930
|
-
new scope.Point(this.points[4], this.points[4])
|
|
25931
|
-
// 圆角
|
|
25932
|
-
);
|
|
25936
|
+
return new scope.Path.Rectangle(bounds, new scope.Point(this.points[4], this.points[4]));
|
|
25933
25937
|
}
|
|
25934
25938
|
onVectorUpdate() {
|
|
25935
25939
|
if (!this.item) {
|
|
@@ -25955,7 +25959,7 @@ var SelectorModel = class extends ElementModel {
|
|
|
25955
25959
|
exclude: []
|
|
25956
25960
|
};
|
|
25957
25961
|
}
|
|
25958
|
-
onStyleKeyUpdate(
|
|
25962
|
+
onStyleKeyUpdate(_key) {
|
|
25959
25963
|
}
|
|
25960
25964
|
};
|
|
25961
25965
|
|
|
@@ -26007,7 +26011,7 @@ var AnimationFrame = class {
|
|
|
26007
26011
|
_defineProperty5(this, "lastTime", 0);
|
|
26008
26012
|
_defineProperty5(this, "fps", 45);
|
|
26009
26013
|
_defineProperty5(this, "handleCallbacks", () => {
|
|
26010
|
-
|
|
26014
|
+
const functions = this.callbacks;
|
|
26011
26015
|
this.callbacks = [];
|
|
26012
26016
|
for (let i = 0, l2 = functions.length; i < l2; i++) {
|
|
26013
26017
|
functions[i]();
|
|
@@ -26060,6 +26064,8 @@ var SegmentsModel = class extends ElementModel {
|
|
|
26060
26064
|
this.root.set("points", new Y4.Array());
|
|
26061
26065
|
}
|
|
26062
26066
|
}
|
|
26067
|
+
subDispose() {
|
|
26068
|
+
}
|
|
26063
26069
|
onVectorUpdate() {
|
|
26064
26070
|
if (!this.item) {
|
|
26065
26071
|
return;
|
|
@@ -26094,7 +26100,7 @@ var SegmentsModel = class extends ElementModel {
|
|
|
26094
26100
|
exclude: []
|
|
26095
26101
|
};
|
|
26096
26102
|
}
|
|
26097
|
-
onStyleKeyUpdate(
|
|
26103
|
+
onStyleKeyUpdate(_key) {
|
|
26098
26104
|
}
|
|
26099
26105
|
};
|
|
26100
26106
|
|
|
@@ -26188,6 +26194,9 @@ var LineTool = class extends WhiteboardTool {
|
|
|
26188
26194
|
this.tool.minDistance = 1;
|
|
26189
26195
|
}
|
|
26190
26196
|
onMouseDown(event) {
|
|
26197
|
+
if (this.elementModel) {
|
|
26198
|
+
this.elementModel.dispose();
|
|
26199
|
+
}
|
|
26191
26200
|
this.elementModel = this.modelGetter().createLinePath(true);
|
|
26192
26201
|
this.from = event.point.clone();
|
|
26193
26202
|
this.to = event.point.clone();
|
|
@@ -26263,6 +26272,8 @@ var LineModel = class extends ElementModel {
|
|
|
26263
26272
|
this.root.set("tailArrow", "normal");
|
|
26264
26273
|
}
|
|
26265
26274
|
}
|
|
26275
|
+
subDispose() {
|
|
26276
|
+
}
|
|
26266
26277
|
onVectorUpdate() {
|
|
26267
26278
|
if (!this.item) {
|
|
26268
26279
|
return;
|
|
@@ -26299,7 +26310,7 @@ var LineModel = class extends ElementModel {
|
|
|
26299
26310
|
this.item.addChildren(this.renderLine());
|
|
26300
26311
|
}
|
|
26301
26312
|
createArrow(path) {
|
|
26302
|
-
|
|
26313
|
+
const [headPath, tailPath] = [new this.scope.Path(), new this.scope.Path()];
|
|
26303
26314
|
if (!path) {
|
|
26304
26315
|
return [headPath, tailPath];
|
|
26305
26316
|
}
|
|
@@ -26353,7 +26364,7 @@ var LineModel = class extends ElementModel {
|
|
|
26353
26364
|
exclude: ["fillColor"]
|
|
26354
26365
|
};
|
|
26355
26366
|
}
|
|
26356
|
-
onStyleKeyUpdate(
|
|
26367
|
+
onStyleKeyUpdate(_key) {
|
|
26357
26368
|
this.onVectorUpdate();
|
|
26358
26369
|
}
|
|
26359
26370
|
};
|
|
@@ -26476,6 +26487,9 @@ var PointTextModel = class extends ElementModel {
|
|
|
26476
26487
|
}, 60);
|
|
26477
26488
|
}
|
|
26478
26489
|
}
|
|
26490
|
+
subDispose() {
|
|
26491
|
+
this.root.unobserve(this.handleTextPropChange);
|
|
26492
|
+
}
|
|
26479
26493
|
getInternalMeasurement() {
|
|
26480
26494
|
if (!this.item) {
|
|
26481
26495
|
return null;
|
|
@@ -26581,6 +26595,8 @@ var TriangleModel = class extends ElementModel {
|
|
|
26581
26595
|
this.root.set("points", new Y7.Array());
|
|
26582
26596
|
}
|
|
26583
26597
|
}
|
|
26598
|
+
subDispose() {
|
|
26599
|
+
}
|
|
26584
26600
|
createPaperItem() {
|
|
26585
26601
|
this.item = new this.scope.Path();
|
|
26586
26602
|
this.item.strokeCap = "butt";
|
|
@@ -26637,7 +26653,7 @@ var TriangleModel = class extends ElementModel {
|
|
|
26637
26653
|
exclude: []
|
|
26638
26654
|
};
|
|
26639
26655
|
}
|
|
26640
|
-
onStyleKeyUpdate(
|
|
26656
|
+
onStyleKeyUpdate(_key) {
|
|
26641
26657
|
}
|
|
26642
26658
|
};
|
|
26643
26659
|
|
|
@@ -26676,6 +26692,8 @@ var RectangleModel = class extends ElementModel {
|
|
|
26676
26692
|
this.root.set("radius", 0);
|
|
26677
26693
|
}
|
|
26678
26694
|
}
|
|
26695
|
+
subDispose() {
|
|
26696
|
+
}
|
|
26679
26697
|
createSegments() {
|
|
26680
26698
|
const [a2, b2, c, d] = this.points;
|
|
26681
26699
|
const matrix = new this.scope.Matrix(this.pointsMatrix);
|
|
@@ -26807,7 +26825,7 @@ var RectangleModel = class extends ElementModel {
|
|
|
26807
26825
|
exclude: []
|
|
26808
26826
|
};
|
|
26809
26827
|
}
|
|
26810
|
-
onStyleKeyUpdate(
|
|
26828
|
+
onStyleKeyUpdate(_key) {
|
|
26811
26829
|
}
|
|
26812
26830
|
};
|
|
26813
26831
|
|
|
@@ -26948,9 +26966,11 @@ var EraserModel = class extends ElementModel {
|
|
|
26948
26966
|
exclude: []
|
|
26949
26967
|
};
|
|
26950
26968
|
}
|
|
26951
|
-
onStyleKeyUpdate(
|
|
26969
|
+
onStyleKeyUpdate(_key) {
|
|
26952
26970
|
return;
|
|
26953
26971
|
}
|
|
26972
|
+
subDispose() {
|
|
26973
|
+
}
|
|
26954
26974
|
};
|
|
26955
26975
|
|
|
26956
26976
|
// src/model/renderable/LaserPointerModel.ts
|
|
@@ -27107,9 +27127,11 @@ var LaserPointerModel = class extends ElementModel {
|
|
|
27107
27127
|
exclude: []
|
|
27108
27128
|
};
|
|
27109
27129
|
}
|
|
27110
|
-
onStyleKeyUpdate(
|
|
27130
|
+
onStyleKeyUpdate(_key) {
|
|
27111
27131
|
return;
|
|
27112
27132
|
}
|
|
27133
|
+
subDispose() {
|
|
27134
|
+
}
|
|
27113
27135
|
};
|
|
27114
27136
|
|
|
27115
27137
|
// src/WhitePermissions.ts
|
|
@@ -27174,6 +27196,9 @@ var WhiteboardPermissions = class extends EventEmitter {
|
|
|
27174
27196
|
const observer = (evt) => {
|
|
27175
27197
|
this.handleUserPermissionChange(userId, evt);
|
|
27176
27198
|
};
|
|
27199
|
+
if (this.observers.has(userId)) {
|
|
27200
|
+
this.requestUserMap(userId).unobserve(this.observers.get(userId));
|
|
27201
|
+
}
|
|
27177
27202
|
this.observers.set(userId, observer);
|
|
27178
27203
|
this.requestUserMap(userId).observe(observer);
|
|
27179
27204
|
}
|
|
@@ -27194,56 +27219,64 @@ var WhiteboardPermissions = class extends EventEmitter {
|
|
|
27194
27219
|
}
|
|
27195
27220
|
}
|
|
27196
27221
|
/**
|
|
27197
|
-
|
|
27198
|
-
|
|
27199
|
-
|
|
27200
|
-
|
|
27222
|
+
* 解析权限列表组合
|
|
27223
|
+
* @param {number} value - 权限数字值
|
|
27224
|
+
* @return {WhiteboardPermissionFlag[]} - 权限列表
|
|
27225
|
+
*/
|
|
27201
27226
|
resolveFlags(value) {
|
|
27202
27227
|
return [WhiteboardPermissionFlag.draw, WhiteboardPermissionFlag.editSelf, WhiteboardPermissionFlag.editOthers, WhiteboardPermissionFlag.deleteSelf, WhiteboardPermissionFlag.deleteOthers, WhiteboardPermissionFlag.mainView, WhiteboardPermissionFlag.setOthersView].filter((v) => (v & value) !== 0);
|
|
27203
27228
|
}
|
|
27204
27229
|
/**
|
|
27205
|
-
|
|
27206
|
-
|
|
27207
|
-
|
|
27230
|
+
* 获取权限列表组合对应的数值
|
|
27231
|
+
* @param { string } userId 不传表示获取自己
|
|
27232
|
+
*/
|
|
27208
27233
|
getPermissionValue(userId) {
|
|
27209
27234
|
return this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
|
|
27210
27235
|
}
|
|
27211
27236
|
/**
|
|
27212
|
-
|
|
27213
|
-
|
|
27214
|
-
|
|
27237
|
+
* 获取权限列表
|
|
27238
|
+
* @param {string=} userId 可选, 不传表示获取自己
|
|
27239
|
+
*/
|
|
27215
27240
|
getPermissionFlags(userId) {
|
|
27216
27241
|
const value = this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
|
|
27217
27242
|
return this.resolveFlags(value);
|
|
27218
27243
|
}
|
|
27219
27244
|
/**
|
|
27220
|
-
|
|
27221
|
-
|
|
27222
|
-
|
|
27223
|
-
|
|
27245
|
+
* 返回对应 userId 是否有相应权限
|
|
27246
|
+
* @param {string=} userId 可选, 不传表示返回自己是否有相应权限
|
|
27247
|
+
* @param {WhiteboardPermissionFlag} flag
|
|
27248
|
+
*/
|
|
27224
27249
|
hasPermission(flag, userId) {
|
|
27225
27250
|
return ((this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0) & flag) !== 0;
|
|
27226
27251
|
}
|
|
27227
27252
|
/**
|
|
27228
|
-
|
|
27229
|
-
|
|
27230
|
-
|
|
27231
|
-
|
|
27253
|
+
* 添加权限
|
|
27254
|
+
* @param {WhiteboardPermissionFlag} flag 权限标记
|
|
27255
|
+
* @param {string=} userId 可选, 为 userId 添加权限, 不传表示为自己添加权限
|
|
27256
|
+
*/
|
|
27232
27257
|
addPermission(flag, userId) {
|
|
27233
27258
|
const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
|
|
27234
27259
|
const oldValue = userMap.get("permission") ?? 0;
|
|
27235
27260
|
this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue | flag);
|
|
27236
27261
|
}
|
|
27237
27262
|
/**
|
|
27238
|
-
|
|
27239
|
-
|
|
27240
|
-
|
|
27241
|
-
|
|
27263
|
+
* 移除权限
|
|
27264
|
+
* @param {WhiteboardPermissionFlag} flag 权限标记
|
|
27265
|
+
* @param {string=} userId 可选, 为 userId 移除权限, 不传表示为自己移除权限
|
|
27266
|
+
*/
|
|
27242
27267
|
removePermission(flag, userId) {
|
|
27243
27268
|
const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
|
|
27244
27269
|
const oldValue = userMap.get("permission") ?? 0;
|
|
27245
27270
|
this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue & ~flag);
|
|
27246
27271
|
}
|
|
27272
|
+
dispose() {
|
|
27273
|
+
this.userManager.off("join", this.handleUserJoin);
|
|
27274
|
+
this.userManager.off("leave", this.handleUserLeave);
|
|
27275
|
+
this.observers.forEach((cb, userId) => {
|
|
27276
|
+
this.requestUserMap(userId).unobserve(cb);
|
|
27277
|
+
});
|
|
27278
|
+
this.observers.clear();
|
|
27279
|
+
}
|
|
27247
27280
|
};
|
|
27248
27281
|
|
|
27249
27282
|
// src/model/renderable/StraightLineModel.ts
|
|
@@ -27277,6 +27310,8 @@ var StraightLineModel = class extends ElementModel {
|
|
|
27277
27310
|
this.root.set("points", new Y11.Array());
|
|
27278
27311
|
}
|
|
27279
27312
|
}
|
|
27313
|
+
subDispose() {
|
|
27314
|
+
}
|
|
27280
27315
|
onVectorUpdate() {
|
|
27281
27316
|
if (!this.item) {
|
|
27282
27317
|
return;
|
|
@@ -27350,7 +27385,7 @@ var StraightLineModel = class extends ElementModel {
|
|
|
27350
27385
|
exclude: ["fillColor"]
|
|
27351
27386
|
};
|
|
27352
27387
|
}
|
|
27353
|
-
onStyleKeyUpdate(
|
|
27388
|
+
onStyleKeyUpdate(_key) {
|
|
27354
27389
|
if (!this.item) {
|
|
27355
27390
|
return;
|
|
27356
27391
|
}
|
|
@@ -27572,7 +27607,7 @@ var RenderableModel = class extends EventEmitter2 {
|
|
|
27572
27607
|
return segmentsModel;
|
|
27573
27608
|
}
|
|
27574
27609
|
createSelector() {
|
|
27575
|
-
let
|
|
27610
|
+
let _shadow = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
|
|
27576
27611
|
if (!this.hasPermission(WhiteboardPermissionFlag.editSelf) && !this.hasPermission(WhiteboardPermissionFlag.deleteOthers)) {
|
|
27577
27612
|
return null;
|
|
27578
27613
|
}
|
|
@@ -27629,7 +27664,11 @@ var RenderableModel = class extends EventEmitter2 {
|
|
|
27629
27664
|
});
|
|
27630
27665
|
}
|
|
27631
27666
|
dispose() {
|
|
27667
|
+
this.elements.unobserve(this.onElementsChange);
|
|
27632
27668
|
this.elements.clear();
|
|
27669
|
+
Array.from(this.elementModels.values()).forEach((model) => {
|
|
27670
|
+
model.dispose();
|
|
27671
|
+
});
|
|
27633
27672
|
}
|
|
27634
27673
|
};
|
|
27635
27674
|
|
|
@@ -27672,10 +27711,10 @@ var AnglePrecision = Deg2Rad(2);
|
|
|
27672
27711
|
var Phi = 0.5 * (-1 + Math.sqrt(5));
|
|
27673
27712
|
function DollarRecognizer() {
|
|
27674
27713
|
this.Unistrokes = new Array(3);
|
|
27675
|
-
this.Unistrokes[0] = new Unistroke("triangle", new
|
|
27676
|
-
this.Unistrokes[1] = new Unistroke("rectangle", new
|
|
27677
|
-
this.Unistrokes[2] = new Unistroke("circle", new
|
|
27678
|
-
this.Unistrokes[3] = new Unistroke("arrow", new
|
|
27714
|
+
this.Unistrokes[0] = new Unistroke("triangle", [new Point(137, 139), new Point(135, 141), new Point(133, 144), new Point(132, 146), new Point(130, 149), new Point(128, 151), new Point(126, 155), new Point(123, 160), new Point(120, 166), new Point(116, 171), new Point(112, 177), new Point(107, 183), new Point(102, 188), new Point(100, 191), new Point(95, 195), new Point(90, 199), new Point(86, 203), new Point(82, 206), new Point(80, 209), new Point(75, 213), new Point(73, 213), new Point(70, 216), new Point(67, 219), new Point(64, 221), new Point(61, 223), new Point(60, 225), new Point(62, 226), new Point(65, 225), new Point(67, 226), new Point(74, 226), new Point(77, 227), new Point(85, 229), new Point(91, 230), new Point(99, 231), new Point(108, 232), new Point(116, 233), new Point(125, 233), new Point(134, 234), new Point(145, 233), new Point(153, 232), new Point(160, 233), new Point(170, 234), new Point(177, 235), new Point(179, 236), new Point(186, 237), new Point(193, 238), new Point(198, 239), new Point(200, 237), new Point(202, 239), new Point(204, 238), new Point(206, 234), new Point(205, 230), new Point(202, 222), new Point(197, 216), new Point(192, 207), new Point(186, 198), new Point(179, 189), new Point(174, 183), new Point(170, 178), new Point(164, 171), new Point(161, 168), new Point(154, 160), new Point(148, 155), new Point(143, 150), new Point(138, 148), new Point(136, 148)]);
|
|
27715
|
+
this.Unistrokes[1] = new Unistroke("rectangle", [new Point(78, 149), new Point(78, 153), new Point(78, 157), new Point(78, 160), new Point(79, 162), new Point(79, 164), new Point(79, 167), new Point(79, 169), new Point(79, 173), new Point(79, 178), new Point(79, 183), new Point(80, 189), new Point(80, 193), new Point(80, 198), new Point(80, 202), new Point(81, 208), new Point(81, 210), new Point(81, 216), new Point(82, 222), new Point(82, 224), new Point(82, 227), new Point(83, 229), new Point(83, 231), new Point(85, 230), new Point(88, 232), new Point(90, 233), new Point(92, 232), new Point(94, 233), new Point(99, 232), new Point(102, 233), new Point(106, 233), new Point(109, 234), new Point(117, 235), new Point(123, 236), new Point(126, 236), new Point(135, 237), new Point(142, 238), new Point(145, 238), new Point(152, 238), new Point(154, 239), new Point(165, 238), new Point(174, 237), new Point(179, 236), new Point(186, 235), new Point(191, 235), new Point(195, 233), new Point(197, 233), new Point(200, 233), new Point(201, 235), new Point(201, 233), new Point(199, 231), new Point(198, 226), new Point(198, 220), new Point(196, 207), new Point(195, 195), new Point(195, 181), new Point(195, 173), new Point(195, 163), new Point(194, 155), new Point(192, 145), new Point(192, 143), new Point(192, 138), new Point(191, 135), new Point(191, 133), new Point(191, 130), new Point(190, 128), new Point(188, 129), new Point(186, 129), new Point(181, 132), new Point(173, 131), new Point(162, 131), new Point(151, 132), new Point(149, 132), new Point(138, 132), new Point(136, 132), new Point(122, 131), new Point(120, 131), new Point(109, 130), new Point(107, 130), new Point(90, 132), new Point(81, 133), new Point(76, 133)]);
|
|
27716
|
+
this.Unistrokes[2] = new Unistroke("circle", [new Point(127, 141), new Point(124, 140), new Point(120, 139), new Point(118, 139), new Point(116, 139), new Point(111, 140), new Point(109, 141), new Point(104, 144), new Point(100, 147), new Point(96, 152), new Point(93, 157), new Point(90, 163), new Point(87, 169), new Point(85, 175), new Point(83, 181), new Point(82, 190), new Point(82, 195), new Point(83, 200), new Point(84, 205), new Point(88, 213), new Point(91, 216), new Point(96, 219), new Point(103, 222), new Point(108, 224), new Point(111, 224), new Point(120, 224), new Point(133, 223), new Point(142, 222), new Point(152, 218), new Point(160, 214), new Point(167, 210), new Point(173, 204), new Point(178, 198), new Point(179, 196), new Point(182, 188), new Point(182, 177), new Point(178, 167), new Point(170, 150), new Point(163, 138), new Point(152, 130), new Point(143, 129), new Point(140, 131), new Point(129, 136), new Point(126, 139)]);
|
|
27717
|
+
this.Unistrokes[3] = new Unistroke("arrow", [new Point(68, 222), new Point(70, 220), new Point(73, 218), new Point(75, 217), new Point(77, 215), new Point(80, 213), new Point(82, 212), new Point(84, 210), new Point(87, 209), new Point(89, 208), new Point(92, 206), new Point(95, 204), new Point(101, 201), new Point(106, 198), new Point(112, 194), new Point(118, 191), new Point(124, 187), new Point(127, 186), new Point(132, 183), new Point(138, 181), new Point(141, 180), new Point(146, 178), new Point(154, 173), new Point(159, 171), new Point(161, 170), new Point(166, 167), new Point(168, 167), new Point(171, 166), new Point(174, 164), new Point(177, 162), new Point(180, 160), new Point(182, 158), new Point(183, 156), new Point(181, 154), new Point(178, 153), new Point(171, 153), new Point(164, 153), new Point(160, 153), new Point(150, 154), new Point(147, 155), new Point(141, 157), new Point(137, 158), new Point(135, 158), new Point(137, 158), new Point(140, 157), new Point(143, 156), new Point(151, 154), new Point(160, 152), new Point(170, 149), new Point(179, 147), new Point(185, 145), new Point(192, 144), new Point(196, 144), new Point(198, 144), new Point(200, 144), new Point(201, 147), new Point(199, 149), new Point(194, 157), new Point(191, 160), new Point(186, 167), new Point(180, 176), new Point(177, 179), new Point(171, 187), new Point(169, 189), new Point(165, 194), new Point(164, 196)]);
|
|
27679
27718
|
this.Recognize = function(points, useProtractor) {
|
|
27680
27719
|
var t0 = Date.now();
|
|
27681
27720
|
var candidate = new Unistroke("", points);
|
|
@@ -27736,7 +27775,7 @@ function RotateBy(points, radians) {
|
|
|
27736
27775
|
var c = Centroid(points);
|
|
27737
27776
|
var cos = Math.cos(radians);
|
|
27738
27777
|
var sin = Math.sin(radians);
|
|
27739
|
-
var newpoints =
|
|
27778
|
+
var newpoints = [];
|
|
27740
27779
|
for (var i = 0; i < points.length; i++) {
|
|
27741
27780
|
var qx = (points[i].X - c.X) * cos - (points[i].Y - c.Y) * sin + c.X;
|
|
27742
27781
|
var qy = (points[i].X - c.X) * sin + (points[i].Y - c.Y) * cos + c.Y;
|
|
@@ -27746,7 +27785,7 @@ function RotateBy(points, radians) {
|
|
|
27746
27785
|
}
|
|
27747
27786
|
function ScaleTo(points, size) {
|
|
27748
27787
|
var B2 = BoundingBox(points);
|
|
27749
|
-
var newpoints =
|
|
27788
|
+
var newpoints = [];
|
|
27750
27789
|
for (var i = 0; i < points.length; i++) {
|
|
27751
27790
|
var qx = points[i].X * (size / B2.Width);
|
|
27752
27791
|
var qy = points[i].Y * (size / B2.Height);
|
|
@@ -27756,7 +27795,7 @@ function ScaleTo(points, size) {
|
|
|
27756
27795
|
}
|
|
27757
27796
|
function TranslateTo(points, pt) {
|
|
27758
27797
|
var c = Centroid(points);
|
|
27759
|
-
var newpoints =
|
|
27798
|
+
var newpoints = [];
|
|
27760
27799
|
for (var i = 0; i < points.length; i++) {
|
|
27761
27800
|
var qx = points[i].X + pt.X - c.X;
|
|
27762
27801
|
var qy = points[i].Y + pt.Y - c.Y;
|
|
@@ -27766,14 +27805,14 @@ function TranslateTo(points, pt) {
|
|
|
27766
27805
|
}
|
|
27767
27806
|
function Vectorize(points) {
|
|
27768
27807
|
var sum = 0;
|
|
27769
|
-
var vector =
|
|
27770
|
-
for (
|
|
27808
|
+
var vector = [];
|
|
27809
|
+
for (let i = 0; i < points.length; i++) {
|
|
27771
27810
|
vector[vector.length] = points[i].X;
|
|
27772
27811
|
vector[vector.length] = points[i].Y;
|
|
27773
27812
|
sum += points[i].X * points[i].X + points[i].Y * points[i].Y;
|
|
27774
27813
|
}
|
|
27775
27814
|
var magnitude = Math.sqrt(sum);
|
|
27776
|
-
for (
|
|
27815
|
+
for (let i = 0; i < vector.length; i++)
|
|
27777
27816
|
vector[i] /= magnitude;
|
|
27778
27817
|
return vector;
|
|
27779
27818
|
}
|
|
@@ -27927,8 +27966,11 @@ var CurveTool = class extends WhiteboardTool {
|
|
|
27927
27966
|
_defineProperty19(this, "pointCount", 0);
|
|
27928
27967
|
this.tool.minDistance = 1;
|
|
27929
27968
|
}
|
|
27930
|
-
onMouseDown(
|
|
27969
|
+
onMouseDown(_event) {
|
|
27931
27970
|
this.pointCount = 0;
|
|
27971
|
+
if (this.elementModel) {
|
|
27972
|
+
this.elementModel.dispose();
|
|
27973
|
+
}
|
|
27932
27974
|
this.elementModel = this.modelGetter().createCurve(true);
|
|
27933
27975
|
}
|
|
27934
27976
|
onMouseDrag(event) {
|
|
@@ -27999,6 +28041,9 @@ var RectangleTool = class extends WhiteboardTool {
|
|
|
27999
28041
|
this.tool.minDistance = 1;
|
|
28000
28042
|
}
|
|
28001
28043
|
onMouseDown(event) {
|
|
28044
|
+
if (this.elementModel) {
|
|
28045
|
+
this.elementModel.dispose();
|
|
28046
|
+
}
|
|
28002
28047
|
this.elementModel = this.modelGetter().createRectangle(true);
|
|
28003
28048
|
this.from = event.point.clone();
|
|
28004
28049
|
this.to = event.point.clone();
|
|
@@ -28116,6 +28161,10 @@ var ToolbarModel = class extends EventEmitter3 {
|
|
|
28116
28161
|
}
|
|
28117
28162
|
});
|
|
28118
28163
|
}
|
|
28164
|
+
dispose() {
|
|
28165
|
+
this.root.unobserve(this.handleRootUpdate);
|
|
28166
|
+
this.removeAllListeners();
|
|
28167
|
+
}
|
|
28119
28168
|
};
|
|
28120
28169
|
|
|
28121
28170
|
// src/tool/SelectorTool.ts
|
|
@@ -28149,6 +28198,9 @@ var SelectorTool = class extends WhiteboardTool {
|
|
|
28149
28198
|
onMouseDown(event) {
|
|
28150
28199
|
this.from = null;
|
|
28151
28200
|
this.to = null;
|
|
28201
|
+
if (this.elementModel) {
|
|
28202
|
+
this.elementModel.dispose();
|
|
28203
|
+
}
|
|
28152
28204
|
this.elementModel = this.modelGetter().createSelector();
|
|
28153
28205
|
this.from = event.point.clone();
|
|
28154
28206
|
this.to = event.point.clone();
|
|
@@ -28246,12 +28298,16 @@ var SelectElementsModel = class extends EventEmitter4 {
|
|
|
28246
28298
|
const cb = this.observers.get(user.id);
|
|
28247
28299
|
if (cb) {
|
|
28248
28300
|
this.requestUserMap(user.id).unobserveDeep(cb);
|
|
28301
|
+
this.observers.delete(user.id);
|
|
28249
28302
|
}
|
|
28250
28303
|
});
|
|
28251
28304
|
_defineProperty23(this, "handleUserJoin", (user) => {
|
|
28252
28305
|
const observer = (evts) => {
|
|
28253
28306
|
this.handleUserSelectElementsChange(user.id, evts);
|
|
28254
28307
|
};
|
|
28308
|
+
if (this.observers.has(user.id)) {
|
|
28309
|
+
this.requestUserMap(user.id).unobserveDeep(this.observers.get(user.id));
|
|
28310
|
+
}
|
|
28255
28311
|
this.requestUserMap(user.id).observeDeep(observer);
|
|
28256
28312
|
this.observers.set(user.id, observer);
|
|
28257
28313
|
});
|
|
@@ -28271,6 +28327,9 @@ var SelectElementsModel = class extends EventEmitter4 {
|
|
|
28271
28327
|
const observer = (evts) => {
|
|
28272
28328
|
this.handleUserSelectElementsChange(userId, evts);
|
|
28273
28329
|
};
|
|
28330
|
+
if (this.observers.has(userId)) {
|
|
28331
|
+
this.requestUserMap(userId).unobserveDeep(this.observers.get(userId));
|
|
28332
|
+
}
|
|
28274
28333
|
this.requestUserMap(userId).observeDeep(observer);
|
|
28275
28334
|
this.observers.set(userId, observer);
|
|
28276
28335
|
});
|
|
@@ -28325,12 +28384,9 @@ var SelectElementsModel = class extends EventEmitter4 {
|
|
|
28325
28384
|
});
|
|
28326
28385
|
}
|
|
28327
28386
|
dispose() {
|
|
28328
|
-
this.
|
|
28329
|
-
|
|
28330
|
-
|
|
28331
|
-
this.requestUserMap(userId).unobserveDeep(cb);
|
|
28332
|
-
}
|
|
28333
|
-
});
|
|
28387
|
+
for (const [key, value] of this.observers.entries()) {
|
|
28388
|
+
this.requestUserMap(key).unobserveDeep(value);
|
|
28389
|
+
}
|
|
28334
28390
|
this.observers.clear();
|
|
28335
28391
|
this.userManager.off("leave", this.handleUserLeave);
|
|
28336
28392
|
this.userManager.off("join", this.handleUserJoin);
|
|
@@ -28392,12 +28448,12 @@ var TextEditor = class extends EventEmitter5 {
|
|
|
28392
28448
|
});
|
|
28393
28449
|
this.camera = camera;
|
|
28394
28450
|
this.rootView = document.createElement("div");
|
|
28395
|
-
this.rootView.style.cssText =
|
|
28451
|
+
this.rootView.style.cssText = "position:absolute;width:100%;height:100%;top:0;left:0;overflow:hidden;";
|
|
28396
28452
|
this.content = document.createElement("div");
|
|
28397
28453
|
this.content.setAttribute("spellcheck", "false");
|
|
28398
28454
|
this.content.textContent = "";
|
|
28399
28455
|
this.content.setAttribute("contenteditable", "plaintext-only");
|
|
28400
|
-
this.content.style.cssText =
|
|
28456
|
+
this.content.style.cssText = "white-space: nowrap;border:1px solid red;text-wrap:nowrap;caret-color:red;line-height:1.2em;position:absolute;z-index:2;color:transparent;outline:none;";
|
|
28401
28457
|
this.content.style.transformOrigin = "0 0";
|
|
28402
28458
|
this.rootView.appendChild(this.content);
|
|
28403
28459
|
this.content.addEventListener("input", this.handleContentInput);
|
|
@@ -28742,7 +28798,7 @@ var Editor = class extends EventEmitter6 {
|
|
|
28742
28798
|
}
|
|
28743
28799
|
if (this.editMode === "matrix" && this.editAnchor && this.lastEditPoint) {
|
|
28744
28800
|
const offsetX = evt.pageX - this.lastEditPoint.x;
|
|
28745
|
-
|
|
28801
|
+
const offsetY = evt.pageY - this.lastEditPoint.y;
|
|
28746
28802
|
this.bounds.offsetBy(this.editAnchor, offsetX, offsetY, this.uniformScale ? this.aspectRatio : -1);
|
|
28747
28803
|
this.lastEditPoint = {
|
|
28748
28804
|
x: evt.pageX,
|
|
@@ -28767,7 +28823,7 @@ var Editor = class extends EventEmitter6 {
|
|
|
28767
28823
|
}
|
|
28768
28824
|
if (this.editMode === "translate" && this.lastEditPoint) {
|
|
28769
28825
|
const offsetX = evt.pageX - this.lastEditPoint.x;
|
|
28770
|
-
|
|
28826
|
+
const offsetY = evt.pageY - this.lastEditPoint.y;
|
|
28771
28827
|
this.bounds.translate(offsetX, offsetY);
|
|
28772
28828
|
this.updateBoundsByShadow();
|
|
28773
28829
|
this.lastEditPoint = {
|
|
@@ -28844,7 +28900,7 @@ var Editor = class extends EventEmitter6 {
|
|
|
28844
28900
|
this.ctrlId = initConfig.ctrlId;
|
|
28845
28901
|
this.ctrlNickName = initConfig.ctrlNickName;
|
|
28846
28902
|
this.rootView = document.createElement("div");
|
|
28847
|
-
this.rootView.style.cssText =
|
|
28903
|
+
this.rootView.style.cssText = "position:absolute;display:none;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%);";
|
|
28848
28904
|
this.frame = document.createElement("div");
|
|
28849
28905
|
this.frame.style.position = "absolute";
|
|
28850
28906
|
this.frame.style.padding = "8px";
|
|
@@ -28865,7 +28921,7 @@ var Editor = class extends EventEmitter6 {
|
|
|
28865
28921
|
} else {
|
|
28866
28922
|
this.title = document.createElement("div");
|
|
28867
28923
|
this.title.textContent = `${this.ctrlNickName}`;
|
|
28868
|
-
this.title.style.cssText =
|
|
28924
|
+
this.title.style.cssText = "color:#fff;font-size:12px;padding: 0.2em 0.4em;border-radius: 0.4em;position: absolute;top: 0%;left: 0;margin: -0.4em;transform: translate(-100%, -100%);";
|
|
28869
28925
|
this.frame.appendChild(this.title);
|
|
28870
28926
|
this.rootView.style.pointerEvents = "none";
|
|
28871
28927
|
}
|
|
@@ -29037,7 +29093,9 @@ var Editor = class extends EventEmitter6 {
|
|
|
29037
29093
|
this.targets = [];
|
|
29038
29094
|
this.editorConfig = null;
|
|
29039
29095
|
if (this.ctrlId !== this.viewerId) {
|
|
29040
|
-
this.scope.project.view
|
|
29096
|
+
if (this.scope.project.view) {
|
|
29097
|
+
this.scope.project.view.off("frame", this.updateBounds);
|
|
29098
|
+
}
|
|
29041
29099
|
}
|
|
29042
29100
|
}
|
|
29043
29101
|
show() {
|
|
@@ -29096,7 +29154,7 @@ var TextTool = class extends WhiteboardTool {
|
|
|
29096
29154
|
onMouseDown(event) {
|
|
29097
29155
|
this.from = event.point.clone();
|
|
29098
29156
|
}
|
|
29099
|
-
onMouseDrag(
|
|
29157
|
+
onMouseDrag(_event) {
|
|
29100
29158
|
}
|
|
29101
29159
|
onMouseUp(event) {
|
|
29102
29160
|
this.to = event.point.clone();
|
|
@@ -29108,6 +29166,9 @@ var TextTool = class extends WhiteboardTool {
|
|
|
29108
29166
|
}
|
|
29109
29167
|
}
|
|
29110
29168
|
createPointEditor(x, y) {
|
|
29169
|
+
if (this.elementModel) {
|
|
29170
|
+
this.elementModel.dispose();
|
|
29171
|
+
}
|
|
29111
29172
|
this.elementModel = this.modelGetter().createPointText(x, y, true);
|
|
29112
29173
|
if (this.elementModel === null) {
|
|
29113
29174
|
return;
|
|
@@ -29313,6 +29374,9 @@ var Camera = class extends EventEmitter8 {
|
|
|
29313
29374
|
const observer = (evt) => {
|
|
29314
29375
|
this.handleViewMatrixUpdate(user.id, evt);
|
|
29315
29376
|
};
|
|
29377
|
+
if (this.observers.has(user.id)) {
|
|
29378
|
+
this.requestUserMap(user.id).unobserve(observer);
|
|
29379
|
+
}
|
|
29316
29380
|
this.requestUserMap(user.id).observe(observer);
|
|
29317
29381
|
this.observers.set(user.id, observer);
|
|
29318
29382
|
});
|
|
@@ -29392,7 +29456,7 @@ var Camera = class extends EventEmitter8 {
|
|
|
29392
29456
|
});
|
|
29393
29457
|
this.maxScale = maxScale;
|
|
29394
29458
|
this.bound = window.document.createElement("div");
|
|
29395
|
-
this.bound.style.cssText =
|
|
29459
|
+
this.bound.style.cssText = "transition: box-shadow 100ms;pointer-events:none;z-index:99;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);";
|
|
29396
29460
|
this.initSize = initSize;
|
|
29397
29461
|
this.hasPermission = hasPermission;
|
|
29398
29462
|
this.paperSize = _paperSize;
|
|
@@ -29417,6 +29481,9 @@ var Camera = class extends EventEmitter8 {
|
|
|
29417
29481
|
const observer = (evt) => {
|
|
29418
29482
|
this.handleViewMatrixUpdate(userId, evt);
|
|
29419
29483
|
};
|
|
29484
|
+
if (this.observers.has(userId)) {
|
|
29485
|
+
this.requestUserMap(userId).unobserve(observer);
|
|
29486
|
+
}
|
|
29420
29487
|
this.requestUserMap(userId).observe(observer);
|
|
29421
29488
|
this.observers.set(userId, observer);
|
|
29422
29489
|
});
|
|
@@ -29453,7 +29520,7 @@ var Camera = class extends EventEmitter8 {
|
|
|
29453
29520
|
this.bound.style.boxShadow = `inset 0px 0px 6px 2px ${this.boundaryColor}`;
|
|
29454
29521
|
window.clearTimeout(this.boundTiemoutId);
|
|
29455
29522
|
this.boundTiemoutId = window.setTimeout(() => {
|
|
29456
|
-
this.bound.style.boxShadow =
|
|
29523
|
+
this.bound.style.boxShadow = "none";
|
|
29457
29524
|
}, 100);
|
|
29458
29525
|
}
|
|
29459
29526
|
}
|
|
@@ -29463,6 +29530,9 @@ var Camera = class extends EventEmitter8 {
|
|
|
29463
29530
|
updateInherentScale(scale) {
|
|
29464
29531
|
this.inherentScale = scale;
|
|
29465
29532
|
}
|
|
29533
|
+
getInherentScale() {
|
|
29534
|
+
return this.inherentScale;
|
|
29535
|
+
}
|
|
29466
29536
|
getActiveMatrix() {
|
|
29467
29537
|
const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
|
|
29468
29538
|
let matrixValue;
|
|
@@ -29605,6 +29675,19 @@ var Camera = class extends EventEmitter8 {
|
|
|
29605
29675
|
y: 0
|
|
29606
29676
|
};
|
|
29607
29677
|
}
|
|
29678
|
+
dispose() {
|
|
29679
|
+
Array.from(this.observers.keys()).forEach((userId) => {
|
|
29680
|
+
const cb = this.observers.get(userId);
|
|
29681
|
+
if (cb) {
|
|
29682
|
+
this.requestUserMap(userId).unobserve(cb);
|
|
29683
|
+
}
|
|
29684
|
+
});
|
|
29685
|
+
this.whiteboardAttrsMap.unobserve(this.handleMainCameraChange);
|
|
29686
|
+
this.userManager.off("join", this.handleUserJoin);
|
|
29687
|
+
this.userManager.off("leave", this.handleUserLeave);
|
|
29688
|
+
this.gesture.removeAllListeners();
|
|
29689
|
+
this.removeAllListeners();
|
|
29690
|
+
}
|
|
29608
29691
|
};
|
|
29609
29692
|
|
|
29610
29693
|
// src/tool/EllipseTool.ts
|
|
@@ -29634,6 +29717,9 @@ var EllipseTool = class extends WhiteboardTool {
|
|
|
29634
29717
|
this.tool.minDistance = 1;
|
|
29635
29718
|
}
|
|
29636
29719
|
onMouseDown(event) {
|
|
29720
|
+
if (this.elementModel) {
|
|
29721
|
+
this.elementModel.dispose();
|
|
29722
|
+
}
|
|
29637
29723
|
this.elementModel = this.modelGetter().createSegmentedPath("ellipse", true);
|
|
29638
29724
|
this.from = event.point.clone();
|
|
29639
29725
|
this.to = event.point.clone();
|
|
@@ -29685,6 +29771,9 @@ var TriangleTool = class extends WhiteboardTool {
|
|
|
29685
29771
|
this.tool.minDistance = 1;
|
|
29686
29772
|
}
|
|
29687
29773
|
onMouseDown(event) {
|
|
29774
|
+
if (this.elementModel) {
|
|
29775
|
+
this.elementModel.dispose();
|
|
29776
|
+
}
|
|
29688
29777
|
this.elementModel = this.modelGetter().createTriangle(true);
|
|
29689
29778
|
this.from = event.point.clone();
|
|
29690
29779
|
this.to = event.point.clone();
|
|
@@ -29801,8 +29890,11 @@ var EraserTool = class extends WhiteboardTool {
|
|
|
29801
29890
|
this.trashedElementsModel = trashedElementsModel;
|
|
29802
29891
|
this.tool.minDistance = 1;
|
|
29803
29892
|
}
|
|
29804
|
-
onMouseDown(
|
|
29893
|
+
onMouseDown(_event) {
|
|
29805
29894
|
this.pointCount = 0;
|
|
29895
|
+
if (this.elementModel) {
|
|
29896
|
+
this.elementModel.dispose();
|
|
29897
|
+
}
|
|
29806
29898
|
this.elementModel = this.modelGetter().createEraser();
|
|
29807
29899
|
}
|
|
29808
29900
|
onMouseDrag(event) {
|
|
@@ -29824,7 +29916,7 @@ var EraserTool = class extends WhiteboardTool {
|
|
|
29824
29916
|
}
|
|
29825
29917
|
});
|
|
29826
29918
|
}
|
|
29827
|
-
onMouseUp(
|
|
29919
|
+
onMouseUp(_event) {
|
|
29828
29920
|
if (this.elementModel) {
|
|
29829
29921
|
this.modelGetter().removeElementItem(this.elementModel.uuid);
|
|
29830
29922
|
}
|
|
@@ -29875,6 +29967,9 @@ var TrashedElementsModel = class extends EventEmitter10 {
|
|
|
29875
29967
|
const observer = (evts) => {
|
|
29876
29968
|
this.handleUserTrashElementsChange(user.id, evts);
|
|
29877
29969
|
};
|
|
29970
|
+
if (this.observers.has(user.id)) {
|
|
29971
|
+
this.requestUserMap(user.id).unobserveDeep(this.observers.get(user.id));
|
|
29972
|
+
}
|
|
29878
29973
|
this.requestUserMap(user.id).observeDeep(observer);
|
|
29879
29974
|
this.observers.set(user.id, observer);
|
|
29880
29975
|
});
|
|
@@ -29886,6 +29981,9 @@ var TrashedElementsModel = class extends EventEmitter10 {
|
|
|
29886
29981
|
const observer = (evts) => {
|
|
29887
29982
|
this.handleUserTrashElementsChange(userId, evts);
|
|
29888
29983
|
};
|
|
29984
|
+
if (this.observers.has(userId)) {
|
|
29985
|
+
this.requestUserMap(userId).unobserveDeep(this.observers.get(userId));
|
|
29986
|
+
}
|
|
29889
29987
|
this.requestUserMap(userId).observeDeep(observer);
|
|
29890
29988
|
this.observers.set(userId, observer);
|
|
29891
29989
|
});
|
|
@@ -29940,12 +30038,9 @@ var TrashedElementsModel = class extends EventEmitter10 {
|
|
|
29940
30038
|
});
|
|
29941
30039
|
}
|
|
29942
30040
|
dispose() {
|
|
29943
|
-
this.
|
|
29944
|
-
|
|
29945
|
-
|
|
29946
|
-
this.requestUserMap(userId).unobserveDeep(cb);
|
|
29947
|
-
}
|
|
29948
|
-
});
|
|
30041
|
+
for (const [key, value] of this.observers.entries()) {
|
|
30042
|
+
this.requestUserMap(key).unobserveDeep(value);
|
|
30043
|
+
}
|
|
29949
30044
|
this.observers.clear();
|
|
29950
30045
|
this.userManager.off("leave", this.handleUserLeave);
|
|
29951
30046
|
this.userManager.off("join", this.handleUserJoin);
|
|
@@ -29977,8 +30072,11 @@ var LaserPointerTool = class extends WhiteboardTool {
|
|
|
29977
30072
|
_defineProperty34(this, "pointCount", 0);
|
|
29978
30073
|
this.tool.minDistance = 5;
|
|
29979
30074
|
}
|
|
29980
|
-
onMouseDown(
|
|
30075
|
+
onMouseDown(_event) {
|
|
29981
30076
|
this.pointCount = 0;
|
|
30077
|
+
if (this.elementModel) {
|
|
30078
|
+
this.elementModel.dispose();
|
|
30079
|
+
}
|
|
29982
30080
|
this.elementModel = this.modelGetter().createLaserPointer();
|
|
29983
30081
|
}
|
|
29984
30082
|
onMouseDrag(event) {
|
|
@@ -29990,7 +30088,7 @@ var LaserPointerTool = class extends WhiteboardTool {
|
|
|
29990
30088
|
this.elementModel.appendPoints([event.point.x, event.point.y]);
|
|
29991
30089
|
}
|
|
29992
30090
|
}
|
|
29993
|
-
onMouseUp(
|
|
30091
|
+
onMouseUp(_event) {
|
|
29994
30092
|
if (this.elementModel) {
|
|
29995
30093
|
this.elementModel.beginRemoveAnimate();
|
|
29996
30094
|
}
|
|
@@ -30112,11 +30210,11 @@ var PageModel = class extends EventEmitter11 {
|
|
|
30112
30210
|
}
|
|
30113
30211
|
const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
|
|
30114
30212
|
if (cameraMode !== "main") {
|
|
30115
|
-
console.warn(
|
|
30213
|
+
console.warn("cannot modify pages in non-main view mode.");
|
|
30116
30214
|
return false;
|
|
30117
30215
|
}
|
|
30118
30216
|
if (!this.hasPermission(WhiteboardPermissionFlag.mainView)) {
|
|
30119
|
-
console.warn(
|
|
30217
|
+
console.warn("cannot modify pages without WhiteboardPermissionFlag.mainView.");
|
|
30120
30218
|
return false;
|
|
30121
30219
|
}
|
|
30122
30220
|
return true;
|
|
@@ -30168,15 +30266,24 @@ var PageModel = class extends EventEmitter11 {
|
|
|
30168
30266
|
}
|
|
30169
30267
|
}
|
|
30170
30268
|
}
|
|
30269
|
+
dispose() {
|
|
30270
|
+
for (const entry of this.observers.entries()) {
|
|
30271
|
+
const [userId, observer] = entry;
|
|
30272
|
+
this.requestUserMap(userId).unobserve(observer);
|
|
30273
|
+
}
|
|
30274
|
+
this.userManager.off("join", this.handleUserJoin);
|
|
30275
|
+
this.userManager.off("leave", this.handleUserLeave);
|
|
30276
|
+
this.whiteboardAttrsMap.unobserve(this.handleMainPageChange);
|
|
30277
|
+
this.pageMap.unobserve(this.handlePageMapChange);
|
|
30278
|
+
}
|
|
30171
30279
|
};
|
|
30172
30280
|
|
|
30173
30281
|
// src/utils/async.ts
|
|
30174
30282
|
var delay = (value) => new Promise((resolve) => setTimeout(resolve, value));
|
|
30175
30283
|
async function waitUntil(fn, timeout) {
|
|
30176
|
-
|
|
30284
|
+
const start = Date.now();
|
|
30177
30285
|
while (!fn() && Date.now() - start < timeout) {
|
|
30178
30286
|
await delay(50);
|
|
30179
|
-
start = Date.now();
|
|
30180
30287
|
}
|
|
30181
30288
|
}
|
|
30182
30289
|
|
|
@@ -30205,14 +30312,14 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30205
30312
|
return this.pageModel.pageList().filter((id) => /^_i_/.test(id));
|
|
30206
30313
|
}
|
|
30207
30314
|
get head() {
|
|
30208
|
-
|
|
30315
|
+
const headId = Object.keys(this.list).find((key) => {
|
|
30209
30316
|
return this.list[key] && this.list[key].prev === "";
|
|
30210
30317
|
});
|
|
30211
30318
|
if (!headId) {
|
|
30212
|
-
log2(
|
|
30319
|
+
log2("indexed navigation confusion", {
|
|
30213
30320
|
list: JSON.stringify(this.list)
|
|
30214
30321
|
}, "error");
|
|
30215
|
-
throw new Error(
|
|
30322
|
+
throw new Error("indexed navigation confusion");
|
|
30216
30323
|
}
|
|
30217
30324
|
return headId;
|
|
30218
30325
|
}
|
|
@@ -30233,7 +30340,7 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30233
30340
|
_defineProperty36(this, "indexedPageMap", void 0);
|
|
30234
30341
|
_defineProperty36(this, "list", {});
|
|
30235
30342
|
_defineProperty36(this, "hasPermission", void 0);
|
|
30236
|
-
_defineProperty36(this, "handleIndexedPageMapUpdate", (
|
|
30343
|
+
_defineProperty36(this, "handleIndexedPageMapUpdate", (_evt) => {
|
|
30237
30344
|
this.list = this.indexedPageMap.get("list");
|
|
30238
30345
|
const needRemoveList = this.pageModel.pageList().filter((v) => /^_i_/.test(v) && Object.keys(this.list).indexOf(v) < 0);
|
|
30239
30346
|
const needAddList = Object.keys(this.list).filter((v) => this.pageModel.pageList().indexOf(v) < 0);
|
|
@@ -30288,8 +30395,8 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30288
30395
|
initIndexed() {
|
|
30289
30396
|
return new Promise((resolve) => {
|
|
30290
30397
|
setTimeout(() => {
|
|
30398
|
+
this.pageModel.addPage("_i_");
|
|
30291
30399
|
if (this.pageModel.pageList().length === 0) {
|
|
30292
|
-
this.pageModel.addPage("_i_");
|
|
30293
30400
|
resolve(true);
|
|
30294
30401
|
} else {
|
|
30295
30402
|
resolve(false);
|
|
@@ -30298,15 +30405,15 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30298
30405
|
});
|
|
30299
30406
|
}
|
|
30300
30407
|
/**
|
|
30301
|
-
|
|
30302
|
-
|
|
30303
|
-
|
|
30408
|
+
* 获取总页数
|
|
30409
|
+
* @returns {number}
|
|
30410
|
+
*/
|
|
30304
30411
|
get pageCount() {
|
|
30305
30412
|
return this.idList.length;
|
|
30306
30413
|
}
|
|
30307
30414
|
/**
|
|
30308
|
-
|
|
30309
|
-
|
|
30415
|
+
* 获取当前页索引
|
|
30416
|
+
*/
|
|
30310
30417
|
get currentPageIndex() {
|
|
30311
30418
|
const userPageId = this.userMap.get(WhiteboardKeys.currentPage);
|
|
30312
30419
|
return this.getPageIndex(userPageId);
|
|
@@ -30326,9 +30433,9 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30326
30433
|
return i;
|
|
30327
30434
|
}
|
|
30328
30435
|
/**
|
|
30329
|
-
|
|
30330
|
-
|
|
30331
|
-
|
|
30436
|
+
* 获取指定索引对应的 pageId
|
|
30437
|
+
* @param {number} index
|
|
30438
|
+
*/
|
|
30332
30439
|
getPageId(index) {
|
|
30333
30440
|
const firstKey = this.head;
|
|
30334
30441
|
if (firstKey) {
|
|
@@ -30350,20 +30457,20 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30350
30457
|
modifyDetect() {
|
|
30351
30458
|
const cameraMode = this.userMap.get(WhiteboardKeys.cameraMode);
|
|
30352
30459
|
if (cameraMode !== "main") {
|
|
30353
|
-
console.warn(
|
|
30460
|
+
console.warn("cannot modify pages in non-main view mode.");
|
|
30354
30461
|
return false;
|
|
30355
30462
|
}
|
|
30356
30463
|
if (!this.hasPermission(WhiteboardPermissionFlag.mainView)) {
|
|
30357
|
-
console.warn(
|
|
30464
|
+
console.warn("cannot modify pages without WhiteboardPermissionFlag.mainView.");
|
|
30358
30465
|
return false;
|
|
30359
30466
|
}
|
|
30360
30467
|
return true;
|
|
30361
30468
|
}
|
|
30362
30469
|
/**
|
|
30363
|
-
|
|
30364
|
-
|
|
30365
|
-
|
|
30366
|
-
|
|
30470
|
+
* 在尾部插入新页面
|
|
30471
|
+
* @param {boolean=} goto 是否跳转到新页面, 默认 true
|
|
30472
|
+
* @return 总页数
|
|
30473
|
+
*/
|
|
30367
30474
|
pushPage() {
|
|
30368
30475
|
let goto = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
30369
30476
|
this.indexedPageMap.doc.transact(() => {
|
|
@@ -30392,11 +30499,11 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30392
30499
|
return this.pageCount;
|
|
30393
30500
|
}
|
|
30394
30501
|
/**
|
|
30395
|
-
|
|
30396
|
-
|
|
30397
|
-
|
|
30398
|
-
|
|
30399
|
-
|
|
30502
|
+
* 在 after 之后插入新页面
|
|
30503
|
+
* @param {number} after 在此页之后插入
|
|
30504
|
+
* @param {boolean=} goto 是否跳转到新页面, 默认 true
|
|
30505
|
+
* @return 总页数
|
|
30506
|
+
*/
|
|
30400
30507
|
insertPage(after) {
|
|
30401
30508
|
let goto = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
|
|
30402
30509
|
const afterPageId = this.getPageId(after);
|
|
@@ -30405,7 +30512,7 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30405
30512
|
}
|
|
30406
30513
|
const cameraMode = this.userMap.get(WhiteboardKeys.cameraMode);
|
|
30407
30514
|
if (cameraMode !== "main") {
|
|
30408
|
-
console.warn(
|
|
30515
|
+
console.warn("cannot modify pages in non-main view mode.");
|
|
30409
30516
|
return this.pageCount;
|
|
30410
30517
|
}
|
|
30411
30518
|
const prev = this.list[afterPageId];
|
|
@@ -30448,8 +30555,8 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30448
30555
|
return this.pageCount;
|
|
30449
30556
|
}
|
|
30450
30557
|
/**
|
|
30451
|
-
|
|
30452
|
-
|
|
30558
|
+
* 跳转至上一页, 并返回跳转后的页面索引.
|
|
30559
|
+
*/
|
|
30453
30560
|
prevPage() {
|
|
30454
30561
|
const currentPageId = this.userMap.get(WhiteboardKeys.currentPage);
|
|
30455
30562
|
const data = this.list[currentPageId];
|
|
@@ -30461,8 +30568,8 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30461
30568
|
return nextIndex;
|
|
30462
30569
|
}
|
|
30463
30570
|
/**
|
|
30464
|
-
|
|
30465
|
-
|
|
30571
|
+
* 跳转至下一页, 并返回跳转后的页面索引.
|
|
30572
|
+
*/
|
|
30466
30573
|
nextPage() {
|
|
30467
30574
|
const currentPageId = this.userMap.get(WhiteboardKeys.currentPage);
|
|
30468
30575
|
const data = this.list[currentPageId];
|
|
@@ -30474,16 +30581,16 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30474
30581
|
return nextIndex;
|
|
30475
30582
|
}
|
|
30476
30583
|
/**
|
|
30477
|
-
|
|
30478
|
-
|
|
30479
|
-
|
|
30584
|
+
* 删除指定页面
|
|
30585
|
+
* @param {number} index
|
|
30586
|
+
*/
|
|
30480
30587
|
removePage(index) {
|
|
30481
30588
|
if (this.pageCount <= 1) {
|
|
30482
30589
|
return this.pageCount;
|
|
30483
30590
|
}
|
|
30484
30591
|
const cameraMode = this.userMap.get(WhiteboardKeys.cameraMode);
|
|
30485
30592
|
if (cameraMode !== "main") {
|
|
30486
|
-
console.warn(
|
|
30593
|
+
console.warn("cannot modify pages in non-main view mode.");
|
|
30487
30594
|
return this.pageCount;
|
|
30488
30595
|
}
|
|
30489
30596
|
const targetId = this.getPageId(index);
|
|
@@ -30523,6 +30630,11 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30523
30630
|
this.pageModel.gotoPage(targetId);
|
|
30524
30631
|
}
|
|
30525
30632
|
}
|
|
30633
|
+
dispose() {
|
|
30634
|
+
this.indexedPageMap.unobserve(this.handleIndexedPageMapUpdate);
|
|
30635
|
+
this.pageModel.off("switchPage");
|
|
30636
|
+
this.pageModel.off("pagesChange");
|
|
30637
|
+
}
|
|
30526
30638
|
};
|
|
30527
30639
|
|
|
30528
30640
|
// src/utils/ShadowEmitter.ts
|
|
@@ -30585,6 +30697,9 @@ var StraightLineTool = class extends WhiteboardTool {
|
|
|
30585
30697
|
this.tool.minDistance = 1;
|
|
30586
30698
|
}
|
|
30587
30699
|
onMouseDown(event) {
|
|
30700
|
+
if (this.elementModel) {
|
|
30701
|
+
this.elementModel.dispose();
|
|
30702
|
+
}
|
|
30588
30703
|
this.elementModel = this.modelGetter().createStraightLine(true);
|
|
30589
30704
|
this.from = event.point.clone();
|
|
30590
30705
|
this.to = event.point.clone();
|
|
@@ -30647,7 +30762,20 @@ var GrabTool = class extends WhiteboardTool {
|
|
|
30647
30762
|
}
|
|
30648
30763
|
};
|
|
30649
30764
|
|
|
30650
|
-
// src/
|
|
30765
|
+
// src/tool/PointerTool.ts
|
|
30766
|
+
var PointerTool = class extends WhiteboardTool {
|
|
30767
|
+
constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
|
|
30768
|
+
super(enableToolEvent, modelGetter, shadowEmitter, scope);
|
|
30769
|
+
}
|
|
30770
|
+
onMouseDown(_event) {
|
|
30771
|
+
}
|
|
30772
|
+
onMouseDrag(_event) {
|
|
30773
|
+
}
|
|
30774
|
+
onMouseUp() {
|
|
30775
|
+
}
|
|
30776
|
+
};
|
|
30777
|
+
|
|
30778
|
+
// src/SequenceExecutor.ts
|
|
30651
30779
|
function _defineProperty40(e, r, t) {
|
|
30652
30780
|
return (r = _toPropertyKey40(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30653
30781
|
}
|
|
@@ -30665,6 +30793,53 @@ function _toPrimitive40(t, r) {
|
|
|
30665
30793
|
}
|
|
30666
30794
|
return ("string" === r ? String : Number)(t);
|
|
30667
30795
|
}
|
|
30796
|
+
var SequenceExecutor = class {
|
|
30797
|
+
constructor() {
|
|
30798
|
+
_defineProperty40(this, "tasks", []);
|
|
30799
|
+
_defineProperty40(this, "isRunning", false);
|
|
30800
|
+
}
|
|
30801
|
+
addTask(task) {
|
|
30802
|
+
this.tasks.push(task);
|
|
30803
|
+
if (!this.isRunning) {
|
|
30804
|
+
this.execute();
|
|
30805
|
+
}
|
|
30806
|
+
}
|
|
30807
|
+
async execute() {
|
|
30808
|
+
if (this.isRunning) {
|
|
30809
|
+
return;
|
|
30810
|
+
}
|
|
30811
|
+
this.isRunning = true;
|
|
30812
|
+
while (this.tasks.length > 0) {
|
|
30813
|
+
const task = this.tasks.shift();
|
|
30814
|
+
if (task) {
|
|
30815
|
+
try {
|
|
30816
|
+
await task();
|
|
30817
|
+
} catch (e) {
|
|
30818
|
+
}
|
|
30819
|
+
}
|
|
30820
|
+
}
|
|
30821
|
+
this.isRunning = false;
|
|
30822
|
+
}
|
|
30823
|
+
};
|
|
30824
|
+
|
|
30825
|
+
// src/WhiteboardApplication.ts
|
|
30826
|
+
function _defineProperty41(e, r, t) {
|
|
30827
|
+
return (r = _toPropertyKey41(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30828
|
+
}
|
|
30829
|
+
function _toPropertyKey41(t) {
|
|
30830
|
+
var i = _toPrimitive41(t, "string");
|
|
30831
|
+
return "symbol" == typeof i ? i : i + "";
|
|
30832
|
+
}
|
|
30833
|
+
function _toPrimitive41(t, r) {
|
|
30834
|
+
if ("object" != typeof t || !t) return t;
|
|
30835
|
+
var e = t[Symbol.toPrimitive];
|
|
30836
|
+
if (void 0 !== e) {
|
|
30837
|
+
var i = e.call(t, r || "default");
|
|
30838
|
+
if ("object" != typeof i) return i;
|
|
30839
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
30840
|
+
}
|
|
30841
|
+
return ("string" === r ? String : Number)(t);
|
|
30842
|
+
}
|
|
30668
30843
|
var WHITEBOARD_APP_NAME = "whiteboard";
|
|
30669
30844
|
var WhiteboardApplication = class extends AbstractApplication {
|
|
30670
30845
|
get undoManager() {
|
|
@@ -30678,43 +30853,45 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30678
30853
|
var _this;
|
|
30679
30854
|
super();
|
|
30680
30855
|
_this = this;
|
|
30681
|
-
|
|
30682
|
-
|
|
30683
|
-
|
|
30684
|
-
|
|
30685
|
-
|
|
30686
|
-
|
|
30687
|
-
|
|
30688
|
-
|
|
30689
|
-
|
|
30690
|
-
|
|
30691
|
-
|
|
30692
|
-
|
|
30693
|
-
|
|
30694
|
-
|
|
30695
|
-
|
|
30696
|
-
|
|
30697
|
-
|
|
30698
|
-
|
|
30699
|
-
|
|
30700
|
-
|
|
30701
|
-
|
|
30702
|
-
|
|
30703
|
-
|
|
30704
|
-
|
|
30705
|
-
|
|
30706
|
-
|
|
30707
|
-
|
|
30708
|
-
|
|
30709
|
-
|
|
30856
|
+
_defineProperty41(this, "name", WHITEBOARD_APP_NAME);
|
|
30857
|
+
_defineProperty41(this, "emitter", void 0);
|
|
30858
|
+
_defineProperty41(this, "toolbarModel", void 0);
|
|
30859
|
+
_defineProperty41(this, "selectElementsModel", void 0);
|
|
30860
|
+
_defineProperty41(this, "trashedElementsModel", void 0);
|
|
30861
|
+
_defineProperty41(this, "pageModel", void 0);
|
|
30862
|
+
_defineProperty41(this, "layers", /* @__PURE__ */ new Map());
|
|
30863
|
+
_defineProperty41(this, "undoManagers", /* @__PURE__ */ new Map());
|
|
30864
|
+
_defineProperty41(this, "rootElement", document.createElement("div"));
|
|
30865
|
+
_defineProperty41(this, "paperScope", new import_paper.default.PaperScope());
|
|
30866
|
+
_defineProperty41(this, "canvasElement", document.createElement("canvas"));
|
|
30867
|
+
_defineProperty41(this, "shadowScope", new import_paper.default.PaperScope());
|
|
30868
|
+
_defineProperty41(this, "snapshotCanvasElement", document.createElement("canvas"));
|
|
30869
|
+
_defineProperty41(this, "snapshotScope", new import_paper.default.PaperScope());
|
|
30870
|
+
_defineProperty41(this, "shadowCanvasElement", document.createElement("canvas"));
|
|
30871
|
+
_defineProperty41(this, "shadowEmitter", void 0);
|
|
30872
|
+
_defineProperty41(this, "tools", void 0);
|
|
30873
|
+
_defineProperty41(this, "editors", /* @__PURE__ */ new Map());
|
|
30874
|
+
_defineProperty41(this, "camera", void 0);
|
|
30875
|
+
_defineProperty41(this, "resizeObserver", void 0);
|
|
30876
|
+
_defineProperty41(this, "option", void 0);
|
|
30877
|
+
_defineProperty41(this, "permissions", void 0);
|
|
30878
|
+
_defineProperty41(this, "inputType", "any");
|
|
30879
|
+
_defineProperty41(this, "isPenEvent", false);
|
|
30880
|
+
_defineProperty41(this, "hasPenInput", null);
|
|
30881
|
+
_defineProperty41(this, "disableViewModelUpdate", false);
|
|
30882
|
+
_defineProperty41(this, "internalResizeObserver", true);
|
|
30883
|
+
_defineProperty41(this, "sequenceExecutor", new SequenceExecutor());
|
|
30884
|
+
_defineProperty41(this, "linkTarget", null);
|
|
30885
|
+
_defineProperty41(this, "enableToolEvent", () => {
|
|
30710
30886
|
return !(this.inputType === "pen" && !this.isPenEvent);
|
|
30711
30887
|
});
|
|
30712
|
-
|
|
30713
|
-
|
|
30714
|
-
editor.
|
|
30715
|
-
|
|
30716
|
-
|
|
30717
|
-
|
|
30888
|
+
_defineProperty41(this, "handlePageSwitch", (pageId) => {
|
|
30889
|
+
this.sequenceExecutor.addTask(async () => {
|
|
30890
|
+
for (const editor of this.editors.values()) {
|
|
30891
|
+
editor.hidden();
|
|
30892
|
+
}
|
|
30893
|
+
this.selectElementsModel.clearSelectElementForSelf();
|
|
30894
|
+
await waitUntil(() => this.layers.has(pageId), 1e3);
|
|
30718
30895
|
if (this.layers.has(pageId)) {
|
|
30719
30896
|
for (const entry of this.layers.entries()) {
|
|
30720
30897
|
entry[1].off("elementInsert", this.handleElementInsert);
|
|
@@ -30726,6 +30903,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30726
30903
|
renderableModel.on("elementRemove", this.handleElementRemove);
|
|
30727
30904
|
renderableModel.on("elementClear", this.handleElementClear);
|
|
30728
30905
|
renderableModel.flushRenderables();
|
|
30906
|
+
this.paperScope.project.activeLayer.data.pageId = pageId;
|
|
30729
30907
|
const others = this.userManager.userIdList().filter((v) => v !== this.userId);
|
|
30730
30908
|
for (const other of others) {
|
|
30731
30909
|
if (this.userMap(other).get(WhiteboardKeys.currentPage) === pageId) {
|
|
@@ -30735,9 +30913,11 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30735
30913
|
}
|
|
30736
30914
|
}
|
|
30737
30915
|
}
|
|
30916
|
+
} else {
|
|
30917
|
+
console.warn(`[@netless/forge-whiteboard] page ${pageId} not found`);
|
|
30918
|
+
log3(`[@netless/forge-whiteboard] page ${pageId} not found`, {}, "warning");
|
|
30738
30919
|
}
|
|
30739
|
-
|
|
30740
|
-
waitUntil(() => this.undoManagers.has(pageId), 3e3).then(() => {
|
|
30920
|
+
await waitUntil(() => this.undoManagers.has(pageId), 1e3);
|
|
30741
30921
|
if (this.undoManagers.has(pageId)) {
|
|
30742
30922
|
for (const entry of this.undoManagers.entries()) {
|
|
30743
30923
|
entry[1].off("stack-item-added", this.handleStackItemAdded);
|
|
@@ -30745,24 +30925,27 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30745
30925
|
}
|
|
30746
30926
|
this.undoManagers.get(pageId).on("stack-item-added", this.handleStackItemAdded);
|
|
30747
30927
|
this.undoManagers.get(pageId).on("stack-item-popped", this.handleStackItemPopped);
|
|
30928
|
+
} else {
|
|
30929
|
+
console.warn(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`);
|
|
30930
|
+
log3(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`, {}, "warning");
|
|
30748
30931
|
}
|
|
30932
|
+
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30933
|
+
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
30749
30934
|
});
|
|
30750
|
-
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30751
|
-
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
30752
30935
|
});
|
|
30753
|
-
|
|
30936
|
+
_defineProperty41(this, "hasPermission", (flag) => {
|
|
30754
30937
|
return this.permissions.hasPermission(flag, this.userId);
|
|
30755
30938
|
});
|
|
30756
|
-
|
|
30939
|
+
_defineProperty41(this, "handleStackItemAdded", () => {
|
|
30757
30940
|
this.selectElementsModel.clearSelectElementForSelf();
|
|
30758
30941
|
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30759
30942
|
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
30760
30943
|
});
|
|
30761
|
-
|
|
30944
|
+
_defineProperty41(this, "handleStackItemPopped", () => {
|
|
30762
30945
|
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30763
30946
|
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
30764
30947
|
});
|
|
30765
|
-
|
|
30948
|
+
_defineProperty41(this, "handleLayersChange", (ids) => {
|
|
30766
30949
|
for (let i = 0, len = ids.length; i < len; i++) {
|
|
30767
30950
|
const id = ids[i];
|
|
30768
30951
|
if (!this.layers.has(id)) {
|
|
@@ -30778,7 +30961,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30778
30961
|
this.undoManagers.set(id, undoManager);
|
|
30779
30962
|
}
|
|
30780
30963
|
}
|
|
30781
|
-
for (
|
|
30964
|
+
for (const entry of this.layers.entries()) {
|
|
30782
30965
|
if (ids.indexOf(entry[0]) < 0) {
|
|
30783
30966
|
const renderableModel = this.layers.get(entry[0]);
|
|
30784
30967
|
this.layers.delete(entry[0]);
|
|
@@ -30794,17 +30977,17 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30794
30977
|
}
|
|
30795
30978
|
}
|
|
30796
30979
|
});
|
|
30797
|
-
|
|
30798
|
-
|
|
30980
|
+
_defineProperty41(this, "getCurrentRenderableModel", () => {
|
|
30981
|
+
const layerId = this.userMap(this.userId).get(WhiteboardKeys.currentPage);
|
|
30799
30982
|
if (!this.layers.has(layerId)) {
|
|
30800
30983
|
this.emitter.emit("error", 300002, `target page: ${layerId} not found`);
|
|
30801
30984
|
}
|
|
30802
30985
|
return this.layers.get(layerId);
|
|
30803
30986
|
});
|
|
30804
|
-
|
|
30987
|
+
_defineProperty41(this, "handleElementClear", () => {
|
|
30805
30988
|
this.paperScope.project.activeLayer.removeChildren();
|
|
30806
30989
|
});
|
|
30807
|
-
|
|
30990
|
+
_defineProperty41(this, "handleElementInsert", (elements) => {
|
|
30808
30991
|
for (const element of elements) {
|
|
30809
30992
|
element.createPaperElement();
|
|
30810
30993
|
const scope = element.shadow === "" ? this.paperScope : this.shadowScope;
|
|
@@ -30816,7 +30999,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30816
30999
|
this.insertElementToParent(element.item, scope.project.activeLayer);
|
|
30817
31000
|
}
|
|
30818
31001
|
});
|
|
30819
|
-
|
|
31002
|
+
_defineProperty41(this, "handleElementRemove", (elementId, layerId) => {
|
|
30820
31003
|
const layerModel = this.layers.get(layerId);
|
|
30821
31004
|
if (!layerModel) {
|
|
30822
31005
|
return;
|
|
@@ -30827,11 +31010,11 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30827
31010
|
}
|
|
30828
31011
|
layerModel.elementModels.delete(elementId);
|
|
30829
31012
|
});
|
|
30830
|
-
|
|
31013
|
+
_defineProperty41(this, "handleRemoveTrashedElementForSelf", (userId, elementId) => {
|
|
30831
31014
|
const selfLayerId = this.userMap(this.userId).get(WhiteboardKeys.currentPage);
|
|
30832
31015
|
this.layers.get(selfLayerId)?.removeElementItem(elementId);
|
|
30833
31016
|
});
|
|
30834
|
-
|
|
31017
|
+
_defineProperty41(this, "handleElementsTrash", (userId, elements) => {
|
|
30835
31018
|
const targetLayerId = this.userMap(userId).get(WhiteboardKeys.currentPage);
|
|
30836
31019
|
const selfLayerId = this.userMap(this.userId).get(WhiteboardKeys.currentPage);
|
|
30837
31020
|
if (targetLayerId !== selfLayerId || !this.layers.has(targetLayerId)) {
|
|
@@ -30844,7 +31027,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30844
31027
|
}
|
|
30845
31028
|
});
|
|
30846
31029
|
});
|
|
30847
|
-
|
|
31030
|
+
_defineProperty41(this, "handleElementsSelect", (userId, elements) => {
|
|
30848
31031
|
if (!this.editors.has(userId)) {
|
|
30849
31032
|
const ctrl = this.userManager.getUser(userId);
|
|
30850
31033
|
const editor2 = new Editor(this.paperScope, this.shadowScope, this.shadowEmitter, this.canvasElement, this.camera, {
|
|
@@ -30876,7 +31059,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30876
31059
|
}).filter((v) => !!v);
|
|
30877
31060
|
editor.setTargets(elementModels);
|
|
30878
31061
|
if (elementModels.length === 1) {
|
|
30879
|
-
|
|
31062
|
+
const model = elementModels[0];
|
|
30880
31063
|
if (model.item) {
|
|
30881
31064
|
const topLeft = this.paperScope.project.view.projectToView(model.item.bounds.topLeft);
|
|
30882
31065
|
const bottomRight = this.paperScope.project.view.projectToView(model.item.bounds.bottomRight);
|
|
@@ -30887,7 +31070,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30887
31070
|
this.emitter.emit("elementDeselected", userId);
|
|
30888
31071
|
}
|
|
30889
31072
|
});
|
|
30890
|
-
|
|
31073
|
+
_defineProperty41(this, "handleLinkedMapChange", (evt) => {
|
|
30891
31074
|
for (const [key, value] of evt.changes.keys.entries()) {
|
|
30892
31075
|
if (Object.keys(TOOLBAR_KEYS).indexOf(key) >= 0 && (value.action === "add" || value.action === "update")) {
|
|
30893
31076
|
this.toolbarModel.currentTool = evt.target.get(TOOLBAR_KEYS.tool);
|
|
@@ -30904,7 +31087,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30904
31087
|
}
|
|
30905
31088
|
}
|
|
30906
31089
|
});
|
|
30907
|
-
|
|
31090
|
+
_defineProperty41(this, "adjustByOutFrame", (frameWidth, frameHeight) => {
|
|
30908
31091
|
if (this.option.width > 0 && this.option.height > 0) {
|
|
30909
31092
|
const minWidth = Math.max(frameWidth, 10);
|
|
30910
31093
|
const minHeight = Math.max(frameHeight, 10);
|
|
@@ -30922,6 +31105,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30922
31105
|
});
|
|
30923
31106
|
requestAnimationFrameHook(this.paperScope);
|
|
30924
31107
|
requestAnimationFrameHook(this.shadowScope);
|
|
31108
|
+
const that = this;
|
|
30925
31109
|
this.rootElement.setAttribute("data-forge-app", "whiteboard");
|
|
30926
31110
|
document.body.addEventListener("pointerdown", (evt) => {
|
|
30927
31111
|
this.isPenEvent = evt.pointerType === "pen";
|
|
@@ -31093,7 +31277,6 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31093
31277
|
errorMessage
|
|
31094
31278
|
});
|
|
31095
31279
|
});
|
|
31096
|
-
const that = this;
|
|
31097
31280
|
Object.defineProperty(this.emitter, "tool", {
|
|
31098
31281
|
get() {
|
|
31099
31282
|
return that.toolbarModel.currentTool;
|
|
@@ -31242,6 +31425,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31242
31425
|
return this.userMap(userId);
|
|
31243
31426
|
}, this.hasPermission);
|
|
31244
31427
|
this.tools = {
|
|
31428
|
+
pointer: new PointerTool(this.enableToolEvent, this.getCurrentRenderableModel, this.shadowEmitter, this.paperScope),
|
|
31245
31429
|
curve: new CurveTool(this.enableToolEvent, this.getCurrentRenderableModel, this.shadowEmitter, this.paperScope),
|
|
31246
31430
|
rectangle: new RectangleTool(this.enableToolEvent, this.getCurrentRenderableModel, this.shadowEmitter, this.paperScope),
|
|
31247
31431
|
selector: new SelectorTool(this.enableToolEvent, this.getCurrentRenderableModel, this.shadowEmitter, this.paperScope, this.selectElementsModel),
|
|
@@ -31257,6 +31441,11 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31257
31441
|
this.toolbarModel.on("update", (style) => {
|
|
31258
31442
|
if (this.tools[style.tool]) {
|
|
31259
31443
|
this.paperScope.tool = this.tools[style.tool].tool;
|
|
31444
|
+
if (style.tool === "pointer") {
|
|
31445
|
+
this.rootElement.style.pointerEvents = "none";
|
|
31446
|
+
} else {
|
|
31447
|
+
this.rootElement.style.pointerEvents = "auto";
|
|
31448
|
+
}
|
|
31260
31449
|
} else {
|
|
31261
31450
|
this.emitter.emit("error", 300001, `${style.tool} not supported`);
|
|
31262
31451
|
}
|
|
@@ -31435,7 +31624,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31435
31624
|
if (renderableModel.elementModels.has(key)) {
|
|
31436
31625
|
elementModel = renderableModel.elementModels.get(key) ?? null;
|
|
31437
31626
|
} else {
|
|
31438
|
-
|
|
31627
|
+
const elementMap = renderableModel.elements.get(key);
|
|
31439
31628
|
if (elementMap) {
|
|
31440
31629
|
elementModel = renderableModel.convertToModel(elementMap);
|
|
31441
31630
|
}
|
|
@@ -31522,6 +31711,9 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31522
31711
|
const size = this.paperScope.view.viewSize;
|
|
31523
31712
|
return [size.width, size.height];
|
|
31524
31713
|
}
|
|
31714
|
+
getInherentScale() {
|
|
31715
|
+
return this.camera.getInherentScale();
|
|
31716
|
+
}
|
|
31525
31717
|
updateInternalResizeObserverStatus(value) {
|
|
31526
31718
|
this.internalResizeObserver = value;
|
|
31527
31719
|
}
|
|
@@ -31541,9 +31733,27 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31541
31733
|
this.shadowScope.project.clear();
|
|
31542
31734
|
this.snapshotScope.project.clear();
|
|
31543
31735
|
this.resizeObserver.disconnect();
|
|
31736
|
+
this.unlink();
|
|
31737
|
+
for (const entry of this.undoManagers.entries()) {
|
|
31738
|
+
entry[1].off("stack-item-added", this.handleStackItemAdded);
|
|
31739
|
+
entry[1].off("stack-item-popped", this.handleStackItemPopped);
|
|
31740
|
+
}
|
|
31741
|
+
for (const entry of this.layers.entries()) {
|
|
31742
|
+
entry[1].dispose();
|
|
31743
|
+
entry[1].removeAllListeners();
|
|
31744
|
+
}
|
|
31745
|
+
this.camera.dispose();
|
|
31746
|
+
this.pageModel.dispose();
|
|
31747
|
+
this.pageModel.removeAllListeners();
|
|
31748
|
+
for (const entry of this.editors.entries()) {
|
|
31749
|
+
entry[1].dispose();
|
|
31750
|
+
}
|
|
31751
|
+
this.toolbarModel.dispose();
|
|
31752
|
+
this.emitter.indexedNavigation.dispose();
|
|
31753
|
+
this.permissions.dispose();
|
|
31544
31754
|
}
|
|
31545
31755
|
};
|
|
31546
|
-
|
|
31756
|
+
_defineProperty41(WhiteboardApplication, "applicationName", WHITEBOARD_APP_NAME);
|
|
31547
31757
|
export {
|
|
31548
31758
|
Whiteboard,
|
|
31549
31759
|
WhiteboardApplication,
|