@tldraw/editor 3.13.0-canary.52e2314962c1 → 3.13.0-canary.62d76a25592d
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/dist-cjs/index.d.ts +114 -111
- package/dist-cjs/index.js +7 -22
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/TldrawEditor.js +2 -1
- package/dist-cjs/lib/TldrawEditor.js.map +2 -2
- package/dist-cjs/lib/components/Shape.js +12 -8
- package/dist-cjs/lib/components/Shape.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +36 -7
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +14 -12
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +17 -11
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultSpinner.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultSpinner.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +65 -35
- package/dist-cjs/lib/editor/Editor.js.map +3 -3
- package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js.map +2 -2
- package/dist-cjs/lib/editor/managers/TextManager.js +10 -0
- package/dist-cjs/lib/editor/managers/TextManager.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/shared/getPerfectDashProps.js.map +2 -2
- package/dist-cjs/lib/exports/getSvgJsx.js +12 -3
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- package/dist-cjs/lib/hooks/useDocumentEvents.js +3 -2
- package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useEditorComponents.js +16 -16
- package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
- package/dist-cjs/lib/license/LicenseManager.js +8 -1
- package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/Box.js +16 -0
- package/dist-cjs/lib/primitives/Box.js.map +2 -2
- package/dist-cjs/lib/primitives/Mat.js +1 -1
- package/dist-cjs/lib/primitives/Mat.js.map +2 -2
- package/dist-cjs/lib/primitives/Vec.js +20 -0
- package/dist-cjs/lib/primitives/Vec.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Arc2d.js +2 -2
- package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Edge2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Edge2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js +91 -20
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Group2d.js +55 -2
- package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Point2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Polyline2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +2 -2
- package/dist-cjs/lib/utils/areShapesContentEqual.js +25 -0
- package/dist-cjs/lib/utils/areShapesContentEqual.js.map +7 -0
- package/dist-cjs/lib/utils/debug-flags.js +5 -2
- package/dist-cjs/lib/utils/debug-flags.js.map +2 -2
- package/dist-cjs/lib/utils/dom.js +3 -3
- package/dist-cjs/lib/utils/dom.js.map +2 -2
- package/dist-cjs/lib/utils/nearestMultiple.js +34 -0
- package/dist-cjs/lib/utils/nearestMultiple.js.map +7 -0
- package/dist-cjs/lib/utils/rotation.js +5 -5
- package/dist-cjs/lib/utils/rotation.js.map +2 -2
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +114 -111
- package/dist-esm/index.mjs +9 -41
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +2 -1
- package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
- package/dist-esm/lib/components/Shape.mjs +12 -8
- package/dist-esm/lib/components/Shape.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +36 -7
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +14 -12
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +17 -11
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultSpinner.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultSpinner.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +65 -35
- package/dist-esm/lib/editor/Editor.mjs.map +3 -3
- package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/TextManager.mjs +10 -0
- package/dist-esm/lib/editor/managers/TextManager.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/shared/getPerfectDashProps.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs +12 -3
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- package/dist-esm/lib/hooks/useDocumentEvents.mjs +3 -2
- package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEditorComponents.mjs +16 -18
- package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
- package/dist-esm/lib/license/LicenseManager.mjs +8 -1
- package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/Box.mjs +16 -0
- package/dist-esm/lib/primitives/Box.mjs.map +2 -2
- package/dist-esm/lib/primitives/Mat.mjs +1 -1
- package/dist-esm/lib/primitives/Mat.mjs.map +2 -2
- package/dist-esm/lib/primitives/Vec.mjs +20 -0
- package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs +1 -1
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +1 -1
- package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Edge2d.mjs +1 -1
- package/dist-esm/lib/primitives/geometry/Edge2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +92 -21
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Group2d.mjs +55 -2
- package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Point2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Polyline2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +2 -2
- package/dist-esm/lib/utils/areShapesContentEqual.mjs +5 -0
- package/dist-esm/lib/utils/areShapesContentEqual.mjs.map +7 -0
- package/dist-esm/lib/utils/debug-flags.mjs +5 -2
- package/dist-esm/lib/utils/debug-flags.mjs.map +2 -2
- package/dist-esm/lib/utils/dom.mjs +3 -3
- package/dist-esm/lib/utils/dom.mjs.map +2 -2
- package/dist-esm/lib/utils/nearestMultiple.mjs +14 -0
- package/dist-esm/lib/utils/nearestMultiple.mjs.map +7 -0
- package/dist-esm/lib/utils/rotation.mjs +5 -5
- package/dist-esm/lib/utils/rotation.mjs.map +2 -2
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +42 -4
- package/package.json +7 -7
- package/src/index.ts +16 -31
- package/src/lib/TldrawEditor.tsx +6 -1
- package/src/lib/components/Shape.tsx +14 -10
- package/src/lib/components/default-components/DefaultCanvas.tsx +41 -7
- package/src/lib/components/default-components/DefaultErrorFallback.tsx +25 -14
- package/src/lib/components/default-components/DefaultShapeIndicator.tsx +17 -8
- package/src/lib/components/default-components/DefaultSpinner.tsx +1 -1
- package/src/lib/editor/Editor.test.ts +1 -1
- package/src/lib/editor/Editor.ts +62 -34
- package/src/lib/editor/managers/SnapManager/HandleSnaps.ts +0 -1
- package/src/lib/editor/managers/TextManager.ts +12 -0
- package/src/lib/editor/shapes/ShapeUtil.ts +22 -2
- package/src/lib/editor/shapes/shared/getPerfectDashProps.ts +9 -9
- package/src/lib/exports/getSvgJsx.tsx +16 -7
- package/src/lib/hooks/useDocumentEvents.ts +7 -2
- package/src/lib/hooks/useEditorComponents.tsx +33 -32
- package/src/lib/license/LicenseManager.test.ts +40 -0
- package/src/lib/license/LicenseManager.ts +13 -1
- package/src/lib/options.ts +4 -0
- package/src/lib/primitives/Box.ts +20 -0
- package/src/lib/primitives/Mat.ts +5 -4
- package/src/lib/primitives/Vec.ts +23 -0
- package/src/lib/primitives/geometry/Arc2d.ts +5 -5
- package/src/lib/primitives/geometry/Circle2d.ts +4 -4
- package/src/lib/primitives/geometry/CubicBezier2d.ts +4 -4
- package/src/lib/primitives/geometry/CubicSpline2d.ts +3 -3
- package/src/lib/primitives/geometry/Edge2d.ts +3 -3
- package/src/lib/primitives/geometry/Ellipse2d.ts +3 -3
- package/src/lib/primitives/geometry/Geometry2d.test.ts +42 -0
- package/src/lib/primitives/geometry/Geometry2d.ts +123 -35
- package/src/lib/primitives/geometry/Group2d.ts +70 -7
- package/src/lib/primitives/geometry/Point2d.ts +2 -2
- package/src/lib/primitives/geometry/Polyline2d.ts +3 -3
- package/src/lib/primitives/geometry/Stadium2d.ts +3 -3
- package/src/lib/test/currentToolIdMask.test.ts +1 -1
- package/src/lib/test/user.test.ts +1 -1
- package/src/lib/utils/areShapesContentEqual.ts +4 -0
- package/src/lib/utils/debug-flags.ts +7 -2
- package/src/lib/utils/dom.ts +4 -4
- package/src/lib/utils/nearestMultiple.ts +13 -0
- package/src/lib/utils/rotation.ts +8 -6
- package/src/lib/utils/sync/LocalIndexedDb.test.ts +1 -1
- package/src/lib/utils/sync/TLLocalSyncClient.test.ts +1 -1
- package/src/version.ts +3 -3
|
@@ -100,6 +100,7 @@ var import_Group2d = require("../primitives/geometry/Group2d");
|
|
|
100
100
|
var import_intersect = require("../primitives/intersect");
|
|
101
101
|
var import_utils2 = require("../primitives/utils");
|
|
102
102
|
var import_SharedStylesMap = require("../utils/SharedStylesMap");
|
|
103
|
+
var import_areShapesContentEqual = require("../utils/areShapesContentEqual");
|
|
103
104
|
var import_assets = require("../utils/assets");
|
|
104
105
|
var import_debug_flags = require("../utils/debug-flags");
|
|
105
106
|
var import_deepLinks = require("../utils/deepLinks");
|
|
@@ -423,7 +424,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
423
424
|
) : getShapeVisibility;
|
|
424
425
|
this.options = { ...import_options.defaultTldrawOptions, ...options };
|
|
425
426
|
this.store = store;
|
|
426
|
-
this.disposables.add(this.store.dispose.bind(this.store));
|
|
427
427
|
this.history = new import_HistoryManager.HistoryManager({
|
|
428
428
|
store,
|
|
429
429
|
annotateError: (error) => {
|
|
@@ -835,6 +835,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
835
835
|
dispose() {
|
|
836
836
|
this.disposables.forEach((dispose) => dispose());
|
|
837
837
|
this.disposables.clear();
|
|
838
|
+
this.store.dispose();
|
|
838
839
|
this.isDisposed = true;
|
|
839
840
|
}
|
|
840
841
|
getShapeUtil(arg) {
|
|
@@ -1347,8 +1348,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1347
1348
|
return this.getCurrentPageState().selectedShapeIds;
|
|
1348
1349
|
}
|
|
1349
1350
|
getSelectedShapes() {
|
|
1350
|
-
|
|
1351
|
-
return (0, import_utils.compact)(selectedShapeIds.map((id) => this.store.get(id)));
|
|
1351
|
+
return (0, import_utils.compact)(this.getSelectedShapeIds().map((id) => this.store.get(id)));
|
|
1352
1352
|
}
|
|
1353
1353
|
/**
|
|
1354
1354
|
* Select one or more shapes.
|
|
@@ -1738,13 +1738,21 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1738
1738
|
setEditingShape(shape) {
|
|
1739
1739
|
const id = typeof shape === "string" ? shape : shape?.id ?? null;
|
|
1740
1740
|
this.setRichTextEditor(null);
|
|
1741
|
-
|
|
1741
|
+
const prevEditingShapeId = this.getEditingShapeId();
|
|
1742
|
+
if (id !== prevEditingShapeId) {
|
|
1742
1743
|
if (id) {
|
|
1743
1744
|
const shape2 = this.getShape(id);
|
|
1744
1745
|
if (shape2 && this.getShapeUtil(shape2).canEdit(shape2)) {
|
|
1745
1746
|
this.run(
|
|
1746
1747
|
() => {
|
|
1747
1748
|
this._updateCurrentPageState({ editingShapeId: id });
|
|
1749
|
+
if (prevEditingShapeId) {
|
|
1750
|
+
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1751
|
+
if (prevEditingShape) {
|
|
1752
|
+
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1753
|
+
}
|
|
1754
|
+
}
|
|
1755
|
+
this.getShapeUtil(shape2).onEditStart?.(shape2);
|
|
1748
1756
|
},
|
|
1749
1757
|
{ history: "ignore" }
|
|
1750
1758
|
);
|
|
@@ -1755,6 +1763,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1755
1763
|
() => {
|
|
1756
1764
|
this._updateCurrentPageState({ editingShapeId: null });
|
|
1757
1765
|
this._currentRichTextEditor.set(null);
|
|
1766
|
+
if (prevEditingShapeId) {
|
|
1767
|
+
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1768
|
+
if (prevEditingShape) {
|
|
1769
|
+
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1770
|
+
}
|
|
1771
|
+
}
|
|
1758
1772
|
},
|
|
1759
1773
|
{ history: "ignore" }
|
|
1760
1774
|
);
|
|
@@ -1950,12 +1964,22 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1950
1964
|
}
|
|
1951
1965
|
return baseCamera;
|
|
1952
1966
|
}
|
|
1967
|
+
_getFollowingPresence(targetUserId) {
|
|
1968
|
+
const visited = [this.user.getId()];
|
|
1969
|
+
const collaborators = this.getCollaborators();
|
|
1970
|
+
let leaderPresence = null;
|
|
1971
|
+
while (targetUserId && !visited.includes(targetUserId)) {
|
|
1972
|
+
leaderPresence = collaborators.find((c) => c.userId === targetUserId) ?? null;
|
|
1973
|
+
targetUserId = leaderPresence?.followingUserId ?? null;
|
|
1974
|
+
if (leaderPresence) {
|
|
1975
|
+
visited.push(leaderPresence.userId);
|
|
1976
|
+
}
|
|
1977
|
+
}
|
|
1978
|
+
return leaderPresence;
|
|
1979
|
+
}
|
|
1953
1980
|
getViewportPageBoundsForFollowing() {
|
|
1954
|
-
const
|
|
1955
|
-
if (!
|
|
1956
|
-
const leaderPresence = this.getCollaborators().find((c) => c.userId === followingUserId);
|
|
1957
|
-
if (!leaderPresence) return null;
|
|
1958
|
-
if (!leaderPresence.camera || !leaderPresence.screenBounds) return null;
|
|
1981
|
+
const leaderPresence = this._getFollowingPresence(this.getInstanceState().followingUserId);
|
|
1982
|
+
if (!leaderPresence?.camera || !leaderPresence?.screenBounds) return null;
|
|
1959
1983
|
const { w: lw, h: lh } = leaderPresence.screenBounds;
|
|
1960
1984
|
const { x: lx, y: ly, z: lz } = leaderPresence.camera;
|
|
1961
1985
|
const theirViewport = new import_Box.Box(-lx, -ly, lw / lz, lh / lz);
|
|
@@ -2862,34 +2886,30 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2862
2886
|
*/
|
|
2863
2887
|
startFollowingUser(userId) {
|
|
2864
2888
|
this.stopFollowingUser();
|
|
2865
|
-
const leaderPresences = this._getCollaboratorsQuery().get().filter((p) => p.userId === userId);
|
|
2866
|
-
if (!leaderPresences.length) {
|
|
2867
|
-
console.warn("User not found");
|
|
2868
|
-
return this;
|
|
2869
|
-
}
|
|
2870
2889
|
const thisUserId = this.user.getId();
|
|
2871
2890
|
if (!thisUserId) {
|
|
2872
2891
|
console.warn("You should set the userId for the current instance before following a user");
|
|
2873
2892
|
}
|
|
2874
|
-
|
|
2893
|
+
const leaderPresence = this._getFollowingPresence(userId);
|
|
2894
|
+
if (!leaderPresence) {
|
|
2875
2895
|
return this;
|
|
2876
2896
|
}
|
|
2877
2897
|
const latestLeaderPresence = (0, import_state.computed)("latestLeaderPresence", () => {
|
|
2878
|
-
return this.
|
|
2898
|
+
return this._getFollowingPresence(userId);
|
|
2879
2899
|
});
|
|
2880
2900
|
(0, import_state.transact)(() => {
|
|
2881
2901
|
this.updateInstanceState({ followingUserId: userId }, { history: "ignore" });
|
|
2882
2902
|
const dispose = (0, import_state.react)("update current page", () => {
|
|
2883
|
-
const
|
|
2884
|
-
if (!
|
|
2903
|
+
const leaderPresence2 = latestLeaderPresence.get();
|
|
2904
|
+
if (!leaderPresence2) {
|
|
2885
2905
|
this.stopFollowingUser();
|
|
2886
2906
|
return;
|
|
2887
2907
|
}
|
|
2888
|
-
if (
|
|
2908
|
+
if (leaderPresence2.currentPageId !== this.getCurrentPageId() && this.getPage(leaderPresence2.currentPageId)) {
|
|
2889
2909
|
this.run(
|
|
2890
2910
|
() => {
|
|
2891
2911
|
this.store.put([
|
|
2892
|
-
{ ...this.getInstanceState(), currentPageId:
|
|
2912
|
+
{ ...this.getInstanceState(), currentPageId: leaderPresence2.currentPageId }
|
|
2893
2913
|
]);
|
|
2894
2914
|
this._isLockedOnFollowingUser.set(true);
|
|
2895
2915
|
},
|
|
@@ -2904,8 +2924,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2904
2924
|
this.off("stop-following", cancel);
|
|
2905
2925
|
};
|
|
2906
2926
|
const moveTowardsUser = () => {
|
|
2907
|
-
const
|
|
2908
|
-
if (!
|
|
2927
|
+
const leaderPresence2 = latestLeaderPresence.get();
|
|
2928
|
+
if (!leaderPresence2) {
|
|
2909
2929
|
this.stopFollowingUser();
|
|
2910
2930
|
return;
|
|
2911
2931
|
}
|
|
@@ -3434,7 +3454,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3434
3454
|
this.fonts.trackFontsForShape(shape2);
|
|
3435
3455
|
return this.getShapeUtil(shape2).getGeometry(shape2, opts);
|
|
3436
3456
|
},
|
|
3437
|
-
{ areRecordsEqual:
|
|
3457
|
+
{ areRecordsEqual: import_areShapesContentEqual.areShapesContentEqual }
|
|
3438
3458
|
);
|
|
3439
3459
|
}
|
|
3440
3460
|
return this._shapeGeometryCaches[context].get(
|
|
@@ -3477,9 +3497,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3477
3497
|
);
|
|
3478
3498
|
}
|
|
3479
3499
|
_getShapeHandlesCache() {
|
|
3480
|
-
return this.store.createComputedCache(
|
|
3481
|
-
|
|
3482
|
-
|
|
3500
|
+
return this.store.createComputedCache(
|
|
3501
|
+
"handles",
|
|
3502
|
+
(shape) => {
|
|
3503
|
+
return this.getShapeUtil(shape).getHandles?.(shape);
|
|
3504
|
+
},
|
|
3505
|
+
{
|
|
3506
|
+
areRecordsEqual: import_areShapesContentEqual.areShapesContentEqual
|
|
3507
|
+
}
|
|
3508
|
+
);
|
|
3483
3509
|
}
|
|
3484
3510
|
/**
|
|
3485
3511
|
* Get the handles (if any) for a shape.
|
|
@@ -4363,9 +4389,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
4363
4389
|
}
|
|
4364
4390
|
_getBindingsIndexCache() {
|
|
4365
4391
|
const index = (0, import_bindingsIndex.bindingsIndex)(this);
|
|
4366
|
-
return this.store.createComputedCache(
|
|
4367
|
-
|
|
4368
|
-
|
|
4392
|
+
return this.store.createComputedCache(
|
|
4393
|
+
"bindingsIndex",
|
|
4394
|
+
(shape) => {
|
|
4395
|
+
return index.get().get(shape.id);
|
|
4396
|
+
},
|
|
4397
|
+
// we can ignore the shape equality check here because the index is
|
|
4398
|
+
// computed incrementally based on what bindings are in the store
|
|
4399
|
+
{ areRecordsEqual: () => true }
|
|
4400
|
+
);
|
|
4369
4401
|
}
|
|
4370
4402
|
/**
|
|
4371
4403
|
* Get a binding from the store by its ID if it exists.
|
|
@@ -7440,7 +7472,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7440
7472
|
const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
|
|
7441
7473
|
const { x: dx, y: dy, z: dz = 0 } = info.delta;
|
|
7442
7474
|
let behavior = wheelBehavior;
|
|
7443
|
-
if (
|
|
7475
|
+
if (info.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
|
|
7444
7476
|
switch (behavior) {
|
|
7445
7477
|
case "zoom": {
|
|
7446
7478
|
const { x, y } = this.inputs.currentScreenPoint;
|
|
@@ -7521,12 +7553,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7521
7553
|
const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
|
|
7522
7554
|
if (this.inputs.isPanning && this.inputs.isPointing) {
|
|
7523
7555
|
const { currentScreenPoint, previousScreenPoint } = this.inputs;
|
|
7524
|
-
const { panSpeed } = cameraOptions;
|
|
7525
7556
|
const offset = import_Vec.Vec.Sub(currentScreenPoint, previousScreenPoint);
|
|
7526
|
-
this.setCamera(
|
|
7527
|
-
|
|
7528
|
-
|
|
7529
|
-
);
|
|
7557
|
+
this.setCamera(new import_Vec.Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
|
|
7558
|
+
immediate: true
|
|
7559
|
+
});
|
|
7530
7560
|
this.maybeTrackPerformance("Panning");
|
|
7531
7561
|
return;
|
|
7532
7562
|
}
|