@ngroznykh/papirus 0.2.0 → 0.3.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.
- package/dist/elements/Node.d.ts +4 -0
- package/dist/elements/Node.d.ts.map +1 -1
- package/dist/elements/TextLabel.d.ts +4 -2
- package/dist/elements/TextLabel.d.ts.map +1 -1
- package/dist/elements/nodes/CustomShapeNode.d.ts +4 -0
- package/dist/elements/nodes/CustomShapeNode.d.ts.map +1 -1
- package/dist/papirus.js +113 -19
- package/dist/papirus.js.map +1 -1
- package/dist/utils/SvgExporter.d.ts +11 -1
- package/dist/utils/SvgExporter.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/elements/Node.d.ts
CHANGED
|
@@ -19,6 +19,7 @@ export interface NodeOptions {
|
|
|
19
19
|
ports?: PortOptions[];
|
|
20
20
|
showPortsAlways?: boolean;
|
|
21
21
|
anchorPoints?: AnchorPointsConfig;
|
|
22
|
+
resizeHandlesEnabled?: boolean;
|
|
22
23
|
}
|
|
23
24
|
export type ResizeHandle = 'nw' | 'ne' | 'se' | 'sw';
|
|
24
25
|
export type AnchorId = `${'top' | 'right' | 'bottom' | 'left'}:${number}`;
|
|
@@ -44,6 +45,7 @@ export declare abstract class Node extends Element {
|
|
|
44
45
|
protected _anchorPoints: Required<AnchorPointsConfig>;
|
|
45
46
|
protected _defaultSize: Size;
|
|
46
47
|
protected _labelPlacement: LabelPlacement;
|
|
48
|
+
protected _resizeHandlesEnabled: boolean;
|
|
47
49
|
protected constructor(options: NodeOptions);
|
|
48
50
|
/**
|
|
49
51
|
* Node style
|
|
@@ -94,6 +96,8 @@ export declare abstract class Node extends Element {
|
|
|
94
96
|
*/
|
|
95
97
|
get showPortsAlways(): boolean;
|
|
96
98
|
set showPortsAlways(value: boolean);
|
|
99
|
+
get resizeHandlesEnabled(): boolean;
|
|
100
|
+
set resizeHandlesEnabled(value: boolean);
|
|
97
101
|
/**
|
|
98
102
|
* Anchor points configuration (per side)
|
|
99
103
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../src/elements/Node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAc,MAAM,WAAW,CAAC;AAChD,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,EAAE,SAAS,EAAE,KAAK,gBAAgB,EAA8C,MAAM,aAAa,CAAC;AAC3G,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,cAAc,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAC9E,YAAY,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAS/C,MAAM,WAAW,WAAW;IAC1B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,gBAAgB,CAAC;IAClC,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;IACtB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,YAAY,CAAC,EAAE,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"Node.d.ts","sourceRoot":"","sources":["../../src/elements/Node.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,8 +18,8 @@ export declare class TextLabel {
|
|
|
18
18
|
private _localStyle;
|
|
19
19
|
private _maxWidth?;
|
|
20
20
|
private _autoMaxWidth?;
|
|
21
|
-
private
|
|
22
|
-
private
|
|
21
|
+
private _padding;
|
|
22
|
+
private _margin;
|
|
23
23
|
private _lines;
|
|
24
24
|
private _measuredWidth;
|
|
25
25
|
private _measuredHeight;
|
|
@@ -55,10 +55,12 @@ export declare class TextLabel {
|
|
|
55
55
|
* Label padding
|
|
56
56
|
*/
|
|
57
57
|
get padding(): number;
|
|
58
|
+
set padding(value: number);
|
|
58
59
|
/**
|
|
59
60
|
* Label margin
|
|
60
61
|
*/
|
|
61
62
|
get margin(): number;
|
|
63
|
+
set margin(value: number);
|
|
62
64
|
applyStyleManager(styleManager: StyleManager): void;
|
|
63
65
|
setOnChange(handler?: () => void): void;
|
|
64
66
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TextLabel.d.ts","sourceRoot":"","sources":["../../src/elements/TextLabel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAaD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,QAAQ,
|
|
1
|
+
{"version":3,"file":"TextLabel.d.ts","sourceRoot":"","sources":["../../src/elements/TextLabel.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAG1D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;CACvB;AAaD;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,aAAa,CAAC,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,cAAc,CAAK;IAC3B,OAAO,CAAC,eAAe,CAAK;IAC5B,OAAO,CAAC,WAAW,CAAC,CAAS;IAC7B,OAAO,CAAC,SAAS,CAAC,CAAa;IAC/B,OAAO,CAAC,aAAa,CAAQ;gBAEjB,OAAO,EAAE,gBAAgB;IAWrC;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,IAAI,IAAI,CAAC,KAAK,EAAE,MAAM,EAOrB;IAED;;OAEG;IACH,IAAI,KAAK,IAAI,SAAS,CAErB;IAED,IAAI,KAAK,CAAC,KAAK,EAAE,SAAS,EAMzB;IAED;;OAEG;IACH,IAAI,UAAU,IAAI,MAAM,GAAG,SAAS,CAEnC;IAED,IAAI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAOvC;IAED;;OAEG;IACH,IAAI,QAAQ,IAAI,MAAM,GAAG,SAAS,CAEjC;IAED,IAAI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAQrC;IAED;;OAEG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAShD;;OAEG;IACH,IAAI,OAAO,IAAI,MAAM,CAEpB;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,MAAM,EAQxB;IAED;;OAEG;IACH,IAAI,MAAM,IAAI,MAAM,CAEnB;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,MAAM,EAQvB;IAED,iBAAiB,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAWnD,WAAW,CAAC,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAIvC;;OAEG;IACH,IAAI,aAAa,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAI,cAAc,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,OAAO,CAAC,GAAG,EAAE,wBAAwB,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE;IAsCzE;;OAEG;IACH,MAAM,CAAC,GAAG,EAAE,wBAAwB,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IA0C3D;;OAEG;IACH,QAAQ,CAAC,GAAG,EAAE,wBAAwB,EAAE,KAAK,EAAE,KAAK,GAAG,IAAI;IAoB3D,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,QAAQ;CA2BjB"}
|
|
@@ -2,17 +2,21 @@ import { Node, NodeOptions } from '../Node';
|
|
|
2
2
|
import { Point } from '../../types';
|
|
3
3
|
export interface CustomShapeNodeOptions extends NodeOptions {
|
|
4
4
|
path: Path2D | ((width: number, height: number) => Path2D);
|
|
5
|
+
shapeType?: string;
|
|
5
6
|
}
|
|
6
7
|
/**
|
|
7
8
|
* Node with custom Path2D shape
|
|
8
9
|
*/
|
|
9
10
|
export declare class CustomShapeNode extends Node {
|
|
10
11
|
private _pathFactory;
|
|
12
|
+
private _shapeType?;
|
|
11
13
|
private _cachedPath;
|
|
12
14
|
private _cachedWidth;
|
|
13
15
|
private _cachedHeight;
|
|
14
16
|
constructor(options: CustomShapeNodeOptions);
|
|
15
17
|
get typeName(): string;
|
|
18
|
+
get shapeType(): string | undefined;
|
|
19
|
+
set shapeType(value: string | undefined);
|
|
16
20
|
/**
|
|
17
21
|
* Set a new path factory
|
|
18
22
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CustomShapeNode.d.ts","sourceRoot":"","sources":["../../../src/elements/nodes/CustomShapeNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"CustomShapeNode.d.ts","sourceRoot":"","sources":["../../../src/elements/nodes/CustomShapeNode.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAC;AAEjD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAErC,MAAM,WAAW,sBAAuB,SAAQ,WAAW;IACzD,IAAI,EAAE,MAAM,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,IAAI;IACvC,OAAO,CAAC,YAAY,CAA4C;IAChE,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,WAAW,CAAuB;IAC1C,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,aAAa,CAAK;gBAEd,OAAO,EAAE,sBAAsB;IAY3C,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAElC;IAED,IAAI,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAKtC;IAED;;OAEG;IACH,cAAc,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI;IAMxE;;OAEG;IACH,OAAO,IAAI,MAAM;IAaR,OAAO,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAyBvC,MAAM,CAAC,GAAG,EAAE,wBAAwB,GAAG,IAAI;CAe5C;AAED;;GAEG;AACH,eAAO,MAAM,cAAc;IACzB;;OAEG;qBACc,MAAM,UAAU,MAAM,KAAG,MAAM;IAehD;;OAEG;2BACoB,MAAM,UAAU,MAAM,KAAG,MAAM;IAatD;;OAEG;sBACe,MAAM,UAAU,MAAM,KAAG,MAAM;IAgBjD;;OAEG;sBACe,MAAM,UAAU,MAAM,KAAG,MAAM;CAalD,CAAC"}
|
package/dist/papirus.js
CHANGED
|
@@ -1993,12 +1993,30 @@ class TextLabel {
|
|
|
1993
1993
|
get padding() {
|
|
1994
1994
|
return this._padding;
|
|
1995
1995
|
}
|
|
1996
|
+
set padding(value) {
|
|
1997
|
+
const next = Number.isFinite(value) ? Math.max(0, value) : this._padding;
|
|
1998
|
+
if (this._padding !== next) {
|
|
1999
|
+
this._padding = next;
|
|
2000
|
+
this._lines = [];
|
|
2001
|
+
this._measureDirty = true;
|
|
2002
|
+
this._onChange?.();
|
|
2003
|
+
}
|
|
2004
|
+
}
|
|
1996
2005
|
/**
|
|
1997
2006
|
* Label margin
|
|
1998
2007
|
*/
|
|
1999
2008
|
get margin() {
|
|
2000
2009
|
return this._margin;
|
|
2001
2010
|
}
|
|
2011
|
+
set margin(value) {
|
|
2012
|
+
const next = Number.isFinite(value) ? Math.max(0, value) : this._margin;
|
|
2013
|
+
if (this._margin !== next) {
|
|
2014
|
+
this._margin = next;
|
|
2015
|
+
this._lines = [];
|
|
2016
|
+
this._measureDirty = true;
|
|
2017
|
+
this._onChange?.();
|
|
2018
|
+
}
|
|
2019
|
+
}
|
|
2002
2020
|
applyStyleManager(styleManager) {
|
|
2003
2021
|
const baseStyle = styleManager.getTextStyle(this._styleClass);
|
|
2004
2022
|
const mergedStyle = { ...baseStyle, ...this._localStyle };
|
|
@@ -6134,6 +6152,7 @@ class Node extends Element {
|
|
|
6134
6152
|
this._showPortsAlways = options.showPortsAlways ?? false;
|
|
6135
6153
|
this._anchorPoints = this.normalizeAnchorPoints(options.anchorPoints);
|
|
6136
6154
|
this._labelPlacement = options.labelPlacement ?? "auto";
|
|
6155
|
+
this._resizeHandlesEnabled = options.resizeHandlesEnabled ?? true;
|
|
6137
6156
|
if (options.label !== void 0) {
|
|
6138
6157
|
if (typeof options.label === "string") {
|
|
6139
6158
|
this._label = new TextLabel({ text: options.label, onChange: () => this.markDirty() });
|
|
@@ -6295,6 +6314,15 @@ class Node extends Element {
|
|
|
6295
6314
|
this.markDirty();
|
|
6296
6315
|
}
|
|
6297
6316
|
}
|
|
6317
|
+
get resizeHandlesEnabled() {
|
|
6318
|
+
return this._resizeHandlesEnabled;
|
|
6319
|
+
}
|
|
6320
|
+
set resizeHandlesEnabled(value) {
|
|
6321
|
+
if (this._resizeHandlesEnabled !== value) {
|
|
6322
|
+
this._resizeHandlesEnabled = value;
|
|
6323
|
+
this.markDirty();
|
|
6324
|
+
}
|
|
6325
|
+
}
|
|
6298
6326
|
/**
|
|
6299
6327
|
* Anchor points configuration (per side)
|
|
6300
6328
|
*/
|
|
@@ -6481,7 +6509,7 @@ class Node extends Element {
|
|
|
6481
6509
|
* Render resize handles when selected
|
|
6482
6510
|
*/
|
|
6483
6511
|
renderResizeHandles(ctx) {
|
|
6484
|
-
if (this._state !== "selected") {
|
|
6512
|
+
if (this._state !== "selected" || !this._resizeHandlesEnabled) {
|
|
6485
6513
|
return;
|
|
6486
6514
|
}
|
|
6487
6515
|
const bounds = this.getBounds();
|
|
@@ -7271,10 +7299,20 @@ class CustomShapeNode extends Node {
|
|
|
7271
7299
|
} else {
|
|
7272
7300
|
this._pathFactory = options.path;
|
|
7273
7301
|
}
|
|
7302
|
+
this._shapeType = options.shapeType;
|
|
7274
7303
|
}
|
|
7275
7304
|
get typeName() {
|
|
7276
7305
|
return "custom";
|
|
7277
7306
|
}
|
|
7307
|
+
get shapeType() {
|
|
7308
|
+
return this._shapeType;
|
|
7309
|
+
}
|
|
7310
|
+
set shapeType(value) {
|
|
7311
|
+
if (this._shapeType !== value) {
|
|
7312
|
+
this._shapeType = value;
|
|
7313
|
+
this.markDirty();
|
|
7314
|
+
}
|
|
7315
|
+
}
|
|
7278
7316
|
/**
|
|
7279
7317
|
* Set a new path factory
|
|
7280
7318
|
*/
|
|
@@ -8066,6 +8104,7 @@ class SvgExporter {
|
|
|
8066
8104
|
const padding = options.padding ?? 20;
|
|
8067
8105
|
const includeBackground = options.includeBackground ?? true;
|
|
8068
8106
|
const backgroundColor = options.backgroundColor ?? "#ffffff";
|
|
8107
|
+
const edgeLabelOffset = options.edgeLabelOffset ?? 0;
|
|
8069
8108
|
const bounds = getContentBounds({
|
|
8070
8109
|
nodes: this.renderer.nodes.values(),
|
|
8071
8110
|
edges: this.renderer.edges.values(),
|
|
@@ -8085,10 +8124,17 @@ class SvgExporter {
|
|
|
8085
8124
|
this.renderer.nodes.values()
|
|
8086
8125
|
);
|
|
8087
8126
|
const parts = [];
|
|
8127
|
+
const markerDefs = /* @__PURE__ */ new Map();
|
|
8128
|
+
const renderedEdges = [];
|
|
8088
8129
|
parts.push(
|
|
8089
8130
|
`<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}">`
|
|
8090
8131
|
);
|
|
8091
|
-
|
|
8132
|
+
for (const edge of this.renderer.edges.values()) {
|
|
8133
|
+
if (edge.visible) {
|
|
8134
|
+
renderedEdges.push(this.renderEdge(edge, markerDefs, edgeLabelOffset));
|
|
8135
|
+
}
|
|
8136
|
+
}
|
|
8137
|
+
parts.push(this.buildDefs(markerDefs));
|
|
8092
8138
|
if (includeBackground) {
|
|
8093
8139
|
parts.push(`<rect width="100%" height="100%" fill="${backgroundColor}"/>`);
|
|
8094
8140
|
}
|
|
@@ -8098,11 +8144,7 @@ class SvgExporter {
|
|
|
8098
8144
|
parts.push(this.renderGroup(group));
|
|
8099
8145
|
}
|
|
8100
8146
|
}
|
|
8101
|
-
|
|
8102
|
-
if (edge.visible) {
|
|
8103
|
-
parts.push(this.renderEdge(edge));
|
|
8104
|
-
}
|
|
8105
|
-
}
|
|
8147
|
+
parts.push(...renderedEdges);
|
|
8106
8148
|
for (const node of this.renderer.nodes.values()) {
|
|
8107
8149
|
if (node.visible) {
|
|
8108
8150
|
parts.push(this.renderNode(node));
|
|
@@ -8180,7 +8222,7 @@ class SvgExporter {
|
|
|
8180
8222
|
label
|
|
8181
8223
|
].join("");
|
|
8182
8224
|
}
|
|
8183
|
-
renderEdge(edge) {
|
|
8225
|
+
renderEdge(edge, markerDefs, edgeLabelOffset) {
|
|
8184
8226
|
const path = edge.path;
|
|
8185
8227
|
if (path.length < 2) {
|
|
8186
8228
|
return "";
|
|
@@ -8193,11 +8235,59 @@ class SvgExporter {
|
|
|
8193
8235
|
const dash = dashValues ? ` stroke-dasharray="${dashValues.join(" ")}"` : "";
|
|
8194
8236
|
const dashOffset = style.lineDashOffset !== void 0 ? ` stroke-dashoffset="${style.lineDashOffset}"` : "";
|
|
8195
8237
|
const d = this.buildPath(edge);
|
|
8196
|
-
const
|
|
8197
|
-
const
|
|
8198
|
-
const
|
|
8238
|
+
const startMarkerConfig = this.resolveMarkerConfig(edge, "start");
|
|
8239
|
+
const endMarkerConfig = this.resolveMarkerConfig(edge, "end");
|
|
8240
|
+
const markerStart = startMarkerConfig ? ` marker-start="url(#${this.ensureMarkerDef(markerDefs, startMarkerConfig, "start", stroke)})"` : "";
|
|
8241
|
+
const markerEnd = endMarkerConfig ? ` marker-end="url(#${this.ensureMarkerDef(markerDefs, endMarkerConfig, "end", stroke)})"` : "";
|
|
8242
|
+
const label = edge.label ? this.renderTextLabel(edge.label.text, this.getEdgeLabelPoint(edge, edgeLabelOffset), edge.label.style) : "";
|
|
8199
8243
|
return `<path d="${d}" fill="none" stroke="${stroke}" stroke-width="${strokeWidth}" opacity="${opacity}" color="${stroke}"${dash}${dashOffset}${markerStart}${markerEnd}/>${label}`;
|
|
8200
8244
|
}
|
|
8245
|
+
resolveMarkerConfig(edge, side) {
|
|
8246
|
+
const marker = side === "start" ? edge.startMarker : edge.endMarker;
|
|
8247
|
+
if (marker && marker.type !== "none") {
|
|
8248
|
+
return marker;
|
|
8249
|
+
}
|
|
8250
|
+
if (side === "end") {
|
|
8251
|
+
return edge.arrowType === "none" ? null : { type: "arrow" };
|
|
8252
|
+
}
|
|
8253
|
+
return edge.arrowType === "double" ? { type: "arrow" } : null;
|
|
8254
|
+
}
|
|
8255
|
+
ensureMarkerDef(markerDefs, marker, side, stroke) {
|
|
8256
|
+
const size = marker.size ?? 12;
|
|
8257
|
+
const markerStroke = marker.strokeColor ?? stroke;
|
|
8258
|
+
const markerFill = marker.fillColor ?? markerStroke;
|
|
8259
|
+
const fillOpacity = marker.fillOpacity ?? 1;
|
|
8260
|
+
const markerId = this.buildMarkerId(side, marker.type, size, markerFill, markerStroke, fillOpacity);
|
|
8261
|
+
if (!markerDefs.has(markerId)) {
|
|
8262
|
+
const refX = marker.type === "circle" ? 5 : 10;
|
|
8263
|
+
markerDefs.set(
|
|
8264
|
+
markerId,
|
|
8265
|
+
[
|
|
8266
|
+
`<marker id="${markerId}" viewBox="0 0 10 10" refX="${refX}" refY="5" markerWidth="${size}" markerHeight="${size}" orient="auto-start-reverse" markerUnits="userSpaceOnUse">`,
|
|
8267
|
+
this.renderMarkerShape(marker, markerFill, markerStroke, fillOpacity),
|
|
8268
|
+
`</marker>`
|
|
8269
|
+
].join("")
|
|
8270
|
+
);
|
|
8271
|
+
}
|
|
8272
|
+
return markerId;
|
|
8273
|
+
}
|
|
8274
|
+
buildMarkerId(side, type, size, fill, stroke, fillOpacity) {
|
|
8275
|
+
const token = `${side}-${type}-${size}-${fill}-${stroke}-${fillOpacity}`.toLowerCase().replace(/[^a-z0-9_-]+/g, "-");
|
|
8276
|
+
return `marker-${token}`;
|
|
8277
|
+
}
|
|
8278
|
+
renderMarkerShape(marker, fill, stroke, fillOpacity) {
|
|
8279
|
+
switch (marker.type) {
|
|
8280
|
+
case "open":
|
|
8281
|
+
return `<path d="M 10 0 L 0 5 L 10 10" fill="none" stroke="${stroke}" stroke-width="1.6" stroke-linecap="round" stroke-linejoin="round"/>`;
|
|
8282
|
+
case "diamond":
|
|
8283
|
+
return `<path d="M 10 5 L 5 0 L 0 5 L 5 10 z" fill="${fill}" fill-opacity="${fillOpacity}" stroke="${stroke}" stroke-width="1"/>`;
|
|
8284
|
+
case "circle":
|
|
8285
|
+
return `<circle cx="5" cy="5" r="4" fill="${fill}" fill-opacity="${fillOpacity}" stroke="${stroke}" stroke-width="1"/>`;
|
|
8286
|
+
case "arrow":
|
|
8287
|
+
default:
|
|
8288
|
+
return `<path d="M 0 0 L 10 5 L 0 10 z" fill="${fill}" fill-opacity="${fillOpacity}" stroke="${stroke}" stroke-width="1"/>`;
|
|
8289
|
+
}
|
|
8290
|
+
}
|
|
8201
8291
|
buildPath(edge) {
|
|
8202
8292
|
const path = edge.path;
|
|
8203
8293
|
if (edge.type === "bezier" && path.length >= 4) {
|
|
@@ -8246,6 +8336,13 @@ class SvgExporter {
|
|
|
8246
8336
|
}
|
|
8247
8337
|
return path[0];
|
|
8248
8338
|
}
|
|
8339
|
+
getEdgeLabelPoint(edge, edgeLabelOffset) {
|
|
8340
|
+
const midpoint = this.getPathMidpoint(edge);
|
|
8341
|
+
return {
|
|
8342
|
+
x: midpoint.x,
|
|
8343
|
+
y: midpoint.y + edgeLabelOffset
|
|
8344
|
+
};
|
|
8345
|
+
}
|
|
8249
8346
|
renderTextLabel(text, point, style = {}) {
|
|
8250
8347
|
const fill = style.color ?? "#000000";
|
|
8251
8348
|
const fontSize = style.fontSize ?? 14;
|
|
@@ -8257,14 +8354,11 @@ class SvgExporter {
|
|
|
8257
8354
|
text
|
|
8258
8355
|
)}</text>`;
|
|
8259
8356
|
}
|
|
8260
|
-
|
|
8261
|
-
|
|
8262
|
-
"<defs>"
|
|
8263
|
-
|
|
8264
|
-
|
|
8265
|
-
"</marker>",
|
|
8266
|
-
"</defs>"
|
|
8267
|
-
].join("");
|
|
8357
|
+
buildDefs(markerDefs) {
|
|
8358
|
+
if (markerDefs.size === 0) {
|
|
8359
|
+
return "<defs></defs>";
|
|
8360
|
+
}
|
|
8361
|
+
return `<defs>${Array.from(markerDefs.values()).join("")}</defs>`;
|
|
8268
8362
|
}
|
|
8269
8363
|
createEmptySvg(width, height, backgroundColor, includeBackground) {
|
|
8270
8364
|
return [
|