@oh-just-another/state 0.60.0 → 0.62.0
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/CHANGELOG.md +110 -0
- package/README.md +4 -4
- package/dist/.tsbuildinfo +1 -1
- package/dist/actions/actionKeyboard.js +2 -2
- package/dist/actions/actionKeyboard.js.map +1 -1
- package/dist/actions/actionMode.d.ts +0 -2
- package/dist/actions/actionMode.d.ts.map +1 -1
- package/dist/actions/actionMode.js +37 -37
- package/dist/actions/actionMode.js.map +1 -1
- package/dist/actions/types.d.ts +1 -1
- package/dist/built-in-handlers.d.ts +8 -0
- package/dist/built-in-handlers.d.ts.map +1 -1
- package/dist/built-in-handlers.js +31 -16
- package/dist/built-in-handlers.js.map +1 -1
- package/dist/constants.d.ts +110 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +111 -4
- package/dist/constants.js.map +1 -1
- package/dist/editor/animation-scene.d.ts.map +1 -1
- package/dist/editor/animation-scene.js +37 -1
- package/dist/editor/animation-scene.js.map +1 -1
- package/dist/editor/event-fanout.d.ts +6 -6
- package/dist/editor/event-fanout.d.ts.map +1 -1
- package/dist/editor/event-fanout.js +8 -8
- package/dist/editor/event-fanout.js.map +1 -1
- package/dist/editor/hit-test.d.ts +8 -0
- package/dist/editor/hit-test.d.ts.map +1 -1
- package/dist/editor/hit-test.js +31 -16
- package/dist/editor/hit-test.js.map +1 -1
- package/dist/editor/link-handle-drag.d.ts +20 -0
- package/dist/editor/link-handle-drag.d.ts.map +1 -1
- package/dist/editor/link-handle-drag.js +71 -2
- package/dist/editor/link-handle-drag.js.map +1 -1
- package/dist/editor/pointer-binding.d.ts.map +1 -1
- package/dist/editor/pointer-binding.js +93 -39
- package/dist/editor/pointer-binding.js.map +1 -1
- package/dist/editor/public/brush.d.ts +69 -8
- package/dist/editor/public/brush.d.ts.map +1 -1
- package/dist/editor/public/brush.js +189 -20
- package/dist/editor/public/brush.js.map +1 -1
- package/dist/editor/public/cursor.js +4 -5
- package/dist/editor/public/cursor.js.map +1 -1
- package/dist/editor/render-orchestrator.d.ts +9 -6
- package/dist/editor/render-orchestrator.d.ts.map +1 -1
- package/dist/editor/render-orchestrator.js +25 -28
- package/dist/editor/render-orchestrator.js.map +1 -1
- package/dist/editor-events.d.ts +5 -5
- package/dist/editor-events.d.ts.map +1 -1
- package/dist/editor.d.ts +64 -19
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +116 -60
- package/dist/editor.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/modes.d.ts +24 -5
- package/dist/modes.d.ts.map +1 -1
- package/dist/modes.js.map +1 -1
- package/dist/overlay.d.ts +7 -19
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +18 -49
- package/dist/overlay.js.map +1 -1
- package/package.json +6 -5
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { getLink, getLinkPath, isNoop, updateLink, } from "@oh-just-another/scene";
|
|
1
|
+
import { getLink, getLinkCurvePoints, getLinkPath, isNoop, projectPointToPathT, updateLink, } from "@oh-just-another/scene";
|
|
2
2
|
import { hitTest, vec2 } from "@oh-just-another/math";
|
|
3
|
-
import { DOUBLE_CLICK_MS, DOUBLE_CLICK_TOLERANCE_PX, WAYPOINT_COLLAPSE_RADIUS, } from "../constants.js";
|
|
3
|
+
import { DOUBLE_CLICK_MS, DOUBLE_CLICK_TOLERANCE_PX, LINK_LABEL_DRAG_SNAP_PX, WAYPOINT_COLLAPSE_RADIUS, } from "../constants.js";
|
|
4
4
|
import { req } from "../util.js";
|
|
5
5
|
import { computeLinkEndpointUpdate } from "./applies/edge.js";
|
|
6
6
|
/**
|
|
@@ -32,6 +32,15 @@ export class LinkHandleDragController {
|
|
|
32
32
|
* step via the gesture tx.
|
|
33
33
|
*/
|
|
34
34
|
_segmentDrag = null;
|
|
35
|
+
/**
|
|
36
|
+
* Host-managed caption (label pill) drag along the link's path. The cursor
|
|
37
|
+
* is projected back onto the drawn polyline so the pill can only slide
|
|
38
|
+
* ALONG the link; near the arc-length middle it snaps back to the default
|
|
39
|
+
* position (`label.position` removed). One undo step via the gesture tx.
|
|
40
|
+
* `moved` distinguishes a click (kept for the double-click-to-edit chain)
|
|
41
|
+
* from a real drag.
|
|
42
|
+
*/
|
|
43
|
+
_labelDrag = null;
|
|
35
44
|
/** Wall-clock of the previous handle press — drives `isHandleDoubleClick`. */
|
|
36
45
|
lastHandleClickAt = 0;
|
|
37
46
|
lastHandleClickWorld = null;
|
|
@@ -47,11 +56,18 @@ export class LinkHandleDragController {
|
|
|
47
56
|
get segmentDrag() {
|
|
48
57
|
return this._segmentDrag;
|
|
49
58
|
}
|
|
59
|
+
get labelDrag() {
|
|
60
|
+
return this._labelDrag;
|
|
61
|
+
}
|
|
62
|
+
get isDraggingLabel() {
|
|
63
|
+
return this._labelDrag !== null;
|
|
64
|
+
}
|
|
50
65
|
/** Drop all drag state without committing (Escape / cancelInteraction). */
|
|
51
66
|
reset() {
|
|
52
67
|
this._waypointDrag = null;
|
|
53
68
|
this._segmentDrag = null;
|
|
54
69
|
this._endpointDrag = null;
|
|
70
|
+
this._labelDrag = null;
|
|
55
71
|
}
|
|
56
72
|
/**
|
|
57
73
|
* Live endpoint-rebind move: re-point the dragged end to the cursor in the
|
|
@@ -234,6 +250,59 @@ export class LinkHandleDragController {
|
|
|
234
250
|
this._segmentDrag = null;
|
|
235
251
|
this.host.commitGesture();
|
|
236
252
|
}
|
|
253
|
+
/** Begin dragging the selected link's caption pill along its path. */
|
|
254
|
+
beginLabelDrag(linkId) {
|
|
255
|
+
if (!getLink(this.host.scene, linkId)?.label)
|
|
256
|
+
return;
|
|
257
|
+
this._labelDrag = { linkId, moved: false };
|
|
258
|
+
}
|
|
259
|
+
/** Live update: project the cursor onto the path, snap near the middle. */
|
|
260
|
+
updateLabelDrag(world) {
|
|
261
|
+
const drag = this._labelDrag;
|
|
262
|
+
if (!drag)
|
|
263
|
+
return;
|
|
264
|
+
drag.moved = true;
|
|
265
|
+
// A real drag breaks the handle double-click chain (see updateSegmentDrag).
|
|
266
|
+
this.lastHandleClickAt = 0;
|
|
267
|
+
const edge = getLink(this.host.scene, drag.linkId);
|
|
268
|
+
if (!edge?.label)
|
|
269
|
+
return;
|
|
270
|
+
const path = getLinkCurvePoints(this.host.scene, edge);
|
|
271
|
+
if (!path || path.length < 2)
|
|
272
|
+
return;
|
|
273
|
+
let total = 0;
|
|
274
|
+
for (let i = 1; i < path.length; i++) {
|
|
275
|
+
const a = path[i - 1];
|
|
276
|
+
const b = path[i];
|
|
277
|
+
if (a && b)
|
|
278
|
+
total += Math.hypot(b.x - a.x, b.y - a.y);
|
|
279
|
+
}
|
|
280
|
+
const t = projectPointToPathT(path, world);
|
|
281
|
+
// Snap back to the default placement near the middle: remove the explicit
|
|
282
|
+
// position so elbow links regain their longest-segment auto-placement.
|
|
283
|
+
const zoom = this.host.scene.viewport.zoom || 1;
|
|
284
|
+
const snapped = total > 0 && Math.abs(t - 0.5) * total < LINK_LABEL_DRAG_SNAP_PX / zoom;
|
|
285
|
+
const r = updateLink(this.host.scene, drag.linkId, (e) => {
|
|
286
|
+
if (!e.label)
|
|
287
|
+
return e;
|
|
288
|
+
if (snapped) {
|
|
289
|
+
const { position: _position, ...rest } = e.label;
|
|
290
|
+
void _position;
|
|
291
|
+
return { ...e, label: rest };
|
|
292
|
+
}
|
|
293
|
+
return { ...e, label: { ...e.label, position: t } };
|
|
294
|
+
});
|
|
295
|
+
this.host.scene = r.scene;
|
|
296
|
+
this.host.recordGesturePatch(r.patch);
|
|
297
|
+
this.host.notify();
|
|
298
|
+
}
|
|
299
|
+
/** Finish the caption drag (commits the gesture as one undo step). */
|
|
300
|
+
endLabelDrag() {
|
|
301
|
+
if (!this._labelDrag)
|
|
302
|
+
return;
|
|
303
|
+
this._labelDrag = null;
|
|
304
|
+
this.host.commitGesture();
|
|
305
|
+
}
|
|
237
306
|
/**
|
|
238
307
|
* Double-click detector for link edit handles (waypoint / segment).
|
|
239
308
|
* Returns true when this press follows the previous handle press within
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-handle-drag.js","sourceRoot":"","sources":["../../src/editor/link-handle-drag.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"link-handle-drag.js","sourceRoot":"","sources":["../../src/editor/link-handle-drag.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pointer-binding.d.ts","sourceRoot":"","sources":["../../src/editor/pointer-binding.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"pointer-binding.d.ts","sourceRoot":"","sources":["../../src/editor/pointer-binding.ts"],"names":[],"mappings":"AA4CA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAmnC3C;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,CAAC,MAAM,IAAI,CAyR7D,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { findContainerAt, getAnchorWorld, getDropZoneWorld, getElement, getElementWorldBounds, getLink, getLinkPath, getLinkWaypointMidpoints, isFrame, isGroup, isImage, isText, updateAnnotation, } from "@oh-just-another/scene";
|
|
1
|
+
import { findContainerAt, getElbowSegmentHandles, linkLabelBounds, getAnchorWorld, getDropZoneWorld, getElement, getElementWorldBounds, getLink, getLinkPath, getLinkWaypointMidpoints, isFrame, isGroup, isImage, isText, updateAnnotation, } from "@oh-just-another/scene";
|
|
2
2
|
import { boundsFromPoints, interpretPressEnd, DRAG_THRESHOLD, } from "../machine.js";
|
|
3
3
|
import { fromPointerEvent, isEditableTarget } from "../dom-events.js";
|
|
4
4
|
import * as Selection from "../selection.js";
|
|
@@ -6,16 +6,64 @@ import * as LinkSelection from "../link-selection.js";
|
|
|
6
6
|
import { getInteractiveHitTester } from "../interactive.js";
|
|
7
7
|
import { anchorOverlayPoints } from "./anchor-points.js";
|
|
8
8
|
import { snapshotMovingLinks } from "./applies/link-move.js";
|
|
9
|
-
import { ANCHOR_DOT_ACTIVE_RADIUS, LINK_ENDPOINT_HANDLE_RADIUS, LINK_START_ANCHOR_OUTSET, LONG_PRESS_MAX_MOVEMENT_PX, WHEEL_PAN_FACTOR, WHEEL_ZOOM_MAX_STEP, WHEEL_ZOOM_SPEED, } from "../constants.js";
|
|
9
|
+
import { ANCHOR_DOT_ACTIVE_RADIUS, DOUBLE_CLICK_MS, DOUBLE_CLICK_TOLERANCE_PX, LINK_ENDPOINT_HANDLE_RADIUS, LINK_START_ANCHOR_OUTSET, LONG_PRESS_MAX_MOVEMENT_PX, WHEEL_PAN_FACTOR, WHEEL_ZOOM_MAX_STEP, WHEEL_ZOOM_SPEED, } from "../constants.js";
|
|
10
10
|
import { vec2 } from "@oh-just-another/math";
|
|
11
11
|
import { clampZoom } from "./public/zoom-pan.js";
|
|
12
12
|
import { req } from "../util.js";
|
|
13
|
-
/**
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Caption pill drag — a press inside the SELECTED link's label pill grabs the
|
|
15
|
+
* caption: dragging slides it along the link's path (projection, snap back to
|
|
16
|
+
* the middle), a double-click opens the inline text editor. Owns the press so
|
|
17
|
+
* the machine's link-move gesture doesn't translate the whole link instead.
|
|
18
|
+
* An unselected link falls through (first click selects as before).
|
|
19
|
+
*/
|
|
20
|
+
const handleDownLabelDrag = (editor, worldPoint) => {
|
|
21
|
+
if (editor.readOnly)
|
|
22
|
+
return false;
|
|
23
|
+
const linkId = editor.selectedLink;
|
|
24
|
+
if (!(editor.activeTool.type === "select" && linkId))
|
|
25
|
+
return false;
|
|
26
|
+
const edge = getLink(editor._scene, linkId);
|
|
27
|
+
if (!edge?.label)
|
|
28
|
+
return false;
|
|
29
|
+
const b = linkLabelBounds(editor._scene, edge);
|
|
30
|
+
const inside = b !== null &&
|
|
31
|
+
worldPoint.x >= b.x &&
|
|
32
|
+
worldPoint.x <= b.x + b.width &&
|
|
33
|
+
worldPoint.y >= b.y &&
|
|
34
|
+
worldPoint.y <= b.y + b.height;
|
|
35
|
+
if (!inside)
|
|
36
|
+
return false;
|
|
37
|
+
editor.cancelLongPress();
|
|
38
|
+
// Second click of a double-click → edit the caption text. The FIRST click
|
|
39
|
+
// usually travelled the machine path (it selected the link), so consult the
|
|
40
|
+
// machine's click bookkeeping, not the handle chain.
|
|
41
|
+
const now = performance.now();
|
|
42
|
+
const last = editor.interaction.lastClickWorldPoint;
|
|
43
|
+
const isDouble = now - editor.interaction.lastClickAt < DOUBLE_CLICK_MS &&
|
|
44
|
+
last !== null &&
|
|
45
|
+
Math.hypot(last.x - worldPoint.x, last.y - worldPoint.y) <= DOUBLE_CLICK_TOLERANCE_PX;
|
|
46
|
+
editor.interaction.lastClickAt = now;
|
|
47
|
+
editor.interaction.lastClickWorldPoint = worldPoint;
|
|
48
|
+
if (isDouble) {
|
|
49
|
+
editor.beginLinkCaptionEdit(linkId);
|
|
50
|
+
return true;
|
|
51
|
+
}
|
|
52
|
+
editor.beginLabelDrag(linkId);
|
|
53
|
+
return true;
|
|
54
|
+
};
|
|
55
|
+
/** Caption drag move / release. */
|
|
56
|
+
const handleMoveLabelDrag = (editor, worldPoint) => {
|
|
57
|
+
if (!editor.isDraggingLabel)
|
|
58
|
+
return false;
|
|
59
|
+
editor.updateLabelDrag(worldPoint);
|
|
60
|
+
return true;
|
|
61
|
+
};
|
|
62
|
+
const handleUpLabelDrag = (editor) => {
|
|
63
|
+
if (!editor.isDraggingLabel)
|
|
64
|
+
return false;
|
|
65
|
+
editor.endLabelDrag();
|
|
66
|
+
return true;
|
|
19
67
|
};
|
|
20
68
|
/** True when `p` lies within `√r2` of `center` (squared-distance compare). */
|
|
21
69
|
const withinRadiusSq = (p, center, r2) => {
|
|
@@ -41,7 +89,7 @@ const withinRadiusSq = (p, center, r2) => {
|
|
|
41
89
|
const handleDownPanTrigger = (editor, ev, data) => {
|
|
42
90
|
const isRightClick = ev.button === 2 || ev.button === 1;
|
|
43
91
|
const isSpaceLeftDrag = ev.button === 0 && editor.spaceHeld;
|
|
44
|
-
const isHandModeLeftDrag = ev.button === 0 && editor.
|
|
92
|
+
const isHandModeLeftDrag = ev.button === 0 && editor.activeTool.type === "hand";
|
|
45
93
|
if (isRightClick || isSpaceLeftDrag || isHandModeLeftDrag) {
|
|
46
94
|
// Suppress the next native contextmenu — we'll either pan (drag) or fire
|
|
47
95
|
// the long-press callback at pointerup (click-style right-click).
|
|
@@ -99,25 +147,27 @@ const handleDownEditingText = (editor, worldPoint) => {
|
|
|
99
147
|
};
|
|
100
148
|
/** Crop-drag move — resize the window (handle) or pan the source (body). */
|
|
101
149
|
const handleMoveCrop = (editor, worldPoint) => {
|
|
102
|
-
if (editor.
|
|
150
|
+
if (editor.activeTool.type !== "crop" || editor.cropSession?.drag == null)
|
|
103
151
|
return false;
|
|
104
152
|
editor.updateImageCropDrag(worldPoint);
|
|
105
153
|
return true;
|
|
106
154
|
};
|
|
107
155
|
/** Crop-drag release — finish the drag (keeps the pending crop / box). */
|
|
108
156
|
const handleUpCrop = (editor) => {
|
|
109
|
-
if (editor.
|
|
157
|
+
if (editor.activeTool.type !== "crop" || editor.cropSession?.drag == null)
|
|
110
158
|
return false;
|
|
111
159
|
editor.endImageCropDrag();
|
|
112
160
|
return true;
|
|
113
161
|
};
|
|
114
162
|
/** Brush mode owns the gesture end-to-end — start a stroke, skip machine. */
|
|
115
|
-
const handleDownBrush = (editor, worldPoint, pressure) => {
|
|
163
|
+
const handleDownBrush = (editor, worldPoint, pressure, pointerType) => {
|
|
116
164
|
if (editor.readOnly)
|
|
117
165
|
return false;
|
|
118
|
-
if (editor.
|
|
166
|
+
if (editor.activeTool.type !== "brush")
|
|
119
167
|
return false;
|
|
120
|
-
|
|
168
|
+
// pointerType picks the pressure source: pens report real pressure, mouse /
|
|
169
|
+
// touch get it simulated from pointer speed.
|
|
170
|
+
editor.beginBrushStroke(worldPoint, pressure, pointerType);
|
|
121
171
|
return true;
|
|
122
172
|
};
|
|
123
173
|
/**
|
|
@@ -128,7 +178,7 @@ const handleDownBrush = (editor, worldPoint, pressure) => {
|
|
|
128
178
|
const handleDownErase = (editor, worldPoint, restore, strokeErase) => {
|
|
129
179
|
if (editor.readOnly)
|
|
130
180
|
return false;
|
|
131
|
-
if (editor.
|
|
181
|
+
if (editor.activeTool.type !== "erase")
|
|
132
182
|
return false;
|
|
133
183
|
editor.cancelLongPress();
|
|
134
184
|
editor.beginEraseStroke(worldPoint, restore, strokeErase);
|
|
@@ -136,7 +186,7 @@ const handleDownErase = (editor, worldPoint, restore, strokeErase) => {
|
|
|
136
186
|
};
|
|
137
187
|
/** Laser mode — begin an ephemeral trail. Never touches the scene. */
|
|
138
188
|
const handleDownLaser = (editor, worldPoint) => {
|
|
139
|
-
if (editor.
|
|
189
|
+
if (editor.activeTool.type !== "laser")
|
|
140
190
|
return false;
|
|
141
191
|
editor.cancelLongPress();
|
|
142
192
|
editor.beginLaserStroke(worldPoint);
|
|
@@ -144,11 +194,11 @@ const handleDownLaser = (editor, worldPoint) => {
|
|
|
144
194
|
};
|
|
145
195
|
/**
|
|
146
196
|
* Eyedropper — a click samples the colour of the shape under the cursor. Fires
|
|
147
|
-
*
|
|
148
|
-
*
|
|
197
|
+
* only while the colour-picker pipette is armed ({@link Editor.isEyedropperArmed};
|
|
198
|
+
* the tool mode never changes). Owns the gesture end-to-end.
|
|
149
199
|
*/
|
|
150
200
|
const handleDownEyedropper = (editor, worldPoint) => {
|
|
151
|
-
if (
|
|
201
|
+
if (!editor.isEyedropperArmed)
|
|
152
202
|
return false;
|
|
153
203
|
editor.cancelLongPress();
|
|
154
204
|
editor.applyEyedropperAt(worldPoint);
|
|
@@ -162,7 +212,7 @@ const handleDownEyedropper = (editor, worldPoint) => {
|
|
|
162
212
|
* gesture only when it grabbed a handle / the body.
|
|
163
213
|
*/
|
|
164
214
|
const handleDownCrop = (editor, worldPoint) => {
|
|
165
|
-
if (editor.
|
|
215
|
+
if (editor.activeTool.type !== "crop" || editor.cropSession === null)
|
|
166
216
|
return false;
|
|
167
217
|
const target = editor.cropHandleAtWorld(worldPoint);
|
|
168
218
|
if (target === null) {
|
|
@@ -185,7 +235,7 @@ const handleDownCrop = (editor, worldPoint) => {
|
|
|
185
235
|
* crop (which would otherwise swallow the press and break tap gestures).
|
|
186
236
|
*/
|
|
187
237
|
const handleDownCropEnter = (editor, worldPoint, detail) => {
|
|
188
|
-
if (editor.readOnly || editor.
|
|
238
|
+
if (editor.readOnly || editor.activeTool.type !== "select" || (detail || 0) < 2)
|
|
189
239
|
return false;
|
|
190
240
|
const hit = editor.hitTest(worldPoint);
|
|
191
241
|
if (hit.kind !== "element")
|
|
@@ -203,7 +253,7 @@ const handleDownCropEnter = (editor, worldPoint, detail) => {
|
|
|
203
253
|
const handleDownDrawText = (editor, worldPoint) => {
|
|
204
254
|
if (editor.readOnly)
|
|
205
255
|
return false;
|
|
206
|
-
if (editor.
|
|
256
|
+
if (editor.activeTool.type !== "draw-text")
|
|
207
257
|
return false;
|
|
208
258
|
editor.cancelLongPress();
|
|
209
259
|
const hit = editor.hitTest(worldPoint);
|
|
@@ -272,7 +322,7 @@ const handleDownSegmentDrag = (editor, worldPoint) => {
|
|
|
272
322
|
if (editor.readOnly)
|
|
273
323
|
return false;
|
|
274
324
|
const segDragLink = editor.selectedLink;
|
|
275
|
-
if (!(editor.
|
|
325
|
+
if (!(editor.activeTool.type === "select" && segDragLink))
|
|
276
326
|
return false;
|
|
277
327
|
const edge = getLink(editor._scene, segDragLink);
|
|
278
328
|
if (!(edge && (edge.routing ?? "straight") === "orthogonal"))
|
|
@@ -283,17 +333,13 @@ const handleDownSegmentDrag = (editor, worldPoint) => {
|
|
|
283
333
|
const zoom = editor._scene.viewport.zoom || 1;
|
|
284
334
|
const r = LINK_ENDPOINT_HANDLE_RADIUS / zoom;
|
|
285
335
|
const r2 = r * r;
|
|
286
|
-
// Draggable segments
|
|
287
|
-
//
|
|
288
|
-
|
|
289
|
-
const segs = path.length === 2 ? [0] : range(1, path.length - 3);
|
|
290
|
-
for (const k of segs) {
|
|
336
|
+
// Draggable segments — shared with the overlay so the grab point always
|
|
337
|
+
// matches the drawn dot (handles slide out from under the caption pill).
|
|
338
|
+
for (const { k, point } of getElbowSegmentHandles(editor._scene, edge, path)) {
|
|
291
339
|
const a = req(path[k]);
|
|
292
340
|
const b = req(path[k + 1]);
|
|
293
|
-
const
|
|
294
|
-
const
|
|
295
|
-
const dx = mx - worldPoint.x;
|
|
296
|
-
const dy = my - worldPoint.y;
|
|
341
|
+
const dx = point.x - worldPoint.x;
|
|
342
|
+
const dy = point.y - worldPoint.y;
|
|
297
343
|
if (dx * dx + dy * dy <= r2) {
|
|
298
344
|
const axis = Math.abs(a.y - b.y) < 1e-6 ? "h" : "v";
|
|
299
345
|
const at = axis === "h" ? (a.x + b.x) / 2 : (a.y + b.y) / 2;
|
|
@@ -320,7 +366,7 @@ const handleDownWaypointDrag = (editor, worldPoint) => {
|
|
|
320
366
|
if (editor.readOnly)
|
|
321
367
|
return false;
|
|
322
368
|
const wpDragLink = editor.selectedLink;
|
|
323
|
-
if (!(editor.
|
|
369
|
+
if (!(editor.activeTool.type === "select" && wpDragLink))
|
|
324
370
|
return false;
|
|
325
371
|
const edge = getLink(editor._scene, wpDragLink);
|
|
326
372
|
// Elbow links use segment-drag (separate mechanic), not free waypoints.
|
|
@@ -410,7 +456,7 @@ const tryAnchorDrag = (editor, shapeId, worldPoint) => {
|
|
|
410
456
|
const handleDownAnchorStart = (editor, data, worldPoint, target) => {
|
|
411
457
|
if (editor.readOnly)
|
|
412
458
|
return false;
|
|
413
|
-
if (!(editor.
|
|
459
|
+
if (!(editor.activeTool.type === "select" &&
|
|
414
460
|
!data.modifiers.shift &&
|
|
415
461
|
!data.modifiers.meta &&
|
|
416
462
|
!data.modifiers.ctrl &&
|
|
@@ -457,7 +503,7 @@ const applyAltDragDuplicate = (editor, data, target) => {
|
|
|
457
503
|
if (editor.readOnly)
|
|
458
504
|
return target;
|
|
459
505
|
if (data.modifiers.alt &&
|
|
460
|
-
editor.
|
|
506
|
+
editor.activeTool.type === "select" &&
|
|
461
507
|
target.kind === "element" &&
|
|
462
508
|
editor._selection.has(target.id)) {
|
|
463
509
|
const clone = editor.duplicateSelectedInPlace(target.id);
|
|
@@ -799,11 +845,11 @@ const dispatchMoveToMachine = (editor, worldPoint) => {
|
|
|
799
845
|
editor.hoverAnimatedElement(directHs && isImage(directHs) && directHs.animationKind ? directHs.id : null);
|
|
800
846
|
// Track the idle cursor so the SINGLE selected element's link-start dot
|
|
801
847
|
// grows by proximity. Only the selected element's dots react.
|
|
802
|
-
editor.setHoverCursorWorld(editor.
|
|
848
|
+
editor.setHoverCursorWorld(editor.activeTool.type === "select" ? worldPoint : null);
|
|
803
849
|
// Erase-mode hover: repaint so the eraser cursor ring follows the pointer
|
|
804
850
|
// (its centre is `lastPointerWorld`, already updated above). Drag moves
|
|
805
851
|
// repaint via `extendEraseStroke`; this covers the pointer-up hover.
|
|
806
|
-
if (editor.
|
|
852
|
+
if (editor.activeTool.type === "erase")
|
|
807
853
|
editor.notify();
|
|
808
854
|
}
|
|
809
855
|
editor.actor.send({ type: "POINTER_MOVE", point: worldPoint });
|
|
@@ -1126,7 +1172,7 @@ export const bindPointerEvents = (editor) => {
|
|
|
1126
1172
|
return;
|
|
1127
1173
|
if (handleDownCropEnter(editor, worldPoint, ev.detail))
|
|
1128
1174
|
return;
|
|
1129
|
-
if (handleDownBrush(editor, worldPoint, ev.pressure))
|
|
1175
|
+
if (handleDownBrush(editor, worldPoint, ev.pressure, ev.pointerType))
|
|
1130
1176
|
return;
|
|
1131
1177
|
if (handleDownErase(editor, worldPoint, data.modifiers.alt, data.modifiers.shift))
|
|
1132
1178
|
return;
|
|
@@ -1138,10 +1184,14 @@ export const bindPointerEvents = (editor) => {
|
|
|
1138
1184
|
return;
|
|
1139
1185
|
if (handleDownInteractiveHit(editor, worldPoint))
|
|
1140
1186
|
return;
|
|
1187
|
+
// Order: concrete handle dots (segment / waypoint) win over the caption
|
|
1188
|
+
// pill — the dots draw ABOVE it; the pill takes any other press inside it.
|
|
1141
1189
|
if (handleDownSegmentDrag(editor, worldPoint))
|
|
1142
1190
|
return;
|
|
1143
1191
|
if (handleDownWaypointDrag(editor, worldPoint))
|
|
1144
1192
|
return;
|
|
1193
|
+
if (handleDownLabelDrag(editor, worldPoint))
|
|
1194
|
+
return;
|
|
1145
1195
|
// Resolve the press target up-front so the anchor-drag path can defer to the
|
|
1146
1196
|
// rotate grip (which floats above the top anchor's grab zone).
|
|
1147
1197
|
let target = editor.hitTest(worldPoint);
|
|
@@ -1162,7 +1212,7 @@ export const bindPointerEvents = (editor) => {
|
|
|
1162
1212
|
// still deselects via the machine below; onMove promotes this to a pan once
|
|
1163
1213
|
// the finger drags past slop.
|
|
1164
1214
|
editor.touchPanCandidate =
|
|
1165
|
-
data.kind === "touch" && editor.
|
|
1215
|
+
data.kind === "touch" && editor.activeTool.type === "select" && target.kind === "empty"
|
|
1166
1216
|
? data.point
|
|
1167
1217
|
: null;
|
|
1168
1218
|
editor.actor.send({
|
|
@@ -1190,6 +1240,8 @@ export const bindPointerEvents = (editor) => {
|
|
|
1190
1240
|
editor.refreshCursor(worldPoint);
|
|
1191
1241
|
if (handleMoveCrop(editor, worldPoint))
|
|
1192
1242
|
return;
|
|
1243
|
+
if (handleMoveLabelDrag(editor, worldPoint))
|
|
1244
|
+
return;
|
|
1193
1245
|
if (handleMoveSegmentDrag(editor, worldPoint))
|
|
1194
1246
|
return;
|
|
1195
1247
|
if (handleMoveWaypointDrag(editor, worldPoint))
|
|
@@ -1224,6 +1276,8 @@ export const bindPointerEvents = (editor) => {
|
|
|
1224
1276
|
editor.cancelLongPress();
|
|
1225
1277
|
if (handleUpCrop(editor))
|
|
1226
1278
|
return;
|
|
1279
|
+
if (handleUpLabelDrag(editor))
|
|
1280
|
+
return;
|
|
1227
1281
|
if (handleUpSegmentDrag(editor))
|
|
1228
1282
|
return;
|
|
1229
1283
|
if (handleUpWaypointDrag(editor))
|