@tldraw/editor 3.14.0-canary.ff61ab6deaa2 → 3.14.0-internal.601adf6e424b

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 (76) hide show
  1. package/dist-cjs/index.d.ts +74 -46
  2. package/dist-cjs/index.js +1 -3
  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 +62 -21
  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/managers/FontManager/FontManager.js +1 -2
  10. package/dist-cjs/lib/editor/managers/FontManager/FontManager.js.map +2 -2
  11. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js +73 -42
  12. package/dist-cjs/lib/editor/managers/TextManager/TextManager.js.map +2 -2
  13. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +1 -1
  14. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +1 -1
  15. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +1 -1
  16. package/dist-cjs/lib/editor/tools/StateNode.js +3 -3
  17. package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
  18. package/dist-cjs/lib/editor/types/emit-types.js.map +1 -1
  19. package/dist-cjs/lib/editor/types/external-content.js.map +1 -1
  20. package/dist-cjs/lib/hooks/useCanvasEvents.js +1 -2
  21. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  22. package/dist-cjs/lib/primitives/Box.js +0 -6
  23. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  24. package/dist-cjs/lib/utils/areShapesContentEqual.js +1 -1
  25. package/dist-cjs/lib/utils/areShapesContentEqual.js.map +2 -2
  26. package/dist-cjs/lib/utils/richText.js +7 -2
  27. package/dist-cjs/lib/utils/richText.js.map +2 -2
  28. package/dist-cjs/version.js +3 -3
  29. package/dist-cjs/version.js.map +1 -1
  30. package/dist-esm/index.d.mts +74 -46
  31. package/dist-esm/index.mjs +1 -3
  32. package/dist-esm/index.mjs.map +2 -2
  33. package/dist-esm/lib/config/TLSessionStateSnapshot.mjs +1 -1
  34. package/dist-esm/lib/config/TLSessionStateSnapshot.mjs.map +2 -2
  35. package/dist-esm/lib/editor/Editor.mjs +62 -21
  36. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  37. package/dist-esm/lib/editor/bindings/BindingUtil.mjs.map +2 -2
  38. package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs +1 -2
  39. package/dist-esm/lib/editor/managers/FontManager/FontManager.mjs.map +2 -2
  40. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs +73 -42
  41. package/dist-esm/lib/editor/managers/TextManager/TextManager.mjs.map +2 -2
  42. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +1 -1
  43. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +1 -1
  44. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +1 -1
  45. package/dist-esm/lib/editor/tools/StateNode.mjs +3 -3
  46. package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
  47. package/dist-esm/lib/hooks/useCanvasEvents.mjs +1 -2
  48. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  49. package/dist-esm/lib/primitives/Box.mjs +0 -6
  50. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  51. package/dist-esm/lib/utils/areShapesContentEqual.mjs +1 -1
  52. package/dist-esm/lib/utils/areShapesContentEqual.mjs.map +2 -2
  53. package/dist-esm/lib/utils/richText.mjs +8 -3
  54. package/dist-esm/lib/utils/richText.mjs.map +2 -2
  55. package/dist-esm/version.mjs +3 -3
  56. package/dist-esm/version.mjs.map +1 -1
  57. package/editor.css +433 -482
  58. package/package.json +8 -9
  59. package/src/index.ts +2 -1
  60. package/src/lib/config/TLSessionStateSnapshot.ts +1 -1
  61. package/src/lib/editor/Editor.test.ts +252 -3
  62. package/src/lib/editor/Editor.ts +61 -18
  63. package/src/lib/editor/bindings/BindingUtil.ts +6 -0
  64. package/src/lib/editor/managers/FontManager/FontManager.ts +1 -2
  65. package/src/lib/editor/managers/TextManager/TextManager.test.ts +1 -5
  66. package/src/lib/editor/managers/TextManager/TextManager.ts +118 -86
  67. package/src/lib/editor/shapes/ShapeUtil.ts +1 -0
  68. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +1 -1
  69. package/src/lib/editor/tools/StateNode.ts +3 -3
  70. package/src/lib/editor/types/emit-types.ts +4 -0
  71. package/src/lib/editor/types/external-content.ts +11 -2
  72. package/src/lib/hooks/useCanvasEvents.ts +0 -1
  73. package/src/lib/primitives/Box.ts +0 -8
  74. package/src/lib/utils/areShapesContentEqual.ts +1 -2
  75. package/src/lib/utils/richText.ts +9 -3
  76. package/src/version.ts +3 -3
@@ -46,7 +46,7 @@ var __privateIn = (member, obj) => Object(obj) !== obj ? __typeError('Cannot use
46
46
  var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read from private field"), getter ? getter.call(obj) : member.get(obj));
47
47
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
48
48
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
49
- var __setMetaKeyTimeout_dec, __setCtrlKeyTimeout_dec, __setAltKeyTimeout_dec, __setShiftKeyTimeout_dec, _getIsReadonly_dec, _getIsFocused_dec, _getSharedOpacity_dec, _getSharedStyles_dec, __getSelectionSharedStyles_dec, __getBindingsIndexCache_dec, _getCurrentPageRenderingShapesSorted_dec, _getCurrentPageShapesSorted_dec, _getCurrentPageShapes_dec, _getCurrentPageBounds_dec, _getCulledShapes_dec, __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,
@@ -158,7 +158,7 @@ import { TextManager } from "./managers/TextManager/TextManager.mjs";
158
158
  import { TickManager } from "./managers/TickManager/TickManager.mjs";
159
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,6 +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, "_notVisibleShapes", notVisibleShapes(this));
339
340
  // Parents and children
340
341
  /**
341
342
  * A cache of parents to children.
@@ -356,6 +357,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
356
357
  __publicField(this, "externalContentHandlers", {
357
358
  text: null,
358
359
  files: null,
360
+ "file-replace": null,
359
361
  embed: null,
360
362
  "svg-text": null,
361
363
  url: null,
@@ -472,6 +474,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
472
474
  this.disposables.add(() => this.user.dispose());
473
475
  this.getContainer = getContainer;
474
476
  this.textMeasure = new TextManager(this);
477
+ this.disposables.add(() => this.textMeasure.dispose());
475
478
  this.fonts = new FontManager(this, fontAssetUrls);
476
479
  this._tickManager = new TickManager(this);
477
480
  class NewRoot extends RootState {
@@ -592,20 +595,21 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
592
595
  shape: {
593
596
  afterChange: (shapeBefore, shapeAfter) => {
594
597
  for (const binding of this.getBindingsInvolvingShape(shapeAfter)) {
595
- if (areShapesContentEqual(shapeBefore, shapeAfter)) continue;
596
598
  invalidBindingTypes.add(binding.type);
597
599
  if (binding.fromId === shapeAfter.id) {
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
  */
@@ -3849,17 +3868,24 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
3849
3868
  }
3850
3869
  return void 0;
3851
3870
  }
3852
- isShapeOrAncestorLocked(arg) {
3853
- const shape = typeof arg === "string" ? this.getShape(arg) : arg;
3854
- if (shape === void 0) return false;
3855
- if (shape.isLocked) return true;
3856
- 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));
3857
3883
  }
3858
- _notVisibleShapes() {
3859
- return notVisibleShapes(this);
3884
+ getNotVisibleShapes() {
3885
+ return this._notVisibleShapes.get();
3860
3886
  }
3861
3887
  getCulledShapes() {
3862
- const notVisibleShapes2 = this._notVisibleShapes().get();
3888
+ const notVisibleShapes2 = this.getNotVisibleShapes();
3863
3889
  const selectedShapeIds = this.getSelectedShapeIds();
3864
3890
  const editingId = this.getEditingShapeId();
3865
3891
  const culledShapes = new Set(notVisibleShapes2);
@@ -4004,18 +4030,18 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4004
4030
  * @example
4005
4031
  * ```ts
4006
4032
  * editor.getShapesAtPoint({ x: 100, y: 100 })
4007
- * editor.getShapesAtPoint({ x: 100, y: 100 }, { hitInside: true, exact: true })
4033
+ * editor.getShapesAtPoint({ x: 100, y: 100 }, { hitInside: true, margin: 8 })
4008
4034
  * ```
4009
4035
  *
4010
4036
  * @param point - The page point to test.
4011
4037
  * @param opts - The options for the hit point testing.
4012
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
+ *
4013
4041
  * @public
4014
4042
  */
4015
4043
  getShapesAtPoint(point, opts = {}) {
4016
- return this.getCurrentPageShapes().filter(
4017
- (shape) => !this.isShapeHidden(shape) && this.isPointInShape(shape, point, opts)
4018
- );
4044
+ return this.getCurrentPageShapesSorted().filter((shape) => !this.isShapeHidden(shape) && this.isPointInShape(shape, point, opts)).reverse();
4019
4045
  }
4020
4046
  /**
4021
4047
  * Test whether a point (in the current page space) will will a shape. This method takes into account masks,
@@ -4665,7 +4691,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
4665
4691
  */
4666
4692
  duplicateShapes(shapes, offset) {
4667
4693
  this.run(() => {
4668
- const ids = typeof shapes[0] === "string" ? shapes : shapes.map((s) => s.id);
4694
+ const _ids = typeof shapes[0] === "string" ? shapes : shapes.map((s) => s.id);
4695
+ const ids = this._shouldIgnoreShapeLock ? _ids : this._getUnlockedShapeIds(_ids);
4669
4696
  if (ids.length <= 0) return this;
4670
4697
  const initialIds = new Set(ids);
4671
4698
  const shapeIdSet = this.getShapeAndDescendantIds(ids);
@@ -5873,6 +5900,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
5873
5900
  ...shape.meta
5874
5901
  };
5875
5902
  });
5903
+ this.emit("created-shapes", shapeRecordsToCreate);
5904
+ this.emit("edit");
5876
5905
  this.store.put(shapeRecordsToCreate);
5877
5906
  });
5878
5907
  return this;
@@ -6114,6 +6143,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6114
6143
  updated = this.getShapeUtil(shape).onBeforeUpdate?.(shape, updated) ?? updated;
6115
6144
  updates.push(updated);
6116
6145
  }
6146
+ this.emit("edited-shapes", updates);
6147
+ this.emit("edit");
6117
6148
  this.store.put(updates);
6118
6149
  });
6119
6150
  }
@@ -6135,6 +6166,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6135
6166
  allShapeIdsToDelete.add(childId);
6136
6167
  });
6137
6168
  }
6169
+ this.emit("deleted-shapes", [...allShapeIdsToDelete]);
6170
+ this.emit("edit");
6138
6171
  return this.run(() => this.store.remove([...allShapeIdsToDelete]));
6139
6172
  }
6140
6173
  deleteShape(_id) {
@@ -6478,6 +6511,14 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6478
6511
  async putExternalContent(info) {
6479
6512
  return this.externalContentHandlers[info.type]?.(info);
6480
6513
  }
6514
+ /**
6515
+ * Handle replacing external content.
6516
+ *
6517
+ * @param info - Info about the external content.
6518
+ */
6519
+ async replaceExternalContent(info) {
6520
+ return this.externalContentHandlers[info.type]?.(info);
6521
+ }
6481
6522
  /**
6482
6523
  * Get content that can be exported for the given shape ids.
6483
6524
  *
@@ -7804,7 +7845,7 @@ __decorateElement(_init, 1, "_getShapePageBoundsCache", __getShapePageBoundsCach
7804
7845
  __decorateElement(_init, 1, "_getShapeClipPathCache", __getShapeClipPathCache_dec, Editor);
7805
7846
  __decorateElement(_init, 1, "_getShapeMaskCache", __getShapeMaskCache_dec, Editor);
7806
7847
  __decorateElement(_init, 1, "_getShapeMaskedPageBoundsCache", __getShapeMaskedPageBoundsCache_dec, Editor);
7807
- __decorateElement(_init, 1, "_notVisibleShapes", __notVisibleShapes_dec, Editor);
7848
+ __decorateElement(_init, 1, "getNotVisibleShapes", _getNotVisibleShapes_dec, Editor);
7808
7849
  __decorateElement(_init, 1, "getCulledShapes", _getCulledShapes_dec, Editor);
7809
7850
  __decorateElement(_init, 1, "getCurrentPageBounds", _getCurrentPageBounds_dec, Editor);
7810
7851
  __decorateElement(_init, 1, "getCurrentPageShapes", _getCurrentPageShapes_dec, Editor);