@tldraw/editor 3.13.0-canary.6cb770c78958 → 3.13.0-canary.70e156551c5c

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 (134) hide show
  1. package/dist-cjs/index.d.ts +84 -97
  2. package/dist-cjs/index.js +7 -22
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/components/Shape.js +12 -8
  5. package/dist-cjs/lib/components/Shape.js.map +2 -2
  6. package/dist-cjs/lib/components/default-components/DefaultCanvas.js +21 -2
  7. package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
  8. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +17 -11
  9. package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
  10. package/dist-cjs/lib/editor/Editor.js +33 -14
  11. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  12. package/dist-cjs/lib/editor/managers/SnapManager/HandleSnaps.js.map +2 -2
  13. package/dist-cjs/lib/editor/managers/TextManager.js +10 -0
  14. package/dist-cjs/lib/editor/managers/TextManager.js.map +2 -2
  15. package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
  16. package/dist-cjs/lib/editor/shapes/shared/getPerfectDashProps.js.map +2 -2
  17. package/dist-cjs/lib/exports/getSvgJsx.js +12 -3
  18. package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
  19. package/dist-cjs/lib/primitives/Box.js +16 -0
  20. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  21. package/dist-cjs/lib/primitives/Mat.js +1 -1
  22. package/dist-cjs/lib/primitives/Mat.js.map +2 -2
  23. package/dist-cjs/lib/primitives/Vec.js +20 -0
  24. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  25. package/dist-cjs/lib/primitives/geometry/Arc2d.js +2 -2
  26. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  27. package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -1
  28. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
  29. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +1 -1
  30. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
  31. package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js.map +2 -2
  32. package/dist-cjs/lib/primitives/geometry/Edge2d.js +1 -1
  33. package/dist-cjs/lib/primitives/geometry/Edge2d.js.map +2 -2
  34. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
  35. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +91 -20
  36. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  37. package/dist-cjs/lib/primitives/geometry/Group2d.js +55 -2
  38. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  39. package/dist-cjs/lib/primitives/geometry/Point2d.js.map +2 -2
  40. package/dist-cjs/lib/primitives/geometry/Polyline2d.js.map +2 -2
  41. package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +2 -2
  42. package/dist-cjs/lib/utils/areShapesContentEqual.js +25 -0
  43. package/dist-cjs/lib/utils/areShapesContentEqual.js.map +7 -0
  44. package/dist-cjs/lib/utils/debug-flags.js +5 -2
  45. package/dist-cjs/lib/utils/debug-flags.js.map +2 -2
  46. package/dist-cjs/lib/utils/nearestMultiple.js +34 -0
  47. package/dist-cjs/lib/utils/nearestMultiple.js.map +7 -0
  48. package/dist-cjs/version.js +3 -3
  49. package/dist-cjs/version.js.map +1 -1
  50. package/dist-esm/index.d.mts +84 -97
  51. package/dist-esm/index.mjs +9 -41
  52. package/dist-esm/index.mjs.map +2 -2
  53. package/dist-esm/lib/components/Shape.mjs +12 -8
  54. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  55. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +21 -2
  56. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  57. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +17 -11
  58. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  59. package/dist-esm/lib/editor/Editor.mjs +33 -14
  60. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  61. package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +2 -2
  62. package/dist-esm/lib/editor/managers/TextManager.mjs +10 -0
  63. package/dist-esm/lib/editor/managers/TextManager.mjs.map +2 -2
  64. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  65. package/dist-esm/lib/editor/shapes/shared/getPerfectDashProps.mjs.map +2 -2
  66. package/dist-esm/lib/exports/getSvgJsx.mjs +12 -3
  67. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  68. package/dist-esm/lib/primitives/Box.mjs +16 -0
  69. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  70. package/dist-esm/lib/primitives/Mat.mjs +1 -1
  71. package/dist-esm/lib/primitives/Mat.mjs.map +2 -2
  72. package/dist-esm/lib/primitives/Vec.mjs +20 -0
  73. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  74. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
  75. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  76. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +1 -1
  77. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
  78. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +1 -1
  79. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
  80. package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs.map +2 -2
  81. package/dist-esm/lib/primitives/geometry/Edge2d.mjs +1 -1
  82. package/dist-esm/lib/primitives/geometry/Edge2d.mjs.map +2 -2
  83. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
  84. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +92 -21
  85. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  86. package/dist-esm/lib/primitives/geometry/Group2d.mjs +55 -2
  87. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  88. package/dist-esm/lib/primitives/geometry/Point2d.mjs.map +2 -2
  89. package/dist-esm/lib/primitives/geometry/Polyline2d.mjs.map +2 -2
  90. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +2 -2
  91. package/dist-esm/lib/utils/areShapesContentEqual.mjs +5 -0
  92. package/dist-esm/lib/utils/areShapesContentEqual.mjs.map +7 -0
  93. package/dist-esm/lib/utils/debug-flags.mjs +5 -2
  94. package/dist-esm/lib/utils/debug-flags.mjs.map +2 -2
  95. package/dist-esm/lib/utils/nearestMultiple.mjs +14 -0
  96. package/dist-esm/lib/utils/nearestMultiple.mjs.map +7 -0
  97. package/dist-esm/version.mjs +3 -3
  98. package/dist-esm/version.mjs.map +1 -1
  99. package/editor.css +29 -0
  100. package/package.json +7 -7
  101. package/src/index.ts +16 -31
  102. package/src/lib/components/Shape.tsx +14 -10
  103. package/src/lib/components/default-components/DefaultCanvas.tsx +21 -2
  104. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +17 -8
  105. package/src/lib/editor/Editor.test.ts +1 -1
  106. package/src/lib/editor/Editor.ts +33 -14
  107. package/src/lib/editor/managers/SnapManager/HandleSnaps.ts +0 -1
  108. package/src/lib/editor/managers/TextManager.ts +12 -0
  109. package/src/lib/editor/shapes/ShapeUtil.ts +9 -1
  110. package/src/lib/editor/shapes/shared/getPerfectDashProps.ts +9 -9
  111. package/src/lib/exports/getSvgJsx.tsx +16 -7
  112. package/src/lib/primitives/Box.ts +20 -0
  113. package/src/lib/primitives/Mat.ts +5 -4
  114. package/src/lib/primitives/Vec.ts +23 -0
  115. package/src/lib/primitives/geometry/Arc2d.ts +5 -5
  116. package/src/lib/primitives/geometry/Circle2d.ts +4 -4
  117. package/src/lib/primitives/geometry/CubicBezier2d.ts +4 -4
  118. package/src/lib/primitives/geometry/CubicSpline2d.ts +3 -3
  119. package/src/lib/primitives/geometry/Edge2d.ts +3 -3
  120. package/src/lib/primitives/geometry/Ellipse2d.ts +3 -3
  121. package/src/lib/primitives/geometry/Geometry2d.test.ts +42 -0
  122. package/src/lib/primitives/geometry/Geometry2d.ts +123 -35
  123. package/src/lib/primitives/geometry/Group2d.ts +70 -7
  124. package/src/lib/primitives/geometry/Point2d.ts +2 -2
  125. package/src/lib/primitives/geometry/Polyline2d.ts +3 -3
  126. package/src/lib/primitives/geometry/Stadium2d.ts +3 -3
  127. package/src/lib/test/currentToolIdMask.test.ts +1 -1
  128. package/src/lib/test/user.test.ts +1 -1
  129. package/src/lib/utils/areShapesContentEqual.ts +4 -0
  130. package/src/lib/utils/debug-flags.ts +7 -2
  131. package/src/lib/utils/nearestMultiple.ts +13 -0
  132. package/src/lib/utils/sync/LocalIndexedDb.test.ts +1 -1
  133. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +1 -1
  134. package/src/version.ts +3 -3
@@ -100,6 +100,7 @@ var import_Group2d = require("../primitives/geometry/Group2d");
100
100
  var import_intersect = require("../primitives/intersect");
101
101
  var import_utils2 = require("../primitives/utils");
102
102
  var import_SharedStylesMap = require("../utils/SharedStylesMap");
103
+ var import_areShapesContentEqual = require("../utils/areShapesContentEqual");
103
104
  var import_assets = require("../utils/assets");
104
105
  var import_debug_flags = require("../utils/debug-flags");
105
106
  var import_deepLinks = require("../utils/deepLinks");
@@ -1737,13 +1738,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
1737
1738
  setEditingShape(shape) {
1738
1739
  const id = typeof shape === "string" ? shape : shape?.id ?? null;
1739
1740
  this.setRichTextEditor(null);
1740
- if (id !== this.getEditingShapeId()) {
1741
+ const prevEditingShapeId = this.getEditingShapeId();
1742
+ if (id !== prevEditingShapeId) {
1741
1743
  if (id) {
1742
1744
  const shape2 = this.getShape(id);
1743
1745
  if (shape2 && this.getShapeUtil(shape2).canEdit(shape2)) {
1744
1746
  this.run(
1745
1747
  () => {
1746
1748
  this._updateCurrentPageState({ editingShapeId: id });
1749
+ this.getShapeUtil(shape2).onEditStart?.(shape2);
1747
1750
  },
1748
1751
  { history: "ignore" }
1749
1752
  );
@@ -1754,6 +1757,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
1754
1757
  () => {
1755
1758
  this._updateCurrentPageState({ editingShapeId: null });
1756
1759
  this._currentRichTextEditor.set(null);
1760
+ if (prevEditingShapeId) {
1761
+ const prevEditingShape = this.getShape(prevEditingShapeId);
1762
+ if (prevEditingShape) {
1763
+ this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
1764
+ }
1765
+ }
1757
1766
  },
1758
1767
  { history: "ignore" }
1759
1768
  );
@@ -3439,7 +3448,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3439
3448
  this.fonts.trackFontsForShape(shape2);
3440
3449
  return this.getShapeUtil(shape2).getGeometry(shape2, opts);
3441
3450
  },
3442
- { areRecordsEqual: (a, b) => a.props === b.props }
3451
+ { areRecordsEqual: import_areShapesContentEqual.areShapesContentEqual }
3443
3452
  );
3444
3453
  }
3445
3454
  return this._shapeGeometryCaches[context].get(
@@ -3482,9 +3491,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3482
3491
  );
3483
3492
  }
3484
3493
  _getShapeHandlesCache() {
3485
- return this.store.createComputedCache("handles", (shape) => {
3486
- return this.getShapeUtil(shape).getHandles?.(shape);
3487
- });
3494
+ return this.store.createComputedCache(
3495
+ "handles",
3496
+ (shape) => {
3497
+ return this.getShapeUtil(shape).getHandles?.(shape);
3498
+ },
3499
+ {
3500
+ areRecordsEqual: import_areShapesContentEqual.areShapesContentEqual
3501
+ }
3502
+ );
3488
3503
  }
3489
3504
  /**
3490
3505
  * Get the handles (if any) for a shape.
@@ -4368,9 +4383,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
4368
4383
  }
4369
4384
  _getBindingsIndexCache() {
4370
4385
  const index = (0, import_bindingsIndex.bindingsIndex)(this);
4371
- return this.store.createComputedCache("bindingsIndex", (shape) => {
4372
- return index.get().get(shape.id);
4373
- });
4386
+ return this.store.createComputedCache(
4387
+ "bindingsIndex",
4388
+ (shape) => {
4389
+ return index.get().get(shape.id);
4390
+ },
4391
+ // we can ignore the shape equality check here because the index is
4392
+ // computed incrementally based on what bindings are in the store
4393
+ { areRecordsEqual: () => true }
4394
+ );
4374
4395
  }
4375
4396
  /**
4376
4397
  * Get a binding from the store by its ID if it exists.
@@ -7445,7 +7466,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7445
7466
  const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
7446
7467
  const { x: dx, y: dy, z: dz = 0 } = info.delta;
7447
7468
  let behavior = wheelBehavior;
7448
- if (inputs.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
7469
+ if (info.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
7449
7470
  switch (behavior) {
7450
7471
  case "zoom": {
7451
7472
  const { x, y } = this.inputs.currentScreenPoint;
@@ -7526,12 +7547,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7526
7547
  const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
7527
7548
  if (this.inputs.isPanning && this.inputs.isPointing) {
7528
7549
  const { currentScreenPoint, previousScreenPoint } = this.inputs;
7529
- const { panSpeed } = cameraOptions;
7530
7550
  const offset = import_Vec.Vec.Sub(currentScreenPoint, previousScreenPoint);
7531
- this.setCamera(
7532
- new import_Vec.Vec(cx + offset.x * panSpeed / cz, cy + offset.y * panSpeed / cz, cz),
7533
- { immediate: true }
7534
- );
7551
+ this.setCamera(new import_Vec.Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
7552
+ immediate: true
7553
+ });
7535
7554
  this.maybeTrackPerformance("Panning");
7536
7555
  return;
7537
7556
  }