{"version":3,"file":"swimlane-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/swimlane-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(private element: ElementRef, private zone: NgZone) {\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    <svg:g\n      *ngIf=\"initialized && graph\"\n      [attr.transform]=\"transform\"\n      (touchstart)=\"onTouchStart($event)\"\n      (touchend)=\"onTouchEnd()\"\n      class=\"graph chart\"\n    >\n      <defs>\n        <ng-container *ngIf=\"defsTemplate\" [ngTemplateOutlet]=\"defsTemplate\"></ng-container>\n        <svg:path\n          class=\"text-path\"\n          *ngFor=\"let link of graph.edges\"\n          [attr.d]=\"link.textPath\"\n          [attr.id]=\"link.id\"\n        ></svg:path>\n      </defs>\n\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\n      <ng-content></ng-content>\n\n      <svg:g class=\"clusters\">\n        <svg:g\n          #clusterElement\n          *ngFor=\"let node of graph.clusters; trackBy: trackNodeBy\"\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          <ng-container\n            *ngIf=\"clusterTemplate && !node.hidden\"\n            [ngTemplateOutlet]=\"clusterTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: node }\"\n          ></ng-container>\n          <svg:g *ngIf=\"!clusterTemplate\" 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        </svg:g>\n      </svg:g>\n\n      <svg:g class=\"compound-nodes\">\n        <svg:g\n          #nodeElement\n          *ngFor=\"let node of graph.compoundNodes; trackBy: trackNodeBy\"\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          <ng-container\n            *ngIf=\"nodeTemplate && !node.hidden\"\n            [ngTemplateOutlet]=\"nodeTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: node }\"\n          ></ng-container>\n          <svg:g *ngIf=\"!nodeTemplate\" 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        </svg:g>\n      </svg:g>\n\n      <svg:g class=\"links\">\n        <svg:g #linkElement *ngFor=\"let link of graph.edges; trackBy: trackLinkBy\" class=\"link-group\" [id]=\"link.id\">\n          <ng-container\n            *ngIf=\"linkTemplate\"\n            [ngTemplateOutlet]=\"linkTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: link }\"\n          ></ng-container>\n          <svg:path *ngIf=\"!linkTemplate\" class=\"edge\" [attr.d]=\"link.line\" />\n        </svg:g>\n      </svg:g>\n\n      <svg:g class=\"nodes\" #nodeGroup>\n        <svg:g\n          #nodeElement\n          *ngFor=\"let node of graph.nodes; trackBy: trackNodeBy\"\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          <ng-container\n            *ngIf=\"nodeTemplate && !node.hidden\"\n            [ngTemplateOutlet]=\"nodeTemplate\"\n            [ngTemplateOutletContext]=\"{ $implicit: node }\"\n          ></ng-container>\n          <svg:circle\n            *ngIf=\"!nodeTemplate\"\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        </svg:g>\n      </svg:g>\n    </svg:g>\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    <svg:g\n      class=\"minimap\"\n      *ngIf=\"showMiniMap\"\n      [attr.transform]=\"minimapTransform\"\n      [attr.clip-path]=\"'url(#' + minimapClipPathId + ')'\"\n    >\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\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          <svg:g\n            #nodeElement\n            *ngFor=\"let node of graph.nodes; trackBy: trackNodeBy\"\n            class=\"node-group\"\n            [class.old-node]=\"animate && oldNodes.has(node.id)\"\n            [id]=\"node.id\"\n            [attr.transform]=\"node.transform\"\n          >\n            <ng-container\n              *ngIf=\"miniMapNodeTemplate\"\n              [ngTemplateOutlet]=\"miniMapNodeTemplate\"\n              [ngTemplateOutletContext]=\"{ $implicit: node }\"\n            ></ng-container>\n            <ng-container\n              *ngIf=\"!miniMapNodeTemplate && nodeTemplate\"\n              [ngTemplateOutlet]=\"nodeTemplate\"\n              [ngTemplateOutletContext]=\"{ $implicit: node }\"\n            ></ng-container>\n            <svg:circle\n              *ngIf=\"!nodeTemplate && !miniMapNodeTemplate\"\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          </svg:g>\n        </svg:g>\n\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  </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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"}