@tldraw/editor 3.14.0-canary.fd2ad122b803 → 3.14.0-canary.fe38dba85730

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 (242) hide show
  1. package/dist-cjs/index.d.ts +220 -117
  2. package/dist-cjs/index.js +11 -8
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/config/TLSessionStateSnapshot.js +1 -12
  5. package/dist-cjs/lib/config/TLSessionStateSnapshot.js.map +3 -3
  6. package/dist-cjs/lib/editor/Editor.js +132 -101
  7. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  8. package/dist-cjs/lib/editor/bindings/BindingUtil.js.map +2 -2
  9. package/dist-cjs/lib/editor/derivations/bindingsIndex.js +22 -22
  10. package/dist-cjs/lib/editor/derivations/bindingsIndex.js.map +2 -2
  11. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js +16 -20
  12. package/dist-cjs/lib/editor/derivations/notVisibleShapes.js.map +3 -3
  13. package/dist-cjs/lib/editor/derivations/parentsToChildren.js +16 -16
  14. package/dist-cjs/lib/editor/derivations/parentsToChildren.js.map +2 -2
  15. package/dist-cjs/lib/editor/managers/{ClickManager.js → ClickManager/ClickManager.js} +1 -1
  16. package/dist-cjs/lib/editor/managers/ClickManager/ClickManager.js.map +7 -0
  17. package/dist-cjs/lib/editor/managers/{EdgeScrollManager.js → EdgeScrollManager/EdgeScrollManager.js} +2 -2
  18. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +7 -0
  19. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +7 -0
  20. package/dist-cjs/lib/editor/managers/{FontManager.js → FontManager/FontManager.js} +4 -1
  21. package/dist-cjs/lib/editor/managers/FontManager/FontManager.js.map +7 -0
  22. package/dist-cjs/lib/editor/managers/{HistoryManager.js → HistoryManager/HistoryManager.js} +67 -7
  23. package/dist-cjs/lib/editor/managers/HistoryManager/HistoryManager.js.map +7 -0
  24. package/dist-cjs/lib/editor/managers/{ScribbleManager.js → ScribbleManager/ScribbleManager.js} +1 -1
  25. package/dist-cjs/lib/editor/managers/ScribbleManager/ScribbleManager.js.map +7 -0
  26. package/dist-cjs/lib/editor/managers/{TextManager.js → TextManager/TextManager.js} +73 -42
  27. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +7 -0
  28. package/dist-cjs/lib/editor/managers/{TickManager.js → TickManager/TickManager.js} +1 -1
  29. package/dist-cjs/lib/editor/managers/TickManager/TickManager.js.map +7 -0
  30. package/dist-cjs/lib/editor/managers/{UserPreferencesManager.js → UserPreferencesManager/UserPreferencesManager.js} +1 -1
  31. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +7 -0
  32. package/dist-cjs/lib/editor/shapes/ShapeUtil.js +8 -10
  33. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  34. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +6 -0
  35. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +2 -2
  36. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js +10 -6
  37. package/dist-cjs/lib/editor/tools/BaseBoxShapeTool/children/Pointing.js.map +3 -3
  38. package/dist-cjs/lib/editor/tools/StateNode.js +3 -3
  39. package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
  40. package/dist-cjs/lib/editor/types/emit-types.js.map +1 -1
  41. package/dist-cjs/lib/editor/types/external-content.js.map +1 -1
  42. package/dist-cjs/lib/exports/getSvgJsx.js.map +1 -1
  43. package/dist-cjs/lib/hooks/useCanvasEvents.js +1 -2
  44. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  45. package/dist-cjs/lib/primitives/Box.js +33 -33
  46. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  47. package/dist-cjs/lib/primitives/Vec.js +13 -8
  48. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  49. package/dist-cjs/lib/primitives/geometry/Arc2d.js +41 -21
  50. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  51. package/dist-cjs/lib/primitives/geometry/Circle2d.js +11 -11
  52. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
  53. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +13 -16
  54. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
  55. package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js +4 -4
  56. package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js.map +2 -2
  57. package/dist-cjs/lib/primitives/geometry/Edge2d.js +14 -17
  58. package/dist-cjs/lib/primitives/geometry/Edge2d.js.map +2 -2
  59. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +10 -10
  60. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
  61. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +6 -2
  62. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  63. package/dist-cjs/lib/primitives/geometry/Point2d.js +6 -6
  64. package/dist-cjs/lib/primitives/geometry/Point2d.js.map +2 -2
  65. package/dist-cjs/lib/primitives/geometry/Polygon2d.js +3 -0
  66. package/dist-cjs/lib/primitives/geometry/Polygon2d.js.map +2 -2
  67. package/dist-cjs/lib/primitives/geometry/Polyline2d.js +8 -5
  68. package/dist-cjs/lib/primitives/geometry/Polyline2d.js.map +2 -2
  69. package/dist-cjs/lib/primitives/geometry/Rectangle2d.js +22 -11
  70. package/dist-cjs/lib/primitives/geometry/Rectangle2d.js.map +2 -2
  71. package/dist-cjs/lib/primitives/geometry/Stadium2d.js +22 -22
  72. package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +2 -2
  73. package/dist-cjs/lib/utils/reorderShapes.js +11 -10
  74. package/dist-cjs/lib/utils/reorderShapes.js.map +2 -2
  75. package/dist-cjs/lib/utils/reparenting.js +232 -0
  76. package/dist-cjs/lib/utils/reparenting.js.map +7 -0
  77. package/dist-cjs/lib/utils/richText.js +7 -2
  78. package/dist-cjs/lib/utils/richText.js.map +2 -2
  79. package/dist-cjs/version.js +3 -3
  80. package/dist-cjs/version.js.map +1 -1
  81. package/dist-esm/index.d.mts +220 -117
  82. package/dist-esm/index.mjs +15 -8
  83. package/dist-esm/index.mjs.map +2 -2
  84. package/dist-esm/lib/config/TLSessionStateSnapshot.mjs +1 -1
  85. package/dist-esm/lib/config/TLSessionStateSnapshot.mjs.map +2 -2
  86. package/dist-esm/lib/editor/Editor.mjs +132 -101
  87. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  88. package/dist-esm/lib/editor/bindings/BindingUtil.mjs.map +2 -2
  89. package/dist-esm/lib/editor/derivations/bindingsIndex.mjs +22 -22
  90. package/dist-esm/lib/editor/derivations/bindingsIndex.mjs.map +2 -2
  91. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs +16 -20
  92. package/dist-esm/lib/editor/derivations/notVisibleShapes.mjs.map +3 -3
  93. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs +16 -16
  94. package/dist-esm/lib/editor/derivations/parentsToChildren.mjs.map +2 -2
  95. package/dist-esm/lib/editor/managers/{ClickManager.mjs → ClickManager/ClickManager.mjs} +1 -1
  96. package/dist-esm/lib/editor/managers/ClickManager/ClickManager.mjs.map +7 -0
  97. package/dist-esm/lib/editor/managers/{EdgeScrollManager.mjs → EdgeScrollManager/EdgeScrollManager.mjs} +2 -2
  98. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +7 -0
  99. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +7 -0
  100. package/dist-esm/lib/editor/managers/{FontManager.mjs → FontManager/FontManager.mjs} +4 -1
  101. package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs.map +7 -0
  102. package/dist-esm/lib/editor/managers/{HistoryManager.mjs → HistoryManager/HistoryManager.mjs} +63 -3
  103. package/dist-esm/lib/editor/managers/HistoryManager/HistoryManager.mjs.map +7 -0
  104. package/dist-esm/lib/editor/managers/{ScribbleManager.mjs → ScribbleManager/ScribbleManager.mjs} +1 -1
  105. package/dist-esm/lib/editor/managers/ScribbleManager/ScribbleManager.mjs.map +7 -0
  106. package/dist-esm/lib/editor/managers/{TextManager.mjs → TextManager/TextManager.mjs} +73 -42
  107. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +7 -0
  108. package/dist-esm/lib/editor/managers/{TickManager.mjs → TickManager/TickManager.mjs} +1 -1
  109. package/dist-esm/lib/editor/managers/TickManager/TickManager.mjs.map +7 -0
  110. package/dist-esm/lib/editor/managers/{UserPreferencesManager.mjs → UserPreferencesManager/UserPreferencesManager.mjs} +1 -1
  111. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +7 -0
  112. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs +8 -10
  113. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  114. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +6 -0
  115. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +2 -2
  116. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs +10 -6
  117. package/dist-esm/lib/editor/tools/BaseBoxShapeTool/children/Pointing.mjs.map +3 -3
  118. package/dist-esm/lib/editor/tools/StateNode.mjs +3 -3
  119. package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
  120. package/dist-esm/lib/exports/getSvgJsx.mjs.map +1 -1
  121. package/dist-esm/lib/hooks/useCanvasEvents.mjs +1 -2
  122. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  123. package/dist-esm/lib/primitives/Box.mjs +33 -33
  124. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  125. package/dist-esm/lib/primitives/Vec.mjs +13 -8
  126. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  127. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +41 -21
  128. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  129. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +11 -11
  130. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
  131. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +13 -16
  132. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
  133. package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs +4 -4
  134. package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs.map +2 -2
  135. package/dist-esm/lib/primitives/geometry/Edge2d.mjs +14 -17
  136. package/dist-esm/lib/primitives/geometry/Edge2d.mjs.map +2 -2
  137. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +11 -11
  138. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
  139. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +6 -2
  140. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  141. package/dist-esm/lib/primitives/geometry/Point2d.mjs +6 -6
  142. package/dist-esm/lib/primitives/geometry/Point2d.mjs.map +2 -2
  143. package/dist-esm/lib/primitives/geometry/Polygon2d.mjs +3 -0
  144. package/dist-esm/lib/primitives/geometry/Polygon2d.mjs.map +2 -2
  145. package/dist-esm/lib/primitives/geometry/Polyline2d.mjs +8 -5
  146. package/dist-esm/lib/primitives/geometry/Polyline2d.mjs.map +2 -2
  147. package/dist-esm/lib/primitives/geometry/Rectangle2d.mjs +22 -11
  148. package/dist-esm/lib/primitives/geometry/Rectangle2d.mjs.map +2 -2
  149. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs +22 -22
  150. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +2 -2
  151. package/dist-esm/lib/utils/reorderShapes.mjs +11 -10
  152. package/dist-esm/lib/utils/reorderShapes.mjs.map +2 -2
  153. package/dist-esm/lib/utils/reparenting.mjs +216 -0
  154. package/dist-esm/lib/utils/reparenting.mjs.map +7 -0
  155. package/dist-esm/lib/utils/richText.mjs +8 -3
  156. package/dist-esm/lib/utils/richText.mjs.map +2 -2
  157. package/dist-esm/version.mjs +3 -3
  158. package/dist-esm/version.mjs.map +1 -1
  159. package/editor.css +442 -492
  160. package/package.json +8 -9
  161. package/src/index.ts +20 -7
  162. package/src/lib/config/TLSessionStateSnapshot.ts +1 -1
  163. package/src/lib/editor/Editor.test.ts +252 -3
  164. package/src/lib/editor/Editor.ts +150 -109
  165. package/src/lib/editor/bindings/BindingUtil.ts +6 -0
  166. package/src/lib/editor/derivations/bindingsIndex.ts +27 -26
  167. package/src/lib/editor/derivations/notVisibleShapes.ts +24 -25
  168. package/src/lib/editor/derivations/parentsToChildren.ts +28 -25
  169. package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +442 -0
  170. package/src/lib/editor/managers/{ClickManager.ts → ClickManager/ClickManager.ts} +3 -3
  171. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +374 -0
  172. package/src/lib/editor/managers/{EdgeScrollManager.ts → EdgeScrollManager/EdgeScrollManager.ts} +3 -3
  173. package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +455 -0
  174. package/src/lib/editor/managers/{FocusManager.ts → FocusManager/FocusManager.ts} +1 -1
  175. package/src/lib/editor/managers/FontManager/FontManager.test.ts +263 -0
  176. package/src/lib/editor/managers/{FontManager.ts → FontManager/FontManager.ts} +5 -2
  177. package/src/lib/editor/managers/{HistoryManager.test.ts → HistoryManager/HistoryManager.test.ts} +388 -1
  178. package/src/lib/editor/managers/{HistoryManager.ts → HistoryManager/HistoryManager.ts} +76 -3
  179. package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +624 -0
  180. package/src/lib/editor/managers/{ScribbleManager.ts → ScribbleManager/ScribbleManager.ts} +2 -2
  181. package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +485 -0
  182. package/src/lib/editor/managers/TextManager/TextManager.test.ts +407 -0
  183. package/src/lib/editor/managers/{TextManager.ts → TextManager/TextManager.ts} +119 -87
  184. package/src/lib/editor/managers/TickManager/TickManager.test.ts +314 -0
  185. package/src/lib/editor/managers/{TickManager.ts → TickManager/TickManager.ts} +2 -2
  186. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +591 -0
  187. package/src/lib/editor/managers/{UserPreferencesManager.ts → UserPreferencesManager/UserPreferencesManager.ts} +2 -2
  188. package/src/lib/editor/shapes/ShapeUtil.ts +57 -16
  189. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +8 -0
  190. package/src/lib/editor/tools/BaseBoxShapeTool/children/Pointing.ts +22 -17
  191. package/src/lib/editor/tools/StateNode.ts +3 -3
  192. package/src/lib/editor/types/emit-types.ts +4 -0
  193. package/src/lib/editor/types/external-content.ts +11 -2
  194. package/src/lib/exports/getSvgJsx.tsx +1 -1
  195. package/src/lib/hooks/useCanvasEvents.ts +0 -1
  196. package/src/lib/primitives/Box.test.ts +588 -7
  197. package/src/lib/primitives/Box.ts +33 -33
  198. package/src/lib/primitives/Vec.test.ts +2 -2
  199. package/src/lib/primitives/Vec.ts +13 -8
  200. package/src/lib/primitives/geometry/Arc2d.ts +42 -23
  201. package/src/lib/primitives/geometry/Circle2d.ts +12 -12
  202. package/src/lib/primitives/geometry/CubicBezier2d.test.ts +5 -0
  203. package/src/lib/primitives/geometry/CubicBezier2d.ts +13 -17
  204. package/src/lib/primitives/geometry/CubicSpline2d.ts +5 -5
  205. package/src/lib/primitives/geometry/Edge2d.ts +14 -18
  206. package/src/lib/primitives/geometry/Ellipse2d.ts +12 -13
  207. package/src/lib/primitives/geometry/Geometry2d.ts +7 -2
  208. package/src/lib/primitives/geometry/Point2d.ts +6 -6
  209. package/src/lib/primitives/geometry/Polygon2d.ts +4 -0
  210. package/src/lib/primitives/geometry/Polyline2d.ts +10 -7
  211. package/src/lib/primitives/geometry/Rectangle2d.ts +24 -11
  212. package/src/lib/primitives/geometry/Stadium2d.ts +22 -23
  213. package/src/lib/utils/reorderShapes.ts +10 -13
  214. package/src/lib/utils/reparenting.ts +383 -0
  215. package/src/lib/utils/richText.ts +10 -4
  216. package/src/version.ts +3 -3
  217. package/dist-cjs/lib/editor/managers/ClickManager.js.map +0 -7
  218. package/dist-cjs/lib/editor/managers/EdgeScrollManager.js.map +0 -7
  219. package/dist-cjs/lib/editor/managers/FocusManager.js.map +0 -7
  220. package/dist-cjs/lib/editor/managers/FontManager.js.map +0 -7
  221. package/dist-cjs/lib/editor/managers/HistoryManager.js.map +0 -7
  222. package/dist-cjs/lib/editor/managers/ScribbleManager.js.map +0 -7
  223. package/dist-cjs/lib/editor/managers/Stack.js +0 -82
  224. package/dist-cjs/lib/editor/managers/Stack.js.map +0 -7
  225. package/dist-cjs/lib/editor/managers/TextManager.js.map +0 -7
  226. package/dist-cjs/lib/editor/managers/TickManager.js.map +0 -7
  227. package/dist-cjs/lib/editor/managers/UserPreferencesManager.js.map +0 -7
  228. package/dist-esm/lib/editor/managers/ClickManager.mjs.map +0 -7
  229. package/dist-esm/lib/editor/managers/EdgeScrollManager.mjs.map +0 -7
  230. package/dist-esm/lib/editor/managers/FocusManager.mjs.map +0 -7
  231. package/dist-esm/lib/editor/managers/FontManager.mjs.map +0 -7
  232. package/dist-esm/lib/editor/managers/HistoryManager.mjs.map +0 -7
  233. package/dist-esm/lib/editor/managers/ScribbleManager.mjs.map +0 -7
  234. package/dist-esm/lib/editor/managers/Stack.mjs +0 -62
  235. package/dist-esm/lib/editor/managers/Stack.mjs.map +0 -7
  236. package/dist-esm/lib/editor/managers/TextManager.mjs.map +0 -7
  237. package/dist-esm/lib/editor/managers/TickManager.mjs.map +0 -7
  238. package/dist-esm/lib/editor/managers/UserPreferencesManager.mjs.map +0 -7
  239. package/src/lib/editor/managers/ScribbleManager.test.ts +0 -32
  240. package/src/lib/editor/managers/Stack.ts +0 -71
  241. /package/dist-cjs/lib/editor/managers/{FocusManager.js → FocusManager/FocusManager.js} +0 -0
  242. /package/dist-esm/lib/editor/managers/{FocusManager.mjs → FocusManager/FocusManager.mjs} +0 -0
@@ -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, __notVisibleShapes_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;
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, _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;
50
50
  import {
51
51
  EMPTY_ARRAY,
52
52
  atom,
@@ -147,18 +147,18 @@ import { bindingsIndex } from "./derivations/bindingsIndex.mjs";
147
147
  import { notVisibleShapes } from "./derivations/notVisibleShapes.mjs";
148
148
  import { parentsToChildren } from "./derivations/parentsToChildren.mjs";
149
149
  import { deriveShapeIdsInCurrentPage } from "./derivations/shapeIdsInCurrentPage.mjs";
150
- import { ClickManager } from "./managers/ClickManager.mjs";
151
- import { EdgeScrollManager } from "./managers/EdgeScrollManager.mjs";
152
- import { FocusManager } from "./managers/FocusManager.mjs";
153
- import { FontManager } from "./managers/FontManager.mjs";
154
- import { HistoryManager } from "./managers/HistoryManager.mjs";
155
- import { ScribbleManager } from "./managers/ScribbleManager.mjs";
150
+ import { ClickManager } from "./managers/ClickManager/ClickManager.mjs";
151
+ import { EdgeScrollManager } from "./managers/EdgeScrollManager/EdgeScrollManager.mjs";
152
+ import { FocusManager } from "./managers/FocusManager/FocusManager.mjs";
153
+ import { FontManager } from "./managers/FontManager/FontManager.mjs";
154
+ import { HistoryManager } from "./managers/HistoryManager/HistoryManager.mjs";
155
+ import { ScribbleManager } from "./managers/ScribbleManager/ScribbleManager.mjs";
156
156
  import { SnapManager } from "./managers/SnapManager/SnapManager.mjs";
157
- import { TextManager } from "./managers/TextManager.mjs";
158
- import { TickManager } from "./managers/TickManager.mjs";
159
- import { UserPreferencesManager } from "./managers/UserPreferencesManager.mjs";
157
+ import { TextManager } from "./managers/TextManager/TextManager.mjs";
158
+ import { TickManager } from "./managers/TickManager/TickManager.mjs";
159
+ import { UserPreferencesManager } from "./managers/UserPreferencesManager/UserPreferencesManager.mjs";
160
160
  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], _getOpenMenus_dec = [computed], _getIsMenuOpen_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], _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], __notVisibleShapes_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) {
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], _getOpenMenus_dec = [computed], _getIsMenuOpen_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], _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
162
  constructor({
163
163
  store,
164
164
  user,
@@ -336,7 +336,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
336
336
  __publicField(this, "_currentPageShapeIds");
337
337
  /* --------------------- Shapes --------------------- */
338
338
  __publicField(this, "_shapeGeometryCaches", {});
339
- __publicField(this, "_shapePageGeometryCaches", {});
339
+ __publicField(this, "_notVisibleShapes", notVisibleShapes(this));
340
340
  // Parents and children
341
341
  /**
342
342
  * A cache of parents to children.
@@ -357,6 +357,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
357
357
  __publicField(this, "externalContentHandlers", {
358
358
  text: null,
359
359
  files: null,
360
+ "file-replace": null,
360
361
  embed: null,
361
362
  "svg-text": null,
362
363
  url: null,
@@ -473,6 +474,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
473
474
  this.disposables.add(() => this.user.dispose());
474
475
  this.getContainer = getContainer;
475
476
  this.textMeasure = new TextManager(this);
477
+ this.disposables.add(() => this.textMeasure.dispose());
476
478
  this.fonts = new FontManager(this, fontAssetUrls);
477
479
  this._tickManager = new TickManager(this);
478
480
  class NewRoot extends RootState {
@@ -598,14 +600,16 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
598
600
  this.getBindingUtil(binding).onAfterChangeFromShape?.({
599
601
  binding,
600
602
  shapeBefore,
601
- shapeAfter
603
+ shapeAfter,
604
+ reason: "self"
602
605
  });
603
606
  }
604
607
  if (binding.toId === shapeAfter.id) {
605
608
  this.getBindingUtil(binding).onAfterChangeToShape?.({
606
609
  binding,
607
610
  shapeBefore,
608
- shapeAfter
611
+ shapeAfter,
612
+ reason: "self"
609
613
  });
610
614
  }
611
615
  }
@@ -619,14 +623,16 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
619
623
  this.getBindingUtil(binding).onAfterChangeFromShape?.({
620
624
  binding,
621
625
  shapeBefore: descendantShape,
622
- shapeAfter: descendantShape
626
+ shapeAfter: descendantShape,
627
+ reason: "ancestry"
623
628
  });
624
629
  }
625
630
  if (binding.toId === descendantShape.id) {
626
631
  this.getBindingUtil(binding).onAfterChangeToShape?.({
627
632
  binding,
628
633
  shapeBefore: descendantShape,
629
- shapeAfter: descendantShape
634
+ shapeAfter: descendantShape,
635
+ reason: "ancestry"
630
636
  });
631
637
  }
632
638
  }
@@ -1670,6 +1676,19 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
1670
1676
  getSelectionPageBounds() {
1671
1677
  return this.getShapesPageBounds(this.getSelectedShapeIds());
1672
1678
  }
1679
+ /**
1680
+ * The bounds of the selection bounding box in the current page space.
1681
+ *
1682
+ * @readonly
1683
+ * @public
1684
+ */
1685
+ getSelectionScreenBounds() {
1686
+ const bounds = this.getSelectionPageBounds();
1687
+ if (!bounds) return void 0;
1688
+ const { x, y } = this.pageToScreen(bounds.point);
1689
+ const zoom = this.getZoomLevel();
1690
+ return new Box(x, y, bounds.width * zoom, bounds.height * zoom);
1691
+ }
1673
1692
  /**
1674
1693
  * @internal
1675
1694
  */
@@ -2853,10 +2872,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
2853
2872
  }
2854
2873
  getViewportScreenCenter() {
2855
2874
  const viewportScreenBounds = this.getViewportScreenBounds();
2856
- return new Vec(
2857
- viewportScreenBounds.midX - viewportScreenBounds.minX,
2858
- viewportScreenBounds.midY - viewportScreenBounds.minY
2859
- );
2875
+ return new Vec(viewportScreenBounds.w / 2, viewportScreenBounds.h / 2);
2860
2876
  }
2861
2877
  getViewportPageBounds() {
2862
2878
  const { w, h } = this.getViewportScreenBounds();
@@ -3531,41 +3547,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
3531
3547
  typeof shape === "string" ? shape : shape.id
3532
3548
  );
3533
3549
  }
3534
- /**
3535
- * Get the geometry of a shape in page-space.
3536
- *
3537
- * @example
3538
- * ```ts
3539
- * editor.getShapePageGeometry(myShape)
3540
- * editor.getShapePageGeometry(myShapeId)
3541
- * editor.getShapePageGeometry(myShapeId, { context: "arrow" })
3542
- * ```
3543
- *
3544
- * @param shape - The shape (or shape id) to get the geometry for.
3545
- * @param opts - Additional options about the request for geometry. Passed to {@link ShapeUtil.getGeometry}.
3546
- *
3547
- * @public
3548
- */
3549
- getShapePageGeometry(shape, opts) {
3550
- const context = opts?.context ?? "none";
3551
- if (!this._shapePageGeometryCaches[context]) {
3552
- this._shapePageGeometryCaches[context] = this.store.createComputedCache(
3553
- "bounds",
3554
- (shape2) => {
3555
- const geometry = this.getShapeGeometry(shape2.id, opts);
3556
- const pageTransform = this.getShapePageTransform(shape2.id);
3557
- return geometry.transform(pageTransform);
3558
- },
3559
- {
3560
- // we only depend directly on the shape id, and changing geometry/transform will update us anyway
3561
- areRecordsEqual: () => true
3562
- }
3563
- );
3564
- }
3565
- return this._shapePageGeometryCaches[context].get(
3566
- typeof shape === "string" ? shape : shape.id
3567
- );
3568
- }
3569
3550
  _getShapeHandlesCache() {
3570
3551
  return this.store.createComputedCache(
3571
3552
  "handles",
@@ -3659,7 +3640,10 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
3659
3640
  }
3660
3641
  _getShapePageBoundsCache() {
3661
3642
  return this.store.createComputedCache("pageBoundsCache", (shape) => {
3662
- return this.getShapePageGeometry(shape).bounds;
3643
+ const pageTransform = this.getShapePageTransform(shape);
3644
+ if (!pageTransform) return void 0;
3645
+ const geometry = this.getShapeGeometry(shape);
3646
+ return Box.FromPoints(pageTransform.applyToPoints(geometry.vertices));
3663
3647
  });
3664
3648
  }
3665
3649
  /**
@@ -3716,12 +3700,11 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
3716
3700
  (shape2) => this.isShapeOfType(shape2, "frame")
3717
3701
  );
3718
3702
  if (frameAncestors.length === 0) return void 0;
3719
- const pageMask = frameAncestors.map(
3720
- (s) => (
3721
- // Apply the frame transform to the frame outline to get the frame outline in the current page space
3722
- (this.getShapePageGeometry(s.id).vertices)
3723
- )
3724
- ).reduce((acc, b) => {
3703
+ const pageMask = frameAncestors.map((s) => {
3704
+ const geometry = this.getShapeGeometry(s.id);
3705
+ const pageTransform = this.getShapePageTransform(s.id);
3706
+ return pageTransform.applyToPoints(geometry.vertices);
3707
+ }).reduce((acc, b) => {
3725
3708
  if (!(b && acc)) return void 0;
3726
3709
  const intersection = intersectPolygonPolygon(acc, b);
3727
3710
  if (intersection) {
@@ -3885,17 +3868,24 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
3885
3868
  }
3886
3869
  return void 0;
3887
3870
  }
3888
- isShapeOrAncestorLocked(arg) {
3889
- const shape = typeof arg === "string" ? this.getShape(arg) : arg;
3890
- if (shape === void 0) return false;
3891
- if (shape.isLocked) return true;
3892
- return this.isShapeOrAncestorLocked(this.getShapeParent(shape));
3871
+ /**
3872
+ * Check whether a shape or its parent is locked.
3873
+ *
3874
+ * @param shape - The shape (or shape id) to check.
3875
+ *
3876
+ * @public
3877
+ */
3878
+ isShapeOrAncestorLocked(shape) {
3879
+ const _shape = shape && this.getShape(shape);
3880
+ if (_shape === void 0) return false;
3881
+ if (_shape.isLocked) return true;
3882
+ return this.isShapeOrAncestorLocked(this.getShapeParent(_shape));
3893
3883
  }
3894
- _notVisibleShapes() {
3895
- return notVisibleShapes(this);
3884
+ getNotVisibleShapes() {
3885
+ return this._notVisibleShapes.get();
3896
3886
  }
3897
3887
  getCulledShapes() {
3898
- const notVisibleShapes2 = this._notVisibleShapes().get();
3888
+ const notVisibleShapes2 = this.getNotVisibleShapes();
3899
3889
  const selectedShapeIds = this.getSelectedShapeIds();
3900
3890
  const editingId = this.getEditingShapeId();
3901
3891
  const culledShapes = new Set(notVisibleShapes2);
@@ -4040,18 +4030,18 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4040
4030
  * @example
4041
4031
  * ```ts
4042
4032
  * editor.getShapesAtPoint({ x: 100, y: 100 })
4043
- * editor.getShapesAtPoint({ x: 100, y: 100 }, { hitInside: true, exact: true })
4033
+ * editor.getShapesAtPoint({ x: 100, y: 100 }, { hitInside: true, margin: 8 })
4044
4034
  * ```
4045
4035
  *
4046
4036
  * @param point - The page point to test.
4047
4037
  * @param opts - The options for the hit point testing.
4048
4038
  *
4039
+ * @returns An array of shapes at the given point, sorted in reverse order of their absolute z-index (top-most shape first).
4040
+ *
4049
4041
  * @public
4050
4042
  */
4051
4043
  getShapesAtPoint(point, opts = {}) {
4052
- return this.getCurrentPageShapes().filter(
4053
- (shape) => !this.isShapeHidden(shape) && this.isPointInShape(shape, point, opts)
4054
- );
4044
+ return this.getCurrentPageShapesSorted().filter((shape) => !this.isShapeHidden(shape) && this.isPointInShape(shape, point, opts)).reverse();
4055
4045
  }
4056
4046
  /**
4057
4047
  * Test whether a point (in the current page space) will will a shape. This method takes into account masks,
@@ -4175,7 +4165,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4175
4165
  if (!id) return void 0;
4176
4166
  const freshShape = this.getShape(id);
4177
4167
  if (freshShape === void 0 || !isShapeId(freshShape.parentId)) return void 0;
4178
- return this.store.get(freshShape.parentId);
4168
+ return this.getShape(freshShape.parentId);
4179
4169
  }
4180
4170
  /**
4181
4171
  * If siblingShape and targetShape are siblings, this returns targetShape. If targetShape has an
@@ -4307,6 +4297,9 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4307
4297
  if (!pagePoint) continue;
4308
4298
  const newPoint = invertedParentTransform.applyToPoint(pagePoint);
4309
4299
  const newRotation = pageTransform.rotation() - parentPageRotation;
4300
+ if (shape.id === parentId) {
4301
+ throw Error("Attempted to reparent a shape to itself!");
4302
+ }
4310
4303
  changes.push({
4311
4304
  id: shape.id,
4312
4305
  type: shape.type,
@@ -4373,8 +4366,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4373
4366
  * @public
4374
4367
  */
4375
4368
  visitDescendants(parent, visitor) {
4376
- const parentId = typeof parent === "string" ? parent : parent.id;
4377
- const children = this.getSortedChildIdsForParent(parentId);
4369
+ const children = this.getSortedChildIdsForParent(parent);
4378
4370
  for (const id of children) {
4379
4371
  if (visitor(id) === false) continue;
4380
4372
  this.visitDescendants(id, visitor);
@@ -4400,6 +4392,10 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4400
4392
  }
4401
4393
  return shapeIds;
4402
4394
  }
4395
+ /** @deprecated Use {@link Editor.getDraggingOverShape} instead */
4396
+ getDroppingOverShape(point, droppingShapes) {
4397
+ return this.getDraggingOverShape(point, droppingShapes);
4398
+ }
4403
4399
  /**
4404
4400
  * Get the shape that some shapes should be dropped on at a given point.
4405
4401
  *
@@ -4410,22 +4406,20 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4410
4406
  *
4411
4407
  * @public
4412
4408
  */
4413
- getDroppingOverShape(point, droppingShapes = []) {
4414
- const currentPageShapesSorted = this.getCurrentPageShapesSorted();
4415
- for (let i = currentPageShapesSorted.length - 1; i >= 0; i--) {
4416
- const shape = currentPageShapesSorted[i];
4417
- if (
4418
- // ignore hidden shapes
4419
- this.isShapeHidden(shape) || // don't allow dropping on selected shapes
4420
- this.getSelectedShapeIds().includes(shape.id) || // only allow shapes that can receive children
4421
- !this.getShapeUtil(shape).canDropShapes(shape, droppingShapes) || // don't allow dropping a shape on itself or one of it's children
4422
- droppingShapes.find((s) => s.id === shape.id || this.hasAncestor(shape, s.id))
4423
- ) {
4424
- continue;
4425
- }
4426
- const maskedPageBounds = this.getShapeMaskedPageBounds(shape.id);
4427
- if (maskedPageBounds && maskedPageBounds.containsPoint(point) && this.getShapeGeometry(shape).hitTestPoint(this.getPointInShapeSpace(shape, point), 0, true)) {
4428
- return shape;
4409
+ getDraggingOverShape(point, droppingShapes) {
4410
+ const draggingShapes = compact(droppingShapes.map((s) => this.getShape(s))).filter(
4411
+ (s) => !s.isLocked && !this.isShapeHidden(s)
4412
+ );
4413
+ const maybeDraggingOverShapes = this.getShapesAtPoint(point, {
4414
+ hitInside: true,
4415
+ margin: 0
4416
+ }).filter(
4417
+ (s) => !droppingShapes.includes(s) && !s.isLocked && !this.isShapeHidden(s) && !draggingShapes.includes(s)
4418
+ );
4419
+ for (const maybeDraggingOverShape of maybeDraggingOverShapes) {
4420
+ const shapeUtil = this.getShapeUtil(maybeDraggingOverShape);
4421
+ if (shapeUtil.onDragShapesOver || shapeUtil.onDragShapesIn || shapeUtil.onDragShapesOut || shapeUtil.onDropShapesOver) {
4422
+ return maybeDraggingOverShape;
4429
4423
  }
4430
4424
  }
4431
4425
  }
@@ -4702,7 +4696,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4702
4696
  */
4703
4697
  duplicateShapes(shapes, offset) {
4704
4698
  this.run(() => {
4705
- const ids = typeof shapes[0] === "string" ? shapes : shapes.map((s) => s.id);
4699
+ const _ids = typeof shapes[0] === "string" ? shapes : shapes.map((s) => s.id);
4700
+ const ids = this._shouldIgnoreShapeLock ? _ids : this._getUnlockedShapeIds(_ids);
4706
4701
  if (ids.length <= 0) return this;
4707
4702
  const initialIds = new Set(ids);
4708
4703
  const shapeIdSet = this.getShapeAndDescendantIds(ids);
@@ -4766,8 +4761,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4766
4761
  shape.index = index;
4767
4762
  });
4768
4763
  const shapesToCreate = shapesToCreateWithOriginals.map(({ shape }) => shape);
4769
- const maxShapesReached = shapesToCreate.length + this.getCurrentPageShapeIds().size > this.options.maxShapesPerPage;
4770
- if (maxShapesReached) {
4764
+ if (!this.canCreateShapes(shapesToCreate)) {
4771
4765
  alertMaxShapes(this);
4772
4766
  return;
4773
4767
  }
@@ -5782,6 +5776,26 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
5782
5776
  getInitialMetaForShape(_shape) {
5783
5777
  return {};
5784
5778
  }
5779
+ /**
5780
+ * Get whether the provided shape can be created.
5781
+ *
5782
+ * @param shape - The shape or shape IDs to check.
5783
+ *
5784
+ * @public
5785
+ */
5786
+ canCreateShape(shape) {
5787
+ return this.canCreateShapes([shape]);
5788
+ }
5789
+ /**
5790
+ * Get whether the provided shapes can be created.
5791
+ *
5792
+ * @param shapes - The shapes or shape IDs to create.
5793
+ *
5794
+ * @public
5795
+ */
5796
+ canCreateShapes(shapes) {
5797
+ return shapes.length + this.getCurrentPageShapeIds().size <= this.options.maxShapesPerPage;
5798
+ }
5785
5799
  /**
5786
5800
  * Create a single shape.
5787
5801
  *
@@ -5835,7 +5849,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
5835
5849
  let parentId = this.getFocusedGroupId();
5836
5850
  for (let i = currentPageShapesSorted.length - 1; i >= 0; i--) {
5837
5851
  const parent = currentPageShapesSorted[i];
5838
- if (!this.isShapeHidden(parent) && this.getShapeUtil(parent).canReceiveNewChildrenOfType(parent, partial.type) && this.isPointInShape(
5852
+ const util = this.getShapeUtil(parent);
5853
+ if (util.canReceiveNewChildrenOfType(parent, partial.type) && !this.isShapeHidden(parent) && this.isPointInShape(
5839
5854
  parent,
5840
5855
  // If no parent is provided, then we can treat the
5841
5856
  // shape's provided x/y as being in the page's space.
@@ -5910,6 +5925,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
5910
5925
  ...shape.meta
5911
5926
  };
5912
5927
  });
5928
+ this.emit("created-shapes", shapeRecordsToCreate);
5929
+ this.emit("edit");
5913
5930
  this.store.put(shapeRecordsToCreate);
5914
5931
  });
5915
5932
  return this;
@@ -6151,6 +6168,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6151
6168
  updated = this.getShapeUtil(shape).onBeforeUpdate?.(shape, updated) ?? updated;
6152
6169
  updates.push(updated);
6153
6170
  }
6171
+ this.emit("edited-shapes", updates);
6172
+ this.emit("edit");
6154
6173
  this.store.put(updates);
6155
6174
  });
6156
6175
  }
@@ -6172,6 +6191,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6172
6191
  allShapeIdsToDelete.add(childId);
6173
6192
  });
6174
6193
  }
6194
+ this.emit("deleted-shapes", [...allShapeIdsToDelete]);
6195
+ this.emit("edit");
6175
6196
  return this.run(() => this.store.remove([...allShapeIdsToDelete]));
6176
6197
  }
6177
6198
  deleteShape(_id) {
@@ -6515,6 +6536,14 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6515
6536
  async putExternalContent(info) {
6516
6537
  return this.externalContentHandlers[info.type]?.(info);
6517
6538
  }
6539
+ /**
6540
+ * Handle replacing external content.
6541
+ *
6542
+ * @param info - Info about the external content.
6543
+ */
6544
+ async replaceExternalContent(info) {
6545
+ return this.externalContentHandlers[info.type]?.(info);
6546
+ }
6518
6547
  /**
6519
6548
  * Get content that can be exported for the given shape ids.
6520
6549
  *
@@ -6932,7 +6961,9 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6932
6961
  previousScreenPoint,
6933
6962
  previousPagePoint,
6934
6963
  currentScreenPoint,
6935
- currentPagePoint
6964
+ currentPagePoint,
6965
+ originScreenPoint,
6966
+ originPagePoint
6936
6967
  } = this.inputs;
6937
6968
  const { screenBounds } = this.store.unsafeGetWithoutCapture(TLINSTANCE_ID);
6938
6969
  const { x: cx, y: cy, z: cz } = unsafe__withoutCapture(() => this.getCamera());
@@ -6950,8 +6981,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6950
6981
  this.inputs.isPen = info.type === "pointer" && info.isPen;
6951
6982
  if (info.name === "pointer_down" || this.inputs.isPinching) {
6952
6983
  pointerVelocity.set(0, 0);
6953
- this.inputs.originScreenPoint.setTo(currentScreenPoint);
6954
- this.inputs.originPagePoint.setTo(currentPagePoint);
6984
+ originScreenPoint.setTo(currentScreenPoint);
6985
+ originPagePoint.setTo(currentPagePoint);
6955
6986
  }
6956
6987
  this.run(
6957
6988
  () => {
@@ -7841,7 +7872,7 @@ __decorateElement(_init, 1, "_getShapePageBoundsCache", __getShapePageBoundsCach
7841
7872
  __decorateElement(_init, 1, "_getShapeClipPathCache", __getShapeClipPathCache_dec, Editor);
7842
7873
  __decorateElement(_init, 1, "_getShapeMaskCache", __getShapeMaskCache_dec, Editor);
7843
7874
  __decorateElement(_init, 1, "_getShapeMaskedPageBoundsCache", __getShapeMaskedPageBoundsCache_dec, Editor);
7844
- __decorateElement(_init, 1, "_notVisibleShapes", __notVisibleShapes_dec, Editor);
7875
+ __decorateElement(_init, 1, "getNotVisibleShapes", _getNotVisibleShapes_dec, Editor);
7845
7876
  __decorateElement(_init, 1, "getCulledShapes", _getCulledShapes_dec, Editor);
7846
7877
  __decorateElement(_init, 1, "getCurrentPageBounds", _getCurrentPageBounds_dec, Editor);
7847
7878
  __decorateElement(_init, 1, "getCurrentPageShapes", _getCurrentPageShapes_dec, Editor);