@netless/forge-whiteboard 0.1.14 → 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 +11 -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 +31 -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 +7 -46
- package/dist/WhitePermissions.d.ts.map +1 -1
- package/dist/Whiteboard.d.ts +120 -108
- package/dist/Whiteboard.d.ts.map +1 -1
- package/dist/WhiteboardApplication.d.ts +7 -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 +22 -20
- 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 +7 -4
- 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 +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/ImageModel.d.ts +20 -0
- package/dist/model/renderable/ImageModel.d.ts.map +1 -0
- 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/FPS.d.ts +15 -0
- package/dist/utils/FPS.d.ts.map +1 -0
- 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 +599 -337
- package/dist/whiteboard.esm.js.map +4 -4
- package/dist/whiteboard.js +600 -338
- package/dist/whiteboard.js.map +4 -4
- package/package.json +4 -3
package/dist/whiteboard.esm.js
CHANGED
|
@@ -25362,13 +25362,14 @@ var require_lodash = __commonJS({
|
|
|
25362
25362
|
|
|
25363
25363
|
// src/WhiteboardApplication.ts
|
|
25364
25364
|
var import_paper = __toESM(require_paper_full(), 1);
|
|
25365
|
-
import { AbstractApplication, log as
|
|
25365
|
+
import { AbstractApplication, log as log4 } from "@netless/forge-room";
|
|
25366
25366
|
import * as Y15 from "yjs";
|
|
25367
25367
|
|
|
25368
25368
|
// src/model/RenderableModel.ts
|
|
25369
25369
|
import * as Y12 from "yjs";
|
|
25370
|
-
import
|
|
25370
|
+
import EventEmitter from "eventemitter3";
|
|
25371
25371
|
import { v4 as uuidv4 } from "uuid";
|
|
25372
|
+
import { log, removeObserver as removeObserver2 } from "@netless/forge-room";
|
|
25372
25373
|
|
|
25373
25374
|
// src/model/renderable/CurveModel.ts
|
|
25374
25375
|
import * as Y2 from "yjs";
|
|
@@ -25526,6 +25527,7 @@ var import_lodash = __toESM(require_lodash(), 1);
|
|
|
25526
25527
|
|
|
25527
25528
|
// src/model/renderable/ElementModel.ts
|
|
25528
25529
|
import * as Y from "yjs";
|
|
25530
|
+
import { removeDeepObserver } from "@netless/forge-room";
|
|
25529
25531
|
function _defineProperty(e, r, t) {
|
|
25530
25532
|
return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
25531
25533
|
}
|
|
@@ -25708,6 +25710,10 @@ var ElementModel = class _ElementModel {
|
|
|
25708
25710
|
const ext = this.styleKeys();
|
|
25709
25711
|
return Array.from(new Set(["dashArray", "strokeColor", "fillColor", "strokeWidth"].filter((v) => ext.exclude.indexOf(v) < 0).concat(ext.include)));
|
|
25710
25712
|
}
|
|
25713
|
+
dispose() {
|
|
25714
|
+
this.subDispose();
|
|
25715
|
+
removeDeepObserver(this.root, this.handlePropChange);
|
|
25716
|
+
}
|
|
25711
25717
|
};
|
|
25712
25718
|
_defineProperty(ElementModel, "KEYS", {
|
|
25713
25719
|
index: "index",
|
|
@@ -25781,12 +25787,15 @@ var CurveModel = class extends ElementModel {
|
|
|
25781
25787
|
constructor(root, scope) {
|
|
25782
25788
|
super(root, scope);
|
|
25783
25789
|
_defineProperty3(this, "item", null);
|
|
25790
|
+
_defineProperty3(this, "debugPath", void 0);
|
|
25791
|
+
_defineProperty3(this, "debug", false);
|
|
25784
25792
|
if (!this.root.has("type")) {
|
|
25785
25793
|
this.root.set("type", "curve");
|
|
25786
25794
|
}
|
|
25787
25795
|
if (!this.root.has("points")) {
|
|
25788
25796
|
this.root.set("points", new Y2.Array());
|
|
25789
25797
|
}
|
|
25798
|
+
this.debugPath = new scope.Path();
|
|
25790
25799
|
}
|
|
25791
25800
|
average(a2, b2) {
|
|
25792
25801
|
return (a2 + b2) / 2;
|
|
@@ -25795,23 +25804,23 @@ var CurveModel = class extends ElementModel {
|
|
|
25795
25804
|
const groupPoints = (0, import_lodash.chunk)(points, 2);
|
|
25796
25805
|
return ae(groupPoints, {
|
|
25797
25806
|
size: this.strokeWidth,
|
|
25798
|
-
smoothing: 0,
|
|
25799
|
-
thinning: 0.5,
|
|
25807
|
+
smoothing: 0.5,
|
|
25808
|
+
thinning: -0.5,
|
|
25800
25809
|
streamline: 0.5,
|
|
25801
25810
|
simulatePressure: true,
|
|
25802
25811
|
start: {
|
|
25803
|
-
taper: 10,
|
|
25812
|
+
taper: this.strokeWidth * 10,
|
|
25804
25813
|
cap: true
|
|
25805
25814
|
},
|
|
25806
25815
|
end: {
|
|
25807
|
-
taper:
|
|
25816
|
+
taper: this.strokeWidth * 20,
|
|
25808
25817
|
cap: true
|
|
25809
25818
|
}
|
|
25810
25819
|
});
|
|
25811
25820
|
}
|
|
25812
25821
|
matrixedPoints() {
|
|
25813
|
-
const
|
|
25814
|
-
return
|
|
25822
|
+
const currentPoints = (0, import_lodash.chunk)(this.points, 2);
|
|
25823
|
+
return currentPoints.map((_ref) => {
|
|
25815
25824
|
let [x, y] = _ref;
|
|
25816
25825
|
return new this.scope.Point(x, y);
|
|
25817
25826
|
}).map((p) => p.transform(new this.scope.Matrix(this.pointsMatrix))).reduce((result, next) => {
|
|
@@ -25845,27 +25854,41 @@ var CurveModel = class extends ElementModel {
|
|
|
25845
25854
|
}
|
|
25846
25855
|
return path;
|
|
25847
25856
|
}
|
|
25848
|
-
|
|
25849
|
-
|
|
25850
|
-
const
|
|
25851
|
-
|
|
25857
|
+
updateDebugPath() {
|
|
25858
|
+
this.debugPath = new this.scope.Path();
|
|
25859
|
+
const points = (0, import_lodash.chunk)(this.points, 2);
|
|
25860
|
+
for (let i = 0, len = points.length; i < len; i++) {
|
|
25861
|
+
const point = new this.scope.Point(points[i][0], points[i][1]);
|
|
25862
|
+
if (i === 0) {
|
|
25863
|
+
this.debugPath.moveTo(point);
|
|
25864
|
+
} else {
|
|
25865
|
+
this.debugPath.lineTo(point);
|
|
25866
|
+
}
|
|
25867
|
+
this.debugPath.strokeWidth = 1;
|
|
25868
|
+
this.debugPath.strokeColor = new this.scope.Color(1, 0, 0, 1);
|
|
25869
|
+
}
|
|
25852
25870
|
}
|
|
25853
25871
|
onVectorUpdate() {
|
|
25854
25872
|
if (!this.item) {
|
|
25855
25873
|
return;
|
|
25856
25874
|
}
|
|
25875
|
+
if (this.debug) {
|
|
25876
|
+
this.debugPath.remove();
|
|
25877
|
+
this.updateDebugPath();
|
|
25878
|
+
}
|
|
25879
|
+
const points = this.parsePoints(this.matrixedPoints());
|
|
25880
|
+
const path = this.createPath(points);
|
|
25857
25881
|
this.item.removeSegments();
|
|
25858
|
-
this.item.addSegments(
|
|
25859
|
-
this.
|
|
25882
|
+
this.item.addSegments(path.segments);
|
|
25883
|
+
if (this.debug) {
|
|
25884
|
+
this.item.addChild(this.debugPath);
|
|
25885
|
+
}
|
|
25860
25886
|
}
|
|
25861
25887
|
createPaperItem() {
|
|
25862
25888
|
this.item = new this.scope.Path();
|
|
25863
|
-
this.item.strokeCap = "round";
|
|
25864
|
-
this.item.strokeJoin = "round";
|
|
25865
|
-
this.item.strokeScaling = false;
|
|
25866
25889
|
this.item.strokeColor = new this.scope.Color(this.strokeColor);
|
|
25867
25890
|
this.item.fillColor = new this.scope.Color(this.strokeColor);
|
|
25868
|
-
this.
|
|
25891
|
+
this.onVectorUpdate();
|
|
25869
25892
|
}
|
|
25870
25893
|
editorConfig() {
|
|
25871
25894
|
return new EditorConfig();
|
|
@@ -25875,8 +25898,8 @@ var CurveModel = class extends ElementModel {
|
|
|
25875
25898
|
}
|
|
25876
25899
|
styleKeys() {
|
|
25877
25900
|
return {
|
|
25878
|
-
include: ["strokeColor"],
|
|
25879
|
-
exclude: ["
|
|
25901
|
+
include: ["strokeColor", "strokeWidth"],
|
|
25902
|
+
exclude: ["dashArray", "fillColor"]
|
|
25880
25903
|
};
|
|
25881
25904
|
}
|
|
25882
25905
|
onStyleKeyUpdate(key) {
|
|
@@ -25886,8 +25909,12 @@ var CurveModel = class extends ElementModel {
|
|
|
25886
25909
|
if (key === "strokeColor") {
|
|
25887
25910
|
this.item.strokeColor = new this.scope.Color(this.strokeColor);
|
|
25888
25911
|
this.item.fillColor = new this.scope.Color(this.strokeColor);
|
|
25912
|
+
} else if (key === "strokeWidth") {
|
|
25913
|
+
this.onVectorUpdate();
|
|
25889
25914
|
}
|
|
25890
25915
|
}
|
|
25916
|
+
subDispose() {
|
|
25917
|
+
}
|
|
25891
25918
|
};
|
|
25892
25919
|
|
|
25893
25920
|
// src/model/renderable/SelectorModel.ts
|
|
@@ -25922,14 +25949,12 @@ var SelectorModel = class extends ElementModel {
|
|
|
25922
25949
|
this.root.set("points", initPoints);
|
|
25923
25950
|
}
|
|
25924
25951
|
}
|
|
25952
|
+
subDispose() {
|
|
25953
|
+
}
|
|
25925
25954
|
createPaperRect() {
|
|
25926
25955
|
const scope = this.scope;
|
|
25927
25956
|
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
|
-
);
|
|
25957
|
+
return new scope.Path.Rectangle(bounds, new scope.Point(this.points[4], this.points[4]));
|
|
25933
25958
|
}
|
|
25934
25959
|
onVectorUpdate() {
|
|
25935
25960
|
if (!this.item) {
|
|
@@ -25955,7 +25980,7 @@ var SelectorModel = class extends ElementModel {
|
|
|
25955
25980
|
exclude: []
|
|
25956
25981
|
};
|
|
25957
25982
|
}
|
|
25958
|
-
onStyleKeyUpdate(
|
|
25983
|
+
onStyleKeyUpdate(_key) {
|
|
25959
25984
|
}
|
|
25960
25985
|
};
|
|
25961
25986
|
|
|
@@ -26007,7 +26032,7 @@ var AnimationFrame = class {
|
|
|
26007
26032
|
_defineProperty5(this, "lastTime", 0);
|
|
26008
26033
|
_defineProperty5(this, "fps", 45);
|
|
26009
26034
|
_defineProperty5(this, "handleCallbacks", () => {
|
|
26010
|
-
|
|
26035
|
+
const functions = this.callbacks;
|
|
26011
26036
|
this.callbacks = [];
|
|
26012
26037
|
for (let i = 0, l2 = functions.length; i < l2; i++) {
|
|
26013
26038
|
functions[i]();
|
|
@@ -26060,6 +26085,8 @@ var SegmentsModel = class extends ElementModel {
|
|
|
26060
26085
|
this.root.set("points", new Y4.Array());
|
|
26061
26086
|
}
|
|
26062
26087
|
}
|
|
26088
|
+
subDispose() {
|
|
26089
|
+
}
|
|
26063
26090
|
onVectorUpdate() {
|
|
26064
26091
|
if (!this.item) {
|
|
26065
26092
|
return;
|
|
@@ -26094,7 +26121,7 @@ var SegmentsModel = class extends ElementModel {
|
|
|
26094
26121
|
exclude: []
|
|
26095
26122
|
};
|
|
26096
26123
|
}
|
|
26097
|
-
onStyleKeyUpdate(
|
|
26124
|
+
onStyleKeyUpdate(_key) {
|
|
26098
26125
|
}
|
|
26099
26126
|
};
|
|
26100
26127
|
|
|
@@ -26188,6 +26215,9 @@ var LineTool = class extends WhiteboardTool {
|
|
|
26188
26215
|
this.tool.minDistance = 1;
|
|
26189
26216
|
}
|
|
26190
26217
|
onMouseDown(event) {
|
|
26218
|
+
if (this.elementModel) {
|
|
26219
|
+
this.elementModel.dispose();
|
|
26220
|
+
}
|
|
26191
26221
|
this.elementModel = this.modelGetter().createLinePath(true);
|
|
26192
26222
|
this.from = event.point.clone();
|
|
26193
26223
|
this.to = event.point.clone();
|
|
@@ -26263,6 +26293,8 @@ var LineModel = class extends ElementModel {
|
|
|
26263
26293
|
this.root.set("tailArrow", "normal");
|
|
26264
26294
|
}
|
|
26265
26295
|
}
|
|
26296
|
+
subDispose() {
|
|
26297
|
+
}
|
|
26266
26298
|
onVectorUpdate() {
|
|
26267
26299
|
if (!this.item) {
|
|
26268
26300
|
return;
|
|
@@ -26299,7 +26331,7 @@ var LineModel = class extends ElementModel {
|
|
|
26299
26331
|
this.item.addChildren(this.renderLine());
|
|
26300
26332
|
}
|
|
26301
26333
|
createArrow(path) {
|
|
26302
|
-
|
|
26334
|
+
const [headPath, tailPath] = [new this.scope.Path(), new this.scope.Path()];
|
|
26303
26335
|
if (!path) {
|
|
26304
26336
|
return [headPath, tailPath];
|
|
26305
26337
|
}
|
|
@@ -26353,7 +26385,7 @@ var LineModel = class extends ElementModel {
|
|
|
26353
26385
|
exclude: ["fillColor"]
|
|
26354
26386
|
};
|
|
26355
26387
|
}
|
|
26356
|
-
onStyleKeyUpdate(
|
|
26388
|
+
onStyleKeyUpdate(_key) {
|
|
26357
26389
|
this.onVectorUpdate();
|
|
26358
26390
|
}
|
|
26359
26391
|
};
|
|
@@ -26408,6 +26440,7 @@ var LineControlPoint = class {
|
|
|
26408
26440
|
|
|
26409
26441
|
// src/model/renderable/PointTextModel.ts
|
|
26410
26442
|
import * as Y6 from "yjs";
|
|
26443
|
+
import { removeObserver } from "@netless/forge-room";
|
|
26411
26444
|
function _defineProperty10(e, r, t) {
|
|
26412
26445
|
return (r = _toPropertyKey10(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
26413
26446
|
}
|
|
@@ -26476,6 +26509,9 @@ var PointTextModel = class extends ElementModel {
|
|
|
26476
26509
|
}, 60);
|
|
26477
26510
|
}
|
|
26478
26511
|
}
|
|
26512
|
+
subDispose() {
|
|
26513
|
+
removeObserver(this.root, this.handleTextPropChange);
|
|
26514
|
+
}
|
|
26479
26515
|
getInternalMeasurement() {
|
|
26480
26516
|
if (!this.item) {
|
|
26481
26517
|
return null;
|
|
@@ -26581,6 +26617,8 @@ var TriangleModel = class extends ElementModel {
|
|
|
26581
26617
|
this.root.set("points", new Y7.Array());
|
|
26582
26618
|
}
|
|
26583
26619
|
}
|
|
26620
|
+
subDispose() {
|
|
26621
|
+
}
|
|
26584
26622
|
createPaperItem() {
|
|
26585
26623
|
this.item = new this.scope.Path();
|
|
26586
26624
|
this.item.strokeCap = "butt";
|
|
@@ -26637,7 +26675,7 @@ var TriangleModel = class extends ElementModel {
|
|
|
26637
26675
|
exclude: []
|
|
26638
26676
|
};
|
|
26639
26677
|
}
|
|
26640
|
-
onStyleKeyUpdate(
|
|
26678
|
+
onStyleKeyUpdate(_key) {
|
|
26641
26679
|
}
|
|
26642
26680
|
};
|
|
26643
26681
|
|
|
@@ -26676,6 +26714,8 @@ var RectangleModel = class extends ElementModel {
|
|
|
26676
26714
|
this.root.set("radius", 0);
|
|
26677
26715
|
}
|
|
26678
26716
|
}
|
|
26717
|
+
subDispose() {
|
|
26718
|
+
}
|
|
26679
26719
|
createSegments() {
|
|
26680
26720
|
const [a2, b2, c, d] = this.points;
|
|
26681
26721
|
const matrix = new this.scope.Matrix(this.pointsMatrix);
|
|
@@ -26807,7 +26847,7 @@ var RectangleModel = class extends ElementModel {
|
|
|
26807
26847
|
exclude: []
|
|
26808
26848
|
};
|
|
26809
26849
|
}
|
|
26810
|
-
onStyleKeyUpdate(
|
|
26850
|
+
onStyleKeyUpdate(_key) {
|
|
26811
26851
|
}
|
|
26812
26852
|
};
|
|
26813
26853
|
|
|
@@ -26948,9 +26988,11 @@ var EraserModel = class extends ElementModel {
|
|
|
26948
26988
|
exclude: []
|
|
26949
26989
|
};
|
|
26950
26990
|
}
|
|
26951
|
-
onStyleKeyUpdate(
|
|
26991
|
+
onStyleKeyUpdate(_key) {
|
|
26952
26992
|
return;
|
|
26953
26993
|
}
|
|
26994
|
+
subDispose() {
|
|
26995
|
+
}
|
|
26954
26996
|
};
|
|
26955
26997
|
|
|
26956
26998
|
// src/model/renderable/LaserPointerModel.ts
|
|
@@ -27107,30 +27149,15 @@ var LaserPointerModel = class extends ElementModel {
|
|
|
27107
27149
|
exclude: []
|
|
27108
27150
|
};
|
|
27109
27151
|
}
|
|
27110
|
-
onStyleKeyUpdate(
|
|
27152
|
+
onStyleKeyUpdate(_key) {
|
|
27111
27153
|
return;
|
|
27112
27154
|
}
|
|
27155
|
+
subDispose() {
|
|
27156
|
+
}
|
|
27113
27157
|
};
|
|
27114
27158
|
|
|
27115
27159
|
// src/WhitePermissions.ts
|
|
27116
|
-
import
|
|
27117
|
-
function _defineProperty15(e, r, t) {
|
|
27118
|
-
return (r = _toPropertyKey15(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
27119
|
-
}
|
|
27120
|
-
function _toPropertyKey15(t) {
|
|
27121
|
-
var i = _toPrimitive15(t, "string");
|
|
27122
|
-
return "symbol" == typeof i ? i : i + "";
|
|
27123
|
-
}
|
|
27124
|
-
function _toPrimitive15(t, r) {
|
|
27125
|
-
if ("object" != typeof t || !t) return t;
|
|
27126
|
-
var e = t[Symbol.toPrimitive];
|
|
27127
|
-
if (void 0 !== e) {
|
|
27128
|
-
var i = e.call(t, r || "default");
|
|
27129
|
-
if ("object" != typeof i) return i;
|
|
27130
|
-
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
27131
|
-
}
|
|
27132
|
-
return ("string" === r ? String : Number)(t);
|
|
27133
|
-
}
|
|
27160
|
+
import { AbstractApplicationPermissions } from "@netless/forge-room";
|
|
27134
27161
|
var WhiteboardPermissionFlag = function(WhiteboardPermissionFlag2) {
|
|
27135
27162
|
WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["none"] = 0] = "none";
|
|
27136
27163
|
WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["draw"] = 1] = "draw";
|
|
@@ -27143,120 +27170,28 @@ var WhiteboardPermissionFlag = function(WhiteboardPermissionFlag2) {
|
|
|
27143
27170
|
WhiteboardPermissionFlag2[WhiteboardPermissionFlag2["all"] = WhiteboardPermissionFlag2.draw | WhiteboardPermissionFlag2.editSelf | WhiteboardPermissionFlag2.editOthers | WhiteboardPermissionFlag2.deleteSelf | WhiteboardPermissionFlag2.deleteOthers | WhiteboardPermissionFlag2.mainView | WhiteboardPermissionFlag2.setOthersView] = "all";
|
|
27144
27171
|
return WhiteboardPermissionFlag2;
|
|
27145
27172
|
}({});
|
|
27146
|
-
var WhiteboardPermissions = class extends
|
|
27147
|
-
constructor(userManager, requestUserMap) {
|
|
27148
|
-
super();
|
|
27149
|
-
_defineProperty15(this, "requestUserMap", void 0);
|
|
27150
|
-
_defineProperty15(this, "userManager", void 0);
|
|
27151
|
-
_defineProperty15(this, "observers", /* @__PURE__ */ new Map());
|
|
27152
|
-
_defineProperty15(this, "handleUserLeave", (user) => {
|
|
27153
|
-
const cb = this.observers.get(user.id);
|
|
27154
|
-
if (cb) {
|
|
27155
|
-
this.requestUserMap(user.id).unobserve(cb);
|
|
27156
|
-
}
|
|
27157
|
-
});
|
|
27158
|
-
_defineProperty15(this, "handleUserJoin", (user) => {
|
|
27159
|
-
this.addObserve(user.id);
|
|
27160
|
-
});
|
|
27161
|
-
this.userManager = userManager;
|
|
27162
|
-
this.requestUserMap = requestUserMap;
|
|
27163
|
-
this.createModel(this.userManager.selfId);
|
|
27164
|
-
this.userManager.userIdList().forEach((userId) => {
|
|
27165
|
-
this.addObserve(userId);
|
|
27166
|
-
});
|
|
27167
|
-
this.userManager.on("join", this.handleUserJoin);
|
|
27168
|
-
this.userManager.on("leave", this.handleUserLeave);
|
|
27169
|
-
}
|
|
27170
|
-
addObserve(userId) {
|
|
27171
|
-
if (this.observers.has(userId)) {
|
|
27172
|
-
return;
|
|
27173
|
-
}
|
|
27174
|
-
const observer = (evt) => {
|
|
27175
|
-
this.handleUserPermissionChange(userId, evt);
|
|
27176
|
-
};
|
|
27177
|
-
this.observers.set(userId, observer);
|
|
27178
|
-
this.requestUserMap(userId).observe(observer);
|
|
27179
|
-
}
|
|
27180
|
-
createModel(userId) {
|
|
27181
|
-
const userMap = this.requestUserMap(userId);
|
|
27182
|
-
if (!userMap.has("permission")) {
|
|
27183
|
-
userMap.set("permission", 0);
|
|
27184
|
-
}
|
|
27185
|
-
}
|
|
27186
|
-
handleUserPermissionChange(userId, evt) {
|
|
27187
|
-
for (const [key, value] of evt.changes.keys.entries()) {
|
|
27188
|
-
if (key === "permission") {
|
|
27189
|
-
if (value.action === "add" || value.action === "update") {
|
|
27190
|
-
const newValue = this.requestUserMap(userId).get("permission");
|
|
27191
|
-
this.emit("change", userId, this.resolveFlags(newValue), newValue);
|
|
27192
|
-
}
|
|
27193
|
-
}
|
|
27194
|
-
}
|
|
27195
|
-
}
|
|
27173
|
+
var WhiteboardPermissions = class extends AbstractApplicationPermissions {
|
|
27196
27174
|
/**
|
|
27197
|
-
|
|
27198
|
-
|
|
27199
|
-
|
|
27200
|
-
|
|
27175
|
+
* 解析权限列表组合
|
|
27176
|
+
* @param {number} value - 权限数字值
|
|
27177
|
+
* @return {WhiteboardPermissionFlag[]} - 权限列表
|
|
27178
|
+
*/
|
|
27201
27179
|
resolveFlags(value) {
|
|
27202
27180
|
return [WhiteboardPermissionFlag.draw, WhiteboardPermissionFlag.editSelf, WhiteboardPermissionFlag.editOthers, WhiteboardPermissionFlag.deleteSelf, WhiteboardPermissionFlag.deleteOthers, WhiteboardPermissionFlag.mainView, WhiteboardPermissionFlag.setOthersView].filter((v) => (v & value) !== 0);
|
|
27203
27181
|
}
|
|
27204
|
-
/**
|
|
27205
|
-
* 获取权限列表组合对应的数值
|
|
27206
|
-
* @param { string } userId 不传表示获取自己
|
|
27207
|
-
*/
|
|
27208
|
-
getPermissionValue(userId) {
|
|
27209
|
-
return this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
|
|
27210
|
-
}
|
|
27211
|
-
/**
|
|
27212
|
-
* 获取权限列表
|
|
27213
|
-
* @param {string=} userId 可选, 不传表示获取自己
|
|
27214
|
-
*/
|
|
27215
|
-
getPermissionFlags(userId) {
|
|
27216
|
-
const value = this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0;
|
|
27217
|
-
return this.resolveFlags(value);
|
|
27218
|
-
}
|
|
27219
|
-
/**
|
|
27220
|
-
* 返回对应 userId 是否有相应权限
|
|
27221
|
-
* @param {string=} userId 可选, 不传表示返回自己是否有相应权限
|
|
27222
|
-
* @param {WhiteboardPermissionFlag} flag
|
|
27223
|
-
*/
|
|
27224
|
-
hasPermission(flag, userId) {
|
|
27225
|
-
return ((this.requestUserMap(userId ?? this.userManager.selfId).get("permission") ?? 0) & flag) !== 0;
|
|
27226
|
-
}
|
|
27227
|
-
/**
|
|
27228
|
-
* 添加权限
|
|
27229
|
-
* @param {WhiteboardPermissionFlag} flag 权限标记
|
|
27230
|
-
* @param {string=} userId 可选, 为 userId 添加权限, 不传表示为自己添加权限
|
|
27231
|
-
*/
|
|
27232
|
-
addPermission(flag, userId) {
|
|
27233
|
-
const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
|
|
27234
|
-
const oldValue = userMap.get("permission") ?? 0;
|
|
27235
|
-
this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue | flag);
|
|
27236
|
-
}
|
|
27237
|
-
/**
|
|
27238
|
-
* 移除权限
|
|
27239
|
-
* @param {WhiteboardPermissionFlag} flag 权限标记
|
|
27240
|
-
* @param {string=} userId 可选, 为 userId 移除权限, 不传表示为自己移除权限
|
|
27241
|
-
*/
|
|
27242
|
-
removePermission(flag, userId) {
|
|
27243
|
-
const userMap = this.requestUserMap(userId ?? this.userManager.selfId);
|
|
27244
|
-
const oldValue = userMap.get("permission") ?? 0;
|
|
27245
|
-
this.requestUserMap(userId ?? this.userManager.selfId).set("permission", oldValue & ~flag);
|
|
27246
|
-
}
|
|
27247
27182
|
};
|
|
27248
27183
|
|
|
27249
27184
|
// src/model/renderable/StraightLineModel.ts
|
|
27250
27185
|
var import_lodash7 = __toESM(require_lodash(), 1);
|
|
27251
27186
|
import * as Y11 from "yjs";
|
|
27252
|
-
function
|
|
27253
|
-
return (r =
|
|
27187
|
+
function _defineProperty15(e, r, t) {
|
|
27188
|
+
return (r = _toPropertyKey15(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
27254
27189
|
}
|
|
27255
|
-
function
|
|
27256
|
-
var i =
|
|
27190
|
+
function _toPropertyKey15(t) {
|
|
27191
|
+
var i = _toPrimitive15(t, "string");
|
|
27257
27192
|
return "symbol" == typeof i ? i : i + "";
|
|
27258
27193
|
}
|
|
27259
|
-
function
|
|
27194
|
+
function _toPrimitive15(t, r) {
|
|
27260
27195
|
if ("object" != typeof t || !t) return t;
|
|
27261
27196
|
var e = t[Symbol.toPrimitive];
|
|
27262
27197
|
if (void 0 !== e) {
|
|
@@ -27269,7 +27204,7 @@ function _toPrimitive16(t, r) {
|
|
|
27269
27204
|
var StraightLineModel = class extends ElementModel {
|
|
27270
27205
|
constructor(root, scope) {
|
|
27271
27206
|
super(root, scope);
|
|
27272
|
-
|
|
27207
|
+
_defineProperty15(this, "item", null);
|
|
27273
27208
|
if (!this.root.has("type")) {
|
|
27274
27209
|
this.root.set("type", "line");
|
|
27275
27210
|
}
|
|
@@ -27277,6 +27212,8 @@ var StraightLineModel = class extends ElementModel {
|
|
|
27277
27212
|
this.root.set("points", new Y11.Array());
|
|
27278
27213
|
}
|
|
27279
27214
|
}
|
|
27215
|
+
subDispose() {
|
|
27216
|
+
}
|
|
27280
27217
|
onVectorUpdate() {
|
|
27281
27218
|
if (!this.item) {
|
|
27282
27219
|
return;
|
|
@@ -27350,7 +27287,7 @@ var StraightLineModel = class extends ElementModel {
|
|
|
27350
27287
|
exclude: ["fillColor"]
|
|
27351
27288
|
};
|
|
27352
27289
|
}
|
|
27353
|
-
onStyleKeyUpdate(
|
|
27290
|
+
onStyleKeyUpdate(_key) {
|
|
27354
27291
|
if (!this.item) {
|
|
27355
27292
|
return;
|
|
27356
27293
|
}
|
|
@@ -27360,6 +27297,83 @@ var StraightLineModel = class extends ElementModel {
|
|
|
27360
27297
|
}
|
|
27361
27298
|
};
|
|
27362
27299
|
|
|
27300
|
+
// src/model/renderable/ImageModel.ts
|
|
27301
|
+
function _defineProperty16(e, r, t) {
|
|
27302
|
+
return (r = _toPropertyKey16(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
27303
|
+
}
|
|
27304
|
+
function _toPropertyKey16(t) {
|
|
27305
|
+
var i = _toPrimitive16(t, "string");
|
|
27306
|
+
return "symbol" == typeof i ? i : i + "";
|
|
27307
|
+
}
|
|
27308
|
+
function _toPrimitive16(t, r) {
|
|
27309
|
+
if ("object" != typeof t || !t) return t;
|
|
27310
|
+
var e = t[Symbol.toPrimitive];
|
|
27311
|
+
if (void 0 !== e) {
|
|
27312
|
+
var i = e.call(t, r || "default");
|
|
27313
|
+
if ("object" != typeof i) return i;
|
|
27314
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
27315
|
+
}
|
|
27316
|
+
return ("string" === r ? String : Number)(t);
|
|
27317
|
+
}
|
|
27318
|
+
var ImageModel = class extends ElementModel {
|
|
27319
|
+
get src() {
|
|
27320
|
+
return this.root.get("src");
|
|
27321
|
+
}
|
|
27322
|
+
constructor(root, scope, imageSets) {
|
|
27323
|
+
super(root, scope);
|
|
27324
|
+
_defineProperty16(this, "item", null);
|
|
27325
|
+
_defineProperty16(this, "imageSets", void 0);
|
|
27326
|
+
this.imageSets = imageSets;
|
|
27327
|
+
if (!this.root.has("type")) {
|
|
27328
|
+
this.root.set("type", "image");
|
|
27329
|
+
}
|
|
27330
|
+
this.root.set(ElementModel.KEYS.shadow, "");
|
|
27331
|
+
}
|
|
27332
|
+
subDispose() {
|
|
27333
|
+
const img = this.imageSets.querySelector(`[id='${this.uuid}']`);
|
|
27334
|
+
if (img) {
|
|
27335
|
+
img.remove();
|
|
27336
|
+
}
|
|
27337
|
+
}
|
|
27338
|
+
createPaperItem() {
|
|
27339
|
+
if (this.item) {
|
|
27340
|
+
return;
|
|
27341
|
+
}
|
|
27342
|
+
if (!this.imageSets.querySelector(`[id='${this.uuid}']`)) {
|
|
27343
|
+
const img = document.createElement("img");
|
|
27344
|
+
img.src = this.src;
|
|
27345
|
+
img.id = this.uuid;
|
|
27346
|
+
this.imageSets.appendChild(img);
|
|
27347
|
+
}
|
|
27348
|
+
this.item = new this.scope.Raster(this.uuid);
|
|
27349
|
+
const matrix = new this.scope.Matrix(this.pointsMatrix);
|
|
27350
|
+
this.item.matrix = matrix;
|
|
27351
|
+
}
|
|
27352
|
+
onVectorUpdate() {
|
|
27353
|
+
const matrix = new this.scope.Matrix(this.pointsMatrix);
|
|
27354
|
+
if (this.item) {
|
|
27355
|
+
this.item.matrix = matrix;
|
|
27356
|
+
}
|
|
27357
|
+
}
|
|
27358
|
+
vectorKeys() {
|
|
27359
|
+
return [];
|
|
27360
|
+
}
|
|
27361
|
+
styleKeys() {
|
|
27362
|
+
return {
|
|
27363
|
+
include: [],
|
|
27364
|
+
exclude: ["dashArray", "strokeColor", "fillColor", "strokeWidth"]
|
|
27365
|
+
};
|
|
27366
|
+
}
|
|
27367
|
+
onStyleKeyUpdate(_key) {
|
|
27368
|
+
}
|
|
27369
|
+
editorConfig() {
|
|
27370
|
+
const cfg = new EditorConfig();
|
|
27371
|
+
cfg.resizeModel = () => "four-corner";
|
|
27372
|
+
cfg.uniformScale = () => true;
|
|
27373
|
+
return cfg;
|
|
27374
|
+
}
|
|
27375
|
+
};
|
|
27376
|
+
|
|
27363
27377
|
// src/model/RenderableModel.ts
|
|
27364
27378
|
function _defineProperty17(e, r, t) {
|
|
27365
27379
|
return (r = _toPropertyKey17(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
@@ -27378,11 +27392,11 @@ function _toPrimitive17(t, r) {
|
|
|
27378
27392
|
}
|
|
27379
27393
|
return ("string" === r ? String : Number)(t);
|
|
27380
27394
|
}
|
|
27381
|
-
var RenderableModel = class extends
|
|
27395
|
+
var RenderableModel = class extends EventEmitter {
|
|
27382
27396
|
get uuid() {
|
|
27383
|
-
return uuidv4();
|
|
27397
|
+
return uuidv4().replace(/-/g, "");
|
|
27384
27398
|
}
|
|
27385
|
-
constructor(layerId, shadowEmitter, elements, scope, toolbarModel, userManager, hasPermission) {
|
|
27399
|
+
constructor(layerId, shadowEmitter, elements, scope, toolbarModel, userManager, imageSets, hasPermission) {
|
|
27386
27400
|
super();
|
|
27387
27401
|
_defineProperty17(this, "scope", void 0);
|
|
27388
27402
|
_defineProperty17(this, "toolbarModel", void 0);
|
|
@@ -27393,6 +27407,7 @@ var RenderableModel = class extends EventEmitter2 {
|
|
|
27393
27407
|
_defineProperty17(this, "maxIndex", -1);
|
|
27394
27408
|
_defineProperty17(this, "hasPermission", void 0);
|
|
27395
27409
|
_defineProperty17(this, "shadowEmitter", void 0);
|
|
27410
|
+
_defineProperty17(this, "imageSets", void 0);
|
|
27396
27411
|
_defineProperty17(this, "onElementsChange", (event) => {
|
|
27397
27412
|
for (const [key, value] of event.changes.keys.entries()) {
|
|
27398
27413
|
if (value.action === "add") {
|
|
@@ -27408,6 +27423,7 @@ var RenderableModel = class extends EventEmitter2 {
|
|
|
27408
27423
|
}
|
|
27409
27424
|
}
|
|
27410
27425
|
});
|
|
27426
|
+
this.imageSets = imageSets;
|
|
27411
27427
|
this.hasPermission = hasPermission;
|
|
27412
27428
|
this.shadowEmitter = shadowEmitter;
|
|
27413
27429
|
this.layerId = layerId;
|
|
@@ -27467,6 +27483,8 @@ var RenderableModel = class extends EventEmitter2 {
|
|
|
27467
27483
|
model = new LaserPointerModel(this.userManager.selfId, yMap, this.scope, (uuid) => {
|
|
27468
27484
|
this.removeElementItem(uuid);
|
|
27469
27485
|
});
|
|
27486
|
+
} else if (type === "image") {
|
|
27487
|
+
model = new ImageModel(yMap, this.scope, this.imageSets);
|
|
27470
27488
|
}
|
|
27471
27489
|
if (model) {
|
|
27472
27490
|
model.shadowEmitter = this.shadowEmitter;
|
|
@@ -27499,10 +27517,26 @@ var RenderableModel = class extends EventEmitter2 {
|
|
|
27499
27517
|
confirmPermission() {
|
|
27500
27518
|
const hasPermission = this.hasPermission(WhiteboardPermissionFlag.draw);
|
|
27501
27519
|
if (!hasPermission) {
|
|
27502
|
-
|
|
27520
|
+
log("[@netless/forge-whiteboard] no permission to draw", {}, "warning");
|
|
27503
27521
|
}
|
|
27504
27522
|
return hasPermission;
|
|
27505
27523
|
}
|
|
27524
|
+
createImage(src) {
|
|
27525
|
+
if (!this.confirmPermission()) {
|
|
27526
|
+
return;
|
|
27527
|
+
}
|
|
27528
|
+
const model = new ImageModel(new Y12.Map(), this.scope, this.imageSets);
|
|
27529
|
+
model.root.set("src", src);
|
|
27530
|
+
const initMatrix = new this.scope.Matrix();
|
|
27531
|
+
const center = this.scope.project.view.center;
|
|
27532
|
+
initMatrix.translate({
|
|
27533
|
+
x: center.x,
|
|
27534
|
+
y: center.y
|
|
27535
|
+
});
|
|
27536
|
+
model.appendPointsMatrix(initMatrix);
|
|
27537
|
+
model.ownerId = this.userManager.selfId;
|
|
27538
|
+
this.addElementToDoc(model.root);
|
|
27539
|
+
}
|
|
27506
27540
|
createCurve() {
|
|
27507
27541
|
let shadow = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
|
|
27508
27542
|
if (!this.confirmPermission()) {
|
|
@@ -27572,7 +27606,7 @@ var RenderableModel = class extends EventEmitter2 {
|
|
|
27572
27606
|
return segmentsModel;
|
|
27573
27607
|
}
|
|
27574
27608
|
createSelector() {
|
|
27575
|
-
let
|
|
27609
|
+
let _shadow = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : false;
|
|
27576
27610
|
if (!this.hasPermission(WhiteboardPermissionFlag.editSelf) && !this.hasPermission(WhiteboardPermissionFlag.deleteOthers)) {
|
|
27577
27611
|
return null;
|
|
27578
27612
|
}
|
|
@@ -27629,7 +27663,11 @@ var RenderableModel = class extends EventEmitter2 {
|
|
|
27629
27663
|
});
|
|
27630
27664
|
}
|
|
27631
27665
|
dispose() {
|
|
27666
|
+
removeObserver2(this.elements, this.onElementsChange);
|
|
27632
27667
|
this.elements.clear();
|
|
27668
|
+
Array.from(this.elementModels.values()).forEach((model) => {
|
|
27669
|
+
model.dispose();
|
|
27670
|
+
});
|
|
27633
27671
|
}
|
|
27634
27672
|
};
|
|
27635
27673
|
|
|
@@ -27672,10 +27710,10 @@ var AnglePrecision = Deg2Rad(2);
|
|
|
27672
27710
|
var Phi = 0.5 * (-1 + Math.sqrt(5));
|
|
27673
27711
|
function DollarRecognizer() {
|
|
27674
27712
|
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
|
|
27713
|
+
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)]);
|
|
27714
|
+
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)]);
|
|
27715
|
+
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)]);
|
|
27716
|
+
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
27717
|
this.Recognize = function(points, useProtractor) {
|
|
27680
27718
|
var t0 = Date.now();
|
|
27681
27719
|
var candidate = new Unistroke("", points);
|
|
@@ -27736,7 +27774,7 @@ function RotateBy(points, radians) {
|
|
|
27736
27774
|
var c = Centroid(points);
|
|
27737
27775
|
var cos = Math.cos(radians);
|
|
27738
27776
|
var sin = Math.sin(radians);
|
|
27739
|
-
var newpoints =
|
|
27777
|
+
var newpoints = [];
|
|
27740
27778
|
for (var i = 0; i < points.length; i++) {
|
|
27741
27779
|
var qx = (points[i].X - c.X) * cos - (points[i].Y - c.Y) * sin + c.X;
|
|
27742
27780
|
var qy = (points[i].X - c.X) * sin + (points[i].Y - c.Y) * cos + c.Y;
|
|
@@ -27746,7 +27784,7 @@ function RotateBy(points, radians) {
|
|
|
27746
27784
|
}
|
|
27747
27785
|
function ScaleTo(points, size) {
|
|
27748
27786
|
var B2 = BoundingBox(points);
|
|
27749
|
-
var newpoints =
|
|
27787
|
+
var newpoints = [];
|
|
27750
27788
|
for (var i = 0; i < points.length; i++) {
|
|
27751
27789
|
var qx = points[i].X * (size / B2.Width);
|
|
27752
27790
|
var qy = points[i].Y * (size / B2.Height);
|
|
@@ -27756,7 +27794,7 @@ function ScaleTo(points, size) {
|
|
|
27756
27794
|
}
|
|
27757
27795
|
function TranslateTo(points, pt) {
|
|
27758
27796
|
var c = Centroid(points);
|
|
27759
|
-
var newpoints =
|
|
27797
|
+
var newpoints = [];
|
|
27760
27798
|
for (var i = 0; i < points.length; i++) {
|
|
27761
27799
|
var qx = points[i].X + pt.X - c.X;
|
|
27762
27800
|
var qy = points[i].Y + pt.Y - c.Y;
|
|
@@ -27766,14 +27804,14 @@ function TranslateTo(points, pt) {
|
|
|
27766
27804
|
}
|
|
27767
27805
|
function Vectorize(points) {
|
|
27768
27806
|
var sum = 0;
|
|
27769
|
-
var vector =
|
|
27770
|
-
for (
|
|
27807
|
+
var vector = [];
|
|
27808
|
+
for (let i = 0; i < points.length; i++) {
|
|
27771
27809
|
vector[vector.length] = points[i].X;
|
|
27772
27810
|
vector[vector.length] = points[i].Y;
|
|
27773
27811
|
sum += points[i].X * points[i].X + points[i].Y * points[i].Y;
|
|
27774
27812
|
}
|
|
27775
27813
|
var magnitude = Math.sqrt(sum);
|
|
27776
|
-
for (
|
|
27814
|
+
for (let i = 0; i < vector.length; i++)
|
|
27777
27815
|
vector[i] /= magnitude;
|
|
27778
27816
|
return vector;
|
|
27779
27817
|
}
|
|
@@ -27927,17 +27965,35 @@ var CurveTool = class extends WhiteboardTool {
|
|
|
27927
27965
|
_defineProperty19(this, "pointCount", 0);
|
|
27928
27966
|
this.tool.minDistance = 1;
|
|
27929
27967
|
}
|
|
27930
|
-
onMouseDown(
|
|
27968
|
+
onMouseDown(_event) {
|
|
27931
27969
|
this.pointCount = 0;
|
|
27970
|
+
if (this.elementModel) {
|
|
27971
|
+
this.elementModel.dispose();
|
|
27972
|
+
}
|
|
27932
27973
|
this.elementModel = this.modelGetter().createCurve(true);
|
|
27933
27974
|
}
|
|
27934
27975
|
onMouseDrag(event) {
|
|
27935
27976
|
if (this.pointCount > 1024) {
|
|
27936
27977
|
return;
|
|
27937
27978
|
}
|
|
27979
|
+
const MIN_DISTANCE = 4;
|
|
27938
27980
|
if (this.elementModel) {
|
|
27939
|
-
this.
|
|
27940
|
-
|
|
27981
|
+
const len = this.elementModel.points.length;
|
|
27982
|
+
let last = {
|
|
27983
|
+
x: 0,
|
|
27984
|
+
y: 0
|
|
27985
|
+
};
|
|
27986
|
+
if (len >= 2) {
|
|
27987
|
+
last = {
|
|
27988
|
+
x: this.elementModel.points[len - 2],
|
|
27989
|
+
y: this.elementModel.points[len - 1]
|
|
27990
|
+
};
|
|
27991
|
+
}
|
|
27992
|
+
const dist = Math.max(Math.abs(last.x - event.point.x), Math.abs(last.y - event.point.y));
|
|
27993
|
+
if (dist >= MIN_DISTANCE) {
|
|
27994
|
+
this.pointCount += 1;
|
|
27995
|
+
this.elementModel.appendPoints([Math.round(event.point.x), Math.round(event.point.y)]);
|
|
27996
|
+
}
|
|
27941
27997
|
}
|
|
27942
27998
|
}
|
|
27943
27999
|
onMouseUp(event) {
|
|
@@ -27999,6 +28055,9 @@ var RectangleTool = class extends WhiteboardTool {
|
|
|
27999
28055
|
this.tool.minDistance = 1;
|
|
28000
28056
|
}
|
|
28001
28057
|
onMouseDown(event) {
|
|
28058
|
+
if (this.elementModel) {
|
|
28059
|
+
this.elementModel.dispose();
|
|
28060
|
+
}
|
|
28002
28061
|
this.elementModel = this.modelGetter().createRectangle(true);
|
|
28003
28062
|
this.from = event.point.clone();
|
|
28004
28063
|
this.to = event.point.clone();
|
|
@@ -28020,7 +28079,8 @@ var RectangleTool = class extends WhiteboardTool {
|
|
|
28020
28079
|
};
|
|
28021
28080
|
|
|
28022
28081
|
// src/model/ToolbarModel.ts
|
|
28023
|
-
import
|
|
28082
|
+
import EventEmitter2 from "eventemitter3";
|
|
28083
|
+
import { removeObserver as removeObserver3 } from "@netless/forge-room";
|
|
28024
28084
|
function _defineProperty21(e, r, t) {
|
|
28025
28085
|
return (r = _toPropertyKey21(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
28026
28086
|
}
|
|
@@ -28047,7 +28107,7 @@ var TOOLBAR_KEYS = {
|
|
|
28047
28107
|
strokeWidth: "strokeWidth",
|
|
28048
28108
|
dashArray: "dashArray"
|
|
28049
28109
|
};
|
|
28050
|
-
var ToolbarModel = class extends
|
|
28110
|
+
var ToolbarModel = class extends EventEmitter2 {
|
|
28051
28111
|
get currentTool() {
|
|
28052
28112
|
return this.root.get(TOOLBAR_KEYS.tool);
|
|
28053
28113
|
}
|
|
@@ -28116,6 +28176,10 @@ var ToolbarModel = class extends EventEmitter3 {
|
|
|
28116
28176
|
}
|
|
28117
28177
|
});
|
|
28118
28178
|
}
|
|
28179
|
+
dispose() {
|
|
28180
|
+
removeObserver3(this.root, this.handleRootUpdate);
|
|
28181
|
+
this.removeAllListeners();
|
|
28182
|
+
}
|
|
28119
28183
|
};
|
|
28120
28184
|
|
|
28121
28185
|
// src/tool/SelectorTool.ts
|
|
@@ -28149,6 +28213,9 @@ var SelectorTool = class extends WhiteboardTool {
|
|
|
28149
28213
|
onMouseDown(event) {
|
|
28150
28214
|
this.from = null;
|
|
28151
28215
|
this.to = null;
|
|
28216
|
+
if (this.elementModel) {
|
|
28217
|
+
this.elementModel.dispose();
|
|
28218
|
+
}
|
|
28152
28219
|
this.elementModel = this.modelGetter().createSelector();
|
|
28153
28220
|
this.from = event.point.clone();
|
|
28154
28221
|
this.to = event.point.clone();
|
|
@@ -28198,7 +28265,8 @@ var SelectorTool = class extends WhiteboardTool {
|
|
|
28198
28265
|
|
|
28199
28266
|
// src/model/SelectElementsModel.ts
|
|
28200
28267
|
import * as Y13 from "yjs";
|
|
28201
|
-
import
|
|
28268
|
+
import EventEmitter3 from "eventemitter3";
|
|
28269
|
+
import { removeDeepObserver as removeDeepObserver2 } from "@netless/forge-room";
|
|
28202
28270
|
|
|
28203
28271
|
// src/WhiteboardKeys.ts
|
|
28204
28272
|
var WhiteboardKeys = {
|
|
@@ -28229,7 +28297,7 @@ function _toPrimitive23(t, r) {
|
|
|
28229
28297
|
}
|
|
28230
28298
|
return ("string" === r ? String : Number)(t);
|
|
28231
28299
|
}
|
|
28232
|
-
var SelectElementsModel = class extends
|
|
28300
|
+
var SelectElementsModel = class extends EventEmitter3 {
|
|
28233
28301
|
get hasEditSelfPermission() {
|
|
28234
28302
|
return this.hasPermission(WhiteboardPermissionFlag.editSelf);
|
|
28235
28303
|
}
|
|
@@ -28245,13 +28313,17 @@ var SelectElementsModel = class extends EventEmitter4 {
|
|
|
28245
28313
|
_defineProperty23(this, "handleUserLeave", (user) => {
|
|
28246
28314
|
const cb = this.observers.get(user.id);
|
|
28247
28315
|
if (cb) {
|
|
28248
|
-
this.requestUserMap(user.id)
|
|
28316
|
+
removeDeepObserver2(this.requestUserMap(user.id), cb);
|
|
28317
|
+
this.observers.delete(user.id);
|
|
28249
28318
|
}
|
|
28250
28319
|
});
|
|
28251
28320
|
_defineProperty23(this, "handleUserJoin", (user) => {
|
|
28252
28321
|
const observer = (evts) => {
|
|
28253
28322
|
this.handleUserSelectElementsChange(user.id, evts);
|
|
28254
28323
|
};
|
|
28324
|
+
if (this.observers.has(user.id)) {
|
|
28325
|
+
removeDeepObserver2(this.requestUserMap(user.id), this.observers.get(user.id));
|
|
28326
|
+
}
|
|
28255
28327
|
this.requestUserMap(user.id).observeDeep(observer);
|
|
28256
28328
|
this.observers.set(user.id, observer);
|
|
28257
28329
|
});
|
|
@@ -28271,6 +28343,9 @@ var SelectElementsModel = class extends EventEmitter4 {
|
|
|
28271
28343
|
const observer = (evts) => {
|
|
28272
28344
|
this.handleUserSelectElementsChange(userId, evts);
|
|
28273
28345
|
};
|
|
28346
|
+
if (this.observers.has(userId)) {
|
|
28347
|
+
removeDeepObserver2(this.requestUserMap(userId), this.observers.get(userId));
|
|
28348
|
+
}
|
|
28274
28349
|
this.requestUserMap(userId).observeDeep(observer);
|
|
28275
28350
|
this.observers.set(userId, observer);
|
|
28276
28351
|
});
|
|
@@ -28325,12 +28400,9 @@ var SelectElementsModel = class extends EventEmitter4 {
|
|
|
28325
28400
|
});
|
|
28326
28401
|
}
|
|
28327
28402
|
dispose() {
|
|
28328
|
-
this.
|
|
28329
|
-
|
|
28330
|
-
|
|
28331
|
-
this.requestUserMap(userId).unobserveDeep(cb);
|
|
28332
|
-
}
|
|
28333
|
-
});
|
|
28403
|
+
for (const [key, value] of this.observers.entries()) {
|
|
28404
|
+
removeDeepObserver2(this.requestUserMap(key), value);
|
|
28405
|
+
}
|
|
28334
28406
|
this.observers.clear();
|
|
28335
28407
|
this.userManager.off("leave", this.handleUserLeave);
|
|
28336
28408
|
this.userManager.off("join", this.handleUserJoin);
|
|
@@ -28338,10 +28410,10 @@ var SelectElementsModel = class extends EventEmitter4 {
|
|
|
28338
28410
|
};
|
|
28339
28411
|
|
|
28340
28412
|
// src/edit/Editor.ts
|
|
28341
|
-
import
|
|
28413
|
+
import EventEmitter5 from "eventemitter3";
|
|
28342
28414
|
|
|
28343
28415
|
// src/edit/TextEditor.ts
|
|
28344
|
-
import { EventEmitter as
|
|
28416
|
+
import { EventEmitter as EventEmitter4 } from "eventemitter3";
|
|
28345
28417
|
function _defineProperty24(e, r, t) {
|
|
28346
28418
|
return (r = _toPropertyKey24(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
28347
28419
|
}
|
|
@@ -28359,7 +28431,7 @@ function _toPrimitive24(t, r) {
|
|
|
28359
28431
|
}
|
|
28360
28432
|
return ("string" === r ? String : Number)(t);
|
|
28361
28433
|
}
|
|
28362
|
-
var TextEditor = class extends
|
|
28434
|
+
var TextEditor = class extends EventEmitter4 {
|
|
28363
28435
|
constructor(camera) {
|
|
28364
28436
|
super();
|
|
28365
28437
|
_defineProperty24(this, "rootView", void 0);
|
|
@@ -28392,12 +28464,12 @@ var TextEditor = class extends EventEmitter5 {
|
|
|
28392
28464
|
});
|
|
28393
28465
|
this.camera = camera;
|
|
28394
28466
|
this.rootView = document.createElement("div");
|
|
28395
|
-
this.rootView.style.cssText =
|
|
28467
|
+
this.rootView.style.cssText = "position:absolute;width:100%;height:100%;top:0;left:0;overflow:hidden;";
|
|
28396
28468
|
this.content = document.createElement("div");
|
|
28397
28469
|
this.content.setAttribute("spellcheck", "false");
|
|
28398
28470
|
this.content.textContent = "";
|
|
28399
28471
|
this.content.setAttribute("contenteditable", "plaintext-only");
|
|
28400
|
-
this.content.style.cssText =
|
|
28472
|
+
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
28473
|
this.content.style.transformOrigin = "0 0";
|
|
28402
28474
|
this.rootView.appendChild(this.content);
|
|
28403
28475
|
this.content.addEventListener("input", this.handleContentInput);
|
|
@@ -28502,7 +28574,7 @@ var ANCHOR_STYLE = {
|
|
|
28502
28574
|
b: "cursor:s-resize;bottom:-3px;left:50%;translate:-50%;",
|
|
28503
28575
|
br: "cursor:se-resize;bottom:-3px;right:-3px"
|
|
28504
28576
|
};
|
|
28505
|
-
var Bounds = class extends
|
|
28577
|
+
var Bounds = class extends EventEmitter5 {
|
|
28506
28578
|
get width() {
|
|
28507
28579
|
return this.maxX - this.minX;
|
|
28508
28580
|
}
|
|
@@ -28641,7 +28713,7 @@ var Bounds = class extends EventEmitter6 {
|
|
|
28641
28713
|
this.maxY = maxY;
|
|
28642
28714
|
}
|
|
28643
28715
|
};
|
|
28644
|
-
var Editor = class extends
|
|
28716
|
+
var Editor = class extends EventEmitter5 {
|
|
28645
28717
|
constructor(scope, shadowScope, shadowEmitter, canvasElement, camera, initConfig) {
|
|
28646
28718
|
super();
|
|
28647
28719
|
_defineProperty25(this, "rootView", void 0);
|
|
@@ -28742,7 +28814,7 @@ var Editor = class extends EventEmitter6 {
|
|
|
28742
28814
|
}
|
|
28743
28815
|
if (this.editMode === "matrix" && this.editAnchor && this.lastEditPoint) {
|
|
28744
28816
|
const offsetX = evt.pageX - this.lastEditPoint.x;
|
|
28745
|
-
|
|
28817
|
+
const offsetY = evt.pageY - this.lastEditPoint.y;
|
|
28746
28818
|
this.bounds.offsetBy(this.editAnchor, offsetX, offsetY, this.uniformScale ? this.aspectRatio : -1);
|
|
28747
28819
|
this.lastEditPoint = {
|
|
28748
28820
|
x: evt.pageX,
|
|
@@ -28767,7 +28839,7 @@ var Editor = class extends EventEmitter6 {
|
|
|
28767
28839
|
}
|
|
28768
28840
|
if (this.editMode === "translate" && this.lastEditPoint) {
|
|
28769
28841
|
const offsetX = evt.pageX - this.lastEditPoint.x;
|
|
28770
|
-
|
|
28842
|
+
const offsetY = evt.pageY - this.lastEditPoint.y;
|
|
28771
28843
|
this.bounds.translate(offsetX, offsetY);
|
|
28772
28844
|
this.updateBoundsByShadow();
|
|
28773
28845
|
this.lastEditPoint = {
|
|
@@ -28844,7 +28916,7 @@ var Editor = class extends EventEmitter6 {
|
|
|
28844
28916
|
this.ctrlId = initConfig.ctrlId;
|
|
28845
28917
|
this.ctrlNickName = initConfig.ctrlNickName;
|
|
28846
28918
|
this.rootView = document.createElement("div");
|
|
28847
|
-
this.rootView.style.cssText =
|
|
28919
|
+
this.rootView.style.cssText = "overflow:hidden;position:absolute;display:none;width:100%;height:100%;top:50%;left:50%;transform:translate(-50%,-50%);";
|
|
28848
28920
|
this.frame = document.createElement("div");
|
|
28849
28921
|
this.frame.style.position = "absolute";
|
|
28850
28922
|
this.frame.style.padding = "8px";
|
|
@@ -28865,7 +28937,7 @@ var Editor = class extends EventEmitter6 {
|
|
|
28865
28937
|
} else {
|
|
28866
28938
|
this.title = document.createElement("div");
|
|
28867
28939
|
this.title.textContent = `${this.ctrlNickName}`;
|
|
28868
|
-
this.title.style.cssText =
|
|
28940
|
+
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
28941
|
this.frame.appendChild(this.title);
|
|
28870
28942
|
this.rootView.style.pointerEvents = "none";
|
|
28871
28943
|
}
|
|
@@ -29037,7 +29109,9 @@ var Editor = class extends EventEmitter6 {
|
|
|
29037
29109
|
this.targets = [];
|
|
29038
29110
|
this.editorConfig = null;
|
|
29039
29111
|
if (this.ctrlId !== this.viewerId) {
|
|
29040
|
-
this.scope.project.view
|
|
29112
|
+
if (this.scope.project.view) {
|
|
29113
|
+
this.scope.project.view.off("frame", this.updateBounds);
|
|
29114
|
+
}
|
|
29041
29115
|
}
|
|
29042
29116
|
}
|
|
29043
29117
|
show() {
|
|
@@ -29096,7 +29170,7 @@ var TextTool = class extends WhiteboardTool {
|
|
|
29096
29170
|
onMouseDown(event) {
|
|
29097
29171
|
this.from = event.point.clone();
|
|
29098
29172
|
}
|
|
29099
|
-
onMouseDrag(
|
|
29173
|
+
onMouseDrag(_event) {
|
|
29100
29174
|
}
|
|
29101
29175
|
onMouseUp(event) {
|
|
29102
29176
|
this.to = event.point.clone();
|
|
@@ -29108,6 +29182,9 @@ var TextTool = class extends WhiteboardTool {
|
|
|
29108
29182
|
}
|
|
29109
29183
|
}
|
|
29110
29184
|
createPointEditor(x, y) {
|
|
29185
|
+
if (this.elementModel) {
|
|
29186
|
+
this.elementModel.dispose();
|
|
29187
|
+
}
|
|
29111
29188
|
this.elementModel = this.modelGetter().createPointText(x, y, true);
|
|
29112
29189
|
if (this.elementModel === null) {
|
|
29113
29190
|
return;
|
|
@@ -29148,10 +29225,10 @@ var TextTool = class extends WhiteboardTool {
|
|
|
29148
29225
|
};
|
|
29149
29226
|
|
|
29150
29227
|
// src/Camera.ts
|
|
29151
|
-
import
|
|
29228
|
+
import EventEmitter7 from "eventemitter3";
|
|
29152
29229
|
|
|
29153
29230
|
// src/Gesture.ts
|
|
29154
|
-
import
|
|
29231
|
+
import EventEmitter6 from "eventemitter3";
|
|
29155
29232
|
function _defineProperty27(e, r, t) {
|
|
29156
29233
|
return (r = _toPropertyKey27(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
29157
29234
|
}
|
|
@@ -29169,7 +29246,7 @@ function _toPrimitive27(t, r) {
|
|
|
29169
29246
|
}
|
|
29170
29247
|
return ("string" === r ? String : Number)(t);
|
|
29171
29248
|
}
|
|
29172
|
-
var Gesture = class extends
|
|
29249
|
+
var Gesture = class extends EventEmitter6 {
|
|
29173
29250
|
constructor(element, scope) {
|
|
29174
29251
|
super();
|
|
29175
29252
|
_defineProperty27(this, "element", void 0);
|
|
@@ -29233,6 +29310,7 @@ var Gesture = class extends EventEmitter7 {
|
|
|
29233
29310
|
};
|
|
29234
29311
|
|
|
29235
29312
|
// src/Camera.ts
|
|
29313
|
+
import { removeObserver as removeObserver4 } from "@netless/forge-room";
|
|
29236
29314
|
function _defineProperty28(e, r, t) {
|
|
29237
29315
|
return (r = _toPropertyKey28(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
29238
29316
|
}
|
|
@@ -29250,7 +29328,7 @@ function _toPrimitive28(t, r) {
|
|
|
29250
29328
|
}
|
|
29251
29329
|
return ("string" === r ? String : Number)(t);
|
|
29252
29330
|
}
|
|
29253
|
-
var Camera = class extends
|
|
29331
|
+
var Camera = class extends EventEmitter7 {
|
|
29254
29332
|
get inherentMatrix() {
|
|
29255
29333
|
const inherentMatrix = new this.scope.Matrix();
|
|
29256
29334
|
inherentMatrix.scale(this.inherentScale, [0, 0]);
|
|
@@ -29306,13 +29384,16 @@ var Camera = class extends EventEmitter8 {
|
|
|
29306
29384
|
_defineProperty28(this, "handleUserLeave", (user) => {
|
|
29307
29385
|
const cb = this.observers.get(user.id);
|
|
29308
29386
|
if (cb) {
|
|
29309
|
-
this.requestUserMap(user.id)
|
|
29387
|
+
removeObserver4(this.requestUserMap(user.id), cb);
|
|
29310
29388
|
}
|
|
29311
29389
|
});
|
|
29312
29390
|
_defineProperty28(this, "handleUserJoin", (user) => {
|
|
29313
29391
|
const observer = (evt) => {
|
|
29314
29392
|
this.handleViewMatrixUpdate(user.id, evt);
|
|
29315
29393
|
};
|
|
29394
|
+
if (this.observers.has(user.id)) {
|
|
29395
|
+
removeObserver4(this.requestUserMap(user.id), observer);
|
|
29396
|
+
}
|
|
29316
29397
|
this.requestUserMap(user.id).observe(observer);
|
|
29317
29398
|
this.observers.set(user.id, observer);
|
|
29318
29399
|
});
|
|
@@ -29392,7 +29473,7 @@ var Camera = class extends EventEmitter8 {
|
|
|
29392
29473
|
});
|
|
29393
29474
|
this.maxScale = maxScale;
|
|
29394
29475
|
this.bound = window.document.createElement("div");
|
|
29395
|
-
this.bound.style.cssText =
|
|
29476
|
+
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
29477
|
this.initSize = initSize;
|
|
29397
29478
|
this.hasPermission = hasPermission;
|
|
29398
29479
|
this.paperSize = _paperSize;
|
|
@@ -29417,6 +29498,9 @@ var Camera = class extends EventEmitter8 {
|
|
|
29417
29498
|
const observer = (evt) => {
|
|
29418
29499
|
this.handleViewMatrixUpdate(userId, evt);
|
|
29419
29500
|
};
|
|
29501
|
+
if (this.observers.has(userId)) {
|
|
29502
|
+
removeObserver4(this.requestUserMap(userId), observer);
|
|
29503
|
+
}
|
|
29420
29504
|
this.requestUserMap(userId).observe(observer);
|
|
29421
29505
|
this.observers.set(userId, observer);
|
|
29422
29506
|
});
|
|
@@ -29453,7 +29537,7 @@ var Camera = class extends EventEmitter8 {
|
|
|
29453
29537
|
this.bound.style.boxShadow = `inset 0px 0px 6px 2px ${this.boundaryColor}`;
|
|
29454
29538
|
window.clearTimeout(this.boundTiemoutId);
|
|
29455
29539
|
this.boundTiemoutId = window.setTimeout(() => {
|
|
29456
|
-
this.bound.style.boxShadow =
|
|
29540
|
+
this.bound.style.boxShadow = "none";
|
|
29457
29541
|
}, 100);
|
|
29458
29542
|
}
|
|
29459
29543
|
}
|
|
@@ -29463,6 +29547,9 @@ var Camera = class extends EventEmitter8 {
|
|
|
29463
29547
|
updateInherentScale(scale) {
|
|
29464
29548
|
this.inherentScale = scale;
|
|
29465
29549
|
}
|
|
29550
|
+
getInherentScale() {
|
|
29551
|
+
return this.inherentScale;
|
|
29552
|
+
}
|
|
29466
29553
|
getActiveMatrix() {
|
|
29467
29554
|
const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
|
|
29468
29555
|
let matrixValue;
|
|
@@ -29605,6 +29692,19 @@ var Camera = class extends EventEmitter8 {
|
|
|
29605
29692
|
y: 0
|
|
29606
29693
|
};
|
|
29607
29694
|
}
|
|
29695
|
+
dispose() {
|
|
29696
|
+
Array.from(this.observers.keys()).forEach((userId) => {
|
|
29697
|
+
const cb = this.observers.get(userId);
|
|
29698
|
+
if (cb) {
|
|
29699
|
+
removeObserver4(this.requestUserMap(userId), cb);
|
|
29700
|
+
}
|
|
29701
|
+
});
|
|
29702
|
+
removeObserver4(this.whiteboardAttrsMap, this.handleMainCameraChange);
|
|
29703
|
+
this.userManager.off("join", this.handleUserJoin);
|
|
29704
|
+
this.userManager.off("leave", this.handleUserLeave);
|
|
29705
|
+
this.gesture.removeAllListeners();
|
|
29706
|
+
this.removeAllListeners();
|
|
29707
|
+
}
|
|
29608
29708
|
};
|
|
29609
29709
|
|
|
29610
29710
|
// src/tool/EllipseTool.ts
|
|
@@ -29634,6 +29734,9 @@ var EllipseTool = class extends WhiteboardTool {
|
|
|
29634
29734
|
this.tool.minDistance = 1;
|
|
29635
29735
|
}
|
|
29636
29736
|
onMouseDown(event) {
|
|
29737
|
+
if (this.elementModel) {
|
|
29738
|
+
this.elementModel.dispose();
|
|
29739
|
+
}
|
|
29637
29740
|
this.elementModel = this.modelGetter().createSegmentedPath("ellipse", true);
|
|
29638
29741
|
this.from = event.point.clone();
|
|
29639
29742
|
this.to = event.point.clone();
|
|
@@ -29685,6 +29788,9 @@ var TriangleTool = class extends WhiteboardTool {
|
|
|
29685
29788
|
this.tool.minDistance = 1;
|
|
29686
29789
|
}
|
|
29687
29790
|
onMouseDown(event) {
|
|
29791
|
+
if (this.elementModel) {
|
|
29792
|
+
this.elementModel.dispose();
|
|
29793
|
+
}
|
|
29688
29794
|
this.elementModel = this.modelGetter().createTriangle(true);
|
|
29689
29795
|
this.from = event.point.clone();
|
|
29690
29796
|
this.to = event.point.clone();
|
|
@@ -29706,7 +29812,7 @@ var TriangleTool = class extends WhiteboardTool {
|
|
|
29706
29812
|
};
|
|
29707
29813
|
|
|
29708
29814
|
// src/Whiteboard.ts
|
|
29709
|
-
import
|
|
29815
|
+
import EventEmitter8 from "eventemitter3";
|
|
29710
29816
|
function _defineProperty31(e, r, t) {
|
|
29711
29817
|
return (r = _toPropertyKey31(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
29712
29818
|
}
|
|
@@ -29724,8 +29830,7 @@ function _toPrimitive31(t, r) {
|
|
|
29724
29830
|
}
|
|
29725
29831
|
return ("string" === r ? String : Number)(t);
|
|
29726
29832
|
}
|
|
29727
|
-
var Whiteboard = class extends
|
|
29728
|
-
// public insertImage!: (src: string) => void;
|
|
29833
|
+
var Whiteboard = class extends EventEmitter8 {
|
|
29729
29834
|
constructor(view) {
|
|
29730
29835
|
super();
|
|
29731
29836
|
_defineProperty31(this, "view", void 0);
|
|
@@ -29744,6 +29849,7 @@ var Whiteboard = class extends EventEmitter9 {
|
|
|
29744
29849
|
_defineProperty31(this, "enableCameraBoundaryHighlight", void 0);
|
|
29745
29850
|
_defineProperty31(this, "getElementAttribute", void 0);
|
|
29746
29851
|
_defineProperty31(this, "setElementAttribute", void 0);
|
|
29852
|
+
_defineProperty31(this, "removeElement", void 0);
|
|
29747
29853
|
_defineProperty31(this, "getCurrentTool", void 0);
|
|
29748
29854
|
_defineProperty31(this, "setCurrentTool", void 0);
|
|
29749
29855
|
_defineProperty31(this, "setCanvasBackgroundColor", void 0);
|
|
@@ -29770,6 +29876,7 @@ var Whiteboard = class extends EventEmitter9 {
|
|
|
29770
29876
|
_defineProperty31(this, "rasterizeElementsBounds", void 0);
|
|
29771
29877
|
_defineProperty31(this, "rasterizeMaxBounds", void 0);
|
|
29772
29878
|
_defineProperty31(this, "setInputType", void 0);
|
|
29879
|
+
_defineProperty31(this, "insertImage", void 0);
|
|
29773
29880
|
this.view = view;
|
|
29774
29881
|
}
|
|
29775
29882
|
};
|
|
@@ -29801,8 +29908,11 @@ var EraserTool = class extends WhiteboardTool {
|
|
|
29801
29908
|
this.trashedElementsModel = trashedElementsModel;
|
|
29802
29909
|
this.tool.minDistance = 1;
|
|
29803
29910
|
}
|
|
29804
|
-
onMouseDown(
|
|
29911
|
+
onMouseDown(_event) {
|
|
29805
29912
|
this.pointCount = 0;
|
|
29913
|
+
if (this.elementModel) {
|
|
29914
|
+
this.elementModel.dispose();
|
|
29915
|
+
}
|
|
29806
29916
|
this.elementModel = this.modelGetter().createEraser();
|
|
29807
29917
|
}
|
|
29808
29918
|
onMouseDrag(event) {
|
|
@@ -29824,7 +29934,7 @@ var EraserTool = class extends WhiteboardTool {
|
|
|
29824
29934
|
}
|
|
29825
29935
|
});
|
|
29826
29936
|
}
|
|
29827
|
-
onMouseUp(
|
|
29937
|
+
onMouseUp(_event) {
|
|
29828
29938
|
if (this.elementModel) {
|
|
29829
29939
|
this.modelGetter().removeElementItem(this.elementModel.uuid);
|
|
29830
29940
|
}
|
|
@@ -29834,7 +29944,8 @@ var EraserTool = class extends WhiteboardTool {
|
|
|
29834
29944
|
|
|
29835
29945
|
// src/model/TrashedElementsModel.ts
|
|
29836
29946
|
import * as Y14 from "yjs";
|
|
29837
|
-
import
|
|
29947
|
+
import EventEmitter9 from "eventemitter3";
|
|
29948
|
+
import { removeDeepObserver as removeDeepObserver3 } from "@netless/forge-room";
|
|
29838
29949
|
function _defineProperty33(e, r, t) {
|
|
29839
29950
|
return (r = _toPropertyKey33(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
29840
29951
|
}
|
|
@@ -29852,7 +29963,7 @@ function _toPrimitive33(t, r) {
|
|
|
29852
29963
|
}
|
|
29853
29964
|
return ("string" === r ? String : Number)(t);
|
|
29854
29965
|
}
|
|
29855
|
-
var TrashedElementsModel = class extends
|
|
29966
|
+
var TrashedElementsModel = class extends EventEmitter9 {
|
|
29856
29967
|
get hasDeleteSelfPermission() {
|
|
29857
29968
|
return this.hasPermission(WhiteboardPermissionFlag.deleteSelf);
|
|
29858
29969
|
}
|
|
@@ -29868,13 +29979,16 @@ var TrashedElementsModel = class extends EventEmitter10 {
|
|
|
29868
29979
|
_defineProperty33(this, "handleUserLeave", (user) => {
|
|
29869
29980
|
const cb = this.observers.get(user.id);
|
|
29870
29981
|
if (cb) {
|
|
29871
|
-
this.requestUserMap(user.id)
|
|
29982
|
+
removeDeepObserver3(this.requestUserMap(user.id), cb);
|
|
29872
29983
|
}
|
|
29873
29984
|
});
|
|
29874
29985
|
_defineProperty33(this, "handleUserJoin", (user) => {
|
|
29875
29986
|
const observer = (evts) => {
|
|
29876
29987
|
this.handleUserTrashElementsChange(user.id, evts);
|
|
29877
29988
|
};
|
|
29989
|
+
if (this.observers.has(user.id)) {
|
|
29990
|
+
removeDeepObserver3(this.requestUserMap(user.id), this.observers.get(user.id));
|
|
29991
|
+
}
|
|
29878
29992
|
this.requestUserMap(user.id).observeDeep(observer);
|
|
29879
29993
|
this.observers.set(user.id, observer);
|
|
29880
29994
|
});
|
|
@@ -29886,6 +30000,9 @@ var TrashedElementsModel = class extends EventEmitter10 {
|
|
|
29886
30000
|
const observer = (evts) => {
|
|
29887
30001
|
this.handleUserTrashElementsChange(userId, evts);
|
|
29888
30002
|
};
|
|
30003
|
+
if (this.observers.has(userId)) {
|
|
30004
|
+
removeDeepObserver3(this.requestUserMap(userId), userId);
|
|
30005
|
+
}
|
|
29889
30006
|
this.requestUserMap(userId).observeDeep(observer);
|
|
29890
30007
|
this.observers.set(userId, observer);
|
|
29891
30008
|
});
|
|
@@ -29940,12 +30057,9 @@ var TrashedElementsModel = class extends EventEmitter10 {
|
|
|
29940
30057
|
});
|
|
29941
30058
|
}
|
|
29942
30059
|
dispose() {
|
|
29943
|
-
this.
|
|
29944
|
-
|
|
29945
|
-
|
|
29946
|
-
this.requestUserMap(userId).unobserveDeep(cb);
|
|
29947
|
-
}
|
|
29948
|
-
});
|
|
30060
|
+
for (const [key, value] of this.observers.entries()) {
|
|
30061
|
+
removeDeepObserver3(this.requestUserMap(key), value);
|
|
30062
|
+
}
|
|
29949
30063
|
this.observers.clear();
|
|
29950
30064
|
this.userManager.off("leave", this.handleUserLeave);
|
|
29951
30065
|
this.userManager.off("join", this.handleUserJoin);
|
|
@@ -29977,8 +30091,11 @@ var LaserPointerTool = class extends WhiteboardTool {
|
|
|
29977
30091
|
_defineProperty34(this, "pointCount", 0);
|
|
29978
30092
|
this.tool.minDistance = 5;
|
|
29979
30093
|
}
|
|
29980
|
-
onMouseDown(
|
|
30094
|
+
onMouseDown(_event) {
|
|
29981
30095
|
this.pointCount = 0;
|
|
30096
|
+
if (this.elementModel) {
|
|
30097
|
+
this.elementModel.dispose();
|
|
30098
|
+
}
|
|
29982
30099
|
this.elementModel = this.modelGetter().createLaserPointer();
|
|
29983
30100
|
}
|
|
29984
30101
|
onMouseDrag(event) {
|
|
@@ -29990,7 +30107,7 @@ var LaserPointerTool = class extends WhiteboardTool {
|
|
|
29990
30107
|
this.elementModel.appendPoints([event.point.x, event.point.y]);
|
|
29991
30108
|
}
|
|
29992
30109
|
}
|
|
29993
|
-
onMouseUp(
|
|
30110
|
+
onMouseUp(_event) {
|
|
29994
30111
|
if (this.elementModel) {
|
|
29995
30112
|
this.elementModel.beginRemoveAnimate();
|
|
29996
30113
|
}
|
|
@@ -29998,8 +30115,8 @@ var LaserPointerTool = class extends WhiteboardTool {
|
|
|
29998
30115
|
};
|
|
29999
30116
|
|
|
30000
30117
|
// src/model/PageModel.ts
|
|
30001
|
-
import
|
|
30002
|
-
import { log } from "@netless/forge-room";
|
|
30118
|
+
import EventEmitter10 from "eventemitter3";
|
|
30119
|
+
import { log as log2, removeObserver as removeObserver5 } from "@netless/forge-room";
|
|
30003
30120
|
function _defineProperty35(e, r, t) {
|
|
30004
30121
|
return (r = _toPropertyKey35(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30005
30122
|
}
|
|
@@ -30017,7 +30134,7 @@ function _toPrimitive35(t, r) {
|
|
|
30017
30134
|
}
|
|
30018
30135
|
return ("string" === r ? String : Number)(t);
|
|
30019
30136
|
}
|
|
30020
|
-
var PageModel = class extends
|
|
30137
|
+
var PageModel = class extends EventEmitter10 {
|
|
30021
30138
|
constructor(whiteboardAttrsMap, userManager, requestUserMap, pageMap, hasPermission) {
|
|
30022
30139
|
super();
|
|
30023
30140
|
_defineProperty35(this, "whiteboardAttrsMap", void 0);
|
|
@@ -30029,7 +30146,7 @@ var PageModel = class extends EventEmitter11 {
|
|
|
30029
30146
|
_defineProperty35(this, "handleUserLeave", (user) => {
|
|
30030
30147
|
const cb = this.observers.get(user.id);
|
|
30031
30148
|
if (cb) {
|
|
30032
|
-
this.requestUserMap(user.id)
|
|
30149
|
+
removeObserver5(this.requestUserMap(user.id), cb);
|
|
30033
30150
|
}
|
|
30034
30151
|
});
|
|
30035
30152
|
_defineProperty35(this, "handleUserJoin", (user) => {
|
|
@@ -30043,7 +30160,7 @@ var PageModel = class extends EventEmitter11 {
|
|
|
30043
30160
|
if (cameraMode === "main") {
|
|
30044
30161
|
const targetPage = this.whiteboardAttrsMap.get(WhiteboardKeys.currentPage);
|
|
30045
30162
|
if (!this.pageMap.has(targetPage) && targetPage !== "_i_") {
|
|
30046
|
-
|
|
30163
|
+
log2(`main page {${targetPage}} not found.`, {}, "error");
|
|
30047
30164
|
return;
|
|
30048
30165
|
}
|
|
30049
30166
|
this.requestUserMap(this.userManager.selfId).set(WhiteboardKeys.currentPage, targetPage);
|
|
@@ -30112,11 +30229,11 @@ var PageModel = class extends EventEmitter11 {
|
|
|
30112
30229
|
}
|
|
30113
30230
|
const cameraMode = this.requestUserMap(this.userManager.selfId).get(WhiteboardKeys.cameraMode);
|
|
30114
30231
|
if (cameraMode !== "main") {
|
|
30115
|
-
console.warn(
|
|
30232
|
+
console.warn("cannot modify pages in non-main view mode.");
|
|
30116
30233
|
return false;
|
|
30117
30234
|
}
|
|
30118
30235
|
if (!this.hasPermission(WhiteboardPermissionFlag.mainView)) {
|
|
30119
|
-
console.warn(
|
|
30236
|
+
console.warn("cannot modify pages without WhiteboardPermissionFlag.mainView.");
|
|
30120
30237
|
return false;
|
|
30121
30238
|
}
|
|
30122
30239
|
return true;
|
|
@@ -30168,21 +30285,31 @@ var PageModel = class extends EventEmitter11 {
|
|
|
30168
30285
|
}
|
|
30169
30286
|
}
|
|
30170
30287
|
}
|
|
30288
|
+
dispose() {
|
|
30289
|
+
for (const entry of this.observers.entries()) {
|
|
30290
|
+
const [userId, observer] = entry;
|
|
30291
|
+
removeObserver5(this.requestUserMap(userId), observer);
|
|
30292
|
+
}
|
|
30293
|
+
this.userManager.off("join", this.handleUserJoin);
|
|
30294
|
+
this.userManager.off("leave", this.handleUserLeave);
|
|
30295
|
+
removeObserver5(this.whiteboardAttrsMap, this.handleMainPageChange);
|
|
30296
|
+
removeObserver5(this.pageMap, this.handlePageMapChange);
|
|
30297
|
+
}
|
|
30171
30298
|
};
|
|
30172
30299
|
|
|
30173
30300
|
// src/utils/async.ts
|
|
30174
30301
|
var delay = (value) => new Promise((resolve) => setTimeout(resolve, value));
|
|
30175
30302
|
async function waitUntil(fn, timeout) {
|
|
30176
|
-
|
|
30303
|
+
const start = Date.now();
|
|
30177
30304
|
while (!fn() && Date.now() - start < timeout) {
|
|
30178
30305
|
await delay(50);
|
|
30179
|
-
start = Date.now();
|
|
30180
30306
|
}
|
|
30181
30307
|
}
|
|
30182
30308
|
|
|
30183
30309
|
// src/IndexedNavigation.ts
|
|
30184
|
-
import
|
|
30185
|
-
import { log as
|
|
30310
|
+
import EventEmitter11 from "eventemitter3";
|
|
30311
|
+
import { log as log3 } from "@netless/forge-room";
|
|
30312
|
+
import { removeObserver as removeObserver6 } from "@netless/forge-room";
|
|
30186
30313
|
function _defineProperty36(e, r, t) {
|
|
30187
30314
|
return (r = _toPropertyKey36(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30188
30315
|
}
|
|
@@ -30200,19 +30327,19 @@ function _toPrimitive36(t, r) {
|
|
|
30200
30327
|
}
|
|
30201
30328
|
return ("string" === r ? String : Number)(t);
|
|
30202
30329
|
}
|
|
30203
|
-
var IndexedNavigation = class extends
|
|
30330
|
+
var IndexedNavigation = class extends EventEmitter11 {
|
|
30204
30331
|
get idList() {
|
|
30205
30332
|
return this.pageModel.pageList().filter((id) => /^_i_/.test(id));
|
|
30206
30333
|
}
|
|
30207
30334
|
get head() {
|
|
30208
|
-
|
|
30335
|
+
const headId = Object.keys(this.list).find((key) => {
|
|
30209
30336
|
return this.list[key] && this.list[key].prev === "";
|
|
30210
30337
|
});
|
|
30211
30338
|
if (!headId) {
|
|
30212
|
-
|
|
30339
|
+
log3("indexed navigation confusion", {
|
|
30213
30340
|
list: JSON.stringify(this.list)
|
|
30214
30341
|
}, "error");
|
|
30215
|
-
throw new Error(
|
|
30342
|
+
throw new Error("indexed navigation confusion");
|
|
30216
30343
|
}
|
|
30217
30344
|
return headId;
|
|
30218
30345
|
}
|
|
@@ -30233,7 +30360,7 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30233
30360
|
_defineProperty36(this, "indexedPageMap", void 0);
|
|
30234
30361
|
_defineProperty36(this, "list", {});
|
|
30235
30362
|
_defineProperty36(this, "hasPermission", void 0);
|
|
30236
|
-
_defineProperty36(this, "handleIndexedPageMapUpdate", (
|
|
30363
|
+
_defineProperty36(this, "handleIndexedPageMapUpdate", (_evt) => {
|
|
30237
30364
|
this.list = this.indexedPageMap.get("list");
|
|
30238
30365
|
const needRemoveList = this.pageModel.pageList().filter((v) => /^_i_/.test(v) && Object.keys(this.list).indexOf(v) < 0);
|
|
30239
30366
|
const needAddList = Object.keys(this.list).filter((v) => this.pageModel.pageList().indexOf(v) < 0);
|
|
@@ -30288,8 +30415,8 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30288
30415
|
initIndexed() {
|
|
30289
30416
|
return new Promise((resolve) => {
|
|
30290
30417
|
setTimeout(() => {
|
|
30418
|
+
this.pageModel.addPage("_i_");
|
|
30291
30419
|
if (this.pageModel.pageList().length === 0) {
|
|
30292
|
-
this.pageModel.addPage("_i_");
|
|
30293
30420
|
resolve(true);
|
|
30294
30421
|
} else {
|
|
30295
30422
|
resolve(false);
|
|
@@ -30298,19 +30425,22 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30298
30425
|
});
|
|
30299
30426
|
}
|
|
30300
30427
|
/**
|
|
30301
|
-
|
|
30302
|
-
|
|
30303
|
-
|
|
30428
|
+
* 获取总页数
|
|
30429
|
+
* @returns {number}
|
|
30430
|
+
*/
|
|
30304
30431
|
get pageCount() {
|
|
30305
30432
|
return this.idList.length;
|
|
30306
30433
|
}
|
|
30307
30434
|
/**
|
|
30308
|
-
|
|
30309
|
-
|
|
30435
|
+
* 获取当前页索引
|
|
30436
|
+
*/
|
|
30310
30437
|
get currentPageIndex() {
|
|
30311
30438
|
const userPageId = this.userMap.get(WhiteboardKeys.currentPage);
|
|
30312
30439
|
return this.getPageIndex(userPageId);
|
|
30313
30440
|
}
|
|
30441
|
+
get currentPageId() {
|
|
30442
|
+
return this.userMap.get(WhiteboardKeys.currentPage);
|
|
30443
|
+
}
|
|
30314
30444
|
getPageIndex(pageId) {
|
|
30315
30445
|
let i = 0;
|
|
30316
30446
|
let currentId = this.head;
|
|
@@ -30326,9 +30456,9 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30326
30456
|
return i;
|
|
30327
30457
|
}
|
|
30328
30458
|
/**
|
|
30329
|
-
|
|
30330
|
-
|
|
30331
|
-
|
|
30459
|
+
* 获取指定索引对应的 pageId
|
|
30460
|
+
* @param {number} index
|
|
30461
|
+
*/
|
|
30332
30462
|
getPageId(index) {
|
|
30333
30463
|
const firstKey = this.head;
|
|
30334
30464
|
if (firstKey) {
|
|
@@ -30350,20 +30480,20 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30350
30480
|
modifyDetect() {
|
|
30351
30481
|
const cameraMode = this.userMap.get(WhiteboardKeys.cameraMode);
|
|
30352
30482
|
if (cameraMode !== "main") {
|
|
30353
|
-
console.warn(
|
|
30483
|
+
console.warn("cannot modify pages in non-main view mode.");
|
|
30354
30484
|
return false;
|
|
30355
30485
|
}
|
|
30356
30486
|
if (!this.hasPermission(WhiteboardPermissionFlag.mainView)) {
|
|
30357
|
-
console.warn(
|
|
30487
|
+
console.warn("cannot modify pages without WhiteboardPermissionFlag.mainView.");
|
|
30358
30488
|
return false;
|
|
30359
30489
|
}
|
|
30360
30490
|
return true;
|
|
30361
30491
|
}
|
|
30362
30492
|
/**
|
|
30363
|
-
|
|
30364
|
-
|
|
30365
|
-
|
|
30366
|
-
|
|
30493
|
+
* 在尾部插入新页面
|
|
30494
|
+
* @param {boolean=} goto 是否跳转到新页面, 默认 true
|
|
30495
|
+
* @return 总页数
|
|
30496
|
+
*/
|
|
30367
30497
|
pushPage() {
|
|
30368
30498
|
let goto = arguments.length > 0 && arguments[0] !== void 0 ? arguments[0] : true;
|
|
30369
30499
|
this.indexedPageMap.doc.transact(() => {
|
|
@@ -30392,11 +30522,11 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30392
30522
|
return this.pageCount;
|
|
30393
30523
|
}
|
|
30394
30524
|
/**
|
|
30395
|
-
|
|
30396
|
-
|
|
30397
|
-
|
|
30398
|
-
|
|
30399
|
-
|
|
30525
|
+
* 在 after 之后插入新页面
|
|
30526
|
+
* @param {number} after 在此页之后插入
|
|
30527
|
+
* @param {boolean=} goto 是否跳转到新页面, 默认 true
|
|
30528
|
+
* @return 总页数
|
|
30529
|
+
*/
|
|
30400
30530
|
insertPage(after) {
|
|
30401
30531
|
let goto = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
|
|
30402
30532
|
const afterPageId = this.getPageId(after);
|
|
@@ -30405,7 +30535,7 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30405
30535
|
}
|
|
30406
30536
|
const cameraMode = this.userMap.get(WhiteboardKeys.cameraMode);
|
|
30407
30537
|
if (cameraMode !== "main") {
|
|
30408
|
-
console.warn(
|
|
30538
|
+
console.warn("cannot modify pages in non-main view mode.");
|
|
30409
30539
|
return this.pageCount;
|
|
30410
30540
|
}
|
|
30411
30541
|
const prev = this.list[afterPageId];
|
|
@@ -30448,8 +30578,8 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30448
30578
|
return this.pageCount;
|
|
30449
30579
|
}
|
|
30450
30580
|
/**
|
|
30451
|
-
|
|
30452
|
-
|
|
30581
|
+
* 跳转至上一页, 并返回跳转后的页面索引.
|
|
30582
|
+
*/
|
|
30453
30583
|
prevPage() {
|
|
30454
30584
|
const currentPageId = this.userMap.get(WhiteboardKeys.currentPage);
|
|
30455
30585
|
const data = this.list[currentPageId];
|
|
@@ -30461,8 +30591,8 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30461
30591
|
return nextIndex;
|
|
30462
30592
|
}
|
|
30463
30593
|
/**
|
|
30464
|
-
|
|
30465
|
-
|
|
30594
|
+
* 跳转至下一页, 并返回跳转后的页面索引.
|
|
30595
|
+
*/
|
|
30466
30596
|
nextPage() {
|
|
30467
30597
|
const currentPageId = this.userMap.get(WhiteboardKeys.currentPage);
|
|
30468
30598
|
const data = this.list[currentPageId];
|
|
@@ -30474,16 +30604,14 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30474
30604
|
return nextIndex;
|
|
30475
30605
|
}
|
|
30476
30606
|
/**
|
|
30477
|
-
|
|
30478
|
-
|
|
30479
|
-
|
|
30607
|
+
* 删除指定页面
|
|
30608
|
+
* @param {number} index
|
|
30609
|
+
*/
|
|
30480
30610
|
removePage(index) {
|
|
30481
30611
|
if (this.pageCount <= 1) {
|
|
30482
30612
|
return this.pageCount;
|
|
30483
30613
|
}
|
|
30484
|
-
|
|
30485
|
-
if (cameraMode !== "main") {
|
|
30486
|
-
console.warn(`cannot modify pages in non-main view mode.`);
|
|
30614
|
+
if (!this.modifyDetect()) {
|
|
30487
30615
|
return this.pageCount;
|
|
30488
30616
|
}
|
|
30489
30617
|
const targetId = this.getPageId(index);
|
|
@@ -30523,10 +30651,15 @@ var IndexedNavigation = class extends EventEmitter12 {
|
|
|
30523
30651
|
this.pageModel.gotoPage(targetId);
|
|
30524
30652
|
}
|
|
30525
30653
|
}
|
|
30654
|
+
dispose() {
|
|
30655
|
+
removeObserver6(this.indexedPageMap, this.handleIndexedPageMapUpdate);
|
|
30656
|
+
this.pageModel.off("switchPage");
|
|
30657
|
+
this.pageModel.off("pagesChange");
|
|
30658
|
+
}
|
|
30526
30659
|
};
|
|
30527
30660
|
|
|
30528
30661
|
// src/utils/ShadowEmitter.ts
|
|
30529
|
-
import
|
|
30662
|
+
import EventEmitter12 from "eventemitter3";
|
|
30530
30663
|
function _defineProperty37(e, r, t) {
|
|
30531
30664
|
return (r = _toPropertyKey37(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30532
30665
|
}
|
|
@@ -30544,7 +30677,7 @@ function _toPrimitive37(t, r) {
|
|
|
30544
30677
|
}
|
|
30545
30678
|
return ("string" === r ? String : Number)(t);
|
|
30546
30679
|
}
|
|
30547
|
-
var ShadowEmitter = class extends
|
|
30680
|
+
var ShadowEmitter = class extends EventEmitter12 {
|
|
30548
30681
|
constructor(userMap) {
|
|
30549
30682
|
super();
|
|
30550
30683
|
_defineProperty37(this, "userMap", void 0);
|
|
@@ -30585,6 +30718,9 @@ var StraightLineTool = class extends WhiteboardTool {
|
|
|
30585
30718
|
this.tool.minDistance = 1;
|
|
30586
30719
|
}
|
|
30587
30720
|
onMouseDown(event) {
|
|
30721
|
+
if (this.elementModel) {
|
|
30722
|
+
this.elementModel.dispose();
|
|
30723
|
+
}
|
|
30588
30724
|
this.elementModel = this.modelGetter().createStraightLine(true);
|
|
30589
30725
|
this.from = event.point.clone();
|
|
30590
30726
|
this.to = event.point.clone();
|
|
@@ -30647,7 +30783,20 @@ var GrabTool = class extends WhiteboardTool {
|
|
|
30647
30783
|
}
|
|
30648
30784
|
};
|
|
30649
30785
|
|
|
30650
|
-
// src/
|
|
30786
|
+
// src/tool/PointerTool.ts
|
|
30787
|
+
var PointerTool = class extends WhiteboardTool {
|
|
30788
|
+
constructor(enableToolEvent, modelGetter, shadowEmitter, scope) {
|
|
30789
|
+
super(enableToolEvent, modelGetter, shadowEmitter, scope);
|
|
30790
|
+
}
|
|
30791
|
+
onMouseDown(_event) {
|
|
30792
|
+
}
|
|
30793
|
+
onMouseDrag(_event) {
|
|
30794
|
+
}
|
|
30795
|
+
onMouseUp() {
|
|
30796
|
+
}
|
|
30797
|
+
};
|
|
30798
|
+
|
|
30799
|
+
// src/SequenceExecutor.ts
|
|
30651
30800
|
function _defineProperty40(e, r, t) {
|
|
30652
30801
|
return (r = _toPropertyKey40(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30653
30802
|
}
|
|
@@ -30665,6 +30814,54 @@ function _toPrimitive40(t, r) {
|
|
|
30665
30814
|
}
|
|
30666
30815
|
return ("string" === r ? String : Number)(t);
|
|
30667
30816
|
}
|
|
30817
|
+
var SequenceExecutor = class {
|
|
30818
|
+
constructor() {
|
|
30819
|
+
_defineProperty40(this, "tasks", []);
|
|
30820
|
+
_defineProperty40(this, "isRunning", false);
|
|
30821
|
+
}
|
|
30822
|
+
addTask(task) {
|
|
30823
|
+
this.tasks.push(task);
|
|
30824
|
+
if (!this.isRunning) {
|
|
30825
|
+
this.execute();
|
|
30826
|
+
}
|
|
30827
|
+
}
|
|
30828
|
+
async execute() {
|
|
30829
|
+
if (this.isRunning) {
|
|
30830
|
+
return;
|
|
30831
|
+
}
|
|
30832
|
+
this.isRunning = true;
|
|
30833
|
+
while (this.tasks.length > 0) {
|
|
30834
|
+
const task = this.tasks.shift();
|
|
30835
|
+
if (task) {
|
|
30836
|
+
try {
|
|
30837
|
+
await task();
|
|
30838
|
+
} catch (e) {
|
|
30839
|
+
}
|
|
30840
|
+
}
|
|
30841
|
+
}
|
|
30842
|
+
this.isRunning = false;
|
|
30843
|
+
}
|
|
30844
|
+
};
|
|
30845
|
+
|
|
30846
|
+
// src/WhiteboardApplication.ts
|
|
30847
|
+
import { removeObserver as removeObserver7 } from "@netless/forge-room";
|
|
30848
|
+
function _defineProperty41(e, r, t) {
|
|
30849
|
+
return (r = _toPropertyKey41(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: true, configurable: true, writable: true }) : e[r] = t, e;
|
|
30850
|
+
}
|
|
30851
|
+
function _toPropertyKey41(t) {
|
|
30852
|
+
var i = _toPrimitive41(t, "string");
|
|
30853
|
+
return "symbol" == typeof i ? i : i + "";
|
|
30854
|
+
}
|
|
30855
|
+
function _toPrimitive41(t, r) {
|
|
30856
|
+
if ("object" != typeof t || !t) return t;
|
|
30857
|
+
var e = t[Symbol.toPrimitive];
|
|
30858
|
+
if (void 0 !== e) {
|
|
30859
|
+
var i = e.call(t, r || "default");
|
|
30860
|
+
if ("object" != typeof i) return i;
|
|
30861
|
+
throw new TypeError("@@toPrimitive must return a primitive value.");
|
|
30862
|
+
}
|
|
30863
|
+
return ("string" === r ? String : Number)(t);
|
|
30864
|
+
}
|
|
30668
30865
|
var WHITEBOARD_APP_NAME = "whiteboard";
|
|
30669
30866
|
var WhiteboardApplication = class extends AbstractApplication {
|
|
30670
30867
|
get undoManager() {
|
|
@@ -30678,43 +30875,46 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30678
30875
|
var _this;
|
|
30679
30876
|
super();
|
|
30680
30877
|
_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
|
-
|
|
30878
|
+
_defineProperty41(this, "name", WHITEBOARD_APP_NAME);
|
|
30879
|
+
_defineProperty41(this, "emitter", void 0);
|
|
30880
|
+
_defineProperty41(this, "toolbarModel", void 0);
|
|
30881
|
+
_defineProperty41(this, "selectElementsModel", void 0);
|
|
30882
|
+
_defineProperty41(this, "trashedElementsModel", void 0);
|
|
30883
|
+
_defineProperty41(this, "pageModel", void 0);
|
|
30884
|
+
_defineProperty41(this, "layers", /* @__PURE__ */ new Map());
|
|
30885
|
+
_defineProperty41(this, "undoManagers", /* @__PURE__ */ new Map());
|
|
30886
|
+
_defineProperty41(this, "imageSets", document.createElement("div"));
|
|
30887
|
+
_defineProperty41(this, "rootElement", document.createElement("div"));
|
|
30888
|
+
_defineProperty41(this, "paperScope", new import_paper.default.PaperScope());
|
|
30889
|
+
_defineProperty41(this, "canvasElement", document.createElement("canvas"));
|
|
30890
|
+
_defineProperty41(this, "shadowScope", new import_paper.default.PaperScope());
|
|
30891
|
+
_defineProperty41(this, "snapshotCanvasElement", document.createElement("canvas"));
|
|
30892
|
+
_defineProperty41(this, "snapshotScope", new import_paper.default.PaperScope());
|
|
30893
|
+
_defineProperty41(this, "shadowCanvasElement", document.createElement("canvas"));
|
|
30894
|
+
_defineProperty41(this, "shadowEmitter", void 0);
|
|
30895
|
+
_defineProperty41(this, "tools", void 0);
|
|
30896
|
+
_defineProperty41(this, "editors", /* @__PURE__ */ new Map());
|
|
30897
|
+
_defineProperty41(this, "camera", void 0);
|
|
30898
|
+
_defineProperty41(this, "resizeObserver", void 0);
|
|
30899
|
+
_defineProperty41(this, "option", void 0);
|
|
30900
|
+
_defineProperty41(this, "permissions", void 0);
|
|
30901
|
+
_defineProperty41(this, "inputType", "any");
|
|
30902
|
+
_defineProperty41(this, "isPenEvent", false);
|
|
30903
|
+
_defineProperty41(this, "hasPenInput", null);
|
|
30904
|
+
_defineProperty41(this, "disableViewModelUpdate", false);
|
|
30905
|
+
_defineProperty41(this, "internalResizeObserver", true);
|
|
30906
|
+
_defineProperty41(this, "sequenceExecutor", new SequenceExecutor());
|
|
30907
|
+
_defineProperty41(this, "linkTarget", null);
|
|
30908
|
+
_defineProperty41(this, "enableToolEvent", () => {
|
|
30710
30909
|
return !(this.inputType === "pen" && !this.isPenEvent);
|
|
30711
30910
|
});
|
|
30712
|
-
|
|
30713
|
-
|
|
30714
|
-
editor.
|
|
30715
|
-
|
|
30716
|
-
|
|
30717
|
-
|
|
30911
|
+
_defineProperty41(this, "handlePageSwitch", (pageId) => {
|
|
30912
|
+
this.sequenceExecutor.addTask(async () => {
|
|
30913
|
+
for (const editor of this.editors.values()) {
|
|
30914
|
+
editor.hidden();
|
|
30915
|
+
}
|
|
30916
|
+
this.selectElementsModel.clearSelectElementForSelf();
|
|
30917
|
+
await waitUntil(() => this.layers.has(pageId), 1e3);
|
|
30718
30918
|
if (this.layers.has(pageId)) {
|
|
30719
30919
|
for (const entry of this.layers.entries()) {
|
|
30720
30920
|
entry[1].off("elementInsert", this.handleElementInsert);
|
|
@@ -30726,6 +30926,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30726
30926
|
renderableModel.on("elementRemove", this.handleElementRemove);
|
|
30727
30927
|
renderableModel.on("elementClear", this.handleElementClear);
|
|
30728
30928
|
renderableModel.flushRenderables();
|
|
30929
|
+
this.paperScope.project.activeLayer.data.pageId = pageId;
|
|
30729
30930
|
const others = this.userManager.userIdList().filter((v) => v !== this.userId);
|
|
30730
30931
|
for (const other of others) {
|
|
30731
30932
|
if (this.userMap(other).get(WhiteboardKeys.currentPage) === pageId) {
|
|
@@ -30735,9 +30936,11 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30735
30936
|
}
|
|
30736
30937
|
}
|
|
30737
30938
|
}
|
|
30939
|
+
} else {
|
|
30940
|
+
console.warn(`[@netless/forge-whiteboard] page ${pageId} not found`);
|
|
30941
|
+
log4(`[@netless/forge-whiteboard] page ${pageId} not found`, {}, "warning");
|
|
30738
30942
|
}
|
|
30739
|
-
|
|
30740
|
-
waitUntil(() => this.undoManagers.has(pageId), 3e3).then(() => {
|
|
30943
|
+
await waitUntil(() => this.undoManagers.has(pageId), 1e3);
|
|
30741
30944
|
if (this.undoManagers.has(pageId)) {
|
|
30742
30945
|
for (const entry of this.undoManagers.entries()) {
|
|
30743
30946
|
entry[1].off("stack-item-added", this.handleStackItemAdded);
|
|
@@ -30745,29 +30948,32 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30745
30948
|
}
|
|
30746
30949
|
this.undoManagers.get(pageId).on("stack-item-added", this.handleStackItemAdded);
|
|
30747
30950
|
this.undoManagers.get(pageId).on("stack-item-popped", this.handleStackItemPopped);
|
|
30951
|
+
} else {
|
|
30952
|
+
console.warn(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`);
|
|
30953
|
+
log4(`[@netless/forge-whiteboard] undo manager for page ${pageId} not found`, {}, "warning");
|
|
30748
30954
|
}
|
|
30955
|
+
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30956
|
+
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
30749
30957
|
});
|
|
30750
|
-
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30751
|
-
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
30752
30958
|
});
|
|
30753
|
-
|
|
30959
|
+
_defineProperty41(this, "hasPermission", (flag) => {
|
|
30754
30960
|
return this.permissions.hasPermission(flag, this.userId);
|
|
30755
30961
|
});
|
|
30756
|
-
|
|
30962
|
+
_defineProperty41(this, "handleStackItemAdded", () => {
|
|
30757
30963
|
this.selectElementsModel.clearSelectElementForSelf();
|
|
30758
30964
|
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30759
30965
|
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
30760
30966
|
});
|
|
30761
|
-
|
|
30967
|
+
_defineProperty41(this, "handleStackItemPopped", () => {
|
|
30762
30968
|
this.emitter.emit("redoStackLength", this.undoManager?.redoStack.length ?? 0);
|
|
30763
30969
|
this.emitter.emit("undoStackLength", this.undoManager?.undoStack.length ?? 0);
|
|
30764
30970
|
});
|
|
30765
|
-
|
|
30971
|
+
_defineProperty41(this, "handleLayersChange", (ids) => {
|
|
30766
30972
|
for (let i = 0, len = ids.length; i < len; i++) {
|
|
30767
30973
|
const id = ids[i];
|
|
30768
30974
|
if (!this.layers.has(id)) {
|
|
30769
30975
|
const elementsMap = this.getMap(`layer/${id}/elements`);
|
|
30770
|
-
const renderableModel = new RenderableModel(id, this.shadowEmitter, elementsMap, this.paperScope, this.toolbarModel, this.userManager, this.hasPermission);
|
|
30976
|
+
const renderableModel = new RenderableModel(id, this.shadowEmitter, elementsMap, this.paperScope, this.toolbarModel, this.userManager, this.imageSets, this.hasPermission);
|
|
30771
30977
|
this.layers.set(id, renderableModel);
|
|
30772
30978
|
}
|
|
30773
30979
|
if (!this.undoManagers.has(id)) {
|
|
@@ -30778,7 +30984,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30778
30984
|
this.undoManagers.set(id, undoManager);
|
|
30779
30985
|
}
|
|
30780
30986
|
}
|
|
30781
|
-
for (
|
|
30987
|
+
for (const entry of this.layers.entries()) {
|
|
30782
30988
|
if (ids.indexOf(entry[0]) < 0) {
|
|
30783
30989
|
const renderableModel = this.layers.get(entry[0]);
|
|
30784
30990
|
this.layers.delete(entry[0]);
|
|
@@ -30794,17 +31000,17 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30794
31000
|
}
|
|
30795
31001
|
}
|
|
30796
31002
|
});
|
|
30797
|
-
|
|
30798
|
-
|
|
31003
|
+
_defineProperty41(this, "getCurrentRenderableModel", () => {
|
|
31004
|
+
const layerId = this.userMap(this.userId).get(WhiteboardKeys.currentPage);
|
|
30799
31005
|
if (!this.layers.has(layerId)) {
|
|
30800
31006
|
this.emitter.emit("error", 300002, `target page: ${layerId} not found`);
|
|
30801
31007
|
}
|
|
30802
31008
|
return this.layers.get(layerId);
|
|
30803
31009
|
});
|
|
30804
|
-
|
|
31010
|
+
_defineProperty41(this, "handleElementClear", () => {
|
|
30805
31011
|
this.paperScope.project.activeLayer.removeChildren();
|
|
30806
31012
|
});
|
|
30807
|
-
|
|
31013
|
+
_defineProperty41(this, "handleElementInsert", (elements) => {
|
|
30808
31014
|
for (const element of elements) {
|
|
30809
31015
|
element.createPaperElement();
|
|
30810
31016
|
const scope = element.shadow === "" ? this.paperScope : this.shadowScope;
|
|
@@ -30816,7 +31022,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30816
31022
|
this.insertElementToParent(element.item, scope.project.activeLayer);
|
|
30817
31023
|
}
|
|
30818
31024
|
});
|
|
30819
|
-
|
|
31025
|
+
_defineProperty41(this, "handleElementRemove", (elementId, layerId) => {
|
|
30820
31026
|
const layerModel = this.layers.get(layerId);
|
|
30821
31027
|
if (!layerModel) {
|
|
30822
31028
|
return;
|
|
@@ -30827,11 +31033,11 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30827
31033
|
}
|
|
30828
31034
|
layerModel.elementModels.delete(elementId);
|
|
30829
31035
|
});
|
|
30830
|
-
|
|
31036
|
+
_defineProperty41(this, "handleRemoveTrashedElementForSelf", (userId, elementId) => {
|
|
30831
31037
|
const selfLayerId = this.userMap(this.userId).get(WhiteboardKeys.currentPage);
|
|
30832
31038
|
this.layers.get(selfLayerId)?.removeElementItem(elementId);
|
|
30833
31039
|
});
|
|
30834
|
-
|
|
31040
|
+
_defineProperty41(this, "handleElementsTrash", (userId, elements) => {
|
|
30835
31041
|
const targetLayerId = this.userMap(userId).get(WhiteboardKeys.currentPage);
|
|
30836
31042
|
const selfLayerId = this.userMap(this.userId).get(WhiteboardKeys.currentPage);
|
|
30837
31043
|
if (targetLayerId !== selfLayerId || !this.layers.has(targetLayerId)) {
|
|
@@ -30844,7 +31050,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30844
31050
|
}
|
|
30845
31051
|
});
|
|
30846
31052
|
});
|
|
30847
|
-
|
|
31053
|
+
_defineProperty41(this, "handleElementsSelect", (userId, elements) => {
|
|
30848
31054
|
if (!this.editors.has(userId)) {
|
|
30849
31055
|
const ctrl = this.userManager.getUser(userId);
|
|
30850
31056
|
const editor2 = new Editor(this.paperScope, this.shadowScope, this.shadowEmitter, this.canvasElement, this.camera, {
|
|
@@ -30876,7 +31082,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30876
31082
|
}).filter((v) => !!v);
|
|
30877
31083
|
editor.setTargets(elementModels);
|
|
30878
31084
|
if (elementModels.length === 1) {
|
|
30879
|
-
|
|
31085
|
+
const model = elementModels[0];
|
|
30880
31086
|
if (model.item) {
|
|
30881
31087
|
const topLeft = this.paperScope.project.view.projectToView(model.item.bounds.topLeft);
|
|
30882
31088
|
const bottomRight = this.paperScope.project.view.projectToView(model.item.bounds.bottomRight);
|
|
@@ -30887,7 +31093,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30887
31093
|
this.emitter.emit("elementDeselected", userId);
|
|
30888
31094
|
}
|
|
30889
31095
|
});
|
|
30890
|
-
|
|
31096
|
+
_defineProperty41(this, "handleLinkedMapChange", (evt) => {
|
|
30891
31097
|
for (const [key, value] of evt.changes.keys.entries()) {
|
|
30892
31098
|
if (Object.keys(TOOLBAR_KEYS).indexOf(key) >= 0 && (value.action === "add" || value.action === "update")) {
|
|
30893
31099
|
this.toolbarModel.currentTool = evt.target.get(TOOLBAR_KEYS.tool);
|
|
@@ -30904,7 +31110,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30904
31110
|
}
|
|
30905
31111
|
}
|
|
30906
31112
|
});
|
|
30907
|
-
|
|
31113
|
+
_defineProperty41(this, "adjustByOutFrame", (frameWidth, frameHeight) => {
|
|
30908
31114
|
if (this.option.width > 0 && this.option.height > 0) {
|
|
30909
31115
|
const minWidth = Math.max(frameWidth, 10);
|
|
30910
31116
|
const minHeight = Math.max(frameHeight, 10);
|
|
@@ -30920,9 +31126,14 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30920
31126
|
this.camera.triggerZoom();
|
|
30921
31127
|
}
|
|
30922
31128
|
});
|
|
31129
|
+
window.__wb = this;
|
|
30923
31130
|
requestAnimationFrameHook(this.paperScope);
|
|
30924
31131
|
requestAnimationFrameHook(this.shadowScope);
|
|
31132
|
+
const that = this;
|
|
30925
31133
|
this.rootElement.setAttribute("data-forge-app", "whiteboard");
|
|
31134
|
+
this.imageSets.style.display = "none";
|
|
31135
|
+
this.imageSets.setAttribute("data-image-sets", "");
|
|
31136
|
+
this.rootElement.appendChild(this.imageSets);
|
|
30926
31137
|
document.body.addEventListener("pointerdown", (evt) => {
|
|
30927
31138
|
this.isPenEvent = evt.pointerType === "pen";
|
|
30928
31139
|
if (evt.pointerType === "pen" && this.hasPenInput === null) {
|
|
@@ -30984,7 +31195,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30984
31195
|
this.emitter.setViewModeToFree = (userId) => {
|
|
30985
31196
|
if (that.disableViewModelUpdate) {
|
|
30986
31197
|
console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
|
|
30987
|
-
|
|
31198
|
+
log4("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warning");
|
|
30988
31199
|
return;
|
|
30989
31200
|
}
|
|
30990
31201
|
const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
|
|
@@ -30995,7 +31206,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
30995
31206
|
this.emitter.setViewModeToFlow = (flowId, userId) => {
|
|
30996
31207
|
if (that.disableViewModelUpdate) {
|
|
30997
31208
|
console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
|
|
30998
|
-
|
|
31209
|
+
log4("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warning");
|
|
30999
31210
|
return;
|
|
31000
31211
|
}
|
|
31001
31212
|
const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
|
|
@@ -31010,7 +31221,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31010
31221
|
this.emitter.setViewModeToMain = (userId) => {
|
|
31011
31222
|
if (that.disableViewModelUpdate) {
|
|
31012
31223
|
console.warn("Operation failed. Perspective mode switching is disabled in the current environment.");
|
|
31013
|
-
|
|
31224
|
+
log4("Operation failed. Perspective mode switching is disabled in the current environment.", {}, "warning");
|
|
31014
31225
|
return;
|
|
31015
31226
|
}
|
|
31016
31227
|
const targetId = userId ? this.hasPermission(WhiteboardPermissionFlag.setOthersView) ? userId : null : this.userId;
|
|
@@ -31022,6 +31233,30 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31022
31233
|
this.camera.resetViewMatrixToMain();
|
|
31023
31234
|
}
|
|
31024
31235
|
};
|
|
31236
|
+
this.emitter.insertImage = (src, pageId) => {
|
|
31237
|
+
if (!/https/.test(src)) {
|
|
31238
|
+
log4("[@netless/forge-whiteboard] invalid image url, src needs to be in the HTTPS protocol.", {
|
|
31239
|
+
src
|
|
31240
|
+
}, "warning");
|
|
31241
|
+
return;
|
|
31242
|
+
}
|
|
31243
|
+
let targetPageId = pageId;
|
|
31244
|
+
if (!targetPageId) {
|
|
31245
|
+
targetPageId = this.pageModel.getCurrentPage(this.userManager.selfId);
|
|
31246
|
+
}
|
|
31247
|
+
if (!targetPageId) {
|
|
31248
|
+
log4("[@netless/forge-whiteboard] page not found", {}, "warning");
|
|
31249
|
+
return;
|
|
31250
|
+
}
|
|
31251
|
+
this.layers.get(targetPageId)?.createImage(src);
|
|
31252
|
+
};
|
|
31253
|
+
this.emitter.removeElement = (pageId, elementId) => {
|
|
31254
|
+
if (!this.layers.has(pageId)) {
|
|
31255
|
+
log4("[@netless/forge-whiteboard] page not found", {}, "warning");
|
|
31256
|
+
return;
|
|
31257
|
+
}
|
|
31258
|
+
this.layers.get(pageId)?.removeElementItem(elementId);
|
|
31259
|
+
};
|
|
31025
31260
|
this.emitter.getViewModel = (userId) => {
|
|
31026
31261
|
const targetId = userId ? userId : this.userId;
|
|
31027
31262
|
return this.userMap(targetId).get(WhiteboardKeys.cameraMode);
|
|
@@ -31037,7 +31272,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31037
31272
|
const source = this.getMap(`layer/${sourceId}/elements`);
|
|
31038
31273
|
const target = this.getMap(`layer/${targetId}/elements`);
|
|
31039
31274
|
if (!this.layers.has(targetId)) {
|
|
31040
|
-
this.layers.set(targetId, new RenderableModel(targetId, this.shadowEmitter, target, this.paperScope, this.toolbarModel, this.userManager, this.hasPermission));
|
|
31275
|
+
this.layers.set(targetId, new RenderableModel(targetId, this.shadowEmitter, target, this.paperScope, this.toolbarModel, this.userManager, this.imageSets, this.hasPermission));
|
|
31041
31276
|
}
|
|
31042
31277
|
if (!this.undoManagers.has(targetId)) {
|
|
31043
31278
|
const undoManager = new Y15.UndoManager(target, {
|
|
@@ -31088,12 +31323,11 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31088
31323
|
this.camera.reset();
|
|
31089
31324
|
};
|
|
31090
31325
|
this.emitter.on("error", (errorCode, errorMessage) => {
|
|
31091
|
-
|
|
31326
|
+
log4("WhiteboardApplicationError", {
|
|
31092
31327
|
errorCode,
|
|
31093
31328
|
errorMessage
|
|
31094
31329
|
});
|
|
31095
31330
|
});
|
|
31096
|
-
const that = this;
|
|
31097
31331
|
Object.defineProperty(this.emitter, "tool", {
|
|
31098
31332
|
get() {
|
|
31099
31333
|
return that.toolbarModel.currentTool;
|
|
@@ -31190,6 +31424,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31190
31424
|
this.permissions = new WhiteboardPermissions(this.userManager, (userId) => {
|
|
31191
31425
|
return this.userMap(userId);
|
|
31192
31426
|
});
|
|
31427
|
+
this.permissions.setPermission(WhiteboardPermissionFlag.all);
|
|
31193
31428
|
this.emitter["permissions"] = this.permissions;
|
|
31194
31429
|
this.emitter["selfUserId"] = this.userId;
|
|
31195
31430
|
this.option = option;
|
|
@@ -31242,6 +31477,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31242
31477
|
return this.userMap(userId);
|
|
31243
31478
|
}, this.hasPermission);
|
|
31244
31479
|
this.tools = {
|
|
31480
|
+
pointer: new PointerTool(this.enableToolEvent, this.getCurrentRenderableModel, this.shadowEmitter, this.paperScope),
|
|
31245
31481
|
curve: new CurveTool(this.enableToolEvent, this.getCurrentRenderableModel, this.shadowEmitter, this.paperScope),
|
|
31246
31482
|
rectangle: new RectangleTool(this.enableToolEvent, this.getCurrentRenderableModel, this.shadowEmitter, this.paperScope),
|
|
31247
31483
|
selector: new SelectorTool(this.enableToolEvent, this.getCurrentRenderableModel, this.shadowEmitter, this.paperScope, this.selectElementsModel),
|
|
@@ -31257,6 +31493,11 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31257
31493
|
this.toolbarModel.on("update", (style) => {
|
|
31258
31494
|
if (this.tools[style.tool]) {
|
|
31259
31495
|
this.paperScope.tool = this.tools[style.tool].tool;
|
|
31496
|
+
if (style.tool === "pointer") {
|
|
31497
|
+
this.rootElement.style.pointerEvents = "none";
|
|
31498
|
+
} else {
|
|
31499
|
+
this.rootElement.style.pointerEvents = "auto";
|
|
31500
|
+
}
|
|
31260
31501
|
} else {
|
|
31261
31502
|
this.emitter.emit("error", 300001, `${style.tool} not supported`);
|
|
31262
31503
|
}
|
|
@@ -31266,7 +31507,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31266
31507
|
this.paperScope.tool = this.tools[this.toolbarModel.currentTool].tool;
|
|
31267
31508
|
} else {
|
|
31268
31509
|
this.paperScope.tool = this.tools["curve"].tool;
|
|
31269
|
-
|
|
31510
|
+
log4(`${this.toolbarModel.currentTool} not supported, backup to curve`);
|
|
31270
31511
|
}
|
|
31271
31512
|
this.selectElementsModel.on("elementsChange", this.handleElementsSelect);
|
|
31272
31513
|
this.trashedElementsModel.on("elementsChange", this.handleElementsTrash);
|
|
@@ -31435,7 +31676,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31435
31676
|
if (renderableModel.elementModels.has(key)) {
|
|
31436
31677
|
elementModel = renderableModel.elementModels.get(key) ?? null;
|
|
31437
31678
|
} else {
|
|
31438
|
-
|
|
31679
|
+
const elementMap = renderableModel.elements.get(key);
|
|
31439
31680
|
if (elementMap) {
|
|
31440
31681
|
elementModel = renderableModel.convertToModel(elementMap);
|
|
31441
31682
|
}
|
|
@@ -31511,7 +31752,7 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31511
31752
|
}
|
|
31512
31753
|
unlink() {
|
|
31513
31754
|
if (this.linkTarget) {
|
|
31514
|
-
this.linkTarget
|
|
31755
|
+
removeObserver7(this.linkTarget, this.handleLinkedMapChange);
|
|
31515
31756
|
}
|
|
31516
31757
|
}
|
|
31517
31758
|
setViewSize(width, height) {
|
|
@@ -31522,6 +31763,9 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31522
31763
|
const size = this.paperScope.view.viewSize;
|
|
31523
31764
|
return [size.width, size.height];
|
|
31524
31765
|
}
|
|
31766
|
+
getInherentScale() {
|
|
31767
|
+
return this.camera.getInherentScale();
|
|
31768
|
+
}
|
|
31525
31769
|
updateInternalResizeObserverStatus(value) {
|
|
31526
31770
|
this.internalResizeObserver = value;
|
|
31527
31771
|
}
|
|
@@ -31541,9 +31785,27 @@ var WhiteboardApplication = class extends AbstractApplication {
|
|
|
31541
31785
|
this.shadowScope.project.clear();
|
|
31542
31786
|
this.snapshotScope.project.clear();
|
|
31543
31787
|
this.resizeObserver.disconnect();
|
|
31788
|
+
this.unlink();
|
|
31789
|
+
for (const entry of this.undoManagers.entries()) {
|
|
31790
|
+
entry[1].off("stack-item-added", this.handleStackItemAdded);
|
|
31791
|
+
entry[1].off("stack-item-popped", this.handleStackItemPopped);
|
|
31792
|
+
}
|
|
31793
|
+
for (const entry of this.layers.entries()) {
|
|
31794
|
+
entry[1].dispose();
|
|
31795
|
+
entry[1].removeAllListeners();
|
|
31796
|
+
}
|
|
31797
|
+
this.camera.dispose();
|
|
31798
|
+
this.pageModel.dispose();
|
|
31799
|
+
this.pageModel.removeAllListeners();
|
|
31800
|
+
for (const entry of this.editors.entries()) {
|
|
31801
|
+
entry[1].dispose();
|
|
31802
|
+
}
|
|
31803
|
+
this.toolbarModel.dispose();
|
|
31804
|
+
this.emitter.indexedNavigation.dispose();
|
|
31805
|
+
this.permissions.dispose();
|
|
31544
31806
|
}
|
|
31545
31807
|
};
|
|
31546
|
-
|
|
31808
|
+
_defineProperty41(WhiteboardApplication, "applicationName", WHITEBOARD_APP_NAME);
|
|
31547
31809
|
export {
|
|
31548
31810
|
Whiteboard,
|
|
31549
31811
|
WhiteboardApplication,
|