@onealmonddotcom/ngx-graph 12.0.0-alpha.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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onealmonddotcom-ngx-graph.mjs","sources":["../../../projects/swimlane/ngx-graph/src/lib/utils/id.ts","../../../projects/swimlane/ngx-graph/src/lib/enums/panning.enum.ts","../../../projects/swimlane/ngx-graph/src/lib/enums/mini-map-position.enum.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/throttle.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/color-sets.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/color.helper.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/view-dimensions.helper.ts","../../../projects/swimlane/ngx-graph/src/lib/utils/visibility-observer.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/dagre.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/dagreCluster.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/dagreNodesOnly.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/d3ForceDirected.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/colaForceDirected.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/layouts/layout.service.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/mouse-wheel.directive.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/graph.component.ts","../../../projects/swimlane/ngx-graph/src/lib/graph/graph.component.html","../../../projects/swimlane/ngx-graph/src/lib/graph/graph.module.ts","../../../projects/swimlane/ngx-graph/src/lib/ngx-graph.module.ts","../../../projects/swimlane/ngx-graph/src/public_api.ts","../../../projects/swimlane/ngx-graph/src/onealmonddotcom-ngx-graph.ts"],"sourcesContent":["const cache = {};\n\n/**\n * Generates a short id.\n *\n */\nexport function id(): string {\n let newId = ('0000' + ((Math.random() * Math.pow(36, 4)) << 0).toString(36)).slice(-4);\n\n newId = `a${newId}`;\n\n // ensure not already used\n if (!cache[newId]) {\n cache[newId] = true;\n return newId;\n }\n\n return id();\n}\n","export enum PanningAxis {\n Both = 'both',\n Horizontal = 'horizontal',\n Vertical = 'vertical'\n}\n","export enum MiniMapPosition {\n UpperLeft = 'UpperLeft',\n UpperRight = 'UpperRight'\n}\n","/**\n * Throttle a function\n *\n * @export\n * @param {*} func\n * @param {number} wait\n * @param {*} [options]\n * @returns\n */\nexport function throttle(context: any, func: any, wait: number, options?: any) {\n options = options || {};\n let args: any;\n let result: any;\n let timeout = null;\n let previous = 0;\n\n function later() {\n previous = options.leading === false ? 0 : +new Date();\n timeout = null;\n result = func.apply(context, args);\n }\n\n return function (..._arguments: any[]) {\n const now = +new Date();\n\n if (!previous && options.leading === false) {\n previous = now;\n }\n\n const remaining = wait - (now - previous);\n args = _arguments;\n\n if (remaining <= 0) {\n clearTimeout(timeout);\n timeout = null;\n previous = now;\n result = func.apply(context, args);\n } else if (!timeout && options.trailing !== false) {\n timeout = setTimeout(later, remaining);\n }\n\n return result;\n };\n}\n\n/**\n * Throttle decorator\n *\n * class MyClass {\n * throttleable(10)\n * myFn() { ... }\n * }\n *\n * @export\n * @param {number} duration\n * @param {*} [options]\n * @returns\n */\nexport function throttleable(duration: number, options?: any) {\n return function innerDecorator(target, key, descriptor) {\n return {\n configurable: true,\n enumerable: descriptor.enumerable,\n get: function getter() {\n Object.defineProperty(this, key, {\n configurable: true,\n enumerable: descriptor.enumerable,\n value: throttle(this, descriptor.value, duration, options)\n });\n\n return this[key];\n }\n };\n };\n}\n","export const colorSets = [\n {\n name: 'vivid',\n selectable: true,\n group: 'Ordinal',\n domain: [\n '#647c8a',\n '#3f51b5',\n '#2196f3',\n '#00b862',\n '#afdf0a',\n '#a7b61a',\n '#f3e562',\n '#ff9800',\n '#ff5722',\n '#ff4514'\n ]\n },\n {\n name: 'natural',\n selectable: true,\n group: 'Ordinal',\n domain: [\n '#bf9d76',\n '#e99450',\n '#d89f59',\n '#f2dfa7',\n '#a5d7c6',\n '#7794b1',\n '#afafaf',\n '#707160',\n '#ba9383',\n '#d9d5c3'\n ]\n },\n {\n name: 'cool',\n selectable: true,\n group: 'Ordinal',\n domain: [\n '#a8385d',\n '#7aa3e5',\n '#a27ea8',\n '#aae3f5',\n '#adcded',\n '#a95963',\n '#8796c0',\n '#7ed3ed',\n '#50abcc',\n '#ad6886'\n ]\n },\n {\n name: 'fire',\n selectable: true,\n group: 'Ordinal',\n domain: ['#ff3d00', '#bf360c', '#ff8f00', '#ff6f00', '#ff5722', '#e65100', '#ffca28', '#ffab00']\n },\n {\n name: 'solar',\n selectable: true,\n group: 'Continuous',\n domain: [\n '#fff8e1',\n '#ffecb3',\n '#ffe082',\n '#ffd54f',\n '#ffca28',\n '#ffc107',\n '#ffb300',\n '#ffa000',\n '#ff8f00',\n '#ff6f00'\n ]\n },\n {\n name: 'air',\n selectable: true,\n group: 'Continuous',\n domain: [\n '#e1f5fe',\n '#b3e5fc',\n '#81d4fa',\n '#4fc3f7',\n '#29b6f6',\n '#03a9f4',\n '#039be5',\n '#0288d1',\n '#0277bd',\n '#01579b'\n ]\n },\n {\n name: 'aqua',\n selectable: true,\n group: 'Continuous',\n domain: [\n '#e0f7fa',\n '#b2ebf2',\n '#80deea',\n '#4dd0e1',\n '#26c6da',\n '#00bcd4',\n '#00acc1',\n '#0097a7',\n '#00838f',\n '#006064'\n ]\n },\n {\n name: 'flame',\n selectable: false,\n group: 'Ordinal',\n domain: [\n '#A10A28',\n '#D3342D',\n '#EF6D49',\n '#FAAD67',\n '#FDDE90',\n '#DBED91',\n '#A9D770',\n '#6CBA67',\n '#2C9653',\n '#146738'\n ]\n },\n {\n name: 'ocean',\n selectable: false,\n group: 'Ordinal',\n domain: [\n '#1D68FB',\n '#33C0FC',\n '#4AFFFE',\n '#AFFFFF',\n '#FFFC63',\n '#FDBD2D',\n '#FC8A25',\n '#FA4F1E',\n '#FA141B',\n '#BA38D1'\n ]\n },\n {\n name: 'forest',\n selectable: false,\n group: 'Ordinal',\n domain: [\n '#55C22D',\n '#C1F33D',\n '#3CC099',\n '#AFFFFF',\n '#8CFC9D',\n '#76CFFA',\n '#BA60FB',\n '#EE6490',\n '#C42A1C',\n '#FC9F32'\n ]\n },\n {\n name: 'horizon',\n selectable: false,\n group: 'Ordinal',\n domain: [\n '#2597FB',\n '#65EBFD',\n '#99FDD0',\n '#FCEE4B',\n '#FEFCFA',\n '#FDD6E3',\n '#FCB1A8',\n '#EF6F7B',\n '#CB96E8',\n '#EFDEE0'\n ]\n },\n {\n name: 'neons',\n selectable: false,\n group: 'Ordinal',\n domain: [\n '#FF3333',\n '#FF33FF',\n '#CC33FF',\n '#0000FF',\n '#33CCFF',\n '#33FFFF',\n '#33FF66',\n '#CCFF33',\n '#FFCC00',\n '#FF6600'\n ]\n },\n {\n name: 'picnic',\n selectable: false,\n group: 'Ordinal',\n domain: [\n '#FAC51D',\n '#66BD6D',\n '#FAA026',\n '#29BB9C',\n '#E96B56',\n '#55ACD2',\n '#B7332F',\n '#2C83C9',\n '#9166B8',\n '#92E7E8'\n ]\n },\n {\n name: 'night',\n selectable: false,\n group: 'Ordinal',\n domain: [\n '#2B1B5A',\n '#501356',\n '#183356',\n '#28203F',\n '#391B3C',\n '#1E2B3C',\n '#120634',\n '#2D0432',\n '#051932',\n '#453080',\n '#75267D',\n '#2C507D',\n '#4B3880',\n '#752F7D',\n '#35547D'\n ]\n },\n {\n name: 'nightLights',\n selectable: false,\n group: 'Ordinal',\n domain: [\n '#4e31a5',\n '#9c25a7',\n '#3065ab',\n '#57468b',\n '#904497',\n '#46648b',\n '#32118d',\n '#a00fb3',\n '#1052a2',\n '#6e51bd',\n '#b63cc3',\n '#6c97cb',\n '#8671c1',\n '#b455be',\n '#7496c3'\n ]\n }\n];\n","import { range } from 'd3-array';\nimport { scaleBand, scaleLinear, scaleOrdinal, scaleQuantile } from 'd3-scale';\n\nimport { colorSets } from './color-sets';\n\nexport class ColorHelper {\n scale: any;\n colorDomain: any[];\n domain: any;\n customColors: any;\n\n constructor(scheme, domain, customColors?) {\n if (typeof scheme === 'string') {\n scheme = colorSets.find(cs => {\n return cs.name === scheme;\n });\n }\n this.colorDomain = scheme.domain;\n this.domain = domain;\n this.customColors = customColors;\n\n this.scale = this.generateColorScheme(scheme, this.domain);\n }\n\n generateColorScheme(scheme, domain) {\n if (typeof scheme === 'string') {\n scheme = colorSets.find(cs => {\n return cs.name === scheme;\n });\n }\n return scaleOrdinal().range(scheme.domain).domain(domain);\n }\n\n getColor(value) {\n if (value === undefined || value === null) {\n throw new Error('Value can not be null');\n }\n\n if (typeof this.customColors === 'function') {\n return this.customColors(value);\n }\n\n const formattedValue = value.toString();\n let found: any; // todo type customColors\n if (this.customColors && this.customColors.length > 0) {\n found = this.customColors.find(mapping => {\n return mapping.name.toLowerCase() === formattedValue.toLowerCase();\n });\n }\n\n if (found) {\n return found.value;\n } else {\n return this.scale(value);\n }\n }\n}\n","export interface ViewDimensions {\n width: number;\n height: number;\n}\n\nexport function calculateViewDimensions({ width, height }): ViewDimensions {\n let chartWidth = width;\n let chartHeight = height;\n\n chartWidth = Math.max(0, chartWidth);\n chartHeight = Math.max(0, chartHeight);\n\n return {\n width: Math.floor(chartWidth),\n height: Math.floor(chartHeight)\n };\n}\n","import { Output, EventEmitter, NgZone, Directive, ElementRef } from '@angular/core';\n\n/**\n * Visibility Observer\n */\n@Directive({\n // tslint:disable-next-line:directive-selector\n selector: 'visibility-observer',\n standalone: false\n})\nexport class VisibilityObserver {\n @Output() visible: EventEmitter<any> = new EventEmitter();\n\n timeout: any;\n isVisible: boolean = false;\n\n constructor(\n private element: ElementRef,\n private zone: NgZone\n ) {\n this.runCheck();\n }\n\n destroy(): void {\n clearTimeout(this.timeout);\n }\n\n onVisibilityChange(): void {\n // trigger zone recalc for columns\n this.zone.run(() => {\n this.isVisible = true;\n this.visible.emit(true);\n });\n }\n\n runCheck(): void {\n const check = () => {\n if (!this.element) {\n return;\n }\n\n // https://davidwalsh.name/offsetheight-visibility\n const { offsetHeight, offsetWidth } = this.element.nativeElement;\n\n if (offsetHeight && offsetWidth) {\n clearTimeout(this.timeout);\n this.onVisibilityChange();\n } else {\n clearTimeout(this.timeout);\n this.zone.runOutsideAngular(() => {\n this.timeout = setTimeout(() => check(), 100);\n });\n }\n };\n\n this.zone.runOutsideAngular(() => {\n this.timeout = setTimeout(() => check());\n });\n }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { id } from '../../utils/id';\nimport * as dagre from 'dagre';\nimport { Edge } from '../../models/edge.model';\n\nexport enum Orientation {\n LEFT_TO_RIGHT = 'LR',\n RIGHT_TO_LEFT = 'RL',\n TOP_TO_BOTTOM = 'TB',\n BOTTOM_TO_TOM = 'BT'\n}\nexport enum Alignment {\n CENTER = 'C',\n UP_LEFT = 'UL',\n UP_RIGHT = 'UR',\n DOWN_LEFT = 'DL',\n DOWN_RIGHT = 'DR'\n}\n\nexport interface DagreSettings {\n orientation?: Orientation;\n marginX?: number;\n marginY?: number;\n edgePadding?: number;\n rankPadding?: number;\n nodePadding?: number;\n align?: Alignment;\n acyclicer?: 'greedy' | undefined;\n ranker?: 'network-simplex' | 'tight-tree' | 'longest-path';\n multigraph?: boolean;\n compound?: boolean;\n}\n\nexport class DagreLayout implements Layout {\n defaultSettings: DagreSettings = {\n orientation: Orientation.LEFT_TO_RIGHT,\n marginX: 20,\n marginY: 20,\n edgePadding: 100,\n rankPadding: 100,\n nodePadding: 50,\n multigraph: true,\n compound: true\n };\n settings: DagreSettings = {};\n\n dagreGraph: any;\n dagreNodes: any;\n dagreEdges: any;\n\n run(graph: Graph): Graph {\n this.createDagreGraph(graph);\n dagre.layout(this.dagreGraph);\n\n graph.edgeLabels = this.dagreGraph._edgeLabels;\n\n for (const dagreNodeId in this.dagreGraph._nodes) {\n const dagreNode = this.dagreGraph._nodes[dagreNodeId];\n const node = graph.nodes.find(n => n.id === dagreNode.id);\n node.position = {\n x: dagreNode.x,\n y: dagreNode.y\n };\n node.dimension = {\n width: dagreNode.width,\n height: dagreNode.height\n };\n }\n\n return graph;\n }\n\n updateEdge(graph: Graph, edge: Edge): Graph {\n const sourceNode = graph.nodes.find(n => n.id === edge.source);\n const targetNode = graph.nodes.find(n => n.id === edge.target);\n\n // determine new arrow position\n const dir = sourceNode.position.y <= targetNode.position.y ? -1 : 1;\n const startingPoint = {\n x: sourceNode.position.x,\n y: sourceNode.position.y - dir * (sourceNode.dimension.height / 2)\n };\n const endingPoint = {\n x: targetNode.position.x,\n y: targetNode.position.y + dir * (targetNode.dimension.height / 2)\n };\n\n // generate new points\n edge.points = [startingPoint, endingPoint];\n return graph;\n }\n\n createDagreGraph(graph: Graph): any {\n const settings = Object.assign({}, this.defaultSettings, this.settings);\n this.dagreGraph = new dagre.graphlib.Graph({ compound: settings.compound, multigraph: settings.multigraph });\n\n this.dagreGraph.setGraph({\n rankdir: settings.orientation,\n marginx: settings.marginX,\n marginy: settings.marginY,\n edgesep: settings.edgePadding,\n ranksep: settings.rankPadding,\n nodesep: settings.nodePadding,\n align: settings.align,\n acyclicer: settings.acyclicer,\n ranker: settings.ranker,\n multigraph: settings.multigraph,\n compound: settings.compound\n });\n\n // Default to assigning a new object as a label for each new edge.\n this.dagreGraph.setDefaultEdgeLabel(() => {\n return {\n /* empty */\n };\n });\n\n this.dagreNodes = graph.nodes.map(n => {\n const node: any = Object.assign({}, n);\n node.width = n.dimension.width;\n node.height = n.dimension.height;\n node.x = n.position.x;\n node.y = n.position.y;\n return node;\n });\n\n this.dagreEdges = graph.edges.map(l => {\n const newLink: any = Object.assign({}, l);\n if (!newLink.id) {\n newLink.id = id();\n }\n return newLink;\n });\n\n for (const node of this.dagreNodes) {\n if (!node.width) {\n node.width = 20;\n }\n if (!node.height) {\n node.height = 30;\n }\n\n // update dagre\n this.dagreGraph.setNode(node.id, node);\n }\n\n // update dagre\n for (const edge of this.dagreEdges) {\n if (settings.multigraph) {\n this.dagreGraph.setEdge(edge.source, edge.target, edge, edge.id);\n } else {\n this.dagreGraph.setEdge(edge.source, edge.target);\n }\n }\n\n return this.dagreGraph;\n }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { id } from '../../utils/id';\nimport * as dagre from 'dagre';\nimport { Edge } from '../../models/edge.model';\nimport { Node, ClusterNode } from '../../models/node.model';\nimport { DagreSettings, Orientation } from './dagre';\n\nexport class DagreClusterLayout implements Layout {\n defaultSettings: DagreSettings = {\n orientation: Orientation.LEFT_TO_RIGHT,\n marginX: 20,\n marginY: 20,\n edgePadding: 100,\n rankPadding: 100,\n nodePadding: 50,\n multigraph: true,\n compound: true\n };\n settings: DagreSettings = {};\n\n dagreGraph: any;\n dagreNodes: Node[];\n dagreClusters: ClusterNode[];\n dagreEdges: any;\n\n run(graph: Graph): Graph {\n this.createDagreGraph(graph);\n dagre.layout(this.dagreGraph);\n\n graph.edgeLabels = this.dagreGraph._edgeLabels;\n\n const dagreToOutput = node => {\n const dagreNode = this.dagreGraph._nodes[node.id];\n return {\n ...node,\n position: {\n x: dagreNode.x,\n y: dagreNode.y\n },\n dimension: {\n width: dagreNode.width,\n height: dagreNode.height\n }\n };\n };\n\n graph.clusters = (graph.clusters || []).map(dagreToOutput);\n graph.nodes = graph.nodes.map(dagreToOutput);\n\n return graph;\n }\n\n updateEdge(graph: Graph, edge: Edge): Graph {\n const sourceNode = graph.nodes.find(n => n.id === edge.source);\n const targetNode = graph.nodes.find(n => n.id === edge.target);\n\n // determine new arrow position\n const dir = sourceNode.position.y <= targetNode.position.y ? -1 : 1;\n const startingPoint = {\n x: sourceNode.position.x,\n y: sourceNode.position.y - dir * (sourceNode.dimension.height / 2)\n };\n const endingPoint = {\n x: targetNode.position.x,\n y: targetNode.position.y + dir * (targetNode.dimension.height / 2)\n };\n\n // generate new points\n edge.points = [startingPoint, endingPoint];\n return graph;\n }\n\n createDagreGraph(graph: Graph): any {\n const settings = Object.assign({}, this.defaultSettings, this.settings);\n this.dagreGraph = new dagre.graphlib.Graph({ compound: settings.compound, multigraph: settings.multigraph });\n this.dagreGraph.setGraph({\n rankdir: settings.orientation,\n marginx: settings.marginX,\n marginy: settings.marginY,\n edgesep: settings.edgePadding,\n ranksep: settings.rankPadding,\n nodesep: settings.nodePadding,\n align: settings.align,\n acyclicer: settings.acyclicer,\n ranker: settings.ranker,\n multigraph: settings.multigraph,\n compound: settings.compound\n });\n\n // Default to assigning a new object as a label for each new edge.\n this.dagreGraph.setDefaultEdgeLabel(() => {\n return {\n /* empty */\n };\n });\n\n this.dagreNodes = graph.nodes.map((n: Node) => {\n const node: any = Object.assign({}, n);\n node.width = n.dimension.width;\n node.height = n.dimension.height;\n node.x = n.position.x;\n node.y = n.position.y;\n return node;\n });\n\n this.dagreClusters = graph.clusters || [];\n\n this.dagreEdges = graph.edges.map(l => {\n const newLink: any = Object.assign({}, l);\n if (!newLink.id) {\n newLink.id = id();\n }\n return newLink;\n });\n\n for (const node of this.dagreNodes) {\n this.dagreGraph.setNode(node.id, node);\n }\n\n for (const cluster of this.dagreClusters) {\n this.dagreGraph.setNode(cluster.id, cluster);\n cluster.childNodeIds.forEach(childNodeId => {\n this.dagreGraph.setParent(childNodeId, cluster.id);\n });\n }\n\n // update dagre\n for (const edge of this.dagreEdges) {\n if (settings.multigraph) {\n this.dagreGraph.setEdge(edge.source, edge.target, edge, edge.id);\n } else {\n this.dagreGraph.setEdge(edge.source, edge.target);\n }\n }\n\n return this.dagreGraph;\n }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { id } from '../../utils/id';\nimport * as dagre from 'dagre';\nimport { Edge } from '../../models/edge.model';\nimport { DagreSettings, Orientation } from './dagre';\n\nexport interface DagreNodesOnlySettings extends DagreSettings {\n curveDistance?: number;\n}\n\nconst DEFAULT_EDGE_NAME = '\\x00';\nconst GRAPH_NODE = '\\x00';\nconst EDGE_KEY_DELIM = '\\x01';\n\nexport class DagreNodesOnlyLayout implements Layout {\n defaultSettings: DagreNodesOnlySettings = {\n orientation: Orientation.LEFT_TO_RIGHT,\n marginX: 20,\n marginY: 20,\n edgePadding: 100,\n rankPadding: 100,\n nodePadding: 50,\n curveDistance: 20,\n multigraph: true,\n compound: true\n };\n settings: DagreNodesOnlySettings = {};\n\n dagreGraph: any;\n dagreNodes: any;\n dagreEdges: any;\n\n run(graph: Graph): Graph {\n this.createDagreGraph(graph);\n dagre.layout(this.dagreGraph);\n\n graph.edgeLabels = this.dagreGraph._edgeLabels;\n\n for (const dagreNodeId in this.dagreGraph._nodes) {\n const dagreNode = this.dagreGraph._nodes[dagreNodeId];\n const node = graph.nodes.find(n => n.id === dagreNode.id);\n node.position = {\n x: dagreNode.x,\n y: dagreNode.y\n };\n node.dimension = {\n width: dagreNode.width,\n height: dagreNode.height\n };\n }\n for (const edge of graph.edges) {\n this.updateEdge(graph, edge);\n }\n\n return graph;\n }\n\n updateEdge(graph: Graph, edge: Edge): Graph {\n const sourceNode = graph.nodes.find(n => n.id === edge.source);\n const targetNode = graph.nodes.find(n => n.id === edge.target);\n const rankAxis: 'x' | 'y' = this.settings.orientation === 'BT' || this.settings.orientation === 'TB' ? 'y' : 'x';\n const orderAxis: 'x' | 'y' = rankAxis === 'y' ? 'x' : 'y';\n const rankDimension = rankAxis === 'y' ? 'height' : 'width';\n // determine new arrow position\n const dir = sourceNode.position[rankAxis] <= targetNode.position[rankAxis] ? -1 : 1;\n const startingPoint = {\n [orderAxis]: sourceNode.position[orderAxis],\n [rankAxis]: sourceNode.position[rankAxis] - dir * (sourceNode.dimension[rankDimension] / 2)\n };\n const endingPoint = {\n [orderAxis]: targetNode.position[orderAxis],\n [rankAxis]: targetNode.position[rankAxis] + dir * (targetNode.dimension[rankDimension] / 2)\n };\n\n const curveDistance = this.settings.curveDistance || this.defaultSettings.curveDistance;\n // generate new points\n edge.points = [\n startingPoint,\n {\n [orderAxis]: startingPoint[orderAxis],\n [rankAxis]: startingPoint[rankAxis] - dir * curveDistance\n },\n {\n [orderAxis]: endingPoint[orderAxis],\n [rankAxis]: endingPoint[rankAxis] + dir * curveDistance\n },\n endingPoint\n ];\n const edgeLabelId = `${edge.source}${EDGE_KEY_DELIM}${edge.target}${EDGE_KEY_DELIM}${DEFAULT_EDGE_NAME}`;\n const matchingEdgeLabel = graph.edgeLabels[edgeLabelId];\n if (matchingEdgeLabel) {\n matchingEdgeLabel.points = edge.points;\n }\n return graph;\n }\n\n createDagreGraph(graph: Graph): any {\n const settings = Object.assign({}, this.defaultSettings, this.settings);\n this.dagreGraph = new dagre.graphlib.Graph({ compound: settings.compound, multigraph: settings.multigraph });\n this.dagreGraph.setGraph({\n rankdir: settings.orientation,\n marginx: settings.marginX,\n marginy: settings.marginY,\n edgesep: settings.edgePadding,\n ranksep: settings.rankPadding,\n nodesep: settings.nodePadding,\n align: settings.align,\n acyclicer: settings.acyclicer,\n ranker: settings.ranker,\n multigraph: settings.multigraph,\n compound: settings.compound\n });\n\n // Default to assigning a new object as a label for each new edge.\n this.dagreGraph.setDefaultEdgeLabel(() => {\n return {\n /* empty */\n };\n });\n\n this.dagreNodes = graph.nodes.map(n => {\n const node: any = Object.assign({}, n);\n node.width = n.dimension.width;\n node.height = n.dimension.height;\n node.x = n.position.x;\n node.y = n.position.y;\n return node;\n });\n\n this.dagreEdges = graph.edges.map(l => {\n const newLink: any = Object.assign({}, l);\n if (!newLink.id) {\n newLink.id = id();\n }\n return newLink;\n });\n\n for (const node of this.dagreNodes) {\n if (!node.width) {\n node.width = 20;\n }\n if (!node.height) {\n node.height = 30;\n }\n\n // update dagre\n this.dagreGraph.setNode(node.id, node);\n }\n\n // update dagre\n for (const edge of this.dagreEdges) {\n if (settings.multigraph) {\n this.dagreGraph.setEdge(edge.source, edge.target, edge, edge.id);\n } else {\n this.dagreGraph.setEdge(edge.source, edge.target);\n }\n }\n\n return this.dagreGraph;\n }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { Node } from '../../models/node.model';\nimport { id } from '../../utils/id';\nimport { forceCollide, forceLink, forceManyBody, forceSimulation } from 'd3-force';\nimport { Edge } from '../../models/edge.model';\nimport { Observable, Subject } from 'rxjs';\nimport { NodePosition } from '../../models';\n\nexport interface D3ForceDirectedSettings {\n force?: any;\n forceLink?: any;\n}\nexport interface D3Node {\n id?: string;\n x: number;\n y: number;\n width?: number;\n height?: number;\n fx?: number;\n fy?: number;\n}\nexport interface D3Edge {\n source: string | D3Node;\n target: string | D3Node;\n midPoint: NodePosition;\n}\nexport interface D3Graph {\n nodes: D3Node[];\n edges: D3Edge[];\n}\nexport interface MergedNode extends D3Node, Node {\n id: string;\n}\n\nexport function toD3Node(maybeNode: string | D3Node): D3Node {\n if (typeof maybeNode === 'string') {\n return {\n id: maybeNode,\n x: 0,\n y: 0\n };\n }\n return maybeNode;\n}\n\nexport class D3ForceDirectedLayout implements Layout {\n defaultSettings: D3ForceDirectedSettings = {\n force: forceSimulation<any>().force('charge', forceManyBody().strength(-150)).force('collide', forceCollide(5)),\n forceLink: forceLink<any, any>()\n .id(node => node.id)\n .distance(() => 100)\n };\n settings: D3ForceDirectedSettings = {};\n\n inputGraph: Graph;\n outputGraph: Graph;\n d3Graph: D3Graph;\n outputGraph$: Subject<Graph> = new Subject();\n\n draggingStart: { x: number; y: number };\n\n run(graph: Graph): Observable<Graph> {\n this.inputGraph = graph;\n this.d3Graph = {\n nodes: [...this.inputGraph.nodes.map(n => ({ ...n }))] as any,\n edges: [...this.inputGraph.edges.map(e => ({ ...e }))] as any\n };\n this.outputGraph = {\n nodes: [],\n edges: [],\n edgeLabels: []\n };\n this.outputGraph$.next(this.outputGraph);\n this.settings = Object.assign({}, this.defaultSettings, this.settings);\n if (this.settings.force) {\n this.settings.force\n .nodes(this.d3Graph.nodes)\n .force('link', this.settings.forceLink.links(this.d3Graph.edges))\n .alpha(0.5)\n .restart()\n .on('tick', () => {\n this.outputGraph$.next(this.d3GraphToOutputGraph(this.d3Graph));\n });\n }\n\n return this.outputGraph$.asObservable();\n }\n\n updateEdge(graph: Graph, edge: Edge): Observable<Graph> {\n const settings = Object.assign({}, this.defaultSettings, this.settings);\n if (settings.force) {\n settings.force\n .nodes(this.d3Graph.nodes)\n .force('link', settings.forceLink.links(this.d3Graph.edges))\n .alpha(0.5)\n .restart()\n .on('tick', () => {\n this.outputGraph$.next(this.d3GraphToOutputGraph(this.d3Graph));\n });\n }\n\n return this.outputGraph$.asObservable();\n }\n\n d3GraphToOutputGraph(d3Graph: D3Graph): Graph {\n this.outputGraph.nodes = this.d3Graph.nodes.map((node: MergedNode) => ({\n ...node,\n id: node.id || id(),\n position: {\n x: node.x,\n y: node.y\n },\n dimension: {\n width: (node.dimension && node.dimension.width) || 20,\n height: (node.dimension && node.dimension.height) || 20\n },\n transform: `translate(${node.x - ((node.dimension && node.dimension.width) || 20) / 2 || 0}, ${\n node.y - ((node.dimension && node.dimension.height) || 20) / 2 || 0\n })`\n }));\n\n this.outputGraph.edges = this.d3Graph.edges.map(edge => ({\n ...edge,\n source: toD3Node(edge.source).id,\n target: toD3Node(edge.target).id,\n points: [\n {\n x: toD3Node(edge.source).x,\n y: toD3Node(edge.source).y\n },\n {\n x: toD3Node(edge.target).x,\n y: toD3Node(edge.target).y\n }\n ]\n }));\n\n this.outputGraph.edgeLabels = this.outputGraph.edges;\n return this.outputGraph;\n }\n\n onDragStart(draggingNode: Node, $event: MouseEvent): void {\n this.settings.force.alphaTarget(0.3).restart();\n const node = this.d3Graph.nodes.find(d3Node => d3Node.id === draggingNode.id);\n if (!node) {\n return;\n }\n this.draggingStart = { x: $event.x - node.x, y: $event.y - node.y };\n node.fx = $event.x - this.draggingStart.x;\n node.fy = $event.y - this.draggingStart.y;\n }\n\n onDrag(draggingNode: Node, $event: MouseEvent): void {\n if (!draggingNode) {\n return;\n }\n const node = this.d3Graph.nodes.find(d3Node => d3Node.id === draggingNode.id);\n if (!node) {\n return;\n }\n node.fx = $event.x - this.draggingStart.x;\n node.fy = $event.y - this.draggingStart.y;\n }\n\n onDragEnd(draggingNode: Node, $event: MouseEvent): void {\n if (!draggingNode) {\n return;\n }\n const node = this.d3Graph.nodes.find(d3Node => d3Node.id === draggingNode.id);\n if (!node) {\n return;\n }\n\n this.settings.force.alphaTarget(0);\n node.fx = undefined;\n node.fy = undefined;\n }\n}\n","import { Layout } from '../../models/layout.model';\nimport { Graph } from '../../models/graph.model';\nimport { Node, ClusterNode } from '../../models/node.model';\nimport { id } from '../../utils/id';\nimport { d3adaptor, ID3StyleLayoutAdaptor, Layout as ColaLayout, Group, InputNode, Link, Rectangle } from 'webcola';\nimport * as d3Dispatch from 'd3-dispatch';\nimport * as d3Force from 'd3-force';\nimport * as d3Timer from 'd3-timer';\nimport { Edge } from '../../models/edge.model';\nimport { Observable, Subject } from 'rxjs';\nimport { ViewDimensions } from '../../utils/view-dimensions.helper';\n\nexport interface ColaForceDirectedSettings {\n force?: ColaLayout & ID3StyleLayoutAdaptor;\n forceModifierFn?: (force: ColaLayout & ID3StyleLayoutAdaptor) => ColaLayout & ID3StyleLayoutAdaptor;\n onTickListener?: (internalGraph: ColaGraph) => void;\n viewDimensions?: ViewDimensions;\n}\nexport interface ColaGraph {\n groups: Group[];\n nodes: InputNode[];\n links: Array<Link<number>>;\n}\nexport function toNode(nodes: InputNode[], nodeRef: InputNode | number): InputNode {\n if (typeof nodeRef === 'number') {\n return nodes[nodeRef];\n }\n return nodeRef;\n}\n\nexport class ColaForceDirectedLayout implements Layout {\n defaultSettings: ColaForceDirectedSettings = {\n force: d3adaptor({\n ...d3Dispatch,\n ...d3Force,\n ...d3Timer\n })\n .linkDistance(150)\n .avoidOverlaps(true),\n viewDimensions: {\n width: 600,\n height: 600\n }\n };\n settings: ColaForceDirectedSettings = {};\n\n inputGraph: Graph;\n outputGraph: Graph;\n internalGraph: ColaGraph & { groupLinks?: Edge[] };\n outputGraph$: Subject<Graph> = new Subject();\n\n draggingStart: { x: number; y: number };\n\n run(graph: Graph): Observable<Graph> {\n this.inputGraph = graph;\n if (!this.inputGraph.clusters) {\n this.inputGraph.clusters = [];\n }\n this.internalGraph = {\n nodes: [\n ...this.inputGraph.nodes.map(n => ({\n ...n,\n width: n.dimension ? n.dimension.width : 20,\n height: n.dimension ? n.dimension.height : 20\n }))\n ] as any,\n groups: [\n ...this.inputGraph.clusters.map(\n (cluster): Group => ({\n padding: 5,\n groups: cluster.childNodeIds\n .map(nodeId => <any>this.inputGraph.clusters.findIndex(node => node.id === nodeId))\n .filter(x => x >= 0),\n leaves: cluster.childNodeIds\n .map(nodeId => <any>this.inputGraph.nodes.findIndex(node => node.id === nodeId))\n .filter(x => x >= 0)\n })\n )\n ],\n links: [\n ...this.inputGraph.edges\n .map(e => {\n const sourceNodeIndex = this.inputGraph.nodes.findIndex(node => e.source === node.id);\n const targetNodeIndex = this.inputGraph.nodes.findIndex(node => e.target === node.id);\n if (sourceNodeIndex === -1 || targetNodeIndex === -1) {\n return undefined;\n }\n return {\n ...e,\n source: sourceNodeIndex,\n target: targetNodeIndex\n };\n })\n .filter(x => !!x)\n ] as any,\n groupLinks: [\n ...this.inputGraph.edges\n .map(e => {\n const sourceNodeIndex = this.inputGraph.nodes.findIndex(node => e.source === node.id);\n const targetNodeIndex = this.inputGraph.nodes.findIndex(node => e.target === node.id);\n if (sourceNodeIndex >= 0 && targetNodeIndex >= 0) {\n return undefined;\n }\n return e;\n })\n .filter(x => !!x)\n ]\n };\n this.outputGraph = {\n nodes: [],\n clusters: [],\n edges: [],\n edgeLabels: []\n };\n this.outputGraph$.next(this.outputGraph);\n this.settings = Object.assign({}, this.defaultSettings, this.settings);\n if (this.settings.force) {\n this.settings.force = this.settings.force\n .nodes(this.internalGraph.nodes)\n .groups(this.internalGraph.groups)\n .links(this.internalGraph.links)\n .alpha(0.5)\n .on('tick', () => {\n if (this.settings.onTickListener) {\n this.settings.onTickListener(this.internalGraph);\n }\n this.outputGraph$.next(this.internalGraphToOutputGraph(this.internalGraph));\n });\n if (this.settings.viewDimensions) {\n this.settings.force = this.settings.force.size([\n this.settings.viewDimensions.width,\n this.settings.viewDimensions.height\n ]);\n }\n if (this.settings.forceModifierFn) {\n this.settings.force = this.settings.forceModifierFn(this.settings.force);\n }\n this.settings.force.start();\n }\n\n return this.outputGraph$.asObservable();\n }\n\n updateEdge(graph: Graph, edge: Edge): Observable<Graph> {\n const settings = Object.assign({}, this.defaultSettings, this.settings);\n if (settings.force) {\n settings.force.start();\n }\n\n return this.outputGraph$.asObservable();\n }\n\n internalGraphToOutputGraph(internalGraph: any): Graph {\n this.outputGraph.nodes = internalGraph.nodes.map(node => ({\n ...node,\n id: node.id || id(),\n position: {\n x: node.x,\n y: node.y\n },\n dimension: {\n width: (node.dimension && node.dimension.width) || 20,\n height: (node.dimension && node.dimension.height) || 20\n },\n transform: `translate(${node.x - ((node.dimension && node.dimension.width) || 20) / 2 || 0}, ${\n node.y - ((node.dimension && node.dimension.height) || 20) / 2 || 0\n })`\n }));\n\n this.outputGraph.edges = internalGraph.links\n .map(edge => {\n const source: any = toNode(internalGraph.nodes, edge.source);\n const target: any = toNode(internalGraph.nodes, edge.target);\n return {\n ...edge,\n source: source.id,\n target: target.id,\n points: [\n (source.bounds as Rectangle).rayIntersection(target.bounds.cx(), target.bounds.cy()),\n (target.bounds as Rectangle).rayIntersection(source.bounds.cx(), source.bounds.cy())\n ]\n };\n })\n .concat(\n internalGraph.groupLinks.map(groupLink => {\n const sourceNode = internalGraph.nodes.find(foundNode => (foundNode as any).id === groupLink.source);\n const targetNode = internalGraph.nodes.find(foundNode => (foundNode as any).id === groupLink.target);\n const source =\n sourceNode || internalGraph.groups.find(foundGroup => (foundGroup as any).id === groupLink.source);\n const target =\n targetNode || internalGraph.groups.find(foundGroup => (foundGroup as any).id === groupLink.target);\n return {\n ...groupLink,\n source: source.id,\n target: target.id,\n points: [\n (source.bounds as Rectangle).rayIntersection(target.bounds.cx(), target.bounds.cy()),\n (target.bounds as Rectangle).rayIntersection(source.bounds.cx(), source.bounds.cy())\n ]\n };\n })\n );\n\n this.outputGraph.clusters = internalGraph.groups.map((group, index): ClusterNode => {\n const inputGroup = this.inputGraph.clusters[index];\n return {\n ...inputGroup,\n dimension: {\n width: group.bounds ? group.bounds.width() : 20,\n height: group.bounds ? group.bounds.height() : 20\n },\n position: {\n x: group.bounds ? group.bounds.x + group.bounds.width() / 2 : 0,\n y: group.bounds ? group.bounds.y + group.bounds.height() / 2 : 0\n }\n };\n });\n this.outputGraph.edgeLabels = this.outputGraph.edges;\n return this.outputGraph;\n }\n\n onDragStart(draggingNode: Node, $event: MouseEvent): void {\n const nodeIndex = this.outputGraph.nodes.findIndex(foundNode => foundNode.id === draggingNode.id);\n const node = this.internalGraph.nodes[nodeIndex];\n if (!node) {\n return;\n }\n this.draggingStart = { x: node.x - $event.x, y: node.y - $event.y };\n node.fixed = 1;\n this.settings.force.start();\n }\n\n onDrag(draggingNode: Node, $event: MouseEvent): void {\n if (!draggingNode) {\n return;\n }\n const nodeIndex = this.outputGraph.nodes.findIndex(foundNode => foundNode.id === draggingNode.id);\n const node = this.internalGraph.nodes[nodeIndex];\n if (!node) {\n return;\n }\n node.x = this.draggingStart.x + $event.x;\n node.y = this.draggingStart.y + $event.y;\n }\n\n onDragEnd(draggingNode: Node, $event: MouseEvent): void {\n if (!draggingNode) {\n return;\n }\n const nodeIndex = this.outputGraph.nodes.findIndex(foundNode => foundNode.id === draggingNode.id);\n const node = this.internalGraph.nodes[nodeIndex];\n if (!node) {\n return;\n }\n\n node.fixed = 0;\n }\n}\n","import { Injectable } from '@angular/core';\nimport { Layout } from '../../models/layout.model';\nimport { DagreLayout } from './dagre';\nimport { DagreClusterLayout } from './dagreCluster';\nimport { DagreNodesOnlyLayout } from './dagreNodesOnly';\nimport { D3ForceDirectedLayout } from './d3ForceDirected';\nimport { ColaForceDirectedLayout } from './colaForceDirected';\n\nconst layouts = {\n dagre: DagreLayout,\n dagreCluster: DagreClusterLayout,\n dagreNodesOnly: DagreNodesOnlyLayout,\n d3ForceDirected: D3ForceDirectedLayout,\n colaForceDirected: ColaForceDirectedLayout\n};\n\n@Injectable()\nexport class LayoutService {\n getLayout(name: string): Layout {\n if (layouts[name]) {\n return new layouts[name]();\n } else {\n throw new Error(`Unknown layout type '${name}'`);\n }\n }\n}\n","import { Directive, Output, HostListener, EventEmitter } from '@angular/core';\n\n/**\n * Mousewheel directive\n * https://github.com/SodhanaLibrary/angular2-examples/blob/master/app/mouseWheelDirective/mousewheel.directive.ts\n *\n * @export\n */\n// tslint:disable-next-line: directive-selector\n@Directive({\n selector: '[mouseWheel]',\n standalone: false\n})\nexport class MouseWheelDirective {\n @Output()\n mouseWheelUp = new EventEmitter();\n @Output()\n mouseWheelDown = new EventEmitter();\n\n @HostListener('mousewheel', ['$event'])\n onMouseWheelChrome(event: any): void {\n this.mouseWheelFunc(event);\n }\n\n @HostListener('DOMMouseScroll', ['$event'])\n onMouseWheelFirefox(event: any): void {\n this.mouseWheelFunc(event);\n }\n\n @HostListener('wheel', ['$event'])\n onWheel(event: any): void {\n this.mouseWheelFunc(event);\n }\n\n @HostListener('onmousewheel', ['$event'])\n onMouseWheelIE(event: any): void {\n this.mouseWheelFunc(event);\n }\n\n mouseWheelFunc(event: any): void {\n if (window.event) {\n event = window.event;\n }\n\n const delta: number = Math.max(-1, Math.min(1, event.wheelDelta || -event.detail || event.deltaY || event.deltaX));\n // Firefox don't have native support for wheel event, as a result delta values are reverse\n const isWheelMouseUp: boolean = event.wheelDelta ? delta > 0 : delta < 0;\n const isWheelMouseDown: boolean = event.wheelDelta ? delta < 0 : delta > 0;\n if (isWheelMouseUp) {\n this.mouseWheelUp.emit(event);\n } else if (isWheelMouseDown) {\n this.mouseWheelDown.emit(event);\n }\n\n // for IE\n event.returnValue = false;\n\n // for Chrome and Firefox\n if (event.preventDefault) {\n event.preventDefault();\n }\n }\n}\n","// rename transition due to conflict with d3 transition\nimport { animate, style, transition as ngTransition, trigger } from '@angular/animations';\nimport {\n AfterViewInit,\n ChangeDetectionStrategy,\n Component,\n ContentChild,\n ElementRef,\n EventEmitter,\n HostListener,\n Input,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n TemplateRef,\n ViewChildren,\n ViewEncapsulation,\n NgZone,\n ChangeDetectorRef,\n OnChanges,\n SimpleChanges\n} from '@angular/core';\nimport { select } from 'd3-selection';\nimport * as shape from 'd3-shape';\nimport * as ease from 'd3-ease';\nimport 'd3-transition';\nimport { Observable, Subscription, of, fromEvent as observableFromEvent, Subject } from 'rxjs';\nimport { first, debounceTime, takeUntil } from 'rxjs/operators';\nimport { identity, scale, smoothMatrix, toSVG, transform, translate } from 'transformation-matrix';\nimport { Layout } from '../models/layout.model';\nimport { LayoutService } from './layouts/layout.service';\nimport { Edge } from '../models/edge.model';\nimport { Node, ClusterNode, CompoundNode } from '../models/node.model';\nimport { Graph } from '../models/graph.model';\nimport { id } from '../utils/id';\nimport { PanningAxis } from '../enums/panning.enum';\nimport { MiniMapPosition } from '../enums/mini-map-position.enum';\nimport { throttleable } from '../utils/throttle';\nimport { ColorHelper } from '../utils/color.helper';\nimport { ViewDimensions, calculateViewDimensions } from '../utils/view-dimensions.helper';\nimport { VisibilityObserver } from '../utils/visibility-observer';\n\n/**\n * Matrix\n */\nexport interface Matrix {\n a: number;\n b: number;\n c: number;\n d: number;\n e: number;\n f: number;\n}\n\nexport interface NgxGraphZoomOptions {\n autoCenter?: boolean;\n force?: boolean;\n}\n\nexport enum NgxGraphStates {\n Init = 'init',\n Subscribe = 'subscribe',\n Transform = 'transform',\n /* eslint-disable @typescript-eslint/no-shadow */\n Output = 'output'\n}\n\nexport interface NgxGraphStateChangeEvent {\n state: NgxGraphStates;\n}\n\n@Component({\n selector: 'ngx-graph',\n styleUrls: ['./graph.component.scss'],\n templateUrl: 'graph.component.html',\n encapsulation: ViewEncapsulation.None,\n changeDetection: ChangeDetectionStrategy.OnPush,\n animations: [\n trigger('animationState', [\n ngTransition(':enter', [style({ opacity: 0 }), animate('500ms 100ms', style({ opacity: 1 }))])\n ])\n ],\n standalone: false\n})\nexport class GraphComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n @Input() nodes: Node[] = [];\n @Input() clusters: ClusterNode[] = [];\n @Input() compoundNodes: CompoundNode[] = [];\n @Input() links: Edge[] = [];\n @Input() activeEntries: any[] = [];\n @Input() curve: any;\n @Input() draggingEnabled = true;\n @Input() nodeHeight: number;\n @Input() nodeMaxHeight: number;\n @Input() nodeMinHeight: number;\n @Input() nodeWidth: number;\n @Input() nodeMinWidth: number;\n @Input() nodeMaxWidth: number;\n @Input() panningEnabled: boolean = true;\n @Input() panningAxis: PanningAxis = PanningAxis.Both;\n @Input() enableZoom = true;\n @Input() zoomSpeed = 0.1;\n @Input() minZoomLevel = 0.1;\n @Input() maxZoomLevel = 4.0;\n @Input() autoZoom = false;\n @Input() panOnZoom = true;\n @Input() animate? = false;\n @Input() autoCenter = false;\n @Input() update$: Observable<any>;\n @Input() center$: Observable<any>;\n @Input() zoomToFit$: Observable<NgxGraphZoomOptions>;\n @Input() panToNode$: Observable<any>;\n @Input() layout: string | Layout;\n @Input() layoutSettings: any;\n @Input() enableTrackpadSupport = false;\n @Input() showMiniMap: boolean = false;\n @Input() miniMapMaxWidth: number = 100;\n @Input() miniMapMaxHeight: number;\n @Input() miniMapPosition: MiniMapPosition = MiniMapPosition.UpperRight;\n @Input() view: [number, number];\n @Input() scheme: any = 'cool';\n @Input() customColors: any;\n @Input() deferDisplayUntilPosition: boolean = false;\n @Input() centerNodesOnPositionChange = true;\n @Input() enablePreUpdateTransform = true;\n\n @Output() select = new EventEmitter();\n @Output() activate: EventEmitter<any> = new EventEmitter();\n @Output() deactivate: EventEmitter<any> = new EventEmitter();\n @Output() zoomChange: EventEmitter<number> = new EventEmitter();\n @Output() clickHandler: EventEmitter<MouseEvent> = new EventEmitter();\n @Output() stateChange: EventEmitter<NgxGraphStateChangeEvent> = new EventEmitter();\n\n @ContentChild('linkTemplate') linkTemplate: TemplateRef<any>;\n @ContentChild('nodeTemplate') nodeTemplate: TemplateRef<any>;\n @ContentChild('clusterTemplate') clusterTemplate: TemplateRef<any>;\n @ContentChild('defsTemplate') defsTemplate: TemplateRef<any>;\n @ContentChild('miniMapNodeTemplate') miniMapNodeTemplate: TemplateRef<any>;\n\n @ViewChildren('nodeElement') nodeElements: QueryList<ElementRef>;\n @ViewChildren('linkElement') linkElements: QueryList<ElementRef>;\n\n public chartWidth: any;\n\n private isMouseMoveCalled: boolean = false;\n\n graphSubscription: Subscription = new Subscription();\n colors: ColorHelper;\n dims: ViewDimensions;\n seriesDomain: any;\n transform: string;\n isPanning = false;\n isDragging = false;\n draggingNode: Node;\n initialized = false;\n graph: Graph;\n graphDims: any = { width: 0, height: 0 };\n _oldLinks: Edge[] = [];\n oldNodes: Set<string> = new Set();\n oldClusters: Set<string> = new Set();\n oldCompoundNodes: Set<string> = new Set();\n transformationMatrix: Matrix = identity();\n _touchLastX = null;\n _touchLastY = null;\n minimapScaleCoefficient: number = 3;\n minimapTransform: string;\n minimapOffsetX: number = 0;\n minimapOffsetY: number = 0;\n isMinimapPanning = false;\n minimapClipPathId: string;\n width: number;\n height: number;\n resizeSubscription: any;\n visibilityObserver: VisibilityObserver;\n private destroy$ = new Subject<void>();\n\n constructor(\n private el: ElementRef,\n public zone: NgZone,\n public cd: ChangeDetectorRef,\n private layoutService: LayoutService\n ) {}\n\n @Input()\n groupResultsBy: (node: any) => string = node => node.label;\n\n /**\n * Get the current zoom level\n */\n get zoomLevel() {\n return this.transformationMatrix.a;\n }\n\n /**\n * Set the current zoom level\n */\n @Input('zoomLevel')\n set zoomLevel(level) {\n this.zoomTo(Number(level));\n }\n\n /**\n * Get the current `x` position of the graph\n */\n get panOffsetX() {\n return this.transformationMatrix.e;\n }\n\n /**\n * Set the current `x` position of the graph\n */\n @Input('panOffsetX')\n set panOffsetX(x) {\n this.panTo(Number(x), null);\n }\n\n /**\n * Get the current `y` position of the graph\n */\n get panOffsetY() {\n return this.transformationMatrix.f;\n }\n\n /**\n * Set the current `y` position of the graph\n */\n @Input('panOffsetY')\n set panOffsetY(y) {\n this.panTo(null, Number(y));\n }\n\n /**\n * Angular lifecycle event\n *\n *\n * @memberOf GraphComponent\n */\n ngOnInit(): void {\n if (this.update$) {\n this.update$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.update();\n });\n }\n\n if (this.center$) {\n this.center$.pipe(takeUntil(this.destroy$)).subscribe(() => {\n this.center();\n });\n }\n\n if (this.zoomToFit$) {\n this.zoomToFit$.pipe(takeUntil(this.destroy$)).subscribe(options => {\n this.zoomToFit(options ? options : {});\n });\n }\n\n if (this.panToNode$) {\n this.panToNode$.pipe(takeUntil(this.destroy$)).subscribe((nodeId: string) => {\n this.panToNodeId(nodeId);\n });\n }\n\n this.minimapClipPathId = `minimapClip${id()}`;\n this.stateChange.emit({ state: NgxGraphStates.Subscribe });\n }\n\n ngOnChanges(changes: SimpleChanges): void {\n this.basicUpdate();\n const { layoutSettings } = changes;\n this.setLayout(this.layout);\n if (layoutSettings) {\n this.setLayoutSettings(this.layoutSettings);\n }\n if (this.layout && this.nodes.length && this.links.length) {\n this.update();\n }\n }\n\n setLayout(layout: string | Layout): void {\n this.initialized = false;\n if (!layout) {\n layout = 'dagre';\n }\n if (typeof layout === 'string') {\n this.layout = this.layoutService.getLayout(layout);\n this.setLayoutSettings(this.layoutSettings);\n }\n }\n\n setLayoutSettings(settings: any): void {\n if (this.layout && typeof this.layout !== 'string') {\n this.layout.settings = settings;\n }\n }\n\n /**\n * Angular lifecycle event\n *\n *\n * @memberOf GraphComponent\n */\n ngOnDestroy(): void {\n this.unbindEvents();\n if (this.visibilityObserver) {\n this.visibilityObserver.visible.unsubscribe();\n this.visibilityObserver.destroy();\n }\n this.destroy$.next();\n this.destroy$.complete();\n }\n\n /**\n * Angular lifecycle event\n *\n *\n * @memberOf GraphComponent\n */\n ngAfterViewInit(): void {\n this.bindWindowResizeEvent();\n\n // listen for visibility of the element for hidden by default scenario\n this.visibilityObserver = new VisibilityObserver(this.el, this.zone);\n this.visibilityObserver.visible.subscribe(this.update.bind(this));\n\n setTimeout(() => this.update());\n }\n\n /**\n * Base class update implementation for the dag graph\n *\n * @memberOf GraphComponent\n */\n update(): void {\n this.basicUpdate();\n if (!this.curve) {\n this.curve = shape.curveBundle.beta(1);\n }\n\n this.zone.run(() => {\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height\n });\n\n this.seriesDomain = this.getSeriesDomain();\n this.setColors();\n\n this.createGraph();\n this.updateTransform();\n if (!this.initialized) {\n this.stateChange.emit({ state: NgxGraphStates.Init });\n }\n this.initialized = true;\n });\n }\n\n /**\n * Creates the dagre graph engine\n *\n * @memberOf GraphComponent\n */\n createGraph(): void {\n this.graphSubscription.unsubscribe();\n this.graphSubscription = new Subscription();\n const initializeNode = (n: Node) => {\n if (!n.meta) {\n n.meta = {};\n }\n if (!n.id) {\n n.id = id();\n }\n if (!n.dimension) {\n n.dimension = {\n width: this.nodeWidth ? this.nodeWidth : 30,\n height: this.nodeHeight ? this.nodeHeight : 30\n };\n n.meta.forceDimensions = false;\n } else {\n n.meta.forceDimensions = n.meta.forceDimensions === undefined ? true : n.meta.forceDimensions;\n }\n if (!n.position) {\n n.position = {\n x: 0,\n y: 0\n };\n if (this.deferDisplayUntilPosition) {\n n.hidden = true;\n }\n }\n n.data = n.data ? n.data : {};\n return n;\n };\n\n const initializeEdge = (e: Edge) => {\n if (!e.id) {\n e.id = id();\n }\n return e;\n };\n\n this.graph = {\n nodes: this.nodes.map(n => initializeNode(n)),\n clusters: this.clusters.map(n => initializeNode(n)),\n compoundNodes: this.compoundNodes.map(n => initializeNode(n)),\n edges: this.links.map(e => initializeEdge(e))\n };\n\n requestAnimationFrame(() => this.draw());\n }\n\n /**\n * Draws the graph using dagre layouts\n *\n *\n * @memberOf GraphComponent\n */\n draw(): void {\n // Recalculate the layout\n const result = (this.layout as Layout).run(this.graph);\n const result$ = result instanceof Observable ? result : of(result);\n this.graphSubscription.add(\n result$.subscribe(graph => {\n this.graph = graph;\n this.tick();\n })\n );\n }\n\n tick() {\n // Transposes view options to the node\n const oldNodes: Set<string> = new Set();\n const oldClusters: Set<string> = new Set();\n const oldCompoundNodes: Set<string> = new Set();\n\n this.graph.nodes.forEach(n => {\n n.transform = `translate(${n.position.x - (this.centerNodesOnPositionChange ? n.dimension.width / 2 : 0) || 0}, ${\n n.position.y - (this.centerNodesOnPositionChange ? n.dimension.height / 2 : 0) || 0\n })`;\n if (!n.data) {\n n.data = {};\n }\n n.data.color = this.colors.getColor(this.groupResultsBy(n));\n if (this.deferDisplayUntilPosition) {\n n.hidden = false;\n }\n oldNodes.add(n.id);\n });\n\n (this.graph.clusters || []).forEach(n => {\n n.transform = `translate(${n.position.x - (this.centerNodesOnPositionChange ? n.dimension.width / 2 : 0) || 0}, ${\n n.position.y - (this.centerNodesOnPositionChange ? n.dimension.height / 2 : 0) || 0\n })`;\n if (!n.data) {\n n.data = {};\n }\n n.data.color = this.colors.getColor(this.groupResultsBy(n));\n if (this.deferDisplayUntilPosition) {\n n.hidden = false;\n }\n oldClusters.add(n.id);\n });\n\n (this.graph.compoundNodes || []).forEach(n => {\n n.transform = `translate(${n.position.x - (this.centerNodesOnPositionChange ? n.dimension.width / 2 : 0) || 0}, ${\n n.position.y - (this.centerNodesOnPositionChange ? n.dimension.height / 2 : 0) || 0\n })`;\n if (!n.data) {\n n.data = {};\n }\n n.data.color = this.colors.getColor(this.groupResultsBy(n));\n if (this.deferDisplayUntilPosition) {\n n.hidden = false;\n }\n oldCompoundNodes.add(n.id);\n });\n\n // Prevent animations on new nodes\n setTimeout(() => {\n this.oldNodes = oldNodes;\n this.oldClusters = oldClusters;\n this.oldCompoundNodes = oldCompoundNodes;\n }, 500);\n\n // Update the labels to the new positions\n const newLinks = [];\n for (const edgeLabelId in this.graph.edgeLabels) {\n const edgeLabel = this.graph.edgeLabels[edgeLabelId];\n\n const normKey = edgeLabelId.replace(/[^\\w-]*/g, '');\n\n const isMultigraph =\n this.layout && typeof this.layout !== 'string' && this.layout.settings && this.layout.settings.multigraph;\n\n let oldLink = isMultigraph\n ? this._oldLinks.find(ol => `${ol.source}${ol.target}${ol.id}` === normKey)\n : this._oldLinks.find(ol => `${ol.source}${ol.target}` === normKey);\n\n const linkFromGraph = isMultigraph\n ? this.graph.edges.find(nl => `${nl.source}${nl.target}${nl.id}` === normKey)\n : this.graph.edges.find(nl => `${nl.source}${nl.target}` === normKey);\n\n if (!oldLink) {\n oldLink = linkFromGraph || edgeLabel;\n } else if (\n oldLink.data &&\n linkFromGraph &&\n linkFromGraph.data &&\n JSON.stringify(oldLink.data) !== JSON.stringify(linkFromGraph.data)\n ) {\n // Compare old link to new link and replace if not equal\n oldLink.data = linkFromGraph.data;\n }\n\n oldLink.oldLine = oldLink.line;\n\n const points = edgeLabel.points;\n const line = this.generateLine(points);\n\n const newLink = Object.assign({}, oldLink);\n newLink.line = line;\n newLink.points = points;\n\n this.updateMidpointOnEdge(newLink, points);\n\n const textPos = points[Math.floor(points.length / 2)];\n if (textPos) {\n newLink.textTransform = `translate(${textPos.x || 0},${textPos.y || 0})`;\n }\n\n newLink.textAngle = 0;\n if (!newLink.oldLine) {\n newLink.oldLine = newLink.line;\n }\n\n this.calcDominantBaseline(newLink);\n newLinks.push(newLink);\n }\n\n this.graph.edges = newLinks;\n\n // Map the old links for animations\n if (this.graph.edges) {\n this._oldLinks = this.graph.edges.map(l => {\n const newL = Object.assign({}, l);\n newL.oldLine = l.line;\n return newL;\n });\n }\n\n this.applyNodeDimensions();\n this.redrawLines();\n this.updateMinimap();\n\n requestAnimationFrame(() => {\n this.applyNodeDimensions();\n this.redrawLines();\n this.updateMinimap();\n\n if (this.autoZoom) {\n this.zoomToFit({ autoCenter: this.autoCenter ? this.autoCenter : false });\n } else if (this.autoCenter) {\n // Auto-center when rendering\n this.center();\n }\n this.stateChange.emit({ state: NgxGraphStates.Output });\n });\n\n this.cd.markForCheck();\n }\n\n getMinimapTransform(): string {\n switch (this.miniMapPosition) {\n case MiniMapPosition.UpperLeft: {\n return '';\n }\n case MiniMapPosition.UpperRight: {\n return 'translate(' + (this.dims.width - this.graphDims.width / this.minimapScaleCoefficient) + ',' + 0 + ')';\n }\n default: {\n return '';\n }\n }\n }\n\n updateGraphDims() {\n let minX = +Infinity;\n let maxX = -Infinity;\n let minY = +Infinity;\n let maxY = -Infinity;\n\n for (let i = 0; i < this.graph.nodes.length; i++) {\n const node = this.graph.nodes[i];\n minX = node.position.x < minX ? node.position.x : minX;\n minY = node.position.y < minY ? node.position.y : minY;\n maxX = node.position.x + node.dimension.width > maxX ? node.position.x + node.dimension.width : maxX;\n maxY = node.position.y + node.dimension.height > maxY ? node.position.y + node.dimension.height : maxY;\n }\n minX -= 100;\n minY -= 100;\n maxX += 100;\n maxY += 100;\n this.graphDims.width = maxX - minX;\n this.graphDims.height = maxY - minY;\n this.minimapOffsetX = minX;\n this.minimapOffsetY = minY;\n }\n\n @throttleable(500)\n updateMinimap() {\n // Calculate the height/width total, but only if we have any nodes\n if (this.graph.nodes && this.graph.nodes.length) {\n this.updateGraphDims();\n\n if (this.miniMapMaxWidth) {\n this.minimapScaleCoefficient = this.graphDims.width / this.miniMapMaxWidth;\n }\n if (this.miniMapMaxHeight) {\n this.minimapScaleCoefficient = Math.max(\n this.minimapScaleCoefficient,\n this.graphDims.height / this.miniMapMaxHeight\n );\n }\n\n this.minimapTransform = this.getMinimapTransform();\n }\n }\n\n /**\n * Measures the node element and applies the dimensions\n *\n * @memberOf GraphComponent\n */\n applyNodeDimensions(): void {\n if (this.nodeElements && this.nodeElements.length) {\n this.nodeElements.forEach(elem => {\n const nativeElement = elem.nativeElement;\n const node = this.graph.nodes.find(n => n.id === nativeElement.id);\n if (!node) {\n return;\n }\n\n // calculate the height\n let dims;\n try {\n dims = nativeElement.getBBox();\n if (!dims.width || !dims.height) {\n return;\n }\n } catch (ex) {\n // Skip drawing if element is not displayed - Firefox would throw an error here\n return;\n }\n if (this.nodeHeight) {\n node.dimension.height =\n node.dimension.height && node.meta.forceDimensions ? node.dimension.height : this.nodeHeight;\n } else {\n node.dimension.height =\n node.dimension.height && node.meta.forceDimensions ? node.dimension.height : dims.height;\n }\n\n if (this.nodeMaxHeight) {\n node.dimension.height = Math.max(node.dimension.height, this.nodeMaxHeight);\n }\n if (this.nodeMinHeight) {\n node.dimension.height = Math.min(node.dimension.height, this.nodeMinHeight);\n }\n\n if (this.nodeWidth) {\n node.dimension.width =\n node.dimension.width && node.meta.forceDimensions ? node.dimension.width : this.nodeWidth;\n } else {\n // calculate the width\n if (nativeElement.getElementsByTagName('text').length) {\n let maxTextDims: { width: number; height: number };\n try {\n for (const textElem of nativeElement.getElementsByTagName('text')) {\n const currentBBox = textElem.getBBox();\n if (!maxTextDims) {\n maxTextDims = currentBBox;\n } else {\n if (currentBBox.width > maxTextDims.width) {\n maxTextDims.width = currentBBox.width;\n }\n if (currentBBox.height > maxTextDims.height) {\n maxTextDims.height = currentBBox.height;\n }\n }\n }\n } catch (ex) {\n // Skip drawing if element is not displayed - Firefox would throw an error here\n return;\n }\n node.dimension.width =\n node.dimension.width && node.meta.forceDimensions ? node.dimension.width : maxTextDims.width + 20;\n } else {\n node.dimension.width =\n node.dimension.width && node.meta.forceDimensions ? node.dimension.width : dims.width;\n }\n }\n\n if (this.nodeMaxWidth) {\n node.dimension.width = Math.max(node.dimension.width, this.nodeMaxWidth);\n }\n if (this.nodeMinWidth) {\n node.dimension.width = Math.min(node.dimension.width, this.nodeMinWidth);\n }\n });\n }\n }\n\n /**\n * Redraws the lines when dragged or viewport updated\n *\n * @memberOf GraphComponent\n */\n redrawLines(_animate = this.animate): void {\n this.linkElements?.forEach(linkEl => {\n const edge = this.graph.edges.find(lin => lin.id === linkEl.nativeElement.id);\n\n if (edge) {\n const linkSelection: any = select(linkEl.nativeElement).select('.line');\n linkSelection\n .attr('d', edge.oldLine)\n .transition()\n .ease(ease.easeSinInOut)\n .duration(_animate ? 500 : 0)\n .attr('d', edge.line);\n\n const textPathSelection: any = select(this.el.nativeElement).select(`#${edge.id}`);\n textPathSelection\n .attr('d', edge.oldTextPath)\n .transition()\n .ease(ease.easeSinInOut)\n .duration(_animate ? 500 : 0)\n .attr('d', edge.textPath);\n\n this.updateMidpointOnEdge(edge, edge.points);\n }\n });\n }\n\n /**\n * Calculate the text directions / flipping\n *\n * @memberOf GraphComponent\n */\n calcDominantBaseline(link: any): void {\n const firstPoint = link.points[0];\n const lastPoint = link.points[link.points.length - 1];\n link.oldTextPath = link.textPath;\n\n if (lastPoint.x < firstPoint.x) {\n link.dominantBaseline = 'text-before-edge';\n\n // reverse text path for when its flipped upside down\n link.textPath = this.generateLine([...link.points].reverse());\n } else {\n link.dominantBaseline = 'text-after-edge';\n link.textPath = link.line;\n }\n }\n\n /**\n * Generate the new line path\n *\n * @memberOf GraphComponent\n */\n generateLine(points: any): any {\n const lineFunction = shape\n .line<any>()\n .x(d => d.x)\n .y(d => d.y)\n .curve(this.curve);\n return lineFunction(points);\n }\n\n /**\n * Zoom was invoked from event\n *\n * @memberOf GraphComponent\n */\n onZoom($event: WheelEvent, direction: string): void {\n if (this.enableTrackpadSupport && !$event.ctrlKey) {\n this.pan($event.deltaX * -1, $event.deltaY * -1);\n return;\n }\n\n const zoomFactor = 1 + (direction === 'in' ? this.zoomSpeed : -this.zoomSpeed);\n\n // Check that zooming wouldn't put us out of bounds\n const newZoomLevel = this.zoomLevel * zoomFactor;\n if (newZoomLevel <= this.minZoomLevel || newZoomLevel >= this.maxZoomLevel) {\n return;\n }\n\n // Check if zooming is enabled or not\n if (!this.enableZoom) {\n return;\n }\n\n if (this.panOnZoom === true && $event) {\n // Absolute mouse X/Y on the screen\n const mouseX = $event.clientX;\n const mouseY = $event.clientY;\n\n // Transform the mouse X/Y into a SVG X/Y\n const svg = this.el.nativeElement.querySelector('svg');\n const svgGroup = svg.querySelector('g.chart');\n\n const point = svg.createSVGPoint();\n point.x = mouseX;\n point.y = mouseY;\n const svgPoint = point.matrixTransform(svgGroup.getScreenCTM().inverse());\n\n // Panzoom\n this.pan(svgPoint.x, svgPoint.y, true);\n this.zoom(zoomFactor);\n this.pan(-svgPoint.x, -svgPoint.y, true);\n } else {\n this.zoom(zoomFactor);\n }\n }\n\n /**\n * Pan by x/y\n *\n * @param x\n * @param y\n */\n pan(x: number, y: number, ignoreZoomLevel: boolean = false): void {\n const zoomLevel = ignoreZoomLevel ? 1 : this.zoomLevel;\n this.transformationMatrix = transform(this.transformationMatrix, translate(x / zoomLevel, y / zoomLevel));\n\n this.updateTransform();\n }\n\n /**\n * Pan to a fixed x/y\n *\n */\n panTo(x: number, y: number): void {\n if (x === null || x === undefined || isNaN(x) || y === null || y === undefined || isNaN(y)) {\n return;\n }\n\n const panX = -this.panOffsetX - x * this.zoomLevel + this.dims.width / 2;\n const panY = -this.panOffsetY - y * this.zoomLevel + this.dims.height / 2;\n\n this.transformationMatrix = transform(\n this.transformationMatrix,\n translate(panX / this.zoomLevel, panY / this.zoomLevel)\n );\n\n this.updateTransform();\n }\n\n /**\n * Zoom by a factor\n *\n */\n zoom(factor: number): void {\n this.transformationMatrix = transform(this.transformationMatrix, scale(factor, factor));\n this.zoomChange.emit(this.zoomLevel);\n this.updateTransform();\n }\n\n /**\n * Zoom to a fixed level\n *\n */\n zoomTo(level: number): void {\n this.transformationMatrix.a = isNaN(level) ? this.transformationMatrix.a : Number(level);\n this.transformationMatrix.d = isNaN(level) ? this.transformationMatrix.d : Number(level);\n this.zoomChange.emit(this.zoomLevel);\n if (this.enablePreUpdateTransform) {\n this.updateTransform();\n }\n this.update();\n }\n\n /**\n * Drag was invoked from an event\n *\n * @memberOf GraphComponent\n */\n onDrag(event: MouseEvent): void {\n if (!this.draggingEnabled) {\n return;\n }\n const node = this.draggingNode;\n if (this.layout && typeof this.layout !== 'string' && this.layout.onDrag) {\n this.layout.onDrag(node, event);\n }\n\n node.position.x += event.movementX / this.zoomLevel;\n node.position.y += event.movementY / this.zoomLevel;\n\n // move the node\n const x = node.position.x - (this.centerNodesOnPositionChange ? node.dimension.width / 2 : 0);\n const y = node.position.y - (this.centerNodesOnPositionChange ? node.dimension.height / 2 : 0);\n node.transform = `translate(${x}, ${y})`;\n\n for (const link of this.graph.edges) {\n if (\n link.target === node.id ||\n link.source === node.id ||\n (link.target as any).id === node.id ||\n (link.source as any).id === node.id\n ) {\n if (this.layout && typeof this.layout !== 'string') {\n const result = this.layout.updateEdge(this.graph, link);\n const result$ = result instanceof Observable ? result : of(result);\n this.graphSubscription.add(\n result$.subscribe(graph => {\n this.graph = graph;\n this.redrawEdge(link);\n })\n );\n }\n }\n }\n\n this.redrawLines(false);\n this.updateMinimap();\n }\n\n redrawEdge(edge: Edge) {\n const line = this.generateLine(edge.points);\n this.calcDominantBaseline(edge);\n edge.oldLine = edge.line;\n edge.line = line;\n }\n\n /**\n * Update the entire view for the new pan position\n *\n *\n * @memberOf GraphComponent\n */\n updateTransform(): void {\n this.transform = toSVG(smoothMatrix(this.transformationMatrix, 100));\n this.stateChange.emit({ state: NgxGraphStates.Transform });\n }\n\n /**\n * Node was clicked\n *\n *\n * @memberOf GraphComponent\n */\n onClick(event: any): void {\n this.select.emit(event);\n }\n\n /**\n * Node was focused\n *\n *\n * @memberOf GraphComponent\n */\n onActivate(event): void {\n if (this.activeEntries.indexOf(event) > -1) {\n return;\n }\n this.activeEntries = [event, ...this.activeEntries];\n this.activate.emit({ value: event, entries: this.activeEntries });\n }\n\n /**\n * Node was defocused\n *\n * @memberOf GraphComponent\n */\n onDeactivate(event): void {\n const idx = this.activeEntries.indexOf(event);\n\n this.activeEntries.splice(idx, 1);\n this.activeEntries = [...this.activeEntries];\n\n this.deactivate.emit({ value: event, entries: this.activeEntries });\n }\n\n /**\n * Get the domain series for the nodes\n *\n * @memberOf GraphComponent\n */\n getSeriesDomain(): any[] {\n return this.nodes\n .map(d => this.groupResultsBy(d))\n .reduce((nodes: string[], node): any[] => (nodes.indexOf(node) !== -1 ? nodes : nodes.concat([node])), [])\n .sort();\n }\n\n /**\n * Tracking for the link\n *\n *\n * @memberOf GraphComponent\n */\n trackLinkBy(index: number, link: Edge): any {\n return link.id;\n }\n\n /**\n * Tracking for the node\n *\n *\n * @memberOf GraphComponent\n */\n trackNodeBy(index: number, node: Node): any {\n return node.id;\n }\n\n /**\n * Sets the colors the nodes\n *\n *\n * @memberOf GraphComponent\n */\n setColors(): void {\n this.colors = new ColorHelper(this.scheme, this.seriesDomain, this.customColors);\n }\n\n /**\n * On mouse move event, used for panning and dragging.\n *\n * @memberOf GraphComponent\n */\n @HostListener('document:mousemove', ['$event'])\n onMouseMove($event: MouseEvent): void {\n this.isMouseMoveCalled = true;\n if ((this.isPanning || this.isMinimapPanning) && this.panningEnabled) {\n this.panWithConstraints(this.panningAxis, $event);\n } else if (this.isDragging && this.draggingEnabled) {\n this.onDrag($event);\n }\n }\n\n @HostListener('document:mousedown', ['$event'])\n onMouseDown(event: MouseEvent): void {\n this.isMouseMoveCalled = false;\n }\n\n @HostListener('document:click', ['$event'])\n graphClick(event: MouseEvent): void {\n if (!this.isMouseMoveCalled) this.clickHandler.emit(event);\n }\n\n /**\n * On touch start event to enable panning.\n *\n * @memberOf GraphComponent\n */\n onTouchStart(event: any): void {\n this._touchLastX = event.changedTouches[0].clientX;\n this._touchLastY = event.changedTouches[0].clientY;\n\n this.isPanning = true;\n }\n\n /**\n * On touch move event, used for panning.\n *\n */\n @HostListener('document:touchmove', ['$event'])\n onTouchMove($event: any): void {\n if (this.isPanning && this.panningEnabled) {\n const clientX = $event.changedTouches[0].clientX;\n const clientY = $event.changedTouches[0].clientY;\n const movementX = clientX - this._touchLastX;\n const movementY = clientY - this._touchLastY;\n this._touchLastX = clientX;\n this._touchLastY = clientY;\n\n this.pan(movementX, movementY);\n }\n }\n\n /**\n * On touch end event to disable panning.\n *\n * @memberOf GraphComponent\n */\n onTouchEnd() {\n this.isPanning = false;\n }\n\n /**\n * On mouse up event to disable panning/dragging.\n *\n * @memberOf GraphComponent\n */\n @HostListener('document:mouseup', ['$event'])\n onMouseUp(event: MouseEvent): void {\n this.isDragging = false;\n this.isPanning = false;\n this.isMinimapPanning = false;\n if (this.layout && typeof this.layout !== 'string' && this.layout.onDragEnd) {\n this.layout.onDragEnd(this.draggingNode, event);\n }\n }\n\n /**\n * On node mouse down to kick off dragging\n *\n * @memberOf GraphComponent\n */\n onNodeMouseDown(event: MouseEvent, node: any): void {\n if (!this.draggingEnabled) {\n return;\n }\n this.isDragging = true;\n this.draggingNode = node;\n\n if (this.layout && typeof this.layout !== 'string' && this.layout.onDragStart) {\n this.layout.onDragStart(node, event);\n }\n }\n\n /**\n * On minimap drag mouse down to kick off minimap panning\n *\n * @memberOf GraphComponent\n */\n onMinimapDragMouseDown(): void {\n this.isMinimapPanning = true;\n }\n\n /**\n * On minimap pan event. Pans the graph to the clicked position\n *\n * @memberOf GraphComponent\n */\n onMinimapPanTo(event: MouseEvent): void {\n const x =\n event.offsetX - (this.dims.width - (this.graphDims.width + this.minimapOffsetX) / this.minimapScaleCoefficient);\n const y = event.offsetY + this.minimapOffsetY / this.minimapScaleCoefficient;\n\n this.panTo(x * this.minimapScaleCoefficient, y * this.minimapScaleCoefficient);\n this.isMinimapPanning = true;\n }\n\n /**\n * Center the graph in the viewport\n */\n center(): void {\n this.panTo(this.graphDims.width / 2, this.graphDims.height / 2);\n }\n\n /**\n * Zooms to fit the entire graph\n */\n zoomToFit(zoomOptions?: NgxGraphZoomOptions): void {\n this.dims = calculateViewDimensions({\n width: this.width,\n height: this.height\n });\n this.updateGraphDims();\n const heightZoom = this.dims.height / this.graphDims.height;\n const widthZoom = this.dims.width / this.graphDims.width;\n let zoomLevel = Math.min(heightZoom, widthZoom, 1);\n\n if (zoomLevel < this.minZoomLevel) {\n zoomLevel = this.minZoomLevel;\n }\n\n if (zoomLevel > this.maxZoomLevel) {\n zoomLevel = this.maxZoomLevel;\n }\n\n if (zoomOptions?.force === true || zoomLevel !== this.zoomLevel) {\n this.zoomLevel = zoomLevel;\n\n if (zoomOptions?.autoCenter !== true) {\n this.updateTransform();\n }\n if (zoomOptions?.autoCenter === true) {\n this.center();\n }\n this.zoomChange.emit(this.zoomLevel);\n }\n }\n\n /**\n * Pans to the node\n * @param nodeId\n */\n panToNodeId(nodeId: string): void {\n const node = this.graph.nodes.find(n => n.id === nodeId);\n if (!node) {\n return;\n }\n\n this.panTo(node.position.x, node.position.y);\n }\n\n getCompoundNodeChildren(ids: Array<string>) {\n return this.nodes.filter(node => ids.includes(node.id));\n }\n\n private panWithConstraints(key: string, event: MouseEvent) {\n let x = event.movementX;\n let y = event.movementY;\n if (this.isMinimapPanning) {\n x = -this.minimapScaleCoefficient * x * this.zoomLevel;\n y = -this.minimapScaleCoefficient * y * this.zoomLevel;\n }\n\n switch (key) {\n case PanningAxis.Horizontal:\n this.pan(x, 0);\n break;\n case PanningAxis.Vertical:\n this.pan(0, y);\n break;\n default:\n this.pan(x, y);\n break;\n }\n }\n\n private updateMidpointOnEdge(edge: Edge, points: any): void {\n if (!edge || !points) {\n return;\n }\n\n if (points.length % 2 === 1) {\n edge.midPoint = points[Math.floor(points.length / 2)];\n } else {\n // Checking if the current layout is Elk\n if ((this.layout as Layout)?.settings?.properties?.['elk.direction']) {\n this._calcMidPointElk(edge, points);\n } else {\n const _first = points[points.length / 2];\n const _second = points[points.length / 2 - 1];\n edge.midPoint = {\n x: (_first.x + _second.x) / 2,\n y: (_first.y + _second.y) / 2\n };\n }\n }\n }\n\n private _calcMidPointElk(edge: Edge, points: any): void {\n let _firstX = null;\n let _secondX = null;\n let _firstY = null;\n let _secondY = null;\n const orientation = (this.layout as Layout).settings?.properties['elk.direction'];\n const hasBend =\n orientation === 'RIGHT' ? points.some(p => p.y !== points[0].y) : points.some(p => p.x !== points[0].x);\n\n if (hasBend) {\n // getting the last two points\n _firstX = points[points.length - 1];\n _secondX = points[points.length - 2];\n _firstY = points[points.length - 1];\n _secondY = points[points.length - 2];\n } else {\n if (orientation === 'RIGHT') {\n _firstX = points[0];\n _secondX = points[points.length - 1];\n _firstY = points[points.length / 2];\n _secondY = points[points.length / 2 - 1];\n } else {\n _firstX = points[points.length / 2];\n _secondX = points[points.length / 2 - 1];\n _firstY = points[0];\n _secondY = points[points.length - 1];\n }\n }\n\n edge.midPoint = {\n x: (_firstX.x + _secondX.x) / 2,\n y: (_firstY.y + _secondY.y) / 2\n };\n }\n\n public basicUpdate(): void {\n if (this.view) {\n this.width = this.view[0];\n this.height = this.view[1];\n } else {\n const dims = this.getContainerDims();\n if (dims) {\n this.width = dims.width;\n this.height = dims.height;\n }\n }\n\n // default values if width or height are 0 or undefined\n if (!this.width) {\n this.width = 600;\n }\n\n if (!this.height) {\n this.height = 400;\n }\n\n this.width = Math.floor(this.width);\n this.height = Math.floor(this.height);\n\n if (this.cd) {\n this.cd.markForCheck();\n }\n }\n\n public getContainerDims(): any {\n let width;\n let height;\n const hostElem = this.el.nativeElement;\n\n if (hostElem.parentNode !== null) {\n // Get the container dimensions\n const dims = hostElem.parentNode.getBoundingClientRect();\n width = dims.width;\n height = dims.height;\n }\n\n if (width && height) {\n return { width, height };\n }\n\n return null;\n }\n\n /**\n * Checks if the graph has dimensions\n */\n public hasGraphDims(): boolean {\n return this.graphDims.width > 0 && this.graphDims.height > 0;\n }\n\n /**\n * Checks if all nodes have dimension\n */\n public hasNodeDims(): boolean {\n return this.graph.nodes?.every(node => node.dimension.width > 0 && node.dimension.height > 0);\n }\n\n /**\n * Checks if all compound nodes have dimension\n */\n public hasCompoundNodeDims(): boolean {\n return this.graph.compoundNodes?.every(node => node.dimension.width > 0 && node.dimension.height > 0);\n }\n\n /**\n * Checks if all clusters have dimension\n */\n public hasClusterDims(): boolean {\n return this.graph.clusters?.every(node => node.dimension.width > 0 && node.dimension.height > 0);\n }\n\n /**\n * Checks if the graph and all nodes have dimension.\n */\n public hasDims(): boolean {\n return (\n this.hasGraphDims() &&\n this.hasNodeDims() &&\n ((this.compoundNodes?.length ? this.hasCompoundNodeDims() : true) ||\n (this.clusters?.length ? this.hasClusterDims() : true))\n );\n }\n\n protected unbindEvents(): void {\n if (this.resizeSubscription) {\n this.resizeSubscription.unsubscribe();\n }\n }\n\n private bindWindowResizeEvent(): void {\n const source = observableFromEvent(window, 'resize');\n const subscription = source.pipe(debounceTime(200)).subscribe(e => {\n this.update();\n if (this.cd) {\n this.cd.markForCheck();\n }\n });\n this.resizeSubscription = subscription;\n }\n}\n","<div\n class=\"ngx-graph-outer\"\n [style.width.px]=\"width\"\n [@animationState]=\"'active'\"\n [@.disabled]=\"!animate\"\n (mouseWheelUp)=\"onZoom($event, 'in')\"\n (mouseWheelDown)=\"onZoom($event, 'out')\"\n mouseWheel\n>\n <svg:svg class=\"ngx-graph\" [attr.width]=\"width\" [attr.height]=\"height\">\n @if (initialized && graph) {\n <svg:g\n [attr.transform]=\"transform\"\n (touchstart)=\"onTouchStart($event)\"\n (touchend)=\"onTouchEnd()\"\n class=\"graph chart\"\n >\n <defs>\n @if (defsTemplate) {\n <ng-container [ngTemplateOutlet]=\"defsTemplate\"></ng-container>\n } @for (link of graph.edges; track link) {\n <svg:path class=\"text-path\" [attr.d]=\"link.textPath\" [attr.id]=\"link.id\"></svg:path>\n }\n </defs>\n <svg:rect\n class=\"panning-rect\"\n [attr.width]=\"dims.width * 100\"\n [attr.height]=\"dims.height * 100\"\n [attr.transform]=\"'translate(' + (-dims.width || 0) * 50 + ',' + (-dims.height || 0) * 50 + ')'\"\n (mousedown)=\"isPanning = true\"\n />\n <ng-content></ng-content>\n <svg:g class=\"clusters\">\n @for (node of graph.clusters; track trackNodeBy($index, node)) {\n <svg:g\n #clusterElement\n class=\"node-group\"\n [class.old-node]=\"animate && oldClusters.has(node.id)\"\n [id]=\"node.id\"\n [attr.transform]=\"node.transform\"\n (click)=\"onClick(node)\"\n >\n @if (clusterTemplate && !node.hidden) {\n <ng-container\n [ngTemplateOutlet]=\"clusterTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"\n ></ng-container>\n } @if (!clusterTemplate) {\n <svg:g class=\"node cluster\">\n <svg:rect\n [attr.width]=\"node.dimension.width\"\n [attr.height]=\"node.dimension.height\"\n [attr.fill]=\"node.data?.color\"\n />\n <svg:text alignment-baseline=\"central\" [attr.x]=\"10\" [attr.y]=\"node.dimension.height / 2\">\n {{ node.label }}\n </svg:text>\n </svg:g>\n }\n </svg:g>\n }\n </svg:g>\n <svg:g class=\"compound-nodes\">\n @for (node of graph.compoundNodes; track trackNodeBy($index, node)) {\n <svg:g\n #nodeElement\n class=\"node-group\"\n [class.old-node]=\"animate && oldCompoundNodes.has(node.id)\"\n [id]=\"node.id\"\n [attr.transform]=\"node.transform\"\n (click)=\"onClick(node)\"\n (mousedown)=\"onNodeMouseDown($event, node)\"\n >\n @if (nodeTemplate && !node.hidden) {\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"\n ></ng-container>\n } @if (!nodeTemplate) {\n <svg:g class=\"node compound-node\">\n <svg:rect\n [attr.width]=\"node.dimension.width\"\n [attr.height]=\"node.dimension.height\"\n [attr.fill]=\"node.data?.color\"\n />\n <svg:text alignment-baseline=\"central\" [attr.x]=\"10\" [attr.y]=\"node.dimension.height / 2\">\n {{ node.label }}\n </svg:text>\n </svg:g>\n }\n </svg:g>\n }\n </svg:g>\n <svg:g class=\"links\">\n @for (link of graph.edges; track trackLinkBy($index, link)) {\n <svg:g #linkElement class=\"link-group\" [id]=\"link.id\">\n @if (linkTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"linkTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: link }\"\n ></ng-container>\n } @if (!linkTemplate) {\n <svg:path class=\"edge\" [attr.d]=\"link.line\" />\n }\n </svg:g>\n }\n </svg:g>\n <svg:g class=\"nodes\" #nodeGroup>\n @for (node of graph.nodes; track trackNodeBy($index, node)) {\n <svg:g\n #nodeElement\n class=\"node-group\"\n [class.old-node]=\"animate && oldNodes.has(node.id)\"\n [id]=\"node.id\"\n [attr.transform]=\"node.transform\"\n (click)=\"onClick(node)\"\n (mousedown)=\"onNodeMouseDown($event, node)\"\n >\n @if (nodeTemplate && !node.hidden) {\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"\n ></ng-container>\n } @if (!nodeTemplate) {\n <svg:circle\n r=\"10\"\n [attr.cx]=\"node.dimension.width / 2\"\n [attr.cy]=\"node.dimension.height / 2\"\n [attr.fill]=\"node.data?.color\"\n />\n }\n </svg:g>\n }\n </svg:g>\n </svg:g>\n }\n\n <svg:clipPath [attr.id]=\"minimapClipPathId\">\n <svg:rect\n [attr.width]=\"graphDims.width / minimapScaleCoefficient\"\n [attr.height]=\"graphDims.height / minimapScaleCoefficient\"\n ></svg:rect>\n </svg:clipPath>\n\n @if (showMiniMap) {\n <svg:g class=\"minimap\" [attr.transform]=\"minimapTransform\" [attr.clip-path]=\"'url(#' + minimapClipPathId + ')'\">\n <svg:rect\n class=\"minimap-background\"\n [attr.width]=\"graphDims.width / minimapScaleCoefficient\"\n [attr.height]=\"graphDims.height / minimapScaleCoefficient\"\n (mousedown)=\"onMinimapPanTo($event)\"\n ></svg:rect>\n <svg:g\n [style.transform]=\"\n 'translate(' +\n -minimapOffsetX / minimapScaleCoefficient +\n 'px,' +\n -minimapOffsetY / minimapScaleCoefficient +\n 'px)'\n \"\n >\n <svg:g class=\"minimap-nodes\" [style.transform]=\"'scale(' + 1 / minimapScaleCoefficient + ')'\">\n @for (node of graph.nodes; track trackNodeBy($index, node)) {\n <svg:g\n #nodeElement\n class=\"node-group\"\n [class.old-node]=\"animate && oldNodes.has(node.id)\"\n [id]=\"node.id\"\n [attr.transform]=\"node.transform\"\n >\n @if (miniMapNodeTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"miniMapNodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"\n ></ng-container>\n } @if (!miniMapNodeTemplate && nodeTemplate) {\n <ng-container\n [ngTemplateOutlet]=\"nodeTemplate\"\n [ngTemplateOutletContext]=\"{ $implicit: node }\"\n ></ng-container>\n } @if (!nodeTemplate && !miniMapNodeTemplate) {\n <svg:circle\n r=\"10\"\n [attr.cx]=\"node.dimension.width / 2 / minimapScaleCoefficient\"\n [attr.cy]=\"node.dimension.height / 2 / minimapScaleCoefficient\"\n [attr.fill]=\"node.data?.color\"\n />\n }\n </svg:g>\n }\n </svg:g>\n <svg:rect\n [attr.transform]=\"\n 'translate(' +\n panOffsetX / zoomLevel / -minimapScaleCoefficient +\n ',' +\n panOffsetY / zoomLevel / -minimapScaleCoefficient +\n ')'\n \"\n class=\"minimap-drag\"\n [class.panning]=\"isMinimapPanning\"\n [attr.width]=\"width / minimapScaleCoefficient / zoomLevel\"\n [attr.height]=\"height / minimapScaleCoefficient / zoomLevel\"\n (mousedown)=\"onMinimapDragMouseDown()\"\n ></svg:rect>\n </svg:g>\n </svg:g>\n }\n </svg:svg>\n</div>\n","import { NgModule } from '@angular/core';\nimport { GraphComponent } from './graph.component';\nimport { MouseWheelDirective } from './mouse-wheel.directive';\nimport { LayoutService } from './layouts/layout.service';\nimport { CommonModule } from '@angular/common';\nimport { VisibilityObserver } from '../utils/visibility-observer';\nexport { GraphComponent, LayoutService };\n\n@NgModule({\n imports: [CommonModule],\n declarations: [GraphComponent, MouseWheelDirective, VisibilityObserver],\n exports: [GraphComponent, MouseWheelDirective],\n providers: [LayoutService]\n})\nexport class GraphModule {}\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { GraphModule } from './graph/graph.module';\n\n@NgModule({\n imports: [CommonModule],\n exports: [GraphModule]\n})\nexport class NgxGraphModule {}\n","/*\n * Public API Surface of ngx-graph\n */\n\nexport * from './lib/ngx-graph.module';\n\nexport * from './lib/models/edge.model';\nexport * from './lib/models/graph.model';\nexport * from './lib/models/layout.model';\nexport * from './lib/models/node.model';\n\nexport * from './lib/graph/graph.component';\nexport * from './lib/graph/graph.module';\n\nexport * from './lib/graph/mouse-wheel.directive';\nexport * from './lib/graph/layouts/colaForceDirected';\nexport * from './lib/graph/layouts/customLayouts';\nexport * from './lib/graph/layouts/d3ForceDirected';\nexport * from './lib/graph/layouts/dagre';\nexport * from './lib/graph/layouts/dagreCluster';\nexport * from './lib/graph/layouts/dagreNodesOnly';\n\nexport * from './lib/enums/mini-map-position.enum';\nexport * from './lib/enums/panning.enum';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public_api';\n"],"names":["observableFromEvent","i1.LayoutService","i3.MouseWheelDirective","ngTransition"],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,60 @@
1
+ {
2
+ "name": "@onealmonddotcom/ngx-graph",
3
+ "version": "12.0.0-alpha.0",
4
+ "description": "Graph visualization for angular - forked from ngx-graph by swimlane",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "git+https://github.com/Username26/ngx-graph.git"
8
+ },
9
+ "keywords": [
10
+ "angular",
11
+ "graph",
12
+ "viz",
13
+ "svg",
14
+ "dataviz",
15
+ "visualization",
16
+ "tree",
17
+ "force-directed",
18
+ "directed acyclic graph",
19
+ "dag"
20
+ ],
21
+ "author": "Username26",
22
+ "license": "MIT",
23
+ "bugs": {
24
+ "url": "https://github.com/Username26/ngx-graph/issues"
25
+ },
26
+ "homepage": "https://github.com/Username26/ngx-graph#readme",
27
+ "peerDependencies": {
28
+ "@angular/animations": "18.x || 19.x || 20.x",
29
+ "@angular/common": "18.x || 19.x || 20.x",
30
+ "@angular/core": "18.x || 19.x || 20.x",
31
+ "@angular/cdk": "18.x || 19.x || 20.x",
32
+ "rxjs": "7.x"
33
+ },
34
+ "dependencies": {
35
+ "d3-dispatch": "^3.0.1",
36
+ "d3-ease": "^3.0.1",
37
+ "d3-force": "^3.0.0",
38
+ "d3-scale": "^4.0.2",
39
+ "d3-selection": "^3.0.0",
40
+ "d3-shape": "^3.2.0",
41
+ "d3-timer": "^3.0.1",
42
+ "d3-transition": "^3.0.1",
43
+ "dagre": "^0.8.5",
44
+ "transformation-matrix": "^2.16.1",
45
+ "tslib": "^2.3.1",
46
+ "webcola": "^3.4.0"
47
+ },
48
+ "module": "fesm2022/onealmonddotcom-ngx-graph.mjs",
49
+ "typings": "types/onealmonddotcom-ngx-graph.d.ts",
50
+ "exports": {
51
+ "./package.json": {
52
+ "default": "./package.json"
53
+ },
54
+ ".": {
55
+ "types": "./types/onealmonddotcom-ngx-graph.d.ts",
56
+ "default": "./fesm2022/onealmonddotcom-ngx-graph.mjs"
57
+ }
58
+ },
59
+ "sideEffects": false
60
+ }