@tldraw/editor 3.16.0-canary.e5e61b17cef3 → 3.16.0-canary.e618c2fbc95d

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 (98) hide show
  1. package/dist-cjs/index.d.ts +50 -8
  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/config/TLUserPreferences.js +15 -4
  8. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  9. package/dist-cjs/lib/editor/Editor.js +41 -3
  10. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  11. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js +4 -2
  12. package/dist-cjs/lib/editor/managers/FocusManager/FocusManager.js.map +2 -2
  13. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +11 -6
  14. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  15. package/dist-cjs/lib/hooks/useCanvasEvents.js +19 -16
  16. package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
  17. package/dist-cjs/lib/hooks/useDocumentEvents.js +5 -5
  18. package/dist-cjs/lib/hooks/useDocumentEvents.js.map +2 -2
  19. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js +1 -2
  20. package/dist-cjs/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.js.map +2 -2
  21. package/dist-cjs/lib/hooks/useGestureEvents.js +1 -1
  22. package/dist-cjs/lib/hooks/useGestureEvents.js.map +2 -2
  23. package/dist-cjs/lib/hooks/useHandleEvents.js +6 -6
  24. package/dist-cjs/lib/hooks/useHandleEvents.js.map +2 -2
  25. package/dist-cjs/lib/hooks/useSelectionEvents.js +8 -8
  26. package/dist-cjs/lib/hooks/useSelectionEvents.js.map +2 -2
  27. package/dist-cjs/lib/license/LicenseManager.js +24 -4
  28. package/dist-cjs/lib/license/LicenseManager.js.map +2 -2
  29. package/dist-cjs/lib/license/Watermark.js +97 -90
  30. package/dist-cjs/lib/license/Watermark.js.map +2 -2
  31. package/dist-cjs/lib/utils/dom.js.map +2 -2
  32. package/dist-cjs/lib/utils/getPointerInfo.js +2 -3
  33. package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
  34. package/dist-cjs/lib/utils/reparenting.js +5 -1
  35. package/dist-cjs/lib/utils/reparenting.js.map +2 -2
  36. package/dist-cjs/version.js +3 -3
  37. package/dist-cjs/version.js.map +1 -1
  38. package/dist-esm/index.d.mts +50 -8
  39. package/dist-esm/index.mjs +1 -1
  40. package/dist-esm/lib/TldrawEditor.mjs +0 -2
  41. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  42. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +11 -1
  43. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  44. package/dist-esm/lib/config/TLUserPreferences.mjs +15 -4
  45. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  46. package/dist-esm/lib/editor/Editor.mjs +41 -3
  47. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  48. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +4 -2
  49. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +2 -2
  50. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +11 -6
  51. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  52. package/dist-esm/lib/hooks/useCanvasEvents.mjs +20 -22
  53. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  54. package/dist-esm/lib/hooks/useDocumentEvents.mjs +6 -6
  55. package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
  56. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +1 -2
  57. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  58. package/dist-esm/lib/hooks/useGestureEvents.mjs +2 -2
  59. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  60. package/dist-esm/lib/hooks/useHandleEvents.mjs +6 -6
  61. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +2 -2
  62. package/dist-esm/lib/hooks/useSelectionEvents.mjs +9 -14
  63. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +2 -2
  64. package/dist-esm/lib/license/LicenseManager.mjs +24 -4
  65. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  66. package/dist-esm/lib/license/Watermark.mjs +98 -91
  67. package/dist-esm/lib/license/Watermark.mjs.map +2 -2
  68. package/dist-esm/lib/utils/dom.mjs.map +2 -2
  69. package/dist-esm/lib/utils/getPointerInfo.mjs +2 -3
  70. package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
  71. package/dist-esm/lib/utils/reparenting.mjs +5 -1
  72. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  73. package/dist-esm/version.mjs +3 -3
  74. package/dist-esm/version.mjs.map +1 -1
  75. package/package.json +7 -7
  76. package/src/lib/TldrawEditor.tsx +0 -2
  77. package/src/lib/components/default-components/DefaultCanvas.tsx +7 -1
  78. package/src/lib/config/TLUserPreferences.ts +16 -3
  79. package/src/lib/editor/Editor.test.ts +90 -0
  80. package/src/lib/editor/Editor.ts +53 -3
  81. package/src/lib/editor/managers/FocusManager/FocusManager.ts +6 -2
  82. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +30 -8
  83. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +10 -3
  84. package/src/lib/hooks/useCanvasEvents.ts +20 -20
  85. package/src/lib/hooks/useDocumentEvents.ts +6 -6
  86. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
  87. package/src/lib/hooks/useGestureEvents.ts +2 -2
  88. package/src/lib/hooks/useHandleEvents.ts +6 -6
  89. package/src/lib/hooks/useSelectionEvents.ts +9 -14
  90. package/src/lib/license/LicenseManager.test.ts +78 -2
  91. package/src/lib/license/LicenseManager.ts +31 -5
  92. package/src/lib/license/Watermark.tsx +100 -92
  93. package/src/lib/test/InFrontOfTheCanvas.test.tsx +187 -0
  94. package/src/lib/utils/dom.test.ts +103 -0
  95. package/src/lib/utils/dom.ts +8 -1
  96. package/src/lib/utils/getPointerInfo.ts +3 -2
  97. package/src/lib/utils/reparenting.ts +7 -1
  98. package/src/version.ts +3 -3
@@ -404,6 +404,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
404
404
  __publicField(this, "performanceTracker");
405
405
  /** @internal */
406
406
  __publicField(this, "performanceTrackerTimeout", -1);
407
+ /** @internal */
408
+ __publicField(this, "handledEvents", /* @__PURE__ */ new WeakSet());
407
409
  __publicField(this, "_pendingEventsForNextTick", []);
408
410
  this._getShapeVisibility = getShapeVisibility;
409
411
  this.options = { ...import_options.defaultTldrawOptions, ...options };
@@ -431,6 +433,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
431
433
  }
432
434
  this.root = new NewRoot(this);
433
435
  this.root.children = {};
436
+ this.markEventAsHandled = this.markEventAsHandled.bind(this);
434
437
  const allShapeUtils = (0, import_defaultShapes.checkShapesAndAddCore)(shapeUtils);
435
438
  const _shapeUtils = {};
436
439
  const _styleProps = {};
@@ -6438,16 +6441,20 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
6438
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.
6439
6442
  *
6440
6443
  * @param info - Info about the external content.
6444
+ * @param opts - Options for handling external content, including force flag to bypass readonly checks.
6441
6445
  */
6442
- async putExternalContent(info) {
6446
+ async putExternalContent(info, opts = {}) {
6447
+ if (!opts.force && this.getIsReadonly()) return;
6443
6448
  return this.externalContentHandlers[info.type]?.(info);
6444
6449
  }
6445
6450
  /**
6446
6451
  * Handle replacing external content.
6447
6452
  *
6448
6453
  * @param info - Info about the external content.
6454
+ * @param opts - Options for handling external content, including force flag to bypass readonly checks.
6449
6455
  */
6450
- async replaceExternalContent(info) {
6456
+ async replaceExternalContent(info, opts = {}) {
6457
+ if (!opts.force && this.getIsReadonly()) return;
6451
6458
  return this.externalContentHandlers[info.type]?.(info);
6452
6459
  }
6453
6460
  /**
@@ -7367,6 +7374,32 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7367
7374
  code: "MetaLeft"
7368
7375
  });
7369
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
+ }
7370
7403
  /**
7371
7404
  * Dispatch an event to the editor.
7372
7405
  *
@@ -7522,7 +7555,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7522
7555
  case "wheel": {
7523
7556
  if (cameraOptions.isLocked) return;
7524
7557
  this._updateInputsFromEvent(info);
7525
- 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
+ }
7526
7564
  if (wheelBehavior !== "none") {
7527
7565
  this.stopCameraAnimation();
7528
7566
  if (instanceState.followingUserId) {