@tldraw/editor 3.13.0-canary.e0dbcebeb554 → 3.13.0-canary.e25033d63b69

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 (139) hide show
  1. package/dist-cjs/index.d.ts +95 -98
  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 +30 -7
  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 +40 -15
  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/hooks/useEditorComponents.js +1 -2
  20. package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
  21. package/dist-cjs/lib/primitives/Box.js +16 -0
  22. package/dist-cjs/lib/primitives/Box.js.map +2 -2
  23. package/dist-cjs/lib/primitives/Mat.js +1 -1
  24. package/dist-cjs/lib/primitives/Mat.js.map +2 -2
  25. package/dist-cjs/lib/primitives/Vec.js +20 -0
  26. package/dist-cjs/lib/primitives/Vec.js.map +2 -2
  27. package/dist-cjs/lib/primitives/geometry/Arc2d.js +2 -2
  28. package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
  29. package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -1
  30. package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
  31. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +1 -1
  32. package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
  33. package/dist-cjs/lib/primitives/geometry/CubicSpline2d.js.map +2 -2
  34. package/dist-cjs/lib/primitives/geometry/Edge2d.js +1 -1
  35. package/dist-cjs/lib/primitives/geometry/Edge2d.js.map +2 -2
  36. package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
  37. package/dist-cjs/lib/primitives/geometry/Geometry2d.js +91 -20
  38. package/dist-cjs/lib/primitives/geometry/Geometry2d.js.map +2 -2
  39. package/dist-cjs/lib/primitives/geometry/Group2d.js +55 -2
  40. package/dist-cjs/lib/primitives/geometry/Group2d.js.map +2 -2
  41. package/dist-cjs/lib/primitives/geometry/Point2d.js.map +2 -2
  42. package/dist-cjs/lib/primitives/geometry/Polyline2d.js.map +2 -2
  43. package/dist-cjs/lib/primitives/geometry/Stadium2d.js.map +2 -2
  44. package/dist-cjs/lib/utils/areShapesContentEqual.js +25 -0
  45. package/dist-cjs/lib/utils/areShapesContentEqual.js.map +7 -0
  46. package/dist-cjs/lib/utils/debug-flags.js +5 -2
  47. package/dist-cjs/lib/utils/debug-flags.js.map +2 -2
  48. package/dist-cjs/lib/utils/nearestMultiple.js +34 -0
  49. package/dist-cjs/lib/utils/nearestMultiple.js.map +7 -0
  50. package/dist-cjs/version.js +3 -3
  51. package/dist-cjs/version.js.map +1 -1
  52. package/dist-esm/index.d.mts +95 -98
  53. package/dist-esm/index.mjs +9 -41
  54. package/dist-esm/index.mjs.map +2 -2
  55. package/dist-esm/lib/components/Shape.mjs +12 -8
  56. package/dist-esm/lib/components/Shape.mjs.map +2 -2
  57. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +30 -7
  58. package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
  59. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +17 -11
  60. package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
  61. package/dist-esm/lib/editor/Editor.mjs +40 -15
  62. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  63. package/dist-esm/lib/editor/managers/SnapManager/HandleSnaps.mjs.map +2 -2
  64. package/dist-esm/lib/editor/managers/TextManager.mjs +10 -0
  65. package/dist-esm/lib/editor/managers/TextManager.mjs.map +2 -2
  66. package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
  67. package/dist-esm/lib/editor/shapes/shared/getPerfectDashProps.mjs.map +2 -2
  68. package/dist-esm/lib/exports/getSvgJsx.mjs +12 -3
  69. package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
  70. package/dist-esm/lib/hooks/useEditorComponents.mjs +1 -4
  71. package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
  72. package/dist-esm/lib/primitives/Box.mjs +16 -0
  73. package/dist-esm/lib/primitives/Box.mjs.map +2 -2
  74. package/dist-esm/lib/primitives/Mat.mjs +1 -1
  75. package/dist-esm/lib/primitives/Mat.mjs.map +2 -2
  76. package/dist-esm/lib/primitives/Vec.mjs +20 -0
  77. package/dist-esm/lib/primitives/Vec.mjs.map +2 -2
  78. package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
  79. package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
  80. package/dist-esm/lib/primitives/geometry/Circle2d.mjs +1 -1
  81. package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
  82. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +1 -1
  83. package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
  84. package/dist-esm/lib/primitives/geometry/CubicSpline2d.mjs.map +2 -2
  85. package/dist-esm/lib/primitives/geometry/Edge2d.mjs +1 -1
  86. package/dist-esm/lib/primitives/geometry/Edge2d.mjs.map +2 -2
  87. package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
  88. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs +92 -21
  89. package/dist-esm/lib/primitives/geometry/Geometry2d.mjs.map +2 -2
  90. package/dist-esm/lib/primitives/geometry/Group2d.mjs +55 -2
  91. package/dist-esm/lib/primitives/geometry/Group2d.mjs.map +2 -2
  92. package/dist-esm/lib/primitives/geometry/Point2d.mjs.map +2 -2
  93. package/dist-esm/lib/primitives/geometry/Polyline2d.mjs.map +2 -2
  94. package/dist-esm/lib/primitives/geometry/Stadium2d.mjs.map +2 -2
  95. package/dist-esm/lib/utils/areShapesContentEqual.mjs +5 -0
  96. package/dist-esm/lib/utils/areShapesContentEqual.mjs.map +7 -0
  97. package/dist-esm/lib/utils/debug-flags.mjs +5 -2
  98. package/dist-esm/lib/utils/debug-flags.mjs.map +2 -2
  99. package/dist-esm/lib/utils/nearestMultiple.mjs +14 -0
  100. package/dist-esm/lib/utils/nearestMultiple.mjs.map +7 -0
  101. package/dist-esm/version.mjs +3 -3
  102. package/dist-esm/version.mjs.map +1 -1
  103. package/editor.css +31 -4
  104. package/package.json +7 -7
  105. package/src/index.ts +16 -31
  106. package/src/lib/components/Shape.tsx +14 -10
  107. package/src/lib/components/default-components/DefaultCanvas.tsx +30 -7
  108. package/src/lib/components/default-components/DefaultShapeIndicator.tsx +17 -8
  109. package/src/lib/editor/Editor.test.ts +1 -1
  110. package/src/lib/editor/Editor.ts +40 -15
  111. package/src/lib/editor/managers/SnapManager/HandleSnaps.ts +0 -1
  112. package/src/lib/editor/managers/TextManager.ts +12 -0
  113. package/src/lib/editor/shapes/ShapeUtil.ts +22 -2
  114. package/src/lib/editor/shapes/shared/getPerfectDashProps.ts +9 -9
  115. package/src/lib/exports/getSvgJsx.tsx +16 -7
  116. package/src/lib/hooks/useEditorComponents.tsx +2 -5
  117. package/src/lib/primitives/Box.ts +20 -0
  118. package/src/lib/primitives/Mat.ts +5 -4
  119. package/src/lib/primitives/Vec.ts +23 -0
  120. package/src/lib/primitives/geometry/Arc2d.ts +5 -5
  121. package/src/lib/primitives/geometry/Circle2d.ts +4 -4
  122. package/src/lib/primitives/geometry/CubicBezier2d.ts +4 -4
  123. package/src/lib/primitives/geometry/CubicSpline2d.ts +3 -3
  124. package/src/lib/primitives/geometry/Edge2d.ts +3 -3
  125. package/src/lib/primitives/geometry/Ellipse2d.ts +3 -3
  126. package/src/lib/primitives/geometry/Geometry2d.test.ts +42 -0
  127. package/src/lib/primitives/geometry/Geometry2d.ts +123 -35
  128. package/src/lib/primitives/geometry/Group2d.ts +70 -7
  129. package/src/lib/primitives/geometry/Point2d.ts +2 -2
  130. package/src/lib/primitives/geometry/Polyline2d.ts +3 -3
  131. package/src/lib/primitives/geometry/Stadium2d.ts +3 -3
  132. package/src/lib/test/currentToolIdMask.test.ts +1 -1
  133. package/src/lib/test/user.test.ts +1 -1
  134. package/src/lib/utils/areShapesContentEqual.ts +4 -0
  135. package/src/lib/utils/debug-flags.ts +7 -2
  136. package/src/lib/utils/nearestMultiple.ts +13 -0
  137. package/src/lib/utils/sync/LocalIndexedDb.test.ts +1 -1
  138. package/src/lib/utils/sync/TLLocalSyncClient.test.ts +1 -1
  139. 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");
@@ -423,7 +424,6 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
423
424
  ) : getShapeVisibility;
424
425
  this.options = { ...import_options.defaultTldrawOptions, ...options };
425
426
  this.store = store;
426
- this.disposables.add(this.store.dispose.bind(this.store));
427
427
  this.history = new import_HistoryManager.HistoryManager({
428
428
  store,
429
429
  annotateError: (error) => {
@@ -835,6 +835,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
835
835
  dispose() {
836
836
  this.disposables.forEach((dispose) => dispose());
837
837
  this.disposables.clear();
838
+ this.store.dispose();
838
839
  this.isDisposed = true;
839
840
  }
840
841
  getShapeUtil(arg) {
@@ -1737,13 +1738,21 @@ 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
+ if (prevEditingShapeId) {
1750
+ const prevEditingShape = this.getShape(prevEditingShapeId);
1751
+ if (prevEditingShape) {
1752
+ this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
1753
+ }
1754
+ }
1755
+ this.getShapeUtil(shape2).onEditStart?.(shape2);
1747
1756
  },
1748
1757
  { history: "ignore" }
1749
1758
  );
@@ -1754,6 +1763,12 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
1754
1763
  () => {
1755
1764
  this._updateCurrentPageState({ editingShapeId: null });
1756
1765
  this._currentRichTextEditor.set(null);
1766
+ if (prevEditingShapeId) {
1767
+ const prevEditingShape = this.getShape(prevEditingShapeId);
1768
+ if (prevEditingShape) {
1769
+ this.getShapeUtil(prevEditingShape).onEditEnd?.(prevEditingShape);
1770
+ }
1771
+ }
1757
1772
  },
1758
1773
  { history: "ignore" }
1759
1774
  );
@@ -3439,7 +3454,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3439
3454
  this.fonts.trackFontsForShape(shape2);
3440
3455
  return this.getShapeUtil(shape2).getGeometry(shape2, opts);
3441
3456
  },
3442
- { areRecordsEqual: (a, b) => a.props === b.props }
3457
+ { areRecordsEqual: import_areShapesContentEqual.areShapesContentEqual }
3443
3458
  );
3444
3459
  }
3445
3460
  return this._shapeGeometryCaches[context].get(
@@ -3482,9 +3497,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3482
3497
  );
3483
3498
  }
3484
3499
  _getShapeHandlesCache() {
3485
- return this.store.createComputedCache("handles", (shape) => {
3486
- return this.getShapeUtil(shape).getHandles?.(shape);
3487
- });
3500
+ return this.store.createComputedCache(
3501
+ "handles",
3502
+ (shape) => {
3503
+ return this.getShapeUtil(shape).getHandles?.(shape);
3504
+ },
3505
+ {
3506
+ areRecordsEqual: import_areShapesContentEqual.areShapesContentEqual
3507
+ }
3508
+ );
3488
3509
  }
3489
3510
  /**
3490
3511
  * Get the handles (if any) for a shape.
@@ -4368,9 +4389,15 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
4368
4389
  }
4369
4390
  _getBindingsIndexCache() {
4370
4391
  const index = (0, import_bindingsIndex.bindingsIndex)(this);
4371
- return this.store.createComputedCache("bindingsIndex", (shape) => {
4372
- return index.get().get(shape.id);
4373
- });
4392
+ return this.store.createComputedCache(
4393
+ "bindingsIndex",
4394
+ (shape) => {
4395
+ return index.get().get(shape.id);
4396
+ },
4397
+ // we can ignore the shape equality check here because the index is
4398
+ // computed incrementally based on what bindings are in the store
4399
+ { areRecordsEqual: () => true }
4400
+ );
4374
4401
  }
4375
4402
  /**
4376
4403
  * Get a binding from the store by its ID if it exists.
@@ -7445,7 +7472,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7445
7472
  const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
7446
7473
  const { x: dx, y: dy, z: dz = 0 } = info.delta;
7447
7474
  let behavior = wheelBehavior;
7448
- if (inputs.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
7475
+ if (info.ctrlKey) behavior = wheelBehavior === "pan" ? "zoom" : "pan";
7449
7476
  switch (behavior) {
7450
7477
  case "zoom": {
7451
7478
  const { x, y } = this.inputs.currentScreenPoint;
@@ -7526,12 +7553,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
7526
7553
  const { x: cx, y: cy, z: cz } = (0, import_state.unsafe__withoutCapture)(() => this.getCamera());
7527
7554
  if (this.inputs.isPanning && this.inputs.isPointing) {
7528
7555
  const { currentScreenPoint, previousScreenPoint } = this.inputs;
7529
- const { panSpeed } = cameraOptions;
7530
7556
  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
- );
7557
+ this.setCamera(new import_Vec.Vec(cx + offset.x / cz, cy + offset.y / cz, cz), {
7558
+ immediate: true
7559
+ });
7535
7560
  this.maybeTrackPerformance("Panning");
7536
7561
  return;
7537
7562
  }