@foblex/flow-elk-layout 18.5.0 → 18.6.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.
- package/fesm2022/foblex-flow-elk-layout.mjs +3 -3
- package/fesm2022/foblex-flow-elk-layout.mjs.map +1 -1
- package/index.d.ts +73 -5
- package/package.json +1 -3
- package/esm2022/foblex-flow-elk-layout.mjs +0 -5
- package/esm2022/lib/configurations/default-elk-layout-engine-options.mjs +0 -12
- package/esm2022/lib/configurations/index.mjs +0 -2
- package/esm2022/lib/engines/elk-layout-engine.mjs +0 -149
- package/esm2022/lib/engines/index.mjs +0 -2
- package/esm2022/lib/enums/e-elk-layout-algorithm.mjs +0 -16
- package/esm2022/lib/enums/index.mjs +0 -2
- package/esm2022/lib/index.mjs +0 -5
- package/esm2022/lib/models/i-elk-layout-edge.mjs +0 -2
- package/esm2022/lib/models/i-elk-layout-engine-options.mjs +0 -2
- package/esm2022/lib/models/i-elk-layout-instance.mjs +0 -2
- package/esm2022/lib/models/i-elk-layout-module.mjs +0 -2
- package/esm2022/lib/models/i-elk-layout-node.mjs +0 -2
- package/esm2022/lib/models/i-elk-layout-positioned-node.mjs +0 -2
- package/esm2022/lib/models/i-elk-layout-response.mjs +0 -2
- package/esm2022/lib/models/index.mjs +0 -8
- package/esm2022/public-api.mjs +0 -2
- package/lib/configurations/default-elk-layout-engine-options.d.ts +0 -2
- package/lib/configurations/index.d.ts +0 -1
- package/lib/engines/elk-layout-engine.d.ts +0 -18
- package/lib/engines/index.d.ts +0 -1
- package/lib/enums/e-elk-layout-algorithm.d.ts +0 -14
- package/lib/enums/index.d.ts +0 -1
- package/lib/index.d.ts +0 -4
- package/lib/models/i-elk-layout-edge.d.ts +0 -5
- package/lib/models/i-elk-layout-engine-options.d.ts +0 -5
- package/lib/models/i-elk-layout-instance.d.ts +0 -3
- package/lib/models/i-elk-layout-module.d.ts +0 -4
- package/lib/models/i-elk-layout-node.d.ts +0 -7
- package/lib/models/i-elk-layout-positioned-node.d.ts +0 -4
- package/lib/models/i-elk-layout-response.d.ts +0 -4
- package/lib/models/index.d.ts +0 -7
- package/public-api.d.ts +0 -1
|
@@ -164,10 +164,10 @@ class ElkLayoutEngine extends FLayoutEngine {
|
|
|
164
164
|
return 'DOWN';
|
|
165
165
|
}
|
|
166
166
|
}
|
|
167
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
168
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
167
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ElkLayoutEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
168
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ElkLayoutEngine });
|
|
169
169
|
}
|
|
170
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
170
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.9", ngImport: i0, type: ElkLayoutEngine, decorators: [{
|
|
171
171
|
type: Injectable
|
|
172
172
|
}], ctorParameters: () => [] });
|
|
173
173
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"foblex-flow-elk-layout.mjs","sources":["../../../libs/f-layout/elk/src/lib/enums/e-elk-layout-algorithm.ts","../../../libs/f-layout/elk/src/lib/configurations/default-elk-layout-engine-options.ts","../../../libs/f-layout/elk/src/lib/engines/elk-layout-engine.ts","../../../libs/f-layout/elk/src/foblex-flow-elk-layout.ts"],"sourcesContent":["export enum EElkLayoutAlgorithm {\n FIXED = 'fixed',\n BOX = 'box',\n RANDOM = 'random',\n LAYERED = 'layered',\n STRESS = 'stress',\n MRTREE = 'mrtree',\n RADIAL = 'radial',\n FORCE = 'force',\n DISCO = 'disco',\n SPORE_OVERLAP = 'sporeOverlap',\n SPORE_COMPACTION = 'sporeCompaction',\n RECT_PACKING = 'rectpacking',\n}\n","import { SizeExtensions } from '@foblex/2d';\nimport { EFLayoutDirection } from '@foblex/flow';\nimport { EElkLayoutAlgorithm } from '../enums';\nimport { IElkLayoutEngineOptions } from '../models';\n\nexport const DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS: IElkLayoutEngineOptions = {\n direction: EFLayoutDirection.TOP_BOTTOM,\n nodeGap: 48,\n layerGap: 48,\n algorithm: EElkLayoutAlgorithm.LAYERED,\n defaultNodeSize: SizeExtensions.initialize(120, 72),\n layoutOptions: {},\n};\n","import { Injectable } from '@angular/core';\nimport { IPoint, PointExtensions, SizeExtensions } from '@foblex/2d';\nimport {\n EFLayoutDirection,\n FLayoutEngine,\n IFLayoutCalculationOptions,\n IFLayoutConnection,\n IFLayoutNode,\n IFLayoutResult,\n mergeLayoutNodes,\n} from '@foblex/flow';\nimport { DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS } from '../configurations';\nimport { EElkLayoutAlgorithm } from '../enums';\nimport {\n IElkLayoutEdge,\n IElkLayoutEngineOptions,\n IElkLayoutModule,\n IElkLayoutNode,\n IElkLayoutResponse,\n} from '../models';\n\n@Injectable()\nexport class ElkLayoutEngine extends FLayoutEngine<IElkLayoutEngineOptions> {\n private _elkCtor?: Promise<IElkLayoutModule>;\n\n public constructor() {\n super(DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS);\n }\n\n protected override mergeOptions(\n currentOptions: IElkLayoutEngineOptions,\n nextOptions: Partial<IElkLayoutEngineOptions> = {},\n ): IElkLayoutEngineOptions {\n return {\n ...currentOptions,\n ...nextOptions,\n defaultNodeSize: nextOptions.defaultNodeSize\n ? SizeExtensions.initialize(\n nextOptions.defaultNodeSize.width,\n nextOptions.defaultNodeSize.height,\n )\n : SizeExtensions.initialize(\n currentOptions.defaultNodeSize.width,\n currentOptions.defaultNodeSize.height,\n ),\n layoutOptions: {\n ...(currentOptions.layoutOptions || {}),\n ...(nextOptions.layoutOptions || {}),\n },\n };\n }\n\n public override async calculate(\n nodes: IFLayoutNode[],\n connections: IFLayoutConnection[],\n options?: IFLayoutCalculationOptions<IElkLayoutEngineOptions>,\n ): Promise<IFLayoutResult> {\n const layoutOptions = this.resolveLayoutOptions(options);\n const elkModule = await this._loadElk();\n const layout = (await new elkModule.default().layout(\n this._buildLayoutConfiguration(nodes, connections, layoutOptions),\n )) as IElkLayoutResponse;\n const positions = new Map<string, IPoint>();\n\n layout.children?.forEach((node) => {\n positions.set(node.id, PointExtensions.initialize(node.x, node.y));\n });\n\n return {\n nodes: mergeLayoutNodes(nodes, positions),\n };\n }\n\n private _buildLayoutConfiguration(\n nodes: IFLayoutNode[],\n connections: IFLayoutConnection[],\n options: IElkLayoutEngineOptions,\n ): {\n id: string;\n layoutOptions: Record<string, string>;\n children: IElkLayoutNode[];\n edges: IElkLayoutEdge[];\n } {\n const layoutOptions: Record<string, string> = {\n 'elk.algorithm': this._mapAlgorithm(options.algorithm),\n 'elk.direction': this._mapDirection(options.direction),\n 'spacing.nodeNode': `${options.nodeGap}`,\n 'spacing.nodeNodeBetweenLayers': `${options.layerGap}`,\n ...(options.layoutOptions || {}),\n };\n const graphNodes = nodes.map((node) => this._buildGraphNode(node, options.defaultNodeSize));\n const graphEdges = connections.reduce<IElkLayoutEdge[]>((result, connection, index) => {\n if (!graphNodes.some((node) => node.id === connection.source)) {\n return result;\n }\n\n if (!graphNodes.some((node) => node.id === connection.target)) {\n return result;\n }\n\n result.push({\n id: this._createEdgeId(connection, index),\n sources: [connection.source],\n targets: [connection.target],\n });\n\n return result;\n }, []);\n\n return {\n id: 'root',\n layoutOptions,\n children: graphNodes,\n edges: graphEdges,\n };\n }\n\n private _buildGraphNode(\n node: IFLayoutNode,\n defaultNodeSize: { width: number; height: number },\n ): IElkLayoutNode {\n const size = node.size ?? defaultNodeSize;\n const graphNode: IElkLayoutNode = {\n id: node.id,\n width: size.width,\n height: size.height,\n };\n const position = this._getNodePosition(node);\n\n if (!position) {\n return graphNode;\n }\n\n return {\n ...graphNode,\n x: position.x,\n y: position.y,\n };\n }\n\n private _loadElk(): Promise<IElkLayoutModule> {\n if (!this._elkCtor) {\n this._elkCtor = import('elkjs/lib/elk.bundled');\n }\n\n return this._elkCtor;\n }\n\n private _getNodePosition(node: IFLayoutNode): IPoint | null {\n const positionedNode = node as IFLayoutNode & { position?: IPoint };\n\n if (!positionedNode.position) {\n return null;\n }\n\n return positionedNode.position;\n }\n\n private _mapAlgorithm(algorithm: EElkLayoutAlgorithm): string {\n switch (algorithm) {\n case EElkLayoutAlgorithm.FIXED:\n return 'fixed';\n case EElkLayoutAlgorithm.BOX:\n return 'box';\n case EElkLayoutAlgorithm.RANDOM:\n return 'random';\n case EElkLayoutAlgorithm.LAYERED:\n return 'layered';\n case EElkLayoutAlgorithm.STRESS:\n return 'stress';\n case EElkLayoutAlgorithm.MRTREE:\n return 'mrtree';\n case EElkLayoutAlgorithm.RADIAL:\n return 'radial';\n case EElkLayoutAlgorithm.FORCE:\n return 'force';\n case EElkLayoutAlgorithm.DISCO:\n return 'disco';\n case EElkLayoutAlgorithm.SPORE_OVERLAP:\n return 'sporeOverlap';\n case EElkLayoutAlgorithm.SPORE_COMPACTION:\n return 'sporeCompaction';\n case EElkLayoutAlgorithm.RECT_PACKING:\n return 'rectpacking';\n default:\n return 'layered';\n }\n }\n\n private _createEdgeId(connection: IFLayoutConnection, index: number): string {\n return `${connection.source}->${connection.target}-${index}`;\n }\n\n private _mapDirection(direction: EFLayoutDirection): 'DOWN' | 'UP' | 'RIGHT' | 'LEFT' {\n switch (direction) {\n case EFLayoutDirection.BOTTOM_TOP:\n return 'UP';\n case EFLayoutDirection.LEFT_RIGHT:\n return 'RIGHT';\n case EFLayoutDirection.RIGHT_LEFT:\n return 'LEFT';\n case EFLayoutDirection.TOP_BOTTOM:\n default:\n return 'DOWN';\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":";;;;;IAAY,oBAaX;AAbD,CAAA,UAAY,mBAAmB,EAAA;AAC7B,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,mBAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,SAAA,CAAA,GAAA,SAAmB,CAAA;AACnB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACjB,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,mBAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,mBAAA,CAAA,eAAA,CAAA,GAAA,cAA8B,CAAA;AAC9B,IAAA,mBAAA,CAAA,kBAAA,CAAA,GAAA,iBAAoC,CAAA;AACpC,IAAA,mBAAA,CAAA,cAAA,CAAA,GAAA,aAA4B,CAAA;AAC9B,CAAC,EAbW,mBAAmB,KAAnB,mBAAmB,GAa9B,EAAA,CAAA,CAAA;;ACRY,MAAA,iCAAiC,GAA4B;IACxE,SAAS,EAAE,iBAAiB,CAAC,UAAU;AACvC,IAAA,OAAO,EAAE,EAAE;AACX,IAAA,QAAQ,EAAE,EAAE;IACZ,SAAS,EAAE,mBAAmB,CAAC,OAAO;IACtC,eAAe,EAAE,cAAc,CAAC,UAAU,CAAC,GAAG,EAAE,EAAE,CAAC;AACnD,IAAA,aAAa,EAAE,EAAE;;;ACWb,MAAO,eAAgB,SAAQ,aAAsC,CAAA;AACjE,IAAA,QAAQ,CAA6B;AAE7C,IAAA,WAAA,GAAA;QACE,KAAK,CAAC,iCAAiC,CAAC,CAAC;KAC1C;AAEkB,IAAA,YAAY,CAC7B,cAAuC,EACvC,WAAA,GAAgD,EAAE,EAAA;QAElD,OAAO;AACL,YAAA,GAAG,cAAc;AACjB,YAAA,GAAG,WAAW;YACd,eAAe,EAAE,WAAW,CAAC,eAAe;AAC1C,kBAAE,cAAc,CAAC,UAAU,CACvB,WAAW,CAAC,eAAe,CAAC,KAAK,EACjC,WAAW,CAAC,eAAe,CAAC,MAAM,CACnC;AACH,kBAAE,cAAc,CAAC,UAAU,CACvB,cAAc,CAAC,eAAe,CAAC,KAAK,EACpC,cAAc,CAAC,eAAe,CAAC,MAAM,CACtC;AACL,YAAA,aAAa,EAAE;AACb,gBAAA,IAAI,cAAc,CAAC,aAAa,IAAI,EAAE,CAAC;AACvC,gBAAA,IAAI,WAAW,CAAC,aAAa,IAAI,EAAE,CAAC;AACrC,aAAA;SACF,CAAC;KACH;AAEe,IAAA,MAAM,SAAS,CAC7B,KAAqB,EACrB,WAAiC,EACjC,OAA6D,EAAA;QAE7D,MAAM,aAAa,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;AACzD,QAAA,MAAM,SAAS,GAAG,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,MAAM,IAAI,MAAM,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC,MAAM,CAClD,IAAI,CAAC,yBAAyB,CAAC,KAAK,EAAE,WAAW,EAAE,aAAa,CAAC,CAClE,CAAuB,CAAC;AACzB,QAAA,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;QAE5C,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,IAAI,KAAI;YAChC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrE,SAAC,CAAC,CAAC;QAEH,OAAO;AACL,YAAA,KAAK,EAAE,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC;SAC1C,CAAC;KACH;AAEO,IAAA,yBAAyB,CAC/B,KAAqB,EACrB,WAAiC,EACjC,OAAgC,EAAA;AAOhC,QAAA,MAAM,aAAa,GAA2B;YAC5C,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;YACtD,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,SAAS,CAAC;AACtD,YAAA,kBAAkB,EAAE,CAAA,EAAG,OAAO,CAAC,OAAO,CAAE,CAAA;AACxC,YAAA,+BAA+B,EAAE,CAAA,EAAG,OAAO,CAAC,QAAQ,CAAE,CAAA;AACtD,YAAA,IAAI,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;SACjC,CAAC;QACF,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,eAAe,CAAC,IAAI,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC;AAC5F,QAAA,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,CAAmB,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,KAAI;AACpF,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,MAAM,CAAC,EAAE;AAC7D,gBAAA,OAAO,MAAM,CAAC;aACf;AAED,YAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,KAAK,UAAU,CAAC,MAAM,CAAC,EAAE;AAC7D,gBAAA,OAAO,MAAM,CAAC;aACf;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,CAAC;AACzC,gBAAA,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;AAC5B,gBAAA,OAAO,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC;AAC7B,aAAA,CAAC,CAAC;AAEH,YAAA,OAAO,MAAM,CAAC;SACf,EAAE,EAAE,CAAC,CAAC;QAEP,OAAO;AACL,YAAA,EAAE,EAAE,MAAM;YACV,aAAa;AACb,YAAA,QAAQ,EAAE,UAAU;AACpB,YAAA,KAAK,EAAE,UAAU;SAClB,CAAC;KACH;IAEO,eAAe,CACrB,IAAkB,EAClB,eAAkD,EAAA;AAElD,QAAA,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,eAAe,CAAC;AAC1C,QAAA,MAAM,SAAS,GAAmB;YAChC,EAAE,EAAE,IAAI,CAAC,EAAE;YACX,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,MAAM,EAAE,IAAI,CAAC,MAAM;SACpB,CAAC;QACF,MAAM,QAAQ,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE7C,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,OAAO,SAAS,CAAC;SAClB;QAED,OAAO;AACL,YAAA,GAAG,SAAS;YACZ,CAAC,EAAE,QAAQ,CAAC,CAAC;YACb,CAAC,EAAE,QAAQ,CAAC,CAAC;SACd,CAAC;KACH;IAEO,QAAQ,GAAA;AACd,QAAA,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;AAClB,YAAA,IAAI,CAAC,QAAQ,GAAG,OAAO,uBAAuB,CAAC,CAAC;SACjD;QAED,OAAO,IAAI,CAAC,QAAQ,CAAC;KACtB;AAEO,IAAA,gBAAgB,CAAC,IAAkB,EAAA;QACzC,MAAM,cAAc,GAAG,IAA4C,CAAC;AAEpE,QAAA,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE;AAC5B,YAAA,OAAO,IAAI,CAAC;SACb;QAED,OAAO,cAAc,CAAC,QAAQ,CAAC;KAChC;AAEO,IAAA,aAAa,CAAC,SAA8B,EAAA;QAClD,QAAQ,SAAS;YACf,KAAK,mBAAmB,CAAC,KAAK;AAC5B,gBAAA,OAAO,OAAO,CAAC;YACjB,KAAK,mBAAmB,CAAC,GAAG;AAC1B,gBAAA,OAAO,KAAK,CAAC;YACf,KAAK,mBAAmB,CAAC,MAAM;AAC7B,gBAAA,OAAO,QAAQ,CAAC;YAClB,KAAK,mBAAmB,CAAC,OAAO;AAC9B,gBAAA,OAAO,SAAS,CAAC;YACnB,KAAK,mBAAmB,CAAC,MAAM;AAC7B,gBAAA,OAAO,QAAQ,CAAC;YAClB,KAAK,mBAAmB,CAAC,MAAM;AAC7B,gBAAA,OAAO,QAAQ,CAAC;YAClB,KAAK,mBAAmB,CAAC,MAAM;AAC7B,gBAAA,OAAO,QAAQ,CAAC;YAClB,KAAK,mBAAmB,CAAC,KAAK;AAC5B,gBAAA,OAAO,OAAO,CAAC;YACjB,KAAK,mBAAmB,CAAC,KAAK;AAC5B,gBAAA,OAAO,OAAO,CAAC;YACjB,KAAK,mBAAmB,CAAC,aAAa;AACpC,gBAAA,OAAO,cAAc,CAAC;YACxB,KAAK,mBAAmB,CAAC,gBAAgB;AACvC,gBAAA,OAAO,iBAAiB,CAAC;YAC3B,KAAK,mBAAmB,CAAC,YAAY;AACnC,gBAAA,OAAO,aAAa,CAAC;AACvB,YAAA;AACE,gBAAA,OAAO,SAAS,CAAC;SACpB;KACF;IAEO,aAAa,CAAC,UAA8B,EAAE,KAAa,EAAA;QACjE,OAAO,CAAA,EAAG,UAAU,CAAC,MAAM,CAAA,EAAA,EAAK,UAAU,CAAC,MAAM,CAAA,CAAA,EAAI,KAAK,CAAA,CAAE,CAAC;KAC9D;AAEO,IAAA,aAAa,CAAC,SAA4B,EAAA;QAChD,QAAQ,SAAS;YACf,KAAK,iBAAiB,CAAC,UAAU;AAC/B,gBAAA,OAAO,IAAI,CAAC;YACd,KAAK,iBAAiB,CAAC,UAAU;AAC/B,gBAAA,OAAO,OAAO,CAAC;YACjB,KAAK,iBAAiB,CAAC,UAAU;AAC/B,gBAAA,OAAO,MAAM,CAAC;YAChB,KAAK,iBAAiB,CAAC,UAAU,CAAC;AAClC,YAAA;AACE,gBAAA,OAAO,MAAM,CAAC;SACjB;KACF;wGAvLU,eAAe,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA;4GAAf,eAAe,EAAA,CAAA,CAAA;;4FAAf,eAAe,EAAA,UAAA,EAAA,CAAA;kBAD3B,UAAU;;;ACrBX;;AAEG;;;;"}
|
|
1
|
+
{"version":3,"file":"foblex-flow-elk-layout.mjs","sources":["../../../libs/f-layout/elk/src/lib/enums/e-elk-layout-algorithm.ts","../../../libs/f-layout/elk/src/lib/configurations/default-elk-layout-engine-options.ts","../../../libs/f-layout/elk/src/lib/engines/elk-layout-engine.ts","../../../libs/f-layout/elk/src/foblex-flow-elk-layout.ts"],"sourcesContent":["export enum EElkLayoutAlgorithm {\n FIXED = 'fixed',\n BOX = 'box',\n RANDOM = 'random',\n LAYERED = 'layered',\n STRESS = 'stress',\n MRTREE = 'mrtree',\n RADIAL = 'radial',\n FORCE = 'force',\n DISCO = 'disco',\n SPORE_OVERLAP = 'sporeOverlap',\n SPORE_COMPACTION = 'sporeCompaction',\n RECT_PACKING = 'rectpacking',\n}\n","import { SizeExtensions } from '@foblex/2d';\nimport { EFLayoutDirection } from '@foblex/flow';\nimport { EElkLayoutAlgorithm } from '../enums';\nimport { IElkLayoutEngineOptions } from '../models';\n\nexport const DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS: IElkLayoutEngineOptions = {\n direction: EFLayoutDirection.TOP_BOTTOM,\n nodeGap: 48,\n layerGap: 48,\n algorithm: EElkLayoutAlgorithm.LAYERED,\n defaultNodeSize: SizeExtensions.initialize(120, 72),\n layoutOptions: {},\n};\n","import { Injectable } from '@angular/core';\nimport { IPoint, PointExtensions, SizeExtensions } from '@foblex/2d';\nimport {\n EFLayoutDirection,\n FLayoutEngine,\n IFLayoutCalculationOptions,\n IFLayoutConnection,\n IFLayoutNode,\n IFLayoutResult,\n mergeLayoutNodes,\n} from '@foblex/flow';\nimport { DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS } from '../configurations';\nimport { EElkLayoutAlgorithm } from '../enums';\nimport {\n IElkLayoutEdge,\n IElkLayoutEngineOptions,\n IElkLayoutModule,\n IElkLayoutNode,\n IElkLayoutResponse,\n} from '../models';\n\n@Injectable()\nexport class ElkLayoutEngine extends FLayoutEngine<IElkLayoutEngineOptions> {\n private _elkCtor?: Promise<IElkLayoutModule>;\n\n public constructor() {\n super(DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS);\n }\n\n protected override mergeOptions(\n currentOptions: IElkLayoutEngineOptions,\n nextOptions: Partial<IElkLayoutEngineOptions> = {},\n ): IElkLayoutEngineOptions {\n return {\n ...currentOptions,\n ...nextOptions,\n defaultNodeSize: nextOptions.defaultNodeSize\n ? SizeExtensions.initialize(\n nextOptions.defaultNodeSize.width,\n nextOptions.defaultNodeSize.height,\n )\n : SizeExtensions.initialize(\n currentOptions.defaultNodeSize.width,\n currentOptions.defaultNodeSize.height,\n ),\n layoutOptions: {\n ...(currentOptions.layoutOptions || {}),\n ...(nextOptions.layoutOptions || {}),\n },\n };\n }\n\n public override async calculate(\n nodes: IFLayoutNode[],\n connections: IFLayoutConnection[],\n options?: IFLayoutCalculationOptions<IElkLayoutEngineOptions>,\n ): Promise<IFLayoutResult> {\n const layoutOptions = this.resolveLayoutOptions(options);\n const elkModule = await this._loadElk();\n const layout = (await new elkModule.default().layout(\n this._buildLayoutConfiguration(nodes, connections, layoutOptions),\n )) as IElkLayoutResponse;\n const positions = new Map<string, IPoint>();\n\n layout.children?.forEach((node) => {\n positions.set(node.id, PointExtensions.initialize(node.x, node.y));\n });\n\n return {\n nodes: mergeLayoutNodes(nodes, positions),\n };\n }\n\n private _buildLayoutConfiguration(\n nodes: IFLayoutNode[],\n connections: IFLayoutConnection[],\n options: IElkLayoutEngineOptions,\n ): {\n id: string;\n layoutOptions: Record<string, string>;\n children: IElkLayoutNode[];\n edges: IElkLayoutEdge[];\n } {\n const layoutOptions: Record<string, string> = {\n 'elk.algorithm': this._mapAlgorithm(options.algorithm),\n 'elk.direction': this._mapDirection(options.direction),\n 'spacing.nodeNode': `${options.nodeGap}`,\n 'spacing.nodeNodeBetweenLayers': `${options.layerGap}`,\n ...(options.layoutOptions || {}),\n };\n const graphNodes = nodes.map((node) => this._buildGraphNode(node, options.defaultNodeSize));\n const graphEdges = connections.reduce<IElkLayoutEdge[]>((result, connection, index) => {\n if (!graphNodes.some((node) => node.id === connection.source)) {\n return result;\n }\n\n if (!graphNodes.some((node) => node.id === connection.target)) {\n return result;\n }\n\n result.push({\n id: this._createEdgeId(connection, index),\n sources: [connection.source],\n targets: [connection.target],\n });\n\n return result;\n }, []);\n\n return {\n id: 'root',\n layoutOptions,\n children: graphNodes,\n edges: graphEdges,\n };\n }\n\n private _buildGraphNode(\n node: IFLayoutNode,\n defaultNodeSize: { width: number; height: number },\n ): IElkLayoutNode {\n const size = node.size ?? defaultNodeSize;\n const graphNode: IElkLayoutNode = {\n id: node.id,\n width: size.width,\n height: size.height,\n };\n const position = this._getNodePosition(node);\n\n if (!position) {\n return graphNode;\n }\n\n return {\n ...graphNode,\n x: position.x,\n y: position.y,\n };\n }\n\n private _loadElk(): Promise<IElkLayoutModule> {\n if (!this._elkCtor) {\n this._elkCtor = import('elkjs/lib/elk.bundled');\n }\n\n return this._elkCtor;\n }\n\n private _getNodePosition(node: IFLayoutNode): IPoint | null {\n const positionedNode = node as IFLayoutNode & { position?: IPoint };\n\n if (!positionedNode.position) {\n return null;\n }\n\n return positionedNode.position;\n }\n\n private _mapAlgorithm(algorithm: EElkLayoutAlgorithm): string {\n switch (algorithm) {\n case EElkLayoutAlgorithm.FIXED:\n return 'fixed';\n case EElkLayoutAlgorithm.BOX:\n return 'box';\n case EElkLayoutAlgorithm.RANDOM:\n return 'random';\n case EElkLayoutAlgorithm.LAYERED:\n return 'layered';\n case EElkLayoutAlgorithm.STRESS:\n return 'stress';\n case EElkLayoutAlgorithm.MRTREE:\n return 'mrtree';\n case EElkLayoutAlgorithm.RADIAL:\n return 'radial';\n case EElkLayoutAlgorithm.FORCE:\n return 'force';\n case EElkLayoutAlgorithm.DISCO:\n return 'disco';\n case EElkLayoutAlgorithm.SPORE_OVERLAP:\n return 'sporeOverlap';\n case EElkLayoutAlgorithm.SPORE_COMPACTION:\n return 'sporeCompaction';\n case EElkLayoutAlgorithm.RECT_PACKING:\n return 'rectpacking';\n default:\n return 'layered';\n }\n }\n\n private _createEdgeId(connection: IFLayoutConnection, index: number): string {\n return `${connection.source}->${connection.target}-${index}`;\n }\n\n private _mapDirection(direction: EFLayoutDirection): 'DOWN' | 'UP' | 'RIGHT' | 'LEFT' {\n switch (direction) {\n case EFLayoutDirection.BOTTOM_TOP:\n return 'UP';\n case EFLayoutDirection.LEFT_RIGHT:\n return 'RIGHT';\n case EFLayoutDirection.RIGHT_LEFT:\n return 'LEFT';\n case EFLayoutDirection.TOP_BOTTOM:\n default:\n return 'DOWN';\n }\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,73 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { IFLayoutAlgorithmOptions, FLayoutEngine, IFLayoutNode, IFLayoutConnection, IFLayoutCalculationOptions, IFLayoutResult } from '@foblex/flow';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
import { IPoint } from '@foblex/2d';
|
|
4
|
+
|
|
5
|
+
interface IElkLayoutEdge {
|
|
6
|
+
id: string;
|
|
7
|
+
sources: string[];
|
|
8
|
+
targets: string[];
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
declare enum EElkLayoutAlgorithm {
|
|
12
|
+
FIXED = "fixed",
|
|
13
|
+
BOX = "box",
|
|
14
|
+
RANDOM = "random",
|
|
15
|
+
LAYERED = "layered",
|
|
16
|
+
STRESS = "stress",
|
|
17
|
+
MRTREE = "mrtree",
|
|
18
|
+
RADIAL = "radial",
|
|
19
|
+
FORCE = "force",
|
|
20
|
+
DISCO = "disco",
|
|
21
|
+
SPORE_OVERLAP = "sporeOverlap",
|
|
22
|
+
SPORE_COMPACTION = "sporeCompaction",
|
|
23
|
+
RECT_PACKING = "rectpacking"
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
interface IElkLayoutEngineOptions extends IFLayoutAlgorithmOptions<EElkLayoutAlgorithm> {
|
|
27
|
+
layoutOptions?: Record<string, string>;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface IElkLayoutInstance {
|
|
31
|
+
layout(config: unknown): Promise<unknown>;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
interface IElkLayoutModule {
|
|
35
|
+
default: new () => IElkLayoutInstance;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface IElkLayoutNode {
|
|
39
|
+
id: string;
|
|
40
|
+
width: number;
|
|
41
|
+
height: number;
|
|
42
|
+
x?: number;
|
|
43
|
+
y?: number;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
interface IElkLayoutPositionedNode extends IPoint {
|
|
47
|
+
id: string;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
interface IElkLayoutResponse {
|
|
51
|
+
children?: IElkLayoutPositionedNode[];
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
declare const DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS: IElkLayoutEngineOptions;
|
|
55
|
+
|
|
56
|
+
declare class ElkLayoutEngine extends FLayoutEngine<IElkLayoutEngineOptions> {
|
|
57
|
+
private _elkCtor?;
|
|
58
|
+
constructor();
|
|
59
|
+
protected mergeOptions(currentOptions: IElkLayoutEngineOptions, nextOptions?: Partial<IElkLayoutEngineOptions>): IElkLayoutEngineOptions;
|
|
60
|
+
calculate(nodes: IFLayoutNode[], connections: IFLayoutConnection[], options?: IFLayoutCalculationOptions<IElkLayoutEngineOptions>): Promise<IFLayoutResult>;
|
|
61
|
+
private _buildLayoutConfiguration;
|
|
62
|
+
private _buildGraphNode;
|
|
63
|
+
private _loadElk;
|
|
64
|
+
private _getNodePosition;
|
|
65
|
+
private _mapAlgorithm;
|
|
66
|
+
private _createEdgeId;
|
|
67
|
+
private _mapDirection;
|
|
68
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<ElkLayoutEngine, never>;
|
|
69
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<ElkLayoutEngine>;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export { DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS, EElkLayoutAlgorithm, ElkLayoutEngine };
|
|
73
|
+
export type { IElkLayoutEdge, IElkLayoutEngineOptions, IElkLayoutInstance, IElkLayoutModule, IElkLayoutNode, IElkLayoutPositionedNode, IElkLayoutResponse };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@foblex/flow-elk-layout",
|
|
3
|
-
"version": "18.
|
|
3
|
+
"version": "18.6.0",
|
|
4
4
|
"description": "ELK.js layout engine adapter for Foblex Flow.",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -45,8 +45,6 @@
|
|
|
45
45
|
},
|
|
46
46
|
".": {
|
|
47
47
|
"types": "./index.d.ts",
|
|
48
|
-
"esm2022": "./esm2022/foblex-flow-elk-layout.mjs",
|
|
49
|
-
"esm": "./esm2022/foblex-flow-elk-layout.mjs",
|
|
50
48
|
"default": "./fesm2022/foblex-flow-elk-layout.mjs"
|
|
51
49
|
}
|
|
52
50
|
}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Generated bundle index. Do not edit.
|
|
3
|
-
*/
|
|
4
|
-
export * from './public-api';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ibGV4LWZsb3ctZWxrLWxheW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9mb2JsZXgtZmxvdy1lbGstbGF5b3V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljLWFwaSc7XG4iXX0=
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { SizeExtensions } from '@foblex/2d';
|
|
2
|
-
import { EFLayoutDirection } from '@foblex/flow';
|
|
3
|
-
import { EElkLayoutAlgorithm } from '../enums';
|
|
4
|
-
export const DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS = {
|
|
5
|
-
direction: EFLayoutDirection.TOP_BOTTOM,
|
|
6
|
-
nodeGap: 48,
|
|
7
|
-
layerGap: 48,
|
|
8
|
-
algorithm: EElkLayoutAlgorithm.LAYERED,
|
|
9
|
-
defaultNodeSize: SizeExtensions.initialize(120, 72),
|
|
10
|
-
layoutOptions: {},
|
|
11
|
-
};
|
|
12
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdC1lbGstbGF5b3V0LWVuZ2luZS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9mLWxheW91dC9lbGsvc3JjL2xpYi9jb25maWd1cmF0aW9ucy9kZWZhdWx0LWVsay1sYXlvdXQtZW5naW5lLW9wdGlvbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM1QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFDakQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBRy9DLE1BQU0sQ0FBQyxNQUFNLGlDQUFpQyxHQUE0QjtJQUN4RSxTQUFTLEVBQUUsaUJBQWlCLENBQUMsVUFBVTtJQUN2QyxPQUFPLEVBQUUsRUFBRTtJQUNYLFFBQVEsRUFBRSxFQUFFO0lBQ1osU0FBUyxFQUFFLG1CQUFtQixDQUFDLE9BQU87SUFDdEMsZUFBZSxFQUFFLGNBQWMsQ0FBQyxVQUFVLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztJQUNuRCxhQUFhLEVBQUUsRUFBRTtDQUNsQixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgU2l6ZUV4dGVuc2lvbnMgfSBmcm9tICdAZm9ibGV4LzJkJztcbmltcG9ydCB7IEVGTGF5b3V0RGlyZWN0aW9uIH0gZnJvbSAnQGZvYmxleC9mbG93JztcbmltcG9ydCB7IEVFbGtMYXlvdXRBbGdvcml0aG0gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQgeyBJRWxrTGF5b3V0RW5naW5lT3B0aW9ucyB9IGZyb20gJy4uL21vZGVscyc7XG5cbmV4cG9ydCBjb25zdCBERUZBVUxUX0VMS19MQVlPVVRfRU5HSU5FX09QVElPTlM6IElFbGtMYXlvdXRFbmdpbmVPcHRpb25zID0ge1xuICBkaXJlY3Rpb246IEVGTGF5b3V0RGlyZWN0aW9uLlRPUF9CT1RUT00sXG4gIG5vZGVHYXA6IDQ4LFxuICBsYXllckdhcDogNDgsXG4gIGFsZ29yaXRobTogRUVsa0xheW91dEFsZ29yaXRobS5MQVlFUkVELFxuICBkZWZhdWx0Tm9kZVNpemU6IFNpemVFeHRlbnNpb25zLmluaXRpYWxpemUoMTIwLCA3MiksXG4gIGxheW91dE9wdGlvbnM6IHt9LFxufTtcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './default-elk-layout-engine-options';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2NvbmZpZ3VyYXRpb25zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMscUNBQXFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2RlZmF1bHQtZWxrLWxheW91dC1lbmdpbmUtb3B0aW9ucyc7XG4iXX0=
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { Injectable } from '@angular/core';
|
|
2
|
-
import { PointExtensions, SizeExtensions } from '@foblex/2d';
|
|
3
|
-
import { EFLayoutDirection, FLayoutEngine, mergeLayoutNodes, } from '@foblex/flow';
|
|
4
|
-
import { DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS } from '../configurations';
|
|
5
|
-
import { EElkLayoutAlgorithm } from '../enums';
|
|
6
|
-
import * as i0 from "@angular/core";
|
|
7
|
-
export class ElkLayoutEngine extends FLayoutEngine {
|
|
8
|
-
_elkCtor;
|
|
9
|
-
constructor() {
|
|
10
|
-
super(DEFAULT_ELK_LAYOUT_ENGINE_OPTIONS);
|
|
11
|
-
}
|
|
12
|
-
mergeOptions(currentOptions, nextOptions = {}) {
|
|
13
|
-
return {
|
|
14
|
-
...currentOptions,
|
|
15
|
-
...nextOptions,
|
|
16
|
-
defaultNodeSize: nextOptions.defaultNodeSize
|
|
17
|
-
? SizeExtensions.initialize(nextOptions.defaultNodeSize.width, nextOptions.defaultNodeSize.height)
|
|
18
|
-
: SizeExtensions.initialize(currentOptions.defaultNodeSize.width, currentOptions.defaultNodeSize.height),
|
|
19
|
-
layoutOptions: {
|
|
20
|
-
...(currentOptions.layoutOptions || {}),
|
|
21
|
-
...(nextOptions.layoutOptions || {}),
|
|
22
|
-
},
|
|
23
|
-
};
|
|
24
|
-
}
|
|
25
|
-
async calculate(nodes, connections, options) {
|
|
26
|
-
const layoutOptions = this.resolveLayoutOptions(options);
|
|
27
|
-
const elkModule = await this._loadElk();
|
|
28
|
-
const layout = (await new elkModule.default().layout(this._buildLayoutConfiguration(nodes, connections, layoutOptions)));
|
|
29
|
-
const positions = new Map();
|
|
30
|
-
layout.children?.forEach((node) => {
|
|
31
|
-
positions.set(node.id, PointExtensions.initialize(node.x, node.y));
|
|
32
|
-
});
|
|
33
|
-
return {
|
|
34
|
-
nodes: mergeLayoutNodes(nodes, positions),
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
_buildLayoutConfiguration(nodes, connections, options) {
|
|
38
|
-
const layoutOptions = {
|
|
39
|
-
'elk.algorithm': this._mapAlgorithm(options.algorithm),
|
|
40
|
-
'elk.direction': this._mapDirection(options.direction),
|
|
41
|
-
'spacing.nodeNode': `${options.nodeGap}`,
|
|
42
|
-
'spacing.nodeNodeBetweenLayers': `${options.layerGap}`,
|
|
43
|
-
...(options.layoutOptions || {}),
|
|
44
|
-
};
|
|
45
|
-
const graphNodes = nodes.map((node) => this._buildGraphNode(node, options.defaultNodeSize));
|
|
46
|
-
const graphEdges = connections.reduce((result, connection, index) => {
|
|
47
|
-
if (!graphNodes.some((node) => node.id === connection.source)) {
|
|
48
|
-
return result;
|
|
49
|
-
}
|
|
50
|
-
if (!graphNodes.some((node) => node.id === connection.target)) {
|
|
51
|
-
return result;
|
|
52
|
-
}
|
|
53
|
-
result.push({
|
|
54
|
-
id: this._createEdgeId(connection, index),
|
|
55
|
-
sources: [connection.source],
|
|
56
|
-
targets: [connection.target],
|
|
57
|
-
});
|
|
58
|
-
return result;
|
|
59
|
-
}, []);
|
|
60
|
-
return {
|
|
61
|
-
id: 'root',
|
|
62
|
-
layoutOptions,
|
|
63
|
-
children: graphNodes,
|
|
64
|
-
edges: graphEdges,
|
|
65
|
-
};
|
|
66
|
-
}
|
|
67
|
-
_buildGraphNode(node, defaultNodeSize) {
|
|
68
|
-
const size = node.size ?? defaultNodeSize;
|
|
69
|
-
const graphNode = {
|
|
70
|
-
id: node.id,
|
|
71
|
-
width: size.width,
|
|
72
|
-
height: size.height,
|
|
73
|
-
};
|
|
74
|
-
const position = this._getNodePosition(node);
|
|
75
|
-
if (!position) {
|
|
76
|
-
return graphNode;
|
|
77
|
-
}
|
|
78
|
-
return {
|
|
79
|
-
...graphNode,
|
|
80
|
-
x: position.x,
|
|
81
|
-
y: position.y,
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
_loadElk() {
|
|
85
|
-
if (!this._elkCtor) {
|
|
86
|
-
this._elkCtor = import('elkjs/lib/elk.bundled');
|
|
87
|
-
}
|
|
88
|
-
return this._elkCtor;
|
|
89
|
-
}
|
|
90
|
-
_getNodePosition(node) {
|
|
91
|
-
const positionedNode = node;
|
|
92
|
-
if (!positionedNode.position) {
|
|
93
|
-
return null;
|
|
94
|
-
}
|
|
95
|
-
return positionedNode.position;
|
|
96
|
-
}
|
|
97
|
-
_mapAlgorithm(algorithm) {
|
|
98
|
-
switch (algorithm) {
|
|
99
|
-
case EElkLayoutAlgorithm.FIXED:
|
|
100
|
-
return 'fixed';
|
|
101
|
-
case EElkLayoutAlgorithm.BOX:
|
|
102
|
-
return 'box';
|
|
103
|
-
case EElkLayoutAlgorithm.RANDOM:
|
|
104
|
-
return 'random';
|
|
105
|
-
case EElkLayoutAlgorithm.LAYERED:
|
|
106
|
-
return 'layered';
|
|
107
|
-
case EElkLayoutAlgorithm.STRESS:
|
|
108
|
-
return 'stress';
|
|
109
|
-
case EElkLayoutAlgorithm.MRTREE:
|
|
110
|
-
return 'mrtree';
|
|
111
|
-
case EElkLayoutAlgorithm.RADIAL:
|
|
112
|
-
return 'radial';
|
|
113
|
-
case EElkLayoutAlgorithm.FORCE:
|
|
114
|
-
return 'force';
|
|
115
|
-
case EElkLayoutAlgorithm.DISCO:
|
|
116
|
-
return 'disco';
|
|
117
|
-
case EElkLayoutAlgorithm.SPORE_OVERLAP:
|
|
118
|
-
return 'sporeOverlap';
|
|
119
|
-
case EElkLayoutAlgorithm.SPORE_COMPACTION:
|
|
120
|
-
return 'sporeCompaction';
|
|
121
|
-
case EElkLayoutAlgorithm.RECT_PACKING:
|
|
122
|
-
return 'rectpacking';
|
|
123
|
-
default:
|
|
124
|
-
return 'layered';
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
_createEdgeId(connection, index) {
|
|
128
|
-
return `${connection.source}->${connection.target}-${index}`;
|
|
129
|
-
}
|
|
130
|
-
_mapDirection(direction) {
|
|
131
|
-
switch (direction) {
|
|
132
|
-
case EFLayoutDirection.BOTTOM_TOP:
|
|
133
|
-
return 'UP';
|
|
134
|
-
case EFLayoutDirection.LEFT_RIGHT:
|
|
135
|
-
return 'RIGHT';
|
|
136
|
-
case EFLayoutDirection.RIGHT_LEFT:
|
|
137
|
-
return 'LEFT';
|
|
138
|
-
case EFLayoutDirection.TOP_BOTTOM:
|
|
139
|
-
default:
|
|
140
|
-
return 'DOWN';
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
144
|
-
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine });
|
|
145
|
-
}
|
|
146
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ElkLayoutEngine, decorators: [{
|
|
147
|
-
type: Injectable
|
|
148
|
-
}], ctorParameters: () => [] });
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxrLWxheW91dC1lbmdpbmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2VuZ2luZXMvZWxrLWxheW91dC1lbmdpbmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQVUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUNyRSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLGFBQWEsRUFLYixnQkFBZ0IsR0FDakIsTUFBTSxjQUFjLENBQUM7QUFDdEIsT0FBTyxFQUFFLGlDQUFpQyxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sVUFBVSxDQUFDOztBQVUvQyxNQUFNLE9BQU8sZUFBZ0IsU0FBUSxhQUFzQztJQUNqRSxRQUFRLENBQTZCO0lBRTdDO1FBQ0UsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUVrQixZQUFZLENBQzdCLGNBQXVDLEVBQ3ZDLGNBQWdELEVBQUU7UUFFbEQsT0FBTztZQUNMLEdBQUcsY0FBYztZQUNqQixHQUFHLFdBQVc7WUFDZCxlQUFlLEVBQUUsV0FBVyxDQUFDLGVBQWU7Z0JBQzFDLENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUN2QixXQUFXLENBQUMsZUFBZSxDQUFDLEtBQUssRUFDakMsV0FBVyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQ25DO2dCQUNILENBQUMsQ0FBQyxjQUFjLENBQUMsVUFBVSxDQUN2QixjQUFjLENBQUMsZUFBZSxDQUFDLEtBQUssRUFDcEMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQ3RDO1lBQ0wsYUFBYSxFQUFFO2dCQUNiLEdBQUcsQ0FBQyxjQUFjLENBQUMsYUFBYSxJQUFJLEVBQUUsQ0FBQztnQkFDdkMsR0FBRyxDQUFD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QUFLLGlCQUFpQixDQUFDLFVBQVUsQ0FBQztZQUNsQztnQkFDRSxPQUFPLE1BQU0sQ0FBQztRQUNsQixDQUFDO0lBQ0gsQ0FBQzt3R0F2TFUsZUFBZTs0R0FBZixlQUFlOzs0RkFBZixlQUFlO2tCQUQzQixVQUFVIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSVBvaW50LCBQb2ludEV4dGVuc2lvbnMsIFNpemVFeHRlbnNpb25zIH0gZnJvbSAnQGZvYmxleC8yZCc7XG5pbXBvcnQge1xuICBFRkxheW91dERpcmVjdGlvbixcbiAgRkxheW91dEVuZ2luZSxcbiAgSUZMYXlvdXRDYWxjdWxhdGlvbk9wdGlvbnMsXG4gIElGTGF5b3V0Q29ubmVjdGlvbixcbiAgSUZMYXlvdXROb2RlLFxuICBJRkxheW91dFJlc3VsdCxcbiAgbWVyZ2VMYXlvdXROb2Rlcyxcbn0gZnJvbSAnQGZvYmxleC9mbG93JztcbmltcG9ydCB7IERFRkFVTFRfRUxLX0xBWU9VVF9FTkdJTkVfT1BUSU9OUyB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zJztcbmltcG9ydCB7IEVFbGtMYXlvdXRBbGdvcml0aG0gfSBmcm9tICcuLi9lbnVtcyc7XG5pbXBvcnQge1xuICBJRWxrTGF5b3V0RWRnZSxcbiAgSUVsa0xheW91dEVuZ2luZU9wdGlvbnMsXG4gIElFbGtMYXlvdXRNb2R1bGUsXG4gIElFbGtMYXlvdXROb2RlLFxuICBJRWxrTGF5b3V0UmVzcG9uc2UsXG59IGZyb20gJy4uL21vZGVscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBFbGtMYXlvdXRFbmdpbmUgZXh0ZW5kcyBGTGF5b3V0RW5naW5lPElFbGtMYXlvdXRFbmdpbmVPcHRpb25zPiB7XG4gIHByaXZhdGUgX2Vsa0N0b3I/OiBQcm9taXNlPElFbGtMYXlvdXRNb2R1bGU+O1xuXG4gIHB1YmxpYyBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcihERUZBVUxUX0VMS19MQVlPVVRfRU5HSU5FX09QVElPTlMpO1xuICB9XG5cbiAgcHJvdGVjdGVkIG92ZXJyaWRlIG1lcmdlT3B0aW9ucyhcbiAgICBjdXJyZW50T3B0aW9uczogSUVsa0xheW91dEVuZ2luZU9wdGlvbnMsXG4gICAgbmV4dE9wdGlvbnM6IFBhcnRpYWw8SUVsa0xheW91dEVuZ2luZU9wdGlvbnM+ID0ge30sXG4gICk6IElFbGtMYXlvdXRFbmdpbmVPcHRpb25zIHtcbiAgICByZXR1cm4ge1xuICAgICAgLi4uY3VycmVudE9wdGlvbnMsXG4gICAgICAuLi5uZXh0T3B0aW9ucyxcbiAgICAgIGRlZmF1bHROb2RlU2l6ZTogbmV4dE9wdGlvbnMuZGVmYXVsdE5vZGVTaXplXG4gICAgICAgID8gU2l6ZUV4dGVuc2lvbnMuaW5pdGlhbGl6ZShcbiAgICAgICAgICAgIG5leHRPcHRpb25zLmRlZmF1bHROb2RlU2l6ZS53aWR0aCxcbiAgICAgICAgICAgIG5leHRPcHRpb25zLmRlZmF1bHROb2RlU2l6ZS5oZWlnaHQsXG4gICAgICAgICAgKVxuICAgICAgICA6IFNpemVFeHRlbnNpb25zLmluaXRpYWxpemUoXG4gICAgICAgICAgICBjdXJyZW50T3B0aW9ucy5kZWZhdWx0Tm9kZVNpemUud2lkdGgsXG4gICAgICAgICAgICBjdXJyZW50T3B0aW9ucy5kZWZhdWx0Tm9kZVNpemUuaGVpZ2h0LFxuICAgICAgICAgICksXG4gICAgICBsYXlvdXRPcHRpb25zOiB7XG4gICAgICAgIC4uLihjdXJyZW50T3B0aW9ucy5sYXlvdXRPcHRpb25zIHx8IHt9KSxcbiAgICAgICAgLi4uKG5leHRPcHRpb25zLmxheW91dE9wdGlvbnMgfHwge30pLFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHVibGljIG92ZXJyaWRlIGFzeW5jIGNhbGN1bGF0ZShcbiAgICBub2RlczogSUZMYXlvdXROb2RlW10sXG4gICAgY29ubmVjdGlvbnM6IElGTGF5b3V0Q29ubmVjdGlvbltdLFxuICAgIG9wdGlvbnM/OiBJRkxheW91dENhbGN1bGF0aW9uT3B0aW9uczxJRWxrTGF5b3V0RW5naW5lT3B0aW9ucz4sXG4gICk6IFByb21pc2U8SUZMYXlvdXRSZXN1bHQ+IHtcbiAgICBjb25zdCBsYXlvdXRPcHRpb25zID0gdGhpcy5yZXNvbHZlTGF5b3V0T3B0aW9ucyhvcHRpb25zKTtcbiAgICBjb25zdCBlbGtNb2R1bGUgPSBhd2FpdCB0aGlzLl9sb2FkRWxrKCk7XG4gICAgY29uc3QgbGF5b3V0ID0gKGF3YWl0IG5ldyBlbGtNb2R1bGUuZGVmYXVsdCgpLmxheW91dChcbiAgICAgIHRoaXMuX2J1aWxkTGF5b3V0Q29uZmlndXJhdGlvbihub2RlcywgY29ubmVjdGlvbnMsIGxheW91dE9wdGlvbnMpLFxuICAgICkpIGFzIElFbGtMYXlvdXRSZXNwb25zZTtcbiAgICBjb25zdCBwb3NpdGlvbnMgPSBuZXcgTWFwPHN0cmluZywgSVBvaW50PigpO1xuXG4gICAgbGF5b3V0LmNoaWxkcmVuPy5mb3JFYWNoKChub2RlKSA9PiB7XG4gICAgICBwb3NpdGlvbnMuc2V0KG5vZGUuaWQsIFBvaW50RXh0ZW5zaW9ucy5pbml0aWFsaXplKG5vZGUueCwgbm9kZS55KSk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4ge1xuICAgICAgbm9kZXM6IG1lcmdlTGF5b3V0Tm9kZXMobm9kZXMsIHBvc2l0aW9ucyksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkTGF5b3V0Q29uZmlndXJhdGlvbihcbiAgICBub2RlczogSUZMYXlvdXROb2RlW10sXG4gICAgY29ubmVjdGlvbnM6IElGTGF5b3V0Q29ubmVjdGlvbltdLFxuICAgIG9wdGlvbnM6IElFbGtMYXlvdXRFbmdpbmVPcHRpb25zLFxuICApOiB7XG4gICAgaWQ6IHN0cmluZztcbiAgICBsYXlvdXRPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICAgIGNoaWxkcmVuOiBJRWxrTGF5b3V0Tm9kZVtdO1xuICAgIGVkZ2VzOiBJRWxrTGF5b3V0RWRnZVtdO1xuICB9IHtcbiAgICBjb25zdCBsYXlvdXRPcHRpb25zOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+ID0ge1xuICAgICAgJ2Vsay5hbGdvcml0aG0nOiB0aGlzLl9tYXBBbGdvcml0aG0ob3B0aW9ucy5hbGdvcml0aG0pLFxuICAgICAgJ2Vsay5kaXJlY3Rpb24nOiB0aGlzLl9tYXBEaXJlY3Rpb24ob3B0aW9ucy5kaXJlY3Rpb24pLFxuICAgICAgJ3NwYWNpbmcubm9kZU5vZGUnOiBgJHtvcHRpb25zLm5vZGVHYXB9YCxcbiAgICAgICdzcGFjaW5nLm5vZGVOb2RlQmV0d2VlbkxheWVycyc6IGAke29wdGlvbnMubGF5ZXJHYXB9YCxcbiAgICAgIC4uLihvcHRpb25zLmxheW91dE9wdGlvbnMgfHwge30pLFxuICAgIH07XG4gICAgY29uc3QgZ3JhcGhOb2RlcyA9IG5vZGVzLm1hcCgobm9kZSkgPT4gdGhpcy5fYnVpbGRHcmFwaE5vZGUobm9kZSwgb3B0aW9ucy5kZWZhdWx0Tm9kZVNpemUpKTtcbiAgICBjb25zdCBncmFwaEVkZ2VzID0gY29ubmVjdGlvbnMucmVkdWNlPElFbGtMYXlvdXRFZGdlW10+KChyZXN1bHQsIGNvbm5lY3Rpb24sIGluZGV4KSA9PiB7XG4gICAgICBpZiAoIWdyYXBoTm9kZXMuc29tZSgobm9kZSkgPT4gbm9kZS5pZCA9PT0gY29ubmVjdGlvbi5zb3VyY2UpKSB7XG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIGlmICghZ3JhcGhOb2Rlcy5zb21lKChub2RlKSA9PiBub2RlLmlkID09PSBjb25uZWN0aW9uLnRhcmdldCkpIHtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICAgIH1cblxuICAgICAgcmVzdWx0LnB1c2goe1xuICAgICAgICBpZDogdGhpcy5fY3JlYXRlRWRnZUlkKGNvbm5lY3Rpb24sIGluZGV4KSxcbiAgICAgICAgc291cmNlczogW2Nvbm5lY3Rpb24uc291cmNlXSxcbiAgICAgICAgdGFyZ2V0czogW2Nvbm5lY3Rpb24udGFyZ2V0XSxcbiAgICAgIH0pO1xuXG4gICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH0sIFtdKTtcblxuICAgIHJldHVybiB7XG4gICAgICBpZDogJ3Jvb3QnLFxuICAgICAgbGF5b3V0T3B0aW9ucyxcbiAgICAgIGNoaWxkcmVuOiBncmFwaE5vZGVzLFxuICAgICAgZWRnZXM6IGdyYXBoRWRnZXMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2J1aWxkR3JhcGhOb2RlKFxuICAgIG5vZGU6IElGTGF5b3V0Tm9kZSxcbiAgICBkZWZhdWx0Tm9kZVNpemU6IHsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfSxcbiAgKTogSUVsa0xheW91dE5vZGUge1xuICAgIGNvbnN0IHNpemUgPSBub2RlLnNpemUgPz8gZGVmYXVsdE5vZGVTaXplO1xuICAgIGNvbnN0IGdyYXBoTm9kZTogSUVsa0xheW91dE5vZGUgPSB7XG4gICAgICBpZDogbm9kZS5pZCxcbiAgICAgIHdpZHRoOiBzaXplLndpZHRoLFxuICAgICAgaGVpZ2h0OiBzaXplLmhlaWdodCxcbiAgICB9O1xuICAgIGNvbnN0IHBvc2l0aW9uID0gdGhpcy5fZ2V0Tm9kZVBvc2l0aW9uKG5vZGUpO1xuXG4gICAgaWYgKCFwb3NpdGlvbikge1xuICAgICAgcmV0dXJuIGdyYXBoTm9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgLi4uZ3JhcGhOb2RlLFxuICAgICAgeDogcG9zaXRpb24ueCxcbiAgICAgIHk6IHBvc2l0aW9uLnksXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgX2xvYWRFbGsoKTogUHJvbWlzZTxJRWxrTGF5b3V0TW9kdWxlPiB7XG4gICAgaWYgKCF0aGlzLl9lbGtDdG9yKSB7XG4gICAgICB0aGlzLl9lbGtDdG9yID0gaW1wb3J0KCdlbGtqcy9saWIvZWxrLmJ1bmRsZWQnKTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5fZWxrQ3RvcjtcbiAgfVxuXG4gIHByaXZhdGUgX2dldE5vZGVQb3NpdGlvbihub2RlOiBJRkxheW91dE5vZGUpOiBJUG9pbnQgfCBudWxsIHtcbiAgICBjb25zdCBwb3NpdGlvbmVkTm9kZSA9IG5vZGUgYXMgSUZMYXlvdXROb2RlICYgeyBwb3NpdGlvbj86IElQb2ludCB9O1xuXG4gICAgaWYgKCFwb3NpdGlvbmVkTm9kZS5wb3NpdGlvbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcmV0dXJuIHBvc2l0aW9uZWROb2RlLnBvc2l0aW9uO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwQWxnb3JpdGhtKGFsZ29yaXRobTogRUVsa0xheW91dEFsZ29yaXRobSk6IHN0cmluZyB7XG4gICAgc3dpdGNoIChhbGdvcml0aG0pIHtcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5GSVhFRDpcbiAgICAgICAgcmV0dXJuICdmaXhlZCc7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uQk9YOlxuICAgICAgICByZXR1cm4gJ2JveCc7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uUkFORE9NOlxuICAgICAgICByZXR1cm4gJ3JhbmRvbSc7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uTEFZRVJFRDpcbiAgICAgICAgcmV0dXJuICdsYXllcmVkJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5TVFJFU1M6XG4gICAgICAgIHJldHVybiAnc3RyZXNzJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5NUlRSRUU6XG4gICAgICAgIHJldHVybiAnbXJ0cmVlJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5SQURJQUw6XG4gICAgICAgIHJldHVybiAncmFkaWFsJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5GT1JDRTpcbiAgICAgICAgcmV0dXJuICdmb3JjZSc7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uRElTQ086XG4gICAgICAgIHJldHVybiAnZGlzY28nO1xuICAgICAgY2FzZSBFRWxrTGF5b3V0QWxnb3JpdGhtLlNQT1JFX09WRVJMQVA6XG4gICAgICAgIHJldHVybiAnc3BvcmVPdmVybGFwJztcbiAgICAgIGNhc2UgRUVsa0xheW91dEFsZ29yaXRobS5TUE9SRV9DT01QQUNUSU9OOlxuICAgICAgICByZXR1cm4gJ3Nwb3JlQ29tcGFjdGlvbic7XG4gICAgICBjYXNlIEVFbGtMYXlvdXRBbGdvcml0aG0uUkVDVF9QQUNLSU5HOlxuICAgICAgICByZXR1cm4gJ3JlY3RwYWNraW5nJztcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHJldHVybiAnbGF5ZXJlZCc7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBfY3JlYXRlRWRnZUlkKGNvbm5lY3Rpb246IElGTGF5b3V0Q29ubmVjdGlvbiwgaW5kZXg6IG51bWJlcik6IHN0cmluZyB7XG4gICAgcmV0dXJuIGAke2Nvbm5lY3Rpb24uc291cmNlfS0+JHtjb25uZWN0aW9uLnRhcmdldH0tJHtpbmRleH1gO1xuICB9XG5cbiAgcHJpdmF0ZSBfbWFwRGlyZWN0aW9uKGRpcmVjdGlvbjogRUZMYXlvdXREaXJlY3Rpb24pOiAnRE9XTicgfCAnVVAnIHwgJ1JJR0hUJyB8ICdMRUZUJyB7XG4gICAgc3dpdGNoIChkaXJlY3Rpb24pIHtcbiAgICAgIGNhc2UgRUZMYXlvdXREaXJlY3Rpb24uQk9UVE9NX1RPUDpcbiAgICAgICAgcmV0dXJuICdVUCc7XG4gICAgICBjYXNlIEVGTGF5b3V0RGlyZWN0aW9uLkxFRlRfUklHSFQ6XG4gICAgICAgIHJldHVybiAnUklHSFQnO1xuICAgICAgY2FzZSBFRkxheW91dERpcmVjdGlvbi5SSUdIVF9MRUZUOlxuICAgICAgICByZXR1cm4gJ0xFRlQnO1xuICAgICAgY2FzZSBFRkxheW91dERpcmVjdGlvbi5UT1BfQk9UVE9NOlxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgcmV0dXJuICdET1dOJztcbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './elk-layout-engine';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2VuZ2luZXMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxxQkFBcUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vZWxrLWxheW91dC1lbmdpbmUnO1xuIl19
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
export var EElkLayoutAlgorithm;
|
|
2
|
-
(function (EElkLayoutAlgorithm) {
|
|
3
|
-
EElkLayoutAlgorithm["FIXED"] = "fixed";
|
|
4
|
-
EElkLayoutAlgorithm["BOX"] = "box";
|
|
5
|
-
EElkLayoutAlgorithm["RANDOM"] = "random";
|
|
6
|
-
EElkLayoutAlgorithm["LAYERED"] = "layered";
|
|
7
|
-
EElkLayoutAlgorithm["STRESS"] = "stress";
|
|
8
|
-
EElkLayoutAlgorithm["MRTREE"] = "mrtree";
|
|
9
|
-
EElkLayoutAlgorithm["RADIAL"] = "radial";
|
|
10
|
-
EElkLayoutAlgorithm["FORCE"] = "force";
|
|
11
|
-
EElkLayoutAlgorithm["DISCO"] = "disco";
|
|
12
|
-
EElkLayoutAlgorithm["SPORE_OVERLAP"] = "sporeOverlap";
|
|
13
|
-
EElkLayoutAlgorithm["SPORE_COMPACTION"] = "sporeCompaction";
|
|
14
|
-
EElkLayoutAlgorithm["RECT_PACKING"] = "rectpacking";
|
|
15
|
-
})(EElkLayoutAlgorithm || (EElkLayoutAlgorithm = {}));
|
|
16
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZS1lbGstbGF5b3V0LWFsZ29yaXRobS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9saWIvZW51bXMvZS1lbGstbGF5b3V0LWFsZ29yaXRobS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLENBQU4sSUFBWSxtQkFhWDtBQWJELFdBQVksbUJBQW1CO0lBQzdCLHNDQUFlLENBQUE7SUFDZixrQ0FBVyxDQUFBO0lBQ1gsd0NBQWlCLENBQUE7SUFDakIsMENBQW1CLENBQUE7SUFDbkIsd0NBQWlCLENBQUE7SUFDakIsd0NBQWlCLENBQUE7SUFDakIsd0NBQWlCLENBQUE7SUFDakIsc0NBQWUsQ0FBQTtJQUNmLHNDQUFlLENBQUE7SUFDZixxREFBOEIsQ0FBQTtJQUM5QiwyREFBb0MsQ0FBQTtJQUNwQyxtREFBNEIsQ0FBQTtBQUM5QixDQUFDLEVBYlcsbUJBQW1CLEtBQW5CLG1CQUFtQixRQWE5QiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBlbnVtIEVFbGtMYXlvdXRBbGdvcml0aG0ge1xuICBGSVhFRCA9ICdmaXhlZCcsXG4gIEJPWCA9ICdib3gnLFxuICBSQU5ET00gPSAncmFuZG9tJyxcbiAgTEFZRVJFRCA9ICdsYXllcmVkJyxcbiAgU1RSRVNTID0gJ3N0cmVzcycsXG4gIE1SVFJFRSA9ICdtcnRyZWUnLFxuICBSQURJQUwgPSAncmFkaWFsJyxcbiAgRk9SQ0UgPSAnZm9yY2UnLFxuICBESVNDTyA9ICdkaXNjbycsXG4gIFNQT1JFX09WRVJMQVAgPSAnc3BvcmVPdmVybGFwJyxcbiAgU1BPUkVfQ09NUEFDVElPTiA9ICdzcG9yZUNvbXBhY3Rpb24nLFxuICBSRUNUX1BBQ0tJTkcgPSAncmVjdHBhY2tpbmcnLFxufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './e-elk-layout-algorithm';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2VudW1zL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2UtZWxrLWxheW91dC1hbGdvcml0aG0nO1xuIl19
|
package/esm2022/lib/index.mjs
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
export * from './configurations';
|
|
2
|
-
export * from './engines';
|
|
3
|
-
export * from './enums';
|
|
4
|
-
export * from './models';
|
|
5
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsa0JBQWtCLENBQUM7QUFDakMsY0FBYyxXQUFXLENBQUM7QUFDMUIsY0FBYyxTQUFTLENBQUM7QUFDeEIsY0FBYyxVQUFVLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NvbmZpZ3VyYXRpb25zJztcbmV4cG9ydCAqIGZyb20gJy4vZW5naW5lcyc7XG5leHBvcnQgKiBmcm9tICcuL2VudW1zJztcbmV4cG9ydCAqIGZyb20gJy4vbW9kZWxzJztcbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LWVkZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL21vZGVscy9pLWVsay1sYXlvdXQtZWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJRWxrTGF5b3V0RWRnZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHNvdXJjZXM6IHN0cmluZ1tdO1xuICB0YXJnZXRzOiBzdHJpbmdbXTtcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LWVuZ2luZS1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9mLWxheW91dC9lbGsvc3JjL2xpYi9tb2RlbHMvaS1lbGstbGF5b3V0LWVuZ2luZS1vcHRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRkxheW91dEFsZ29yaXRobU9wdGlvbnMgfSBmcm9tICdAZm9ibGV4L2Zsb3cnO1xuaW1wb3J0IHsgRUVsa0xheW91dEFsZ29yaXRobSB9IGZyb20gJy4uL2VudW1zJztcblxuZXhwb3J0IGludGVyZmFjZSBJRWxrTGF5b3V0RW5naW5lT3B0aW9ucyBleHRlbmRzIElGTGF5b3V0QWxnb3JpdGhtT3B0aW9uczxFRWxrTGF5b3V0QWxnb3JpdGhtPiB7XG4gIGxheW91dE9wdGlvbnM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LWluc3RhbmNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9mLWxheW91dC9lbGsvc3JjL2xpYi9tb2RlbHMvaS1lbGstbGF5b3V0LWluc3RhbmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIElFbGtMYXlvdXRJbnN0YW5jZSB7XG4gIGxheW91dChjb25maWc6IHVua25vd24pOiBQcm9taXNlPHVua25vd24+O1xufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LW1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9saWIvbW9kZWxzL2ktZWxrLWxheW91dC1tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElFbGtMYXlvdXRJbnN0YW5jZSB9IGZyb20gJy4vaS1lbGstbGF5b3V0LWluc3RhbmNlJztcblxuZXhwb3J0IGludGVyZmFjZSBJRWxrTGF5b3V0TW9kdWxlIHtcbiAgZGVmYXVsdDogbmV3ICgpID0+IElFbGtMYXlvdXRJbnN0YW5jZTtcbn1cbiJdfQ==
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LW5vZGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL21vZGVscy9pLWVsay1sYXlvdXQtbm9kZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGludGVyZmFjZSBJRWxrTGF5b3V0Tm9kZSB7XG4gIGlkOiBzdHJpbmc7XG4gIHdpZHRoOiBudW1iZXI7XG4gIGhlaWdodDogbnVtYmVyO1xuICB4PzogbnVtYmVyO1xuICB5PzogbnVtYmVyO1xufVxuIl19
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LXBvc2l0aW9uZWQtbm9kZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9saWIvbW9kZWxzL2ktZWxrLWxheW91dC1wb3NpdGlvbmVkLW5vZGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IElQb2ludCB9IGZyb20gJ0Bmb2JsZXgvMmQnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElFbGtMYXlvdXRQb3NpdGlvbmVkTm9kZSBleHRlbmRzIElQb2ludCB7XG4gIGlkOiBzdHJpbmc7XG59XG4iXX0=
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaS1lbGstbGF5b3V0LXJlc3BvbnNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9mLWxheW91dC9lbGsvc3JjL2xpYi9tb2RlbHMvaS1lbGstbGF5b3V0LXJlc3BvbnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJRWxrTGF5b3V0UG9zaXRpb25lZE5vZGUgfSBmcm9tICcuL2ktZWxrLWxheW91dC1wb3NpdGlvbmVkLW5vZGUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElFbGtMYXlvdXRSZXNwb25zZSB7XG4gIGNoaWxkcmVuPzogSUVsa0xheW91dFBvc2l0aW9uZWROb2RlW107XG59XG4iXX0=
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
export * from './i-elk-layout-edge';
|
|
2
|
-
export * from './i-elk-layout-engine-options';
|
|
3
|
-
export * from './i-elk-layout-instance';
|
|
4
|
-
export * from './i-elk-layout-module';
|
|
5
|
-
export * from './i-elk-layout-node';
|
|
6
|
-
export * from './i-elk-layout-positioned-node';
|
|
7
|
-
export * from './i-elk-layout-response';
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2YtbGF5b3V0L2Vsay9zcmMvbGliL21vZGVscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHFCQUFxQixDQUFDO0FBQ3BDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQztBQUN4QyxjQUFjLHVCQUF1QixDQUFDO0FBQ3RDLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxnQ0FBZ0MsQ0FBQztBQUMvQyxjQUFjLHlCQUF5QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pLWVsay1sYXlvdXQtZWRnZSc7XG5leHBvcnQgKiBmcm9tICcuL2ktZWxrLWxheW91dC1lbmdpbmUtb3B0aW9ucyc7XG5leHBvcnQgKiBmcm9tICcuL2ktZWxrLWxheW91dC1pbnN0YW5jZSc7XG5leHBvcnQgKiBmcm9tICcuL2ktZWxrLWxheW91dC1tb2R1bGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pLWVsay1sYXlvdXQtbm9kZSc7XG5leHBvcnQgKiBmcm9tICcuL2ktZWxrLWxheW91dC1wb3NpdGlvbmVkLW5vZGUnO1xuZXhwb3J0ICogZnJvbSAnLi9pLWVsay1sYXlvdXQtcmVzcG9uc2UnO1xuIl19
|
package/esm2022/public-api.mjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
export * from './lib';
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljLWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL2xpYnMvZi1sYXlvdXQvZWxrL3NyYy9wdWJsaWMtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsT0FBTyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9saWInO1xuIl19
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './default-elk-layout-engine-options';
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { FLayoutEngine, IFLayoutCalculationOptions, IFLayoutConnection, IFLayoutNode, IFLayoutResult } from '@foblex/flow';
|
|
2
|
-
import { IElkLayoutEngineOptions } from '../models';
|
|
3
|
-
import * as i0 from "@angular/core";
|
|
4
|
-
export declare class ElkLayoutEngine extends FLayoutEngine<IElkLayoutEngineOptions> {
|
|
5
|
-
private _elkCtor?;
|
|
6
|
-
constructor();
|
|
7
|
-
protected mergeOptions(currentOptions: IElkLayoutEngineOptions, nextOptions?: Partial<IElkLayoutEngineOptions>): IElkLayoutEngineOptions;
|
|
8
|
-
calculate(nodes: IFLayoutNode[], connections: IFLayoutConnection[], options?: IFLayoutCalculationOptions<IElkLayoutEngineOptions>): Promise<IFLayoutResult>;
|
|
9
|
-
private _buildLayoutConfiguration;
|
|
10
|
-
private _buildGraphNode;
|
|
11
|
-
private _loadElk;
|
|
12
|
-
private _getNodePosition;
|
|
13
|
-
private _mapAlgorithm;
|
|
14
|
-
private _createEdgeId;
|
|
15
|
-
private _mapDirection;
|
|
16
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<ElkLayoutEngine, never>;
|
|
17
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<ElkLayoutEngine>;
|
|
18
|
-
}
|
package/lib/engines/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './elk-layout-engine';
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export declare enum EElkLayoutAlgorithm {
|
|
2
|
-
FIXED = "fixed",
|
|
3
|
-
BOX = "box",
|
|
4
|
-
RANDOM = "random",
|
|
5
|
-
LAYERED = "layered",
|
|
6
|
-
STRESS = "stress",
|
|
7
|
-
MRTREE = "mrtree",
|
|
8
|
-
RADIAL = "radial",
|
|
9
|
-
FORCE = "force",
|
|
10
|
-
DISCO = "disco",
|
|
11
|
-
SPORE_OVERLAP = "sporeOverlap",
|
|
12
|
-
SPORE_COMPACTION = "sporeCompaction",
|
|
13
|
-
RECT_PACKING = "rectpacking"
|
|
14
|
-
}
|
package/lib/enums/index.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './e-elk-layout-algorithm';
|
package/lib/index.d.ts
DELETED
package/lib/models/index.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export * from './i-elk-layout-edge';
|
|
2
|
-
export * from './i-elk-layout-engine-options';
|
|
3
|
-
export * from './i-elk-layout-instance';
|
|
4
|
-
export * from './i-elk-layout-module';
|
|
5
|
-
export * from './i-elk-layout-node';
|
|
6
|
-
export * from './i-elk-layout-positioned-node';
|
|
7
|
-
export * from './i-elk-layout-response';
|
package/public-api.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './lib';
|