@oh-just-another/state 0.57.0 → 0.59.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 +90 -0
- package/README.md +76 -27
- package/dist/.tsbuildinfo +1 -1
- package/dist/actions/actionArrange.d.ts +13 -0
- package/dist/actions/actionArrange.d.ts.map +1 -0
- package/dist/actions/actionArrange.js +130 -0
- package/dist/actions/actionArrange.js.map +1 -0
- package/dist/actions/actionClipboard.d.ts +2 -0
- package/dist/actions/actionClipboard.d.ts.map +1 -1
- package/dist/actions/actionClipboard.js +36 -4
- package/dist/actions/actionClipboard.js.map +1 -1
- package/dist/actions/actionGrouping.d.ts.map +1 -1
- package/dist/actions/actionGrouping.js +3 -1
- package/dist/actions/actionGrouping.js.map +1 -1
- package/dist/actions/actionKeyboard.d.ts.map +1 -1
- package/dist/actions/actionKeyboard.js +6 -2
- package/dist/actions/actionKeyboard.js.map +1 -1
- package/dist/actions/actionLayout.d.ts.map +1 -1
- package/dist/actions/actionLayout.js +12 -4
- package/dist/actions/actionLayout.js.map +1 -1
- package/dist/actions/actionMode.d.ts.map +1 -1
- package/dist/actions/actionMode.js +30 -10
- package/dist/actions/actionMode.js.map +1 -1
- package/dist/actions/actionSelection.d.ts.map +1 -1
- package/dist/actions/actionSelection.js +18 -6
- package/dist/actions/actionSelection.js.map +1 -1
- package/dist/actions/actionText.d.ts +5 -0
- package/dist/actions/actionText.d.ts.map +1 -0
- package/dist/actions/actionText.js +37 -0
- package/dist/actions/actionText.js.map +1 -0
- package/dist/actions/actionView.d.ts.map +1 -1
- package/dist/actions/actionView.js +4 -2
- package/dist/actions/actionView.js.map +1 -1
- package/dist/actions/actionZOrder.d.ts.map +1 -1
- package/dist/actions/actionZOrder.js +12 -4
- package/dist/actions/actionZOrder.js.map +1 -1
- package/dist/actions/actionZoom.d.ts.map +1 -1
- package/dist/actions/actionZoom.js +17 -17
- package/dist/actions/actionZoom.js.map +1 -1
- package/dist/actions/index.d.ts +3 -1
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +3 -1
- package/dist/actions/index.js.map +1 -1
- package/dist/actions/registry.d.ts.map +1 -1
- package/dist/actions/registry.js +5 -3
- package/dist/actions/registry.js.map +1 -1
- package/dist/actions/types.d.ts +1 -1
- package/dist/actions/types.d.ts.map +1 -1
- package/dist/actions/types.js.map +1 -1
- package/dist/auto-layout-scheduler.d.ts +1 -3
- package/dist/auto-layout-scheduler.d.ts.map +1 -1
- package/dist/auto-layout-scheduler.js +1 -2
- package/dist/auto-layout-scheduler.js.map +1 -1
- package/dist/built-in-handlers.d.ts.map +1 -1
- package/dist/built-in-handlers.js +30 -7
- package/dist/built-in-handlers.js.map +1 -1
- package/dist/clipboard.d.ts.map +1 -1
- package/dist/clipboard.js +6 -7
- package/dist/clipboard.js.map +1 -1
- package/dist/constants.d.ts +48 -23
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +48 -23
- package/dist/constants.js.map +1 -1
- package/dist/dom-events.d.ts +7 -0
- package/dist/dom-events.d.ts.map +1 -1
- package/dist/dom-events.js +12 -0
- package/dist/dom-events.js.map +1 -1
- package/dist/editor/animation-scene.d.ts +21 -0
- package/dist/editor/animation-scene.d.ts.map +1 -0
- package/dist/editor/animation-scene.js +71 -0
- package/dist/editor/animation-scene.js.map +1 -0
- package/dist/editor/animation.d.ts +43 -0
- package/dist/editor/animation.d.ts.map +1 -0
- package/dist/editor/animation.js +80 -0
- package/dist/editor/animation.js.map +1 -0
- package/dist/editor/applies/arrange.d.ts +46 -0
- package/dist/editor/applies/arrange.d.ts.map +1 -0
- package/dist/editor/applies/arrange.js +162 -0
- package/dist/editor/applies/arrange.js.map +1 -0
- package/dist/editor/applies/create.d.ts.map +1 -1
- package/dist/editor/applies/create.js +1 -1
- package/dist/editor/applies/create.js.map +1 -1
- package/dist/editor/applies/edge.d.ts +8 -1
- package/dist/editor/applies/edge.d.ts.map +1 -1
- package/dist/editor/applies/edge.js +31 -1
- package/dist/editor/applies/edge.js.map +1 -1
- package/dist/editor/applies/link-move.d.ts.map +1 -1
- package/dist/editor/applies/link-move.js +5 -2
- package/dist/editor/applies/link-move.js.map +1 -1
- package/dist/editor/applies/move.d.ts +6 -0
- package/dist/editor/applies/move.d.ts.map +1 -1
- package/dist/editor/applies/move.js +6 -0
- package/dist/editor/applies/move.js.map +1 -1
- package/dist/editor/applies/resize.d.ts +26 -5
- package/dist/editor/applies/resize.d.ts.map +1 -1
- package/dist/editor/applies/resize.js +92 -14
- package/dist/editor/applies/resize.js.map +1 -1
- package/dist/editor/applies/snap-grid.d.ts.map +1 -1
- package/dist/editor/applies/snap-grid.js.map +1 -1
- package/dist/editor/caret-blink.d.ts +18 -0
- package/dist/editor/caret-blink.d.ts.map +1 -0
- package/dist/editor/caret-blink.js +42 -0
- package/dist/editor/caret-blink.js.map +1 -0
- package/dist/editor/container-ops.d.ts.map +1 -1
- package/dist/editor/container-ops.js +2 -2
- package/dist/editor/container-ops.js.map +1 -1
- package/dist/editor/dirty-rect.d.ts +23 -0
- package/dist/editor/dirty-rect.d.ts.map +1 -0
- package/dist/editor/dirty-rect.js +115 -0
- package/dist/editor/dirty-rect.js.map +1 -0
- package/dist/editor/gif-playback.d.ts +45 -0
- package/dist/editor/gif-playback.d.ts.map +1 -0
- package/dist/editor/gif-playback.js +125 -0
- package/dist/editor/gif-playback.js.map +1 -0
- package/dist/editor/hit-test.d.ts +3 -3
- package/dist/editor/hit-test.d.ts.map +1 -1
- package/dist/editor/hit-test.js +40 -15
- package/dist/editor/hit-test.js.map +1 -1
- package/dist/editor/long-press.d.ts.map +1 -1
- package/dist/editor/long-press.js +2 -2
- package/dist/editor/long-press.js.map +1 -1
- package/dist/editor/pinch.d.ts.map +1 -1
- package/dist/editor/pinch.js +6 -7
- package/dist/editor/pinch.js.map +1 -1
- package/dist/editor/pointer-binding.d.ts.map +1 -1
- package/dist/editor/pointer-binding.js +42 -25
- package/dist/editor/pointer-binding.js.map +1 -1
- package/dist/editor/public/annotations.d.ts.map +1 -1
- package/dist/editor/public/annotations.js.map +1 -1
- package/dist/editor/public/arrange-group.d.ts +3 -9
- package/dist/editor/public/arrange-group.d.ts.map +1 -1
- package/dist/editor/public/arrange-group.js +4 -6
- package/dist/editor/public/arrange-group.js.map +1 -1
- package/dist/editor/public/brush.d.ts.map +1 -1
- package/dist/editor/public/brush.js +1 -3
- package/dist/editor/public/brush.js.map +1 -1
- package/dist/editor/public/clipboard.d.ts +2 -4
- package/dist/editor/public/clipboard.d.ts.map +1 -1
- package/dist/editor/public/clipboard.js +2 -4
- package/dist/editor/public/clipboard.js.map +1 -1
- package/dist/editor/public/cursor.d.ts +43 -0
- package/dist/editor/public/cursor.d.ts.map +1 -0
- package/dist/editor/public/cursor.js +135 -0
- package/dist/editor/public/cursor.js.map +1 -0
- package/dist/editor/public/frame-name.d.ts +20 -0
- package/dist/editor/public/frame-name.d.ts.map +1 -0
- package/dist/editor/public/frame-name.js +54 -0
- package/dist/editor/public/frame-name.js.map +1 -0
- package/dist/editor/public/image-insert.d.ts +1 -1
- package/dist/editor/public/image-insert.d.ts.map +1 -1
- package/dist/editor/public/layers.d.ts.map +1 -1
- package/dist/editor/public/layers.js +2 -2
- package/dist/editor/public/layers.js.map +1 -1
- package/dist/editor/public/link.d.ts +11 -2
- package/dist/editor/public/link.d.ts.map +1 -1
- package/dist/editor/public/link.js +71 -5
- package/dist/editor/public/link.js.map +1 -1
- package/dist/editor/public/placement.d.ts +60 -2
- package/dist/editor/public/placement.d.ts.map +1 -1
- package/dist/editor/public/placement.js +185 -2
- package/dist/editor/public/placement.js.map +1 -1
- package/dist/editor/public/selection-ops.d.ts +23 -1
- package/dist/editor/public/selection-ops.d.ts.map +1 -1
- package/dist/editor/public/selection-ops.js +81 -8
- package/dist/editor/public/selection-ops.js.map +1 -1
- package/dist/editor/public/text-edit.d.ts +1 -10
- package/dist/editor/public/text-edit.d.ts.map +1 -1
- package/dist/editor/public/text-edit.js +2 -16
- package/dist/editor/public/text-edit.js.map +1 -1
- package/dist/editor/public/z-order.d.ts.map +1 -1
- package/dist/editor/public/z-order.js +5 -5
- package/dist/editor/public/z-order.js.map +1 -1
- package/dist/editor/public/zoom-pan.d.ts +6 -4
- package/dist/editor/public/zoom-pan.d.ts.map +1 -1
- package/dist/editor/public/zoom-pan.js +8 -7
- package/dist/editor/public/zoom-pan.js.map +1 -1
- package/dist/editor/render-orchestrator.d.ts.map +1 -1
- package/dist/editor/render-orchestrator.js +5 -11
- package/dist/editor/render-orchestrator.js.map +1 -1
- package/dist/editor/resize-helpers.d.ts +21 -5
- package/dist/editor/resize-helpers.d.ts.map +1 -1
- package/dist/editor/resize-helpers.js +59 -19
- package/dist/editor/resize-helpers.js.map +1 -1
- package/dist/editor/viewport-helpers.d.ts.map +1 -1
- package/dist/editor/viewport-helpers.js +3 -3
- package/dist/editor/viewport-helpers.js.map +1 -1
- package/dist/editor-events.d.ts +1 -1
- package/dist/editor-events.d.ts.map +1 -1
- package/dist/editor.d.ts +125 -130
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +352 -985
- package/dist/editor.js.map +1 -1
- package/dist/file-drop.d.ts.map +1 -1
- package/dist/file-drop.js +7 -4
- package/dist/file-drop.js.map +1 -1
- package/dist/frame-helpers.d.ts.map +1 -1
- package/dist/frame-helpers.js +5 -5
- package/dist/frame-helpers.js.map +1 -1
- package/dist/group-helpers.d.ts.map +1 -1
- package/dist/group-helpers.js +4 -4
- package/dist/group-helpers.js.map +1 -1
- package/dist/handle.d.ts +61 -6
- package/dist/handle.d.ts.map +1 -1
- package/dist/handle.js +105 -7
- package/dist/handle.js.map +1 -1
- package/dist/hotkeys-binding.d.ts +26 -0
- package/dist/hotkeys-binding.d.ts.map +1 -0
- package/dist/hotkeys-binding.js +35 -0
- package/dist/hotkeys-binding.js.map +1 -0
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -2
- package/dist/index.js.map +1 -1
- package/dist/link-selection.d.ts +3 -5
- package/dist/link-selection.d.ts.map +1 -1
- package/dist/link-selection.js +3 -12
- package/dist/link-selection.js.map +1 -1
- package/dist/machine.d.ts +27 -1
- package/dist/machine.d.ts.map +1 -1
- package/dist/machine.js +38 -0
- package/dist/machine.js.map +1 -1
- package/dist/overlay.d.ts +1 -4
- package/dist/overlay.d.ts.map +1 -1
- package/dist/overlay.js +142 -38
- package/dist/overlay.js.map +1 -1
- package/dist/selection.d.ts.map +1 -1
- package/dist/selection.js +2 -10
- package/dist/selection.js.map +1 -1
- package/dist/util.d.ts +8 -0
- package/dist/util.d.ts.map +1 -0
- package/dist/util.js +17 -0
- package/dist/util.js.map +1 -0
- package/package.json +9 -9
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type Scene, type Patch } from "@oh-just-another/scene";
|
|
2
|
+
import type { ElementId, Vec2 } from "@oh-just-another/types";
|
|
3
|
+
/**
|
|
4
|
+
* Frame whose header strip (the label bar ABOVE the body) contains the world
|
|
5
|
+
* point — top-most by z-order. Used to route a double-click on the header to a
|
|
6
|
+
* name edit, since the header sits outside the frame's hit-test bounds. Assumes
|
|
7
|
+
* unrotated frames (the common case).
|
|
8
|
+
*/
|
|
9
|
+
export declare const frameHeaderAt: (scene: Scene, p: Vec2) => ElementId | null;
|
|
10
|
+
/**
|
|
11
|
+
* Compute the patch committing an edited frame name. Empty / whitespace-only
|
|
12
|
+
* clears the stored name (the renderer falls back to "Frame"). Returns `null`
|
|
13
|
+
* when the shape isn't a frame or the name is unchanged — the caller still
|
|
14
|
+
* clears the editing state and notifies.
|
|
15
|
+
*/
|
|
16
|
+
export declare const computeFrameNameCommit: (scene: Scene, id: ElementId, name: string) => {
|
|
17
|
+
readonly scene: Scene;
|
|
18
|
+
readonly patch: Patch;
|
|
19
|
+
} | null;
|
|
20
|
+
//# sourceMappingURL=frame-name.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-name.d.ts","sourceRoot":"","sources":["../../../src/editor/public/frame-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,KAAK,EACV,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,KAAK,EAAE,GAAG,IAAI,KAAG,SAAS,GAAG,IAmBjE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,KAAK,EACZ,IAAI,SAAS,EACb,MAAM,MAAM,KACX;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IAcrD,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { getElement, updateElement, isFrame, FRAME_HEADER_HEIGHT, } from "@oh-just-another/scene";
|
|
2
|
+
/**
|
|
3
|
+
* Frame whose header strip (the label bar ABOVE the body) contains the world
|
|
4
|
+
* point — top-most by z-order. Used to route a double-click on the header to a
|
|
5
|
+
* name edit, since the header sits outside the frame's hit-test bounds. Assumes
|
|
6
|
+
* unrotated frames (the common case).
|
|
7
|
+
*/
|
|
8
|
+
export const frameHeaderAt = (scene, p) => {
|
|
9
|
+
let bestId = null;
|
|
10
|
+
let bestOrder = "";
|
|
11
|
+
for (const s of scene.elements.values()) {
|
|
12
|
+
if (!isFrame(s))
|
|
13
|
+
continue;
|
|
14
|
+
const hx = s.position.x;
|
|
15
|
+
// The header strip can extend up to the frame's full width (it hugs the
|
|
16
|
+
// label but is capped there), so the rename hit zone spans it.
|
|
17
|
+
const hw = s.width * s.scale.x;
|
|
18
|
+
const hh = FRAME_HEADER_HEIGHT * s.scale.y;
|
|
19
|
+
const hyTop = s.position.y - hh;
|
|
20
|
+
if (p.x >= hx && p.x <= hx + hw && p.y >= hyTop && p.y <= hyTop + hh) {
|
|
21
|
+
if (bestId === null || s.order > bestOrder) {
|
|
22
|
+
bestId = s.id;
|
|
23
|
+
bestOrder = s.order;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return bestId;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Compute the patch committing an edited frame name. Empty / whitespace-only
|
|
31
|
+
* clears the stored name (the renderer falls back to "Frame"). Returns `null`
|
|
32
|
+
* when the shape isn't a frame or the name is unchanged — the caller still
|
|
33
|
+
* clears the editing state and notifies.
|
|
34
|
+
*/
|
|
35
|
+
export const computeFrameNameCommit = (scene, id, name) => {
|
|
36
|
+
const shape = getElement(scene, id);
|
|
37
|
+
if (shape === undefined || !isFrame(shape))
|
|
38
|
+
return null;
|
|
39
|
+
const trimmed = name.trim();
|
|
40
|
+
const current = shape.name ?? "";
|
|
41
|
+
if (trimmed === current)
|
|
42
|
+
return null;
|
|
43
|
+
const r = updateElement(scene, id, (s) => {
|
|
44
|
+
const copy = { ...s };
|
|
45
|
+
// `exactOptionalPropertyTypes`: drop the key when cleared.
|
|
46
|
+
if (trimmed === "")
|
|
47
|
+
delete copy.name;
|
|
48
|
+
else
|
|
49
|
+
copy.name = trimmed;
|
|
50
|
+
return copy;
|
|
51
|
+
});
|
|
52
|
+
return { scene: r.scene, patch: r.patch };
|
|
53
|
+
};
|
|
54
|
+
//# sourceMappingURL=frame-name.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frame-name.js","sourceRoot":"","sources":["../../../src/editor/public/frame-name.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,aAAa,EACb,OAAO,EACP,mBAAmB,GAGpB,MAAM,wBAAwB,CAAC;AAGhC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAY,EAAE,CAAO,EAAoB,EAAE;IACvE,IAAI,MAAM,GAAqB,IAAI,CAAC;IACpC,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;YAAE,SAAS;QAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxB,wEAAwE;QACxE,+DAA+D;QAC/D,MAAM,EAAE,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC/B,MAAM,EAAE,GAAG,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QAChC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,EAAE,EAAE,CAAC;YACrE,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,CAAC,KAAK,GAAG,SAAS,EAAE,CAAC;gBAC3C,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC;gBACd,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC;YACtB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CACpC,KAAY,EACZ,EAAa,EACb,IAAY,EAC6C,EAAE;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACxD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IAC5B,MAAM,OAAO,GAAI,KAA2B,CAAC,IAAI,IAAI,EAAE,CAAC;IACxD,IAAI,OAAO,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IACrC,MAAM,CAAC,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,EAAE,GAAG,CAAC,EAAkC,CAAC;QACtD,2DAA2D;QAC3D,IAAI,OAAO,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC,IAAI,CAAC;;YAChC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;QACzB,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;IACH,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC;AAC5C,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"image-insert.d.ts","sourceRoot":"","sources":["../../../src/editor/public/image-insert.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,KAAK,EAEX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAG/E;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,KAAK,EACZ,OAAO;IACL,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"image-insert.d.ts","sourceRoot":"","sources":["../../../src/editor/public/image-insert.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,KAAK,EACV,KAAK,OAAO,EACZ,KAAK,KAAK,EAEX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAG/E;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAC5B,OAAO,KAAK,EACZ,OAAO;IACL,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,WAAW,GAAG,gBAAgB,CAAC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB,EACD,IAAI,SAAS,EACb,SAAS,OAAO,KACf,OA0BF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,KAAK,EACZ,MAAM,IAAI,EACV,MAAM,MAAM,GAAG,SAAS,EACxB,YAAY,MAAM,MAAM,KACvB,OAAO,CAAC;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAS/E,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,KAAG,OAKjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../../src/editor/public/layers.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"layers.d.ts","sourceRoot":"","sources":["../../../src/editor/public/layers.ts"],"names":[],"mappings":"AAAA,OAAO,EAWL,KAAK,KAAK,EACV,KAAK,KAAK,EACX,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEtD,OAAO,KAAK,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAErD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,MAAM,MAAM,EACZ,YAAY,OAAO,KAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;CAK3E,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,IAAI,OAAO,EACX,eAAe,OAAO,KACrB;IACD,KAAK,EAAE,KAAK,CAAC;IACb,OAAO,EAAE,KAAK,EAAE,CAAC;IACjB,iBAAiB,EAAE,OAAO,CAAC;CAC5B,GAAG,IA6BH,CAAC;AAEF,oEAAoE;AACpE,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,IAAI,OAAO,EACX,MAAM,MAAM,KACX;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IAKrD,CAAC;AAEF,+BAA+B;AAC/B,eAAO,MAAM,4BAA4B,GACvC,OAAO,KAAK,EACZ,IAAI,OAAO,KACV;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IAIrD,CAAC;AAEF,8BAA8B;AAC9B,eAAO,MAAM,sBAAsB,GACjC,OAAO,KAAK,EACZ,IAAI,OAAO,KACV;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IAIrD,CAAC;AAEF;;;;;;;GAOG;AACH,eAAO,MAAM,2BAA2B,GACtC,OAAO,KAAK,EACZ,WAAW,SAAS,CAAC,SAAS,EAC9B,aAAa,OAAO,KACnB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,KAAK,EAAE,CAAA;CAAE,GAAG,IAazD,CAAC;AAEF,kEAAkE;AAClE,eAAO,MAAM,UAAU,GAAI,MAAM,MAAM,KAAG,OACe,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { addLayer, getElement, orderForTop, removeLink, removeLayer, removeElement, updateLayer, updateElement, } from "@oh-just-another/scene";
|
|
1
|
+
import { addLayer, byOrderDesc, getElement, orderForTop, removeLink, removeLayer, removeElement, updateLayer, updateElement, } from "@oh-just-another/scene";
|
|
2
2
|
import { layerId as castLayerId } from "@oh-just-another/types";
|
|
3
3
|
/**
|
|
4
4
|
* Build a fresh top-of-stack layer + the patch that adds it. Caller
|
|
@@ -46,7 +46,7 @@ export const computeRemoveLayer = (scene, id, currentActive) => {
|
|
|
46
46
|
patches.push(r.patch);
|
|
47
47
|
let nextActive = currentActive;
|
|
48
48
|
if (currentActive === id) {
|
|
49
|
-
const top = [...s.layers.values()].sort(
|
|
49
|
+
const top = [...s.layers.values()].sort(byOrderDesc)[0];
|
|
50
50
|
if (top)
|
|
51
51
|
nextActive = top.id;
|
|
52
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../../../src/editor/public/layers.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,UAAU,EACV,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,GAId,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAGhE;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAY,EACZ,IAAY,EACZ,UAAmB,EAC0D,EAAE;IAC/E,MAAM,QAAQ,GAAG,WAAW,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,GAAU,EAAE,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;IAC7F,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACtC,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AAC3E,CAAC,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAY,EACZ,EAAW,EACX,aAAsB,EAKf,EAAE;IACT,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;QAAE,OAAO,IAAI,CAAC;IACvC,IAAI,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;IAC7D,CAAC;IACD,MAAM,OAAO,GAAY,EAAE,CAAC;IAC5B,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QAC7C,IAAI,KAAK,CAAC,OAAO,KAAK,EAAE;YAAE,SAAS;QACnC,MAAM,CAAC,GAAG,aAAa,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;QACrC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;QACzC,IAAI,IAAI,CAAC,OAAO,KAAK,EAAE;YAAE,SAAS;QAClC,MAAM,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QACjC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;QACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxB,CAAC;IACD,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC7B,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC;IACZ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAEtB,IAAI,UAAU,GAAG,aAAa,CAAC;IAC/B,IAAI,aAAa,KAAK,EAAE,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"layers.js","sourceRoot":"","sources":["../../../src/editor/public/layers.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type Scene, type Patch } from "@oh-just-another/scene";
|
|
2
|
-
import type { ElementId } from "@oh-just-another/types";
|
|
1
|
+
import { type Scene, type Patch, type SnapEngine, type LinkEndpoint } from "@oh-just-another/scene";
|
|
2
|
+
import type { ElementId, Vec2 } from "@oh-just-another/types";
|
|
3
3
|
/**
|
|
4
4
|
* Normalise user-entered link text into a safe, storable href, or
|
|
5
5
|
* `null` to clear / reject. Adds `https://` to a scheme-less URL,
|
|
@@ -22,4 +22,13 @@ export declare const computeSetLink: (scene: Scene, ids: Iterable<ElementId>, hr
|
|
|
22
22
|
readonly scene: Scene;
|
|
23
23
|
readonly patch: Patch;
|
|
24
24
|
} | null;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve where a link endpoint should attach when dropped at `worldPoint`.
|
|
27
|
+
* Attach contract: a port dot → *fixed* anchor; near an EDGE (not a dot) →
|
|
28
|
+
* *fixed* outline point (a perimeter ratio — survives move/resize); the body
|
|
29
|
+
* interior → *floating* against the whole shape (re-aims as shapes move); empty
|
|
30
|
+
* canvas → a free point. `pressTargetElement` biases the pick toward the pressed
|
|
31
|
+
* shape, but a dot drawn outside the body still binds even when it's null.
|
|
32
|
+
*/
|
|
33
|
+
export declare const snapLinkEndpoint: (scene: Scene, snapEngine: SnapEngine, threshold: number, pressTargetElement: ElementId | null, worldPoint: Vec2) => LinkEndpoint;
|
|
25
34
|
//# sourceMappingURL=link.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/editor/public/link.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../src/editor/public/link.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,KAAK,EACV,KAAK,UAAU,EAEf,KAAK,YAAY,EAGlB,MAAM,wBAAwB,CAAC;AAChC,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAa9D;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,OAAO,MAAM,KAAG,MAAM,GAAG,IAQtD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,GAAG,SAAS,GAAG,IAAI,KAAG,MAAM,GAAG,IAGnE,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,cAAc,GACzB,OAAO,KAAK,EACZ,KAAK,QAAQ,CAAC,SAAS,CAAC,EACxB,MAAM,MAAM,GAAG,IAAI,KAClB;IAAE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;CAAE,GAAG,IAyBrD,CAAC;AAwBF;;;;;;;GAOG;AACH,eAAO,MAAM,gBAAgB,GAC3B,OAAO,KAAK,EACZ,YAAY,UAAU,EACtB,WAAW,MAAM,EACjB,oBAAoB,SAAS,GAAG,IAAI,EACpC,YAAY,IAAI,KACf,YAyCF,CAAC"}
|
|
@@ -1,11 +1,14 @@
|
|
|
1
|
-
import { getElement, updateElement } from "@oh-just-another/scene";
|
|
1
|
+
import { getElement, updateElement, } from "@oh-just-another/scene";
|
|
2
2
|
/**
|
|
3
3
|
* Schemes allowed to be stored / opened. Everything else (notably
|
|
4
4
|
* `javascript:`, `data:`, `vbscript:`, `file:`) is rejected so a scene
|
|
5
5
|
* can't smuggle an XSS / local-file payload through an element link.
|
|
6
6
|
*/
|
|
7
7
|
const SAFE_SCHEME = /^(https?:|mailto:)/i;
|
|
8
|
-
|
|
8
|
+
// Domain labels exclude `.` so the literal dots don't overlap the surrounding
|
|
9
|
+
// character classes — that overlap is what lets a crafted `a@!.!.!.…` string
|
|
10
|
+
// drive polynomial backtracking. Each label is matched linearly.
|
|
11
|
+
const BARE_EMAIL = /^[^\s@]+@[^\s@.]+(?:\.[^\s@.]+)+$/;
|
|
9
12
|
/**
|
|
10
13
|
* Normalise user-entered link text into a safe, storable href, or
|
|
11
14
|
* `null` to clear / reject. Adds `https://` to a scheme-less URL,
|
|
@@ -66,9 +69,72 @@ export const computeSetLink = (scene, ids, href) => {
|
|
|
66
69
|
const firstPatch = patches[0];
|
|
67
70
|
return {
|
|
68
71
|
scene: s,
|
|
69
|
-
patch: patches.length === 1 && firstPatch !== undefined
|
|
70
|
-
? firstPatch
|
|
71
|
-
: { kind: "batch", patches },
|
|
72
|
+
patch: patches.length === 1 && firstPatch !== undefined ? firstPatch : { kind: "batch", patches },
|
|
72
73
|
};
|
|
73
74
|
};
|
|
75
|
+
/**
|
|
76
|
+
* Convert a snap candidate into a `LinkEndpoint`. Anchor snap → named anchor
|
|
77
|
+
* ref; outline snap → outline ref with the sampled ratio. Falls back to a free
|
|
78
|
+
* point if the metadata isn't recognised.
|
|
79
|
+
*/
|
|
80
|
+
const endpointFromSnap = (elementId, candidate, shape) => {
|
|
81
|
+
if (candidate.kind === "anchor") {
|
|
82
|
+
const ref = candidate.metadata?.ref;
|
|
83
|
+
if (ref)
|
|
84
|
+
return { kind: "anchor", elementId, anchor: ref };
|
|
85
|
+
}
|
|
86
|
+
if (candidate.kind === "outline" && typeof candidate.metadata?.ratio === "number") {
|
|
87
|
+
return { kind: "outline", elementId, ratio: candidate.metadata.ratio };
|
|
88
|
+
}
|
|
89
|
+
// Defensive fallback — should not happen with built-in contributors.
|
|
90
|
+
void shape;
|
|
91
|
+
return { kind: "point", position: candidate.snapped };
|
|
92
|
+
};
|
|
93
|
+
/**
|
|
94
|
+
* Resolve where a link endpoint should attach when dropped at `worldPoint`.
|
|
95
|
+
* Attach contract: a port dot → *fixed* anchor; near an EDGE (not a dot) →
|
|
96
|
+
* *fixed* outline point (a perimeter ratio — survives move/resize); the body
|
|
97
|
+
* interior → *floating* against the whole shape (re-aims as shapes move); empty
|
|
98
|
+
* canvas → a free point. `pressTargetElement` biases the pick toward the pressed
|
|
99
|
+
* shape, but a dot drawn outside the body still binds even when it's null.
|
|
100
|
+
*/
|
|
101
|
+
export const snapLinkEndpoint = (scene, snapEngine, threshold, pressTargetElement, worldPoint) => {
|
|
102
|
+
const result = snapEngine.snap({
|
|
103
|
+
scene,
|
|
104
|
+
probe: worldPoint,
|
|
105
|
+
threshold,
|
|
106
|
+
gesture: "draw-edge",
|
|
107
|
+
});
|
|
108
|
+
const pick = (kind) => {
|
|
109
|
+
if (pressTargetElement !== null) {
|
|
110
|
+
const onTarget = result.all.find((c) => c.kind === kind && c.metadata?.elementId === pressTargetElement);
|
|
111
|
+
if (onTarget)
|
|
112
|
+
return onTarget;
|
|
113
|
+
}
|
|
114
|
+
return result.all.find((c) => c.kind === kind);
|
|
115
|
+
};
|
|
116
|
+
const boundFrom = (cand, want) => {
|
|
117
|
+
if (!cand)
|
|
118
|
+
return null;
|
|
119
|
+
const elId = cand.metadata?.elementId;
|
|
120
|
+
if (elId === undefined)
|
|
121
|
+
return null;
|
|
122
|
+
const shp = getElement(scene, elId);
|
|
123
|
+
if (!shp)
|
|
124
|
+
return null;
|
|
125
|
+
const ep = endpointFromSnap(elId, cand, shp);
|
|
126
|
+
return ep.kind === want ? ep : null;
|
|
127
|
+
};
|
|
128
|
+
const anchorEp = boundFrom(pick("anchor"), "anchor");
|
|
129
|
+
if (anchorEp)
|
|
130
|
+
return anchorEp;
|
|
131
|
+
const outlineEp = boundFrom(pick("outline"), "outline");
|
|
132
|
+
if (outlineEp)
|
|
133
|
+
return outlineEp;
|
|
134
|
+
// No dot/edge snap. Over a shape body → floating; else a free point.
|
|
135
|
+
if (pressTargetElement !== null && getElement(scene, pressTargetElement)) {
|
|
136
|
+
return { kind: "floating", elementId: pressTargetElement };
|
|
137
|
+
}
|
|
138
|
+
return { kind: "point", position: worldPoint };
|
|
139
|
+
};
|
|
74
140
|
//# sourceMappingURL=link.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/editor/public/link.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"link.js","sourceRoot":"","sources":["../../../src/editor/public/link.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { type Scene, type Element, type Patch } from "@oh-just-another/scene";
|
|
2
|
-
import type { LayerId, ElementId, Vec2 } from "@oh-just-another/types";
|
|
1
|
+
import { type Scene, type Element, type Patch, type FractionalIndex } from "@oh-just-another/scene";
|
|
2
|
+
import type { LayerId, ElementId, LinkId, Bounds, Vec2 } from "@oh-just-another/types";
|
|
3
3
|
import type { Mode } from "../../modes.js";
|
|
4
4
|
/**
|
|
5
5
|
* Build a shape for keyboard-friendly creation centred on
|
|
@@ -57,4 +57,62 @@ export declare const beginPlacementState: (shape: Element) => {
|
|
|
57
57
|
export declare const computePlacementCancel: (scene: Scene, elementId: ElementId) => {
|
|
58
58
|
readonly scene: Scene;
|
|
59
59
|
};
|
|
60
|
+
/**
|
|
61
|
+
* Ghost geometry for what clicking a start dot would create (standard hover
|
|
62
|
+
* preview): the would-be new element's world bounds + the connector path from
|
|
63
|
+
* the dot to it. Pure — no mutation. Mirrors the placement in the Editor's
|
|
64
|
+
* `createLinkedElementFromAnchor`.
|
|
65
|
+
*/
|
|
66
|
+
export declare const previewClickCreate: (scene: Scene, activeLayerId: LayerId, fromElement: ElementId, anchorName: string) => {
|
|
67
|
+
bounds: Bounds;
|
|
68
|
+
path: readonly Vec2[];
|
|
69
|
+
element: Element;
|
|
70
|
+
ghostScene: Scene;
|
|
71
|
+
ghostLinkId: LinkId;
|
|
72
|
+
} | null;
|
|
73
|
+
/**
|
|
74
|
+
* Compute the scene + two patches (clone-add, link) for the "click a link-start
|
|
75
|
+
* dot" gesture: spawn a same-kind blank clone of `fromElement` in the dot's
|
|
76
|
+
* outward direction and link source → clone. Pure — the caller pre-allocates
|
|
77
|
+
* `newId` / `linkId` and owns the history transaction + selection. Returns
|
|
78
|
+
* `null` when the source is gone.
|
|
79
|
+
*/
|
|
80
|
+
export declare const computeLinkedElementFromAnchor: (scene: Scene, activeLayerId: LayerId, fromElement: ElementId, anchorName: string, newId: ElementId, linkId: LinkId) => {
|
|
81
|
+
scene: Scene;
|
|
82
|
+
addPatch: Patch;
|
|
83
|
+
linkPatch: Patch;
|
|
84
|
+
} | null;
|
|
85
|
+
/**
|
|
86
|
+
* Compute the clone-add patches for an in-place duplicate. `ids` is the expanded
|
|
87
|
+
* set to clone (selection + group/frame descendants), `idMap` the pre-allocated
|
|
88
|
+
* old→new ids so cross-references (`parentId` / `frameId`) remap to the clones.
|
|
89
|
+
* Pure — the caller owns id allocation, the history transaction, and selection.
|
|
90
|
+
* Each clone lands on top of its layer (order recomputed against the growing
|
|
91
|
+
* scene, so clones stack in iteration order).
|
|
92
|
+
*/
|
|
93
|
+
export declare const computeDuplicateInPlace: (scene: Scene, ids: ReadonlySet<ElementId>, idMap: ReadonlyMap<ElementId, ElementId>) => {
|
|
94
|
+
scene: Scene;
|
|
95
|
+
patches: Patch[];
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Compute the scene + two patches (element-add, link re-point) for dropping a
|
|
99
|
+
* link end onto empty canvas and picking a shape from the menu: build a shape
|
|
100
|
+
* from `factory` centred on the drop point and float the dropped link end
|
|
101
|
+
* against it. Pure — the caller pre-allocates `newId` and owns the history
|
|
102
|
+
* transaction + selection.
|
|
103
|
+
*/
|
|
104
|
+
export declare const computeShapeAtLinkDrop: (scene: Scene, activeLayerId: LayerId, drop: {
|
|
105
|
+
linkId: LinkId;
|
|
106
|
+
side: "from" | "to";
|
|
107
|
+
world: Vec2;
|
|
108
|
+
}, newId: ElementId, factory: (ctx: {
|
|
109
|
+
id: ElementId;
|
|
110
|
+
layerId: LayerId;
|
|
111
|
+
position: Vec2;
|
|
112
|
+
order: FractionalIndex;
|
|
113
|
+
}) => Element) => {
|
|
114
|
+
scene: Scene;
|
|
115
|
+
addPatch: Patch;
|
|
116
|
+
linkPatch: Patch;
|
|
117
|
+
};
|
|
60
118
|
//# sourceMappingURL=placement.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../../src/editor/public/placement.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"placement.d.ts","sourceRoot":"","sources":["../../../src/editor/public/placement.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { addElement, apply, findContainerAt, getElementWorldBounds, orderForTop, removeElement, } from "@oh-just-another/scene";
|
|
1
|
+
import { addElement, apply, findContainerAt, findNearestAnchor, getAnchorOutwardNormal, getAnchorWorld, getElement, getElementWorldBounds, getLink, isFrame, isText, orderForTop, removeElement, routeElbowLink, snapExcludedAnchors, updateLink, } from "@oh-just-another/scene";
|
|
2
2
|
import { elementId as castElementId } from "@oh-just-another/types";
|
|
3
|
-
import { TEXT_DEFAULT_FILL, TEXT_DEFAULT_FONT_FAMILY, TEXT_DEFAULT_FONT_SIZE, } from "../../constants.js";
|
|
3
|
+
import { ANCHOR_CLICK_NEW_ELEMENT_GAP, TEXT_DEFAULT_FILL, TEXT_DEFAULT_FONT_FAMILY, TEXT_DEFAULT_FONT_SIZE, } from "../../constants.js";
|
|
4
|
+
import { req } from "../../util.js";
|
|
5
|
+
import { computeCreateLink } from "../applies/create.js";
|
|
4
6
|
/**
|
|
5
7
|
* Build a shape for keyboard-friendly creation centred on
|
|
6
8
|
* `worldCenter`. Picks `rectangle` / `ellipse` based on `mode` (falls
|
|
@@ -108,4 +110,185 @@ export const beginPlacementState = (shape) => {
|
|
|
108
110
|
};
|
|
109
111
|
/** Undo of `beginPlacement` — remove the placed shape. */
|
|
110
112
|
export const computePlacementCancel = (scene, elementId) => ({ scene: removeElement(scene, elementId).scene });
|
|
113
|
+
// Throwaway ids for the click-create hover preview — never enter the real scene.
|
|
114
|
+
const PREVIEW_GHOST_ELEMENT_ID = "__ghost-preview__";
|
|
115
|
+
const PREVIEW_GHOST_LINK_ID = "__ghost-preview-link__";
|
|
116
|
+
/**
|
|
117
|
+
* Ghost geometry for what clicking a start dot would create (standard hover
|
|
118
|
+
* preview): the would-be new element's world bounds + the connector path from
|
|
119
|
+
* the dot to it. Pure — no mutation. Mirrors the placement in the Editor's
|
|
120
|
+
* `createLinkedElementFromAnchor`.
|
|
121
|
+
*/
|
|
122
|
+
export const previewClickCreate = (scene, activeLayerId, fromElement, anchorName) => {
|
|
123
|
+
const src = getElement(scene, fromElement);
|
|
124
|
+
if (!src)
|
|
125
|
+
return null;
|
|
126
|
+
const anchor = { kind: "named", name: anchorName };
|
|
127
|
+
const normal = getAnchorOutwardNormal(src, anchor);
|
|
128
|
+
const b = getElementWorldBounds(src);
|
|
129
|
+
const extentAlong = Math.abs(normal.x) * b.width + Math.abs(normal.y) * b.height;
|
|
130
|
+
const dist = extentAlong + ANCHOR_CLICK_NEW_ELEMENT_GAP;
|
|
131
|
+
const delta = { x: normal.x * dist, y: normal.y * dist };
|
|
132
|
+
const bounds = { x: b.x + delta.x, y: b.y + delta.y, width: b.width, height: b.height };
|
|
133
|
+
const fromWorld = getAnchorWorld(src, anchor);
|
|
134
|
+
// Facing edge of the ghost (toward the source) = its centre pulled back along
|
|
135
|
+
// the normal by half its extent.
|
|
136
|
+
const ghostCx = bounds.x + bounds.width / 2;
|
|
137
|
+
const ghostCy = bounds.y + bounds.height / 2;
|
|
138
|
+
const nearEdge = {
|
|
139
|
+
x: ghostCx - normal.x * (extentAlong / 2),
|
|
140
|
+
y: ghostCy - normal.y * (extentAlong / 2),
|
|
141
|
+
};
|
|
142
|
+
// The would-be element itself — a same-kind clone of the source shifted to the
|
|
143
|
+
// ghost bounds, with blank user text. The overlay renders THIS through the real
|
|
144
|
+
// renderer so the ghost looks like the actual shape (an ellipse ghosts as an
|
|
145
|
+
// ellipse), not a bounding rect. Throwaway id — never enters the real scene.
|
|
146
|
+
let element = {
|
|
147
|
+
...src,
|
|
148
|
+
id: PREVIEW_GHOST_ELEMENT_ID,
|
|
149
|
+
position: { x: src.position.x + delta.x, y: src.position.y + delta.y },
|
|
150
|
+
};
|
|
151
|
+
if (isText(element))
|
|
152
|
+
element = { ...element, text: "" };
|
|
153
|
+
else if (isFrame(element))
|
|
154
|
+
element = { ...element, name: "" };
|
|
155
|
+
// Build a throwaway scene holding the ghost element + the would-be link so the
|
|
156
|
+
// connector can be drawn through the REAL link renderer (same routing,
|
|
157
|
+
// arrowhead and style it'll have once created) — faded — instead of a dashed
|
|
158
|
+
// preview line. The `path` field stays for callers that just want the straight
|
|
159
|
+
// from→to segment.
|
|
160
|
+
const srcCenter = { x: b.x + b.width / 2, y: b.y + b.height / 2 };
|
|
161
|
+
const withGhost = addElement(scene, element).scene;
|
|
162
|
+
const placed = req(getElement(withGhost, PREVIEW_GHOST_ELEMENT_ID));
|
|
163
|
+
const { ref: toRef } = findNearestAnchor(placed, srcCenter, snapExcludedAnchors(placed));
|
|
164
|
+
const linkResult = computeCreateLink(withGhost, { kind: "anchor", elementId: fromElement, anchor }, { kind: "anchor", elementId: PREVIEW_GHOST_ELEMENT_ID, anchor: toRef }, PREVIEW_GHOST_LINK_ID, activeLayerId);
|
|
165
|
+
let ghostScene = linkResult.scene;
|
|
166
|
+
const edge = req(getLink(ghostScene, PREVIEW_GHOST_LINK_ID));
|
|
167
|
+
if ((edge.routing ?? "straight") === "orthogonal") {
|
|
168
|
+
const routedPoints = routeElbowLink(ghostScene, edge);
|
|
169
|
+
ghostScene = updateLink(ghostScene, PREVIEW_GHOST_LINK_ID, (e) => ({
|
|
170
|
+
...e,
|
|
171
|
+
routedPoints,
|
|
172
|
+
})).scene;
|
|
173
|
+
}
|
|
174
|
+
// Render only the ghost link (the shapes stay for endpoint resolution).
|
|
175
|
+
ghostScene = {
|
|
176
|
+
...ghostScene,
|
|
177
|
+
links: new Map([[PREVIEW_GHOST_LINK_ID, req(getLink(ghostScene, PREVIEW_GHOST_LINK_ID))]]),
|
|
178
|
+
};
|
|
179
|
+
return {
|
|
180
|
+
bounds,
|
|
181
|
+
path: [fromWorld, nearEdge],
|
|
182
|
+
element,
|
|
183
|
+
ghostScene,
|
|
184
|
+
ghostLinkId: PREVIEW_GHOST_LINK_ID,
|
|
185
|
+
};
|
|
186
|
+
};
|
|
187
|
+
/**
|
|
188
|
+
* Compute the scene + two patches (clone-add, link) for the "click a link-start
|
|
189
|
+
* dot" gesture: spawn a same-kind blank clone of `fromElement` in the dot's
|
|
190
|
+
* outward direction and link source → clone. Pure — the caller pre-allocates
|
|
191
|
+
* `newId` / `linkId` and owns the history transaction + selection. Returns
|
|
192
|
+
* `null` when the source is gone.
|
|
193
|
+
*/
|
|
194
|
+
export const computeLinkedElementFromAnchor = (scene, activeLayerId, fromElement, anchorName, newId, linkId) => {
|
|
195
|
+
const src = getElement(scene, fromElement);
|
|
196
|
+
if (!src)
|
|
197
|
+
return null;
|
|
198
|
+
const anchor = { kind: "named", name: anchorName };
|
|
199
|
+
const normal = getAnchorOutwardNormal(src, anchor);
|
|
200
|
+
const bounds = getElementWorldBounds(src);
|
|
201
|
+
const srcCenter = { x: bounds.x + bounds.width / 2, y: bounds.y + bounds.height / 2 };
|
|
202
|
+
// Same-size clone → centre-to-centre distance = the source's extent along the
|
|
203
|
+
// normal + the gap, leaving exactly ANCHOR_CLICK_NEW_ELEMENT_GAP between the
|
|
204
|
+
// facing edges. `extentAlong` resolves to width for a horizontal normal,
|
|
205
|
+
// height for a vertical one (link-start dots are the four edge midpoints).
|
|
206
|
+
const extentAlong = Math.abs(normal.x) * bounds.width + Math.abs(normal.y) * bounds.height;
|
|
207
|
+
const dist = extentAlong + ANCHOR_CLICK_NEW_ELEMENT_GAP;
|
|
208
|
+
const delta = { x: normal.x * dist, y: normal.y * dist };
|
|
209
|
+
const order = orderForTop([...scene.elements.values()].filter((sh) => sh.layerId === src.layerId).map((sh) => sh.order));
|
|
210
|
+
let clone = {
|
|
211
|
+
...src,
|
|
212
|
+
id: newId,
|
|
213
|
+
position: { x: src.position.x + delta.x, y: src.position.y + delta.y },
|
|
214
|
+
order,
|
|
215
|
+
};
|
|
216
|
+
// Blank user text — a fresh same-kind shape, not a content copy. Cast through
|
|
217
|
+
// `Element` because `exactOptionalPropertyTypes` rejects the bare literal
|
|
218
|
+
// against the union (TS2375), though the narrowed branch is sound.
|
|
219
|
+
if (isText(clone))
|
|
220
|
+
clone = { ...clone, text: "" };
|
|
221
|
+
else if (isFrame(clone))
|
|
222
|
+
clone = { ...clone, name: "" };
|
|
223
|
+
const added = addElement(scene, clone);
|
|
224
|
+
const placed = req(getElement(added.scene, newId));
|
|
225
|
+
const { ref: toRef } = findNearestAnchor(placed, srcCenter, snapExcludedAnchors(placed));
|
|
226
|
+
const linkResult = computeCreateLink(added.scene, { kind: "anchor", elementId: fromElement, anchor }, { kind: "anchor", elementId: newId, anchor: toRef }, linkId, activeLayerId);
|
|
227
|
+
return { scene: linkResult.scene, addPatch: added.patch, linkPatch: linkResult.patch };
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Compute the clone-add patches for an in-place duplicate. `ids` is the expanded
|
|
231
|
+
* set to clone (selection + group/frame descendants), `idMap` the pre-allocated
|
|
232
|
+
* old→new ids so cross-references (`parentId` / `frameId`) remap to the clones.
|
|
233
|
+
* Pure — the caller owns id allocation, the history transaction, and selection.
|
|
234
|
+
* Each clone lands on top of its layer (order recomputed against the growing
|
|
235
|
+
* scene, so clones stack in iteration order).
|
|
236
|
+
*/
|
|
237
|
+
export const computeDuplicateInPlace = (scene, ids, idMap) => {
|
|
238
|
+
let next = scene;
|
|
239
|
+
const patches = [];
|
|
240
|
+
for (const id of ids) {
|
|
241
|
+
const shape = getElement(next, id);
|
|
242
|
+
if (!shape)
|
|
243
|
+
continue;
|
|
244
|
+
const newId = idMap.get(id);
|
|
245
|
+
if (newId === undefined)
|
|
246
|
+
continue;
|
|
247
|
+
const order = orderForTop([...next.elements.values()]
|
|
248
|
+
.filter((sh) => sh.layerId === shape.layerId)
|
|
249
|
+
.map((sh) => sh.order));
|
|
250
|
+
const copy = { ...shape, id: newId, order };
|
|
251
|
+
if (copy.parentId !== undefined) {
|
|
252
|
+
const mapped = idMap.get(copy.parentId);
|
|
253
|
+
if (mapped !== undefined)
|
|
254
|
+
copy.parentId = mapped;
|
|
255
|
+
}
|
|
256
|
+
if (copy.frameId !== undefined) {
|
|
257
|
+
const mapped = idMap.get(copy.frameId);
|
|
258
|
+
if (mapped !== undefined)
|
|
259
|
+
copy.frameId = mapped;
|
|
260
|
+
}
|
|
261
|
+
const r = addElement(next, copy);
|
|
262
|
+
next = r.scene;
|
|
263
|
+
patches.push(r.patch);
|
|
264
|
+
}
|
|
265
|
+
return { scene: next, patches };
|
|
266
|
+
};
|
|
267
|
+
/**
|
|
268
|
+
* Compute the scene + two patches (element-add, link re-point) for dropping a
|
|
269
|
+
* link end onto empty canvas and picking a shape from the menu: build a shape
|
|
270
|
+
* from `factory` centred on the drop point and float the dropped link end
|
|
271
|
+
* against it. Pure — the caller pre-allocates `newId` and owns the history
|
|
272
|
+
* transaction + selection.
|
|
273
|
+
*/
|
|
274
|
+
export const computeShapeAtLinkDrop = (scene, activeLayerId, drop, newId, factory) => {
|
|
275
|
+
const order = orderForTop([...scene.elements.values()].filter((sh) => sh.layerId === activeLayerId).map((sh) => sh.order));
|
|
276
|
+
const built = factory({ id: newId, layerId: activeLayerId, position: drop.world, order });
|
|
277
|
+
// Centre the element on the drop point regardless of how the factory anchored
|
|
278
|
+
// it at `position`.
|
|
279
|
+
const wb = getElementWorldBounds(built);
|
|
280
|
+
const shape = {
|
|
281
|
+
...built,
|
|
282
|
+
position: {
|
|
283
|
+
x: built.position.x + (drop.world.x - (wb.x + wb.width / 2)),
|
|
284
|
+
y: built.position.y + (drop.world.y - (wb.y + wb.height / 2)),
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
const added = addElement(scene, shape);
|
|
288
|
+
const upd = updateLink(added.scene, drop.linkId, (e) => ({
|
|
289
|
+
...e,
|
|
290
|
+
[drop.side]: { kind: "floating", elementId: newId },
|
|
291
|
+
}));
|
|
292
|
+
return { scene: upd.scene, addPatch: added.patch, linkPatch: upd.patch };
|
|
293
|
+
};
|
|
111
294
|
//# sourceMappingURL=placement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"placement.js","sourceRoot":"","sources":["../../../src/editor/public/placement.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"placement.js","sourceRoot":"","sources":["../../../src/editor/public/placement.ts"],"names":[],"mappings":"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"}
|