@oh-just-another/state 0.61.0 → 0.63.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 +89 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/actions/registry.js +1 -1
- package/dist/actions/registry.js.map +1 -1
- package/dist/constants.d.ts +179 -12
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +150 -12
- package/dist/constants.js.map +1 -1
- package/dist/editor/animation-scene.d.ts.map +1 -1
- package/dist/editor/animation-scene.js +27 -39
- package/dist/editor/animation-scene.js.map +1 -1
- package/dist/editor/animation.js +1 -1
- package/dist/editor/animation.js.map +1 -1
- package/dist/editor/applies/arrange-units.d.ts +24 -0
- package/dist/editor/applies/arrange-units.d.ts.map +1 -0
- package/dist/editor/applies/arrange-units.js +56 -0
- package/dist/editor/applies/arrange-units.js.map +1 -0
- package/dist/editor/applies/arrange.d.ts +16 -15
- package/dist/editor/applies/arrange.d.ts.map +1 -1
- package/dist/editor/applies/arrange.js +33 -48
- package/dist/editor/applies/arrange.js.map +1 -1
- package/dist/editor/applies/create.d.ts +16 -10
- package/dist/editor/applies/create.d.ts.map +1 -1
- package/dist/editor/applies/create.js +32 -12
- package/dist/editor/applies/create.js.map +1 -1
- package/dist/editor/applies/edge.d.ts +1 -1
- package/dist/editor/applies/edge.d.ts.map +1 -1
- package/dist/editor/applies/object-snap.d.ts +87 -0
- package/dist/editor/applies/object-snap.d.ts.map +1 -0
- package/dist/editor/applies/object-snap.js +198 -0
- package/dist/editor/applies/object-snap.js.map +1 -0
- package/dist/editor/applies/resize.d.ts +1 -1
- package/dist/editor/applies/resize.d.ts.map +1 -1
- package/dist/editor/applies/resize.js +6 -4
- package/dist/editor/applies/resize.js.map +1 -1
- package/dist/editor/applies/selection.d.ts +5 -5
- package/dist/editor/applies/selection.d.ts.map +1 -1
- package/dist/editor/applies/selection.js +15 -7
- package/dist/editor/applies/selection.js.map +1 -1
- package/dist/editor/applies/snap-grid.d.ts +1 -1
- package/dist/editor/applies/snap-grid.d.ts.map +1 -1
- package/dist/editor/container-ops.d.ts +1 -1
- package/dist/editor/container-ops.d.ts.map +1 -1
- package/dist/{editor-events.d.ts → editor/editor-events.d.ts} +2 -2
- package/dist/editor/editor-events.d.ts.map +1 -0
- package/dist/{editor-events.js.map → editor/editor-events.js.map} +1 -1
- package/dist/editor/event-fanout.d.ts +3 -3
- package/dist/editor/event-fanout.d.ts.map +1 -1
- package/dist/editor/gesture-tx.d.ts +1 -1
- package/dist/editor/gesture-tx.d.ts.map +1 -1
- package/dist/editor/hit-test.d.ts +5 -3
- package/dist/editor/hit-test.d.ts.map +1 -1
- package/dist/editor/hit-test.js +18 -10
- package/dist/editor/hit-test.js.map +1 -1
- package/dist/editor/interaction-state.d.ts +29 -2
- package/dist/editor/interaction-state.d.ts.map +1 -1
- package/dist/editor/interaction-state.js +34 -0
- package/dist/editor/interaction-state.js.map +1 -1
- package/dist/editor/link-handle-drag.d.ts +1 -1
- package/dist/editor/link-handle-drag.d.ts.map +1 -1
- package/dist/editor/link-handle-drag.js +1 -1
- 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 +86 -24
- package/dist/editor/pointer-binding.js.map +1 -1
- package/dist/editor/public/arrange-group.d.ts +6 -5
- package/dist/editor/public/arrange-group.d.ts.map +1 -1
- package/dist/editor/public/arrange-group.js +39 -23
- package/dist/editor/public/arrange-group.js.map +1 -1
- package/dist/editor/public/clipboard.d.ts +1 -1
- package/dist/editor/public/clipboard.d.ts.map +1 -1
- package/dist/editor/public/clipboard.js +2 -2
- package/dist/editor/public/clipboard.js.map +1 -1
- package/dist/editor/public/cursor.js +1 -1
- package/dist/editor/public/cursor.js.map +1 -1
- package/dist/editor/public/eraser.js +1 -1
- package/dist/editor/public/eraser.js.map +1 -1
- package/dist/editor/public/image-insert.d.ts.map +1 -1
- package/dist/editor/public/image-insert.js +4 -1
- package/dist/editor/public/image-insert.js.map +1 -1
- package/dist/editor/public/label-seed.d.ts +12 -0
- package/dist/editor/public/label-seed.d.ts.map +1 -0
- package/dist/editor/public/label-seed.js +20 -0
- package/dist/editor/public/label-seed.js.map +1 -0
- package/dist/editor/public/layers.d.ts +1 -1
- package/dist/editor/public/layers.d.ts.map +1 -1
- package/dist/editor/public/placement.d.ts +6 -1
- package/dist/editor/public/placement.d.ts.map +1 -1
- package/dist/editor/public/placement.js +47 -17
- package/dist/editor/public/placement.js.map +1 -1
- package/dist/editor/public/selection-ops.d.ts +1 -1
- package/dist/editor/public/selection-ops.d.ts.map +1 -1
- package/dist/editor/public/selection-ops.js +31 -2
- package/dist/editor/public/selection-ops.js.map +1 -1
- package/dist/editor/public/stroke-eraser-coverage.js +1 -1
- package/dist/editor/public/stroke-eraser-coverage.js.map +1 -1
- package/dist/editor/public/stroke-eraser.js +1 -1
- package/dist/editor/public/stroke-eraser.js.map +1 -1
- package/dist/editor/public/text-edit.d.ts +4 -2
- package/dist/editor/public/text-edit.d.ts.map +1 -1
- package/dist/editor/public/text-edit.js +8 -4
- package/dist/editor/public/text-edit.js.map +1 -1
- package/dist/editor/public/tool-ops.d.ts +10 -7
- package/dist/editor/public/tool-ops.d.ts.map +1 -1
- package/dist/editor/public/tool-ops.js +141 -14
- package/dist/editor/public/tool-ops.js.map +1 -1
- package/dist/editor/public/zoom-pan.d.ts +10 -1
- package/dist/editor/public/zoom-pan.d.ts.map +1 -1
- package/dist/editor/public/zoom-pan.js +49 -0
- package/dist/editor/public/zoom-pan.js.map +1 -1
- package/dist/editor/render-orchestrator.d.ts +17 -11
- package/dist/editor/render-orchestrator.d.ts.map +1 -1
- package/dist/editor/render-orchestrator.js +45 -31
- package/dist/editor/render-orchestrator.js.map +1 -1
- package/dist/editor/resize-helpers.d.ts +1 -1
- package/dist/editor/resize-helpers.d.ts.map +1 -1
- package/dist/editor/shape-traits.d.ts +1 -1
- package/dist/editor/shape-traits.d.ts.map +1 -1
- package/dist/editor/shape-traits.js +1 -1
- package/dist/editor/shape-traits.js.map +1 -1
- package/dist/editor/text-edit.d.ts +24 -11
- package/dist/editor/text-edit.d.ts.map +1 -1
- package/dist/editor/text-edit.js +225 -45
- package/dist/editor/text-edit.js.map +1 -1
- package/dist/editor.d.ts +306 -18
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +1233 -67
- package/dist/editor.js.map +1 -1
- package/dist/features/built-in-handlers.d.ts.map +1 -0
- package/dist/{built-in-handlers.js → features/built-in-handlers.js} +7 -1
- package/dist/features/built-in-handlers.js.map +1 -0
- package/dist/{clipboard.d.ts → features/clipboard.d.ts} +14 -0
- package/dist/features/clipboard.d.ts.map +1 -0
- package/dist/{clipboard.js → features/clipboard.js} +1 -1
- package/dist/features/clipboard.js.map +1 -0
- package/dist/{file-drop.d.ts → features/file-drop.d.ts} +20 -1
- package/dist/features/file-drop.d.ts.map +1 -0
- package/dist/{file-drop.js → features/file-drop.js} +47 -19
- package/dist/features/file-drop.js.map +1 -0
- package/dist/features/insert-scene.d.ts +19 -0
- package/dist/features/insert-scene.d.ts.map +1 -0
- package/dist/features/insert-scene.js +145 -0
- package/dist/features/insert-scene.js.map +1 -0
- package/dist/features/search.d.ts.map +1 -0
- package/dist/features/search.js.map +1 -0
- package/dist/helpers/auto-compact.d.ts.map +1 -0
- package/dist/{auto-compact.js → helpers/auto-compact.js} +1 -1
- package/dist/helpers/auto-compact.js.map +1 -0
- package/dist/helpers/auto-layout-scheduler.d.ts.map +1 -0
- package/dist/helpers/auto-layout-scheduler.js.map +1 -0
- package/dist/helpers/frame-helpers.d.ts.map +1 -0
- package/dist/helpers/frame-helpers.js.map +1 -0
- package/dist/helpers/group-helpers.d.ts.map +1 -0
- package/dist/helpers/group-helpers.js.map +1 -0
- package/dist/helpers/util.d.ts.map +1 -0
- package/dist/helpers/util.js.map +1 -0
- package/dist/index.d.ts +23 -21
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +12 -12
- package/dist/index.js.map +1 -1
- package/dist/input/dom-events.d.ts.map +1 -0
- package/dist/input/dom-events.js.map +1 -0
- package/dist/{hotkeys-binding.d.ts → input/hotkeys-binding.d.ts} +2 -2
- package/dist/input/hotkeys-binding.d.ts.map +1 -0
- package/dist/{hotkeys-binding.js → input/hotkeys-binding.js} +1 -1
- package/dist/input/hotkeys-binding.js.map +1 -0
- package/dist/input/platform.d.ts.map +1 -0
- package/dist/input/platform.js.map +1 -0
- package/dist/{handle.d.ts → interaction/handle.d.ts} +1 -1
- package/dist/interaction/handle.d.ts.map +1 -0
- package/dist/{handle.js → interaction/handle.js} +1 -1
- package/dist/interaction/handle.js.map +1 -0
- package/dist/interaction/interactive.d.ts.map +1 -0
- package/dist/interaction/interactive.js.map +1 -0
- package/dist/interaction/machine.d.ts.map +1 -0
- package/dist/interaction/machine.js.map +1 -0
- package/dist/interaction/modes.d.ts.map +1 -0
- package/dist/interaction/modes.js.map +1 -0
- package/dist/render/animation-tick.d.ts.map +1 -0
- package/dist/render/animation-tick.js.map +1 -0
- package/dist/{overlay.d.ts → render/overlay.d.ts} +42 -38
- package/dist/render/overlay.d.ts.map +1 -0
- package/dist/{overlay.js → render/overlay.js} +180 -65
- package/dist/render/overlay.js.map +1 -0
- package/dist/selection/link-selection.d.ts.map +1 -0
- package/dist/{link-selection.js → selection/link-selection.js} +1 -1
- package/dist/selection/link-selection.js.map +1 -0
- package/dist/selection/selection.d.ts.map +1 -0
- package/dist/{selection.js → selection/selection.js} +1 -1
- package/dist/selection/selection.js.map +1 -0
- package/package.json +5 -5
- package/dist/animation-tick.d.ts.map +0 -1
- package/dist/animation-tick.js.map +0 -1
- package/dist/auto-compact.d.ts.map +0 -1
- package/dist/auto-compact.js.map +0 -1
- package/dist/auto-layout-scheduler.d.ts.map +0 -1
- package/dist/auto-layout-scheduler.js.map +0 -1
- package/dist/built-in-handlers.d.ts.map +0 -1
- package/dist/built-in-handlers.js.map +0 -1
- package/dist/clipboard.d.ts.map +0 -1
- package/dist/clipboard.js.map +0 -1
- package/dist/dom-events.d.ts.map +0 -1
- package/dist/dom-events.js.map +0 -1
- package/dist/editor-events.d.ts.map +0 -1
- package/dist/file-drop.d.ts.map +0 -1
- package/dist/file-drop.js.map +0 -1
- package/dist/frame-helpers.d.ts.map +0 -1
- package/dist/frame-helpers.js.map +0 -1
- package/dist/group-helpers.d.ts.map +0 -1
- package/dist/group-helpers.js.map +0 -1
- package/dist/handle.d.ts.map +0 -1
- package/dist/handle.js.map +0 -1
- package/dist/hotkeys-binding.d.ts.map +0 -1
- package/dist/hotkeys-binding.js.map +0 -1
- package/dist/interactive.d.ts.map +0 -1
- package/dist/interactive.js.map +0 -1
- package/dist/link-selection.d.ts.map +0 -1
- package/dist/link-selection.js.map +0 -1
- package/dist/machine.d.ts.map +0 -1
- package/dist/machine.js.map +0 -1
- package/dist/modes.d.ts.map +0 -1
- package/dist/modes.js.map +0 -1
- package/dist/overlay.d.ts.map +0 -1
- package/dist/overlay.js.map +0 -1
- package/dist/platform.d.ts.map +0 -1
- package/dist/platform.js.map +0 -1
- package/dist/search.d.ts.map +0 -1
- package/dist/search.js.map +0 -1
- package/dist/selection.d.ts.map +0 -1
- package/dist/selection.js.map +0 -1
- package/dist/util.d.ts.map +0 -1
- package/dist/util.js.map +0 -1
- /package/dist/{editor-events.js → editor/editor-events.js} +0 -0
- /package/dist/{built-in-handlers.d.ts → features/built-in-handlers.d.ts} +0 -0
- /package/dist/{search.d.ts → features/search.d.ts} +0 -0
- /package/dist/{search.js → features/search.js} +0 -0
- /package/dist/{auto-compact.d.ts → helpers/auto-compact.d.ts} +0 -0
- /package/dist/{auto-layout-scheduler.d.ts → helpers/auto-layout-scheduler.d.ts} +0 -0
- /package/dist/{auto-layout-scheduler.js → helpers/auto-layout-scheduler.js} +0 -0
- /package/dist/{frame-helpers.d.ts → helpers/frame-helpers.d.ts} +0 -0
- /package/dist/{frame-helpers.js → helpers/frame-helpers.js} +0 -0
- /package/dist/{group-helpers.d.ts → helpers/group-helpers.d.ts} +0 -0
- /package/dist/{group-helpers.js → helpers/group-helpers.js} +0 -0
- /package/dist/{util.d.ts → helpers/util.d.ts} +0 -0
- /package/dist/{util.js → helpers/util.js} +0 -0
- /package/dist/{dom-events.d.ts → input/dom-events.d.ts} +0 -0
- /package/dist/{dom-events.js → input/dom-events.js} +0 -0
- /package/dist/{platform.d.ts → input/platform.d.ts} +0 -0
- /package/dist/{platform.js → input/platform.js} +0 -0
- /package/dist/{interactive.d.ts → interaction/interactive.d.ts} +0 -0
- /package/dist/{interactive.js → interaction/interactive.js} +0 -0
- /package/dist/{machine.d.ts → interaction/machine.d.ts} +0 -0
- /package/dist/{machine.js → interaction/machine.js} +0 -0
- /package/dist/{modes.d.ts → interaction/modes.d.ts} +0 -0
- /package/dist/{modes.js → interaction/modes.js} +0 -0
- /package/dist/{animation-tick.d.ts → render/animation-tick.d.ts} +0 -0
- /package/dist/{animation-tick.js → render/animation-tick.js} +0 -0
- /package/dist/{link-selection.d.ts → selection/link-selection.d.ts} +0 -0
- /package/dist/{selection.d.ts → selection/selection.d.ts} +0 -0
|
@@ -16,6 +16,19 @@ const DEFAULT_ELLIPSE_STYLE = DEFAULT_ELEMENT_STYLES.ellipse;
|
|
|
16
16
|
* them still receive clicks; rect / ellipse go to the top of the
|
|
17
17
|
* stack as usual.
|
|
18
18
|
*/
|
|
19
|
+
/** Inscribed polygon rings for the draw-shape kinds beyond rect/ellipse. */
|
|
20
|
+
const inscribedPoints = (kind, w, h) => kind === "diamond"
|
|
21
|
+
? [
|
|
22
|
+
{ x: w / 2, y: 0 },
|
|
23
|
+
{ x: w, y: h / 2 },
|
|
24
|
+
{ x: w / 2, y: h },
|
|
25
|
+
{ x: 0, y: h / 2 },
|
|
26
|
+
]
|
|
27
|
+
: [
|
|
28
|
+
{ x: w / 2, y: 0 },
|
|
29
|
+
{ x: w, y: h },
|
|
30
|
+
{ x: 0, y: h },
|
|
31
|
+
];
|
|
19
32
|
export const buildElementForCreate = (scene, kind, bounds, id, layerId, nextFrameName) => {
|
|
20
33
|
const orders = Array.from(scene.elements.values())
|
|
21
34
|
.filter((s) => s.layerId === layerId)
|
|
@@ -37,28 +50,35 @@ export const buildElementForCreate = (scene, kind, bounds, id, layerId, nextFram
|
|
|
37
50
|
if (kind === "ellipse") {
|
|
38
51
|
return { ...common, type: "ellipse", style: { ...DEFAULT_ELLIPSE_STYLE } };
|
|
39
52
|
}
|
|
53
|
+
if (kind === "diamond" || kind === "triangle") {
|
|
54
|
+
const { width: _w, height: _h, ...polyCommon } = common;
|
|
55
|
+
void _w;
|
|
56
|
+
void _h;
|
|
57
|
+
return {
|
|
58
|
+
...polyCommon,
|
|
59
|
+
type: "polygon",
|
|
60
|
+
points: inscribedPoints(kind, bounds.width, bounds.height),
|
|
61
|
+
style: { ...DEFAULT_RECT_STYLE },
|
|
62
|
+
};
|
|
63
|
+
}
|
|
40
64
|
// Frame: white body fill (configurable from the panel; border is fixed
|
|
41
65
|
// chrome). Auto-numbered name.
|
|
42
66
|
return { ...common, type: "frame", style: { fill: FRAME_DEFAULT_FILL }, name: nextFrameName() };
|
|
43
67
|
};
|
|
44
|
-
|
|
45
|
-
* Build the `Link` object for a CREATE_EDGE emit. Endpoints are
|
|
46
|
-
* pre-resolved (snapped) by the caller — we just compose them with the
|
|
47
|
-
* layer / order / style boilerplate.
|
|
48
|
-
*/
|
|
49
|
-
const buildLinkForCreate = (scene, from, to, id, layerId) => {
|
|
68
|
+
const buildLinkForCreate = (scene, from, to, id, layerId, overrides) => {
|
|
50
69
|
const order = orderForTop(Array.from(scene.links.values())
|
|
51
70
|
.filter((e) => e.layerId === layerId)
|
|
52
71
|
.map((e) => e.order));
|
|
72
|
+
const arrowheadTo = overrides?.arrowheadTo === undefined ? DEFAULT_LINK_ARROWHEAD : overrides.arrowheadTo;
|
|
53
73
|
return {
|
|
54
74
|
id,
|
|
55
75
|
layerId,
|
|
56
76
|
from,
|
|
57
77
|
to,
|
|
58
78
|
order,
|
|
59
|
-
routing: DEFAULT_LINK_ROUTING,
|
|
79
|
+
routing: overrides?.routing ?? DEFAULT_LINK_ROUTING,
|
|
60
80
|
style: { ...DEFAULT_EDGE_STYLE },
|
|
61
|
-
arrowheads: { to:
|
|
81
|
+
...(arrowheadTo === null ? {} : { arrowheads: { to: arrowheadTo } }),
|
|
62
82
|
};
|
|
63
83
|
};
|
|
64
84
|
/**
|
|
@@ -69,8 +89,8 @@ const buildLinkForCreate = (scene, from, to, id, layerId) => {
|
|
|
69
89
|
* routed the polyline (`points` = `[from, ...corners, to]`), its interior
|
|
70
90
|
* corners are reused as `routedPoints` so the elbow geometry matches exactly.
|
|
71
91
|
*/
|
|
72
|
-
export const buildEdgePreviewLink = (scene, preview, id, layerId) => {
|
|
73
|
-
const base = buildLinkForCreate(scene, { kind: "point", position: preview.from }, { kind: "point", position: preview.to }, id, layerId);
|
|
92
|
+
export const buildEdgePreviewLink = (scene, preview, id, layerId, overrides) => {
|
|
93
|
+
const base = buildLinkForCreate(scene, { kind: "point", position: preview.from }, { kind: "point", position: preview.to }, id, layerId, overrides);
|
|
74
94
|
return preview.points && preview.points.length > 2
|
|
75
95
|
? { ...base, routedPoints: preview.points.slice(1, -1) }
|
|
76
96
|
: base;
|
|
@@ -95,8 +115,8 @@ export const computeCreateElement = (scene, kind, bounds, id, layerId, nextFrame
|
|
|
95
115
|
* to the snap engine in Editor); pre-resolved `from`/`to` are
|
|
96
116
|
* threaded in as parameters.
|
|
97
117
|
*/
|
|
98
|
-
export const computeCreateLink = (scene, from, to, id, layerId) => {
|
|
99
|
-
const edge = buildLinkForCreate(scene, from, to, id, layerId);
|
|
118
|
+
export const computeCreateLink = (scene, from, to, id, layerId, overrides) => {
|
|
119
|
+
const edge = buildLinkForCreate(scene, from, to, id, layerId, overrides);
|
|
100
120
|
const result = addLink(scene, edge);
|
|
101
121
|
return { scene: result.scene, patch: result.patch, linkId: id };
|
|
102
122
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/editor/applies/create.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,UAAU,EACV,cAAc,EACd,WAAW,GAMZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAErF,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,SAAS,CAAC;AAC5D,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,OAAO,CAAC;AAE7D;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAY,EACZ,
|
|
1
|
+
{"version":3,"file":"create.js","sourceRoot":"","sources":["../../../src/editor/applies/create.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,UAAU,EACV,cAAc,EACd,WAAW,GAMZ,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAErF,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oBAAoB,CAAC;AAE5B;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,sBAAsB,CAAC,SAAS,CAAC;AAC5D,MAAM,qBAAqB,GAAG,sBAAsB,CAAC,OAAO,CAAC;AAE7D;;;;;;;GAOG;AACH,4EAA4E;AAC5E,MAAM,eAAe,GAAG,CAAC,IAA4B,EAAE,CAAS,EAAE,CAAS,EAAE,EAAE,CAC7E,IAAI,KAAK,SAAS;IAChB,CAAC,CAAC;QACE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAClB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;QAClB,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAClB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE;KACnB;IACH,CAAC,CAAC;QACE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QAClB,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACd,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;KACf,CAAC;AAER,MAAM,CAAC,MAAM,qBAAqB,GAAG,CACnC,KAAY,EACZ,IAA2D,EAC3D,MAAc,EACd,EAAa,EACb,OAAgB,EAChB,aAA2B,EAClB,EAAE;IACX,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;SAC/C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,KAAK,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG;QACb,EAAE;QACF,OAAO;QACP,QAAQ,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE;QACtC,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE;QACrB,KAAK;QACL,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;IACF,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,EAAE,GAAG,kBAAkB,EAAE,EAAE,CAAC;IAC5E,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,GAAG,qBAAqB,EAAE,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QAC9C,MAAM,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,MAAM,CAAC;QACxD,KAAK,EAAE,CAAC;QACR,KAAK,EAAE,CAAC;QACR,OAAO;YACL,GAAG,UAAU;YACb,IAAI,EAAE,SAAS;YACf,MAAM,EAAE,eAAe,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC;YAC1D,KAAK,EAAE,EAAE,GAAG,kBAAkB,EAAE;SACjC,CAAC;IACJ,CAAC;IACD,uEAAuE;IACvE,+BAA+B;IAC/B,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,kBAAkB,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC;AAClG,CAAC,CAAC;AAiBF,MAAM,kBAAkB,GAAG,CACzB,KAAY,EACZ,IAAkB,EAClB,EAAgB,EAChB,EAAU,EACV,OAAgB,EAChB,SAA+B,EACzB,EAAE;IACR,MAAM,KAAK,GAAG,WAAW,CACvB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;SAC7B,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC;SACpC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CACvB,CAAC;IACF,MAAM,WAAW,GACf,SAAS,EAAE,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,WAAW,CAAC;IACxF,OAAO;QACL,EAAE;QACF,OAAO;QACP,IAAI;QACJ,EAAE;QACF,KAAK;QACL,OAAO,EAAE,SAAS,EAAE,OAAO,IAAI,oBAAoB;QACnD,KAAK,EAAE,EAAE,GAAG,kBAAkB,EAAE;QAChC,GAAG,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,CAAC;KACrE,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAY,EACZ,OAAsF,EACtF,EAAU,EACV,OAAgB,EAChB,SAA+B,EACzB,EAAE;IACR,MAAM,IAAI,GAAG,kBAAkB,CAC7B,KAAK,EACL,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,EACzC,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,EAAE,EAAE,EACvC,EAAE,EACF,OAAO,EACP,SAAS,CACV,CAAC;IACF,OAAO,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;QAChD,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;QACxD,CAAC,CAAC,IAAI,CAAC;AACX,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAY,EACZ,IAA2D,EAC3D,MAAc,EACd,EAAa,EACb,OAAgB,EAChB,aAA2B,EACsD,EAAE;IACnF,MAAM,KAAK,GAAG,qBAAqB,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IACrF,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC;AACrE,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC/B,KAAY,EACZ,IAAkB,EAClB,EAAgB,EAChB,EAAU,EACV,OAAgB,EAChB,SAA+B,EAC4C,EAAE;IAC7E,MAAM,IAAI,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;AAClE,CAAC,CAAC;AAEF,uEAAuE;AACvE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAY,EAAa,EAAE,CACtD,SAAS,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAe,CAAC;AAE1D,sEAAsE;AACtE,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAY,EAAU,EAAE,CAChD,QAAQ,IAAI,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAY,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Link, type LinkEndpoint, type Scene, type Patch } from "@oh-just-another/scene";
|
|
2
2
|
import type { ElementId, Vec2 } from "@oh-just-another/types";
|
|
3
3
|
import type { LinkId } from "@oh-just-another/types";
|
|
4
|
-
import type { InteractionEmit } from "../../machine.js";
|
|
4
|
+
import type { InteractionEmit } from "../../interaction/machine.js";
|
|
5
5
|
/**
|
|
6
6
|
* Compute the visible (snapped) endpoints for an in-progress
|
|
7
7
|
* draw-edge preview. Both ends snap to the nearest anchor on
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../../src/editor/applies/edge.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"edge.d.ts","sourceRoot":"","sources":["../../../src/editor/applies/edge.ts"],"names":[],"mappings":"AAAA,OAAO,EAQL,KAAK,IAAI,EACT,KAAK,YAAY,EACjB,KAAK,KAAK,EACV,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAEpE;;;;;;;;GAQG;AACH,eAAO,MAAM,2BAA2B,GACtC,OAAO,KAAK,EACZ,aAAa,SAAS,GAAG,IAAI,EAC7B,WAAW,IAAI,EACf,SAAS,IAAI,KACZ;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAA;CAc1C,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,yBAAyB,GACpC,OAAO,KAAK,EACZ,MAAM,OAAO,CAAC,eAAe,EAAE;IAAE,IAAI,EAAE,sBAAsB,CAAA;CAAE,CAAC,EAChE,MAAM,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,EAAE,OAAO,EAAE,IAAI,KAAK,YAAY,KACjE;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAS9E,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,cAAc,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,KAAG,MAuBzD,CAAC"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import type { Bounds, Vec2 } from "@oh-just-another/types";
|
|
2
|
+
import type { HandleId } from "../../interaction/handle.js";
|
|
3
|
+
/**
|
|
4
|
+
* Object snapping — pure math shared by the move / resize gestures.
|
|
5
|
+
*
|
|
6
|
+
* While a shape (or group frame) is dragged, its left / centre / right and
|
|
7
|
+
* top / centre / bottom lines are compared with the same lines of every
|
|
8
|
+
* nearby shape ("others"). The closest pair within `threshold` (world
|
|
9
|
+
* units — the caller divides the screen threshold by zoom) wins per axis
|
|
10
|
+
* and the delta is corrected so the lines coincide. Each snap also yields a
|
|
11
|
+
* {@link SnapGuide} for the overlay: the shared line, spanning both shapes.
|
|
12
|
+
*
|
|
13
|
+
* Resizing snaps only the edge(s) the handle drags (like grid snapping) and
|
|
14
|
+
* can additionally "suggest" a size: the dragged edge lands where the
|
|
15
|
+
* shape's width / height equals a nearby shape's, and that shape is
|
|
16
|
+
* reported as `sizeMatch` so the overlay can highlight it.
|
|
17
|
+
*/
|
|
18
|
+
/** One alignment guide: a vertical (`axis: "x"`) or horizontal line. */
|
|
19
|
+
export interface SnapGuide {
|
|
20
|
+
readonly axis: "x" | "y";
|
|
21
|
+
/** World coordinate of the line (x for vertical, y for horizontal). */
|
|
22
|
+
readonly at: number;
|
|
23
|
+
/** Extent along the other axis — covers both snapped shapes. */
|
|
24
|
+
readonly from: number;
|
|
25
|
+
readonly to: number;
|
|
26
|
+
/**
|
|
27
|
+
* `edge` — an edge of the moved shape met an edge / centre of `other`;
|
|
28
|
+
* `center` — the moved shape's centre line snapped. Only edge guides get
|
|
29
|
+
* distance segments (the gap between the two shapes along the guide).
|
|
30
|
+
*/
|
|
31
|
+
readonly kind: "edge" | "center";
|
|
32
|
+
/** World AABB of the moved / resized shape where it landed. */
|
|
33
|
+
readonly moving: Bounds;
|
|
34
|
+
/** World AABB of the shape it aligned with. */
|
|
35
|
+
readonly other: Bounds;
|
|
36
|
+
}
|
|
37
|
+
export interface ObjectSnapResult {
|
|
38
|
+
readonly delta: Vec2;
|
|
39
|
+
readonly guides: readonly SnapGuide[];
|
|
40
|
+
}
|
|
41
|
+
/** The shape whose size a resize now matches, and on which axis. */
|
|
42
|
+
export interface SizeMatch {
|
|
43
|
+
readonly bounds: Bounds;
|
|
44
|
+
readonly axis: "width" | "height" | "both";
|
|
45
|
+
}
|
|
46
|
+
export interface ResizeSnapResult extends ObjectSnapResult {
|
|
47
|
+
readonly sizeMatch: SizeMatch | null;
|
|
48
|
+
}
|
|
49
|
+
export interface ResizeSnapOptions {
|
|
50
|
+
/** Snap the dragged edges to other shapes' edges / centres. */
|
|
51
|
+
readonly alignEdges: boolean;
|
|
52
|
+
/** Snap the width / height to other shapes' sizes. */
|
|
53
|
+
readonly matchSizes: boolean;
|
|
54
|
+
}
|
|
55
|
+
export interface MoveSnapOptions {
|
|
56
|
+
/**
|
|
57
|
+
* Offer the moved shape's centre lines (default `true`). A multi-shape
|
|
58
|
+
* selection snaps by its frame edges only, like the reference.
|
|
59
|
+
*/
|
|
60
|
+
readonly centerLines?: boolean;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Correct a move delta so the moved shape's edges / centres coincide with
|
|
64
|
+
* a nearby shape's — edge to edge, centre to centre. `moving` is the
|
|
65
|
+
* press-time world AABB; `others` are the candidate AABBs (not the moving
|
|
66
|
+
* shapes themselves).
|
|
67
|
+
*/
|
|
68
|
+
export declare const snapMoveDeltaToObjects: (moving: Bounds, delta: Vec2, others: readonly Bounds[], threshold: number, opts?: MoveSnapOptions) => ObjectSnapResult;
|
|
69
|
+
/**
|
|
70
|
+
* Correct a resize delta so the dragged edge(s) align with nearby shapes'
|
|
71
|
+
* edges / centres (`alignEdges`) or so the width / height matches a nearby
|
|
72
|
+
* shape's (`matchSizes`). Per axis the smaller correction wins; the
|
|
73
|
+
* stationary edges never move. `original` is the press-time world AABB.
|
|
74
|
+
*/
|
|
75
|
+
export declare const snapResizeDeltaToObjects: (original: Bounds, handle: HandleId, delta: Vec2, others: readonly Bounds[], threshold: number, opts: ResizeSnapOptions) => ResizeSnapResult;
|
|
76
|
+
/**
|
|
77
|
+
* Gaps between two extents along a guide (reference "distance" intervals):
|
|
78
|
+
* `[a1, a2]` is the aligned-with shape's extent, `[b1, b2]` the moved
|
|
79
|
+
* shape's. Disjoint extents yield the single gap between them; partially
|
|
80
|
+
* overlapping ones yield the two non-shared stretches; identical or nested
|
|
81
|
+
* extents yield nothing.
|
|
82
|
+
*/
|
|
83
|
+
export declare const gapIntervals: (a1: number, a2: number, b1: number, b2: number) => readonly {
|
|
84
|
+
readonly start: number;
|
|
85
|
+
readonly end: number;
|
|
86
|
+
}[];
|
|
87
|
+
//# sourceMappingURL=object-snap.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-snap.d.ts","sourceRoot":"","sources":["../../../src/editor/applies/object-snap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAE5D;;;;;;;;;;;;;;GAcG;AAEH,wEAAwE;AACxE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,GAAG,GAAG,GAAG,CAAC;IACzB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACjC,+DAA+D;IAC/D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CACvC;AAED,oEAAoE;AACpE,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,CAAC;CAC5C;AAED,MAAM,WAAW,gBAAiB,SAAQ,gBAAgB;IACxD,QAAQ,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,+DAA+D;IAC/D,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,sDAAsD;IACtD,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;CAC9B;AA+ED,MAAM,WAAW,eAAe;IAC9B;;;OAGG;IACH,QAAQ,CAAC,WAAW,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,QAAQ,MAAM,EACd,OAAO,IAAI,EACX,QAAQ,SAAS,MAAM,EAAE,EACzB,WAAW,MAAM,EACjB,OAAM,eAAoB,KACzB,gBAaF,CAAC;AAwBF;;;;;GAKG;AACH,eAAO,MAAM,wBAAwB,GACnC,UAAU,MAAM,EAChB,QAAQ,QAAQ,EAChB,OAAO,IAAI,EACX,QAAQ,SAAS,MAAM,EAAE,EACzB,WAAW,MAAM,EACjB,MAAM,iBAAiB,KACtB,gBAuEF,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GACvB,IAAI,MAAM,EACV,IAAI,MAAM,EACV,IAAI,MAAM,EACV,IAAI,MAAM,KACT,SAAS;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EAQ3D,CAAC"}
|
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
// Edges first, centre last: on an exact tie the earlier candidate wins, so
|
|
2
|
+
// edge-to-edge alignment beats edge-to-centre.
|
|
3
|
+
const linesX = (b) => [b.x, b.x + b.width, b.x + b.width / 2];
|
|
4
|
+
const linesY = (b) => [b.y, b.y + b.height, b.y + b.height / 2];
|
|
5
|
+
/** Closest (own line, other line) pair within `threshold`, or `null`. */
|
|
6
|
+
const bestAxisSnap = (own, others, lines, threshold, sameKindOnly = false) => {
|
|
7
|
+
let best = null;
|
|
8
|
+
let bestDist = Infinity;
|
|
9
|
+
own.forEach((mine, mineIndex) => {
|
|
10
|
+
for (const other of others) {
|
|
11
|
+
lines(other).forEach((cand, candIndex) => {
|
|
12
|
+
// Move pairing rule (reference): an edge meets an edge, a centre
|
|
13
|
+
// meets a centre — never edge-to-centre.
|
|
14
|
+
if (sameKindOnly && (mineIndex === 2) !== (candIndex === 2))
|
|
15
|
+
return;
|
|
16
|
+
const dist = Math.abs(cand - mine);
|
|
17
|
+
if (dist <= threshold && dist < bestDist) {
|
|
18
|
+
bestDist = dist;
|
|
19
|
+
// Index 2 is the centre line on both sides (see `linesX`).
|
|
20
|
+
best = {
|
|
21
|
+
correction: cand - mine,
|
|
22
|
+
guideAt: cand,
|
|
23
|
+
other,
|
|
24
|
+
center: mineIndex === 2 || candIndex === 2,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
return best;
|
|
31
|
+
};
|
|
32
|
+
const guideFor = (axis, snap, moving, kindOverride) => {
|
|
33
|
+
const other = snap.other;
|
|
34
|
+
const kind = kindOverride ?? (snap.center ? "center" : "edge");
|
|
35
|
+
return axis === "x"
|
|
36
|
+
? {
|
|
37
|
+
axis,
|
|
38
|
+
at: snap.guideAt,
|
|
39
|
+
from: Math.min(moving.y, other.y),
|
|
40
|
+
to: Math.max(moving.y + moving.height, other.y + other.height),
|
|
41
|
+
kind,
|
|
42
|
+
moving,
|
|
43
|
+
other,
|
|
44
|
+
}
|
|
45
|
+
: {
|
|
46
|
+
axis,
|
|
47
|
+
at: snap.guideAt,
|
|
48
|
+
from: Math.min(moving.x, other.x),
|
|
49
|
+
to: Math.max(moving.x + moving.width, other.x + other.width),
|
|
50
|
+
kind,
|
|
51
|
+
moving,
|
|
52
|
+
other,
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
const shifted = (b, d) => ({ ...b, x: b.x + d.x, y: b.y + d.y });
|
|
56
|
+
/**
|
|
57
|
+
* Correct a move delta so the moved shape's edges / centres coincide with
|
|
58
|
+
* a nearby shape's — edge to edge, centre to centre. `moving` is the
|
|
59
|
+
* press-time world AABB; `others` are the candidate AABBs (not the moving
|
|
60
|
+
* shapes themselves).
|
|
61
|
+
*/
|
|
62
|
+
export const snapMoveDeltaToObjects = (moving, delta, others, threshold, opts = {}) => {
|
|
63
|
+
if (others.length === 0)
|
|
64
|
+
return { delta, guides: [] };
|
|
65
|
+
const target = shifted(moving, delta);
|
|
66
|
+
const own = (lines) => opts.centerLines === false ? lines.slice(0, 2) : lines;
|
|
67
|
+
const sx = bestAxisSnap(own(linesX(target)), others, linesX, threshold, true);
|
|
68
|
+
const sy = bestAxisSnap(own(linesY(target)), others, linesY, threshold, true);
|
|
69
|
+
const out = { x: delta.x + (sx?.correction ?? 0), y: delta.y + (sy?.correction ?? 0) };
|
|
70
|
+
const landed = shifted(moving, out);
|
|
71
|
+
const guides = [];
|
|
72
|
+
if (sx)
|
|
73
|
+
guides.push(guideFor("x", sx, landed));
|
|
74
|
+
if (sy)
|
|
75
|
+
guides.push(guideFor("y", sy, landed));
|
|
76
|
+
return { delta: out, guides };
|
|
77
|
+
};
|
|
78
|
+
const MOVES_WEST = new Set(["nw", "w", "sw"]);
|
|
79
|
+
const MOVES_EAST = new Set(["ne", "e", "se"]);
|
|
80
|
+
const MOVES_NORTH = new Set(["nw", "n", "ne"]);
|
|
81
|
+
const MOVES_SOUTH = new Set(["sw", "s", "se"]);
|
|
82
|
+
/** Bounds after applying a raw resize delta to the handle's edges (may be inverted). */
|
|
83
|
+
const resized = (b, handle, d) => {
|
|
84
|
+
let x = b.x;
|
|
85
|
+
let w = b.width;
|
|
86
|
+
let y = b.y;
|
|
87
|
+
let h = b.height;
|
|
88
|
+
if (MOVES_WEST.has(handle)) {
|
|
89
|
+
x += d.x;
|
|
90
|
+
w -= d.x;
|
|
91
|
+
}
|
|
92
|
+
else if (MOVES_EAST.has(handle))
|
|
93
|
+
w += d.x;
|
|
94
|
+
if (MOVES_NORTH.has(handle)) {
|
|
95
|
+
y += d.y;
|
|
96
|
+
h -= d.y;
|
|
97
|
+
}
|
|
98
|
+
else if (MOVES_SOUTH.has(handle))
|
|
99
|
+
h += d.y;
|
|
100
|
+
return { x, y, width: w, height: h };
|
|
101
|
+
};
|
|
102
|
+
/**
|
|
103
|
+
* Correct a resize delta so the dragged edge(s) align with nearby shapes'
|
|
104
|
+
* edges / centres (`alignEdges`) or so the width / height matches a nearby
|
|
105
|
+
* shape's (`matchSizes`). Per axis the smaller correction wins; the
|
|
106
|
+
* stationary edges never move. `original` is the press-time world AABB.
|
|
107
|
+
*/
|
|
108
|
+
export const snapResizeDeltaToObjects = (original, handle, delta, others, threshold, opts) => {
|
|
109
|
+
if (others.length === 0 || (!opts.alignEdges && !opts.matchSizes)) {
|
|
110
|
+
return { delta, guides: [], sizeMatch: null };
|
|
111
|
+
}
|
|
112
|
+
const raw = resized(original, handle, delta);
|
|
113
|
+
let dx = delta.x;
|
|
114
|
+
let dy = delta.y;
|
|
115
|
+
const guides = [];
|
|
116
|
+
let sizeMatch = null;
|
|
117
|
+
const movesX = MOVES_WEST.has(handle) || MOVES_EAST.has(handle);
|
|
118
|
+
const movesY = MOVES_NORTH.has(handle) || MOVES_SOUTH.has(handle);
|
|
119
|
+
if (movesX) {
|
|
120
|
+
// Edge alignment: only the dragged vertical edge is a candidate line.
|
|
121
|
+
const edge = MOVES_WEST.has(handle) ? raw.x : raw.x + raw.width;
|
|
122
|
+
const align = opts.alignEdges ? bestAxisSnap([edge], others, linesX, threshold) : null;
|
|
123
|
+
// Size match: the dragged edge lands where width == other.width.
|
|
124
|
+
let size = null;
|
|
125
|
+
if (opts.matchSizes) {
|
|
126
|
+
let bestDist = Infinity;
|
|
127
|
+
for (const other of others) {
|
|
128
|
+
const dist = Math.abs(other.width - Math.abs(raw.width));
|
|
129
|
+
if (dist <= threshold && dist < bestDist) {
|
|
130
|
+
bestDist = dist;
|
|
131
|
+
const sign = raw.width < 0 ? -1 : 1;
|
|
132
|
+
const targetEdge = MOVES_WEST.has(handle)
|
|
133
|
+
? raw.x + raw.width - sign * other.width
|
|
134
|
+
: raw.x + sign * other.width;
|
|
135
|
+
size = { correction: targetEdge - edge, guideAt: targetEdge, other, center: false };
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const pick = align && (!size || Math.abs(align.correction) <= Math.abs(size.correction)) ? align : size;
|
|
140
|
+
if (pick) {
|
|
141
|
+
dx += pick.correction;
|
|
142
|
+
if (pick === align)
|
|
143
|
+
guides.push(guideFor("x", pick, resized(original, handle, { x: dx, y: dy }), "edge"));
|
|
144
|
+
else
|
|
145
|
+
sizeMatch = { bounds: pick.other, axis: "width" };
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
if (movesY) {
|
|
149
|
+
const edge = MOVES_NORTH.has(handle) ? raw.y : raw.y + raw.height;
|
|
150
|
+
const align = opts.alignEdges ? bestAxisSnap([edge], others, linesY, threshold) : null;
|
|
151
|
+
let size = null;
|
|
152
|
+
if (opts.matchSizes) {
|
|
153
|
+
let bestDist = Infinity;
|
|
154
|
+
for (const other of others) {
|
|
155
|
+
const dist = Math.abs(other.height - Math.abs(raw.height));
|
|
156
|
+
if (dist <= threshold && dist < bestDist) {
|
|
157
|
+
bestDist = dist;
|
|
158
|
+
const sign = raw.height < 0 ? -1 : 1;
|
|
159
|
+
const targetEdge = MOVES_NORTH.has(handle)
|
|
160
|
+
? raw.y + raw.height - sign * other.height
|
|
161
|
+
: raw.y + sign * other.height;
|
|
162
|
+
size = { correction: targetEdge - edge, guideAt: targetEdge, other, center: false };
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const pick = align && (!size || Math.abs(align.correction) <= Math.abs(size.correction)) ? align : size;
|
|
167
|
+
if (pick) {
|
|
168
|
+
dy += pick.correction;
|
|
169
|
+
if (pick === align)
|
|
170
|
+
guides.push(guideFor("y", pick, resized(original, handle, { x: dx, y: dy }), "edge"));
|
|
171
|
+
else if (sizeMatch?.bounds === pick.other)
|
|
172
|
+
sizeMatch = { bounds: pick.other, axis: "both" };
|
|
173
|
+
else
|
|
174
|
+
sizeMatch ??= { bounds: pick.other, axis: "height" };
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
return { delta: { x: dx, y: dy }, guides, sizeMatch };
|
|
178
|
+
};
|
|
179
|
+
/**
|
|
180
|
+
* Gaps between two extents along a guide (reference "distance" intervals):
|
|
181
|
+
* `[a1, a2]` is the aligned-with shape's extent, `[b1, b2]` the moved
|
|
182
|
+
* shape's. Disjoint extents yield the single gap between them; partially
|
|
183
|
+
* overlapping ones yield the two non-shared stretches; identical or nested
|
|
184
|
+
* extents yield nothing.
|
|
185
|
+
*/
|
|
186
|
+
export const gapIntervals = (a1, a2, b1, b2) => {
|
|
187
|
+
if (a2 < b1)
|
|
188
|
+
return [{ start: a2, end: b1 }];
|
|
189
|
+
if (b2 < a1)
|
|
190
|
+
return [{ start: b2, end: a1 }];
|
|
191
|
+
if ((a1 <= b1 && a2 >= b2) || (b1 <= a1 && b2 >= a2))
|
|
192
|
+
return [];
|
|
193
|
+
return [
|
|
194
|
+
{ start: Math.min(a1, b1), end: Math.max(a1, b1) },
|
|
195
|
+
{ start: Math.min(a2, b2), end: Math.max(a2, b2) },
|
|
196
|
+
].filter((g) => g.end > g.start);
|
|
197
|
+
};
|
|
198
|
+
//# sourceMappingURL=object-snap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-snap.js","sourceRoot":"","sources":["../../../src/editor/applies/object-snap.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { type Scene, type Element, type Link, type Patch, type TextElement } from "@oh-just-another/scene";
|
|
2
2
|
import type { Bounds, ElementId, LinkId, Vec2 } from "@oh-just-another/types";
|
|
3
|
-
import { type HandleId } from "../../handle.js";
|
|
3
|
+
import { type HandleId } from "../../interaction/handle.js";
|
|
4
4
|
/**
|
|
5
5
|
* Pure: compute the patch + new scene for a single-shape resize.
|
|
6
6
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../src/editor/applies/resize.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"resize.d.ts","sourceRoot":"","sources":["../../../src/editor/applies/resize.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,IAAI,EACT,KAAK,KAAK,EACV,KAAK,WAAW,EACjB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAqC,KAAK,QAAQ,EAAE,MAAM,6BAA6B,CAAC;AAW/F;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,KAAK,EACZ,IAAI,SAAS,EACb,QAAQ,QAAQ,EAChB,OAAO,IAAI,EACX,gBAAgB,MAAM,EACtB,gBAAgB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,KAAK,MAAM,EACzE,oBAAkB,EAClB,oBAAkB,KACjB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IAkCrD,CAAC;AAEF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,2BAA2B,GACtC,OAAO,KAAK,EACZ,UAAU,OAAO,EACjB,QAAQ,QAAQ,EAChB,YAAY,IAAI,EAChB,oBAAkB,EAClB,oBAAkB,KACjB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IA4CrD,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,KAAK,EACZ,UAAU,WAAW,EACrB,QAAQ,QAAQ,EAChB,OAAO,IAAI,EACX,gBAAgB,MAAM,EACtB,oBAAkB,KACjB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IAgDrD,CAAC;AAEF;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,WAAW,CAC5B,SAAS,EACT;QACE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB,CACF,CAAC;IACF;;;;;OAKG;IACH,QAAQ,CAAC,KAAK,CAAC,EAAE,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;CAC5C;AAED,eAAO,MAAM,yBAAyB,GACpC,OAAO,KAAK,EACZ,QAAQ,iBAAiB,EACzB,QAAQ,QAAQ,EAChB,OAAO,IAAI,EACX,gBAAgB,MAAM,EACtB,gBAAgB,OAAO,EACvB,oBAAkB,KACjB;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,EAAE,CAAA;CAwGlC,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { apply, getAutoLayoutSpec, getElement, getLink, } from "@oh-just-another/scene";
|
|
2
|
-
import { frameCorners, shapeSelectionFrame } from "../../handle.js";
|
|
1
|
+
import { apply, getAutoLayoutSpec, getElement, getLink, isImage, } from "@oh-just-another/scene";
|
|
2
|
+
import { frameCorners, shapeSelectionFrame } from "../../interaction/handle.js";
|
|
3
3
|
import { applyResizeConstraints, lockAspectRatio, resizeFromCenter, resizeFromHandle, } from "../resize-helpers.js";
|
|
4
4
|
import { hasWidthHeight } from "../shape-traits.js";
|
|
5
5
|
import { scaleLinkAround } from "./link-move.js";
|
|
@@ -30,7 +30,9 @@ export const computeElementResize = (scene, id, handle, delta, originalBounds, c
|
|
|
30
30
|
// edge would otherwise hand control to that opposite edge ("flip through
|
|
31
31
|
// the face"). Force `noFlip` regardless of the element's stored flag so
|
|
32
32
|
// instances that lack it behave the same.
|
|
33
|
-
|
|
33
|
+
// Images never mirror by overshooting a handle — a flipped bitmap reads
|
|
34
|
+
// as a glitch, not an intent (flip lives in the Actions menu).
|
|
35
|
+
const noFlip = shape.noFlip === true || isImage(shape) || getAutoLayoutSpec(shape) !== null;
|
|
34
36
|
const constraints = noFlip ? { ...shape, noFlip: true } : shape;
|
|
35
37
|
const intermediate = applyResizeConstraints(originalBounds, raw, handle, constraints, fromCenter);
|
|
36
38
|
const constrained = clampContainer(shape, intermediate, handle);
|
|
@@ -89,7 +91,7 @@ export const computeRotatedElementResize = (scene, original, handle, worldDelta,
|
|
|
89
91
|
const free = resizeFromHandle(base, handle, localDelta);
|
|
90
92
|
const shaped = lockAspect ? lockAspectRatio(base, free) : free;
|
|
91
93
|
const raw = fromCenter ? resizeFromCenter(base, shaped) : shaped;
|
|
92
|
-
const noFlip = original.noFlip === true || getAutoLayoutSpec(original) !== null;
|
|
94
|
+
const noFlip = original.noFlip === true || isImage(original) || getAutoLayoutSpec(original) !== null;
|
|
93
95
|
const constraints = noFlip ? { ...original, noFlip: true } : original;
|
|
94
96
|
const constrained = applyResizeConstraints(base, raw, handle, constraints, fromCenter);
|
|
95
97
|
// Map the new local box back to world through the basis. The new NW corner is
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resize.js","sourceRoot":"","sources":["../../../src/editor/applies/resize.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resize.js","sourceRoot":"","sources":["../../../src/editor/applies/resize.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { type Scene } from "@oh-just-another/scene";
|
|
1
|
+
import { type Element, type Scene } from "@oh-just-another/scene";
|
|
2
2
|
import type { Bounds, LayerId } from "@oh-just-another/types";
|
|
3
|
-
import * as Selection from "../../selection.js";
|
|
4
|
-
import * as LinkSelection from "../../link-selection.js";
|
|
3
|
+
import * as Selection from "../../selection/selection.js";
|
|
4
|
+
import * as LinkSelection from "../../selection/link-selection.js";
|
|
5
5
|
/**
|
|
6
6
|
* Compute the selection that results from a lasso rectangle.
|
|
7
7
|
*
|
|
@@ -13,7 +13,7 @@ import * as LinkSelection from "../../link-selection.js";
|
|
|
13
13
|
* caller (Editor) writes it back, clears `_selectedLink`, and
|
|
14
14
|
* fires `notify()`.
|
|
15
15
|
*/
|
|
16
|
-
export declare const selectByBounds: (scene: Scene, current: Selection.Selection, isLayerLocked: (id: LayerId) => boolean, bounds: Bounds, mode: "replace" | "add") => Selection.Selection;
|
|
16
|
+
export declare const selectByBounds: (scene: Scene, current: Selection.Selection, isLayerLocked: (id: LayerId) => boolean, bounds: Bounds, mode: "replace" | "add", rootOf?: (shape: Element) => Element) => Selection.Selection;
|
|
17
17
|
/**
|
|
18
18
|
* Live-preview variant — bases the next selection on the captured
|
|
19
19
|
* `lassoBaseSelection` snapshot so `"replace"` mode shrinks back to
|
|
@@ -22,7 +22,7 @@ export declare const selectByBounds: (scene: Scene, current: Selection.Selection
|
|
|
22
22
|
* picks intact. Caller still owns the equality short-circuit and
|
|
23
23
|
* the `_selectedLink` clearing.
|
|
24
24
|
*/
|
|
25
|
-
export declare const selectByBoundsLive: (scene: Scene, base: Selection.Selection, isLayerLocked: (id: LayerId) => boolean, bounds: Bounds, mode: "replace" | "add") => Selection.Selection;
|
|
25
|
+
export declare const selectByBoundsLive: (scene: Scene, base: Selection.Selection, isLayerLocked: (id: LayerId) => boolean, bounds: Bounds, mode: "replace" | "add", rootOf?: (shape: Element) => Element) => Selection.Selection;
|
|
26
26
|
/**
|
|
27
27
|
* Link half of the marquee. A connector is captured when its ENTIRE drawn
|
|
28
28
|
* path lies inside `bounds` (fully-enclosed rule), so dragging a box across
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/editor/applies/selection.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"selection.d.ts","sourceRoot":"","sources":["../../../src/editor/applies/selection.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,OAAO,EAKZ,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAQ,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,SAAS,MAAM,8BAA8B,CAAC;AAC1D,OAAO,KAAK,aAAa,MAAM,mCAAmC,CAAC;AAGnE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,KAAK,EACZ,SAAS,SAAS,CAAC,SAAS,EAC5B,eAAe,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,EACvC,QAAQ,MAAM,EACd,MAAM,SAAS,GAAG,KAAK,EACvB,SAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,OAA0B,KACrD,SAAS,CAAC,SAaZ,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,MAAM,SAAS,CAAC,SAAS,EACzB,eAAe,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,EACvC,QAAQ,MAAM,EACd,MAAM,SAAS,GAAG,KAAK,EACvB,SAAQ,CAAC,KAAK,EAAE,OAAO,KAAK,OAA0B,KACrD,SAAS,CAAC,SASZ,CAAC;AAKF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,GAClC,OAAO,KAAK,EACZ,MAAM,aAAa,CAAC,aAAa,EACjC,eAAe,CAAC,EAAE,EAAE,OAAO,KAAK,OAAO,EACvC,QAAQ,MAAM,EACd,MAAM,SAAS,GAAG,KAAK,KACtB,aAAa,CAAC,aAShB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { getElementsCoveredByBounds, getLinkPath } from "@oh-just-another/scene";
|
|
2
|
-
import * as Selection from "../../selection.js";
|
|
3
|
-
import * as LinkSelection from "../../link-selection.js";
|
|
1
|
+
import { getElementsCoveredByBounds, getLinkPath, isElementHidden, isElementLocked, } from "@oh-just-another/scene";
|
|
2
|
+
import * as Selection from "../../selection/selection.js";
|
|
3
|
+
import * as LinkSelection from "../../selection/link-selection.js";
|
|
4
4
|
import { LASSO_COVERAGE_THRESHOLD } from "../../constants.js";
|
|
5
5
|
/**
|
|
6
6
|
* Compute the selection that results from a lasso rectangle.
|
|
@@ -13,13 +13,19 @@ import { LASSO_COVERAGE_THRESHOLD } from "../../constants.js";
|
|
|
13
13
|
* caller (Editor) writes it back, clears `_selectedLink`, and
|
|
14
14
|
* fires `notify()`.
|
|
15
15
|
*/
|
|
16
|
-
export const selectByBounds = (scene, current, isLayerLocked, bounds, mode) => {
|
|
16
|
+
export const selectByBounds = (scene, current, isLayerLocked, bounds, mode, rootOf = (shape) => shape) => {
|
|
17
17
|
const hits = getElementsCoveredByBounds(scene, bounds, LASSO_COVERAGE_THRESHOLD);
|
|
18
18
|
let next = mode === "replace" ? Selection.EMPTY : current;
|
|
19
19
|
for (const shape of hits) {
|
|
20
20
|
if (isLayerLocked(shape.layerId))
|
|
21
21
|
continue;
|
|
22
|
-
|
|
22
|
+
// Locked / hidden shapes are click-through and must not be lassoed
|
|
23
|
+
// either — the marquee skips them like the pointer does.
|
|
24
|
+
if (isElementLocked(scene, shape) || isElementHidden(scene, shape))
|
|
25
|
+
continue;
|
|
26
|
+
// A grouped child selects its group (like a click), so the lasso picks
|
|
27
|
+
// whole groups — never a loose subset of a group's children.
|
|
28
|
+
next = Selection.add(next, rootOf(shape).id);
|
|
23
29
|
}
|
|
24
30
|
return next;
|
|
25
31
|
};
|
|
@@ -31,13 +37,15 @@ export const selectByBounds = (scene, current, isLayerLocked, bounds, mode) => {
|
|
|
31
37
|
* picks intact. Caller still owns the equality short-circuit and
|
|
32
38
|
* the `_selectedLink` clearing.
|
|
33
39
|
*/
|
|
34
|
-
export const selectByBoundsLive = (scene, base, isLayerLocked, bounds, mode) => {
|
|
40
|
+
export const selectByBoundsLive = (scene, base, isLayerLocked, bounds, mode, rootOf = (shape) => shape) => {
|
|
35
41
|
let next = mode === "replace" ? Selection.EMPTY : base;
|
|
36
42
|
const hits = getElementsCoveredByBounds(scene, bounds, LASSO_COVERAGE_THRESHOLD);
|
|
37
43
|
for (const shape of hits) {
|
|
38
44
|
if (isLayerLocked(shape.layerId))
|
|
39
45
|
continue;
|
|
40
|
-
|
|
46
|
+
if (isElementLocked(scene, shape) || isElementHidden(scene, shape))
|
|
47
|
+
continue;
|
|
48
|
+
next = Selection.add(next, rootOf(shape).id);
|
|
41
49
|
}
|
|
42
50
|
return next;
|
|
43
51
|
};
|