@knowvah/dot-engine 2.0.2 → 2.2.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 (39) hide show
  1. package/dist/async/render-async.d.ts.map +1 -1
  2. package/dist/common/arith.d.ts +6 -0
  3. package/dist/common/arith.d.ts.map +1 -1
  4. package/dist/common/libm-hypot.d.ts +3 -0
  5. package/dist/common/libm-hypot.d.ts.map +1 -0
  6. package/dist/common/poly-sizing.d.ts.map +1 -1
  7. package/dist/common/textmeasure-factory.d.ts +2 -1
  8. package/dist/common/textmeasure-factory.d.ts.map +1 -1
  9. package/dist/common/textmeasure.d.ts +1 -1
  10. package/dist/common/textmeasure.d.ts.map +1 -1
  11. package/dist/index.js +97 -59
  12. package/dist/index.js.map +4 -4
  13. package/dist/layout/dot/splines-label.d.ts.map +1 -1
  14. package/dist/layout/fdp/derive.d.ts.map +1 -1
  15. package/dist/layout/fdp/fdp-model.d.ts +4 -4
  16. package/dist/layout/fdp/normalize.d.ts.map +1 -1
  17. package/dist/layout/fdp/tlayout-init.d.ts.map +1 -1
  18. package/dist/layout/fdp/tlayout-parms.d.ts +4 -1
  19. package/dist/layout/fdp/tlayout-parms.d.ts.map +1 -1
  20. package/dist/layout/fdp/tlayout.d.ts +3 -4
  21. package/dist/layout/fdp/tlayout.d.ts.map +1 -1
  22. package/dist/layout/fdp/xlayout.d.ts.map +1 -1
  23. package/dist/render.js +95 -57
  24. package/dist/render.js.map +4 -4
  25. package/package.json +1 -1
  26. package/src/async/render-async.ts +6 -3
  27. package/src/common/arith.ts +9 -0
  28. package/src/common/libm-hypot.ts +40 -0
  29. package/src/common/poly-sizing.ts +12 -11
  30. package/src/common/textmeasure-factory.ts +20 -1
  31. package/src/common/textmeasure.ts +1 -1
  32. package/src/layout/dot/splines-label.ts +2 -1
  33. package/src/layout/fdp/derive.ts +5 -2
  34. package/src/layout/fdp/fdp-model.ts +4 -4
  35. package/src/layout/fdp/normalize.ts +2 -1
  36. package/src/layout/fdp/tlayout-init.ts +8 -6
  37. package/src/layout/fdp/tlayout-parms.ts +5 -2
  38. package/src/layout/fdp/tlayout.ts +18 -17
  39. package/src/layout/fdp/xlayout.ts +26 -22
@@ -1 +1 @@
1
- {"version":3,"file":"render-async.d.ts","sourceRoot":"","sources":["../../src/async/render-async.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,8DAA8D;AAC9D,MAAM,MAAM,cAAc,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAE7D,+DAA+D;AAC/D,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,GAAG,IAAI,CAAC;AAEvF,uCAAuC;AACvC,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,oFAAoF;IACpF,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1D,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,qFAAqF;AACrF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAEjE,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAoDD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,WAAW,CAC/B,CAAC,EAAE,KAAK,EACR,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAsB5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,EAClB,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAWzB"}
1
+ {"version":3,"file":"render-async.d.ts","sourceRoot":"","sources":["../../src/async/render-async.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAG/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAMpD,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGvE,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,YAAY,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzD,0DAA0D;AAC1D,eAAO,MAAM,uBAAuB,OAAO,CAAC;AAE5C,8DAA8D;AAC9D,MAAM,MAAM,cAAc,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC;AAE7D,+DAA+D;AAC/D,MAAM,MAAM,eAAe,GAAG;IAAE,KAAK,EAAE,UAAU,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,UAAU,GAAG,IAAI,CAAC;AAEvF,uCAAuC;AACvC,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,4EAA4E;IAC5E,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;IACtD,oFAAoF;IACpF,aAAa,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1D,mEAAmE;IACnE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kFAAkF;IAClF,OAAO,CAAC,EAAE,WAAW,CAAC;CACvB;AAED,qFAAqF;AACrF,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAEjE,6CAA6C;AAC7C,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAED,gDAAgD;AAChD,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AAuDD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,WAAW,CAC/B,CAAC,EAAE,KAAK,EACR,MAAM,EAAE,YAAY,EACpB,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,iBAAiB,CAAC,CAsB5B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,UAAU,EAClB,IAAI,CAAC,EAAE,eAAe,GACrB,OAAO,CAAC,cAAc,CAAC,CAWzB"}
@@ -32,4 +32,10 @@
32
32
  * @see C99 7.12.9.6 (round)
33
33
  */
34
34
  export declare function cround(v: number): number;
35
+ /**
36
+ * Degrees to radians in C's operation order, `(deg)/180.0 * M_PI`.
37
+ * `deg * Math.PI / 180` rounds differently for some angles (e.g. 33°).
38
+ * @see lib/common/arith.h:49 (RADIANS)
39
+ */
40
+ export declare function RADIANS(deg: number): number;
35
41
  //# sourceMappingURL=arith.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"arith.d.ts","sourceRoot":"","sources":["../../src/common/arith.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC"}
1
+ {"version":3,"file":"arith.d.ts","sourceRoot":"","sources":["../../src/common/arith.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AAEH;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAgB,MAAM,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAExC;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE3C"}
@@ -0,0 +1,3 @@
1
+ /** libm `hypot(a, b)` of the native build host. */
2
+ export declare function libmHypot(a: number, b: number): number;
3
+ //# sourceMappingURL=libm-hypot.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"libm-hypot.d.ts","sourceRoot":"","sources":["../../src/common/libm-hypot.ts"],"names":[],"mappings":"AAyBA,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAQtD"}
@@ -1 +1 @@
1
- {"version":3,"file":"poly-sizing.d.ts","sourceRoot":"","sources":["../../src/common/poly-sizing.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAK9C,4FAA4F;AAC5F,eAAO,MAAM,GAAG,IAAI,CAAC;AAUrB;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B,oDAAoD;IACpD,UAAU,EAAE,KAAK,CAAC;IAClB,2EAA2E;IAC3E,KAAK,EAAE,MAAM,CAAC;IACd,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,yBAAyB;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,mBAAmB;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,OAAO,EAAE,OAAO,CAAC;IACjB,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,QAAQ,EAAE,MAAM,CAAC;IACjB,kFAAkF;IAClF,WAAW,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,wCAAwC;IACxC,SAAS,EAAE,MAAM,CAAC;IAClB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,8DAA8D;IAC9D,SAAS,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,IAAI,EAAE,OAAO,CAAC;IACd,qFAAqF;IACrF,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;;;OAKG;IACH,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED,kEAAkE;AAClE,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,0EAA0E;AAC1E,MAAM,WAAW,cAAe,SAAQ,QAAQ;IAC9C,4EAA4E;IAC5E,QAAQ,EAAE,MAAM,CAAC;IACjB,uDAAuD;IACvD,QAAQ,EAAE,MAAM,CAAC;IACjB;;;;;OAKG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;;OAKG;IACH,KAAK,EAAE,KAAK,CAAC;IACb,+DAA+D;IAC/D,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,cAAc,GAAG;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAQnF;AAaD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,UAAU,EAAE,KAAK,EACjB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,OAAO,EAAE,OAAO,GACf,KAAK,CAaP;AASD;;;;GAIG;AACH;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAQzC;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,EAAE,EAAE,KAAK,GAAG,KAAK,CAE7C;AAED,wBAAgB,cAAc,CAC5B,EAAE,EAAE,KAAK,EACT,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,GACb,KAAK,CAgBP;AAqBD,2DAA2D;AAC3D,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;CACd;AAiBD;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,KAAK,EACT,CAAC,EAAE,QAAQ,EACX,KAAK,EAAE,OAAO,GACb;IAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CA6BhD;AAuDD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE,CAQzE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,KAAK,EAAE,CAU3F;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,KAAK,EAAE,EACd,KAAK,EAAE,MAAM,EACb,CAAC,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,OAAO,CAAA;CAAE,EACjE,EAAE,EAAE,KAAK,GACR;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,KAAK,CAAA;CAAE,CAkB/B;AA6DD,gGAAgG;AAChG,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,QAAQ,CAGvF;AAiCD;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,cAAc,GAAG,cAAc,CA+B1D"}
1
+ {"version":3,"file":"poly-sizing.d.ts","sourceRoot":"","sources":["../../src/common/poly-sizing.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,8 @@
5
5
  * 1. explicit override via setTextMeasurer (tests, host-faithful Node opt-in)
6
6
  * 2. GV_TEXT_MEASURER=estimate|lut — test/CI hook to force a specific measurer
7
7
  * 3. browser (document present) — CanvasTextMeasurer over the page canvas
8
- * (host-faithful: the same font the browser renders the SVG with)
8
+ * (host-faithful: the same font the browser renders the SVG with);
9
+ * Worker (no document) — the same over an OffscreenCanvas
9
10
  * 4. Node default — EstimateTextMeasurer (deterministic; matches
10
11
  * graphviz's own headless estimate_textspan_size)
11
12
  *
@@ -1 +1 @@
1
- {"version":3,"file":"textmeasure-factory.d.ts","sourceRoot":"","sources":["../../src/common/textmeasure-factory.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACsD,KAAK,YAAY,EAC7E,MAAM,kBAAkB,CAAC;AAM1B;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CASjE;AAED,uEAAuE;AACvE,wBAAgB,eAAe,IAAI,YAAY,GAAG,SAAS,CAE1D;AA2BD,8EAA8E;AAC9E,wBAAgB,cAAc,IAAI,YAAY,CAgB7C"}
1
+ {"version":3,"file":"textmeasure-factory.d.ts","sourceRoot":"","sources":["../../src/common/textmeasure-factory.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EACsD,KAAK,YAAY,EAC7E,MAAM,kBAAkB,CAAC;AAM1B;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,YAAY,GAAG,SAAS,GAAG,IAAI,CASjE;AAED,uEAAuE;AACvE,wBAAgB,eAAe,IAAI,YAAY,GAAG,SAAS,CAE1D;AA0CD,8EAA8E;AAC9E,wBAAgB,cAAc,IAAI,YAAY,CAmB7C"}
@@ -107,7 +107,7 @@ export declare class CanvasTextMeasurer implements TextMeasurer {
107
107
  * font reuse (plugin/pango/gvtextlayout_pango.c:99-100).
108
108
  */
109
109
  private readonly fonts;
110
- constructor(ctx: CanvasRenderingContext2D);
110
+ constructor(ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D);
111
111
  measure(text: string, fontname: string, fontsize: number, flags?: TextVariantFlags): TextSize;
112
112
  /** Cached font string; built and validated once per distinct font. */
113
113
  private fontFor;
@@ -1 +1 @@
1
- {"version":3,"file":"textmeasure.d.ts","sourceRoot":"","sources":["../../src/common/textmeasure.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAMH,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,QAAQ,CAAC;CACb;AA8CD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,OAAO,GACd,MAAM,CASR;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,QAAY,CAAC;AAW/C;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,UAAQ,EACZ,MAAM,UAAQ,GACb,MAAM,CAWR;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,QAAa,CAAC;AAgDjD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,QAAQ;CAMZ;AASD;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IAOzC,OAAO,CAAC,QAAQ,CAAC,GAAG;IANhC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;gBAEtB,GAAG,EAAE,wBAAwB;IAE1D,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,QAAQ;IAMX,sEAAsE;IACtE,OAAO,CAAC,OAAO;IAaf,kEAAkE;IAClE,OAAO,CAAC,OAAO;CAQhB;AAED,+EAA+E;AAC/E,eAAO,MAAM,WAAW,MAAO,CAAC;AAEhC;;;;;;;GAOG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,QAAQ;CAWZ"}
1
+ {"version":3,"file":"textmeasure.d.ts","sourceRoot":"","sources":["../../src/common/textmeasure.ts"],"names":[],"mappings":"AACA;;;;;;GAMG;AAMH,qDAAqD;AACrD,eAAO,MAAM,gBAAgB,KAAK,CAAC;AAEnC,iDAAiD;AACjD,MAAM,WAAW,QAAQ;IACvB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,oDAAoD;AACpD,MAAM,WAAW,YAAY;IAC3B,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,QAAQ,CAAC;CACb;AA8CD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,MAAM,EAAE,OAAO,GACd,MAAM,CASR;AAED;;;;;;;GAOG;AACH,eAAO,MAAM,qBAAqB,QAAY,CAAC;AAW/C;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,IAAI,UAAQ,EACZ,MAAM,UAAQ,GACb,MAAM,CAWR;AAED;;;;GAIG;AACH,eAAO,MAAM,qBAAqB,QAAc,CAAC;AAEjD,+DAA+D;AAC/D,eAAO,MAAM,sBAAsB,QAAa,CAAC;AAgDjD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAG1E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAK9E;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,YAAY;IAClD,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,QAAQ;CAMZ;AASD;;;;;GAKG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IAOzC,OAAO,CAAC,QAAQ,CAAC,GAAG;IANhC;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA6B;gBAEtB,GAAG,EAAE,wBAAwB,GAAG,iCAAiC;IAE9F,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,QAAQ;IAMX,sEAAsE;IACtE,OAAO,CAAC,OAAO;IAaf,kEAAkE;IAClE,OAAO,CAAC,OAAO;CAQhB;AAED,+EAA+E;AAC/E,eAAO,MAAM,WAAW,MAAO,CAAC;AAEhC;;;;;;;GAOG;AACH,qBAAa,oBAAqB,YAAW,YAAY;IACvD,OAAO,CACL,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,KAAK,CAAC,EAAE,gBAAgB,GACvB,QAAQ;CAWZ"}
package/dist/index.js CHANGED
@@ -16901,6 +16901,32 @@ function fms(a, b, c) {
16901
16901
  return fma(-a, b, c);
16902
16902
  }
16903
16903
 
16904
+ // src/common/arith.ts
16905
+ function cround(v) {
16906
+ return v >= 0 ? Math.floor(v + 0.5) : Math.ceil(v - 0.5);
16907
+ }
16908
+ function RADIANS(deg) {
16909
+ return deg / 180 * Math.PI;
16910
+ }
16911
+
16912
+ // src/common/libm-hypot.ts
16913
+ var BIG = 2 ** 500;
16914
+ var SMALL = 2 ** -500;
16915
+ var SCALE_UP = 2 ** 600;
16916
+ var SCALE_DOWN = 2 ** -600;
16917
+ function libmHypot(a, b) {
16918
+ if (a === Infinity || a === -Infinity || b === Infinity || b === -Infinity) return Infinity;
16919
+ let x = Math.abs(a);
16920
+ let y = Math.abs(b);
16921
+ if (x < y) [x, y] = [y, x];
16922
+ if (x > BIG) return core(x * SCALE_DOWN, y * SCALE_DOWN) * SCALE_UP;
16923
+ if (x < SMALL) return core(x * SCALE_UP, y * SCALE_UP) * SCALE_DOWN;
16924
+ return core(x, y);
16925
+ }
16926
+ function core(x, y) {
16927
+ return Math.sqrt(fma(y, y, x * x));
16928
+ }
16929
+
16904
16930
  // src/common/poly-sizing.ts
16905
16931
  var GAP = 4;
16906
16932
  var XPAD = 4 * GAP;
@@ -16988,16 +17014,16 @@ function ellipsePeripheryBB(bb, peripheries, penwidth, hasOutline) {
16988
17014
  return { bb: b, outline };
16989
17015
  }
16990
17016
  function transformUnitVertex(R2, g, c, bb) {
16991
- const D = { x: R2.x * (c.skewdist + R2.y * c.gdistortion) + R2.y * c.gskew, y: R2.y };
16992
- const alpha = g.orientation * Math.PI / 180 + Math.atan2(D.y, D.x);
16993
- const r = Math.sqrt(D.x * D.x + D.y * D.y);
17017
+ const D = { x: fma(R2.x, fma(R2.y, c.gdistortion, c.skewdist), R2.y * c.gskew), y: R2.y };
17018
+ const alpha = RADIANS(g.orientation) + Math.atan2(D.y, D.x);
17019
+ const r = libmHypot(D.x, D.y);
16994
17020
  return { x: r * Math.cos(alpha) * bb.x, y: r * Math.sin(alpha) * bb.y };
16995
17021
  }
16996
17022
  function polygonVertices(bb, g, isBox3) {
16997
17023
  const sectorangle = 2 * Math.PI / g.sides;
16998
17024
  const sidelength = Math.sin(sectorangle / 2);
16999
17025
  const c = {
17000
- skewdist: Math.hypot(Math.abs(g.distortion) + Math.abs(g.skew), 1),
17026
+ skewdist: libmHypot(Math.abs(g.distortion) + Math.abs(g.skew), 1),
17001
17027
  gdistortion: g.distortion * SQRT2 / Math.cos(sectorangle / 2),
17002
17028
  gskew: g.skew / 2
17003
17029
  };
@@ -17422,13 +17448,13 @@ function evalBezier(sp, t, left2, right2) {
17422
17448
  return pt;
17423
17449
  }
17424
17450
  var HW = 2;
17425
- var SMALL = 1e-10;
17451
+ var SMALL2 = 1e-10;
17426
17452
  function ptToLine2(a, b, p) {
17427
17453
  const dx = b.x - a.x;
17428
17454
  const dy = b.y - a.y;
17429
17455
  let a2 = (p.y - a.y) * dx - (p.x - a.x) * dy;
17430
17456
  a2 *= a2;
17431
- if (a2 < SMALL) return 0;
17457
+ if (a2 < SMALL2) return 0;
17432
17458
  return a2 / (dx * dx + dy * dy);
17433
17459
  }
17434
17460
  function checkControlPoints(cp) {
@@ -19059,11 +19085,6 @@ function makeSelfEdge(edges, cnt, sizex, sizey, sinfo) {
19059
19085
  }
19060
19086
  }
19061
19087
 
19062
- // src/common/arith.ts
19063
- function cround(v) {
19064
- return v >= 0 ? Math.floor(v + 0.5) : Math.ceil(v - 0.5);
19065
- }
19066
-
19067
19088
  // src/layout/dot/position-aux.ts
19068
19089
  var CL_OFFSET = 8;
19069
19090
  function clusterMarginOf(g) {
@@ -19976,7 +19997,7 @@ function feasibleTree(ctx) {
19976
19997
 
19977
19998
  // src/util/bsd-qsort.ts
19978
19999
  var THRESH = 7;
19979
- var BIG = 40;
20000
+ var BIG2 = 40;
19980
20001
  function swap(arr, i, j) {
19981
20002
  const t = arr[i];
19982
20003
  arr[i] = arr[j];
@@ -20002,7 +20023,7 @@ function choosePivot(arr, lo, n, cmp) {
20002
20023
  let pm = lo + (n >> 1);
20003
20024
  let pl = lo;
20004
20025
  let pn = lo + (n - 1);
20005
- if (n > BIG) {
20026
+ if (n > BIG2) {
20006
20027
  const d = n >> 3;
20007
20028
  pl = med3(arr, pl, pl + d, pl + 2 * d, cmp);
20008
20029
  pm = med3(arr, pm - d, pm, pm + d, cmp);
@@ -26845,6 +26866,15 @@ function adviseHostFaithful() {
26845
26866
  "@knowvah/dot-engine: measuring text with built-in metrics (kerning/shaping not applied). For host-faithful sizing matching the rendering font, install `canvas` and call setTextMeasurer(new CanvasTextMeasurer(createCanvas(0,0).getContext('2d'))). Silence with GV_FONT_QUIET=1.\n"
26846
26867
  );
26847
26868
  }
26869
+ function offscreenMeasurer() {
26870
+ if (typeof OffscreenCanvas === "undefined") return void 0;
26871
+ try {
26872
+ const ctx2d = new OffscreenCanvas(0, 0).getContext("2d");
26873
+ return ctx2d ? new CanvasTextMeasurer(ctx2d) : void 0;
26874
+ } catch {
26875
+ return void 0;
26876
+ }
26877
+ }
26848
26878
  function createMeasurer() {
26849
26879
  if (override) return override;
26850
26880
  const forced = envMeasurer();
@@ -26856,6 +26886,9 @@ function createMeasurer() {
26856
26886
  if (ctx2d) return new CanvasTextMeasurer(ctx2d);
26857
26887
  } catch {
26858
26888
  }
26889
+ } else {
26890
+ const offscreen = offscreenMeasurer();
26891
+ if (offscreen) return offscreen;
26859
26892
  }
26860
26893
  adviseHostFaithful();
26861
26894
  return new EstimateTextMeasurer();
@@ -32867,7 +32900,7 @@ function applyPortlabelPos(e, headP) {
32867
32900
  }
32868
32901
  function writePortlabelPos(l, pe, pf, angleStr, distanceStr) {
32869
32902
  const angleDeg = lateDouble(angleStr, PORT_LABEL_ANGLE, -180);
32870
- const angle = Math.atan2(pf.y - pe.y, pf.x - pe.x) + Math.PI / 180 * angleDeg;
32903
+ const angle = Math.atan2(pf.y - pe.y, pf.x - pe.x) + RADIANS(angleDeg);
32871
32904
  const distMult = lateDouble(distanceStr || void 0, 1, 0);
32872
32905
  const dist4 = PORT_LABEL_DISTANCE * distMult;
32873
32906
  l.pos.x = pe.x + dist4 * Math.cos(angle);
@@ -35791,7 +35824,7 @@ function addLoop(sg, cp, dp, sp) {
35791
35824
  var MARGIN = 36;
35792
35825
  var delta = 1;
35793
35826
  var mu = 500;
35794
- var BIG2 = 16384;
35827
+ var BIG3 = 16384;
35795
35828
  function chanSz(w) {
35796
35829
  return (w - 3) / 2;
35797
35830
  }
@@ -35811,7 +35844,7 @@ function updateWt(ep, sz) {
35811
35844
  ep.cnt++;
35812
35845
  if (ep.cnt > sz) {
35813
35846
  ep.cnt = 0;
35814
- ep.weight += BIG2;
35847
+ ep.weight += BIG3;
35815
35848
  }
35816
35849
  }
35817
35850
  function updateWts(g, cp, ep) {
@@ -35869,12 +35902,12 @@ function createSEdges(cp, g) {
35869
35902
  let vwt = delta * (bb.UR.y - bb.LL.y);
35870
35903
  let wt = (hwt + vwt) / 2 + mu;
35871
35904
  if (isSmall(bb.UR.y - bb.LL.y) && !(cp.flags & MZ_SMALLV)) {
35872
- hwt = BIG2;
35873
- wt = BIG2;
35905
+ hwt = BIG3;
35906
+ wt = BIG3;
35874
35907
  }
35875
35908
  if (isSmall(bb.UR.x - bb.LL.x) && !(cp.flags & MZ_SMALLH)) {
35876
- vwt = BIG2;
35877
- wt = BIG2;
35909
+ vwt = BIG3;
35910
+ wt = BIG3;
35878
35911
  }
35879
35912
  const L2 = cp.sides[M_LEFT];
35880
35913
  const T2 = cp.sides[M_TOP];
@@ -41479,7 +41512,7 @@ function raySeg2(v, w, a, b) {
41479
41512
  }
41480
41513
  return wind(v, a, w) * wind(v, a, b) >= 0;
41481
41514
  }
41482
- var SMALL2 = 1e-10;
41515
+ var SMALL3 = 1e-10;
41483
41516
  function raySegIntersect(v, w, a, b) {
41484
41517
  if (!raySeg2(v, w, a, b)) return null;
41485
41518
  const mv = { x: w.x - v.x, y: w.y - v.y };
@@ -41487,7 +41520,7 @@ function raySegIntersect(v, w, a, b) {
41487
41520
  const ln = { x: -lv.y, y: lv.x };
41488
41521
  const lc = -(ln.x * a.x + ln.y * a.y);
41489
41522
  const dt = ln.x * mv.x + ln.y * mv.y;
41490
- if (Math.abs(dt) < SMALL2) return null;
41523
+ if (Math.abs(dt) < SMALL3) return null;
41491
41524
  const s = (ln.x * v.x + ln.y * v.y + lc) / dt;
41492
41525
  return { x: v.x - s * mv.x, y: v.y - s * mv.y };
41493
41526
  }
@@ -45754,7 +45787,7 @@ function angleSet(g) {
45754
45787
  if (a === void 0 || a === "") return null;
45755
45788
  const ang = parseAngle2(a);
45756
45789
  if (ang === null) return null;
45757
- return wrapDegrees(ang) / 180 * Math.PI;
45790
+ return RADIANS(wrapDegrees(ang));
45758
45791
  }
45759
45792
  function parseAngle2(a) {
45760
45793
  const m = /^\s*[+-]?(?:\d+\.?\d*|\.\d+)(?:[eE][-+]?\d+)?/.exec(a);
@@ -48203,7 +48236,10 @@ var fdpParms = {
48203
48236
  C: 0,
48204
48237
  Tfact: 1,
48205
48238
  K: -1,
48206
- T0: -1
48239
+ T0: -1,
48240
+ /** Distance beyond which repulsion is 0; HUGE_VAL unless `dot -Lm` (no library
48241
+ * equivalent). @see lib/fdpgen/fdp.h:fdpParms_s.Mlimit */
48242
+ Mlimit: Infinity
48207
48243
  };
48208
48244
  var parms = {
48209
48245
  useGrid: 0,
@@ -48531,8 +48567,8 @@ function placeByNeighbors(g, np, ctr) {
48531
48567
  np.info.pos[0] = p.x;
48532
48568
  np.info.pos[1] = p.y;
48533
48569
  } else if (cnt === 1) {
48534
- np.info.pos[0] = 0.98 * p.x + 0.1 * ctr.x;
48535
- np.info.pos[1] = 0.9 * p.y + 0.1 * ctr.y;
48570
+ np.info.pos[0] = fma(0.98, p.x, 0.1 * ctr.x);
48571
+ np.info.pos[1] = fma(0.9, p.y, 0.1 * ctr.y);
48536
48572
  } else {
48537
48573
  const angle = Math.PI * 2 * drand48();
48538
48574
  const radius = 0.9 * drand48();
@@ -48548,8 +48584,8 @@ function averagePlacedNeighbors(g, np, p) {
48548
48584
  const op = ep.head === np ? ep.tail : ep.head;
48549
48585
  if (!hasPos3(op)) continue;
48550
48586
  if (cnt) {
48551
- p.x = (p.x * cnt + op.info.pos[0]) / (cnt + 1);
48552
- p.y = (p.y * cnt + op.info.pos[1]) / (cnt + 1);
48587
+ p.x = fma(p.x, cnt, op.info.pos[0]) / (cnt + 1);
48588
+ p.y = fma(p.y, cnt, op.info.pos[1]) / (cnt + 1);
48553
48589
  } else {
48554
48590
  p.x = op.info.pos[0];
48555
48591
  p.y = op.info.pos[1];
@@ -48611,8 +48647,8 @@ function sizeBoundary(width, height) {
48611
48647
  function placeWithPorts(g, pp, ctr) {
48612
48648
  for (const port of pp) {
48613
48649
  const np = port.n;
48614
- np.info.pos[0] = parms.Wd * Math.cos(port.alpha) + ctr.x;
48615
- np.info.pos[1] = parms.Ht * Math.sin(port.alpha) + ctr.y;
48650
+ np.info.pos[0] = fma(parms.Wd, Math.cos(port.alpha), ctr.x);
48651
+ np.info.pos[1] = fma(parms.Ht, Math.sin(port.alpha), ctr.y);
48616
48652
  dndata(np).pinned = P_SET;
48617
48653
  }
48618
48654
  for (const np of g.nodes.values()) {
@@ -48674,19 +48710,20 @@ function coincidentDelta() {
48674
48710
  } while (xdelta === 0 && ydelta === 0);
48675
48711
  return { xdelta, ydelta };
48676
48712
  }
48677
- function doRep(p, q, xdelta, ydelta, dist22) {
48713
+ function doRep(p, q, xdelta, ydelta, dist4) {
48678
48714
  let force;
48679
- if (dist22 === 0) {
48715
+ if (!(dist4 > 0)) {
48680
48716
  const d = coincidentDelta();
48681
48717
  xdelta = d.xdelta;
48682
48718
  ydelta = d.ydelta;
48683
- dist22 = fma(xdelta, xdelta, ydelta * ydelta);
48719
+ dist4 = libmHypot(xdelta, ydelta);
48684
48720
  }
48685
- if (parms.useNew) {
48686
- const dist4 = Math.sqrt(dist22);
48687
- force = parms.K * parms.K / (dist4 * dist22);
48721
+ if (dist4 > fdpParms.Mlimit) {
48722
+ force = 0;
48723
+ } else if (parms.useNew) {
48724
+ force = parms.K * parms.K / (dist4 * dist4 * dist4);
48688
48725
  } else {
48689
- force = parms.K * parms.K / dist22;
48726
+ force = parms.K * parms.K / (dist4 * dist4);
48690
48727
  }
48691
48728
  if (isPort(p) && isPort(q)) force *= 10;
48692
48729
  const dq = disp(q);
@@ -48699,7 +48736,7 @@ function doRep(p, q, xdelta, ydelta, dist22) {
48699
48736
  function applyRep(p, q) {
48700
48737
  const xdelta = q.info.pos[0] - p.info.pos[0];
48701
48738
  const ydelta = q.info.pos[1] - p.info.pos[1];
48702
- doRep(p, q, xdelta, ydelta, fma(xdelta, xdelta, ydelta * ydelta));
48739
+ doRep(p, q, xdelta, ydelta, libmHypot(xdelta, ydelta));
48703
48740
  }
48704
48741
  function doNeighbor(grid2, i, j, nodes) {
48705
48742
  const cellp = grid2.find(i, j);
@@ -48708,8 +48745,8 @@ function doNeighbor(grid2, i, j, nodes) {
48708
48745
  for (const q of cellp.nodes) {
48709
48746
  const xdelta = q.info.pos[0] - p.info.pos[0];
48710
48747
  const ydelta = q.info.pos[1] - p.info.pos[1];
48711
- const dist22 = fma(xdelta, xdelta, ydelta * ydelta);
48712
- if (dist22 < parms.Cell * parms.Cell) doRep(p, q, xdelta, ydelta, dist22);
48748
+ const dist4 = libmHypot(xdelta, ydelta);
48749
+ if (dist4 < parms.Cell) doRep(p, q, xdelta, ydelta, dist4);
48713
48750
  }
48714
48751
  }
48715
48752
  }
@@ -48881,7 +48918,7 @@ function ht2(n) {
48881
48918
  return xMarg.doAdd ? n.info.height / 2 + xMarg.y : n.info.height * xMarg.y / 2;
48882
48919
  }
48883
48920
  function rad(n) {
48884
- return Math.hypot(wd2(n), ht2(n));
48921
+ return libmHypot(wd2(n), ht2(n));
48885
48922
  }
48886
48923
  function xinitParams(n, xpms) {
48887
48924
  xParams.K = xpms.K;
@@ -48916,37 +48953,38 @@ function cntOverlaps(g) {
48916
48953
  function applyRep2(p, q, rs) {
48917
48954
  let xdelta = q.info.pos[0] - p.info.pos[0];
48918
48955
  let ydelta = q.info.pos[1] - p.info.pos[1];
48919
- let dist22 = xdelta * xdelta + ydelta * ydelta;
48920
- if (dist22 === 0) {
48956
+ let dist4 = libmHypot(xdelta, ydelta);
48957
+ if (!(dist4 > 0)) {
48921
48958
  const d = coincidentDelta();
48922
48959
  xdelta = d.xdelta;
48923
48960
  ydelta = d.ydelta;
48924
- dist22 = xdelta * xdelta + ydelta * ydelta;
48961
+ dist4 = libmHypot(xdelta, ydelta);
48925
48962
  }
48926
48963
  const ov = overlap4(p, q) ? 1 : 0;
48927
- const force = ov ? rs.ov / dist22 : rs.nonov / dist22;
48964
+ let force = ov ? rs.ov / (dist4 * dist4) : rs.nonov / (dist4 * dist4);
48965
+ if (dist4 > fdpParms.Mlimit) force = 0;
48928
48966
  const dq = disp(q);
48929
48967
  const dp = disp(p);
48930
- dq[0] += xdelta * force;
48931
- dq[1] += ydelta * force;
48932
- dp[0] -= xdelta * force;
48933
- dp[1] -= ydelta * force;
48968
+ dq[0] = fma(xdelta, force, dq[0]);
48969
+ dq[1] = fma(ydelta, force, dq[1]);
48970
+ dp[0] = fms(xdelta, force, dp[0]);
48971
+ dp[1] = fms(ydelta, force, dp[1]);
48934
48972
  return ov;
48935
48973
  }
48936
48974
  function applyAttr2(p, q) {
48937
48975
  if (overlap4(p, q)) return;
48938
48976
  const xdelta = q.info.pos[0] - p.info.pos[0];
48939
48977
  const ydelta = q.info.pos[1] - p.info.pos[1];
48940
- const dist4 = Math.hypot(xdelta, ydelta);
48978
+ const dist4 = libmHypot(xdelta, ydelta);
48941
48979
  const din = rad(p) + rad(q);
48942
48980
  const dout = dist4 - din;
48943
48981
  const force = dout * dout / ((xParams.K + din) * dist4);
48944
48982
  const dq = disp(q);
48945
48983
  const dp = disp(p);
48946
- dq[0] -= xdelta * force;
48947
- dq[1] -= ydelta * force;
48948
- dp[0] += xdelta * force;
48949
- dp[1] += ydelta * force;
48984
+ dq[0] = fms(xdelta, force, dq[0]);
48985
+ dq[1] = fms(ydelta, force, dq[1]);
48986
+ dp[0] = fma(xdelta, force, dp[0]);
48987
+ dp[1] = fma(ydelta, force, dp[1]);
48950
48988
  }
48951
48989
  function accumForces(g, rs) {
48952
48990
  let overlaps2 = 0;
@@ -48968,7 +49006,7 @@ function moveNodes(g, temp) {
48968
49006
  if (dndata(n).pinned === P_PIN) continue;
48969
49007
  const dx = disp(n)[0];
48970
49008
  const dy = disp(n)[1];
48971
- const len2 = dx * dx + dy * dy;
49009
+ const len2 = fma(dx, dx, dy * dy);
48972
49010
  if (len2 < temp2) {
48973
49011
  n.info.pos[0] += dx;
48974
49012
  n.info.pos[1] += dy;
@@ -49222,7 +49260,7 @@ function deriveClusterNodes(g, dg, infop) {
49222
49260
  }
49223
49261
  }
49224
49262
  function deriveRealNodes(g, dg) {
49225
- for (const n of g.nodes.values()) {
49263
+ for (const n of nodesInSeq(g)) {
49226
49264
  if (getDnode(n) !== null) continue;
49227
49265
  const par = getParent(n);
49228
49266
  if (par !== null && par !== gdata(g).parent) {
@@ -49264,7 +49302,7 @@ function deriveEdge(dg, byPair, tl, hd) {
49264
49302
  return de;
49265
49303
  }
49266
49304
  function deriveEdges(g, dg, byPair) {
49267
- for (const n of g.nodes.values()) {
49305
+ for (const n of nodesInSeq(g)) {
49268
49306
  const tl = getDnode(n);
49269
49307
  for (const e of n.outEdges(g)) {
49270
49308
  const hd = getDnode(e.head);
@@ -55565,8 +55603,8 @@ async function loadFonts(fontSet, fonts, timeoutMs) {
55565
55603
  var DEFAULT_FONT_TIMEOUT_MS = 3e3;
55566
55604
  function defaultFontSet() {
55567
55605
  const doc = Reflect.get(globalThis, "document");
55568
- if (typeof doc !== "object" || doc === null) return void 0;
55569
- const fonts = Reflect.get(doc, "fonts");
55606
+ const owner = typeof doc === "object" && doc !== null ? doc : globalThis;
55607
+ const fonts = Reflect.get(owner, "fonts");
55570
55608
  if (typeof fonts !== "object" || fonts === null) return void 0;
55571
55609
  return fonts;
55572
55610
  }