@tldraw/editor 3.16.0-next.f9f54ec051f3 → 4.0.0

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 (221) hide show
  1. package/dist-cjs/index.d.ts +197 -114
  2. package/dist-cjs/index.js +5 -5
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +9 -9
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/components/MenuClickCapture.js +0 -5
  7. package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
  8. package/dist-cjs/lib/components/Shape.js +7 -10
  9. package/dist-cjs/lib/components/Shape.js.map +2 -2
  10. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +14 -23
  11. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  12. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +1 -1
  13. package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +1 -1
  14. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +1 -1
  15. package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
  16. package/dist-cjs/lib/components/default-components/DefaultScribble.js +1 -1
  17. package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +2 -2
  18. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +9 -1
  19. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  20. package/dist-cjs/lib/config/TLUserPreferences.js +21 -4
  21. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  22. package/dist-cjs/lib/editor/Editor.js +121 -138
  23. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  24. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +4 -0
  25. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +2 -2
  26. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +4 -2
  27. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +2 -2
  28. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +14 -4
  29. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  30. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +23 -0
  31. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  32. package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
  33. package/dist-cjs/lib/exports/getSvgJsx.js +35 -16
  34. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  35. package/dist-cjs/lib/hooks/useCanvasEvents.js +47 -38
  36. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  37. package/dist-cjs/lib/hooks/useDocumentEvents.js +5 -5
  38. package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
  39. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js +1 -2
  40. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
  41. package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
  42. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  43. package/dist-cjs/lib/hooks/useHandleEvents.js +6 -6
  44. package/dist-cjs/lib/hooks/useHandleEvents.js.map +2 -2
  45. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js +4 -1
  46. package/dist-cjs/lib/hooks/usePassThroughMouseOverEvents.js.map +2 -2
  47. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js +4 -1
  48. package/dist-cjs/lib/hooks/usePassThroughWheelEvents.js.map +2 -2
  49. package/dist-cjs/lib/hooks/useSelectionEvents.js +8 -8
  50. package/dist-cjs/lib/hooks/useSelectionEvents.js.map +2 -2
  51. package/dist-cjs/lib/{utils/nearestMultiple.js → hooks/useStateAttribute.js} +15 -14
  52. package/dist-cjs/lib/hooks/useStateAttribute.js.map +7 -0
  53. package/dist-cjs/lib/license/LicenseManager.js +143 -53
  54. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  55. package/dist-cjs/lib/license/LicenseProvider.js +39 -1
  56. package/dist-cjs/lib/license/LicenseProvider.js.map +2 -2
  57. package/dist-cjs/lib/license/Watermark.js +144 -75
  58. package/dist-cjs/lib/license/Watermark.js.map +3 -3
  59. package/dist-cjs/lib/license/useLicenseManagerState.js.map +2 -2
  60. package/dist-cjs/lib/options.js +7 -0
  61. package/dist-cjs/lib/options.js.map +2 -2
  62. package/dist-cjs/lib/primitives/Box.js +3 -0
  63. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  64. package/dist-cjs/lib/primitives/Vec.js +0 -4
  65. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  66. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +50 -20
  67. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  68. package/dist-cjs/lib/primitives/geometry/Group2d.js +8 -1
  69. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  70. package/dist-cjs/lib/utils/EditorAtom.js +45 -0
  71. package/dist-cjs/lib/utils/EditorAtom.js.map +7 -0
  72. package/dist-cjs/lib/utils/dom.js.map +2 -2
  73. package/dist-cjs/lib/utils/getPointerInfo.js +2 -3
  74. package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
  75. package/dist-cjs/lib/utils/reparenting.js +7 -36
  76. package/dist-cjs/lib/utils/reparenting.js.map +3 -3
  77. package/dist-cjs/version.js +4 -4
  78. package/dist-cjs/version.js.map +1 -1
  79. package/dist-esm/index.d.mts +197 -114
  80. package/dist-esm/index.mjs +5 -5
  81. package/dist-esm/index.mjs.map +2 -2
  82. package/dist-esm/lib/TldrawEditor.mjs +9 -9
  83. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  84. package/dist-esm/lib/components/MenuClickCapture.mjs +0 -5
  85. package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
  86. package/dist-esm/lib/components/Shape.mjs +7 -10
  87. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  88. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +14 -23
  89. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  90. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +1 -1
  91. package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +1 -1
  92. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +1 -1
  93. package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
  94. package/dist-esm/lib/components/default-components/DefaultScribble.mjs +1 -1
  95. package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +2 -2
  96. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +9 -1
  97. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  98. package/dist-esm/lib/config/TLUserPreferences.mjs +21 -4
  99. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  100. package/dist-esm/lib/editor/Editor.mjs +121 -138
  101. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  102. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +4 -0
  103. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +2 -2
  104. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +4 -2
  105. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +2 -2
  106. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +14 -4
  107. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  108. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +23 -0
  109. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  110. package/dist-esm/lib/exports/getSvgJsx.mjs +36 -16
  111. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  112. package/dist-esm/lib/hooks/useCanvasEvents.mjs +49 -45
  113. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  114. package/dist-esm/lib/hooks/useDocumentEvents.mjs +6 -6
  115. package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
  116. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +1 -2
  117. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  118. package/dist-esm/lib/hooks/useGestureEvents.mjs +2 -2
  119. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  120. package/dist-esm/lib/hooks/useHandleEvents.mjs +6 -6
  121. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +2 -2
  122. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs +4 -1
  123. package/dist-esm/lib/hooks/usePassThroughMouseOverEvents.mjs.map +2 -2
  124. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs +4 -1
  125. package/dist-esm/lib/hooks/usePassThroughWheelEvents.mjs.map +2 -2
  126. package/dist-esm/lib/hooks/useSelectionEvents.mjs +9 -14
  127. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +2 -2
  128. package/dist-esm/lib/hooks/useStateAttribute.mjs +15 -0
  129. package/dist-esm/lib/hooks/useStateAttribute.mjs.map +7 -0
  130. package/dist-esm/lib/license/LicenseManager.mjs +144 -54
  131. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  132. package/dist-esm/lib/license/LicenseProvider.mjs +39 -2
  133. package/dist-esm/lib/license/LicenseProvider.mjs.map +2 -2
  134. package/dist-esm/lib/license/Watermark.mjs +145 -76
  135. package/dist-esm/lib/license/Watermark.mjs.map +3 -3
  136. package/dist-esm/lib/license/useLicenseManagerState.mjs.map +2 -2
  137. package/dist-esm/lib/options.mjs +7 -0
  138. package/dist-esm/lib/options.mjs.map +2 -2
  139. package/dist-esm/lib/primitives/Box.mjs +4 -1
  140. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  141. package/dist-esm/lib/primitives/Vec.mjs +0 -4
  142. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  143. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +53 -21
  144. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  145. package/dist-esm/lib/primitives/geometry/Group2d.mjs +8 -1
  146. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  147. package/dist-esm/lib/utils/EditorAtom.mjs +25 -0
  148. package/dist-esm/lib/utils/EditorAtom.mjs.map +7 -0
  149. package/dist-esm/lib/utils/dom.mjs.map +2 -2
  150. package/dist-esm/lib/utils/getPointerInfo.mjs +2 -3
  151. package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
  152. package/dist-esm/lib/utils/reparenting.mjs +8 -41
  153. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  154. package/dist-esm/version.mjs +4 -4
  155. package/dist-esm/version.mjs.map +1 -1
  156. package/editor.css +308 -290
  157. package/package.json +14 -37
  158. package/src/index.ts +4 -9
  159. package/src/lib/TldrawEditor.tsx +14 -21
  160. package/src/lib/components/MenuClickCapture.tsx +0 -8
  161. package/src/lib/components/Shape.tsx +6 -12
  162. package/src/lib/components/default-components/DefaultCanvas.tsx +11 -22
  163. package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +1 -1
  164. package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -1
  165. package/src/lib/components/default-components/DefaultScribble.tsx +1 -1
  166. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +5 -1
  167. package/src/lib/config/TLUserPreferences.ts +21 -1
  168. package/src/lib/editor/Editor.test.ts +102 -11
  169. package/src/lib/editor/Editor.ts +165 -198
  170. package/src/lib/editor/derivations/notVisibleShapes.ts +6 -0
  171. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +15 -14
  172. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +16 -15
  173. package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +49 -48
  174. package/src/lib/editor/managers/FocusManager/FocusManager.ts +6 -2
  175. package/src/lib/editor/managers/FontManager/FontManager.test.ts +24 -23
  176. package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +7 -6
  177. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +12 -11
  178. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +57 -50
  179. package/src/lib/editor/managers/TextManager/TextManager.test.ts +51 -26
  180. package/src/lib/editor/managers/TickManager/TickManager.test.ts +14 -13
  181. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +56 -26
  182. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +13 -1
  183. package/src/lib/editor/shapes/ShapeUtil.ts +46 -0
  184. package/src/lib/editor/types/misc-types.ts +54 -7
  185. package/src/lib/exports/getSvgJsx.test.ts +868 -0
  186. package/src/lib/exports/getSvgJsx.tsx +78 -21
  187. package/src/lib/hooks/useCanvasEvents.ts +62 -55
  188. package/src/lib/hooks/useDocumentEvents.ts +6 -6
  189. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
  190. package/src/lib/hooks/useGestureEvents.ts +2 -2
  191. package/src/lib/hooks/useHandleEvents.ts +6 -6
  192. package/src/lib/hooks/usePassThroughMouseOverEvents.ts +4 -1
  193. package/src/lib/hooks/usePassThroughWheelEvents.ts +6 -1
  194. package/src/lib/hooks/useSelectionEvents.ts +9 -14
  195. package/src/lib/hooks/useStateAttribute.ts +15 -0
  196. package/src/lib/license/LicenseManager.test.ts +724 -383
  197. package/src/lib/license/LicenseManager.ts +204 -58
  198. package/src/lib/license/LicenseProvider.tsx +74 -2
  199. package/src/lib/license/Watermark.test.tsx +2 -1
  200. package/src/lib/license/Watermark.tsx +152 -77
  201. package/src/lib/license/useLicenseManagerState.ts +2 -2
  202. package/src/lib/options.ts +8 -0
  203. package/src/lib/primitives/Box.test.ts +126 -0
  204. package/src/lib/primitives/Box.ts +10 -1
  205. package/src/lib/primitives/Vec.ts +0 -5
  206. package/src/lib/primitives/geometry/Geometry2d.test.ts +420 -0
  207. package/src/lib/primitives/geometry/Geometry2d.ts +78 -21
  208. package/src/lib/primitives/geometry/Group2d.ts +10 -1
  209. package/src/lib/test/InFrontOfTheCanvas.test.tsx +187 -0
  210. package/src/lib/utils/EditorAtom.ts +37 -0
  211. package/src/lib/utils/dom.test.ts +103 -0
  212. package/src/lib/utils/dom.ts +8 -1
  213. package/src/lib/utils/getPointerInfo.ts +3 -2
  214. package/src/lib/utils/reparenting.ts +10 -70
  215. package/src/lib/utils/sync/LocalIndexedDb.test.ts +2 -1
  216. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +15 -15
  217. package/src/version.ts +4 -4
  218. package/dist-cjs/lib/utils/nearestMultiple.js.map +0 -7
  219. package/dist-esm/lib/utils/nearestMultiple.mjs +0 -14
  220. package/dist-esm/lib/utils/nearestMultiple.mjs.map +0 -7
  221. package/src/lib/utils/nearestMultiple.ts +0 -13
@@ -88,7 +88,6 @@ var import_defaultShapes = require("../config/defaultShapes");
88
88
  var import_constants = require("../constants");
89
89
  var import_exportToSvg = require("../exports/exportToSvg");
90
90
  var import_getSvgAsImage = require("../exports/getSvgAsImage");
91
- var import_environment = require("../globals/environment");
92
91
  var import_menus = require("../globals/menus");
93
92
  var import_time = require("../globals/time");
94
93
  var import_options = require("../options");
@@ -123,8 +122,8 @@ var import_TextManager = require("./managers/TextManager/TextManager");
123
122
  var import_TickManager = require("./managers/TickManager/TickManager");
124
123
  var import_UserPreferencesManager = require("./managers/UserPreferencesManager/UserPreferencesManager");
125
124
  var import_RootState = require("./tools/RootState");
126
- 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, _getIsMenuOpen_dec, _getOpenMenus_dec, _getInstanceState_dec, _getDocumentSettings_dec, _getCurrentToolId_dec, _getCurrentTool_dec, _getPath_dec, _getCanRedo_dec, _getCanUndo_dec, _getIsShapeHiddenCache_dec, _a, _init;
127
- class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_dec = [import_state.computed], _getCanUndo_dec = [import_state.computed], _getCanRedo_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], _getOpenMenus_dec = [import_state.computed], _getIsMenuOpen_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], _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) {
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, _getCanRedo_dec, _getCanUndo_dec, _getIsShapeHiddenCache_dec, _a, _init;
126
+ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_dec = [import_state.computed], _getCanUndo_dec = [import_state.computed], _getCanRedo_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], _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) {
128
127
  constructor({
129
128
  store,
130
129
  user,
@@ -138,8 +137,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
138
137
  autoFocus,
139
138
  inferDarkMode,
140
139
  options,
141
- // eslint-disable-next-line @typescript-eslint/no-deprecated
142
- isShapeHidden,
143
140
  getShapeVisibility,
144
141
  fontAssetUrls
145
142
  }) {
@@ -206,13 +203,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
206
203
  * @public
207
204
  */
208
205
  __publicField(this, "fonts");
209
- /**
210
- * A manager for the editor's environment.
211
- *
212
- * @deprecated This is deprecated and will be removed in a future version. Use the `tlenv` global export instead.
213
- * @public
214
- */
215
- __publicField(this, "environment", import_environment.tlenv);
216
206
  /**
217
207
  * A manager for the editor's scribbles.
218
208
  *
@@ -414,15 +404,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
414
404
  __publicField(this, "performanceTracker");
415
405
  /** @internal */
416
406
  __publicField(this, "performanceTrackerTimeout", -1);
407
+ /** @internal */
408
+ __publicField(this, "handledEvents", /* @__PURE__ */ new WeakSet());
417
409
  __publicField(this, "_pendingEventsForNextTick", []);
418
- (0, import_utils.assert)(
419
- !(isShapeHidden && getShapeVisibility),
420
- "Cannot use both isShapeHidden and getShapeVisibility"
421
- );
422
- this._getShapeVisibility = isShapeHidden ? (
423
- // eslint-disable-next-line @typescript-eslint/no-deprecated
424
- (shape, editor) => isShapeHidden(shape, editor) ? "hidden" : "inherit"
425
- ) : getShapeVisibility;
410
+ this._getShapeVisibility = getShapeVisibility;
426
411
  this.options = { ...import_options.defaultTldrawOptions, ...options };
427
412
  this.store = store;
428
413
  this.history = new import_HistoryManager.HistoryManager({
@@ -448,6 +433,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
448
433
  }
449
434
  this.root = new NewRoot(this);
450
435
  this.root.children = {};
436
+ this.markEventAsHandled = this.markEventAsHandled.bind(this);
451
437
  const allShapeUtils = (0, import_defaultShapes.checkShapesAndAddCore)(shapeUtils);
452
438
  const _shapeUtils = {};
453
439
  const _styleProps = {};
@@ -902,34 +888,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
902
888
  getCanRedo() {
903
889
  return this.history.getNumRedos() > 0;
904
890
  }
905
- /**
906
- * Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
907
- * any redos.
908
- *
909
- * @example
910
- * ```ts
911
- * editor.mark()
912
- * editor.mark('flip shapes')
913
- * ```
914
- *
915
- * @param markId - The mark's id, usually the reason for adding the mark.
916
- *
917
- * @public
918
- * @deprecated use {@link Editor.markHistoryStoppingPoint} instead
919
- */
920
- mark(markId) {
921
- if (typeof markId === "string") {
922
- console.warn(
923
- `[tldraw] \`editor.history.mark("${markId}")\` is deprecated. Please use \`const myMarkId = editor.markHistoryStoppingPoint()\` instead.`
924
- );
925
- } else {
926
- console.warn(
927
- "[tldraw] `editor.mark()` is deprecated. Use `editor.markHistoryStoppingPoint()` instead."
928
- );
929
- }
930
- this.history._mark(markId ?? (0, import_utils.uniqueId)());
931
- return this;
932
- }
933
891
  /**
934
892
  * Create a new "mark", or stopping point, in the undo redo history. Creating a mark will clear
935
893
  * any redos. You typically want to do this just before a user interaction begins or is handled.
@@ -1045,12 +1003,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
1045
1003
  }
1046
1004
  return this;
1047
1005
  }
1048
- /**
1049
- * @deprecated Use `Editor.run` instead.
1050
- */
1051
- batch(fn, opts) {
1052
- return this.run(fn, opts);
1053
- }
1054
1006
  /* --------------------- Errors --------------------- */
1055
1007
  /** @internal */
1056
1008
  annotateError(error, {
@@ -1272,39 +1224,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
1272
1224
  ]);
1273
1225
  }, opts);
1274
1226
  }
1275
- getOpenMenus() {
1276
- return this.menus.getOpenMenus();
1277
- }
1278
- /**
1279
- * @deprecated Use `editor.menus.addOpenMenu` instead.
1280
- *
1281
- * @public
1282
- */
1283
- addOpenMenu(id) {
1284
- this.menus.addOpenMenu(id);
1285
- return this;
1286
- }
1287
- /**
1288
- * @deprecated Use `editor.menus.deleteOpenMenu` instead.
1289
- *
1290
- * @public
1291
- */
1292
- deleteOpenMenu(id) {
1293
- this.menus.deleteOpenMenu(id);
1294
- return this;
1295
- }
1296
- /**
1297
- * @deprecated Use `editor.menus.clearOpenMenus` instead.
1298
- *
1299
- * @public
1300
- */
1301
- clearOpenMenus() {
1302
- this.menus.clearOpenMenus();
1303
- return this;
1304
- }
1305
- getIsMenuOpen() {
1306
- return this.menus.hasAnyOpenMenus();
1307
- }
1308
1227
  /* --------------------- Cursor --------------------- */
1309
1228
  /**
1310
1229
  * Set the cursor.
@@ -3612,8 +3531,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3612
3531
  return this.store.createComputedCache("pageBoundsCache", (shape) => {
3613
3532
  const pageTransform = this.getShapePageTransform(shape);
3614
3533
  if (!pageTransform) return void 0;
3615
- const geometry = this.getShapeGeometry(shape);
3616
- return import_Box.Box.FromPoints(pageTransform.applyToPoints(geometry.vertices));
3534
+ return import_Box.Box.FromPoints(
3535
+ pageTransform.applyToPoints(this.getShapeGeometry(shape).boundsVertices)
3536
+ );
3617
3537
  });
3618
3538
  }
3619
3539
  /**
@@ -3666,16 +3586,17 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3666
3586
  _getShapeMaskCache() {
3667
3587
  return this.store.createComputedCache("pageMaskCache", (shape) => {
3668
3588
  if ((0, import_tlschema.isPageId)(shape.parentId)) return void 0;
3669
- const frameAncestors = this.getShapeAncestors(shape.id).filter(
3670
- (shape2) => this.isShapeOfType(shape2, "frame")
3671
- );
3672
- if (frameAncestors.length === 0) return void 0;
3673
- const pageMask = frameAncestors.map((s) => {
3674
- const geometry = this.getShapeGeometry(s.id);
3675
- const pageTransform = this.getShapePageTransform(s.id);
3676
- return pageTransform.applyToPoints(geometry.vertices);
3677
- }).reduce((acc, b) => {
3678
- if (!(b && acc)) return void 0;
3589
+ const clipPaths = [];
3590
+ for (const ancestor of this.getShapeAncestors(shape.id)) {
3591
+ const util = this.getShapeUtil(ancestor);
3592
+ const clipPath = util.getClipPath?.(ancestor);
3593
+ if (!clipPath) continue;
3594
+ if (util.shouldClipChild?.(shape) === false) continue;
3595
+ const pageTransform = this.getShapePageTransform(ancestor.id);
3596
+ clipPaths.push(pageTransform.applyToPoints(clipPath));
3597
+ }
3598
+ if (clipPaths.length === 0) return void 0;
3599
+ const pageMask = clipPaths.reduce((acc, b) => {
3679
3600
  const intersection = (0, import_intersect.intersectPolygonPolygon)(acc, b);
3680
3601
  if (intersection) {
3681
3602
  return intersection.map(import_Vec.Vec.Cast);
@@ -3910,6 +3831,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3910
3831
  hitInside = false,
3911
3832
  hitFrameInside = false
3912
3833
  } = opts;
3834
+ const [innerMargin, outerMargin] = Array.isArray(margin) ? margin : [margin, margin];
3913
3835
  let inHollowSmallestArea = Infinity;
3914
3836
  let inHollowSmallestAreaHit = null;
3915
3837
  let inMarginClosestToEdgeDistance = Infinity;
@@ -3919,7 +3841,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3919
3841
  return false;
3920
3842
  const pageMask = this.getShapeMask(shape);
3921
3843
  if (pageMask && !(0, import_utils2.pointInPolygon)(point, pageMask)) return false;
3922
- if (filter) return filter(shape);
3844
+ if (filter && !filter(shape)) return false;
3923
3845
  return true;
3924
3846
  });
3925
3847
  for (let i = shapesToCheck.length - 1; i >= 0; i--) {
@@ -3935,8 +3857,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3935
3857
  }
3936
3858
  }
3937
3859
  if (this.isShapeOfType(shape, "frame")) {
3938
- const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitInside);
3939
- if (Math.abs(distance2) <= margin) {
3860
+ const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitFrameInside);
3861
+ if (hitFrameInside ? distance2 > 0 && distance2 <= outerMargin || distance2 <= 0 && distance2 > -innerMargin : distance2 > 0 && distance2 <= outerMargin) {
3940
3862
  return inMarginClosestToEdgeHit || shape;
3941
3863
  }
3942
3864
  if (geometry.hitTestPoint(pointInShapeSpace, 0, true)) {
@@ -3956,10 +3878,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3956
3878
  }
3957
3879
  distance = minDistance;
3958
3880
  } else {
3959
- if (margin === 0 && (geometry.bounds.w < 1 || geometry.bounds.h < 1)) {
3881
+ if (outerMargin === 0 && (geometry.bounds.w < 1 || geometry.bounds.h < 1)) {
3960
3882
  distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
3961
3883
  } else {
3962
- if (geometry.bounds.containsPoint(pointInShapeSpace, margin)) {
3884
+ if (geometry.bounds.containsPoint(pointInShapeSpace, outerMargin)) {
3963
3885
  distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
3964
3886
  } else {
3965
3887
  distance = Infinity;
@@ -3967,12 +3889,22 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3967
3889
  }
3968
3890
  }
3969
3891
  if (geometry.isClosed) {
3970
- if (distance <= margin) {
3892
+ if (distance <= outerMargin || hitInside && distance <= 0 && distance > -innerMargin) {
3971
3893
  if (geometry.isFilled || isGroup && geometry.children[0].isFilled) {
3972
3894
  return inMarginClosestToEdgeHit || shape;
3973
3895
  } else {
3974
3896
  if (this.getShapePageBounds(shape).contains(viewportPageBounds)) continue;
3975
- if (Math.abs(distance) < margin) {
3897
+ if (hitInside ? (
3898
+ // On hitInside, the distance will be negative for hits inside
3899
+ // If the distance is positive, check against the outer margin
3900
+ distance > 0 && distance <= outerMargin || // If the distance is negative, check against the inner margin
3901
+ distance <= 0 && distance > -innerMargin
3902
+ ) : (
3903
+ // If hitInside is false, then sadly _we do not know_ whether the
3904
+ // point is inside or outside of the shape, so we check against
3905
+ // the max of the two margins
3906
+ Math.abs(distance) <= Math.max(innerMargin, outerMargin)
3907
+ )) {
3976
3908
  if (Math.abs(distance) < inMarginClosestToEdgeDistance) {
3977
3909
  inMarginClosestToEdgeDistance = Math.abs(distance);
3978
3910
  inMarginClosestToEdgeHit = shape;
@@ -4362,10 +4294,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
4362
4294
  }
4363
4295
  return shapeIds;
4364
4296
  }
4365
- /** @deprecated Use {@link Editor.getDraggingOverShape} instead */
4366
- getDroppingOverShape(point, droppingShapes) {
4367
- return this.getDraggingOverShape(point, droppingShapes);
4368
- }
4369
4297
  /**
4370
4298
  * Get the shape that some shapes should be dropped on at a given point.
4371
4299
  *
@@ -4737,7 +4665,16 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
4737
4665
  }
4738
4666
  this.createShapes(shapesToCreate);
4739
4667
  this.createBindings(bindingsToCreate);
4740
- this.setSelectedShapes((0, import_utils.compact)(ids.map((id) => shapeIds.get(id))));
4668
+ this.setSelectedShapes(
4669
+ (0, import_utils.compact)(
4670
+ ids.map((oldId) => {
4671
+ const newId = shapeIds.get(oldId);
4672
+ if (!newId) return null;
4673
+ if (!this.getShape(newId)) return null;
4674
+ return newId;
4675
+ })
4676
+ )
4677
+ );
4741
4678
  if (offset !== void 0) {
4742
4679
  const selectionPageBounds = this.getSelectionPageBounds();
4743
4680
  const viewportPageBounds = this.getViewportPageBounds();
@@ -5491,8 +5428,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
5491
5428
  const shapesMovingTogether = [shape];
5492
5429
  const boundsOfShapesMovingTogether = [shapePageBounds];
5493
5430
  if (!this.getShapeUtil(shape).canBeLaidOut?.(shape, {
5494
- type: "stretch",
5495
- shapes: shapesToStretchFirstPass
5431
+ type: "stretch"
5496
5432
  })) {
5497
5433
  continue;
5498
5434
  }
@@ -5817,21 +5753,24 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
5817
5753
  }
5818
5754
  if (!partial.parentId || !(this.store.has(partial.parentId) || shapes.some((p) => p.id === partial.parentId))) {
5819
5755
  let parentId = this.getFocusedGroupId();
5820
- for (let i = currentPageShapesSorted.length - 1; i >= 0; i--) {
5821
- const parent = currentPageShapesSorted[i];
5822
- const util = this.getShapeUtil(parent);
5823
- if (util.canReceiveNewChildrenOfType(parent, partial.type) && !this.isShapeHidden(parent) && this.isPointInShape(
5824
- parent,
5825
- // If no parent is provided, then we can treat the
5826
- // shape's provided x/y as being in the page's space.
5827
- { x: partial.x ?? 0, y: partial.y ?? 0 },
5828
- {
5829
- margin: 0,
5830
- hitInside: true
5756
+ const isPositioned = partial.x !== void 0 && partial.y !== void 0;
5757
+ if (isPositioned) {
5758
+ for (let i = currentPageShapesSorted.length - 1; i >= 0; i--) {
5759
+ const parent = currentPageShapesSorted[i];
5760
+ const util = this.getShapeUtil(parent);
5761
+ if (util.canReceiveNewChildrenOfType(parent, partial.type) && !this.isShapeHidden(parent) && this.isPointInShape(
5762
+ parent,
5763
+ // If no parent is provided, then we can treat the
5764
+ // shape's provided x/y as being in the page's space.
5765
+ { x: partial.x ?? 0, y: partial.y ?? 0 },
5766
+ {
5767
+ margin: 0,
5768
+ hitInside: true
5769
+ }
5770
+ )) {
5771
+ parentId = parent.id;
5772
+ break;
5831
5773
  }
5832
- )) {
5833
- parentId = parent.id;
5834
- break;
5835
5774
  }
5836
5775
  }
5837
5776
  const prevParentId = partial.parentId;
@@ -6502,16 +6441,20 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
6502
6441
  * Handle external content, such as files, urls, embeds, or plain text which has been put into the app, for example by pasting external text or dropping external images onto canvas.
6503
6442
  *
6504
6443
  * @param info - Info about the external content.
6444
+ * @param opts - Options for handling external content, including force flag to bypass readonly checks.
6505
6445
  */
6506
- async putExternalContent(info) {
6446
+ async putExternalContent(info, opts = {}) {
6447
+ if (!opts.force && this.getIsReadonly()) return;
6507
6448
  return this.externalContentHandlers[info.type]?.(info);
6508
6449
  }
6509
6450
  /**
6510
6451
  * Handle replacing external content.
6511
6452
  *
6512
6453
  * @param info - Info about the external content.
6454
+ * @param opts - Options for handling external content, including force flag to bypass readonly checks.
6513
6455
  */
6514
- async replaceExternalContent(info) {
6456
+ async replaceExternalContent(info, opts = {}) {
6457
+ if (!opts.force && this.getIsReadonly()) return;
6515
6458
  return this.externalContentHandlers[info.type]?.(info);
6516
6459
  }
6517
6460
  /**
@@ -6865,12 +6808,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
6865
6808
  height: result.height
6866
6809
  };
6867
6810
  }
6868
- /** @deprecated Use {@link Editor.getSvgString} or {@link Editor.getSvgElement} instead. */
6869
- async getSvg(shapes, opts = {}) {
6870
- const result = await this.getSvgElement(shapes, opts);
6871
- if (!result) return void 0;
6872
- return result.svg;
6873
- }
6874
6811
  /**
6875
6812
  * Get an exported image of the given shapes.
6876
6813
  *
@@ -6920,6 +6857,23 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
6920
6857
  }
6921
6858
  }
6922
6859
  }
6860
+ /**
6861
+ * Get an exported image of the given shapes as a data URL.
6862
+ *
6863
+ * @param shapes - The shapes (or shape ids) to export.
6864
+ * @param opts - Options for the export.
6865
+ *
6866
+ * @returns A data URL of the image.
6867
+ * @public
6868
+ */
6869
+ async toImageDataUrl(shapes, opts = {}) {
6870
+ const { blob, width, height } = await this.toImage(shapes, opts);
6871
+ return {
6872
+ url: await import_utils.FileHelpers.blobToDataUrl(blob),
6873
+ width,
6874
+ height
6875
+ };
6876
+ }
6923
6877
  /**
6924
6878
  * Update the input points from a pointer, pinch, or wheel event.
6925
6879
  *
@@ -7420,6 +7374,32 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7420
7374
  code: "MetaLeft"
7421
7375
  });
7422
7376
  }
7377
+ /**
7378
+ * In tldraw, events are sometimes handled by multiple components. For example, the shapes might
7379
+ * have events, but the canvas handles events too. The way that the canvas handles events can
7380
+ * interfere with the with the shapes event handlers - for example, it calls `.preventDefault()`
7381
+ * on `pointerDown`, which also prevents `click` events from firing on the shapes.
7382
+ *
7383
+ * You can use `.stopPropagation()` to prevent the event from propagating to the rest of the
7384
+ * DOM, but that can impact non-tldraw event handlers set up elsewhere. By using
7385
+ * `markEventAsHandled`, you'll stop other parts of tldraw from handling the event without
7386
+ * impacting other, non-tldraw event handlers. See also {@link Editor.wasEventAlreadyHandled}.
7387
+ *
7388
+ * @public
7389
+ */
7390
+ markEventAsHandled(e) {
7391
+ const nativeEvent = "nativeEvent" in e ? e.nativeEvent : e;
7392
+ this.handledEvents.add(nativeEvent);
7393
+ }
7394
+ /**
7395
+ * Checks if an event has already been handled. See {@link Editor.markEventAsHandled}.
7396
+ *
7397
+ * @public
7398
+ */
7399
+ wasEventAlreadyHandled(e) {
7400
+ const nativeEvent = "nativeEvent" in e ? e.nativeEvent : e;
7401
+ return this.handledEvents.has(nativeEvent);
7402
+ }
7423
7403
  /**
7424
7404
  * Dispatch an event to the editor.
7425
7405
  *
@@ -7575,7 +7555,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7575
7555
  case "wheel": {
7576
7556
  if (cameraOptions.isLocked) return;
7577
7557
  this._updateInputsFromEvent(info);
7578
- const { panSpeed, zoomSpeed, wheelBehavior } = cameraOptions;
7558
+ const { panSpeed, zoomSpeed } = cameraOptions;
7559
+ let wheelBehavior = cameraOptions.wheelBehavior;
7560
+ const inputMode = this.user.getUserPreferences().inputMode;
7561
+ if (inputMode !== null) {
7562
+ wheelBehavior = inputMode === "trackpad" ? "pan" : "zoom";
7563
+ }
7579
7564
  if (wheelBehavior !== "none") {
7580
7565
  this.stopCameraAnimation();
7581
7566
  if (instanceState.followingUserId) {
@@ -7834,8 +7819,6 @@ __decorateElement(_init, 1, "getCurrentTool", _getCurrentTool_dec, Editor);
7834
7819
  __decorateElement(_init, 1, "getCurrentToolId", _getCurrentToolId_dec, Editor);
7835
7820
  __decorateElement(_init, 1, "getDocumentSettings", _getDocumentSettings_dec, Editor);
7836
7821
  __decorateElement(_init, 1, "getInstanceState", _getInstanceState_dec, Editor);
7837
- __decorateElement(_init, 1, "getOpenMenus", _getOpenMenus_dec, Editor);
7838
- __decorateElement(_init, 1, "getIsMenuOpen", _getIsMenuOpen_dec, Editor);
7839
7822
  __decorateElement(_init, 1, "getPageStates", _getPageStates_dec, Editor);
7840
7823
  __decorateElement(_init, 1, "_getPageStatesQuery", __getPageStatesQuery_dec, Editor);
7841
7824
  __decorateElement(_init, 1, "getCurrentPageState", _getCurrentPageState_dec, Editor);