@tldraw/editor 3.16.0-internal.51e99e128bd4 → 3.16.0-internal.a478398270c6
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 +16 -217
- package/dist-cjs/index.js +1 -8
- package/dist-cjs/index.js.map +2 -2
- package/dist-cjs/lib/TldrawEditor.js +1 -3
- package/dist-cjs/lib/TldrawEditor.js.map +2 -2
- package/dist-cjs/lib/components/MenuClickCapture.js +5 -0
- package/dist-cjs/lib/components/MenuClickCapture.js.map +2 -2
- package/dist-cjs/lib/components/SVGContainer.js +1 -1
- package/dist-cjs/lib/components/SVGContainer.js.map +2 -2
- package/dist-cjs/lib/components/Shape.js +26 -4
- package/dist-cjs/lib/components/Shape.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultBrush.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultBrush.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultCanvas.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCollaboratorHint.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultCursor.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultCursor.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultErrorFallback.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultGrid.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultGrid.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultHandles.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultHandles.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultScribble.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultScribble.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js +1 -9
- package/dist-cjs/lib/components/default-components/DefaultShapeIndicator.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js +1 -1
- package/dist-cjs/lib/components/default-components/DefaultSnapIndictor.js.map +2 -2
- package/dist-cjs/lib/components/default-components/DefaultSpinner.js +15 -27
- package/dist-cjs/lib/components/default-components/DefaultSpinner.js.map +3 -3
- package/dist-cjs/lib/config/TLUserPreferences.js +3 -15
- package/dist-cjs/lib/config/TLUserPreferences.js.map +2 -2
- package/dist-cjs/lib/editor/Editor.js +67 -134
- package/dist-cjs/lib/editor/Editor.js.map +2 -2
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js +4 -14
- package/dist-cjs/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.js.map +2 -2
- package/dist-cjs/lib/editor/shapes/ShapeUtil.js.map +2 -2
- package/dist-cjs/lib/editor/tools/StateNode.js +1 -20
- package/dist-cjs/lib/editor/tools/StateNode.js.map +2 -2
- package/dist-cjs/lib/editor/types/misc-types.js.map +1 -1
- package/dist-cjs/lib/exports/getSvgJsx.js +2 -1
- package/dist-cjs/lib/exports/getSvgJsx.js.map +2 -2
- package/dist-cjs/lib/hooks/useCanvasEvents.js +20 -24
- package/dist-cjs/lib/hooks/useCanvasEvents.js.map +2 -2
- package/dist-cjs/lib/hooks/useEditor.js +4 -1
- package/dist-cjs/lib/hooks/useEditor.js.map +2 -2
- package/dist-cjs/lib/hooks/useEditorComponents.js +0 -2
- package/dist-cjs/lib/hooks/useEditorComponents.js.map +2 -2
- package/dist-cjs/lib/license/Watermark.js +8 -8
- package/dist-cjs/lib/license/Watermark.js.map +2 -2
- package/dist-cjs/lib/options.js +0 -7
- package/dist-cjs/lib/options.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Arc2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Arc2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Circle2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Circle2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js +1 -3
- package/dist-cjs/lib/primitives/geometry/CubicBezier2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js +1 -1
- package/dist-cjs/lib/primitives/geometry/Ellipse2d.js.map +2 -2
- package/dist-cjs/lib/primitives/geometry/geometry-constants.js +2 -2
- package/dist-cjs/lib/primitives/geometry/geometry-constants.js.map +2 -2
- package/dist-cjs/lib/primitives/intersect.js +4 -4
- package/dist-cjs/lib/primitives/intersect.js.map +2 -2
- package/dist-cjs/lib/primitives/utils.js +0 -4
- package/dist-cjs/lib/primitives/utils.js.map +2 -2
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js +1 -0
- package/dist-cjs/lib/utils/sync/TLLocalSyncClient.js.map +2 -2
- package/dist-cjs/version.js +3 -3
- package/dist-cjs/version.js.map +1 -1
- package/dist-esm/index.d.mts +16 -217
- package/dist-esm/index.mjs +2 -16
- package/dist-esm/index.mjs.map +2 -2
- package/dist-esm/lib/TldrawEditor.mjs +1 -3
- package/dist-esm/lib/TldrawEditor.mjs.map +2 -2
- package/dist-esm/lib/components/MenuClickCapture.mjs +5 -0
- package/dist-esm/lib/components/MenuClickCapture.mjs.map +2 -2
- package/dist-esm/lib/components/SVGContainer.mjs +1 -1
- package/dist-esm/lib/components/SVGContainer.mjs.map +2 -2
- package/dist-esm/lib/components/Shape.mjs +26 -4
- package/dist-esm/lib/components/Shape.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultBrush.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultBrush.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultCanvas.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs +2 -2
- package/dist-esm/lib/components/default-components/DefaultCollaboratorHint.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultCursor.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultCursor.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultErrorFallback.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultGrid.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultGrid.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultHandles.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultHandles.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultScribble.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs +1 -9
- package/dist-esm/lib/components/default-components/DefaultShapeIndicator.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs +1 -1
- package/dist-esm/lib/components/default-components/DefaultSnapIndictor.mjs.map +2 -2
- package/dist-esm/lib/components/default-components/DefaultSpinner.mjs +15 -17
- package/dist-esm/lib/components/default-components/DefaultSpinner.mjs.map +2 -2
- package/dist-esm/lib/config/TLUserPreferences.mjs +3 -15
- package/dist-esm/lib/config/TLUserPreferences.mjs.map +2 -2
- package/dist-esm/lib/editor/Editor.mjs +67 -134
- package/dist-esm/lib/editor/Editor.mjs.map +2 -2
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs +4 -14
- package/dist-esm/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.mjs.map +2 -2
- package/dist-esm/lib/editor/shapes/ShapeUtil.mjs.map +2 -2
- package/dist-esm/lib/editor/tools/StateNode.mjs +1 -20
- package/dist-esm/lib/editor/tools/StateNode.mjs.map +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs +2 -2
- package/dist-esm/lib/exports/getSvgJsx.mjs.map +2 -2
- package/dist-esm/lib/hooks/useCanvasEvents.mjs +21 -25
- package/dist-esm/lib/hooks/useCanvasEvents.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEditor.mjs +4 -1
- package/dist-esm/lib/hooks/useEditor.mjs.map +2 -2
- package/dist-esm/lib/hooks/useEditorComponents.mjs +0 -4
- package/dist-esm/lib/hooks/useEditorComponents.mjs.map +2 -2
- package/dist-esm/lib/license/Watermark.mjs +8 -8
- package/dist-esm/lib/license/Watermark.mjs.map +2 -2
- package/dist-esm/lib/options.mjs +0 -7
- package/dist-esm/lib/options.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Arc2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Arc2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Circle2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs +1 -3
- package/dist-esm/lib/primitives/geometry/CubicBezier2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/Ellipse2d.mjs.map +2 -2
- package/dist-esm/lib/primitives/geometry/geometry-constants.mjs +2 -2
- package/dist-esm/lib/primitives/geometry/geometry-constants.mjs.map +2 -2
- package/dist-esm/lib/primitives/intersect.mjs +5 -5
- package/dist-esm/lib/primitives/intersect.mjs.map +2 -2
- package/dist-esm/lib/primitives/utils.mjs +0 -4
- package/dist-esm/lib/primitives/utils.mjs.map +2 -2
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs +1 -0
- package/dist-esm/lib/utils/sync/TLLocalSyncClient.mjs.map +2 -2
- package/dist-esm/version.mjs +3 -3
- package/dist-esm/version.mjs.map +1 -1
- package/editor.css +313 -312
- package/package.json +38 -16
- package/src/index.ts +1 -15
- package/src/lib/TldrawEditor.tsx +5 -7
- package/src/lib/components/MenuClickCapture.tsx +8 -0
- package/src/lib/components/SVGContainer.tsx +1 -1
- package/src/lib/components/Shape.tsx +21 -6
- package/src/lib/components/default-components/DefaultBrush.tsx +1 -1
- package/src/lib/components/default-components/DefaultCanvas.tsx +1 -1
- package/src/lib/components/default-components/DefaultCollaboratorHint.tsx +2 -2
- package/src/lib/components/default-components/DefaultCursor.tsx +1 -1
- package/src/lib/components/default-components/DefaultErrorFallback.tsx +1 -1
- package/src/lib/components/default-components/DefaultGrid.tsx +1 -1
- package/src/lib/components/default-components/DefaultHandles.tsx +1 -5
- package/src/lib/components/default-components/DefaultScribble.tsx +1 -1
- package/src/lib/components/default-components/DefaultShapeIndicator.tsx +2 -6
- package/src/lib/components/default-components/DefaultSnapIndictor.tsx +1 -1
- package/src/lib/components/default-components/DefaultSpinner.tsx +12 -12
- package/src/lib/config/TLUserPreferences.ts +1 -15
- package/src/lib/editor/Editor.test.ts +8 -416
- package/src/lib/editor/Editor.ts +92 -177
- package/src/lib/editor/managers/ClickManager/ClickManager.test.ts +14 -15
- package/src/lib/editor/managers/EdgeScrollManager/EdgeScrollManager.test.ts +15 -16
- package/src/lib/editor/managers/FocusManager/FocusManager.test.ts +48 -49
- package/src/lib/editor/managers/FontManager/FontManager.test.ts +23 -24
- package/src/lib/editor/managers/HistoryManager/HistoryManager.test.ts +6 -7
- package/src/lib/editor/managers/ScribbleManager/ScribbleManager.test.ts +11 -12
- package/src/lib/editor/managers/SnapManager/SnapManager.test.ts +50 -57
- package/src/lib/editor/managers/TextManager/TextManager.test.ts +26 -51
- package/src/lib/editor/managers/TickManager/TickManager.test.ts +13 -14
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.test.ts +26 -55
- package/src/lib/editor/managers/UserPreferencesManager/UserPreferencesManager.ts +1 -14
- package/src/lib/editor/shapes/ShapeUtil.ts +0 -57
- package/src/lib/editor/tools/StateNode.ts +1 -27
- package/src/lib/editor/types/misc-types.ts +1 -73
- package/src/lib/exports/getSvgJsx.tsx +2 -2
- package/src/lib/hooks/useCanvasEvents.ts +32 -39
- package/src/lib/hooks/useEditor.tsx +5 -6
- package/src/lib/hooks/useEditorComponents.tsx +2 -8
- package/src/lib/license/LicenseManager.test.ts +1 -3
- package/src/lib/license/Watermark.test.tsx +1 -2
- package/src/lib/license/Watermark.tsx +8 -8
- package/src/lib/options.ts +0 -8
- package/src/lib/primitives/geometry/Arc2d.ts +2 -2
- package/src/lib/primitives/geometry/Circle2d.ts +2 -2
- package/src/lib/primitives/geometry/CubicBezier2d.ts +1 -4
- package/src/lib/primitives/geometry/Ellipse2d.ts +2 -2
- package/src/lib/primitives/geometry/geometry-constants.ts +1 -2
- package/src/lib/primitives/intersect.ts +5 -12
- package/src/lib/primitives/utils.ts +0 -11
- package/src/lib/test/currentToolIdMask.test.ts +49 -0
- package/src/lib/utils/sync/LocalIndexedDb.test.ts +1 -2
- package/src/lib/utils/sync/TLLocalSyncClient.test.ts +15 -15
- package/src/lib/utils/sync/TLLocalSyncClient.ts +1 -0
- package/src/version.ts +3 -3
- package/dist-cjs/lib/components/default-components/DefaultShapeWrapper.js +0 -53
- package/dist-cjs/lib/components/default-components/DefaultShapeWrapper.js.map +0 -7
- package/dist-cjs/lib/hooks/useStateAttribute.js +0 -35
- package/dist-cjs/lib/hooks/useStateAttribute.js.map +0 -7
- package/dist-cjs/lib/utils/EditorAtom.js +0 -45
- package/dist-cjs/lib/utils/EditorAtom.js.map +0 -7
- package/dist-esm/lib/components/default-components/DefaultShapeWrapper.mjs +0 -23
- package/dist-esm/lib/components/default-components/DefaultShapeWrapper.mjs.map +0 -7
- package/dist-esm/lib/hooks/useStateAttribute.mjs +0 -15
- package/dist-esm/lib/hooks/useStateAttribute.mjs.map +0 -7
- package/dist-esm/lib/utils/EditorAtom.mjs +0 -25
- package/dist-esm/lib/utils/EditorAtom.mjs.map +0 -7
- package/src/lib/components/default-components/DefaultShapeWrapper.tsx +0 -35
- package/src/lib/editor/tools/StateNode.test.ts +0 -285
- package/src/lib/hooks/useStateAttribute.ts +0 -15
- package/src/lib/primitives/intersect.test.ts +0 -946
- package/src/lib/utils/EditorAtom.ts +0 -37
|
@@ -1466,9 +1466,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1466
1466
|
return this;
|
|
1467
1467
|
}
|
|
1468
1468
|
/**
|
|
1469
|
-
* Select all
|
|
1470
|
-
* select all shapes within that parent. If the user has not selected any shapes,
|
|
1471
|
-
* or if the shapes shapes are only on select all shapes on the current page.
|
|
1469
|
+
* Select all direct children of the current page.
|
|
1472
1470
|
*
|
|
1473
1471
|
* @example
|
|
1474
1472
|
* ```ts
|
|
@@ -1478,23 +1476,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1478
1476
|
* @public
|
|
1479
1477
|
*/
|
|
1480
1478
|
selectAll() {
|
|
1481
|
-
|
|
1482
|
-
const selectedShapeIds = this.getSelectedShapeIds();
|
|
1483
|
-
if (selectedShapeIds.length > 0) {
|
|
1484
|
-
for (const id of selectedShapeIds) {
|
|
1485
|
-
const shape = this.getShape(id);
|
|
1486
|
-
if (!shape) continue;
|
|
1487
|
-
if (parentToSelectWithinId === null) {
|
|
1488
|
-
parentToSelectWithinId = shape.parentId;
|
|
1489
|
-
} else if (parentToSelectWithinId !== shape.parentId) {
|
|
1490
|
-
return this;
|
|
1491
|
-
}
|
|
1492
|
-
}
|
|
1493
|
-
}
|
|
1494
|
-
if (!parentToSelectWithinId) {
|
|
1495
|
-
parentToSelectWithinId = this.getCurrentPageId();
|
|
1496
|
-
}
|
|
1497
|
-
const ids = this.getSortedChildIdsForParent(parentToSelectWithinId);
|
|
1479
|
+
const ids = this.getSortedChildIdsForParent(this.getCurrentPageId());
|
|
1498
1480
|
if (ids.length <= 0) return this;
|
|
1499
1481
|
this.setSelectedShapes(this._getUnlockedShapeIds(ids));
|
|
1500
1482
|
return this;
|
|
@@ -1513,8 +1495,9 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1513
1495
|
const selectedShapeIds = this.getSelectedShapeIds();
|
|
1514
1496
|
const firstParentId = selectedShapeIds[0] ? this.getShape(selectedShapeIds[0])?.parentId : null;
|
|
1515
1497
|
const isSelectedWithinContainer = firstParentId && selectedShapeIds.every((shapeId) => this.getShape(shapeId)?.parentId === firstParentId) && !isPageId(firstParentId);
|
|
1516
|
-
const
|
|
1517
|
-
|
|
1498
|
+
const readingOrderShapes = isSelectedWithinContainer ? this._getShapesInReadingOrder(
|
|
1499
|
+
this.getCurrentPageShapes().filter((shape2) => shape2.parentId === firstParentId)
|
|
1500
|
+
) : this.getCurrentPageShapesInReadingOrder();
|
|
1518
1501
|
const currentShapeId = selectedShapeIds.length === 1 ? selectedShapeIds[0] : readingOrderShapes.find((shape2) => selectedShapeIds.includes(shape2.id))?.id;
|
|
1519
1502
|
let adjacentShapeId;
|
|
1520
1503
|
if (direction === "next" || direction === "prev") {
|
|
@@ -1524,7 +1507,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1524
1507
|
adjacentShapeId = shapeIds[adjacentIndex];
|
|
1525
1508
|
} else {
|
|
1526
1509
|
if (!currentShapeId) return;
|
|
1527
|
-
adjacentShapeId = this.getNearestAdjacentShape(
|
|
1510
|
+
adjacentShapeId = this.getNearestAdjacentShape(currentShapeId, direction);
|
|
1528
1511
|
}
|
|
1529
1512
|
const shape = this.getShape(adjacentShapeId);
|
|
1530
1513
|
if (!shape) return;
|
|
@@ -1590,10 +1573,11 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
1590
1573
|
*
|
|
1591
1574
|
* @public
|
|
1592
1575
|
*/
|
|
1593
|
-
getNearestAdjacentShape(
|
|
1576
|
+
getNearestAdjacentShape(currentShapeId, direction) {
|
|
1594
1577
|
const directionToAngle = { right: 0, left: 180, down: 90, up: 270 };
|
|
1595
1578
|
const currentShape = this.getShape(currentShapeId);
|
|
1596
1579
|
if (!currentShape) return currentShapeId;
|
|
1580
|
+
const shapes = this.getCurrentPageShapes();
|
|
1597
1581
|
const tabbableShapes = shapes.filter(
|
|
1598
1582
|
(shape) => this.getShapeUtil(shape).canTabTo(shape) && shape.id !== currentShapeId
|
|
1599
1583
|
);
|
|
@@ -2357,11 +2341,28 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
2357
2341
|
{ history: "ignore" }
|
|
2358
2342
|
);
|
|
2359
2343
|
const { currentScreenPoint, currentPagePoint } = this.inputs;
|
|
2344
|
+
const { screenBounds } = this.store.unsafeGetWithoutCapture(TLINSTANCE_ID);
|
|
2360
2345
|
if (currentScreenPoint.x / z - x !== currentPagePoint.x || currentScreenPoint.y / z - y !== currentPagePoint.y) {
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2346
|
+
const event = {
|
|
2347
|
+
type: "pointer",
|
|
2348
|
+
target: "canvas",
|
|
2349
|
+
name: "pointer_move",
|
|
2350
|
+
// weird but true: we need to put the screen point back into client space
|
|
2351
|
+
point: Vec.AddXY(currentScreenPoint, screenBounds.x, screenBounds.y),
|
|
2352
|
+
pointerId: INTERNAL_POINTER_IDS.CAMERA_MOVE,
|
|
2353
|
+
ctrlKey: this.inputs.ctrlKey,
|
|
2354
|
+
altKey: this.inputs.altKey,
|
|
2355
|
+
shiftKey: this.inputs.shiftKey,
|
|
2356
|
+
metaKey: this.inputs.metaKey,
|
|
2357
|
+
accelKey: isAccelKey(this.inputs),
|
|
2358
|
+
button: 0,
|
|
2359
|
+
isPen: this.getInstanceState().isPenMode ?? false
|
|
2360
|
+
};
|
|
2361
|
+
if (opts?.immediate) {
|
|
2362
|
+
this._flushEventForTick(event);
|
|
2363
|
+
} else {
|
|
2364
|
+
this.dispatch(event);
|
|
2365
|
+
}
|
|
2365
2366
|
}
|
|
2366
2367
|
this._tickCameraState();
|
|
2367
2368
|
});
|
|
@@ -3330,24 +3331,19 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3330
3331
|
*/
|
|
3331
3332
|
deletePage(page) {
|
|
3332
3333
|
const id = typeof page === "string" ? page : page.id;
|
|
3333
|
-
this.run(
|
|
3334
|
-
()
|
|
3335
|
-
|
|
3336
|
-
|
|
3337
|
-
|
|
3338
|
-
|
|
3339
|
-
|
|
3340
|
-
|
|
3341
|
-
|
|
3342
|
-
|
|
3343
|
-
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
this.deleteShapes(shapes);
|
|
3347
|
-
this.store.remove([deletedPage.id]);
|
|
3348
|
-
},
|
|
3349
|
-
{ ignoreShapeLock: true }
|
|
3350
|
-
);
|
|
3334
|
+
this.run(() => {
|
|
3335
|
+
if (this.getIsReadonly()) return;
|
|
3336
|
+
const pages = this.getPages();
|
|
3337
|
+
if (pages.length === 1) return;
|
|
3338
|
+
const deletedPage = this.getPage(id);
|
|
3339
|
+
if (!deletedPage) return;
|
|
3340
|
+
if (id === this.getCurrentPageId()) {
|
|
3341
|
+
const index = pages.findIndex((page2) => page2.id === id);
|
|
3342
|
+
const next = pages[index - 1] ?? pages[index + 1];
|
|
3343
|
+
this.setCurrentPage(next.id);
|
|
3344
|
+
}
|
|
3345
|
+
this.store.remove([deletedPage.id]);
|
|
3346
|
+
});
|
|
3351
3347
|
return this;
|
|
3352
3348
|
}
|
|
3353
3349
|
/**
|
|
@@ -3944,7 +3940,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3944
3940
|
hitInside = false,
|
|
3945
3941
|
hitFrameInside = false
|
|
3946
3942
|
} = opts;
|
|
3947
|
-
const [innerMargin, outerMargin] = Array.isArray(margin) ? margin : [margin, margin];
|
|
3948
3943
|
let inHollowSmallestArea = Infinity;
|
|
3949
3944
|
let inHollowSmallestAreaHit = null;
|
|
3950
3945
|
let inMarginClosestToEdgeDistance = Infinity;
|
|
@@ -3954,7 +3949,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3954
3949
|
return false;
|
|
3955
3950
|
const pageMask = this.getShapeMask(shape);
|
|
3956
3951
|
if (pageMask && !pointInPolygon(point, pageMask)) return false;
|
|
3957
|
-
if (filter
|
|
3952
|
+
if (filter) return filter(shape);
|
|
3958
3953
|
return true;
|
|
3959
3954
|
});
|
|
3960
3955
|
for (let i = shapesToCheck.length - 1; i >= 0; i--) {
|
|
@@ -3962,7 +3957,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3962
3957
|
const geometry = this.getShapeGeometry(shape);
|
|
3963
3958
|
const isGroup = geometry instanceof Group2d;
|
|
3964
3959
|
const pointInShapeSpace = this.getPointInShapeSpace(shape, point);
|
|
3965
|
-
if (this.isShapeOfType(shape, "frame") ||
|
|
3960
|
+
if (this.isShapeOfType(shape, "frame") || this.isShapeOfType(shape, "arrow") && shape.props.text.trim() || (this.isShapeOfType(shape, "note") || this.isShapeOfType(shape, "geo") && shape.props.fill === "none") && this.getShapeUtil(shape).getText(shape)?.trim()) {
|
|
3966
3961
|
for (const childGeometry of geometry.children) {
|
|
3967
3962
|
if (childGeometry.isLabel && childGeometry.isPointInBounds(pointInShapeSpace)) {
|
|
3968
3963
|
return shape;
|
|
@@ -3970,8 +3965,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3970
3965
|
}
|
|
3971
3966
|
}
|
|
3972
3967
|
if (this.isShapeOfType(shape, "frame")) {
|
|
3973
|
-
const distance2 = geometry.distanceToPoint(pointInShapeSpace,
|
|
3974
|
-
if (
|
|
3968
|
+
const distance2 = geometry.distanceToPoint(pointInShapeSpace, hitInside);
|
|
3969
|
+
if (Math.abs(distance2) <= margin) {
|
|
3975
3970
|
return inMarginClosestToEdgeHit || shape;
|
|
3976
3971
|
}
|
|
3977
3972
|
if (geometry.hitTestPoint(pointInShapeSpace, 0, true)) {
|
|
@@ -3991,10 +3986,10 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
3991
3986
|
}
|
|
3992
3987
|
distance = minDistance;
|
|
3993
3988
|
} else {
|
|
3994
|
-
if (
|
|
3989
|
+
if (margin === 0 && (geometry.bounds.w < 1 || geometry.bounds.h < 1)) {
|
|
3995
3990
|
distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
|
|
3996
3991
|
} else {
|
|
3997
|
-
if (geometry.bounds.containsPoint(pointInShapeSpace,
|
|
3992
|
+
if (geometry.bounds.containsPoint(pointInShapeSpace, margin)) {
|
|
3998
3993
|
distance = geometry.distanceToPoint(pointInShapeSpace, hitInside);
|
|
3999
3994
|
} else {
|
|
4000
3995
|
distance = Infinity;
|
|
@@ -4002,22 +3997,12 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
4002
3997
|
}
|
|
4003
3998
|
}
|
|
4004
3999
|
if (geometry.isClosed) {
|
|
4005
|
-
if (distance <=
|
|
4000
|
+
if (distance <= margin) {
|
|
4006
4001
|
if (geometry.isFilled || isGroup && geometry.children[0].isFilled) {
|
|
4007
4002
|
return inMarginClosestToEdgeHit || shape;
|
|
4008
4003
|
} else {
|
|
4009
4004
|
if (this.getShapePageBounds(shape).contains(viewportPageBounds)) continue;
|
|
4010
|
-
if (
|
|
4011
|
-
// On hitInside, the distance will be negative for hits inside
|
|
4012
|
-
// If the distance is positive, check against the outer margin
|
|
4013
|
-
(// If the distance is negative, check against the inner margin
|
|
4014
|
-
distance > 0 && distance <= outerMargin || distance <= 0 && distance > -innerMargin)
|
|
4015
|
-
) : (
|
|
4016
|
-
// If hitInside is false, then sadly _we do not know_ whether the
|
|
4017
|
-
// point is inside or outside of the shape, so we check against
|
|
4018
|
-
// the max of the two margins
|
|
4019
|
-
(Math.abs(distance) <= Math.max(innerMargin, outerMargin))
|
|
4020
|
-
)) {
|
|
4005
|
+
if (Math.abs(distance) < margin) {
|
|
4021
4006
|
if (Math.abs(distance) < inMarginClosestToEdgeDistance) {
|
|
4022
4007
|
inMarginClosestToEdgeDistance = Math.abs(distance);
|
|
4023
4008
|
inMarginClosestToEdgeHit = shape;
|
|
@@ -4782,16 +4767,7 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
4782
4767
|
}
|
|
4783
4768
|
this.createShapes(shapesToCreate);
|
|
4784
4769
|
this.createBindings(bindingsToCreate);
|
|
4785
|
-
this.setSelectedShapes(
|
|
4786
|
-
compact(
|
|
4787
|
-
ids.map((oldId) => {
|
|
4788
|
-
const newId = shapeIds.get(oldId);
|
|
4789
|
-
if (!newId) return null;
|
|
4790
|
-
if (!this.getShape(newId)) return null;
|
|
4791
|
-
return newId;
|
|
4792
|
-
})
|
|
4793
|
-
)
|
|
4794
|
-
);
|
|
4770
|
+
this.setSelectedShapes(compact(ids.map((id) => shapeIds.get(id))));
|
|
4795
4771
|
if (offset !== void 0) {
|
|
4796
4772
|
const selectionPageBounds = this.getSelectionPageBounds();
|
|
4797
4773
|
const viewportPageBounds = this.getViewportPageBounds();
|
|
@@ -5545,7 +5521,8 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
5545
5521
|
const shapesMovingTogether = [shape];
|
|
5546
5522
|
const boundsOfShapesMovingTogether = [shapePageBounds];
|
|
5547
5523
|
if (!this.getShapeUtil(shape).canBeLaidOut?.(shape, {
|
|
5548
|
-
type: "stretch"
|
|
5524
|
+
type: "stretch",
|
|
5525
|
+
shapes: shapesToStretchFirstPass
|
|
5549
5526
|
})) {
|
|
5550
5527
|
continue;
|
|
5551
5528
|
}
|
|
@@ -5870,24 +5847,21 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
5870
5847
|
}
|
|
5871
5848
|
if (!partial.parentId || !(this.store.has(partial.parentId) || shapes.some((p) => p.id === partial.parentId))) {
|
|
5872
5849
|
let parentId = this.getFocusedGroupId();
|
|
5873
|
-
|
|
5874
|
-
|
|
5875
|
-
|
|
5876
|
-
|
|
5877
|
-
|
|
5878
|
-
|
|
5879
|
-
|
|
5880
|
-
|
|
5881
|
-
|
|
5882
|
-
|
|
5883
|
-
|
|
5884
|
-
margin: 0,
|
|
5885
|
-
hitInside: true
|
|
5886
|
-
}
|
|
5887
|
-
)) {
|
|
5888
|
-
parentId = parent.id;
|
|
5889
|
-
break;
|
|
5850
|
+
for (let i = currentPageShapesSorted.length - 1; i >= 0; i--) {
|
|
5851
|
+
const parent = currentPageShapesSorted[i];
|
|
5852
|
+
const util = this.getShapeUtil(parent);
|
|
5853
|
+
if (util.canReceiveNewChildrenOfType(parent, partial.type) && !this.isShapeHidden(parent) && this.isPointInShape(
|
|
5854
|
+
parent,
|
|
5855
|
+
// If no parent is provided, then we can treat the
|
|
5856
|
+
// shape's provided x/y as being in the page's space.
|
|
5857
|
+
{ x: partial.x ?? 0, y: partial.y ?? 0 },
|
|
5858
|
+
{
|
|
5859
|
+
margin: 0,
|
|
5860
|
+
hitInside: true
|
|
5890
5861
|
}
|
|
5862
|
+
)) {
|
|
5863
|
+
parentId = parent.id;
|
|
5864
|
+
break;
|
|
5891
5865
|
}
|
|
5892
5866
|
}
|
|
5893
5867
|
const prevParentId = partial.parentId;
|
|
@@ -7072,47 +7046,6 @@ class Editor extends (_a = EventEmitter, _getIsShapeHiddenCache_dec = [computed]
|
|
|
7072
7046
|
this.dispatch({ type: "misc", name: "complete" });
|
|
7073
7047
|
return this;
|
|
7074
7048
|
}
|
|
7075
|
-
/**
|
|
7076
|
-
* Dispatch a pointer move event in the current position of the pointer. This is useful when
|
|
7077
|
-
* external circumstances have changed (e.g. the camera moved or a shape was moved) and you want
|
|
7078
|
-
* the current interaction to respond to that change.
|
|
7079
|
-
*
|
|
7080
|
-
* @example
|
|
7081
|
-
* ```ts
|
|
7082
|
-
* editor.updatePointer()
|
|
7083
|
-
* ```
|
|
7084
|
-
*
|
|
7085
|
-
* @param options - The options for updating the pointer.
|
|
7086
|
-
* @returns The editor instance.
|
|
7087
|
-
* @public
|
|
7088
|
-
*/
|
|
7089
|
-
updatePointer(options) {
|
|
7090
|
-
const event = {
|
|
7091
|
-
type: "pointer",
|
|
7092
|
-
target: "canvas",
|
|
7093
|
-
name: "pointer_move",
|
|
7094
|
-
point: options?.point ?? // weird but true: what `inputs` calls screen-space is actually viewport space. so
|
|
7095
|
-
// we need to convert back into true screen space first. we should fix this...
|
|
7096
|
-
Vec.Add(
|
|
7097
|
-
this.inputs.currentScreenPoint,
|
|
7098
|
-
this.store.unsafeGetWithoutCapture(TLINSTANCE_ID).screenBounds
|
|
7099
|
-
),
|
|
7100
|
-
pointerId: options?.pointerId ?? 0,
|
|
7101
|
-
button: options?.button ?? 0,
|
|
7102
|
-
isPen: options?.isPen ?? this.inputs.isPen,
|
|
7103
|
-
shiftKey: options?.shiftKey ?? this.inputs.shiftKey,
|
|
7104
|
-
altKey: options?.altKey ?? this.inputs.altKey,
|
|
7105
|
-
ctrlKey: options?.ctrlKey ?? this.inputs.ctrlKey,
|
|
7106
|
-
metaKey: options?.metaKey ?? this.inputs.metaKey,
|
|
7107
|
-
accelKey: options?.accelKey ?? isAccelKey(this.inputs)
|
|
7108
|
-
};
|
|
7109
|
-
if (options?.immediate) {
|
|
7110
|
-
this._flushEventForTick(event);
|
|
7111
|
-
} else {
|
|
7112
|
-
this.dispatch(event);
|
|
7113
|
-
}
|
|
7114
|
-
return this;
|
|
7115
|
-
}
|
|
7116
7049
|
/**
|
|
7117
7050
|
* Puts the editor into focused mode.
|
|
7118
7051
|
*
|