@tldraw/editor 3.16.0-next.c30b1b5e551a → 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.
- package/dist-cjs/index.d.ts +80 -9
- package/dist-cjs/index.js +3 -1
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/TldrawEditor.js +2 -0
- package/dist-cjs/lib/TldrawEditor.js.map +2 -2
- package/dist-cjs/lib/config/TLUserPreferences.js +8 -2
- package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +19 -9
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +8 -3
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
- package/dist-cjs/lib/hooks/useStateAttribute.js +35 -0
- package/dist-cjs/lib/hooks/useStateAttribute.js.map +7 -0
- package/dist-cjs/lib/options.js +1 -0
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/utils/EditorAtom.js +45 -0
- package/dist-cjs/lib/utils/EditorAtom.js.map +7 -0
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +80 -9
- package/dist-esm/index.mjs +3 -1
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +2 -0
- package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
- package/dist-esm/lib/config/TLUserPreferences.mjs +8 -2
- package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +19 -9
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +8 -3
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/hooks/useStateAttribute.mjs +15 -0
- package/dist-esm/lib/hooks/useStateAttribute.mjs.map +7 -0
- package/dist-esm/lib/options.mjs +1 -0
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/utils/EditorAtom.mjs +25 -0
- package/dist-esm/lib/utils/EditorAtom.mjs.map +7 -0
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +2 -0
- package/package.json +7 -7
- package/src/index.ts +2 -0
- package/src/lib/TldrawEditor.tsx +2 -0
- package/src/lib/config/TLUserPreferences.ts +7 -0
- package/src/lib/editor/Editor.ts +33 -27
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +13 -0
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +5 -0
- package/src/lib/editor/types/misc-types.ts +54 -1
- package/src/lib/hooks/useStateAttribute.ts +15 -0
- package/src/lib/options.ts +2 -0
- package/src/lib/utils/EditorAtom.ts +37 -0
- 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
|
|
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,
|
|
3939
|
-
if (
|
|
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 (
|
|
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,
|
|
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 <=
|
|
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 (
|
|
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
|
}
|