@tldraw/editor 3.16.0-next.df90ce0ff566 → 3.16.0-next.eafb52d15064

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 (52) hide show
  1. package/dist-cjs/index.d.ts +80 -9
  2. package/dist-cjs/index.js +3 -1
  3. package/dist-cjs/index.js.map +2 -2
  4. package/dist-cjs/lib/TldrawEditor.js +2 -0
  5. package/dist-cjs/lib/TldrawEditor.js.map +2 -2
  6. package/dist-cjs/lib/config/TLUserPreferences.js +8 -2
  7. package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
  8. package/dist-cjs/lib/editor/Editor.js +19 -9
  9. package/dist-cjs/lib/editor/Editor.js.map +2 -2
  10. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +8 -3
  11. package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
  12. package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
  13. package/dist-cjs/lib/hooks/useStateAttribute.js +35 -0
  14. package/dist-cjs/lib/hooks/useStateAttribute.js.map +7 -0
  15. package/dist-cjs/lib/options.js +1 -0
  16. package/dist-cjs/lib/options.js.map +2 -2
  17. package/dist-cjs/lib/utils/EditorAtom.js +45 -0
  18. package/dist-cjs/lib/utils/EditorAtom.js.map +7 -0
  19. package/dist-cjs/version.js +3 -3
  20. package/dist-cjs/version.js.map +1 -1
  21. package/dist-esm/index.d.mts +80 -9
  22. package/dist-esm/index.mjs +3 -1
  23. package/dist-esm/index.mjs.map +2 -2
  24. package/dist-esm/lib/TldrawEditor.mjs +2 -0
  25. package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
  26. package/dist-esm/lib/config/TLUserPreferences.mjs +8 -2
  27. package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
  28. package/dist-esm/lib/editor/Editor.mjs +19 -9
  29. package/dist-esm/lib/editor/Editor.mjs.map +2 -2
  30. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +8 -3
  31. package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
  32. package/dist-esm/lib/hooks/useStateAttribute.mjs +15 -0
  33. package/dist-esm/lib/hooks/useStateAttribute.mjs.map +7 -0
  34. package/dist-esm/lib/options.mjs +1 -0
  35. package/dist-esm/lib/options.mjs.map +2 -2
  36. package/dist-esm/lib/utils/EditorAtom.mjs +25 -0
  37. package/dist-esm/lib/utils/EditorAtom.mjs.map +7 -0
  38. package/dist-esm/version.mjs +3 -3
  39. package/dist-esm/version.mjs.map +1 -1
  40. package/editor.css +2 -0
  41. package/package.json +7 -7
  42. package/src/index.ts +2 -0
  43. package/src/lib/TldrawEditor.tsx +2 -0
  44. package/src/lib/config/TLUserPreferences.ts +7 -0
  45. package/src/lib/editor/Editor.ts +33 -27
  46. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +13 -0
  47. package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +5 -0
  48. package/src/lib/editor/types/misc-types.ts +54 -1
  49. package/src/lib/hooks/useStateAttribute.ts +15 -0
  50. package/src/lib/options.ts +2 -0
  51. package/src/lib/utils/EditorAtom.ts +37 -0
  52. package/src/version.ts +3 -3
@@ -3910,6 +3910,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3910
3910
  hitInside = false,
3911
3911
  hitFrameInside = false
3912
3912
  } = opts;
3913
+ const [innerMargin, outerMargin] = Array.isArray(margin) ? margin : [margin, margin];
3913
3914
  let inHollowSmallestArea = Infinity;
3914
3915
  let inHollowSmallestAreaHit = null;
3915
3916
  let inMarginClosestToEdgeDistance = Infinity;
@@ -3919,7 +3920,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3919
3920
  return false;
3920
3921
  const pageMask = this.getShapeMask(shape);
3921
3922
  if (pageMask && !(0, import_utils2.pointInPolygon)(point, pageMask)) return false;
3922
- if (filter) return filter(shape);
3923
+ if (filter && !filter(shape)) return false;
3923
3924
  return true;
3924
3925
  });
3925
3926
  for (let i = shapesToCheck.length - 1; i >= 0; i--) {
@@ -3935,8 +3936,8 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3935
3936
  }
3936
3937
  }
3937
3938
  if (this.isShapeOfType(shape, "frame")) {
3938
- const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitInside);
3939
- if (Math.abs(distance2) <= margin) {
3939
+ const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitFrameInside);
3940
+ if (hitFrameInside ? distance2 > 0 && distance2 <= outerMargin || distance2 <= 0 && distance2 > -innerMargin : distance2 > 0 && distance2 <= outerMargin) {
3940
3941
  return inMarginClosestToEdgeHit || shape;
3941
3942
  }
3942
3943
  if (geometry.hitTestPoint(pointInShapeSpace, 0, true)) {
@@ -3956,10 +3957,10 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3956
3957
  }
3957
3958
  distance = minDistance;
3958
3959
  } else {
3959
- if (margin === 0 && (geometry.bounds.w < 1 || geometry.bounds.h < 1)) {
3960
+ if (outerMargin === 0 && (geometry.bounds.w < 1 || geometry.bounds.h < 1)) {
3960
3961
  distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
3961
3962
  } else {
3962
- if (geometry.bounds.containsPoint(pointInShapeSpace, margin)) {
3963
+ if (geometry.bounds.containsPoint(pointInShapeSpace, outerMargin)) {
3963
3964
  distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
3964
3965
  } else {
3965
3966
  distance = Infinity;
@@ -3967,12 +3968,22 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
3967
3968
  }
3968
3969
  }
3969
3970
  if (geometry.isClosed) {
3970
- if (distance <= margin) {
3971
+ if (distance <= outerMargin || hitInside && distance <= 0 && distance > -innerMargin) {
3971
3972
  if (geometry.isFilled || isGroup && geometry.children[0].isFilled) {
3972
3973
  return inMarginClosestToEdgeHit || shape;
3973
3974
  } else {
3974
3975
  if (this.getShapePageBounds(shape).contains(viewportPageBounds)) continue;
3975
- if (Math.abs(distance) < margin) {
3976
+ if (hitInside ? (
3977
+ // On hitInside, the distance will be negative for hits inside
3978
+ // If the distance is positive, check against the outer margin
3979
+ distance > 0 && distance <= outerMargin || // If the distance is negative, check against the inner margin
3980
+ distance <= 0 && distance > -innerMargin
3981
+ ) : (
3982
+ // If hitInside is false, then sadly _we do not know_ whether the
3983
+ // point is inside or outside of the shape, so we check against
3984
+ // the max of the two margins
3985
+ Math.abs(distance) <= Math.max(innerMargin, outerMargin)
3986
+ )) {
3976
3987
  if (Math.abs(distance) < inMarginClosestToEdgeDistance) {
3977
3988
  inMarginClosestToEdgeDistance = Math.abs(distance);
3978
3989
  inMarginClosestToEdgeHit = shape;
@@ -5491,8 +5502,7 @@ class Editor extends (_a = import_eventemitter3.default, _getIsShapeHiddenCache_
5491
5502
  const shapesMovingTogether = [shape];
5492
5503
  const boundsOfShapesMovingTogether = [shapePageBounds];
5493
5504
  if (!this.getShapeUtil(shape).canBeLaidOut?.(shape, {
5494
- type: "stretch",
5495
- shapes: shapesToStretchFirstPass
5505
+ type: "stretch"
5496
5506
  })) {
5497
5507
  continue;
5498
5508
  }