@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.
Files changed (228) hide show
  1. package/CHANGELOG.md +63 -0
  2. package/dist/.tsbuildinfo +1 -1
  3. package/dist/a11y.d.ts +1 -1
  4. package/dist/a11y.d.ts.map +1 -1
  5. package/dist/{annotation-geometry.d.ts → annotations/annotation-geometry.d.ts} +1 -1
  6. package/dist/annotations/annotation-geometry.d.ts.map +1 -0
  7. package/dist/{annotation-geometry.js → annotations/annotation-geometry.js} +1 -1
  8. package/dist/annotations/annotation-geometry.js.map +1 -0
  9. package/dist/annotations/annotation.d.ts.map +1 -0
  10. package/dist/{annotation.js.map → annotations/annotation.js.map} +1 -1
  11. package/dist/constants.d.ts +64 -0
  12. package/dist/constants.d.ts.map +1 -1
  13. package/dist/constants.js +92 -0
  14. package/dist/constants.js.map +1 -1
  15. package/dist/edges/edge-curve.d.ts.map +1 -0
  16. package/dist/{edge-curve.js → edges/edge-curve.js} +1 -1
  17. package/dist/edges/edge-curve.js.map +1 -0
  18. package/dist/{edge-geometry.d.ts → edges/edge-geometry.d.ts} +22 -1
  19. package/dist/edges/edge-geometry.d.ts.map +1 -0
  20. package/dist/{edge-geometry.js → edges/edge-geometry.js} +54 -9
  21. package/dist/{edge-geometry.js.map → edges/edge-geometry.js.map} +1 -1
  22. package/dist/edges/edge-label.d.ts +55 -0
  23. package/dist/edges/edge-label.d.ts.map +1 -0
  24. package/dist/edges/edge-label.js +193 -0
  25. package/dist/edges/edge-label.js.map +1 -0
  26. package/dist/{edge.d.ts → edges/edge.d.ts} +1 -1
  27. package/dist/edges/edge.d.ts.map +1 -0
  28. package/dist/edges/edge.js.map +1 -0
  29. package/dist/{elbow-link.d.ts → edges/elbow-link.d.ts} +1 -1
  30. package/dist/edges/elbow-link.d.ts.map +1 -0
  31. package/dist/{elbow-link.js → edges/elbow-link.js} +3 -3
  32. package/dist/edges/elbow-link.js.map +1 -0
  33. package/dist/edges/elbow-router.d.ts.map +1 -0
  34. package/dist/{elbow-router.js → edges/elbow-router.js} +1 -1
  35. package/dist/edges/elbow-router.js.map +1 -0
  36. package/dist/{heading.d.ts → edges/heading.d.ts} +1 -1
  37. package/dist/edges/heading.d.ts.map +1 -0
  38. package/dist/{heading.js → edges/heading.js} +1 -1
  39. package/dist/edges/heading.js.map +1 -0
  40. package/dist/{anchors.d.ts → geometry/anchors.d.ts} +2 -2
  41. package/dist/geometry/anchors.d.ts.map +1 -0
  42. package/dist/{anchors.js → geometry/anchors.js} +2 -2
  43. package/dist/geometry/anchors.js.map +1 -0
  44. package/dist/{outline.d.ts → geometry/outline.d.ts} +1 -1
  45. package/dist/geometry/outline.d.ts.map +1 -0
  46. package/dist/{outline.js → geometry/outline.js} +4 -4
  47. package/dist/geometry/outline.js.map +1 -0
  48. package/dist/{snap.d.ts → geometry/snap.d.ts} +1 -1
  49. package/dist/geometry/snap.d.ts.map +1 -0
  50. package/dist/{snap.js → geometry/snap.js} +1 -1
  51. package/dist/geometry/snap.js.map +1 -0
  52. package/dist/index.d.ts +53 -50
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +35 -32
  55. package/dist/index.js.map +1 -1
  56. package/dist/{layout-registry.d.ts → layout/layout-registry.d.ts} +2 -2
  57. package/dist/layout/layout-registry.d.ts.map +1 -0
  58. package/dist/layout/layout-registry.js.map +1 -0
  59. package/dist/{layout.d.ts → layout/layout.d.ts} +3 -3
  60. package/dist/layout/layout.d.ts.map +1 -0
  61. package/dist/{layout.js → layout/layout.js} +7 -7
  62. package/dist/layout/layout.js.map +1 -0
  63. package/dist/model/diff.d.ts.map +1 -0
  64. package/dist/model/diff.js.map +1 -0
  65. package/dist/{file.d.ts → model/file.d.ts} +9 -0
  66. package/dist/model/file.d.ts.map +1 -0
  67. package/dist/model/file.js +42 -0
  68. package/dist/model/file.js.map +1 -0
  69. package/dist/{hydrate.d.ts → model/hydrate.d.ts} +1 -0
  70. package/dist/model/hydrate.d.ts.map +1 -0
  71. package/dist/{hydrate.js → model/hydrate.js} +1 -0
  72. package/dist/model/hydrate.js.map +1 -0
  73. package/dist/model/layer.d.ts.map +1 -0
  74. package/dist/model/layer.js.map +1 -0
  75. package/dist/{operations.d.ts → model/operations.d.ts} +3 -3
  76. package/dist/model/operations.d.ts.map +1 -0
  77. package/dist/model/operations.js.map +1 -0
  78. package/dist/model/order.d.ts.map +1 -0
  79. package/dist/model/order.js.map +1 -0
  80. package/dist/{patch.d.ts → model/patch.d.ts} +3 -3
  81. package/dist/model/patch.d.ts.map +1 -0
  82. package/dist/model/patch.js.map +1 -0
  83. package/dist/{scene.d.ts → model/scene.d.ts} +3 -3
  84. package/dist/model/scene.d.ts.map +1 -0
  85. package/dist/model/scene.js.map +1 -0
  86. package/dist/{three-way-merge.d.ts → model/three-way-merge.d.ts} +1 -1
  87. package/dist/model/three-way-merge.d.ts.map +1 -0
  88. package/dist/model/three-way-merge.js.map +1 -0
  89. package/dist/{viewport.d.ts → model/viewport.d.ts} +10 -0
  90. package/dist/model/viewport.d.ts.map +1 -0
  91. package/dist/{viewport.js → model/viewport.js} +1 -1
  92. package/dist/model/viewport.js.map +1 -0
  93. package/dist/{queries.d.ts → query/queries.d.ts} +12 -7
  94. package/dist/query/queries.d.ts.map +1 -0
  95. package/dist/{queries.js → query/queries.js} +20 -10
  96. package/dist/query/queries.js.map +1 -0
  97. package/dist/query/spatial.d.ts.map +1 -0
  98. package/dist/query/spatial.js.map +1 -0
  99. package/dist/shapes/brush-outline.d.ts.map +1 -0
  100. package/dist/{brush-outline.js → shapes/brush-outline.js} +1 -1
  101. package/dist/shapes/brush-outline.js.map +1 -0
  102. package/dist/{container.d.ts → shapes/container.d.ts} +1 -1
  103. package/dist/shapes/container.d.ts.map +1 -0
  104. package/dist/{container.js → shapes/container.js} +1 -1
  105. package/dist/shapes/container.js.map +1 -0
  106. package/dist/shapes/ellipse.d.ts.map +1 -0
  107. package/dist/shapes/ellipse.js.map +1 -0
  108. package/dist/shapes/render-bounds.d.ts.map +1 -0
  109. package/dist/shapes/render-bounds.js.map +1 -0
  110. package/dist/shapes/shape-transform.d.ts.map +1 -0
  111. package/dist/shapes/shape-transform.js.map +1 -0
  112. package/dist/{shape.d.ts → shapes/shape.d.ts} +148 -3
  113. package/dist/shapes/shape.d.ts.map +1 -0
  114. package/dist/{shape.js → shapes/shape.js} +30 -5
  115. package/dist/shapes/shape.js.map +1 -0
  116. package/dist/text/paragraphs.d.ts +44 -0
  117. package/dist/text/paragraphs.d.ts.map +1 -0
  118. package/dist/text/paragraphs.js +133 -0
  119. package/dist/text/paragraphs.js.map +1 -0
  120. package/dist/text/placeholder.d.ts +9 -0
  121. package/dist/text/placeholder.d.ts.map +1 -0
  122. package/dist/text/placeholder.js +29 -0
  123. package/dist/text/placeholder.js.map +1 -0
  124. package/dist/{style.d.ts → text/style.d.ts} +6 -0
  125. package/dist/text/style.d.ts.map +1 -0
  126. package/dist/{style.js → text/style.js} +1 -1
  127. package/dist/text/style.js.map +1 -0
  128. package/dist/text/text-measure.d.ts.map +1 -0
  129. package/dist/text/text-measure.js.map +1 -0
  130. package/dist/{text-runs.d.ts → text/text-runs.d.ts} +1 -1
  131. package/dist/text/text-runs.d.ts.map +1 -0
  132. package/dist/text/text-runs.js.map +1 -0
  133. package/package.json +1 -1
  134. package/dist/anchors.d.ts.map +0 -1
  135. package/dist/anchors.js.map +0 -1
  136. package/dist/annotation-geometry.d.ts.map +0 -1
  137. package/dist/annotation-geometry.js.map +0 -1
  138. package/dist/annotation.d.ts.map +0 -1
  139. package/dist/brush-outline.d.ts.map +0 -1
  140. package/dist/brush-outline.js.map +0 -1
  141. package/dist/container.d.ts.map +0 -1
  142. package/dist/container.js.map +0 -1
  143. package/dist/diff.d.ts.map +0 -1
  144. package/dist/diff.js.map +0 -1
  145. package/dist/edge-curve.d.ts.map +0 -1
  146. package/dist/edge-curve.js.map +0 -1
  147. package/dist/edge-geometry.d.ts.map +0 -1
  148. package/dist/edge.d.ts.map +0 -1
  149. package/dist/edge.js.map +0 -1
  150. package/dist/elbow-link.d.ts.map +0 -1
  151. package/dist/elbow-link.js.map +0 -1
  152. package/dist/elbow-router.d.ts.map +0 -1
  153. package/dist/elbow-router.js.map +0 -1
  154. package/dist/ellipse.d.ts.map +0 -1
  155. package/dist/ellipse.js.map +0 -1
  156. package/dist/file.d.ts.map +0 -1
  157. package/dist/file.js +0 -13
  158. package/dist/file.js.map +0 -1
  159. package/dist/heading.d.ts.map +0 -1
  160. package/dist/heading.js.map +0 -1
  161. package/dist/hydrate.d.ts.map +0 -1
  162. package/dist/hydrate.js.map +0 -1
  163. package/dist/layer.d.ts.map +0 -1
  164. package/dist/layer.js.map +0 -1
  165. package/dist/layout-registry.d.ts.map +0 -1
  166. package/dist/layout-registry.js.map +0 -1
  167. package/dist/layout.d.ts.map +0 -1
  168. package/dist/layout.js.map +0 -1
  169. package/dist/operations.d.ts.map +0 -1
  170. package/dist/operations.js.map +0 -1
  171. package/dist/order.d.ts.map +0 -1
  172. package/dist/order.js.map +0 -1
  173. package/dist/outline.d.ts.map +0 -1
  174. package/dist/outline.js.map +0 -1
  175. package/dist/patch.d.ts.map +0 -1
  176. package/dist/patch.js.map +0 -1
  177. package/dist/queries.d.ts.map +0 -1
  178. package/dist/queries.js.map +0 -1
  179. package/dist/render-bounds.d.ts.map +0 -1
  180. package/dist/render-bounds.js.map +0 -1
  181. package/dist/scene.d.ts.map +0 -1
  182. package/dist/scene.js.map +0 -1
  183. package/dist/shape-transform.d.ts.map +0 -1
  184. package/dist/shape-transform.js.map +0 -1
  185. package/dist/shape.d.ts.map +0 -1
  186. package/dist/shape.js.map +0 -1
  187. package/dist/snap.d.ts.map +0 -1
  188. package/dist/snap.js.map +0 -1
  189. package/dist/spatial.d.ts.map +0 -1
  190. package/dist/spatial.js.map +0 -1
  191. package/dist/style.d.ts.map +0 -1
  192. package/dist/style.js.map +0 -1
  193. package/dist/text-measure.d.ts.map +0 -1
  194. package/dist/text-measure.js.map +0 -1
  195. package/dist/text-runs.d.ts.map +0 -1
  196. package/dist/text-runs.js.map +0 -1
  197. package/dist/three-way-merge.d.ts.map +0 -1
  198. package/dist/three-way-merge.js.map +0 -1
  199. package/dist/viewport.d.ts.map +0 -1
  200. package/dist/viewport.js.map +0 -1
  201. /package/dist/{annotation.d.ts → annotations/annotation.d.ts} +0 -0
  202. /package/dist/{annotation.js → annotations/annotation.js} +0 -0
  203. /package/dist/{edge-curve.d.ts → edges/edge-curve.d.ts} +0 -0
  204. /package/dist/{edge.js → edges/edge.js} +0 -0
  205. /package/dist/{elbow-router.d.ts → edges/elbow-router.d.ts} +0 -0
  206. /package/dist/{layout-registry.js → layout/layout-registry.js} +0 -0
  207. /package/dist/{diff.d.ts → model/diff.d.ts} +0 -0
  208. /package/dist/{diff.js → model/diff.js} +0 -0
  209. /package/dist/{layer.d.ts → model/layer.d.ts} +0 -0
  210. /package/dist/{layer.js → model/layer.js} +0 -0
  211. /package/dist/{operations.js → model/operations.js} +0 -0
  212. /package/dist/{order.d.ts → model/order.d.ts} +0 -0
  213. /package/dist/{order.js → model/order.js} +0 -0
  214. /package/dist/{patch.js → model/patch.js} +0 -0
  215. /package/dist/{scene.js → model/scene.js} +0 -0
  216. /package/dist/{three-way-merge.js → model/three-way-merge.js} +0 -0
  217. /package/dist/{spatial.d.ts → query/spatial.d.ts} +0 -0
  218. /package/dist/{spatial.js → query/spatial.js} +0 -0
  219. /package/dist/{brush-outline.d.ts → shapes/brush-outline.d.ts} +0 -0
  220. /package/dist/{ellipse.d.ts → shapes/ellipse.d.ts} +0 -0
  221. /package/dist/{ellipse.js → shapes/ellipse.js} +0 -0
  222. /package/dist/{render-bounds.d.ts → shapes/render-bounds.d.ts} +0 -0
  223. /package/dist/{render-bounds.js → shapes/render-bounds.js} +0 -0
  224. /package/dist/{shape-transform.d.ts → shapes/shape-transform.d.ts} +0 -0
  225. /package/dist/{shape-transform.js → shapes/shape-transform.js} +0 -0
  226. /package/dist/{text-measure.d.ts → text/text-measure.d.ts} +0 -0
  227. /package/dist/{text-measure.js → text/text-measure.js} +0 -0
  228. /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
@@ -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 "./constants.js";
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 "./scene.js";
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, vec2 } from "@oh-just-another/math";
3
- import { getAnchorOutwardNormal, getAnchorWorld } from "./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";
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 "./outline.js";
8
- import { getElementWorldBounds } from "./shape.js";
9
- import { getElement } from "./queries.js";
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
- mids.push(bezier.cubicAt(prev, s.c1, s.c2, s.to, 0.5));
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(vec2.midpoint(a, b));
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