@tldraw/editor 4.3.0-canary.9c474ef3fad5 → 4.3.0-canary.a2419250444e
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 +387 -118
- package/dist-cjs/index.js +5 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/components/ErrorBoundary.js.map +1 -1
- package/dist-cjs/lib/components/GeometryDebuggingView.js +1 -17
- package/dist-cjs/lib/components/GeometryDebuggingView.js.map +2 -2
- package/dist-cjs/lib/constants.js +1 -3
- package/dist-cjs/lib/constants.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +247 -273
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +18 -17
- package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +3 -3
- package/dist-cjs/lib/editor/derivations/parentsToChildren.js +12 -3
- package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
- package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js +1 -1
- package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +5 -6
- package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js +591 -0
- package/dist-cjs/lib/editor/managers/InputsManager/InputsManager.js.map +7 -0
- package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js +1 -1
- package/dist-cjs/lib/editor/managers/SnapManager/SnapManager.js.map +2 -2
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js +1 -22
- package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js +31 -23
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js +3 -3
- package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js.map +2 -2
- package/dist-cjs/lib/exports/parseCss.js +1 -1
- package/dist-cjs/lib/exports/parseCss.js.map +2 -2
- package/dist-cjs/lib/hooks/useEvent.js +1 -1
- package/dist-cjs/lib/hooks/useEvent.js.map +2 -2
- package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
- package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useScreenBounds.js.map +2 -2
- package/dist-cjs/lib/hooks/useStateAttribute.js +4 -1
- package/dist-cjs/lib/hooks/useStateAttribute.js.map +2 -2
- package/dist-cjs/lib/hooks/useTransform.js.map +1 -1
- package/dist-cjs/lib/options.js +4 -1
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/Box.js +3 -0
- package/dist-cjs/lib/primitives/Box.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js +1 -0
- package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
- package/dist-cjs/lib/utils/rotation.js +1 -1
- 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 +387 -118
- package/dist-esm/index.mjs +5 -1
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/components/ErrorBoundary.mjs.map +1 -1
- package/dist-esm/lib/components/GeometryDebuggingView.mjs +1 -17
- package/dist-esm/lib/components/GeometryDebuggingView.mjs.map +2 -2
- package/dist-esm/lib/constants.mjs +1 -3
- package/dist-esm/lib/constants.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +248 -276
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +18 -17
- package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +3 -3
- package/dist-esm/lib/editor/derivations/parentsToChildren.mjs +13 -4
- package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs +1 -1
- package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +5 -6
- package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs +573 -0
- package/dist-esm/lib/editor/managers/InputsManager/InputsManager.mjs.map +7 -0
- package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs +1 -1
- package/dist-esm/lib/editor/managers/SnapManager/SnapManager.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs +1 -22
- package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +31 -23
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs +3 -3
- package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs.map +2 -2
- package/dist-esm/lib/exports/parseCss.mjs +1 -1
- package/dist-esm/lib/exports/parseCss.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEvent.mjs +1 -1
- package/dist-esm/lib/hooks/useEvent.mjs.map +2 -2
- package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useGestureEvents.mjs +1 -1
- package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useScreenBounds.mjs.map +2 -2
- package/dist-esm/lib/hooks/useStateAttribute.mjs +4 -1
- package/dist-esm/lib/hooks/useStateAttribute.mjs.map +2 -2
- package/dist-esm/lib/hooks/useTransform.mjs.map +1 -1
- package/dist-esm/lib/options.mjs +4 -1
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/Box.mjs +3 -0
- package/dist-esm/lib/primitives/Box.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +1 -0
- package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
- package/dist-esm/lib/utils/rotation.mjs +1 -1
- 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 +6 -8
- package/package.json +18 -16
- package/src/index.ts +3 -0
- package/src/lib/components/ErrorBoundary.tsx +1 -1
- package/src/lib/components/GeometryDebuggingView.tsx +1 -19
- package/src/lib/config/TLUserPreferences.test.ts +40 -0
- package/src/lib/constants.ts +0 -2
- package/src/lib/editor/Editor.test.ts +140 -0
- package/src/lib/editor/Editor.ts +300 -316
- package/src/lib/editor/derivations/notVisibleShapes.ts +37 -23
- package/src/lib/editor/derivations/parentsToChildren.ts +18 -7
- package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +17 -31
- package/src/lib/editor/managers/ClickManager/ClickManager.ts +1 -1
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +129 -79
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.ts +10 -6
- package/src/lib/editor/managers/InputsManager/InputsManager.ts +566 -0
- package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +0 -4
- package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +12 -0
- package/src/lib/editor/managers/SnapManager/SnapManager.ts +1 -1
- package/src/lib/editor/managers/TickManager/TickManager.test.ts +40 -107
- package/src/lib/editor/managers/TickManager/TickManager.ts +2 -32
- package/src/lib/editor/shapes/ShapeUtil.ts +67 -24
- package/src/lib/editor/tools/BaseBoxShapeTool/children/Pointing.ts +3 -3
- package/src/lib/exports/parseCss.test.ts +1 -0
- package/src/lib/exports/parseCss.ts +1 -1
- package/src/lib/hooks/useEvent.tsx +1 -1
- package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
- package/src/lib/hooks/useGestureEvents.ts +2 -2
- package/src/lib/hooks/usePassThroughMouseOverEvents.ts +1 -1
- package/src/lib/hooks/usePassThroughWheelEvents.ts +1 -1
- package/src/lib/hooks/useScreenBounds.ts +1 -1
- package/src/lib/hooks/useStateAttribute.ts +4 -1
- package/src/lib/hooks/useTransform.ts +1 -1
- package/src/lib/options.ts +19 -0
- package/src/lib/primitives/Box.ts +9 -0
- package/src/lib/primitives/geometry/Geometry2d.ts +1 -0
- package/src/lib/utils/rotation.ts +1 -1
- package/src/version.ts +3 -3
|
@@ -46,7 +46,7 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
|
|
|
46
46
|
var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
|
|
47
47
|
var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
|
|
48
48
|
var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
|
|
49
|
-
var __setMetaKeyTimeout_dec, __setCtrlKeyTimeout_dec, __setAltKeyTimeout_dec, __setShiftKeyTimeout_dec, _getIsReadonly_dec, _getIsFocused_dec, _getSharedOpacity_dec, _getSharedStyles_dec, __getSelectionSharedStyles_dec, __getBindingsIndexCache_dec, _getCurrentPageRenderingShapesSorted_dec, _getCurrentPageShapesSorted_dec, _getCurrentPageShapes_dec, _getCurrentPageBounds_dec, _getCulledShapes_dec, _getNotVisibleShapes_dec, __getShapeMaskedPageBoundsCache_dec, __getShapeMaskCache_dec, __getShapeClipPathCache_dec, __getShapePageBoundsCache_dec, __getShapePageTransformCache_dec, __getShapeHandlesCache_dec, __getAllAssetsQuery_dec, _getCurrentPageShapeIdsSorted_dec, _getCurrentPageId_dec, _getPages_dec, __getAllPagesQuery_dec, _getRenderingShapes_dec, _getCollaboratorsOnCurrentPage_dec, _getCollaborators_dec, __getCollaboratorsQuery_dec, _getViewportPageBounds_dec, _getViewportScreenCenter_dec, _getViewportScreenBounds_dec, _getEfficientZoomLevel_dec, __getAboveDebouncedZoomThreshold_dec, _getDebouncedZoomLevel_dec, _getZoomLevel_dec, _getCameraForFollowing_dec, _getViewportPageBoundsForFollowing_dec, _getCamera_dec, __unsafe_getCameraId_dec, _getErasingShapes_dec, _getErasingShapeIds_dec, _getHintingShape_dec, _getHintingShapeIds_dec, _getHoveredShape_dec, _getHoveredShapeId_dec, _getRichTextEditor_dec, _getEditingShape_dec, _getEditingShapeId_dec, _getFocusedGroup_dec, _getFocusedGroupId_dec, _getSelectionRotatedScreenBounds_dec, _getSelectionRotatedPageBounds_dec, _getSelectionRotation_dec, _getSelectionPageBounds_dec, _getOnlySelectedShape_dec, _getOnlySelectedShapeId_dec, _getCurrentPageShapesInReadingOrder_dec, _getSelectedShapes_dec, _getSelectedShapeIds_dec, __getCurrentPageStateId_dec, _getCurrentPageState_dec, __getPageStatesQuery_dec, _getPageStates_dec, _getInstanceState_dec, _getDocumentSettings_dec, _getCurrentToolId_dec, _getCurrentTool_dec, _getPath_dec,
|
|
49
|
+
var __setMetaKeyTimeout_dec, __setCtrlKeyTimeout_dec, __setAltKeyTimeout_dec, __setShiftKeyTimeout_dec, _getIsReadonly_dec, _getIsFocused_dec, _getSharedOpacity_dec, _getSharedStyles_dec, __getSelectionSharedStyles_dec, __getBindingsIndexCache_dec, _getCurrentPageRenderingShapesSorted_dec, _getCurrentPageShapesSorted_dec, _getCurrentPageShapes_dec, _getCurrentPageBounds_dec, _getCulledShapes_dec, _getNotVisibleShapes_dec, __getShapeMaskedPageBoundsCache_dec, __getShapeMaskCache_dec, __getShapeClipPathCache_dec, __getShapePageBoundsCache_dec, __getShapePageTransformCache_dec, __getShapeHandlesCache_dec, __getAllAssetsQuery_dec, _getCurrentPageShapeIdsSorted_dec, _getCurrentPageId_dec, _getPages_dec, __getAllPagesQuery_dec, _getRenderingShapes_dec, _getCollaboratorsOnCurrentPage_dec, _getCollaborators_dec, __getCollaboratorsQuery_dec, _getViewportPageBounds_dec, _getViewportScreenCenter_dec, _getViewportScreenBounds_dec, _getEfficientZoomLevel_dec, __getAboveDebouncedZoomThreshold_dec, _getDebouncedZoomLevel_dec, _getZoomLevel_dec, _getCameraForFollowing_dec, _getViewportPageBoundsForFollowing_dec, _getCamera_dec, __unsafe_getCameraId_dec, _getErasingShapes_dec, _getErasingShapeIds_dec, _getHintingShape_dec, _getHintingShapeIds_dec, _getHoveredShape_dec, _getHoveredShapeId_dec, _getRichTextEditor_dec, _getEditingShape_dec, _getEditingShapeId_dec, _getFocusedGroup_dec, _getFocusedGroupId_dec, _getSelectionRotatedScreenBounds_dec, _getSelectionRotatedPageBounds_dec, _getSelectionRotation_dec, _getSelectionPageBounds_dec, _getOnlySelectedShape_dec, _getOnlySelectedShapeId_dec, _getCurrentPageShapesInReadingOrder_dec, _getSelectedShapes_dec, _getSelectedShapeIds_dec, __getCurrentPageStateId_dec, _getCurrentPageState_dec, __getPageStatesQuery_dec, _getPageStates_dec, _getInstanceState_dec, _getDocumentSettings_dec, _getCurrentToolId_dec, _getCurrentTool_dec, _getPath_dec, _canRedo_dec, _canUndo_dec, _getIsShapeHiddenCache_dec, _a, _init;
|
|
50
50
|
import {
|
|
51
51
|
EMPTY_ARRAY,
|
|
52
52
|
atom,
|
|
@@ -64,7 +64,6 @@ import {
|
|
|
64
64
|
PageRecordType,
|
|
65
65
|
TLDOCUMENT_ID,
|
|
66
66
|
TLINSTANCE_ID,
|
|
67
|
-
TLPOINTER_ID,
|
|
68
67
|
createBindingId,
|
|
69
68
|
createShapeId,
|
|
70
69
|
getShapePropKeysByStyle,
|
|
@@ -116,8 +115,7 @@ import {
|
|
|
116
115
|
LEFT_MOUSE_BUTTON,
|
|
117
116
|
MIDDLE_MOUSE_BUTTON,
|
|
118
117
|
RIGHT_MOUSE_BUTTON,
|
|
119
|
-
STYLUS_ERASER_BUTTON
|
|
120
|
-
ZOOM_TO_FIT_PADDING
|
|
118
|
+
STYLUS_ERASER_BUTTON
|
|
121
119
|
} from "../constants.mjs";
|
|
122
120
|
import { exportToSvg } from "../exports/exportToSvg.mjs";
|
|
123
121
|
import { getSvgAsImage } from "../exports/getSvgAsImage.mjs";
|
|
@@ -140,7 +138,6 @@ import {
|
|
|
140
138
|
parseDeepLinkString
|
|
141
139
|
} from "../utils/deepLinks.mjs";
|
|
142
140
|
import { getIncrementedName } from "../utils/getIncrementedName.mjs";
|
|
143
|
-
import { isAccelKey } from "../utils/keyboard.mjs";
|
|
144
141
|
import { getReorderingShapesChanges } from "../utils/reorderShapes.mjs";
|
|
145
142
|
import { applyRotationToSnapshotShapes, getRotationSnapshot } from "../utils/rotation.mjs";
|
|
146
143
|
import { bindingsIndex } from "./derivations/bindingsIndex.mjs";
|
|
@@ -152,13 +149,14 @@ import { EdgeScrollManager } from "./managers/EdgeScrollManager/EdgeScrollManage
|
|
|
152
149
|
import { FocusManager } from "./managers/FocusManager/FocusManager.mjs";
|
|
153
150
|
import { FontManager } from "./managers/FontManager/FontManager.mjs";
|
|
154
151
|
import { HistoryManager } from "./managers/HistoryManager/HistoryManager.mjs";
|
|
152
|
+
import { InputsManager } from "./managers/InputsManager/InputsManager.mjs";
|
|
155
153
|
import { ScribbleManager } from "./managers/ScribbleManager/ScribbleManager.mjs";
|
|
156
154
|
import { SnapManager } from "./managers/SnapManager/SnapManager.mjs";
|
|
157
155
|
import { TextManager } from "./managers/TextManager/TextManager.mjs";
|
|
158
156
|
import { TickManager } from "./managers/TickManager/TickManager.mjs";
|
|
159
157
|
import { UserPreferencesManager } from "./managers/UserPreferencesManager/UserPreferencesManager.mjs";
|
|
160
158
|
import { RootState } from "./tools/RootState.mjs";
|
|
161
|
-
class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed],
|
|
159
|
+
class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed], _canUndo_dec = [computed], _canRedo_dec = [computed], _getPath_dec = [computed], _getCurrentTool_dec = [computed], _getCurrentToolId_dec = [computed], _getDocumentSettings_dec = [computed], _getInstanceState_dec = [computed], _getPageStates_dec = [computed], __getPageStatesQuery_dec = [computed], _getCurrentPageState_dec = [computed], __getCurrentPageStateId_dec = [computed], _getSelectedShapeIds_dec = [computed], _getSelectedShapes_dec = [computed], _getCurrentPageShapesInReadingOrder_dec = [computed], _getOnlySelectedShapeId_dec = [computed], _getOnlySelectedShape_dec = [computed], _getSelectionPageBounds_dec = [computed], _getSelectionRotation_dec = [computed], _getSelectionRotatedPageBounds_dec = [computed], _getSelectionRotatedScreenBounds_dec = [computed], _getFocusedGroupId_dec = [computed], _getFocusedGroup_dec = [computed], _getEditingShapeId_dec = [computed], _getEditingShape_dec = [computed], _getRichTextEditor_dec = [computed], _getHoveredShapeId_dec = [computed], _getHoveredShape_dec = [computed], _getHintingShapeIds_dec = [computed], _getHintingShape_dec = [computed], _getErasingShapeIds_dec = [computed], _getErasingShapes_dec = [computed], __unsafe_getCameraId_dec = [computed], _getCamera_dec = [computed], _getViewportPageBoundsForFollowing_dec = [computed], _getCameraForFollowing_dec = [computed], _getZoomLevel_dec = [computed], _getDebouncedZoomLevel_dec = [computed], __getAboveDebouncedZoomThreshold_dec = [computed], _getEfficientZoomLevel_dec = [computed], _getViewportScreenBounds_dec = [computed], _getViewportScreenCenter_dec = [computed], _getViewportPageBounds_dec = [computed], __getCollaboratorsQuery_dec = [computed], _getCollaborators_dec = [computed], _getCollaboratorsOnCurrentPage_dec = [computed], _getRenderingShapes_dec = [computed], __getAllPagesQuery_dec = [computed], _getPages_dec = [computed], _getCurrentPageId_dec = [computed], _getCurrentPageShapeIdsSorted_dec = [computed], __getAllAssetsQuery_dec = [computed], __getShapeHandlesCache_dec = [computed], __getShapePageTransformCache_dec = [computed], __getShapePageBoundsCache_dec = [computed], __getShapeClipPathCache_dec = [computed], __getShapeMaskCache_dec = [computed], __getShapeMaskedPageBoundsCache_dec = [computed], _getNotVisibleShapes_dec = [computed], _getCulledShapes_dec = [computed], _getCurrentPageBounds_dec = [computed], _getCurrentPageShapes_dec = [computed], _getCurrentPageShapesSorted_dec = [computed], _getCurrentPageRenderingShapesSorted_dec = [computed], __getBindingsIndexCache_dec = [computed], __getSelectionSharedStyles_dec = [computed], _getSharedStyles_dec = [computed({ isEqual: (a, b) => a.equals(b) })], _getSharedOpacity_dec = [computed], _getIsFocused_dec = [computed], _getIsReadonly_dec = [computed], __setShiftKeyTimeout_dec = [bind], __setAltKeyTimeout_dec = [bind], __setCtrlKeyTimeout_dec = [bind], __setMetaKeyTimeout_dec = [bind], _a) {
|
|
162
160
|
constructor({
|
|
163
161
|
store,
|
|
164
162
|
user,
|
|
@@ -194,7 +192,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
194
192
|
*/
|
|
195
193
|
__publicField(this, "root");
|
|
196
194
|
/**
|
|
197
|
-
* A set of functions to call when the
|
|
195
|
+
* A set of functions to call when the editor is disposed.
|
|
198
196
|
*
|
|
199
197
|
* @public
|
|
200
198
|
*/
|
|
@@ -205,10 +203,19 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
205
203
|
* @public
|
|
206
204
|
*/
|
|
207
205
|
__publicField(this, "isDisposed", false);
|
|
208
|
-
/**
|
|
206
|
+
/**
|
|
207
|
+
* A manager for the editor's tick events.
|
|
208
|
+
*
|
|
209
|
+
* @internal */
|
|
209
210
|
__publicField(this, "_tickManager");
|
|
210
211
|
/**
|
|
211
|
-
* A manager for the
|
|
212
|
+
* A manager for the editor's input state.
|
|
213
|
+
*
|
|
214
|
+
* @public
|
|
215
|
+
*/
|
|
216
|
+
__publicField(this, "inputs");
|
|
217
|
+
/**
|
|
218
|
+
* A manager for the editor's snapping feature.
|
|
212
219
|
*
|
|
213
220
|
* @public
|
|
214
221
|
*/
|
|
@@ -290,7 +297,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
290
297
|
__publicField(this, "bindingUtils");
|
|
291
298
|
/* --------------------- History -------------------- */
|
|
292
299
|
/**
|
|
293
|
-
* A manager for the
|
|
300
|
+
* A manager for the editor's history.
|
|
294
301
|
*
|
|
295
302
|
* @readonly
|
|
296
303
|
*/
|
|
@@ -356,54 +363,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
356
363
|
tldraw: null,
|
|
357
364
|
excalidraw: null
|
|
358
365
|
});
|
|
359
|
-
/* --------------------- Events --------------------- */
|
|
360
|
-
/**
|
|
361
|
-
* The app's current input state.
|
|
362
|
-
*
|
|
363
|
-
* @public
|
|
364
|
-
*/
|
|
365
|
-
__publicField(this, "inputs", {
|
|
366
|
-
/** The most recent pointer down's position in the current page space. */
|
|
367
|
-
originPagePoint: new Vec(),
|
|
368
|
-
/** The most recent pointer down's position in screen space. */
|
|
369
|
-
originScreenPoint: new Vec(),
|
|
370
|
-
/** The previous pointer position in the current page space. */
|
|
371
|
-
previousPagePoint: new Vec(),
|
|
372
|
-
/** The previous pointer position in screen space. */
|
|
373
|
-
previousScreenPoint: new Vec(),
|
|
374
|
-
/** The most recent pointer position in the current page space. */
|
|
375
|
-
currentPagePoint: new Vec(),
|
|
376
|
-
/** The most recent pointer position in screen space. */
|
|
377
|
-
currentScreenPoint: new Vec(),
|
|
378
|
-
/** A set containing the currently pressed keys. */
|
|
379
|
-
keys: /* @__PURE__ */ new Set(),
|
|
380
|
-
/** A set containing the currently pressed buttons. */
|
|
381
|
-
buttons: /* @__PURE__ */ new Set(),
|
|
382
|
-
/** Whether the input is from a pe. */
|
|
383
|
-
isPen: false,
|
|
384
|
-
/** Whether the shift key is currently pressed. */
|
|
385
|
-
shiftKey: false,
|
|
386
|
-
/** Whether the meta key is currently pressed. */
|
|
387
|
-
metaKey: false,
|
|
388
|
-
/** Whether the control or command key is currently pressed. */
|
|
389
|
-
ctrlKey: false,
|
|
390
|
-
/** Whether the alt or option key is currently pressed. */
|
|
391
|
-
altKey: false,
|
|
392
|
-
/** Whether the user is dragging. */
|
|
393
|
-
isDragging: false,
|
|
394
|
-
/** Whether the user is pointing. */
|
|
395
|
-
isPointing: false,
|
|
396
|
-
/** Whether the user is pinching. */
|
|
397
|
-
isPinching: false,
|
|
398
|
-
/** Whether the user is editing. */
|
|
399
|
-
isEditing: false,
|
|
400
|
-
/** Whether the user is panning. */
|
|
401
|
-
isPanning: false,
|
|
402
|
-
/** Whether the user is spacebar panning. */
|
|
403
|
-
isSpacebarPanning: false,
|
|
404
|
-
/** Velocity of mouse pointer, in pixels per millisecond */
|
|
405
|
-
pointerVelocity: new Vec()
|
|
406
|
-
});
|
|
407
366
|
/**
|
|
408
367
|
* A manager for recording multiple click events.
|
|
409
368
|
*
|
|
@@ -427,8 +386,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
427
386
|
/** @internal */
|
|
428
387
|
__publicField(this, "_restoreToolId", "select");
|
|
429
388
|
/** @internal */
|
|
430
|
-
__publicField(this, "_pinchStart", 1);
|
|
431
|
-
/** @internal */
|
|
432
389
|
__publicField(this, "_didPinch", false);
|
|
433
390
|
/** @internal */
|
|
434
391
|
__publicField(this, "_selectedShapeIdsAtPointerDown", []);
|
|
@@ -464,6 +421,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
464
421
|
this.disposables.add(() => this.textMeasure.dispose());
|
|
465
422
|
this.fonts = new FontManager(this, fontAssetUrls);
|
|
466
423
|
this._tickManager = new TickManager(this);
|
|
424
|
+
this.inputs = new InputsManager(this);
|
|
467
425
|
class NewRoot extends RootState {
|
|
468
426
|
static initial = initialState ?? "";
|
|
469
427
|
}
|
|
@@ -930,9 +888,12 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
930
888
|
this.history.undo();
|
|
931
889
|
return this;
|
|
932
890
|
}
|
|
933
|
-
|
|
891
|
+
canUndo() {
|
|
934
892
|
return this.history.getNumUndos() > 0;
|
|
935
893
|
}
|
|
894
|
+
getCanUndo() {
|
|
895
|
+
return this.canUndo();
|
|
896
|
+
}
|
|
936
897
|
/**
|
|
937
898
|
* Redo to the next mark.
|
|
938
899
|
*
|
|
@@ -949,13 +910,16 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
949
910
|
this.history.redo();
|
|
950
911
|
return this;
|
|
951
912
|
}
|
|
913
|
+
canRedo() {
|
|
914
|
+
return this.history.getNumRedos() > 0;
|
|
915
|
+
}
|
|
916
|
+
getCanRedo() {
|
|
917
|
+
return this.canRedo();
|
|
918
|
+
}
|
|
952
919
|
clearHistory() {
|
|
953
920
|
this.history.clear();
|
|
954
921
|
return this;
|
|
955
922
|
}
|
|
956
|
-
getCanRedo() {
|
|
957
|
-
return this.history.getNumRedos() > 0;
|
|
958
|
-
}
|
|
959
923
|
/**
|
|
960
924
|
* Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
|
|
961
925
|
* any redos. You typically want to do this just before a user interaction begins or is handled.
|
|
@@ -1110,7 +1074,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1110
1074
|
}),
|
|
1111
1075
|
selectionCount: this.getSelectedShapes().length,
|
|
1112
1076
|
editingShape: editingShapeId ? this.getShape(editingShapeId) : void 0,
|
|
1113
|
-
inputs: this.inputs,
|
|
1077
|
+
inputs: this.inputs.toJson(),
|
|
1114
1078
|
pageState: this.getCurrentPageState(),
|
|
1115
1079
|
instanceState: this.getInstanceState(),
|
|
1116
1080
|
collaboratorCount: this.getCollaboratorsOnCurrentPage().length
|
|
@@ -1131,7 +1095,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1131
1095
|
* we're in a transaction that's about to be rolled back due to the same error we're currently
|
|
1132
1096
|
* reporting.
|
|
1133
1097
|
*
|
|
1134
|
-
* Instead, to listen to changes to this value, you need to listen to
|
|
1098
|
+
* Instead, to listen to changes to this value, you need to listen to editor's `crash` event.
|
|
1135
1099
|
*
|
|
1136
1100
|
* @internal
|
|
1137
1101
|
*/
|
|
@@ -1782,6 +1746,28 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1782
1746
|
const editingShapeId = this.getEditingShapeId();
|
|
1783
1747
|
return editingShapeId ? this.getShape(editingShapeId) : void 0;
|
|
1784
1748
|
}
|
|
1749
|
+
/**
|
|
1750
|
+
* Whether the shape can be edited.
|
|
1751
|
+
*
|
|
1752
|
+
* @param shape - The shape (or shape id) to check if it can be edited.
|
|
1753
|
+
* @param info - The info about the edit start.
|
|
1754
|
+
*
|
|
1755
|
+
* @public
|
|
1756
|
+
* @returns true if the shape can be edited, false otherwise.
|
|
1757
|
+
*/
|
|
1758
|
+
canEditShape(shape, info) {
|
|
1759
|
+
const id = typeof shape === "string" ? shape : shape?.id ?? null;
|
|
1760
|
+
if (!id) return false;
|
|
1761
|
+
if (id === this.getEditingShapeId()) return false;
|
|
1762
|
+
const _shape = this.getShape(id);
|
|
1763
|
+
if (!_shape) return false;
|
|
1764
|
+
const util = this.getShapeUtil(_shape);
|
|
1765
|
+
const _info = info ?? { type: "unknown" };
|
|
1766
|
+
if (!util.canEdit(_shape, _info)) return false;
|
|
1767
|
+
if (this.getIsReadonly() && !util.canEditInReadonly(_shape)) return false;
|
|
1768
|
+
if (this.isShapeOrAncestorLocked(_shape) && !util.canEditWhileLocked(_shape)) return false;
|
|
1769
|
+
return true;
|
|
1770
|
+
}
|
|
1785
1771
|
/**
|
|
1786
1772
|
* Set the current editing shape.
|
|
1787
1773
|
*
|
|
@@ -1797,42 +1783,42 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1797
1783
|
*/
|
|
1798
1784
|
setEditingShape(shape) {
|
|
1799
1785
|
const id = typeof shape === "string" ? shape : shape?.id ?? null;
|
|
1800
|
-
|
|
1801
|
-
const prevEditingShapeId = this.getEditingShapeId();
|
|
1802
|
-
if (id !== prevEditingShapeId) {
|
|
1803
|
-
if (id) {
|
|
1804
|
-
const shape2 = this.getShape(id);
|
|
1805
|
-
if (shape2 && this.getShapeUtil(shape2).canEdit(shape2)) {
|
|
1806
|
-
this.run(
|
|
1807
|
-
() => {
|
|
1808
|
-
this._updateCurrentPageState({ editingShapeId: id });
|
|
1809
|
-
if (prevEditingShapeId) {
|
|
1810
|
-
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1811
|
-
if (prevEditingShape) {
|
|
1812
|
-
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1813
|
-
}
|
|
1814
|
-
}
|
|
1815
|
-
this.getShapeUtil(shape2).onEditStart?.(shape2);
|
|
1816
|
-
},
|
|
1817
|
-
{ history: "ignore" }
|
|
1818
|
-
);
|
|
1819
|
-
return this;
|
|
1820
|
-
}
|
|
1821
|
-
}
|
|
1786
|
+
if (!id) {
|
|
1822
1787
|
this.run(
|
|
1823
1788
|
() => {
|
|
1824
|
-
this.
|
|
1825
|
-
this._currentRichTextEditor.set(null);
|
|
1789
|
+
const prevEditingShapeId = this.getEditingShapeId();
|
|
1826
1790
|
if (prevEditingShapeId) {
|
|
1827
1791
|
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1828
1792
|
if (prevEditingShape) {
|
|
1829
1793
|
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1830
1794
|
}
|
|
1831
1795
|
}
|
|
1796
|
+
this._updateCurrentPageState({ editingShapeId: null });
|
|
1797
|
+
this._currentRichTextEditor.set(null);
|
|
1832
1798
|
},
|
|
1833
1799
|
{ history: "ignore" }
|
|
1834
1800
|
);
|
|
1801
|
+
return this;
|
|
1835
1802
|
}
|
|
1803
|
+
if (!this.canEditShape(id)) return this;
|
|
1804
|
+
this.run(
|
|
1805
|
+
() => {
|
|
1806
|
+
const prevEditingShapeId = this.getEditingShapeId();
|
|
1807
|
+
if (prevEditingShapeId) {
|
|
1808
|
+
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1809
|
+
if (prevEditingShape) {
|
|
1810
|
+
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1811
|
+
}
|
|
1812
|
+
}
|
|
1813
|
+
this._updateCurrentPageState({ editingShapeId: null });
|
|
1814
|
+
this._currentRichTextEditor.set(null);
|
|
1815
|
+
this.select(id);
|
|
1816
|
+
this._updateCurrentPageState({ editingShapeId: id });
|
|
1817
|
+
const nextEditingShape = this.getShape(id);
|
|
1818
|
+
this.getShapeUtil(nextEditingShape).onEditStart?.(nextEditingShape);
|
|
1819
|
+
},
|
|
1820
|
+
{ history: "ignore" }
|
|
1821
|
+
);
|
|
1836
1822
|
return this;
|
|
1837
1823
|
}
|
|
1838
1824
|
getRichTextEditor() {
|
|
@@ -1965,6 +1951,25 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1965
1951
|
getCroppingShapeId() {
|
|
1966
1952
|
return this.getCurrentPageState().croppingShapeId;
|
|
1967
1953
|
}
|
|
1954
|
+
/**
|
|
1955
|
+
* Whether the shape can be cropped.
|
|
1956
|
+
*
|
|
1957
|
+
* @param shape - The shape (or shape id) to check if it can be cropped.
|
|
1958
|
+
*
|
|
1959
|
+
* @public
|
|
1960
|
+
* @returns true if the shape can be cropped, false otherwise.
|
|
1961
|
+
*/
|
|
1962
|
+
canCropShape(shape) {
|
|
1963
|
+
if (!shape) return false;
|
|
1964
|
+
const id = typeof shape === "string" ? shape : shape?.id ?? null;
|
|
1965
|
+
if (!id) return false;
|
|
1966
|
+
const _shape = this.getShape(id);
|
|
1967
|
+
if (!_shape) return false;
|
|
1968
|
+
const util = this.getShapeUtil(_shape);
|
|
1969
|
+
if (!util.canCrop(_shape)) return false;
|
|
1970
|
+
if (this.isShapeOrAncestorLocked(_shape)) return false;
|
|
1971
|
+
return true;
|
|
1972
|
+
}
|
|
1968
1973
|
/**
|
|
1969
1974
|
* Set the current cropping shape.
|
|
1970
1975
|
*
|
|
@@ -1986,12 +1991,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1986
1991
|
() => {
|
|
1987
1992
|
if (!id) {
|
|
1988
1993
|
this.updateCurrentPageState({ croppingShapeId: null });
|
|
1989
|
-
} else {
|
|
1990
|
-
|
|
1991
|
-
const util = this.getShapeUtil(shape2);
|
|
1992
|
-
if (shape2 && util.canCrop(shape2)) {
|
|
1993
|
-
this.updateCurrentPageState({ croppingShapeId: id });
|
|
1994
|
-
}
|
|
1994
|
+
} else if (this.canCropShape(id)) {
|
|
1995
|
+
this.updateCurrentPageState({ croppingShapeId: id });
|
|
1995
1996
|
}
|
|
1996
1997
|
},
|
|
1997
1998
|
{ history: "ignore" }
|
|
@@ -2327,7 +2328,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
2327
2328
|
},
|
|
2328
2329
|
{ history: "ignore" }
|
|
2329
2330
|
);
|
|
2330
|
-
const
|
|
2331
|
+
const currentScreenPoint = this.inputs.getCurrentScreenPoint();
|
|
2332
|
+
const currentPagePoint = this.inputs.getCurrentPagePoint();
|
|
2331
2333
|
if (currentScreenPoint.x / z - x !== currentPagePoint.x || currentScreenPoint.y / z - y !== currentPagePoint.y) {
|
|
2332
2334
|
this.updatePointer({
|
|
2333
2335
|
immediate: opts?.immediate,
|
|
@@ -2462,7 +2464,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
2462
2464
|
* ```ts
|
|
2463
2465
|
* editor.zoomIn()
|
|
2464
2466
|
* editor.zoomIn(editor.getViewportScreenCenter(), { animation: { duration: 200 } })
|
|
2465
|
-
* editor.zoomIn(editor.inputs.
|
|
2467
|
+
* editor.zoomIn(editor.inputs.getCurrentScreenPoint(), { animation: { duration: 200 } })
|
|
2466
2468
|
* ```
|
|
2467
2469
|
*
|
|
2468
2470
|
* @param point - The screen point to zoom in on. Defaults to the screen center
|
|
@@ -2503,7 +2505,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
2503
2505
|
* ```ts
|
|
2504
2506
|
* editor.zoomOut()
|
|
2505
2507
|
* editor.zoomOut(editor.getViewportScreenCenter(), { animation: { duration: 120 } })
|
|
2506
|
-
* editor.zoomOut(editor.inputs.
|
|
2508
|
+
* editor.zoomOut(editor.inputs.getCurrentScreenPoint(), { animation: { duration: 120 } })
|
|
2507
2509
|
* ```
|
|
2508
2510
|
*
|
|
2509
2511
|
* @param point - The point to zoom out on. Defaults to the viewport screen center.
|
|
@@ -2555,10 +2557,15 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
2555
2557
|
if (isLocked && !opts?.force) return this;
|
|
2556
2558
|
const selectionPageBounds = this.getSelectionPageBounds();
|
|
2557
2559
|
if (selectionPageBounds) {
|
|
2558
|
-
this.
|
|
2559
|
-
|
|
2560
|
-
|
|
2561
|
-
}
|
|
2560
|
+
const currentZoom = this.getZoomLevel();
|
|
2561
|
+
if (Math.abs(currentZoom - 1) < 0.01) {
|
|
2562
|
+
this.zoomToBounds(selectionPageBounds, opts);
|
|
2563
|
+
} else {
|
|
2564
|
+
this.zoomToBounds(selectionPageBounds, {
|
|
2565
|
+
targetZoom: 1,
|
|
2566
|
+
...opts
|
|
2567
|
+
});
|
|
2568
|
+
}
|
|
2562
2569
|
}
|
|
2563
2570
|
return this;
|
|
2564
2571
|
}
|
|
@@ -2598,7 +2605,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
2598
2605
|
const cameraOptions = this._cameraOptions.__unsafe__getWithoutCapture();
|
|
2599
2606
|
if (cameraOptions.isLocked && !opts?.force) return this;
|
|
2600
2607
|
const viewportScreenBounds = this.getViewportScreenBounds();
|
|
2601
|
-
const inset = opts?.inset ?? Math.min(
|
|
2608
|
+
const inset = opts?.inset ?? Math.min(this.options.zoomToFitPadding, viewportScreenBounds.width * 0.28);
|
|
2602
2609
|
const baseZoom = this.getBaseZoom();
|
|
2603
2610
|
const zoomMin = cameraOptions.zoomSteps[0];
|
|
2604
2611
|
const zoomMax = last(cameraOptions.zoomSteps);
|
|
@@ -5715,8 +5722,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
5715
5722
|
isAspectRatioLocked: options.isAspectRatioLocked
|
|
5716
5723
|
});
|
|
5717
5724
|
if (Math.sign(scale.x) * Math.sign(scale.y) < 0) {
|
|
5718
|
-
|
|
5719
|
-
rotation
|
|
5725
|
+
const parentRotation = this.getShapeParentTransform(id).rotation();
|
|
5726
|
+
const rotation = -options.initialShape.rotation - 2 * parentRotation;
|
|
5720
5727
|
this.updateShapes([{ id, type, rotation }]);
|
|
5721
5728
|
}
|
|
5722
5729
|
const preScaleShapePageCenter = Mat.applyToPoint(
|
|
@@ -5729,9 +5736,9 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
5729
5736
|
scale,
|
|
5730
5737
|
options.scaleAxisRotation
|
|
5731
5738
|
);
|
|
5732
|
-
const pageBounds = this.getShapePageBounds(id);
|
|
5733
5739
|
const pageTransform = this.getShapePageTransform(id);
|
|
5734
|
-
const
|
|
5740
|
+
const currentLocalBounds = this.getShapeGeometry(id).bounds;
|
|
5741
|
+
const currentPageCenter = Mat.applyToPoint(pageTransform, currentLocalBounds.center);
|
|
5735
5742
|
const shapePageTransformOrigin = pageTransform.point();
|
|
5736
5743
|
if (!currentPageCenter || !shapePageTransformOrigin) return this;
|
|
5737
5744
|
const pageDelta = Vec.Sub(postScaleShapePageCenter, currentPageCenter);
|
|
@@ -6017,7 +6024,11 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
6017
6024
|
)
|
|
6018
6025
|
);
|
|
6019
6026
|
const sortedShapeIds = shapesToGroup.sort(sortByIndex).map((s) => s.id);
|
|
6020
|
-
const
|
|
6027
|
+
const childBounds = compact(shapesToGroup.map((shape) => this.getShapePageBounds(shape)));
|
|
6028
|
+
const pageBounds = Box.Common(childBounds);
|
|
6029
|
+
if (!pageBounds.isValid()) {
|
|
6030
|
+
throw Error(`Editor.groupShapes: group bounds are invalid (NaN).`);
|
|
6031
|
+
}
|
|
6021
6032
|
const { x, y } = pageBounds.point;
|
|
6022
6033
|
const parentId = this.findCommonAncestor(shapesToGroup) ?? this.getCurrentPageId();
|
|
6023
6034
|
if (this.getCurrentToolId() !== "select") return this;
|
|
@@ -6970,60 +6981,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
6970
6981
|
height
|
|
6971
6982
|
};
|
|
6972
6983
|
}
|
|
6973
|
-
|
|
6974
|
-
* Update the input points from a pointer, pinch, or wheel event.
|
|
6975
|
-
*
|
|
6976
|
-
* @param info - The event info.
|
|
6977
|
-
*/
|
|
6978
|
-
_updateInputsFromEvent(info) {
|
|
6979
|
-
const {
|
|
6980
|
-
pointerVelocity,
|
|
6981
|
-
previousScreenPoint,
|
|
6982
|
-
previousPagePoint,
|
|
6983
|
-
currentScreenPoint,
|
|
6984
|
-
currentPagePoint,
|
|
6985
|
-
originScreenPoint,
|
|
6986
|
-
originPagePoint
|
|
6987
|
-
} = this.inputs;
|
|
6988
|
-
const { screenBounds } = this.store.unsafeGetWithoutCapture(TLINSTANCE_ID);
|
|
6989
|
-
const { x: cx, y: cy, z: cz } = unsafe__withoutCapture(() => this.getCamera());
|
|
6990
|
-
const sx = info.point.x - screenBounds.x;
|
|
6991
|
-
const sy = info.point.y - screenBounds.y;
|
|
6992
|
-
const sz = info.point.z ?? 0.5;
|
|
6993
|
-
previousScreenPoint.setTo(currentScreenPoint);
|
|
6994
|
-
previousPagePoint.setTo(currentPagePoint);
|
|
6995
|
-
currentScreenPoint.set(sx, sy);
|
|
6996
|
-
const nx = sx / cz - cx;
|
|
6997
|
-
const ny = sy / cz - cy;
|
|
6998
|
-
if (isFinite(nx) && isFinite(ny)) {
|
|
6999
|
-
currentPagePoint.set(nx, ny, sz);
|
|
7000
|
-
}
|
|
7001
|
-
this.inputs.isPen = info.type === "pointer" && info.isPen;
|
|
7002
|
-
if (info.name === "pointer_down" || this.inputs.isPinching) {
|
|
7003
|
-
pointerVelocity.set(0, 0);
|
|
7004
|
-
originScreenPoint.setTo(currentScreenPoint);
|
|
7005
|
-
originPagePoint.setTo(currentPagePoint);
|
|
7006
|
-
}
|
|
7007
|
-
this.run(
|
|
7008
|
-
() => {
|
|
7009
|
-
this.store.put([
|
|
7010
|
-
{
|
|
7011
|
-
id: TLPOINTER_ID,
|
|
7012
|
-
typeName: "pointer",
|
|
7013
|
-
x: currentPagePoint.x,
|
|
7014
|
-
y: currentPagePoint.y,
|
|
7015
|
-
lastActivityTimestamp: (
|
|
7016
|
-
// If our pointer moved only because we're following some other user, then don't
|
|
7017
|
-
// update our last activity timestamp; otherwise, update it to the current timestamp.
|
|
7018
|
-
(info.type === "pointer" && info.pointerId === INTERNAL_POINTER_IDS.CAMERA_MOVE ? this.store.unsafeGetWithoutCapture(TLPOINTER_ID)?.lastActivityTimestamp ?? this._tickManager.now : this._tickManager.now)
|
|
7019
|
-
),
|
|
7020
|
-
meta: {}
|
|
7021
|
-
}
|
|
7022
|
-
]);
|
|
7023
|
-
},
|
|
7024
|
-
{ history: "ignore" }
|
|
7025
|
-
);
|
|
7026
|
-
}
|
|
6984
|
+
/* --------------------- Events --------------------- */
|
|
7027
6985
|
/**
|
|
7028
6986
|
* Dispatch a cancel event.
|
|
7029
6987
|
*
|
|
@@ -7088,18 +7046,19 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7088
7046
|
point: options?.point ?? // weird but true: what `inputs` calls screen-space is actually viewport space. so
|
|
7089
7047
|
// we need to convert back into true screen space first. we should fix this...
|
|
7090
7048
|
Vec.Add(
|
|
7091
|
-
this.inputs.
|
|
7049
|
+
this.inputs.getCurrentScreenPoint(),
|
|
7092
7050
|
this.store.unsafeGetWithoutCapture(TLINSTANCE_ID).screenBounds
|
|
7093
7051
|
),
|
|
7094
7052
|
pointerId: options?.pointerId ?? 0,
|
|
7095
7053
|
button: options?.button ?? 0,
|
|
7096
|
-
isPen: options?.isPen ?? this.inputs.
|
|
7097
|
-
shiftKey: options?.shiftKey ?? this.inputs.
|
|
7098
|
-
altKey: options?.altKey ?? this.inputs.
|
|
7099
|
-
ctrlKey: options?.ctrlKey ?? this.inputs.
|
|
7100
|
-
metaKey: options?.metaKey ?? this.inputs.
|
|
7101
|
-
accelKey:
|
|
7054
|
+
isPen: options?.isPen ?? this.inputs.getIsPen(),
|
|
7055
|
+
shiftKey: options?.shiftKey ?? this.inputs.getShiftKey(),
|
|
7056
|
+
altKey: options?.altKey ?? this.inputs.getAltKey(),
|
|
7057
|
+
ctrlKey: options?.ctrlKey ?? this.inputs.getCtrlKey(),
|
|
7058
|
+
metaKey: options?.metaKey ?? this.inputs.getMetaKey(),
|
|
7059
|
+
accelKey: false
|
|
7102
7060
|
};
|
|
7061
|
+
event.accelKey = options?.accelKey ?? this.inputs.getAccelKey();
|
|
7103
7062
|
if (options?.immediate) {
|
|
7104
7063
|
this._flushEventForTick(event);
|
|
7105
7064
|
} else {
|
|
@@ -7415,58 +7374,58 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7415
7374
|
this._clickManager.cancelDoubleClickTimeout();
|
|
7416
7375
|
}
|
|
7417
7376
|
_setShiftKeyTimeout() {
|
|
7418
|
-
this.inputs.
|
|
7377
|
+
this.inputs.setShiftKey(false);
|
|
7419
7378
|
this.dispatch({
|
|
7420
7379
|
type: "keyboard",
|
|
7421
7380
|
name: "key_up",
|
|
7422
7381
|
key: "Shift",
|
|
7423
|
-
shiftKey: this.inputs.
|
|
7424
|
-
ctrlKey: this.inputs.
|
|
7425
|
-
altKey: this.inputs.
|
|
7426
|
-
metaKey: this.inputs.
|
|
7427
|
-
accelKey:
|
|
7382
|
+
shiftKey: this.inputs.getShiftKey(),
|
|
7383
|
+
ctrlKey: this.inputs.getCtrlKey(),
|
|
7384
|
+
altKey: this.inputs.getAltKey(),
|
|
7385
|
+
metaKey: this.inputs.getMetaKey(),
|
|
7386
|
+
accelKey: this.inputs.getAccelKey(),
|
|
7428
7387
|
code: "ShiftLeft"
|
|
7429
7388
|
});
|
|
7430
7389
|
}
|
|
7431
7390
|
_setAltKeyTimeout() {
|
|
7432
|
-
this.inputs.
|
|
7391
|
+
this.inputs.setAltKey(false);
|
|
7433
7392
|
this.dispatch({
|
|
7434
7393
|
type: "keyboard",
|
|
7435
7394
|
name: "key_up",
|
|
7436
7395
|
key: "Alt",
|
|
7437
|
-
shiftKey: this.inputs.
|
|
7438
|
-
ctrlKey: this.inputs.
|
|
7439
|
-
altKey: this.inputs.
|
|
7440
|
-
metaKey: this.inputs.
|
|
7441
|
-
accelKey:
|
|
7396
|
+
shiftKey: this.inputs.getShiftKey(),
|
|
7397
|
+
ctrlKey: this.inputs.getCtrlKey(),
|
|
7398
|
+
altKey: this.inputs.getAltKey(),
|
|
7399
|
+
metaKey: this.inputs.getMetaKey(),
|
|
7400
|
+
accelKey: this.inputs.getAccelKey(),
|
|
7442
7401
|
code: "AltLeft"
|
|
7443
7402
|
});
|
|
7444
7403
|
}
|
|
7445
7404
|
_setCtrlKeyTimeout() {
|
|
7446
|
-
this.inputs.
|
|
7405
|
+
this.inputs.setCtrlKey(false);
|
|
7447
7406
|
this.dispatch({
|
|
7448
7407
|
type: "keyboard",
|
|
7449
7408
|
name: "key_up",
|
|
7450
7409
|
key: "Ctrl",
|
|
7451
|
-
shiftKey: this.inputs.
|
|
7452
|
-
ctrlKey: this.inputs.
|
|
7453
|
-
altKey: this.inputs.
|
|
7454
|
-
metaKey: this.inputs.
|
|
7455
|
-
accelKey:
|
|
7410
|
+
shiftKey: this.inputs.getShiftKey(),
|
|
7411
|
+
ctrlKey: this.inputs.getCtrlKey(),
|
|
7412
|
+
altKey: this.inputs.getAltKey(),
|
|
7413
|
+
metaKey: this.inputs.getMetaKey(),
|
|
7414
|
+
accelKey: this.inputs.getAccelKey(),
|
|
7456
7415
|
code: "ControlLeft"
|
|
7457
7416
|
});
|
|
7458
7417
|
}
|
|
7459
7418
|
_setMetaKeyTimeout() {
|
|
7460
|
-
this.inputs.
|
|
7419
|
+
this.inputs.setMetaKey(false);
|
|
7461
7420
|
this.dispatch({
|
|
7462
7421
|
type: "keyboard",
|
|
7463
7422
|
name: "key_up",
|
|
7464
7423
|
key: "Meta",
|
|
7465
|
-
shiftKey: this.inputs.
|
|
7466
|
-
ctrlKey: this.inputs.
|
|
7467
|
-
altKey: this.inputs.
|
|
7468
|
-
metaKey: this.inputs.
|
|
7469
|
-
accelKey:
|
|
7424
|
+
shiftKey: this.inputs.getShiftKey(),
|
|
7425
|
+
ctrlKey: this.inputs.getCtrlKey(),
|
|
7426
|
+
altKey: this.inputs.getAltKey(),
|
|
7427
|
+
metaKey: this.inputs.getMetaKey(),
|
|
7428
|
+
accelKey: this.inputs.getAccelKey(),
|
|
7470
7429
|
code: "MetaLeft"
|
|
7471
7430
|
});
|
|
7472
7431
|
}
|
|
@@ -7537,10 +7496,10 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7537
7496
|
const { type } = info;
|
|
7538
7497
|
if (info.type === "misc") {
|
|
7539
7498
|
if (info.name === "cancel" || info.name === "complete") {
|
|
7540
|
-
this.inputs.
|
|
7541
|
-
if (this.inputs.
|
|
7542
|
-
this.inputs.
|
|
7543
|
-
this.inputs.
|
|
7499
|
+
this.inputs.setIsDragging(false);
|
|
7500
|
+
if (this.inputs.getIsPanning()) {
|
|
7501
|
+
this.inputs.setIsPanning(false);
|
|
7502
|
+
this.inputs.setIsSpacebarPanning(false);
|
|
7544
7503
|
this.setCursor({ type: this._prevCursor, rotation: 0 });
|
|
7545
7504
|
}
|
|
7546
7505
|
}
|
|
@@ -7551,34 +7510,33 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7551
7510
|
if (info.shiftKey) {
|
|
7552
7511
|
clearTimeout(this._shiftKeyTimeout);
|
|
7553
7512
|
this._shiftKeyTimeout = -1;
|
|
7554
|
-
inputs.
|
|
7555
|
-
} else if (!info.shiftKey && inputs.
|
|
7513
|
+
inputs.setShiftKey(true);
|
|
7514
|
+
} else if (!info.shiftKey && inputs.getShiftKey() && this._shiftKeyTimeout === -1) {
|
|
7556
7515
|
this._shiftKeyTimeout = this.timers.setTimeout(this._setShiftKeyTimeout, 150);
|
|
7557
7516
|
}
|
|
7558
7517
|
if (info.altKey) {
|
|
7559
7518
|
clearTimeout(this._altKeyTimeout);
|
|
7560
7519
|
this._altKeyTimeout = -1;
|
|
7561
|
-
inputs.
|
|
7562
|
-
} else if (!info.altKey && inputs.
|
|
7520
|
+
inputs.setAltKey(true);
|
|
7521
|
+
} else if (!info.altKey && inputs.getAltKey() && this._altKeyTimeout === -1) {
|
|
7563
7522
|
this._altKeyTimeout = this.timers.setTimeout(this._setAltKeyTimeout, 150);
|
|
7564
7523
|
}
|
|
7565
7524
|
if (info.ctrlKey) {
|
|
7566
7525
|
clearTimeout(this._ctrlKeyTimeout);
|
|
7567
7526
|
this._ctrlKeyTimeout = -1;
|
|
7568
|
-
inputs.
|
|
7569
|
-
} else if (!info.ctrlKey && inputs.
|
|
7527
|
+
inputs.setCtrlKey(true);
|
|
7528
|
+
} else if (!info.ctrlKey && inputs.getCtrlKey() && this._ctrlKeyTimeout === -1) {
|
|
7570
7529
|
this._ctrlKeyTimeout = this.timers.setTimeout(this._setCtrlKeyTimeout, 150);
|
|
7571
7530
|
}
|
|
7572
7531
|
if (info.metaKey) {
|
|
7573
7532
|
clearTimeout(this._metaKeyTimeout);
|
|
7574
7533
|
this._metaKeyTimeout = -1;
|
|
7575
|
-
inputs.
|
|
7576
|
-
} else if (!info.metaKey && inputs.
|
|
7534
|
+
inputs.setMetaKey(true);
|
|
7535
|
+
} else if (!info.metaKey && inputs.getMetaKey() && this._metaKeyTimeout === -1) {
|
|
7577
7536
|
this._metaKeyTimeout = this.timers.setTimeout(this._setMetaKeyTimeout, 150);
|
|
7578
7537
|
}
|
|
7579
|
-
|
|
7580
|
-
|
|
7581
|
-
inputs.isDragging = false;
|
|
7538
|
+
if (!inputs.getIsPointing()) {
|
|
7539
|
+
inputs.setIsDragging(false);
|
|
7582
7540
|
}
|
|
7583
7541
|
const instanceState = this.store.unsafeGetWithoutCapture(TLINSTANCE_ID);
|
|
7584
7542
|
const pageState = this.store.get(this._getCurrentPageStateId());
|
|
@@ -7587,23 +7545,23 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7587
7545
|
case "pinch": {
|
|
7588
7546
|
if (cameraOptions.isLocked) return;
|
|
7589
7547
|
clearTimeout(this._longPressTimeout);
|
|
7590
|
-
this.
|
|
7548
|
+
this.inputs.updateFromEvent(info);
|
|
7591
7549
|
switch (info.name) {
|
|
7592
7550
|
case "pinch_start": {
|
|
7593
|
-
if (inputs.
|
|
7594
|
-
if (!inputs.
|
|
7595
|
-
this._pinchStart = this.getCamera().z;
|
|
7551
|
+
if (inputs.getIsPinching()) return;
|
|
7552
|
+
if (!inputs.getIsEditing()) {
|
|
7596
7553
|
if (!this._selectedShapeIdsAtPointerDown.length) {
|
|
7597
7554
|
this._selectedShapeIdsAtPointerDown = [...pageState.selectedShapeIds];
|
|
7598
7555
|
}
|
|
7599
7556
|
this._didPinch = true;
|
|
7600
|
-
inputs.
|
|
7557
|
+
inputs.setIsPinching(true);
|
|
7601
7558
|
this.interrupt();
|
|
7602
7559
|
}
|
|
7560
|
+
this.emit("event", info);
|
|
7603
7561
|
return;
|
|
7604
7562
|
}
|
|
7605
7563
|
case "pinch": {
|
|
7606
|
-
if (!inputs.
|
|
7564
|
+
if (!inputs.getIsPinching()) return;
|
|
7607
7565
|
const {
|
|
7608
7566
|
point: { z = 1 },
|
|
7609
7567
|
delta: { x: dx, y: dy }
|
|
@@ -7627,11 +7585,12 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7627
7585
|
),
|
|
7628
7586
|
{ immediate: true }
|
|
7629
7587
|
);
|
|
7588
|
+
this.emit("event", info);
|
|
7630
7589
|
return;
|
|
7631
7590
|
}
|
|
7632
7591
|
case "pinch_end": {
|
|
7633
|
-
if (!inputs.
|
|
7634
|
-
inputs.
|
|
7592
|
+
if (!inputs.getIsPinching()) return this;
|
|
7593
|
+
inputs.setIsPinching(false);
|
|
7635
7594
|
const { _selectedShapeIdsAtPointerDown: shapesToReselect } = this;
|
|
7636
7595
|
this.setSelectedShapes(this._selectedShapeIdsAtPointerDown);
|
|
7637
7596
|
this._selectedShapeIdsAtPointerDown = [];
|
|
@@ -7645,13 +7604,14 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7645
7604
|
});
|
|
7646
7605
|
}
|
|
7647
7606
|
}
|
|
7607
|
+
this.emit("event", info);
|
|
7648
7608
|
return;
|
|
7649
7609
|
}
|
|
7650
7610
|
}
|
|
7651
7611
|
}
|
|
7652
7612
|
case "wheel": {
|
|
7653
7613
|
if (cameraOptions.isLocked) return;
|
|
7654
|
-
this.
|
|
7614
|
+
this.inputs.updateFromEvent(info);
|
|
7655
7615
|
const { panSpeed, zoomSpeed } = cameraOptions;
|
|
7656
7616
|
let wheelBehavior = cameraOptions.wheelBehavior;
|
|
7657
7617
|
const inputMode = this.user.getUserPreferences().inputMode;
|
|
@@ -7669,7 +7629,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7669
7629
|
if (info.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
|
|
7670
7630
|
switch (behavior) {
|
|
7671
7631
|
case "zoom": {
|
|
7672
|
-
const { x, y } = this.inputs.
|
|
7632
|
+
const { x, y } = this.inputs.getCurrentScreenPoint();
|
|
7673
7633
|
let delta = dz;
|
|
7674
7634
|
if (wheelBehavior === "zoom") {
|
|
7675
7635
|
if (Math.abs(dy) > 10) {
|
|
@@ -7683,6 +7643,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7683
7643
|
immediate: true
|
|
7684
7644
|
});
|
|
7685
7645
|
this.maybeTrackPerformance("Zooming");
|
|
7646
|
+
this.root.handleEvent(info);
|
|
7647
|
+
this.emit("event", info);
|
|
7686
7648
|
return;
|
|
7687
7649
|
}
|
|
7688
7650
|
case "pan": {
|
|
@@ -7690,6 +7652,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7690
7652
|
immediate: true
|
|
7691
7653
|
});
|
|
7692
7654
|
this.maybeTrackPerformance("Panning");
|
|
7655
|
+
this.root.handleEvent(info);
|
|
7656
|
+
this.emit("event", info);
|
|
7693
7657
|
return;
|
|
7694
7658
|
}
|
|
7695
7659
|
}
|
|
@@ -7697,14 +7661,14 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7697
7661
|
break;
|
|
7698
7662
|
}
|
|
7699
7663
|
case "pointer": {
|
|
7700
|
-
if (inputs.
|
|
7701
|
-
this.
|
|
7664
|
+
if (inputs.getIsPinching()) return;
|
|
7665
|
+
this.inputs.updateFromEvent(info);
|
|
7702
7666
|
const { isPen } = info;
|
|
7703
7667
|
const { isPenMode } = instanceState;
|
|
7704
7668
|
switch (info.name) {
|
|
7705
7669
|
case "pointer_down": {
|
|
7706
7670
|
if (isPenMode && !isPen) return;
|
|
7707
|
-
if (!this.inputs.
|
|
7671
|
+
if (!this.inputs.getIsPanning()) {
|
|
7708
7672
|
this._longPressTimeout = this.timers.setTimeout(() => {
|
|
7709
7673
|
const vsb = this.getViewportScreenBounds();
|
|
7710
7674
|
this.dispatch({
|
|
@@ -7713,7 +7677,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7713
7677
|
// viewport bounds, and will be again when this event is handled...
|
|
7714
7678
|
// so we need to counter-adjust from the stored value so that the
|
|
7715
7679
|
// new value is set correctly.
|
|
7716
|
-
point: this.inputs.
|
|
7680
|
+
point: this.inputs.getOriginScreenPoint().clone().addXY(vsb.x, vsb.y),
|
|
7717
7681
|
name: "long_press"
|
|
7718
7682
|
});
|
|
7719
7683
|
}, this.options.longPressDurationMs);
|
|
@@ -7721,21 +7685,21 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7721
7685
|
this._selectedShapeIdsAtPointerDown = this.getSelectedShapeIds();
|
|
7722
7686
|
if (info.button === LEFT_MOUSE_BUTTON) this.capturedPointerId = info.pointerId;
|
|
7723
7687
|
inputs.buttons.add(info.button);
|
|
7724
|
-
inputs.
|
|
7725
|
-
inputs.
|
|
7688
|
+
inputs.setIsPointing(true);
|
|
7689
|
+
inputs.setIsDragging(false);
|
|
7726
7690
|
if (!isPenMode && isPen) this.updateInstanceState({ isPenMode: true });
|
|
7727
7691
|
if (info.button === STYLUS_ERASER_BUTTON) {
|
|
7728
7692
|
this._restoreToolId = this.getCurrentToolId();
|
|
7729
7693
|
this.complete();
|
|
7730
7694
|
this.setCurrentTool("eraser");
|
|
7731
7695
|
} else if (info.button === MIDDLE_MOUSE_BUTTON) {
|
|
7732
|
-
if (!this.inputs.
|
|
7696
|
+
if (!this.inputs.getIsPanning()) {
|
|
7733
7697
|
this._prevCursor = this.getInstanceState().cursor.type;
|
|
7734
7698
|
}
|
|
7735
|
-
this.inputs.
|
|
7699
|
+
this.inputs.setIsPanning(true);
|
|
7736
7700
|
clearTimeout(this._longPressTimeout);
|
|
7737
7701
|
}
|
|
7738
|
-
if (this.inputs.
|
|
7702
|
+
if (this.inputs.getIsPanning()) {
|
|
7739
7703
|
this.stopCameraAnimation();
|
|
7740
7704
|
this.setCursor({ type: "grabbing", rotation: 0 });
|
|
7741
7705
|
return this;
|
|
@@ -7745,8 +7709,9 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7745
7709
|
case "pointer_move": {
|
|
7746
7710
|
if (!isPen && isPenMode) return;
|
|
7747
7711
|
const { x: cx, y: cy, z: cz } = unsafe__withoutCapture(() => this.getCamera());
|
|
7748
|
-
if (this.inputs.
|
|
7749
|
-
const
|
|
7712
|
+
if (this.inputs.getIsPanning() && this.inputs.getIsPointing()) {
|
|
7713
|
+
const currentScreenPoint = this.inputs.getCurrentScreenPoint();
|
|
7714
|
+
const previousScreenPoint = this.inputs.getPreviousScreenPoint();
|
|
7750
7715
|
const offset = Vec.Sub(currentScreenPoint, previousScreenPoint);
|
|
7751
7716
|
this.setCamera(new Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
|
|
7752
7717
|
immediate: true
|
|
@@ -7754,15 +7719,15 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7754
7719
|
this.maybeTrackPerformance("Panning");
|
|
7755
7720
|
return;
|
|
7756
7721
|
}
|
|
7757
|
-
if (inputs.
|
|
7758
|
-
inputs.
|
|
7722
|
+
if (inputs.getIsPointing() && !inputs.getIsDragging() && Vec.Dist2(inputs.getOriginPagePoint(), inputs.getCurrentPagePoint()) * this.getZoomLevel() > (instanceState.isCoarsePointer ? this.options.coarseDragDistanceSquared : this.options.dragDistanceSquared) / cz) {
|
|
7723
|
+
inputs.setIsDragging(true);
|
|
7759
7724
|
clearTimeout(this._longPressTimeout);
|
|
7760
7725
|
}
|
|
7761
7726
|
break;
|
|
7762
7727
|
}
|
|
7763
7728
|
case "pointer_up": {
|
|
7764
|
-
inputs.
|
|
7765
|
-
inputs.
|
|
7729
|
+
inputs.setIsDragging(false);
|
|
7730
|
+
inputs.setIsPointing(false);
|
|
7766
7731
|
clearTimeout(this._longPressTimeout);
|
|
7767
7732
|
inputs.buttons.delete(info.button);
|
|
7768
7733
|
if (instanceState.isPenMode && !isPen) return;
|
|
@@ -7770,12 +7735,12 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7770
7735
|
this.capturedPointerId = null;
|
|
7771
7736
|
info.button = 0;
|
|
7772
7737
|
}
|
|
7773
|
-
if (inputs.
|
|
7738
|
+
if (inputs.getIsPanning()) {
|
|
7774
7739
|
if (!inputs.keys.has("Space")) {
|
|
7775
|
-
inputs.
|
|
7776
|
-
inputs.
|
|
7740
|
+
inputs.setIsPanning(false);
|
|
7741
|
+
inputs.setIsSpacebarPanning(false);
|
|
7777
7742
|
}
|
|
7778
|
-
const slideDirection = this.inputs.
|
|
7743
|
+
const slideDirection = this.inputs.getPointerVelocity();
|
|
7779
7744
|
const slideSpeed = Math.min(2, slideDirection.len());
|
|
7780
7745
|
switch (info.button) {
|
|
7781
7746
|
case LEFT_MOUSE_BUTTON: {
|
|
@@ -7812,51 +7777,58 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7812
7777
|
switch (info.name) {
|
|
7813
7778
|
case "key_down": {
|
|
7814
7779
|
inputs.keys.add(info.code);
|
|
7815
|
-
if (
|
|
7816
|
-
if (!
|
|
7817
|
-
this.
|
|
7818
|
-
|
|
7819
|
-
this.inputs.isPanning = true;
|
|
7820
|
-
this.inputs.isSpacebarPanning = true;
|
|
7821
|
-
clearTimeout(this._longPressTimeout);
|
|
7822
|
-
this.setCursor({ type: this.inputs.isPointing ? "grabbing" : "grab", rotation: 0 });
|
|
7823
|
-
}
|
|
7824
|
-
if (this.inputs.isSpacebarPanning) {
|
|
7825
|
-
let offset;
|
|
7826
|
-
switch (info.code) {
|
|
7827
|
-
case "ArrowUp": {
|
|
7828
|
-
offset = new Vec(0, -1);
|
|
7829
|
-
break;
|
|
7830
|
-
}
|
|
7831
|
-
case "ArrowRight": {
|
|
7832
|
-
offset = new Vec(1, 0);
|
|
7833
|
-
break;
|
|
7780
|
+
if (this.options.spacebarPanning) {
|
|
7781
|
+
if (info.code === "Space" && !info.ctrlKey) {
|
|
7782
|
+
if (!this.inputs.getIsPanning()) {
|
|
7783
|
+
this._prevCursor = instanceState.cursor.type;
|
|
7834
7784
|
}
|
|
7835
|
-
|
|
7836
|
-
|
|
7837
|
-
|
|
7785
|
+
this.inputs.setIsPanning(true);
|
|
7786
|
+
this.inputs.setIsSpacebarPanning(true);
|
|
7787
|
+
clearTimeout(this._longPressTimeout);
|
|
7788
|
+
this.setCursor({
|
|
7789
|
+
type: this.inputs.getIsPointing() ? "grabbing" : "grab",
|
|
7790
|
+
rotation: 0
|
|
7791
|
+
});
|
|
7792
|
+
}
|
|
7793
|
+
if (this.inputs.getIsSpacebarPanning()) {
|
|
7794
|
+
let offset;
|
|
7795
|
+
switch (info.code) {
|
|
7796
|
+
case "ArrowUp": {
|
|
7797
|
+
offset = new Vec(0, -1);
|
|
7798
|
+
break;
|
|
7799
|
+
}
|
|
7800
|
+
case "ArrowRight": {
|
|
7801
|
+
offset = new Vec(1, 0);
|
|
7802
|
+
break;
|
|
7803
|
+
}
|
|
7804
|
+
case "ArrowDown": {
|
|
7805
|
+
offset = new Vec(0, 1);
|
|
7806
|
+
break;
|
|
7807
|
+
}
|
|
7808
|
+
case "ArrowLeft": {
|
|
7809
|
+
offset = new Vec(-1, 0);
|
|
7810
|
+
break;
|
|
7811
|
+
}
|
|
7838
7812
|
}
|
|
7839
|
-
|
|
7840
|
-
|
|
7841
|
-
|
|
7813
|
+
if (offset) {
|
|
7814
|
+
const bounds = this.getViewportPageBounds();
|
|
7815
|
+
const next = bounds.clone().translate(offset.mulV({ x: bounds.w, y: bounds.h }));
|
|
7816
|
+
this._animateToViewport(next, { animation: { duration: 320 } });
|
|
7842
7817
|
}
|
|
7843
7818
|
}
|
|
7844
|
-
if (offset) {
|
|
7845
|
-
const bounds = this.getViewportPageBounds();
|
|
7846
|
-
const next = bounds.clone().translate(offset.mulV({ x: bounds.w, y: bounds.h }));
|
|
7847
|
-
this._animateToViewport(next, { animation: { duration: 320 } });
|
|
7848
|
-
}
|
|
7849
7819
|
}
|
|
7850
7820
|
break;
|
|
7851
7821
|
}
|
|
7852
7822
|
case "key_up": {
|
|
7853
7823
|
inputs.keys.delete(info.code);
|
|
7854
|
-
if (
|
|
7855
|
-
if (
|
|
7856
|
-
|
|
7857
|
-
|
|
7858
|
-
|
|
7859
|
-
|
|
7824
|
+
if (this.options.spacebarPanning) {
|
|
7825
|
+
if (info.code === "Space") {
|
|
7826
|
+
if (this.inputs.buttons.has(MIDDLE_MOUSE_BUTTON)) {
|
|
7827
|
+
} else {
|
|
7828
|
+
this.inputs.setIsPanning(false);
|
|
7829
|
+
this.inputs.setIsSpacebarPanning(false);
|
|
7830
|
+
this.setCursor({ type: this._prevCursor, rotation: 0 });
|
|
7831
|
+
}
|
|
7860
7832
|
}
|
|
7861
7833
|
}
|
|
7862
7834
|
break;
|
|
@@ -7909,8 +7881,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7909
7881
|
}
|
|
7910
7882
|
_init = __decoratorStart(_a);
|
|
7911
7883
|
__decorateElement(_init, 1, "getIsShapeHiddenCache", _getIsShapeHiddenCache_dec, Editor);
|
|
7912
|
-
__decorateElement(_init, 1, "
|
|
7913
|
-
__decorateElement(_init, 1, "
|
|
7884
|
+
__decorateElement(_init, 1, "canUndo", _canUndo_dec, Editor);
|
|
7885
|
+
__decorateElement(_init, 1, "canRedo", _canRedo_dec, Editor);
|
|
7914
7886
|
__decorateElement(_init, 1, "getPath", _getPath_dec, Editor);
|
|
7915
7887
|
__decorateElement(_init, 1, "getCurrentTool", _getCurrentTool_dec, Editor);
|
|
7916
7888
|
__decorateElement(_init, 1, "getCurrentToolId", _getCurrentToolId_dec, Editor);
|