@tldraw/editor 4.3.0-canary.51bf9505911e → 4.3.0-canary.5221da51b019
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 +442 -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 +289 -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/editor/types/emit-types.js.map +1 -1
- 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 +442 -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 +290 -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 +375 -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/editor/types/emit-types.ts +1 -0
- 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
|
}
|
|
@@ -860,6 +821,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
860
821
|
this.disposables.clear();
|
|
861
822
|
this.store.dispose();
|
|
862
823
|
this.isDisposed = true;
|
|
824
|
+
this.emit("dispose");
|
|
863
825
|
}
|
|
864
826
|
getShapeUtil(arg) {
|
|
865
827
|
const type = typeof arg === "string" ? arg : arg.type;
|
|
@@ -893,9 +855,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
893
855
|
this.history.undo();
|
|
894
856
|
return this;
|
|
895
857
|
}
|
|
896
|
-
|
|
858
|
+
canUndo() {
|
|
897
859
|
return this.history.getNumUndos() > 0;
|
|
898
860
|
}
|
|
861
|
+
getCanUndo() {
|
|
862
|
+
return this.canUndo();
|
|
863
|
+
}
|
|
899
864
|
/**
|
|
900
865
|
* Redo to the next mark.
|
|
901
866
|
*
|
|
@@ -912,13 +877,16 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
912
877
|
this.history.redo();
|
|
913
878
|
return this;
|
|
914
879
|
}
|
|
880
|
+
canRedo() {
|
|
881
|
+
return this.history.getNumRedos() > 0;
|
|
882
|
+
}
|
|
883
|
+
getCanRedo() {
|
|
884
|
+
return this.canRedo();
|
|
885
|
+
}
|
|
915
886
|
clearHistory() {
|
|
916
887
|
this.history.clear();
|
|
917
888
|
return this;
|
|
918
889
|
}
|
|
919
|
-
getCanRedo() {
|
|
920
|
-
return this.history.getNumRedos() > 0;
|
|
921
|
-
}
|
|
922
890
|
/**
|
|
923
891
|
* Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
|
|
924
892
|
* any redos. You typically want to do this just before a user interaction begins or is handled.
|
|
@@ -1073,7 +1041,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1073
1041
|
}),
|
|
1074
1042
|
selectionCount: this.getSelectedShapes().length,
|
|
1075
1043
|
editingShape: editingShapeId ? this.getShape(editingShapeId) : void 0,
|
|
1076
|
-
inputs: this.inputs,
|
|
1044
|
+
inputs: this.inputs.toJson(),
|
|
1077
1045
|
pageState: this.getCurrentPageState(),
|
|
1078
1046
|
instanceState: this.getInstanceState(),
|
|
1079
1047
|
collaboratorCount: this.getCollaboratorsOnCurrentPage().length
|
|
@@ -1094,7 +1062,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1094
1062
|
* we're in a transaction that's about to be rolled back due to the same error we're currently
|
|
1095
1063
|
* reporting.
|
|
1096
1064
|
*
|
|
1097
|
-
* 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.
|
|
1098
1066
|
*
|
|
1099
1067
|
* @internal
|
|
1100
1068
|
*/
|
|
@@ -1745,6 +1713,28 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1745
1713
|
const editingShapeId = this.getEditingShapeId();
|
|
1746
1714
|
return editingShapeId ? this.getShape(editingShapeId) : void 0;
|
|
1747
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
|
+
}
|
|
1748
1738
|
/**
|
|
1749
1739
|
* Set the current editing shape.
|
|
1750
1740
|
*
|
|
@@ -1760,42 +1750,42 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1760
1750
|
*/
|
|
1761
1751
|
setEditingShape(shape) {
|
|
1762
1752
|
const id = typeof shape === "string" ? shape : shape?.id ?? null;
|
|
1763
|
-
|
|
1764
|
-
const prevEditingShapeId = this.getEditingShapeId();
|
|
1765
|
-
if (id !== prevEditingShapeId) {
|
|
1766
|
-
if (id) {
|
|
1767
|
-
const shape2 = this.getShape(id);
|
|
1768
|
-
if (shape2 && this.getShapeUtil(shape2).canEdit(shape2)) {
|
|
1769
|
-
this.run(
|
|
1770
|
-
() => {
|
|
1771
|
-
this._updateCurrentPageState({ editingShapeId: id });
|
|
1772
|
-
if (prevEditingShapeId) {
|
|
1773
|
-
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1774
|
-
if (prevEditingShape) {
|
|
1775
|
-
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1776
|
-
}
|
|
1777
|
-
}
|
|
1778
|
-
this.getShapeUtil(shape2).onEditStart?.(shape2);
|
|
1779
|
-
},
|
|
1780
|
-
{ history: "ignore" }
|
|
1781
|
-
);
|
|
1782
|
-
return this;
|
|
1783
|
-
}
|
|
1784
|
-
}
|
|
1753
|
+
if (!id) {
|
|
1785
1754
|
this.run(
|
|
1786
1755
|
() => {
|
|
1787
|
-
this.
|
|
1788
|
-
this._currentRichTextEditor.set(null);
|
|
1756
|
+
const prevEditingShapeId = this.getEditingShapeId();
|
|
1789
1757
|
if (prevEditingShapeId) {
|
|
1790
1758
|
const prevEditingShape = this.getShape(prevEditingShapeId);
|
|
1791
1759
|
if (prevEditingShape) {
|
|
1792
1760
|
this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
|
|
1793
1761
|
}
|
|
1794
1762
|
}
|
|
1763
|
+
this._updateCurrentPageState({ editingShapeId: null });
|
|
1764
|
+
this._currentRichTextEditor.set(null);
|
|
1795
1765
|
},
|
|
1796
1766
|
{ history: "ignore" }
|
|
1797
1767
|
);
|
|
1768
|
+
return this;
|
|
1798
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
|
+
);
|
|
1799
1789
|
return this;
|
|
1800
1790
|
}
|
|
1801
1791
|
getRichTextEditor() {
|
|
@@ -1928,6 +1918,25 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1928
1918
|
getCroppingShapeId() {
|
|
1929
1919
|
return this.getCurrentPageState().croppingShapeId;
|
|
1930
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
|
+
}
|
|
1931
1940
|
/**
|
|
1932
1941
|
* Set the current cropping shape.
|
|
1933
1942
|
*
|
|
@@ -1949,12 +1958,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
1949
1958
|
() => {
|
|
1950
1959
|
if (!id) {
|
|
1951
1960
|
this.updateCurrentPageState({ croppingShapeId: null });
|
|
1952
|
-
} else {
|
|
1953
|
-
|
|
1954
|
-
const util = this.getShapeUtil(shape2);
|
|
1955
|
-
if (shape2 && util.canCrop(shape2)) {
|
|
1956
|
-
this.updateCurrentPageState({ croppingShapeId: id });
|
|
1957
|
-
}
|
|
1961
|
+
} else if (this.canCropShape(id)) {
|
|
1962
|
+
this.updateCurrentPageState({ croppingShapeId: id });
|
|
1958
1963
|
}
|
|
1959
1964
|
},
|
|
1960
1965
|
{ history: "ignore" }
|
|
@@ -2029,6 +2034,22 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2029
2034
|
getZoomLevel() {
|
|
2030
2035
|
return this.getCamera().z;
|
|
2031
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
|
+
}
|
|
2032
2053
|
/**
|
|
2033
2054
|
* Get the camera's initial or reset zoom level.
|
|
2034
2055
|
*
|
|
@@ -2274,7 +2295,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2274
2295
|
},
|
|
2275
2296
|
{ history: "ignore" }
|
|
2276
2297
|
);
|
|
2277
|
-
const
|
|
2298
|
+
const currentScreenPoint = this.inputs.getCurrentScreenPoint();
|
|
2299
|
+
const currentPagePoint = this.inputs.getCurrentPagePoint();
|
|
2278
2300
|
if (currentScreenPoint.x / z - x !== currentPagePoint.x || currentScreenPoint.y / z - y !== currentPagePoint.y) {
|
|
2279
2301
|
this.updatePointer({
|
|
2280
2302
|
immediate: opts?.immediate,
|
|
@@ -2409,7 +2431,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2409
2431
|
* ```ts
|
|
2410
2432
|
* editor.zoomIn()
|
|
2411
2433
|
* editor.zoomIn(editor.getViewportScreenCenter(), { animation: { duration: 200 } })
|
|
2412
|
-
* editor.zoomIn(editor.inputs.
|
|
2434
|
+
* editor.zoomIn(editor.inputs.getCurrentScreenPoint(), { animation: { duration: 200 } })
|
|
2413
2435
|
* ```
|
|
2414
2436
|
*
|
|
2415
2437
|
* @param point - The screen point to zoom in on. Defaults to the screen center
|
|
@@ -2450,7 +2472,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2450
2472
|
* ```ts
|
|
2451
2473
|
* editor.zoomOut()
|
|
2452
2474
|
* editor.zoomOut(editor.getViewportScreenCenter(), { animation: { duration: 120 } })
|
|
2453
|
-
* editor.zoomOut(editor.inputs.
|
|
2475
|
+
* editor.zoomOut(editor.inputs.getCurrentScreenPoint(), { animation: { duration: 120 } })
|
|
2454
2476
|
* ```
|
|
2455
2477
|
*
|
|
2456
2478
|
* @param point - The point to zoom out on. Defaults to the viewport screen center.
|
|
@@ -2502,10 +2524,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2502
2524
|
if (isLocked && !opts?.force) return this;
|
|
2503
2525
|
const selectionPageBounds = this.getSelectionPageBounds();
|
|
2504
2526
|
if (selectionPageBounds) {
|
|
2505
|
-
this.
|
|
2506
|
-
|
|
2507
|
-
|
|
2508
|
-
}
|
|
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
|
+
}
|
|
2509
2536
|
}
|
|
2510
2537
|
return this;
|
|
2511
2538
|
}
|
|
@@ -2545,7 +2572,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2545
2572
|
const cameraOptions = this._cameraOptions.__unsafe__getWithoutCapture();
|
|
2546
2573
|
if (cameraOptions.isLocked && !opts?.force) return this;
|
|
2547
2574
|
const viewportScreenBounds = this.getViewportScreenBounds();
|
|
2548
|
-
const inset = opts?.inset ?? Math.min(
|
|
2575
|
+
const inset = opts?.inset ?? Math.min(this.options.zoomToFitPadding, viewportScreenBounds.width * 0.28);
|
|
2549
2576
|
const baseZoom = this.getBaseZoom();
|
|
2550
2577
|
const zoomMin = cameraOptions.zoomSteps[0];
|
|
2551
2578
|
const zoomMax = (0, import_utils.last)(cameraOptions.zoomSteps);
|
|
@@ -2783,7 +2810,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
2783
2810
|
this._setCamera(import_Vec.Vec.From({ ...this.getCamera() }));
|
|
2784
2811
|
}
|
|
2785
2812
|
}
|
|
2786
|
-
this._tickCameraState();
|
|
2787
2813
|
return this;
|
|
2788
2814
|
}
|
|
2789
2815
|
getViewportScreenBounds() {
|
|
@@ -3063,6 +3089,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
3063
3089
|
this._cameraStateTimeoutRemaining = this.options.cameraMovingTimeoutMs;
|
|
3064
3090
|
if (this._cameraState.__unsafe__getWithoutCapture() !== "idle") return;
|
|
3065
3091
|
this._cameraState.set("moving");
|
|
3092
|
+
this._debouncedZoomLevel.set((0, import_state.unsafe__withoutCapture)(() => this.getCamera().z));
|
|
3066
3093
|
this.on("tick", this._decayCameraStateTimeout);
|
|
3067
3094
|
}
|
|
3068
3095
|
/**
|
|
@@ -5662,8 +5689,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
5662
5689
|
isAspectRatioLocked: options.isAspectRatioLocked
|
|
5663
5690
|
});
|
|
5664
5691
|
if (Math.sign(scale.x) * Math.sign(scale.y) < 0) {
|
|
5665
|
-
|
|
5666
|
-
rotation
|
|
5692
|
+
const parentRotation = this.getShapeParentTransform(id).rotation();
|
|
5693
|
+
const rotation = -options.initialShape.rotation - 2 * parentRotation;
|
|
5667
5694
|
this.updateShapes([{ id, type, rotation }]);
|
|
5668
5695
|
}
|
|
5669
5696
|
const preScaleShapePageCenter = import_Mat.Mat.applyToPoint(
|
|
@@ -5676,9 +5703,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
5676
5703
|
scale,
|
|
5677
5704
|
options.scaleAxisRotation
|
|
5678
5705
|
);
|
|
5679
|
-
const pageBounds = this.getShapePageBounds(id);
|
|
5680
5706
|
const pageTransform = this.getShapePageTransform(id);
|
|
5681
|
-
const
|
|
5707
|
+
const currentLocalBounds = this.getShapeGeometry(id).bounds;
|
|
5708
|
+
const currentPageCenter = import_Mat.Mat.applyToPoint(pageTransform, currentLocalBounds.center);
|
|
5682
5709
|
const shapePageTransformOrigin = pageTransform.point();
|
|
5683
5710
|
if (!currentPageCenter || !shapePageTransformOrigin) return this;
|
|
5684
5711
|
const pageDelta = import_Vec.Vec.Sub(postScaleShapePageCenter, currentPageCenter);
|
|
@@ -5964,7 +5991,11 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
5964
5991
|
)
|
|
5965
5992
|
);
|
|
5966
5993
|
const sortedShapeIds = shapesToGroup.sort(import_utils.sortByIndex).map((s) => s.id);
|
|
5967
|
-
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
|
+
}
|
|
5968
5999
|
const { x, y } = pageBounds.point;
|
|
5969
6000
|
const parentId = this.findCommonAncestor(shapesToGroup) ?? this.getCurrentPageId();
|
|
5970
6001
|
if (this.getCurrentToolId() !== "select") return this;
|
|
@@ -6654,6 +6685,25 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
6654
6685
|
}
|
|
6655
6686
|
}
|
|
6656
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
|
+
}
|
|
6657
6707
|
let isDuplicating = false;
|
|
6658
6708
|
if (!(0, import_tlschema.isPageId)(pasteParentId)) {
|
|
6659
6709
|
const parent = this.getShape(pasteParentId);
|
|
@@ -6898,60 +6948,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
6898
6948
|
height
|
|
6899
6949
|
};
|
|
6900
6950
|
}
|
|
6901
|
-
|
|
6902
|
-
* Update the input points from a pointer, pinch, or wheel event.
|
|
6903
|
-
*
|
|
6904
|
-
* @param info - The event info.
|
|
6905
|
-
*/
|
|
6906
|
-
_updateInputsFromEvent(info) {
|
|
6907
|
-
const {
|
|
6908
|
-
pointerVelocity,
|
|
6909
|
-
previousScreenPoint,
|
|
6910
|
-
previousPagePoint,
|
|
6911
|
-
currentScreenPoint,
|
|
6912
|
-
currentPagePoint,
|
|
6913
|
-
originScreenPoint,
|
|
6914
|
-
originPagePoint
|
|
6915
|
-
} = this.inputs;
|
|
6916
|
-
const { screenBounds } = this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID);
|
|
6917
|
-
const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
|
|
6918
|
-
const sx = info.point.x - screenBounds.x;
|
|
6919
|
-
const sy = info.point.y - screenBounds.y;
|
|
6920
|
-
const sz = info.point.z ?? 0.5;
|
|
6921
|
-
previousScreenPoint.setTo(currentScreenPoint);
|
|
6922
|
-
previousPagePoint.setTo(currentPagePoint);
|
|
6923
|
-
currentScreenPoint.set(sx, sy);
|
|
6924
|
-
const nx = sx / cz - cx;
|
|
6925
|
-
const ny = sy / cz - cy;
|
|
6926
|
-
if (isFinite(nx) && isFinite(ny)) {
|
|
6927
|
-
currentPagePoint.set(nx, ny, sz);
|
|
6928
|
-
}
|
|
6929
|
-
this.inputs.isPen = info.type === "pointer" && info.isPen;
|
|
6930
|
-
if (info.name === "pointer_down" || this.inputs.isPinching) {
|
|
6931
|
-
pointerVelocity.set(0, 0);
|
|
6932
|
-
originScreenPoint.setTo(currentScreenPoint);
|
|
6933
|
-
originPagePoint.setTo(currentPagePoint);
|
|
6934
|
-
}
|
|
6935
|
-
this.run(
|
|
6936
|
-
() => {
|
|
6937
|
-
this.store.put([
|
|
6938
|
-
{
|
|
6939
|
-
id: import_tlschema.TLPOINTER_ID,
|
|
6940
|
-
typeName: "pointer",
|
|
6941
|
-
x: currentPagePoint.x,
|
|
6942
|
-
y: currentPagePoint.y,
|
|
6943
|
-
lastActivityTimestamp: (
|
|
6944
|
-
// If our pointer moved only because we're following some other user, then don't
|
|
6945
|
-
// update our last activity timestamp; otherwise, update it to the current timestamp.
|
|
6946
|
-
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
|
|
6947
|
-
),
|
|
6948
|
-
meta: {}
|
|
6949
|
-
}
|
|
6950
|
-
]);
|
|
6951
|
-
},
|
|
6952
|
-
{ history: "ignore" }
|
|
6953
|
-
);
|
|
6954
|
-
}
|
|
6951
|
+
/* --------------------- Events --------------------- */
|
|
6955
6952
|
/**
|
|
6956
6953
|
* Dispatch a cancel event.
|
|
6957
6954
|
*
|
|
@@ -7016,18 +7013,19 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7016
7013
|
point: options?.point ?? // weird but true: what `inputs` calls screen-space is actually viewport space. so
|
|
7017
7014
|
// we need to convert back into true screen space first. we should fix this...
|
|
7018
7015
|
import_Vec.Vec.Add(
|
|
7019
|
-
this.inputs.
|
|
7016
|
+
this.inputs.getCurrentScreenPoint(),
|
|
7020
7017
|
this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID).screenBounds
|
|
7021
7018
|
),
|
|
7022
7019
|
pointerId: options?.pointerId ?? 0,
|
|
7023
7020
|
button: options?.button ?? 0,
|
|
7024
|
-
isPen: options?.isPen ?? this.inputs.
|
|
7025
|
-
shiftKey: options?.shiftKey ?? this.inputs.
|
|
7026
|
-
altKey: options?.altKey ?? this.inputs.
|
|
7027
|
-
ctrlKey: options?.ctrlKey ?? this.inputs.
|
|
7028
|
-
metaKey: options?.metaKey ?? this.inputs.
|
|
7029
|
-
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
|
|
7030
7027
|
};
|
|
7028
|
+
event.accelKey = options?.accelKey ?? this.inputs.getAccelKey();
|
|
7031
7029
|
if (options?.immediate) {
|
|
7032
7030
|
this._flushEventForTick(event);
|
|
7033
7031
|
} else {
|
|
@@ -7343,58 +7341,58 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7343
7341
|
this._clickManager.cancelDoubleClickTimeout();
|
|
7344
7342
|
}
|
|
7345
7343
|
_setShiftKeyTimeout() {
|
|
7346
|
-
this.inputs.
|
|
7344
|
+
this.inputs.setShiftKey(false);
|
|
7347
7345
|
this.dispatch({
|
|
7348
7346
|
type: "keyboard",
|
|
7349
7347
|
name: "key_up",
|
|
7350
7348
|
key: "Shift",
|
|
7351
|
-
shiftKey: this.inputs.
|
|
7352
|
-
ctrlKey: this.inputs.
|
|
7353
|
-
altKey: this.inputs.
|
|
7354
|
-
metaKey: this.inputs.
|
|
7355
|
-
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(),
|
|
7356
7354
|
code: "ShiftLeft"
|
|
7357
7355
|
});
|
|
7358
7356
|
}
|
|
7359
7357
|
_setAltKeyTimeout() {
|
|
7360
|
-
this.inputs.
|
|
7358
|
+
this.inputs.setAltKey(false);
|
|
7361
7359
|
this.dispatch({
|
|
7362
7360
|
type: "keyboard",
|
|
7363
7361
|
name: "key_up",
|
|
7364
7362
|
key: "Alt",
|
|
7365
|
-
shiftKey: this.inputs.
|
|
7366
|
-
ctrlKey: this.inputs.
|
|
7367
|
-
altKey: this.inputs.
|
|
7368
|
-
metaKey: this.inputs.
|
|
7369
|
-
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(),
|
|
7370
7368
|
code: "AltLeft"
|
|
7371
7369
|
});
|
|
7372
7370
|
}
|
|
7373
7371
|
_setCtrlKeyTimeout() {
|
|
7374
|
-
this.inputs.
|
|
7372
|
+
this.inputs.setCtrlKey(false);
|
|
7375
7373
|
this.dispatch({
|
|
7376
7374
|
type: "keyboard",
|
|
7377
7375
|
name: "key_up",
|
|
7378
7376
|
key: "Ctrl",
|
|
7379
|
-
shiftKey: this.inputs.
|
|
7380
|
-
ctrlKey: this.inputs.
|
|
7381
|
-
altKey: this.inputs.
|
|
7382
|
-
metaKey: this.inputs.
|
|
7383
|
-
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(),
|
|
7384
7382
|
code: "ControlLeft"
|
|
7385
7383
|
});
|
|
7386
7384
|
}
|
|
7387
7385
|
_setMetaKeyTimeout() {
|
|
7388
|
-
this.inputs.
|
|
7386
|
+
this.inputs.setMetaKey(false);
|
|
7389
7387
|
this.dispatch({
|
|
7390
7388
|
type: "keyboard",
|
|
7391
7389
|
name: "key_up",
|
|
7392
7390
|
key: "Meta",
|
|
7393
|
-
shiftKey: this.inputs.
|
|
7394
|
-
ctrlKey: this.inputs.
|
|
7395
|
-
altKey: this.inputs.
|
|
7396
|
-
metaKey: this.inputs.
|
|
7397
|
-
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(),
|
|
7398
7396
|
code: "MetaLeft"
|
|
7399
7397
|
});
|
|
7400
7398
|
}
|
|
@@ -7465,48 +7463,47 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7465
7463
|
const { type } = info;
|
|
7466
7464
|
if (info.type === "misc") {
|
|
7467
7465
|
if (info.name === "cancel" || info.name === "complete") {
|
|
7468
|
-
this.inputs.
|
|
7469
|
-
if (this.inputs.
|
|
7470
|
-
this.inputs.
|
|
7471
|
-
this.inputs.
|
|
7466
|
+
this.inputs.setIsDragging(false);
|
|
7467
|
+
if (this.inputs.getIsPanning()) {
|
|
7468
|
+
this.inputs.setIsPanning(false);
|
|
7469
|
+
this.inputs.setIsSpacebarPanning(false);
|
|
7472
7470
|
this.setCursor({ type: this._prevCursor, rotation: 0 });
|
|
7473
7471
|
}
|
|
7474
7472
|
}
|
|
7475
|
-
this.emit("event", info);
|
|
7476
7473
|
this.root.handleEvent(info);
|
|
7474
|
+
this.emit("event", info);
|
|
7477
7475
|
return;
|
|
7478
7476
|
}
|
|
7479
7477
|
if (info.shiftKey) {
|
|
7480
7478
|
clearTimeout(this._shiftKeyTimeout);
|
|
7481
7479
|
this._shiftKeyTimeout = -1;
|
|
7482
|
-
inputs.
|
|
7483
|
-
} else if (!info.shiftKey && inputs.
|
|
7480
|
+
inputs.setShiftKey(true);
|
|
7481
|
+
} else if (!info.shiftKey && inputs.getShiftKey() && this._shiftKeyTimeout === -1) {
|
|
7484
7482
|
this._shiftKeyTimeout = this.timers.setTimeout(this._setShiftKeyTimeout, 150);
|
|
7485
7483
|
}
|
|
7486
7484
|
if (info.altKey) {
|
|
7487
7485
|
clearTimeout(this._altKeyTimeout);
|
|
7488
7486
|
this._altKeyTimeout = -1;
|
|
7489
|
-
inputs.
|
|
7490
|
-
} else if (!info.altKey && inputs.
|
|
7487
|
+
inputs.setAltKey(true);
|
|
7488
|
+
} else if (!info.altKey && inputs.getAltKey() && this._altKeyTimeout === -1) {
|
|
7491
7489
|
this._altKeyTimeout = this.timers.setTimeout(this._setAltKeyTimeout, 150);
|
|
7492
7490
|
}
|
|
7493
7491
|
if (info.ctrlKey) {
|
|
7494
7492
|
clearTimeout(this._ctrlKeyTimeout);
|
|
7495
7493
|
this._ctrlKeyTimeout = -1;
|
|
7496
|
-
inputs.
|
|
7497
|
-
} else if (!info.ctrlKey && inputs.
|
|
7494
|
+
inputs.setCtrlKey(true);
|
|
7495
|
+
} else if (!info.ctrlKey && inputs.getCtrlKey() && this._ctrlKeyTimeout === -1) {
|
|
7498
7496
|
this._ctrlKeyTimeout = this.timers.setTimeout(this._setCtrlKeyTimeout, 150);
|
|
7499
7497
|
}
|
|
7500
7498
|
if (info.metaKey) {
|
|
7501
7499
|
clearTimeout(this._metaKeyTimeout);
|
|
7502
7500
|
this._metaKeyTimeout = -1;
|
|
7503
|
-
inputs.
|
|
7504
|
-
} else if (!info.metaKey && inputs.
|
|
7501
|
+
inputs.setMetaKey(true);
|
|
7502
|
+
} else if (!info.metaKey && inputs.getMetaKey() && this._metaKeyTimeout === -1) {
|
|
7505
7503
|
this._metaKeyTimeout = this.timers.setTimeout(this._setMetaKeyTimeout, 150);
|
|
7506
7504
|
}
|
|
7507
|
-
|
|
7508
|
-
|
|
7509
|
-
inputs.isDragging = false;
|
|
7505
|
+
if (!inputs.getIsPointing()) {
|
|
7506
|
+
inputs.setIsDragging(false);
|
|
7510
7507
|
}
|
|
7511
7508
|
const instanceState = this.store.unsafeGetWithoutCapture(import_tlschema.TLINSTANCE_ID);
|
|
7512
7509
|
const pageState = this.store.get(this._getCurrentPageStateId());
|
|
@@ -7515,23 +7512,23 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7515
7512
|
case "pinch": {
|
|
7516
7513
|
if (cameraOptions.isLocked) return;
|
|
7517
7514
|
clearTimeout(this._longPressTimeout);
|
|
7518
|
-
this.
|
|
7515
|
+
this.inputs.updateFromEvent(info);
|
|
7519
7516
|
switch (info.name) {
|
|
7520
7517
|
case "pinch_start": {
|
|
7521
|
-
if (inputs.
|
|
7522
|
-
if (!inputs.
|
|
7523
|
-
this._pinchStart = this.getCamera().z;
|
|
7518
|
+
if (inputs.getIsPinching()) return;
|
|
7519
|
+
if (!inputs.getIsEditing()) {
|
|
7524
7520
|
if (!this._selectedShapeIdsAtPointerDown.length) {
|
|
7525
7521
|
this._selectedShapeIdsAtPointerDown = [...pageState.selectedShapeIds];
|
|
7526
7522
|
}
|
|
7527
7523
|
this._didPinch = true;
|
|
7528
|
-
inputs.
|
|
7524
|
+
inputs.setIsPinching(true);
|
|
7529
7525
|
this.interrupt();
|
|
7530
7526
|
}
|
|
7527
|
+
this.emit("event", info);
|
|
7531
7528
|
return;
|
|
7532
7529
|
}
|
|
7533
7530
|
case "pinch": {
|
|
7534
|
-
if (!inputs.
|
|
7531
|
+
if (!inputs.getIsPinching()) return;
|
|
7535
7532
|
const {
|
|
7536
7533
|
point: { z = 1 },
|
|
7537
7534
|
delta: { x: dx, y: dy }
|
|
@@ -7555,11 +7552,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7555
7552
|
),
|
|
7556
7553
|
{ immediate: true }
|
|
7557
7554
|
);
|
|
7555
|
+
this.emit("event", info);
|
|
7558
7556
|
return;
|
|
7559
7557
|
}
|
|
7560
7558
|
case "pinch_end": {
|
|
7561
|
-
if (!inputs.
|
|
7562
|
-
inputs.
|
|
7559
|
+
if (!inputs.getIsPinching()) return this;
|
|
7560
|
+
inputs.setIsPinching(false);
|
|
7563
7561
|
const { _selectedShapeIdsAtPointerDown: shapesToReselect } = this;
|
|
7564
7562
|
this.setSelectedShapes(this._selectedShapeIdsAtPointerDown);
|
|
7565
7563
|
this._selectedShapeIdsAtPointerDown = [];
|
|
@@ -7573,13 +7571,14 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7573
7571
|
});
|
|
7574
7572
|
}
|
|
7575
7573
|
}
|
|
7574
|
+
this.emit("event", info);
|
|
7576
7575
|
return;
|
|
7577
7576
|
}
|
|
7578
7577
|
}
|
|
7579
7578
|
}
|
|
7580
7579
|
case "wheel": {
|
|
7581
7580
|
if (cameraOptions.isLocked) return;
|
|
7582
|
-
this.
|
|
7581
|
+
this.inputs.updateFromEvent(info);
|
|
7583
7582
|
const { panSpeed, zoomSpeed } = cameraOptions;
|
|
7584
7583
|
let wheelBehavior = cameraOptions.wheelBehavior;
|
|
7585
7584
|
const inputMode = this.user.getUserPreferences().inputMode;
|
|
@@ -7597,7 +7596,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7597
7596
|
if (info.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
|
|
7598
7597
|
switch (behavior) {
|
|
7599
7598
|
case "zoom": {
|
|
7600
|
-
const { x, y } = this.inputs.
|
|
7599
|
+
const { x, y } = this.inputs.getCurrentScreenPoint();
|
|
7601
7600
|
let delta = dz;
|
|
7602
7601
|
if (wheelBehavior === "zoom") {
|
|
7603
7602
|
if (Math.abs(dy) > 10) {
|
|
@@ -7611,6 +7610,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7611
7610
|
immediate: true
|
|
7612
7611
|
});
|
|
7613
7612
|
this.maybeTrackPerformance("Zooming");
|
|
7613
|
+
this.root.handleEvent(info);
|
|
7614
|
+
this.emit("event", info);
|
|
7614
7615
|
return;
|
|
7615
7616
|
}
|
|
7616
7617
|
case "pan": {
|
|
@@ -7618,6 +7619,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7618
7619
|
immediate: true
|
|
7619
7620
|
});
|
|
7620
7621
|
this.maybeTrackPerformance("Panning");
|
|
7622
|
+
this.root.handleEvent(info);
|
|
7623
|
+
this.emit("event", info);
|
|
7621
7624
|
return;
|
|
7622
7625
|
}
|
|
7623
7626
|
}
|
|
@@ -7625,14 +7628,14 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7625
7628
|
break;
|
|
7626
7629
|
}
|
|
7627
7630
|
case "pointer": {
|
|
7628
|
-
if (inputs.
|
|
7629
|
-
this.
|
|
7631
|
+
if (inputs.getIsPinching()) return;
|
|
7632
|
+
this.inputs.updateFromEvent(info);
|
|
7630
7633
|
const { isPen } = info;
|
|
7631
7634
|
const { isPenMode } = instanceState;
|
|
7632
7635
|
switch (info.name) {
|
|
7633
7636
|
case "pointer_down": {
|
|
7634
7637
|
if (isPenMode && !isPen) return;
|
|
7635
|
-
if (!this.inputs.
|
|
7638
|
+
if (!this.inputs.getIsPanning()) {
|
|
7636
7639
|
this._longPressTimeout = this.timers.setTimeout(() => {
|
|
7637
7640
|
const vsb = this.getViewportScreenBounds();
|
|
7638
7641
|
this.dispatch({
|
|
@@ -7641,7 +7644,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7641
7644
|
// viewport bounds, and will be again when this event is handled...
|
|
7642
7645
|
// so we need to counter-adjust from the stored value so that the
|
|
7643
7646
|
// new value is set correctly.
|
|
7644
|
-
point: this.inputs.
|
|
7647
|
+
point: this.inputs.getOriginScreenPoint().clone().addXY(vsb.x, vsb.y),
|
|
7645
7648
|
name: "long_press"
|
|
7646
7649
|
});
|
|
7647
7650
|
}, this.options.longPressDurationMs);
|
|
@@ -7649,21 +7652,21 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7649
7652
|
this._selectedShapeIdsAtPointerDown = this.getSelectedShapeIds();
|
|
7650
7653
|
if (info.button === import_constants.LEFT_MOUSE_BUTTON) this.capturedPointerId = info.pointerId;
|
|
7651
7654
|
inputs.buttons.add(info.button);
|
|
7652
|
-
inputs.
|
|
7653
|
-
inputs.
|
|
7655
|
+
inputs.setIsPointing(true);
|
|
7656
|
+
inputs.setIsDragging(false);
|
|
7654
7657
|
if (!isPenMode && isPen) this.updateInstanceState({ isPenMode: true });
|
|
7655
7658
|
if (info.button === import_constants.STYLUS_ERASER_BUTTON) {
|
|
7656
7659
|
this._restoreToolId = this.getCurrentToolId();
|
|
7657
7660
|
this.complete();
|
|
7658
7661
|
this.setCurrentTool("eraser");
|
|
7659
7662
|
} else if (info.button === import_constants.MIDDLE_MOUSE_BUTTON) {
|
|
7660
|
-
if (!this.inputs.
|
|
7663
|
+
if (!this.inputs.getIsPanning()) {
|
|
7661
7664
|
this._prevCursor = this.getInstanceState().cursor.type;
|
|
7662
7665
|
}
|
|
7663
|
-
this.inputs.
|
|
7666
|
+
this.inputs.setIsPanning(true);
|
|
7664
7667
|
clearTimeout(this._longPressTimeout);
|
|
7665
7668
|
}
|
|
7666
|
-
if (this.inputs.
|
|
7669
|
+
if (this.inputs.getIsPanning()) {
|
|
7667
7670
|
this.stopCameraAnimation();
|
|
7668
7671
|
this.setCursor({ type: "grabbing", rotation: 0 });
|
|
7669
7672
|
return this;
|
|
@@ -7673,8 +7676,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7673
7676
|
case "pointer_move": {
|
|
7674
7677
|
if (!isPen && isPenMode) return;
|
|
7675
7678
|
const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
|
|
7676
|
-
if (this.inputs.
|
|
7677
|
-
const
|
|
7679
|
+
if (this.inputs.getIsPanning() && this.inputs.getIsPointing()) {
|
|
7680
|
+
const currentScreenPoint = this.inputs.getCurrentScreenPoint();
|
|
7681
|
+
const previousScreenPoint = this.inputs.getPreviousScreenPoint();
|
|
7678
7682
|
const offset = import_Vec.Vec.Sub(currentScreenPoint, previousScreenPoint);
|
|
7679
7683
|
this.setCamera(new import_Vec.Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
|
|
7680
7684
|
immediate: true
|
|
@@ -7682,15 +7686,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7682
7686
|
this.maybeTrackPerformance("Panning");
|
|
7683
7687
|
return;
|
|
7684
7688
|
}
|
|
7685
|
-
if (inputs.
|
|
7686
|
-
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);
|
|
7687
7691
|
clearTimeout(this._longPressTimeout);
|
|
7688
7692
|
}
|
|
7689
7693
|
break;
|
|
7690
7694
|
}
|
|
7691
7695
|
case "pointer_up": {
|
|
7692
|
-
inputs.
|
|
7693
|
-
inputs.
|
|
7696
|
+
inputs.setIsDragging(false);
|
|
7697
|
+
inputs.setIsPointing(false);
|
|
7694
7698
|
clearTimeout(this._longPressTimeout);
|
|
7695
7699
|
inputs.buttons.delete(info.button);
|
|
7696
7700
|
if (instanceState.isPenMode && !isPen) return;
|
|
@@ -7698,12 +7702,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7698
7702
|
this.capturedPointerId = null;
|
|
7699
7703
|
info.button = 0;
|
|
7700
7704
|
}
|
|
7701
|
-
if (inputs.
|
|
7705
|
+
if (inputs.getIsPanning()) {
|
|
7702
7706
|
if (!inputs.keys.has("Space")) {
|
|
7703
|
-
inputs.
|
|
7704
|
-
inputs.
|
|
7707
|
+
inputs.setIsPanning(false);
|
|
7708
|
+
inputs.setIsSpacebarPanning(false);
|
|
7705
7709
|
}
|
|
7706
|
-
const slideDirection = this.inputs.
|
|
7710
|
+
const slideDirection = this.inputs.getPointerVelocity();
|
|
7707
7711
|
const slideSpeed = Math.min(2, slideDirection.len());
|
|
7708
7712
|
switch (info.button) {
|
|
7709
7713
|
case import_constants.LEFT_MOUSE_BUTTON: {
|
|
@@ -7740,51 +7744,58 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7740
7744
|
switch (info.name) {
|
|
7741
7745
|
case "key_down": {
|
|
7742
7746
|
inputs.keys.add(info.code);
|
|
7743
|
-
if (
|
|
7744
|
-
if (!
|
|
7745
|
-
this.
|
|
7746
|
-
|
|
7747
|
-
this.inputs.isPanning = true;
|
|
7748
|
-
this.inputs.isSpacebarPanning = true;
|
|
7749
|
-
clearTimeout(this._longPressTimeout);
|
|
7750
|
-
this.setCursor({ type: this.inputs.isPointing ? "grabbing" : "grab", rotation: 0 });
|
|
7751
|
-
}
|
|
7752
|
-
if (this.inputs.isSpacebarPanning) {
|
|
7753
|
-
let offset;
|
|
7754
|
-
switch (info.code) {
|
|
7755
|
-
case "ArrowUp": {
|
|
7756
|
-
offset = new import_Vec.Vec(0, -1);
|
|
7757
|
-
break;
|
|
7747
|
+
if (this.options.spacebarPanning) {
|
|
7748
|
+
if (info.code === "Space" && !info.ctrlKey) {
|
|
7749
|
+
if (!this.inputs.getIsPanning()) {
|
|
7750
|
+
this._prevCursor = instanceState.cursor.type;
|
|
7758
7751
|
}
|
|
7759
|
-
|
|
7760
|
-
|
|
7761
|
-
|
|
7762
|
-
|
|
7763
|
-
|
|
7764
|
-
|
|
7765
|
-
|
|
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
|
+
}
|
|
7766
7779
|
}
|
|
7767
|
-
|
|
7768
|
-
|
|
7769
|
-
|
|
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 } });
|
|
7770
7784
|
}
|
|
7771
7785
|
}
|
|
7772
|
-
if (offset) {
|
|
7773
|
-
const bounds = this.getViewportPageBounds();
|
|
7774
|
-
const next = bounds.clone().translate(offset.mulV({ x: bounds.w, y: bounds.h }));
|
|
7775
|
-
this._animateToViewport(next, { animation: { duration: 320 } });
|
|
7776
|
-
}
|
|
7777
7786
|
}
|
|
7778
7787
|
break;
|
|
7779
7788
|
}
|
|
7780
7789
|
case "key_up": {
|
|
7781
7790
|
inputs.keys.delete(info.code);
|
|
7782
|
-
if (
|
|
7783
|
-
if (
|
|
7784
|
-
|
|
7785
|
-
|
|
7786
|
-
|
|
7787
|
-
|
|
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
|
+
}
|
|
7788
7799
|
}
|
|
7789
7800
|
}
|
|
7790
7801
|
break;
|
|
@@ -7837,8 +7848,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
|
|
|
7837
7848
|
}
|
|
7838
7849
|
_init = __decoratorStart(_a);
|
|
7839
7850
|
__decorateElement(_init, 1, "getIsShapeHiddenCache", _getIsShapeHiddenCache_dec, Editor);
|
|
7840
|
-
__decorateElement(_init, 1, "
|
|
7841
|
-
__decorateElement(_init, 1, "
|
|
7851
|
+
__decorateElement(_init, 1, "canUndo", _canUndo_dec, Editor);
|
|
7852
|
+
__decorateElement(_init, 1, "canRedo", _canRedo_dec, Editor);
|
|
7842
7853
|
__decorateElement(_init, 1, "getPath", _getPath_dec, Editor);
|
|
7843
7854
|
__decorateElement(_init, 1, "getCurrentTool", _getCurrentTool_dec, Editor);
|
|
7844
7855
|
__decorateElement(_init, 1, "getCurrentToolId", _getCurrentToolId_dec, Editor);
|
|
@@ -7873,6 +7884,9 @@ __decorateElement(_init, 1, "getCamera", _getCamera_dec, Editor);
|
|
|
7873
7884
|
__decorateElement(_init, 1, "getViewportPageBoundsForFollowing", _getViewportPageBoundsForFollowing_dec, Editor);
|
|
7874
7885
|
__decorateElement(_init, 1, "getCameraForFollowing", _getCameraForFollowing_dec, Editor);
|
|
7875
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);
|
|
7876
7890
|
__decorateElement(_init, 1, "getViewportScreenBounds", _getViewportScreenBounds_dec, Editor);
|
|
7877
7891
|
__decorateElement(_init, 1, "getViewportScreenCenter", _getViewportScreenCenter_dec, Editor);
|
|
7878
7892
|
__decorateElement(_init, 1, "getViewportPageBounds", _getViewportPageBounds_dec, Editor);
|