@ngroznykh/papirus 0.8.3 → 0.8.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,WAAW,QAAc,CAAC;AAGvC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAM/C,CAAC;AAGF,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAG9C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAGtC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAG5C,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,kGAAkG;AAClG,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAGhD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAG7C,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,sHAAsH;AACtH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAG5C,2FAA2F;AAC3F,eAAO,MAAM,sCAAsC,IAAI,CAAC;AACxD,sFAAsF;AACtF,eAAO,MAAM,iCAAiC,KAAK,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,UAAU,KAAK,CAAC;AAC7B,eAAO,MAAM,WAAW,QAAc,CAAC;AAGvC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAO/C,CAAC;AAGF,eAAO,MAAM,4BAA4B,IAAI,CAAC;AAG9C,eAAO,MAAM,kBAAkB,IAAI,CAAC;AACpC,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAGtC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AACrC,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAC3C,eAAO,MAAM,0BAA0B,KAAK,CAAC;AAC7C,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAG5C,eAAO,MAAM,iBAAiB,MAAM,CAAC;AAErC,kGAAkG;AAClG,eAAO,MAAM,6BAA6B,KAAK,CAAC;AAGhD,eAAO,MAAM,uBAAuB,IAAI,CAAC;AACzC,eAAO,MAAM,uBAAuB,YAAY,CAAC;AACjD,eAAO,MAAM,mBAAmB,YAAY,CAAC;AAG7C,qDAAqD;AACrD,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,sHAAsH;AACtH,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAG5C,2FAA2F;AAC3F,eAAO,MAAM,sCAAsC,IAAI,CAAC;AACxD,sFAAsF;AACtF,eAAO,MAAM,iCAAiC,KAAK,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"EdgeMarkerRenderer.d.ts","sourceRoot":"","sources":["../../../src/elements/edge/EdgeMarkerRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAQjF,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAevE;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,uBAAuB,GAC/B,IAAI,CA4BN"}
1
+ {"version":3,"file":"EdgeMarkerRenderer.d.ts","sourceRoot":"","sources":["../../../src/elements/edge/EdgeMarkerRenderer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AASjF,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,SAAS,KAAK,EAAE,CAAC;IACvB,IAAI,EAAE,YAAY,CAAC;IACnB,SAAS,EAAE,SAAS,CAAC;IACrB,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC,SAAS,CAAC,EAAE,iBAAiB,CAAC;CAC/B;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,iBAAiB,GAAG,MAAM,CAgBvE;AAED,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,wBAAwB,EAC7B,OAAO,EAAE,uBAAuB,GAC/B,IAAI,CA4BN"}
package/dist/papirus.js CHANGED
@@ -597,6 +597,7 @@ var ARROW_ANGLE = Math.PI / 6;
597
597
  var MARKER_SIZES = {
598
598
  arrow: 12,
599
599
  open: 12,
600
+ stealth: 12,
600
601
  diamond: 14,
601
602
  circle: 6,
602
603
  square: 6
@@ -5787,6 +5788,26 @@ function calculateArrowMarkerPoints(to, angle, size) {
5787
5788
  }
5788
5789
  };
5789
5790
  }
5791
+ /** Heel inset along the edge (fraction of arrow shaft length). Closer to tip = deeper notch. */
5792
+ var STEALTH_HEEL_DEPTH = .82;
5793
+ /**
5794
+ * Stealth (barbed) marker: tip + outer barbs + centerline heel (classic Graphviz stealth).
5795
+ */
5796
+ function calculateStealthMarkerPoints(to, angle, size) {
5797
+ const { left: leftOuter, right: rightOuter } = calculateArrowMarkerPoints(to, angle, size);
5798
+ const cos = Math.cos(angle);
5799
+ const sin = Math.sin(angle);
5800
+ const heelDepth = size * Math.cos(ARROW_ANGLE) * STEALTH_HEEL_DEPTH;
5801
+ return {
5802
+ tip: to,
5803
+ leftOuter,
5804
+ heel: {
5805
+ x: to.x - heelDepth * cos,
5806
+ y: to.y - heelDepth * sin
5807
+ },
5808
+ rightOuter
5809
+ };
5810
+ }
5790
5811
  /**
5791
5812
  * Calculate diamond marker vertex points
5792
5813
  */
@@ -5830,6 +5851,10 @@ function generateSvgArrowMarker(to, angle, size, fill, fillOpacity, stroke) {
5830
5851
  const { left, right } = calculateArrowMarkerPoints(to, angle, size);
5831
5852
  return `<path d="M ${to.x} ${to.y} L ${left.x} ${left.y} L ${right.x} ${right.y} Z" fill="${fill}" fill-opacity="${fillOpacity}" stroke="${stroke}" stroke-width="1"/>`;
5832
5853
  }
5854
+ function generateSvgStealthMarker(to, angle, size, fill, fillOpacity, stroke) {
5855
+ const { tip, leftOuter, heel, rightOuter } = calculateStealthMarkerPoints(to, angle, size);
5856
+ return `<path d="M ${tip.x} ${tip.y} L ${leftOuter.x} ${leftOuter.y} L ${heel.x} ${heel.y} L ${rightOuter.x} ${rightOuter.y} Z" fill="${fill}" fill-opacity="${fillOpacity}" stroke="${stroke}" stroke-width="1"/>`;
5857
+ }
5833
5858
  /**
5834
5859
  * Generate SVG path for open arrow marker
5835
5860
  */
@@ -5893,6 +5918,7 @@ function generateSvgMarker(marker, from, to, edgeStroke) {
5893
5918
  case "diamond": return generateSvgDiamondMarker(to, angle, size, fill, fillOpacity, stroke);
5894
5919
  case "circle": return generateSvgCircleMarker(to, angle, size, fill, fillOpacity, stroke);
5895
5920
  case "square": return generateSvgSquareMarker(to, angle, size, fill, fillOpacity, stroke);
5921
+ case "stealth": return generateSvgStealthMarker(to, angle, size, fill, fillOpacity, stroke);
5896
5922
  default: return generateSvgArrowMarker(to, angle, size, fill, fillOpacity, stroke);
5897
5923
  }
5898
5924
  }
@@ -5901,7 +5927,8 @@ function generateSvgMarker(marker, from, to, edgeStroke) {
5901
5927
  function getCanvasMarkerLength(config) {
5902
5928
  const size = config.size ?? MARKER_SIZES[config.type] ?? 10;
5903
5929
  switch (config.type) {
5904
- case "arrow": return size * Math.cos(ARROW_ANGLE);
5930
+ case "arrow":
5931
+ case "stealth": return size * Math.cos(ARROW_ANGLE);
5905
5932
  case "open": return 0;
5906
5933
  case "diamond": return size;
5907
5934
  case "circle":
@@ -5944,6 +5971,9 @@ function drawMarker(ctx, from, to, config) {
5944
5971
  case "arrow":
5945
5972
  drawArrowMarker(ctx, to, angle, size, fillColor, fillOpacity);
5946
5973
  break;
5974
+ case "stealth":
5975
+ drawStealthMarker(ctx, to, angle, size, fillColor, fillOpacity);
5976
+ break;
5947
5977
  case "open":
5948
5978
  drawOpenArrowMarker(ctx, to, angle, size);
5949
5979
  break;
@@ -5968,6 +5998,16 @@ function drawArrowMarker(ctx, to, angle, size, fillColor, fillOpacity) {
5968
5998
  ctx.closePath();
5969
5999
  fillAndStroke(ctx, fillColor, fillOpacity);
5970
6000
  }
6001
+ function drawStealthMarker(ctx, to, angle, size, fillColor, fillOpacity) {
6002
+ const { tip, leftOuter, heel, rightOuter } = calculateStealthMarkerPoints(to, angle, size);
6003
+ ctx.beginPath();
6004
+ ctx.moveTo(tip.x, tip.y);
6005
+ ctx.lineTo(leftOuter.x, leftOuter.y);
6006
+ ctx.lineTo(heel.x, heel.y);
6007
+ ctx.lineTo(rightOuter.x, rightOuter.y);
6008
+ ctx.closePath();
6009
+ fillAndStroke(ctx, fillColor, fillOpacity);
6010
+ }
5971
6011
  function drawOpenArrowMarker(ctx, to, angle, size) {
5972
6012
  const { left, right } = calculateArrowMarkerPoints(to, angle, size);
5973
6013
  ctx.beginPath();