@tldraw/editor 3.16.0-canary.6c77a180e58d → 3.16.0-canary.7379d3553d7e

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 (109) hide show
  1. package/dist-cjs/index.d.ts +53 -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/config/TLUserPreferences.js +9 -3
  8. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  9. package/dist-cjs/lib/editor/Editor.js +44 -5
  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 +8 -3
  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/primitives/geometry/Geometry2d.js +24 -2
  32. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  33. package/dist-cjs/lib/primitives/geometry/Group2d.js +5 -1
  34. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  35. package/dist-cjs/lib/utils/dom.js.map +2 -2
  36. package/dist-cjs/lib/utils/getPointerInfo.js +2 -3
  37. package/dist-cjs/lib/utils/getPointerInfo.js.map +2 -2
  38. package/dist-cjs/lib/utils/reparenting.js +5 -1
  39. package/dist-cjs/lib/utils/reparenting.js.map +2 -2
  40. package/dist-cjs/version.js +3 -3
  41. package/dist-cjs/version.js.map +1 -1
  42. package/dist-esm/index.d.mts +53 -4
  43. package/dist-esm/index.mjs +1 -1
  44. package/dist-esm/lib/TldrawEditor.mjs +0 -2
  45. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  46. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +11 -1
  47. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  48. package/dist-esm/lib/config/TLUserPreferences.mjs +9 -3
  49. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  50. package/dist-esm/lib/editor/Editor.mjs +44 -5
  51. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  52. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs +4 -2
  53. package/dist-esm/lib/editor/managers/FocusManager/FocusManager.mjs.map +2 -2
  54. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +8 -3
  55. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  56. package/dist-esm/lib/hooks/useCanvasEvents.mjs +20 -22
  57. package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
  58. package/dist-esm/lib/hooks/useDocumentEvents.mjs +6 -6
  59. package/dist-esm/lib/hooks/useDocumentEvents.mjs.map +2 -2
  60. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs +1 -2
  61. package/dist-esm/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.mjs.map +2 -2
  62. package/dist-esm/lib/hooks/useGestureEvents.mjs +2 -2
  63. package/dist-esm/lib/hooks/useGestureEvents.mjs.map +2 -2
  64. package/dist-esm/lib/hooks/useHandleEvents.mjs +6 -6
  65. package/dist-esm/lib/hooks/useHandleEvents.mjs.map +2 -2
  66. package/dist-esm/lib/hooks/useSelectionEvents.mjs +9 -14
  67. package/dist-esm/lib/hooks/useSelectionEvents.mjs.map +2 -2
  68. package/dist-esm/lib/license/LicenseManager.mjs +24 -4
  69. package/dist-esm/lib/license/LicenseManager.mjs.map +2 -2
  70. package/dist-esm/lib/license/Watermark.mjs +98 -91
  71. package/dist-esm/lib/license/Watermark.mjs.map +2 -2
  72. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +24 -2
  73. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  74. package/dist-esm/lib/primitives/geometry/Group2d.mjs +5 -1
  75. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  76. package/dist-esm/lib/utils/dom.mjs.map +2 -2
  77. package/dist-esm/lib/utils/getPointerInfo.mjs +2 -3
  78. package/dist-esm/lib/utils/getPointerInfo.mjs.map +2 -2
  79. package/dist-esm/lib/utils/reparenting.mjs +5 -1
  80. package/dist-esm/lib/utils/reparenting.mjs.map +2 -2
  81. package/dist-esm/version.mjs +3 -3
  82. package/dist-esm/version.mjs.map +1 -1
  83. package/package.json +7 -7
  84. package/src/lib/TldrawEditor.tsx +0 -2
  85. package/src/lib/components/default-components/DefaultCanvas.tsx +7 -1
  86. package/src/lib/config/TLUserPreferences.ts +8 -0
  87. package/src/lib/editor/Editor.test.ts +90 -0
  88. package/src/lib/editor/Editor.ts +57 -5
  89. package/src/lib/editor/managers/FocusManager/FocusManager.ts +6 -2
  90. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +18 -0
  91. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +5 -0
  92. package/src/lib/hooks/useCanvasEvents.ts +20 -20
  93. package/src/lib/hooks/useDocumentEvents.ts +6 -6
  94. package/src/lib/hooks/useFixSafariDoubleTapZoomPencilEvents.ts +1 -1
  95. package/src/lib/hooks/useGestureEvents.ts +2 -2
  96. package/src/lib/hooks/useHandleEvents.ts +6 -6
  97. package/src/lib/hooks/useSelectionEvents.ts +9 -14
  98. package/src/lib/license/LicenseManager.test.ts +78 -2
  99. package/src/lib/license/LicenseManager.ts +31 -5
  100. package/src/lib/license/Watermark.tsx +100 -92
  101. package/src/lib/primitives/geometry/Geometry2d.test.ts +420 -0
  102. package/src/lib/primitives/geometry/Geometry2d.ts +29 -2
  103. package/src/lib/primitives/geometry/Group2d.ts +6 -1
  104. package/src/lib/test/InFrontOfTheCanvas.test.tsx +187 -0
  105. package/src/lib/utils/dom.test.ts +103 -0
  106. package/src/lib/utils/dom.ts +8 -1
  107. package/src/lib/utils/getPointerInfo.ts +3 -2
  108. package/src/lib/utils/reparenting.ts +7 -1
  109. 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 = {};
@@ -3528,8 +3531,9 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3528
3531
  return this.store.createComputedCache("pageBoundsCache", (shape) => {
3529
3532
  const pageTransform = this.getShapePageTransform(shape);
3530
3533
  if (!pageTransform) return void 0;
3531
- const geometry = this.getShapeGeometry(shape);
3532
- return import_Box.Box.FromPoints(pageTransform.applyToPoints(geometry.vertices));
3534
+ return import_Box.Box.FromPoints(
3535
+ pageTransform.applyToPoints(this.getShapeGeometry(shape).boundsVertices)
3536
+ );
3533
3537
  });
3534
3538
  }
3535
3539
  /**
@@ -6437,16 +6441,20 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
6437
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.
6438
6442
  *
6439
6443
  * @param info - Info about the external content.
6444
+ * @param opts - Options for handling external content, including force flag to bypass readonly checks.
6440
6445
  */
6441
- async putExternalContent(info) {
6446
+ async putExternalContent(info, opts = {}) {
6447
+ if (!opts.force && this.getIsReadonly()) return;
6442
6448
  return this.externalContentHandlers[info.type]?.(info);
6443
6449
  }
6444
6450
  /**
6445
6451
  * Handle replacing external content.
6446
6452
  *
6447
6453
  * @param info - Info about the external content.
6454
+ * @param opts - Options for handling external content, including force flag to bypass readonly checks.
6448
6455
  */
6449
- async replaceExternalContent(info) {
6456
+ async replaceExternalContent(info, opts = {}) {
6457
+ if (!opts.force && this.getIsReadonly()) return;
6450
6458
  return this.externalContentHandlers[info.type]?.(info);
6451
6459
  }
6452
6460
  /**
@@ -7366,6 +7374,32 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7366
7374
  code: "MetaLeft"
7367
7375
  });
7368
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
+ }
7369
7403
  /**
7370
7404
  * Dispatch an event to the editor.
7371
7405
  *
@@ -7521,7 +7555,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7521
7555
  case "wheel": {
7522
7556
  if (cameraOptions.isLocked) return;
7523
7557
  this._updateInputsFromEvent(info);
7524
- 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
+ }
7525
7564
  if (wheelBehavior !== "none") {
7526
7565
  this.stopCameraAnimation();
7527
7566
  if (instanceState.followingUserId) {