@tldraw/editor 5.2.0-next.e2b8d10bf10e → 5.2.0
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/README.md +7 -1
- package/dist-cjs/index.d.ts +112 -53
- package/dist-cjs/index.js +7 -8
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/components/MenuClickCapture.js +8 -5
- package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
- package/dist-cjs/lib/components/Shape.js +47 -1
- package/dist-cjs/lib/components/Shape.js.map +3 -3
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +1 -16
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +97 -45
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js +3 -3
- package/dist-cjs/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/FontManager/FontManager.js +28 -4
- package/dist-cjs/lib/editor/managers/FontManager/FontManager.js.map +3 -3
- package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js +24 -2
- package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js +14 -3
- package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js +4 -2
- package/dist-cjs/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +7 -3
- package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +0 -1
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +15 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/editor/overlays/strokeShapeIndicators.js +79 -0
- package/dist-cjs/lib/editor/overlays/strokeShapeIndicators.js.map +7 -0
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js +4 -0
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js.map +2 -2
- package/dist-cjs/lib/{hooks/useTransform.js → editor/tools/cancelShapeCreationOnLongPress.js} +8 -23
- package/dist-cjs/lib/editor/tools/cancelShapeCreationOnLongPress.js.map +7 -0
- package/dist-cjs/lib/editor/types/event-types.js.map +2 -2
- package/dist-cjs/lib/globals/environment.js +6 -1
- package/dist-cjs/lib/globals/environment.js.map +2 -2
- package/dist-cjs/lib/hooks/EditorComponentsContext.js.map +2 -2
- package/dist-cjs/lib/hooks/useCanvasEvents.js +17 -8
- package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useEditorComponents.js +0 -1
- package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePresence.js.map +2 -2
- package/dist-cjs/lib/hooks/useScreenBounds.js +1 -0
- package/dist-cjs/lib/hooks/useScreenBounds.js.map +2 -2
- package/dist-cjs/lib/license/LicenseManager.js +5 -1
- package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
- package/dist-cjs/lib/primitives/Vec.js +3 -2
- package/dist-cjs/lib/primitives/Vec.js.map +2 -2
- package/dist-cjs/lib/utils/dom.js +12 -0
- package/dist-cjs/lib/utils/dom.js.map +2 -2
- package/dist-cjs/lib/utils/getPointerInfo.js +2 -1
- package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
- package/dist-cjs/lib/utils/pointer.js +37 -0
- package/dist-cjs/lib/utils/pointer.js.map +7 -0
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +112 -53
- package/dist-esm/index.mjs +9 -13
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/components/MenuClickCapture.mjs +8 -5
- package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
- package/dist-esm/lib/components/Shape.mjs +48 -2
- package/dist-esm/lib/components/Shape.mjs.map +3 -3
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +1 -16
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +97 -45
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs +3 -3
- package/dist-esm/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs +28 -4
- package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs.map +3 -3
- package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs +24 -2
- package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs +14 -3
- package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs +4 -2
- package/dist-esm/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +7 -3
- package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +0 -1
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +15 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/editor/overlays/strokeShapeIndicators.mjs +59 -0
- package/dist-esm/lib/editor/overlays/strokeShapeIndicators.mjs.map +7 -0
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs +4 -0
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/cancelShapeCreationOnLongPress.mjs +8 -0
- package/dist-esm/lib/editor/tools/cancelShapeCreationOnLongPress.mjs.map +7 -0
- package/dist-esm/lib/editor/types/event-types.mjs.map +2 -2
- package/dist-esm/lib/globals/environment.mjs +6 -1
- package/dist-esm/lib/globals/environment.mjs.map +2 -2
- package/dist-esm/lib/hooks/EditorComponentsContext.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCanvasEvents.mjs +17 -8
- package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEditorComponents.mjs +0 -1
- package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePresence.mjs.map +2 -2
- package/dist-esm/lib/hooks/useScreenBounds.mjs +1 -0
- package/dist-esm/lib/hooks/useScreenBounds.mjs.map +2 -2
- package/dist-esm/lib/license/LicenseManager.mjs +5 -1
- package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
- package/dist-esm/lib/primitives/Vec.mjs +3 -2
- package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
- package/dist-esm/lib/utils/dom.mjs +12 -0
- package/dist-esm/lib/utils/dom.mjs.map +2 -2
- package/dist-esm/lib/utils/getPointerInfo.mjs +2 -1
- package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
- package/dist-esm/lib/utils/pointer.mjs +17 -0
- package/dist-esm/lib/utils/pointer.mjs.map +7 -0
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +15 -3
- package/package.json +11 -8
- package/src/index.ts +4 -10
- package/src/lib/components/MenuClickCapture.tsx +8 -4
- package/src/lib/components/Shape.tsx +88 -1
- package/src/lib/components/default-components/DefaultCanvas.tsx +1 -17
- package/src/lib/editor/Editor.test.ts +36 -0
- package/src/lib/editor/Editor.ts +145 -55
- package/src/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.test.ts +43 -16
- package/src/lib/editor/managers/CollaboratorsManager/CollaboratorsManager.ts +8 -5
- package/src/lib/editor/managers/FontManager/FontManager.test.ts +37 -10
- package/src/lib/editor/managers/FontManager/FontManager.ts +46 -1
- package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +32 -0
- package/src/lib/editor/managers/HistoryManager/HistoryManager.ts +34 -4
- package/src/lib/editor/managers/InputsManager/InputsManager.test.ts +61 -0
- package/src/lib/editor/managers/InputsManager/InputsManager.ts +16 -4
- package/src/lib/editor/managers/SpatialIndexManager/SpatialIndexManager.ts +9 -2
- package/src/lib/editor/managers/TextManager/TextManager.test.ts +16 -14
- package/src/lib/editor/managers/TextManager/TextManager.ts +17 -2
- package/src/lib/editor/managers/TickManager/TickManager.test.ts +0 -40
- package/src/lib/editor/managers/TickManager/TickManager.ts +0 -1
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +12 -2
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +27 -2
- package/src/lib/editor/overlays/strokeShapeIndicators.ts +86 -0
- package/src/lib/editor/shapes/ShapeUtil.ts +41 -0
- package/src/lib/editor/tools/BaseBoxShapeTool/children/Pointing.ts +5 -0
- package/src/lib/editor/tools/cancelShapeCreationOnLongPress.ts +31 -0
- package/src/lib/editor/types/event-types.ts +7 -0
- package/src/lib/globals/environment.ts +7 -0
- package/src/lib/hooks/EditorComponentsContext.tsx +0 -2
- package/src/lib/hooks/useCanvasEvents.ts +24 -12
- package/src/lib/hooks/useEditorComponents.tsx +0 -1
- package/src/lib/hooks/usePresence.ts +2 -2
- package/src/lib/hooks/useScreenBounds.ts +3 -0
- package/src/lib/license/LicenseManager.test.ts +24 -16
- package/src/lib/license/LicenseManager.ts +8 -2
- package/src/lib/primitives/Vec.ts +5 -2
- package/src/lib/test/ContentElementSlot.test.tsx +201 -0
- package/src/lib/utils/dom.ts +34 -0
- package/src/lib/utils/getPointerInfo.ts +2 -1
- package/src/lib/utils/pointer.test.ts +76 -0
- package/src/lib/utils/pointer.ts +42 -0
- package/src/version.ts +3 -3
- package/dist-cjs/lib/components/default-components/DefaultSelectionBackground.js +0 -49
- package/dist-cjs/lib/components/default-components/DefaultSelectionBackground.js.map +0 -7
- package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js +0 -161
- package/dist-cjs/lib/editor/overlays/ShapeIndicatorOverlayUtil.js.map +0 -7
- package/dist-cjs/lib/hooks/useTransform.js.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultSelectionBackground.mjs +0 -19
- package/dist-esm/lib/components/default-components/DefaultSelectionBackground.mjs.map +0 -7
- package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs +0 -141
- package/dist-esm/lib/editor/overlays/ShapeIndicatorOverlayUtil.mjs.map +0 -7
- package/dist-esm/lib/hooks/useTransform.mjs +0 -23
- package/dist-esm/lib/hooks/useTransform.mjs.map +0 -7
- package/src/lib/components/default-components/DefaultSelectionBackground.tsx +0 -25
- package/src/lib/editor/overlays/ShapeIndicatorOverlayUtil.ts +0 -216
- package/src/lib/hooks/useTransform.ts +0 -30
|
@@ -188,12 +188,12 @@ class Editor extends EventEmitter {
|
|
|
188
188
|
this._tickManager = new TickManager(this);
|
|
189
189
|
this.disposables.add(() => this._tickManager.dispose());
|
|
190
190
|
this.disposables.add(() => {
|
|
191
|
-
this.off("tick", this._decayCameraStateTimeout);
|
|
192
191
|
this._setCameraState("idle");
|
|
193
192
|
});
|
|
194
193
|
this.fonts = new FontManager(this, fontAssetUrls);
|
|
195
194
|
this.disposables.add(() => this.fonts.dispose());
|
|
196
195
|
this.inputs = new InputsManager(this);
|
|
196
|
+
this.disposables.add(() => this.inputs.dispose());
|
|
197
197
|
this.performance = new PerformanceManager(this);
|
|
198
198
|
this.disposables.add(() => this.performance.dispose());
|
|
199
199
|
this.collaborators = new CollaboratorsManager(this);
|
|
@@ -822,6 +822,7 @@ class Editor extends EventEmitter {
|
|
|
822
822
|
this.store.dispose();
|
|
823
823
|
this.isDisposed = true;
|
|
824
824
|
this.emit("dispose");
|
|
825
|
+
this.removeAllListeners();
|
|
825
826
|
}
|
|
826
827
|
/* ------------------ Themes (shadowing the theme manager) ------------------ */
|
|
827
828
|
/**
|
|
@@ -1091,6 +1092,14 @@ class Editor extends EventEmitter {
|
|
|
1091
1092
|
getMarkIdMatching(idSubstring) {
|
|
1092
1093
|
return this.history.getMarkIdMatching(idSubstring);
|
|
1093
1094
|
}
|
|
1095
|
+
/**
|
|
1096
|
+
* Whether the editor is currently replaying history (i.e. an undo or redo is being applied).
|
|
1097
|
+
*
|
|
1098
|
+
* @internal
|
|
1099
|
+
*/
|
|
1100
|
+
isReplayingHistory() {
|
|
1101
|
+
return this.history.isReplaying();
|
|
1102
|
+
}
|
|
1094
1103
|
/**
|
|
1095
1104
|
* Coalesces all changes since the given mark into a single change, removing any intermediate marks.
|
|
1096
1105
|
*
|
|
@@ -2185,7 +2194,7 @@ class Editor extends EventEmitter {
|
|
|
2185
2194
|
return baseCamera;
|
|
2186
2195
|
}
|
|
2187
2196
|
_getFollowingPresence(targetUserId) {
|
|
2188
|
-
const visited = [this.user.
|
|
2197
|
+
const visited = [this.user.getRecordId()];
|
|
2189
2198
|
const collaborators = this.getCollaborators();
|
|
2190
2199
|
let leaderPresence = null;
|
|
2191
2200
|
while (targetUserId && !visited.includes(targetUserId)) {
|
|
@@ -2895,14 +2904,25 @@ class Editor extends EventEmitter {
|
|
|
2895
2904
|
this.off("stop-camera-animation", cancel);
|
|
2896
2905
|
};
|
|
2897
2906
|
this.once("stop-camera-animation", cancel);
|
|
2907
|
+
const dirZ = direction.z ?? 0;
|
|
2898
2908
|
const moveCamera = (elapsed) => {
|
|
2899
2909
|
const { x: cx, y: cy, z: cz } = this.getCamera();
|
|
2900
|
-
const
|
|
2910
|
+
const dx = direction.x * (currentSpeed * elapsed) / cz;
|
|
2911
|
+
const dy = direction.y * (currentSpeed * elapsed) / cz;
|
|
2912
|
+
let newCx = cx + dx;
|
|
2913
|
+
let newCy = cy + dy;
|
|
2914
|
+
let newCz = cz;
|
|
2915
|
+
if (dirZ !== 0) {
|
|
2916
|
+
newCz = cz * (1 + dirZ * currentSpeed * elapsed);
|
|
2917
|
+
const center = this.getViewportScreenCenter();
|
|
2918
|
+
newCx += center.x / newCz - center.x / cz;
|
|
2919
|
+
newCy += center.y / newCz - center.y / cz;
|
|
2920
|
+
}
|
|
2901
2921
|
currentSpeed *= 1 - friction;
|
|
2902
2922
|
if (currentSpeed < speedThreshold) {
|
|
2903
2923
|
cancel();
|
|
2904
2924
|
} else {
|
|
2905
|
-
this._setCamera(new Vec(
|
|
2925
|
+
this._setCamera(new Vec(newCx, newCy, newCz));
|
|
2906
2926
|
}
|
|
2907
2927
|
};
|
|
2908
2928
|
this.on("tick", moveCamera);
|
|
@@ -2982,6 +3002,7 @@ class Editor extends EventEmitter {
|
|
|
2982
3002
|
screenBounds.height = Math.max(screenBounds.height, 1);
|
|
2983
3003
|
}
|
|
2984
3004
|
const doc = this.getContainerDocument();
|
|
3005
|
+
if (!doc.body) return this;
|
|
2985
3006
|
const insets = [
|
|
2986
3007
|
// top
|
|
2987
3008
|
screenBounds.minY !== 0,
|
|
@@ -3191,7 +3212,7 @@ class Editor extends EventEmitter {
|
|
|
3191
3212
|
}
|
|
3192
3213
|
/**
|
|
3193
3214
|
* Collect user IDs referenced by a set of shapes via shape-specific props
|
|
3194
|
-
* (e.g. `
|
|
3215
|
+
* (e.g. `textLastEditedBy` on notes).
|
|
3195
3216
|
*
|
|
3196
3217
|
* @internal
|
|
3197
3218
|
*/
|
|
@@ -3222,7 +3243,7 @@ class Editor extends EventEmitter {
|
|
|
3222
3243
|
*/
|
|
3223
3244
|
startFollowingUser(userId) {
|
|
3224
3245
|
this.stopFollowingUser();
|
|
3225
|
-
const thisUserId = this.user.
|
|
3246
|
+
const thisUserId = this.user.getExternalId();
|
|
3226
3247
|
if (!thisUserId) {
|
|
3227
3248
|
console.warn("You should set the userId for the current instance before following a user");
|
|
3228
3249
|
}
|
|
@@ -5926,24 +5947,40 @@ class Editor extends EventEmitter {
|
|
|
5926
5947
|
* @public
|
|
5927
5948
|
*/
|
|
5928
5949
|
resizeShape(shape, scale, opts = {}) {
|
|
5950
|
+
const partial = this.getResizeShapePartial(shape, scale, opts);
|
|
5951
|
+
if (partial) this.updateShapes([partial]);
|
|
5952
|
+
return this;
|
|
5953
|
+
}
|
|
5954
|
+
/**
|
|
5955
|
+
* Get the update for a resized shape without committing it to the store. Interactions that
|
|
5956
|
+
* resize many shapes at once use this to collect all of the updates and commit them in a
|
|
5957
|
+
* single batch. Returns null when there is nothing to update.
|
|
5958
|
+
*
|
|
5959
|
+
* Shapes that are rotated out of alignment with the scale axis cannot be resized with a
|
|
5960
|
+
* single update; those shapes are resized immediately (as `resizeShape` would do) and null
|
|
5961
|
+
* is returned.
|
|
5962
|
+
*
|
|
5963
|
+
* @internal
|
|
5964
|
+
*/
|
|
5965
|
+
getResizeShapePartial(shape, scale, opts = {}) {
|
|
5929
5966
|
const id = typeof shape === "string" ? shape : shape.id;
|
|
5930
|
-
if (this.getIsReadonly()) return
|
|
5967
|
+
if (this.getIsReadonly()) return null;
|
|
5931
5968
|
if (!Number.isFinite(scale.x)) scale = new Vec(1, scale.y);
|
|
5932
5969
|
if (!Number.isFinite(scale.y)) scale = new Vec(scale.x, 1);
|
|
5933
5970
|
const initialShape = opts.initialShape ?? this.getShape(id);
|
|
5934
|
-
if (!initialShape) return
|
|
5971
|
+
if (!initialShape) return null;
|
|
5935
5972
|
const scaleOrigin = opts.scaleOrigin ?? this.getShapePageBounds(id)?.center;
|
|
5936
|
-
if (!scaleOrigin) return
|
|
5973
|
+
if (!scaleOrigin) return null;
|
|
5937
5974
|
const pageTransform = opts.initialPageTransform ? Mat.Cast(opts.initialPageTransform) : this.getShapePageTransform(id);
|
|
5938
|
-
if (!pageTransform) return
|
|
5975
|
+
if (!pageTransform) return null;
|
|
5939
5976
|
const pageRotation = pageTransform.rotation();
|
|
5940
|
-
if (pageRotation == null) return
|
|
5977
|
+
if (pageRotation == null) return null;
|
|
5941
5978
|
const scaleAxisRotation = opts.scaleAxisRotation ?? pageRotation;
|
|
5942
5979
|
const initialBounds = opts.initialBounds ?? this.getShapeGeometry(id).bounds;
|
|
5943
|
-
if (!initialBounds) return
|
|
5980
|
+
if (!initialBounds) return null;
|
|
5944
5981
|
const isAspectRatioLocked = opts.isAspectRatioLocked ?? this.getShapeUtil(initialShape).isAspectRatioLocked(initialShape);
|
|
5945
5982
|
if (!areAnglesCompatible(pageRotation, scaleAxisRotation)) {
|
|
5946
|
-
|
|
5983
|
+
this._resizeUnalignedShape(id, scale, {
|
|
5947
5984
|
...opts,
|
|
5948
5985
|
initialBounds,
|
|
5949
5986
|
scaleOrigin,
|
|
@@ -5952,6 +5989,7 @@ class Editor extends EventEmitter {
|
|
|
5952
5989
|
isAspectRatioLocked,
|
|
5953
5990
|
initialShape
|
|
5954
5991
|
});
|
|
5992
|
+
return null;
|
|
5955
5993
|
}
|
|
5956
5994
|
const util = this.getShapeUtil(initialShape);
|
|
5957
5995
|
if (isAspectRatioLocked) {
|
|
@@ -5961,7 +5999,7 @@ class Editor extends EventEmitter {
|
|
|
5961
5999
|
scale = new Vec(Math.sign(scale.x) * Math.abs(scale.y), scale.y);
|
|
5962
6000
|
}
|
|
5963
6001
|
}
|
|
5964
|
-
let
|
|
6002
|
+
let workingShape = null;
|
|
5965
6003
|
if (util.onResize && util.canResize(initialShape)) {
|
|
5966
6004
|
const newPagePoint = this._scalePagePoint(
|
|
5967
6005
|
Mat.applyToPoint(pageTransform, new Vec(0, 0)),
|
|
@@ -5979,7 +6017,7 @@ class Editor extends EventEmitter {
|
|
|
5979
6017
|
myScale.y = areWidthAndHeightAlignedWithCorrectAxis ? scale.y : scale.x;
|
|
5980
6018
|
const initialPagePoint = Mat.applyToPoint(pageTransform, new Vec());
|
|
5981
6019
|
const { x, y } = this.getPointInParentSpace(initialShape.id, initialPagePoint);
|
|
5982
|
-
|
|
6020
|
+
workingShape = initialShape;
|
|
5983
6021
|
if (!opts.skipStartAndEndCallbacks) {
|
|
5984
6022
|
workingShape = applyPartialToRecordWithProps(
|
|
5985
6023
|
initialShape,
|
|
@@ -5999,9 +6037,6 @@ class Editor extends EventEmitter {
|
|
|
5999
6037
|
initialShape
|
|
6000
6038
|
}
|
|
6001
6039
|
);
|
|
6002
|
-
if (resizedShape) {
|
|
6003
|
-
didResize = true;
|
|
6004
|
-
}
|
|
6005
6040
|
workingShape = applyPartialToRecordWithProps(workingShape, {
|
|
6006
6041
|
id,
|
|
6007
6042
|
type: initialShape.type,
|
|
@@ -6015,32 +6050,36 @@ class Editor extends EventEmitter {
|
|
|
6015
6050
|
util.onResizeEnd?.(initialShape, workingShape) ?? void 0
|
|
6016
6051
|
);
|
|
6017
6052
|
}
|
|
6018
|
-
|
|
6053
|
+
if (resizedShape) {
|
|
6054
|
+
return workingShape;
|
|
6055
|
+
}
|
|
6019
6056
|
}
|
|
6020
|
-
|
|
6021
|
-
|
|
6022
|
-
|
|
6023
|
-
|
|
6024
|
-
|
|
6025
|
-
|
|
6026
|
-
|
|
6027
|
-
|
|
6028
|
-
|
|
6029
|
-
|
|
6030
|
-
|
|
6031
|
-
|
|
6032
|
-
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
|
|
6039
|
-
y: initialShape.y + delta.y
|
|
6040
|
-
}
|
|
6041
|
-
]);
|
|
6057
|
+
const initialPageCenter = Mat.applyToPoint(pageTransform, initialBounds.center);
|
|
6058
|
+
const newPageCenter = this._scalePagePoint(
|
|
6059
|
+
initialPageCenter,
|
|
6060
|
+
scaleOrigin,
|
|
6061
|
+
scale,
|
|
6062
|
+
scaleAxisRotation
|
|
6063
|
+
);
|
|
6064
|
+
const initialPageCenterInParentSpace = this.getPointInParentSpace(
|
|
6065
|
+
initialShape.id,
|
|
6066
|
+
initialPageCenter
|
|
6067
|
+
);
|
|
6068
|
+
const newPageCenterInParentSpace = this.getPointInParentSpace(initialShape.id, newPageCenter);
|
|
6069
|
+
const delta = Vec.Sub(newPageCenterInParentSpace, initialPageCenterInParentSpace);
|
|
6070
|
+
if (workingShape) {
|
|
6071
|
+
return {
|
|
6072
|
+
...workingShape,
|
|
6073
|
+
x: initialShape.x + delta.x,
|
|
6074
|
+
y: initialShape.y + delta.y
|
|
6075
|
+
};
|
|
6042
6076
|
}
|
|
6043
|
-
return
|
|
6077
|
+
return {
|
|
6078
|
+
id,
|
|
6079
|
+
type: initialShape.type,
|
|
6080
|
+
x: initialShape.x + delta.x,
|
|
6081
|
+
y: initialShape.y + delta.y
|
|
6082
|
+
};
|
|
6044
6083
|
}
|
|
6045
6084
|
/** @internal */
|
|
6046
6085
|
_scalePagePoint(point, scaleOrigin, scale, scaleAxisRotation) {
|
|
@@ -7294,6 +7333,7 @@ class Editor extends EventEmitter {
|
|
|
7294
7333
|
async getSvgElement(shapes, opts = {}) {
|
|
7295
7334
|
const ids = shapes.length === 0 ? this.getCurrentPageShapeIdsSorted() : typeof shapes[0] === "string" ? shapes : shapes.map((s) => s.id);
|
|
7296
7335
|
if (ids.length === 0) return void 0;
|
|
7336
|
+
await this.fonts.loadRequiredFontsForCurrentPage(this.options.maxFontsToLoadBeforeRender);
|
|
7297
7337
|
return exportToSvg(this, ids, opts);
|
|
7298
7338
|
}
|
|
7299
7339
|
/**
|
|
@@ -8159,7 +8199,10 @@ class Editor extends EventEmitter {
|
|
|
8159
8199
|
inputs.buttons.add(info.button);
|
|
8160
8200
|
inputs.setIsPointing(true);
|
|
8161
8201
|
inputs.setIsDragging(false);
|
|
8162
|
-
if (!isPenMode &&
|
|
8202
|
+
if (!isPenMode && info.isPenDirect) {
|
|
8203
|
+
this.updateInstanceState({ isPenMode: true });
|
|
8204
|
+
this.interrupt();
|
|
8205
|
+
}
|
|
8163
8206
|
if (info.button === STYLUS_ERASER_BUTTON) {
|
|
8164
8207
|
this._restoreToolId = this.getCurrentToolId();
|
|
8165
8208
|
this.complete();
|
|
@@ -8262,7 +8305,10 @@ class Editor extends EventEmitter {
|
|
|
8262
8305
|
this.setCursor({ type: this._prevCursor, rotation: 0 });
|
|
8263
8306
|
}
|
|
8264
8307
|
if (slideSpeed > 0) {
|
|
8265
|
-
this.slideCamera({
|
|
8308
|
+
this.slideCamera({
|
|
8309
|
+
speed: slideSpeed,
|
|
8310
|
+
direction: { x: slideDirection.x, y: slideDirection.y, z: 0 }
|
|
8311
|
+
});
|
|
8266
8312
|
}
|
|
8267
8313
|
this._selectedShapeIdsAtPointerDown = [];
|
|
8268
8314
|
this._didCaptureSelectionAtPointerDown = false;
|
|
@@ -8270,7 +8316,10 @@ class Editor extends EventEmitter {
|
|
|
8270
8316
|
}
|
|
8271
8317
|
}
|
|
8272
8318
|
if (slideSpeed > 0) {
|
|
8273
|
-
this.slideCamera({
|
|
8319
|
+
this.slideCamera({
|
|
8320
|
+
speed: slideSpeed,
|
|
8321
|
+
direction: { x: slideDirection.x, y: slideDirection.y, z: 0 }
|
|
8322
|
+
});
|
|
8274
8323
|
}
|
|
8275
8324
|
} else {
|
|
8276
8325
|
if (info.button === STYLUS_ERASER_BUTTON) {
|
|
@@ -8362,6 +8411,9 @@ class Editor extends EventEmitter {
|
|
|
8362
8411
|
} else if (info.button === RIGHT_MOUSE_BUTTON) {
|
|
8363
8412
|
info.name = "right_click";
|
|
8364
8413
|
}
|
|
8414
|
+
if (info.name === "right_click" && this.getCurrentToolId() !== "select" && this.getStateDescendant("select")) {
|
|
8415
|
+
this.setCurrentTool("select");
|
|
8416
|
+
}
|
|
8365
8417
|
const { isPenMode } = this.store.unsafeGetWithoutCapture(TLINSTANCE_ID);
|
|
8366
8418
|
if (info.isPen === isPenMode) {
|
|
8367
8419
|
const clickInfo = this._clickManager.handlePointerEvent(info);
|