@knowvah/dot-engine 2.6.0 → 2.6.1

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.
@@ -0,0 +1,14 @@
1
+ import type { Edge } from '../model/edge.js';
2
+ import type { Bezier } from '../model/geom.js';
3
+ import type { ArrowDrawOp } from './arrows-types.js';
4
+ /** Edge end: `tail` pairs with a bezier's sflag/sp, `head` with eflag/ep. */
5
+ export type ArrowEnd = 'head' | 'tail';
6
+ /**
7
+ * The ops C's per-bezier loop draws right after `bz` for `end`, when the edge
8
+ * has several beziers flagged at that end; undefined otherwise (the caller's
9
+ * edge-level path applies).
10
+ */
11
+ export declare function bezierEndOps(e: Edge, bz: Bezier, end: ArrowEnd): ArrowDrawOp[] | undefined;
12
+ /** Every arrow to draw for `end`, one op list per arrow, in bezier order. */
13
+ export declare function endArrowOps(e: Edge, end: ArrowEnd): ArrowDrawOp[][];
14
+ //# sourceMappingURL=bezier-arrows.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bezier-arrows.d.ts","sourceRoot":"","sources":["../../src/common/bezier-arrows.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,6EAA6E;AAC7E,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAkBvC;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE,GAAG,SAAS,CAG1F;AAED,6EAA6E;AAC7E,wBAAgB,WAAW,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,GAAG,WAAW,EAAE,EAAE,CAKnE"}
@@ -1 +1 @@
1
- {"version":3,"file":"postproc.d.ts","sourceRoot":"","sources":["../../src/common/postproc.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAuJ/C;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQ3D;AAyMD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO9E;AAOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,UAAO,GAAG,IAAI,CAiBrE"}
1
+ {"version":3,"file":"postproc.d.ts","sourceRoot":"","sources":["../../src/common/postproc.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAmJ/C;;;GAGG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQ3D;AAyMD;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAO9E;AAOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,gBAAgB,UAAO,GAAG,IAAI,CAiBrE"}
@@ -1 +1 @@
1
- {"version":3,"file":"splines-clip.d.ts","sourceRoot":"","sources":["../../src/common/splines-clip.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAO,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAS7C,gFAAgF;AAChF,eAAO,MAAM,QAAQ,IAAI,CAAC;AAia1B,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAQrD;AAMD,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CA6BlG;AAED;;;GAGG;AACH,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAGxF,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAEvD"}
1
+ {"version":3,"file":"splines-clip.d.ts","sourceRoot":"","sources":["../../src/common/splines-clip.ts"],"names":[],"mappings":"AACA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,KAAK,EAAO,MAAM,kBAAkB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAqB,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAS7C,gFAAgF;AAChF,eAAO,MAAM,QAAQ,IAAI,CAAC;AAqa1B,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAQrD;AAMD,iDAAiD;AACjD,wBAAgB,cAAc,CAAC,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,IAAI,CA6BlG;AAED;;;GAGG;AACH,KAAK,UAAU,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;AAGxF,uEAAuE;AACvE,wBAAgB,WAAW,CAAC,EAAE,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAEvD"}
package/dist/index.js CHANGED
@@ -18589,8 +18589,8 @@ var SplineClipHelper = class _SplineClipHelper {
18589
18589
  sflag,
18590
18590
  eflag
18591
18591
  );
18592
- if (sflag) _SplineClipHelper.stashArrow(orig, newspl.sp, ps[bounds.start], true, startEnd);
18593
- if (eflag) _SplineClipHelper.stashArrow(orig, newspl.ep, ps[bounds.end + 3], false, endEnd);
18592
+ if (sflag) _SplineClipHelper.stashArrow(orig, newspl, newspl.sp, ps[bounds.start], true, startEnd);
18593
+ if (eflag) _SplineClipHelper.stashArrow(orig, newspl, newspl.ep, ps[bounds.end + 3], false, endEnd);
18594
18594
  }
18595
18595
  return;
18596
18596
  }
@@ -18604,7 +18604,7 @@ var SplineClipHelper = class _SplineClipHelper {
18604
18604
  sflag,
18605
18605
  startEnd
18606
18606
  );
18607
- _SplineClipHelper.stashArrow(orig, newspl.sp, ps[bounds.start], true, startEnd);
18607
+ _SplineClipHelper.stashArrow(orig, newspl, newspl.sp, ps[bounds.start], true, startEnd);
18608
18608
  }
18609
18609
  if (eflag) {
18610
18610
  bounds.end = _SplineClipHelper.arrowEndClip(
@@ -18616,7 +18616,7 @@ var SplineClipHelper = class _SplineClipHelper {
18616
18616
  eflag,
18617
18617
  endEnd
18618
18618
  );
18619
- _SplineClipHelper.stashArrow(orig, newspl.ep, ps[bounds.end + 3], false, endEnd);
18619
+ _SplineClipHelper.stashArrow(orig, newspl, newspl.ep, ps[bounds.end + 3], false, endEnd);
18620
18620
  }
18621
18621
  }
18622
18622
  /**
@@ -18714,13 +18714,22 @@ var SplineClipHelper = class _SplineClipHelper {
18714
18714
  spl.sp = p;
18715
18715
  }
18716
18716
  }
18717
- /** Record an arrow polygon on the edge for svgArrowPolygons. */
18718
- static stashArrow(e, tip2, base, isTail, attrEnd) {
18717
+ /**
18718
+ * Record an arrow on the edge end and on the bezier being installed. The
18719
+ * edge slot holds the latest arrow; the bezier keeps its own, since C draws
18720
+ * one per flagged bezier (see common/bezier-arrows.ts).
18721
+ */
18722
+ static stashArrow(e, bz, tip2, base, isTail, attrEnd) {
18719
18723
  const dir = { x: base.x - tip2.x, y: base.y - tip2.y };
18720
18724
  const end = attrEnd ?? (isTail ? "tail" : "head");
18721
18725
  const ops = arrowDrawOpsForEnd(e, end, tip2, dir, _SplineClipHelper.renderPenwidth(e));
18722
- if (isTail) e.info.tailArrowOps = ops;
18723
- else e.info.headArrowOps = ops;
18726
+ if (isTail) {
18727
+ e.info.tailArrowOps = ops;
18728
+ bz.sArrowOps = ops;
18729
+ } else {
18730
+ e.info.headArrowOps = ops;
18731
+ bz.eArrowOps = ops;
18732
+ }
18724
18733
  }
18725
18734
  static clipSide(n, box, ps, pn, tail) {
18726
18735
  const fn = _SplineClipHelper.getInsideFn(n);
@@ -25497,6 +25506,47 @@ function orthoRoundedPolylines(pts, radius) {
25497
25506
  return [...segmentPolylines(pts, corners), ...cornerArcPolylines(corners, radius)];
25498
25507
  }
25499
25508
 
25509
+ // src/common/bezier-arrows.ts
25510
+ var flagOf = (bz, end) => end === "head" ? bz.eflag : bz.sflag;
25511
+ var ownOps = (bz, end) => end === "head" ? bz.eArrowOps : bz.sArrowOps;
25512
+ var edgeOps = (e, end) => end === "head" ? e.info.headArrowOps : e.info.tailArrowOps;
25513
+ function flaggedBeziers(e, end) {
25514
+ const list = e.info.spl?.list ?? [];
25515
+ return list.filter((bz) => bz !== void 0 && flagOf(bz, end) !== 0);
25516
+ }
25517
+ function multiFlagged(e, end) {
25518
+ return flaggedBeziers(e, end).length > 1;
25519
+ }
25520
+ function bezierEndOps(e, bz, end) {
25521
+ if (flagOf(bz, end) === 0 || !multiFlagged(e, end)) return void 0;
25522
+ return ownOps(bz, end) ?? edgeOps(e, end);
25523
+ }
25524
+ function endArrowOps(e, end) {
25525
+ const lists = multiFlagged(e, end) ? flaggedBeziers(e, end).map((bz) => ownOps(bz, end) ?? edgeOps(e, end)) : [edgeOps(e, end)];
25526
+ return lists.filter((ops) => ops !== void 0 && ops.length > 0);
25527
+ }
25528
+
25529
+ // src/render/svg-edge-arrows.ts
25530
+ function emitBezierEndArrow(e, bz, end, st, p) {
25531
+ const tail = end === "tail";
25532
+ const flag = tail ? bz.sflag : bz.eflag;
25533
+ const done = tail ? st.tailDone : st.headDone;
25534
+ const edgeOps2 = tail ? e.info.tailArrowOps : e.info.headArrowOps;
25535
+ const ops = bezierEndOps(e, bz, end) ?? (flag !== 0 && !done && edgeOps2?.length ? edgeOps2 : void 0);
25536
+ if (ops === void 0) return;
25537
+ emitArrowOps(ops, p.penColor, p.job, p.pw, p.opacity);
25538
+ if (tail) st.tailDone = true;
25539
+ else st.headDone = true;
25540
+ }
25541
+ function emitRemainingArrows(e, st, p) {
25542
+ if (!st.tailDone && e.info.tailArrowOps?.length) {
25543
+ emitArrowOps(e.info.tailArrowOps, p.penColor, p.job, p.pw, p.opacity);
25544
+ }
25545
+ if (!st.headDone && e.info.headArrowOps?.length) {
25546
+ emitArrowOps(e.info.headArrowOps, p.penColor, p.job, p.pw, p.opacity);
25547
+ }
25548
+ }
25549
+
25500
25550
  // src/render/svg-graph.ts
25501
25551
  var SVG_XML_DECL = '<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n';
25502
25552
  var SVG_DOCTYPE = '<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"\n "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">\n';
@@ -26028,40 +26078,21 @@ function svgEdgePath(e, job) {
26028
26078
  if (spl === void 0 || spl.size === 0) return;
26029
26079
  const obj = job.obj;
26030
26080
  const stroke = obj !== null ? paintStr(obj, false) : "black";
26081
+ const paint = {
26082
+ job,
26083
+ penColor: stroke,
26084
+ opacity: obj !== null ? colorOpacity(obj.penColor) : null,
26085
+ pw: obj !== null ? obj.penWidth : 1
26086
+ };
26031
26087
  const st = { tailDone: false, headDone: false };
26032
26088
  for (let si = 0; si < spl.size; si++) {
26033
26089
  const bz = spl.list[si];
26034
26090
  if (bz === void 0 || bz.size < 4) continue;
26035
26091
  emitOneBezierPath(bz, stroke, job);
26036
- emitBezierArrows(e, bz, job, st);
26037
- }
26038
- emitRemainingArrows(e, job, st);
26039
- }
26040
- function emitBezierArrows(e, bz, job, st) {
26041
- const obj = job.obj;
26042
- const penColor = obj !== null ? paintStr(obj, false) : "black";
26043
- const opacity = obj !== null ? colorOpacity(obj.penColor) : null;
26044
- const pw = obj !== null ? obj.penWidth : 1;
26045
- if (bz.sflag !== 0 && !st.tailDone && e.info.tailArrowOps?.length) {
26046
- emitArrowOps(e.info.tailArrowOps, penColor, job, pw, opacity);
26047
- st.tailDone = true;
26048
- }
26049
- if (bz.eflag !== 0 && !st.headDone && e.info.headArrowOps?.length) {
26050
- emitArrowOps(e.info.headArrowOps, penColor, job, pw, opacity);
26051
- st.headDone = true;
26052
- }
26053
- }
26054
- function emitRemainingArrows(e, job, st) {
26055
- const obj = job.obj;
26056
- const penColor = obj !== null ? paintStr(obj, false) : "black";
26057
- const opacity = obj !== null ? colorOpacity(obj.penColor) : null;
26058
- const pw = obj !== null ? obj.penWidth : 1;
26059
- if (!st.tailDone && e.info.tailArrowOps?.length) {
26060
- emitArrowOps(e.info.tailArrowOps, penColor, job, pw, opacity);
26061
- }
26062
- if (!st.headDone && e.info.headArrowOps?.length) {
26063
- emitArrowOps(e.info.headArrowOps, penColor, job, pw, opacity);
26092
+ emitBezierEndArrow(e, bz, "tail", st, paint);
26093
+ emitBezierEndArrow(e, bz, "head", st, paint);
26064
26094
  }
26095
+ emitRemainingArrows(e, st, paint);
26065
26096
  }
26066
26097
  function emitOneBezierPath(bz, stroke, job) {
26067
26098
  const obj = job.obj;
@@ -33420,6 +33451,10 @@ function mapEdge(e) {
33420
33451
  mapLabelPos(e.info.tail_label);
33421
33452
  e.info.headArrowOps = mapArrowOps(e.info.headArrowOps);
33422
33453
  e.info.tailArrowOps = mapArrowOps(e.info.tailArrowOps);
33454
+ for (const bz of spl.list) {
33455
+ if (bz.sArrowOps) bz.sArrowOps = mapArrowOps(bz.sArrowOps);
33456
+ if (bz.eArrowOps) bz.eArrowOps = mapArrowOps(bz.eArrowOps);
33457
+ }
33423
33458
  }
33424
33459
  function rotateBb(bb, rankdir) {
33425
33460
  if (rankdir === RANKDIR_LR || rankdir === RANKDIR_BT) {
@@ -37345,6 +37380,11 @@ function swapBezier(b) {
37345
37380
  const sp = b.sp;
37346
37381
  b.sp = b.ep;
37347
37382
  b.ep = sp;
37383
+ if (b.sArrowOps !== void 0 || b.eArrowOps !== void 0) {
37384
+ const so = b.sArrowOps;
37385
+ b.sArrowOps = b.eArrowOps;
37386
+ b.eArrowOps = so;
37387
+ }
37348
37388
  }
37349
37389
  function swapSpline(s) {
37350
37390
  s.list.reverse();
@@ -38471,6 +38511,10 @@ function shiftEdgePoints(e, dx, dy) {
38471
38511
  const shiftOps = (ops) => ops?.map((op) => mapArrowOpPoints(op, (p) => ({ x: p.x + dx, y: p.y + dy })));
38472
38512
  e.info.headArrowOps = shiftOps(e.info.headArrowOps);
38473
38513
  e.info.tailArrowOps = shiftOps(e.info.tailArrowOps);
38514
+ for (const bz of spl.list) {
38515
+ if (bz.sArrowOps) bz.sArrowOps = shiftOps(bz.sArrowOps);
38516
+ if (bz.eArrowOps) bz.eArrowOps = shiftOps(bz.eArrowOps);
38517
+ }
38474
38518
  }
38475
38519
  function shiftOneGraph(g, dx, dy) {
38476
38520
  for (const n of g.nodes.values()) {
@@ -54113,6 +54157,9 @@ var XdotRenderer = class extends EdgeDrawBase {
54113
54157
  headArrowColor = c.headColor;
54114
54158
  } else {
54115
54159
  this.emitPlainSpline(e, spl.list, edraw, job);
54160
+ for (const ops of endArrowOps(e, "tail")) this.emitArrows(this.bufs[2 /* TDraw */], ops, job, 2 /* TDraw */);
54161
+ for (const ops of endArrowOps(e, "head")) this.emitArrows(this.bufs[3 /* HDraw */], ops, job, 3 /* HDraw */);
54162
+ return;
54116
54163
  }
54117
54164
  this.emitArrows(this.bufs[2 /* TDraw */], e.info.tailArrowOps, job, 2 /* TDraw */, tailArrowColor);
54118
54165
  this.emitArrows(this.bufs[3 /* HDraw */], e.info.headArrowOps, job, 3 /* HDraw */, headArrowColor);