@oh-just-another/scene 0.60.0 → 0.62.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +63 -0
- package/dist/.tsbuildinfo +1 -1
- package/dist/a11y.d.ts +1 -1
- package/dist/a11y.d.ts.map +1 -1
- package/dist/{annotation-geometry.d.ts → annotations/annotation-geometry.d.ts} +1 -1
- package/dist/annotations/annotation-geometry.d.ts.map +1 -0
- package/dist/{annotation-geometry.js → annotations/annotation-geometry.js} +1 -1
- package/dist/annotations/annotation-geometry.js.map +1 -0
- package/dist/annotations/annotation.d.ts.map +1 -0
- package/dist/{annotation.js.map → annotations/annotation.js.map} +1 -1
- package/dist/constants.d.ts +64 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +92 -0
- package/dist/constants.js.map +1 -1
- package/dist/edges/edge-curve.d.ts.map +1 -0
- package/dist/{edge-curve.js → edges/edge-curve.js} +1 -1
- package/dist/edges/edge-curve.js.map +1 -0
- package/dist/{edge-geometry.d.ts → edges/edge-geometry.d.ts} +22 -1
- package/dist/edges/edge-geometry.d.ts.map +1 -0
- package/dist/{edge-geometry.js → edges/edge-geometry.js} +54 -9
- package/dist/{edge-geometry.js.map → edges/edge-geometry.js.map} +1 -1
- package/dist/edges/edge-label.d.ts +55 -0
- package/dist/edges/edge-label.d.ts.map +1 -0
- package/dist/edges/edge-label.js +193 -0
- package/dist/edges/edge-label.js.map +1 -0
- package/dist/{edge.d.ts → edges/edge.d.ts} +1 -1
- package/dist/edges/edge.d.ts.map +1 -0
- package/dist/edges/edge.js.map +1 -0
- package/dist/{elbow-link.d.ts → edges/elbow-link.d.ts} +1 -1
- package/dist/edges/elbow-link.d.ts.map +1 -0
- package/dist/{elbow-link.js → edges/elbow-link.js} +3 -3
- package/dist/edges/elbow-link.js.map +1 -0
- package/dist/edges/elbow-router.d.ts.map +1 -0
- package/dist/{elbow-router.js → edges/elbow-router.js} +1 -1
- package/dist/edges/elbow-router.js.map +1 -0
- package/dist/{heading.d.ts → edges/heading.d.ts} +1 -1
- package/dist/edges/heading.d.ts.map +1 -0
- package/dist/{heading.js → edges/heading.js} +1 -1
- package/dist/edges/heading.js.map +1 -0
- package/dist/{anchors.d.ts → geometry/anchors.d.ts} +2 -2
- package/dist/geometry/anchors.d.ts.map +1 -0
- package/dist/{anchors.js → geometry/anchors.js} +2 -2
- package/dist/geometry/anchors.js.map +1 -0
- package/dist/{outline.d.ts → geometry/outline.d.ts} +1 -1
- package/dist/geometry/outline.d.ts.map +1 -0
- package/dist/{outline.js → geometry/outline.js} +4 -4
- package/dist/geometry/outline.js.map +1 -0
- package/dist/{snap.d.ts → geometry/snap.d.ts} +1 -1
- package/dist/geometry/snap.d.ts.map +1 -0
- package/dist/{snap.js → geometry/snap.js} +1 -1
- package/dist/geometry/snap.js.map +1 -0
- package/dist/index.d.ts +53 -50
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +35 -32
- package/dist/index.js.map +1 -1
- package/dist/{layout-registry.d.ts → layout/layout-registry.d.ts} +2 -2
- package/dist/layout/layout-registry.d.ts.map +1 -0
- package/dist/layout/layout-registry.js.map +1 -0
- package/dist/{layout.d.ts → layout/layout.d.ts} +3 -3
- package/dist/layout/layout.d.ts.map +1 -0
- package/dist/{layout.js → layout/layout.js} +7 -7
- package/dist/layout/layout.js.map +1 -0
- package/dist/model/diff.d.ts.map +1 -0
- package/dist/model/diff.js.map +1 -0
- package/dist/{file.d.ts → model/file.d.ts} +9 -0
- package/dist/model/file.d.ts.map +1 -0
- package/dist/model/file.js +42 -0
- package/dist/model/file.js.map +1 -0
- package/dist/{hydrate.d.ts → model/hydrate.d.ts} +1 -0
- package/dist/model/hydrate.d.ts.map +1 -0
- package/dist/{hydrate.js → model/hydrate.js} +1 -0
- package/dist/model/hydrate.js.map +1 -0
- package/dist/model/layer.d.ts.map +1 -0
- package/dist/model/layer.js.map +1 -0
- package/dist/{operations.d.ts → model/operations.d.ts} +3 -3
- package/dist/model/operations.d.ts.map +1 -0
- package/dist/model/operations.js.map +1 -0
- package/dist/model/order.d.ts.map +1 -0
- package/dist/model/order.js.map +1 -0
- package/dist/{patch.d.ts → model/patch.d.ts} +3 -3
- package/dist/model/patch.d.ts.map +1 -0
- package/dist/model/patch.js.map +1 -0
- package/dist/{scene.d.ts → model/scene.d.ts} +3 -3
- package/dist/model/scene.d.ts.map +1 -0
- package/dist/model/scene.js.map +1 -0
- package/dist/{three-way-merge.d.ts → model/three-way-merge.d.ts} +1 -1
- package/dist/model/three-way-merge.d.ts.map +1 -0
- package/dist/model/three-way-merge.js.map +1 -0
- package/dist/{viewport.d.ts → model/viewport.d.ts} +10 -0
- package/dist/model/viewport.d.ts.map +1 -0
- package/dist/{viewport.js → model/viewport.js} +1 -1
- package/dist/model/viewport.js.map +1 -0
- package/dist/{queries.d.ts → query/queries.d.ts} +12 -7
- package/dist/query/queries.d.ts.map +1 -0
- package/dist/{queries.js → query/queries.js} +20 -10
- package/dist/query/queries.js.map +1 -0
- package/dist/query/spatial.d.ts.map +1 -0
- package/dist/query/spatial.js.map +1 -0
- package/dist/shapes/brush-outline.d.ts.map +1 -0
- package/dist/{brush-outline.js → shapes/brush-outline.js} +1 -1
- package/dist/shapes/brush-outline.js.map +1 -0
- package/dist/{container.d.ts → shapes/container.d.ts} +1 -1
- package/dist/shapes/container.d.ts.map +1 -0
- package/dist/{container.js → shapes/container.js} +1 -1
- package/dist/shapes/container.js.map +1 -0
- package/dist/shapes/ellipse.d.ts.map +1 -0
- package/dist/shapes/ellipse.js.map +1 -0
- package/dist/shapes/render-bounds.d.ts.map +1 -0
- package/dist/shapes/render-bounds.js.map +1 -0
- package/dist/shapes/shape-transform.d.ts.map +1 -0
- package/dist/shapes/shape-transform.js.map +1 -0
- package/dist/{shape.d.ts → shapes/shape.d.ts} +148 -3
- package/dist/shapes/shape.d.ts.map +1 -0
- package/dist/{shape.js → shapes/shape.js} +30 -5
- package/dist/shapes/shape.js.map +1 -0
- package/dist/text/paragraphs.d.ts +44 -0
- package/dist/text/paragraphs.d.ts.map +1 -0
- package/dist/text/paragraphs.js +133 -0
- package/dist/text/paragraphs.js.map +1 -0
- package/dist/text/placeholder.d.ts +9 -0
- package/dist/text/placeholder.d.ts.map +1 -0
- package/dist/text/placeholder.js +29 -0
- package/dist/text/placeholder.js.map +1 -0
- package/dist/{style.d.ts → text/style.d.ts} +6 -0
- package/dist/text/style.d.ts.map +1 -0
- package/dist/{style.js → text/style.js} +1 -1
- package/dist/text/style.js.map +1 -0
- package/dist/text/text-measure.d.ts.map +1 -0
- package/dist/text/text-measure.js.map +1 -0
- package/dist/{text-runs.d.ts → text/text-runs.d.ts} +1 -1
- package/dist/text/text-runs.d.ts.map +1 -0
- package/dist/text/text-runs.js.map +1 -0
- package/package.json +1 -1
- package/dist/anchors.d.ts.map +0 -1
- package/dist/anchors.js.map +0 -1
- package/dist/annotation-geometry.d.ts.map +0 -1
- package/dist/annotation-geometry.js.map +0 -1
- package/dist/annotation.d.ts.map +0 -1
- package/dist/brush-outline.d.ts.map +0 -1
- package/dist/brush-outline.js.map +0 -1
- package/dist/container.d.ts.map +0 -1
- package/dist/container.js.map +0 -1
- package/dist/diff.d.ts.map +0 -1
- package/dist/diff.js.map +0 -1
- package/dist/edge-curve.d.ts.map +0 -1
- package/dist/edge-curve.js.map +0 -1
- package/dist/edge-geometry.d.ts.map +0 -1
- package/dist/edge.d.ts.map +0 -1
- package/dist/edge.js.map +0 -1
- package/dist/elbow-link.d.ts.map +0 -1
- package/dist/elbow-link.js.map +0 -1
- package/dist/elbow-router.d.ts.map +0 -1
- package/dist/elbow-router.js.map +0 -1
- package/dist/ellipse.d.ts.map +0 -1
- package/dist/ellipse.js.map +0 -1
- package/dist/file.d.ts.map +0 -1
- package/dist/file.js +0 -13
- package/dist/file.js.map +0 -1
- package/dist/heading.d.ts.map +0 -1
- package/dist/heading.js.map +0 -1
- package/dist/hydrate.d.ts.map +0 -1
- package/dist/hydrate.js.map +0 -1
- package/dist/layer.d.ts.map +0 -1
- package/dist/layer.js.map +0 -1
- package/dist/layout-registry.d.ts.map +0 -1
- package/dist/layout-registry.js.map +0 -1
- package/dist/layout.d.ts.map +0 -1
- package/dist/layout.js.map +0 -1
- package/dist/operations.d.ts.map +0 -1
- package/dist/operations.js.map +0 -1
- package/dist/order.d.ts.map +0 -1
- package/dist/order.js.map +0 -1
- package/dist/outline.d.ts.map +0 -1
- package/dist/outline.js.map +0 -1
- package/dist/patch.d.ts.map +0 -1
- package/dist/patch.js.map +0 -1
- package/dist/queries.d.ts.map +0 -1
- package/dist/queries.js.map +0 -1
- package/dist/render-bounds.d.ts.map +0 -1
- package/dist/render-bounds.js.map +0 -1
- package/dist/scene.d.ts.map +0 -1
- package/dist/scene.js.map +0 -1
- package/dist/shape-transform.d.ts.map +0 -1
- package/dist/shape-transform.js.map +0 -1
- package/dist/shape.d.ts.map +0 -1
- package/dist/shape.js.map +0 -1
- package/dist/snap.d.ts.map +0 -1
- package/dist/snap.js.map +0 -1
- package/dist/spatial.d.ts.map +0 -1
- package/dist/spatial.js.map +0 -1
- package/dist/style.d.ts.map +0 -1
- package/dist/style.js.map +0 -1
- package/dist/text-measure.d.ts.map +0 -1
- package/dist/text-measure.js.map +0 -1
- package/dist/text-runs.d.ts.map +0 -1
- package/dist/text-runs.js.map +0 -1
- package/dist/three-way-merge.d.ts.map +0 -1
- package/dist/three-way-merge.js.map +0 -1
- package/dist/viewport.d.ts.map +0 -1
- package/dist/viewport.js.map +0 -1
- /package/dist/{annotation.d.ts → annotations/annotation.d.ts} +0 -0
- /package/dist/{annotation.js → annotations/annotation.js} +0 -0
- /package/dist/{edge-curve.d.ts → edges/edge-curve.d.ts} +0 -0
- /package/dist/{edge.js → edges/edge.js} +0 -0
- /package/dist/{elbow-router.d.ts → edges/elbow-router.d.ts} +0 -0
- /package/dist/{layout-registry.js → layout/layout-registry.js} +0 -0
- /package/dist/{diff.d.ts → model/diff.d.ts} +0 -0
- /package/dist/{diff.js → model/diff.js} +0 -0
- /package/dist/{layer.d.ts → model/layer.d.ts} +0 -0
- /package/dist/{layer.js → model/layer.js} +0 -0
- /package/dist/{operations.js → model/operations.js} +0 -0
- /package/dist/{order.d.ts → model/order.d.ts} +0 -0
- /package/dist/{order.js → model/order.js} +0 -0
- /package/dist/{patch.js → model/patch.js} +0 -0
- /package/dist/{scene.js → model/scene.js} +0 -0
- /package/dist/{three-way-merge.js → model/three-way-merge.js} +0 -0
- /package/dist/{spatial.d.ts → query/spatial.d.ts} +0 -0
- /package/dist/{spatial.js → query/spatial.js} +0 -0
- /package/dist/{brush-outline.d.ts → shapes/brush-outline.d.ts} +0 -0
- /package/dist/{ellipse.d.ts → shapes/ellipse.d.ts} +0 -0
- /package/dist/{ellipse.js → shapes/ellipse.js} +0 -0
- /package/dist/{render-bounds.d.ts → shapes/render-bounds.d.ts} +0 -0
- /package/dist/{render-bounds.js → shapes/render-bounds.js} +0 -0
- /package/dist/{shape-transform.d.ts → shapes/shape-transform.d.ts} +0 -0
- /package/dist/{shape-transform.js → shapes/shape-transform.js} +0 -0
- /package/dist/{text-measure.d.ts → text/text-measure.d.ts} +0 -0
- /package/dist/{text-measure.js → text/text-measure.js} +0 -0
- /package/dist/{text-runs.js → text/text-runs.js} +0 -0
package/dist/constants.js
CHANGED
|
@@ -253,4 +253,96 @@ export const BRUSH_OUTLINE_ARC_STEP = 0.35;
|
|
|
253
253
|
* Range: 1.5–4.
|
|
254
254
|
*/
|
|
255
255
|
export const BRUSH_OUTLINE_MITER_LIMIT = 2.5;
|
|
256
|
+
/**
|
|
257
|
+
* Default fractional position of a link label along its path (0 = source end,
|
|
258
|
+
* 1 = target end). Used when `LinkLabel.position` is unset. Range: 0–1.
|
|
259
|
+
*/
|
|
260
|
+
export const LINK_LABEL_DEFAULT_POSITION = 0.5;
|
|
261
|
+
/**
|
|
262
|
+
* Default link-label font size (world px at zoom 1). Range: 10–16.
|
|
263
|
+
*/
|
|
264
|
+
export const LINK_LABEL_DEFAULT_FONT_SIZE = 12;
|
|
265
|
+
/**
|
|
266
|
+
* Max link-label line width before word-wrap kicks in (world px at zoom 1).
|
|
267
|
+
* Wider = fewer, longer lines; narrower = taller pill. Range: 100–240.
|
|
268
|
+
*/
|
|
269
|
+
export const LINK_LABEL_MAX_WIDTH = 160;
|
|
270
|
+
/**
|
|
271
|
+
* Inner padding of the label pill around the text block (world px at zoom 1).
|
|
272
|
+
* Range: 2–10.
|
|
273
|
+
*/
|
|
274
|
+
export const LINK_LABEL_PAD_X = 6;
|
|
275
|
+
export const LINK_LABEL_PAD_Y = 3;
|
|
276
|
+
/**
|
|
277
|
+
* Line-height factor for multiline link labels (× fontSize). Range: 1.1–1.5.
|
|
278
|
+
*/
|
|
279
|
+
export const LINK_LABEL_LINE_HEIGHT = 1.25;
|
|
280
|
+
/**
|
|
281
|
+
* Min arc-length distance (world px) the label anchor keeps from either path
|
|
282
|
+
* end, so the pill never sits on an arrowhead. Applied as a clamp on the
|
|
283
|
+
* fractional position; ignored when the whole path is shorter than twice this.
|
|
284
|
+
* Range: 12–40.
|
|
285
|
+
*/
|
|
286
|
+
export const LINK_LABEL_END_CLEARANCE = 24;
|
|
287
|
+
/**
|
|
288
|
+
* Average glyph advance as a fraction of fontSize — the conservative width
|
|
289
|
+
* estimate used where real text measurement is unavailable (hit-testing,
|
|
290
|
+
* dirty-rect / culling bounds). Slightly generous on purpose: overestimating
|
|
291
|
+
* keeps a label inside its computed bounds. Range: 0.55–0.7.
|
|
292
|
+
*/
|
|
293
|
+
export const LINK_LABEL_CHAR_WIDTH_FACTOR = 0.62;
|
|
294
|
+
/**
|
|
295
|
+
* Built-in polygon presets for image masks (`ImageMask.kind: "polygon"`),
|
|
296
|
+
* as normalised (0..1) closed rings over the element box. Offered by the
|
|
297
|
+
* mask picker UI; hosts may pass any other ring — the model accepts
|
|
298
|
+
* arbitrary polygons. Point counts stay low: masks clip through the
|
|
299
|
+
* render targets' clip API, and every vertex costs path work per frame.
|
|
300
|
+
*/
|
|
301
|
+
export const IMAGE_MASK_POLYGON_PRESETS = {
|
|
302
|
+
diamond: [
|
|
303
|
+
{ x: 0.5, y: 0 },
|
|
304
|
+
{ x: 1, y: 0.5 },
|
|
305
|
+
{ x: 0.5, y: 1 },
|
|
306
|
+
{ x: 0, y: 0.5 },
|
|
307
|
+
],
|
|
308
|
+
triangle: [
|
|
309
|
+
{ x: 0.5, y: 0 },
|
|
310
|
+
{ x: 1, y: 1 },
|
|
311
|
+
{ x: 0, y: 1 },
|
|
312
|
+
],
|
|
313
|
+
hexagon: [
|
|
314
|
+
{ x: 0.25, y: 0 },
|
|
315
|
+
{ x: 0.75, y: 0 },
|
|
316
|
+
{ x: 1, y: 0.5 },
|
|
317
|
+
{ x: 0.75, y: 1 },
|
|
318
|
+
{ x: 0.25, y: 1 },
|
|
319
|
+
{ x: 0, y: 0.5 },
|
|
320
|
+
],
|
|
321
|
+
star: [
|
|
322
|
+
{ x: 0.5, y: 0 },
|
|
323
|
+
{ x: 0.618, y: 0.363 },
|
|
324
|
+
{ x: 1, y: 0.382 },
|
|
325
|
+
{ x: 0.691, y: 0.618 },
|
|
326
|
+
{ x: 0.809, y: 1 },
|
|
327
|
+
{ x: 0.5, y: 0.764 },
|
|
328
|
+
{ x: 0.191, y: 1 },
|
|
329
|
+
{ x: 0.309, y: 0.618 },
|
|
330
|
+
{ x: 0, y: 0.382 },
|
|
331
|
+
{ x: 0.382, y: 0.363 },
|
|
332
|
+
],
|
|
333
|
+
};
|
|
334
|
+
export const TEXT_PLACEHOLDERS = [
|
|
335
|
+
{ text: "Type something", weight: 40 },
|
|
336
|
+
{ text: "Place for text", weight: 20 },
|
|
337
|
+
{ text: "Start typing…", weight: 12 },
|
|
338
|
+
{ text: "Your text here", weight: 10 },
|
|
339
|
+
{ text: "Add a note", weight: 8 },
|
|
340
|
+
{ text: "What's on your mind?", weight: 6 },
|
|
341
|
+
{ text: "Words go here", weight: 5 },
|
|
342
|
+
{ text: "Say it in a few words", weight: 4 },
|
|
343
|
+
{ text: "Lorem ipsum? No — your words.", weight: 3 },
|
|
344
|
+
{ text: "Blank is a state of mind", weight: 2 },
|
|
345
|
+
{ text: "Insert genius here", weight: 2 },
|
|
346
|
+
{ text: "The cursor is waiting patiently", weight: 1 },
|
|
347
|
+
];
|
|
256
348
|
//# sourceMappingURL=constants.js.map
|
package/dist/constants.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AAEvC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAEnD;;;;;GAKG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AAEjC;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC;AAEhC;;;;GAIG;AACH,MAAM,CAAC,MAAM,2BAA2B,GAAG,CAAC,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAEzC;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,EAAE,CAAC;AACjC,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC;AACnC,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAC;AAE9C;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AACvC,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAC3C,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC;AAC5C,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;;;;GAOG;AAEH,wEAAwE;AACxE,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;GAIG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,IAAI,CAAC;AAE/C;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,GAAG,CAAC;AACjD,MAAM,CAAC,MAAM,uBAAuB,GAAG,GAAG,CAAC;AAE3C;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,EAAE,CAAC;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC;AACxC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC;AAEzC;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,EAAE,CAAC;AACrC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,EAAE,CAAC;AAExC;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAC;AACxC,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC;AAE3C;;;;;GAKG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAG,CAAC"}
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-curve.d.ts","sourceRoot":"","sources":["../../src/edges/edge-curve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,IAAI,EAAE,MAAM,wBAAwB,CAAC;AASxD;;;;;;GAMG;AAEH,+EAA+E;AAC/E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;CACnB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,MAAM,IAAI,EACV,IAAI,IAAI,EACR,SAAS,IAAI,EACb,OAAO,IAAI,KACV,aAQF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,GAAI,KAAK,SAAS,IAAI,EAAE,KAAG,aAAa,EAerE,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,IAAI,EACX,UAAU,SAAS,aAAa,EAAE,EAClC,mBAAmC,KAClC,IAAI,EAUN,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { req } from "@oh-just-another/types";
|
|
2
2
|
import { bezier } from "@oh-just-another/math";
|
|
3
|
-
import { CURVE_CATMULL_TENSION, CURVE_END_TANGENT_MAX_PX, CURVE_END_TANGENT_RATIO, CURVE_FLATTEN_SEGMENTS, } from "
|
|
3
|
+
import { CURVE_CATMULL_TENSION, CURVE_END_TANGENT_MAX_PX, CURVE_END_TANGENT_RATIO, CURVE_FLATTEN_SEGMENTS, } from "../constants.js";
|
|
4
4
|
/**
|
|
5
5
|
* Cubic bezier from `from` to `to` that LEAVES `from` along `dirFrom` and
|
|
6
6
|
* ENTERS `to` along `-dirTo` (both unit outward directions). This makes a
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-curve.js","sourceRoot":"","sources":["../../src/edges/edge-curve.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type Bounds, type Vec2 } from "@oh-just-another/types";
|
|
2
2
|
import { type BezierSegment } from "./edge-curve.js";
|
|
3
3
|
import type { Link, LinkEndpoint } from "./edge.js";
|
|
4
|
-
import type { Scene } from "
|
|
4
|
+
import type { Scene } from "../model/scene.js";
|
|
5
5
|
/**
|
|
6
6
|
* --- Self-loop geometry ---
|
|
7
7
|
*
|
|
@@ -98,6 +98,19 @@ export declare const getLinkCurvePoints: (scene: Scene, edge: Link) => readonly
|
|
|
98
98
|
* computed from the routed path by the caller — or when unresolvable.
|
|
99
99
|
*/
|
|
100
100
|
export declare const getLinkWaypointMidpoints: (scene: Scene, edge: Link) => Vec2[] | null;
|
|
101
|
+
/**
|
|
102
|
+
* Grab-handle points for a selected ELBOW link's draggable segments — one per
|
|
103
|
+
* slidable segment of the routed chain (`k` indexes the segment `path[k] →
|
|
104
|
+
* path[k+1]`): the single segment of a straight elbow, or interior segments of
|
|
105
|
+
* a routed one (terminal stubs touch from/to and can't slide). Handle points
|
|
106
|
+
* sit at the segment midpoint, slid out of the caption pill when they'd land
|
|
107
|
+
* under it. Shared by the overlay (drawing) and the pointer hit-test so the
|
|
108
|
+
* grab point always matches the drawn dot.
|
|
109
|
+
*/
|
|
110
|
+
export declare const getElbowSegmentHandles: (scene: Scene, edge: Link, path: readonly Vec2[]) => {
|
|
111
|
+
readonly k: number;
|
|
112
|
+
readonly point: Vec2;
|
|
113
|
+
}[];
|
|
101
114
|
/**
|
|
102
115
|
* Topmost edge under `worldPoint`, or `null` if none is within
|
|
103
116
|
* `threshold` world-pixels of any segment. Iterates edges in layer
|
|
@@ -105,7 +118,15 @@ export declare const getLinkWaypointMidpoints: (scene: Scene, edge: Link) => Vec
|
|
|
105
118
|
*
|
|
106
119
|
* Curved (bezier) edges are tested against the flattened curve (via
|
|
107
120
|
* `getLinkCurvePoints`) so the clickable line matches the drawn arc.
|
|
121
|
+
* A press inside the edge's label pill also hits (the pill can extend
|
|
122
|
+
* away from the line, and clicking the caption must select its link).
|
|
108
123
|
*/
|
|
109
124
|
export declare const findLinkAt: (scene: Scene, worldPoint: Vec2, threshold?: number) => Link | null;
|
|
125
|
+
/**
|
|
126
|
+
* Estimated world AABB of a link's label pill, or `null` when the link has no
|
|
127
|
+
* label / no resolvable path. The drawn polyline (`getLinkCurvePoints`) is the
|
|
128
|
+
* label's ride path, so pill, hit-test and bounds all agree.
|
|
129
|
+
*/
|
|
130
|
+
export declare const linkLabelBounds: (scene: Scene, edge: Link) => Bounds | null;
|
|
110
131
|
export {};
|
|
111
132
|
//# sourceMappingURL=edge-geometry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-geometry.d.ts","sourceRoot":"","sources":["../../src/edges/edge-geometry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,MAAM,EAAkB,KAAK,IAAI,EAAE,MAAM,wBAAwB,CAAC;AAYrF,OAAO,EAIL,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAIpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG/C;;;;;;;GAOG;AACH,UAAU,YAAY;IACpB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AA2BD;;;;;GAKG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,KAAG,YAAY,GAAG,IA6BzE,CAAC;AA+FF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,KAAK,EACZ,UAAU,YAAY,EACtB,SAAS,IAAI,KACZ,IAAI,GAAG,IAQT,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,WAAW,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,KAAG,SAAS,IAAI,EAAE,GAAG,IA8CxE,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,qBAAqB,GAChC,MAAM,IAAI,EACV,IAAI,IAAI,EACR,SAAS,IAAI,GAAG,IAAI,EACpB,OAAO,IAAI,GAAG,IAAI,KACjB,IAAI,EAmDN,CAAC;AA2CF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,KAAK,EACZ,MAAM,IAAI,KACT;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,aAAa,EAAE,CAAA;CAAE,GAAG,IAe/C,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,KAAG,SAAS,IAAI,EAAE,GAAG,IAK/E,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,wBAAwB,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,KAAG,IAAI,EAAE,GAAG,IA8B5E,CAAC;AAEF;;;;;;;;GAQG;AACH,eAAO,MAAM,sBAAsB,GACjC,OAAO,KAAK,EACZ,MAAM,IAAI,EACV,MAAM,SAAS,IAAI,EAAE,KACpB;IAAE,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAA;CAAE,EAe9C,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,UAAU,GAAI,OAAO,KAAK,EAAE,YAAY,IAAI,EAAE,kBAAa,KAAG,IAAI,GAAG,IAkBjF,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,OAAO,KAAK,EAAE,MAAM,IAAI,KAAG,MAAM,GAAG,IAInE,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { req } from "@oh-just-another/types";
|
|
2
|
-
import { bezier, hitTest, intersect
|
|
3
|
-
import { getAnchorOutwardNormal, getAnchorWorld } from "
|
|
4
|
-
import { ELBOW_STUB_DISTANCE_DIVISOR, ELBOW_STUB_MAX, ELBOW_STUB_MIN, FLOATING_OUTLINE_SAMPLES, SELF_LOOP_CURVE_ARM_FACTOR, SELF_LOOP_SIZE, SELF_LOOP_SPREAD, } from "
|
|
2
|
+
import { bezier, hitTest, intersect } from "@oh-just-another/math";
|
|
3
|
+
import { getAnchorOutwardNormal, getAnchorWorld } from "../geometry/anchors.js";
|
|
4
|
+
import { ELBOW_STUB_DISTANCE_DIVISOR, ELBOW_STUB_MAX, ELBOW_STUB_MIN, FLOATING_OUTLINE_SAMPLES, SELF_LOOP_CURVE_ARM_FACTOR, SELF_LOOP_SIZE, SELF_LOOP_SPREAD, } from "../constants.js";
|
|
5
5
|
import { catmullRomBeziers, cubicWithEndTangents, flattenSegments, } from "./edge-curve.js";
|
|
6
|
+
import { linkLabelBoundsForPath, nudgeHandleOffLabel } from "./edge-label.js";
|
|
6
7
|
import { headingForEdgePoint } from "./heading.js";
|
|
7
|
-
import { getOutlinePoint, getOutlineSampler } from "
|
|
8
|
-
import { getElementWorldBounds } from "
|
|
9
|
-
import { getElement } from "
|
|
8
|
+
import { getOutlinePoint, getOutlineSampler } from "../geometry/outline.js";
|
|
9
|
+
import { getElementWorldBounds } from "../shapes/shape.js";
|
|
10
|
+
import { getElement } from "../query/queries.js";
|
|
10
11
|
const endpointElementOf = (ep) => ep.kind === "point" ? null : ep.elementId;
|
|
11
12
|
/** Snap a unit vector to the dominant axis (corner anchors give diagonals). */
|
|
12
13
|
const axisSnap = (n) => Math.abs(n.x) >= Math.abs(n.y) ? { x: Math.sign(n.x) || 0, y: 0 } : { x: 0, y: Math.sign(n.y) };
|
|
@@ -393,6 +394,10 @@ export const getLinkWaypointMidpoints = (scene, edge) => {
|
|
|
393
394
|
const routing = edge.routing ?? "straight";
|
|
394
395
|
if (routing === "orthogonal")
|
|
395
396
|
return null;
|
|
397
|
+
// The caption pill sits at the label anchor — typically exactly where a
|
|
398
|
+
// span's midpoint handle would land. Slide such handles out of the pill
|
|
399
|
+
// along their span so both stay usable (press-in-pill edits the caption).
|
|
400
|
+
const label = linkLabelBounds(scene, edge);
|
|
396
401
|
if (routing === "bezier") {
|
|
397
402
|
const curve = getLinkCurveSegments(scene, edge);
|
|
398
403
|
if (!curve)
|
|
@@ -400,7 +405,8 @@ export const getLinkWaypointMidpoints = (scene, edge) => {
|
|
|
400
405
|
const mids = [];
|
|
401
406
|
let prev = curve.start;
|
|
402
407
|
for (const s of curve.segments) {
|
|
403
|
-
|
|
408
|
+
const from = prev;
|
|
409
|
+
mids.push(nudgeHandleOffLabel((t) => bezier.cubicAt(from, s.c1, s.c2, s.to, t), label));
|
|
404
410
|
prev = s.to;
|
|
405
411
|
}
|
|
406
412
|
return mids;
|
|
@@ -412,10 +418,31 @@ export const getLinkWaypointMidpoints = (scene, edge) => {
|
|
|
412
418
|
for (let i = 0; i < path.length - 1; i++) {
|
|
413
419
|
const a = req(path[i]);
|
|
414
420
|
const b = req(path[i + 1]);
|
|
415
|
-
mids.push(
|
|
421
|
+
mids.push(nudgeHandleOffLabel((t) => ({ x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t }), label));
|
|
416
422
|
}
|
|
417
423
|
return mids;
|
|
418
424
|
};
|
|
425
|
+
/**
|
|
426
|
+
* Grab-handle points for a selected ELBOW link's draggable segments — one per
|
|
427
|
+
* slidable segment of the routed chain (`k` indexes the segment `path[k] →
|
|
428
|
+
* path[k+1]`): the single segment of a straight elbow, or interior segments of
|
|
429
|
+
* a routed one (terminal stubs touch from/to and can't slide). Handle points
|
|
430
|
+
* sit at the segment midpoint, slid out of the caption pill when they'd land
|
|
431
|
+
* under it. Shared by the overlay (drawing) and the pointer hit-test so the
|
|
432
|
+
* grab point always matches the drawn dot.
|
|
433
|
+
*/
|
|
434
|
+
export const getElbowSegmentHandles = (scene, edge, path) => {
|
|
435
|
+
const label = linkLabelBounds(scene, edge);
|
|
436
|
+
const segs = path.length === 2 ? [0] : Array.from({ length: Math.max(0, path.length - 3) }, (_, i) => i + 1);
|
|
437
|
+
return segs.map((k) => {
|
|
438
|
+
const a = req(path[k]);
|
|
439
|
+
const b = req(path[k + 1]);
|
|
440
|
+
return {
|
|
441
|
+
k,
|
|
442
|
+
point: nudgeHandleOffLabel((t) => ({ x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t }), label),
|
|
443
|
+
};
|
|
444
|
+
});
|
|
445
|
+
};
|
|
419
446
|
/**
|
|
420
447
|
* Topmost edge under `worldPoint`, or `null` if none is within
|
|
421
448
|
* `threshold` world-pixels of any segment. Iterates edges in layer
|
|
@@ -423,6 +450,8 @@ export const getLinkWaypointMidpoints = (scene, edge) => {
|
|
|
423
450
|
*
|
|
424
451
|
* Curved (bezier) edges are tested against the flattened curve (via
|
|
425
452
|
* `getLinkCurvePoints`) so the clickable line matches the drawn arc.
|
|
453
|
+
* A press inside the edge's label pill also hits (the pill can extend
|
|
454
|
+
* away from the line, and clicking the caption must select its link).
|
|
426
455
|
*/
|
|
427
456
|
export const findLinkAt = (scene, worldPoint, threshold = 5) => {
|
|
428
457
|
let best = null;
|
|
@@ -436,7 +465,7 @@ export const findLinkAt = (scene, worldPoint, threshold = 5) => {
|
|
|
436
465
|
if (d < minDistance)
|
|
437
466
|
minDistance = d;
|
|
438
467
|
}
|
|
439
|
-
if (minDistance > threshold)
|
|
468
|
+
if (minDistance > threshold && !linkLabelHit(scene, edge, worldPoint))
|
|
440
469
|
continue;
|
|
441
470
|
// Layer ordering: a later edge in iteration order is rendered on top,
|
|
442
471
|
// so it should win for ties.
|
|
@@ -446,4 +475,20 @@ export const findLinkAt = (scene, worldPoint, threshold = 5) => {
|
|
|
446
475
|
}
|
|
447
476
|
return best?.edge ?? null;
|
|
448
477
|
};
|
|
478
|
+
/**
|
|
479
|
+
* Estimated world AABB of a link's label pill, or `null` when the link has no
|
|
480
|
+
* label / no resolvable path. The drawn polyline (`getLinkCurvePoints`) is the
|
|
481
|
+
* label's ride path, so pill, hit-test and bounds all agree.
|
|
482
|
+
*/
|
|
483
|
+
export const linkLabelBounds = (scene, edge) => {
|
|
484
|
+
const path = getLinkCurvePoints(scene, edge);
|
|
485
|
+
if (!path || path.length < 2)
|
|
486
|
+
return null;
|
|
487
|
+
return linkLabelBoundsForPath(path, edge);
|
|
488
|
+
};
|
|
489
|
+
/** True when `p` is inside the edge's label pill (estimated bounds). */
|
|
490
|
+
const linkLabelHit = (scene, edge, p) => {
|
|
491
|
+
const b = linkLabelBounds(scene, edge);
|
|
492
|
+
return b !== null && p.x >= b.x && p.x <= b.x + b.width && p.y >= b.y && p.y <= b.y + b.height;
|
|
493
|
+
};
|
|
449
494
|
//# sourceMappingURL=edge-geometry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edge-geometry.js","sourceRoot":"","sources":["../src/edge-geometry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"edge-geometry.js","sourceRoot":"","sources":["../../src/edges/edge-geometry.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { type Bounds, type Vec2 } from "@oh-just-another/types";
|
|
2
|
+
import type { Link, LinkLabel } from "./edge.js";
|
|
3
|
+
/**
|
|
4
|
+
* Label geometry shared by the renderer (pill placement), hit-testing and
|
|
5
|
+
* bounds/culling — one source of truth so the drawn pill, the clickable area
|
|
6
|
+
* and the dirty-rect all agree.
|
|
7
|
+
*/
|
|
8
|
+
/** Point at fractional arc length `t` (0..1) along a polyline. */
|
|
9
|
+
export declare const pointAlongPath: (path: readonly Vec2[], t: number) => Vec2;
|
|
10
|
+
/**
|
|
11
|
+
* World anchor point of a link's label on `path`.
|
|
12
|
+
*
|
|
13
|
+
* - Explicit `label.position` → fractional arc length, clamped so the pill
|
|
14
|
+
* keeps {@link LINK_LABEL_END_CLEARANCE} away from either end (arrowheads).
|
|
15
|
+
* - No explicit position on an orthogonal (elbow) link → the midpoint of the
|
|
16
|
+
* LONGEST segment: it never sits on a corner and stays put when re-routing
|
|
17
|
+
* re-flows the shorter segments.
|
|
18
|
+
* - Otherwise → clamped arc-length midpoint.
|
|
19
|
+
*/
|
|
20
|
+
export declare const linkLabelAnchor: (path: readonly Vec2[], edge: Link) => Vec2;
|
|
21
|
+
/**
|
|
22
|
+
* Conservative size estimate of the label pill (world px at zoom 1) for
|
|
23
|
+
* hit-testing and dirty-rect / culling bounds. Mirrors the renderer's
|
|
24
|
+
* measured word-wrap with a per-glyph advance of
|
|
25
|
+
* {@link LINK_LABEL_CHAR_WIDTH_FACTOR} × fontSize — deliberately a little
|
|
26
|
+
* generous so the drawn pill always fits inside the estimated box.
|
|
27
|
+
*/
|
|
28
|
+
export declare const estimateLinkLabelBox: (label: LinkLabel) => {
|
|
29
|
+
readonly width: number;
|
|
30
|
+
readonly height: number;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Estimated world AABB of a link's label pill on `path` (the drawn polyline —
|
|
34
|
+
* see `getLinkCurvePoints`), or `null` when the link has no label. Centred on
|
|
35
|
+
* {@link linkLabelAnchor}. The scene-aware convenience is
|
|
36
|
+
* `linkLabelBounds` in `edge-geometry.ts`.
|
|
37
|
+
*/
|
|
38
|
+
export declare const linkLabelBoundsForPath: (path: readonly Vec2[], edge: Link) => Bounds | null;
|
|
39
|
+
/**
|
|
40
|
+
* Slide a per-span handle point out of the label pill along its own span.
|
|
41
|
+
* `pointAt(t)` maps a span fraction to a world point (chord lerp for straight
|
|
42
|
+
* spans, the cubic for bezier). Returns the first sampled point outside
|
|
43
|
+
* `label`, or the plain midpoint when the whole span is covered (degenerate —
|
|
44
|
+
* better a conflicting handle than a missing one, and callers keep 1:1 span
|
|
45
|
+
* indexing either way).
|
|
46
|
+
*/
|
|
47
|
+
export declare const nudgeHandleOffLabel: (pointAt: (t: number) => Vec2, label: Bounds | null) => Vec2;
|
|
48
|
+
/**
|
|
49
|
+
* Fractional arc-length position (0..1) of the point on `path` nearest to
|
|
50
|
+
* `p` — the inverse of {@link pointAlongPath}. Used by the caption-drag
|
|
51
|
+
* gesture: the cursor is projected back onto the polyline so the label can
|
|
52
|
+
* only slide ALONG its link. Returns 0.5 for a degenerate (zero-length) path.
|
|
53
|
+
*/
|
|
54
|
+
export declare const projectPointToPathT: (path: readonly Vec2[], p: Vec2) => number;
|
|
55
|
+
//# sourceMappingURL=edge-label.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"edge-label.d.ts","sourceRoot":"","sources":["../../src/edges/edge-label.ts"],"names":[],"mappings":"AAAA,OAAO,EAAO,KAAK,MAAM,EAAE,KAAK,IAAI,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAYjD;;;;GAIG;AAEH,kEAAkE;AAClE,eAAO,MAAM,cAAc,GAAI,MAAM,SAAS,IAAI,EAAE,EAAE,GAAG,MAAM,KAAG,IA0BjE,CAAC;AAaF;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,SAAS,IAAI,EAAE,EAAE,MAAM,IAAI,KAAG,IAoBnE,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,GAC/B,OAAO,SAAS,KACf;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAgCnD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAI,MAAM,SAAS,IAAI,EAAE,EAAE,MAAM,IAAI,KAAG,MAAM,GAAG,IAUnF,CAAC;AAaF;;;;;;;GAOG;AACH,eAAO,MAAM,mBAAmB,GAAI,SAAS,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,EAAE,OAAO,MAAM,GAAG,IAAI,KAAG,IAQxF,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,mBAAmB,GAAI,MAAM,SAAS,IAAI,EAAE,EAAE,GAAG,IAAI,KAAG,MAyBpE,CAAC"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
import { req } from "@oh-just-another/types";
|
|
2
|
+
import { LINK_LABEL_CHAR_WIDTH_FACTOR, LINK_LABEL_DEFAULT_FONT_SIZE, LINK_LABEL_DEFAULT_POSITION, LINK_LABEL_END_CLEARANCE, LINK_LABEL_LINE_HEIGHT, LINK_LABEL_MAX_WIDTH, LINK_LABEL_PAD_X, LINK_LABEL_PAD_Y, } from "../constants.js";
|
|
3
|
+
/**
|
|
4
|
+
* Label geometry shared by the renderer (pill placement), hit-testing and
|
|
5
|
+
* bounds/culling — one source of truth so the drawn pill, the clickable area
|
|
6
|
+
* and the dirty-rect all agree.
|
|
7
|
+
*/
|
|
8
|
+
/** Point at fractional arc length `t` (0..1) along a polyline. */
|
|
9
|
+
export const pointAlongPath = (path, t) => {
|
|
10
|
+
if (path.length === 2) {
|
|
11
|
+
const [a, b] = path;
|
|
12
|
+
return { x: a.x + (b.x - a.x) * t, y: a.y + (b.y - a.y) * t };
|
|
13
|
+
}
|
|
14
|
+
const lengths = [];
|
|
15
|
+
let total = 0;
|
|
16
|
+
for (let i = 1; i < path.length; i++) {
|
|
17
|
+
const cur = req(path[i]);
|
|
18
|
+
const prev = req(path[i - 1]);
|
|
19
|
+
const len = Math.hypot(cur.x - prev.x, cur.y - prev.y);
|
|
20
|
+
lengths.push(len);
|
|
21
|
+
total += len;
|
|
22
|
+
}
|
|
23
|
+
let remaining = total * t;
|
|
24
|
+
for (let i = 0; i < lengths.length; i++) {
|
|
25
|
+
const segLen = req(lengths[i]);
|
|
26
|
+
if (remaining <= segLen) {
|
|
27
|
+
const a = req(path[i]);
|
|
28
|
+
const b = req(path[i + 1]);
|
|
29
|
+
const r = segLen === 0 ? 0 : remaining / segLen;
|
|
30
|
+
return { x: a.x + (b.x - a.x) * r, y: a.y + (b.y - a.y) * r };
|
|
31
|
+
}
|
|
32
|
+
remaining -= segLen;
|
|
33
|
+
}
|
|
34
|
+
return req(path[path.length - 1]);
|
|
35
|
+
};
|
|
36
|
+
/** Total polyline length. */
|
|
37
|
+
const pathLength = (path) => {
|
|
38
|
+
let total = 0;
|
|
39
|
+
for (let i = 1; i < path.length; i++) {
|
|
40
|
+
const a = req(path[i - 1]);
|
|
41
|
+
const b = req(path[i]);
|
|
42
|
+
total += Math.hypot(b.x - a.x, b.y - a.y);
|
|
43
|
+
}
|
|
44
|
+
return total;
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* World anchor point of a link's label on `path`.
|
|
48
|
+
*
|
|
49
|
+
* - Explicit `label.position` → fractional arc length, clamped so the pill
|
|
50
|
+
* keeps {@link LINK_LABEL_END_CLEARANCE} away from either end (arrowheads).
|
|
51
|
+
* - No explicit position on an orthogonal (elbow) link → the midpoint of the
|
|
52
|
+
* LONGEST segment: it never sits on a corner and stays put when re-routing
|
|
53
|
+
* re-flows the shorter segments.
|
|
54
|
+
* - Otherwise → clamped arc-length midpoint.
|
|
55
|
+
*/
|
|
56
|
+
export const linkLabelAnchor = (path, edge) => {
|
|
57
|
+
const explicit = edge.label?.position;
|
|
58
|
+
if (explicit === undefined && (edge.routing ?? "straight") === "orthogonal" && path.length > 2) {
|
|
59
|
+
let bestLen = -1;
|
|
60
|
+
let mid = req(path[0]);
|
|
61
|
+
for (let i = 1; i < path.length; i++) {
|
|
62
|
+
const a = req(path[i - 1]);
|
|
63
|
+
const b = req(path[i]);
|
|
64
|
+
const len = Math.hypot(b.x - a.x, b.y - a.y);
|
|
65
|
+
if (len > bestLen) {
|
|
66
|
+
bestLen = len;
|
|
67
|
+
mid = { x: (a.x + b.x) / 2, y: (a.y + b.y) / 2 };
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
return mid;
|
|
71
|
+
}
|
|
72
|
+
const total = pathLength(path);
|
|
73
|
+
const clearance = total > 0 ? Math.min(0.5, LINK_LABEL_END_CLEARANCE / total) : 0;
|
|
74
|
+
const t = Math.min(1 - clearance, Math.max(clearance, explicit ?? LINK_LABEL_DEFAULT_POSITION));
|
|
75
|
+
return pointAlongPath(path, t);
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Conservative size estimate of the label pill (world px at zoom 1) for
|
|
79
|
+
* hit-testing and dirty-rect / culling bounds. Mirrors the renderer's
|
|
80
|
+
* measured word-wrap with a per-glyph advance of
|
|
81
|
+
* {@link LINK_LABEL_CHAR_WIDTH_FACTOR} × fontSize — deliberately a little
|
|
82
|
+
* generous so the drawn pill always fits inside the estimated box.
|
|
83
|
+
*/
|
|
84
|
+
export const estimateLinkLabelBox = (label) => {
|
|
85
|
+
const fontSize = label.fontSize ?? LINK_LABEL_DEFAULT_FONT_SIZE;
|
|
86
|
+
const charW = fontSize * LINK_LABEL_CHAR_WIDTH_FACTOR;
|
|
87
|
+
const maxChars = Math.max(1, Math.floor(LINK_LABEL_MAX_WIDTH / charW));
|
|
88
|
+
let lines = 0;
|
|
89
|
+
let widest = 0;
|
|
90
|
+
for (const paragraph of label.text.split("\n")) {
|
|
91
|
+
const words = paragraph.split(/\s+/).filter((w) => w.length > 0);
|
|
92
|
+
if (words.length === 0) {
|
|
93
|
+
lines += 1;
|
|
94
|
+
continue;
|
|
95
|
+
}
|
|
96
|
+
let current = "";
|
|
97
|
+
for (const word of words) {
|
|
98
|
+
const candidate = current === "" ? word : `${current} ${word}`;
|
|
99
|
+
if (candidate.length <= maxChars || current === "") {
|
|
100
|
+
current = candidate;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
widest = Math.max(widest, current.length);
|
|
104
|
+
lines += 1;
|
|
105
|
+
current = word;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
widest = Math.max(widest, current.length);
|
|
109
|
+
lines += 1;
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
width: Math.min(widest * charW, LINK_LABEL_MAX_WIDTH) + LINK_LABEL_PAD_X * 2,
|
|
113
|
+
height: lines * fontSize * LINK_LABEL_LINE_HEIGHT + LINK_LABEL_PAD_Y * 2,
|
|
114
|
+
};
|
|
115
|
+
};
|
|
116
|
+
/**
|
|
117
|
+
* Estimated world AABB of a link's label pill on `path` (the drawn polyline —
|
|
118
|
+
* see `getLinkCurvePoints`), or `null` when the link has no label. Centred on
|
|
119
|
+
* {@link linkLabelAnchor}. The scene-aware convenience is
|
|
120
|
+
* `linkLabelBounds` in `edge-geometry.ts`.
|
|
121
|
+
*/
|
|
122
|
+
export const linkLabelBoundsForPath = (path, edge) => {
|
|
123
|
+
if (!edge.label || edge.label.text === "" || path.length < 2)
|
|
124
|
+
return null;
|
|
125
|
+
const anchor = linkLabelAnchor(path, edge);
|
|
126
|
+
const box = estimateLinkLabelBox(edge.label);
|
|
127
|
+
return {
|
|
128
|
+
x: anchor.x - box.width / 2,
|
|
129
|
+
y: anchor.y - box.height / 2,
|
|
130
|
+
width: box.width,
|
|
131
|
+
height: box.height,
|
|
132
|
+
};
|
|
133
|
+
};
|
|
134
|
+
/**
|
|
135
|
+
* Sampling offsets (fractions of a span, ordered by distance from the
|
|
136
|
+
* midpoint) used to slide a per-span handle out of the label pill. The first
|
|
137
|
+
* sample outside the pill wins, so the handle stays as close to the visual
|
|
138
|
+
* middle as possible.
|
|
139
|
+
*/
|
|
140
|
+
const HANDLE_NUDGE_TS = [0.5, 0.38, 0.62, 0.26, 0.74, 0.14, 0.86];
|
|
141
|
+
const insideBounds = (p, b) => p.x >= b.x && p.x <= b.x + b.width && p.y >= b.y && p.y <= b.y + b.height;
|
|
142
|
+
/**
|
|
143
|
+
* Slide a per-span handle point out of the label pill along its own span.
|
|
144
|
+
* `pointAt(t)` maps a span fraction to a world point (chord lerp for straight
|
|
145
|
+
* spans, the cubic for bezier). Returns the first sampled point outside
|
|
146
|
+
* `label`, or the plain midpoint when the whole span is covered (degenerate —
|
|
147
|
+
* better a conflicting handle than a missing one, and callers keep 1:1 span
|
|
148
|
+
* indexing either way).
|
|
149
|
+
*/
|
|
150
|
+
export const nudgeHandleOffLabel = (pointAt, label) => {
|
|
151
|
+
const mid = pointAt(0.5);
|
|
152
|
+
if (label === null || !insideBounds(mid, label))
|
|
153
|
+
return mid;
|
|
154
|
+
for (const t of HANDLE_NUDGE_TS) {
|
|
155
|
+
const p = pointAt(t);
|
|
156
|
+
if (!insideBounds(p, label))
|
|
157
|
+
return p;
|
|
158
|
+
}
|
|
159
|
+
return mid;
|
|
160
|
+
};
|
|
161
|
+
/**
|
|
162
|
+
* Fractional arc-length position (0..1) of the point on `path` nearest to
|
|
163
|
+
* `p` — the inverse of {@link pointAlongPath}. Used by the caption-drag
|
|
164
|
+
* gesture: the cursor is projected back onto the polyline so the label can
|
|
165
|
+
* only slide ALONG its link. Returns 0.5 for a degenerate (zero-length) path.
|
|
166
|
+
*/
|
|
167
|
+
export const projectPointToPathT = (path, p) => {
|
|
168
|
+
let total = 0;
|
|
169
|
+
let bestDist = Infinity;
|
|
170
|
+
let bestAt = 0;
|
|
171
|
+
let walked = 0;
|
|
172
|
+
for (let i = 1; i < path.length; i++) {
|
|
173
|
+
const a = req(path[i - 1]);
|
|
174
|
+
const b = req(path[i]);
|
|
175
|
+
const dx = b.x - a.x;
|
|
176
|
+
const dy = b.y - a.y;
|
|
177
|
+
const len = Math.hypot(dx, dy);
|
|
178
|
+
if (len > 0) {
|
|
179
|
+
const t = Math.max(0, Math.min(1, ((p.x - a.x) * dx + (p.y - a.y) * dy) / (len * len)));
|
|
180
|
+
const qx = a.x + dx * t;
|
|
181
|
+
const qy = a.y + dy * t;
|
|
182
|
+
const d = (p.x - qx) ** 2 + (p.y - qy) ** 2;
|
|
183
|
+
if (d < bestDist) {
|
|
184
|
+
bestDist = d;
|
|
185
|
+
bestAt = walked + len * t;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
walked += len;
|
|
189
|
+
total += len;
|
|
190
|
+
}
|
|
191
|
+
return total > 0 ? bestAt / total : 0.5;
|
|
192
|
+
};
|
|
193
|
+
//# sourceMappingURL=edge-label.js.map
|