@tldraw/editor 4.3.0-canary.9c474ef3fad5 → 4.3.0-canary.a2419250444e

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