@tldraw/editor 4.3.0-next.7f179bd04d6c → 4.3.0-next.842fb21476f2
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 +441 -120
- package/dist-cjs/index.js +6 -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 +288 -275
- 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/globals/environment.js +45 -9
- package/dist-cjs/lib/globals/environment.js.map +2 -2
- package/dist-cjs/lib/hooks/useCoarsePointer.js +14 -29
- package/dist-cjs/lib/hooks/useCoarsePointer.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 +441 -120
- package/dist-esm/index.mjs +7 -2
- 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 +289 -278
- 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/globals/environment.mjs +45 -9
- package/dist-esm/lib/globals/environment.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCoarsePointer.mjs +15 -30
- package/dist-esm/lib/hooks/useCoarsePointer.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 +4 -1
- 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 +374 -321
- 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/globals/environment.ts +65 -10
- package/src/lib/hooks/useCoarsePointer.ts +16 -59
- 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;
|
|
@@ -6655,6 +6685,25 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
6655
6685
|
}
|
|
6656
6686
|
}
|
|
6657
6687
|
}
|
|
6688
|
+
if (point) {
|
|
6689
|
+
const shapesById = new Map(shapes.map((shape) => [shape.id, shape]));
|
|
6690
|
+
const rootShapesFromContent = (0, import_utils.compact)(rootShapeIds.map((id) => shapesById.get(id)));
|
|
6691
|
+
if (rootShapesFromContent.length > 0) {
|
|
6692
|
+
const targetParent = this.getShapeAtPoint(point, {
|
|
6693
|
+
hitInside: true,
|
|
6694
|
+
hitFrameInside: true,
|
|
6695
|
+
hitLocked: true,
|
|
6696
|
+
filter: (shape) => {
|
|
6697
|
+
const util = this.getShapeUtil(shape);
|
|
6698
|
+
if (!util.canReceiveNewChildrenOfType) return false;
|
|
6699
|
+
return rootShapesFromContent.every(
|
|
6700
|
+
(rootShape) => util.canReceiveNewChildrenOfType(shape, rootShape.type)
|
|
6701
|
+
);
|
|
6702
|
+
}
|
|
6703
|
+
});
|
|
6704
|
+
pasteParentId = targetParent ? targetParent.id : currentPageId;
|
|
6705
|
+
}
|
|
6706
|
+
}
|
|
6658
6707
|
let isDuplicating = false;
|
|
6659
6708
|
if (!(0, import_tlschema.isPageId)(pasteParentId)) {
|
|
6660
6709
|
const parent = this.getShape(pasteParentId);
|
|
@@ -6899,60 +6948,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
6899
6948
|
height
|
|
6900
6949
|
};
|
|
6901
6950
|
}
|
|
6902
|
-
|
|
6903
|
-
* Update the input points from a pointer, pinch, or wheel event.
|
|
6904
|
-
*
|
|
6905
|
-
* @param info - The event info.
|
|
6906
|
-
*/
|
|
6907
|
-
_updateInputsFromEvent(info) {
|
|
6908
|
-
const {
|
|
6909
|
-
pointerVelocity,
|
|
6910
|
-
previousScreenPoint,
|
|
6911
|
-
previousPagePoint,
|
|
6912
|
-
currentScreenPoint,
|
|
6913
|
-
currentPagePoint,
|
|
6914
|
-
originScreenPoint,
|
|
6915
|
-
originPagePoint
|
|
6916
|
-
} = this.inputs;
|
|
6917
|
-
const { screenBounds } = this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID);
|
|
6918
|
-
const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
|
|
6919
|
-
const sx = info.point.x - screenBounds.x;
|
|
6920
|
-
const sy = info.point.y - screenBounds.y;
|
|
6921
|
-
const sz = info.point.z ?? 0.5;
|
|
6922
|
-
previousScreenPoint.setTo(currentScreenPoint);
|
|
6923
|
-
previousPagePoint.setTo(currentPagePoint);
|
|
6924
|
-
currentScreenPoint.set(sx, sy);
|
|
6925
|
-
const nx = sx / cz - cx;
|
|
6926
|
-
const ny = sy / cz - cy;
|
|
6927
|
-
if (isFinite(nx) && isFinite(ny)) {
|
|
6928
|
-
currentPagePoint.set(nx, ny, sz);
|
|
6929
|
-
}
|
|
6930
|
-
this.inputs.isPen = info.type === "pointer" && info.isPen;
|
|
6931
|
-
if (info.name === "pointer_down" || this.inputs.isPinching) {
|
|
6932
|
-
pointerVelocity.set(0, 0);
|
|
6933
|
-
originScreenPoint.setTo(currentScreenPoint);
|
|
6934
|
-
originPagePoint.setTo(currentPagePoint);
|
|
6935
|
-
}
|
|
6936
|
-
this.run(
|
|
6937
|
-
() => {
|
|
6938
|
-
this.store.put([
|
|
6939
|
-
{
|
|
6940
|
-
id: import_tlschema.TLPOINTER_ID,
|
|
6941
|
-
typeName: "pointer",
|
|
6942
|
-
x: currentPagePoint.x,
|
|
6943
|
-
y: currentPagePoint.y,
|
|
6944
|
-
lastActivityTimestamp: (
|
|
6945
|
-
// If our pointer moved only because we're following some other user, then don't
|
|
6946
|
-
// update our last activity timestamp; otherwise, update it to the current timestamp.
|
|
6947
|
-
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
|
|
6948
|
-
),
|
|
6949
|
-
meta: {}
|
|
6950
|
-
}
|
|
6951
|
-
]);
|
|
6952
|
-
},
|
|
6953
|
-
{ history: "ignore" }
|
|
6954
|
-
);
|
|
6955
|
-
}
|
|
6951
|
+
/* --------------------- Events --------------------- */
|
|
6956
6952
|
/**
|
|
6957
6953
|
* Dispatch a cancel event.
|
|
6958
6954
|
*
|
|
@@ -7017,18 +7013,19 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7017
7013
|
point: options?.point ?? // weird but true: what `inputs` calls screen-space is actually viewport space. so
|
|
7018
7014
|
// we need to convert back into true screen space first. we should fix this...
|
|
7019
7015
|
import_Vec.Vec.Add(
|
|
7020
|
-
this.inputs.
|
|
7016
|
+
this.inputs.getCurrentScreenPoint(),
|
|
7021
7017
|
this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID).screenBounds
|
|
7022
7018
|
),
|
|
7023
7019
|
pointerId: options?.pointerId ?? 0,
|
|
7024
7020
|
button: options?.button ?? 0,
|
|
7025
|
-
isPen: options?.isPen ?? this.inputs.
|
|
7026
|
-
shiftKey: options?.shiftKey ?? this.inputs.
|
|
7027
|
-
altKey: options?.altKey ?? this.inputs.
|
|
7028
|
-
ctrlKey: options?.ctrlKey ?? this.inputs.
|
|
7029
|
-
metaKey: options?.metaKey ?? this.inputs.
|
|
7030
|
-
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
|
|
7031
7027
|
};
|
|
7028
|
+
event.accelKey = options?.accelKey ?? this.inputs.getAccelKey();
|
|
7032
7029
|
if (options?.immediate) {
|
|
7033
7030
|
this._flushEventForTick(event);
|
|
7034
7031
|
} else {
|
|
@@ -7344,58 +7341,58 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7344
7341
|
this._clickManager.cancelDoubleClickTimeout();
|
|
7345
7342
|
}
|
|
7346
7343
|
_setShiftKeyTimeout() {
|
|
7347
|
-
this.inputs.
|
|
7344
|
+
this.inputs.setShiftKey(false);
|
|
7348
7345
|
this.dispatch({
|
|
7349
7346
|
type: "keyboard",
|
|
7350
7347
|
name: "key_up",
|
|
7351
7348
|
key: "Shift",
|
|
7352
|
-
shiftKey: this.inputs.
|
|
7353
|
-
ctrlKey: this.inputs.
|
|
7354
|
-
altKey: this.inputs.
|
|
7355
|
-
metaKey: this.inputs.
|
|
7356
|
-
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(),
|
|
7357
7354
|
code: "ShiftLeft"
|
|
7358
7355
|
});
|
|
7359
7356
|
}
|
|
7360
7357
|
_setAltKeyTimeout() {
|
|
7361
|
-
this.inputs.
|
|
7358
|
+
this.inputs.setAltKey(false);
|
|
7362
7359
|
this.dispatch({
|
|
7363
7360
|
type: "keyboard",
|
|
7364
7361
|
name: "key_up",
|
|
7365
7362
|
key: "Alt",
|
|
7366
|
-
shiftKey: this.inputs.
|
|
7367
|
-
ctrlKey: this.inputs.
|
|
7368
|
-
altKey: this.inputs.
|
|
7369
|
-
metaKey: this.inputs.
|
|
7370
|
-
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(),
|
|
7371
7368
|
code: "AltLeft"
|
|
7372
7369
|
});
|
|
7373
7370
|
}
|
|
7374
7371
|
_setCtrlKeyTimeout() {
|
|
7375
|
-
this.inputs.
|
|
7372
|
+
this.inputs.setCtrlKey(false);
|
|
7376
7373
|
this.dispatch({
|
|
7377
7374
|
type: "keyboard",
|
|
7378
7375
|
name: "key_up",
|
|
7379
7376
|
key: "Ctrl",
|
|
7380
|
-
shiftKey: this.inputs.
|
|
7381
|
-
ctrlKey: this.inputs.
|
|
7382
|
-
altKey: this.inputs.
|
|
7383
|
-
metaKey: this.inputs.
|
|
7384
|
-
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(),
|
|
7385
7382
|
code: "ControlLeft"
|
|
7386
7383
|
});
|
|
7387
7384
|
}
|
|
7388
7385
|
_setMetaKeyTimeout() {
|
|
7389
|
-
this.inputs.
|
|
7386
|
+
this.inputs.setMetaKey(false);
|
|
7390
7387
|
this.dispatch({
|
|
7391
7388
|
type: "keyboard",
|
|
7392
7389
|
name: "key_up",
|
|
7393
7390
|
key: "Meta",
|
|
7394
|
-
shiftKey: this.inputs.
|
|
7395
|
-
ctrlKey: this.inputs.
|
|
7396
|
-
altKey: this.inputs.
|
|
7397
|
-
metaKey: this.inputs.
|
|
7398
|
-
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(),
|
|
7399
7396
|
code: "MetaLeft"
|
|
7400
7397
|
});
|
|
7401
7398
|
}
|
|
@@ -7466,48 +7463,47 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7466
7463
|
const { type } = info;
|
|
7467
7464
|
if (info.type === "misc") {
|
|
7468
7465
|
if (info.name === "cancel" || info.name === "complete") {
|
|
7469
|
-
this.inputs.
|
|
7470
|
-
if (this.inputs.
|
|
7471
|
-
this.inputs.
|
|
7472
|
-
this.inputs.
|
|
7466
|
+
this.inputs.setIsDragging(false);
|
|
7467
|
+
if (this.inputs.getIsPanning()) {
|
|
7468
|
+
this.inputs.setIsPanning(false);
|
|
7469
|
+
this.inputs.setIsSpacebarPanning(false);
|
|
7473
7470
|
this.setCursor({ type: this._prevCursor, rotation: 0 });
|
|
7474
7471
|
}
|
|
7475
7472
|
}
|
|
7476
|
-
this.emit("event", info);
|
|
7477
7473
|
this.root.handleEvent(info);
|
|
7474
|
+
this.emit("event", info);
|
|
7478
7475
|
return;
|
|
7479
7476
|
}
|
|
7480
7477
|
if (info.shiftKey) {
|
|
7481
7478
|
clearTimeout(this._shiftKeyTimeout);
|
|
7482
7479
|
this._shiftKeyTimeout = -1;
|
|
7483
|
-
inputs.
|
|
7484
|
-
} else if (!info.shiftKey && inputs.
|
|
7480
|
+
inputs.setShiftKey(true);
|
|
7481
|
+
} else if (!info.shiftKey && inputs.getShiftKey() && this._shiftKeyTimeout === -1) {
|
|
7485
7482
|
this._shiftKeyTimeout = this.timers.setTimeout(this._setShiftKeyTimeout, 150);
|
|
7486
7483
|
}
|
|
7487
7484
|
if (info.altKey) {
|
|
7488
7485
|
clearTimeout(this._altKeyTimeout);
|
|
7489
7486
|
this._altKeyTimeout = -1;
|
|
7490
|
-
inputs.
|
|
7491
|
-
} else if (!info.altKey && inputs.
|
|
7487
|
+
inputs.setAltKey(true);
|
|
7488
|
+
} else if (!info.altKey && inputs.getAltKey() && this._altKeyTimeout === -1) {
|
|
7492
7489
|
this._altKeyTimeout = this.timers.setTimeout(this._setAltKeyTimeout, 150);
|
|
7493
7490
|
}
|
|
7494
7491
|
if (info.ctrlKey) {
|
|
7495
7492
|
clearTimeout(this._ctrlKeyTimeout);
|
|
7496
7493
|
this._ctrlKeyTimeout = -1;
|
|
7497
|
-
inputs.
|
|
7498
|
-
} else if (!info.ctrlKey && inputs.
|
|
7494
|
+
inputs.setCtrlKey(true);
|
|
7495
|
+
} else if (!info.ctrlKey && inputs.getCtrlKey() && this._ctrlKeyTimeout === -1) {
|
|
7499
7496
|
this._ctrlKeyTimeout = this.timers.setTimeout(this._setCtrlKeyTimeout, 150);
|
|
7500
7497
|
}
|
|
7501
7498
|
if (info.metaKey) {
|
|
7502
7499
|
clearTimeout(this._metaKeyTimeout);
|
|
7503
7500
|
this._metaKeyTimeout = -1;
|
|
7504
|
-
inputs.
|
|
7505
|
-
} else if (!info.metaKey && inputs.
|
|
7501
|
+
inputs.setMetaKey(true);
|
|
7502
|
+
} else if (!info.metaKey && inputs.getMetaKey() && this._metaKeyTimeout === -1) {
|
|
7506
7503
|
this._metaKeyTimeout = this.timers.setTimeout(this._setMetaKeyTimeout, 150);
|
|
7507
7504
|
}
|
|
7508
|
-
|
|
7509
|
-
|
|
7510
|
-
inputs.isDragging = false;
|
|
7505
|
+
if (!inputs.getIsPointing()) {
|
|
7506
|
+
inputs.setIsDragging(false);
|
|
7511
7507
|
}
|
|
7512
7508
|
const instanceState = this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID);
|
|
7513
7509
|
const pageState = this.store.get(this._getCurrentPageStateId());
|
|
@@ -7516,23 +7512,23 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7516
7512
|
case "pinch": {
|
|
7517
7513
|
if (cameraOptions.isLocked) return;
|
|
7518
7514
|
clearTimeout(this._longPressTimeout);
|
|
7519
|
-
this.
|
|
7515
|
+
this.inputs.updateFromEvent(info);
|
|
7520
7516
|
switch (info.name) {
|
|
7521
7517
|
case "pinch_start": {
|
|
7522
|
-
if (inputs.
|
|
7523
|
-
if (!inputs.
|
|
7524
|
-
this._pinchStart = this.getCamera().z;
|
|
7518
|
+
if (inputs.getIsPinching()) return;
|
|
7519
|
+
if (!inputs.getIsEditing()) {
|
|
7525
7520
|
if (!this._selectedShapeIdsAtPointerDown.length) {
|
|
7526
7521
|
this._selectedShapeIdsAtPointerDown = [...pageState.selectedShapeIds];
|
|
7527
7522
|
}
|
|
7528
7523
|
this._didPinch = true;
|
|
7529
|
-
inputs.
|
|
7524
|
+
inputs.setIsPinching(true);
|
|
7530
7525
|
this.interrupt();
|
|
7531
7526
|
}
|
|
7527
|
+
this.emit("event", info);
|
|
7532
7528
|
return;
|
|
7533
7529
|
}
|
|
7534
7530
|
case "pinch": {
|
|
7535
|
-
if (!inputs.
|
|
7531
|
+
if (!inputs.getIsPinching()) return;
|
|
7536
7532
|
const {
|
|
7537
7533
|
point: { z = 1 },
|
|
7538
7534
|
delta: { x: dx, y: dy }
|
|
@@ -7556,11 +7552,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7556
7552
|
),
|
|
7557
7553
|
{ immediate: true }
|
|
7558
7554
|
);
|
|
7555
|
+
this.emit("event", info);
|
|
7559
7556
|
return;
|
|
7560
7557
|
}
|
|
7561
7558
|
case "pinch_end": {
|
|
7562
|
-
if (!inputs.
|
|
7563
|
-
inputs.
|
|
7559
|
+
if (!inputs.getIsPinching()) return this;
|
|
7560
|
+
inputs.setIsPinching(false);
|
|
7564
7561
|
const { _selectedShapeIdsAtPointerDown: shapesToReselect } = this;
|
|
7565
7562
|
this.setSelectedShapes(this._selectedShapeIdsAtPointerDown);
|
|
7566
7563
|
this._selectedShapeIdsAtPointerDown = [];
|
|
@@ -7574,13 +7571,14 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7574
7571
|
});
|
|
7575
7572
|
}
|
|
7576
7573
|
}
|
|
7574
|
+
this.emit("event", info);
|
|
7577
7575
|
return;
|
|
7578
7576
|
}
|
|
7579
7577
|
}
|
|
7580
7578
|
}
|
|
7581
7579
|
case "wheel": {
|
|
7582
7580
|
if (cameraOptions.isLocked) return;
|
|
7583
|
-
this.
|
|
7581
|
+
this.inputs.updateFromEvent(info);
|
|
7584
7582
|
const { panSpeed, zoomSpeed } = cameraOptions;
|
|
7585
7583
|
let wheelBehavior = cameraOptions.wheelBehavior;
|
|
7586
7584
|
const inputMode = this.user.getUserPreferences().inputMode;
|
|
@@ -7598,7 +7596,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7598
7596
|
if (info.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
|
|
7599
7597
|
switch (behavior) {
|
|
7600
7598
|
case "zoom": {
|
|
7601
|
-
const { x, y } = this.inputs.
|
|
7599
|
+
const { x, y } = this.inputs.getCurrentScreenPoint();
|
|
7602
7600
|
let delta = dz;
|
|
7603
7601
|
if (wheelBehavior === "zoom") {
|
|
7604
7602
|
if (Math.abs(dy) > 10) {
|
|
@@ -7612,6 +7610,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7612
7610
|
immediate: true
|
|
7613
7611
|
});
|
|
7614
7612
|
this.maybeTrackPerformance("Zooming");
|
|
7613
|
+
this.root.handleEvent(info);
|
|
7614
|
+
this.emit("event", info);
|
|
7615
7615
|
return;
|
|
7616
7616
|
}
|
|
7617
7617
|
case "pan": {
|
|
@@ -7619,6 +7619,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7619
7619
|
immediate: true
|
|
7620
7620
|
});
|
|
7621
7621
|
this.maybeTrackPerformance("Panning");
|
|
7622
|
+
this.root.handleEvent(info);
|
|
7623
|
+
this.emit("event", info);
|
|
7622
7624
|
return;
|
|
7623
7625
|
}
|
|
7624
7626
|
}
|
|
@@ -7626,14 +7628,14 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7626
7628
|
break;
|
|
7627
7629
|
}
|
|
7628
7630
|
case "pointer": {
|
|
7629
|
-
if (inputs.
|
|
7630
|
-
this.
|
|
7631
|
+
if (inputs.getIsPinching()) return;
|
|
7632
|
+
this.inputs.updateFromEvent(info);
|
|
7631
7633
|
const { isPen } = info;
|
|
7632
7634
|
const { isPenMode } = instanceState;
|
|
7633
7635
|
switch (info.name) {
|
|
7634
7636
|
case "pointer_down": {
|
|
7635
7637
|
if (isPenMode && !isPen) return;
|
|
7636
|
-
if (!this.inputs.
|
|
7638
|
+
if (!this.inputs.getIsPanning()) {
|
|
7637
7639
|
this._longPressTimeout = this.timers.setTimeout(() => {
|
|
7638
7640
|
const vsb = this.getViewportScreenBounds();
|
|
7639
7641
|
this.dispatch({
|
|
@@ -7642,7 +7644,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7642
7644
|
// viewport bounds, and will be again when this event is handled...
|
|
7643
7645
|
// so we need to counter-adjust from the stored value so that the
|
|
7644
7646
|
// new value is set correctly.
|
|
7645
|
-
point: this.inputs.
|
|
7647
|
+
point: this.inputs.getOriginScreenPoint().clone().addXY(vsb.x, vsb.y),
|
|
7646
7648
|
name: "long_press"
|
|
7647
7649
|
});
|
|
7648
7650
|
}, this.options.longPressDurationMs);
|
|
@@ -7650,21 +7652,21 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7650
7652
|
this._selectedShapeIdsAtPointerDown = this.getSelectedShapeIds();
|
|
7651
7653
|
if (info.button === import_constants.LEFT_MOUSE_BUTTON) this.capturedPointerId = info.pointerId;
|
|
7652
7654
|
inputs.buttons.add(info.button);
|
|
7653
|
-
inputs.
|
|
7654
|
-
inputs.
|
|
7655
|
+
inputs.setIsPointing(true);
|
|
7656
|
+
inputs.setIsDragging(false);
|
|
7655
7657
|
if (!isPenMode && isPen) this.updateInstanceState({ isPenMode: true });
|
|
7656
7658
|
if (info.button === import_constants.STYLUS_ERASER_BUTTON) {
|
|
7657
7659
|
this._restoreToolId = this.getCurrentToolId();
|
|
7658
7660
|
this.complete();
|
|
7659
7661
|
this.setCurrentTool("eraser");
|
|
7660
7662
|
} else if (info.button === import_constants.MIDDLE_MOUSE_BUTTON) {
|
|
7661
|
-
if (!this.inputs.
|
|
7663
|
+
if (!this.inputs.getIsPanning()) {
|
|
7662
7664
|
this._prevCursor = this.getInstanceState().cursor.type;
|
|
7663
7665
|
}
|
|
7664
|
-
this.inputs.
|
|
7666
|
+
this.inputs.setIsPanning(true);
|
|
7665
7667
|
clearTimeout(this._longPressTimeout);
|
|
7666
7668
|
}
|
|
7667
|
-
if (this.inputs.
|
|
7669
|
+
if (this.inputs.getIsPanning()) {
|
|
7668
7670
|
this.stopCameraAnimation();
|
|
7669
7671
|
this.setCursor({ type: "grabbing", rotation: 0 });
|
|
7670
7672
|
return this;
|
|
@@ -7674,8 +7676,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7674
7676
|
case "pointer_move": {
|
|
7675
7677
|
if (!isPen && isPenMode) return;
|
|
7676
7678
|
const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
|
|
7677
|
-
if (this.inputs.
|
|
7678
|
-
const
|
|
7679
|
+
if (this.inputs.getIsPanning() && this.inputs.getIsPointing()) {
|
|
7680
|
+
const currentScreenPoint = this.inputs.getCurrentScreenPoint();
|
|
7681
|
+
const previousScreenPoint = this.inputs.getPreviousScreenPoint();
|
|
7679
7682
|
const offset = import_Vec.Vec.Sub(currentScreenPoint, previousScreenPoint);
|
|
7680
7683
|
this.setCamera(new import_Vec.Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
|
|
7681
7684
|
immediate: true
|
|
@@ -7683,15 +7686,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7683
7686
|
this.maybeTrackPerformance("Panning");
|
|
7684
7687
|
return;
|
|
7685
7688
|
}
|
|
7686
|
-
if (inputs.
|
|
7687
|
-
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);
|
|
7688
7691
|
clearTimeout(this._longPressTimeout);
|
|
7689
7692
|
}
|
|
7690
7693
|
break;
|
|
7691
7694
|
}
|
|
7692
7695
|
case "pointer_up": {
|
|
7693
|
-
inputs.
|
|
7694
|
-
inputs.
|
|
7696
|
+
inputs.setIsDragging(false);
|
|
7697
|
+
inputs.setIsPointing(false);
|
|
7695
7698
|
clearTimeout(this._longPressTimeout);
|
|
7696
7699
|
inputs.buttons.delete(info.button);
|
|
7697
7700
|
if (instanceState.isPenMode && !isPen) return;
|
|
@@ -7699,12 +7702,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7699
7702
|
this.capturedPointerId = null;
|
|
7700
7703
|
info.button = 0;
|
|
7701
7704
|
}
|
|
7702
|
-
if (inputs.
|
|
7705
|
+
if (inputs.getIsPanning()) {
|
|
7703
7706
|
if (!inputs.keys.has("Space")) {
|
|
7704
|
-
inputs.
|
|
7705
|
-
inputs.
|
|
7707
|
+
inputs.setIsPanning(false);
|
|
7708
|
+
inputs.setIsSpacebarPanning(false);
|
|
7706
7709
|
}
|
|
7707
|
-
const slideDirection = this.inputs.
|
|
7710
|
+
const slideDirection = this.inputs.getPointerVelocity();
|
|
7708
7711
|
const slideSpeed = Math.min(2, slideDirection.len());
|
|
7709
7712
|
switch (info.button) {
|
|
7710
7713
|
case import_constants.LEFT_MOUSE_BUTTON: {
|
|
@@ -7741,51 +7744,58 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7741
7744
|
switch (info.name) {
|
|
7742
7745
|
case "key_down": {
|
|
7743
7746
|
inputs.keys.add(info.code);
|
|
7744
|
-
if (
|
|
7745
|
-
if (!
|
|
7746
|
-
this.
|
|
7747
|
-
|
|
7748
|
-
this.inputs.isPanning = true;
|
|
7749
|
-
this.inputs.isSpacebarPanning = true;
|
|
7750
|
-
clearTimeout(this._longPressTimeout);
|
|
7751
|
-
this.setCursor({ type: this.inputs.isPointing ? "grabbing" : "grab", rotation: 0 });
|
|
7752
|
-
}
|
|
7753
|
-
if (this.inputs.isSpacebarPanning) {
|
|
7754
|
-
let offset;
|
|
7755
|
-
switch (info.code) {
|
|
7756
|
-
case "ArrowUp": {
|
|
7757
|
-
offset = new import_Vec.Vec(0, -1);
|
|
7758
|
-
break;
|
|
7747
|
+
if (this.options.spacebarPanning) {
|
|
7748
|
+
if (info.code === "Space" && !info.ctrlKey) {
|
|
7749
|
+
if (!this.inputs.getIsPanning()) {
|
|
7750
|
+
this._prevCursor = instanceState.cursor.type;
|
|
7759
7751
|
}
|
|
7760
|
-
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
|
|
7764
|
-
|
|
7765
|
-
|
|
7766
|
-
|
|
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
|
+
}
|
|
7767
7779
|
}
|
|
7768
|
-
|
|
7769
|
-
|
|
7770
|
-
|
|
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 } });
|
|
7771
7784
|
}
|
|
7772
7785
|
}
|
|
7773
|
-
if (offset) {
|
|
7774
|
-
const bounds = this.getViewportPageBounds();
|
|
7775
|
-
const next = bounds.clone().translate(offset.mulV({ x: bounds.w, y: bounds.h }));
|
|
7776
|
-
this._animateToViewport(next, { animation: { duration: 320 } });
|
|
7777
|
-
}
|
|
7778
7786
|
}
|
|
7779
7787
|
break;
|
|
7780
7788
|
}
|
|
7781
7789
|
case "key_up": {
|
|
7782
7790
|
inputs.keys.delete(info.code);
|
|
7783
|
-
if (
|
|
7784
|
-
if (
|
|
7785
|
-
|
|
7786
|
-
|
|
7787
|
-
|
|
7788
|
-
|
|
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
|
+
}
|
|
7789
7799
|
}
|
|
7790
7800
|
}
|
|
7791
7801
|
break;
|
|
@@ -7838,8 +7848,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7838
7848
|
}
|
|
7839
7849
|
_init = __decoratorStart(_a);
|
|
7840
7850
|
__decorateElement(_init, 1, "getIsShapeHiddenCache", _getIsShapeHiddenCache_dec, Editor);
|
|
7841
|
-
__decorateElement(_init, 1, "
|
|
7842
|
-
__decorateElement(_init, 1, "
|
|
7851
|
+
__decorateElement(_init, 1, "canUndo", _canUndo_dec, Editor);
|
|
7852
|
+
__decorateElement(_init, 1, "canRedo", _canRedo_dec, Editor);
|
|
7843
7853
|
__decorateElement(_init, 1, "getPath", _getPath_dec, Editor);
|
|
7844
7854
|
__decorateElement(_init, 1, "getCurrentTool", _getCurrentTool_dec, Editor);
|
|
7845
7855
|
__decorateElement(_init, 1, "getCurrentToolId", _getCurrentToolId_dec, Editor);
|
|
@@ -7874,6 +7884,9 @@ __decorateElement(_init, 1, "getCamera", _getCamera_dec, Editor);
|
|
|
7874
7884
|
__decorateElement(_init, 1, "getViewportPageBoundsForFollowing", _getViewportPageBoundsForFollowing_dec, Editor);
|
|
7875
7885
|
__decorateElement(_init, 1, "getCameraForFollowing", _getCameraForFollowing_dec, Editor);
|
|
7876
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);
|
|
7877
7890
|
__decorateElement(_init, 1, "getViewportScreenBounds", _getViewportScreenBounds_dec, Editor);
|
|
7878
7891
|
__decorateElement(_init, 1, "getViewportScreenCenter", _getViewportScreenCenter_dec, Editor);
|
|
7879
7892
|
__decorateElement(_init, 1, "getViewportPageBounds", _getViewportPageBounds_dec, Editor);
|