@tldraw/editor 4.3.0-canary.e52fa5385f86 → 4.3.0-canary.ea88b223b83a
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 +428 -120
- 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/components/default-components/DefaultCanvas.js +3 -3
- package/dist-cjs/lib/components/default-components/DefaultCanvas.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 +268 -274
- 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/shapes/group/DashedOutlineBox.js +1 -1
- package/dist-cjs/lib/editor/shapes/group/DashedOutlineBox.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/hooks/useZoomCss.js +4 -8
- package/dist-cjs/lib/hooks/useZoomCss.js.map +2 -2
- package/dist-cjs/lib/options.js +6 -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 +428 -120
- 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/components/default-components/DefaultCanvas.mjs +3 -3
- package/dist-esm/lib/components/default-components/DefaultCanvas.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 +269 -277
- 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/shapes/group/DashedOutlineBox.mjs +1 -1
- package/dist-esm/lib/editor/shapes/group/DashedOutlineBox.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/hooks/useZoomCss.mjs +4 -8
- package/dist-esm/lib/hooks/useZoomCss.mjs.map +2 -2
- package/dist-esm/lib/options.mjs +6 -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 +14 -12
- 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/components/default-components/DefaultCanvas.tsx +3 -3
- 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 +349 -320
- 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/shapes/group/DashedOutlineBox.tsx +1 -1
- 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/hooks/useZoomCss.ts +3 -8
- package/src/lib/options.ts +32 -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
|
@@ -104,7 +104,6 @@ var import_assets = require("../utils/assets");
|
|
|
104
104
|
var import_debug_flags = require("../utils/debug-flags");
|
|
105
105
|
var import_deepLinks = require("../utils/deepLinks");
|
|
106
106
|
var import_getIncrementedName = require("../utils/getIncrementedName");
|
|
107
|
-
var import_keyboard = require("../utils/keyboard");
|
|
108
107
|
var import_reorderShapes = require("../utils/reorderShapes");
|
|
109
108
|
var import_rotation = require("../utils/rotation");
|
|
110
109
|
var import_bindingsIndex = require("./derivations/bindingsIndex");
|
|
@@ -116,14 +115,15 @@ var import_EdgeScrollManager = require("./managers/EdgeScrollManager/EdgeScrollM
|
|
|
116
115
|
var import_FocusManager = require("./managers/FocusManager/FocusManager");
|
|
117
116
|
var import_FontManager = require("./managers/FontManager/FontManager");
|
|
118
117
|
var import_HistoryManager = require("./managers/HistoryManager/HistoryManager");
|
|
118
|
+
var import_InputsManager = require("./managers/InputsManager/InputsManager");
|
|
119
119
|
var import_ScribbleManager = require("./managers/ScribbleManager/ScribbleManager");
|
|
120
120
|
var import_SnapManager = require("./managers/SnapManager/SnapManager");
|
|
121
121
|
var import_TextManager = require("./managers/TextManager/TextManager");
|
|
122
122
|
var import_TickManager = require("./managers/TickManager/TickManager");
|
|
123
123
|
var import_UserPreferencesManager = require("./managers/UserPreferencesManager/UserPreferencesManager");
|
|
124
124
|
var import_RootState = require("./tools/RootState");
|
|
125
|
-
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, _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,
|
|
126
|
-
class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_dec = [import_state.computed],
|
|
125
|
+
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;
|
|
126
|
+
class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_dec = [import_state.computed], _canUndo_dec = [import_state.computed], _canRedo_dec = [import_state.computed], _getPath_dec = [import_state.computed], _getCurrentTool_dec = [import_state.computed], _getCurrentToolId_dec = [import_state.computed], _getDocumentSettings_dec = [import_state.computed], _getInstanceState_dec = [import_state.computed], _getPageStates_dec = [import_state.computed], __getPageStatesQuery_dec = [import_state.computed], _getCurrentPageState_dec = [import_state.computed], __getCurrentPageStateId_dec = [import_state.computed], _getSelectedShapeIds_dec = [import_state.computed], _getSelectedShapes_dec = [import_state.computed], _getCurrentPageShapesInReadingOrder_dec = [import_state.computed], _getOnlySelectedShapeId_dec = [import_state.computed], _getOnlySelectedShape_dec = [import_state.computed], _getSelectionPageBounds_dec = [import_state.computed], _getSelectionRotation_dec = [import_state.computed], _getSelectionRotatedPageBounds_dec = [import_state.computed], _getSelectionRotatedScreenBounds_dec = [import_state.computed], _getFocusedGroupId_dec = [import_state.computed], _getFocusedGroup_dec = [import_state.computed], _getEditingShapeId_dec = [import_state.computed], _getEditingShape_dec = [import_state.computed], _getRichTextEditor_dec = [import_state.computed], _getHoveredShapeId_dec = [import_state.computed], _getHoveredShape_dec = [import_state.computed], _getHintingShapeIds_dec = [import_state.computed], _getHintingShape_dec = [import_state.computed], _getErasingShapeIds_dec = [import_state.computed], _getErasingShapes_dec = [import_state.computed], __unsafe_getCameraId_dec = [import_state.computed], _getCamera_dec = [import_state.computed], _getViewportPageBoundsForFollowing_dec = [import_state.computed], _getCameraForFollowing_dec = [import_state.computed], _getZoomLevel_dec = [import_state.computed], _getDebouncedZoomLevel_dec = [import_state.computed], __getAboveDebouncedZoomThreshold_dec = [import_state.computed], _getEfficientZoomLevel_dec = [import_state.computed], _getViewportScreenBounds_dec = [import_state.computed], _getViewportScreenCenter_dec = [import_state.computed], _getViewportPageBounds_dec = [import_state.computed], __getCollaboratorsQuery_dec = [import_state.computed], _getCollaborators_dec = [import_state.computed], _getCollaboratorsOnCurrentPage_dec = [import_state.computed], _getRenderingShapes_dec = [import_state.computed], __getAllPagesQuery_dec = [import_state.computed], _getPages_dec = [import_state.computed], _getCurrentPageId_dec = [import_state.computed], _getCurrentPageShapeIdsSorted_dec = [import_state.computed], __getAllAssetsQuery_dec = [import_state.computed], __getShapeHandlesCache_dec = [import_state.computed], __getShapePageTransformCache_dec = [import_state.computed], __getShapePageBoundsCache_dec = [import_state.computed], __getShapeClipPathCache_dec = [import_state.computed], __getShapeMaskCache_dec = [import_state.computed], __getShapeMaskedPageBoundsCache_dec = [import_state.computed], _getNotVisibleShapes_dec = [import_state.computed], _getCulledShapes_dec = [import_state.computed], _getCurrentPageBounds_dec = [import_state.computed], _getCurrentPageShapes_dec = [import_state.computed], _getCurrentPageShapesSorted_dec = [import_state.computed], _getCurrentPageRenderingShapesSorted_dec = [import_state.computed], __getBindingsIndexCache_dec = [import_state.computed], __getSelectionSharedStyles_dec = [import_state.computed], _getSharedStyles_dec = [(0, import_state.computed)({ isEqual: (a, b) => a.equals(b) })], _getSharedOpacity_dec = [import_state.computed], _getIsFocused_dec = [import_state.computed], _getIsReadonly_dec = [import_state.computed], __setShiftKeyTimeout_dec = [import_utils.bind], __setAltKeyTimeout_dec = [import_utils.bind], __setCtrlKeyTimeout_dec = [import_utils.bind], __setMetaKeyTimeout_dec = [import_utils.bind], _a) {
|
|
127
127
|
constructor({
|
|
128
128
|
store,
|
|
129
129
|
user,
|
|
@@ -159,7 +159,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
159
159
|
*/
|
|
160
160
|
__publicField(this, "root");
|
|
161
161
|
/**
|
|
162
|
-
* A set of functions to call when the
|
|
162
|
+
* A set of functions to call when the editor is disposed.
|
|
163
163
|
*
|
|
164
164
|
* @public
|
|
165
165
|
*/
|
|
@@ -170,10 +170,19 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
170
170
|
* @public
|
|
171
171
|
*/
|
|
172
172
|
__publicField(this, "isDisposed", false);
|
|
173
|
-
/**
|
|
173
|
+
/**
|
|
174
|
+
* A manager for the editor's tick events.
|
|
175
|
+
*
|
|
176
|
+
* @internal */
|
|
174
177
|
__publicField(this, "_tickManager");
|
|
175
178
|
/**
|
|
176
|
-
* A manager for the
|
|
179
|
+
* A manager for the editor's input state.
|
|
180
|
+
*
|
|
181
|
+
* @public
|
|
182
|
+
*/
|
|
183
|
+
__publicField(this, "inputs");
|
|
184
|
+
/**
|
|
185
|
+
* A manager for the editor's snapping feature.
|
|
177
186
|
*
|
|
178
187
|
* @public
|
|
179
188
|
*/
|
|
@@ -255,7 +264,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
255
264
|
__publicField(this, "bindingUtils");
|
|
256
265
|
/* --------------------- History -------------------- */
|
|
257
266
|
/**
|
|
258
|
-
* A manager for the
|
|
267
|
+
* A manager for the editor's history.
|
|
259
268
|
*
|
|
260
269
|
* @readonly
|
|
261
270
|
*/
|
|
@@ -270,6 +279,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
270
279
|
// Rich text editor
|
|
271
280
|
__publicField(this, "_currentRichTextEditor", (0, import_state.atom)("rich text editor", null));
|
|
272
281
|
__publicField(this, "_textOptions");
|
|
282
|
+
__publicField(this, "_debouncedZoomLevel", (0, import_state.atom)("debounced zoom level", 1));
|
|
273
283
|
__publicField(this, "_cameraOptions", (0, import_state.atom)("camera options", import_constants.DEFAULT_CAMERA_OPTIONS));
|
|
274
284
|
/** @internal */
|
|
275
285
|
__publicField(this, "_viewportAnimation", null);
|
|
@@ -320,54 +330,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
320
330
|
tldraw: null,
|
|
321
331
|
excalidraw: null
|
|
322
332
|
});
|
|
323
|
-
/* --------------------- Events --------------------- */
|
|
324
|
-
/**
|
|
325
|
-
* The app's current input state.
|
|
326
|
-
*
|
|
327
|
-
* @public
|
|
328
|
-
*/
|
|
329
|
-
__publicField(this, "inputs", {
|
|
330
|
-
/** The most recent pointer down's position in the current page space. */
|
|
331
|
-
originPagePoint: new import_Vec.Vec(),
|
|
332
|
-
/** The most recent pointer down's position in screen space. */
|
|
333
|
-
originScreenPoint: new import_Vec.Vec(),
|
|
334
|
-
/** The previous pointer position in the current page space. */
|
|
335
|
-
previousPagePoint: new import_Vec.Vec(),
|
|
336
|
-
/** The previous pointer position in screen space. */
|
|
337
|
-
previousScreenPoint: new import_Vec.Vec(),
|
|
338
|
-
/** The most recent pointer position in the current page space. */
|
|
339
|
-
currentPagePoint: new import_Vec.Vec(),
|
|
340
|
-
/** The most recent pointer position in screen space. */
|
|
341
|
-
currentScreenPoint: new import_Vec.Vec(),
|
|
342
|
-
/** A set containing the currently pressed keys. */
|
|
343
|
-
keys: /* @__PURE__ */ new Set(),
|
|
344
|
-
/** A set containing the currently pressed buttons. */
|
|
345
|
-
buttons: /* @__PURE__ */ new Set(),
|
|
346
|
-
/** Whether the input is from a pe. */
|
|
347
|
-
isPen: false,
|
|
348
|
-
/** Whether the shift key is currently pressed. */
|
|
349
|
-
shiftKey: false,
|
|
350
|
-
/** Whether the meta key is currently pressed. */
|
|
351
|
-
metaKey: false,
|
|
352
|
-
/** Whether the control or command key is currently pressed. */
|
|
353
|
-
ctrlKey: false,
|
|
354
|
-
/** Whether the alt or option key is currently pressed. */
|
|
355
|
-
altKey: false,
|
|
356
|
-
/** Whether the user is dragging. */
|
|
357
|
-
isDragging: false,
|
|
358
|
-
/** Whether the user is pointing. */
|
|
359
|
-
isPointing: false,
|
|
360
|
-
/** Whether the user is pinching. */
|
|
361
|
-
isPinching: false,
|
|
362
|
-
/** Whether the user is editing. */
|
|
363
|
-
isEditing: false,
|
|
364
|
-
/** Whether the user is panning. */
|
|
365
|
-
isPanning: false,
|
|
366
|
-
/** Whether the user is spacebar panning. */
|
|
367
|
-
isSpacebarPanning: false,
|
|
368
|
-
/** Velocity of mouse pointer, in pixels per millisecond */
|
|
369
|
-
pointerVelocity: new import_Vec.Vec()
|
|
370
|
-
});
|
|
371
333
|
/**
|
|
372
334
|
* A manager for recording multiple click events.
|
|
373
335
|
*
|
|
@@ -391,8 +353,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
391
353
|
/** @internal */
|
|
392
354
|
__publicField(this, "_restoreToolId", "select");
|
|
393
355
|
/** @internal */
|
|
394
|
-
__publicField(this, "_pinchStart", 1);
|
|
395
|
-
/** @internal */
|
|
396
356
|
__publicField(this, "_didPinch", false);
|
|
397
357
|
/** @internal */
|
|
398
358
|
__publicField(this, "_selectedShapeIdsAtPointerDown", []);
|
|
@@ -428,6 +388,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
428
388
|
this.disposables.add(() => this.textMeasure.dispose());
|
|
429
389
|
this.fonts = new import_FontManager.FontManager(this, fontAssetUrls);
|
|
430
390
|
this._tickManager = new import_TickManager.TickManager(this);
|
|
391
|
+
this.inputs = new import_InputsManager.InputsManager(this);
|
|
431
392
|
class NewRoot extends import_RootState.RootState {
|
|
432
393
|
static initial = initialState ?? "";
|
|
433
394
|
}
|
|
@@ -894,9 +855,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
894
855
|
this.history.undo();
|
|
895
856
|
return this;
|
|
896
857
|
}
|
|
897
|
-
|
|
858
|
+
canUndo() {
|
|
898
859
|
return this.history.getNumUndos() > 0;
|
|
899
860
|
}
|
|
861
|
+
getCanUndo() {
|
|
862
|
+
return this.canUndo();
|
|
863
|
+
}
|
|
900
864
|
/**
|
|
901
865
|
* Redo to the next mark.
|
|
902
866
|
*
|
|
@@ -913,13 +877,16 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
913
877
|
this.history.redo();
|
|
914
878
|
return this;
|
|
915
879
|
}
|
|
880
|
+
canRedo() {
|
|
881
|
+
return this.history.getNumRedos() > 0;
|
|
882
|
+
}
|
|
883
|
+
getCanRedo() {
|
|
884
|
+
return this.canRedo();
|
|
885
|
+
}
|
|
916
886
|
clearHistory() {
|
|
917
887
|
this.history.clear();
|
|
918
888
|
return this;
|
|
919
889
|
}
|
|
920
|
-
getCanRedo() {
|
|
921
|
-
return this.history.getNumRedos() > 0;
|
|
922
|
-
}
|
|
923
890
|
/**
|
|
924
891
|
* Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
|
|
925
892
|
* any redos. You typically want to do this just before a user interaction begins or is handled.
|
|
@@ -1074,7 +1041,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1074
1041
|
}),
|
|
1075
1042
|
selectionCount: this.getSelectedShapes().length,
|
|
1076
1043
|
editingShape: editingShapeId ? this.getShape(editingShapeId) : void 0,
|
|
1077
|
-
inputs: this.inputs,
|
|
1044
|
+
inputs: this.inputs.toJson(),
|
|
1078
1045
|
pageState: this.getCurrentPageState(),
|
|
1079
1046
|
instanceState: this.getInstanceState(),
|
|
1080
1047
|
collaboratorCount: this.getCollaboratorsOnCurrentPage().length
|
|
@@ -1095,7 +1062,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1095
1062
|
* we're in a transaction that's about to be rolled back due to the same error we're currently
|
|
1096
1063
|
* reporting.
|
|
1097
1064
|
*
|
|
1098
|
-
* Instead, to listen to changes to this value, you need to listen to
|
|
1065
|
+
* Instead, to listen to changes to this value, you need to listen to editor's `crash` event.
|
|
1099
1066
|
*
|
|
1100
1067
|
* @internal
|
|
1101
1068
|
*/
|
|
@@ -1746,6 +1713,28 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1746
1713
|
const editingShapeId = this.getEditingShapeId();
|
|
1747
1714
|
return editingShapeId ? this.getShape(editingShapeId) : void 0;
|
|
1748
1715
|
}
|
|
1716
|
+
/**
|
|
1717
|
+
* Whether the shape can be edited.
|
|
1718
|
+
*
|
|
1719
|
+
* @param shape - The shape (or shape id) to check if it can be edited.
|
|
1720
|
+
* @param info - The info about the edit start.
|
|
1721
|
+
*
|
|
1722
|
+
* @public
|
|
1723
|
+
* @returns true if the shape can be edited, false otherwise.
|
|
1724
|
+
*/
|
|
1725
|
+
canEditShape(shape, info) {
|
|
1726
|
+
const id = typeof shape === "string" ? shape : shape?.id ?? null;
|
|
1727
|
+
if (!id) return false;
|
|
1728
|
+
if (id === this.getEditingShapeId()) return false;
|
|
1729
|
+
const _shape = this.getShape(id);
|
|
1730
|
+
if (!_shape) return false;
|
|
1731
|
+
const util = this.getShapeUtil(_shape);
|
|
1732
|
+
const _info = info ?? { type: "unknown" };
|
|
1733
|
+
if (!util.canEdit(_shape, _info)) return false;
|
|
1734
|
+
if (this.getIsReadonly() && !util.canEditInReadonly(_shape)) return false;
|
|
1735
|
+
if (this.isShapeOrAncestorLocked(_shape) && !util.canEditWhileLocked(_shape)) return false;
|
|
1736
|
+
return true;
|
|
1737
|
+
}
|
|
1749
1738
|
/**
|
|
1750
1739
|
* Set the current editing shape.
|
|
1751
1740
|
*
|
|
@@ -1761,42 +1750,42 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1761
1750
|
*/
|
|
1762
1751
|
setEditingShape(shape) {
|
|
1763
1752
|
const id = typeof shape === "string" ? shape : shape?.id ?? null;
|
|
1764
|
-
|
|
1765
|
-
const prevEditingShapeId = this.getEditingShapeId();
|
|
1766
|
-
if (id !== prevEditingShapeId) {
|
|
1767
|
-
if (id) {
|
|
1768
|
-
const shape2 = this.getShape(id);
|
|
1769
|
-
if (shape2 && this.getShapeUtil(shape2).canEdit(shape2)) {
|
|
1770
|
-
this.run(
|
|
1771
|
-
() => {
|
|
1772
|
-
this._updateCurrentPageState({ editingShapeId: id });
|
|
1773
|
-
if (prevEditingShapeId) {
|
|
1774
|
-
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1775
|
-
if (prevEditingShape) {
|
|
1776
|
-
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1777
|
-
}
|
|
1778
|
-
}
|
|
1779
|
-
this.getShapeUtil(shape2).onEditStart?.(shape2);
|
|
1780
|
-
},
|
|
1781
|
-
{ history: "ignore" }
|
|
1782
|
-
);
|
|
1783
|
-
return this;
|
|
1784
|
-
}
|
|
1785
|
-
}
|
|
1753
|
+
if (!id) {
|
|
1786
1754
|
this.run(
|
|
1787
1755
|
() => {
|
|
1788
|
-
this.
|
|
1789
|
-
this._currentRichTextEditor.set(null);
|
|
1756
|
+
const prevEditingShapeId = this.getEditingShapeId();
|
|
1790
1757
|
if (prevEditingShapeId) {
|
|
1791
1758
|
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1792
1759
|
if (prevEditingShape) {
|
|
1793
1760
|
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1794
1761
|
}
|
|
1795
1762
|
}
|
|
1763
|
+
this._updateCurrentPageState({ editingShapeId: null });
|
|
1764
|
+
this._currentRichTextEditor.set(null);
|
|
1796
1765
|
},
|
|
1797
1766
|
{ history: "ignore" }
|
|
1798
1767
|
);
|
|
1768
|
+
return this;
|
|
1799
1769
|
}
|
|
1770
|
+
if (!this.canEditShape(id)) return this;
|
|
1771
|
+
this.run(
|
|
1772
|
+
() => {
|
|
1773
|
+
const prevEditingShapeId = this.getEditingShapeId();
|
|
1774
|
+
if (prevEditingShapeId) {
|
|
1775
|
+
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1776
|
+
if (prevEditingShape) {
|
|
1777
|
+
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1778
|
+
}
|
|
1779
|
+
}
|
|
1780
|
+
this._updateCurrentPageState({ editingShapeId: null });
|
|
1781
|
+
this._currentRichTextEditor.set(null);
|
|
1782
|
+
this.select(id);
|
|
1783
|
+
this._updateCurrentPageState({ editingShapeId: id });
|
|
1784
|
+
const nextEditingShape = this.getShape(id);
|
|
1785
|
+
this.getShapeUtil(nextEditingShape).onEditStart?.(nextEditingShape);
|
|
1786
|
+
},
|
|
1787
|
+
{ history: "ignore" }
|
|
1788
|
+
);
|
|
1800
1789
|
return this;
|
|
1801
1790
|
}
|
|
1802
1791
|
getRichTextEditor() {
|
|
@@ -1929,6 +1918,25 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1929
1918
|
getCroppingShapeId() {
|
|
1930
1919
|
return this.getCurrentPageState().croppingShapeId;
|
|
1931
1920
|
}
|
|
1921
|
+
/**
|
|
1922
|
+
* Whether the shape can be cropped.
|
|
1923
|
+
*
|
|
1924
|
+
* @param shape - The shape (or shape id) to check if it can be cropped.
|
|
1925
|
+
*
|
|
1926
|
+
* @public
|
|
1927
|
+
* @returns true if the shape can be cropped, false otherwise.
|
|
1928
|
+
*/
|
|
1929
|
+
canCropShape(shape) {
|
|
1930
|
+
if (!shape) return false;
|
|
1931
|
+
const id = typeof shape === "string" ? shape : shape?.id ?? null;
|
|
1932
|
+
if (!id) return false;
|
|
1933
|
+
const _shape = this.getShape(id);
|
|
1934
|
+
if (!_shape) return false;
|
|
1935
|
+
const util = this.getShapeUtil(_shape);
|
|
1936
|
+
if (!util.canCrop(_shape)) return false;
|
|
1937
|
+
if (this.isShapeOrAncestorLocked(_shape)) return false;
|
|
1938
|
+
return true;
|
|
1939
|
+
}
|
|
1932
1940
|
/**
|
|
1933
1941
|
* Set the current cropping shape.
|
|
1934
1942
|
*
|
|
@@ -1950,12 +1958,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1950
1958
|
() => {
|
|
1951
1959
|
if (!id) {
|
|
1952
1960
|
this.updateCurrentPageState({ croppingShapeId: null });
|
|
1953
|
-
} else {
|
|
1954
|
-
|
|
1955
|
-
const util = this.getShapeUtil(shape2);
|
|
1956
|
-
if (shape2 && util.canCrop(shape2)) {
|
|
1957
|
-
this.updateCurrentPageState({ croppingShapeId: id });
|
|
1958
|
-
}
|
|
1961
|
+
} else if (this.canCropShape(id)) {
|
|
1962
|
+
this.updateCurrentPageState({ croppingShapeId: id });
|
|
1959
1963
|
}
|
|
1960
1964
|
},
|
|
1961
1965
|
{ history: "ignore" }
|
|
@@ -2030,6 +2034,22 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2030
2034
|
getZoomLevel() {
|
|
2031
2035
|
return this.getCamera().z;
|
|
2032
2036
|
}
|
|
2037
|
+
getDebouncedZoomLevel() {
|
|
2038
|
+
if (this.options.debouncedZoom) {
|
|
2039
|
+
if (this.getCameraState() === "idle") {
|
|
2040
|
+
return this.getZoomLevel();
|
|
2041
|
+
} else {
|
|
2042
|
+
return this._debouncedZoomLevel.get();
|
|
2043
|
+
}
|
|
2044
|
+
}
|
|
2045
|
+
return this.getZoomLevel();
|
|
2046
|
+
}
|
|
2047
|
+
_getAboveDebouncedZoomThreshold() {
|
|
2048
|
+
return this.getCurrentPageShapeIds().size > this.options.debouncedZoomThreshold;
|
|
2049
|
+
}
|
|
2050
|
+
getEfficientZoomLevel() {
|
|
2051
|
+
return this._getAboveDebouncedZoomThreshold() ? this.getDebouncedZoomLevel() : this.getZoomLevel();
|
|
2052
|
+
}
|
|
2033
2053
|
/**
|
|
2034
2054
|
* Get the camera's initial or reset zoom level.
|
|
2035
2055
|
*
|
|
@@ -2275,7 +2295,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2275
2295
|
},
|
|
2276
2296
|
{ history: "ignore" }
|
|
2277
2297
|
);
|
|
2278
|
-
const
|
|
2298
|
+
const currentScreenPoint = this.inputs.getCurrentScreenPoint();
|
|
2299
|
+
const currentPagePoint = this.inputs.getCurrentPagePoint();
|
|
2279
2300
|
if (currentScreenPoint.x / z - x !== currentPagePoint.x || currentScreenPoint.y / z - y !== currentPagePoint.y) {
|
|
2280
2301
|
this.updatePointer({
|
|
2281
2302
|
immediate: opts?.immediate,
|
|
@@ -2410,7 +2431,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2410
2431
|
* ```ts
|
|
2411
2432
|
* editor.zoomIn()
|
|
2412
2433
|
* editor.zoomIn(editor.getViewportScreenCenter(), { animation: { duration: 200 } })
|
|
2413
|
-
* editor.zoomIn(editor.inputs.
|
|
2434
|
+
* editor.zoomIn(editor.inputs.getCurrentScreenPoint(), { animation: { duration: 200 } })
|
|
2414
2435
|
* ```
|
|
2415
2436
|
*
|
|
2416
2437
|
* @param point - The screen point to zoom in on. Defaults to the screen center
|
|
@@ -2451,7 +2472,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2451
2472
|
* ```ts
|
|
2452
2473
|
* editor.zoomOut()
|
|
2453
2474
|
* editor.zoomOut(editor.getViewportScreenCenter(), { animation: { duration: 120 } })
|
|
2454
|
-
* editor.zoomOut(editor.inputs.
|
|
2475
|
+
* editor.zoomOut(editor.inputs.getCurrentScreenPoint(), { animation: { duration: 120 } })
|
|
2455
2476
|
* ```
|
|
2456
2477
|
*
|
|
2457
2478
|
* @param point - The point to zoom out on. Defaults to the viewport screen center.
|
|
@@ -2503,10 +2524,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2503
2524
|
if (isLocked && !opts?.force) return this;
|
|
2504
2525
|
const selectionPageBounds = this.getSelectionPageBounds();
|
|
2505
2526
|
if (selectionPageBounds) {
|
|
2506
|
-
this.
|
|
2507
|
-
|
|
2508
|
-
|
|
2509
|
-
}
|
|
2527
|
+
const currentZoom = this.getZoomLevel();
|
|
2528
|
+
if (Math.abs(currentZoom - 1) < 0.01) {
|
|
2529
|
+
this.zoomToBounds(selectionPageBounds, opts);
|
|
2530
|
+
} else {
|
|
2531
|
+
this.zoomToBounds(selectionPageBounds, {
|
|
2532
|
+
targetZoom: 1,
|
|
2533
|
+
...opts
|
|
2534
|
+
});
|
|
2535
|
+
}
|
|
2510
2536
|
}
|
|
2511
2537
|
return this;
|
|
2512
2538
|
}
|
|
@@ -2546,7 +2572,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2546
2572
|
const cameraOptions = this._cameraOptions.__unsafe__getWithoutCapture();
|
|
2547
2573
|
if (cameraOptions.isLocked && !opts?.force) return this;
|
|
2548
2574
|
const viewportScreenBounds = this.getViewportScreenBounds();
|
|
2549
|
-
const inset = opts?.inset ?? Math.min(
|
|
2575
|
+
const inset = opts?.inset ?? Math.min(this.options.zoomToFitPadding, viewportScreenBounds.width * 0.28);
|
|
2550
2576
|
const baseZoom = this.getBaseZoom();
|
|
2551
2577
|
const zoomMin = cameraOptions.zoomSteps[0];
|
|
2552
2578
|
const zoomMax = (0, import_utils.last)(cameraOptions.zoomSteps);
|
|
@@ -2784,7 +2810,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2784
2810
|
this._setCamera(import_Vec.Vec.From({ ...this.getCamera() }));
|
|
2785
2811
|
}
|
|
2786
2812
|
}
|
|
2787
|
-
this._tickCameraState();
|
|
2788
2813
|
return this;
|
|
2789
2814
|
}
|
|
2790
2815
|
getViewportScreenBounds() {
|
|
@@ -3064,6 +3089,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3064
3089
|
this._cameraStateTimeoutRemaining = this.options.cameraMovingTimeoutMs;
|
|
3065
3090
|
if (this._cameraState.__unsafe__getWithoutCapture() !== "idle") return;
|
|
3066
3091
|
this._cameraState.set("moving");
|
|
3092
|
+
this._debouncedZoomLevel.set((0, import_state.unsafe__withoutCapture)(() => this.getCamera().z));
|
|
3067
3093
|
this.on("tick", this._decayCameraStateTimeout);
|
|
3068
3094
|
}
|
|
3069
3095
|
/**
|
|
@@ -5663,8 +5689,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
5663
5689
|
isAspectRatioLocked: options.isAspectRatioLocked
|
|
5664
5690
|
});
|
|
5665
5691
|
if (Math.sign(scale.x) * Math.sign(scale.y) < 0) {
|
|
5666
|
-
|
|
5667
|
-
rotation
|
|
5692
|
+
const parentRotation = this.getShapeParentTransform(id).rotation();
|
|
5693
|
+
const rotation = -options.initialShape.rotation - 2 * parentRotation;
|
|
5668
5694
|
this.updateShapes([{ id, type, rotation }]);
|
|
5669
5695
|
}
|
|
5670
5696
|
const preScaleShapePageCenter = import_Mat.Mat.applyToPoint(
|
|
@@ -5677,9 +5703,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
5677
5703
|
scale,
|
|
5678
5704
|
options.scaleAxisRotation
|
|
5679
5705
|
);
|
|
5680
|
-
const pageBounds = this.getShapePageBounds(id);
|
|
5681
5706
|
const pageTransform = this.getShapePageTransform(id);
|
|
5682
|
-
const
|
|
5707
|
+
const currentLocalBounds = this.getShapeGeometry(id).bounds;
|
|
5708
|
+
const currentPageCenter = import_Mat.Mat.applyToPoint(pageTransform, currentLocalBounds.center);
|
|
5683
5709
|
const shapePageTransformOrigin = pageTransform.point();
|
|
5684
5710
|
if (!currentPageCenter || !shapePageTransformOrigin) return this;
|
|
5685
5711
|
const pageDelta = import_Vec.Vec.Sub(postScaleShapePageCenter, currentPageCenter);
|
|
@@ -5965,7 +5991,11 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
5965
5991
|
)
|
|
5966
5992
|
);
|
|
5967
5993
|
const sortedShapeIds = shapesToGroup.sort(import_utils.sortByIndex).map((s) => s.id);
|
|
5968
|
-
const
|
|
5994
|
+
const childBounds = (0, import_utils.compact)(shapesToGroup.map((shape) => this.getShapePageBounds(shape)));
|
|
5995
|
+
const pageBounds = import_Box.Box.Common(childBounds);
|
|
5996
|
+
if (!pageBounds.isValid()) {
|
|
5997
|
+
throw Error(`Editor.groupShapes: group bounds are invalid (NaN).`);
|
|
5998
|
+
}
|
|
5969
5999
|
const { x, y } = pageBounds.point;
|
|
5970
6000
|
const parentId = this.findCommonAncestor(shapesToGroup) ?? this.getCurrentPageId();
|
|
5971
6001
|
if (this.getCurrentToolId() !== "select") return this;
|
|
@@ -6918,60 +6948,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
6918
6948
|
height
|
|
6919
6949
|
};
|
|
6920
6950
|
}
|
|
6921
|
-
|
|
6922
|
-
* Update the input points from a pointer, pinch, or wheel event.
|
|
6923
|
-
*
|
|
6924
|
-
* @param info - The event info.
|
|
6925
|
-
*/
|
|
6926
|
-
_updateInputsFromEvent(info) {
|
|
6927
|
-
const {
|
|
6928
|
-
pointerVelocity,
|
|
6929
|
-
previousScreenPoint,
|
|
6930
|
-
previousPagePoint,
|
|
6931
|
-
currentScreenPoint,
|
|
6932
|
-
currentPagePoint,
|
|
6933
|
-
originScreenPoint,
|
|
6934
|
-
originPagePoint
|
|
6935
|
-
} = this.inputs;
|
|
6936
|
-
const { screenBounds } = this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID);
|
|
6937
|
-
const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
|
|
6938
|
-
const sx = info.point.x - screenBounds.x;
|
|
6939
|
-
const sy = info.point.y - screenBounds.y;
|
|
6940
|
-
const sz = info.point.z ?? 0.5;
|
|
6941
|
-
previousScreenPoint.setTo(currentScreenPoint);
|
|
6942
|
-
previousPagePoint.setTo(currentPagePoint);
|
|
6943
|
-
currentScreenPoint.set(sx, sy);
|
|
6944
|
-
const nx = sx / cz - cx;
|
|
6945
|
-
const ny = sy / cz - cy;
|
|
6946
|
-
if (isFinite(nx) && isFinite(ny)) {
|
|
6947
|
-
currentPagePoint.set(nx, ny, sz);
|
|
6948
|
-
}
|
|
6949
|
-
this.inputs.isPen = info.type === "pointer" && info.isPen;
|
|
6950
|
-
if (info.name === "pointer_down" || this.inputs.isPinching) {
|
|
6951
|
-
pointerVelocity.set(0, 0);
|
|
6952
|
-
originScreenPoint.setTo(currentScreenPoint);
|
|
6953
|
-
originPagePoint.setTo(currentPagePoint);
|
|
6954
|
-
}
|
|
6955
|
-
this.run(
|
|
6956
|
-
() => {
|
|
6957
|
-
this.store.put([
|
|
6958
|
-
{
|
|
6959
|
-
id: import_tlschema.TLPOINTER_ID,
|
|
6960
|
-
typeName: "pointer",
|
|
6961
|
-
x: currentPagePoint.x,
|
|
6962
|
-
y: currentPagePoint.y,
|
|
6963
|
-
lastActivityTimestamp: (
|
|
6964
|
-
// If our pointer moved only because we're following some other user, then don't
|
|
6965
|
-
// update our last activity timestamp; otherwise, update it to the current timestamp.
|
|
6966
|
-
info.type === "pointer" && info.pointerId === import_constants.INTERNAL_POINTER_IDS.CAMERA_MOVE ? this.store.unsafeGetWithoutCapture(import_tlschema.TLPOINTER_ID)?.lastActivityTimestamp ?? this._tickManager.now : this._tickManager.now
|
|
6967
|
-
),
|
|
6968
|
-
meta: {}
|
|
6969
|
-
}
|
|
6970
|
-
]);
|
|
6971
|
-
},
|
|
6972
|
-
{ history: "ignore" }
|
|
6973
|
-
);
|
|
6974
|
-
}
|
|
6951
|
+
/* --------------------- Events --------------------- */
|
|
6975
6952
|
/**
|
|
6976
6953
|
* Dispatch a cancel event.
|
|
6977
6954
|
*
|
|
@@ -7036,18 +7013,19 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7036
7013
|
point: options?.point ?? // weird but true: what `inputs` calls screen-space is actually viewport space. so
|
|
7037
7014
|
// we need to convert back into true screen space first. we should fix this...
|
|
7038
7015
|
import_Vec.Vec.Add(
|
|
7039
|
-
this.inputs.
|
|
7016
|
+
this.inputs.getCurrentScreenPoint(),
|
|
7040
7017
|
this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID).screenBounds
|
|
7041
7018
|
),
|
|
7042
7019
|
pointerId: options?.pointerId ?? 0,
|
|
7043
7020
|
button: options?.button ?? 0,
|
|
7044
|
-
isPen: options?.isPen ?? this.inputs.
|
|
7045
|
-
shiftKey: options?.shiftKey ?? this.inputs.
|
|
7046
|
-
altKey: options?.altKey ?? this.inputs.
|
|
7047
|
-
ctrlKey: options?.ctrlKey ?? this.inputs.
|
|
7048
|
-
metaKey: options?.metaKey ?? this.inputs.
|
|
7049
|
-
accelKey:
|
|
7021
|
+
isPen: options?.isPen ?? this.inputs.getIsPen(),
|
|
7022
|
+
shiftKey: options?.shiftKey ?? this.inputs.getShiftKey(),
|
|
7023
|
+
altKey: options?.altKey ?? this.inputs.getAltKey(),
|
|
7024
|
+
ctrlKey: options?.ctrlKey ?? this.inputs.getCtrlKey(),
|
|
7025
|
+
metaKey: options?.metaKey ?? this.inputs.getMetaKey(),
|
|
7026
|
+
accelKey: false
|
|
7050
7027
|
};
|
|
7028
|
+
event.accelKey = options?.accelKey ?? this.inputs.getAccelKey();
|
|
7051
7029
|
if (options?.immediate) {
|
|
7052
7030
|
this._flushEventForTick(event);
|
|
7053
7031
|
} else {
|
|
@@ -7363,58 +7341,58 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7363
7341
|
this._clickManager.cancelDoubleClickTimeout();
|
|
7364
7342
|
}
|
|
7365
7343
|
_setShiftKeyTimeout() {
|
|
7366
|
-
this.inputs.
|
|
7344
|
+
this.inputs.setShiftKey(false);
|
|
7367
7345
|
this.dispatch({
|
|
7368
7346
|
type: "keyboard",
|
|
7369
7347
|
name: "key_up",
|
|
7370
7348
|
key: "Shift",
|
|
7371
|
-
shiftKey: this.inputs.
|
|
7372
|
-
ctrlKey: this.inputs.
|
|
7373
|
-
altKey: this.inputs.
|
|
7374
|
-
metaKey: this.inputs.
|
|
7375
|
-
accelKey:
|
|
7349
|
+
shiftKey: this.inputs.getShiftKey(),
|
|
7350
|
+
ctrlKey: this.inputs.getCtrlKey(),
|
|
7351
|
+
altKey: this.inputs.getAltKey(),
|
|
7352
|
+
metaKey: this.inputs.getMetaKey(),
|
|
7353
|
+
accelKey: this.inputs.getAccelKey(),
|
|
7376
7354
|
code: "ShiftLeft"
|
|
7377
7355
|
});
|
|
7378
7356
|
}
|
|
7379
7357
|
_setAltKeyTimeout() {
|
|
7380
|
-
this.inputs.
|
|
7358
|
+
this.inputs.setAltKey(false);
|
|
7381
7359
|
this.dispatch({
|
|
7382
7360
|
type: "keyboard",
|
|
7383
7361
|
name: "key_up",
|
|
7384
7362
|
key: "Alt",
|
|
7385
|
-
shiftKey: this.inputs.
|
|
7386
|
-
ctrlKey: this.inputs.
|
|
7387
|
-
altKey: this.inputs.
|
|
7388
|
-
metaKey: this.inputs.
|
|
7389
|
-
accelKey:
|
|
7363
|
+
shiftKey: this.inputs.getShiftKey(),
|
|
7364
|
+
ctrlKey: this.inputs.getCtrlKey(),
|
|
7365
|
+
altKey: this.inputs.getAltKey(),
|
|
7366
|
+
metaKey: this.inputs.getMetaKey(),
|
|
7367
|
+
accelKey: this.inputs.getAccelKey(),
|
|
7390
7368
|
code: "AltLeft"
|
|
7391
7369
|
});
|
|
7392
7370
|
}
|
|
7393
7371
|
_setCtrlKeyTimeout() {
|
|
7394
|
-
this.inputs.
|
|
7372
|
+
this.inputs.setCtrlKey(false);
|
|
7395
7373
|
this.dispatch({
|
|
7396
7374
|
type: "keyboard",
|
|
7397
7375
|
name: "key_up",
|
|
7398
7376
|
key: "Ctrl",
|
|
7399
|
-
shiftKey: this.inputs.
|
|
7400
|
-
ctrlKey: this.inputs.
|
|
7401
|
-
altKey: this.inputs.
|
|
7402
|
-
metaKey: this.inputs.
|
|
7403
|
-
accelKey:
|
|
7377
|
+
shiftKey: this.inputs.getShiftKey(),
|
|
7378
|
+
ctrlKey: this.inputs.getCtrlKey(),
|
|
7379
|
+
altKey: this.inputs.getAltKey(),
|
|
7380
|
+
metaKey: this.inputs.getMetaKey(),
|
|
7381
|
+
accelKey: this.inputs.getAccelKey(),
|
|
7404
7382
|
code: "ControlLeft"
|
|
7405
7383
|
});
|
|
7406
7384
|
}
|
|
7407
7385
|
_setMetaKeyTimeout() {
|
|
7408
|
-
this.inputs.
|
|
7386
|
+
this.inputs.setMetaKey(false);
|
|
7409
7387
|
this.dispatch({
|
|
7410
7388
|
type: "keyboard",
|
|
7411
7389
|
name: "key_up",
|
|
7412
7390
|
key: "Meta",
|
|
7413
|
-
shiftKey: this.inputs.
|
|
7414
|
-
ctrlKey: this.inputs.
|
|
7415
|
-
altKey: this.inputs.
|
|
7416
|
-
metaKey: this.inputs.
|
|
7417
|
-
accelKey:
|
|
7391
|
+
shiftKey: this.inputs.getShiftKey(),
|
|
7392
|
+
ctrlKey: this.inputs.getCtrlKey(),
|
|
7393
|
+
altKey: this.inputs.getAltKey(),
|
|
7394
|
+
metaKey: this.inputs.getMetaKey(),
|
|
7395
|
+
accelKey: this.inputs.getAccelKey(),
|
|
7418
7396
|
code: "MetaLeft"
|
|
7419
7397
|
});
|
|
7420
7398
|
}
|
|
@@ -7485,10 +7463,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7485
7463
|
const { type } = info;
|
|
7486
7464
|
if (info.type === "misc") {
|
|
7487
7465
|
if (info.name === "cancel" || info.name === "complete") {
|
|
7488
|
-
this.inputs.
|
|
7489
|
-
if (this.inputs.
|
|
7490
|
-
this.inputs.
|
|
7491
|
-
this.inputs.
|
|
7466
|
+
this.inputs.setIsDragging(false);
|
|
7467
|
+
if (this.inputs.getIsPanning()) {
|
|
7468
|
+
this.inputs.setIsPanning(false);
|
|
7469
|
+
this.inputs.setIsSpacebarPanning(false);
|
|
7492
7470
|
this.setCursor({ type: this._prevCursor, rotation: 0 });
|
|
7493
7471
|
}
|
|
7494
7472
|
}
|
|
@@ -7499,34 +7477,33 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7499
7477
|
if (info.shiftKey) {
|
|
7500
7478
|
clearTimeout(this._shiftKeyTimeout);
|
|
7501
7479
|
this._shiftKeyTimeout = -1;
|
|
7502
|
-
inputs.
|
|
7503
|
-
} else if (!info.shiftKey && inputs.
|
|
7480
|
+
inputs.setShiftKey(true);
|
|
7481
|
+
} else if (!info.shiftKey && inputs.getShiftKey() && this._shiftKeyTimeout === -1) {
|
|
7504
7482
|
this._shiftKeyTimeout = this.timers.setTimeout(this._setShiftKeyTimeout, 150);
|
|
7505
7483
|
}
|
|
7506
7484
|
if (info.altKey) {
|
|
7507
7485
|
clearTimeout(this._altKeyTimeout);
|
|
7508
7486
|
this._altKeyTimeout = -1;
|
|
7509
|
-
inputs.
|
|
7510
|
-
} else if (!info.altKey && inputs.
|
|
7487
|
+
inputs.setAltKey(true);
|
|
7488
|
+
} else if (!info.altKey && inputs.getAltKey() && this._altKeyTimeout === -1) {
|
|
7511
7489
|
this._altKeyTimeout = this.timers.setTimeout(this._setAltKeyTimeout, 150);
|
|
7512
7490
|
}
|
|
7513
7491
|
if (info.ctrlKey) {
|
|
7514
7492
|
clearTimeout(this._ctrlKeyTimeout);
|
|
7515
7493
|
this._ctrlKeyTimeout = -1;
|
|
7516
|
-
inputs.
|
|
7517
|
-
} else if (!info.ctrlKey && inputs.
|
|
7494
|
+
inputs.setCtrlKey(true);
|
|
7495
|
+
} else if (!info.ctrlKey && inputs.getCtrlKey() && this._ctrlKeyTimeout === -1) {
|
|
7518
7496
|
this._ctrlKeyTimeout = this.timers.setTimeout(this._setCtrlKeyTimeout, 150);
|
|
7519
7497
|
}
|
|
7520
7498
|
if (info.metaKey) {
|
|
7521
7499
|
clearTimeout(this._metaKeyTimeout);
|
|
7522
7500
|
this._metaKeyTimeout = -1;
|
|
7523
|
-
inputs.
|
|
7524
|
-
} else if (!info.metaKey && inputs.
|
|
7501
|
+
inputs.setMetaKey(true);
|
|
7502
|
+
} else if (!info.metaKey && inputs.getMetaKey() && this._metaKeyTimeout === -1) {
|
|
7525
7503
|
this._metaKeyTimeout = this.timers.setTimeout(this._setMetaKeyTimeout, 150);
|
|
7526
7504
|
}
|
|
7527
|
-
|
|
7528
|
-
|
|
7529
|
-
inputs.isDragging = false;
|
|
7505
|
+
if (!inputs.getIsPointing()) {
|
|
7506
|
+
inputs.setIsDragging(false);
|
|
7530
7507
|
}
|
|
7531
7508
|
const instanceState = this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID);
|
|
7532
7509
|
const pageState = this.store.get(this._getCurrentPageStateId());
|
|
@@ -7535,23 +7512,23 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7535
7512
|
case "pinch": {
|
|
7536
7513
|
if (cameraOptions.isLocked) return;
|
|
7537
7514
|
clearTimeout(this._longPressTimeout);
|
|
7538
|
-
this.
|
|
7515
|
+
this.inputs.updateFromEvent(info);
|
|
7539
7516
|
switch (info.name) {
|
|
7540
7517
|
case "pinch_start": {
|
|
7541
|
-
if (inputs.
|
|
7542
|
-
if (!inputs.
|
|
7543
|
-
this._pinchStart = this.getCamera().z;
|
|
7518
|
+
if (inputs.getIsPinching()) return;
|
|
7519
|
+
if (!inputs.getIsEditing()) {
|
|
7544
7520
|
if (!this._selectedShapeIdsAtPointerDown.length) {
|
|
7545
7521
|
this._selectedShapeIdsAtPointerDown = [...pageState.selectedShapeIds];
|
|
7546
7522
|
}
|
|
7547
7523
|
this._didPinch = true;
|
|
7548
|
-
inputs.
|
|
7524
|
+
inputs.setIsPinching(true);
|
|
7549
7525
|
this.interrupt();
|
|
7550
7526
|
}
|
|
7527
|
+
this.emit("event", info);
|
|
7551
7528
|
return;
|
|
7552
7529
|
}
|
|
7553
7530
|
case "pinch": {
|
|
7554
|
-
if (!inputs.
|
|
7531
|
+
if (!inputs.getIsPinching()) return;
|
|
7555
7532
|
const {
|
|
7556
7533
|
point: { z = 1 },
|
|
7557
7534
|
delta: { x: dx, y: dy }
|
|
@@ -7575,11 +7552,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7575
7552
|
),
|
|
7576
7553
|
{ immediate: true }
|
|
7577
7554
|
);
|
|
7555
|
+
this.emit("event", info);
|
|
7578
7556
|
return;
|
|
7579
7557
|
}
|
|
7580
7558
|
case "pinch_end": {
|
|
7581
|
-
if (!inputs.
|
|
7582
|
-
inputs.
|
|
7559
|
+
if (!inputs.getIsPinching()) return this;
|
|
7560
|
+
inputs.setIsPinching(false);
|
|
7583
7561
|
const { _selectedShapeIdsAtPointerDown: shapesToReselect } = this;
|
|
7584
7562
|
this.setSelectedShapes(this._selectedShapeIdsAtPointerDown);
|
|
7585
7563
|
this._selectedShapeIdsAtPointerDown = [];
|
|
@@ -7593,13 +7571,14 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7593
7571
|
});
|
|
7594
7572
|
}
|
|
7595
7573
|
}
|
|
7574
|
+
this.emit("event", info);
|
|
7596
7575
|
return;
|
|
7597
7576
|
}
|
|
7598
7577
|
}
|
|
7599
7578
|
}
|
|
7600
7579
|
case "wheel": {
|
|
7601
7580
|
if (cameraOptions.isLocked) return;
|
|
7602
|
-
this.
|
|
7581
|
+
this.inputs.updateFromEvent(info);
|
|
7603
7582
|
const { panSpeed, zoomSpeed } = cameraOptions;
|
|
7604
7583
|
let wheelBehavior = cameraOptions.wheelBehavior;
|
|
7605
7584
|
const inputMode = this.user.getUserPreferences().inputMode;
|
|
@@ -7617,7 +7596,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7617
7596
|
if (info.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
|
|
7618
7597
|
switch (behavior) {
|
|
7619
7598
|
case "zoom": {
|
|
7620
|
-
const { x, y } = this.inputs.
|
|
7599
|
+
const { x, y } = this.inputs.getCurrentScreenPoint();
|
|
7621
7600
|
let delta = dz;
|
|
7622
7601
|
if (wheelBehavior === "zoom") {
|
|
7623
7602
|
if (Math.abs(dy) > 10) {
|
|
@@ -7631,6 +7610,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7631
7610
|
immediate: true
|
|
7632
7611
|
});
|
|
7633
7612
|
this.maybeTrackPerformance("Zooming");
|
|
7613
|
+
this.root.handleEvent(info);
|
|
7614
|
+
this.emit("event", info);
|
|
7634
7615
|
return;
|
|
7635
7616
|
}
|
|
7636
7617
|
case "pan": {
|
|
@@ -7638,6 +7619,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7638
7619
|
immediate: true
|
|
7639
7620
|
});
|
|
7640
7621
|
this.maybeTrackPerformance("Panning");
|
|
7622
|
+
this.root.handleEvent(info);
|
|
7623
|
+
this.emit("event", info);
|
|
7641
7624
|
return;
|
|
7642
7625
|
}
|
|
7643
7626
|
}
|
|
@@ -7645,14 +7628,14 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7645
7628
|
break;
|
|
7646
7629
|
}
|
|
7647
7630
|
case "pointer": {
|
|
7648
|
-
if (inputs.
|
|
7649
|
-
this.
|
|
7631
|
+
if (inputs.getIsPinching()) return;
|
|
7632
|
+
this.inputs.updateFromEvent(info);
|
|
7650
7633
|
const { isPen } = info;
|
|
7651
7634
|
const { isPenMode } = instanceState;
|
|
7652
7635
|
switch (info.name) {
|
|
7653
7636
|
case "pointer_down": {
|
|
7654
7637
|
if (isPenMode && !isPen) return;
|
|
7655
|
-
if (!this.inputs.
|
|
7638
|
+
if (!this.inputs.getIsPanning()) {
|
|
7656
7639
|
this._longPressTimeout = this.timers.setTimeout(() => {
|
|
7657
7640
|
const vsb = this.getViewportScreenBounds();
|
|
7658
7641
|
this.dispatch({
|
|
@@ -7661,7 +7644,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7661
7644
|
// viewport bounds, and will be again when this event is handled...
|
|
7662
7645
|
// so we need to counter-adjust from the stored value so that the
|
|
7663
7646
|
// new value is set correctly.
|
|
7664
|
-
point: this.inputs.
|
|
7647
|
+
point: this.inputs.getOriginScreenPoint().clone().addXY(vsb.x, vsb.y),
|
|
7665
7648
|
name: "long_press"
|
|
7666
7649
|
});
|
|
7667
7650
|
}, this.options.longPressDurationMs);
|
|
@@ -7669,21 +7652,21 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7669
7652
|
this._selectedShapeIdsAtPointerDown = this.getSelectedShapeIds();
|
|
7670
7653
|
if (info.button === import_constants.LEFT_MOUSE_BUTTON) this.capturedPointerId = info.pointerId;
|
|
7671
7654
|
inputs.buttons.add(info.button);
|
|
7672
|
-
inputs.
|
|
7673
|
-
inputs.
|
|
7655
|
+
inputs.setIsPointing(true);
|
|
7656
|
+
inputs.setIsDragging(false);
|
|
7674
7657
|
if (!isPenMode && isPen) this.updateInstanceState({ isPenMode: true });
|
|
7675
7658
|
if (info.button === import_constants.STYLUS_ERASER_BUTTON) {
|
|
7676
7659
|
this._restoreToolId = this.getCurrentToolId();
|
|
7677
7660
|
this.complete();
|
|
7678
7661
|
this.setCurrentTool("eraser");
|
|
7679
7662
|
} else if (info.button === import_constants.MIDDLE_MOUSE_BUTTON) {
|
|
7680
|
-
if (!this.inputs.
|
|
7663
|
+
if (!this.inputs.getIsPanning()) {
|
|
7681
7664
|
this._prevCursor = this.getInstanceState().cursor.type;
|
|
7682
7665
|
}
|
|
7683
|
-
this.inputs.
|
|
7666
|
+
this.inputs.setIsPanning(true);
|
|
7684
7667
|
clearTimeout(this._longPressTimeout);
|
|
7685
7668
|
}
|
|
7686
|
-
if (this.inputs.
|
|
7669
|
+
if (this.inputs.getIsPanning()) {
|
|
7687
7670
|
this.stopCameraAnimation();
|
|
7688
7671
|
this.setCursor({ type: "grabbing", rotation: 0 });
|
|
7689
7672
|
return this;
|
|
@@ -7693,8 +7676,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7693
7676
|
case "pointer_move": {
|
|
7694
7677
|
if (!isPen && isPenMode) return;
|
|
7695
7678
|
const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
|
|
7696
|
-
if (this.inputs.
|
|
7697
|
-
const
|
|
7679
|
+
if (this.inputs.getIsPanning() && this.inputs.getIsPointing()) {
|
|
7680
|
+
const currentScreenPoint = this.inputs.getCurrentScreenPoint();
|
|
7681
|
+
const previousScreenPoint = this.inputs.getPreviousScreenPoint();
|
|
7698
7682
|
const offset = import_Vec.Vec.Sub(currentScreenPoint, previousScreenPoint);
|
|
7699
7683
|
this.setCamera(new import_Vec.Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
|
|
7700
7684
|
immediate: true
|
|
@@ -7702,15 +7686,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7702
7686
|
this.maybeTrackPerformance("Panning");
|
|
7703
7687
|
return;
|
|
7704
7688
|
}
|
|
7705
|
-
if (inputs.
|
|
7706
|
-
inputs.
|
|
7689
|
+
if (inputs.getIsPointing() && !inputs.getIsDragging() && import_Vec.Vec.Dist2(inputs.getOriginPagePoint(), inputs.getCurrentPagePoint()) * this.getZoomLevel() > (instanceState.isCoarsePointer ? this.options.coarseDragDistanceSquared : this.options.dragDistanceSquared) / cz) {
|
|
7690
|
+
inputs.setIsDragging(true);
|
|
7707
7691
|
clearTimeout(this._longPressTimeout);
|
|
7708
7692
|
}
|
|
7709
7693
|
break;
|
|
7710
7694
|
}
|
|
7711
7695
|
case "pointer_up": {
|
|
7712
|
-
inputs.
|
|
7713
|
-
inputs.
|
|
7696
|
+
inputs.setIsDragging(false);
|
|
7697
|
+
inputs.setIsPointing(false);
|
|
7714
7698
|
clearTimeout(this._longPressTimeout);
|
|
7715
7699
|
inputs.buttons.delete(info.button);
|
|
7716
7700
|
if (instanceState.isPenMode && !isPen) return;
|
|
@@ -7718,12 +7702,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7718
7702
|
this.capturedPointerId = null;
|
|
7719
7703
|
info.button = 0;
|
|
7720
7704
|
}
|
|
7721
|
-
if (inputs.
|
|
7705
|
+
if (inputs.getIsPanning()) {
|
|
7722
7706
|
if (!inputs.keys.has("Space")) {
|
|
7723
|
-
inputs.
|
|
7724
|
-
inputs.
|
|
7707
|
+
inputs.setIsPanning(false);
|
|
7708
|
+
inputs.setIsSpacebarPanning(false);
|
|
7725
7709
|
}
|
|
7726
|
-
const slideDirection = this.inputs.
|
|
7710
|
+
const slideDirection = this.inputs.getPointerVelocity();
|
|
7727
7711
|
const slideSpeed = Math.min(2, slideDirection.len());
|
|
7728
7712
|
switch (info.button) {
|
|
7729
7713
|
case import_constants.LEFT_MOUSE_BUTTON: {
|
|
@@ -7760,51 +7744,58 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7760
7744
|
switch (info.name) {
|
|
7761
7745
|
case "key_down": {
|
|
7762
7746
|
inputs.keys.add(info.code);
|
|
7763
|
-
if (
|
|
7764
|
-
if (!
|
|
7765
|
-
this.
|
|
7766
|
-
|
|
7767
|
-
this.inputs.isPanning = true;
|
|
7768
|
-
this.inputs.isSpacebarPanning = true;
|
|
7769
|
-
clearTimeout(this._longPressTimeout);
|
|
7770
|
-
this.setCursor({ type: this.inputs.isPointing ? "grabbing" : "grab", rotation: 0 });
|
|
7771
|
-
}
|
|
7772
|
-
if (this.inputs.isSpacebarPanning) {
|
|
7773
|
-
let offset;
|
|
7774
|
-
switch (info.code) {
|
|
7775
|
-
case "ArrowUp": {
|
|
7776
|
-
offset = new import_Vec.Vec(0, -1);
|
|
7777
|
-
break;
|
|
7747
|
+
if (this.options.spacebarPanning) {
|
|
7748
|
+
if (info.code === "Space" && !info.ctrlKey) {
|
|
7749
|
+
if (!this.inputs.getIsPanning()) {
|
|
7750
|
+
this._prevCursor = instanceState.cursor.type;
|
|
7778
7751
|
}
|
|
7779
|
-
|
|
7780
|
-
|
|
7781
|
-
|
|
7782
|
-
|
|
7783
|
-
|
|
7784
|
-
|
|
7785
|
-
|
|
7752
|
+
this.inputs.setIsPanning(true);
|
|
7753
|
+
this.inputs.setIsSpacebarPanning(true);
|
|
7754
|
+
clearTimeout(this._longPressTimeout);
|
|
7755
|
+
this.setCursor({
|
|
7756
|
+
type: this.inputs.getIsPointing() ? "grabbing" : "grab",
|
|
7757
|
+
rotation: 0
|
|
7758
|
+
});
|
|
7759
|
+
}
|
|
7760
|
+
if (this.inputs.getIsSpacebarPanning()) {
|
|
7761
|
+
let offset;
|
|
7762
|
+
switch (info.code) {
|
|
7763
|
+
case "ArrowUp": {
|
|
7764
|
+
offset = new import_Vec.Vec(0, -1);
|
|
7765
|
+
break;
|
|
7766
|
+
}
|
|
7767
|
+
case "ArrowRight": {
|
|
7768
|
+
offset = new import_Vec.Vec(1, 0);
|
|
7769
|
+
break;
|
|
7770
|
+
}
|
|
7771
|
+
case "ArrowDown": {
|
|
7772
|
+
offset = new import_Vec.Vec(0, 1);
|
|
7773
|
+
break;
|
|
7774
|
+
}
|
|
7775
|
+
case "ArrowLeft": {
|
|
7776
|
+
offset = new import_Vec.Vec(-1, 0);
|
|
7777
|
+
break;
|
|
7778
|
+
}
|
|
7786
7779
|
}
|
|
7787
|
-
|
|
7788
|
-
|
|
7789
|
-
|
|
7780
|
+
if (offset) {
|
|
7781
|
+
const bounds = this.getViewportPageBounds();
|
|
7782
|
+
const next = bounds.clone().translate(offset.mulV({ x: bounds.w, y: bounds.h }));
|
|
7783
|
+
this._animateToViewport(next, { animation: { duration: 320 } });
|
|
7790
7784
|
}
|
|
7791
7785
|
}
|
|
7792
|
-
if (offset) {
|
|
7793
|
-
const bounds = this.getViewportPageBounds();
|
|
7794
|
-
const next = bounds.clone().translate(offset.mulV({ x: bounds.w, y: bounds.h }));
|
|
7795
|
-
this._animateToViewport(next, { animation: { duration: 320 } });
|
|
7796
|
-
}
|
|
7797
7786
|
}
|
|
7798
7787
|
break;
|
|
7799
7788
|
}
|
|
7800
7789
|
case "key_up": {
|
|
7801
7790
|
inputs.keys.delete(info.code);
|
|
7802
|
-
if (
|
|
7803
|
-
if (
|
|
7804
|
-
|
|
7805
|
-
|
|
7806
|
-
|
|
7807
|
-
|
|
7791
|
+
if (this.options.spacebarPanning) {
|
|
7792
|
+
if (info.code === "Space") {
|
|
7793
|
+
if (this.inputs.buttons.has(import_constants.MIDDLE_MOUSE_BUTTON)) {
|
|
7794
|
+
} else {
|
|
7795
|
+
this.inputs.setIsPanning(false);
|
|
7796
|
+
this.inputs.setIsSpacebarPanning(false);
|
|
7797
|
+
this.setCursor({ type: this._prevCursor, rotation: 0 });
|
|
7798
|
+
}
|
|
7808
7799
|
}
|
|
7809
7800
|
}
|
|
7810
7801
|
break;
|
|
@@ -7857,8 +7848,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7857
7848
|
}
|
|
7858
7849
|
_init = __decoratorStart(_a);
|
|
7859
7850
|
__decorateElement(_init, 1, "getIsShapeHiddenCache", _getIsShapeHiddenCache_dec, Editor);
|
|
7860
|
-
__decorateElement(_init, 1, "
|
|
7861
|
-
__decorateElement(_init, 1, "
|
|
7851
|
+
__decorateElement(_init, 1, "canUndo", _canUndo_dec, Editor);
|
|
7852
|
+
__decorateElement(_init, 1, "canRedo", _canRedo_dec, Editor);
|
|
7862
7853
|
__decorateElement(_init, 1, "getPath", _getPath_dec, Editor);
|
|
7863
7854
|
__decorateElement(_init, 1, "getCurrentTool", _getCurrentTool_dec, Editor);
|
|
7864
7855
|
__decorateElement(_init, 1, "getCurrentToolId", _getCurrentToolId_dec, Editor);
|
|
@@ -7893,6 +7884,9 @@ __decorateElement(_init, 1, "getCamera", _getCamera_dec, Editor);
|
|
|
7893
7884
|
__decorateElement(_init, 1, "getViewportPageBoundsForFollowing", _getViewportPageBoundsForFollowing_dec, Editor);
|
|
7894
7885
|
__decorateElement(_init, 1, "getCameraForFollowing", _getCameraForFollowing_dec, Editor);
|
|
7895
7886
|
__decorateElement(_init, 1, "getZoomLevel", _getZoomLevel_dec, Editor);
|
|
7887
|
+
__decorateElement(_init, 1, "getDebouncedZoomLevel", _getDebouncedZoomLevel_dec, Editor);
|
|
7888
|
+
__decorateElement(_init, 1, "_getAboveDebouncedZoomThreshold", __getAboveDebouncedZoomThreshold_dec, Editor);
|
|
7889
|
+
__decorateElement(_init, 1, "getEfficientZoomLevel", _getEfficientZoomLevel_dec, Editor);
|
|
7896
7890
|
__decorateElement(_init, 1, "getViewportScreenBounds", _getViewportScreenBounds_dec, Editor);
|
|
7897
7891
|
__decorateElement(_init, 1, "getViewportScreenCenter", _getViewportScreenCenter_dec, Editor);
|
|
7898
7892
|
__decorateElement(_init, 1, "getViewportPageBounds", _getViewportPageBounds_dec, Editor);
|