@tldraw/editor 3.16.0-canary.1e91d2e19e07 → 3.16.0-canary.1f09406e5b86

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 (87) hide show
  1. package/dist-cjs/index.d.ts +42 -4
  2. package/dist-cjs/index.js +1 -1
  3. package/dist-cjs/lib/TldrawEditor.js +0 -2
  4. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  5. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +11 -1
  6. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  7. package/dist-cjs/lib/editor/Editor.js +35 -2
  8. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  9. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +4 -2
  10. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +2 -2
  11. package/dist-cjs/lib/hooks/useCanvasEvents.js +19 -16
  12. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  13. package/dist-cjs/lib/hooks/useDocumentEvents.js +5 -5
  14. package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
  15. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js +1 -2
  16. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
  17. package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
  18. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  19. package/dist-cjs/lib/hooks/useHandleEvents.js +6 -6
  20. package/dist-cjs/lib/hooks/useHandleEvents.js.map +2 -2
  21. package/dist-cjs/lib/hooks/useSelectionEvents.js +8 -8
  22. package/dist-cjs/lib/hooks/useSelectionEvents.js.map +2 -2
  23. package/dist-cjs/lib/license/LicenseManager.js +9 -7
  24. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  25. package/dist-cjs/lib/license/Watermark.js +97 -90
  26. package/dist-cjs/lib/license/Watermark.js.map +2 -2
  27. package/dist-cjs/lib/utils/dom.js.map +2 -2
  28. package/dist-cjs/lib/utils/getPointerInfo.js +2 -3
  29. package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
  30. package/dist-cjs/lib/utils/reparenting.js +5 -1
  31. package/dist-cjs/lib/utils/reparenting.js.map +2 -2
  32. package/dist-cjs/version.js +3 -3
  33. package/dist-cjs/version.js.map +1 -1
  34. package/dist-esm/index.d.mts +42 -4
  35. package/dist-esm/index.mjs +1 -1
  36. package/dist-esm/lib/TldrawEditor.mjs +0 -2
  37. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  38. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +11 -1
  39. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  40. package/dist-esm/lib/editor/Editor.mjs +35 -2
  41. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  42. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +4 -2
  43. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +2 -2
  44. package/dist-esm/lib/hooks/useCanvasEvents.mjs +20 -22
  45. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  46. package/dist-esm/lib/hooks/useDocumentEvents.mjs +6 -6
  47. package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
  48. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +1 -2
  49. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  50. package/dist-esm/lib/hooks/useGestureEvents.mjs +2 -2
  51. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  52. package/dist-esm/lib/hooks/useHandleEvents.mjs +6 -6
  53. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +2 -2
  54. package/dist-esm/lib/hooks/useSelectionEvents.mjs +9 -14
  55. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +2 -2
  56. package/dist-esm/lib/license/LicenseManager.mjs +9 -7
  57. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  58. package/dist-esm/lib/license/Watermark.mjs +98 -91
  59. package/dist-esm/lib/license/Watermark.mjs.map +2 -2
  60. package/dist-esm/lib/utils/dom.mjs.map +2 -2
  61. package/dist-esm/lib/utils/getPointerInfo.mjs +2 -3
  62. package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
  63. package/dist-esm/lib/utils/reparenting.mjs +5 -1
  64. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  65. package/dist-esm/version.mjs +3 -3
  66. package/dist-esm/version.mjs.map +1 -1
  67. package/package.json +7 -7
  68. package/src/lib/TldrawEditor.tsx +0 -2
  69. package/src/lib/components/default-components/DefaultCanvas.tsx +7 -1
  70. package/src/lib/editor/Editor.test.ts +90 -0
  71. package/src/lib/editor/Editor.ts +45 -2
  72. package/src/lib/editor/managers/FocusManager/FocusManager.ts +6 -2
  73. package/src/lib/hooks/useCanvasEvents.ts +20 -20
  74. package/src/lib/hooks/useDocumentEvents.ts +6 -6
  75. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
  76. package/src/lib/hooks/useGestureEvents.ts +2 -2
  77. package/src/lib/hooks/useHandleEvents.ts +6 -6
  78. package/src/lib/hooks/useSelectionEvents.ts +9 -14
  79. package/src/lib/license/LicenseManager.test.ts +34 -2
  80. package/src/lib/license/LicenseManager.ts +14 -12
  81. package/src/lib/license/Watermark.tsx +100 -92
  82. package/src/lib/test/InFrontOfTheCanvas.test.tsx +187 -0
  83. package/src/lib/utils/dom.test.ts +103 -0
  84. package/src/lib/utils/dom.ts +8 -1
  85. package/src/lib/utils/getPointerInfo.ts +3 -2
  86. package/src/lib/utils/reparenting.ts +7 -1
  87. package/src/version.ts +3 -3
@@ -438,6 +438,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
438
438
  __publicField(this, "performanceTracker");
439
439
  /** @internal */
440
440
  __publicField(this, "performanceTrackerTimeout", -1);
441
+ /** @internal */
442
+ __publicField(this, "handledEvents", /* @__PURE__ */ new WeakSet());
441
443
  __publicField(this, "_pendingEventsForNextTick", []);
442
444
  this._getShapeVisibility = getShapeVisibility;
443
445
  this.options = { ...defaultTldrawOptions, ...options };
@@ -465,6 +467,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
465
467
  }
466
468
  this.root = new NewRoot(this);
467
469
  this.root.children = {};
470
+ this.markEventAsHandled = this.markEventAsHandled.bind(this);
468
471
  const allShapeUtils = checkShapesAndAddCore(shapeUtils);
469
472
  const _shapeUtils = {};
470
473
  const _styleProps = {};
@@ -6472,16 +6475,20 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
6472
6475
  * 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.
6473
6476
  *
6474
6477
  * @param info - Info about the external content.
6478
+ * @param opts - Options for handling external content, including force flag to bypass readonly checks.
6475
6479
  */
6476
- async putExternalContent(info) {
6480
+ async putExternalContent(info, opts = {}) {
6481
+ if (!opts.force && this.getIsReadonly()) return;
6477
6482
  return this.externalContentHandlers[info.type]?.(info);
6478
6483
  }
6479
6484
  /**
6480
6485
  * Handle replacing external content.
6481
6486
  *
6482
6487
  * @param info - Info about the external content.
6488
+ * @param opts - Options for handling external content, including force flag to bypass readonly checks.
6483
6489
  */
6484
- async replaceExternalContent(info) {
6490
+ async replaceExternalContent(info, opts = {}) {
6491
+ if (!opts.force && this.getIsReadonly()) return;
6485
6492
  return this.externalContentHandlers[info.type]?.(info);
6486
6493
  }
6487
6494
  /**
@@ -7401,6 +7408,32 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
7401
7408
  code: "MetaLeft"
7402
7409
  });
7403
7410
  }
7411
+ /**
7412
+ * In tldraw, events are sometimes handled by multiple components. For example, the shapes might
7413
+ * have events, but the canvas handles events too. The way that the canvas handles events can
7414
+ * interfere with the with the shapes event handlers - for example, it calls `.preventDefault()`
7415
+ * on `pointerDown`, which also prevents `click` events from firing on the shapes.
7416
+ *
7417
+ * You can use `.stopPropagation()` to prevent the event from propagating to the rest of the
7418
+ * DOM, but that can impact non-tldraw event handlers set up elsewhere. By using
7419
+ * `markEventAsHandled`, you'll stop other parts of tldraw from handling the event without
7420
+ * impacting other, non-tldraw event handlers. See also {@link Editor.wasEventAlreadyHandled}.
7421
+ *
7422
+ * @public
7423
+ */
7424
+ markEventAsHandled(e) {
7425
+ const nativeEvent = "nativeEvent" in e ? e.nativeEvent : e;
7426
+ this.handledEvents.add(nativeEvent);
7427
+ }
7428
+ /**
7429
+ * Checks if an event has already been handled. See {@link Editor.markEventAsHandled}.
7430
+ *
7431
+ * @public
7432
+ */
7433
+ wasEventAlreadyHandled(e) {
7434
+ const nativeEvent = "nativeEvent" in e ? e.nativeEvent : e;
7435
+ return this.handledEvents.has(nativeEvent);
7436
+ }
7404
7437
  /**
7405
7438
  * Dispatch an event to the editor.
7406
7439
  *