@oh-just-another/state 0.58.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 +67 -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 +27 -1
- package/dist/actions/actionClipboard.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.js +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 +4 -0
- 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 +14 -1
- package/dist/built-in-handlers.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/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/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 +91 -13
- package/dist/editor/applies/resize.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 -6
- 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/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/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 +70 -2
- 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 +79 -2
- 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 +4 -4
- 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 +4 -9
- 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 -133
- package/dist/editor.d.ts.map +1 -1
- package/dist/editor.js +351 -989
- package/dist/editor.js.map +1 -1
- package/dist/file-drop.d.ts.map +1 -1
- package/dist/file-drop.js +1 -2
- 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 +136 -36
- 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 +7 -7
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arrange-group.js","sourceRoot":"","sources":["../../../src/editor/public/arrange-group.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,KAAK,EACL,UAAU,EACV,wBAAwB,EACxB,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,GAId,MAAM,wBAAwB,CAAC;AAEhC,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGpE;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,KAAY,EACZ,SAA8B,EAC9B,IAAqC,EACrC,
|
|
1
|
+
{"version":3,"file":"arrange-group.js","sourceRoot":"","sources":["../../../src/editor/public/arrange-group.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,8 @@ import type { HistoryProvider } from "@oh-just-another/history";
|
|
|
3
3
|
import type { ElementId, Vec2 } from "@oh-just-another/types";
|
|
4
4
|
import * as Selection from "../../selection.js";
|
|
5
5
|
/**
|
|
6
|
-
*
|
|
7
|
-
*
|
|
8
|
-
* snapshots so subsequent mutations don't affect the buffer. Cross-tab
|
|
9
|
-
* paste uses host-level `navigator.clipboard`.
|
|
6
|
+
* Copy / paste delegators over the editor-owned clipboard buffer. Copies are
|
|
7
|
+
* deep-cloned snapshots so later mutations don't affect the buffer.
|
|
10
8
|
*/
|
|
11
9
|
/** Copy: returns the shape array the editor stores as `clipboard`. */
|
|
12
10
|
export declare const copySelected: (scene: Scene, selection: Selection.Selection) => readonly Element[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../src/editor/public/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAK7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"clipboard.d.ts","sourceRoot":"","sources":["../../../src/editor/public/clipboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAK7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAE9D,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAEhD;;;GAGG;AAEH,sEAAsE;AACtE,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,EAAE,WAAW,SAAS,CAAC,SAAS,KAAG,SAAS,OAAO,EACtD,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,kBAAkB,GAC7B,OAAO,KAAK,EACZ,SAAS,eAAe,EACxB,WAAW,SAAS,OAAO,EAAE,EAC7B,QAAQ,IAAI,GAAG,IAAI,EACnB,YAAY,MAAM,MAAM,KACvB;IACD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,SAAS,EAAE,CAAC;CAMvC,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,GAAI,QAAQ,SAAS,SAAS,EAAE,KAAG,SAAS,CAAC,SAI5E,CAAC"}
|
|
@@ -2,10 +2,8 @@ import { copyElements as copyElementsHelper, pasteElements as pasteElementsHelpe
|
|
|
2
2
|
import { elementId as castElementId } from "@oh-just-another/types";
|
|
3
3
|
import * as Selection from "../../selection.js";
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* snapshots so subsequent mutations don't affect the buffer. Cross-tab
|
|
8
|
-
* paste uses host-level `navigator.clipboard`.
|
|
5
|
+
* Copy / paste delegators over the editor-owned clipboard buffer. Copies are
|
|
6
|
+
* deep-cloned snapshots so later mutations don't affect the buffer.
|
|
9
7
|
*/
|
|
10
8
|
/** Copy: returns the shape array the editor stores as `clipboard`. */
|
|
11
9
|
export const copySelected = (scene, selection) => copyElementsHelper(scene, selection);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../../src/editor/public/clipboard.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,IAAI,kBAAkB,EAClC,aAAa,IAAI,mBAAmB,GACrC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAEhD
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../../../src/editor/public/clipboard.ts"],"names":[],"mappings":"AACA,OAAO,EACL,YAAY,IAAI,kBAAkB,EAClC,aAAa,IAAI,mBAAmB,GACrC,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,SAAS,IAAI,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,SAAS,MAAM,oBAAoB,CAAC;AAEhD;;;GAGG;AAEH,sEAAsE;AACtE,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAY,EAAE,SAA8B,EAAsB,EAAE,CAC/F,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAEvC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,KAAY,EACZ,OAAwB,EACxB,SAA6B,EAC7B,MAAmB,EACnB,UAAwB,EAIxB,EAAE;IACF,MAAM,MAAM,GAAG,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,CACzE,aAAa,CAAC,SAAS,UAAU,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC,CAClE,CAAC;IACF,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACxD,CAAC,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,MAA4B,EAAuB,EAAE;IACvF,IAAI,IAAI,GAAwB,SAAS,CAAC,KAAK,CAAC;IAChD,KAAK,MAAM,EAAE,IAAI,MAAM;QAAE,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Vec2 } from "@oh-just-another/types";
|
|
2
|
+
import type { Editor } from "../../editor.js";
|
|
3
|
+
/**
|
|
4
|
+
* Stable keys for cursor states a host can override with a custom image via
|
|
5
|
+
* {@link Editor.setCursorOverride}. Each maps to one outcome of `computeCursor`.
|
|
6
|
+
*/
|
|
7
|
+
export type CursorRole = "default" | "pan-ready" | "pan-active" | "move" | "draw" | "text" | "link-start" | "link-handle" | "rotate" | "annotation" | "resize-nwse" | "resize-nesw" | "resize-ns" | "resize-ew";
|
|
8
|
+
/**
|
|
9
|
+
* A custom cursor: either a raw CSS `cursor` value, or an image with an
|
|
10
|
+
* optional `@2x` variant (DPR-aware via `image-set`), hotspot, and keyword
|
|
11
|
+
* fallback.
|
|
12
|
+
*/
|
|
13
|
+
export type CursorSpec = string | {
|
|
14
|
+
/** 1x image URL or data-URL. */
|
|
15
|
+
readonly url: string;
|
|
16
|
+
/** Optional 2x image for hi-DPI (retina) — emitted via `image-set`. */
|
|
17
|
+
readonly url2x?: string;
|
|
18
|
+
/** Hotspot offset (px) within the image; defaults to (0, 0). */
|
|
19
|
+
readonly hotspot?: Vec2;
|
|
20
|
+
/** Keyword shown if the image can't load / is too large. */
|
|
21
|
+
readonly fallback?: string;
|
|
22
|
+
};
|
|
23
|
+
/** Build a CSS `cursor` value from a {@link CursorSpec}. */
|
|
24
|
+
export declare const cssCursor: (spec: CursorSpec, fallbackKeyword: string) => string;
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a cursor role to a CSS `cursor` value: a host-registered custom image
|
|
27
|
+
* (via {@link Editor.setCursorOverride}) if present, else `fallbackKeyword`.
|
|
28
|
+
*/
|
|
29
|
+
export declare const resolveCursor: (editor: Editor, role: CursorRole, fallbackKeyword: string) => string;
|
|
30
|
+
/**
|
|
31
|
+
* True when `p` is within the grab radius of one of the single selected
|
|
32
|
+
* element's link-start dots — used to show a `crosshair` (start a link).
|
|
33
|
+
* Mirrors the anchor-drag hit-test in pointer-binding so the cursor matches
|
|
34
|
+
* exactly where a press would begin a link.
|
|
35
|
+
*/
|
|
36
|
+
export declare const isOverLinkStartDot: (editor: Editor, p: Vec2) => boolean;
|
|
37
|
+
/**
|
|
38
|
+
* The CSS cursor for the current interaction state. Priority: active gesture →
|
|
39
|
+
* text edit → pan affordance → draw tool → idle hover hit-test. Pure read of
|
|
40
|
+
* editor state; no side effects.
|
|
41
|
+
*/
|
|
42
|
+
export declare const computeCursor: (editor: Editor, p: Vec2 | null) => string;
|
|
43
|
+
//# sourceMappingURL=cursor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.d.ts","sourceRoot":"","sources":["../../../src/editor/public/cursor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAInD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAE9C;;;GAGG;AACH,MAAM,MAAM,UAAU,GAClB,SAAS,GACT,WAAW,GACX,YAAY,GACZ,MAAM,GACN,MAAM,GACN,MAAM,GACN,YAAY,GACZ,aAAa,GACb,QAAQ,GACR,YAAY,GACZ,aAAa,GACb,aAAa,GACb,WAAW,GACX,WAAW,CAAC;AAEhB;;;;GAIG;AACH,MAAM,MAAM,UAAU,GAClB,MAAM,GACN;IACE,gCAAgC;IAChC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,uEAAuE;IACvE,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,QAAQ,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC;IACxB,4DAA4D;IAC5D,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;CAC5B,CAAC;AAcN,4DAA4D;AAC5D,eAAO,MAAM,SAAS,GAAI,MAAM,UAAU,EAAE,iBAAiB,MAAM,KAAG,MASrE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,aAAa,GACxB,QAAQ,MAAM,EACd,MAAM,UAAU,EAChB,iBAAiB,MAAM,KACtB,MAGF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,MAAM,EAAE,GAAG,IAAI,KAAG,OAgB5D,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,MAAM,EAAE,GAAG,IAAI,GAAG,IAAI,KAAG,MAyD9D,CAAC"}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
import { getElement } from "@oh-just-another/scene";
|
|
2
|
+
import { cursorForHandle } from "../../handle.js";
|
|
3
|
+
import { ANCHOR_DOT_ACTIVE_RADIUS, LINK_START_ANCHOR_OUTSET } from "../../constants.js";
|
|
4
|
+
import { anchorOverlayPoints } from "../anchor-points.js";
|
|
5
|
+
/** Resize handle → cursor override role. */
|
|
6
|
+
const RESIZE_ROLE = {
|
|
7
|
+
nw: "resize-nwse",
|
|
8
|
+
se: "resize-nwse",
|
|
9
|
+
ne: "resize-nesw",
|
|
10
|
+
sw: "resize-nesw",
|
|
11
|
+
n: "resize-ns",
|
|
12
|
+
s: "resize-ns",
|
|
13
|
+
e: "resize-ew",
|
|
14
|
+
w: "resize-ew",
|
|
15
|
+
};
|
|
16
|
+
/** Build a CSS `cursor` value from a {@link CursorSpec}. */
|
|
17
|
+
export const cssCursor = (spec, fallbackKeyword) => {
|
|
18
|
+
if (typeof spec === "string")
|
|
19
|
+
return spec;
|
|
20
|
+
const hx = spec.hotspot?.x ?? 0;
|
|
21
|
+
const hy = spec.hotspot?.y ?? 0;
|
|
22
|
+
const img = spec.url2x !== undefined
|
|
23
|
+
? `image-set(url("${spec.url}") 1x, url("${spec.url2x}") 2x)`
|
|
24
|
+
: `url("${spec.url}")`;
|
|
25
|
+
return `${img} ${String(hx)} ${String(hy)}, ${spec.fallback ?? fallbackKeyword}`;
|
|
26
|
+
};
|
|
27
|
+
/**
|
|
28
|
+
* Resolve a cursor role to a CSS `cursor` value: a host-registered custom image
|
|
29
|
+
* (via {@link Editor.setCursorOverride}) if present, else `fallbackKeyword`.
|
|
30
|
+
*/
|
|
31
|
+
export const resolveCursor = (editor, role, fallbackKeyword) => {
|
|
32
|
+
const spec = editor.getCursorOverride(role);
|
|
33
|
+
return spec === undefined ? fallbackKeyword : cssCursor(spec, fallbackKeyword);
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* True when `p` is within the grab radius of one of the single selected
|
|
37
|
+
* element's link-start dots — used to show a `crosshair` (start a link).
|
|
38
|
+
* Mirrors the anchor-drag hit-test in pointer-binding so the cursor matches
|
|
39
|
+
* exactly where a press would begin a link.
|
|
40
|
+
*/
|
|
41
|
+
export const isOverLinkStartDot = (editor, p) => {
|
|
42
|
+
if (editor.mode !== "select" || editor._selection.size !== 1)
|
|
43
|
+
return false;
|
|
44
|
+
const id = [...editor._selection][0];
|
|
45
|
+
if (id === undefined)
|
|
46
|
+
return false;
|
|
47
|
+
const shape = getElement(editor._scene, id);
|
|
48
|
+
if (!shape)
|
|
49
|
+
return false;
|
|
50
|
+
const zoom = editor._scene.viewport.zoom || 1;
|
|
51
|
+
const { worldPoints } = anchorOverlayPoints(shape, LINK_START_ANCHOR_OUTSET / zoom);
|
|
52
|
+
const grab = (ANCHOR_DOT_ACTIVE_RADIUS + editor.anchorStartHitSlop) / zoom;
|
|
53
|
+
const grab2 = grab * grab;
|
|
54
|
+
for (const wp of worldPoints) {
|
|
55
|
+
const dx = wp.x - p.x;
|
|
56
|
+
const dy = wp.y - p.y;
|
|
57
|
+
if (dx * dx + dy * dy <= grab2)
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
return false;
|
|
61
|
+
};
|
|
62
|
+
/**
|
|
63
|
+
* The CSS cursor for the current interaction state. Priority: active gesture →
|
|
64
|
+
* text edit → pan affordance → draw tool → idle hover hit-test. Pure read of
|
|
65
|
+
* editor state; no side effects.
|
|
66
|
+
*/
|
|
67
|
+
export const computeCursor = (editor, p) => {
|
|
68
|
+
// Each outcome is a (role, fallback-keyword) pair; `resolveCursor` returns a
|
|
69
|
+
// host-registered custom image for that role if one exists, else the keyword.
|
|
70
|
+
const r = (role, keyword) => resolveCursor(editor, role, keyword);
|
|
71
|
+
const resizeRole = (h) => r(RESIZE_ROLE[h], cursorForHandle(h));
|
|
72
|
+
// 1. Active gestures (highest priority — what the pointer is doing now).
|
|
73
|
+
if (editor.panGesture)
|
|
74
|
+
return r("pan-active", "grabbing");
|
|
75
|
+
if (editor.linkDragFromAnchor?.moved === true)
|
|
76
|
+
return r("draw", "crosshair");
|
|
77
|
+
if (editor.isDraggingWaypoint || editor.isDraggingSegment)
|
|
78
|
+
return r("move", "grabbing");
|
|
79
|
+
if (editor.annotationDrag?.moved === true)
|
|
80
|
+
return r("move", "grabbing");
|
|
81
|
+
if (editor.brushStroke)
|
|
82
|
+
return r("draw", "crosshair");
|
|
83
|
+
// Machine-driven drag past the threshold (`gestureTx` opens then): resize
|
|
84
|
+
// shows the handle's arrow; element / link move shows grabbing.
|
|
85
|
+
if (editor.gestureTx) {
|
|
86
|
+
const t = editor.actor.getSnapshot().context.pressTarget;
|
|
87
|
+
if (t && (t.kind === "handle" || t.kind === "group-handle"))
|
|
88
|
+
return resizeRole(t.handle);
|
|
89
|
+
if (t?.kind === "rotate-handle")
|
|
90
|
+
return r("rotate", "grabbing");
|
|
91
|
+
if (t && (t.kind === "element" || t.kind === "link" || t.kind === "edge-endpoint")) {
|
|
92
|
+
return r("move", "grabbing");
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// 2. In-canvas text editing → I-beam.
|
|
96
|
+
if (editor.editingTextElement !== null)
|
|
97
|
+
return r("text", "text");
|
|
98
|
+
// 3. Pan affordance (idle): Space held or hand tool.
|
|
99
|
+
if (editor.spaceHeld || editor.mode === "hand")
|
|
100
|
+
return r("pan-ready", "grab");
|
|
101
|
+
// 4. Draw tools (idle, before a gesture starts).
|
|
102
|
+
switch (editor.mode) {
|
|
103
|
+
case "draw-rect":
|
|
104
|
+
case "draw-ellipse":
|
|
105
|
+
case "draw-frame":
|
|
106
|
+
case "draw-edge":
|
|
107
|
+
case "brush":
|
|
108
|
+
return r("draw", "crosshair");
|
|
109
|
+
case "draw-text":
|
|
110
|
+
return r("text", "text");
|
|
111
|
+
default:
|
|
112
|
+
break;
|
|
113
|
+
}
|
|
114
|
+
// 5. Idle hover in select mode — key off the hit-test target.
|
|
115
|
+
if (p) {
|
|
116
|
+
if (isOverLinkStartDot(editor, p))
|
|
117
|
+
return r("link-start", "crosshair");
|
|
118
|
+
const t = editor.hitTest(p);
|
|
119
|
+
switch (t.kind) {
|
|
120
|
+
case "handle":
|
|
121
|
+
case "group-handle":
|
|
122
|
+
return resizeRole(t.handle);
|
|
123
|
+
case "rotate-handle":
|
|
124
|
+
return r("rotate", "grab");
|
|
125
|
+
case "edge-endpoint":
|
|
126
|
+
return r("link-handle", "grab");
|
|
127
|
+
case "annotation":
|
|
128
|
+
return r("annotation", "pointer");
|
|
129
|
+
default:
|
|
130
|
+
return r("default", "default");
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
return r("default", "default");
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=cursor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cursor.js","sourceRoot":"","sources":["../../../src/editor/public/cursor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,OAAO,EAAE,eAAe,EAAiB,MAAM,iBAAiB,CAAC;AACjE,OAAO,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AACxF,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAyC1D,4CAA4C;AAC5C,MAAM,WAAW,GAAiC;IAChD,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;IACjB,EAAE,EAAE,aAAa;IACjB,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,WAAW;IACd,CAAC,EAAE,WAAW;CACf,CAAC;AAEF,4DAA4D;AAC5D,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAgB,EAAE,eAAuB,EAAU,EAAE;IAC7E,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC;IAChC,MAAM,GAAG,GACP,IAAI,CAAC,KAAK,KAAK,SAAS;QACtB,CAAC,CAAC,kBAAkB,IAAI,CAAC,GAAG,eAAe,IAAI,CAAC,KAAK,QAAQ;QAC7D,CAAC,CAAC,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC;IAC3B,OAAO,GAAG,GAAG,IAAI,MAAM,CAAC,EAAE,CAAC,IAAI,MAAM,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,QAAQ,IAAI,eAAe,EAAE,CAAC;AACnF,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAC3B,MAAc,EACd,IAAgB,EAChB,eAAuB,EACf,EAAE;IACV,MAAM,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAC5C,OAAO,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AACjF,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAc,EAAE,CAAO,EAAW,EAAE;IACrE,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,IAAI,MAAM,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3E,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACnC,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;IAC9C,MAAM,EAAE,WAAW,EAAE,GAAG,mBAAmB,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAC,CAAC;IACpF,MAAM,IAAI,GAAG,CAAC,wBAAwB,GAAG,MAAM,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;IAC3E,MAAM,KAAK,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,KAAK;YAAE,OAAO,IAAI,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,CAAc,EAAU,EAAE;IACtE,6EAA6E;IAC7E,8EAA8E;IAC9E,MAAM,CAAC,GAAG,CAAC,IAAgB,EAAE,OAAe,EAAU,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC9F,MAAM,UAAU,GAAG,CAAC,CAAW,EAAU,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;IAClF,yEAAyE;IACzE,IAAI,MAAM,CAAC,UAAU;QAAE,OAAO,CAAC,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAC1D,IAAI,MAAM,CAAC,kBAAkB,EAAE,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IAC7E,IAAI,MAAM,CAAC,kBAAkB,IAAI,MAAM,CAAC,iBAAiB;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxF,IAAI,MAAM,CAAC,cAAc,EAAE,KAAK,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACxE,IAAI,MAAM,CAAC,WAAW;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;IACtD,0EAA0E;IAC1E,gEAAgE;IAChE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;QACzD,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC;YAAE,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzF,IAAI,CAAC,EAAE,IAAI,KAAK,eAAe;YAAE,OAAO,CAAC,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAChE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,CAAC,EAAE,CAAC;YACnF,OAAO,CAAC,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IACD,sCAAsC;IACtC,IAAI,MAAM,CAAC,kBAAkB,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACjE,qDAAqD;IACrD,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM;QAAE,OAAO,CAAC,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IAC9E,iDAAiD;IACjD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,WAAW,CAAC;QACjB,KAAK,cAAc,CAAC;QACpB,KAAK,YAAY,CAAC;QAClB,KAAK,WAAW,CAAC;QACjB,KAAK,OAAO;YACV,OAAO,CAAC,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAChC,KAAK,WAAW;YACd,OAAO,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3B;YACE,MAAM;IACV,CAAC;IACD,8DAA8D;IAC9D,IAAI,CAAC,EAAE,CAAC;QACN,IAAI,kBAAkB,CAAC,MAAM,EAAE,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QAC5B,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,QAAQ,CAAC;YACd,KAAK,cAAc;gBACjB,OAAO,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAC9B,KAAK,eAAe;gBAClB,OAAO,CAAC,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAC7B,KAAK,eAAe;gBAClB,OAAO,CAAC,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;YAClC,KAAK,YAAY;gBACf,OAAO,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;YACpC;gBACE,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IACD,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACjC,CAAC,CAAC"}
|
|
@@ -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,
|
|
@@ -69,4 +72,69 @@ export const computeSetLink = (scene, ids, href) => {
|
|
|
69
72
|
patch: patches.length === 1 && firstPatch !== undefined ? firstPatch : { kind: "batch", patches },
|
|
70
73
|
};
|
|
71
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
|
+
};
|
|
72
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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"}
|