@tldraw/editor 5.4.0 → 5.5.0-canary.022e164c8709

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 (67) hide show
  1. package/dist-cjs/index.d.ts +5 -2
  2. package/dist-cjs/index.js +1 -1
  3. package/dist-cjs/lib/constants.js +2 -0
  4. package/dist-cjs/lib/constants.js.map +2 -2
  5. package/dist-cjs/lib/editor/Editor.js +13 -9
  6. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  7. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js +10 -6
  8. package/dist-cjs/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.js.map +2 -2
  9. package/dist-cjs/lib/editor/managers/ThemeManager/ThemeManager.js +7 -3
  10. package/dist-cjs/lib/editor/managers/ThemeManager/ThemeManager.js.map +2 -2
  11. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js +14 -6
  12. package/dist-cjs/lib/editor/shapes/group/GroupShapeUtil.js.map +3 -3
  13. package/dist-cjs/lib/primitives/geometry/Arc2d.js +1 -1
  14. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  15. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +1 -1
  16. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
  17. package/dist-cjs/lib/primitives/geometry/Edge2d.js +1 -1
  18. package/dist-cjs/lib/primitives/geometry/Edge2d.js.map +2 -2
  19. package/dist-cjs/lib/primitives/geometry/Group2d.js +8 -5
  20. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  21. package/dist-cjs/lib/primitives/geometry/Point2d.js +1 -1
  22. package/dist-cjs/lib/primitives/geometry/Point2d.js.map +2 -2
  23. package/dist-cjs/version.js +3 -3
  24. package/dist-cjs/version.js.map +1 -1
  25. package/dist-esm/index.d.mts +5 -2
  26. package/dist-esm/index.mjs +1 -1
  27. package/dist-esm/lib/constants.mjs +2 -0
  28. package/dist-esm/lib/constants.mjs.map +2 -2
  29. package/dist-esm/lib/editor/Editor.mjs +14 -9
  30. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  31. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs +10 -6
  32. package/dist-esm/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.mjs.map +2 -2
  33. package/dist-esm/lib/editor/managers/ThemeManager/ThemeManager.mjs +7 -3
  34. package/dist-esm/lib/editor/managers/ThemeManager/ThemeManager.mjs.map +2 -2
  35. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs +14 -6
  36. package/dist-esm/lib/editor/shapes/group/GroupShapeUtil.mjs.map +3 -3
  37. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +1 -1
  38. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  39. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +1 -1
  40. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
  41. package/dist-esm/lib/primitives/geometry/Edge2d.mjs +1 -1
  42. package/dist-esm/lib/primitives/geometry/Edge2d.mjs.map +2 -2
  43. package/dist-esm/lib/primitives/geometry/Group2d.mjs +12 -6
  44. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  45. package/dist-esm/lib/primitives/geometry/Point2d.mjs +1 -1
  46. package/dist-esm/lib/primitives/geometry/Point2d.mjs.map +2 -2
  47. package/dist-esm/version.mjs +3 -3
  48. package/dist-esm/version.mjs.map +1 -1
  49. package/package.json +7 -7
  50. package/src/lib/constants.ts +8 -0
  51. package/src/lib/editor/Editor.ts +28 -13
  52. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +35 -4
  53. package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.ts +13 -7
  54. package/src/lib/editor/managers/ThemeManager/ThemeManager.test.ts +53 -0
  55. package/src/lib/editor/managers/ThemeManager/ThemeManager.ts +9 -3
  56. package/src/lib/editor/shapes/group/GroupShapeUtil.tsx +23 -8
  57. package/src/lib/primitives/geometry/Arc2d.test.ts +9 -0
  58. package/src/lib/primitives/geometry/Arc2d.ts +1 -1
  59. package/src/lib/primitives/geometry/CubicBezier2d.test.ts +13 -0
  60. package/src/lib/primitives/geometry/CubicBezier2d.ts +1 -1
  61. package/src/lib/primitives/geometry/Edge2d.test.ts +21 -3
  62. package/src/lib/primitives/geometry/Edge2d.ts +1 -1
  63. package/src/lib/primitives/geometry/Group2d.test.ts +26 -5
  64. package/src/lib/primitives/geometry/Group2d.ts +18 -7
  65. package/src/lib/primitives/geometry/Point2d.test.ts +14 -3
  66. package/src/lib/primitives/geometry/Point2d.ts +1 -1
  67. package/src/version.ts +3 -3
@@ -75,6 +75,7 @@ import {
75
75
  import {
76
76
  DEFAULT_ANIMATION_OPTIONS,
77
77
  DEFAULT_CAMERA_OPTIONS,
78
+ FRAME_MS_60HZ,
78
79
  INTERNAL_POINTER_IDS,
79
80
  LEFT_MOUSE_BUTTON,
80
81
  MIDDLE_MOUSE_BUTTON,
@@ -1657,7 +1658,8 @@ class Editor extends EventEmitter {
1657
1658
  if (direction === "next" || direction === "prev") {
1658
1659
  const shapeIds = readingOrderShapes.map((shape2) => shape2.id);
1659
1660
  const currentIndex = currentShapeId ? shapeIds.indexOf(currentShapeId) : -1;
1660
- const adjacentIndex = (currentIndex + (direction === "next" ? 1 : -1) + shapeIds.length) % shapeIds.length;
1661
+ const startIndex = currentIndex === -1 && direction === "prev" ? 0 : currentIndex;
1662
+ const adjacentIndex = (startIndex + (direction === "next" ? 1 : -1) + shapeIds.length) % shapeIds.length;
1661
1663
  adjacentShapeId = shapeIds[adjacentIndex];
1662
1664
  } else {
1663
1665
  if (!currentShapeId) return;
@@ -2537,14 +2539,16 @@ class Editor extends EventEmitter {
2537
2539
  setCamera(point, opts) {
2538
2540
  const { isLocked } = this._cameraOptions.__unsafe__getWithoutCapture();
2539
2541
  if (isLocked && !opts?.force) return this;
2542
+ const _point = Vec.Cast(point);
2543
+ if (!Number.isFinite(_point.x) || !Number.isFinite(_point.y) || !Number.isFinite(_point.z)) {
2544
+ throw Error(
2545
+ `Editor.setCamera: expected finite values, got (${_point.x}, ${_point.y}, ${_point.z}).`
2546
+ );
2547
+ }
2540
2548
  this.stopCameraAnimation();
2541
2549
  if (this.getInstanceState().followingUserId) {
2542
2550
  this.stopFollowingUser();
2543
2551
  }
2544
- const _point = Vec.Cast(point);
2545
- if (!Number.isFinite(_point.x)) _point.x = 0;
2546
- if (!Number.isFinite(_point.y)) _point.y = 0;
2547
- if (_point.z === void 0 || !Number.isFinite(_point.z)) point.z = this.getZoomLevel();
2548
2552
  const camera = this.getConstrainedCamera(_point, opts);
2549
2553
  if (opts?.animation) {
2550
2554
  const { width, height } = this.getViewportScreenBounds();
@@ -2923,7 +2927,7 @@ class Editor extends EventEmitter {
2923
2927
  newCx += center.x / newCz - center.x / cz;
2924
2928
  newCy += center.y / newCz - center.y / cz;
2925
2929
  }
2926
- currentSpeed *= 1 - friction;
2930
+ currentSpeed *= (1 - friction) ** (elapsed / FRAME_MS_60HZ);
2927
2931
  if (currentSpeed < speedThreshold) {
2928
2932
  cancel();
2929
2933
  } else {
@@ -2957,6 +2961,7 @@ class Editor extends EventEmitter {
2957
2961
  }
2958
2962
  const isOnSamePage = presence.currentPageId === this.getCurrentPageId();
2959
2963
  if (!isOnSamePage) {
2964
+ this.markHistoryStoppingPoint("change-page");
2960
2965
  this.setCurrentPage(presence.currentPageId);
2961
2966
  }
2962
2967
  if (opts && opts.animation && !isOnSamePage) {
@@ -5397,7 +5402,7 @@ class Editor extends EventEmitter {
5397
5402
  const shapesMovingTogether = [shape];
5398
5403
  const boundsOfShapesMovingTogether = [shapePageBounds];
5399
5404
  this.collectShapesViaArrowBindings({
5400
- bindings: this.getBindingsToShape(shape.id, "arrow"),
5405
+ bindings: this.getBindingsInvolvingShape(shape.id, "arrow"),
5401
5406
  initialShapes: freshShapes,
5402
5407
  resultShapes: shapesMovingTogether,
5403
5408
  resultBounds: boundsOfShapesMovingTogether,
@@ -8334,8 +8339,8 @@ class Editor extends EventEmitter {
8334
8339
  break;
8335
8340
  }
8336
8341
  case "keyboard": {
8337
- if (info.key === "ShiftRight") info.key = "ShiftLeft";
8338
- if (info.key === "AltRight") info.key = "AltLeft";
8342
+ if (info.code === "ShiftRight") info.code = "ShiftLeft";
8343
+ if (info.code === "AltRight") info.code = "AltLeft";
8339
8344
  if (info.code === "ControlRight") info.code = "ControlLeft";
8340
8345
  if (info.code === "MetaRight") info.code = "MetaLeft";
8341
8346
  switch (info.name) {